From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (qmail 29732 invoked from network); 14 Nov 2022 15:12:12 -0000 Received: from localhost (HELO inbox.vuxu.org) (::1) by localhost with ESMTPUTF8; 14 Nov 2022 15:12:12 -0000 Content-Type: multipart/mixed; boundary="===============1028639451498081407==" MIME-Version: 1.0 Subject: =?utf8?b?UmU6IFtQUiBQQVRDSF0gW1VwZGF0ZWRdIG1wdi0wLjM1LjA=?= To: ml@inbox.vuxu.org From: sgn Reply-to: ml@inbox.vuxu.org In-Reply-To: References: Date: Mon, 14 Nov 2022 16:12:11 +0100 List-Id: Message-ID: <20221114151211.ebJkTpOCz01VGjzJRGyD3RhO_AP0Q1wDLdY61VLezBU@z> GitHub notification mails are now in MIME to allow UTF8. --===============1028639451498081407== Content-Type: text/plain; charset="utf8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGhlcmUgaXMgYW4gdXBkYXRlZCBwdWxsIHJlcXVlc3QgYnkgc2duIGFnYWluc3QgbWFzdGVyIG9u IHRoZSB2b2lkLXBhY2thZ2VzIHJlcG9zaXRvcnkKCmh0dHBzOi8vZ2l0aHViLmNvbS9hYmVuc29u L3ZvaWQtcGFja2FnZXMgbXB2XzAuMzUuMApodHRwczovL2dpdGh1Yi5jb20vdm9pZC1saW51eC92 b2lkLXBhY2thZ2VzL3B1bGwvNDA0OTcKCm1wdi0wLjM1LjAKIyMjIyBUZXN0aW5nIHRoZSBjaGFu Z2VzDQotIEkgdGVzdGVkIHRoZSBjaGFuZ2VzIGluIHRoaXMgUFI6ICoqYnJpZWZseSoqDQoNCiMj IyMgTG9jYWwgYnVpbGQgdGVzdGluZw0KLSBJIGJ1aWx0IHRoaXMgUFIgbG9jYWxseSBmb3IgbXkg bmF0aXZlIGFyY2hpdGVjdHVyZSwgeDg2LTY0DQoNCltjaSBza2lwXQoKQSBwYXRjaCBmaWxlIGZy b20gaHR0cHM6Ly9naXRodWIuY29tL3ZvaWQtbGludXgvdm9pZC1wYWNrYWdlcy9wdWxsLzQwNDk3 LnBhdGNoIGlzIGF0dGFjaGVk --===============1028639451498081407== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-mpv_0.35.0-40497.patch" RnJvbSA4NTk4M2NhOGUxYTA0NjU4MTYwNzY5MjM5NTk5ZDQwODEzMTUwNDBiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgQmVuc29uIDxhYmVuc29uK3ZvaWRAZ21haWwuY29t PgpEYXRlOiBTYXQsIDEyIE5vdiAyMDIyIDE2OjA2OjA1IC0wNjAwClN1YmplY3Q6IFtQQVRDSCAx LzldIG1wdjogdXBkYXRlIHRvIDAuMzUuMC4KCi0tLQogY29tbW9uL3NobGlicyAgICAgICAgfCAg MiArLQogc3JjcGtncy9tcHYvdGVtcGxhdGUgfCA1NyArKysrKysrKysrKysrKysrKysrKysrKyst LS0tLS0tLS0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspLCAy NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb21tb24vc2hsaWJzIGIvY29tbW9uL3NobGli cwppbmRleCA0ODEyNTBkNWM5MjQuLmFhMWJiYWZiMWJiYSAxMDA2NDQKLS0tIGEvY29tbW9uL3No bGlicworKysgYi9jb21tb24vc2hsaWJzCkBAIC0yMjE0LDcgKzIyMTQsNyBAQCBsaWJycmQuc28u OCBycmR0b29sLTEuNi4wXzEKIGxpYnJyZF90aC5zby40IHJyZHRvb2wtMS40LjlfMQogbGlibW9z cXVpdHRvLnNvLjEgbGlibW9zcXVpdHRvLTEuNi4zXzUKIGxpYm1vc3F1aXR0b3BwLnNvLjEgbGli bW9zcXVpdHRvcHAtMS42LjNfNQotbGlibXB2LnNvLjEgbXB2LTAuOC4wXzIKK2xpYm1wdi5zby4y IG1wdi0wLjM1LjBfMQogbGlibWJlZHRscy5zby4xMiBtYmVkdGxzLTIuMTMuMV8xCiBsaWJtYmVk Y3J5cHRvLnNvLjMgbWJlZHRscy0yLjkuMF8xCiBsaWJtYmVkeDUwOS5zby4wIG1iZWR0bHMtMi45 LjBfMQpkaWZmIC0tZ2l0IGEvc3JjcGtncy9tcHYvdGVtcGxhdGUgYi9zcmNwa2dzL21wdi90ZW1w bGF0ZQppbmRleCBkZWQ4YzFiYmU5OGYuLjBlM2MzZWQ4ZjgxYyAxMDA2NDQKLS0tIGEvc3JjcGtn cy9tcHYvdGVtcGxhdGUKKysrIGIvc3JjcGtncy9tcHYvdGVtcGxhdGUKQEAgLTEsMTUgKzEsMjYg QEAKICMgVGVtcGxhdGUgZmlsZSBmb3IgJ21wdicKIHBrZ25hbWU9bXB2Ci12ZXJzaW9uPTAuMzQu MQotcmV2aXNpb249MgotYnVpbGRfc3R5bGU9d2FmMwotY29uZmlndXJlX2FyZ3M9Ii0tY29uZmRp cj0vZXRjL21wdiAtLWRvY2Rpcj0vdXNyL3NoYXJlL2V4YW1wbGVzL21wdgotIC0tZW5hYmxlLWNk ZGEgLS1lbmFibGUtZHZiaW4gLS1lbmFibGUtZHZkbmF2IC0tZW5hYmxlLWxpYmFyY2hpdmUKLSAt LWVuYWJsZS1saWJtcHYtc2hhcmVkIC0tZW5hYmxlLWNwbHVnaW5zICQodm9wdF9lbmFibGUgYWxz YSkgJCh2b3B0X2VuYWJsZSBjYWNhKQotICQodm9wdF9lbmFibGUgamFjaykgJCh2b3B0X2VuYWJs ZSBsY21zIGxjbXMyKSAkKHZvcHRfZW5hYmxlIGx1YSkKLSAkKHZvcHRfZW5hYmxlIG9wZW5hbCkg JCh2b3B0X2VuYWJsZSBwdWxzZWF1ZGlvIHB1bHNlKSAkKHZvcHRfZW5hYmxlIHNkbDIpCi0gJCh2 b3B0X2VuYWJsZSB2YXBvdXJzeW50aCkgJCh2b3B0X2VuYWJsZSB2ZHBhdSkgJCh2b3B0X2VuYWJs ZSB2dWxrYW4pCi0gJCh2b3B0X2VuYWJsZSB2dWxrYW4gc2hhZGVyYykgJCh2b3B0X2VuYWJsZSB3 YXlsYW5kKSAkKHZvcHRfZW5hYmxlIHgxMSkiCit2ZXJzaW9uPTAuMzUuMAorcmV2aXNpb249MQor YnVpbGRfc3R5bGU9bWVzb24KK2NvbmZpZ3VyZV9hcmdzPSItRGNkZGE9ZW5hYmxlZCAtRGR2Ymlu PWVuYWJsZWQgLURkdmRuYXY9ZW5hYmxlZAorIC1EbGlibXB2PXRydWUgLURjcGx1Z2lucz1lbmFi bGVkCisgLURhbHNhPSQodm9wdF9pZiBhbHNhIGVuYWJsZWQgZGlzYWJsZWQpCisgLURjYWNhPSQo dm9wdF9pZiBjYWNhIGVuYWJsZWQgZGlzYWJsZWQpCisgLURqYWNrPSQodm9wdF9pZiBqYWNrIGVu YWJsZWQgZGlzYWJsZWQpCisgLURsY21zMj0kKHZvcHRfaWYgbGNtcyBlbmFibGVkIGRpc2FibGVk KQorIC1EbHVhPSQodm9wdF9pZiBsdWEgZW5hYmxlZCBkaXNhYmxlZCkKKyAtRG9wZW5hbD0kKHZv cHRfaWYgb3BlbmFsIGVuYWJsZWQgZGlzYWJsZWQpCisgLURwdWxzZT0kKHZvcHRfaWYgcHVsc2Vh dWRpbyBlbmFibGVkIGRpc2FibGVkKQorIC1Ec2RsMj0kKHZvcHRfaWYgc2RsMiBlbmFibGVkIGRp c2FibGVkKQorIC1EdmFwb3Vyc3ludGg9JCh2b3B0X2lmIHZhcG91cnN5bnRoIGVuYWJsZWQgZGlz YWJsZWQpCisgLUR2ZHBhdT0kKHZvcHRfaWYgdmRwYXUgZW5hYmxlZCBkaXNhYmxlZCkKKyAtRHZ1 bGthbj0kKHZvcHRfaWYgdnVsa2FuIGVuYWJsZWQgZGlzYWJsZWQpCisgLURzaGFkZXJjPSQodm9w dF9pZiB2dWxrYW4gZW5hYmxlZCBkaXNhYmxlZCkKKyAtRHdheWxhbmQ9JCh2b3B0X2lmIHdheWxh bmQgZW5hYmxlZCBkaXNhYmxlZCkKKyAtRHgxMT0kKHZvcHRfaWYgeDExIGVuYWJsZWQgZGlzYWJs ZWQpCisgLURwaXBld2lyZT0kKHZvcHRfaWYgcGlwZXdpcmUgZW5hYmxlZCBkaXNhYmxlZCkKKyAt RHNuZGlvPSQodm9wdF9pZiBzbmRpbyBlbmFibGVkIGRpc2FibGVkKSIKIGhvc3RtYWtlZGVwZW5k cz0icGtnLWNvbmZpZyBweXRob24zLWRvY3V0aWxzICQodm9wdF9pZiB3YXlsYW5kIHdheWxhbmQt ZGV2ZWwpIgogbWFrZWRlcGVuZHM9Ik1lc2FMaWItZGV2ZWwgZmZtcGVnLWRldmVsIGhhcmZidXp6 LWRldmVsIGxpYlh2LWRldmVsCiAgbGliYXNzLWRldmVsIGxpYmJsdXJheS1kZXZlbCBsaWJjZGlv LXBhcmFub2lhLWRldmVsIGxpYmR2ZG5hdi1kZXZlbApAQCAtMTcsMTEgKzI4LDEyIEBAIG1ha2Vk ZXBlbmRzPSJNZXNhTGliLWRldmVsIGZmbXBlZy1kZXZlbCBoYXJmYnV6ei1kZXZlbCBsaWJYdi1k ZXZlbAogIGxpYmFyY2hpdmUtZGV2ZWwgJCh2b3B0X2lmIGFsc2EgYWxzYS1saWItZGV2ZWwpICQo dm9wdF9pZiBjYWNhIGxpYmNhY2EtZGV2ZWwpCiAgJCh2b3B0X2lmIGphY2sgamFjay1kZXZlbCkg JCh2b3B0X2lmIGxjbXMgbGNtczItZGV2ZWwpCiAgJCh2b3B0X2lmIGx1YSBsdWE1Mi1kZXZlbCkg JCh2b3B0X2lmIG9wZW5hbCBsaWJvcGVuYWwtZGV2ZWwpCi0gJCh2b3B0X2lmIHB1bHNlYXVkaW8g cHVsc2VhdWRpby1kZXZlbCkgJCh2b3B0X2lmIHNkbDIgU0RMMi1kZXZlbCkKLSAkKHZvcHRfaWYg dmFwb3Vyc3ludGggdmFwb3Vyc3ludGgtZGV2ZWwpICQodm9wdF9pZiB2ZHBhdSBsaWJ2ZHBhdS1k ZXZlbCkKKyAkKHZvcHRfaWYgcHVsc2VhdWRpbyBwdWxzZWF1ZGlvLWRldmVsKSAkKHZvcHRfaWYg cGlwZXdpcmUgcGlwZXdpcmUtZGV2ZWwpCisgJCh2b3B0X2lmIHNkbDIgU0RMMi1kZXZlbCkgJCh2 b3B0X2lmIHZhcG91cnN5bnRoIHZhcG91cnN5bnRoLWRldmVsKQorICQodm9wdF9pZiB2ZHBhdSBs aWJ2ZHBhdS1kZXZlbCkgJCh2b3B0X2lmIHNuZGlvIHNuZGlvLWRldmVsKQogICQodm9wdF9pZiB2 dWxrYW4gIlZ1bGthbi1IZWFkZXJzIHZ1bGthbi1sb2FkZXIgc2hhZGVyYyBsaWJwbGFjZWJvLWRl dmVsIikKICAkKHZvcHRfaWYgd2F5bGFuZCAid2F5bGFuZC1kZXZlbCB3YXlsYW5kLXByb3RvY29s cyBsaWJ4a2Jjb21tb24tZGV2ZWwiKQotICQodm9wdF9pZiB4MTEgImxpYlhTY3JuU2F2ZXItZGV2 ZWwgbGliWGluZXJhbWEtZGV2ZWwgbGliWHJhbmRyLWRldmVsIikiCisgJCh2b3B0X2lmIHgxMSAi bGliWFNjcm5TYXZlci1kZXZlbCBsaWJYaW5lcmFtYS1kZXZlbCBsaWJYcmFuZHItZGV2ZWwgbGli WHByZXNlbnQtZGV2ZWwiKSIKIGRlcGVuZHM9ImRlc2t0b3AtZmlsZS11dGlscyBoaWNvbG9yLWlj b24tdGhlbWUiCiBzaG9ydF9kZXNjPSJWaWRlbyBwbGF5ZXIgYmFzZWQgb24gTVBsYXllci9tcGxh eWVyMiIKIG1haW50YWluZXI9InRyYXZhbmtvciA8dHJhdmFua29yQHR1dGEuaW8+IgpAQCAtMjks MzAgKzQxLDIzIEBAIGxpY2Vuc2U9IkdQTC0yLjAtb3ItbGF0ZXIiCiBob21lcGFnZT0iaHR0cHM6 Ly9tcHYuaW8iCiBjaGFuZ2Vsb2c9Imh0dHBzOi8vZ2l0aHViLmNvbS9tcHYtcGxheWVyL21wdi9y ZWxlYXNlcyIKIGRpc3RmaWxlcz0iaHR0cHM6Ly9naXRodWIuY29tL21wdi1wbGF5ZXIvJHtwa2du YW1lfS9hcmNoaXZlL3Yke3ZlcnNpb259LnRhci5neiIKLWNoZWNrc3VtPTMyZGVkOGMxM2I2Mzk4 MzEwZmEyNzc2NzM3ODE5M2RjMWRiNmQ3OGIwMDZiNzBkYmNiZDMxMjNhMTQ0NWU3NDYKK2NoZWNr c3VtPWRjNDExYzg5OWE2NDU0ODI1MGMxNDJiZjFmYTFhYTc1MjhmMWI0Mzk4YTI0Yzg2YjgxNjA5 Mzk5OTA0OWVjMDAKIAogaWYgWyAiJFhCUFNfVEFSR0VUX05PX0FUT01JQzgiIF07IHRoZW4KIAlt YWtlZGVwZW5kcys9IiBsaWJhdG9taWMtZGV2ZWwiCiBmaQogCi1idWlsZF9vcHRpb25zPSJhbHNh IGNhY2EgamFjayBsY21zIGx1YSBvcGVuYWwgcHVsc2VhdWRpbyBzZGwyIHZhcG91cnN5bnRoIHZk cGF1Ci0gdnVsa2FuIHdheWxhbmQgeDExIgotYnVpbGRfb3B0aW9uc19kZWZhdWx0PSJhbHNhIGph Y2sgbGNtcyBsdWEgcHVsc2VhdWRpbyB2ZHBhdSB2dWxrYW4gd2F5bGFuZCB4MTEiCitidWlsZF9v cHRpb25zPSJhbHNhIGNhY2EgamFjayBsY21zIGx1YSBvcGVuYWwgcHVsc2VhdWRpbyBwaXBld2ly ZSBzZGwyCisgc25kaW8gdmFwb3Vyc3ludGggdmRwYXUgdnVsa2FuIHdheWxhbmQgeDExIgorYnVp bGRfb3B0aW9uc19kZWZhdWx0PSJhbHNhIGphY2sgbGNtcyBsdWEgcHVsc2VhdWRpbyBwaXBld2ly ZSB2ZHBhdSB2dWxrYW4KKyBzbmRpbyB3YXlsYW5kIHgxMSIKIGRlc2Nfb3B0aW9uX2NhY2E9IkVu YWJsZSBzdXBwb3J0IGZvciBsaWJjYWNhIHZpZGVvIG91dHB1dCIKIGRlc2Nfb3B0aW9uX2xjbXM9 IkVuYWJsZSBzdXBwb3J0IGZvciBMaXR0bGVDTVMgMiBlbmdpbmUiCiBkZXNjX29wdGlvbl9vcGVu YWw9IkVuYWJsZSBzdXBwb3J0IGZvciBPcGVuQUwgYXVkaW8gb3V0cHV0Igogdm9wdF9jb25mbGlj dCBzZGwyIHdheWxhbmQKIAotaWYgWyAteiAiJENST1NTX0JVSUxEIiBdOyB0aGVuCi0JY29uZmln dXJlX2FyZ3MrPSIgLS16c2hkaXI9L3Vzci9zaGFyZS96c2gvc2l0ZS1mdW5jdGlvbnMiCi1maQot Ci1wcmVfY29uZmlndXJlKCkgewotCXB5dGhvbjMgYm9vdHN0cmFwLnB5Ci19Ci0KIG1wdi1kZXZl bF9wYWNrYWdlKCkgewotCWRlcGVuZHM9IiR7c291cmNlcGtnfT49JHt2ZXJzaW9ufV8ke3Jldmlz aW9ufSIKKwlkZXBlbmRzPSIke3NvdXJjZXBrZ30+PSR7dmVyc2lvbn1fJHtyZXZpc2lvbn0gJHtt YWtlZGVwZW5kc30iCiAJc2hvcnRfZGVzYys9IiAtIGRldmVsb3BtZW50IGZpbGVzIgogCXBrZ19p bnN0YWxsKCkgewogCQl2bW92ZSB1c3IvaW5jbHVkZQoKRnJvbSAyMDRmZTg0MTI3YWUzZjA1ZmM0 ZDhiMTRhMTUyMWY0MWQ1MjA3MTUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRy ZXcgQmVuc29uIDxhYmVuc29uK3ZvaWRAZ21haWwuY29tPgpEYXRlOiBTYXQsIDEyIE5vdiAyMDIy IDE2OjA0OjE0IC0wNjAwClN1YmplY3Q6IFtQQVRDSCAyLzldIGNlbGx1bG9pZDogcmVidWlsZCBm b3IgbXB2LTAuMzUuMAoKLS0tCiBzcmNwa2dzL2NlbGx1bG9pZC90ZW1wbGF0ZSB8IDIgKy0KIDEg ZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBh L3NyY3BrZ3MvY2VsbHVsb2lkL3RlbXBsYXRlIGIvc3JjcGtncy9jZWxsdWxvaWQvdGVtcGxhdGUK aW5kZXggNzM5OTExNTYyMDQ1Li45MDRmZTRmNjMxYzAgMTAwNjQ0Ci0tLSBhL3NyY3BrZ3MvY2Vs bHVsb2lkL3RlbXBsYXRlCisrKyBiL3NyY3BrZ3MvY2VsbHVsb2lkL3RlbXBsYXRlCkBAIC0xLDcg KzEsNyBAQAogIyBUZW1wbGF0ZSBmaWxlIGZvciAnY2VsbHVsb2lkJwogcGtnbmFtZT1jZWxsdWxv aWQKIHZlcnNpb249MC4yMwotcmV2aXNpb249MQorcmV2aXNpb249MgogYnVpbGRfc3R5bGU9bWVz b24KIGhvc3RtYWtlZGVwZW5kcz0iZ2V0dGV4dCBnbGliLWRldmVsIHBrZy1jb25maWciCiBtYWtl ZGVwZW5kcz0iZ3RrNC1kZXZlbCBsaWJlcG94eS1kZXZlbCBsaWJnbGliLWRldmVsIG1wdi1kZXZl bCIKCkZyb20gZWY3MzJlNmIwNTY1NjI0NDIyYzMzYWVmNTk1NDdmYjc0M2Q0MWIzNSBNb24gU2Vw IDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogQW5kcmV3IEJlbnNvbiA8YWJlbnNvbit2b2lkQGdtYWls LmNvbT4KRGF0ZTogU2F0LCAxMiBOb3YgMjAyMiAxNjowNDoxNCAtMDYwMApTdWJqZWN0OiBbUEFU Q0ggMy85XSBtaW5pdHViZTogcmVidWlsZCBmb3IgbXB2LTAuMzUuMAoKLS0tCiBzcmNwa2dzL21p bml0dWJlL3BhdGNoZXMvbXB2LTAuMzUucGF0Y2ggfCAxNCArKysrKysrKysrKysrKwogc3JjcGtn cy9taW5pdHViZS90ZW1wbGF0ZSAgICAgICAgICAgICAgIHwgIDIgKy0KIDIgZmlsZXMgY2hhbmdl ZCwgMTUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Y3BrZ3MvbWluaXR1YmUvcGF0Y2hlcy9tcHYtMC4zNS5wYXRjaAoKZGlmZiAtLWdpdCBhL3NyY3Br Z3MvbWluaXR1YmUvcGF0Y2hlcy9tcHYtMC4zNS5wYXRjaCBiL3NyY3BrZ3MvbWluaXR1YmUvcGF0 Y2hlcy9tcHYtMC4zNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLmRiMTNmOTA1OGY3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyY3BrZ3MvbWluaXR1YmUvcGF0 Y2hlcy9tcHYtMC4zNS5wYXRjaApAQCAtMCwwICsxLDE0IEBACitodHRwczovL2dpdGh1Yi5jb20v bXB2LXBsYXllci9tcHYvY29tbWl0LzYzMjA1OTgxNmFkZGU1MThjNjdmNjYwNmUzY2ZkZWY1YmVj MThiNTIKK0luZGV4OiBtaW5pdHViZS0zLjkuMy9saWIvbWVkaWEvc3JjL21wdi9tcHZ3aWRnZXQu Y3BwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CistLS0gbWluaXR1YmUtMy45LjMub3JpZy9saWIvbWVkaWEvc3JjL21w di9tcHZ3aWRnZXQuY3BwCisrKysgbWluaXR1YmUtMy45LjMvbGliL21lZGlhL3NyYy9tcHYvbXB2 d2lkZ2V0LmNwcAorQEAgLTMwLDcgKzMwLDcgQEAgdm9pZCBNcHZXaWRnZXQ6OmluaXRpYWxpemVH TCgpIHsKKyAgICAgcURlYnVnKCkgPDwgImluaXRpYWxpemVHTCIgPDwgbmF0aXZlUGFyZW50Owor ICAgICBpZiAobmF0aXZlUGFyZW50ID09IG51bGxwdHIpIHFGYXRhbCgiTm8gbmF0aXZlIHBhcmVu dCIpOworIAorLSAgICBtcHZfb3BlbmdsX2luaXRfcGFyYW1zIGdsX2luaXRfcGFyYW1ze2dldF9w cm9jX2FkZHJlc3MsIHRoaXMsIG51bGxwdHJ9OworKyAgICBtcHZfb3BlbmdsX2luaXRfcGFyYW1z IGdsX2luaXRfcGFyYW1ze2dldF9wcm9jX2FkZHJlc3MsIHRoaXN9OworICAgICBtcHZfcmVuZGVy X3BhcmFtIHBhcmFtc1tde3tNUFZfUkVOREVSX1BBUkFNX0FQSV9UWVBFLCAodm9pZCAqKU1QVl9S RU5ERVJfQVBJX1RZUEVfT1BFTkdMfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 TVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9pbml0X3BhcmFtc30sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge01QVl9SRU5ERVJfUEFSQU1fSU5WQUxJRCwg bnVsbHB0cn0sCmRpZmYgLS1naXQgYS9zcmNwa2dzL21pbml0dWJlL3RlbXBsYXRlIGIvc3JjcGtn cy9taW5pdHViZS90ZW1wbGF0ZQppbmRleCA5MTU0NThhNDNhNmEuLmI0YjUwYzBmOTY5NCAxMDA2 NDQKLS0tIGEvc3JjcGtncy9taW5pdHViZS90ZW1wbGF0ZQorKysgYi9zcmNwa2dzL21pbml0dWJl L3RlbXBsYXRlCkBAIC0xLDcgKzEsNyBAQAogIyBUZW1wbGF0ZSBmaWxlIGZvciAnbWluaXR1YmUn CiBwa2duYW1lPW1pbml0dWJlCiB2ZXJzaW9uPTMuOS4zCi1yZXZpc2lvbj0xCityZXZpc2lvbj0y CiBidWlsZF9zdHlsZT1xbWFrZQogaG9zdG1ha2VkZXBlbmRzPSJxdDUtdG9vbHMgcXQ1LWhvc3Qt dG9vbHMgcXQ1LXFtYWtlIGdpdCIKIG1ha2VkZXBlbmRzPSJxdDUtZGV2ZWwgcGhvbm9uLXF0NS1k ZXZlbCBxdDUtc2NyaXB0LWRldmVsIHF0NS1kZWNsYXJhdGl2ZS1kZXZlbAoKRnJvbSA5NTE4MThm Mzg4NzU4OTQ3NTI0MWYzOTRjZWY5OWE4MmExNmRkZWViIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAw MQpGcm9tOiBBbmRyZXcgQmVuc29uIDxhYmVuc29uK3ZvaWRAZ21haWwuY29tPgpEYXRlOiBTYXQs IDEyIE5vdiAyMDIyIDE2OjA0OjE0IC0wNjAwClN1YmplY3Q6IFtQQVRDSCA0LzldIG1wYy1xdDog dXBkYXRlIHRvIDIyLjAyLgoKLS0tCiBzcmNwa2dzL21wYy1xdC90ZW1wbGF0ZSB8IDE4ICsrKyst LS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjcGtncy9tcGMtcXQvdGVtcGxhdGUgYi9zcmNwa2dzL21w Yy1xdC90ZW1wbGF0ZQppbmRleCAzZTYwY2IwNmM4OTYuLjdhN2FlNmY2Y2Y5NiAxMDA2NDQKLS0t IGEvc3JjcGtncy9tcGMtcXQvdGVtcGxhdGUKKysrIGIvc3JjcGtncy9tcGMtcXQvdGVtcGxhdGUK QEAgLTEsNiArMSw2IEBACiAjIFRlbXBsYXRlIGZpbGUgZm9yICdtcGMtcXQnCiBwa2duYW1lPW1w Yy1xdAotdmVyc2lvbj0xOC4wOAordmVyc2lvbj0yMi4wMgogcmV2aXNpb249MQogYnVpbGRfc3R5 bGU9cW1ha2UKIGNvbmZpZ3VyZV9hcmdzPSJNUENRVF9WRVJTSU9OPSR7dmVyc2lvbn0iCkBAIC05 LDE2ICs5LDYgQEAgbWFrZWRlcGVuZHM9InF0NS1kZXZlbCBxdDUteDExZXh0cmFzLWRldmVsIG1w di1kZXZlbCIKIHNob3J0X2Rlc2M9IkNsb25lIG9mIE1lZGlhIFBsYXllciBDbGFzc2ljIHJlaW1w bGVtZW50ZWQgaW4gUXQiCiBtYWludGFpbmVyPSJTb2xpdHVkZVNGIDxzb2xpdHVkZXNmQHByb3Rv bm1haWwuY29tPiIKIGxpY2Vuc2U9IkdQTC0yLjAtb3ItbGF0ZXIiCi1ob21lcGFnZT0iaHR0cHM6 Ly9naXRodWIuY29tL2NtZHJrb3RvcmkvbXBjLXF0IgotI2Rpc3RmaWxlcz0iJHtob21lcGFnZX0v YXJjaGl2ZS92JHt2ZXJzaW9ufS50YXIuZ3oiCi0jIGh0dHBzOi8vZ2l0aHViLmNvbS9tcHYtcGxh eWVyL21wdi9jb21taXQvNTc1MTk3ZmY4YjBhMGQ4Y2QxNGY3ZWU3ODQ2MWMxZDYxZDA0NWQ3Mgot ZGlzdGZpbGVzPSJodHRwczovL3NvdXJjZXMudm9pZGxpbnV4Lm9yZy9tcGMtcXQtMTguMDgvdjE4 LjA4LnRhci5negotIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tcHYtcGxheWVy L21wdi8yMzM3ZmE0ZTAyMTM5OTMzOThkMzZjYjMyMjI2MzM3NjZkNjc3ZGZkL2xpYm1wdi9xdGhl bHBlci5ocHAiCi1jaGVja3N1bT0iYzU4ZmQ5MDkyNjc3M2M5ZGE4YmRmYzFhOGU0ZGJhMGI5NWNi YzU4Y2VlNmRiOTk4MWU4ZGU5NGZkOTUzNDQwNgotIDg2ZTFmY2JhNjAwMTgyOWI3ZTIzYTg1NmRi ODRkMDFlYmM3NmU2MzUyOGY3NDA2NGQ3YmM1NzA1MDE1YTI2ODQiCi1za2lwX2V4dHJhY3Rpb249 InF0aGVscGVyLmhwcCIKLQotcG9zdF9leHRyYWN0KCkgewotCW1rZGlyIC1wIG1wdgotCWNwICRY QlBTX1NSQ0RJU1RESVIvbXBjLXF0LSR2ZXJzaW9uL3F0aGVscGVyLmhwcCBtcHYvCi19Citob21l cGFnZT0iaHR0cHM6Ly9tcGMtcXQuZ2l0aHViLmlvLyIKK2Rpc3RmaWxlcz0iaHR0cHM6Ly9naXRo dWIuY29tL21wYy1xdC9tcGMtcXQvYXJjaGl2ZS9yZWZzL3RhZ3MvdiR7dmVyc2lvbn0udGFyLmd6 IgorY2hlY2tzdW09ZmE2Y2ZmZDZiZGUxMzA0YjZjMGVjM2FiYThlOThkMDNmNGQ3Mzk5OWZlZTRl NDU0NjAyNmVjMTU5NTMwMzUwZAoKRnJvbSA2ZjkwODU1NjhjNzViMDAzZjg2ZTE2NGZlZTAxMjlh YzhjYjU0OTMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgQmVuc29uIDxh YmVuc29uK3ZvaWRAZ21haWwuY29tPgpEYXRlOiBTYXQsIDEyIE5vdiAyMDIyIDE2OjA0OjE1IC0w NjAwClN1YmplY3Q6IFtQQVRDSCA1LzldIFtUT0RPXSBvcmlvbjogcmVidWlsZCBmb3IgbXB2LTAu MzUuMAoKLS0tCiBzcmNwa2dzL29yaW9uL3RlbXBsYXRlIHwgMiArLQogMSBmaWxlIGNoYW5nZWQs IDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjcGtncy9vcmlv bi90ZW1wbGF0ZSBiL3NyY3BrZ3Mvb3Jpb24vdGVtcGxhdGUKaW5kZXggZDY5ZjJmZjA0ZGQ0Li5i MWYyMjE1YjFkNDMgMTAwNjQ0Ci0tLSBhL3NyY3BrZ3Mvb3Jpb24vdGVtcGxhdGUKKysrIGIvc3Jj cGtncy9vcmlvbi90ZW1wbGF0ZQpAQCAtMSw3ICsxLDcgQEAKICMgVGVtcGxhdGUgZmlsZSBmb3Ig J29yaW9uJwogcGtnbmFtZT1vcmlvbgogdmVyc2lvbj0xLjYuNwotcmV2aXNpb249MQorcmV2aXNp b249MgogYnVpbGRfc3R5bGU9cW1ha2UKIGhvc3RtYWtlZGVwZW5kcz0icXQ1LXFtYWtlIHF0NS1o b3N0LXRvb2xzIgogbWFrZWRlcGVuZHM9InF0NS1kZWNsYXJhdGl2ZS1kZXZlbCBxdDUtcXVpY2tj b250cm9sczItZGV2ZWwgbXB2LWRldmVsIgoKRnJvbSA5NDZhYzQ0Yzc4NWNlMGE3Nzk2YmQ4MDJl YmM3NmQ5OTEyODJjMzBjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgQmVu c29uIDxhYmVuc29uK3ZvaWRAZ21haWwuY29tPgpEYXRlOiBTYXQsIDEyIE5vdiAyMDIyIDE2OjA0 OjE1IC0wNjAwClN1YmplY3Q6IFtQQVRDSCA2LzldIHFpbWd2OiByZWJ1aWxkIGZvciBtcHYtMC4z NS4wCgotLS0KIHNyY3BrZ3MvcWltZ3YvcGF0Y2hlcy9maXgtbXB2LW9wZW5nbC5wYXRjaCB8IDEx ICsrKysrKysrKysrCiBzcmNwa2dzL3FpbWd2L3RlbXBsYXRlICAgICAgICAgICAgICAgICAgICAg fCAgMiArLQogMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjcGtncy9xaW1ndi9wYXRjaGVzL2ZpeC1tcHYtb3Blbmds LnBhdGNoCgpkaWZmIC0tZ2l0IGEvc3JjcGtncy9xaW1ndi9wYXRjaGVzL2ZpeC1tcHYtb3Blbmds LnBhdGNoIGIvc3JjcGtncy9xaW1ndi9wYXRjaGVzL2ZpeC1tcHYtb3BlbmdsLnBhdGNoCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOWZkM2RmZmU5Zjk2Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjcGtncy9xaW1ndi9wYXRjaGVzL2ZpeC1tcHYtb3BlbmdsLnBhdGNoCkBA IC0wLDAgKzEsMTEgQEAKKy0tLSBhL3BsdWdpbnMvcGxheWVyX21wdi9zcmMvbXB2d2lkZ2V0LmNw cAorKysrIGIvcGx1Z2lucy9wbGF5ZXJfbXB2L3NyYy9tcHZ3aWRnZXQuY3BwCitAQCAtNjksNyAr NjksNyBAQAorIH0KKyAKKyB2b2lkIE1wdldpZGdldDo6aW5pdGlhbGl6ZUdMKCkgeworLSAgICBt cHZfb3BlbmdsX2luaXRfcGFyYW1zIGdsX2luaXRfcGFyYW1ze2dldF9wcm9jX2FkZHJlc3MsIG51 bGxwdHIsIG51bGxwdHJ9OworKyAgICBtcHZfb3BlbmdsX2luaXRfcGFyYW1zIGdsX2luaXRfcGFy YW1ze2dldF9wcm9jX2FkZHJlc3MsIG51bGxwdHJ9OworICAgICBtcHZfcmVuZGVyX3BhcmFtIHBh cmFtc1tdeworICAgICAgICAge01QVl9SRU5ERVJfUEFSQU1fQVBJX1RZUEUsIGNvbnN0X2Nhc3Q8 Y2hhciAqPihNUFZfUkVOREVSX0FQSV9UWVBFX09QRU5HTCl9LAorICAgICAgICAge01QVl9SRU5E RVJfUEFSQU1fT1BFTkdMX0lOSVRfUEFSQU1TLCAmZ2xfaW5pdF9wYXJhbXN9LApkaWZmIC0tZ2l0 IGEvc3JjcGtncy9xaW1ndi90ZW1wbGF0ZSBiL3NyY3BrZ3MvcWltZ3YvdGVtcGxhdGUKaW5kZXgg YmI5MWVlOThlYWI3Li43ZWIzMGRiMzM5OTIgMTAwNjQ0Ci0tLSBhL3NyY3BrZ3MvcWltZ3YvdGVt cGxhdGUKKysrIGIvc3JjcGtncy9xaW1ndi90ZW1wbGF0ZQpAQCAtMSw3ICsxLDcgQEAKICMgVGVt cGxhdGUgZmlsZSBmb3IgJ3FpbWd2JwogcGtnbmFtZT1xaW1ndgogdmVyc2lvbj0xLjAuMgotcmV2 aXNpb249MQorcmV2aXNpb249MgogYnVpbGRfc3R5bGU9Y21ha2UKIGNvbmZpZ3VyZV9hcmdzPSIk KHZvcHRfaWYgdmlkZW8gLURWSURFT19TVVBQT1JUPU9OIC1EVklERU9fU1VQUE9SVD1PRkYpCiAg JCh2b3B0X2lmIHNjYWxlIC1ET1BFTkNWX1NVUFBPUlQ9T04gLURPUEVOQ1ZfU1VQUE9SVD1PRkYp CgpGcm9tIDlmNTVkZmY2OTlhODAyNTg5YWU2MWUzOTM1NTliNDA0NWI4MGMxZTkgTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCkZyb206IEFuZHJldyBCZW5zb24gPGFiZW5zb24rdm9pZEBnbWFpbC5j b20+CkRhdGU6IFNhdCwgMTIgTm92IDIwMjIgMTY6MDQ6MTUgLTA2MDAKU3ViamVjdDogW1BBVENI IDcvOV0gdmlkY3V0dGVyOiB1cGRhdGUgdG8gNi4wLjUuMS4KCi0tLQogc3JjcGtncy92aWRjdXR0 ZXIvcGF0Y2hlcy9tcHYtMC4zNS0xLnBhdGNoIHwgNTI2NTggKysrKysrKysrKysrKysrKysrKwog c3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0yLnBhdGNoIHwgICAgMjQgKwogc3Jj cGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0zLnBhdGNoIHwgMTMyODkgKysrKysKIHNy Y3BrZ3MvdmlkY3V0dGVyL3RlbXBsYXRlICAgICAgICAgICAgICAgICB8ICAgICA2ICstCiA0IGZp bGVzIGNoYW5nZWQsIDY1OTc0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0xLnBhdGNoCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0yLnBh dGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4z NS0zLnBhdGNoCgpkaWZmIC0tZ2l0IGEvc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4z NS0xLnBhdGNoIGIvc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0xLnBhdGNoCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzMzYmFkNGE4MmJiCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0xLnBhdGNo CkBAIC0wLDAgKzEsNTI2NTggQEAKK2h0dHBzOi8vZ2l0aHViLmNvbS9vem1hcnRpYW4vdmlkY3V0 dGVyL2NvbW1pdC8xZDg4ODI1ZmViNWE3M2E1MGQwMTk5MTRiYTlkMDAwODU2MmE1OGNlLnBhdGNo CisKK0Zyb20gMWQ4ODgyNWZlYjVhNzNhNTBkMDE5OTE0YmE5ZDAwMDg1NjJhNThjZSBNb24gU2Vw IDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBldGUgQWxleGFuZHJvdSA8cGV0ZUBvem1hcnRpYW5z LmNvbT4KK0RhdGU6IFR1ZSwgMjIgRmViIDIwMjIgMTE6Mjk6MDAgKzExMDAKK1N1YmplY3Q6IFtQ QVRDSF0gUGF0Y2hlcyB0byBweW1wdiB0byB3b3JrYXJvdW5kIG9wZW5nbF9jYiBkZXByZWNhdGlv biBmcm9tCisgbGlibXB2CisKKy0tLQorIHZpZGN1dHRlci9saWJzL3B5bXB2L2NsaWVudC5weGQg fCAgICA1NCArLQorIHZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5jICAgICAgfCA0NjM5NCArKysr KysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KKyB2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 ICAgIHwgICAxOTIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDIxODMyIGluc2VydGlvbnMoKyksIDI0 ODA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdmlkY3V0dGVyL2xpYnMvcHltcHYvY2xp ZW50LnB4ZCBiL3ZpZGN1dHRlci9saWJzL3B5bXB2L2NsaWVudC5weGQKK2luZGV4IGJlZmUyMTll Li5kOWE4ODE2ZiAxMDA2NDQKKy0tLSBhL3ZpZGN1dHRlci9saWJzL3B5bXB2L2NsaWVudC5weGQK KysrKyBiL3ZpZGN1dHRlci9saWJzL3B5bXB2L2NsaWVudC5weGQKK0BAIC0xMTIsOSArMTEyLDkg QEAgY2RlZiBleHRlcm4gZnJvbSAibXB2L2NsaWVudC5oIjoKKyAKKyAgICAgaW50IG1wdl9sb2Fk X2NvbmZpZ19maWxlKG1wdl9oYW5kbGUgKmN0eCwgY29uc3QgY2hhciAqZmlsZW5hbWUpIG5vZ2ls CisgCistICAgIHZvaWQgbXB2X3N1c3BlbmQobXB2X2hhbmRsZSAqY3R4KSBub2dpbAorKyAgICAj IHZvaWQgbXB2X3N1c3BlbmQobXB2X2hhbmRsZSAqY3R4KSBub2dpbAorIAorLSAgICB2b2lkIG1w dl9yZXN1bWUobXB2X2hhbmRsZSAqY3R4KSBub2dpbAorKyAgICAjIHZvaWQgbXB2X3Jlc3VtZSht cHZfaGFuZGxlICpjdHgpIG5vZ2lsCisgCisgICAgIGludDY0X3QgbXB2X2dldF90aW1lX3VzKG1w dl9oYW5kbGUgKmN0eCkgbm9naWwKKyAKK0BAIC0yMDAsMjEgKzIwMCwyMSBAQCBjZGVmIGV4dGVy biBmcm9tICJtcHYvY2xpZW50LmgiOgorICAgICAgICAgTVBWX0VWRU5UX1NUQVJUX0ZJTEUKKyAg ICAgICAgIE1QVl9FVkVOVF9FTkRfRklMRQorICAgICAgICAgTVBWX0VWRU5UX0ZJTEVfTE9BREVE CistICAgICAgICBNUFZfRVZFTlRfVFJBQ0tTX0NIQU5HRUQKKy0gICAgICAgIE1QVl9FVkVOVF9U UkFDS19TV0lUQ0hFRAorKyAgICAgICAgIyBNUFZfRVZFTlRfVFJBQ0tTX0NIQU5HRUQKKysgICAg ICAgICMgTVBWX0VWRU5UX1RSQUNLX1NXSVRDSEVECisgICAgICAgICBNUFZfRVZFTlRfSURMRQor LSAgICAgICAgTVBWX0VWRU5UX1BBVVNFCistICAgICAgICBNUFZfRVZFTlRfVU5QQVVTRQorKyAg ICAgICAgIyBNUFZfRVZFTlRfUEFVU0UKKysgICAgICAgICMgTVBWX0VWRU5UX1VOUEFVU0UKKyAg ICAgICAgIE1QVl9FVkVOVF9USUNLCistICAgICAgICBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJ U1BBVENICisrICAgICAgICAjIE1QVl9FVkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0gKKyAgICAg ICAgIE1QVl9FVkVOVF9DTElFTlRfTUVTU0FHRQorICAgICAgICAgTVBWX0VWRU5UX1ZJREVPX1JF Q09ORklHCisgICAgICAgICBNUFZfRVZFTlRfQVVESU9fUkVDT05GSUcKKy0gICAgICAgIE1QVl9F VkVOVF9NRVRBREFUQV9VUERBVEUKKysgICAgICAgICMgTVBWX0VWRU5UX01FVEFEQVRBX1VQREFU RQorICAgICAgICAgTVBWX0VWRU5UX1NFRUsKKyAgICAgICAgIE1QVl9FVkVOVF9QTEFZQkFDS19S RVNUQVJUCisgICAgICAgICBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFCistICAgICAgICBNUFZf RVZFTlRfQ0hBUFRFUl9DSEFOR0UKKysgICAgICAgICMgTVBWX0VWRU5UX0NIQVBURVJfQ0hBTkdF CisgCisgICAgIGNvbnN0IGNoYXIgKm1wdl9ldmVudF9uYW1lKG1wdl9ldmVudF9pZCBldmVudCkg bm9naWwKKyAKK0BAIC0yNDksOSArMjQ5LDkgQEAgY2RlZiBleHRlcm4gZnJvbSAibXB2L2NsaWVu dC5oIjoKKyAgICAgICAgIGludCByZWFzb24KKyAgICAgICAgIGludCBlcnJvcgorIAorLSAgICBj ZGVmIHN0cnVjdCBtcHZfZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3BhdGNoOgorLSAgICAgICAgaW50 IGFyZzAKKy0gICAgICAgIGNvbnN0IGNoYXIgKnR5cGUKKysgICAgIyBjZGVmIHN0cnVjdCBtcHZf ZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3BhdGNoOgorKyAgICAjICAgICBpbnQgYXJnMAorKyAgICAj ICAgICBjb25zdCBjaGFyICp0eXBlCisgCisgICAgIGNkZWYgc3RydWN0IG1wdl9ldmVudF9jbGll bnRfbWVzc2FnZToKKyAgICAgICAgIGludCBudW1fYXJncworQEAgLTI4MiwyNyArMjgyLDI3IEBA IGNkZWYgZXh0ZXJuIGZyb20gIm1wdi9jbGllbnQuaCI6CisgCisgICAgIHZvaWQgKm1wdl9nZXRf c3ViX2FwaShtcHZfaGFuZGxlICpjdHgsIG1wdl9zdWJfYXBpIHN1Yl9hcGkpIG5vZ2lsCisgCist Y2RlZiBleHRlcm4gZnJvbSAibXB2L29wZW5nbF9jYi5oIjoKKy0gICAgc3RydWN0IG1wdl9vcGVu Z2xfY2JfY29udGV4dDoKKy0gICAgICAgIHBhc3MKKysjIGNkZWYgZXh0ZXJuIGZyb20gIm1wdi9v cGVuZ2xfY2IuaCI6CisrIyAgICAgc3RydWN0IG1wdl9vcGVuZ2xfY2JfY29udGV4dDoKKysjICAg ICAgICAgcGFzcworIAorLSAgICBjdHlwZWRlZiB2b2lkICgqbXB2X29wZW5nbF9jYl91cGRhdGVf Zm4pKHZvaWQgKmNiX2N0eCkgbm9naWwKKy0gICAgY3R5cGVkZWYgdm9pZCAqKCptcHZfb3Blbmds X2NiX2dldF9wcm9jX2FkZHJlc3NfZm4pKHZvaWQgKmZuX2N0eCwKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUp IG5vZ2lsCisrIyAgICAgY3R5cGVkZWYgdm9pZCAoKm1wdl9vcGVuZ2xfY2JfdXBkYXRlX2ZuKSh2 b2lkICpjYl9jdHgpIG5vZ2lsCisrIyAgICAgY3R5cGVkZWYgdm9pZCAqKCptcHZfb3BlbmdsX2Ni X2dldF9wcm9jX2FkZHJlc3NfZm4pKHZvaWQgKmZuX2N0eCwKKysjICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSkg bm9naWwKKyAKKy0gICAgdm9pZCBtcHZfb3BlbmdsX2NiX3NldF91cGRhdGVfY2FsbGJhY2sobXB2 X29wZW5nbF9jYl9jb250ZXh0ICpjdHgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1wdl9vcGVuZ2xfY2JfdXBkYXRlX2ZuIGNhbGxiYWNrLAorLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsYmFja19jdHgpIG5v Z2lsCisrIyAgICAgdm9pZCBtcHZfb3BlbmdsX2NiX3NldF91cGRhdGVfY2FsbGJhY2sobXB2X29w ZW5nbF9jYl9jb250ZXh0ICpjdHgsCisrIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbXB2X29wZW5nbF9jYl91cGRhdGVfZm4gY2FsbGJhY2ssCisrIyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfY3R4KSBu b2dpbAorIAorLSAgICBpbnQgbXB2X29wZW5nbF9jYl9pbml0X2dsKG1wdl9vcGVuZ2xfY2JfY29u dGV4dCAqY3R4LCBjb25zdCBjaGFyICpleHRzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1wdl9vcGVuZ2xfY2JfZ2V0X3Byb2NfYWRkcmVzc19mbiBnZXRfcHJvY19hZGRyZXNzLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmdldF9wcm9jX2FkZHJlc3NfY3R4 KSBub2dpbAorKyMgICAgIGludCBtcHZfb3BlbmdsX2NiX2luaXRfZ2wobXB2X29wZW5nbF9jYl9j b250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKmV4dHMsCisrIyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtcHZfb3BlbmdsX2NiX2dldF9wcm9jX2FkZHJlc3NfZm4gZ2V0X3Byb2NfYWRkcmVz cywKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmdldF9wcm9jX2FkZHJl c3NfY3R4KSBub2dpbAorIAorLSAgICBpbnQgbXB2X29wZW5nbF9jYl9kcmF3KG1wdl9vcGVuZ2xf Y2JfY29udGV4dCAqY3R4LCBpbnQgZmJvLCBpbnQgdywgaW50IGgpIG5vZ2lsCisrIyAgICAgaW50 IG1wdl9vcGVuZ2xfY2JfZHJhdyhtcHZfb3BlbmdsX2NiX2NvbnRleHQgKmN0eCwgaW50IGZibywg aW50IHcsIGludCBoKSBub2dpbAorIAorLSAgICBpbnQgbXB2X29wZW5nbF9jYl9yZXBvcnRfZmxp cChtcHZfb3BlbmdsX2NiX2NvbnRleHQgKmN0eCwgaW50NjRfdCB0aW1lKSBub2dpbAorKyMgICAg IGludCBtcHZfb3BlbmdsX2NiX3JlcG9ydF9mbGlwKG1wdl9vcGVuZ2xfY2JfY29udGV4dCAqY3R4 LCBpbnQ2NF90IHRpbWUpIG5vZ2lsCisgCistICAgIGludCBtcHZfb3BlbmdsX2NiX3VuaW5pdF9n bChtcHZfb3BlbmdsX2NiX2NvbnRleHQgKmN0eCkgbm9naWwKKysjICAgICBpbnQgbXB2X29wZW5n bF9jYl91bmluaXRfZ2wobXB2X29wZW5nbF9jYl9jb250ZXh0ICpjdHgpIG5vZ2lsCisgCisgCisg Y2RlZiBleHRlcm4gZnJvbSAibXB2L3JlbmRlci5oIjoKK2RpZmYgLS1naXQgYS92aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYuYyBiL3ZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5jCitpbmRleCAyMDJh YWU4Yy4uYTM1MjJlZjUgMTAwNjQ0CistLS0gYS92aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYuYwor KysrIGIvdmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LmMKK0BAIC0xLDQgKzEsNCBAQAorLS8qIEdl bmVyYXRlZCBieSBDeXRob24gMC4yOS4yMSAqLworKy8qIEdlbmVyYXRlZCBieSBDeXRob24gMC4y OS4yOCAqLworIAorIC8qIEJFR0lOOiBDeXRob24gTWV0YWRhdGEKKyB7CitAQCAtMTksMTUgKzE5 LDE3IEBACisgfQorIEVORDogQ3l0aG9uIE1ldGFkYXRhICovCisgCisrI2lmbmRlZiBQWV9TU0la RV9UX0NMRUFOCisgI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCisrI2VuZGlmIC8qIFBZX1NTSVpF X1RfQ0xFQU4gKi8KKyAjaW5jbHVkZSAiUHl0aG9uLmgiCisgI2lmbmRlZiBQeV9QWVRIT05fSAor ICAgICAjZXJyb3IgUHl0aG9uIGhlYWRlcnMgbmVlZGVkIHRvIGNvbXBpbGUgQyBleHRlbnNpb25z LCBwbGVhc2UgaW5zdGFsbCBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIFB5dGhvbi4KKyAjZWxpZiBQ WV9WRVJTSU9OX0hFWCA8IDB4MDIwNjAwMDAgfHwgKDB4MDMwMDAwMDAgPD0gUFlfVkVSU0lPTl9I RVggJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDMwMDAwKQorICAgICAjZXJyb3IgQ3l0aG9uIHJl cXVpcmVzIFB5dGhvbiAyLjYrIG9yIFB5dGhvbiAzLjMrLgorICNlbHNlCistI2RlZmluZSBDWVRI T05fQUJJICIwXzI5XzIxIgorLSNkZWZpbmUgQ1lUSE9OX0hFWF9WRVJTSU9OIDB4MDAxRDE1RjAK KysjZGVmaW5lIENZVEhPTl9BQkkgIjBfMjlfMjgiCisrI2RlZmluZSBDWVRIT05fSEVYX1ZFUlNJ T04gMHgwMDFEMUNGMAorICNkZWZpbmUgQ1lUSE9OX0ZVVFVSRV9ESVZJU0lPTiAwCisgI2luY2x1 ZGUgPHN0ZGRlZi5oPgorICNpZm5kZWYgb2Zmc2V0b2YKK0BAIC0xNzQsNyArMTc2LDcgQEAgRU5E OiBDeXRob24gTWV0YWRhdGEgKi8KKyAgICNpZm5kZWYgQ1lUSE9OX1VTRV9VTklDT0RFX0lOVEVS TkFMUworICAgICAjZGVmaW5lIENZVEhPTl9VU0VfVU5JQ09ERV9JTlRFUk5BTFMgMQorICAgI2Vu ZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDMwMEYwCisrICAjaWYgUFlfVkVSU0lP Tl9IRVggPCAweDAzMDMwMEYwIHx8IFBZX1ZFUlNJT05fSEVYID49IDB4MDMwQjAwQTIKKyAgICAg I3VuZGVmIENZVEhPTl9VU0VfVU5JQ09ERV9XUklURVIKKyAgICAgI2RlZmluZSBDWVRIT05fVVNF X1VOSUNPREVfV1JJVEVSIDAKKyAgICNlbGlmICFkZWZpbmVkKENZVEhPTl9VU0VfVU5JQ09ERV9X UklURVIpCitAQCAtMTg5LDExICsxOTEsMTQgQEAgRU5EOiBDeXRob24gTWV0YWRhdGEgKi8KKyAg ICNpZm5kZWYgQ1lUSE9OX1VOUEFDS19NRVRIT0RTCisgICAgICNkZWZpbmUgQ1lUSE9OX1VOUEFD S19NRVRIT0RTIDEKKyAgICNlbmRpZgorLSAgI2lmbmRlZiBDWVRIT05fRkFTVF9USFJFQURfU1RB VEUKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMEIwMEE0CisrICAgICN1bmRlZiBDWVRI T05fRkFTVF9USFJFQURfU1RBVEUKKysgICAgI2RlZmluZSBDWVRIT05fRkFTVF9USFJFQURfU1RB VEUgMAorKyAgI2VsaWYgIWRlZmluZWQoQ1lUSE9OX0ZBU1RfVEhSRUFEX1NUQVRFKQorICAgICAj ZGVmaW5lIENZVEhPTl9GQVNUX1RIUkVBRF9TVEFURSAxCisgICAjZW5kaWYKKyAgICNpZm5kZWYg Q1lUSE9OX0ZBU1RfUFlDQUxMCistICAgICNkZWZpbmUgQ1lUSE9OX0ZBU1RfUFlDQUxMIDEKKysg ICAgI2RlZmluZSBDWVRIT05fRkFTVF9QWUNBTEwgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMzBCMDBB MSkKKyAgICNlbmRpZgorICAgI2lmbmRlZiBDWVRIT05fUEVQNDg5X01VTFRJX1BIQVNFX0lOSVQK KyAgICAgI2RlZmluZSBDWVRIT05fUEVQNDg5X01VTFRJX1BIQVNFX0lOSVQgKFBZX1ZFUlNJT05f SEVYID49IDB4MDMwNTAwMDApCitAQCAtMjA0LDcgKzIwOSwxMCBAQCBFTkQ6IEN5dGhvbiBNZXRh ZGF0YSAqLworICAgI2lmbmRlZiBDWVRIT05fVVNFX0RJQ1RfVkVSU0lPTlMKKyAgICAgI2RlZmlu ZSBDWVRIT05fVVNFX0RJQ1RfVkVSU0lPTlMgKFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNjAwQjEp CisgICAjZW5kaWYKKy0gICNpZm5kZWYgQ1lUSE9OX1VTRV9FWENfSU5GT19TVEFDSworKyAgI2lm IFBZX1ZFUlNJT05fSEVYID49IDB4MDMwQjAwQTQKKysgICAgI3VuZGVmIENZVEhPTl9VU0VfRVhD X0lORk9fU1RBQ0sKKysgICAgI2RlZmluZSBDWVRIT05fVVNFX0VYQ19JTkZPX1NUQUNLIDAKKysg ICNlbGlmICFkZWZpbmVkKENZVEhPTl9VU0VfRVhDX0lORk9fU1RBQ0spCisgICAgICNkZWZpbmUg Q1lUSE9OX1VTRV9FWENfSU5GT19TVEFDSyAoUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA3MDBBMykK KyAgICNlbmRpZgorICNlbmRpZgorQEAgLTIxMiw3ICsyMjAsOSBAQCBFTkQ6IEN5dGhvbiBNZXRh ZGF0YSAqLworICNkZWZpbmUgQ1lUSE9OX0ZBU1RfUFlDQ0FMTCAgKENZVEhPTl9GQVNUX1BZQ0FM TCAmJiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDYwMEIxKQorICNlbmRpZgorICNpZiBDWVRIT05f VVNFX1BZTE9OR19JTlRFUk5BTFMKKy0gICNpbmNsdWRlICJsb25naW50cmVwci5oIgorKyAgI2lm IFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAgICNpbmNsdWRlICJsb25naW50cmVwci5oIgorKyAg I2VuZGlmCisgICAjdW5kZWYgU0hJRlQKKyAgICN1bmRlZiBCQVNFCisgICAjdW5kZWYgTUFTSwor QEAgLTMyOSw5ICszMzksNjggQEAgRU5EOiBDeXRob24gTWV0YWRhdGEgKi8KKyAgICNkZWZpbmUg X19QeXhfRGVmYXVsdENsYXNzVHlwZSBQeUNsYXNzX1R5cGUKKyAjZWxzZQorICAgI2RlZmluZSBf X1B5eF9CVUlMVElOX01PRFVMRV9OQU1FICJidWlsdGlucyIKKy0jaWYgUFlfVkVSU0lPTl9IRVgg Pj0gMHgwMzA4MDBBNCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjIKKy0gICNkZWZpbmUg X19QeXhfUHlDb2RlX05ldyhhLCBrLCBsLCBzLCBmLCBjb2RlLCBjLCBuLCB2LCBmdiwgY2VsbCwg Zm4sIG5hbWUsIGZsaW5lLCBsbm9zKVwKKy0gICAgICAgICAgUHlDb2RlX05ldyhhLCAwLCBrLCBs LCBzLCBmLCBjb2RlLCBjLCBuLCB2LCBmdiwgY2VsbCwgZm4sIG5hbWUsIGZsaW5lLCBsbm9zKQor KyAgI2RlZmluZSBfX1B5eF9EZWZhdWx0Q2xhc3NUeXBlIFB5VHlwZV9UeXBlCisrI2lmIFBZX1ZF UlNJT05fSEVYID49IDB4MDMwQjAwQTEKKysgICAgc3RhdGljIENZVEhPTl9JTkxJTkUgUHlDb2Rl T2JqZWN0KiBfX1B5eF9QeUNvZGVfTmV3KGludCBhLCBpbnQgaywgaW50IGwsIGludCBzLCBpbnQg ZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHlPYmplY3QgKmNvZGUsIFB5T2JqZWN0ICpjLCBQeU9iamVjdCogbiwgUHlPYmplY3QgKnYsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2Jq ZWN0ICpmdiwgUHlPYmplY3QgKmNlbGwsIFB5T2JqZWN0KiBmbiwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsIGludCBm bGluZSwgUHlPYmplY3QgKmxub3MpIHsKKysgICAgICAgIFB5T2JqZWN0ICprd2RzPU5VTEwsICph cmdjb3VudD1OVUxMLCAqcG9zb25seWFyZ2NvdW50PU5VTEwsICprd29ubHlhcmdjb3VudD1OVUxM OworKyAgICAgICAgUHlPYmplY3QgKm5sb2NhbHM9TlVMTCwgKnN0YWNrc2l6ZT1OVUxMLCAqZmxh Z3M9TlVMTCwgKnJlcGxhY2U9TlVMTCwgKmNhbGxfcmVzdWx0PU5VTEwsICplbXB0eT1OVUxMOwor KyAgICAgICAgY29uc3QgY2hhciAqZm5fY3N0cj1OVUxMOworKyAgICAgICAgY29uc3QgY2hhciAq bmFtZV9jc3RyPU5VTEw7CisrICAgICAgICBQeUNvZGVPYmplY3QqIGNvPU5VTEw7CisrICAgICAg ICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrOworKyAgICAgICAgUHlFcnJfRmV0 Y2goJnR5cGUsICZ2YWx1ZSwgJnRyYWNlYmFjayk7CisrICAgICAgICBpZiAoIShrd2RzPVB5RGlj dF9OZXcoKSkpIGdvdG8gZW5kOworKyAgICAgICAgaWYgKCEoYXJnY291bnQ9UHlMb25nX0Zyb21M b25nKGEpKSkgZ290byBlbmQ7CisrICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoa3dk cywgImNvX2FyZ2NvdW50IiwgYXJnY291bnQpICE9IDApIGdvdG8gZW5kOworKyAgICAgICAgaWYg KCEocG9zb25seWFyZ2NvdW50PVB5TG9uZ19Gcm9tTG9uZygwKSkpIGdvdG8gZW5kOworKyAgICAg ICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3ZHMsICJjb19wb3Nvbmx5YXJnY291bnQiLCBw b3Nvbmx5YXJnY291bnQpICE9IDApIGdvdG8gZW5kOworKyAgICAgICAgaWYgKCEoa3dvbmx5YXJn Y291bnQ9UHlMb25nX0Zyb21Mb25nKGspKSkgZ290byBlbmQ7CisrICAgICAgICBpZiAoUHlEaWN0 X1NldEl0ZW1TdHJpbmcoa3dkcywgImNvX2t3b25seWFyZ2NvdW50Iiwga3dvbmx5YXJnY291bnQp ICE9IDApIGdvdG8gZW5kOworKyAgICAgICAgaWYgKCEobmxvY2Fscz1QeUxvbmdfRnJvbUxvbmco bCkpKSBnb3RvIGVuZDsKKysgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2RzLCAi Y29fbmxvY2FscyIsIG5sb2NhbHMpICE9IDApIGdvdG8gZW5kOworKyAgICAgICAgaWYgKCEoc3Rh Y2tzaXplPVB5TG9uZ19Gcm9tTG9uZyhzKSkpIGdvdG8gZW5kOworKyAgICAgICAgaWYgKFB5RGlj dF9TZXRJdGVtU3RyaW5nKGt3ZHMsICJjb19zdGFja3NpemUiLCBzdGFja3NpemUpICE9IDApIGdv dG8gZW5kOworKyAgICAgICAgaWYgKCEoZmxhZ3M9UHlMb25nX0Zyb21Mb25nKGYpKSkgZ290byBl bmQ7CisrICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoa3dkcywgImNvX2ZsYWdzIiwg ZmxhZ3MpICE9IDApIGdvdG8gZW5kOworKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5n KGt3ZHMsICJjb19jb2RlIiwgY29kZSkgIT0gMCkgZ290byBlbmQ7CisrICAgICAgICBpZiAoUHlE aWN0X1NldEl0ZW1TdHJpbmcoa3dkcywgImNvX2NvbnN0cyIsIGMpICE9IDApIGdvdG8gZW5kOwor KyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3ZHMsICJjb19uYW1lcyIsIG4pICE9 IDApIGdvdG8gZW5kOworKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3ZHMsICJj b192YXJuYW1lcyIsIHYpICE9IDApIGdvdG8gZW5kOworKyAgICAgICAgaWYgKFB5RGljdF9TZXRJ dGVtU3RyaW5nKGt3ZHMsICJjb19mcmVldmFycyIsIGZ2KSAhPSAwKSBnb3RvIGVuZDsKKysgICAg ICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2RzLCAiY29fY2VsbHZhcnMiLCBjZWxsKSAh PSAwKSBnb3RvIGVuZDsKKysgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2RzLCAi Y29fbGluZXRhYmxlIiwgbG5vcykgIT0gMCkgZ290byBlbmQ7CisrICAgICAgICBpZiAoIShmbl9j c3RyPVB5VW5pY29kZV9Bc1VURjhBbmRTaXplKGZuLCBOVUxMKSkpIGdvdG8gZW5kOworKyAgICAg ICAgaWYgKCEobmFtZV9jc3RyPVB5VW5pY29kZV9Bc1VURjhBbmRTaXplKG5hbWUsIE5VTEwpKSkg Z290byBlbmQ7CisrICAgICAgICBpZiAoIShjbyA9IFB5Q29kZV9OZXdFbXB0eShmbl9jc3RyLCBu YW1lX2NzdHIsIGZsaW5lKSkpIGdvdG8gZW5kOworKyAgICAgICAgaWYgKCEocmVwbGFjZSA9IFB5 T2JqZWN0X0dldEF0dHJTdHJpbmcoKFB5T2JqZWN0KiljbywgInJlcGxhY2UiKSkpIGdvdG8gY2xl YW51cF9jb2RlX3RvbzsKKysgICAgICAgIGlmICghKGVtcHR5ID0gUHlUdXBsZV9OZXcoMCkpKSBn b3RvIGNsZWFudXBfY29kZV90b287IC8vIHVuZm9ydHVuYXRlbHkgX19weXhfZW1wdHlfdHVwbGUg aXNuJ3QgYXZhaWxhYmxlIGhlcmUKKysgICAgICAgIGlmICghKGNhbGxfcmVzdWx0ID0gUHlPYmpl Y3RfQ2FsbChyZXBsYWNlLCBlbXB0eSwga3dkcykpKSBnb3RvIGNsZWFudXBfY29kZV90b287Cisr ICAgICAgICBQeV9YREVDUkVGKChQeU9iamVjdCopY28pOworKyAgICAgICAgY28gPSAoUHlDb2Rl T2JqZWN0KiljYWxsX3Jlc3VsdDsKKysgICAgICAgIGNhbGxfcmVzdWx0ID0gTlVMTDsKKysgICAg ICAgIGlmICgwKSB7CisrICAgICAgICAgICAgY2xlYW51cF9jb2RlX3RvbzoKKysgICAgICAgICAg ICBQeV9YREVDUkVGKChQeU9iamVjdCopY28pOworKyAgICAgICAgICAgIGNvID0gTlVMTDsKKysg ICAgICAgIH0KKysgICAgICAgIGVuZDoKKysgICAgICAgIFB5X1hERUNSRUYoa3dkcyk7CisrICAg ICAgICBQeV9YREVDUkVGKGFyZ2NvdW50KTsKKysgICAgICAgIFB5X1hERUNSRUYocG9zb25seWFy Z2NvdW50KTsKKysgICAgICAgIFB5X1hERUNSRUYoa3dvbmx5YXJnY291bnQpOworKyAgICAgICAg UHlfWERFQ1JFRihubG9jYWxzKTsKKysgICAgICAgIFB5X1hERUNSRUYoc3RhY2tzaXplKTsKKysg ICAgICAgIFB5X1hERUNSRUYocmVwbGFjZSk7CisrICAgICAgICBQeV9YREVDUkVGKGNhbGxfcmVz dWx0KTsKKysgICAgICAgIFB5X1hERUNSRUYoZW1wdHkpOworKyAgICAgICAgaWYgKHR5cGUpIHsK KysgICAgICAgICAgICBQeUVycl9SZXN0b3JlKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOworKyAg ICAgICAgfQorKyAgICAgICAgcmV0dXJuIGNvOworKyAgICB9CisgI2Vsc2UKKyAgICNkZWZpbmUg X19QeXhfUHlDb2RlX05ldyhhLCBrLCBsLCBzLCBmLCBjb2RlLCBjLCBuLCB2LCBmdiwgY2VsbCwg Zm4sIG5hbWUsIGZsaW5lLCBsbm9zKVwKKyAgICAgICAgICAgUHlDb2RlX05ldyhhLCBrLCBsLCBz LCBmLCBjb2RlLCBjLCBuLCB2LCBmdiwgY2VsbCwgZm4sIG5hbWUsIGZsaW5lLCBsbm9zKQorQEAg LTQ0NSw4ICs1MTQsMTIgQEAgc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCAqIFB5VGhyZWFkX3Rz c19nZXQoUHlfdHNzX3QgKmtleSkgeworICNlbmRpZgorICNpZiBQWV9WRVJTSU9OX0hFWCA+IDB4 MDMwMzAwMDAgJiYgZGVmaW5lZChQeVVuaWNvZGVfS0lORCkKKyAgICNkZWZpbmUgQ1lUSE9OX1BF UDM5M19FTkFCTEVEIDEKKysgICNpZiBkZWZpbmVkKFB5VW5pY29kZV9JU19SRUFEWSkKKyAgICNk ZWZpbmUgX19QeXhfUHlVbmljb2RlX1JFQURZKG9wKSAgICAgICAobGlrZWx5KFB5VW5pY29kZV9J U19SRUFEWShvcCkpID9cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDAgOiBfUHlVbmljb2RlX1JlYWR5KChQeU9iamVjdCAqKShvcCkpKQorKyAgI2Vsc2UK KysgICNkZWZpbmUgX19QeXhfUHlVbmljb2RlX1JFQURZKG9wKSAgICAgICAoMCkKKysgICNlbmRp ZgorICAgI2RlZmluZSBfX1B5eF9QeVVuaWNvZGVfR0VUX0xFTkdUSCh1KSAgIFB5VW5pY29kZV9H RVRfTEVOR1RIKHUpCisgICAjZGVmaW5lIF9fUHl4X1B5VW5pY29kZV9SRUFEX0NIQVIodSwgaSkg UHlVbmljb2RlX1JFQURfQ0hBUih1LCBpKQorICAgI2RlZmluZSBfX1B5eF9QeVVuaWNvZGVfTUFY X0NIQVJfVkFMVUUodSkgICBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUodSkKK0BAIC00NTUsNyAr NTI4LDExIEBAIHN0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgKiBQeVRocmVhZF90c3NfZ2V0KFB5 X3Rzc190ICprZXkpIHsKKyAgICNkZWZpbmUgX19QeXhfUHlVbmljb2RlX1JFQUQoaywgZCwgaSkg ICBQeVVuaWNvZGVfUkVBRChrLCBkLCBpKQorICAgI2RlZmluZSBfX1B5eF9QeVVuaWNvZGVfV1JJ VEUoaywgZCwgaSwgY2gpICBQeVVuaWNvZGVfV1JJVEUoaywgZCwgaSwgY2gpCisgICAjaWYgZGVm aW5lZChQeVVuaWNvZGVfSVNfUkVBRFkpICYmIGRlZmluZWQoUHlVbmljb2RlX0dFVF9TSVpFKQor KyAgI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTiAmJiBQWV9WRVJTSU9OX0hFWCA+PSAw eDAzMDkwMDAwCisrICAjZGVmaW5lIF9fUHl4X1B5VW5pY29kZV9JU19UUlVFKHUpICAgICAgKDAg IT0gKGxpa2VseShQeVVuaWNvZGVfSVNfUkVBRFkodSkpID8gUHlVbmljb2RlX0dFVF9MRU5HVEgo dSkgOiAoKFB5Q29tcGFjdFVuaWNvZGVPYmplY3QgKikodSkpLT53c3RyX2xlbmd0aCkpCisrICAj ZWxzZQorICAgI2RlZmluZSBfX1B5eF9QeVVuaWNvZGVfSVNfVFJVRSh1KSAgICAgICgwICE9IChs aWtlbHkoUHlVbmljb2RlX0lTX1JFQURZKHUpKSA/IFB5VW5pY29kZV9HRVRfTEVOR1RIKHUpIDog UHlVbmljb2RlX0dFVF9TSVpFKHUpKSkKKysgICNlbmRpZgorICAgI2Vsc2UKKyAgICNkZWZpbmUg X19QeXhfUHlVbmljb2RlX0lTX1RSVUUodSkgICAgICAoMCAhPSBQeVVuaWNvZGVfR0VUX0xFTkdU SCh1KSkKKyAgICNlbmRpZgorQEAgLTYyNyw3ICs3MDQsNiBAQCBzdGF0aWMgQ1lUSE9OX0lOTElO RSBmbG9hdCBfX1BZWF9OQU4oKSB7CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxz dGRsaWIuaD4KKyAjaW5jbHVkZSAibXB2L2NsaWVudC5oIgorLSNpbmNsdWRlICJtcHYvb3Blbmds X2NiLmgiCisgI2luY2x1ZGUgIm1wdi9yZW5kZXIuaCIKKyAjaW5jbHVkZSAibXB2L3JlbmRlcl9n bC5oIgorICNpZmRlZiBfT1BFTk1QCitAQCAtODU3LDEyICs5MzMsMTAgQEAgc3RhdGljIGNvbnN0 IGNoYXIgKl9fcHl4X2ZbXSA9IHsKKyAKKyAvKi0tLSBUeXBlIGRlY2xhcmF0aW9ucyAtLS0qLwor IHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQ7 Cistc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaDsK KyBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlOworIHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5OworIHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50OworIHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQ7Cistc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dDsKKyBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zOworIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbzsKKyBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0OworQEAgLTg5NywyMSArOTcxLDYgQEAgc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCB7CisgfTsK KyAKKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTY5CistICogCistICog CistICogY2RlZiBjbGFzcyBJbnB1dERpc3BhdGNoKG9iamVjdCk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgIiIiRGF0YSBmaWVsZCBmb3IgTVBWX0VWRU5UX1NDUklQVF9J TlBVVF9ESVNQQVRDSCBldmVudHMuCistICogCistICovCistc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCB7CistICBQeU9iamVjdF9IRUFECistICBz dHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRj aCAqX19weXhfdnRhYjsKKy0gIFB5T2JqZWN0ICphcmcwOworLSAgUHlPYmplY3QgKnR5cGU7Cist fTsKKy0KKy0KKyAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTgyCisgICogCisg ICogCitAQCAtOTc4LDIxICsxMDM3LDYgQEAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCB7CisgfTsKKyAKKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODIyCistICogICAgICg8b2JqZWN0PmN0eCkoKQorLSAqIAorLSAqIGNkZWYgY2xh c3MgT3BlbkdMQ29udGV4dChvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIGNkZWY6CistICogICAgICAgICBtcHZfb3BlbmdsX2NiX2NvbnRleHQgKl9jdHgKKy0g Ki8KKy1zdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0 IHsKKy0gIFB5T2JqZWN0X0hFQUQKKy0gIHN0cnVjdCBtcHZfb3BlbmdsX2NiX2NvbnRleHQgKl9j dHg7CistICBpbnQgaW5pdGVkOworLSAgUHlPYmplY3QgKnVwZGF0ZV9jYjsKKy19OworLQorLQor IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4ODEKKyAgKiBERUYgTUFYX1JFTkRF Ul9QQVJBTVMgPSAzMgorICAqIAorQEAgLTEwODAsMjAgKzExMjQsNiBAQCBzdHJ1Y3QgX19weXhf dnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCB7Cisgc3Rh dGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZp bGVSZWFjaGVkICpfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVS ZWFjaGVkOworIAorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNjkKKy0g KiAKKy0gKiAKKy0gKiBjZGVmIGNsYXNzIElucHV0RGlzcGF0Y2gob2JqZWN0KTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAiIiJEYXRhIGZpZWxkIGZvciBNUFZfRVZFTlRf U0NSSVBUX0lOUFVUX0RJU1BBVENIIGV2ZW50cy4KKy0gKiAKKy0gKi8KKy0KKy1zdHJ1Y3QgX19w eXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCB7CistICBQ eU9iamVjdCAqKCpfaW5pdCkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf SW5wdXREaXNwYXRjaCAqLCBzdHJ1Y3QgbXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCAq KTsKKy19OworLXN0YXRpYyBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfSW5wdXREaXNwYXRjaCAqX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf SW5wdXREaXNwYXRjaDsKKy0KKy0KKyAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTgyCisgICogCisgICogCitAQCAtMTMxOCw2ICsxMzQ4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsRGljdChQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKiph cmdzLAorICNpZm5kZWYgUHlfTUVNQkVSX1NJWkUKKyAjZGVmaW5lIFB5X01FTUJFUl9TSVpFKHR5 cGUsIG1lbWJlcikgc2l6ZW9mKCgodHlwZSAqKTApLT5tZW1iZXIpCisgI2VuZGlmCisrI2lmIENZ VEhPTl9GQVNUX1BZQ0FMTAorICAgc3RhdGljIHNpemVfdCBfX3B5eF9weWZyYW1lX2xvY2Fsc3Bs dXNfb2Zmc2V0ID0gMDsKKyAgICNpbmNsdWRlICJmcmFtZW9iamVjdC5oIgorICAgI2RlZmluZSBf X1B4eV9QeUZyYW1lX0luaXRpYWxpemVfT2Zmc2V0cygpXAorQEAgLTEzMjUsNiArMTM1Niw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbERpY3QoUHlPYmplY3Qg KmZ1bmMsIFB5T2JqZWN0ICoqYXJncywKKyAgICAgICh2b2lkKShfX3B5eF9weWZyYW1lX2xvY2Fs c3BsdXNfb2Zmc2V0ID0gKChzaXplX3QpUHlGcmFtZV9UeXBlLnRwX2Jhc2ljc2l6ZSkgLSBQeV9N RU1CRVJfU0laRShQeUZyYW1lT2JqZWN0LCBmX2xvY2Fsc3BsdXMpKSkKKyAgICNkZWZpbmUgX19Q eXhfUHlGcmFtZV9HZXRMb2NhbHNwbHVzKGZyYW1lKVwKKyAgICAgKGFzc2VydChfX3B5eF9weWZy YW1lX2xvY2Fsc3BsdXNfb2Zmc2V0KSwgKFB5T2JqZWN0ICoqKSgoKGNoYXIgKikoZnJhbWUpKSAr IF9fcHl4X3B5ZnJhbWVfbG9jYWxzcGx1c19vZmZzZXQpKQorKyNlbmRpZiAvLyBDWVRIT05fRkFT VF9QWUNBTEwKKyAjZW5kaWYKKyAKKyAvKiBQeUNGdW5jdGlvbkZhc3RDYWxsLnByb3RvICovCitA QCAtMTc0NywxMiArMTc3OSwyMyBAQCBzdGF0aWMgdm9pZCBfX3B5eF9pbnNlcnRfY29kZV9vYmpl Y3QoaW50IGNvZGVfbGluZSwgUHlDb2RlT2JqZWN0KiBjb2RlX29iamVjdCk7Cisgc3RhdGljIHZv aWQgX19QeXhfQWRkVHJhY2ViYWNrKGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCBpbnQgY19saW5lLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHlfbGluZSwgY29uc3QgY2hhciAq ZmlsZW5hbWUpOworIAorKy8qIEdDQ0RpYWdub3N0aWNzLnByb3RvICovCisrI2lmIGRlZmluZWQo X19HTlVDX18pICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01J Tk9SX18gPj0gNikpCisrI2RlZmluZSBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKKysjZW5kaWYK KysKKyAvKiBDSW50VG9QeS5wcm90byAqLworIHN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0 KiBfX1B5eF9QeUludF9Gcm9tX2ludChpbnQgdmFsdWUpOworIAorKy8qIENJbnRGcm9tUHkucHJv dG8gKi8KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQgX19QeXhfUHlJbnRfQXNfaW50KFB5T2Jq ZWN0ICopOworKworIC8qIENJbnRUb1B5LnByb3RvICovCisgc3RhdGljIENZVEhPTl9JTkxJTkUg UHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKGVudW0gbXB2X2V2 ZW50X2lkIHZhbHVlKTsKKyAKKysvKiBDSW50RnJvbVB5LnByb3RvICovCisrc3RhdGljIENZVEhP Tl9JTkxJTkUgZW51bSBtcHZfZXZlbnRfaWQgX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2V2ZW50 X2lkKFB5T2JqZWN0ICopOworKworIC8qIENJbnRUb1B5LnByb3RvICovCisgc3RhdGljIENZVEhP Tl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZyh1bnNpZ25l ZCBsb25nIHZhbHVlKTsKKyAKK0BAIC0xNzY4LDMwICsxODExLDIxIEBAIHN0YXRpYyBDWVRIT05f SU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lbmRfZmlsZV9yZWFz b24oZW51bSBtCisgLyogQ0ludFRvUHkucHJvdG8gKi8KKyBzdGF0aWMgQ1lUSE9OX0lOTElORSBQ eU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKGVu dW0gbXB2X3JlbmRlcl91cGRhdGVfZmxhZyB2YWx1ZSk7CisgCisrLyogQ0ludEZyb21QeS5wcm90 byAqLworK3N0YXRpYyBDWVRIT05fSU5MSU5FIGxvbmcgX19QeXhfUHlJbnRfQXNfbG9uZyhQeU9i amVjdCAqKTsKKysKKyAvKiBDSW50VG9QeS5wcm90byAqLworIHN0YXRpYyBDWVRIT05fSU5MSU5F IFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2ludDY0X3QoaW50NjRfdCB2YWx1ZSk7CisgCisg LyogQ0ludFRvUHkucHJvdG8gKi8KKyBzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19Q eXhfUHlJbnRfRnJvbV91aW50NjRfdCh1aW50NjRfdCB2YWx1ZSk7CisgCistLyogQ0ludFRvUHku cHJvdG8gKi8KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZm9ybWF0KGVudW0gbXB2X2Zvcm1hdCB2YWx1ZSk7CistCistLyogQ0ludFRv UHkucHJvdG8gKi8KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRf RnJvbV9sb25nKGxvbmcgdmFsdWUpOworLQorLS8qIENJbnRGcm9tUHkucHJvdG8gKi8KKy1zdGF0 aWMgQ1lUSE9OX0lOTElORSBpbnQgX19QeXhfUHlJbnRfQXNfaW50KFB5T2JqZWN0ICopOworLQor LS8qIENJbnRGcm9tUHkucHJvdG8gKi8KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBlbnVtIG1wdl9l dmVudF9pZCBfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZXZlbnRfaWQoUHlPYmplY3QgKik7Cist CistLyogQ0ludEZyb21QeS5wcm90byAqLworLXN0YXRpYyBDWVRIT05fSU5MSU5FIGxvbmcgX19Q eXhfUHlJbnRfQXNfbG9uZyhQeU9iamVjdCAqKTsKKy0KKyAvKiBDSW50RnJvbVB5LnByb3RvICov Cisgc3RhdGljIENZVEhPTl9JTkxJTkUgdWludDY0X3QgX19QeXhfUHlJbnRfQXNfdWludDY0X3Qo UHlPYmplY3QgKik7CisgCisrLyogQ0ludFRvUHkucHJvdG8gKi8KKytzdGF0aWMgQ1lUSE9OX0lO TElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KGVudW0gbXB2 X2Zvcm1hdCB2YWx1ZSk7CisrCisgLyogQ0ludEZyb21QeS5wcm90byAqLworIHN0YXRpYyBDWVRI T05fSU5MSU5FIGVudW0gbXB2X2Zvcm1hdCBfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZm9ybWF0 KFB5T2JqZWN0ICopOworIAorQEAgLTE4MDEsNiArMTgzNSw5IEBAIHN0YXRpYyBDWVRIT05fSU5M SU5FIGludDY0X3QgX19QeXhfUHlJbnRfQXNfaW50NjRfdChQeU9iamVjdCAqKTsKKyAvKiBDSW50 RnJvbVB5LnByb3RvICovCisgc3RhdGljIENZVEhPTl9JTkxJTkUgaW50cHRyX3QgX19QeXhfUHlJ bnRfQXNfaW50cHRyX3QoUHlPYmplY3QgKik7CisgCisrLyogQ0ludFRvUHkucHJvdG8gKi8KKytz dGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV9sb25nKGxvbmcg dmFsdWUpOworKworIC8qIENoZWNrQmluYXJ5VmVyc2lvbi5wcm90byAqLworIHN0YXRpYyBpbnQg X19QeXhfY2hlY2tfYmluYXJ5X3ZlcnNpb24odm9pZCk7CisgCitAQCAtMTgwOCw3ICsxODQ1LDYg QEAgc3RhdGljIGludCBfX1B5eF9jaGVja19iaW5hcnlfdmVyc2lvbih2b2lkKTsKKyBzdGF0aWMg aW50IF9fUHl4X0luaXRTdHJpbmdzKF9fUHl4X1N0cmluZ1RhYkVudHJ5ICp0KTsKKyAKKyBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVh Y2hlZF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZp bGVSZWFjaGVkICpfX3B5eF92X3NlbGYsIHN0cnVjdCBtcHZfZXZlbnRfZW5kX2ZpbGUgKl9fcHl4 X3ZfZW9mKTsgLyogcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoX19pbml0KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKl9fcHl4X3Zfc2VsZiwgc3RydWN0IG1wdl9l dmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2ggKl9fcHl4X3ZfaW5wdXQpOyAvKiBwcm90byovCisg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfX2luaXQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2Fn ZSAqX19weXhfdl9zZWxmLCBzdHJ1Y3QgbXB2X2V2ZW50X2xvZ19tZXNzYWdlICpfX3B5eF92X21z Zyk7IC8qIHByb3RvKi8KKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2XzhQcm9wZXJ0eV9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eSAqX19weXhfdl9zZWxmLCBzdHJ1Y3QgbXB2X2V2ZW50X3Byb3BlcnR5ICpf X3B5eF92X3Byb3ApOyAvKiBwcm90byovCisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGEoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZiwgc3RydWN0IG1wdl9ldmVudCAqX19weXhf dl9ldmVudCk7IC8qIHByb3RvKi8KK0BAIC0xODM0LDEyICsxODcwLDEwIEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fX2Zy b21fc3RydWN0KHN0CisgCisgLyogTW9kdWxlIGRlY2xhcmF0aW9ucyBmcm9tICd2aWRjdXR0ZXIu bGlicy5tcHYnICovCisgc3RhdGljIFB5VHlwZU9iamVjdCAqX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgPSAwOworLXN0YXRpYyBQeVR5cGVPYmplY3Qg Kl9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoID0gMDsKKyBz dGF0aWMgUHlUeXBlT2JqZWN0ICpfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9n TWVzc2FnZSA9IDA7Cisgc3RhdGljIFB5VHlwZU9iamVjdCAqX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X1Byb3BlcnR5ID0gMDsKKyBzdGF0aWMgUHlUeXBlT2JqZWN0ICpfX3B5eF9w dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgPSAwOworIHN0YXRpYyBQeVR5cGVPYmpl Y3QgKl9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ID0gMDsKKy1zdGF0 aWMgUHlUeXBlT2JqZWN0ICpfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdM Q29udGV4dCA9IDA7Cisgc3RhdGljIFB5VHlwZU9iamVjdCAqX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgPSAwOworIHN0YXRpYyBQeVR5cGVPYmplY3QgKl9f cHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gPSAwOworIHN0 YXRpYyBQeVR5cGVPYmplY3QgKl9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJDb250ZXh0ID0gMDsKK0BAIC0xODU1LDcgKzE4ODksNiBAQCBzdGF0aWMgdm9pZCBfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY191cGRhdGVjYih2b2lkICopOyAvKnByb3RvKi8KKyBz dGF0aWMgdm9pZCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3BvaW50ZXIoY2hh ciBjb25zdCAqLCBQeU9iamVjdCAqKTsgLypwcm90byovCisgc3RhdGljIHZvaWQgX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfY2FsbGJhY2sodm9pZCAqKTsgLypwcm90byovCisgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2ts ZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqLCBQeU9iamVjdCAqKTsgLypwcm90byovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBp Y2tsZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqLCBQeU9iamVjdCAqKTsgLypwcm90byovCisgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2ts ZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfTG9nTWVzc2FnZSAqLCBQeU9iamVjdCAqKTsgLypwcm90byovCisgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9Qcm9wZXJ0 eV9fc2V0X3N0YXRlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3Bl cnR5ICosIFB5T2JqZWN0ICopOyAvKnByb3RvKi8KKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKiwgUHlPYmplY3QgKik7 IC8qcHJvdG8qLworQEAgLTE4NzMsNyArMTkwNiw2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf YnVpbHRpbl9yYW5nZTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2J1aWx0aW5faWQ7Cisgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9idWlsdGluX2VudW1lcmF0ZTsKKyBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X2J1aWx0aW5fVHlwZUVycm9yOworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfYnVpbHRp bl9EZXByZWNhdGlvbldhcm5pbmc7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19lW10gPSAi ZSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19oW10gPSAiaCI7Cisgc3RhdGljIGNvbnN0 IGNoYXIgX19weXhfa19rW10gPSAiayI7CitAQCAtMTkwMCw3ICsxOTMyLDYgQEAgc3RhdGljIGNv bnN0IGNoYXIgX19weXhfa19jYWxsW10gPSAiY2FsbCI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19w eXhfa19jb2RlW10gPSAiY29kZSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19kYXRhW10g PSAiZGF0YSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19kaWN0W10gPSAiX19kaWN0X18i OworLXN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfZXh0c1tdID0gImV4dHMiOworIHN0YXRpYyBj b25zdCBjaGFyIF9fcHl4X2tfaWRsZVtdID0gImlkbGUiOworIHN0YXRpYyBjb25zdCBjaGFyIF9f cHl4X2tfaW5mb1tdID0gImluZm8iOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfaW5pdFtd ID0gIl9faW5pdF9fIjsKK0BAIC0xOTI2LDcgKzE5NTcsNiBAQCBzdGF0aWMgY29uc3QgY2hhciBf X3B5eF9rX2Vycm9yW10gPSAiZXJyb3IiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfZXZl bnRbXSA9ICJldmVudCI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19mYXRhbFtdID0gImZh dGFsIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX25vbWVtW10gPSAibm9tZW0iOworLXN0 YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfcGF1c2VbXSA9ICJwYXVzZSI7Cisgc3RhdGljIGNvbnN0 IGNoYXIgX19weXhfa19yYW5nZVtdID0gInJhbmdlIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5 eF9rX3N0YXJ0W10gPSAic3RhcnQiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfdHJhY2Vb XSA9ICJ0cmFjZSI7CitAQCAtMTk3Myw3ICsyMDAzLDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgX19w eXhfa19wcmVzZW50W10gPSAicHJlc2VudCI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19y ZWxlYXNlW10gPSAicmVsZWFzZSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19zdWNjZXNz W10gPSAic3VjY2VzcyI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa190aW1lb3V0W10gPSAi dGltZW91dCI7Cistc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa191bnBhdXNlW10gPSAidW5wYXVz ZSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa192ZXJzaW9uW10gPSAiX192ZXJzaW9uX18i OworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfd3JhcHBlZFtdID0gIndyYXBwZWQiOworIHN0 YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfTVBWRXJyb3JbXSA9ICJNUFZFcnJvciI7CitAQCAtMTk5 OCw3ICsyMDI3LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19weXhfc3RhdGVbXSA9ICJf X3B5eF9zdGF0ZSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19yZWR1Y2VfZXhbXSA9ICJf X3JlZHVjZV9leF9fIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX3JlbmRlcl9mZFtdID0g InJlbmRlcl9mZCI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa190aHJlYWRpbmdbXSA9ICJ0 aHJlYWRpbmciOworLXN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfdW5pbml0X2dsW10gPSAidW5p bml0X2dsIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX0FQSV9PUEVOR0xbXSA9ICJBUElf T1BFTkdMIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX0NBUElfTUFKT1JbXSA9ICJfQ0FQ SV9NQUpPUiI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19DQVBJX01JTk9SW10gPSAiX0NB UElfTUlOT1IiOworQEAgLTIwMzgsOCArMjA2Niw2IEBAIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4 X2tfcHl4X2NoZWNrc3VtW10gPSAiX19weXhfY2hlY2tzdW0iOworIHN0YXRpYyBjb25zdCBjaGFy IF9fcHl4X2tfc2V0X3Byb3BlcnR5W10gPSAic2V0X3Byb3BlcnR5IjsKKyBzdGF0aWMgY29uc3Qg Y2hhciBfX3B5eF9rX3N0cmluZ3NvdXJjZVtdID0gInN0cmluZ3NvdXJjZSI7Cisgc3RhdGljIGNv bnN0IGNoYXIgX19weXhfa192ZXJzaW9uX2luZm9bXSA9ICJ2ZXJzaW9uX2luZm8iOworLXN0YXRp YyBjb25zdCBjaGFyIF9fcHl4X2tfSW5wdXREaXNwYXRjaFtdID0gIklucHV0RGlzcGF0Y2giOwor LXN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfT3BlbkdMQ29udGV4dFtdID0gIk9wZW5HTENvbnRl eHQiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfUmVuZGVyQ29udGV4dFtdID0gIlJlbmRl ckNvbnRleHQiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfUmVwbHlVc2VyRGF0YVtdID0g Il9SZXBseVVzZXJEYXRhIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX2NvbW1hbmRfZXJy b3JbXSA9ICJjb21tYW5kX2Vycm9yIjsKK0BAIC0yMDUzLDE4ICsyMDc5LDE1IEBAIHN0YXRpYyBj b25zdCBjaGFyIF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRbXSA9ICJDYWxsYmFja1RocmVhZCI7Cisg c3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19NSU5fQ0FQSV9NSU5PUltdID0gIl9NSU5fQ0FQSV9N SU5PUiI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19hb19pbml0X2ZhaWxlZFtdID0gImFv X2luaXRfZmFpbGVkIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX2F1ZGlvX3JlY29uZmln W10gPSAiYXVkaW9fcmVjb25maWciOworLXN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfY2hhcHRl cl9jaGFuZ2VbXSA9ICJjaGFwdGVyX2NoYW5nZSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhf a19jbGllbnRfbWVzc2FnZVtdID0gImNsaWVudF9tZXNzYWdlIjsKKyBzdGF0aWMgY29uc3QgY2hh ciBfX3B5eF9rX2xvYWRpbmdfZmFpbGVkW10gPSAibG9hZGluZ19mYWlsZWQiOworIHN0YXRpYyBj b25zdCBjaGFyIF9fcHl4X2tfcHJvcGVydHlfZXJyb3JbXSA9ICJwcm9wZXJ0eV9lcnJvciI7Cisg c3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19za2lwX3JlbmRlcmluZ1tdID0gInNraXBfcmVuZGVy aW5nIjsKKy1zdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX3RyYWNrc19jaGFuZ2VkW10gPSAidHJh Y2tzX2NoYW5nZWQiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfdW5rbm93bl9mb3JtYXRb XSA9ICJ1bmtub3duX2Zvcm1hdCI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa192aWRlb19y ZWNvbmZpZ1tdID0gInZpZGVvX3JlY29uZmlnIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9r X3ZvX2luaXRfZmFpbGVkW10gPSAidm9faW5pdF9mYWlsZWQiOworIHN0YXRpYyBjb25zdCBjaGFy IF9fcHl4X2tfTVBWRXJyb3JfX19pbml0W10gPSAiTVBWRXJyb3IuX19pbml0X18iOworIHN0YXRp YyBjb25zdCBjaGFyIF9fcHl4X2tfaW50ZXJuYWxfZm9ybWF0W10gPSAiaW50ZXJuYWxfZm9ybWF0 IjsKKy1zdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX21ldGFkYXRhX3VwZGF0ZVtdID0gIm1ldGFk YXRhX3VwZGF0ZSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19ub3RfaW1wbGVtZW50ZWRb XSA9ICJub3RfaW1wbGVtZW50ZWQiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfbm90aGlu Z190b19wbGF5W10gPSAibm90aGluZ190b19wbGF5IjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5 eF9rX3Byb3BlcnR5X2NoYW5nZVtdID0gInByb3BlcnR5X2NoYW5nZSI7CitAQCAtMjA3Myw3ICsy MDk2LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19weXhfUGlja2xlRXJyb3JbXSA9ICJf X3B5eF9QaWNrbGVFcnJvciI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19zZXRfaWNjX3By b2ZpbGVbXSA9ICJzZXRfaWNjX3Byb2ZpbGUiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tf c2V0c3RhdGVfY3l0aG9uW10gPSAiX19zZXRzdGF0ZV9jeXRob25fXyI7Cisgc3RhdGljIGNvbnN0 IGNoYXIgX19weXhfa19zdXJyb2dhdGVlc2NhcGVbXSA9ICJzdXJyb2dhdGVlc2NhcGUiOworLXN0 YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfdHJhY2tzX3N3aXRjaGVkW10gPSAidHJhY2tzX3N3aXRj aGVkIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX0VuZE9mRmlsZVJlYWNoZWRbXSA9ICJF bmRPZkZpbGVSZWFjaGVkIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX2FkdmFuY2VkX2Nv bnRyb2xbXSA9ICJhZHZhbmNlZF9jb250cm9sIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9r X2RybU1vZGVBdG9taWNSZXFbXSA9ICJkcm1Nb2RlQXRvbWljUmVxKiI7CitAQCAtMjA4NSw3ICsy MTA3LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19pbnZhbGlkX3BhcmFtZXRlcltdID0g ImludmFsaWRfcGFyYW1ldGVyIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX3NldF9hbWJp ZW50X2xpZ2h0W10gPSAic2V0X2FtYmllbnRfbGlnaHQiOworIHN0YXRpYyBjb25zdCBjaGFyIF9f cHl4X2tfQ2FsbGJhY2tUaHJlYWRfcnVuW10gPSAiQ2FsbGJhY2tUaHJlYWQucnVuIjsKKyBzdGF0 aWMgY29uc3QgY2hhciBfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX3NldFtdID0gIkNhbGxiYWNrVGhy ZWFkLnNldCI7Cistc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19EZXByZWNhdGlvbldhcm5pbmdb XSA9ICJEZXByZWNhdGlvbldhcm5pbmciOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfVW5p Y29kZURlY29kZUVycm9yW10gPSAiVW5pY29kZURlY29kZUVycm9yIjsKKyBzdGF0aWMgY29uc3Qg Y2hhciBfX3B5eF9rX1VuaWNvZGVFbmNvZGVFcnJvcltdID0gIlVuaWNvZGVFbmNvZGVFcnJvciI7 Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19Vbmtub3duX2FwaV90eXBlX3JbXSA9ICJVbmtu b3duIGFwaV90eXBlICVyIjsKK0BAIC0yMTA5LDEyICsyMTMwLDkgQEAgc3RhdGljIGNvbnN0IGNo YXIgX19weXhfa19SZW5kZXJQYXJhbXNfb3ZlcmZsb3dbXSA9ICJSZW5kZXJQYXJhbXMgb3ZlcmZs b3ciOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfYmxvY2tfZm9yX3RhcmdldF90aW1lW10g PSAiYmxvY2tfZm9yX3RhcmdldF90aW1lIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX2Vy cm9yc19sb2NhbHNfd3JhcHBlZFtdID0gIl9lcnJvcnMuPGxvY2Fscz4ud3JhcHBlZCI7Cisgc3Rh dGljIGNvbnN0IGNoYXIgX19weXhfa19weXhfdW5waWNrbGVfUHJvcGVydHlbXSA9ICJfX3B5eF91 bnBpY2tsZV9Qcm9wZXJ0eSI7Cistc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19zY3JpcHRfaW5w dXRfZGlzcGF0Y2hbXSA9ICJzY3JpcHRfaW5wdXRfZGlzcGF0Y2giOworIHN0YXRpYyBjb25zdCBj aGFyIF9fcHl4X2tfQ29udGV4dF9jcmVhdGlvbl9lcnJvcltdID0gIkNvbnRleHQgY3JlYXRpb24g ZXJyb3IiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfc2h1dGRv d25bXSA9ICJDYWxsYmFja1RocmVhZC5zaHV0ZG93biI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19w eXhfa19weXhfdW5waWNrbGVfTG9nTWVzc2FnZVtdID0gIl9fcHl4X3VucGlja2xlX0xvZ01lc3Nh Z2UiOworLXN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfT3BlbkdMX0FQSV9ub3RfYXZhaWxhYmxl W10gPSAiT3BlbkdMIEFQSSBub3QgYXZhaWxhYmxlIjsKKy1zdGF0aWMgY29uc3QgY2hhciBfX3B5 eF9rX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoW10gPSAiX19weXhfdW5waWNrbGVfSW5wdXRE aXNwYXRjaCI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19DYWxsYmFja1RocmVhZF9tcHZf Y2FsbGJhY2tbXSA9ICJDYWxsYmFja1RocmVhZC5tcHZfY2FsbGJhY2siOworIHN0YXRpYyBjb25z dCBjaGFyIF9fcHl4X2tfcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb1tdID0gIl9fcHl4X3Vu cGlja2xlX1JlbmRlckZyYW1lSW5mbyI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa192aWRj dXR0ZXJfbGlic19weW1wdl9tcHZfcHl4W10gPSAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI7CitAQCAtMjEyNSwxMSArMjE0Myw5IEBAIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfc2Vs Zl9wYXJhbXNfY2Fubm90X2JlX2NvbnZlcnRlZFtdID0gInNlbGYucGFyYW1zIGNhbm5vCisgc3Rh dGljIGNvbnN0IGNoYXIgX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHgwNVtd ID0gIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4MDU3MmQxMSA9IChkYXRhLCBuYW1l KSkiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19z X3ZzXzB4NTZbXSA9ICJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDU2YmU5YjYgPSAo ZXJyb3IsIHJlYXNvbikpIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX0luY29tcGF0aWJs ZV9jaGVja3N1bXNfc192c18weDg3W10gPSAiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMg MHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZpeCwgdGV4dCkpIjsKKy1zdGF0aWMg Y29uc3QgY2hhciBfX3B5eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGJmW10gPSAi SW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhiZjY0MWE5ID0gKGFyZzAsIHR5cGUpKSI7 Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNf MHhkNFtdID0gIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZDQxZDhjZCA9ICgpKSI7 Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNf MHhkYVtdID0gIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChkYXRh LCBlcnJvciwgaWQsIHJlcGx5X3VzZXJkYXRhKSkiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4 X2tfS25vd25fcG9zc2libGVfdmFsdWVzX2Zvcl9FbmRPZkZbXSA9ICJLbm93biBwb3NzaWJsZSB2 YWx1ZXMgZm9yIEVuZE9mRmlsZVJlYWNoZWQgcmVhc29uLlxuXG4gICAgWW91IHNob3VsZCBoYW5k bGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIHJlYXNvbiBtYXkgbm90IGJlIGFueSBvZiB0aGVz ZSB2YWx1ZXMuXG4gICAgIjsKKy1zdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX09wZW5HTENvbnRl eHRfaXNfZGVwcmVjYXRlZF9wbGVhW10gPSAiT3BlbkdMQ29udGV4dCBpcyBkZXByZWNhdGVkLCBw bGVhc2Ugc3dpdGNoIHRvIFJlbmRlckNvbnRleHQiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4 X2tfU2V0X29mX2tub3duX2Vycm9yX2NvZGVzX2Zyb21fTXBbXSA9ICJTZXQgb2Yga25vd24gZXJy b3IgY29kZXMgZnJvbSBNcHZFcnJvciBhbmQgRXZlbnQgcmVzcG9uc2VzLlxuXG4gICAgTW9zdGx5 IHdyYXBzIHRoZSBlbnVtIG1wdl9lcnJvci5cbiAgICBWYWx1ZXMgbWlnaHQgbm90IGFsd2F5cyBi ZSBpbnRlZ2VycyBpbiB0aGUgZnV0dXJlLlxuICAgIFlvdSBzaG91bGQgaGFuZGxlIHRoZSBwb3Nz aWJpbGl0eSB0aGF0IGVycm9yIGNvZGVzIG1heSBub3QgYmUgYW55IG9mIHRoZXNlIHZhbHVlcy5c biAgICAiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfU2V0X29mX2tub3duX3ZhbHVlc19m b3JfRXZlbnRfaWRbXSA9ICJTZXQgb2Yga25vd24gdmFsdWVzIGZvciBFdmVudCBpZHMuXG5cbiAg ICBNb3N0bHkgd3JhcHMgdGhlIGVudW0gbXB2X2V2ZW50X2lkLlxuICAgIFZhbHVlcyBtaWdodCBu b3QgYWx3YXlzIGJlIGludGVnZXJzIGluIHRoZSBmdXR1cmUuXG4gICAgWW91IHNob3VsZCBoYW5k bGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQgZXZlbnQgaWRzIG1heSBub3QgYmUgYW55IG9mIHRoZXNl IHZhbHVlcy5cbiAgICAiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfVW5rbm93bl9vcl9p bnZhbGlkX3BvaW50ZXJfb2JqZWNbXSA9ICJVbmtub3duIG9yIGludmFsaWQgcG9pbnRlciBvYmpl Y3Q6ICVyIjsKK0BAIC0yMTUxLDcgKzIxNjcsNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25f c19DYWxsYmFja1RocmVhZF9zZXQ7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfQ2FsbGJh Y2tUaHJlYWRfc2h1dGRvd247Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfQ29udGV4dDsK KyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2twX3NfQ29udGV4dF9jcmVhdGlvbl9lcnJvcjsKKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19EZXByZWNhdGlvbldhcm5pbmc7Cisgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9uX3NfRU9GUmVhc29uczsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25f c19FbmRPZkZpbGVSZWFjaGVkOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX0Vycm9yczsK K0BAIC0yMTYxLDIwICsyMTc2LDE1IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX0ltcG9y dEVycm9yOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfa3Bfc19JbmNvbXBhdGlibGVfY2hlY2tz dW1zX3NfdnNfMHgwNTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2twX3NfSW5jb21wYXRpYmxl X2NoZWNrc3Vtc19zX3ZzXzB4NTY7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9rcF9zX0luY29t cGF0aWJsZV9jaGVja3N1bXNfc192c18weDg3OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfa3Bf c19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHhiZjsKKyBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4ZDQ7Cisgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGRhOworLXN0YXRp YyBQeU9iamVjdCAqX19weXhfbl9zX0lucHV0RGlzcGF0Y2g7Cisgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9rcF9zX0tub3duX3Bvc3NpYmxlX3ZhbHVlc19mb3JfRW5kT2ZGOworIHN0YXRpYyBQeU9i amVjdCAqX19weXhfbl9zX0xvZ0xldmVsczsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19M b2dNZXNzYWdlOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX01JTl9DQVBJX01JTk9SOwor IHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX01QVkVycm9yOworIHN0YXRpYyBQeU9iamVjdCAq X19weXhfbl9zX01QVkVycm9yX19faW5pdDsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19P cGVuR0xDb250ZXh0OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfa3Bfc19PcGVuR0xDb250ZXh0 X2lzX2RlcHJlY2F0ZWRfcGxlYTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19PcGVuR0xS ZW5kZXJDb250ZXh0OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfa3Bfc19PcGVuR0xfQVBJX25v dF9hdmFpbGFibGU7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfUGlja2xlRXJyb3I7Cisg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfUHJvcGVydHk7Cisgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9uX3NfUHlNUFZFcnJvcjsKK0BAIC0yMjExLDcgKzIyMjEsNiBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X25fc19ibG9ja19mb3JfdGFyZ2V0X3RpbWU7Cisgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9uX3NfYmxvY2tfdnN5bmM7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfY2FsbDsK KyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19jYWxsYmFjazsKKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X25fc19jaGFwdGVyX2NoYW5nZTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19j bGllbnRfbWVzc2FnZTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19jbGluZV9pbl90cmFj ZWJhY2s7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfY2xvc2U7CitAQCAtMjI0NCw3ICsy MjUzLDYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfZXJyb3I7Cisgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9uX3NfZXJyb3JzOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX2Vycm9y c19sb2NhbHNfd3JhcHBlZDsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19ldmVudDsKKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19leHRzOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhf bl9zX2ZhdGFsOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX2ZibzsKKyBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X25fc19mZDsKK0BAIC0yMjgwLDcgKzIyODgsNiBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X25fc19sb2NrOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX2xvZ19tZXNz YWdlOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX21haW47Cisgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9uX3NfbWV0YWNsYXNzOworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX21ldGFk YXRhX3VwZGF0ZTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19tb2R1bGU7Cisgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9uX3NfbXB2OworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX21w dl9jYWxsYmFjazsKK0BAIC0yMzAxLDcgKzIzMDgsNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X25fc19vcGVuZ2xfZmJvOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX29wZW5nbF9pbml0 X3BhcmFtczsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19vcHRpb25fZXJyb3I7Cisgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9uX3Nfb3B0aW9uX2Zvcm1hdDsKKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X25fc19wYXVzZTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19waWNrbGU7Cisg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfcGxheWJhY2tfcmVzdGFydDsKKyBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X25fc19wcmVwYXJlOworQEAgLTIzMTksNyArMjMyNSw2IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfbl9zX3B5eF9zdGF0ZTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25f c19weXhfdHlwZTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19weXhfdW5waWNrbGVfRW5k T2ZGaWxlUmVhY2hlZDsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19weXhfdW5waWNrbGVf RXZlbnQ7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfcHl4X3VucGlja2xlX0lucHV0RGlz cGF0Y2g7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfcHl4X3VucGlja2xlX0xvZ01lc3Nh Z2U7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfcHl4X3VucGlja2xlX1Byb3BlcnR5Owor IHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm87 CitAQCAtMjM0MCw3ICsyMzQ1LDYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfcmVwZWF0 OworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3JlcXVlc3RfZXZlbnQ7Cisgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9uX3NfcnVuOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3M7Cist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3Nfc2NyaXB0X2lucHV0X2Rpc3BhdGNoOworIHN0YXRp YyBQeU9iamVjdCAqX19weXhfbl9zX3NlZWs7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3Nf c2VsZjsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5vdF9iZV9j b252ZXJ0ZWRfdG87CitAQCAtMjM3MywxMyArMjM3Nyw5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfbl9zX3RocmVhZGluZzsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc190aWNrOworIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3RpbWVvdXQ7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9uX3NfdHJhY2U7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfdHJhY2tzX2NoYW5nZWQ7 Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfdHJhY2tzX3N3aXRjaGVkOworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfbl9zX3VuaW5pdF9nbDsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25f c191bmluaXRpYWxpemVkOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3Vua25vd25fZm9y bWF0OworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3Vub2JzZXJ2ZV9wcm9wZXJ0eTsKKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc191bnBhdXNlOworIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfbl9zX3Vuc3VwcG9ydGVkOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3VwZGF0ZTsK KyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2twX3NfdXRmXzg7CitAQCAtMjQwOSwxNCArMjQwOSw2 IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxl UmVhY2hlZF81ZXJyb3JfMl9fc2V0X18oc3RyCisgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkXzVlcnJvcl80X19kZWxfXyhzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICpfX3B5eF92 X3NlbGYpOyAvKiBwcm90byAqLworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9fX3JlZHVjZV9jeXRob25fXyhzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICpfX3B5eF92 X3NlbGYpOyAvKiBwcm90byAqLworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF8yX19zZXRzdGF0ZV9jeXRob25fXyhzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICpfX3B5 eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLyogcHJvdG8gKi8KKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlz cGF0Y2hfNGFyZzBfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9JbnB1dERpc3BhdGNoICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworLXN0YXRpYyBpbnQg X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80YXJnMF8yX19z ZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNo ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLyogcHJvdG8gKi8KKy1z dGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hf NGFyZzBfNF9fZGVsX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5w dXREaXNwYXRjaCAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfX19n ZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNo ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80dHlwZV8yX19zZXRfXyhzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICpfX3B5eF92X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgaW50IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfNF9fZGVsX18o c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqX19w eXhfdl9zZWxmKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfX19yZWR1Y2VfY3l0aG9uX18oc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqX19weXhfdl9z ZWxmKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfMl9fc2V0c3RhdGVfY3l0aG9uX18oc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qIHByb3RvICovCisgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVm aXhfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworIHN0YXRpYyBpbnQgX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzJfX3NldF9fKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKiBwcm90byAqLworIHN0YXRpYyBpbnQgX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzRfX2RlbF9fKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zf c2VsZik7IC8qIHByb3RvICovCitAQCAtMjQ2Miw0MSArMjQ1NCwyOSBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzRyZW1v dmUoQ1lUSE9OXworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzExYXBpX3ZlcnNpb25fX19nZXRfXyhDWVRIT05fVU5VU0VEIHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8q IHByb3RvICovCisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfNG5hbWVfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1lX19fZ2V0 X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhf dl9zZWxmKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF9zdXNwZW5kKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCistc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMnJlc3Vt ZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92 X3NlbGYpOyAvKiBwcm90byAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzRyZXF1ZXN0X2V2ZW50KHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3ZfZXZlbnQsIFB5T2JqZWN0ICpfX3B5eF92X2VuYWJsZSk7IC8qIHByb3RvICovCistc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNnNldF9s b2dfbGV2ZWwoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9sb2dsZXZlbCk7IC8qIHByb3RvICovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf OGxvYWRfY29uZmlnKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZmlsZW5hbWUpOyAvKiBwcm90byAq LworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzEwX2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Zh bHVlKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8xMmNvbW1hbmQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9hc3lu Y2hyb25vdXMsIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEsIFB5T2JqZWN0ICpfX3B5eF92X2NtZGxp c3QpOyAvKiBwcm90byAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzE0Z2V0X3Byb3BlcnR5X2FzeW5jKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3ZfcHJvcCwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSk7IC8qIHByb3RvICovCistc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZ0cnlf Z2V0X3Byb3BlcnR5X2FzeW5jKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmplY3Qg Kl9fcHl4X3ZfZGF0YSwgUHlPYmplY3QgKl9fcHl4X3ZfZGVmYXVsdCk7IC8qIHByb3RvICovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MTh0cnlfZ2V0X3Byb3BlcnR5KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmplY3Qg Kl9fcHl4X3ZfZGVmYXVsdCk7IC8qIHByb3RvICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjBnZXRfcHJvcGVydHkoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9wcm9wKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMnNldF9wcm9wZXJ0eShzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlLCBQeU9iamVjdCAq X19weXhfdl9hc3luY2hyb25vdXMsIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEpOyAvKiBwcm90byAq LworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzI0c2V0X29wdGlvbihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpf X3B5eF92X3ZhbHVlKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNmluaXRpYWxpemUoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8g Ki8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8yOHdhaXRfZXZlbnQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl90aW1lb3V0KTsgLyogcHJv dG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8zMHdha2V1cChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMyc2V0X3dha2V1cF9jYWxsYmFj ayhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2NhbGxiYWNrKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNGdldF93 YWtldXBfcGlwZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM2X19jaW5pdF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MzhvYnNlcnZlX3Byb3BlcnR5KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmplY3Qg Kl9fcHl4X3ZfZGF0YSk7IC8qIHByb3RvICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDB1bm9ic2VydmVfcHJvcGVydHkoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQ eU9iamVjdCAqX19weXhfdl9kYXRhKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80MnNodXRkb3duKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8q IHByb3RvICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfNDRvcGVuZ2xfY2JfYXBpKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCistc3RhdGljIHZv aWQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ2X19kZWFsbG9jX18o c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9z ZWxmKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF80OF9fcmVkdWNlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQgc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxm KTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF81MF9fc2V0c3RhdGVfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYs IENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKiBwcm90byAq LworLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29u dGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVu R0xDb250ZXh0ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF8yaW5pdF9nbChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpfX3B5 eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2V4dHMsIFB5T2JqZWN0ICpfX3B5eF92X2dldF9w cm9jX2FkZHJlc3MpOyAvKiBwcm90byAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF80c2V0X3VwZGF0ZV9jYWxsYmFjayhz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpfX3B5 eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2NiKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfNmRy YXcoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9mYm8sIFB5T2JqZWN0ICpfX3B5eF92X3cs IFB5T2JqZWN0ICpfX3B5eF92X2gpOyAvKiBwcm90byAqLworLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF84cmVwb3J0X2ZsaXAo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl90aW1lKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRf MTB1bmluaXRfZ2woc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdM Q29udGV4dCAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgdm9pZCBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzEyX19kZWFsbG9jX18oc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqX19weXhf dl9zZWxmKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTRfX3JlZHVjZV9jeXRob25fXyhDWVRIT05f VU5VU0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRl eHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzE2X19zZXRzdGF0ZV9jeXRo b25fXyhDWVRIT05fVU5VU0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X09wZW5HTENvbnRleHQgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF9zdGF0ZSk7IC8qIHByb3RvICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfcmVxdWVzdF9ldmVudChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF92X2V2ZW50LCBQeU9iamVjdCAqX19weXhfdl9lbmFibGUpOyAvKiBwcm90byAq LworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzJzZXRfbG9nX2xldmVsKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfbG9nbGV2ZWwpOyAvKiBw cm90byAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzRsb2FkX2NvbmZpZyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2ZpbGVuYW1lKTsg LyogcHJvdG8gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X3ZhbHVlKTsgLyogcHJvdG8gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X2FzeW5jaHJvbm91cywgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSwgUHlPYmplY3QgKl9fcHl4 X3ZfY21kbGlzdCk7IC8qIHByb3RvICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlfYXN5bmMoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9wcm9wLCBQeU9iamVjdCAqX19weXhfdl9kYXRhKTsgLyogcHJvdG8gKi8K KytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xMnRyeV9nZXRfcHJvcGVydHlfYXN5bmMoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQ eU9iamVjdCAqX19weXhfdl9kYXRhLCBQeU9iamVjdCAqX19weXhfdl9kZWZhdWx0KTsgLyogcHJv dG8gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8xNHRyeV9nZXRfcHJvcGVydHkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQ eU9iamVjdCAqX19weXhfdl9kZWZhdWx0KTsgLyogcHJvdG8gKi8KKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNmdldF9wcm9wZXJ0eShz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3Nl bGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3ApOyAvKiBwcm90byAqLworK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5 KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zf c2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUsIFB5 T2JqZWN0ICpfX3B5eF92X2FzeW5jaHJvbm91cywgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSk7IC8q IHByb3RvICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMjBzZXRfb3B0aW9uKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlP YmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKiBwcm90byAqLworK3N0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIyaW5pdGlhbGl6ZShzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpOyAv KiBwcm90byAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzI0d2FpdF9ldmVudChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3RpbWVvdXQp OyAvKiBwcm90byAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzI2d2FrZXVwKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCisrc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjhzZXRfd2FrZXVw X2NhbGxiYWNrKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2FsbGJhY2spOyAvKiBwcm90byAqLwor K3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzMwZ2V0X3dha2V1cF9waXBlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCisrc3RhdGljIGludCBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJfX2Npbml0X18oc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKTsgLyogcHJv dG8gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8zNG9ic2VydmVfcHJvcGVydHkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQ eU9iamVjdCAqX19weXhfdl9kYXRhKTsgLyogcHJvdG8gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0 eShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEpOyAvKiBwcm90byAqLworK3N0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24o c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9z ZWxmKTsgLyogcHJvdG8gKi8KKytzdGF0aWMgdm9pZCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfNDBfX2RlYWxsb2NfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQyX19yZWR1 Y2VfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworK3N0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ0X19zZXRzdGF0 ZV9jeXRob25fXyhDWVRIT05fVU5VU0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF9zdGF0ZSk7IC8qIHByb3RvICovCisgc3RhdGljIGludCBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX19faW5pdF9fKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKl9fcHl4X3Zfc2VsZik7IC8q IHByb3RvICovCisgc3RhdGljIHZvaWQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz X1JlbmRlclBhcmFtc18yX19kZWFsbG9jX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8gKi8KKyBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJh bXNfNF9fcmVkdWNlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8g Ki8KK0BAIC0yNTI2LDE4ICsyNTA2LDE1IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNnNldChDWVRIT05fVU5VCisgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1Ro cmVhZF84cnVuKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTBtcHZfY2FsbGJhY2soQ1lUSE9O X1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9jYWxsYmFjayk7IC8qIHByb3RvICovCisgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNl9fcHl4X3VucGlj a2xlX0VuZE9mRmlsZVJlYWNoZWQoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3Vt LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qIHByb3RvICovCistc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOF9fcHl4X3VucGlja2xlX0lu cHV0RGlzcGF0Y2goQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9iamVj dCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qIHByb3RvICovCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdl KENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19f cHl4X3R5cGUsIGxvbmcgX19weXhfdl9fX3B5eF9jaGVja3N1bSwgUHlPYmplY3QgKl9fcHl4X3Zf X19weXhfc3RhdGUpOyAvKiBwcm90byAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEyX19weXhfdW5waWNrbGVfUHJvcGVydHkoQ1lUSE9OX1VOVVNF RCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9u ZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7 IC8qIHByb3RvICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTRfX3B5eF91bnBpY2tsZV9FdmVudChDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5 eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF90eXBlLCBsb25nIF9fcHl4X3ZfX19weXhf Y2hlY2tzdW0sIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLyogcHJvdG8gKi8KKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNl9fcHl4X3Vu cGlja2xlX1JlbmRlckZyYW1lSW5mbyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxm LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF90eXBlLCBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tz dW0sIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLyogcHJvdG8gKi8KKytzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84X19weXhfdW5waWNrbGVf TG9nTWVzc2FnZShDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAq X19weXhfdl9fX3B5eF90eXBlLCBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLyogcHJvdG8gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMF9fcHl4X3VucGlja2xlX1Byb3BlcnR5KENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4 X3R5cGUsIGxvbmcgX19weXhfdl9fX3B5eF9jaGVja3N1bSwgUHlPYmplY3QgKl9fcHl4X3ZfX19w eXhfc3RhdGUpOyAvKiBwcm90byAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEyX19weXhfdW5waWNrbGVfRXZlbnQoQ1lUSE9OX1VOVVNFRCBQeU9i amVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5 eF92X19fcHl4X2NoZWNrc3VtLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qIHBy b3RvICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTRfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8oQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAq X19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19f cHl4X2NoZWNrc3VtLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qIHByb3RvICov Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0Vu ZE9mRmlsZVJlYWNoZWQoUHlUeXBlT2JqZWN0ICp0LCBQeU9iamVjdCAqYSwgUHlPYmplY3QgKmsp OyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRs aWJzXzNtcHZfSW5wdXREaXNwYXRjaChQeVR5cGVPYmplY3QgKnQsIFB5T2JqZWN0ICphLCBQeU9i amVjdCAqayk7IC8qcHJvdG8qLworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKFB5VHlwZU9iamVjdCAqdCwgUHlPYmplY3QgKmEs IFB5T2JqZWN0ICprKTsgLypwcm90byovCisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdf OXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KFB5VHlwZU9iamVjdCAqdCwgUHlPYmplY3Qg KmEsIFB5T2JqZWN0ICprKTsgLypwcm90byovCisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9u ZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KFB5VHlwZU9iamVjdCAqdCwgUHlPYmplY3Qg KmEsIFB5T2JqZWN0ICprKTsgLypwcm90byovCisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9u ZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQoUHlUeXBlT2JqZWN0ICp0LCBQeU9iamVj dCAqYSwgUHlPYmplY3QgKmspOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Rw X25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dChQeVR5cGVPYmplY3QgKnQs IFB5T2JqZWN0ICphLCBQeU9iamVjdCAqayk7IC8qcHJvdG8qLworIHN0YXRpYyBQeU9iamVjdCAq X19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKFB5VHlwZU9i amVjdCAqdCwgUHlPYmplY3QgKmEsIFB5T2JqZWN0ICprKTsgLypwcm90byovCisgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5m byhQeVR5cGVPYmplY3QgKnQsIFB5T2JqZWN0ICphLCBQeU9iamVjdCAqayk7IC8qcHJvdG8qLwor IHN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJDb250ZXh0KFB5VHlwZU9iamVjdCAqdCwgUHlPYmplY3QgKmEsIFB5T2JqZWN0ICprKTsgLypw cm90byovCitAQCAtMjU0NSwxMyArMjUyMiwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Rw X25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dChQeVR5cGVPYgor IHN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5 eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMoUHlUeXBlT2JqZWN0ICp0LCBQeU9iamVjdCAqYSwgUHlP YmplY3QgKmspOyAvKnByb3RvKi8KKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8wOworIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfaW50XzE7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9pbnRf MjsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8zOworLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfaW50Xzk7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9pbnRfMzI7Cisgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9pbnRfNTcxMzE2OTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF85MDk1 ODI2MjsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8xNDIwMzY5MTA7Cistc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9pbnRfMjAwNjg4MDQxOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfaW50 XzIyMjQxOTE0OTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8yMjg4MjIwNTM7Cisgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9pbnRfbmVnXzE7CitAQCAtMjU3Myw0OCArMjU0OSw0MyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18xNjsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3R1cGxlX18xNzsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18xODsKKyBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3R1cGxlX18xOTsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxl X18yMDsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18yMTsKKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3R1cGxlX18yMjsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18yNDsK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18yNjsKKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3R1cGxlX18yMzsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18yNTsKKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18yNzsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1 cGxlX18yODsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18zMDsKKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3R1cGxlX18zMTsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18z MzsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18zNTsKKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3R1cGxlX18zNzsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18zOTsKKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX180MTsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3R1cGxlX180MzsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX180NTsKKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3R1cGxlX180NzsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxl X180OTsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX181MTsKKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3R1cGxlX181MzsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX181NTsK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX181NzsKKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3R1cGxlX181OTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18zMjsKKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18zNDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1 cGxlX18zNjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18zODsKKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3R1cGxlX180MDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX180 MjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX180NDsKKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3R1cGxlX180NjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX180ODsKKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX181MDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3R1cGxlX181MjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX181NDsKKyBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzI7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX18yMzsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzI1OworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fMjc7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX18yMDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzIyOworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fMjQ7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX18yNjsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzI5OworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fMzI7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX18zNDsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzM2OworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fMzg7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX180MDsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzQyOworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fNDQ7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX180NjsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzQ4OworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fNTA7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX181MjsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzU0OworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fNTY7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX181ODsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzYwOworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fMzE7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX18zMzsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzM1OworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fMzc7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX18zOTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzQxOworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fNDM7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX180NTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzQ3OworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fNDk7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX181MTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzUzOworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fNTU7CisgLyogTGF0ZSBpbmNsdWRlcyAqLworIAorIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NQorQEAgLTI5ODcsNyArMjk1OCw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzJfc3RyZW5j KENZVEhPTl9VTlVTRUQgUHlPYmplY3QKKyAgKiAgICAgICAgICMgSW4gcHl0aG9uMiwgYXNzdW1l IGJ5dGVzIGFuZCB3YWxrIHJpZ2h0IHRocm91Z2gKKyAgKiAgICAgICAgIHJldHVybiBzICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiBQeUV2YWxfSW5pdFRocmVhZHMoKQor KyAqIFB5X0luaXRpYWxpemUoKQorICAqLworICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CisgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfcyk7CitAQCAtMzYxNiwxNSArMzU4NywxNSBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9m RmlsZVJlYWNoZWRfMl9fc2V0c3RhdGVfYworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNzYKKy0gKiAgICAgY2RlZiBwdWJsaWMg b2JqZWN0IGFyZzAsIHR5cGUKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTg5 CisrICogICAgIGNkZWYgcHVibGljIG9iamVjdCBwcmVmaXgsIGxldmVsLCB0ZXh0LCBsb2dfbGV2 ZWwKKyAgKiAKKy0gKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfc2NyaXB0X2lucHV0 X2Rpc3BhdGNoKiBpbnB1dCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHNlbGYuYXJnMCA9IGlucHV0LmFyZzAKKy0gKiAgICAgICAgIHNlbGYudHlwZSA9IF9zdHJk ZWMoaW5wdXQudHlwZSkKKysgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfbG9nX21l c3NhZ2UqIG1zZyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNl bGYubGV2ZWwgPSBfc3RyZGVjKG1zZy5sZXZlbCkKKysgKiAgICAgICAgIHNlbGYucHJlZml4ID0g X3N0cmRlYyhtc2cucHJlZml4KQorICAqLworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoX19pbml0KHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKl9fcHl4X3Zfc2VsZiwgc3Ry dWN0IG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2ggKl9fcHl4X3ZfaW5wdXQpIHsKKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2Fn ZV9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl ICpfX3B5eF92X3NlbGYsIHN0cnVjdCBtcHZfZXZlbnRfbG9nX21lc3NhZ2UgKl9fcHl4X3ZfbXNn KSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xh cmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CitAQCAtMzYzNiwzMSArMzYw Nyw4MiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz SW5wdXREaXNwYXRjaF9faW5pdChzdHJ1Y3QgX19weQorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAw OworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9pbml0IiwgMCk7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTc3CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTkwCisgICogCistICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2 ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCogaW5wdXQpOgorLSAqICAgICAgICAgc2VsZi5hcmcw ID0gaW5wdXQuYXJnMCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBz ZWxmLnR5cGUgPSBfc3RyZGVjKGlucHV0LnR5cGUpCistICogICAgICAgICByZXR1cm4gc2VsZgor KyAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9sb2dfbWVzc2FnZSogbXNnKToKKysg KiAgICAgICAgIHNlbGYubGV2ZWwgPSBfc3RyZGVjKG1zZy5sZXZlbCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5wcmVmaXggPSBfc3RyZGVjKG1zZy5wcmVm aXgpCisrICogICAgICAgICBzZWxmLnRleHQgPSBfc3RyZGVjKG1zZy50ZXh0KQorKyAqLworKyAg X19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxOTAsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5 dGVzX0Zyb21TdHJpbmcoX19weXhfdl9tc2ctPmxldmVsKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMCwgMTkwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOworKyAgX19weXhfdF80ID0gTlVMTDsKKysgIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKysgICAgX19w eXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgaWYgKGxpa2VseShf X3B5eF90XzQpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZV TkNUSU9OKF9fcHl4X3RfMik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7CisrICAg ICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4 X3RfMiwgZnVuY3Rpb24pOworKyAgICB9CisrICB9CisrICBfX3B5eF90XzEgPSAoX19weXhfdF80 KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhf dF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOwor KyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgX19QeXhfREVD UkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAxOTAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysg IF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYt PmxldmVsKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmxldmVsKTsKKysgIF9fcHl4 X3Zfc2VsZi0+bGV2ZWwgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworKworKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5MQorKyAqICAgICBjZGVmIF9pbml0KHNl bGYsIG1wdl9ldmVudF9sb2dfbWVzc2FnZSogbXNnKToKKysgKiAgICAgICAgIHNlbGYubGV2ZWwg PSBfc3RyZGVjKG1zZy5sZXZlbCkKKysgKiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0cmRlYyht c2cucHJlZml4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxm LnRleHQgPSBfc3RyZGVjKG1zZy50ZXh0KQorKyAqICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBt c2cubG9nX2xldmVsCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChf X3B5eF92X2lucHV0LT5hcmcwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgMTc3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgMTkxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIp OworKyAgX19weXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbXNnLT5w cmVmaXgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxOTEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICBfX3B5eF90XzQgPSBO VUxMOworKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9D aGVjayhfX3B5eF90XzIpKSkgeworKyAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzIpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKKysgICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF80KTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwor KyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgIH0KKysg IH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdz KF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7 IF9fcHl4X3RfNCA9IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5MSwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwor LSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+YXJnMCk7CistICBfX1B5eF9ERUNSRUYoX19w eXhfdl9zZWxmLT5hcmcwKTsKKy0gIF9fcHl4X3Zfc2VsZi0+YXJnMCA9IF9fcHl4X3RfMTsKKysg IF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnByZWZpeCk7CisrICBfX1B5eF9ERUNSRUYoX19w eXhfdl9zZWxmLT5wcmVmaXgpOworKyAgX19weXhfdl9zZWxmLT5wcmVmaXggPSBfX3B5eF90XzE7 CisgICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjE3OAorLSAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9zY3JpcHRfaW5wdXRf ZGlzcGF0Y2gqIGlucHV0KToKKy0gKiAgICAgICAgIHNlbGYuYXJnMCA9IGlucHV0LmFyZzAKKy0g KiAgICAgICAgIHNlbGYudHlwZSA9IF9zdHJkZWMoaW5wdXQudHlwZSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5Mgor KyAqICAgICAgICAgc2VsZi5sZXZlbCA9IF9zdHJkZWMobXNnLmxldmVsKQorKyAqICAgICAgICAg c2VsZi5wcmVmaXggPSBfc3RyZGVjKG1zZy5wcmVmaXgpCisrICogICAgICAgICBzZWxmLnRleHQg PSBfc3RyZGVjKG1zZy50ZXh0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICBzZWxmLmxvZ19sZXZlbCA9IG1zZy5sb2dfbGV2ZWwKKyAgKiAgICAgICAgIHJldHVybiBz ZWxmCistICogCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwg X19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDE3OCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4 X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDAsIDE5MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK Ky0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X2lucHV0LT50 eXBlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTc4LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92 X21zZy0+dGV4dCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDE5Miwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgIF9fcHl4X3Rf NCA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0 aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CitAQCAtMzY3NSwxOCArMzY5NywzMyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9f aW5pdChzdHJ1Y3QgX19weQorICAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9i amVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9Q eU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNS RUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMp OyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgMTc4LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDE5MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhf R0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+dHlwZSk7 CistICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT50eXBlKTsKKy0gIF9fcHl4X3Zfc2VsZi0+ dHlwZSA9IF9fcHl4X3RfMTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnRleHQpOwor KyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+dGV4dCk7CisrICBfX3B5eF92X3NlbGYtPnRl eHQgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworKworKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjE5MworKyAqICAgICAgICAgc2VsZi5wcmVmaXggPSBfc3RyZGVj KG1zZy5wcmVmaXgpCisrICogICAgICAgICBzZWxmLnRleHQgPSBfc3RyZGVjKG1zZy50ZXh0KQor KyAqICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBtc2cubG9nX2xldmVsICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHJldHVybiBzZWxmCisrICogCisrICovCisrICBf X3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X21zZy0+bG9nX2xldmVsKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTkzLCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90 XzEpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsKTsKKysgIF9fUHl4 X0RFQ1JFRihfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCk7CisrICBfX3B5eF92X3NlbGYtPmxvZ19s ZXZlbCA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTc5CistICogICAgICAgICBzZWxmLmFyZzAgPSBpbnB1dC5h cmcwCistICogICAgICAgICBzZWxmLnR5cGUgPSBfc3RyZGVjKGlucHV0LnR5cGUpCisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTk0CisrICogICAgICAgICBzZWxmLnRleHQg PSBfc3RyZGVjKG1zZy50ZXh0KQorKyAqICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBtc2cubG9n X2xldmVsCisgICogICAgICAgICByZXR1cm4gc2VsZiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisgICogCisgICogCitAQCAtMzY5NiwxMiArMzczMywxMiBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9faW5pdChzdHJ1 Y3QgX19weQorICAgX19weXhfciA9ICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpOworICAgZ290 byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNzYK Ky0gKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IGFyZzAsIHR5cGUKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxODkKKysgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHByZWZp eCwgbGV2ZWwsIHRleHQsIGxvZ19sZXZlbAorICAqIAorLSAqICAgICBjZGVmIF9pbml0KHNlbGYs IG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2gqIGlucHV0KTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5hcmcwID0gaW5wdXQuYXJnMAorLSAqICAg ICAgICAgc2VsZi50eXBlID0gX3N0cmRlYyhpbnB1dC50eXBlKQorKyAqICAgICBjZGVmIF9pbml0 KHNlbGYsIG1wdl9ldmVudF9sb2dfbWVzc2FnZSogbXNnKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5sZXZlbCA9IF9zdHJkZWMobXNnLmxldmVsKQorKyAq ICAgICAgICAgc2VsZi5wcmVmaXggPSBfc3RyZGVjKG1zZy5wcmVmaXgpCisgICovCisgCisgICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KK0BAIC0zNzEwLDcgKzM3NDcsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9faW5p dChzdHJ1Y3QgX19weQorICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzMpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworLSAgX19QeXhf QWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuSW5wdXREaXNwYXRjaC5faW5pdCIsIF9f cHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfQWRk VHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuTG9nTWVzc2FnZS5faW5pdCIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IDA7Cisg ICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKK0BAIC0zNzE4LDM0ICsz NzU1LDM0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNJbnB1dERpc3BhdGNoX19pbml0KHN0cnVjdCBfX3B5CisgICByZXR1cm4gX19weXhfcjsKKyB9 CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE3NAorLSAqICAgICBXcmFw czogbXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaAorKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxODcKKysgKiAgICAgV3JhcHM6IG1wdl9ldmVudF9sb2dfbWVzc2FnZQor ICAqICAgICAiIiIKKy0gKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IGFyZzAsIHR5cGUgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBjZGVmIHB1YmxpYyBvYmplY3QgcHJlZml4 LCBsZXZlbCwgdGV4dCwgbG9nX2xldmVsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAg KiAKKy0gKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3Bh dGNoKiBpbnB1dCk6CisrICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X2xvZ19tZXNz YWdlKiBtc2cpOgorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcw XzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNGFy ZzBfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworK3N0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzFfX2dl dF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8xX19n ZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7 CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fZ2V0X18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80YXJnMF9fX2dldF9fKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqKV9fcHl4X3Zf c2VsZikpOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExv Z01lc3NhZ2VfNnByZWZpeF9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVy biBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNGFyZzBfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICpfX3B5eF92X3NlbGYpIHsKKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfNnByZWZpeF9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZikgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxM OworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfX2dldF9fIiwgMCk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19Q eXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+YXJnMCk7CistICBfX3B5eF9yID0gX19weXhfdl9zZWxm LT5hcmcwOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsKKysgIF9fcHl4 X3IgPSBfX3B5eF92X3NlbGYtPnByZWZpeDsKKyAgIGdvdG8gX19weXhfTDA7CisgCisgICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KK0BAIC0zNzU2LDI3ICszNzkzLDI3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80YXJn MF9fX2dldF9fKHN0CisgfQorIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIGludCBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcwXzNfX3Nl dF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLypw cm90byovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1 dERpc3BhdGNoXzRhcmcwXzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X3ZhbHVlKSB7Cisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVmaXhfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8zX19zZXRfXyhQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworICAgaW50 IF9fcHl4X3I7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fc2V0X18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80YXJnMF8yX19zZXRf XygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2gg KilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1ZSkpOworKyAgX19weXhf ciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8y X19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3Nh Z2UgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1ZSkpOworIAorICAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNGFyZzBfMl9fc2V0X18oc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworK3N0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzJfX3NldF9fKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZiwgUHlP YmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKKyAgIGludCBfX3B5eF9yOworICAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fIiwg MCk7CisgICBfX1B5eF9JTkNSRUYoX19weXhfdl92YWx1ZSk7CisgICBfX1B5eF9HSVZFUkVGKF9f cHl4X3ZfdmFsdWUpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+YXJnMCk7CistICBf X1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5hcmcwKTsKKy0gIF9fcHl4X3Zfc2VsZi0+YXJnMCA9 IF9fcHl4X3ZfdmFsdWU7CisrICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5wcmVmaXgpOwor KyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsKKysgIF9fcHl4X3Zfc2VsZi0+ cHJlZml4ID0gX19weXhfdl92YWx1ZTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor ICAgX19weXhfciA9IDA7CitAQCAtMzc4NSwyNyArMzgyMiwyNyBAQCBzdGF0aWMgaW50IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNGFyZzBfMl9fc2V0X18o c3RydWN0CisgfQorIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIGludCBfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcwXzVfX2RlbF9fKFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNGFyZzBfNV9fZGVsX18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZikgeworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYpOyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfNnByZWZpeF81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7 CisgICBpbnQgX19weXhfcjsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4 X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcw XzRfX2RlbF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXRE aXNwYXRjaCAqKV9fcHl4X3Zfc2VsZikpOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF80X19kZWxfXygoKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpKTsK KyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIGludCBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcwXzRfX2RlbF9fKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKl9fcHl4 X3Zfc2VsZikgeworK3N0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEw TG9nTWVzc2FnZV82cHJlZml4XzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZikgeworICAgaW50IF9fcHl4X3I7Cisg ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fZGVsX18iLCAwKTsKKyAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKyAgIF9fUHl4X0dJ VkVSRUYoUHlfTm9uZSk7CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5hcmcwKTsKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmFyZzApOworLSAgX19weXhfdl9zZWxmLT5hcmcw ID0gUHlfTm9uZTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnByZWZpeCk7CisrICBf X1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5wcmVmaXgpOworKyAgX19weXhfdl9zZWxmLT5wcmVm aXggPSBQeV9Ob25lOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX3B5eF9y ID0gMDsKK0BAIC0zODE0LDI1ICszODUxLDI1IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80YXJnMF80X19kZWxfXyhzdHJ1Y3QKKyB9 CisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfMV9fZ2V0X18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80dHlwZV8xX19nZXRfXyhQeU9i amVjdCAqX19weXhfdl9zZWxmKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZlbF8xX19nZXRfXyhQeU9iamVjdCAqX19w eXhfdl9zZWxmKTsgLypwcm90byovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZlbF8xX19nZXRfXyhQeU9iamVjdCAqX19w eXhfdl9zZWxmKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdy YXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzSW5wdXREaXNwYXRjaF80dHlwZV9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqKV9fcHl4X3Zfc2VsZikpOworKyAgX19weXhf ciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsX19f Z2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl ICopX19weXhfdl9zZWxmKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAor LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXRE aXNwYXRjaF80dHlwZV9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0lucHV0RGlzcGF0Y2ggKl9fcHl4X3Zfc2VsZikgeworK3N0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxfX19nZXRfXyhz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92 X3NlbGYpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDAp OworICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3Nl bGYtPnR5cGUpOworLSAgX19weXhfciA9IF9fcHl4X3Zfc2VsZi0+dHlwZTsKKysgIF9fUHl4X0lO Q1JFRihfX3B5eF92X3NlbGYtPmxldmVsKTsKKysgIF9fcHl4X3IgPSBfX3B5eF92X3NlbGYtPmxl dmVsOworICAgZ290byBfX3B5eF9MMDsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor QEAgLTM4NDMsMjcgKzM4ODAsMjcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzR0eXBlX19fZ2V0X18oc3QKKyB9CisgCisg LyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zf c2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8KKy1zdGF0aWMgaW50IF9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfM19fc2V0 X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKKytz dGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxl dmVsXzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Zh bHVlKTsgLypwcm90byovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTBMb2dNZXNzYWdlXzVsZXZlbF8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQ eU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworICAgaW50IF9fcHl4X3I7CisgICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18g KHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzSW5wdXREaXNwYXRjaF80dHlwZV8yX19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKilfX3B5eF92X3NlbGYpLCAoKFB5T2Jq ZWN0ICopX19weXhfdl92YWx1ZSkpOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzJfX3NldF9fKCgoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZiksICgoUHlP YmplY3QgKilfX3B5eF92X3ZhbHVlKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K KyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7Cisg fQorIAorLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXRE aXNwYXRjaF80dHlwZV8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9JbnB1dERpc3BhdGNoICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVl KSB7Cisrc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzVsZXZlbF8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7Cisg ICBpbnQgX19weXhfcjsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOworICAgX19QeXhfSU5DUkVGKF9fcHl4 X3ZfdmFsdWUpOworICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3ZhbHVlKTsKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF92X3NlbGYtPnR5cGUpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+ dHlwZSk7CistICBfX3B5eF92X3NlbGYtPnR5cGUgPSBfX3B5eF92X3ZhbHVlOworKyAgX19QeXhf R09UUkVGKF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2Vs Zi0+bGV2ZWwpOworKyAgX19weXhfdl9zZWxmLT5sZXZlbCA9IF9fcHl4X3ZfdmFsdWU7CisgCisg ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fcHl4X3IgPSAwOworQEAgLTM4NzIsMjcg KzM5MDksMjcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJ bnB1dERpc3BhdGNoXzR0eXBlXzJfX3NldF9fKHN0cnVjdAorIH0KKyAKKyAvKiBQeXRob24gd3Jh cHBlciAqLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5w dXREaXNwYXRjaF80dHlwZV81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90 byovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERp c3BhdGNoXzR0eXBlXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKytzdGF0aWMg aW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzVf X2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzVfX2RlbF9f KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKyAgIGludCBfX3B5eF9yOworICAgX19QeXhfUmVm TmFubnlEZWNsYXJhdGlvbnMKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9f ICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICopX19weXhfdl9zZWxmKSk7CisrICBf X3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2 ZWxfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlICopX19weXhfdl9zZWxmKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K KyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7Cisg fQorIAorLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXRE aXNwYXRjaF80dHlwZV80X19kZWxfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9JbnB1dERpc3BhdGNoICpfX3B5eF92X3NlbGYpIHsKKytzdGF0aWMgaW50IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzRfX2RlbF9fKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2Vs ZikgeworICAgaW50IF9fcHl4X3I7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVsX18iLCAwKTsKKyAgIF9fUHl4X0lOQ1JF RihQeV9Ob25lKTsKKyAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CistICBfX1B5eF9HT1RSRUYo X19weXhfdl9zZWxmLT50eXBlKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnR5cGUp OworLSAgX19weXhfdl9zZWxmLT50eXBlID0gUHlfTm9uZTsKKysgIF9fUHl4X0dPVFJFRihfX3B5 eF92X3NlbGYtPmxldmVsKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmxldmVsKTsK KysgIF9fcHl4X3Zfc2VsZi0+bGV2ZWwgPSBQeV9Ob25lOworIAorICAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCisgICBfX3B5eF9yID0gMDsKK0BAIC0zOTAwLDYzICszOTM3LDI0MyBAQCBzdGF0 aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5 cGVfNF9fZGVsX18oc3RydWN0CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogIih0cmVl IGZyYWdtZW50KSI6MQorLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBjZGVmIHR1cGxlIHN0YXRlCistICogICAgIGNk ZWYgb2JqZWN0IF9kaWN0CistICovCistCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hf MV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF8xX19yZWR1Y2VfY3l0aG9uX18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7 Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dN ZXNzYWdlXzR0ZXh0XzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8K KytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01l c3NhZ2VfNHRleHRfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworICAgUHlPYmpl Y3QgKl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsK Ky0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3Bh dGNoX19fcmVkdWNlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfSW5wdXREaXNwYXRjaCAqKV9fcHl4X3Zfc2VsZikpOworKyAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF9fX2dldF9fKCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zf c2VsZikpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfX19y ZWR1Y2VfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5w dXREaXNwYXRjaCAqX19weXhfdl9zZWxmKSB7CistICBQeU9iamVjdCAqX19weXhfdl9zdGF0ZSA9 IDA7CistICBQeU9iamVjdCAqX19weXhfdl9fZGljdCA9IDA7CistICBpbnQgX19weXhfdl91c2Vf c2V0c3RhdGU7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTBMb2dNZXNzYWdlXzR0ZXh0X19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmKSB7CisgICBQeU9iamVjdCAqX19w eXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMSA9IE5VTEw7CistICBpbnQgX19weXhfdF8yOworLSAgaW50IF9fcHl4X3RfMzsK Ky0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfNTsKKy0gIFB5 T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBj b25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9 IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18iLCAw KTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fIiwgMCk7CisrICBfX1B5 eF9YREVDUkVGKF9fcHl4X3IpOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+dGV4dCk7 CisrICBfX3B5eF9yID0gX19weXhfdl9zZWxmLT50ZXh0OworKyAgZ290byBfX3B5eF9MMDsKKyAK Ky0gIC8qICIodHJlZSBmcmFnbWVudCkiOjUKKy0gKiAgICAgY2RlZiBvYmplY3QgX2RpY3QKKy0g KiAgICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQorLSAqICAgICBzdGF0ZSA9IChzZWxmLmFyZzAs IHNlbGYudHlwZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBfZGljdCA9 IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKy0gKiAgICAgaWYgX2RpY3QgaXMgbm90 IE5vbmU6CistICovCistICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygyKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPmFyZzApOwor LSAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYtPmFyZzApOworLSAgUHlUdXBsZV9TRVRfSVRF TShfX3B5eF90XzEsIDAsIF9fcHl4X3Zfc2VsZi0+YXJnMCk7CistICBfX1B5eF9JTkNSRUYoX19w eXhfdl9zZWxmLT50eXBlKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zZWxmLT50eXBlKTsK Ky0gIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAxLCBfX3B5eF92X3NlbGYtPnR5cGUpOwor KyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMDo7CisrICBfX1B5eF9YR0lW RVJFRihfX3B5eF9yKTsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0 dXJuIF9fcHl4X3I7CisrfQorKworKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIGludCBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0ZXh0XzNfX3NldF9f KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLypwcm90 byovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzR0ZXh0XzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X3ZhbHVlKSB7CisrICBpbnQgX19weXhfcjsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyAod3JhcHBlcikiLCAw KTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzR0ZXh0XzJfX3NldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVl KSk7CisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworK3N0YXRpYyBpbnQgX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF8yX19zZXRfXyhz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CisrICBpbnQgX19weXhfcjsKKysgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19zZXRfXyIsIDApOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWUpOworKyAgX19QeXhf R0lWRVJFRihfX3B5eF92X3ZhbHVlKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnRl eHQpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+dGV4dCk7CisrICBfX3B5eF92X3Nl bGYtPnRleHQgPSBfX3B5eF92X3ZhbHVlOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICov CisrICBfX3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAg cmV0dXJuIF9fcHl4X3I7CisrfQorKworKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIGlu dCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0ZXh0XzVfX2Rl bF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNHRleHRfNV9fZGVsX18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZikgeworKyAgaW50IF9fcHl4X3I7CisrICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVsX18gKHdy YXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEwTG9nTWVzc2FnZV80dGV4dF80X19kZWxfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpKTsKKysKKysgIC8qIGZ1bmN0 aW9uIGV4aXQgY29kZSAqLworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICBy ZXR1cm4gX19weXhfcjsKKyt9CisrCisrc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0ZXh0XzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZikgeworKyAgaW50IF9f cHl4X3I7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9fZGVsX18iLCAwKTsKKysgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysg IF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CisrICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT50 ZXh0KTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnRleHQpOworKyAgX19weXhfdl9z ZWxmLT50ZXh0ID0gUHlfTm9uZTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAg X19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVy biBfX3B5eF9yOworK30KKysKKysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVs XzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19s ZXZlbF8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CisrICBQeU9iamVjdCAqX19w eXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsX19fZ2V0 X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICop X19weXhfdl9zZWxmKSk7CisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2Fn ZV85bG9nX2xldmVsX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IE5V TEw7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICBf X1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwpOworKyAgX19weXhfciA9IF9fcHl4 X3Zfc2VsZi0+bG9nX2xldmVsOworKyAgZ290byBfX3B5eF9MMDsKKysKKysgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLworKyAgX19weXhfTDA6OworKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7 CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOwor K30KKysKKysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsXzNfX3NldF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLypwcm90byovCisrc3Rh dGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzlsb2df bGV2ZWxfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zf dmFsdWUpIHsKKysgIGludCBfX3B5eF9yOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK KysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fICh3cmFwcGVyKSIsIDApOwor KyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2Vf OWxvZ19sZXZlbF8yX19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1 ZSkpOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysKKytzdGF0aWMgaW50IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF8yX19z ZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CisrICBpbnQgX19weXhfcjsK KysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX19zZXRfXyIsIDApOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWUpOworKyAg X19QeXhfR0lWRVJFRihfX3B5eF92X3ZhbHVlKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3Nl bGYtPmxvZ19sZXZlbCk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwp OworKyAgX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwgPSBfX3B5eF92X3ZhbHVlOworKworKyAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworKy8qIFB5dGhvbiB3 cmFwcGVyICovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBM b2dNZXNzYWdlXzlsb2dfbGV2ZWxfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8q cHJvdG8qLworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9n TWVzc2FnZV85bG9nX2xldmVsXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKysg IGludCBfX3B5eF9yOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9 IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF80 X19kZWxfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3Nh Z2UgKilfX3B5eF92X3NlbGYpKTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9Cisr Cisrc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdl Xzlsb2dfbGV2ZWxfNF9fZGVsX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmKSB7CisrICBpbnQgX19weXhfcjsKKysgIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19k ZWxfXyIsIDApOworKyAgX19QeXhfSU5DUkVGKFB5X05vbmUpOworKyAgX19QeXhfR0lWRVJFRihQ eV9Ob25lKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCk7CisrICBf X1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwpOworKyAgX19weXhfdl9zZWxmLT5s b2dfbGV2ZWwgPSBQeV9Ob25lOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBf X3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJu IF9fcHl4X3I7CisrfQorKworKy8qICIodHJlZSBmcmFnbWVudCkiOjEKKysgKiBkZWYgX19yZWR1 Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg Y2RlZiB0dXBsZSBzdGF0ZQorKyAqICAgICBjZGVmIG9iamVjdCBfZGljdAorKyAqLworKworKy8q IFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzFfX3JlZHVjZV9jeXRob25fXyhQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfMV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVT RUQgUHlPYmplY3QgKnVudXNlZCkgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworKyAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X3JlZHVjZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX19fcmVkdWNlX2N5dGhvbl9fKCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zf c2VsZikpOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysKKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfX19yZWR1 Y2VfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVz c2FnZSAqX19weXhfdl9zZWxmKSB7CisrICBQeU9iamVjdCAqX19weXhfdl9zdGF0ZSA9IDA7Cisr ICBQeU9iamVjdCAqX19weXhfdl9fZGljdCA9IDA7CisrICBpbnQgX19weXhfdl91c2Vfc2V0c3Rh dGU7CisrICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisrICBfX1B5eF9SZWZOYW5ueURlY2xh cmF0aW9ucworKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisrICBpbnQgX19weXhfdF8y OworKyAgaW50IF9fcHl4X3RfMzsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAg aW50IF9fcHl4X3RfNTsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOworKyAgaW50IF9f cHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Cisr ICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19yZWR1Y2VfY3l0aG9uX18iLCAwKTsKKysKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjUKKysg KiAgICAgY2RlZiBvYmplY3QgX2RpY3QKKysgKiAgICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQor KyAqICAgICBzdGF0ZSA9IChzZWxmLmxldmVsLCBzZWxmLmxvZ19sZXZlbCwgc2VsZi5wcmVmaXgs IHNlbGYudGV4dCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBfZGljdCA9 IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKysgKiAgICAgaWYgX2RpY3QgaXMgbm90 IE5vbmU6CisrICovCisrICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPmxldmVsKTsK KysgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zZWxmLT5sZXZlbCk7CisrICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfMSwgMCwgX19weXhfdl9zZWxmLT5sZXZlbCk7CisrICBfX1B5eF9JTkNSRUYo X19weXhfdl9zZWxmLT5sb2dfbGV2ZWwpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYt PmxvZ19sZXZlbCk7CisrICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMSwgX19weXhfdl9z ZWxmLT5sb2dfbGV2ZWwpOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsK KysgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zZWxmLT5wcmVmaXgpOworKyAgUHlUdXBsZV9TRVRf SVRFTShfX3B5eF90XzEsIDIsIF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsKKysgIF9fUHl4X0lOQ1JF RihfX3B5eF92X3NlbGYtPnRleHQpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYtPnRl eHQpOworKyAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDMsIF9fcHl4X3Zfc2VsZi0+dGV4 dCk7CisgICBfX3B5eF92X3N0YXRlID0gKChQeU9iamVjdCopX19weXhfdF8xKTsKKyAgIF9fcHl4 X3RfMSA9IDA7CisgCisgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2CisgICogICAgIGNkZWYgYmlu dCB1c2Vfc2V0c3RhdGUKKy0gKiAgICAgc3RhdGUgPSAoc2VsZi5hcmcwLCBzZWxmLnR5cGUpCisr ICogICAgIHN0YXRlID0gKHNlbGYubGV2ZWwsIHNlbGYubG9nX2xldmVsLCBzZWxmLnByZWZpeCwg c2VsZi50ZXh0KQorICAqICAgICBfZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9u ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBpZiBfZGljdCBpcyBub3Qg Tm9uZToKKyAgKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpCitAQCAtMzk2Nyw3ICs0MTg0LDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1 dERpc3BhdGNoX19fcmVkdWNlX2N5dGhvbl8KKyAgIF9fcHl4X3RfMSA9IDA7CisgCisgICAvKiAi KHRyZWUgZnJhZ21lbnQpIjo3CistICogICAgIHN0YXRlID0gKHNlbGYuYXJnMCwgc2VsZi50eXBl KQorKyAqICAgICBzdGF0ZSA9IChzZWxmLmxldmVsLCBzZWxmLmxvZ19sZXZlbCwgc2VsZi5wcmVm aXgsIHNlbGYudGV4dCkKKyAgKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycs IE5vbmUpCisgICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQorQEAgLTQwMDAsMTIgKzQy MTcsMTIgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNJbnB1dERpc3BhdGNoX19fcmVkdWNlX2N5dGhvbl8KKyAgKiAgICAgICAgIHN0YXRlICs9IChf ZGljdCwpCisgICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNl bGYuYXJnMCBpcyBub3QgTm9uZSBvciBzZWxmLnR5cGUgaXMgbm90IE5vbmUKKysgKiAgICAgICAg IHVzZV9zZXRzdGF0ZSA9IHNlbGYubGV2ZWwgaXMgbm90IE5vbmUgb3Igc2VsZi5sb2dfbGV2ZWwg aXMgbm90IE5vbmUgb3Igc2VsZi5wcmVmaXggaXMgbm90IE5vbmUgb3Igc2VsZi50ZXh0IGlzIG5v dCBOb25lCisgICovCisgICAgIF9fcHl4X3ZfdXNlX3NldHN0YXRlID0gMTsKKyAKKyAgICAgLyog Iih0cmVlIGZyYWdtZW50KSI6NworLSAqICAgICBzdGF0ZSA9IChzZWxmLmFyZzAsIHNlbGYudHlw ZSkKKysgKiAgICAgc3RhdGUgPSAoc2VsZi5sZXZlbCwgc2VsZi5sb2dfbGV2ZWwsIHNlbGYucHJl Zml4LCBzZWxmLnRleHQpCisgICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18n LCBOb25lKQorICAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKK0BAIC00MDE3LDE5ICs0 MjM0LDMzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzSW5wdXREaXNwYXRjaF9fX3JlZHVjZV9jeXRob25fCisgICAvKiAiKHRyZWUgZnJhZ21lbnQp IjoxMQorICAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorICAqICAgICBlbHNlOgorLSAq ICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5hcmcwIGlzIG5vdCBOb25lIG9yIHNlbGYudHlw ZSBpcyBub3QgTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB1 c2Vfc2V0c3RhdGUgPSBzZWxmLmxldmVsIGlzIG5vdCBOb25lIG9yIHNlbGYubG9nX2xldmVsIGlz IG5vdCBOb25lIG9yIHNlbGYucHJlZml4IGlzIG5vdCBOb25lIG9yIHNlbGYudGV4dCBpcyBub3Qg Tm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGlmIHVzZV9zZXRzdGF0 ZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoLCAodHlw ZShzZWxmKSwgMHhiZjY0MWE5LCBOb25lKSwgc3RhdGUKKysgKiAgICAgICAgIHJldHVybiBfX3B5 eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAodHlwZShzZWxmKSwgMHg4Nzc0ZmFlLCBOb25lKSwgc3Rh dGUKKyAgKi8KKyAgIC8qZWxzZSovIHsKKy0gICAgX19weXhfdF8yID0gKF9fcHl4X3Zfc2VsZi0+ YXJnMCAhPSBQeV9Ob25lKTsKKysgICAgX19weXhfdF8yID0gKF9fcHl4X3Zfc2VsZi0+bGV2ZWwg IT0gUHlfTm9uZSk7CisrICAgIF9fcHl4X3RfNSA9IChfX3B5eF90XzIgIT0gMCk7CisrICAgIGlm ICghX19weXhfdF81KSB7CisrICAgIH0gZWxzZSB7CisrICAgICAgX19weXhfdF8zID0gX19weXhf dF81OworKyAgICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworKyAgICB9CisrICAg IF9fcHl4X3RfNSA9IChfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCAhPSBQeV9Ob25lKTsKKysgICAg X19weXhfdF8yID0gKF9fcHl4X3RfNSAhPSAwKTsKKysgICAgaWYgKCFfX3B5eF90XzIpIHsKKysg ICAgfSBlbHNlIHsKKysgICAgICBfX3B5eF90XzMgPSBfX3B5eF90XzI7CisrICAgICAgZ290byBf X3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU7CisrICAgIH0KKysgICAgX19weXhfdF8yID0gKF9fcHl4 X3Zfc2VsZi0+cHJlZml4ICE9IFB5X05vbmUpOworICAgICBfX3B5eF90XzUgPSAoX19weXhfdF8y ICE9IDApOworICAgICBpZiAoIV9fcHl4X3RfNSkgeworICAgICB9IGVsc2UgeworICAgICAgIF9f cHl4X3RfMyA9IF9fcHl4X3RfNTsKKyAgICAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9u ZTsKKyAgICAgfQorLSAgICBfX3B5eF90XzUgPSAoX19weXhfdl9zZWxmLT50eXBlICE9IFB5X05v bmUpOworKyAgICBfX3B5eF90XzUgPSAoX19weXhfdl9zZWxmLT50ZXh0ICE9IFB5X05vbmUpOwor ICAgICBfX3B5eF90XzIgPSAoX19weXhfdF81ICE9IDApOworICAgICBfX3B5eF90XzMgPSBfX3B5 eF90XzI7CisgICAgIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7CitAQCAtNDAzOSwzMiArNDI3 MCwzMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M0lucHV0RGlzcGF0Y2hfX19yZWR1Y2VfY3l0aG9uXworIAorICAgLyogIih0cmVlIGZyYWdtZW50 KSI6MTIKKyAgKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuYXJn MCBpcyBub3QgTm9uZSBvciBzZWxmLnR5cGUgaXMgbm90IE5vbmUKKysgKiAgICAgICAgIHVzZV9z ZXRzdGF0ZSA9IHNlbGYubGV2ZWwgaXMgbm90IE5vbmUgb3Igc2VsZi5sb2dfbGV2ZWwgaXMgbm90 IE5vbmUgb3Igc2VsZi5wcmVmaXggaXMgbm90IE5vbmUgb3Igc2VsZi50ZXh0IGlzIG5vdCBOb25l CisgICogICAgIGlmIHVzZV9zZXRzdGF0ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2gsICh0eXBlKHNl bGYpLCAweGJmNjQxYTksIE5vbmUpLCBzdGF0ZQorKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3Vu cGlja2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIE5vbmUpLCBzdGF0ZQor ICAqICAgICBlbHNlOgorICAqLworICAgX19weXhfdF8zID0gKF9fcHl4X3ZfdXNlX3NldHN0YXRl ICE9IDApOworICAgaWYgKF9fcHl4X3RfMykgeworIAorICAgICAvKiAiKHRyZWUgZnJhZ21lbnQp IjoxMworLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5hcmcwIGlzIG5vdCBOb25lIG9y IHNlbGYudHlwZSBpcyBub3QgTm9uZQorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5s ZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLmxvZ19sZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLnBy ZWZpeCBpcyBub3QgTm9uZSBvciBzZWxmLnRleHQgaXMgbm90IE5vbmUKKyAgKiAgICAgaWYgdXNl X3NldHN0YXRlOgorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0 Y2gsICh0eXBlKHNlbGYpLCAweGJmNjQxYTksIE5vbmUpLCBzdGF0ZSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVzc2Fn ZSwgKHR5cGUoc2VsZiksIDB4ODc3NGZhZSwgTm9uZSksIHN0YXRlICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBp Y2tsZV9JbnB1dERpc3BhdGNoLCAodHlwZShzZWxmKSwgMHhiZjY0MWE5LCBzdGF0ZSkKKysgKiAg ICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAodHlwZShzZWxmKSwgMHg4 Nzc0ZmFlLCBzdGF0ZSkKKyAgKi8KKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAg X19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19weXhfdW5waWNr bGVfSW5wdXREaXNwYXRjaCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEs IDEzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5 eF90XzQsIF9fcHl4X25fc19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSk7IGlmICh1bmxpa2VseSgh X19weXhfdF80KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNCk7CisgICAgIF9fcHl4X3RfMSA9IFB5VHVwbGVfTmV3KDMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCisg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9JTkNSRUYoKChQeU9iamVj dCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7CisgICAgIF9fUHl4X0dJ VkVSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7 CisgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCAoKFB5T2JqZWN0ICopUHlfVFlQ RSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4 X2ludF8yMDA2ODgwNDEpOworLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X2ludF8yMDA2ODgwNDEp OworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMSwgX19weXhfaW50XzIwMDY4ODA0 MSk7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMTQyMDM2OTEwKTsKKysgICAgX19QeXhf R0lWRVJFRihfX3B5eF9pbnRfMTQyMDM2OTEwKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5 eF90XzEsIDEsIF9fcHl4X2ludF8xNDIwMzY5MTApOworICAgICBfX1B5eF9JTkNSRUYoUHlfTm9u ZSk7CisgICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CisgICAgIFB5VHVwbGVfU0VUX0lURU0o X19weXhfdF8xLCAyLCBQeV9Ob25lKTsKK0BAIC00MDg1LDMyICs0MzE2LDMyIEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9f X3JlZHVjZV9jeXRob25fCisgCisgICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjEyCisgICogICAg IGVsc2U6CistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBzZWxmLmFyZzAgaXMgbm90IE5vbmUg b3Igc2VsZi50eXBlIGlzIG5vdCBOb25lCisrICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBzZWxm LmxldmVsIGlzIG5vdCBOb25lIG9yIHNlbGYubG9nX2xldmVsIGlzIG5vdCBOb25lIG9yIHNlbGYu cHJlZml4IGlzIG5vdCBOb25lIG9yIHNlbGYudGV4dCBpcyBub3QgTm9uZQorICAqICAgICBpZiB1 c2Vfc2V0c3RhdGU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHJl dHVybiBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoLCAodHlwZShzZWxmKSwgMHhiZjY0MWE5 LCBOb25lKSwgc3RhdGUKKysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNz YWdlLCAodHlwZShzZWxmKSwgMHg4Nzc0ZmFlLCBOb25lKSwgc3RhdGUKKyAgKiAgICAgZWxzZToK KyAgKi8KKyAgIH0KKyAKKyAgIC8qICIodHJlZSBmcmFnbWVudCkiOjE1CistICogICAgICAgICBy ZXR1cm4gX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCwgKHR5cGUoc2VsZiksIDB4YmY2NDFh OSwgTm9uZSksIHN0YXRlCisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVz c2FnZSwgKHR5cGUoc2VsZiksIDB4ODc3NGZhZSwgTm9uZSksIHN0YXRlCisgICogICAgIGVsc2U6 CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCwgKHR5cGUo c2VsZiksIDB4YmY2NDFhOSwgc3RhdGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAodHlwZShzZWxmKSwg MHg4Nzc0ZmFlLCBzdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIGRlZiBf X3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19weXhfdW5w aWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQorKyAqICAg ICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUp CisgICovCisgICAvKmVsc2UqLyB7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfcHl4X3VucGlj a2xlX0lucHV0RGlzcGF0Y2gpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigx LCAxNSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF82LCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxNSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworICAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygzKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQor ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgX19QeXhfSU5DUkVGKCgoUHlPYmpl Y3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworICAgICBfX1B5eF9H SVZFUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkp OworICAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMCwgKChQeU9iamVjdCAqKVB5X1RZ UEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF9pbnRfMjAwNjg4MDQxKTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRfMjAwNjg4MDQx KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4X2ludF8yMDA2ODgw NDEpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzE0MjAzNjkxMCk7CisrICAgIF9fUHl4 X0dJVkVSRUYoX19weXhfaW50XzE0MjAzNjkxMCk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19w eXhfdF8xLCAxLCBfX3B5eF9pbnRfMTQyMDM2OTEwKTsKKyAgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3Zfc3RhdGUpOworICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc3RhdGUpOworICAgICBQeVR1 cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMiwgX19weXhfdl9zdGF0ZSk7CitAQCAtNDEzOCw3ICs0 MzY5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNJbnB1dERpc3BhdGNoX19fcmVkdWNlX2N5dGhvbl8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhf dF8xKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKyAgIF9fUHl4X1hERUNSRUYoX19w eXhfdF82KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LklucHV0 RGlzcGF0Y2guX19yZWR1Y2VfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8s IF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMu bXB2LkxvZ01lc3NhZ2UuX19yZWR1Y2VfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKyAgIF9fcHl4X3IgPSBOVUxMOworICAgX19weXhfTDA6 OworICAgX19QeXhfWERFQ1JFRihfX3B5eF92X3N0YXRlKTsKK0BAIC00MTUwLDI1ICs0MzgxLDI1 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5w dXREaXNwYXRjaF9fX3JlZHVjZV9jeXRob25fCisgCisgLyogIih0cmVlIGZyYWdtZW50KSI6MTYK KyAgKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9JbnB1dERp c3BhdGNoLCAodHlwZShzZWxmKSwgMHhiZjY0MWE5LCBzdGF0ZSkKKysgKiAgICAgICAgIHJldHVy biBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAodHlwZShzZWxmKSwgMHg4Nzc0ZmFlLCBzdGF0 ZSkKKyAgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX19weXhfdW5waWNrbGVfSW5wdXREaXNw YXRjaF9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQorKyAqICAgICBfX3B5eF91bnBpY2ts ZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCisgICovCisgCisgLyog UHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKnByb3RvKi8K Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0 RGlzcGF0Y2hfM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlP YmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfM19fc2V0c3RhdGVfY3l0aG9uX18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAv KnByb3RvKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9y ID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4 X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzJfX3Nl dHN0YXRlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf SW5wdXREaXNwYXRjaCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4 X3N0YXRlKSk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEw TG9nTWVzc2FnZV8yX19zZXRzdGF0ZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICop X19weXhfdl9fX3B5eF9zdGF0ZSkpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisg ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0K KyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lu cHV0RGlzcGF0Y2hfMl9fc2V0c3RhdGVfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF9zdGF0ZSkgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV8yX19zZXRzdGF0ZV9jeXRob25fXyhzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IE5V TEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4X3Rf MSA9IE5VTEw7CitAQCAtNDE3OCwyMCArNDQwOSwyMCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfMl9fc2V0c3RhdGVfY3l0 aAorICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18iLCAw KTsKKyAKKyAgIC8qICIodHJlZSBmcmFnbWVudCkiOjE3CistICogICAgICAgICByZXR1cm4gX19w eXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCwgKHR5cGUoc2VsZiksIDB4YmY2NDFhOSwgc3RhdGUp CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgKHR5cGUoc2Vs ZiksIDB4ODc3NGZhZSwgc3RhdGUpCisgICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwg X19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoX19zZXRf c3RhdGUoc2VsZiwgX19weXhfc3RhdGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0 YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICovCisgICBpZiAoIShsaWtlbHko UHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5eF92X19fcHl4 X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJFeHBl Y3RlZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5X1RZUEUoX19weXhfdl9fX3B5eF9z dGF0ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFfZXJyb3IpCist ICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2ts ZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUoX19weXhfdl9zZWxmLCAoKFB5T2JqZWN0KilfX3B5 eF92X19fcHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEs IDE3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2X19fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZShfX3B5eF92X3Nl bGYsICgoUHlPYmplY3QqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMSwgMTcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK KyAKKyAgIC8qICIodHJlZSBmcmFnbWVudCkiOjE2CisgICogICAgIGVsc2U6CistICogICAgICAg ICByZXR1cm4gX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCwgKHR5cGUoc2VsZiksIDB4YmY2 NDFhOSwgc3RhdGUpCisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVzc2Fn ZSwgKHR5cGUoc2VsZiksIDB4ODc3NGZhZSwgc3RhdGUpCisgICogZGVmIF9fc2V0c3RhdGVfY3l0 aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZShzZWxmLCBfX3B5 eF9zdGF0ZSkKKysgKiAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKHNl bGYsIF9fcHl4X3N0YXRlKQorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCitA QCAtNDE5OSw3ICs0NDMwLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzJfX3NldHN0YXRlX2N5dGgKKyAgIGdvdG8gX19w eXhfTDA7CisgICBfX3B5eF9MMV9lcnJvcjo7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7 CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5JbnB1dERpc3BhdGNo Ll9fc2V0c3RhdGVfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Lkxv Z01lc3NhZ2UuX19zZXRzdGF0ZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVu bywgX19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7Cisg ICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKK0BAIC00MjA3LDE0OTQgKzQ0MzgsMTY4NyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlz cGF0Y2hfMl9fc2V0c3RhdGVfY3l0aAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxODkKKy0gKiAgICAgY2RlZiBwdWJsaWMgb2Jq ZWN0IHByZWZpeCwgbGV2ZWwsIHRleHQsIGxvZ19sZXZlbAorKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxOTcKKyAgKiAKKy0gKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZl bnRfbG9nX21lc3NhZ2UqIG1zZyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgIHNlbGYubGV2ZWwgPSBfc3RyZGVjKG1zZy5sZXZlbCkKKy0gKiAgICAgICAgIHNlbGYu cHJlZml4ID0gX3N0cmRlYyhtc2cucHJlZml4KQorKyAqIAorKyAqIGNkZWYgX2NvbnZlcnRfbm9k ZV92YWx1ZShtcHZfbm9kZSBub2RlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKysgKiAgICAgICAgIHJl dHVybiBfc3RyZGVjKG5vZGUudS5zdHJpbmcpCisgICovCisgCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfX2luaXQoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmLCBz dHJ1Y3QgbXB2X2V2ZW50X2xvZ19tZXNzYWdlICpfX3B5eF92X21zZykgeworK3N0YXRpYyBQeU9i amVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShz dHJ1Y3QgbXB2X25vZGUgX19weXhfdl9ub2RlKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IE5V TEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4X3Rf MSA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKyAgIFB5T2JqZWN0ICpf X3B5eF90XzMgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CisrICBpbnQg X19weXhfdF81OworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5 eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX2luaXQiLCAwKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfY29udmVydF9ub2RlX3ZhbHVlIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTkwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTk4CisgICogCistICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X2xvZ19tZXNz YWdlKiBtc2cpOgorLSAqICAgICAgICAgc2VsZi5sZXZlbCA9IF9zdHJkZWMobXNnLmxldmVsKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLnByZWZpeCA9IF9z dHJkZWMobXNnLnByZWZpeCkKKy0gKiAgICAgICAgIHNlbGYudGV4dCA9IF9zdHJkZWMobXNnLnRl eHQpCistICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhf bl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDE5MCwg X19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3Rf MyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X21zZy0+bGV2ZWwpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxOTAsIF9fcHl4X0wxX2Vycm9yKQorLSAg X19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICBfX3B5eF90XzQgPSBOVUxMOworLSAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworLSAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAg ICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQ eU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF80KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9fcHl4X3Rf MSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19w eXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIs IF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7 CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5MCwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5 eF90XzIgPSAwOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVG KF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+bGV2 ZWwpOworLSAgX19weXhfdl9zZWxmLT5sZXZlbCA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9 IDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTkxCistICogICAg IGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X2xvZ19tZXNzYWdlKiBtc2cpOgorLSAqICAgICAg ICAgc2VsZi5sZXZlbCA9IF9zdHJkZWMobXNnLmxldmVsKQorLSAqICAgICAgICAgc2VsZi5wcmVm aXggPSBfc3RyZGVjKG1zZy5wcmVmaXgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgIHNlbGYudGV4dCA9IF9zdHJkZWMobXNnLnRleHQpCistICogICAgICAgICBzZWxm LmxvZ19sZXZlbCA9IG1zZy5sb2dfbGV2ZWwKKysgKiBjZGVmIF9jb252ZXJ0X25vZGVfdmFsdWUo bXB2X25vZGUgbm9kZSk6CisrICogICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RS SU5HOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gX3N0 cmRlYyhub2RlLnUuc3RyaW5nKQorKyAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JN QVRfRkxBRzoKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBf X3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MTkxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19w eXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbXNnLT5wcmVmaXgpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxOTEsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICBfX3B5eF90XzQgPSBOVUxMOworLSAg aWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5 eF90XzIpKSkgeworLSAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIp OworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF80KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9f UHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9f cHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf MiwgX19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzIsIF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3Rf NCA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5MSwgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhf R09UUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3Nl bGYtPnByZWZpeCk7CistICBfX3B5eF92X3NlbGYtPnByZWZpeCA9IF9fcHl4X3RfMTsKKy0gIF9f cHl4X3RfMSA9IDA7CisrICBzd2l0Y2ggKF9fcHl4X3Zfbm9kZS5mb3JtYXQpIHsKKysgICAgY2Fz ZSBNUFZfRk9STUFUX1NUUklORzoKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxOTIKKy0gKiAgICAgICAgIHNlbGYubGV2ZWwgPSBfc3RyZGVjKG1zZy5sZXZlbCkKKy0g KiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0cmRlYyhtc2cucHJlZml4KQorLSAqICAgICAgICAg c2VsZi50ZXh0ID0gX3N0cmRlYyhtc2cudGV4dCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBtc2cubG9nX2xldmVsCistICogICAgICAg ICByZXR1cm4gc2VsZgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTk5 CisrICogY2RlZiBfY29udmVydF9ub2RlX3ZhbHVlKG1wdl9ub2RlIG5vZGUpOgorKyAqICAgICBp ZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKysgKiAgICAgICAgIHJldHVybiBf c3RyZGVjKG5vZGUudS5zdHJpbmcpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CisrICogICAgICAgICByZXR1 cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9i YWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDE5MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYo X19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5 eF92X21zZy0+dGV4dCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDE5 MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fcHl4 X3RfNCA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dF VF9TRUxGKF9fcHl4X3RfMik7CistICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgeworLSAgICAg IFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwor LSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5j dGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKysg ICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCAxOTksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKysgICAgX19weXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4 X3Zfbm9kZS51LnN0cmluZyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDE5OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAg ICBfX3B5eF90XzQgPSBOVUxMOworKyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVu bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAgICAgX19weXhfdF80ID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgICBpZiAobGlrZWx5KF9fcHl4X3Rf NCkpIHsKKysgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElP TihfX3B5eF90XzIpOworKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7CisrICAgICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzIsIGZ1bmN0aW9uKTsKKysgICAgICB9CisgICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfMSA9 IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhf dF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9f cHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Cist ICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVGKF9f cHl4X3Zfc2VsZi0+dGV4dCk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT50ZXh0KTsK Ky0gIF9fcHl4X3Zfc2VsZi0+dGV4dCA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7Cisr ICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZyhfX3B5eF90XzIsIF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7CisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5OSwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgX19weXhfciA9IF9fcHl4X3Rf MTsKKysgICAgX19weXhfdF8xID0gMDsKKysgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTMKKy0gKiAgICAgICAgIHNlbGYucHJlZml4 ID0gX3N0cmRlYyhtc2cucHJlZml4KQorLSAqICAgICAgICAgc2VsZi50ZXh0ID0gX3N0cmRlYyht c2cudGV4dCkKKy0gKiAgICAgICAgIHNlbGYubG9nX2xldmVsID0gbXNnLmxvZ19sZXZlbCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1cm4gc2VsZgorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTk4CisgICogCisrICogY2RlZiBfY29u dmVydF9ub2RlX3ZhbHVlKG1wdl9ub2RlIG5vZGUpOgorKyAqICAgICBpZiBub2RlLmZvcm1hdCA9 PSBNUFZfRk9STUFUX1NUUklORzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgcmV0dXJuIF9zdHJkZWMobm9kZS51LnN0cmluZykKKysgKiAgICAgZWxpZiBub2RlLmZv cm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeUlu dF9Gcm9tX2ludChfX3B5eF92X21zZy0+bG9nX2xldmVsKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMTkzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVG KF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYt PmxvZ19sZXZlbCk7CistICBfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCA9IF9fcHl4X3RfMTsKKy0g IF9fcHl4X3RfMSA9IDA7CisrICAgIGJyZWFrOworKyAgICBjYXNlIE1QVl9GT1JNQVRfRkxBRzoK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTQKKy0gKiAgICAgICAg IHNlbGYudGV4dCA9IF9zdHJkZWMobXNnLnRleHQpCistICogICAgICAgICBzZWxmLmxvZ19sZXZl bCA9IG1zZy5sb2dfbGV2ZWwKKy0gKiAgICAgICAgIHJldHVybiBzZWxmICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjIwMQorKyAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobm9kZS51LnN0cmluZykK KysgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CisrICogICAgICAg ICByZXR1cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorKyAq ICAgICAgICAgcmV0dXJuIGludChub2RlLnUuaW50NjQpCisgICovCistICBfX1B5eF9YREVDUkVG KF9fcHl4X3IpOworLSAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsK Ky0gIF9fcHl4X3IgPSAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKTsKKy0gIGdvdG8gX19weXhf TDA7CisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICAgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5SW50X0Zyb21faW50KF9fcHl4X3Zfbm9kZS51LmZsYWcpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAyMDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZygoKFB5T2JqZWN0ICopKCZQeUludF9UeXBlKSksIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDIwMSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKysgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Rf Mik7IGlmICh1bmxpa2VseShfX3B5eF90XzUgPCAwKSkgX19QWVhfRVJSKDAsIDIwMSwgX19weXhf TDFfZXJyb3IpCisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor KyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoKCFfX3B5eF90XzUpICE9 IDApKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDIwMSwgX19weXhf TDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX3B5eF9yID0g X19weXhfdF8yOworKyAgICBfX3B5eF90XzIgPSAwOworKyAgICBnb3RvIF9fcHl4X0wwOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE4OQorLSAqICAgICBjZGVmIHB1 YmxpYyBvYmplY3QgcHJlZml4LCBsZXZlbCwgdGV4dCwgbG9nX2xldmVsCistICogCistICogICAg IGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X2xvZ19tZXNzYWdlKiBtc2cpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmxldmVsID0gX3N0cmRlYyhtc2cu bGV2ZWwpCistICogICAgICAgICBzZWxmLnByZWZpeCA9IF9zdHJkZWMobXNnLnByZWZpeCkKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwMAorKyAqICAgICBpZiBub2Rl LmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKysgKiAgICAgICAgIHJldHVybiBfc3RyZGVj KG5vZGUudS5zdHJpbmcpCisrICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9G TEFHOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gbm90 IG5vdCBpbnQobm9kZS51LmZsYWcpCisrICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZP Uk1BVF9JTlQ2NDoKKyAgKi8KKysgICAgYnJlYWs7CisrICAgIGNhc2UgTVBWX0ZPUk1BVF9JTlQ2 NDoKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfTDFfZXJyb3I6Owor LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzQpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuTG9nTWVzc2Fn ZS5faW5pdCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwor LSAgX19weXhfciA9IDA7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9y KTsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7 CistfQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjAzCisrICogICAg ICAgICByZXR1cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpCisrICogICAgIGVsaWYgbm9kZS5m b3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKysgKiAgICAgICAgIHJldHVybiBpbnQobm9kZS51 LmludDY0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGVsaWYgbm9kZS5m b3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisrICogICAgICAgICByZXR1cm4gZmxvYXQobm9k ZS51LmRvdWJsZV8pCisrICovCisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICAgIF9f cHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRfdChfX3B5eF92X25vZGUudS5pbnQ2NCk7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDIwMywgX19weXhfTDFfZXJy b3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX3B5eF90XzEgPSBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKCgoUHlPYmplY3QgKikoJlB5SW50X1R5cGUpKSwgX19weXhf dF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjAzLCBfX3B5eF9M MV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX3B5eF9yID0gX19weXhfdF8xOwor KyAgICBfX3B5eF90XzEgPSAwOworKyAgICBnb3RvIF9fcHl4X0wwOworIAorLS8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxODcKKy0gKiAgICAgV3JhcHM6IG1wdl9ldmVudF9sb2df bWVzc2FnZQorLSAqICAgICAiIiIKKy0gKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHByZWZpeCwg bGV2ZWwsIHRleHQsIGxvZ19sZXZlbCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog CistICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X2xvZ19tZXNzYWdlKiBtc2cpOgor KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjAyCisrICogICAgIGVsaWYg bm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgorKyAqICAgICAgICAgcmV0dXJuIG5vdCBu b3QgaW50KG5vZGUudS5mbGFnKQorKyAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JN QVRfSU5UNjQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHJldHVy biBpbnQobm9kZS51LmludDY0KQorKyAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JN QVRfRE9VQkxFOgorICAqLworKyAgICBicmVhazsKKysgICAgY2FzZSBNUFZfRk9STUFUX0RPVUJM RToKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzFfX2dldF9fKFB5T2Jq ZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8xX19nZXRfXyhQeU9i amVjdCAqX19weXhfdl9zZWxmKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9f Z2V0X18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4X19fZ2V0X18oKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopX19weXhfdl9zZWxmKSk7CistCist ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4X19fZ2V0X18oc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9z ZWxmKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CistICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsK Ky0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxm LT5wcmVmaXgpOworLSAgX19weXhfciA9IF9fcHl4X3Zfc2VsZi0+cHJlZml4OworLSAgZ290byBf X3B5eF9MMDsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfTDA6Owor LSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRl eHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjIwNQorKyAqICAgICAgICAgcmV0dXJuIGludChub2RlLnUuaW50NjQpCisr ICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisrICogICAgICAg ICByZXR1cm4gZmxvYXQobm9kZS51LmRvdWJsZV8pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorKyAq ICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZvcm1hdCkK KysgKi8KKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19weXhfdF8xID0gUHlG bG9hdF9Gcm9tRG91YmxlKF9fcHl4X3Zfbm9kZS51LmRvdWJsZV8pOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKysgICAgX19weXhfciA9IF9fcHl4X3RfMTsKKysgICAgX19weXhf dF8xID0gMDsKKysgICAgZ290byBfX3B5eF9MMDsKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLwor LXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82 cHJlZml4XzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X3ZhbHVlKTsgLypwcm90byovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVmaXhfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKKy0gIGludCBfX3B5eF9yOworLSAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3Nl dF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8yX19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpLCAoKFB5T2Jq ZWN0ICopX19weXhfdl92YWx1ZSkpOworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjA0CisrICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoK KysgKiAgICAgICAgIHJldHVybiBpbnQobm9kZS51LmludDY0KQorKyAqICAgICBlbGlmIG5vZGUu Zm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICByZXR1cm4gZmxvYXQobm9kZS51LmRvdWJsZV8pCisrICogICAgIGVsaWYg bm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKysgKi8KKysgICAgYnJlYWs7Cisr ICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX01BUDoKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhf cjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMDcKKysgKiAg ICAgICAgIHJldHVybiBmbG9hdChub2RlLnUuZG91YmxlXykKKysgKiAgICAgZWxpZiBub2RlLmZv cm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorKyAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0 X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZvcm1hdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToK KysgKiAgICAgICAgIHJldHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3Jt YXQpCisrICovCisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICAgIF9fcHl4X3RfMSA9 IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKF9fcHl4X3Zfbm9k ZS51Lmxpc3QsIF9fcHl4X3Zfbm9kZS5mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAyMDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKysgICAgX19weXhfciA9IF9fcHl4X3RfMTsKKysgICAgX19weXhfdF8xID0gMDsK KysgICAgZ290byBfX3B5eF9MMDsKKyAKKy1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X3ZhbHVlKSB7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55RGVj bGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOwor LSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWUpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF92 X3ZhbHVlKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnByZWZpeCk7CistICBfX1B5 eF9ERUNSRUYoX19weXhfdl9zZWxmLT5wcmVmaXgpOworLSAgX19weXhfdl9zZWxmLT5wcmVmaXgg PSBfX3B5eF92X3ZhbHVlOworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MjA2CisrICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisrICog ICAgICAgICByZXR1cm4gZmxvYXQobm9kZS51LmRvdWJsZV8pCisrICogICAgIGVsaWYgbm9kZS5m b3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZv cm1hdCkKKysgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6 CisrICovCisrICAgIGJyZWFrOworKyAgICBjYXNlIE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKKyAK Ky0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IDA7CistICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwOQorKyAqICAgICAgICAgcmV0dXJuIF9j b252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZvcm1hdCkKKysgKiAgICAgZWxpZiBub2Rl LmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6CisrICogICAgICAgICByZXR1cm4gX2Nv bnZlcnRfdmFsdWUobm9kZS51Lmxpc3QsIG5vZGUuZm9ybWF0KSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgIHJldHVybiBOb25lCisrICogCisrICovCisrICAgIF9fUHl4X1hE RUNSRUYoX19weXhfcik7CisrICAgIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2X19jb252ZXJ0X3ZhbHVlKF9fcHl4X3Zfbm9kZS51Lmxpc3QsIF9fcHl4X3Zfbm9kZS5m b3JtYXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMDksIF9fcHl4 X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19weXhfciA9 IF9fcHl4X3RfMTsKKysgICAgX19weXhfdF8xID0gMDsKKysgICAgZ290byBfX3B5eF9MMDsKKyAK Ky0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxm KSB7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyAod3JhcHBlcikiLCAwKTsKKy0gIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVm aXhfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlICopX19weXhfdl9zZWxmKSk7CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyMDgKKysgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVf TUFQOgorKyAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2Rl LmZvcm1hdCkKKysgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJS QVk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHJldHVybiBfY29u dmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpCisrICogICAgIHJldHVybiBOb25l CisrICovCisrICAgIGJyZWFrOworKyAgICBkZWZhdWx0OiBicmVhazsKKysgIH0KKyAKKy0gIC8q IGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 CistICByZXR1cm4gX19weXhfcjsKKy19CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjEwCisrICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FS UkFZOgorKyAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2Rl LmZvcm1hdCkKKysgKiAgICAgcmV0dXJuIE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqIAorKyAqIAorKyAqLworKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgIF9fcHl4 X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOwor IAorLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2Fn ZV82cHJlZml4XzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZikgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVs X18iLCAwKTsKKy0gIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gIF9fUHl4X0dJVkVSRUYoUHlf Tm9uZSk7CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5wcmVmaXgpOworLSAgX19QeXhf REVDUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsKKy0gIF9fcHl4X3Zfc2VsZi0+cHJlZml4ID0g UHlfTm9uZTsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTcKKysgKiAK KysgKiAKKysgKiBjZGVmIF9jb252ZXJ0X25vZGVfdmFsdWUobXB2X25vZGUgbm9kZSk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZP Uk1BVF9TVFJJTkc6CisrICogICAgICAgICByZXR1cm4gX3N0cmRlYyhub2RlLnUuc3RyaW5nKQor KyAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7 CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Mik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfNCk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fY29udmVy dF9ub2RlX3ZhbHVlIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFt ZSk7CisgICBfX3B5eF9yID0gMDsKKysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzFfX2dldF9f KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzFfX2dldF9f KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0g IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZlbF9fX2dldF9fKCgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZikpOwor LQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjEzCisrICogCisrICogCisrICogY2RlZiBfY29udmVydF92YWx1ZSh2b2lk KiBkYXRhLCBtcHZfZm9ybWF0IGZvcm1hdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgY2RlZiBtcHZfbm9kZSBub2RlCisrICogICAgIGNkZWYgbXB2X25vZGVfbGlzdCBu b2RlbGlzdAorKyAqLworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYpIHsKKytzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKHZv aWQgKl9fcHl4X3ZfZGF0YSwgZW51bSBtcHZfZm9ybWF0IF9fcHl4X3ZfZm9ybWF0KSB7CisrICBz dHJ1Y3QgbXB2X25vZGUgX19weXhfdl9ub2RlOworKyAgc3RydWN0IG1wdl9ub2RlX2xpc3QgX19w eXhfdl9ub2RlbGlzdDsKKysgIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlcyA9IE5VTEw7CisrICBp bnQgX19weXhfdl9pOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUgPSBOVUxMOworICAgUHlP YmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0g IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fIiwgMCk7CistICBfX1B5eF9YREVD UkVGKF9fcHl4X3IpOworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOworLSAg X19weXhfciA9IF9fcHl4X3Zfc2VsZi0+bGV2ZWw7CistICBnb3RvIF9fcHl4X0wwOworKyAgUHlP YmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisrICBpbnQgX19weXhfdF8yOworKyAgaW50IF9fcHl4 X3RfMzsKKysgIGludCBfX3B5eF90XzQ7CisrICBpbnQgX19weXhfdF81OworKyAgUHlPYmplY3Qg Kl9fcHl4X3RfNiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKKysgIFB5 T2JqZWN0ICpfX3B5eF90XzggPSBOVUxMOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBj b25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9 IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2NvbnZlcnRfdmFsdWUiLCAwKTsK KyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfTDA6OworLSAgX19QeXhf WEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0g IHJldHVybiBfX3B5eF9yOworLX0KKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyMTYKKysgKiAgICAgY2RlZiBtcHZfbm9kZSBub2RlCisrICogICAgIGNkZWYgbXB2X25vZGVf bGlzdCBub2RlbGlzdAorKyAqICAgICBpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBub2RlID0gKDxtcHZfbm9kZSo+ ZGF0YSlbMF0KKysgKiAgICAgICAgIHJldHVybiBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGUpCisr ICovCisrICBzd2l0Y2ggKF9fcHl4X3ZfZm9ybWF0KSB7CisrICAgIGNhc2UgTVBWX0ZPUk1BVF9O T0RFOgorIAorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIGludCBfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZlbF8zX19zZXRfXyhQeU9iamVjdCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qcHJvdG8qLworLXN0YXRp YyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxf M19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUp IHsKKy0gIGludCBfX3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fICh3cmFwcGVyKSIsIDApOworLSAgX19w eXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVs XzJfX3NldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVz c2FnZSAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVlKSk7CisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTcKKysgKiAgICAgY2RlZiBtcHZf bm9kZV9saXN0IG5vZGVsaXN0CisrICogICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREU6 CisrICogICAgICAgICBub2RlID0gKDxtcHZfbm9kZSo+ZGF0YSlbMF0gICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9k ZSkKKysgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorKyAqLwor KyAgICBfX3B5eF92X25vZGUgPSAoKChzdHJ1Y3QgbXB2X25vZGUgKilfX3B5eF92X2RhdGEpWzBd KTsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyMTgKKysgKiAgICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRf Tk9ERToKKysgKiAgICAgICAgIG5vZGUgPSAoPG1wdl9ub2RlKj5kYXRhKVswXQorKyAqICAgICAg ICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6Cisr ICogICAgICAgICBub2RlbGlzdCA9ICg8bXB2X25vZGVfbGlzdCo+ZGF0YSlbMF0KKysgKi8KKysg ICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19weXhfdF8xID0gX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShfX3B5eF92X25vZGUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMTgsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19weXhfciA9IF9fcHl4X3RfMTsK KysgICAgX19weXhfdF8xID0gMDsKKysgICAgZ290byBfX3B5eF9MMDsKKyAKKy1zdGF0aWMgaW50 IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzJfX3Nl dF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKKy0gIGludCBfX3B5eF9yOwor LSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfX3NldF9fIiwgMCk7CistICBfX1B5eF9JTkNSRUYoX19weXhfdl92YWx1ZSk7CistICBf X1B5eF9HSVZFUkVGKF9fcHl4X3ZfdmFsdWUpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2Vs Zi0+bGV2ZWwpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOworLSAgX19w eXhfdl9zZWxmLT5sZXZlbCA9IF9fcHl4X3ZfdmFsdWU7CisrICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoyMTYKKysgKiAgICAgY2RlZiBtcHZfbm9kZSBub2RlCisrICogICAg IGNkZWYgbXB2X25vZGVfbGlzdCBub2RlbGlzdAorKyAqICAgICBpZiBmb3JtYXQgPT0gTVBWX0ZP Uk1BVF9OT0RFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBub2Rl ID0gKDxtcHZfbm9kZSo+ZGF0YSlbMF0KKysgKiAgICAgICAgIHJldHVybiBfY29udmVydF9ub2Rl X3ZhbHVlKG5vZGUpCisrICovCisrICAgIGJyZWFrOworKyAgICBjYXNlIE1QVl9GT1JNQVRfTk9E RV9BUlJBWToKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IDA7 CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOwor LX0KKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyMAorKyAqICAgICAg ICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZSkKKysgKiAgICAgZWxpZiBmb3JtYXQg PT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorKyAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9u b2RlX2xpc3QqPmRhdGEpWzBdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgIHZhbHVlcyA9IFtdCisrICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0p OgorKyAqLworKyAgICBfX3B5eF92X25vZGVsaXN0ID0gKCgoc3RydWN0IG1wdl9ub2RlX2xpc3Qg KilfX3B5eF92X2RhdGEpWzBdKTsKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBp bnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxfNV9f ZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0YXRpYyBpbnQgX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxfNV9fZGVsX18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVsX18g KHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopX19weXhfdl9zZWxmKSk7CisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjEKKysgKiAgICAgZWxpZiBmb3JtYXQgPT0g TVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorKyAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2Rl X2xpc3QqPmRhdGEpWzBdCisrICogICAgICAgICB2YWx1ZXMgPSBbXSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0pOgor KyAqICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlz dC52YWx1ZXNbaV0pKQorKyAqLworKyAgICBfX3B5eF90XzEgPSBQeUxpc3RfTmV3KDApOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjEsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19weXhfdl92YWx1ZXMgPSBfX3B5 eF90XzE7CisrICAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7 CistfQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjIyCisrICogICAg ICAgICBub2RlbGlzdCA9ICg8bXB2X25vZGVfbGlzdCo+ZGF0YSlbMF0KKysgKiAgICAgICAgIHZh bHVlcyA9IFtdCisrICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0pOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChf Y29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkpCisrICogICAgICAgICByZXR1 cm4gdmFsdWVzCisrICovCisrICAgIF9fcHl4X3RfMiA9IF9fcHl4X3Zfbm9kZWxpc3QubnVtOwor KyAgICBfX3B5eF90XzMgPSBfX3B5eF90XzI7CisrICAgIGZvciAoX19weXhfdF80ID0gMDsgX19w eXhfdF80IDwgX19weXhfdF8zOyBfX3B5eF90XzQrPTEpIHsKKysgICAgICBfX3B5eF92X2kgPSBf X3B5eF90XzQ7CisgCistc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTBMb2dNZXNzYWdlXzVsZXZlbF80X19kZWxfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYpIHsKKy0gIGludCBfX3B5eF9yOwor LSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfX2RlbF9fIiwgMCk7CistICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBfX1B5eF9H SVZFUkVGKFB5X05vbmUpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOwor LSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOworLSAgX19weXhfdl9zZWxmLT5s ZXZlbCA9IFB5X05vbmU7CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjIyMworKyAqICAgICAgICAgdmFsdWVzID0gW10KKysgKiAgICAgICAgIGZvciBpIGluIHJhbmdl KG5vZGVsaXN0Lm51bSk6CisrICogICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChfY29udmVydF9u b2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgIHJldHVybiB2YWx1ZXMKKysgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBW X0ZPUk1BVF9OT0RFX01BUDoKKysgKi8KKysgICAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKChfX3B5eF92X25vZGVsaXN0LnZh bHVlc1tfX3B5eF92X2ldKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDIyMywgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Cisr ICAgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfQXBwZW5kKF9fcHl4X3ZfdmFsdWVzLCBf X3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF81ID09ICgoaW50KS0xKSkpIF9fUFlYX0VS UigwLCAyMjMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEp OyBfX3B5eF90XzEgPSAwOworKyAgICB9CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K Ky0gIF9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICBy ZXR1cm4gX19weXhfcjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyMjQKKysgKiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51bSk6CisrICogICAg ICAgICAgICAgdmFsdWVzLmFwcGVuZChfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVl c1tpXSkpCisrICogICAgICAgICByZXR1cm4gdmFsdWVzICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKysgKiAg ICAgICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRhKVswXQorKyAqLworKyAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdl92YWx1ZXMp OworKyAgICBfX3B5eF9yID0gX19weXhfdl92YWx1ZXM7CisrICAgIGdvdG8gX19weXhfTDA7Cisg CistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNHRleHRfMV9fZ2V0X18oUHlPYmplY3QgKl9f cHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF8xX19nZXRfXyhQeU9iamVjdCAqX19w eXhfdl9zZWxmKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdy YXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEwTG9nTWVzc2FnZV80dGV4dF9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZikpOworKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjE5CisrICogICAgICAgICBub2RlID0gKDxtcHZfbm9k ZSo+ZGF0YSlbMF0KKysgKiAgICAgICAgIHJldHVybiBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGUp CisrICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xp c3QqPmRhdGEpWzBdCisrICogICAgICAgICB2YWx1ZXMgPSBbXQorKyAqLworKyAgICBicmVhazsK KysgICAgY2FzZSBNUFZfRk9STUFUX05PREVfTUFQOgorIAorLSAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5 eF9yOworLX0KKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNgorKyAq ICAgICAgICAgcmV0dXJuIHZhbHVlcworKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X05PREVfTUFQOgorKyAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEp WzBdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHZhbHVlcyA9IHt9 CisrICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0pOgorKyAqLworKyAgICBf X3B5eF92X25vZGVsaXN0ID0gKCgoc3RydWN0IG1wdl9ub2RlX2xpc3QgKilfX3B5eF92X2RhdGEp WzBdKTsKKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfNHRleHRfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5T2JqZWN0ICpfX3B5 eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPnRleHQpOworLSAgX19weXhfciA9IF9f cHl4X3Zfc2VsZi0+dGV4dDsKKy0gIGdvdG8gX19weXhfTDA7CisrICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyMjcKKysgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1B VF9OT0RFX01BUDoKKysgKiAgICAgICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRh KVswXQorKyAqICAgICAgICAgdmFsdWVzID0ge30gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKToKKysgKiAgICAgICAg ICAgICB2YWx1ZSA9IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZWxpc3QudmFsdWVzW2ldKQorKyAq LworKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeURpY3RfTmV3UHJlc2l6ZWQoMCk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIyNywgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX3B5eF92X3ZhbHVlcyA9IF9fcHl4X3Rf MTsKKysgICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor LSAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyOAorKyAqICAgICAgICAgbm9kZWxpc3QgPSAo PG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCisrICogICAgICAgICB2YWx1ZXMgPSB7fQorKyAqICAg ICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgICAgIHZhbHVlID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2Rl bGlzdC52YWx1ZXNbaV0pCisrICogICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMobm9kZWxpc3Qu a2V5c1tpXSldID0gdmFsdWUKKysgKi8KKysgICAgX19weXhfdF8yID0gX19weXhfdl9ub2RlbGlz dC5udW07CisrICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfMjsKKysgICAgZm9yIChfX3B5eF90XzQg PSAwOyBfX3B5eF90XzQgPCBfX3B5eF90XzM7IF9fcHl4X3RfNCs9MSkgeworKyAgICAgIF9fcHl4 X3ZfaSA9IF9fcHl4X3RfNDsKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBpbnQg X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF8zX19zZXRf XyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qcHJv dG8qLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVz c2FnZV80dGV4dF8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl92YWx1ZSkgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18gKHdyYXBwZXIpIiwg MCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVz c2FnZV80dGV4dF8yX19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1 ZSkpOworKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjkKKysgKiAg ICAgICAgIHZhbHVlcyA9IHt9CisrICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5u dW0pOgorKyAqICAgICAgICAgICAgIHZhbHVlID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlz dC52YWx1ZXNbaV0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICB2YWx1ZXNbX3N0cmRlYyhub2RlbGlzdC5rZXlzW2ldKV0gPSB2YWx1ZQorKyAqICAgICAgICAg cmV0dXJuIHZhbHVlcworKyAqLworKyAgICAgIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoKF9fcHl4X3Zfbm9kZWxpc3QudmFsdWVz W19fcHl4X3ZfaV0pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjI5 LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAg ICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X3ZhbHVlLCBfX3B5eF90XzEpOworKyAgICAgIF9f cHl4X3RfMSA9IDA7CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1Jl Zk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMzAKKysgKiAgICAgICAgIGZvciBpIGlu IHJhbmdlKG5vZGVsaXN0Lm51bSk6CisrICogICAgICAgICAgICAgdmFsdWUgPSBfY29udmVydF9u b2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkKKysgKiAgICAgICAgICAgICB2YWx1ZXNbX3N0 cmRlYyhub2RlbGlzdC5rZXlzW2ldKV0gPSB2YWx1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICByZXR1cm4gdmFsdWVzCisrICogICAgIGVsaWYgZm9ybWF0ID09IE1Q Vl9GT1JNQVRfU1RSSU5HOgorKyAqLworKyAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF82LCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgMjMwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKKysgICAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoKF9f cHl4X3Zfbm9kZWxpc3Qua2V5c1tfX3B5eF92X2ldKSk7IGlmICh1bmxpa2VseSghX19weXhfdF83 KSkgX19QWVhfRVJSKDAsIDIzMCwgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNyk7CisrICAgICAgX19weXhfdF84ID0gTlVMTDsKKysgICAgICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7 CisrICAgICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOworKyAg ICAgICAgaWYgKGxpa2VseShfX3B5eF90XzgpKSB7CisrICAgICAgICAgIFB5T2JqZWN0KiBmdW5j dGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzYpOworKyAgICAgICAgICBfX1B5 eF9JTkNSRUYoX19weXhfdF84KTsKKysgICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsK KysgICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1bmN0aW9uKTsKKysgICAg ICAgIH0KKysgICAgICB9CisrICAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfOCkgPyBfX1B5eF9Q eU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzgsIF9fcHl4X3RfNykgOiBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF83KTsKKysgICAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7CisrICAgICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisrICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMjMwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKysgICAgICBpZiAodW5saWtlbHkoUHlPYmplY3RfU2V0SXRlbShfX3B5eF92X3ZhbHVl cywgX19weXhfdF8xLCBfX3B5eF92X3ZhbHVlKSA8IDApKSBfX1BZWF9FUlIoMCwgMjMwLCBfX3B5 eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKysgICAgfQorIAorLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEwTG9nTWVzc2FnZV80dGV4dF8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Zh bHVlKSB7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOworLSAgX19QeXhfSU5D UkVGKF9fcHl4X3ZfdmFsdWUpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X3ZhbHVlKTsKKy0g IF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnRleHQpOworLSAgX19QeXhfREVDUkVGKF9fcHl4 X3Zfc2VsZi0+dGV4dCk7CistICBfX3B5eF92X3NlbGYtPnRleHQgPSBfX3B5eF92X3ZhbHVlOwor KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjMxCisrICogICAgICAgICAg ICAgdmFsdWUgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkKKysgKiAg ICAgICAgICAgICB2YWx1ZXNbX3N0cmRlYyhub2RlbGlzdC5rZXlzW2ldKV0gPSB2YWx1ZQorKyAq ICAgICAgICAgcmV0dXJuIHZhbHVlcyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgorKyAqICAgICAgICAgcmV0dXJu IF9zdHJkZWMoKCg8Y2hhcioqPmRhdGEpWzBdKSkKKysgKi8KKysgICAgX19QeXhfWERFQ1JFRihf X3B5eF9yKTsKKysgICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWVzKTsKKysgICAgX19weXhf ciA9IF9fcHl4X3ZfdmFsdWVzOworKyAgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjI1CisrICogICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChfY29u dmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkpCisrICogICAgICAgICByZXR1cm4g dmFsdWVzCisrICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9k ZV9saXN0Kj5kYXRhKVswXQorKyAqICAgICAgICAgdmFsdWVzID0ge30KKysgKi8KKysgICAgYnJl YWs7CisrICAgIGNhc2UgTVBWX0ZPUk1BVF9TVFJJTkc6CisgCistLyogUHl0aG9uIHdyYXBwZXIg Ki8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfNHRleHRfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0 YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4 dF81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CistICBpbnQgX19weXhfcjsKKy0g IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgiX19kZWxfXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0ZXh0XzRfX2RlbF9fKCgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZikpOwor LQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNHRleHRfNF9fZGVsX18oc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxm KSB7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyIsIDApOworLSAgX19QeXhfSU5DUkVG KFB5X05vbmUpOworLSAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF92X3NlbGYtPnRleHQpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+dGV4dCk7 CistICBfX3B5eF92X3NlbGYtPnRleHQgPSBQeV9Ob25lOworLQorLSAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCistICBfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLS8qIFB5dGhvbiB3cmFwcGVyICovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzlsb2dfbGV2ZWxfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8q LworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9n TWVzc2FnZV85bG9nX2xldmVsXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKy0g IFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKKy0g IF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzls b2dfbGV2ZWxfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpKTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhf cjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMzMKKysgKiAg ICAgICAgIHJldHVybiB2YWx1ZXMKKysgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9T VFJJTkc6CisrICogICAgICAgICByZXR1cm4gX3N0cmRlYygoKDxjaGFyKio+ZGF0YSlbMF0pKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9G T1JNQVRfRkxBRzoKKysgKiAgICAgICAgIHJldHVybiBub3Qgbm90ICg8dWludDY0X3QqPmRhdGEp WzBdCisrICovCisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICAgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5Qnl0ZXNfRnJv bVN0cmluZygoKChjaGFyICoqKV9fcHl4X3ZfZGF0YSlbMF0pKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNyk7CisrICAgIF9fcHl4X3RfOCA9IE5VTEw7CisrICAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsK KysgICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOworKyAgICAg IGlmIChsaWtlbHkoX19weXhfdF84KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0g UHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7CisrICAgICAgICBfX1B5eF9JTkNSRUYo X19weXhfdF84KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBf X1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQor KyAgICBfX3B5eF90XzEgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhf X3B5eF90XzYsIF9fcHl4X3RfOCwgX19weXhfdF83KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF82LCBfX3B5eF90XzcpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7 IF9fcHl4X3RfOCA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90Xzcg PSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMzMsIF9f cHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICAgIF9fcHl4X3IgPSBfX3B5eF90 XzE7CisrICAgIF9fcHl4X3RfMSA9IDA7CisrICAgIGdvdG8gX19weXhfTDA7CisgCistc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzls b2dfbGV2ZWxfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9M b2dNZXNzYWdlICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsK Ky0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX19nZXRfXyIsIDApOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4 X0lOQ1JFRihfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCk7CistICBfX3B5eF9yID0gX19weXhfdl9z ZWxmLT5sb2dfbGV2ZWw7CistICBnb3RvIF9fcHl4X0wwOworKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjMyCisrICogICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMobm9k ZWxpc3Qua2V5c1tpXSldID0gdmFsdWUKKysgKiAgICAgICAgIHJldHVybiB2YWx1ZXMKKysgKiAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKCgoPGNoYXIqKj5kYXRhKVswXSkp CisrICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzoKKysgKi8KKysgICAgYnJl YWs7CisrICAgIGNhc2UgTVBWX0ZPUk1BVF9GTEFHOgorIAorLSAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCistICBfX3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKy0gIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM1CisrICogICAgICAgICByZXR1 cm4gX3N0cmRlYygoKDxjaGFyKio+ZGF0YSlbMF0pKQorKyAqICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX0ZMQUc6CisrICogICAgICAgICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2NF90Kj5k YXRhKVswXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGVsaWYgZm9ybWF0 ID09IE1QVl9GT1JNQVRfSU5UNjQ6CisrICogICAgICAgICByZXR1cm4gaW50KCg8dWludDY0X3Qq PmRhdGEpWzBdKQorKyAqLworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgICBfX3B5 eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoKCEoKCgodWludDY0X3QgKilfX3B5eF92 X2RhdGEpWzBdKSAhPSAwKSkgIT0gMCkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgMjM1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CisrICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisrICAgIF9fcHl4X3RfMSA9IDA7CisrICAg IGdvdG8gX19weXhfTDA7CisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgaW50IF9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF8zX19z ZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8q cHJvdG8qLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9n TWVzc2FnZV85bG9nX2xldmVsXzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF92X3ZhbHVlKSB7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyAod3Jh cHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTBMb2dNZXNzYWdlXzlsb2dfbGV2ZWxfMl9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAq KV9fcHl4X3ZfdmFsdWUpKTsKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjIzNAorKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKysgKiAgICAg ICAgIHJldHVybiBfc3RyZGVjKCgoPGNoYXIqKj5kYXRhKVswXSkpCisrICogICAgIGVsaWYgZm9y bWF0ID09IE1QVl9GT1JNQVRfRkxBRzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgcmV0dXJuIG5vdCBub3QgKDx1aW50NjRfdCo+ZGF0YSlbMF0KKysgKiAgICAgZWxp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKysgKi8KKysgICAgYnJlYWs7CisrICAgIGNh c2UgTVBWX0ZPUk1BVF9JTlQ2NDoKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19Cisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMzcKKysgKiAgICAgICAgIHJl dHVybiBub3Qgbm90ICg8dWludDY0X3QqPmRhdGEpWzBdCisrICogICAgIGVsaWYgZm9ybWF0ID09 IE1QVl9GT1JNQVRfSU5UNjQ6CisrICogICAgICAgICByZXR1cm4gaW50KCg8dWludDY0X3QqPmRh dGEpWzBdKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGVsaWYgZm9ybWF0 ID09IE1QVl9GT1JNQVRfRE9VQkxFOgorKyAqICAgICAgICAgcmV0dXJuIGZsb2F0KCg8ZG91Ymxl Kj5kYXRhKVswXSkKKysgKi8KKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19w eXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCgoKCh1aW50NjRfdCAqKV9fcHl4X3Zf ZGF0YSlbMF0pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjM3LCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fcHl4 X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoKChQeU9iamVjdCAqKSgmUHlJbnRfVHlw ZSkpLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAy MzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICAgIF9fcHl4X3IgPSBf X3B5eF90XzY7CisrICAgIF9fcHl4X3RfNiA9IDA7CisrICAgIGdvdG8gX19weXhfTDA7CisgCist c3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzls b2dfbGV2ZWxfMl9fc2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf TG9nTWVzc2FnZSAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworLSAg aW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18iLCAwKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92 X3ZhbHVlKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdl92YWx1ZSk7CistICBfX1B5eF9HT1RS RUYoX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2Vs Zi0+bG9nX2xldmVsKTsKKy0gIF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsID0gX19weXhfdl92YWx1 ZTsKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzNgorKyAqICAgICBl bGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CisrICogICAgICAgICByZXR1cm4gbm90IG5v dCAoPHVpbnQ2NF90Kj5kYXRhKVswXQorKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X0lOVDY0OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4g aW50KCg8dWludDY0X3QqPmRhdGEpWzBdKQorKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX0RPVUJMRToKKysgKi8KKysgICAgYnJlYWs7CisrICAgIGNhc2UgTVBWX0ZPUk1BVF9ET1VC TEU6CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSAwOworLSAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19Cisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMzkKKysgKiAgICAgICAgIHJl dHVybiBpbnQoKDx1aW50NjRfdCo+ZGF0YSlbMF0pCisrICogICAgIGVsaWYgZm9ybWF0ID09IE1Q Vl9GT1JNQVRfRE9VQkxFOgorKyAqICAgICAgICAgcmV0dXJuIGZsb2F0KCg8ZG91YmxlKj5kYXRh KVswXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICByZXR1cm4gTm9uZQor KyAqIAorKyAqLworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgICBfX3B5eF90XzYg PSBQeUZsb2F0X0Zyb21Eb3VibGUoKCgoZG91YmxlICopX19weXhfdl9kYXRhKVswXSkpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAyMzksIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgICAgX19weXhfciA9IF9fcHl4X3RfNjsK KysgICAgX19weXhfdF82ID0gMDsKKysgICAgZ290byBfX3B5eF9MMDsKKyAKKy0vKiBQeXRob24g d3JhcHBlciAqLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEw TG9nTWVzc2FnZV85bG9nX2xldmVsXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAv KnByb3RvKi8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExv Z01lc3NhZ2VfOWxvZ19sZXZlbF81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Cist ICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3Ig PSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzlsb2dfbGV2ZWxf NF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlICopX19weXhfdl9zZWxmKSk7CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoyMzgKKysgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKysgKiAg ICAgICAgIHJldHVybiBpbnQoKDx1aW50NjRfdCo+ZGF0YSlbMF0pCisrICogICAgIGVsaWYgZm9y bWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICByZXR1cm4gZmxvYXQoKDxkb3VibGUqPmRhdGEpWzBdKQorKyAqICAgICByZXR1 cm4gTm9uZQorKyAqLworKyAgICBicmVhazsKKysgICAgZGVmYXVsdDogYnJlYWs7CisrICB9Cisg CistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjI0MAorKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJM RToKKysgKiAgICAgICAgIHJldHVybiBmbG9hdCgoPGRvdWJsZSo+ZGF0YSlbMF0pCisrICogICAg IHJldHVybiBOb25lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAKKysg Ki8KKysgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICBfX3B5eF9yID0gUHlfTm9uZTsgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworKyAgZ290byBfX3B5eF9MMDsKKyAKKy1zdGF0aWMgaW50IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF80X19k ZWxfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpf X3B5eF92X3NlbGYpIHsKKy0gIGludCBfX3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJh dGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fIiwgMCk7CistICBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOworLSAgX19Q eXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5 eF92X3NlbGYtPmxvZ19sZXZlbCk7CistICBfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCA9IFB5X05v bmU7CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjEzCisrICogCisrICog CisrICogY2RlZiBfY29udmVydF92YWx1ZSh2b2lkKiBkYXRhLCBtcHZfZm9ybWF0IGZvcm1hdCk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgY2RlZiBtcHZfbm9kZSBub2Rl CisrICogICAgIGNkZWYgbXB2X25vZGVfbGlzdCBub2RlbGlzdAorKyAqLworIAorICAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7CisrICBfX1B5eF9B ZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fY29udmVydF92YWx1ZSIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IDA7Cisr ICBfX3B5eF9MMDo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfdmFsdWVzKTsKKysgIF9fUHl4 X1hERUNSRUYoX19weXhfdl92YWx1ZSk7CisrICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAg IF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQor IAorLS8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0gKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2Vs Zik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgY2RlZiB0dXBsZSBzdGF0 ZQorLSAqICAgICBjZGVmIG9iamVjdCBfZGljdAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyNTAKKysgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IG5hbWUsIGRhdGEKKysgKiAK KysgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfcHJvcGVydHkqIHByb3ApOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLm5hbWUgPSBfc3RyZGVj KHByb3AubmFtZSkKKysgKiAgICAgICAgIHNlbGYuZGF0YSA9IF9jb252ZXJ0X3ZhbHVlKHByb3Au ZGF0YSwgcHJvcC5mb3JtYXQpCisgICovCisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2Vf MV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV8xX19yZWR1Y2VfY3l0aG9uX18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7Cist ICBQeU9iamVjdCAqX19weXhfciA9IDA7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfX2luaXQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3Zfc2VsZiwgc3RydWN0IG1wdl9ldmVudF9w cm9wZXJ0eSAqX19weXhfdl9wcm9wKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Cisg ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fcmVkdWNlX2N5dGhvbl9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfX19yZWR1Y2VfY3l0aG9uX18o KChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopX19w eXhfdl9zZWxmKSk7CisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzIgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CisrICBQ eU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAwOworKyAg Y29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5lbm8g PSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9pbml0IiwgMCk7CisgCistICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9fX3JlZHVjZV9jeXRob25fXyhzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3Nl bGYpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X3N0YXRlID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5 eF92X19kaWN0ID0gMDsKKy0gIGludCBfX3B5eF92X3VzZV9zZXRzdGF0ZTsKKy0gIFB5T2JqZWN0 ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9i amVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIGludCBfX3B5eF90XzI7CistICBpbnQgX19weXhf dF8zOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CistICBpbnQgX19weXhfdF81Owor LSAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7CistICBpbnQgX19weXhfbGluZW5vID0gMDsK Ky0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGlu ZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25f XyIsIDApOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6NQorLSAqICAgICBjZGVmIG9iamVj dCBfZGljdAorLSAqICAgICBjZGVmIGJpbnQgdXNlX3NldHN0YXRlCistICogICAgIHN0YXRlID0g KHNlbGYubGV2ZWwsIHNlbGYubG9nX2xldmVsLCBzZWxmLnByZWZpeCwgc2VsZi50ZXh0KSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAn X19kaWN0X18nLCBOb25lKQorLSAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTEKKysgKiAKKysgKiAgICAgY2RlZiBfaW5p dChzZWxmLCBtcHZfZXZlbnRfcHJvcGVydHkqIHByb3ApOgorKyAqICAgICAgICAgc2VsZi5uYW1l ID0gX3N0cmRlYyhwcm9wLm5hbWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgICAgIHNlbGYuZGF0YSA9IF9jb252ZXJ0X3ZhbHVlKHByb3AuZGF0YSwgcHJvcC5mb3JtYXQp CisrICogICAgICAgICByZXR1cm4gc2VsZgorICAqLworLSAgX19weXhfdF8xID0gUHlUdXBsZV9O ZXcoNCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25f c19zdHJkZWMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyNTEsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX3B5eF90XzMg PSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9wcm9wLT5uYW1lKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjUxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgX19weXhfdF80ID0gTlVMTDsKKysgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkp IHsKKysgICAgX19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAg aWYgKGxpa2VseShfX3B5eF90XzQpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3RfNCk7CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworKyAgICB9CisrICB9CisrICBfX3B5eF90XzEg PSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4 X3RfNCwgX19weXhfdF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBf X3B5eF90XzMpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwor KyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyNTEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5sZXZl bCk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOworLSAgUHlUdXBsZV9T RVRfSVRFTShfX3B5eF90XzEsIDAsIF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOworLSAgX19QeXhfSU5D UkVGKF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdl9z ZWxmLT5sb2dfbGV2ZWwpOworLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4 X3Zfc2VsZi0+bG9nX2xldmVsKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPnByZWZp eCk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsKKy0gIFB5VHVwbGVf U0VUX0lURU0oX19weXhfdF8xLCAyLCBfX3B5eF92X3NlbGYtPnByZWZpeCk7CistICBfX1B5eF9J TkNSRUYoX19weXhfdl9zZWxmLT50ZXh0KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zZWxm LT50ZXh0KTsKKy0gIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAzLCBfX3B5eF92X3NlbGYt PnRleHQpOworLSAgX19weXhfdl9zdGF0ZSA9ICgoUHlPYmplY3QqKV9fcHl4X3RfMSk7CisrICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fUHl4X0dJVkVSRUYo X19weXhfdF8xKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPm5hbWUpOworKyAgX19Q eXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+bmFtZSk7CisrICBfX3B5eF92X3NlbGYtPm5hbWUgPSBf X3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6 NgorLSAqICAgICBjZGVmIGJpbnQgdXNlX3NldHN0YXRlCistICogICAgIHN0YXRlID0gKHNlbGYu bGV2ZWwsIHNlbGYubG9nX2xldmVsLCBzZWxmLnByZWZpeCwgc2VsZi50ZXh0KQorLSAqICAgICBf ZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgIHN0 YXRlICs9IChfZGljdCwpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUy CisrICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X3Byb3BlcnR5KiBwcm9wKToKKysg KiAgICAgICAgIHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5uYW1lKQorKyAqICAgICAgICAgc2Vs Zi5kYXRhID0gX2NvbnZlcnRfdmFsdWUocHJvcC5kYXRhLCBwcm9wLmZvcm1hdCkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmV0dXJuIHNlbGYKKysgKiAKKyAgKi8K Ky0gIF9fcHl4X3RfMSA9IF9fUHl4X0dldEF0dHIzKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYp LCBfX3B5eF9uX3NfZGljdCwgUHlfTm9uZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUoX19weXhfdl9wcm9wLT5kYXRhLCBfX3B5 eF92X3Byb3AtPmZvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDI1MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9f cHl4X3ZfX2RpY3QgPSBfX3B5eF90XzE7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Cisr ICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5 eF92X3NlbGYtPmRhdGEpOworKyAgX19weXhfdl9zZWxmLT5kYXRhID0gX19weXhfdF8xOworICAg X19weXhfdF8xID0gMDsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjcKKy0gKiAgICAgc3Rh dGUgPSAoc2VsZi5sZXZlbCwgc2VsZi5sb2dfbGV2ZWwsIHNlbGYucHJlZml4LCBzZWxmLnRleHQp CistICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKQorLSAqICAg ICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRy dWUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTMKKysgKiAgICAgICAg IHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5uYW1lKQorKyAqICAgICAgICAgc2VsZi5kYXRhID0g X2NvbnZlcnRfdmFsdWUocHJvcC5kYXRhLCBwcm9wLmZvcm1hdCkKKysgKiAgICAgICAgIHJldHVy biBzZWxmICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAKKyAgKi8KKy0g IF9fcHl4X3RfMiA9IChfX3B5eF92X19kaWN0ICE9IFB5X05vbmUpOworLSAgX19weXhfdF8zID0g KF9fcHl4X3RfMiAhPSAwKTsKKy0gIGlmIChfX3B5eF90XzMpIHsKKysgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CisrICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOwor KyAgX19weXhfciA9ICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpOworKyAgZ290byBfX3B5eF9M MDsKKyAKKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6OAorLSAqICAgICBfZGljdCA9IGdldGF0 dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKy0gKiAgICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6 CistICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCistICogICAgIGVsc2U6CisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUwCisrICogICAgIGNkZWYgcHVibGlj IG9iamVjdCBuYW1lLCBkYXRhCisrICogCisrICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2 ZW50X3Byb3BlcnR5KiBwcm9wKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgc2VsZi5uYW1lID0gX3N0cmRlYyhwcm9wLm5hbWUpCisrICogICAgICAgICBzZWxmLmRh dGEgPSBfY29udmVydF92YWx1ZShwcm9wLmRhdGEsIHByb3AuZm9ybWF0KQorICAqLworLSAgICBf X3B5eF90XzEgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMSwgOCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9fZGljdCk7CistICAgIF9fUHl4X0dJVkVSRUYo X19weXhfdl9fZGljdCk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCBfX3B5 eF92X19kaWN0KTsKKy0gICAgX19weXhfdF80ID0gUHlOdW1iZXJfSW5QbGFjZUFkZChfX3B5eF92 X3N0YXRlLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigx LCA4LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3Zfc3RhdGUsICgoUHlPYmplY3QqKV9fcHl4X3RfNCkpOworLSAgICBfX3B5 eF90XzQgPSAwOworIAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo5CistICogICAgIGlmIF9k aWN0IGlzIG5vdCBOb25lOgorLSAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKKy0gKiAgICAg ICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICBlbHNlOgorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5sZXZlbCBpcyBub3Qg Tm9uZSBvciBzZWxmLmxvZ19sZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLnByZWZpeCBpcyBub3Qg Tm9uZSBvciBzZWxmLnRleHQgaXMgbm90IE5vbmUKKy0gKi8KKy0gICAgX19weXhfdl91c2Vfc2V0 c3RhdGUgPSAxOworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJv cjo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNCk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Qcm9w ZXJ0eS5faW5pdCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OworKyAgX19weXhfciA9IDA7CisrICBfX3B5eF9MMDo7CisrICBfX1B5eF9YR0lWRVJFRihfX3B5 eF9yKTsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4 X3I7CisrfQorIAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3CistICogICAgIHN0YXRlID0g KHNlbGYubGV2ZWwsIHNlbGYubG9nX2xldmVsLCBzZWxmLnByZWZpeCwgc2VsZi50ZXh0KQorLSAq ICAgICBfZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKy0gKiAgICAgaWYg X2RpY3QgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHN0YXRlICs9IChfZGljdCwpCistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCisr LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI0OAorKyAqICAgICBXcmFwczogbXB2 X2V2ZW50X3Byb3BlcnR5CisrICogICAgICIiIgorKyAqICAgICBjZGVmIHB1YmxpYyBvYmplY3Qg bmFtZSwgZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGNk ZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X3Byb3BlcnR5KiBwcm9wKToKKyAgKi8KKy0gICAgZ290 byBfX3B5eF9MMzsKKy0gIH0KKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjExCistICogICAg ICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCistICogICAgIGVsc2U6CistICogICAgICAgICB1c2Vf c2V0c3RhdGUgPSBzZWxmLmxldmVsIGlzIG5vdCBOb25lIG9yIHNlbGYubG9nX2xldmVsIGlzIG5v dCBOb25lIG9yIHNlbGYucHJlZml4IGlzIG5vdCBOb25lIG9yIHNlbGYudGV4dCBpcyBub3QgTm9u ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGlmIHVzZV9zZXRzdGF0ZToK Ky0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAodHlwZShzZWxm KSwgMHg4Nzc0ZmFlLCBOb25lKSwgc3RhdGUKKy0gKi8KKy0gIC8qZWxzZSovIHsKKy0gICAgX19w eXhfdF8yID0gKF9fcHl4X3Zfc2VsZi0+bGV2ZWwgIT0gUHlfTm9uZSk7CistICAgIF9fcHl4X3Rf NSA9IChfX3B5eF90XzIgIT0gMCk7CistICAgIGlmICghX19weXhfdF81KSB7CistICAgIH0gZWxz ZSB7CistICAgICAgX19weXhfdF8zID0gX19weXhfdF81OworLSAgICAgIGdvdG8gX19weXhfTDRf Ym9vbF9iaW5vcF9kb25lOworLSAgICB9CistICAgIF9fcHl4X3RfNSA9IChfX3B5eF92X3NlbGYt PmxvZ19sZXZlbCAhPSBQeV9Ob25lKTsKKy0gICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSAhPSAw KTsKKy0gICAgaWYgKCFfX3B5eF90XzIpIHsKKy0gICAgfSBlbHNlIHsKKy0gICAgICBfX3B5eF90 XzMgPSBfX3B5eF90XzI7CistICAgICAgZ290byBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU7Cist ICAgIH0KKy0gICAgX19weXhfdF8yID0gKF9fcHl4X3Zfc2VsZi0+cHJlZml4ICE9IFB5X05vbmUp OworLSAgICBfX3B5eF90XzUgPSAoX19weXhfdF8yICE9IDApOworLSAgICBpZiAoIV9fcHl4X3Rf NSkgeworLSAgICB9IGVsc2UgeworLSAgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNTsKKy0gICAg ICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKKy0gICAgfQorLSAgICBfX3B5eF90XzUg PSAoX19weXhfdl9zZWxmLT50ZXh0ICE9IFB5X05vbmUpOworLSAgICBfX3B5eF90XzIgPSAoX19w eXhfdF81ICE9IDApOworLSAgICBfX3B5eF90XzMgPSBfX3B5eF90XzI7CistICAgIF9fcHl4X0w0 X2Jvb2xfYmlub3BfZG9uZTo7CistICAgIF9fcHl4X3ZfdXNlX3NldHN0YXRlID0gX19weXhfdF8z OworLSAgfQorLSAgX19weXhfTDM6OworKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRuYW1lXzFf X2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVfMV9fZ2V0 X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwor KyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdl9zZWxmKSk7CisgCist ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgdXNl X3NldHN0YXRlID0gc2VsZi5sZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLmxvZ19sZXZlbCBpcyBu b3QgTm9uZSBvciBzZWxmLnByZWZpeCBpcyBub3QgTm9uZSBvciBzZWxmLnRleHQgaXMgbm90IE5v bmUKKy0gKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgKHR5cGUoc2Vs ZiksIDB4ODc3NGZhZSwgTm9uZSksIHN0YXRlCistICogICAgIGVsc2U6CistICovCistICBfX3B5 eF90XzMgPSAoX19weXhfdl91c2Vfc2V0c3RhdGUgIT0gMCk7CistICBpZiAoX19weXhfdF8zKSB7 CisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorIAorLSAgICAvKiAiKHRyZWUgZnJhZ21l bnQpIjoxMworLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5sZXZlbCBpcyBub3QgTm9u ZSBvciBzZWxmLmxvZ19sZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLnByZWZpeCBpcyBub3QgTm9u ZSBvciBzZWxmLnRleHQgaXMgbm90IE5vbmUKKy0gKiAgICAgaWYgdXNlX3NldHN0YXRlOgorLSAq ICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAw eDg3NzRmYWUsIE5vbmUpLCBzdGF0ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgIGVsc2U6CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwg KHR5cGUoc2VsZiksIDB4ODc3NGZhZSwgc3RhdGUpCistICovCistICAgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5 eF9uX3NfcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzQpOworLSAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilQeV9UWVBF KCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworLSAgICBfX1B5eF9HSVZFUkVGKCgoUHlP YmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworLSAgICBQeVR1 cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMCwgKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVj dCAqKV9fcHl4X3Zfc2VsZikpKSk7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMTQyMDM2 OTEwKTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRfMTQyMDM2OTEwKTsKKy0gICAgUHlU dXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4X2ludF8xNDIwMzY5MTApOworLSAgICBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CistICAg IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAyLCBQeV9Ob25lKTsKKy0gICAgX19weXhfdF82 ID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEs IDEzLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICAg IF9fUHl4X0dJVkVSRUYoX19weXhfdF80KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzYsIDAsIF9fcHl4X3RfNCk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gICAg UHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzYsIDEsIF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0lO Q1JFRihfX3B5eF92X3N0YXRlKTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3N0YXRlKTsK Ky0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzYsIDIsIF9fcHl4X3Zfc3RhdGUpOworLSAg ICBfX3B5eF90XzQgPSAwOworLSAgICBfX3B5eF90XzEgPSAwOworLSAgICBfX3B5eF9yID0gX19w eXhfdF82OworLSAgICBfX3B5eF90XzYgPSAwOworLSAgICBnb3RvIF9fcHl4X0wwOworLQorLSAg ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgdXNl X3NldHN0YXRlID0gc2VsZi5sZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLmxvZ19sZXZlbCBpcyBu b3QgTm9uZSBvciBzZWxmLnByZWZpeCBpcyBub3QgTm9uZSBvciBzZWxmLnRleHQgaXMgbm90IE5v bmUKKy0gKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgKHR5cGUoc2Vs ZiksIDB4ODc3NGZhZSwgTm9uZSksIHN0YXRlCistICogICAgIGVsc2U6CistICovCistICB9Cist CistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNQorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3Vu cGlja2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIE5vbmUpLCBzdGF0ZQor LSAqICAgICBlbHNlOgorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0xvZ01lc3Nh Z2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIHN0YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgor LSAqICAgICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoc2VsZiwgX19weXhf c3RhdGUpCistICovCistICAvKmVsc2UqLyB7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfcHl4 X3VucGlja2xlX0xvZ01lc3NhZ2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigxLCAxNSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwor LSAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKy0gICAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpKSkpOworLSAgICBfX1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKilQ eV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworLSAgICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfMSwgMCwgKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZikpKSk7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMTQyMDM2OTEwKTsKKy0g ICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRfMTQyMDM2OTEwKTsKKy0gICAgUHlUdXBsZV9TRVRf SVRFTShfX3B5eF90XzEsIDEsIF9fcHl4X2ludF8xNDIwMzY5MTApOworLSAgICBfX1B5eF9JTkNS RUYoX19weXhfdl9zdGF0ZSk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zdGF0ZSk7Cist ICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAyLCBfX3B5eF92X3N0YXRlKTsKKy0gICAg X19weXhfdF80ID0gUHlUdXBsZV9OZXcoMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDEsIDE1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NCk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF82KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRF TShfX3B5eF90XzQsIDAsIF9fcHl4X3RfNik7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8x KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQsIDEsIF9fcHl4X3RfMSk7CistICAg IF9fcHl4X3RfNiA9IDA7CistICAgIF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3IgPSBfX3B5 eF90XzQ7CistICAgIF9fcHl4X3RfNCA9IDA7CistICAgIGdvdG8gX19weXhfTDA7CistICB9Cist CistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNl bGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgdHVwbGUgc3Rh dGUKKy0gKiAgICAgY2RlZiBvYmplY3QgX2RpY3QKKy0gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVfX19nZXRfXyhzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqX19weXhfdl9zZWxm KSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisrICBfX1B5eF9SZWZOYW5ueURlY2xh cmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5u YW1lKTsKKysgIF9fcHl4X3IgPSBfX3B5eF92X3NlbGYtPm5hbWU7CisrICBnb3RvIF9fcHl4X0ww OworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5Mb2dNZXNzYWdlLl9fcmVkdWNlX2N5dGhvbl9fIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsK KyAgIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9zdGF0ZSk7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3ZfX2RpY3QpOworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Cisg ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0K KyAKKy0vKiAiKHRyZWUgZnJhZ21lbnQpIjoxNgorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAg cmV0dXJuIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUs IHN0YXRlKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBfX3B5eF91bnBpY2tsZV9Mb2dN ZXNzYWdlX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCistICovCisrLyogUHl0aG9uIHdy YXBwZXIgKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJv cGVydHlfNG5hbWVfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKKysgIGludCBfX3B5eF9yOworKyAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3Nl dF9fICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl84UHJvcGVydHlfNG5hbWVfMl9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilf X3B5eF92X3ZhbHVlKSk7CisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworK3N0 YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV8y X19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworKyAgaW50IF9fcHl4X3I7 CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fc2V0X18iLCAwKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlKTsKKysg IF9fUHl4X0dJVkVSRUYoX19weXhfdl92YWx1ZSk7CisrICBfX1B5eF9HT1RSRUYoX19weXhfdl9z ZWxmLT5uYW1lKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPm5hbWUpOworKyAgX19w eXhfdl9zZWxmLT5uYW1lID0gX19weXhfdl92YWx1ZTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworKyAgX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2Fn ZV8zX19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV8zX19zZXRzdGF0ZV9jeXRob25f XyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkg eworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV81X19kZWxfXyhQeU9iamVjdCAqX19weXhf dl9zZWxmKTsgLypwcm90byovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfOFByb3BlcnR5XzRuYW1lXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsK KysgIGludCBfX3B5eF9yOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fICh3cmFwcGVyKSIsIDAp OworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfMl9fc2V0c3RhdGVfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Mb2dNZXNzYWdlICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3Zf X19weXhfc3RhdGUpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fICh3 cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl84UHJvcGVydHlfNG5hbWVfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVy biBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfMl9fc2V0c3RhdGVfY3l0aG9uX18oc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxM OworK3N0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80 bmFtZV80X19kZWxfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eSAqX19weXhfdl9zZWxmKSB7CisrICBpbnQgX19weXhfcjsKKyAgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIGludCBfX3B5 eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAg aW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9f c2V0c3RhdGVfY3l0aG9uX18iLCAwKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X2RlbF9fIiwgMCk7CisrICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBfX1B5eF9HSVZFUkVG KFB5X05vbmUpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+bmFtZSk7CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdl9zZWxmLT5uYW1lKTsKKysgIF9fcHl4X3Zfc2VsZi0+bmFtZSA9IFB5 X05vbmU7CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNworLSAqICAgICAgICAgcmV0dXJu IF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIHN0YXRl KQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKy0gKiAg ICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRl KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICovCistICBpZiAoIShsaWtlbHkoUHlU dXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5eF92X19fcHl4X3N0 YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJFeHBlY3Rl ZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5X1RZUEUoX19weXhfdl9fX3B5eF9zdGF0 ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFfZXJyb3IpCistICBf X3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9M b2dNZXNzYWdlX19zZXRfc3RhdGUoX19weXhfdl9zZWxmLCAoKFB5T2JqZWN0KilfX3B5eF92X19f cHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDE3LCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KKysgIF9fcHl4X3IgPSAwOworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Cisr ICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNgorLSAq ICAgICBlbHNlOgorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2Us ICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIHN0YXRlKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhv bl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3Rh dGUpCistICovCisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfMV9fZ2V0X18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80ZGF0YV8xX19nZXRfXyhQeU9iamVjdCAq X19weXhfdl9zZWxmKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18g KHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzhQcm9wZXJ0eV80ZGF0YV9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF92X3NlbGYpKTsKKyAKKyAgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25l KTsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7 CisrfQorKworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzhQcm9wZXJ0eV80ZGF0YV9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X1Byb3BlcnR5ICpfX3B5eF92X3NlbGYpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0g TlVMTDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysg IF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPmRhdGEpOworKyAgX19weXhfciA9IF9fcHl4X3Zf c2VsZi0+ZGF0YTsKKyAgIGdvdG8gX19weXhfTDA7CistICBfX3B5eF9MMV9lcnJvcjo7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRl ci5saWJzLm1wdi5Mb2dNZXNzYWdlLl9fc2V0c3RhdGVfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworKwor KyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lW RVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0 dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox OTcKKy0gKiAKKy0gKiAKKy0gKiBjZGVmIF9jb252ZXJ0X25vZGVfdmFsdWUobXB2X25vZGUgbm9k ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgaWYgbm9kZS5mb3JtYXQg PT0gTVBWX0ZPUk1BVF9TVFJJTkc6CistICogICAgICAgICByZXR1cm4gX3N0cmRlYyhub2RlLnUu c3RyaW5nKQorLSAqLworKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIGludCBfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzNfX3NldF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLypwcm90byovCisrc3Rh dGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzNf X3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7 CisrICBpbnQgX19weXhfcjsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4 X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzJfX3Nl dF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilf X3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1ZSkpOworIAorLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1 ZShzdHJ1Y3QgbXB2X25vZGUgX19weXhfdl9ub2RlKSB7CistICBQeU9iamVjdCAqX19weXhfciA9 IE5VTEw7CisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworK3N0YXRpYyBpbnQgX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80ZGF0YV8yX19zZXRfXyhzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworKyAgaW50IF9fcHl4X3I7CisgICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CistICBQ eU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxM OworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CistICBpbnQgX19weXhfdF81OworLSAg aW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5V TEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX2NvbnZlcnRfbm9kZV92YWx1ZSIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fc2V0X18iLCAwKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlKTsKKysg IF9fUHl4X0dJVkVSRUYoX19weXhfdl92YWx1ZSk7CisrICBfX1B5eF9HT1RSRUYoX19weXhfdl9z ZWxmLT5kYXRhKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmRhdGEpOworKyAgX19w eXhfdl9zZWxmLT5kYXRhID0gX19weXhfdl92YWx1ZTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxOTgKKy0gKiAKKy0gKiBjZGVmIF9jb252ZXJ0X25vZGVfdmFsdWUo bXB2X25vZGUgbm9kZSk6CistICogICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RS SU5HOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1cm4gX3N0 cmRlYyhub2RlLnUuc3RyaW5nKQorLSAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JN QVRfRkxBRzoKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IDA7Cisr ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30K KysKKysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzhQcm9wZXJ0eV80ZGF0YV81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9z ZWxmKTsgLypwcm90byovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfOFByb3BlcnR5XzRkYXRhXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKysg IGludCBfX3B5eF9yOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9 IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfNF9fZGVsX18o KChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4 X3Zfc2VsZikpOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysKKytzdGF0aWMg aW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfNF9fZGVs X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4 X3Zfc2VsZikgeworKyAgaW50IF9fcHl4X3I7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9u cworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVsX18iLCAwKTsKKysgIF9fUHl4 X0lOQ1JFRihQeV9Ob25lKTsKKysgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CisrICBfX1B5eF9H T1RSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYt PmRhdGEpOworKyAgX19weXhfdl9zZWxmLT5kYXRhID0gUHlfTm9uZTsKKysKKysgIC8qIGZ1bmN0 aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysKKysvKiAiKHRyZWUgZnJhZ21l bnQpIjoxCisrICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgIGNkZWYgdHVwbGUgc3RhdGUKKysgKiAgICAgY2RlZiBvYmpl Y3QgX2RpY3QKKyAgKi8KKy0gIHN3aXRjaCAoX19weXhfdl9ub2RlLmZvcm1hdCkgeworLSAgICBj YXNlIE1QVl9GT1JNQVRfU1RSSU5HOgorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTk5CistICogY2RlZiBfY29udmVydF9ub2RlX3ZhbHVlKG1wdl9ub2RlIG5vZGUp OgorLSAqICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKy0gKiAgICAg ICAgIHJldHVybiBfc3RyZGVjKG5vZGUudS5zdHJpbmcpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CistICog ICAgICAgICByZXR1cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpCisrLyogUHl0aG9uIHdyYXBw ZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84 UHJvcGVydHlfMV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhP Tl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV8xX19yZWR1Y2VfY3l0aG9u X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2Vk KSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fICh3 cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl84UHJvcGVydHlfX19yZWR1Y2VfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3Zfc2VsZikpOworKworKyAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJl dHVybiBfX3B5eF9yOworK30KKysKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfX19yZWR1Y2VfY3l0aG9uX18oc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlP YmplY3QgKl9fcHl4X3Zfc3RhdGUgPSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX2RpY3QgPSAw OworKyAgaW50IF9fcHl4X3ZfdXNlX3NldHN0YXRlOworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBO VUxMOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIFB5T2JqZWN0ICpfX3B5eF90 XzEgPSBOVUxMOworKyAgaW50IF9fcHl4X3RfMjsKKysgIGludCBfX3B5eF90XzM7CisrICBQeU9i amVjdCAqX19weXhfdF80ID0gTlVMTDsKKysgIGludCBfX3B5eF90XzU7CisrICBQeU9iamVjdCAq X19weXhfdF82ID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAwOworKyAgY29uc3QgY2hh ciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fIiwgMCk7CisrCisr ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo1CisrICogICAgIGNkZWYgb2JqZWN0IF9kaWN0CisrICog ICAgIGNkZWYgYmludCB1c2Vfc2V0c3RhdGUKKysgKiAgICAgc3RhdGUgPSAoc2VsZi5kYXRhLCBz ZWxmLm5hbWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgX2RpY3QgPSBn ZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCisrICogICAgIGlmIF9kaWN0IGlzIG5vdCBO b25lOgorICAqLworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBfX1B5eF9HZXRN b2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDE5OSwgX19weXhfTDFfZXJyb3IpCistICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zy b21TdHJpbmcoX19weXhfdl9ub2RlLnUuc3RyaW5nKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMCwgMTk5LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMyk7CistICAgIF9fcHl4X3RfNCA9IE5VTEw7CistICAgIGlmIChDWVRIT05fVU5QQUNL X01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAg ICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICAgIGlmIChs aWtlbHkoX19weXhfdF80KSkgeworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhf dF80KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9E RUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworLSAgICAgIH0KKy0gICAgfQorLSAgICBf X3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzIsIF9fcHl4X3RfNCwgX19weXhfdF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfdF8yLCBfX3B5eF90XzMpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4 X3RfNCA9IDA7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwor LSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxOTksIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7Cist ICAgIF9fcHl4X3RfMSA9IDA7CistICAgIGdvdG8gX19weXhfTDA7CisrICBfX3B5eF90XzEgPSBQ eVR1cGxlX05ldygyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgNSwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0lO Q1JFRihfX3B5eF92X3NlbGYtPmRhdGEpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYt PmRhdGEpOworKyAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDAsIF9fcHl4X3Zfc2VsZi0+ ZGF0YSk7CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5uYW1lKTsKKysgIF9fUHl4X0dJ VkVSRUYoX19weXhfdl9zZWxmLT5uYW1lKTsKKysgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8x LCAxLCBfX3B5eF92X3NlbGYtPm5hbWUpOworKyAgX19weXhfdl9zdGF0ZSA9ICgoUHlPYmplY3Qq KV9fcHl4X3RfMSk7CisrICBfX3B5eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTk4CistICogCistICogY2RlZiBfY29udmVydF9ub2RlX3ZhbHVl KG1wdl9ub2RlIG5vZGUpOgorLSAqICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NU UklORzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIF9z dHJkZWMobm9kZS51LnN0cmluZykKKy0gKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9S TUFUX0ZMQUc6CisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2CisrICogICAgIGNkZWYgYmludCB1 c2Vfc2V0c3RhdGUKKysgKiAgICAgc3RhdGUgPSAoc2VsZi5kYXRhLCBzZWxmLm5hbWUpCisrICog ICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorKyAqICAgICAg ICAgc3RhdGUgKz0gKF9kaWN0LCkKKyAgKi8KKy0gICAgYnJlYWs7CistICAgIGNhc2UgTVBWX0ZP Uk1BVF9GTEFHOgorKyAgX19weXhfdF8xID0gX19QeXhfR2V0QXR0cjMoKChQeU9iamVjdCAqKV9f cHl4X3Zfc2VsZiksIF9fcHl4X25fc19kaWN0LCBQeV9Ob25lKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKysgIF9fcHl4X3ZfX2RpY3QgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEg PSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjAxCistICog ICAgICAgICByZXR1cm4gX3N0cmRlYyhub2RlLnUuc3RyaW5nKQorLSAqICAgICBlbGlmIG5vZGUu Zm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzoKKy0gKiAgICAgICAgIHJldHVybiBub3Qgbm90IGlu dChub2RlLnUuZmxhZykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBlbGlm IG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6CistICogICAgICAgICByZXR1cm4gaW50 KG5vZGUudS5pbnQ2NCkKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjcKKysgKiAgICAgc3RhdGUg PSAoc2VsZi5kYXRhLCBzZWxmLm5hbWUpCisrICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAn X19kaWN0X18nLCBOb25lKQorKyAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKKysgKiAg ICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUKKyAgKi8KKy0gICAgX19QeXhfWERFQ1JFRihfX3B5 eF9yKTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9ub2Rl LnUuZmxhZyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIwMSwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSAoX19weXhfdl9fZGljdCAhPSBQeV9Ob25lKTsK KysgIF9fcHl4X3RfMyA9IChfX3B5eF90XzIgIT0gMCk7CisrICBpZiAoX19weXhfdF8zKSB7Cisr CisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKysgKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNl bGYsICdfX2RpY3RfXycsIE5vbmUpCisrICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorKyAq ICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorKyAqICAgICBlbHNlOgorKyAqLworKyAg ICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMSwgOCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKCgoUHlPYmpl Y3QgKikoJlB5SW50X1R5cGUpKSwgX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgMjAxLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMik7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X19kaWN0KTsKKysgICAgX19QeXhf R0lWRVJFRihfX3B5eF92X19kaWN0KTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEs IDAsIF9fcHl4X3ZfX2RpY3QpOworKyAgICBfX3B5eF90XzQgPSBQeU51bWJlcl9JblBsYWNlQWRk KF9fcHl4X3Zfc3RhdGUsIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDEsIDgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9f cHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzIpOyBpZiAodW5saWtlbHko X19weXhfdF81IDwgMCkpIF9fUFlYX0VSUigwLCAyMDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgX19weXhfdF8yID0g X19QeXhfUHlCb29sX0Zyb21Mb25nKCghKCghX19weXhfdF81KSAhPSAwKSkpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyMDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfciA9IF9fcHl4X3RfMjsKKy0gICAg X19weXhfdF8yID0gMDsKKy0gICAgZ290byBfX3B5eF9MMDsKKysgICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF92X3N0YXRlLCAoKFB5T2JqZWN0KilfX3B5eF90XzQpKTsKKysgICAgX19weXhfdF80 ID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwMAorLSAq ICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKy0gKiAgICAgICAgIHJl dHVybiBfc3RyZGVjKG5vZGUudS5zdHJpbmcpCistICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0g TVBWX0ZPUk1BVF9GTEFHOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICByZXR1cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpCistICogICAgIGVsaWYgbm9kZS5mb3Jt YXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6OQorKyAq ICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwp CisrICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgZWxzZToKKysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0 YSBpcyBub3QgTm9uZSBvciBzZWxmLm5hbWUgaXMgbm90IE5vbmUKKyAgKi8KKy0gICAgYnJlYWs7 CistICAgIGNhc2UgTVBWX0ZPUk1BVF9JTlQ2NDoKKysgICAgX19weXhfdl91c2Vfc2V0c3RhdGUg PSAxOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjAzCistICog ICAgICAgICByZXR1cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpCistICogICAgIGVsaWYgbm9k ZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKy0gKiAgICAgICAgIHJldHVybiBpbnQobm9k ZS51LmludDY0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGVsaWYgbm9k ZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CistICogICAgICAgICByZXR1cm4gZmxvYXQo bm9kZS51LmRvdWJsZV8pCisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjcKKysgKiAgICAgc3Rh dGUgPSAoc2VsZi5kYXRhLCBzZWxmLm5hbWUpCisrICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxm LCAnX19kaWN0X18nLCBOb25lKQorKyAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKKysg KiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUKKyAgKi8KKy0gICAgX19QeXhfWERFQ1JFRihf X3B5eF9yKTsKKy0gICAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9pbnQ2NF90KF9fcHl4 X3Zfbm9kZS51LmludDY0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MjAzLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAg IF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoKChQeU9iamVjdCAqKSgmUHlJ bnRfVHlwZSkpLCBfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAyMDMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fcHl4 X3IgPSBfX3B5eF90XzE7CistICAgIF9fcHl4X3RfMSA9IDA7CistICAgIGdvdG8gX19weXhfTDA7 CisrICAgIGdvdG8gX19weXhfTDM7CisrICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyMDIKKy0gKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFU X0ZMQUc6CistICogICAgICAgICByZXR1cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpCistICog ICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIGludChub2RlLnUuaW50NjQpCistICog ICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisrICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxMQorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorKyAqICAgICBl bHNlOgorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5kYXRhIGlzIG5vdCBOb25lIG9y IHNlbGYubmFtZSBpcyBub3QgTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgIGlmIHVzZV9zZXRzdGF0ZToKKysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Q cm9wZXJ0eSwgKHR5cGUoc2VsZiksIDB4MDU3MmQxMSwgTm9uZSksIHN0YXRlCisgICovCistICAg IGJyZWFrOworLSAgICBjYXNlIE1QVl9GT1JNQVRfRE9VQkxFOgorKyAgLyplbHNlKi8geworKyAg ICBfX3B5eF90XzIgPSAoX19weXhfdl9zZWxmLT5kYXRhICE9IFB5X05vbmUpOworKyAgICBfX3B5 eF90XzUgPSAoX19weXhfdF8yICE9IDApOworKyAgICBpZiAoIV9fcHl4X3RfNSkgeworKyAgICB9 IGVsc2UgeworKyAgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNTsKKysgICAgICBnb3RvIF9fcHl4 X0w0X2Jvb2xfYmlub3BfZG9uZTsKKysgICAgfQorKyAgICBfX3B5eF90XzUgPSAoX19weXhfdl9z ZWxmLT5uYW1lICE9IFB5X05vbmUpOworKyAgICBfX3B5eF90XzIgPSAoX19weXhfdF81ICE9IDAp OworKyAgICBfX3B5eF90XzMgPSBfX3B5eF90XzI7CisrICAgIF9fcHl4X0w0X2Jvb2xfYmlub3Bf ZG9uZTo7CisrICAgIF9fcHl4X3ZfdXNlX3NldHN0YXRlID0gX19weXhfdF8zOworKyAgfQorKyAg X19weXhfTDM6OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjA1 CistICogICAgICAgICByZXR1cm4gaW50KG5vZGUudS5pbnQ2NCkKKy0gKiAgICAgZWxpZiBub2Rl LmZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKy0gKiAgICAgICAgIHJldHVybiBmbG9hdChu b2RlLnUuZG91YmxlXykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBlbGlm IG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6CistICogICAgICAgICByZXR1cm4g X2NvbnZlcnRfdmFsdWUobm9kZS51Lmxpc3QsIG5vZGUuZm9ybWF0KQorKyAgLyogIih0cmVlIGZy YWdtZW50KSI6MTIKKysgKiAgICAgZWxzZToKKysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNl bGYuZGF0YSBpcyBub3QgTm9uZSBvciBzZWxmLm5hbWUgaXMgbm90IE5vbmUKKysgKiAgICAgaWYg dXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBy ZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAweDA1NzJkMTEsIE5v bmUpLCBzdGF0ZQorKyAqICAgICBlbHNlOgorKyAqLworKyAgX19weXhfdF8zID0gKF9fcHl4X3Zf dXNlX3NldHN0YXRlICE9IDApOworKyAgaWYgKF9fcHl4X3RfMykgeworKworKyAgICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxMworKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5kYXRhIGlz IG5vdCBOb25lIG9yIHNlbGYubmFtZSBpcyBub3QgTm9uZQorKyAqICAgICBpZiB1c2Vfc2V0c3Rh dGU6CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNl bGYpLCAweDA1NzJkMTEsIE5vbmUpLCBzdGF0ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgIGVsc2U6CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVy dHksICh0eXBlKHNlbGYpLCAweDA1NzJkMTEsIHN0YXRlKQorICAqLworICAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3IpOworLSAgICBfX3B5eF90XzEgPSBQeUZsb2F0X0Zyb21Eb3VibGUoX19weXhf dl9ub2RlLnUuZG91YmxlXyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDIwNSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF80LCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX1Byb3BlcnR5KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzQpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9H T1RSRUYoX19weXhfdF80KTsKKysgICAgX19weXhfdF8xID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7Cisr ICAgIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhf dl9zZWxmKSkpKTsKKysgICAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5 T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzEsIDAsICgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkp OworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzU3MTMxNjkpOworKyAgICBfX1B5eF9HSVZF UkVGKF9fcHl4X2ludF81NzEzMTY5KTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEs IDEsIF9fcHl4X2ludF81NzEzMTY5KTsKKysgICAgX19QeXhfSU5DUkVGKFB5X05vbmUpOworKyAg ICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3Rf MSwgMiwgUHlfTm9uZSk7CisrICAgIF9fcHl4X3RfNiA9IFB5VHVwbGVfTmV3KDMpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNCk7 CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF82LCAwLCBfX3B5eF90XzQpOworKyAgICBf X1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF82 LCAxLCBfX3B5eF90XzEpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9zdGF0ZSk7CisrICAg IF9fUHl4X0dJVkVSRUYoX19weXhfdl9zdGF0ZSk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19w eXhfdF82LCAyLCBfX3B5eF92X3N0YXRlKTsKKysgICAgX19weXhfdF80ID0gMDsKKyAgICAgX19w eXhfdF8xID0gMDsKKysgICAgX19weXhfciA9IF9fcHl4X3RfNjsKKysgICAgX19weXhfdF82ID0g MDsKKyAgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjIwNAorLSAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5U NjQ6CistICogICAgICAgICByZXR1cm4gaW50KG5vZGUudS5pbnQ2NCkKKy0gKiAgICAgZWxpZiBu b2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgcmV0dXJuIGZsb2F0KG5vZGUudS5kb3VibGVfKQorLSAqICAgICBl bGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6CisrICAgIC8qICIodHJlZSBm cmFnbWVudCkiOjEyCisrICogICAgIGVsc2U6CisrICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBz ZWxmLmRhdGEgaXMgbm90IE5vbmUgb3Igc2VsZi5uYW1lIGlzIG5vdCBOb25lCisrICogICAgIGlm IHVzZV9zZXRzdGF0ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg cmV0dXJuIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5LCAodHlwZShzZWxmKSwgMHgwNTcyZDExLCBO b25lKSwgc3RhdGUKKysgKiAgICAgZWxzZToKKyAgKi8KKy0gICAgYnJlYWs7CistICAgIGNhc2Ug TVBWX0ZPUk1BVF9OT0RFX01BUDoKKysgIH0KKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjIwNworLSAqICAgICAgICAgcmV0dXJuIGZsb2F0KG5vZGUudS5kb3VibGVf KQorLSAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6CistICog ICAgICAgICByZXR1cm4gX2NvbnZlcnRfdmFsdWUobm9kZS51Lmxpc3QsIG5vZGUuZm9ybWF0KSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0g TVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorLSAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVl KG5vZGUudS5saXN0LCBub2RlLmZvcm1hdCkKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjE1Cisr ICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAw eDA1NzJkMTEsIE5vbmUpLCBzdGF0ZQorKyAqICAgICBlbHNlOgorKyAqICAgICAgICAgcmV0dXJu IF9fcHl4X3VucGlja2xlX1Byb3BlcnR5LCAodHlwZShzZWxmKSwgMHgwNTcyZDExLCBzdGF0ZSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9f KHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3Nl dF9zdGF0ZShzZWxmLCBfX3B5eF9zdGF0ZSkKKyAgKi8KKysgIC8qZWxzZSovIHsKKyAgICAgX19Q eXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUoX19weXhfdl9ub2RlLnUubGlzdCwgX19weXhfdl9u b2RlLmZvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIwNywg X19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82 LCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX1Byb3BlcnR5KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzYpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYo X19weXhfdF82KTsKKysgICAgX19weXhfdF8xID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDE1LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisrICAgIF9f UHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxm KSkpKTsKKysgICAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0 ICopX19weXhfdl9zZWxmKSkpKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDAs ICgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworKyAg ICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzU3MTMxNjkpOworKyAgICBfX1B5eF9HSVZFUkVGKF9f cHl4X2ludF81NzEzMTY5KTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9f cHl4X2ludF81NzEzMTY5KTsKKysgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc3RhdGUpOworKyAg ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc3RhdGUpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfMSwgMiwgX19weXhfdl9zdGF0ZSk7CisrICAgIF9fcHl4X3RfNCA9IFB5VHVwbGVfTmV3 KDIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCAxNSwgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgICBfX1B5eF9HSVZFUkVG KF9fcHl4X3RfNik7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF80LCAwLCBfX3B5eF90 XzYpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CisrICAgIFB5VHVwbGVfU0VUX0lU RU0oX19weXhfdF80LCAxLCBfX3B5eF90XzEpOworKyAgICBfX3B5eF90XzYgPSAwOworICAgICBf X3B5eF90XzEgPSAwOworKyAgICBfX3B5eF9yID0gX19weXhfdF80OworKyAgICBfX3B5eF90XzQg PSAwOworICAgICBnb3RvIF9fcHl4X0wwOworKyAgfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjA2CistICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZP Uk1BVF9ET1VCTEU6CistICogICAgICAgICByZXR1cm4gZmxvYXQobm9kZS51LmRvdWJsZV8pCist ICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5v ZGUudS5saXN0LCBub2RlLmZvcm1hdCkKKy0gKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZf Rk9STUFUX05PREVfQVJSQVk6CisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisrICogZGVmIF9f cmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgIGNkZWYgdHVwbGUgc3RhdGUKKysgKiAgICAgY2RlZiBvYmplY3QgX2RpY3QKKyAgKi8KKy0g ICAgYnJlYWs7CistICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorIAorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjA5CistICogICAgICAgICByZXR1cm4gX2Nv bnZlcnRfdmFsdWUobm9kZS51Lmxpc3QsIG5vZGUuZm9ybWF0KQorLSAqICAgICBlbGlmIG5vZGUu Zm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKKy0gKiAgICAgICAgIHJldHVybiBfY29u dmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgcmV0dXJuIE5vbmUKKy0gKiAKKy0gKi8KKy0gICAgX19QeXhfWERF Q1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX2NvbnZlcnRfdmFsdWUoX19weXhfdl9ub2RlLnUubGlzdCwgX19weXhfdl9ub2RlLmZv cm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIwOSwgX19weXhf TDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX3B5eF9yID0g X19weXhfdF8xOworLSAgICBfX3B5eF90XzEgPSAwOworLSAgICBnb3RvIF9fcHl4X0wwOworKyAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CisrICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNik7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5s aWJzLm1wdi5Qcm9wZXJ0eS5fX3JlZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhfciA9IE5VTEw7CisrICBfX3B5eF9M MDo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfc3RhdGUpOworKyAgX19QeXhfWERFQ1JFRihf X3B5eF92X19kaWN0KTsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMDgKKy0gKiAgICAgZWxpZiBub2RlLmZv cm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorLSAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0 X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZvcm1hdCkKKy0gKiAgICAgZWxpZiBub2RlLmZvcm1h dCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgIHJldHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3Jt YXQpCistICogICAgIHJldHVybiBOb25lCisrLyogIih0cmVlIGZyYWdtZW50KSI6MTYKKysgKiAg ICAgZWxzZToKKysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgKHR5 cGUoc2VsZiksIDB4MDU3MmQxMSwgc3RhdGUpCisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18o c2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg IF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCisg ICovCistICAgIGJyZWFrOworLSAgICBkZWZhdWx0OiBicmVhazsKKy0gIH0KKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTAKKy0gKiAgICAgZWxpZiBub2RlLmZvcm1h dCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6CistICogICAgICAgICByZXR1cm4gX2NvbnZlcnRf dmFsdWUobm9kZS51Lmxpc3QsIG5vZGUuZm9ybWF0KQorLSAqICAgICByZXR1cm4gTm9uZSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogCisrLyogUHl0aG9uIHdyYXBwZXIg Ki8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJv cGVydHlfM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfM19fc2V0c3RhdGVfY3l0aG9u X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUp IHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyAo d3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfOFByb3BlcnR5XzJfX3NldHN0YXRlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICop X19weXhfdl9fX3B5eF9zdGF0ZSkpOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisr ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30K KysKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJv cGVydHlfMl9fc2V0c3RhdGVfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf c3RhdGUpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIGludCBfX3B5 eF9saW5lbm8gPSAwOworKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAg aW50IF9fcHl4X2NsaW5lbm8gPSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9f c2V0c3RhdGVfY3l0aG9uX18iLCAwKTsKKysKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjE3Cisr ICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAw eDA1NzJkMTEsIHN0YXRlKQorKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4 X3N0YXRlKToKKysgKiAgICAgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShzZWxm LCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqLworLSAgX19Q eXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYo UHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworKyAgaWYgKCEobGlrZWx5KFB5VHVwbGVfQ2hl Y2tFeGFjdChfX3B5eF92X19fcHl4X3N0YXRlKSl8fCgoX19weXhfdl9fX3B5eF9zdGF0ZSkgPT0g UHlfTm9uZSl8fChQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiRXhwZWN0ZWQgJS4xNnMs IGdvdCAlLjIwMHMiLCAidHVwbGUiLCBQeV9UWVBFKF9fcHl4X3ZfX19weXhfc3RhdGUpLT50cF9u YW1lKSwgMCkpKSBfX1BZWF9FUlIoMSwgMTcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8x ID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfUHJvcGVydHlf X3NldF9zdGF0ZShfX3B5eF92X3NlbGYsICgoUHlPYmplY3QqKV9fcHl4X3ZfX19weXhfc3RhdGUp KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTcsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxOTcKKy0gKiAKKy0gKiAKKy0gKiBjZGVmIF9jb252ZXJ0X25vZGVfdmFsdWUobXB2X25v ZGUgbm9kZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgaWYgbm9kZS5m b3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CistICogICAgICAgICByZXR1cm4gX3N0cmRlYyhu b2RlLnUuc3RyaW5nKQorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTYKKysgKiAgICAgZWxzZToK KysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgKHR5cGUoc2VsZiks IDB4MDU3MmQxMSwgc3RhdGUpCisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19w eXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIF9fcHl4X3Vu cGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCisgICovCisgCisg ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9J TkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOworICAgX19weXhfTDFfZXJyb3I6Owor ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzQpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX2NvbnZlcnRf bm9kZV92YWx1ZSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OworLSAgX19weXhfciA9IDA7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJz Lm1wdi5Qcm9wZXJ0eS5fX3NldHN0YXRlX2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKyAgIF9fcHl4X0ww OjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjIxMworLSAqIAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoyNjMKKyAgKiAKKy0gKiBjZGVmIF9jb252ZXJ0X3ZhbHVlKHZvaWQqIGRhdGEsIG1wdl9m b3JtYXQgZm9ybWF0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBjZGVm IG1wdl9ub2RlIG5vZGUKKy0gKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0IG5vZGVsaXN0CisrICog ICAgIEBwcm9wZXJ0eQorKyAqICAgICBkZWYgZXJyb3Jfc3RyKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRoZSBl cnJvciBwcm9lcHJ0eSIiIgorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworICAq LworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2Nv bnZlcnRfdmFsdWUodm9pZCAqX19weXhfdl9kYXRhLCBlbnVtIG1wdl9mb3JtYXQgX19weXhfdl9m b3JtYXQpIHsKKy0gIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF92X25vZGU7CistICBzdHJ1Y3QgbXB2 X25vZGVfbGlzdCBfX3B5eF92X25vZGVsaXN0OworLSAgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWVz ID0gTlVMTDsKKy0gIGludCBfX3B5eF92X2k7CistICBQeU9iamVjdCAqX19weXhfdl92YWx1ZSA9 IE5VTEw7CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfOWVycm9yX3N0cl8xX19nZXRfXyhQeU9iamVj dCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzllcnJvcl9zdHJfMV9fZ2V0X18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworKyAgX19QeXhfUmVm TmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9f ICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl81RXZlbnRfOWVycm9yX3N0cl9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpKTsKKysKKysgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1 cm4gX19weXhfcjsKKyt9CisrCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50XzllcnJvcl9zdHJfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdl9zZWxmKSB7CisrICBjaGFyIGNvbnN0 ICpfX3B5eF92X2Vycl9jOworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAg aW50IF9fcHl4X3RfMjsKKy0gIGludCBfX3B5eF90XzM7CistICBpbnQgX19weXhfdF80OworLSAg aW50IF9fcHl4X3RfNTsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOworLSAgUHlPYmpl Y3QgKl9fcHl4X3RfNyA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF84ID0gTlVMTDsKKysg IFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5V TEw7CisrICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKyAgIGludCBfX3B5eF9saW5lbm8g PSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9jb252ZXJ0X3Zh bHVlIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIxNgorLSAqICAgICBjZGVm IG1wdl9ub2RlIG5vZGUKKy0gKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0IG5vZGVsaXN0CistICog ICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIG5vZGUgPSAoPG1wdl9ub2RlKj5kYXRhKVswXQorLSAqICAgICAg ICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZSkKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoyNjYKKysgKiAgICAgICAgICIiIm1wdl9lcnJvcl9zdHJpbmcgb2Yg dGhlIGVycm9yIHByb2VwcnR5IiIiCisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVycl9j CisrICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKHNlbGYuZXJyb3IpCisrICog ICAgICAgICByZXR1cm4gX3N0cmRlYyhlcnJfYykKKyAgKi8KKy0gIHN3aXRjaCAoX19weXhfdl9m b3JtYXQpIHsKKy0gICAgY2FzZSBNUFZfRk9STUFUX05PREU6CisrICB7CisrICAgICAgI2lmZGVm IFdJVEhfVEhSRUFECisrICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CisrICAgICAgUHlfVU5C TE9DS19USFJFQURTCisrICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworKyAgICAgICNl bmRpZgorKyAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjIxNworLSAqICAgICBjZGVmIG1wdl9ub2RlX2xpc3Qgbm9kZWxpc3QKKy0gKiAg ICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERToKKy0gKiAgICAgICAgIG5vZGUgPSAoPG1w dl9ub2RlKj5kYXRhKVswXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICByZXR1cm4gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlKQorLSAqICAgICBlbGlmIGZvcm1hdCA9 PSBNUFZfRk9STUFUX05PREVfQVJSQVk6CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjY3CisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVycl9jCisrICog ICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIGVycl9jID0gbXB2X2Vycm9yX3N0 cmluZyhzZWxmLmVycm9yKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICByZXR1cm4gX3N0cmRlYyhlcnJfYykKKysgKiAKKyAgKi8KKy0gICAgX19weXhfdl9ub2RlID0g KCgoc3RydWN0IG1wdl9ub2RlICopX19weXhfdl9kYXRhKVswXSk7CisrICAgICAgICBfX3B5eF92 X2Vycl9jID0gbXB2X2Vycm9yX3N0cmluZyhfX3B5eF92X3NlbGYtPmVycm9yKTsKKysgICAgICB9 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTgKKy0gKiAgICAg aWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERToKKy0gKiAgICAgICAgIG5vZGUgPSAoPG1wdl9u b2RlKj5kYXRhKVswXQorLSAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9k ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX05PREVfQVJSQVk6CistICogICAgICAgICBub2RlbGlzdCA9ICg8bXB2X25vZGVf bGlzdCo+ZGF0YSlbMF0KKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MjY2CisrICogICAgICAgICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRoZSBlcnJvciBwcm9lcHJ0 eSIiIgorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworKyAqICAgICAgICAgd2l0 aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVy cl9jID0gbXB2X2Vycm9yX3N0cmluZyhzZWxmLmVycm9yKQorKyAqICAgICAgICAgcmV0dXJuIF9z dHJkZWMoZXJyX2MpCisgICovCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9f cHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFs dWUoX19weXhfdl9ub2RlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MjE4LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAg IF9fcHl4X3IgPSBfX3B5eF90XzE7CistICAgIF9fcHl4X3RfMSA9IDA7CistICAgIGdvdG8gX19w eXhfTDA7CisrICAgICAgLypmaW5hbGx5OiovIHsKKysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97 CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICBfX1B5eF9GYXN0R0lM X0ZvcmdldCgpOworKyAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgICNlbmRp ZgorKyAgICAgICAgICBnb3RvIF9fcHl4X0w1OworKyAgICAgICAgfQorKyAgICAgICAgX19weXhf TDU6OworKyAgICAgIH0KKysgIH0KKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjIxNgorLSAqICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKKy0gKiAgICAgY2RlZiBtcHZf bm9kZV9saXN0IG5vZGVsaXN0CistICogICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREU6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIG5vZGUgPSAoPG1wdl9u b2RlKj5kYXRhKVswXQorLSAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9k ZSkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNjgKKysgKiAgICAgICAg IHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKHNl bGYuZXJyb3IpCisrICogICAgICAgICByZXR1cm4gX3N0cmRlYyhlcnJfYykgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAqICAgICBjZGVmIF9kYXRhKHNlbGYsIG1wdl9ldmVu dCogZXZlbnQpOgorICAqLworLSAgICBicmVhazsKKy0gICAgY2FzZSBNUFZfRk9STUFUX05PREVf QVJSQVk6CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCAyNjgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7CisrICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19w eXhfdl9lcnJfYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI2OCwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgIF9fcHl4X3Rf NCA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0 aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9T RUxGKF9fcHl4X3RfMik7CisrICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgeworKyAgICAgIFB5 T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworKyAg ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlv bik7CisrICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKysgICAg fQorKyAgfQorKyAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9D YWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dF80KTsgX19weXhfdF80ID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjY4LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19QeXhfREVD UkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICBfX3B5eF9yID0gX19weXhfdF8xOwor KyAgX19weXhfdF8xID0gMDsKKysgIGdvdG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjAKKy0gKiAgICAgICAgIHJldHVybiBfY29udmVydF9u b2RlX3ZhbHVlKG5vZGUpCistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9B UlJBWToKKy0gKiAgICAgICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRhKVswXSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB2YWx1ZXMgPSBbXQorLSAq ICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKToKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyNjMKKysgKiAKKysgKiAgICAgQHByb3BlcnR5CisrICogICAg IGRlZiBlcnJvcl9zdHIoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgICAgICIiIm1wdl9lcnJvcl9zdHJpbmcgb2YgdGhlIGVycm9yIHByb2VwcnR5IiIiCisrICog ICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVycl9jCisgICovCistICAgIF9fcHl4X3Zfbm9kZWxp c3QgPSAoKChzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqKV9fcHl4X3ZfZGF0YSlbMF0pOworIAorLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjIxCistICogICAgIGVsaWYgZm9y bWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKKy0gKiAgICAgICAgIG5vZGVsaXN0ID0gKDxt cHZfbm9kZV9saXN0Kj5kYXRhKVswXQorLSAqICAgICAgICAgdmFsdWVzID0gW10gICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3Qu bnVtKToKKy0gKiAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKF9jb252ZXJ0X25vZGVfdmFsdWUo bm9kZWxpc3QudmFsdWVzW2ldKSkKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19w eXhfTDFfZXJyb3I6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzIpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzQpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGli cy5tcHYuRXZlbnQuZXJyb3Jfc3RyLl9fZ2V0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5l bm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworKyAgX19weXhfTDA6Owor KyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRl eHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysKKysvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjcwCisrICogICAgICAgICByZXR1cm4gX3N0cmRlYyhlcnJfYykKKysgKiAK KysgKiAgICAgY2RlZiBfZGF0YShzZWxmLCBtcHZfZXZlbnQqIGV2ZW50KTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiB2b2lkKiBkYXRhID0gZXZlbnQuZGF0 YQorKyAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqIGNsaW1zZworICAq LworLSAgICBfX3B5eF90XzEgPSBQeUxpc3RfTmV3KDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAyMjEsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKy0gICAgX19weXhfdl92YWx1ZXMgPSBfX3B5eF90XzE7CistICAgIF9fcHl4 X3RfMSA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjIK Ky0gKiAgICAgICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRhKVswXQorLSAqICAg ICAgICAgdmFsdWVzID0gW10KKy0gKiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51 bSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICB2YWx1ZXMu YXBwZW5kKF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZWxpc3QudmFsdWVzW2ldKSkKKy0gKiAgICAg ICAgIHJldHVybiB2YWx1ZXMKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzVFdmVudF9fZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCAqX19weXhfdl9zZWxmLCBzdHJ1Y3QgbXB2X2V2ZW50ICpfX3B5eF92X2V2ZW50 KSB7CisrICB2b2lkICpfX3B5eF92X2RhdGE7CisrICBzdHJ1Y3QgbXB2X2V2ZW50X2NsaWVudF9t ZXNzYWdlICpfX3B5eF92X2NsaW1zZzsKKysgIFB5T2JqZWN0ICpfX3B5eF92X2FyZ3MgPSBOVUxM OworKyAgaW50IF9fcHl4X3ZfbnVtX2FyZ3M7CisrICBpbnQgX19weXhfdl9pOworKyAgUHlPYmpl Y3QgKl9fcHl4X3ZfYXJnID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKysg IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICB2b2lkICpfX3B5eF90XzE7CisrICBQeU9i amVjdCAqX19weXhfdF8yID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOwor KyAgaW50IF9fcHl4X3RfNDsKKysgIGludCBfX3B5eF90XzU7CisrICBpbnQgX19weXhfdF82Owor KyAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CisrICBpbnQgX19weXhfdF84OworKyAgaW50 IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7 CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgiX2RhdGEiLCAwKTsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy NzEKKysgKiAKKysgKiAgICAgY2RlZiBfZGF0YShzZWxmLCBtcHZfZXZlbnQqIGV2ZW50KToKKysg KiAgICAgICAgIGNkZWYgdm9pZCogZGF0YSA9IGV2ZW50LmRhdGEgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqIGNs aW1zZworKyAqICAgICAgICAgaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JF UExZOgorICAqLworLSAgICBfX3B5eF90XzIgPSBfX3B5eF92X25vZGVsaXN0Lm51bTsKKy0gICAg X19weXhfdF8zID0gX19weXhfdF8yOworLSAgICBmb3IgKF9fcHl4X3RfNCA9IDA7IF9fcHl4X3Rf NCA8IF9fcHl4X3RfMzsgX19weXhfdF80Kz0xKSB7CistICAgICAgX19weXhfdl9pID0gX19weXhf dF80OworKyAgX19weXhfdF8xID0gX19weXhfdl9ldmVudC0+ZGF0YTsKKysgIF9fcHl4X3ZfZGF0 YSA9IF9fcHl4X3RfMTsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjIzCistICogICAgICAgICB2YWx1ZXMgPSBbXQorLSAqICAgICAgICAgZm9yIGkgaW4gcmFu Z2Uobm9kZWxpc3QubnVtKToKKy0gKiAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKF9jb252ZXJ0 X25vZGVfdmFsdWUobm9kZWxpc3QudmFsdWVzW2ldKSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgcmV0dXJuIHZhbHVlcworLSAqICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX05PREVfTUFQOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjI3MworKyAqICAgICAgICAgY2RlZiB2b2lkKiBkYXRhID0gZXZlbnQuZGF0YQorKyAqICAgICAg ICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqIGNsaW1zZworKyAqICAgICAgICAgaWYg c2VsZi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1w dl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKKysgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZf RVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgorICAqLworLSAgICAgIF9fcHl4X3RfMSA9IF9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoKF9fcHl4X3Zfbm9kZWxp c3QudmFsdWVzW19fcHl4X3ZfaV0pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMjIzLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKy0gICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9BcHBlbmQoX19weXhfdl92YWx1 ZXMsIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzUgPT0gKChpbnQpLTEpKSkgX19Q WVhfRVJSKDAsIDIyMywgX19weXhfTDFfZXJyb3IpCistICAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIH0KKysgIHN3aXRjaCAoX19weXhfdl9zZWxmLT5p ZCkgeworKyAgICBjYXNlIE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFk6CisgCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjQKKy0gKiAgICAgICAgIGZvciBpIGlu IHJhbmdlKG5vZGVsaXN0Lm51bSk6CistICogICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChfY29u dmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkpCistICogICAgICAgICByZXR1cm4g dmFsdWVzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgZWxpZiBmb3JtYXQg PT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKy0gKiAgICAgICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9k ZV9saXN0Kj5kYXRhKVswXQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 Mjc0CisrICogICAgICAgICBjZGVmIG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSogY2xpbXNnCisr ICogICAgICAgICBpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFk6Cisr ICogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0 eSo+ZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZWxpZiBz ZWxmLmlkID09IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6CisrICogICAgICAgICAgICAgcmV0 dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKKyAgKi8KKyAg ICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFs dWVzKTsKKy0gICAgX19weXhfciA9IF9fcHl4X3ZfdmFsdWVzOworKyAgICBfX3B5eF90XzIgPSBf X1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlY X0VSUigwLCAyNzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKKysgICAgX19weXhfdF8zID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUHJvcGVydHkgKikoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X1Byb3BlcnR5ICopX19weXhfdF8yKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF90XzIpLCAo KHN0cnVjdCBtcHZfZXZlbnRfcHJvcGVydHkgKilfX3B5eF92X2RhdGEpKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjc0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5 eF90XzIgPSAwOworKyAgICBfX3B5eF9yID0gX19weXhfdF8zOworKyAgICBfX3B5eF90XzMgPSAw OworICAgICBnb3RvIF9fcHl4X0wwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjE5CistICogICAgICAgICBub2RlID0gKDxtcHZfbm9kZSo+ZGF0YSlbMF0KKy0g KiAgICAgICAgIHJldHVybiBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGUpCistICogICAgIGVsaWYg Zm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCist ICogICAgICAgICB2YWx1ZXMgPSBbXQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjczCisrICogICAgICAgICBjZGVmIHZvaWQqIGRhdGEgPSBldmVudC5kYXRhCisrICog ICAgICAgICBjZGVmIG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSogY2xpbXNnCisrICogICAgICAg ICBpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5p dCg8bXB2X2V2ZW50X3Byb3BlcnR5Kj5kYXRhKQorKyAqICAgICAgICAgZWxpZiBzZWxmLmlkID09 IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6CisgICovCisgICAgIGJyZWFrOworLSAgICBjYXNl IE1QVl9GT1JNQVRfTk9ERV9NQVA6CisrICAgIGNhc2UgTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5H RToKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNgorLSAqICAg ICAgICAgcmV0dXJuIHZhbHVlcworLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05P REVfTUFQOgorLSAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBd ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHZhbHVlcyA9IHt9Cist ICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0pOgorKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjc2CisrICogICAgICAgICAgICAgcmV0dXJuIFByb3Bl cnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKKysgKiAgICAgICAgIGVsaWYg c2VsZi5pZCA9PSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgorKyAqICAgICAgICAgICAgIHJl dHVybiBQcm9wZXJ0eSgpLl9pbml0KDxtcHZfZXZlbnRfcHJvcGVydHkqPmRhdGEpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZF TlRfTE9HX01FU1NBR0U6CisrICogICAgICAgICAgICAgcmV0dXJuIExvZ01lc3NhZ2UoKS5faW5p dCg8bXB2X2V2ZW50X2xvZ19tZXNzYWdlKj5kYXRhKQorICAqLworLSAgICBfX3B5eF92X25vZGVs aXN0ID0gKCgoc3RydWN0IG1wdl9ub2RlX2xpc3QgKilfX3B5eF92X2RhdGEpWzBdKTsKKysgICAg X19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3Rf Q2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UHJvcGVydHkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjc2LCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fcHl4 X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1By b3BlcnR5ICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eSAqKV9fcHl4X3RfMyktPl9fcHl4X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdF8zKSwgKChzdHJ1Y3QgbXB2X2V2 ZW50X3Byb3BlcnR5ICopX19weXhfdl9kYXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDI3NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysg ICAgX19weXhfciA9IF9fcHl4X3RfMjsKKysgICAgX19weXhfdF8yID0gMDsKKysgICAgZ290byBf X3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNwor LSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorLSAqICAgICAgICAg bm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCistICogICAgICAgICB2YWx1ZXMg PSB7fSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBmb3IgaSBpbiBy YW5nZShub2RlbGlzdC5udW0pOgorLSAqICAgICAgICAgICAgIHZhbHVlID0gX2NvbnZlcnRfbm9k ZV92YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyNzUKKysgKiAgICAgICAgIGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0dFVF9Q Uk9QRVJUWV9SRVBMWToKKysgKiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8 bXB2X2V2ZW50X3Byb3BlcnR5Kj5kYXRhKQorKyAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1Q Vl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8bXB2X2V2ZW50X3Byb3BlcnR5 Kj5kYXRhKQorKyAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9MT0dfTUVTU0FH RToKKyAgKi8KKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlEaWN0X05ld1ByZXNpemVkKDApOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjcsIF9fcHl4X0wxX2Vycm9y KQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19weXhfdl92YWx1ZXMgPSBf X3B5eF90XzE7CistICAgIF9fcHl4X3RfMSA9IDA7CisrICAgIGJyZWFrOworKyAgICBjYXNlIE1Q Vl9FVkVOVF9MT0dfTUVTU0FHRToKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjIyOAorLSAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEp WzBdCistICogICAgICAgICB2YWx1ZXMgPSB7fQorLSAqICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uo bm9kZWxpc3QubnVtKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ICAgIHZhbHVlID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pCistICog ICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMobm9kZWxpc3Qua2V5c1tpXSldID0gdmFsdWUKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3OAorKyAqICAgICAgICAgICAg IHJldHVybiBQcm9wZXJ0eSgpLl9pbml0KDxtcHZfZXZlbnRfcHJvcGVydHkqPmRhdGEpCisrICog ICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0xPR19NRVNTQUdFOgorKyAqICAgICAg ICAgICAgIHJldHVybiBMb2dNZXNzYWdlKCkuX2luaXQoPG1wdl9ldmVudF9sb2dfbWVzc2FnZSo+ ZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIyBlbGlmIHNl bGYuaWQgPT0gTVBWX0VWRU5UX1NDUklQVF9JTlBVVF9ESVNQQVRDSDoKKysgKiAgICAgICAgICMg ICAgIHJldHVybiBJbnB1dERpc3BhdGNoKCkuX2luaXQoPG1wdl9ldmVudF9zY3JpcHRfaW5wdXRf ZGlzcGF0Y2gqPmRhdGEpCisgICovCistICAgIF9fcHl4X3RfMiA9IF9fcHl4X3Zfbm9kZWxpc3Qu bnVtOworLSAgICBfX3B5eF90XzMgPSBfX3B5eF90XzI7CistICAgIGZvciAoX19weXhfdF80ID0g MDsgX19weXhfdF80IDwgX19weXhfdF8zOyBfX3B5eF90XzQrPTEpIHsKKy0gICAgICBfX3B5eF92 X2kgPSBfX3B5eF90XzQ7CisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICAgIF9fcHl4 X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgMjc4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7CisrICAgIF9fcHl4X3RfMyA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3Rf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKikoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF90XzIpLT5fX3B5eF92dGFiKS0+ X2luaXQoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl ICopX19weXhfdF8yKSwgKChzdHJ1Y3QgbXB2X2V2ZW50X2xvZ19tZXNzYWdlICopX19weXhfdl9k YXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI3OCwgX19weXhf TDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgX19weXhfciA9IF9fcHl4X3RfMzsK KysgICAgX19weXhfdF8zID0gMDsKKysgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjI5CistICogICAgICAgICB2YWx1ZXMgPSB7 fQorLSAqICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKToKKy0gKiAgICAgICAg ICAgICB2YWx1ZSA9IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZWxpc3QudmFsdWVzW2ldKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMo bm9kZWxpc3Qua2V5c1tpXSldID0gdmFsdWUKKy0gKiAgICAgICAgIHJldHVybiB2YWx1ZXMKKy0g Ki8KKy0gICAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29u dmVydF9ub2RlX3ZhbHVlKChfX3B5eF92X25vZGVsaXN0LnZhbHVlc1tfX3B5eF92X2ldKSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIyOSwgX19weXhfTDFfZXJyb3Ip CistICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgICAgX19QeXhfWERFQ1JFRl9T RVQoX19weXhfdl92YWx1ZSwgX19weXhfdF8xKTsKKy0gICAgICBfX3B5eF90XzEgPSAwOworKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjc3CisrICogICAgICAgICBlbGlm IHNlbGYuaWQgPT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRToKKysgKiAgICAgICAgICAgICBy ZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8bXB2X2V2ZW50X3Byb3BlcnR5Kj5kYXRhKQorKyAqICAg ICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9MT0dfTUVTU0FHRTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybiBMb2dNZXNzYWdlKCkuX2lu aXQoPG1wdl9ldmVudF9sb2dfbWVzc2FnZSo+ZGF0YSkKKysgKiAgICAgICAgICMgZWxpZiBzZWxm LmlkID09IE1QVl9FVkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0g6CisrICovCisrICAgIGJyZWFr OworKyAgICBjYXNlIE1QVl9FVkVOVF9DTElFTlRfTUVTU0FHRToKKyAKKy0gICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjMwCistICogICAgICAgICBmb3IgaSBpbiByYW5n ZShub2RlbGlzdC5udW0pOgorLSAqICAgICAgICAgICAgIHZhbHVlID0gX2NvbnZlcnRfbm9kZV92 YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pCistICogICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMo bm9kZWxpc3Qua2V5c1tpXSldID0gdmFsdWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgcmV0dXJuIHZhbHVlcworLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX1NUUklORzoKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4Mgor KyAqICAgICAgICAgIyAgICAgcmV0dXJuIElucHV0RGlzcGF0Y2goKS5faW5pdCg8bXB2X2V2ZW50 X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0YSkKKysgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9 PSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0U6CisrICogICAgICAgICAgICAgY2xpbXNnID0gPG1w dl9ldmVudF9jbGllbnRfbWVzc2FnZSo+ZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICAgICAgYXJncyA9IFtdCisrICogICAgICAgICAgICAgbnVtX2FyZ3MgPSBj bGltc2cubnVtX2FyZ3MKKyAgKi8KKy0gICAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9f cHl4X3RfNiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDIzMCwgX19weXhfTDFfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNik7CistICAgICAgX19weXhfdF83ID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKChfX3B5 eF92X25vZGVsaXN0LmtleXNbX19weXhfdl9pXSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykp IF9fUFlYX0VSUigwLCAyMzAsIF9fcHl4X0wxX2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOworLSAgICAgIF9fcHl4X3RfOCA9IE5VTEw7CistICAgICAgaWYgKENZVEhPTl9V TlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgewor LSAgICAgICAgX19weXhfdF84ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82KTsKKy0gICAg ICAgIGlmIChsaWtlbHkoX19weXhfdF84KSkgeworLSAgICAgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKKy0gICAgICAgICAgX19QeXhf SU5DUkVGKF9fcHl4X3RfOCk7CistICAgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Cist ICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7CistICAgICAg ICB9CistICAgICAgfQorLSAgICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzgpID8gX19QeXhfUHlP YmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF84LCBfX3B5eF90XzcpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNyk7CistICAgICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworLSAgICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDIzMCwgX19weXhfTDFfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CistICAgICAgaWYgKHVubGlrZWx5KFB5T2JqZWN0X1NldEl0ZW0oX19weXhfdl92YWx1ZXMs IF9fcHl4X3RfMSwgX19weXhfdl92YWx1ZSkgPCAwKSkgX19QWVhfRVJSKDAsIDIzMCwgX19weXhf TDFfZXJyb3IpCistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 CistICAgIH0KKysgICAgX19weXhfdl9jbGltc2cgPSAoKHN0cnVjdCBtcHZfZXZlbnRfY2xpZW50 X21lc3NhZ2UgKilfX3B5eF92X2RhdGEpOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjMxCistICogICAgICAgICAgICAgdmFsdWUgPSBfY29udmVydF9ub2RlX3Zh bHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkKKy0gKiAgICAgICAgICAgICB2YWx1ZXNbX3N0cmRlYyhu b2RlbGlzdC5rZXlzW2ldKV0gPSB2YWx1ZQorLSAqICAgICAgICAgcmV0dXJuIHZhbHVlcyAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JN QVRfU1RSSU5HOgorLSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoKCg8Y2hhcioqPmRhdGEpWzBd KSkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4MworKyAqICAgICAg ICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9DTElFTlRfTUVTU0FHRToKKysgKiAgICAgICAg ICAgICBjbGltc2cgPSA8bXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKj5kYXRhCisrICogICAgICAg ICAgICAgYXJncyA9IFtdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICAgICBudW1fYXJncyA9IGNsaW1zZy5udW1fYXJncworKyAqICAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKG51bV9hcmdzKToKKyAgKi8KKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0g ICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWVzKTsKKy0gICAgX19weXhfciA9IF9fcHl4X3Zf dmFsdWVzOworLSAgICBnb3RvIF9fcHl4X0wwOworKyAgICBfX3B5eF90XzMgPSBQeUxpc3RfTmV3 KDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyODMsIF9fcHl4X0wx X2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgX19weXhfdl9hcmdz ID0gKChQeU9iamVjdCopX19weXhfdF8zKTsKKysgICAgX19weXhfdF8zID0gMDsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNQorLSAqICAgICAgICAgICAgIHZh bHVlcy5hcHBlbmQoX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pKQorLSAq ICAgICAgICAgcmV0dXJuIHZhbHVlcworLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBub2Rl bGlzdCA9ICg8bXB2X25vZGVfbGlzdCo+ZGF0YSlbMF0KKy0gKiAgICAgICAgIHZhbHVlcyA9IHt9 CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyODQKKysgKiAgICAgICAg ICAgICBjbGltc2cgPSA8bXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKj5kYXRhCisrICogICAgICAg ICAgICAgYXJncyA9IFtdCisrICogICAgICAgICAgICAgbnVtX2FyZ3MgPSBjbGltc2cubnVtX2Fy Z3MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKG51bV9hcmdzKToKKysgKiAgICAgICAgICAgICAgICAgYXJnID0gPGNoYXIqPmNsaW1z Zy5hcmdzW2ldCisgICovCistICAgIGJyZWFrOworLSAgICBjYXNlIE1QVl9GT1JNQVRfU1RSSU5H OgorKyAgICBfX3B5eF90XzQgPSBfX3B5eF92X2NsaW1zZy0+bnVtX2FyZ3M7CisrICAgIF9fcHl4 X3ZfbnVtX2FyZ3MgPSBfX3B5eF90XzQ7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyMzMKKy0gKiAgICAgICAgIHJldHVybiB2YWx1ZXMKKy0gKiAgICAgZWxpZiBm b3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CistICogICAgICAgICByZXR1cm4gX3N0cmRlYygo KDxjaGFyKio+ZGF0YSlbMF0pKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg IGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzoKKy0gKiAgICAgICAgIHJldHVybiBub3Qg bm90ICg8dWludDY0X3QqPmRhdGEpWzBdCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyODUKKysgKiAgICAgICAgICAgICBhcmdzID0gW10KKysgKiAgICAgICAgICAgICBu dW1fYXJncyA9IGNsaW1zZy5udW1fYXJncworKyAqICAgICAgICAgICAgIGZvciBpIGluIHJhbmdl KG51bV9hcmdzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAg ICAgICBhcmcgPSA8Y2hhcio+Y2xpbXNnLmFyZ3NbaV0KKysgKiAgICAgICAgICAgICAgICAgYXJn ID0gX3N0cmRlYyhhcmcpCisgICovCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3Nfc3RyZGVjKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJv cikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICAgIF9fcHl4X3RfNyA9IF9fUHl4 X1B5Qnl0ZXNfRnJvbVN0cmluZygoKChjaGFyICoqKV9fcHl4X3ZfZGF0YSlbMF0pKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJvcikKKy0g ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICAgIF9fcHl4X3RfOCA9IE5VTEw7CistICAg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19w eXhfdF82KSkpIHsKKy0gICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90 XzYpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF84KSkgeworLSAgICAgICAgUHlPYmplY3Qq IGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7CistICAgICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF84KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7 CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOworLSAgICAg IH0KKy0gICAgfQorLSAgICBfX3B5eF90XzEgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfOCwgX19weXhfdF83KSA6IF9fUHl4X1B5T2Jq ZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzcpOworLSAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90Xzcp OyBfX3B5eF90XzcgPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAyMzMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CistICAgIF9fcHl4 X3IgPSBfX3B5eF90XzE7CistICAgIF9fcHl4X3RfMSA9IDA7CistICAgIGdvdG8gX19weXhfTDA7 CisrICAgIF9fcHl4X3RfNCA9IF9fcHl4X3ZfbnVtX2FyZ3M7CisrICAgIF9fcHl4X3RfNSA9IF9f cHl4X3RfNDsKKysgICAgZm9yIChfX3B5eF90XzYgPSAwOyBfX3B5eF90XzYgPCBfX3B5eF90XzU7 IF9fcHl4X3RfNis9MSkgeworKyAgICAgIF9fcHl4X3ZfaSA9IF9fcHl4X3RfNjsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzMgorLSAqICAgICAgICAgICAgIHZh bHVlc1tfc3RyZGVjKG5vZGVsaXN0LmtleXNbaV0pXSA9IHZhbHVlCistICogICAgICAgICByZXR1 cm4gdmFsdWVzCistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1cm4gX3N0cmRlYygoKDxj aGFyKio+ZGF0YSlbMF0pKQorLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6 CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NgorKyAqICAgICAg ICAgICAgIG51bV9hcmdzID0gY2xpbXNnLm51bV9hcmdzCisrICogICAgICAgICAgICAgZm9yIGkg aW4gcmFuZ2UobnVtX2FyZ3MpOgorKyAqICAgICAgICAgICAgICAgICBhcmcgPSA8Y2hhcio+Y2xp bXNnLmFyZ3NbaV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAg ICAgICBhcmcgPSBfc3RyZGVjKGFyZykKKysgKiAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQo YXJnKQorICAqLworLSAgICBicmVhazsKKy0gICAgY2FzZSBNUFZfRk9STUFUX0ZMQUc6CisrICAg ICAgX19weXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKCgoY2hhciAqKShfX3B5eF92 X2NsaW1zZy0+YXJnc1tfX3B5eF92X2ldKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9f UFlYX0VSUigwLCAyODYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzMpOworKyAgICAgIF9fUHl4X1hERUNSRUZfU0VUKF9fcHl4X3ZfYXJnLCBfX3B5eF90XzMp OworKyAgICAgIF9fcHl4X3RfMyA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyMzUKKy0gKiAgICAgICAgIHJldHVybiBfc3RyZGVjKCgoPGNoYXIqKj5kYXRh KVswXSkpCistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzoKKy0gKiAgICAg ICAgIHJldHVybiBub3Qgbm90ICg8dWludDY0X3QqPmRhdGEpWzBdICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKy0g KiAgICAgICAgIHJldHVybiBpbnQoKDx1aW50NjRfdCo+ZGF0YSlbMF0pCisrICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NworKyAqICAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKG51bV9hcmdzKToKKysgKiAgICAgICAgICAgICAgICAgYXJnID0gPGNoYXIqPmNsaW1z Zy5hcmdzW2ldCisrICogICAgICAgICAgICAgICAgIGFyZyA9IF9zdHJkZWMoYXJnKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFy ZykKKysgKiAgICAgICAgICAgICByZXR1cm4gYXJncworICAqLworLSAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3IpOworLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoKCEo KCgodWludDY0X3QgKilfX3B5eF92X2RhdGEpWzBdKSAhPSAwKSkgIT0gMCkpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjM1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CistICAg IF9fcHl4X3RfMSA9IDA7CistICAgIGdvdG8gX19weXhfTDA7CisrICAgICAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyODcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICAgIF9fcHl4X3RfNyA9IE5VTEw7CisrICAgICAg aWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5 eF90XzIpKSkgeworKyAgICAgICAgX19weXhfdF83ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhf dF8yKTsKKysgICAgICAgIGlmIChsaWtlbHkoX19weXhfdF83KSkgeworKyAgICAgICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAg ICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNyk7CisrICAgICAgICAgIF9fUHl4X0lOQ1JFRihm dW5jdGlvbik7CisrICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlv bik7CisrICAgICAgICB9CisrICAgICAgfQorKyAgICAgIF9fcHl4X3RfMyA9IChfX3B5eF90Xzcp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF83LCBfX3B5eF92 X2FyZykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9hcmcp OworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgICAg ICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyODcsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19w eXhfdl9hcmcsIF9fcHl4X3RfMyk7CisrICAgICAgX19weXhfdF8zID0gMDsKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzNAorLSAqICAgICBlbGlmIGZvcm1hdCA9 PSBNUFZfRk9STUFUX1NUUklORzoKKy0gKiAgICAgICAgIHJldHVybiBfc3RyZGVjKCgoPGNoYXIq Kj5kYXRhKVswXSkpCistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIG5vdCBub3QgKDx1 aW50NjRfdCo+ZGF0YSlbMF0KKy0gKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2 NDoKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg4CisrICogICAg ICAgICAgICAgICAgIGFyZyA9IDxjaGFyKj5jbGltc2cuYXJnc1tpXQorKyAqICAgICAgICAgICAg ICAgICBhcmcgPSBfc3RyZGVjKGFyZykKKysgKiAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQo YXJnKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmV0dXJu IGFyZ3MKKysgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfRU5EX0ZJTEU6Cisg ICovCistICAgIGJyZWFrOworLSAgICBjYXNlIE1QVl9GT1JNQVRfSU5UNjQ6CisrICAgICAgX19w eXhfdF84ID0gX19QeXhfUHlMaXN0X0FwcGVuZChfX3B5eF92X2FyZ3MsIF9fcHl4X3ZfYXJnKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfOCA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMCwgMjg4LCBf X3B5eF9MMV9lcnJvcikKKysgICAgfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjM3CistICogICAgICAgICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2NF90Kj5kYXRh KVswXQorLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorLSAqICAgICAg ICAgcmV0dXJuIGludCgoPHVpbnQ2NF90Kj5kYXRhKVswXSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKy0gKiAg ICAgICAgIHJldHVybiBmbG9hdCgoPGRvdWJsZSo+ZGF0YSlbMF0pCisrICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyODkKKysgKiAgICAgICAgICAgICAgICAgYXJnID0gX3N0 cmRlYyhhcmcpCisrICogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFyZykKKysgKiAgICAg ICAgICAgICByZXR1cm4gYXJncyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0VORF9GSUxFOgorKyAqICAgICAgICAgICAg IHJldHVybiBFbmRPZkZpbGVSZWFjaGVkKCkuX2luaXQoPG1wdl9ldmVudF9lbmRfZmlsZSo+ZGF0 YSkKKyAgKi8KKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8xID0g X19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCgoKCh1aW50NjRfdCAqKV9fcHl4X3ZfZGF0YSlbMF0p KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjM3LCBfX3B5eF9MMV9l cnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4X3RfNiA9IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoKChQeU9iamVjdCAqKSgmUHlJbnRfVHlwZSkpLCBfX3B5 eF90XzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAyMzcsIF9fcHl4 X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzY7 CistICAgIF9fcHl4X3RfNiA9IDA7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X2FyZ3MpOwor KyAgICBfX3B5eF9yID0gX19weXhfdl9hcmdzOworICAgICBnb3RvIF9fcHl4X0wwOworIAorLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM2CistICogICAgIGVsaWYgZm9y bWF0ID09IE1QVl9GT1JNQVRfRkxBRzoKKy0gKiAgICAgICAgIHJldHVybiBub3Qgbm90ICg8dWlu dDY0X3QqPmRhdGEpWzBdCistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiBpbnQoKDx1 aW50NjRfdCo+ZGF0YSlbMF0pCistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9V QkxFOgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjgxCisrICogICAg ICAgICAjIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENIOgor KyAqICAgICAgICAgIyAgICAgcmV0dXJuIElucHV0RGlzcGF0Y2goKS5faW5pdCg8bXB2X2V2ZW50 X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0YSkKKysgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9 PSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0U6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgICAgICBjbGltc2cgPSA8bXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKj5kYXRh CisrICogICAgICAgICAgICAgYXJncyA9IFtdCisgICovCisgICAgIGJyZWFrOworLSAgICBjYXNl IE1QVl9GT1JNQVRfRE9VQkxFOgorKyAgICBjYXNlIE1QVl9FVkVOVF9FTkRfRklMRToKKyAKKy0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzOQorLSAqICAgICAgICAgcmV0 dXJuIGludCgoPHVpbnQ2NF90Kj5kYXRhKVswXSkKKy0gKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBW X0ZPUk1BVF9ET1VCTEU6CistICogICAgICAgICByZXR1cm4gZmxvYXQoKDxkb3VibGUqPmRhdGEp WzBdKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJldHVybiBOb25lCisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTEKKysgKiAgICAgICAgICAg ICByZXR1cm4gYXJncworKyAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9FTkRf RklMRToKKysgKiAgICAgICAgICAgICByZXR1cm4gRW5kT2ZGaWxlUmVhY2hlZCgpLl9pbml0KDxt cHZfZXZlbnRfZW5kX2ZpbGUqPmRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgIHJldHVybiBOb25lCisgICogCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19w eXhfcik7CistICAgIF9fcHl4X3RfNiA9IFB5RmxvYXRfRnJvbURvdWJsZSgoKChkb3VibGUgKilf X3B5eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDIzOSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAg ICBfX3B5eF9yID0gX19weXhfdF82OworLSAgICBfX3B5eF90XzYgPSAwOworKyAgICBfX3B5eF90 XzMgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8zKSkgX19QWVhfRVJSKDAsIDI5MSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzMpOworKyAgICBfX3B5eF90XzIgPSAoKHN0cnVjdCBfX3B5eF92dGFic3Ry dWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICopKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICopX19weXhfdF8z KS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqKV9fcHl4X3RfMyksICgoc3RydWN0IG1wdl9ldmVudF9l bmRfZmlsZSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlY X0VSUigwLCAyOTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICAgIF9f cHl4X3IgPSBfX3B5eF90XzI7CisrICAgIF9fcHl4X3RfMiA9IDA7CisgICAgIGdvdG8gX19weXhf TDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMzgKKy0gKiAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKy0gKiAgICAgICAgIHJldHVybiBp bnQoKDx1aW50NjRfdCo+ZGF0YSlbMF0pCistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JN QVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1 cm4gZmxvYXQoKDxkb3VibGUqPmRhdGEpWzBdKQorLSAqICAgICByZXR1cm4gTm9uZQorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjkwCisrICogICAgICAgICAgICAgICAg IGFyZ3MuYXBwZW5kKGFyZykKKysgKiAgICAgICAgICAgICByZXR1cm4gYXJncworKyAqICAgICAg ICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9FTkRfRklMRTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybiBFbmRPZkZpbGVSZWFjaGVkKCkuX2lu aXQoPG1wdl9ldmVudF9lbmRfZmlsZSo+ZGF0YSkKKysgKiAgICAgICAgIHJldHVybiBOb25lCisg ICovCisgICAgIGJyZWFrOworICAgICBkZWZhdWx0OiBicmVhazsKKyAgIH0KKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDAKKy0gKiAgICAgZWxpZiBmb3JtYXQgPT0g TVBWX0ZPUk1BVF9ET1VCTEU6CistICogICAgICAgICByZXR1cm4gZmxvYXQoKDxkb3VibGUqPmRh dGEpWzBdKQorLSAqICAgICByZXR1cm4gTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogCistICogCistICovCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MjkyCisrICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0VORF9GSUxFOgorKyAq ICAgICAgICAgICAgIHJldHVybiBFbmRPZkZpbGVSZWFjaGVkKCkuX2luaXQoPG1wdl9ldmVudF9l bmRfZmlsZSo+ZGF0YSkKKysgKiAgICAgICAgIHJldHVybiBOb25lICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgQHByb3BlcnR5CisrICovCisgICBfX1B5eF9YREVD UkVGKF9fcHl4X3IpOworICAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25l KTsKKyAgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjEzCistICogCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjcw CisrICogICAgICAgICByZXR1cm4gX3N0cmRlYyhlcnJfYykKKyAgKiAKKy0gKiBjZGVmIF9jb252 ZXJ0X3ZhbHVlKHZvaWQqIGRhdGEsIG1wdl9mb3JtYXQgZm9ybWF0KTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKKy0gKiAgICAgY2RlZiBt cHZfbm9kZV9saXN0IG5vZGVsaXN0CisrICogICAgIGNkZWYgX2RhdGEoc2VsZiwgbXB2X2V2ZW50 KiBldmVudCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWYg dm9pZCogZGF0YSA9IGV2ZW50LmRhdGEKKysgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2NsaWVu dF9tZXNzYWdlKiBjbGltc2cKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor ICAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzYpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworKyAg X19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOwor LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuX2NvbnZlcnRfdmFsdWUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5l bm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxp YnMubXB2LkV2ZW50Ll9kYXRhIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSk7CisgICBfX3B5eF9yID0gMDsKKyAgIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdl92YWx1ZXMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X3ZhbHVlKTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfdl9hcmdzKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9h cmcpOworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjUwCistICogICAgIGNkZWYgcHVibGljIG9iamVjdCBuYW1lLCBk YXRhCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5NQorICAqIAorLSAqICAg ICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9wcm9wZXJ0eSogcHJvcCk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5u YW1lKQorLSAqICAgICAgICAgc2VsZi5kYXRhID0gX2NvbnZlcnRfdmFsdWUocHJvcC5kYXRhLCBw cm9wLmZvcm1hdCkKKysgKiAgICAgQHByb3BlcnR5CisrICogICAgIGRlZiBuYW1lKHNlbGYpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJtcHZfZXZlbnRfbmFt ZSBvZiB0aGUgZXZlbnQgaWQiIiIKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZV9j CisgICovCisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl84UHJvcGVydHlfX2luaXQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UHJvcGVydHkgKl9fcHl4X3Zfc2VsZiwgc3RydWN0IG1wdl9ldmVudF9wcm9wZXJ0eSAqX19weXhf dl9wcm9wKSB7CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfMV9fZ2V0X18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80bmFtZV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhf dl9zZWxmKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBw ZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF80bmFtZV9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRXZlbnQgKilfX3B5eF92X3NlbGYpKTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsK Kyt9CisrCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf NUV2ZW50XzRuYW1lX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgeworKyAgY2hhciBjb25zdCAqX19weXhfdl9uYW1lX2M7 CisgICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucworICAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CitAQCAtNTcwNCwxOCArNjEyOCw2 MyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9w ZXJ0eV9faW5pdChzdHJ1Y3QgX19weXhfb2JqXworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisg ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2luaXQiLCAwKTsKKysgIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fIiwgMCk7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUxCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Mjk4CisrICogICAgICAgICAiIiJtcHZfZXZlbnRfbmFtZSBvZiB0aGUgZXZlbnQg aWQiIiIKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZV9jCisrICogICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAg bmFtZV9jID0gbXB2X2V2ZW50X25hbWUoc2VsZi5pZCkKKysgKiAgICAgICAgIHJldHVybiBfc3Ry ZGVjKG5hbWVfYykKKysgKi8KKysgIHsKKysgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAg ICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKysgICAg ICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CisrICAgICAgI2VuZGlmCisrICAgICAgLyp0cnk6 Ki8geworKworKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5OQor KyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBuYW1lX2MKKysgKiAgICAgICAgIHdpdGggbm9n aWw6CisrICogICAgICAgICAgICAgbmFtZV9jID0gbXB2X2V2ZW50X25hbWUoc2VsZi5pZCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobmFt ZV9jKQorICAqIAorLSAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9wcm9wZXJ0eSog cHJvcCk6CistICogICAgICAgICBzZWxmLm5hbWUgPSBfc3RyZGVjKHByb3AubmFtZSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5kYXRhID0gX2NvbnZlcnRf dmFsdWUocHJvcC5kYXRhLCBwcm9wLmZvcm1hdCkKKy0gKiAgICAgICAgIHJldHVybiBzZWxmCisg ICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0 cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDI1MSwgX19weXhf TDFfZXJyb3IpCisrICAgICAgICBfX3B5eF92X25hbWVfYyA9IG1wdl9ldmVudF9uYW1lKF9fcHl4 X3Zfc2VsZi0+aWQpOworKyAgICAgIH0KKysKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6Mjk4CisrICogICAgICAgICAiIiJtcHZfZXZlbnRfbmFtZSBvZiB0aGUgZXZl bnQgaWQiIiIKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZV9jCisrICogICAgICAg ICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAg ICAgbmFtZV9jID0gbXB2X2V2ZW50X25hbWUoc2VsZi5pZCkKKysgKiAgICAgICAgIHJldHVybiBf c3RyZGVjKG5hbWVfYykKKysgKi8KKysgICAgICAvKmZpbmFsbHk6Ki8geworKyAgICAgICAgLypu b3JtYWwgZXhpdDoqL3sKKysgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAg IF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CisrICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKysg ICAgICAgICAgI2VuZGlmCisrICAgICAgICAgIGdvdG8gX19weXhfTDU7CisrICAgICAgICB9Cisr ICAgICAgICBfX3B5eF9MNTo7CisrICAgICAgfQorKyAgfQorKworKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjMwMAorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAg ICAgICAgICBuYW1lX2MgPSBtcHZfZXZlbnRfbmFtZShzZWxmLmlkKQorKyAqICAgICAgICAgcmV0 dXJuIF9zdHJkZWMobmFtZV9jKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisr ICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50KiBldmVudCwgY3R4KToKKysgKi8KKysg IF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9f cHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDMwMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X3Byb3At Pm5hbWUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyNTEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4 X3ZfbmFtZV9jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMzAwLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgX19weXhfdF80 ID0gTlVMTDsKKyAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRo b2RfQ2hlY2soX19weXhfdF8yKSkpIHsKK0BAIC01NzMwLDQ4ICs2MTk5LDE5IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X19pbml0KHN0 cnVjdCBfX3B5eF9vYmpfCisgICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdF8zKSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOworICAgX19QeXhfWERFQ1JF RihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7 IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCAyNTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgMzAwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBfX1B5eF9H SVZFUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5uYW1lKTsK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPm5hbWUpOworLSAgX19weXhfdl9zZWxmLT5u YW1lID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyNTIKKy0gKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZl bnRfcHJvcGVydHkqIHByb3ApOgorLSAqICAgICAgICAgc2VsZi5uYW1lID0gX3N0cmRlYyhwcm9w Lm5hbWUpCistICogICAgICAgICBzZWxmLmRhdGEgPSBfY29udmVydF92YWx1ZShwcm9wLmRhdGEs IHByb3AuZm9ybWF0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBy ZXR1cm4gc2VsZgorLSAqIAorLSAqLworLSAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUoX19weXhfdl9wcm9wLT5kYXRhLCBfX3B5eF92X3By b3AtPmZvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI1Miwg X19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0dJ VkVSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmRhdGEpOwor LSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CistICBfX3B5eF92X3NlbGYtPmRh dGEgPSBfX3B5eF90XzE7CisrICBfX3B5eF9yID0gX19weXhfdF8xOworICAgX19weXhfdF8xID0g MDsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTMKKy0gKiAgICAg ICAgIHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5uYW1lKQorLSAqICAgICAgICAgc2VsZi5kYXRh ID0gX2NvbnZlcnRfdmFsdWUocHJvcC5kYXRhLCBwcm9wLmZvcm1hdCkKKy0gKiAgICAgICAgIHJl dHVybiBzZWxmICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAKKy0gKi8K Ky0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAq KV9fcHl4X3Zfc2VsZikpOworLSAgX19weXhfciA9ICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYp OworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoyNTAKKy0gKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IG5hbWUsIGRhdGEKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTUKKyAgKiAKKy0gKiAgICAgY2RlZiBfaW5p dChzZWxmLCBtcHZfZXZlbnRfcHJvcGVydHkqIHByb3ApOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICBzZWxmLm5hbWUgPSBfc3RyZGVjKHByb3AubmFtZSkKKy0gKiAg ICAgICAgIHNlbGYuZGF0YSA9IF9jb252ZXJ0X3ZhbHVlKHByb3AuZGF0YSwgcHJvcC5mb3JtYXQp CisrICogICAgIEBwcm9wZXJ0eQorKyAqICAgICBkZWYgbmFtZShzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIibXB2X2V2ZW50X25hbWUgb2YgdGhlIGV2 ZW50IGlkIiIiCisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIG5hbWVfYworICAqLworIAor ICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCitAQCAtNTc4MCwxNTQ3ICs2MjIwLDE3MTAgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlf X2luaXQoc3RydWN0IF9fcHl4X29ial8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKyAg IF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsK Ky0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlByb3BlcnR5Ll9pbml0 IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5 eF9yID0gMDsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkV2ZW50 Lm5hbWUuX19nZXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOworKyAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJF RihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJu IF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDgK Ky0gKiAgICAgV3JhcHM6IG1wdl9ldmVudF9wcm9wZXJ0eQorLSAqICAgICAiIiIKKy0gKiAgICAg Y2RlZiBwdWJsaWMgb2JqZWN0IG5hbWUsIGRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDIKKysgKiAgICAgICAgIHJl dHVybiBfc3RyZGVjKG5hbWVfYykKKyAgKiAKKy0gKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZf ZXZlbnRfcHJvcGVydHkqIHByb3ApOgorKyAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVu dCogZXZlbnQsIGN0eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoY3R4KQorKyAqICAgICAgICAgc2Vs Zi5pZCA9IGV2ZW50LmV2ZW50X2lkCisgICovCisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlf NG5hbWVfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFt ZV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CistICBQeU9iamVjdCAqX19weXhf ciA9IDA7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV9fX2dldF9fKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF92X3NlbGYp KTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRuYW1lX19fZ2V0X18o c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3Zf c2VsZikgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf NUV2ZW50X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50 ICpfX3B5eF92X3NlbGYsIHN0cnVjdCBtcHZfZXZlbnQgKl9fcHl4X3ZfZXZlbnQsIFB5T2JqZWN0 ICpfX3B5eF92X2N0eCkgeworKyAgdWludDY0X3QgX19weXhfdl9jdHhpZDsKKysgIFB5T2JqZWN0 ICpfX3B5eF92X3VzZXJkYXRhID0gTlVMTDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsK KyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX19nZXRfXyIsIDApOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4 X0lOQ1JFRihfX3B5eF92X3NlbGYtPm5hbWUpOworLSAgX19weXhfciA9IF9fcHl4X3Zfc2VsZi0+ bmFtZTsKKy0gIGdvdG8gX19weXhfTDA7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K Ky0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CisrICBQeU9iamVj dCAqX19weXhfdF8xID0gTlVMTDsKKysgIHVpbnQ2NF90IF9fcHl4X3RfMjsKKysgIGVudW0gbXB2 X2V2ZW50X2lkIF9fcHl4X3RfMzsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAg UHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVM TDsKKysgIGludCBfX3B5eF90Xzc7CisrICBQeU9iamVjdCAqX19weXhfdF84ID0gTlVMTDsKKysg IGludCBfX3B5eF90Xzk7CisrICBpbnQgX19weXhfdF8xMDsKKysgIGludCBfX3B5eF90XzExOwor KyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9 IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX2luaXQiLCAwKTsKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBp bnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV8zX19zZXRf XyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qcHJv dG8qLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0 eV80bmFtZV8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhf dl92YWx1ZSkgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9u cworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18gKHdyYXBwZXIpIiwgMCk7 CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80 bmFtZV8yX19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1By b3BlcnR5ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfdmFsdWUpKTsKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDMKKysgKiAKKysgKiAgICAgY2Rl ZiBfaW5pdChzZWxmLCBtcHZfZXZlbnQqIGV2ZW50LCBjdHgpOgorKyAqICAgICAgICAgY2RlZiB1 aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChjdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIHNlbGYuaWQgPSBldmVudC5ldmVudF9pZAorKyAqICAgICAgICAg c2VsZi5kYXRhID0gc2VsZi5fZGF0YShldmVudCkKKysgKi8KKysgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfYnVpbHRpbl9pZCwgX19weXhfdl9jdHgpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDMsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9B c191aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2 NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAzMDMsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBf X3B5eF92X2N0eGlkID0gKCh1aW50NjRfdClfX3B5eF90XzIpOworIAorLSAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVy biBfX3B5eF9yOworLX0KKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDQK KysgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnQqIGV2ZW50LCBjdHgpOgorKyAqICAg ICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChjdHgpCisrICogICAgICAg ICBzZWxmLmlkID0gZXZlbnQuZXZlbnRfaWQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5fZGF0YShldmVudCkKKysgKiAgICAgICAgIHVz ZXJkYXRhID0gX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5X3VzZXJkYXRh LCBOb25lKQorKyAqLworKyAgX19weXhfdF8zID0gX19weXhfdl9ldmVudC0+ZXZlbnRfaWQ7Cisr ICBfX3B5eF92X3NlbGYtPmlkID0gX19weXhfdF8zOworIAorLXN0YXRpYyBpbnQgX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV8yX19zZXRfXyhzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl92YWx1ZSkgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18iLCAw KTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19w eXhfdl92YWx1ZSk7CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5uYW1lKTsKKy0gIF9f UHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPm5hbWUpOworLSAgX19weXhfdl9zZWxmLT5uYW1lID0g X19weXhfdl92YWx1ZTsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDUK KysgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoY3R4KQorKyAq ICAgICAgICAgc2VsZi5pZCA9IGV2ZW50LmV2ZW50X2lkCisrICogICAgICAgICBzZWxmLmRhdGEg PSBzZWxmLl9kYXRhKGV2ZW50KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICB1c2VyZGF0YSA9IF9yZXBseV91c2VyZGF0YXNbY3R4aWRdLmdldChldmVudC5yZXBseV91 c2VyZGF0YSwgTm9uZSkKKysgKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lIGFuZCBz ZWxmLmlkICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6CisrICovCisrICBfX3B5eF90XzEg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAq KV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9kYXRhKF9fcHl4X3Zfc2VsZiwgX19weXhfdl9l dmVudCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwNSwgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dJVkVSRUYo X19weXhfdF8xKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmRhdGEpOworKyAgX19Q eXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CisrICBfX3B5eF92X3NlbGYtPmRhdGEgPSBf X3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCistICBfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwor LSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMwNgorKyAqICAgICAgICAgc2VsZi5pZCA9IGV2ZW50LmV2ZW50X2lkCisrICogICAgICAg ICBzZWxmLmRhdGEgPSBzZWxmLl9kYXRhKGV2ZW50KQorKyAqICAgICAgICAgdXNlcmRhdGEgPSBf cmVwbHlfdXNlcmRhdGFzW2N0eGlkXS5nZXQoZXZlbnQucmVwbHlfdXNlcmRhdGEsIE5vbmUpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5v dCBOb25lIGFuZCBzZWxmLmlkICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6CisrICogICAg ICAgICAgICAgdXNlcmRhdGEucmVtb3ZlKCkKKysgKi8KKysgIF9fcHl4X3RfNCA9IF9fUHl4X0dl dEl0ZW1JbnQoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcywg X19weXhfdl9jdHhpZCwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAs IDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzMDYsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICBfX3B5eF90XzUgPSBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNCwgX19weXhfbl9zX2dldCk7IGlmICh1 bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCisr ICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBf X3B5eF90XzQgPSAwOworKyAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChf X3B5eF92X2V2ZW50LT5yZXBseV91c2VyZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkg X19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhf dF80KTsKKysgIF9fcHl4X3RfNiA9IE5VTEw7CisrICBfX3B5eF90XzcgPSAwOworKyAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkp IHsKKysgICAgX19weXhfdF82ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF81KTsKKysgICAg aWYgKGxpa2VseShfX3B5eF90XzYpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNSk7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3RfNik7CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3RfNSwgZnVuY3Rpb24pOworKyAgICAgIF9fcHl4X3RfNyA9IDE7CisrICAg IH0KKysgIH0KKysgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKysgIGlmIChQeUZ1bmN0aW9uX0No ZWNrKF9fcHl4X3RfNSkpIHsKKysgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhf dF82LCBfX3B5eF90XzQsIFB5X05vbmV9OworKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0 aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsxLV9fcHl4X3RfNywgMitfX3B5eF90 XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDYsIF9fcHl4X0wx X2Vycm9yKQorKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cisr ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKKysgIH0gZWxzZQorKyAgI2VuZGlmCisrICAjaWYgQ1lUSE9OX0ZB U1RfUFlDQ0FMTAorKyAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzUp KSB7CisrICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4X3RfNiwgX19weXhfdF80 LCBQeV9Ob25lfTsKKysgICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwo X19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF83LCAyK19fcHl4X3RfNyk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQg PSAwOworKyAgfSBlbHNlCisrICAjZW5kaWYKKysgIHsKKysgICAgX19weXhfdF84ID0gUHlUdXBs ZV9OZXcoMitfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOCkpIF9fUFlYX0VSUigw LCAzMDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF84KTsKKysg ICAgaWYgKF9fcHl4X3RfNikgeworKyAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF82KTsgUHlU dXBsZV9TRVRfSVRFTShfX3B5eF90XzgsIDAsIF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IE5VTEw7 CisrICAgIH0KKysgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzQpOworKyAgICBQeVR1cGxlX1NF VF9JVEVNKF9fcHl4X3RfOCwgMCtfX3B5eF90XzcsIF9fcHl4X3RfNCk7CisrICAgIF9fUHl4X0lO Q1JFRihQeV9Ob25lKTsKKysgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKysgICAgUHlUdXBs ZV9TRVRfSVRFTShfX3B5eF90XzgsIDErX19weXhfdF83LCBQeV9Ob25lKTsKKysgICAgX19weXhf dF80ID0gMDsKKysgICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzUs IF9fcHl4X3RfOCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDMwNiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF84KTsgX19weXhfdF84ID0gMDsKKysgIH0KKysgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworKyAgX19weXhfdl91c2VyZGF0YSA9 IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7CisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8K Ky1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNG5h bWVfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0YXRpYyBp bnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV81X19kZWxf XyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxf XyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfOFByb3BlcnR5XzRuYW1lXzRfX2RlbF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF92X3NlbGYpKTsKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDcKKysgKiAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYu X2RhdGEoZXZlbnQpCisrICogICAgICAgICB1c2VyZGF0YSA9IF9yZXBseV91c2VyZGF0YXNbY3R4 aWRdLmdldChldmVudC5yZXBseV91c2VyZGF0YSwgTm9uZSkKKysgKiAgICAgICAgIGlmIHVzZXJk YXRhIGlzIG5vdCBOb25lIGFuZCBzZWxmLmlkICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICB1c2VyZGF0YS5y ZW1vdmUoKQorKyAqICAgICAgICAgICAgIGlmIG5vdCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNl cmRhdGEuY291bnRlciA8PSAwOgorKyAqLworKyAgX19weXhfdF8xMCA9IChfX3B5eF92X3VzZXJk YXRhICE9IFB5X05vbmUpOworKyAgX19weXhfdF8xMSA9IChfX3B5eF90XzEwICE9IDApOworKyAg aWYgKF9fcHl4X3RfMTEpIHsKKysgIH0gZWxzZSB7CisrICAgIF9fcHl4X3RfOSA9IF9fcHl4X3Rf MTE7CisrICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworKyAgfQorKyAgX19weXhf dF8xMSA9ICgoX19weXhfdl9zZWxmLT5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFKSAh PSAwKTsKKysgIF9fcHl4X3RfOSA9IF9fcHl4X3RfMTE7CisrICBfX3B5eF9MNF9ib29sX2Jpbm9w X2RvbmU6OworKyAgaWYgKF9fcHl4X3RfOSkgeworIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9y OworLX0KKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwOAorKyAqICAg ICAgICAgdXNlcmRhdGEgPSBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXS5nZXQoZXZlbnQucmVwbHlf dXNlcmRhdGEsIE5vbmUpCisrICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZSBhbmQg c2VsZi5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgorKyAqICAgICAgICAgICAgIHVz ZXJkYXRhLnJlbW92ZSgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICAgICBpZiBub3QgdXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50ZXIgPD0gMDoK KysgKiAgICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdW2V2ZW50LnJl cGx5X3VzZXJkYXRhXQorKyAqLworKyAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19yZW1vdmUpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF81KTsKKysgICAgX19weXhfdF84ID0gTlVMTDsKKysgICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkp IHsKKysgICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzUpOworKyAg ICAgIGlmIChsaWtlbHkoX19weXhfdF84KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9u ID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNSk7CisrICAgICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF84KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAg ICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNSwgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAg fQorKyAgICBfX3B5eF90XzEgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF81LCBfX3B5eF90XzgpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4 X3RfNSk7CisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsgX19weXhfdF84ID0gMDsKKysg ICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA4LCBfX3B5eF9MMV9l cnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKyAKKy1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl84UHJvcGVydHlfNG5hbWVfNF9fZGVsX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3Zfc2VsZikgeworLSAgaW50IF9fcHl4X3I7Cist ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fZGVsX18iLCAwKTsKKy0gIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gIF9fUHl4X0dJ VkVSRUYoUHlfTm9uZSk7CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5uYW1lKTsKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPm5hbWUpOworLSAgX19weXhfdl9zZWxmLT5uYW1l ID0gUHlfTm9uZTsKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwOQor KyAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VW RU5UX1BST1BFUlRZX0NIQU5HRToKKysgKiAgICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUoKQor KyAqICAgICAgICAgICAgIGlmIG5vdCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291 bnRlciA8PSAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAg ICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0KKysg KiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lOgorKyAqLworKyAgICBfX3B5eF90XzEg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19v YnNlcnZlZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwOSwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX3B5eF90 XzExID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5 eF90XzExIDwgMCkpIF9fUFlYX0VSUigwLCAzMDksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgICAgX19weXhfdF8xMCA9ICgo IV9fcHl4X3RfMTEpICE9IDApOworKyAgICBpZiAoX19weXhfdF8xMCkgeworKyAgICB9IGVsc2Ug eworKyAgICAgIF9fcHl4X3RfOSA9IF9fcHl4X3RfMTA7CisrICAgICAgZ290byBfX3B5eF9MN19i b29sX2Jpbm9wX2RvbmU7CisrICAgIH0KKysgICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3Rf R2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhLCBfX3B5eF9uX3NfY291bnRlcik7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX3B5eF90XzUgPSBQeU9iamVjdF9SaWNo Q29tcGFyZShfX3B5eF90XzEsIF9fcHl4X2ludF8wLCBQeV9MRSk7IF9fUHl4X1hHT1RSRUYoX19w eXhfdF81KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMzA5LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 CisrICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF81KTsgaWYg KHVubGlrZWx5KF9fcHl4X3RfMTAgPCAwKSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJy b3IpCisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworKyAgICBf X3B5eF90XzkgPSBfX3B5eF90XzEwOworKyAgICBfX3B5eF9MN19ib29sX2Jpbm9wX2RvbmU6Owor KyAgICBpZiAoX19weXhfdF85KSB7CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0g IF9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1 cm4gX19weXhfcjsKKy19CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjMxMAorKyAqICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCisrICogICAgICAgICAgICAg aWYgbm90IHVzZXJkYXRhLm9ic2VydmVkIGFuZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6CisrICog ICAgICAgICAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBseV91 c2VyZGF0YV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgaWYgdXNl cmRhdGEgaXMgbm90IE5vbmU6CisrICogICAgICAgICAgICAgdXNlcmRhdGEgPSB1c2VyZGF0YS5k YXRhCisrICovCisrICAgICAgX19weXhfdF81ID0gX19QeXhfR2V0SXRlbUludChfX3B5eF92Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50 NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMxMCwgX19weXhfTDFfZXJyb3IpCisrICAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CisrICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X0RlbEl0 ZW1JbnQoX19weXhfdF81LCBfX3B5eF92X2V2ZW50LT5yZXBseV91c2VyZGF0YSwgdWludDY0X3Qs IDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigw LCAzMTAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBf X3B5eF90XzUgPSAwOworIAorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzFfX2dldF9f KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfMV9fZ2V0X18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworLSAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X2dldF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdl9zZWxmKSk7CisrICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwOQorKyAqICAgICAgICAgaWYgdXNlcmRh dGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRToK KysgKiAgICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUoKQorKyAqICAgICAgICAgICAgIGlmIG5v dCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRh dGFzW2N0eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0KKysgKiAgICAgICAgIGlmIHVzZXJkYXRh IGlzIG5vdCBOb25lOgorKyAqLworKyAgICB9CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7 CistfQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzA3CisrICogICAg ICAgICBzZWxmLmRhdGEgPSBzZWxmLl9kYXRhKGV2ZW50KQorKyAqICAgICAgICAgdXNlcmRhdGEg PSBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXS5nZXQoZXZlbnQucmVwbHlfdXNlcmRhdGEsIE5vbmUp CisrICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZSBhbmQgc2VsZi5pZCAhPSBNUFZf RVZFTlRfUFJPUEVSVFlfQ0hBTkdFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICAgICAgdXNlcmRhdGEucmVtb3ZlKCkKKysgKiAgICAgICAgICAgICBpZiBub3QgdXNl cmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50ZXIgPD0gMDoKKysgKi8KKysgIH0KKyAK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVy dHlfNGRhdGFfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Q cm9wZXJ0eSAqX19weXhfdl9zZWxmKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Cist ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fZ2V0X18iLCAwKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX1B5eF9J TkNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF92X3NlbGYtPmRh dGE7CistICBnb3RvIF9fcHl4X0wwOworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMxMQorKyAqICAgICAgICAgICAgIGlmIG5vdCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNl cmRhdGEuY291bnRlciA8PSAwOgorKyAqICAgICAgICAgICAgICAgICBkZWwgX3JlcGx5X3VzZXJk YXRhc1tjdHhpZF1bZXZlbnQucmVwbHlfdXNlcmRhdGFdCisrICogICAgICAgICBpZiB1c2VyZGF0 YSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIHVzZXJkYXRhID0gdXNlcmRhdGEuZGF0YQorKyAqICAgICAgICAgc2VsZi5yZXBseV91c2Vy ZGF0YSA9IHVzZXJkYXRhCisrICovCisrICBfX3B5eF90XzkgPSAoX19weXhfdl91c2VyZGF0YSAh PSBQeV9Ob25lKTsKKysgIF9fcHl4X3RfMTAgPSAoX19weXhfdF85ICE9IDApOworKyAgaWYgKF9f cHl4X3RfMTApIHsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfTDA6 OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjMxMgorKyAqICAgICAgICAgICAgICAgICBkZWwgX3JlcGx5X3VzZXJk YXRhc1tjdHhpZF1bZXZlbnQucmVwbHlfdXNlcmRhdGFdCisrICogICAgICAgICBpZiB1c2VyZGF0 YSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgICAgICB1c2VyZGF0YSA9IHVzZXJkYXRhLmRhdGEg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5yZXBseV91c2Vy ZGF0YSA9IHVzZXJkYXRhCisrICogICAgICAgICBzZWxmLmVycm9yID0gZXZlbnQuZXJyb3IKKysg Ki8KKysgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3Vz ZXJkYXRhLCBfX3B5eF9uX3NfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhf RVJSKDAsIDMxMiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUp OworKyAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X3RfNSk7Cisr ICAgIF9fcHl4X3RfNSA9IDA7CisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgaW50 IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfM19fc2V0X18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKnByb3Rv Ki8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlf NGRhdGFfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zf dmFsdWUpIHsKKy0gIGludCBfX3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK Ky0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fICh3cmFwcGVyKSIsIDApOwor LSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRh dGFfMl9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eSAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVlKSk7CisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTEKKysgKiAgICAgICAgICAgICBp ZiBub3QgdXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50ZXIgPD0gMDoKKysgKiAg ICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdW2V2ZW50LnJlcGx5X3Vz ZXJkYXRhXQorKyAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmU6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICB1c2VyZGF0YSA9IHVzZXJkYXRhLmRh dGEKKysgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSB1c2VyZGF0YQorKyAqLworKyAg fQorKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMworKyAqICAgICAg ICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmU6CisrICogICAgICAgICAgICAgdXNlcmRhdGEgPSB1 c2VyZGF0YS5kYXRhCisrICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gdXNlcmRhdGEg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5lcnJvciA9IGV2 ZW50LmVycm9yCisrICogICAgICAgICByZXR1cm4gc2VsZgorKyAqLworKyAgX19QeXhfSU5DUkVG KF9fcHl4X3ZfdXNlcmRhdGEpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X3VzZXJkYXRhKTsK KysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKKysgIF9fUHl4 X0RFQ1JFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKKysgIF9fcHl4X3Zfc2VsZi0+ cmVwbHlfdXNlcmRhdGEgPSBfX3B5eF92X3VzZXJkYXRhOworKworKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjMxNAorKyAqICAgICAgICAgICAgIHVzZXJkYXRhID0gdXNlcmRh dGEuZGF0YQorKyAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IHVzZXJkYXRhCisrICog ICAgICAgICBzZWxmLmVycm9yID0gZXZlbnQuZXJyb3IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgcmV0dXJuIHNlbGYKKysgKiAKKysgKi8KKysgIF9fcHl4X3RfNyA9 IF9fcHl4X3ZfZXZlbnQtPmVycm9yOworKyAgX19weXhfdl9zZWxmLT5lcnJvciA9IF9fcHl4X3Rf NzsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTUKKysgKiAgICAg ICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSB1c2VyZGF0YQorKyAqICAgICAgICAgc2VsZi5lcnJv ciA9IGV2ZW50LmVycm9yCisrICogICAgICAgICByZXR1cm4gc2VsZiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogCisrICogCisrICovCisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3Ip OworKyAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsKKysgIF9fcHl4 X3IgPSAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKTsKKysgIGdvdG8gX19weXhfTDA7CisrCisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzAyCisrICogICAgICAgICByZXR1 cm4gX3N0cmRlYyhuYW1lX2MpCisrICogCisrICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2 ZW50KiBldmVudCwgY3R4KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChjdHgpCisrICogICAgICAgICBz ZWxmLmlkID0gZXZlbnQuZXZlbnRfaWQKKysgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworKyAgX19weXhfTDFfZXJyb3I6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwor KyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUp OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzgpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQuX2lu aXQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9f cHl4X3IgPSAwOworKyAgX19weXhfTDA6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X3VzZXJk YXRhKTsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIGludCBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzJfX3NldF9fKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpfX3B5eF92X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CistICBpbnQgX19weXhfcjsKKysvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjU4CisrICogY2RlZiBjbGFzcyBFdmVudChvYmplY3Qp OgorKyAqICAgICAiIiJXcmFwczogbXB2X2V2ZW50IiIiCisrICogICAgIGNkZWYgcHVibGljIG1w dl9ldmVudF9pZCBpZCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGNkZWYg cHVibGljIGludCBlcnJvcgorKyAqICAgICBjZGVmIHB1YmxpYyBvYmplY3QgZGF0YSwgcmVwbHlf dXNlcmRhdGEKKysgKi8KKysKKysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yaWRfMV9fZ2V0X18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yaWRfMV9fZ2V0X18oUHlPYmplY3QgKl9f cHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fIiwg MCk7CistICBfX1B5eF9JTkNSRUYoX19weXhfdl92YWx1ZSk7CistICBfX1B5eF9HSVZFUkVGKF9f cHl4X3ZfdmFsdWUpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CistICBf X1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKy0gIF9fcHl4X3Zfc2VsZi0+ZGF0YSA9 IF9fcHl4X3ZfdmFsdWU7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAo d3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50XzJpZF9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworLSAgX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsK KysgIHJldHVybiBfX3B5eF9yOworK30KKysKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMmlkX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3Qg Kl9fcHl4X3IgPSBOVUxMOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIFB5T2Jq ZWN0ICpfX3B5eF90XzEgPSBOVUxMOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25z dCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7 CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworKyAgX19QeXhf WERFQ1JFRihfX3B5eF9yKTsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9f bXB2X2V2ZW50X2lkKF9fcHl4X3Zfc2VsZi0+aWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAyNTgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CisrICBfX3B5eF9yID0gX19weXhfdF8xOworKyAgX19weXhfdF8xID0gMDsKKysgIGdv dG8gX19weXhfTDA7CisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X0wx X2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0FkZFRyYWNl YmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkV2ZW50LmlkLl9fZ2V0X18iLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworKyAg X19weXhfTDA6OworKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKyAvKiBQeXRob24g d3JhcHBlciAqLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQ cm9wZXJ0eV80ZGF0YV81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byov Cistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRk YXRhXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKytzdGF0aWMgaW50IF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMmlkXzNfX3NldF9fKFB5T2JqZWN0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLypwcm90byovCisrc3RhdGlj IGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8zX19zZXRfXyhQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworICAgaW50 IF9fcHl4X3I7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fZGVsX18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80ZGF0YV80X19kZWxfXygoKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdl9z ZWxmKSk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyAod3JhcHBlciki LCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 XzJpZF8yX19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2 ZW50ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfdmFsdWUpKTsKKyAKKyAg IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIGludCBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpfX3B5eF92X3NlbGYpIHsKKytzdGF0 aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMmlkXzJfX3NldF9f KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3Nl bGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CisgICBpbnQgX19weXhfcjsKKyAgIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19k ZWxfXyIsIDApOworLSAgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgX19QeXhfR0lWRVJFRihQ eV9Ob25lKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmRhdGEpOworLSAgX19QeXhf REVDUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CistICBfX3B5eF92X3NlbGYtPmRhdGEgPSBQeV9O b25lOworKyAgZW51bSBtcHZfZXZlbnRfaWQgX19weXhfdF8xOworKyAgaW50IF9fcHl4X2xpbmVu byA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIs IDApOworKyAgX19weXhfdF8xID0gKChlbnVtIG1wdl9ldmVudF9pZClfX1B5eF9QeUludF9Bc19l bnVtX19tcHZfZXZlbnRfaWQoX19weXhfdl92YWx1ZSkpOyBpZiAodW5saWtlbHkoUHlFcnJfT2Nj dXJyZWQoKSkpIF9fUFlYX0VSUigwLCAyNTgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdl9z ZWxmLT5pZCA9IF9fcHl4X3RfMTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAg X19weXhfciA9IDA7CisrICBnb3RvIF9fcHl4X0wwOworKyAgX19weXhfTDFfZXJyb3I6OworKyAg X19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQuaWQuX19zZXRfXyIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhf ciA9IC0xOworKyAgX19weXhfTDA6OworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogIih0cmVlIGZyYWdtZW50KSI6MQorLSAq IGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICBjZGVmIHR1cGxlIHN0YXRlCistICogICAgIGNkZWYgb2JqZWN0IF9kaWN0Cisr LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1OQorKyAqICAgICAiIiJXcmFwczog bXB2X2V2ZW50IiIiCisrICogICAgIGNkZWYgcHVibGljIG1wdl9ldmVudF9pZCBpZAorKyAqICAg ICBjZGVmIHB1YmxpYyBpbnQgZXJyb3IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICBjZGVmIHB1YmxpYyBvYmplY3QgZGF0YSwgcmVwbHlfdXNlcmRhdGEKKysgKiAKKyAgKi8K KyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV8xX19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byov Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3Bl cnR5XzFfX3JlZHVjZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5V U0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVycm9yXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl81RXZlbnRfNWVycm9yXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYp IHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18gKHdy YXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzhQcm9wZXJ0eV9fX3JlZHVjZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdl9zZWxmKSk7CisrICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzVlcnJvcl9fX2dldF9fKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpKTsK KyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X19fcmVkdWNlX2N5dGhvbl9f KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpfX3B5eF92 X3NlbGYpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X3N0YXRlID0gMDsKKy0gIFB5T2JqZWN0ICpf X3B5eF92X19kaWN0ID0gMDsKKy0gIGludCBfX3B5eF92X3VzZV9zZXRzdGF0ZTsKKytzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVycm9yX19f Z2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4 X3Zfc2VsZikgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgaW50IF9f cHl4X3RfMjsKKy0gIGludCBfX3B5eF90XzM7CistICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVM TDsKKy0gIGludCBfX3B5eF90XzU7CistICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKyAg IGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fIiwgMCk7CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQp Ijo1CistICogICAgIGNkZWYgb2JqZWN0IF9kaWN0CistICogICAgIGNkZWYgYmludCB1c2Vfc2V0 c3RhdGUKKy0gKiAgICAgc3RhdGUgPSAoc2VsZi5kYXRhLCBzZWxmLm5hbWUpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3Rf XycsIE5vbmUpCistICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorLSAqLworLSAgX19weXhf dF8xID0gUHlUdXBsZV9OZXcoMik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9f Z2V0X18iLCAwKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICBfX3B5eF90XzEgPSBf X1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X3NlbGYtPmVycm9yKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjU5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7Cist ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CistICBQeVR1cGxlX1NFVF9JVEVN KF9fcHl4X3RfMSwgMCwgX19weXhfdl9zZWxmLT5kYXRhKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5 eF92X3NlbGYtPm5hbWUpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYtPm5hbWUpOwor LSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4X3Zfc2VsZi0+bmFtZSk7Cist ICBfX3B5eF92X3N0YXRlID0gKChQeU9iamVjdCopX19weXhfdF8xKTsKKysgIF9fcHl4X3IgPSBf X3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworKyAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8q ICIodHJlZSBmcmFnbWVudCkiOjYKKy0gKiAgICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQorLSAq ICAgICBzdGF0ZSA9IChzZWxmLmRhdGEsIHNlbGYubmFtZSkKKy0gKiAgICAgX2RpY3QgPSBnZXRh dHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6CistICogICAgICAgICBzdGF0ZSArPSAoX2Rp Y3QsKQorLSAqLworLSAgX19weXhfdF8xID0gX19QeXhfR2V0QXR0cjMoKChQeU9iamVjdCAqKV9f cHl4X3Zfc2VsZiksIF9fcHl4X25fc19kaWN0LCBQeV9Ob25lKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKy0gIF9fcHl4X3ZfX2RpY3QgPSBfX3B5eF90XzE7CistICBfX3B5eF90XzEg PSAwOworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7Cisr ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1 dHRlci5saWJzLm1wdi5FdmVudC5lcnJvci5fX2dldF9fIiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKysgIF9fcHl4X0ww OjsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAvKiAiKHRyZWUgZnJhZ21l bnQpIjo3CistICogICAgIHN0YXRlID0gKHNlbGYuZGF0YSwgc2VsZi5uYW1lKQorLSAqICAgICBf ZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKy0gKiAgICAgaWYgX2RpY3Qg aXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHN0 YXRlICs9IChfZGljdCwpCistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCistICovCist ICBfX3B5eF90XzIgPSAoX19weXhfdl9fZGljdCAhPSBQeV9Ob25lKTsKKy0gIF9fcHl4X3RfMyA9 IChfX3B5eF90XzIgIT0gMCk7CistICBpZiAoX19weXhfdF8zKSB7CisrLyogUHl0aG9uIHdyYXBw ZXIgKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf NWVycm9yXzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X3ZhbHVlKTsgLypwcm90byovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50XzVlcnJvcl8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl92YWx1ZSkgeworKyAgaW50IF9fcHl4X3I7CisrICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18gKHdy YXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzVFdmVudF81ZXJyb3JfMl9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVl KSk7CisgCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKy0gKiAgICAgX2RpY3QgPSBnZXRh dHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCistICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25l OgorLSAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorLSAqICAgICBlbHNlOgorLSAq LworLSAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMSwgOCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9fZGljdCk7CistICAgIF9fUHl4 X0dJVkVSRUYoX19weXhfdl9fZGljdCk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8x LCAwLCBfX3B5eF92X19kaWN0KTsKKy0gICAgX19weXhfdF80ID0gUHlOdW1iZXJfSW5QbGFjZUFk ZChfX3B5eF92X3N0YXRlLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9f UFlYX0VSUigxLCA4LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NCk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICBf X1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Zfc3RhdGUsICgoUHlPYmplY3QqKV9fcHl4X3RfNCkpOwor LSAgICBfX3B5eF90XzQgPSAwOworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKyAKKy0g ICAgLyogIih0cmVlIGZyYWdtZW50KSI6OQorLSAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToK Ky0gKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpCistICogICAgICAgICB1c2Vfc2V0c3RhdGUg PSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgZWxzZToKKy0gKiAg ICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9uZSBvciBzZWxmLm5hbWUg aXMgbm90IE5vbmUKKy0gKi8KKy0gICAgX19weXhfdl91c2Vfc2V0c3RhdGUgPSAxOworLQorLSAg ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3CistICogICAgIHN0YXRlID0gKHNlbGYuZGF0YSwgc2Vs Zi5uYW1lKQorLSAqICAgICBfZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkK Ky0gKiAgICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpCistICogICAgICAgICB1c2Vfc2V0c3Rh dGUgPSBUcnVlCistICovCistICAgIGdvdG8gX19weXhfTDM7CistICB9CistCistICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxMQorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorLSAqICAg ICBlbHNlOgorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5kYXRhIGlzIG5vdCBOb25l IG9yIHNlbGYubmFtZSBpcyBub3QgTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIGlmIHVzZV9zZXRzdGF0ZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2ts ZV9Qcm9wZXJ0eSwgKHR5cGUoc2VsZiksIDB4MDU3MmQxMSwgTm9uZSksIHN0YXRlCistICovCist ICAvKmVsc2UqLyB7CistICAgIF9fcHl4X3RfMiA9IChfX3B5eF92X3NlbGYtPmRhdGEgIT0gUHlf Tm9uZSk7CistICAgIF9fcHl4X3RfNSA9IChfX3B5eF90XzIgIT0gMCk7CistICAgIGlmICghX19w eXhfdF81KSB7CistICAgIH0gZWxzZSB7CistICAgICAgX19weXhfdF8zID0gX19weXhfdF81Owor LSAgICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworLSAgICB9CistICAgIF9fcHl4 X3RfNSA9IChfX3B5eF92X3NlbGYtPm5hbWUgIT0gUHlfTm9uZSk7CistICAgIF9fcHl4X3RfMiA9 IChfX3B5eF90XzUgIT0gMCk7CistICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfMjsKKy0gICAgX19w eXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKKy0gICAgX19weXhfdl91c2Vfc2V0c3RhdGUgPSBfX3B5 eF90XzM7CistICB9CistICBfX3B5eF9MMzo7CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox MgorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5kYXRhIGlz IG5vdCBOb25lIG9yIHNlbGYubmFtZSBpcyBub3QgTm9uZQorLSAqICAgICBpZiB1c2Vfc2V0c3Rh dGU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiBfX3B5 eF91bnBpY2tsZV9Qcm9wZXJ0eSwgKHR5cGUoc2VsZiksIDB4MDU3MmQxMSwgTm9uZSksIHN0YXRl CistICogICAgIGVsc2U6CistICovCistICBfX3B5eF90XzMgPSAoX19weXhfdl91c2Vfc2V0c3Rh dGUgIT0gMCk7CistICBpZiAoX19weXhfdF8zKSB7CistCistICAgIC8qICIodHJlZSBmcmFnbWVu dCkiOjEzCistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBzZWxmLmRhdGEgaXMgbm90IE5vbmUg b3Igc2VsZi5uYW1lIGlzIG5vdCBOb25lCistICogICAgIGlmIHVzZV9zZXRzdGF0ZToKKy0gKiAg ICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgKHR5cGUoc2VsZiksIDB4MDU3 MmQxMSwgTm9uZSksIHN0YXRlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ZWxzZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgKHR5cGUo c2VsZiksIDB4MDU3MmQxMSwgc3RhdGUpCistICovCistICAgIF9fUHl4X1hERUNSRUYoX19weXhf cik7CistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3Nf cHl4X3VucGlja2xlX1Byb3BlcnR5KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9F UlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsK Ky0gICAgX19weXhfdF8xID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CistICAgIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2Jq ZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKy0gICAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICop UHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKy0gICAgUHlUdXBsZV9TRVRf SVRFTShfX3B5eF90XzEsIDAsICgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5 eF92X3NlbGYpKSkpOworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzU3MTMxNjkpOworLSAg ICBfX1B5eF9HSVZFUkVGKF9fcHl4X2ludF81NzEzMTY5KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRF TShfX3B5eF90XzEsIDEsIF9fcHl4X2ludF81NzEzMTY5KTsKKy0gICAgX19QeXhfSU5DUkVGKFB5 X05vbmUpOworLSAgICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOworLSAgICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfMSwgMiwgUHlfTm9uZSk7CistICAgIF9fcHl4X3RfNiA9IFB5VHVwbGVfTmV3 KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFf ZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgICBfX1B5eF9HSVZFUkVG KF9fcHl4X3RfNCk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF82LCAwLCBfX3B5eF90 XzQpOworLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CistICAgIFB5VHVwbGVfU0VUX0lU RU0oX19weXhfdF82LCAxLCBfX3B5eF90XzEpOworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9z dGF0ZSk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zdGF0ZSk7CistICAgIFB5VHVwbGVf U0VUX0lURU0oX19weXhfdF82LCAyLCBfX3B5eF92X3N0YXRlKTsKKy0gICAgX19weXhfdF80ID0g MDsKKy0gICAgX19weXhfdF8xID0gMDsKKy0gICAgX19weXhfciA9IF9fcHl4X3RfNjsKKy0gICAg X19weXhfdF82ID0gMDsKKy0gICAgZ290byBfX3B5eF9MMDsKKy0KKy0gICAgLyogIih0cmVlIGZy YWdtZW50KSI6MTIKKy0gKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNl bGYuZGF0YSBpcyBub3QgTm9uZSBvciBzZWxmLm5hbWUgaXMgbm90IE5vbmUKKy0gKiAgICAgaWYg dXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBy ZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAweDA1NzJkMTEsIE5v bmUpLCBzdGF0ZQorLSAqICAgICBlbHNlOgorLSAqLworLSAgfQorLQorLSAgLyogIih0cmVlIGZy YWdtZW50KSI6MTUKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwg KHR5cGUoc2VsZiksIDB4MDU3MmQxMSwgTm9uZSksIHN0YXRlCistICogICAgIGVsc2U6CistICog ICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAweDA1 NzJkMTEsIHN0YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogZGVmIF9fc2V0 c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5eF91bnBpY2ts ZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQorLSAqLworLSAgLyplbHNl Ki8geworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDE1LCBfX3B5eF9MMV9lcnJvcikK Ky0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICAgIF9fcHl4X3RfMSA9IFB5VHVwbGVf TmV3KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNSwgX19weXhf TDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9JTkNS RUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7Cist ICAgIF9fUHl4X0dJVkVSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZikpKSk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCAoKFB5T2Jq ZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKy0gICAgX19QeXhf SU5DUkVGKF9fcHl4X2ludF81NzEzMTY5KTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRf NTcxMzE2OSk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAxLCBfX3B5eF9pbnRf NTcxMzE2OSk7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3N0YXRlKTsKKy0gICAgX19QeXhf R0lWRVJFRihfX3B5eF92X3N0YXRlKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEs IDIsIF9fcHl4X3Zfc3RhdGUpOworLSAgICBfX3B5eF90XzQgPSBQeVR1cGxlX05ldygyKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQor LSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF90 XzYpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNCwgMCwgX19weXhfdF82KTsKKy0g ICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfNCwgMSwgX19weXhfdF8xKTsKKy0gICAgX19weXhfdF82ID0gMDsKKy0gICAgX19weXhfdF8x ID0gMDsKKy0gICAgX19weXhfciA9IF9fcHl4X3RfNDsKKy0gICAgX19weXhfdF80ID0gMDsKKy0g ICAgZ290byBfX3B5eF9MMDsKKy0gIH0KKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0g KiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgY2RlZiB0dXBsZSBzdGF0ZQorLSAqICAgICBjZGVmIG9iamVjdCBfZGljdAor LSAqLworK3N0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF81 ZXJyb3JfMl9fc2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZl bnQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKKysgIGludCBfX3B5 eF9yOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIGludCBfX3B5eF90XzE7Cisr ICBpbnQgX19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfX3NldF9fIiwgMCk7CisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Bc19pbnQo X19weXhfdl92YWx1ZSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8xID09IChpbnQpLTEpICYmIFB5 RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMjU5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3Zfc2VsZi0+ZXJyb3IgPSBfX3B5eF90XzE7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNv ZGUgKi8KKysgIF9fcHl4X3IgPSAwOworKyAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wxX2Vy cm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYoX19w eXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKKy0gIF9fUHl4X0FkZFRyYWNl YmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlByb3BlcnR5Ll9fcmVkdWNlX2N5dGhvbl9fIiwgX19w eXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0g TlVMTDsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkV2ZW50LmVy cm9yLl9fc2V0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1l KTsKKysgIF9fcHl4X3IgPSAtMTsKKyAgIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19w eXhfdl9zdGF0ZSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX2RpY3QpOworLSAgX19QeXhf WEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAg IHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAiKHRyZWUgZnJhZ21lbnQpIjoxNgorLSAqICAg ICBlbHNlOgorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5LCAodHlw ZShzZWxmKSwgMHgwNTcyZDExLCBzdGF0ZSkKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhz ZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg X19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShzZWxmLCBfX3B5eF9zdGF0ZSkKKysv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjYwCisrICogICAgIGNkZWYgcHVibGlj IG1wdl9ldmVudF9pZCBpZAorKyAqICAgICBjZGVmIHB1YmxpYyBpbnQgZXJyb3IKKysgKiAgICAg Y2RlZiBwdWJsaWMgb2JqZWN0IGRhdGEsIHJlcGx5X3VzZXJkYXRhICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgQHByb3BlcnR5CisgICovCisgCisgLyogUHl0aG9u IHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl84UHJvcGVydHlfM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfM19fc2V0c3Rh dGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19w eXhfc3RhdGUpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl81RXZlbnRfNGRhdGFfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJv dG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF80ZGF0YV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CisgICBQeU9iamVj dCAqX19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7 CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV8y X19zZXRzdGF0ZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X1Byb3BlcnR5ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhf c3RhdGUpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVy KSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZl bnRfNGRhdGFfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50ICopX19weXhfdl9zZWxmKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K KyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7Cisg fQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQ cm9wZXJ0eV8yX19zZXRzdGF0ZV9jeXRob25fXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Qcm9wZXJ0eSAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5 eF9zdGF0ZSkgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF80ZGF0YV9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVM TDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8x ID0gTlVMTDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18iLCAwKTsKKy0KKy0gIC8qICIo dHJlZSBmcmFnbWVudCkiOjE3CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJv cGVydHksICh0eXBlKHNlbGYpLCAweDA1NzJkMTEsIHN0YXRlKQorLSAqIGRlZiBfX3NldHN0YXRl X2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19weXhfdW5waWNrbGVfUHJv cGVydHlfX3NldF9zdGF0ZShzZWxmLCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqLworLSAgaWYgKCEobGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92 X19fcHl4X3N0YXRlKSl8fCgoX19weXhfdl9fX3B5eF9zdGF0ZSkgPT0gUHlfTm9uZSl8fChQeUVy cl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiRXhwZWN0ZWQgJS4xNnMsIGdvdCAlLjIwMHMiLCAi dHVwbGUiLCBQeV9UWVBFKF9fcHl4X3ZfX19weXhfc3RhdGUpLT50cF9uYW1lKSwgMCkpKSBfX1BZ WF9FUlIoMSwgMTcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdF8xID0gX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShfX3B5 eF92X3NlbGYsICgoUHlPYmplY3QqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjE2CistICogICAgIGVsc2U6CistICog ICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAweDA1 NzJkMTEsIHN0YXRlKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0 YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBfX3B5eF91bnBpY2ts ZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQorLSAqLworKyAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKKysgIF9fUHl4X1hERUNSRUYoX19w eXhfcik7CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKysgIF9fcHl4X3Ig PSBfX3B5eF92X3NlbGYtPmRhdGE7CisrICBnb3RvIF9fcHl4X0wwOworIAorICAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05v bmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMu bXB2LlByb3BlcnR5Ll9fc2V0c3RhdGVfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworICAgX19weXhfTDA6 OworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MjYzCistICogCistICogICAgIEBwcm9wZXJ0eQorLSAqICAgICBkZWYg ZXJyb3Jfc3RyKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRoZSBlcnJvciBwcm9lcHJ0eSIiIgorLSAqICAgICAg ICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworLSAqLworLQorIC8qIFB5dGhvbiB3cmFwcGVyICov Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 XzllcnJvcl9zdHJfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwor LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF85 ZXJyb3Jfc3RyXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5T2JqZWN0 ICpfX3B5eF9yID0gMDsKKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfNGRhdGFfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKKysgIGludCBfX3B5eF9yOworICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dl dF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl81RXZlbnRfOWVycm9yX3N0cl9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJfX3NldF9fICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfMl9fc2V0X18oKChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZiks ICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVlKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNv ZGUgKi8KKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4 X3I7CisgfQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF85ZXJyb3Jfc3RyX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgeworLSAgY2hhciBjb25zdCAqX19weXhf dl9lcnJfYzsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKytzdGF0aWMgaW50IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfMl9fc2V0X18oc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfdmFsdWUpIHsKKysgIGludCBfX3B5eF9yOworICAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKy0gIFB5 T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBj b25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9 IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworKyAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18iLCAwKTsKKysgIF9fUHl4X0lOQ1JFRihf X3B5eF92X3ZhbHVlKTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdl92YWx1ZSk7CisrICBfX1B5 eF9HT1RSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3Nl bGYtPmRhdGEpOworKyAgX19weXhfdl9zZWxmLT5kYXRhID0gX19weXhfdl92YWx1ZTsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNjYKKy0gKiAgICAgICAgICIiIm1w dl9lcnJvcl9zdHJpbmcgb2YgdGhlIGVycm9yIHByb2VwcnR5IiIiCistICogICAgICAgICBjZGVm IGNvbnN0IGNoYXIqIGVycl9jCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5n KHNlbGYuZXJyb3IpCistICogICAgICAgICByZXR1cm4gX3N0cmRlYyhlcnJfYykKKy0gKi8KKy0g IHsKKy0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2 ZTsKKy0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVt YmVyKCk7CistICAgICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8geworKyAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCisrICBfX3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorIAorLSAgICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjI2NworLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBl cnJfYworLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBlcnJfYyA9IG1w dl9lcnJvcl9zdHJpbmcoc2VsZi5lcnJvcikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoZXJyX2MpCistICogCistICovCistICAgICAgICBf X3B5eF92X2Vycl9jID0gbXB2X2Vycm9yX3N0cmluZyhfX3B5eF92X3NlbGYtPmVycm9yKTsKKy0g ICAgICB9CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zf c2VsZik7IC8qcHJvdG8qLworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF80ZGF0YV81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CisrICBp bnQgX19weXhfcjsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzRfX2RlbF9fKCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYp KTsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjY2CistICog ICAgICAgICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRoZSBlcnJvciBwcm9lcHJ0eSIiIgorLSAq ICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworLSAqICAgICAgICAgd2l0aCBub2dpbDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGVycl9jID0gbXB2 X2Vycm9yX3N0cmluZyhzZWxmLmVycm9yKQorLSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoZXJy X2MpCistICovCistICAgICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4aXQ6 Ki97CistICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0 R0lMX0ZvcmdldCgpOworLSAgICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICNl bmRpZgorLSAgICAgICAgICBnb3RvIF9fcHl4X0w1OworLSAgICAgICAgfQorLSAgICAgICAgX19w eXhfTDU6OworLSAgICAgIH0KKy0gIH0KKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjY4CistICogICAgICAgICB3 aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVycl9jID0gbXB2X2Vycm9yX3N0cmluZyhzZWxm LmVycm9yKQorLSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoZXJyX2MpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgY2RlZiBfZGF0YShzZWxmLCBtcHZfZXZlbnQq IGV2ZW50KToKKy0gKi8KKytzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfNGRhdGFfNF9fZGVsX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgeworKyAgaW50IF9fcHl4X3I7CisrICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVs X18iLCAwKTsKKysgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgIF9fUHl4X0dJVkVSRUYoUHlf Tm9uZSk7CisrICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF92X3NlbGYtPmRhdGEpOworKyAgX19weXhfdl9zZWxmLT5kYXRhID0gUHlfTm9u ZTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IDA7CisrICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysK KysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzFfX2dldF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV8xX19nZXRfXyhQeU9i amVjdCAqX19weXhfdl9zZWxmKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9f Z2V0X18gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhX19fZ2V0X18oKChzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZikpOworKworKyAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV9fX2dldF9fKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYp IHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFy YXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworICAg X19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgMjY4LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIp OworLSAgX19weXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfZXJyX2Mp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyNjgsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICBfX3B5eF90XzQgPSBOVUxMOwor LSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzIpKSkgeworLSAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90 XzIpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKKy0gICAgICBQeU9iamVjdCogZnVu Y3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF80KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAg IF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0g IF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4 X3RfMiwgX19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzIsIF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4 X3RfNCA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0g IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI2OCwgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19weXhfciA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3Rf MSA9IDA7CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSk7Cisr ICBfX3B5eF9yID0gX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YTsKKyAgIGdvdG8gX19weXhf TDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjYzCistICogCist ICogICAgIEBwcm9wZXJ0eQorLSAqICAgICBkZWYgZXJyb3Jfc3RyKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRo ZSBlcnJvciBwcm9lcHJ0eSIiIgorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYwor LSAqLworLQorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Mik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfNCk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5FdmVudC5l cnJvcl9zdHIuX19nZXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lW RVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0 dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy NzAKKy0gKiAgICAgICAgIHJldHVybiBfc3RyZGVjKGVycl9jKQorLSAqIAorLSAqICAgICBjZGVm IF9kYXRhKHNlbGYsIG1wdl9ldmVudCogZXZlbnQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICBjZGVmIHZvaWQqIGRhdGEgPSBldmVudC5kYXRhCistICogICAgICAg ICBjZGVmIG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSogY2xpbXNnCisrLyogUHl0aG9uIHdyYXBw ZXIgKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf MTRyZXBseV91c2VyZGF0YV8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVj dCAqX19weXhfdl92YWx1ZSk7IC8qcHJvdG8qLworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzNfX3NldF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CisrICBpbnQgX19weXhf cjsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19zZXRfXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVwbHlfdXNlcmRhdGFfMl9fc2V0X18oKChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2Vs ZiksICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVlKSk7CisrCisrICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9f cHl4X3I7CisrfQorKworK3N0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzJfX3NldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Zh bHVlKSB7CisrICBpbnQgX19weXhfcjsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisr ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOworKyAgX19QeXhfSU5D UkVGKF9fcHl4X3ZfdmFsdWUpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X3ZhbHVlKTsKKysg IF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKKysgIF9fcHl4X3Zfc2VsZi0+cmVw bHlfdXNlcmRhdGEgPSBfX3B5eF92X3ZhbHVlOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCisrICBfX3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwor KyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGlj IGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVwbHlfdXNlcmRh dGFfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworK3N0YXRpYyBp bnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRh XzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKysgIGludCBfX3B5eF9yOworKyAg X19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJfX2RlbF9fICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV80X19kZWxfXygoKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxmKSk7Cisr CisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworK3N0YXRpYyBpbnQgX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzRfX2RlbF9fKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYp IHsKKysgIGludCBfX3B5eF9yOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fIiwgMCk7CisrICBfX1B5eF9JTkNSRUYo UHlfTm9uZSk7CisrICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOworKyAgX19QeXhfR09UUkVGKF9f cHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2Vs Zi0+cmVwbHlfdXNlcmRhdGEpOworKyAgX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSA9IFB5 X05vbmU7CisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3IgPSAwOwor KyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9 CisrCisrLyogIih0cmVlIGZyYWdtZW50KSI6MQorKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBjZGVmIHR1cGxlIHN0 YXRlCisrICogICAgIGNkZWYgb2JqZWN0IF9kaWN0CisgICovCisgCistc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGEoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZiwgc3RydWN0IG1w dl9ldmVudCAqX19weXhfdl9ldmVudCkgeworLSAgdm9pZCAqX19weXhfdl9kYXRhOworLSAgc3Ry dWN0IG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSAqX19weXhfdl9jbGltc2c7CistICBQeU9iamVj dCAqX19weXhfdl9hcmdzID0gTlVMTDsKKy0gIGludCBfX3B5eF92X251bV9hcmdzOworLSAgaW50 IF9fcHl4X3ZfaTsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2FyZyA9IE5VTEw7CisrLyogUHl0aG9u IHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl81RXZlbnRfMV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xX19yZWR1Y2VfY3l0aG9u X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2Vk KSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fICh3 cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfX19yZWR1Y2VfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZikpOworKworKyAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBf X3B5eF9yOworK30KKysKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl81RXZlbnRfX19yZWR1Y2VfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9fcHl4 X3Zfc3RhdGUgPSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX2RpY3QgPSAwOworKyAgaW50IF9f cHl4X3ZfdXNlX3NldHN0YXRlOworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIHZvaWQgKl9fcHl4X3RfMTsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzEgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisgICBQ eU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKyAgIGludCBfX3B5eF90XzQ7CisgICBpbnQgX19w eXhfdF81OworICAgaW50IF9fcHl4X3RfNjsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxM OworLSAgaW50IF9fcHl4X3RfODsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3Qg Y2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwor LSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9kYXRhIiwgMCk7CisrICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18iLCAwKTsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzEKKy0gKiAKKy0gKiAgICAgY2RlZiBfZGF0YShz ZWxmLCBtcHZfZXZlbnQqIGV2ZW50KToKKy0gKiAgICAgICAgIGNkZWYgdm9pZCogZGF0YSA9IGV2 ZW50LmRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBt cHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqIGNsaW1zZworLSAqICAgICAgICAgaWYgc2VsZi5pZCA9 PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZOgorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6 NQorKyAqICAgICBjZGVmIG9iamVjdCBfZGljdAorKyAqICAgICBjZGVmIGJpbnQgdXNlX3NldHN0 YXRlCisrICogICAgIHN0YXRlID0gKHNlbGYuZGF0YSwgc2VsZi5lcnJvciwgc2VsZi5pZCwgc2Vs Zi5yZXBseV91c2VyZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBf ZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKysgKiAgICAgaWYgX2RpY3Qg aXMgbm90IE5vbmU6CisgICovCistICBfX3B5eF90XzEgPSBfX3B5eF92X2V2ZW50LT5kYXRhOwor LSAgX19weXhfdl9kYXRhID0gX19weXhfdF8xOworKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRf RnJvbV9pbnQoX19weXhfdl9zZWxmLT5lcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChf X3B5eF92X3NlbGYtPmlkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwg NSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fcHl4 X3RfMyA9IFB5VHVwbGVfTmV3KDQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigxLCA1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAg X19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4 X3Zfc2VsZi0+ZGF0YSk7CisrICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMCwgX19weXhf dl9zZWxmLT5kYXRhKTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKysgIFB5VHVwbGVf U0VUX0lURU0oX19weXhfdF8zLCAxLCBfX3B5eF90XzEpOworKyAgX19QeXhfR0lWRVJFRihfX3B5 eF90XzIpOworKyAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDIsIF9fcHl4X3RfMik7Cisr ICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSk7CisrICBfX1B5eF9H SVZFUkVGKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworKyAgUHlUdXBsZV9TRVRfSVRF TShfX3B5eF90XzMsIDMsIF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworKyAgX19weXhf dF8xID0gMDsKKysgIF9fcHl4X3RfMiA9IDA7CisrICBfX3B5eF92X3N0YXRlID0gKChQeU9iamVj dCopX19weXhfdF8zKTsKKysgIF9fcHl4X3RfMyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjczCistICogICAgICAgICBjZGVmIHZvaWQqIGRhdGEgPSBldmVu dC5kYXRhCistICogICAgICAgICBjZGVmIG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSogY2xpbXNn CistICogICAgICAgICBpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByZXR1cm4gUHJv cGVydHkoKS5faW5pdCg8bXB2X2V2ZW50X3Byb3BlcnR5Kj5kYXRhKQorLSAqICAgICAgICAgZWxp ZiBzZWxmLmlkID09IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6CistICovCistICBzd2l0Y2gg KF9fcHl4X3Zfc2VsZi0+aWQpIHsKKy0gICAgY2FzZSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JF UExZOgorLQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjc0CistICog ICAgICAgICBjZGVmIG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSogY2xpbXNnCistICogICAgICAg ICBpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFk6CistICogICAgICAg ICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09 IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6CistICogICAgICAgICAgICAgcmV0dXJuIFByb3Bl cnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKKysgIC8qICIodHJlZSBmcmFn bWVudCkiOjYKKysgKiAgICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQorKyAqICAgICBzdGF0ZSA9 IChzZWxmLmRhdGEsIHNlbGYuZXJyb3IsIHNlbGYuaWQsIHNlbGYucmVwbHlfdXNlcmRhdGEpCisr ICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorKyAqICAg ICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKKyAgKi8KKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKKy0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmplY3Qg KilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjc0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4X3RfMyA9ICgoc3RydWN0IF9fcHl4 X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3RfMiktPl9fcHl4 X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1By b3BlcnR5ICopX19weXhfdF8yKSwgKChzdHJ1Y3QgbXB2X2V2ZW50X3Byb3BlcnR5ICopX19weXhf dl9kYXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI3NCwgX19w eXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgX19weXhfciA9IF9fcHl4X3Rf MzsKKy0gICAgX19weXhfdF8zID0gMDsKKy0gICAgZ290byBfX3B5eF9MMDsKKysgIF9fcHl4X3Rf MyA9IF9fUHl4X0dldEF0dHIzKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3Nf ZGljdCwgUHlfTm9uZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDYs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICBfX3B5eF92 X19kaWN0ID0gX19weXhfdF8zOworKyAgX19weXhfdF8zID0gMDsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3MworLSAqICAgICAgICAgY2RlZiB2b2lkKiBkYXRh ID0gZXZlbnQuZGF0YQorLSAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2Uq IGNsaW1zZworLSAqICAgICAgICAgaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZ X1JFUExZOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0 dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKKy0gKiAgICAg ICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgorKyAgLyogIih0 cmVlIGZyYWdtZW50KSI6NworKyAqICAgICBzdGF0ZSA9IChzZWxmLmRhdGEsIHNlbGYuZXJyb3Is IHNlbGYuaWQsIHNlbGYucmVwbHlfdXNlcmRhdGEpCisrICogICAgIF9kaWN0ID0gZ2V0YXR0cihz ZWxmLCAnX19kaWN0X18nLCBOb25lKQorKyAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkK KysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUKKyAgKi8KKy0gICAgYnJlYWs7CistICAg IGNhc2UgTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRToKKysgIF9fcHl4X3RfNCA9IChfX3B5eF92 X19kaWN0ICE9IFB5X05vbmUpOworKyAgX19weXhfdF81ID0gKF9fcHl4X3RfNCAhPSAwKTsKKysg IGlmIChfX3B5eF90XzUpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjI3NgorLSAqICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSgpLl9pbml0KDxtcHZfZXZl bnRfcHJvcGVydHkqPmRhdGEpCistICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5U X1BST1BFUlRZX0NIQU5HRToKKy0gKiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5p dCg8bXB2X2V2ZW50X3Byb3BlcnR5Kj5kYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0xPR19NRVNTQUdFOgorLSAq ICAgICAgICAgICAgIHJldHVybiBMb2dNZXNzYWdlKCkuX2luaXQoPG1wdl9ldmVudF9sb2dfbWVz c2FnZSo+ZGF0YSkKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6OAorKyAqICAgICBfZGljdCA9 IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKysgKiAgICAgaWYgX2RpY3QgaXMgbm90 IE5vbmU6CisrICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCisrICogICAgIGVsc2U6 CisgICovCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9fcHl4X3RfMyA9IF9f UHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X1Byb3BlcnR5KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDAsIDI3NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9IFB5VHVwbGVfTmV3 KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA4LCBfX3B5eF9MMV9l cnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fcHl4X3RfMiA9ICgo c3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICop KChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4 X3RfMyktPl9fcHl4X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdF8zKSwgKChzdHJ1Y3QgbXB2X2V2ZW50X3Byb3Bl cnR5ICopX19weXhfdl9kYXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDI3NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X19kaWN0 KTsKKysgICAgX19QeXhfR0lWRVJFRihfX3B5eF92X19kaWN0KTsKKysgICAgUHlUdXBsZV9TRVRf SVRFTShfX3B5eF90XzMsIDAsIF9fcHl4X3ZfX2RpY3QpOworKyAgICBfX3B5eF90XzIgPSBQeU51 bWJlcl9JblBsYWNlQWRkKF9fcHl4X3Zfc3RhdGUsIF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3Rf MyA9IDA7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzI7CisrICAgIF9fUHl4X0RFQ1JFRl9TRVQo X19weXhfdl9zdGF0ZSwgKChQeU9iamVjdCopX19weXhfdF8yKSk7CisgICAgIF9fcHl4X3RfMiA9 IDA7CistICAgIGdvdG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyNzUKKy0gKiAgICAgICAgIGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0dFVF9Q Uk9QRVJUWV9SRVBMWToKKy0gKiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8 bXB2X2V2ZW50X3Byb3BlcnR5Kj5kYXRhKQorLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1Q Vl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8bXB2X2V2ZW50X3Byb3BlcnR5 Kj5kYXRhKQorLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9MT0dfTUVTU0FH RToKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6OQorKyAqICAgICBpZiBfZGljdCBpcyBub3Qg Tm9uZToKKysgKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpCisrICogICAgICAgICB1c2Vfc2V0 c3RhdGUgPSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZWxzZToK KysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9uZSBvciBzZWxm LnJlcGx5X3VzZXJkYXRhIGlzIG5vdCBOb25lCisgICovCistICAgIGJyZWFrOworLSAgICBjYXNl IE1QVl9FVkVOVF9MT0dfTUVTU0FHRToKKysgICAgX19weXhfdl91c2Vfc2V0c3RhdGUgPSAxOwor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjc4CistICogICAgICAg ICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkK Ky0gKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfTE9HX01FU1NBR0U6CistICog ICAgICAgICAgICAgcmV0dXJuIExvZ01lc3NhZ2UoKS5faW5pdCg8bXB2X2V2ZW50X2xvZ19tZXNz YWdlKj5kYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBlbGlm IHNlbGYuaWQgPT0gTVBWX0VWRU5UX1NDUklQVF9JTlBVVF9ESVNQQVRDSDoKKy0gKiAgICAgICAg ICAgICByZXR1cm4gSW5wdXREaXNwYXRjaCgpLl9pbml0KDxtcHZfZXZlbnRfc2NyaXB0X2lucHV0 X2Rpc3BhdGNoKj5kYXRhKQorKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3CisrICogICAgIHN0 YXRlID0gKHNlbGYuZGF0YSwgc2VsZi5lcnJvciwgc2VsZi5pZCwgc2VsZi5yZXBseV91c2VyZGF0 YSkKKysgKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCisrICog ICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0g VHJ1ZQorKyAqLworKyAgICBnb3RvIF9fcHl4X0wzOworKyAgfQorKworKyAgLyogIih0cmVlIGZy YWdtZW50KSI6MTEKKysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUKKysgKiAgICAgZWxz ZToKKysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9uZSBvciBz ZWxmLnJlcGx5X3VzZXJkYXRhIGlzIG5vdCBOb25lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgaWYgdXNlX3NldHN0YXRlOgorKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3Vu cGlja2xlX0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBOb25lKSwgc3RhdGUKKysgKi8K KysgIC8qZWxzZSovIHsKKysgICAgX19weXhfdF80ID0gKF9fcHl4X3Zfc2VsZi0+ZGF0YSAhPSBQ eV9Ob25lKTsKKysgICAgX19weXhfdF82ID0gKF9fcHl4X3RfNCAhPSAwKTsKKysgICAgaWYgKCFf X3B5eF90XzYpIHsKKysgICAgfSBlbHNlIHsKKysgICAgICBfX3B5eF90XzUgPSBfX3B5eF90XzY7 CisrICAgICAgZ290byBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU7CisrICAgIH0KKysgICAgX19w eXhfdF82ID0gKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgIT0gUHlfTm9uZSk7CisrICAg IF9fcHl4X3RfNCA9IChfX3B5eF90XzYgIT0gMCk7CisrICAgIF9fcHl4X3RfNSA9IF9fcHl4X3Rf NDsKKysgICAgX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKKysgICAgX19weXhfdl91c2Vfc2V0 c3RhdGUgPSBfX3B5eF90XzU7CisrICB9CisrICBfX3B5eF9MMzo7CisrCisrICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxMgorKyAqICAgICBlbHNlOgorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0g c2VsZi5kYXRhIGlzIG5vdCBOb25lIG9yIHNlbGYucmVwbHlfdXNlcmRhdGEgaXMgbm90IE5vbmUK KysgKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0eXBlKHNlbGYpLCAweGRh MzhjMjUsIE5vbmUpLCBzdGF0ZQorKyAqICAgICBlbHNlOgorKyAqLworKyAgX19weXhfdF81ID0g KF9fcHl4X3ZfdXNlX3NldHN0YXRlICE9IDApOworKyAgaWYgKF9fcHl4X3RfNSkgeworKworKyAg ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMworKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2Vs Zi5kYXRhIGlzIG5vdCBOb25lIG9yIHNlbGYucmVwbHlfdXNlcmRhdGEgaXMgbm90IE5vbmUKKysg KiAgICAgaWYgdXNlX3NldHN0YXRlOgorKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xl X0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBOb25lKSwgc3RhdGUgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBlbHNlOgorKyAqICAgICAgICAgcmV0dXJuIF9fcHl4 X3VucGlja2xlX0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBzdGF0ZSkKKyAgKi8KKyAg ICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfQ2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfTG9nTWVzc2FnZSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAy NzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4 X3RfMiwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9FdmVudCk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7CistICAgIF9fcHl4X3RfMyA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3Rf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKikoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF90XzIpLT5fX3B5eF92dGFiKS0+ X2luaXQoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl ICopX19weXhfdF8yKSwgKChzdHJ1Y3QgbXB2X2V2ZW50X2xvZ19tZXNzYWdlICopX19weXhfdl9k YXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI3OCwgX19weXhf TDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9IFB5VHVwbGVfTmV3KDMpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhf dF8yID0gMDsKKy0gICAgX19weXhfciA9IF9fcHl4X3RfMzsKKysgICAgX19QeXhfSU5DUkVGKCgo UHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworKyAgICBf X1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3Nl bGYpKSkpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMCwgKChQeU9iamVjdCAq KVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7CisrICAgIF9fUHl4X0lOQ1JF RihfX3B5eF9pbnRfMjI4ODIyMDUzKTsKKysgICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRfMjI4 ODIyMDUzKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDEsIF9fcHl4X2ludF8y Mjg4MjIwNTMpOworKyAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICAgIF9fUHl4X0dJVkVS RUYoUHlfTm9uZSk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8zLCAyLCBQeV9Ob25l KTsKKysgICAgX19weXhfdF8xID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8yKTsKKysgICAgUHlUdXBs ZV9TRVRfSVRFTShfX3B5eF90XzEsIDAsIF9fcHl4X3RfMik7CisrICAgIF9fUHl4X0dJVkVSRUYo X19weXhfdF8zKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4X3Rf Myk7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3N0YXRlKTsKKysgICAgX19QeXhfR0lWRVJF RihfX3B5eF92X3N0YXRlKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDIsIF9f cHl4X3Zfc3RhdGUpOworKyAgICBfX3B5eF90XzIgPSAwOworICAgICBfX3B5eF90XzMgPSAwOwor KyAgICBfX3B5eF9yID0gX19weXhfdF8xOworKyAgICBfX3B5eF90XzEgPSAwOworICAgICBnb3Rv IF9fcHl4X0wwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjc3 CistICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRToK Ky0gKiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8bXB2X2V2ZW50X3Byb3Bl cnR5Kj5kYXRhKQorLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9MT0dfTUVT U0FHRTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHJldHVy biBMb2dNZXNzYWdlKCkuX2luaXQoPG1wdl9ldmVudF9sb2dfbWVzc2FnZSo+ZGF0YSkKKy0gKiAg ICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENIOgor KyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgorKyAqICAgICBlbHNlOgorKyAqICAgICAgICAg dXNlX3NldHN0YXRlID0gc2VsZi5kYXRhIGlzIG5vdCBOb25lIG9yIHNlbGYucmVwbHlfdXNlcmRh dGEgaXMgbm90IE5vbmUKKysgKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0 eXBlKHNlbGYpLCAweGRhMzhjMjUsIE5vbmUpLCBzdGF0ZQorKyAqICAgICBlbHNlOgorICAqLwor LSAgICBicmVhazsKKy0gICAgY2FzZSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENIOgor KyAgfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjgwCistICog ICAgICAgICAgICAgcmV0dXJuIExvZ01lc3NhZ2UoKS5faW5pdCg8bXB2X2V2ZW50X2xvZ19tZXNz YWdlKj5kYXRhKQorLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9TQ1JJUFRf SU5QVVRfRElTUEFUQ0g6CistICogICAgICAgICAgICAgcmV0dXJuIElucHV0RGlzcGF0Y2goKS5f aW5pdCg8bXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0YSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9D TElFTlRfTUVTU0FHRToKKy0gKiAgICAgICAgICAgICBjbGltc2cgPSA8bXB2X2V2ZW50X2NsaWVu dF9tZXNzYWdlKj5kYXRhCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNQorKyAqICAgICAgICAg cmV0dXJuIF9fcHl4X3VucGlja2xlX0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBOb25l KSwgc3RhdGUKKysgKiAgICAgZWxzZToKKysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2ts ZV9FdmVudCwgKHR5cGUoc2VsZiksIDB4ZGEzOGMyNSwgc3RhdGUpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0 ZSk6CisrICogICAgIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoc2VsZiwgX19weXhf c3RhdGUpCisgICovCisrICAvKmVsc2UqLyB7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICop X19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2gpKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjgwLCBfX3B5eF9MMV9lcnJvcikKKysg ICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzEsIF9fcHl4X25fc19weXhfdW5w aWNrbGVfRXZlbnQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNSwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX3B5 eF90XzMgPSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsK Ky0gICAgX19weXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqKSgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqKV9fcHl4X3RfMyktPl9fcHl4X3Z0YWIpLT5faW5pdCgo KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKilf X3B5eF90XzMpLCAoKHN0cnVjdCBtcHZfZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3BhdGNoICopX19w eXhfdl9kYXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDI4MCwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgo KFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKysgICAgX19QeXhfR0lWRVJFRigoKFB5T2Jq ZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKysgICAgUHlUdXBs ZV9TRVRfSVRFTShfX3B5eF90XzMsIDAsICgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3Qg KilfX3B5eF92X3NlbGYpKSkpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzIyODgyMjA1 Myk7CisrICAgIF9fUHl4X0dJVkVSRUYoX19weXhfaW50XzIyODgyMjA1Myk7CisrICAgIFB5VHVw bGVfU0VUX0lURU0oX19weXhfdF8zLCAxLCBfX3B5eF9pbnRfMjI4ODIyMDUzKTsKKysgICAgX19Q eXhfSU5DUkVGKF9fcHl4X3Zfc3RhdGUpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc3Rh dGUpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMiwgX19weXhfdl9zdGF0ZSk7 CisrICAgIF9fcHl4X3RfMiA9IFB5VHVwbGVfTmV3KDIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigxLCAxNSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsK KysgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfMiwgMCwgX19weXhfdF8xKTsKKysgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzMpOwor KyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMiwgMSwgX19weXhfdF8zKTsKKysgICAgX19w eXhfdF8xID0gMDsKKysgICAgX19weXhfdF8zID0gMDsKKyAgICAgX19weXhfciA9IF9fcHl4X3Rf MjsKKyAgICAgX19weXhfdF8yID0gMDsKKyAgICAgZ290byBfX3B5eF9MMDsKKysgIH0KKyAKKy0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3OQorLSAqICAgICAgICAgZWxp ZiBzZWxmLmlkID09IE1QVl9FVkVOVF9MT0dfTUVTU0FHRToKKy0gKiAgICAgICAgICAgICByZXR1 cm4gTG9nTWVzc2FnZSgpLl9pbml0KDxtcHZfZXZlbnRfbG9nX21lc3NhZ2UqPmRhdGEpCistICog ICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX1NDUklQVF9JTlBVVF9ESVNQQVRDSDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHJldHVybiBJbnB1 dERpc3BhdGNoKCkuX2luaXQoPG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2gqPmRhdGEp CistICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFOgor KyAgLyogIih0cmVlIGZyYWdtZW50KSI6MQorKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxm KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBjZGVmIHR1cGxlIHN0YXRl CisrICogICAgIGNkZWYgb2JqZWN0IF9kaWN0CisgICovCistICAgIGJyZWFrOworLSAgICBjYXNl IE1QVl9FVkVOVF9DTElFTlRfTUVTU0FHRToKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjI4MgorLSAqICAgICAgICAgICAgIHJldHVybiBJbnB1dERpc3BhdGNoKCku X2luaXQoPG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2gqPmRhdGEpCistICogICAgICAg ICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFOgorLSAqICAgICAgICAg ICAgIGNsaW1zZyA9IDxtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqPmRhdGEgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGFyZ3MgPSBbXQorLSAqICAgICAgICAg ICAgIG51bV9hcmdzID0gY2xpbXNnLm51bV9hcmdzCistICovCistICAgIF9fcHl4X3ZfY2xpbXNn ID0gKChzdHJ1Y3QgbXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlICopX19weXhfdl9kYXRhKTsKKysg IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfTDFfZXJyb3I6OworKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworKyAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzMpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIu bGlicy5tcHYuRXZlbnQuX19yZWR1Y2VfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworKyAgX19weXhfTDA6 OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X3N0YXRlKTsKKysgIF9fUHl4X1hERUNSRUYoX19w eXhfdl9fZGljdCk7CisrICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKysgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorIAorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjgzCistICogICAgICAgICBlbGlmIHNlbGYu aWQgPT0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFOgorLSAqICAgICAgICAgICAgIGNsaW1zZyA9 IDxtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqPmRhdGEKKy0gKiAgICAgICAgICAgICBhcmdzID0g W10gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG51bV9hcmdz ID0gY2xpbXNnLm51bV9hcmdzCistICogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtX2Fy Z3MpOgorKy8qICIodHJlZSBmcmFnbWVudCkiOjE2CisrICogICAgIGVsc2U6CisrICogICAgICAg ICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0eXBlKHNlbGYpLCAweGRhMzhjMjUsIHN0 YXRlKQorKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9f c2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQorICAqLworLSAgICBfX3B5eF90XzIgPSBQeUxp c3RfTmV3KDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyODMsIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhf dl9hcmdzID0gKChQeU9iamVjdCopX19weXhfdF8yKTsKKy0gICAgX19weXhfdF8yID0gMDsKKyAK Ky0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NAorLSAqICAgICAgICAg ICAgIGNsaW1zZyA9IDxtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqPmRhdGEKKy0gKiAgICAgICAg ICAgICBhcmdzID0gW10KKy0gKiAgICAgICAgICAgICBudW1fYXJncyA9IGNsaW1zZy5udW1fYXJn cyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZm9yIGkgaW4g cmFuZ2UobnVtX2FyZ3MpOgorLSAqICAgICAgICAgICAgICAgICBhcmcgPSA8Y2hhcio+Y2xpbXNn LmFyZ3NbaV0KKy0gKi8KKy0gICAgX19weXhfdF80ID0gX19weXhfdl9jbGltc2ctPm51bV9hcmdz OworLSAgICBfX3B5eF92X251bV9hcmdzID0gX19weXhfdF80OworLQorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg1CistICogICAgICAgICAgICAgYXJncyA9IFtdCist ICogICAgICAgICAgICAgbnVtX2FyZ3MgPSBjbGltc2cubnVtX2FyZ3MKKy0gKiAgICAgICAgICAg ICBmb3IgaSBpbiByYW5nZShudW1fYXJncyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgICAgICAgICAgYXJnID0gPGNoYXIqPmNsaW1zZy5hcmdzW2ldCistICogICAg ICAgICAgICAgICAgIGFyZyA9IF9zdHJkZWMoYXJnKQorLSAqLworLSAgICBfX3B5eF90XzQgPSBf X3B5eF92X251bV9hcmdzOworLSAgICBfX3B5eF90XzUgPSBfX3B5eF90XzQ7CistICAgIGZvciAo X19weXhfdF82ID0gMDsgX19weXhfdF82IDwgX19weXhfdF81OyBfX3B5eF90XzYrPTEpIHsKKy0g ICAgICBfX3B5eF92X2kgPSBfX3B5eF90XzY7CistCistICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjI4NgorLSAqICAgICAgICAgICAgIG51bV9hcmdzID0gY2xpbXNnLm51 bV9hcmdzCistICogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtX2FyZ3MpOgorLSAqICAg ICAgICAgICAgICAgICBhcmcgPSA8Y2hhcio+Y2xpbXNnLmFyZ3NbaV0gICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBhcmcgPSBfc3RyZGVjKGFyZykKKy0g KiAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoYXJnKQorLSAqLworLSAgICAgIF9fcHl4X3Rf MiA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZygoKGNoYXIgKikoX19weXhfdl9jbGltc2ctPmFy Z3NbX19weXhfdl9pXSkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg Mjg2LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0g ICAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X2FyZywgX19weXhfdF8yKTsKKy0gICAgICBf X3B5eF90XzIgPSAwOworLQorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyODcKKy0gKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShudW1fYXJncyk6CistICogICAg ICAgICAgICAgICAgIGFyZyA9IDxjaGFyKj5jbGltc2cuYXJnc1tpXQorLSAqICAgICAgICAgICAg ICAgICBhcmcgPSBfc3RyZGVjKGFyZykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpCistICogICAgICAgICAgICAgcmV0dXJu IGFyZ3MKKy0gKi8KKy0gICAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMywg X19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDI4NywgX19weXhfTDFfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Cist ICAgICAgX19weXhfdF83ID0gTlVMTDsKKy0gICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RT ICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7CistICAgICAgICBfX3B5 eF90XzcgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzMpOworLSAgICAgICAgaWYgKGxpa2Vs eShfX3B5eF90XzcpKSB7CistICAgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9k X0dFVF9GVU5DVElPTihfX3B5eF90XzMpOworLSAgICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhf dF83KTsKKy0gICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKy0gICAgICAgIH0KKy0gICAgICB9 CistICAgICAgX19weXhfdF8yID0gKF9fcHl4X3RfNykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFy Z3MoX19weXhfdF8zLCBfX3B5eF90XzcsIF9fcHl4X3ZfYXJnKSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF92X2FyZyk7CistICAgICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDI4NywgX19weXhfTDFfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X2FyZywgX19weXhfdF8yKTsKKy0g ICAgICBfX3B5eF90XzIgPSAwOworLQorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyODgKKy0gKiAgICAgICAgICAgICAgICAgYXJnID0gPGNoYXIqPmNsaW1zZy5hcmdz W2ldCistICogICAgICAgICAgICAgICAgIGFyZyA9IF9zdHJkZWMoYXJnKQorLSAqICAgICAgICAg ICAgICAgICBhcmdzLmFwcGVuZChhcmcpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICByZXR1cm4gYXJncworLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1Q Vl9FVkVOVF9FTkRfRklMRToKKy0gKi8KKy0gICAgICBfX3B5eF90XzggPSBfX1B5eF9QeUxpc3Rf QXBwZW5kKF9fcHl4X3ZfYXJncywgX19weXhfdl9hcmcpOyBpZiAodW5saWtlbHkoX19weXhfdF84 ID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigwLCAyODgsIF9fcHl4X0wxX2Vycm9yKQorLSAgICB9 CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKnByb3RvKi8KKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfM19f c2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3ZfX19weXhfc3RhdGUpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKysgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRz dGF0ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzJfX3NldHN0YXRlX2N5dGhvbl9fKCgoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpLCAoKFB5 T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Mjg5CistICogICAgICAgICAgICAgICAgIGFyZyA9IF9zdHJkZWMo YXJnKQorLSAqICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpCistICogICAgICAgICAg ICAgcmV0dXJuIGFyZ3MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9FTkRfRklMRToKKy0gKiAgICAgICAgICAgICByZXR1 cm4gRW5kT2ZGaWxlUmVhY2hlZCgpLl9pbml0KDxtcHZfZXZlbnRfZW5kX2ZpbGUqPmRhdGEpCist ICovCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF92X2FyZ3MpOworLSAgICBfX3B5eF9yID0gX19weXhfdl9hcmdzOworLSAgICBnb3RvIF9fcHl4 X0wwOworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjI4MQorLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1Q Vl9FVkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0g6CistICogICAgICAgICAgICAgcmV0dXJuIElu cHV0RGlzcGF0Y2goKS5faW5pdCg8bXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0 YSkKKy0gKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0U6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBjbGltc2cgPSA8 bXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKj5kYXRhCistICogICAgICAgICAgICAgYXJncyA9IFtd CistICovCistICAgIGJyZWFrOworLSAgICBjYXNlIE1QVl9FVkVOVF9FTkRfRklMRToKKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMl9fc2V0 c3RhdGVfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZl bnQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKysgIFB5 T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisr ICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAwOwor KyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9u X18iLCAwKTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5MQor LSAqICAgICAgICAgICAgIHJldHVybiBhcmdzCistICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0g TVBWX0VWRU5UX0VORF9GSUxFOgorLSAqICAgICAgICAgICAgIHJldHVybiBFbmRPZkZpbGVSZWFj aGVkKCkuX2luaXQoPG1wdl9ldmVudF9lbmRfZmlsZSo+ZGF0YSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIE5vbmUKKy0gKiAKKysgIC8qICIodHJlZSBm cmFnbWVudCkiOjE3CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0 eXBlKHNlbGYpLCAweGRhMzhjMjUsIHN0YXRlKQorKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9f KHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9z dGF0ZShzZWxmLCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAq LworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9Q eU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDI5MSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzIpOworLSAgICBfX3B5eF90XzMgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICopX19weXhfdF8yKS0+X19weXhfdnRh YiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZG aWxlUmVhY2hlZCAqKV9fcHl4X3RfMiksICgoc3RydWN0IG1wdl9ldmVudF9lbmRfZmlsZSAqKV9f cHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyOTEs IF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fcHl4X3IgPSBfX3B5 eF90XzM7CistICAgIF9fcHl4X3RfMyA9IDA7CistICAgIGdvdG8gX19weXhfTDA7CisrICBpZiAo IShsaWtlbHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5 eF92X19fcHl4X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJy b3IsICJFeHBlY3RlZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5X1RZUEUoX19weXhf dl9fX3B5eF9zdGF0ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5 eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKF9fcHl4X3Zfc2VsZiwgKChQeU9iamVjdCopX19w eXhfdl9fX3B5eF9zdGF0ZSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigx LCAxNywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjkwCistICogICAgICAgICAgICAgICAgIGFyZ3MuYXBw ZW5kKGFyZykKKy0gKiAgICAgICAgICAgICByZXR1cm4gYXJncworLSAqICAgICAgICAgZWxpZiBz ZWxmLmlkID09IE1QVl9FVkVOVF9FTkRfRklMRTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgICAgIHJldHVybiBFbmRPZkZpbGVSZWFjaGVkKCkuX2luaXQoPG1wdl9l dmVudF9lbmRfZmlsZSo+ZGF0YSkKKy0gKiAgICAgICAgIHJldHVybiBOb25lCisrICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxNgorKyAqICAgICBlbHNlOgorKyAqICAgICAgICAgcmV0dXJuIF9fcHl4 X3VucGlja2xlX0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBzdGF0ZSkKKysgKiBkZWYg X19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShzZWxm LCBfX3B5eF9zdGF0ZSkKKyAgKi8KKy0gICAgYnJlYWs7CistICAgIGRlZmF1bHQ6IGJyZWFrOwor LSAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5MgorLSAqICAg ICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9FTkRfRklMRToKKy0gKiAgICAgICAgICAg ICByZXR1cm4gRW5kT2ZGaWxlUmVhY2hlZCgpLl9pbml0KDxtcHZfZXZlbnRfZW5kX2ZpbGUqPmRh dGEpCistICogICAgICAgICByZXR1cm4gTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogCistICogICAgIEBwcm9wZXJ0eQorLSAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19weXhfciA9IFB5X05vbmU7IF9f UHl4X0lOQ1JFRihQeV9Ob25lKTsKKyAgIGdvdG8gX19weXhfTDA7CisrICBfX3B5eF9MMV9lcnJv cjo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5FdmVudC5fX3NldHN0YXRlX2N5dGhvbl9fIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsK KysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjcwCistICogICAgICAgICByZXR1cm4gX3N0 cmRlYyhlcnJfYykKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE4CisgICog CistICogICAgIGNkZWYgX2RhdGEoc2VsZiwgbXB2X2V2ZW50KiBldmVudCk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgdm9pZCogZGF0YSA9IGV2ZW50LmRh dGEKKy0gKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKiBjbGltc2cKKysg KiAKKysgKiBkZWYgX2Vycm9ycyhmbik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgorKyAqICAgICAgICAgdiA9IGZuKCprLCAqKmt3 KQorICAqLworIAorKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNV9lcnJvcnMoUHlPYmplY3QgKl9fcHl4X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF92X2ZuKTsgLypwcm90byovCisrc3RhdGljIFB5TWV0aG9kRGVmIF9f cHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVfZXJyb3JzID0geyJfZXJyb3JzIiwgKFB5 Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81X2Vycm9ycywgTUVUSF9P LCAwfTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 X2Vycm9ycyhQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZm4pIHsKKysg IFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisr ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2Vycm9ycyAod3JhcHBlcikiLCAwKTsKKysg IF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNF9lcnJvcnMoX19weXhf c2VsZiwgKChQeU9iamVjdCAqKV9fcHl4X3ZfZm4pKTsKKysKKyAgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworLSAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzcpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQuX2Rh dGEiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9f cHl4X3IgPSAwOworLSAgX19weXhfTDA6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2FyZ3Mp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2FyZyk7CistICBfX1B5eF9YR0lWRVJFRihfX3B5 eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4 X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTUKKysvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE5CisgICogCistICogICAgIEBwcm9wZXJ0 eQorLSAqICAgICBkZWYgbmFtZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgIiIibXB2X2V2ZW50X25hbWUgb2YgdGhlIGV2ZW50IGlkIiIiCistICogICAg ICAgICBjZGVmIGNvbnN0IGNoYXIqIG5hbWVfYworKyAqIGRlZiBfZXJyb3JzKGZuKToKKysgKiAg ICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCisrICogICAgICAgICBpZiB2IDwgMDoKKyAgKi8K KyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80bmFtZV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhf dl9zZWxmKTsgLypwcm90byovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50XzRuYW1lXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYp IHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X2Vy cm9yc18xd3JhcHBlZChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3Ms IFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisrc3RhdGljIFB5TWV0aG9kRGVmIF9f cHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3JzXzF3cmFwcGVkID0geyJ3cmFw cGVkIiwgKFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3JzXzF3cmFwcGVkLCBNRVRIX1ZBUkFSR1N8 TUVUSF9LRVlXT1JEUywgMH07Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN19lcnJvcnNfMXdyYXBwZWQoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgeworKyAgUHlPYmplY3QgKl9f cHl4X3ZfayA9IDA7CisrICBQeU9iamVjdCAqX19weXhfdl9rdyA9IDA7CisgICBQeU9iamVjdCAq X19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80bmFtZV9fX2dldF9fKCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYp KTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJ3cmFwcGVkICh3cmFwcGVyKSIsIDAp OworKyAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpICYmIHVubGlrZWx5KCFfX1B5eF9DaGVja0tl eXdvcmRTdHJpbmdzKF9fcHl4X2t3ZHMsICJ3cmFwcGVkIiwgMSkpKSByZXR1cm4gTlVMTDsKKysg IF9fcHl4X3Zfa3cgPSAoX19weXhfa3dkcykgPyBQeURpY3RfQ29weShfX3B5eF9rd2RzKSA6IFB5 RGljdF9OZXcoKTsgaWYgKHVubGlrZWx5KCFfX3B5eF92X2t3KSkgcmV0dXJuIE5VTEw7CisrICBf X1B5eF9HT1RSRUYoX19weXhfdl9rdyk7CisrICBfX1B5eF9JTkNSRUYoX19weXhfYXJncyk7Cisr ICBfX3B5eF92X2sgPSBfX3B5eF9hcmdzOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83X2Vycm9yc193cmFwcGVkKF9fcHl4X3NlbGYsIF9fcHl4X3ZfaywgX19w eXhfdl9rdyk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4X1hERUNS RUYoX19weXhfdl9rKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9rdyk7CisgICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVf X19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19w eXhfdl9zZWxmKSB7CistICBjaGFyIGNvbnN0ICpfX3B5eF92X25hbWVfYzsKKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X2Vycm9yc193cmFwcGVkKFB5 T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9rLCBQeU9iamVjdCAqX19weXhf dl9rdykgeworKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhf c2NvcGVfc3RydWN0X19fZXJyb3JzICpfX3B5eF9jdXJfc2NvcGU7CisrICBzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKl9f cHl4X291dGVyX3Njb3BlOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfdiA9IE5VTEw7CisgICBQeU9i amVjdCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAg UHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVM TDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworKyAgaW50IF9fcHl4X3RfMzsKKyAg IFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisg ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndyYXBwZWQiLCAwKTsKKysgIF9fcHl4X291dGVy X3Njb3BlID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Nj b3BlX3N0cnVjdF9fX2Vycm9ycyAqKSBfX1B5eF9DeUZ1bmN0aW9uX0dldENsb3N1cmUoX19weXhf c2VsZik7CisrICBfX3B5eF9jdXJfc2NvcGUgPSBfX3B5eF9vdXRlcl9zY29wZTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTgKKy0gKiAgICAgICAgICIiIm1wdl9l dmVudF9uYW1lIG9mIHRoZSBldmVudCBpZCIiIgorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFy KiBuYW1lX2MKKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICBuYW1lX2MgPSBtcHZfZXZlbnRfbmFtZShzZWxmLmlkKQor LSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobmFtZV9jKQorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjMyMAorKyAqIGRlZiBfZXJyb3JzKGZuKToKKysgKiAgICAgZGVmIHdy YXBwZWQoKmssICoqa3cpOgorKyAqICAgICAgICAgdiA9IGZuKCprLCAqKmt3KSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBpZiB2IDwgMDoKKysgKiAgICAgICAgICAg ICByYWlzZSBNUFZFcnJvcih2KQorICAqLworLSAgeworLSAgICAgICNpZmRlZiBXSVRIX1RIUkVB RAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFE UworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKy0gICAgICAjZW5kaWYKKy0gICAg ICAvKnRyeToqLyB7CisrICBpZiAodW5saWtlbHkoIV9fcHl4X2N1cl9zY29wZS0+X19weXhfdl9m bikpIHsgX19QeXhfUmFpc2VDbG9zdXJlTmFtZUVycm9yKCJmbiIpOyBfX1BZWF9FUlIoMCwgMzIw LCBfX3B5eF9MMV9lcnJvcikgfQorKyAgX19weXhfdF8xID0gUHlEaWN0X0NvcHkoX19weXhfdl9r dyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMyMCwgX19weXhfTDFf ZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fcHl4X3RfMiA9IF9fUHl4 X1B5T2JqZWN0X0NhbGwoX19weXhfY3VyX3Njb3BlLT5fX3B5eF92X2ZuLCBfX3B5eF92X2ssIF9f cHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDMyMCwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19weXhfdl92ID0gX19weXhfdF8yOwor KyAgX19weXhfdF8yID0gMDsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyOTkKKy0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZV9jCistICogICAg ICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG5hbWVfYyA9IG1wdl9ldmVudF9uYW1l KHNlbGYuaWQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHJldHVy biBfc3RyZGVjKG5hbWVfYykKKy0gKiAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMjEKKysgKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgorKyAqICAgICAgICAgdiA9 IGZuKCprLCAqKmt3KQorKyAqICAgICAgICAgaWYgdiA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcih2KQorKyAqICAgICByZXR1 cm4gd3JhcHBlZAorICAqLworLSAgICAgICAgX19weXhfdl9uYW1lX2MgPSBtcHZfZXZlbnRfbmFt ZShfX3B5eF92X3NlbGYtPmlkKTsKKy0gICAgICB9CisrICBfX3B5eF90XzIgPSBQeU9iamVjdF9S aWNoQ29tcGFyZShfX3B5eF92X3YsIF9fcHl4X2ludF8wLCBQeV9MVCk7IF9fUHl4X1hHT1RSRUYo X19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMzIxLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5 eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlYX0VSUigwLCAzMjEsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 CisrICBpZiAodW5saWtlbHkoX19weXhfdF8zKSkgeworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyOTgKKy0gKiAgICAgICAgICIiIm1wdl9ldmVudF9uYW1lIG9m IHRoZSBldmVudCBpZCIiIgorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBuYW1lX2MKKy0g KiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgICAgICBuYW1lX2MgPSBtcHZfZXZlbnRfbmFtZShzZWxmLmlkKQorLSAqICAgICAgICAg cmV0dXJuIF9zdHJkZWMobmFtZV9jKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MzIyCisrICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCisrICogICAgICAgICBpZiB2 IDwgMDoKKysgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcih2KSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgIHJldHVybiB3cmFwcGVkCisrICogCisgICovCistICAgICAg LypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICNp ZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAg ICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICBn b3RvIF9fcHl4X0w1OworLSAgICAgICAgfQorLSAgICAgICAgX19weXhfTDU6OworKyAgICBfX1B5 eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhfbl9zX01QVkVycm9yKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzIyLCBfX3B5eF9MMV9lcnJvcikK KysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fcHl4X3RfNCA9IE5VTEw7Cisr ICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF8xKSkpIHsKKysgICAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5 eF90XzEpOworKyAgICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgeworKyAgICAgICAgUHlPYmpl Y3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMSk7CisrICAgICAg ICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlv bik7CisrICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMSwgZnVuY3Rpb24pOworICAg ICAgIH0KKy0gIH0KKysgICAgfQorKyAgICBfX3B5eF90XzIgPSAoX19weXhfdF80KSA/IF9fUHl4 X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzEsIF9fcHl4X3RfNCwgX19weXhfdl92KSA6IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8xLCBfX3B5eF92X3YpOworKyAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgIGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDMyMiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKysgICAgX19QeXhfUmFpc2UoX19weXhfdF8yLCAwLCAwLCAwKTsKKysgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUFlYX0VSUigwLCAz MjIsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMwMAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBuYW1lX2Mg PSBtcHZfZXZlbnRfbmFtZShzZWxmLmlkKQorLSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobmFt ZV9jKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGNkZWYgX2lu aXQoc2VsZiwgbXB2X2V2ZW50KiBldmVudCwgY3R4KToKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjMyMQorKyAqICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6CisrICog ICAgICAgICB2ID0gZm4oKmssICoqa3cpCisrICogICAgICAgICBpZiB2IDwgMDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKHYpCisr ICogICAgIHJldHVybiB3cmFwcGVkCisgICovCistICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwor LSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzMDAsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX3B5eF90XzMgPSBfX1B5eF9Q eUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9uYW1lX2MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MykpIF9fUFlYX0VSUigwLCAzMDAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfMyk7CistICBfX3B5eF90XzQgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICBfX3B5 eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICBpZiAobGlrZWx5KF9f cHl4X3RfNCkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVO Q1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsKKy0gICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhf dF8yLCBmdW5jdGlvbik7CistICAgIH0KKyAgIH0KKy0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzQp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF90 XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMyk7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICBfX1B5eF9ERUNS RUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDMwMCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAg X19weXhfciA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7CistICBnb3RvIF9fcHl4X0ww OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5NQorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOQorICAqIAorLSAqICAgICBAcHJvcGVydHkK Ky0gKiAgICAgZGVmIG5hbWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICIiIm1wdl9ldmVudF9uYW1lIG9mIHRoZSBldmVudCBpZCIiIgorLSAqICAgICAg ICAgY2RlZiBjb25zdCBjaGFyKiBuYW1lX2MKKysgKiBkZWYgX2Vycm9ycyhmbik6CisrICogICAg IGRlZiB3cmFwcGVkKCprLCAqKmt3KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgdiA9IGZuKCprLCAqKmt3KQorKyAqICAgICAgICAgaWYgdiA8IDA6CisgICovCisg CisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5 eF9JTkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOworICAgX19weXhfTDFfZXJyb3I6 OworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzIpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworICAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzQpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQu bmFtZS5fX2dldF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFt ZSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fZXJyb3JzLndy YXBwZWQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKyAg IF9fcHl4X3IgPSBOVUxMOworICAgX19weXhfTDA6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92 X3YpOworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MzAyCistICogICAgICAgICByZXR1cm4gX3N0cmRlYyhuYW1lX2Mp CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOAorICAqIAorLSAqICAgICBj ZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudCogZXZlbnQsIGN0eCk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+ aWQoY3R4KQorLSAqICAgICAgICAgc2VsZi5pZCA9IGV2ZW50LmV2ZW50X2lkCisrICogCisrICog ZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGRl ZiB3cmFwcGVkKCprLCAqKmt3KToKKysgKiAgICAgICAgIHYgPSBmbigqaywgKiprdykKKyAgKi8K KyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19w eXhfdl9zZWxmLCBzdHJ1Y3QgbXB2X2V2ZW50ICpfX3B5eF92X2V2ZW50LCBQeU9iamVjdCAqX19w eXhfdl9jdHgpIHsKKy0gIHVpbnQ2NF90IF9fcHl4X3ZfY3R4aWQ7CistICBQeU9iamVjdCAqX19w eXhfdl91c2VyZGF0YSA9IE5VTEw7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfNF9lcnJvcnMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfZm4pIHsKKysgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqX19weXhfY3VyX3Njb3Bl OworKyAgUHlPYmplY3QgKl9fcHl4X3Zfd3JhcHBlZCA9IDA7CisgICBQeU9iamVjdCAqX19weXhf ciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9f cHl4X3RfMSA9IE5VTEw7CistICB1aW50NjRfdCBfX3B5eF90XzI7CistICBlbnVtIG1wdl9ldmVu dF9pZCBfX3B5eF90XzM7CistICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF90XzUgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7Cist ICBpbnQgX19weXhfdF83OworLSAgUHlPYmplY3QgKl9fcHl4X3RfOCA9IE5VTEw7CistICBpbnQg X19weXhfdF85OworLSAgaW50IF9fcHl4X3RfMTA7CistICBpbnQgX19weXhfdF8xMTsKKyAgIGlu dCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxM OworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9pbml0IiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2Vycm9ycyIs IDApOworKyAgX19weXhfY3VyX3Njb3BlID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqKV9fcHl4X3RwX25ld185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzKF9fcHl4X3B0eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMsIF9fcHl4 X2VtcHR5X3R1cGxlLCBOVUxMKTsKKysgIGlmICh1bmxpa2VseSghX19weXhfY3VyX3Njb3BlKSkg eworKyAgICBfX3B5eF9jdXJfc2NvcGUgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqKVB5X05vbmUpOworKyAgICBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICAgIF9fUFlYX0VSUigwLCAzMTgsIF9fcHl4X0wxX2Vy cm9yKQorKyAgfSBlbHNlIHsKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X2N1cl9zY29wZSk7Cisr ICB9CisrICBfX3B5eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4gPSBfX3B5eF92X2ZuOworKyAgX19Q eXhfSU5DUkVGKF9fcHl4X2N1cl9zY29wZS0+X19weXhfdl9mbik7CisrICBfX1B5eF9HSVZFUkVG KF9fcHl4X2N1cl9zY29wZS0+X19weXhfdl9mbik7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzAzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzE5CisgICogCistICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50KiBldmVudCwgY3R4 KToKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoY3R4KSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmlkID0gZXZlbnQu ZXZlbnRfaWQKKy0gKiAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuX2RhdGEoZXZlbnQpCisrICog ZGVmIF9lcnJvcnMoZm4pOgorKyAqICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHYgPSBmbigqaywgKiprdykKKysgKiAg ICAgICAgIGlmIHYgPCAwOgorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF9idWlsdGluX2lkLCBfX3B5eF92X2N0eCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwMywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEg PSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N19lcnJvcnNfMXdyYXBwZWQsIDAsIF9fcHl4X25fc19lcnJvcnNfbG9jYWxzX3dyYXBwZWQsICgo UHlPYmplY3QqKV9fcHl4X2N1cl9zY29wZSksIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYs IF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18yKSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMxOSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0FzX3VpbnQ2NF90 KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09ICgodWludDY0X3QpLTEpKSAm JiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDMwMywgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3ZfY3R4 aWQgPSAoKHVpbnQ2NF90KV9fcHl4X3RfMik7CisrICBfX3B5eF92X3dyYXBwZWQgPSBfX3B5eF90 XzE7CisrICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjMwNAorLSAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudCogZXZlbnQsIGN0 eCk6CistICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKGN0eCkK Ky0gKiAgICAgICAgIHNlbGYuaWQgPSBldmVudC5ldmVudF9pZCAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLl9kYXRhKGV2ZW50KQorLSAq ICAgICAgICAgdXNlcmRhdGEgPSBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXS5nZXQoZXZlbnQucmVw bHlfdXNlcmRhdGEsIE5vbmUpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzIzCisrICogICAgICAgICBpZiB2IDwgMDoKKysgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJv cih2KQorKyAqICAgICByZXR1cm4gd3JhcHBlZCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogCisrICogCisgICovCistICBfX3B5eF90XzMgPSBfX3B5eF92X2V2ZW50LT5ldmVudF9p ZDsKKy0gIF9fcHl4X3Zfc2VsZi0+aWQgPSBfX3B5eF90XzM7CisrICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfd3JhcHBlZCk7CisrICBfX3B5eF9yID0g X19weXhfdl93cmFwcGVkOworKyAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjozMDUKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQg PSA8dWludDY0X3Q+aWQoY3R4KQorLSAqICAgICAgICAgc2VsZi5pZCA9IGV2ZW50LmV2ZW50X2lk CistICogICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLl9kYXRhKGV2ZW50KSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB1c2VyZGF0YSA9IF9yZXBseV91c2VyZGF0YXNb Y3R4aWRdLmdldChldmVudC5yZXBseV91c2VyZGF0YSwgTm9uZSkKKy0gKiAgICAgICAgIGlmIHVz ZXJkYXRhIGlzIG5vdCBOb25lIGFuZCBzZWxmLmlkICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFO R0U6CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE4CisrICogCisrICog CisrICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KToKKysgKiAgICAgICAgIHYgPSBmbigqaywgKiprdykK KyAgKi8KKy0gIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRl cl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2RhdGEoX19w eXhfdl9zZWxmLCBfX3B5eF92X2V2ZW50KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgMzA1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zf c2VsZi0+ZGF0YSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKy0gIF9f cHl4X3Zfc2VsZi0+ZGF0YSA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzA2CistICogICAgICAgICBzZWxmLmlk ID0gZXZlbnQuZXZlbnRfaWQKKy0gKiAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuX2RhdGEoZXZl bnQpCistICogICAgICAgICB1c2VyZGF0YSA9IF9yZXBseV91c2VyZGF0YXNbY3R4aWRdLmdldChl dmVudC5yZXBseV91c2VyZGF0YSwgTm9uZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VW RU5UX1BST1BFUlRZX0NIQU5HRToKKy0gKiAgICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUoKQor KyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5s aWJzLm1wdi5fZXJyb3JzIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hERUNS RUYoX19weXhfdl93cmFwcGVkKTsKKysgIF9fUHl4X0RFQ1JFRigoKFB5T2JqZWN0ICopX19weXhf Y3VyX3Njb3BlKSk7CisrICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKysgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworKy8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjkKKysgKiAgICAgY29kZSA9IE5vbmUKKysgKiAK KysgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICBzZWxmLmNvZGUgPSBlCisrICogICAgICAgICBjZGVmIGNvbnN0IGNo YXIqIGVycl9jCisgICovCistICBfX3B5eF90XzQgPSBfX1B5eF9HZXRJdGVtSW50KF9fcHl4X3Zf OXZpZGN1dHRlcl80bGlic18zbXB2X19yZXBseV91c2VyZGF0YXMsIF9fcHl4X3ZfY3R4aWQsIHVp bnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzA2LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cihfX3B5eF90XzQsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NSkpIF9fUFlYX0VSUigwLCAzMDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfNSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0g IF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoX19weXhfdl9ldmVudC0+cmVw bHlfdXNlcmRhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzMDYs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBfX3B5eF90 XzYgPSBOVUxMOworLSAgX19weXhfdF83ID0gMDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhP RFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNSkpKSB7CistICAgIF9fcHl4X3Rf NiA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNSk7CistICAgIGlmIChsaWtlbHkoX19weXhf dF82KSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElP TihfX3B5eF90XzUpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzYpOworLSAgICAgIF9f UHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzUs IGZ1bmN0aW9uKTsKKy0gICAgICBfX3B5eF90XzcgPSAxOworLSAgICB9CistICB9CistICAjaWYg Q1lUSE9OX0ZBU1RfUFlDQUxMCistICBpZiAoUHlGdW5jdGlvbl9DaGVjayhfX3B5eF90XzUpKSB7 CistICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4X3RfNiwgX19weXhfdF80LCBQ eV9Ob25lfTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChfX3B5 eF90XzUsIF9fcHl4X3RlbXArMS1fX3B5eF90XzcsIDIrX19weXhfdF83KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA2LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7 CistICB9IGVsc2UKKy0gICNlbmRpZgorLSAgI2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwKKy0gIGlm IChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2soX19weXhfdF81KSkgeworLSAgICBQeU9iamVj dCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzYsIF9fcHl4X3RfNCwgUHlfTm9uZX07CistICAg IF9fcHl4X3RfMSA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhf dGVtcCsxLV9fcHl4X3RfNywgMitfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAzMDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIH0gZWxzZQor LSAgI2VuZGlmCisrCisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84TVBWRXJyb3JfMV9faW5pdF9fKFB5T2JqZWN0 ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMp OyAvKnByb3RvKi8KKytzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfOE1QVkVycm9yXzFfX2luaXRfXyA9IHsiX19pbml0X18iLCAoUHlDRnVuY3Rpb24p KHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfOE1QVkVycm9yXzFfX2luaXRfXywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9 OworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZF cnJvcl8xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdz LCBQeU9iamVjdCAqX19weXhfa3dkcykgeworKyAgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiA9IDA7 CisrICBQeU9iamVjdCAqX19weXhfdl9lID0gMDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAwOwor KyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworKyAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyAod3JhcHBl cikiLCAwKTsKKyAgIHsKKy0gICAgX19weXhfdF84ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90Xzcp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOCkpIF9fUFlYX0VSUigwLCAzMDYsIF9fcHl4X0wxX2Vy cm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF84KTsKKy0gICAgaWYgKF9fcHl4X3RfNikg eworLSAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF82KTsgUHlUdXBsZV9TRVRfSVRFTShfX3B5 eF90XzgsIDAsIF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IE5VTEw7CisrICAgIHN0YXRpYyBQeU9i amVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3NlbGYsJl9fcHl4X25fc19l LDB9OworKyAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07CisrICAgIGlmICh1bmxpa2Vs eShfX3B5eF9rd2RzKSkgeworKyAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKysgICAgICBjb25z dCBQeV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKysg ICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CisrICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQ eVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOworKyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5 eF9hcmdzLCAwKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2Ug IDA6IGJyZWFrOworKyAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJv cjsKKysgICAgICB9CisrICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOwor KyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBp ZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2Rz LCBfX3B5eF9uX3Nfc2VsZikpICE9IDApKSBrd19hcmdzLS07CisrICAgICAgICBlbHNlIGdvdG8g X19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Cisr ICAgICAgICBjYXNlICAxOgorKyAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhf UHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2UpKSAhPSAwKSkga3dfYXJn cy0tOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZh bGlkKCJfX2luaXRfXyIsIDEsIDIsIDIsIDEpOyBfX1BZWF9FUlIoMCwgMzI5LCBfX3B5eF9MM19l cnJvcikKKysgICAgICAgIH0KKysgICAgICB9CisrICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3Mg PiAwKSkgeworKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3Jk cyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAiX19p bml0X18iKSA8IDApKSBfX1BZWF9FUlIoMCwgMzI5LCBfX3B5eF9MM19lcnJvcikKKysgICAgICB9 CisrICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7Cisr ICAgICAgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgfSBlbHNlIHsKKysgICAg ICB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworKyAgICAgIHZh bHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CisgICAgIH0KKy0gICAg X19QeXhfR0lWRVJFRihfX3B5eF90XzQpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3Rf OCwgMCtfX3B5eF90XzcsIF9fcHl4X3RfNCk7CistICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsK Ky0gICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5 eF90XzgsIDErX19weXhfdF83LCBQeV9Ob25lKTsKKy0gICAgX19weXhfdF80ID0gMDsKKy0gICAg X19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzUsIF9fcHl4X3RfOCwgTlVM TCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFf ZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYo X19weXhfdF84KTsgX19weXhfdF84ID0gMDsKKysgICAgX19weXhfdl9zZWxmID0gdmFsdWVzWzBd OworKyAgICBfX3B5eF92X2UgPSB2YWx1ZXNbMV07CisgICB9CistICBfX1B5eF9ERUNSRUYoX19w eXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0gIF9fcHl4X3ZfdXNlcmRhdGEgPSBfX3B5eF90XzE7 CistICBfX3B5eF90XzEgPSAwOworKyAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdf ZG9uZTsKKysgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKysgIF9fUHl4X1JhaXNlQXJndHVw bGVJbnZhbGlkKCJfX2luaXRfXyIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cykpOyBfX1BZWF9FUlIoMCwgMzI5LCBfX3B5eF9MM19lcnJvcikKKysgIF9fcHl4X0wzX2Vycm9y OjsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Lk1QVkVycm9yLl9f aW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Cisr ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBOVUxMOworKyAgX19w eXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl84TVBWRXJyb3JfX19pbml0X18oX19weXhfc2VsZiwgX19weXhf dl9zZWxmLCBfX3B5eF92X2UpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMwNworLSAqICAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5fZGF0YShldmVudCkKKy0gKiAg ICAgICAgIHVzZXJkYXRhID0gX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5 X3VzZXJkYXRhLCBOb25lKQorLSAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmUgYW5k IHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCistICogICAgICAg ICAgICAgaWYgbm90IHVzZXJkYXRhLm9ic2VydmVkIGFuZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6 CistICovCistICBfX3B5eF90XzEwID0gKF9fcHl4X3ZfdXNlcmRhdGEgIT0gUHlfTm9uZSk7Cist ICBfX3B5eF90XzExID0gKF9fcHl4X3RfMTAgIT0gMCk7CistICBpZiAoX19weXhfdF8xMSkgewor LSAgfSBlbHNlIHsKKy0gICAgX19weXhfdF85ID0gX19weXhfdF8xMTsKKy0gICAgZ290byBfX3B5 eF9MNF9ib29sX2Jpbm9wX2RvbmU7CistICB9CistICBfX3B5eF90XzExID0gKChfX3B5eF92X3Nl bGYtPmlkICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0UpICE9IDApOworLSAgX19weXhfdF85 ID0gX19weXhfdF8xMTsKKy0gIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7CistICBpZiAoX19w eXhfdF85KSB7CisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzA4CistICogICAgICAgICB1c2VyZGF0YSA9IF9y ZXBseV91c2VyZGF0YXNbY3R4aWRdLmdldChldmVudC5yZXBseV91c2VyZGF0YSwgTm9uZSkKKy0g KiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lIGFuZCBzZWxmLmlkICE9IE1QVl9FVkVO VF9QUk9QRVJUWV9DSEFOR0U6CistICogICAgICAgICAgICAgdXNlcmRhdGEucmVtb3ZlKCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGlmIG5vdCB1c2VyZGF0 YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOgorLSAqICAgICAgICAgICAgICAg ICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF1bZXZlbnQucmVwbHlfdXNlcmRhdGFdCistICov CistICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2Vy ZGF0YSwgX19weXhfbl9zX3JlbW92ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhf RVJSKDAsIDMwOCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUp OworLSAgICBfX3B5eF90XzggPSBOVUxMOworLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RT ICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzUpKSkgeworLSAgICAgIF9fcHl4X3Rf OCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNSk7CistICAgICAgaWYgKGxpa2VseShfX3B5 eF90XzgpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVO Q1RJT04oX19weXhfdF81KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzgpOworLSAg ICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQo X19weXhfdF81LCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4X3RfMSA9 IChfX3B5eF90XzgpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzUsIF9fcHl4 X3RfOCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF81KTsKKy0gICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3Rf NSA9IDA7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl9f X2luaXRfXyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9lKSB7CisrICBjaGFyIGNvbnN0ICpfX3B5eF92 X2Vycl9jOworKyAgaW50IF9fcHl4X3ZfZV9pOworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxM OworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIGludCBfX3B5eF90XzE7CisrICBp bnQgX19weXhfdF8yOworKyAgaW50IF9fcHl4X3RfMzsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQg PSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19w eXhfdF82ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxMOworKyAgaW50IF9f cHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Cisr ICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19pbml0X18iLCAwKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF92X2UpOworIAorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzA5CistICogICAgICAgICBpZiB1c2VyZGF0 YSBpcyBub3QgTm9uZSBhbmQgc2VsZi5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgor LSAqICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCistICogICAgICAgICAgICAgaWYgbm90 IHVzZXJkYXRhLm9ic2VydmVkIGFuZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0 YXNbY3R4aWRdW2V2ZW50LnJlcGx5X3VzZXJkYXRhXQorLSAqICAgICAgICAgaWYgdXNlcmRhdGEg aXMgbm90IE5vbmU6CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMwCisr ICogCisrICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKToKKysgKiAgICAgICAgIHNlbGYuY29k ZSA9IGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBjb25z dCBjaGFyKiBlcnJfYworKyAqICAgICAgICAgY2RlZiBpbnQgZV9pCisgICovCistICAgIF9fcHl4 X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YSwgX19weXhf bl9zX29ic2VydmVkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA5 LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9f cHl4X3RfMTEgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfMTEgPCAwKSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCistICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICBfX3B5eF90XzEw ID0gKCghX19weXhfdF8xMSkgIT0gMCk7CistICAgIGlmIChfX3B5eF90XzEwKSB7CistICAgIH0g ZWxzZSB7CistICAgICAgX19weXhfdF85ID0gX19weXhfdF8xMDsKKy0gICAgICBnb3RvIF9fcHl4 X0w3X2Jvb2xfYmlub3BfZG9uZTsKKy0gICAgfQorLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19jb3VudGVyKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA5LCBfX3B5eF9MMV9lcnJvcikK Ky0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4X3RfNSA9IFB5T2JqZWN0 X1JpY2hDb21wYXJlKF9fcHl4X3RfMSwgX19weXhfaW50XzAsIFB5X0xFKTsgX19QeXhfWEdPVFJF RihfX3B5eF90XzUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMDks IF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKKy0gICAgX19weXhfdF8xMCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzUp OyBpZiAodW5saWtlbHkoX19weXhfdF8xMCA8IDApKSBfX1BZWF9FUlIoMCwgMzA5LCBfX3B5eF9M MV9lcnJvcikKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Cist ICAgIF9fcHl4X3RfOSA9IF9fcHl4X3RfMTA7CistICAgIF9fcHl4X0w3X2Jvb2xfYmlub3BfZG9u ZTo7CistICAgIGlmIChfX3B5eF90XzkpIHsKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRy U3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NvZGUsIF9fcHl4X3ZfZSkgPCAwKSBfX1BZWF9F UlIoMCwgMzMwLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzEwCistICogICAgICAgICAgICAgdXNlcmRhdGEucmVtb3ZlKCkKKy0g KiAgICAgICAgICAgICBpZiBub3QgdXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50 ZXIgPD0gMDoKKy0gKiAgICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRd W2V2ZW50LnJlcGx5X3VzZXJkYXRhXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgICAgICB1c2VyZGF0 YSA9IHVzZXJkYXRhLmRhdGEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz MzMKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogZXJyX2MKKysgKiAgICAgICAgIGNkZWYg aW50IGVfaQorKyAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZSwgYmFzZXN0cmluZyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBlX2kgPSBlCisrICog ICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gICAgICBfX3B5eF90XzUgPSBfX1B5eF9H ZXRJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19yZXBseV91c2VyZGF0YXMs IF9fcHl4X3ZfY3R4aWQsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAw LCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMzEwLCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKy0gICAgICBpZiAo dW5saWtlbHkoX19QeXhfRGVsSXRlbUludChfX3B5eF90XzUsIF9fcHl4X3ZfZXZlbnQtPnJlcGx5 X3VzZXJkYXRhLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwg MSkgPCAwKSkgX19QWVhfRVJSKDAsIDMxMCwgX19weXhfTDFfZXJyb3IpCistICAgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICBfX3B5eF90XzEgPSBfX1B5eF9Q eUJhc2VTdHJpbmdfQ2hlY2soX19weXhfdl9lKTsgCisrICBfX3B5eF90XzIgPSAoKCEoX19weXhf dF8xICE9IDApKSAhPSAwKTsKKysgIGlmIChfX3B5eF90XzIpIHsKKyAKKy0gICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzA5CistICogICAgICAgICBpZiB1c2VyZGF0YSBp cyBub3QgTm9uZSBhbmQgc2VsZi5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgorLSAq ICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCistICogICAgICAgICAgICAgaWYgbm90IHVz ZXJkYXRhLm9ic2VydmVkIGFuZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNb Y3R4aWRdW2V2ZW50LnJlcGx5X3VzZXJkYXRhXQorLSAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMg bm90IE5vbmU6CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzQKKysg KiAgICAgICAgIGNkZWYgaW50IGVfaQorKyAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZSwg YmFzZXN0cmluZyk6CisrICogICAgICAgICAgICAgZV9pID0gZSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICAg ICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkKKyAgKi8KKy0gICAgfQorKyAgICBfX3B5 eF90XzMgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdl9lKTsgaWYgKHVubGlrZWx5KChfX3B5 eF90XzMgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAzMzQs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF92X2VfaSA9IF9fcHl4X3RfMzsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNworLSAqICAgICAgICAgc2VsZi5k YXRhID0gc2VsZi5fZGF0YShldmVudCkKKy0gKiAgICAgICAgIHVzZXJkYXRhID0gX3JlcGx5X3Vz ZXJkYXRhc1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5X3VzZXJkYXRhLCBOb25lKQorLSAqICAgICAg ICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BF UlRZX0NIQU5HRTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg IHVzZXJkYXRhLnJlbW92ZSgpCistICogICAgICAgICAgICAgaWYgbm90IHVzZXJkYXRhLm9ic2Vy dmVkIGFuZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozMzUKKysgKiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUsIGJhc2Vz dHJpbmcpOgorKyAqICAgICAgICAgICAgIGVfaSA9IGUKKysgKiAgICAgICAgICAgICB3aXRoIG5v Z2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgIGVy cl9jID0gbXB2X2Vycm9yX3N0cmluZyhlX2kpCisrICogICAgICAgICAgICAgZSA9IF9zdHJkZWMo ZXJyX2MpCisgICovCistICB9CisrICAgIHsKKysgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAor KyAgICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CisrICAgICAgICBQeV9VTkJMT0NLX1RIUkVB RFMKKysgICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKysgICAgICAgICNlbmRpZgor KyAgICAgICAgLyp0cnk6Ki8geworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMxMQorLSAqICAgICAgICAgICAgIGlmIG5vdCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNl cmRhdGEuY291bnRlciA8PSAwOgorLSAqICAgICAgICAgICAgICAgICBkZWwgX3JlcGx5X3VzZXJk YXRhc1tjdHhpZF1bZXZlbnQucmVwbHlfdXNlcmRhdGFdCistICogICAgICAgICBpZiB1c2VyZGF0 YSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ICAgIHVzZXJkYXRhID0gdXNlcmRhdGEuZGF0YQorLSAqICAgICAgICAgc2VsZi5yZXBseV91c2Vy ZGF0YSA9IHVzZXJkYXRhCisrICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMzYKKysgKiAgICAgICAgICAgICBlX2kgPSBlCisrICogICAgICAgICAgICAgd2l0aCBu b2dpbDoKKysgKiAgICAgICAgICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGUgPSBfc3RyZGVj KGVycl9jKQorKyAqICAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIGUpCisgICovCist ICBfX3B5eF90XzkgPSAoX19weXhfdl91c2VyZGF0YSAhPSBQeV9Ob25lKTsKKy0gIF9fcHl4X3Rf MTAgPSAoX19weXhfdF85ICE9IDApOworLSAgaWYgKF9fcHl4X3RfMTApIHsKKysgICAgICAgICAg X19weXhfdl9lcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmcoX19weXhfdl9lX2kpOworKyAgICAgICAg fQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzEyCistICogICAg ICAgICAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBseV91c2Vy ZGF0YV0KKy0gKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lOgorLSAqICAgICAgICAg ICAgIHVzZXJkYXRhID0gdXNlcmRhdGEuZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gdXNlcmRhdGEKKy0gKiAgICAgICAg IHNlbGYuZXJyb3IgPSBldmVudC5lcnJvcgorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjMzNQorKyAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZSwgYmFzZXN0 cmluZyk6CisrICogICAgICAgICAgICAgZV9pID0gZQorKyAqICAgICAgICAgICAgIHdpdGggbm9n aWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgZXJy X2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkKKysgKiAgICAgICAgICAgICBlID0gX3N0cmRlYyhl cnJfYykKKyAgKi8KKy0gICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92X3VzZXJkYXRhLCBfX3B5eF9uX3NfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF81 KSkgX19QWVhfRVJSKDAsIDMxMiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzUpOworLSAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4 X3RfNSk7CistICAgIF9fcHl4X3RfNSA9IDA7CisrICAgICAgICAvKmZpbmFsbHk6Ki8geworKyAg ICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVB RAorKyAgICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CisrICAgICAgICAgICAgUHlf QkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICAgIGdvdG8gX19w eXhfTDY7CisrICAgICAgICAgIH0KKysgICAgICAgICAgX19weXhfTDY6OworKyAgICAgICAgfQor KyAgICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTEKKy0g KiAgICAgICAgICAgICBpZiBub3QgdXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50 ZXIgPD0gMDoKKy0gKiAgICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRd W2V2ZW50LnJlcGx5X3VzZXJkYXRhXQorLSAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5v bmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICB1c2VyZGF0 YSA9IHVzZXJkYXRhLmRhdGEKKy0gKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSB1c2Vy ZGF0YQorLSAqLworLSAgfQorLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjMxMworLSAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmU6CistICogICAgICAgICAg ICAgdXNlcmRhdGEgPSB1c2VyZGF0YS5kYXRhCistICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJk YXRhID0gdXNlcmRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg c2VsZi5lcnJvciA9IGV2ZW50LmVycm9yCistICogICAgICAgICByZXR1cm4gc2VsZgorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzM3CisrICogICAgICAgICAgICAgd2l0 aCBub2dpbDoKKysgKiAgICAgICAgICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVf aSkKKysgKiAgICAgICAgICAgICBlID0gX3N0cmRlYyhlcnJfYykgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIGUpCisrICog CisgICovCistICBfX1B5eF9JTkNSRUYoX19weXhfdl91c2VyZGF0YSk7CistICBfX1B5eF9HSVZF UkVGKF9fcHl4X3ZfdXNlcmRhdGEpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+cmVw bHlfdXNlcmRhdGEpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRh dGEpOworLSAgX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSA9IF9fcHl4X3ZfdXNlcmRhdGE7 CisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF81LCBfX3B5eF9uX3Nfc3Ry ZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMzM3LCBfX3B5eF9M MV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CisrICAgIF9fcHl4X3RfNiA9 IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X2Vycl9jKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMzM3LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNik7CisrICAgIF9fcHl4X3RfNyA9IE5VTEw7CisrICAgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkp IHsKKysgICAgICBfX3B5eF90XzcgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzUpOworKyAg ICAgIGlmIChsaWtlbHkoX19weXhfdF83KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9u ID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNSk7CisrICAgICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF83KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAg ICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNSwgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAg fQorKyAgICBfX3B5eF90XzQgPSAoX19weXhfdF83KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJn cyhfX3B5eF90XzUsIF9fcHl4X3RfNywgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxP bmVBcmcoX19weXhfdF81LCBfX3B5eF90XzYpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Nyk7IF9fcHl4X3RfNyA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzMzcs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRl9T RVQoX19weXhfdl9lLCBfX3B5eF90XzQpOworKyAgICBfX3B5eF90XzQgPSAwOworIAorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxNAorLSAqICAgICAgICAgICAgIHVzZXJk YXRhID0gdXNlcmRhdGEuZGF0YQorLSAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IHVz ZXJkYXRhCistICogICAgICAgICBzZWxmLmVycm9yID0gZXZlbnQuZXJyb3IgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIHNlbGYKKy0gKiAKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzMworKyAqICAgICAgICAgY2RlZiBjb25z dCBjaGFyKiBlcnJfYworKyAqICAgICAgICAgY2RlZiBpbnQgZV9pCisrICogICAgICAgICBpZiBu b3QgaXNpbnN0YW5jZShlLCBiYXNlc3RyaW5nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgICAgIGVfaSA9IGUKKysgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgor ICAqLworLSAgX19weXhfdF83ID0gX19weXhfdl9ldmVudC0+ZXJyb3I7CistICBfX3B5eF92X3Nl bGYtPmVycm9yID0gX19weXhfdF83OworKyAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjMxNQorLSAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IHVzZXJk YXRhCistICogICAgICAgICBzZWxmLmVycm9yID0gZXZlbnQuZXJyb3IKKy0gKiAgICAgICAgIHJl dHVybiBzZWxmICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzgKKysgKiAgICAgICAgICAgICAgICAgZXJyX2Mg PSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkKKysgKiAgICAgICAgICAgICBlID0gX3N0cmRlYyhlcnJf YykKKysgKiAgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBlKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisgICogCisrICogY2xhc3MgUHlNUFZFcnJvcihFeGNlcHRpb24pOgor ICAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4X0lOQ1JFRigoKFB5T2Jq ZWN0ICopX19weXhfdl9zZWxmKSk7CistICBfX3B5eF9yID0gKChQeU9iamVjdCAqKV9fcHl4X3Zf c2VsZik7CistICBnb3RvIF9fcHl4X0wwOworKyAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3Rf R2V0QXR0clN0cigoKFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0aW9u KVswXSkpLCBfX3B5eF9uX3NfaW5pdCk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhf RVJSKDAsIDMzOCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsK KysgIF9fcHl4X3RfNiA9IE5VTEw7CisrICBfX3B5eF90XzMgPSAwOworKyAgaWYgKENZVEhPTl9V TlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkpIHsKKysg ICAgX19weXhfdF82ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF81KTsKKysgICAgaWYgKGxp a2VseShfX3B5eF90XzYpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2Rf R0VUX0ZVTkNUSU9OKF9fcHl4X3RfNSk7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNik7 CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VU KF9fcHl4X3RfNSwgZnVuY3Rpb24pOworKyAgICAgIF9fcHl4X3RfMyA9IDE7CisrICAgIH0KKysg IH0KKysgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKysgIGlmIChQeUZ1bmN0aW9uX0NoZWNrKF9f cHl4X3RfNSkpIHsKKysgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF82LCBf X3B5eF92X3NlbGYsIF9fcHl4X3ZfZX07CisrICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5RnVuY3Rp b25fRmFzdENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAyK19fcHl4X3Rf Myk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICB9IGVsc2UKKysgICNlbmRpZgorKyAgI2lm IENZVEhPTl9GQVNUX1BZQ0NBTEwKKysgIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2so X19weXhfdF81KSkgeworKyAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzYs IF9fcHl4X3Zfc2VsZiwgX19weXhfdl9lfTsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlDRnVu Y3Rpb25fRmFzdENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAyK19fcHl4 X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhf TDFfZXJyb3IpCisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsK KysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICB9IGVsc2UKKysgICNlbmRpZgorKyAg eworKyAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfMyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgICBpZiAoX19weXhfdF82KSB7CisrICAgICAgX19Q eXhfR0lWRVJFRihfX3B5eF90XzYpOyBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMCwgX19w eXhfdF82KTsgX19weXhfdF82ID0gTlVMTDsKKysgICAgfQorKyAgICBfX1B5eF9JTkNSRUYoX19w eXhfdl9zZWxmKTsKKysgICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYpOworKyAgICBQeVR1 cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMCtfX3B5eF90XzMsIF9fcHl4X3Zfc2VsZik7CisrICAg IF9fUHl4X0lOQ1JFRihfX3B5eF92X2UpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3ZfZSk7 CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfMywgX19weXhfdl9l KTsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzUsIF9fcHl4 X3RfNywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOCwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgIH0KKysgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7 IF9fcHl4X3RfNCA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzAyCistICogICAgICAgICByZXR1cm4gX3N0cmRlYyhuYW1lX2MpCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzI5CisrICogICAgIGNvZGUgPSBOb25lCisgICogCistICog ICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50KiBldmVudCwgY3R4KTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50 NjRfdD5pZChjdHgpCistICogICAgICAgICBzZWxmLmlkID0gZXZlbnQuZXZlbnRfaWQKKysgKiAg ICAgZGVmIF9faW5pdF9fKHNlbGYsIGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICBzZWxmLmNvZGUgPSBlCisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVy cl9jCisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3IgPSBQ eV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOworICAgX19w eXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzQpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzYpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOworLSAgX19Q eXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQuX2luaXQiLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAwOwor KyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuTVBWRXJyb3IuX19pbml0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworICAgX19weXhfTDA6 OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X3VzZXJkYXRhKTsKKysgIF9fUHl4X1hERUNSRUYo X19weXhfdl9lKTsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1OAorLSAqIGNkZWYgY2xhc3MgRXZlbnQob2JqZWN0 KToKKy0gKiAgICAgIiIiV3JhcHM6IG1wdl9ldmVudCIiIgorLSAqICAgICBjZGVmIHB1YmxpYyBt cHZfZXZlbnRfaWQgaWQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBjZGVm IHB1YmxpYyBpbnQgZXJyb3IKKy0gKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IGRhdGEsIHJlcGx5 X3VzZXJkYXRhCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NworKyAqIAor KyAqIGNsYXNzIF9SZXBseVVzZXJEYXRhKG9iamVjdCk6CisrICogICAgIGRlZiBfX2luaXRfXyhz ZWxmLCBkYXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2Vs Zi5jb3VudGVyID0gMAorKyAqICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorICAqLworIAorIC8q IFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsg Lypwcm90byovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50XzJpZF8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Cisrc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0 YV8xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQ eU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLworK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5 eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzFfX2luaXRfXyA9 IHsiX19pbml0X18iLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3Jk cylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV8xX19pbml0 X18sIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfTsKKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzFfX2luaXRfXyhQ eU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5 eF9rd2RzKSB7CisrICBQeU9iamVjdCAqX19weXhfdl9zZWxmID0gMDsKKysgIFB5T2JqZWN0ICpf X3B5eF92X2RhdGEgPSAwOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFy ICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBQ eU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBwZXIpIiwgMCk7CistICBf X3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yaWRfX19nZXRf XygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhf dl9zZWxmKSk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18gKHdyYXBw ZXIpIiwgMCk7CisrICB7CisrICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNb XSA9IHsmX19weXhfbl9zX3NlbGYsJl9fcHl4X25fc19kYXRhLDB9OworKyAgICBQeU9iamVjdCog dmFsdWVzWzJdID0gezAsMH07CisrICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworKyAg ICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKysgICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdz ID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKysgICAgICBzd2l0Y2ggKHBvc19hcmdz KSB7CisrICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4 X2FyZ3MsIDEpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAg MTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKysgICAgICAg IENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDA6IGJyZWFrOworKyAgICAgICAg ZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgICB9CisrICAgICAg a3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworKyAgICAgIHN3aXRjaCAocG9zX2Fy Z3MpIHsKKysgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0g PSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nfc2VsZikpICE9 IDApKSBrd19hcmdzLS07CisrICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJy b3I7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAxOgorKyAg ICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19w eXhfa3dkcywgX19weXhfbl9zX2RhdGEpKSAhPSAwKSkga3dfYXJncy0tOworKyAgICAgICAgZWxz ZSB7CisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDEs IDIsIDIsIDEpOyBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgIH0K KysgICAgICB9CisrICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworKyAgICAgICAg aWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5 eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAiX19pbml0X18iKSA8IDApKSBfX1BZ WF9FUlIoMCwgMzQ3LCBfX3B5eF9MM19lcnJvcikKKysgICAgICB9CisrICAgIH0gZWxzZSBpZiAo UHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7CisrICAgICAgZ290byBfX3B5eF9M NV9hcmd0dXBsZV9lcnJvcjsKKysgICAgfSBlbHNlIHsKKysgICAgICB2YWx1ZXNbMF0gPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworKyAgICAgIHZhbHVlc1sxXSA9IFB5VHVwbGVf R0VUX0lURU0oX19weXhfYXJncywgMSk7CisrICAgIH0KKysgICAgX19weXhfdl9zZWxmID0gdmFs dWVzWzBdOworKyAgICBfX3B5eF92X2RhdGEgPSB2YWx1ZXNbMV07CisrICB9CisrICBnb3RvIF9f cHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworKyAgX19weXhfTDVfYXJndHVwbGVfZXJy b3I6OworKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMSwgMiwgMiwg UHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCAzNDcsIF9fcHl4X0wz X2Vycm9yKQorKyAgX19weXhfTDNfZXJyb3I6OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuX1JlcGx5VXNlckRhdGEuX19pbml0X18iLCBfX3B5eF9jbGluZW5vLCBf X3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOworKyAgcmV0dXJuIE5VTEw7CisrICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdf ZG9uZTo7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1Jl cGx5VXNlckRhdGFfX19pbml0X18oX19weXhfc2VsZiwgX19weXhfdl9zZWxmLCBfX3B5eF92X2Rh dGEpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMmlkX19fZ2V0X18oc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikg eworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1Jl cGx5VXNlckRhdGFfX19pbml0X18oQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSkgeworICAgUHlP YmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0g IFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisg ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworLSAg X19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21f ZW51bV9fbXB2X2V2ZW50X2lkKF9fcHl4X3Zfc2VsZi0+aWQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAyNTgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7CistICBfX3B5eF9yID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsK Ky0gIGdvdG8gX19weXhfTDA7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9f cHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0Fk ZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkV2ZW50LmlkLl9fZ2V0X18iLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxM OworLSAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysgIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyIsIDApOworIAorLS8qIFB5dGhvbiB3cmFw cGVyICovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 XzJpZF8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92 YWx1ZSk7IC8qcHJvdG8qLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF8yaWRfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfdmFsdWUpIHsKKy0gIGludCBfX3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fICh3cmFwcGVy KSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZl bnRfMmlkXzJfX3NldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RXZlbnQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1ZSkpOworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0OAorKyAqIGNsYXNzIF9SZXBseVVz ZXJEYXRhKG9iamVjdCk6CisrICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKKysgKiAg ICAgICAgIHNlbGYuY291bnRlciA9IDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorKyAqICAgICAgICAgc2VsZi5vYnNlcnZlZCA9IEZh bHNlCisrICovCisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYs IF9fcHl4X25fc19jb3VudGVyLCBfX3B5eF9pbnRfMCkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ4LCBf X3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhf UmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ5CisrICogICAgIGRlZiBfX2luaXRfXyhz ZWxmLCBkYXRhKToKKysgKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKysgKiAgICAgICAgIHNl bGYuZGF0YSA9IGRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg c2VsZi5vYnNlcnZlZCA9IEZhbHNlCisrICogCisrICovCisrICBpZiAoX19QeXhfUHlPYmplY3Rf U2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19kYXRhLCBfX3B5eF92X2RhdGEpIDwg MCkgX19QWVhfRVJSKDAsIDM0OSwgX19weXhfTDFfZXJyb3IpCisgCistc3RhdGljIGludCBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8yX19zZXRfXyhzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdl9zZWxmLCBQeU9iamVj dCAqX19weXhfdl92YWx1ZSkgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucworLSAgZW51bSBtcHZfZXZlbnRfaWQgX19weXhfdF8xOworLSAgaW50IF9fcHl4 X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBp bnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19z ZXRfXyIsIDApOworLSAgX19weXhfdF8xID0gKChlbnVtIG1wdl9ldmVudF9pZClfX1B5eF9QeUlu dF9Bc19lbnVtX19tcHZfZXZlbnRfaWQoX19weXhfdl92YWx1ZSkpOyBpZiAodW5saWtlbHkoUHlF cnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAyNTgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19w eXhfdl9zZWxmLT5pZCA9IF9fcHl4X3RfMTsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNTAKKysgKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKysgKiAgICAgICAgIHNl bGYuZGF0YSA9IGRhdGEKKysgKiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBGYWxzZSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiBhZGQoc2VsZik6CisrICov CisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25f c19vYnNlcnZlZCwgUHlfRmFsc2UpIDwgMCkgX19QWVhfRVJSKDAsIDM1MCwgX19weXhfTDFfZXJy b3IpCisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ3CisrICogCisr ICogY2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KToKKysgKiAgICAgZGVmIF9faW5pdF9fKHNl bGYsIGRhdGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxm LmNvdW50ZXIgPSAwCisrICogICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisrICovCisgCisgICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSAwOworKyAgX19weXhfciA9IFB5 X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKyAgIGdvdG8gX19weXhfTDA7CisgICBfX3B5 eF9MMV9lcnJvcjo7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5F dmVudC5pZC5fX3NldF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7CistICBfX3B5eF9yID0gLTE7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRl ci5saWJzLm1wdi5fUmVwbHlVc2VyRGF0YS5fX2luaXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9M MDo7CisrICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoyNTkKKy0gKiAgICAgIiIiV3JhcHM6IG1wdl9ldmVudCIiIgorLSAq ICAgICBjZGVmIHB1YmxpYyBtcHZfZXZlbnRfaWQgaWQKKy0gKiAgICAgY2RlZiBwdWJsaWMgaW50 IGVycm9yICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgY2RlZiBwdWJsaWMg b2JqZWN0IGRhdGEsIHJlcGx5X3VzZXJkYXRhCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjM1MgorKyAqICAgICAgICAgc2VsZi5vYnNlcnZlZCA9IEZhbHNlCisrICogCisrICog ICAgIGRlZiBhZGQoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgIHNlbGYuY291bnRlciArPSAxCisgICogCisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIg Ki8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZl bnRfNWVycm9yXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVy cm9yXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzNhZGQoUHlP YmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKytz dGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVw bHlVc2VyRGF0YV8zYWRkID0geyJhZGQiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfM2FkZCwgTUVUSF9PLCAwfTsKKytzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRh XzNhZGQoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKyAg IFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKKy0g IF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzVlcnJvcl9f X2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilf X3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJhZGQgKHdyYXBw ZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0 X1JlcGx5VXNlckRhdGFfMmFkZChfX3B5eF9zZWxmLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxm KSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF81ZXJyb3JfX19nZXRfXyhz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdl9zZWxm KSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRf UmVwbHlVc2VyRGF0YV8yYWRkKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAg IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVM TDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9 IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhf Y2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDAp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50 X0Zyb21faW50KF9fcHl4X3Zfc2VsZi0+ZXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAyNTksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoImFkZCIsIDApOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjM1MworKyAqIAorKyAqICAgICBkZWYgYWRkKHNlbGYpOgorKyAqICAgICAgICAgc2VsZi5j b3VudGVyICs9IDEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAqICAgICBk ZWYgcmVtb3ZlKHNlbGYpOgorKyAqLworKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jb3VudGVyKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzUzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworLSAgX19weXhfciA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9 IDA7CistICBnb3RvIF9fcHl4X0wwOworKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfQWRkT2Jq QyhfX3B5eF90XzEsIF9fcHl4X2ludF8xLCAxLCAxLCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgMzUzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Cisr ICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19j b3VudGVyLCBfX3B5eF90XzIpIDwgMCkgX19QWVhfRVJSKDAsIDM1MywgX19weXhfTDFfZXJyb3Ip CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTIKKysgKiAgICAgICAgIHNlbGYub2JzZXJ2 ZWQgPSBGYWxzZQorKyAqIAorKyAqICAgICBkZWYgYWRkKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMQorKyAqIAorKyAqLwor IAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9yID0gUHlfTm9uZTsgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworKyAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wxX2Vycm9y OjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2LkV2ZW50LmVycm9yLl9fZ2V0X18iLCBfX3B5eF9jbGluZW5vLCBf X3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8y KTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9SZXBseVVzZXJE YXRhLmFkZCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwor ICAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5 eF9yKTsKK0BAIC03MzI4LDExODEgKzc5MzEsMTI1MyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVycm9yX19fZ2V0X18oc3RydWN0IF9f cAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNTUKKysgKiAgICAgICAgIHNlbGYuY291bnRlciArPSAxCisrICogCisrICogICAg IGRlZiByZW1vdmUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgIHNlbGYuY291bnRlciAtPSAxCisrICogCisrICovCisrCisgLyogUHl0aG9uIHdyYXBwZXIg Ki8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVy cm9yXzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Zh bHVlKTsgLypwcm90byovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50XzVlcnJvcl8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVj dCAqX19weXhfdl92YWx1ZSkgeworLSAgaW50IF9fcHl4X3I7Cisrc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV81cmVtb3ZlKFB5 T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCisr c3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1Jl cGx5VXNlckRhdGFfNXJlbW92ZSA9IHsicmVtb3ZlIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzVyZW1vdmUsIE1FVEhfTywgMH07 Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVw bHlVc2VyRGF0YV81cmVtb3ZlKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhf dl9zZWxmKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18gKHdyYXBw ZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF81ZXJyb3JfMl9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVlKSk7 CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgicmVtb3ZlICh3cmFwcGVyKSIsIDApOwor KyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJE YXRhXzRyZW1vdmUoX19weXhfc2VsZiwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOworIAor ICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRl eHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgaW50IF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVycm9yXzJfX3NldF9fKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X3ZhbHVlKSB7CistICBpbnQgX19weXhfcjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzRyZW1vdmUoQ1lUSE9O X1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewor KyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlv bnMKKy0gIGludCBfX3B5eF90XzE7CisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysg IFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisg ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOworLSAg X19weXhfdF8xID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtl bHkoKF9fcHl4X3RfMSA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJS KDAsIDI1OSwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF92X3NlbGYtPmVycm9yID0gX19weXhf dF8xOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJlbW92ZSIsIDApOworKworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NgorKyAqIAorKyAqICAgICBkZWYg cmVtb3ZlKHNlbGYpOgorKyAqICAgICAgICAgc2VsZi5jb3VudGVyIC09IDEgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAqIAorKyAqLworKyAgX19weXhfdF8xID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jb3VudGVyKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzU2LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRf U3VidHJhY3RPYmpDKF9fcHl4X3RfMSwgX19weXhfaW50XzEsIDEsIDEsIDApOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzNTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwg X19weXhfbl9zX2NvdW50ZXIsIF9fcHl4X3RfMikgPCAwKSBfX1BZWF9FUlIoMCwgMzU2LCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor KworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NQorKyAqICAgICAgICAg c2VsZi5jb3VudGVyICs9IDEKKysgKiAKKysgKiAgICAgZGVmIHJlbW92ZShzZWxmKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5jb3VudGVyIC09IDEKKysg KiAKKysgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IDA7 CisrICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworICAgZ290byBf X3B5eF9MMDsKKyAgIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2LkV2ZW50LmVycm9yLl9fc2V0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAtMTsKKysgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9SZXBseVVzZXJEYXRhLnJlbW92ZSIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhf ciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CisrICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAg IF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQor IAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNjAKKy0gKiAgICAgY2RlZiBw dWJsaWMgbXB2X2V2ZW50X2lkIGlkCistICogICAgIGNkZWYgcHVibGljIGludCBlcnJvcgorLSAq ICAgICBjZGVmIHB1YmxpYyBvYmplY3QgZGF0YSwgcmVwbHlfdXNlcmRhdGEgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNzAK KyAgKiAKKyAgKiAgICAgQHByb3BlcnR5CisrICogICAgIGRlZiBhcGlfdmVyc2lvbihzZWxmKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmV0dXJuIF9DQVBJX01J Tk9SLCBfQ0FQSV9NQUpPUiwgX0NBUElfVkVSU0lPTgorKyAqIAorICAqLworIAorIC8qIFB5dGhv biB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50XzRkYXRhXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnBy b3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 RXZlbnRfNGRhdGFfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExYXBpX3Zl cnNpb25fMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworK3N0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExYXBp X3ZlcnNpb25fMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworICAgUHlPYmplY3Qg Kl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9 IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfX19nZXRfXygoKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxm KSk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzExYXBpX3ZlcnNpb25fX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50XzRkYXRhX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExYXBpX3ZlcnNpb25fX19nZXRfXyhD WVRIT05fVU5VU0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKl9fcHl4X3Zfc2VsZikgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwor KyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8zID0g TlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAgaW50IF9fcHl4X2xpbmVu byA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIs IDApOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3MQorKyAqICAg ICBAcHJvcGVydHkKKysgKiAgICAgZGVmIGFwaV92ZXJzaW9uKHNlbGYpOgorKyAqICAgICAgICAg cmV0dXJuIF9DQVBJX01JTk9SLCBfQ0FQSV9NQUpPUiwgX0NBUElfVkVSU0lPTiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIEBwcm9wZXJ0eQorKyAqLworICAgX19Q eXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPmRhdGEp OworLSAgX19weXhfciA9IF9fcHl4X3Zfc2VsZi0+ZGF0YTsKKysgIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDM3MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8y LCBfX3B5eF9uX3NfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDAsIDM3MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK KysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZyhfX3B5eF92Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fQ0FQSV9WRVJTSU9OKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMCwgMzcxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOworKyAgX19weXhfdF80ID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSgh X19weXhfdF80KSkgX19QWVhfRVJSKDAsIDM3MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9H T1RSRUYoX19weXhfdF80KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKysgIFB5VHVw bGVfU0VUX0lURU0oX19weXhfdF80LCAwLCBfX3B5eF90XzEpOworKyAgX19QeXhfR0lWRVJFRihf X3B5eF90XzIpOworKyAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQsIDEsIF9fcHl4X3RfMik7 CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMyk7CisrICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfNCwgMiwgX19weXhfdF8zKTsKKysgIF9fcHl4X3RfMSA9IDA7CisrICBfX3B5eF90XzIgPSAw OworKyAgX19weXhfdF8zID0gMDsKKysgIF9fcHl4X3IgPSBfX3B5eF90XzQ7CisrICBfX3B5eF90 XzQgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozNzAKKysgKiAKKysgKiAgICAgQHByb3BlcnR5CisrICogICAgIGRlZiBhcGlf dmVyc2lvbihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg cmV0dXJuIF9DQVBJX01JTk9SLCBfQ0FQSV9NQUpPUiwgX0NBUElfVkVSU0lPTgorKyAqIAorKyAq LworKworICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7Cisr ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7 CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf NCk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmFw aV92ZXJzaW9uLl9fZ2V0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2Zp bGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworICAgX19weXhfTDA6OworICAgX19QeXhfWEdJ VkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJl dHVybiBfX3B5eF9yOworIH0KKyAKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 Mzc0CisrICogCisrICogICAgIEBwcm9wZXJ0eQorKyAqICAgICBkZWYgbmFtZShzZWxmKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIiVW5pcXVlIG5hbWUgZm9y IGV2ZXJ5IGNvbnRleHQgY3JlYXRlZC4KKysgKiAKKysgKi8KKysKKyAvKiBQeXRob24gd3JhcHBl ciAqLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80 ZGF0YV8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92 YWx1ZSk7IC8qcHJvdG8qLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF80ZGF0YV8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVj dCAqX19weXhfdl92YWx1ZSkgeworLSAgaW50IF9fcHl4X3I7Cisrc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNG5hbWVfMV9fZ2V0X18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRuYW1lXzFfX2dldF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRf XyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50XzRkYXRhXzJfX3NldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92 YWx1ZSkpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBwZXIp IiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzRuYW1lX19fZ2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7 CisgfQorIAorLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF80ZGF0YV8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworLSAgaW50IF9f cHl4X3I7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfNG5hbWVfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKysgIGNoYXIgY29uc3QgKl9fcHl4X3ZfbmFt ZTsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFy YXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOworLSAg X19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWUpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X3Zh bHVlKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmRhdGEpOworLSAgX19QeXhfREVD UkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CistICBfX3B5eF92X3NlbGYtPmRhdGEgPSBfX3B5eF92 X3ZhbHVlOworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gMDsK Ky0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7Cist fQorLQorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfNGRhdGFfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgaW50 IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fZGVsX18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80ZGF0YV80X19kZWxfXygoKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxmKSk7 CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAgUHlPYmplY3QgKl9fcHl4X3Rf MSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKysgIFB5T2JqZWN0ICpf X3B5eF90XzMgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CisrICBpbnQg X19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsK KysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJfX2dldF9fIiwgMCk7CisgCistc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50XzRkYXRhXzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYpIHsKKy0gIGludCBfX3B5eF9yOworLSAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X2RlbF9fIiwgMCk7CistICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBfX1B5eF9HSVZFUkVG KFB5X05vbmUpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CistICBfX1B5 eF9ERUNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKy0gIF9fcHl4X3Zfc2VsZi0+ZGF0YSA9IFB5 X05vbmU7CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzgwCisrICogICAg ICAgICAiIiIKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZQorKyAqICAgICAgICAg YXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIG5hbWUgPSBtcHZfY2xpZW50X25hbWUoc2Vs Zi5fY3R4KQorKyAqLworKyAgI2lmbmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05TCisrICBp ZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKysgICAgaWYgKHVubGlrZWx5KCEoX19w eXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworKyAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNz ZXJ0aW9uRXJyb3IpOworKyAgICAgIF9fUFlYX0VSUigwLCAzODAsIF9fcHl4X0wxX2Vycm9yKQor KyAgICB9CisrICB9CisrICAjZW5kaWYKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor LSAgX19weXhfciA9IDA7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJl dHVybiBfX3B5eF9yOworLX0KKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz ODEKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZQorKyAqICAgICAgICAgYXNzZXJ0 IHNlbGYuX2N0eAorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgICAgIG5hbWUgPSBtcHZfY2xpZW50X25hbWUoc2VsZi5fY3R4 KQorKyAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobmFtZSkKKysgKi8KKysgIHsKKysgICAgICAj aWZkZWYgV0lUSF9USFJFQUQKKysgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICBQ eV9VTkJMT0NLX1RIUkVBRFMKKysgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CisrICAg ICAgI2VuZGlmCisrICAgICAgLyp0cnk6Ki8geworIAorLS8qIFB5dGhvbiB3cmFwcGVyICovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0 cmVwbHlfdXNlcmRhdGFfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8q LworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF8xNHJlcGx5X3VzZXJkYXRhXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKy0g IFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKKy0g IF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVwbHlf dXNlcmRhdGFfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50ICopX19weXhfdl9zZWxmKSk7CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MzgyCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICogICAgICAg ICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIG5hbWUgPSBtcHZfY2xpZW50X25hbWUoc2Vs Zi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4g X3N0cmRlYyhuYW1lKQorKyAqIAorKyAqLworKyAgICAgICAgX19weXhfdl9uYW1lID0gbXB2X2Ns aWVudF9uYW1lKF9fcHl4X3Zfc2VsZi0+X2N0eCk7CisrICAgICAgfQorIAorLSAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJl dHVybiBfX3B5eF9yOworLX0KKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzgxCisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIG5hbWUKKysgKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBuYW1lID0gbXB2X2NsaWVudF9uYW1lKHNlbGYu X2N0eCkKKysgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKG5hbWUpCisrICovCisrICAgICAgLypm aW5hbGx5OiovIHsKKysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CisrICAgICAgICAgICNpZmRl ZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAg ICAgICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICBnb3Rv IF9fcHl4X0w1OworKyAgICAgICAgfQorKyAgICAgICAgX19weXhfTDU6OworKyAgICAgIH0KKysg IH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 RXZlbnRfMTRyZXBseV91c2VyZGF0YV9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9y ID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM4MworKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBu YW1lID0gbXB2X2NsaWVudF9uYW1lKHNlbGYuX2N0eCkKKysgKiAgICAgICAgIHJldHVybiBfc3Ry ZGVjKG5hbWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgQHBy b3BlcnR5CisrICovCisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19QeXhfSU5DUkVG KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworLSAgX19weXhfciA9IF9fcHl4X3Zfc2Vs Zi0+cmVwbHlfdXNlcmRhdGE7CisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf MiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDM4MywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysg IF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X25hbWUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAzODMsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICBfX3B5eF90XzQgPSBOVUxMOworKyAgaWYg KENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90 XzIpKSkgeworKyAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwor KyAgICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24g PSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYo X19weXhfdF80KTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4 X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgIH0KKysgIH0KKysgIF9fcHl4 X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwg X19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90 XzIsIF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9 IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDM4MywgX19weXhfTDFfZXJyb3IpCisr ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworKyAgX19weXhfciA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7 CisgICBnb3RvIF9fcHl4X0wwOworIAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjM3NAorKyAqIAorKyAqICAgICBAcHJvcGVydHkKKysgKiAgICAgZGVmIG5hbWUoc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIlVuaXF1ZSBuYW1l IGZvciBldmVyeSBjb250ZXh0IGNyZWF0ZWQuCisrICogCisrICovCisrCisgICAvKiBmdW5jdGlv biBleGl0IGNvZGUgKi8KKysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19w eXhfdF8xKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYo X19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKysgIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQubmFtZS5fX2dldF9fIiwgX19weXhf Y2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVM TDsKKyAgIF9fcHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhf UmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyog UHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9z ZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qcHJvdG8qLworLXN0YXRpYyBpbnQgX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzNfX3Nl dF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7Cist ICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3Ig PSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVwbHlfdXNlcmRhdGFf Ml9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAq KV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVlKSk7CistCistICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwor LSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzJfX3NldF9fKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X3ZhbHVlKSB7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55RGVj bGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOwor LSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWUpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF92 X3ZhbHVlKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKKy0gIF9fcHl4 X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBfX3B5eF92X3ZhbHVlOworLQorLSAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLS8qIFB5dGhvbiB3cmFwcGVy ICovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0 cmVwbHlfdXNlcmRhdGFfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8q LworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJl cGx5X3VzZXJkYXRhXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKy0gIGludCBf X3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX2RlbF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV80X19kZWxf XygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhf dl9zZWxmKSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBp bnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRh XzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpf X3B5eF92X3NlbGYpIHsKKy0gIGludCBfX3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJh dGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fIiwgMCk7CistICBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOworLSAgX19Q eXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworLSAgX19QeXhfREVDUkVG KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworLSAgX19weXhfdl9zZWxmLT5yZXBseV91 c2VyZGF0YSA9IFB5X05vbmU7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9f cHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4g X19weXhfcjsKKy19CistCistLyogIih0cmVlIGZyYWdtZW50KSI6MQorLSAqIGRlZiBfX3JlZHVj ZV9jeXRob25fXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBj ZGVmIHR1cGxlIHN0YXRlCistICogICAgIGNkZWYgb2JqZWN0IF9kaWN0CisrLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjM4NgorKyAqIAorKyAqICAgICBAcHJvcGVydHkKKysgKiAg ICAgZGVmIHRpbWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgICIiIkludGVybmFsIG1wdiBjbGllbnQgdGltZS4KKysgKiAKKyAgKi8KKyAKKyAvKiBQeXRo b24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzVFdmVudF8xX19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwg Q1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCistc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzFfX3JlZHVjZV9jeXRo b25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVz ZWQpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF80dGltZV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byov Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNHRpbWVfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworICAgUHlPYmplY3Qg Kl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKy0g IF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19fcmVkdWNl X2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQg KilfX3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9f ICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF80dGltZV9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVy biBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl81RXZlbnRfX19yZWR1Y2VfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9f cHl4X3Zfc3RhdGUgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX2RpY3QgPSAwOworLSAgaW50 IF9fcHl4X3ZfdXNlX3NldHN0YXRlOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1lX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKSB7CisrICBpbnQ2NF90 IF9fcHl4X3ZfdGltZTsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIFB5 T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7 CistICBpbnQgX19weXhfdF80OworLSAgaW50IF9fcHl4X3RfNTsKKy0gIGludCBfX3B5eF90XzY7 CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1l ID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjUKKy0g KiAgICAgY2RlZiBvYmplY3QgX2RpY3QKKy0gKiAgICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQor LSAqICAgICBzdGF0ZSA9IChzZWxmLmRhdGEsIHNlbGYuZXJyb3IsIHNlbGYuaWQsIHNlbGYucmVw bHlfdXNlcmRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX2RpY3Qg PSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCistICogICAgIGlmIF9kaWN0IGlzIG5v dCBOb25lOgorLSAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhf dl9zZWxmLT5lcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDUs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX3B5eF90 XzIgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChfX3B5eF92X3NlbGYtPmlk KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IFB5VHVwbGVf TmV3KDQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgX19QeXhfSU5DUkVGKF9f cHl4X3Zfc2VsZi0+ZGF0YSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7 CistICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMCwgX19weXhfdl9zZWxmLT5kYXRhKTsK Ky0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF8zLCAxLCBfX3B5eF90XzEpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzIpOworLSAgUHlU dXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDIsIF9fcHl4X3RfMik7CistICBfX1B5eF9JTkNSRUYo X19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zf c2VsZi0+cmVwbHlfdXNlcmRhdGEpOworLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDMs IF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworLSAgX19weXhfdF8xID0gMDsKKy0gIF9f cHl4X3RfMiA9IDA7CistICBfX3B5eF92X3N0YXRlID0gKChQeU9iamVjdCopX19weXhfdF8zKTsK Ky0gIF9fcHl4X3RfMyA9IDA7CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2CistICogICAg IGNkZWYgYmludCB1c2Vfc2V0c3RhdGUKKy0gKiAgICAgc3RhdGUgPSAoc2VsZi5kYXRhLCBzZWxm LmVycm9yLCBzZWxmLmlkLCBzZWxmLnJlcGx5X3VzZXJkYXRhKQorLSAqICAgICBfZGljdCA9IGdl dGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgIHN0YXRlICs9IChf ZGljdCwpCistICovCistICBfX3B5eF90XzMgPSBfX1B5eF9HZXRBdHRyMygoKFB5T2JqZWN0ICop X19weXhfdl9zZWxmKSwgX19weXhfbl9zX2RpY3QsIFB5X05vbmUpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJF RihfX3B5eF90XzMpOworLSAgX19weXhfdl9fZGljdCA9IF9fcHl4X3RfMzsKKy0gIF9fcHl4X3Rf MyA9IDA7CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3CistICogICAgIHN0YXRlID0gKHNl bGYuZGF0YSwgc2VsZi5lcnJvciwgc2VsZi5pZCwgc2VsZi5yZXBseV91c2VyZGF0YSkKKy0gKiAg ICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCistICogICAgIGlmIF9k aWN0IGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICBzdGF0ZSArPSAoX2RpY3QsKQorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorLSAq LworLSAgX19weXhfdF80ID0gKF9fcHl4X3ZfX2RpY3QgIT0gUHlfTm9uZSk7CistICBfX3B5eF90 XzUgPSAoX19weXhfdF80ICE9IDApOworLSAgaWYgKF9fcHl4X3RfNSkgeworLQorLSAgICAvKiAi KHRyZWUgZnJhZ21lbnQpIjo4CistICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0 X18nLCBOb25lKQorLSAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgIHN0 YXRlICs9IChfZGljdCwpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg IHVzZV9zZXRzdGF0ZSA9IFRydWUKKy0gKiAgICAgZWxzZToKKy0gKi8KKy0gICAgX19weXhfdF8z ID0gUHlUdXBsZV9OZXcoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEs IDgsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAg X19QeXhfSU5DUkVGKF9fcHl4X3ZfX2RpY3QpOworLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zf X2RpY3QpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMCwgX19weXhfdl9fZGlj dCk7CistICAgIF9fcHl4X3RfMiA9IFB5TnVtYmVyX0luUGxhY2VBZGQoX19weXhfdl9zdGF0ZSwg X19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgOCwgX19w eXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAgX19QeXhfREVDUkVGX1NFVChf X3B5eF92X3N0YXRlLCAoKFB5T2JqZWN0KilfX3B5eF90XzIpKTsKKy0gICAgX19weXhfdF8yID0g MDsKKy0KKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6OQorLSAqICAgICBpZiBfZGljdCBpcyBu b3QgTm9uZToKKy0gKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpCistICogICAgICAgICB1c2Vf c2V0c3RhdGUgPSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgZWxz ZToKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9uZSBvciBz ZWxmLnJlcGx5X3VzZXJkYXRhIGlzIG5vdCBOb25lCistICovCistICAgIF9fcHl4X3ZfdXNlX3Nl dHN0YXRlID0gMTsKKy0KKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6NworLSAqICAgICBzdGF0 ZSA9IChzZWxmLmRhdGEsIHNlbGYuZXJyb3IsIHNlbGYuaWQsIHNlbGYucmVwbHlfdXNlcmRhdGEp CistICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKQorLSAqICAg ICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRy dWUKKy0gKi8KKy0gICAgZ290byBfX3B5eF9MMzsKKy0gIH0KKy0KKy0gIC8qICIodHJlZSBmcmFn bWVudCkiOjExCistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCistICogICAgIGVsc2U6 CistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBzZWxmLmRhdGEgaXMgbm90IE5vbmUgb3Igc2Vs Zi5yZXBseV91c2VyZGF0YSBpcyBub3QgTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgIGlmIHVzZV9zZXRzdGF0ZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBp Y2tsZV9FdmVudCwgKHR5cGUoc2VsZiksIDB4ZGEzOGMyNSwgTm9uZSksIHN0YXRlCisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk0CisrICogICAgICAgICAiIiIKKysgKiAg ICAgICAgIGNkZWYgaW50NjRfdCB0aW1lCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICog ICAgICAgICAgICAgdGltZSA9IG1wdl9nZXRfdGltZV91cyhzZWxmLl9jdHgpCisgICovCistICAv KmVsc2UqLyB7CistICAgIF9fcHl4X3RfNCA9IChfX3B5eF92X3NlbGYtPmRhdGEgIT0gUHlfTm9u ZSk7CistICAgIF9fcHl4X3RfNiA9IChfX3B5eF90XzQgIT0gMCk7CistICAgIGlmICghX19weXhf dF82KSB7CistICAgIH0gZWxzZSB7CistICAgICAgX19weXhfdF81ID0gX19weXhfdF82OworLSAg ICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworKyAgI2lmbmRlZiBDWVRIT05fV0lU SE9VVF9BU1NFUlRJT05TCisrICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKysg ICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworKyAgICAgIFB5 RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworKyAgICAgIF9fUFlYX0VSUigwLCAz OTQsIF9fcHl4X0wxX2Vycm9yKQorICAgICB9CistICAgIF9fcHl4X3RfNiA9IChfX3B5eF92X3Nl bGYtPnJlcGx5X3VzZXJkYXRhICE9IFB5X05vbmUpOworLSAgICBfX3B5eF90XzQgPSAoX19weXhf dF82ICE9IDApOworLSAgICBfX3B5eF90XzUgPSBfX3B5eF90XzQ7CistICAgIF9fcHl4X0w0X2Jv b2xfYmlub3BfZG9uZTo7CistICAgIF9fcHl4X3ZfdXNlX3NldHN0YXRlID0gX19weXhfdF81Owor ICAgfQorLSAgX19weXhfTDM6OworKyAgI2VuZGlmCisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQp IjoxMgorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5kYXRh IGlzIG5vdCBOb25lIG9yIHNlbGYucmVwbHlfdXNlcmRhdGEgaXMgbm90IE5vbmUKKy0gKiAgICAg aWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0eXBlKHNlbGYpLCAweGRhMzhjMjUsIE5v bmUpLCBzdGF0ZQorLSAqICAgICBlbHNlOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjM5NQorKyAqICAgICAgICAgY2RlZiBpbnQ2NF90IHRpbWUKKysgKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICB0aW1lID0gbXB2X2dldF90aW1lX3VzKHNlbGYu X2N0eCkKKysgKiAgICAgICAgIHJldHVybiB0aW1lCisgICovCistICBfX3B5eF90XzUgPSAoX19w eXhfdl91c2Vfc2V0c3RhdGUgIT0gMCk7CistICBpZiAoX19weXhfdF81KSB7CisrICB7CisrICAg ICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CisrICAg ICAgUHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwor KyAgICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgLyogIih0cmVlIGZyYWdt ZW50KSI6MTMKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9u ZSBvciBzZWxmLnJlcGx5X3VzZXJkYXRhIGlzIG5vdCBOb25lCistICogICAgIGlmIHVzZV9zZXRz dGF0ZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9FdmVudCwgKHR5cGUoc2Vs ZiksIDB4ZGEzOGMyNSwgTm9uZSksIHN0YXRlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9FdmVudCwg KHR5cGUoc2VsZiksIDB4ZGEzOGMyNSwgc3RhdGUpCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Mzk2CisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICog ICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIHRpbWUgPSBtcHZfZ2V0X3RpbWVf dXMoc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBy ZXR1cm4gdGltZQorKyAqIAorICAqLworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAg ICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3B5eF91bnBp Y2tsZV9FdmVudCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDEzLCBf X3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4 X3RfMyA9IFB5VHVwbGVfTmV3KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigxLCAxMywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwor LSAgICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZikpKSk7CistICAgIF9fUHl4X0dJVkVSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQ eU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF8zLCAwLCAoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkp KTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4X2ludF8yMjg4MjIwNTMpOworLSAgICBfX1B5eF9H SVZFUkVGKF9fcHl4X2ludF8yMjg4MjIwNTMpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfMywgMSwgX19weXhfaW50XzIyODgyMjA1Myk7CistICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25l KTsKKy0gICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShf X3B5eF90XzMsIDIsIFB5X05vbmUpOworLSAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygzKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9y KQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5 eF90XzIpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMCwgX19weXhfdF8yKTsK Ky0gICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzMpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfMSwgMSwgX19weXhfdF8zKTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc3RhdGUp OworLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc3RhdGUpOworLSAgICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfMSwgMiwgX19weXhfdl9zdGF0ZSk7CistICAgIF9fcHl4X3RfMiA9IDA7Cist ICAgIF9fcHl4X3RfMyA9IDA7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CistICAgIF9fcHl4 X3RfMSA9IDA7CistICAgIGdvdG8gX19weXhfTDA7CisrICAgICAgICBfX3B5eF92X3RpbWUgPSBt cHZfZ2V0X3RpbWVfdXMoX19weXhfdl9zZWxmLT5fY3R4KTsKKysgICAgICB9CisgCistICAgIC8q ICIodHJlZSBmcmFnbWVudCkiOjEyCistICogICAgIGVsc2U6CistICogICAgICAgICB1c2Vfc2V0 c3RhdGUgPSBzZWxmLmRhdGEgaXMgbm90IE5vbmUgb3Igc2VsZi5yZXBseV91c2VyZGF0YSBpcyBu b3QgTm9uZQorLSAqICAgICBpZiB1c2Vfc2V0c3RhdGU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9FdmVudCwgKHR5cGUoc2Vs ZiksIDB4ZGEzOGMyNSwgTm9uZSksIHN0YXRlCistICogICAgIGVsc2U6CisrICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM5NQorKyAqICAgICAgICAgY2RlZiBpbnQ2NF90 IHRpbWUKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIHdpdGggbm9n aWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICB0aW1lID0g bXB2X2dldF90aW1lX3VzKHNlbGYuX2N0eCkKKysgKiAgICAgICAgIHJldHVybiB0aW1lCisgICov CisrICAgICAgLypmaW5hbGx5OiovIHsKKysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CisrICAg ICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICBfX1B5eF9GYXN0R0lMX0Zvcmdl dCgpOworKyAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgICNlbmRpZgorKyAg ICAgICAgICBnb3RvIF9fcHl4X0w1OworKyAgICAgICAgfQorKyAgICAgICAgX19weXhfTDU6Owor KyAgICAgIH0KKyAgIH0KKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjE1CistICogICAgICAg ICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0eXBlKHNlbGYpLCAweGRhMzhjMjUsIE5v bmUpLCBzdGF0ZQorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlj a2xlX0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBzdGF0ZSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0 YXRlKToKKy0gKiAgICAgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShzZWxmLCBfX3B5 eF9zdGF0ZSkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozOTcKKysgKiAg ICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgdGltZSA9IG1wdl9nZXRfdGltZV91 cyhzZWxmLl9jdHgpCisrICogICAgICAgICByZXR1cm4gdGltZSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogCisrICogICAgICMgZGVmIHN1c3BlbmQoc2VsZik6CisgICovCistICAv KmVsc2UqLyB7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX0V2ZW50KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9y KQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19weXhfdF8zID0gUHlUdXBs ZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDE1LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0lO Q1JFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsK Ky0gICAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19w eXhfdl9zZWxmKSkpKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDAsICgoUHlP YmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworLSAgICBfX1B5 eF9JTkNSRUYoX19weXhfaW50XzIyODgyMjA1Myk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhf aW50XzIyODgyMjA1Myk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8zLCAxLCBfX3B5 eF9pbnRfMjI4ODIyMDUzKTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc3RhdGUpOworLSAg ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc3RhdGUpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfMywgMiwgX19weXhfdl9zdGF0ZSk7CistICAgIF9fcHl4X3RfMiA9IFB5VHVwbGVfTmV3 KDIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCAxNSwgX19weXhfTDFf ZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9HSVZFUkVG KF9fcHl4X3RfMSk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8yLCAwLCBfX3B5eF90 XzEpOworLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMyk7CistICAgIFB5VHVwbGVfU0VUX0lU RU0oX19weXhfdF8yLCAxLCBfX3B5eF90XzMpOworLSAgICBfX3B5eF90XzEgPSAwOworLSAgICBf X3B5eF90XzMgPSAwOworLSAgICBfX3B5eF9yID0gX19weXhfdF8yOworLSAgICBfX3B5eF90XzIg PSAwOworLSAgICBnb3RvIF9fcHl4X0wwOworLSAgfQorKyAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRfdChfX3B5eF92X3RpbWUp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzOTcsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF9yID0gX19weXhfdF8x OworKyAgX19weXhfdF8xID0gMDsKKysgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgdHVwbGUgc3RhdGUKKy0gKiAgICAgY2Rl ZiBvYmplY3QgX2RpY3QKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODYK KysgKiAKKysgKiAgICAgQHByb3BlcnR5CisrICogICAgIGRlZiB0aW1lKHNlbGYpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJJbnRlcm5hbCBtcHYgY2xpZW50 IHRpbWUuCisrICogCisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9f cHl4X0wxX2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hE RUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkV2ZW50Ll9fcmVkdWNlX2N5dGhvbl9f IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnRpbWUuX19nZXRfXyIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19weXhf ciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfc3RhdGUp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X19kaWN0KTsKKyAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistLyogIih0cmVlIGZyYWdtZW50KSI6MTYKKy0gKiAgICAgZWxzZToKKy0g KiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9FdmVudCwgKHR5cGUoc2VsZiksIDB4ZGEz OGMyNSwgc3RhdGUpCistICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3Rh dGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIF9fcHl4X3VucGlja2xl X0V2ZW50X19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQxMgorKyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYg cmVxdWVzdF9ldmVudChzZWxmLCBldmVudCwgZW5hYmxlKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgIiIiRW5hYmxlIG9yIGRpc2FibGUgYSBnaXZlbiBldmVudC4K KysgKiAKKyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8zX19zZXRzdGF0ZV9jeXRob25f XyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7 IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF8zX19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQ eU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzFyZXF1ZXN0X2V2ZW50KFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dk cyk7IC8qcHJvdG8qLworK3N0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfcmVxdWVzdF9ldmVudFtdID0gIkVuYWJsZSBvciBkaXNhYmxlIGEgZ2l2ZW4g ZXZlbnQuXG5cbiAgICAgICAgQXJndW1lbnRzOlxuICAgICAgICBldmVudCAtIFNlZSBFdmVudHNc biAgICAgICAgZW5hYmxlIC0gVHJ1ZSB0byBlbmFibGUsIEZhbHNlIHRvIGRpc2FibGVcblxuICAg ICAgICBXcmFwczogbXB2X3JlcXVlc3RfZXZlbnRcbiAgICAgICAgIjsKKytzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xcmVxdWVzdF9ldmVu dChQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3Qg Kl9fcHl4X2t3ZHMpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF92X2V2ZW50ID0gMDsKKysgIFB5T2Jq ZWN0ICpfX3B5eF92X2VuYWJsZSA9IDA7CisrICBpbnQgX19weXhfbGluZW5vID0gMDsKKysgIGNv bnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5vID0g MDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyAo d3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50XzJfX3NldHN0YXRlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhf dl9fX3B5eF9zdGF0ZSkpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJlcXVlc3Rf ZXZlbnQgKHdyYXBwZXIpIiwgMCk7CisrICB7CisrICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4 X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX2V2ZW50LCZfX3B5eF9uX3NfZW5hYmxlLDB9Owor KyAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07CisrICAgIGlmICh1bmxpa2VseShfX3B5 eF9rd2RzKSkgeworKyAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKysgICAgICBjb25zdCBQeV9z c2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKysgICAgICBz d2l0Y2ggKHBvc19hcmdzKSB7CisrICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxl X0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwor KyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdz LCAwKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDA6IGJy ZWFrOworKyAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysg ICAgICB9CisrICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworKyAgICAg IHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBpZiAobGlr ZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5 eF9uX3NfZXZlbnQpKSAhPSAwKSkga3dfYXJncy0tOworKyAgICAgICAgZWxzZSBnb3RvIF9fcHl4 X0w1X2FyZ3R1cGxlX2Vycm9yOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAg ICAgY2FzZSAgMToKKysgICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGlj dF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19lbmFibGUpKSAhPSAwKSkga3dfYXJn cy0tOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZh bGlkKCJyZXF1ZXN0X2V2ZW50IiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCA0MTIsIF9fcHl4 X0wzX2Vycm9yKQorKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBpZiAodW5saWtlbHkoa3df YXJncyA+IDApKSB7CisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtl eXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3Ms ICJyZXF1ZXN0X2V2ZW50IikgPCAwKSkgX19QWVhfRVJSKDAsIDQxMiwgX19weXhfTDNfZXJyb3Ip CisrICAgICAgfQorKyAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykg IT0gMikgeworKyAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisrICAgIH0gZWxz ZSB7CisrICAgICAgdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsK KysgICAgICB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAg ICB9CisrICAgIF9fcHl4X3ZfZXZlbnQgPSB2YWx1ZXNbMF07CisrICAgIF9fcHl4X3ZfZW5hYmxl ID0gdmFsdWVzWzFdOworKyAgfQorKyAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdf ZG9uZTsKKysgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKysgIF9fUHl4X1JhaXNlQXJndHVw bGVJbnZhbGlkKCJyZXF1ZXN0X2V2ZW50IiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5 eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA0MTIsIF9fcHl4X0wzX2Vycm9yKQorKyAgX19weXhfTDNf ZXJyb3I6OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4 dC5yZXF1ZXN0X2V2ZW50IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBOVUxM OworKyAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OworKyAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9yZXF1ZXN0X2V2ZW50KCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2Vs ZiksIF9fcHl4X3ZfZXZlbnQsIF9fcHl4X3ZfZW5hYmxlKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4g X19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfNUV2ZW50XzJfX3NldHN0YXRlX2N5dGhvbl9fKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X19fcHl4X3N0YXRlKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfcmVxdWVzdF9ldmVudChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2V2 ZW50LCBQeU9iamVjdCAqX19weXhfdl9lbmFibGUpIHsKKysgIGludCBfX3B5eF92X2VuYWJsZV9p OworKyAgaW50IF9fcHl4X3ZfZXJyOworKyAgZW51bSBtcHZfZXZlbnRfaWQgX19weXhfdl9ldmVu dF9pZDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55RGVj bGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIGludCBfX3B5eF90 XzE7CisrICBpbnQgX19weXhfdF8yOworKyAgZW51bSBtcHZfZXZlbnRfaWQgX19weXhfdF8zOwor KyAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsK KyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGlu ZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhv bl9fIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgicmVxdWVzdF9ldmVudCIs IDApOworIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTcKKy0gKiAgICAgICAgIHJldHVybiBf X3B5eF91bnBpY2tsZV9FdmVudCwgKHR5cGUoc2VsZiksIDB4ZGEzOGMyNSwgc3RhdGUpCistICog ZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5 eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDIxCisrICogICAgICAgICBXcmFwczogbXB2X3JlcXVlc3RfZXZlbnQKKysgKiAgICAgICAgICIi IgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICBjZGVmIGludCBlbmFibGVfaSA9IDEgaWYgZW5hYmxlIGVsc2UgMAor KyAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICovCistICBpZiAoIShsaWtlbHkoUHlUdXBsZV9D aGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5eF92X19fcHl4X3N0YXRlKSA9 PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJFeHBlY3RlZCAlLjE2 cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5X1RZUEUoX19weXhfdl9fX3B5eF9zdGF0ZSktPnRw X25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90 XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9FdmVudF9f c2V0X3N0YXRlKF9fcHl4X3Zfc2VsZiwgKChQeU9iamVjdCopX19weXhfdl9fX3B5eF9zdGF0ZSkp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworKyAgI2lmbmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05T CisrICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKysgICAgaWYgKHVubGlrZWx5 KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworKyAgICAgIFB5RXJyX1NldE5vbmUoUHlF eGNfQXNzZXJ0aW9uRXJyb3IpOworKyAgICAgIF9fUFlYX0VSUigwLCA0MjEsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICB9CisrICB9CisrICAjZW5kaWYKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCki OjE2CistICogICAgIGVsc2U6CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZl bnQsICh0eXBlKHNlbGYpLCAweGRhMzhjMjUsIHN0YXRlKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5 dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRl KQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyMgorKyAqICAgICAgICAg IiIiCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICogICAgICAgICBjZGVmIGludCBl bmFibGVfaSA9IDEgaWYgZW5hYmxlIGVsc2UgMCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICBjZGVmIGludCBlcnIKKysgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lk IGV2ZW50X2lkID0gZXZlbnQKKyAgKi8KKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lz VHJ1ZShfX3B5eF92X2VuYWJsZSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhf RVJSKDAsIDQyMiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19weXhfdF8yKSB7CisrICAgIF9f cHl4X3RfMSA9IDE7CisrICB9IGVsc2UgeworKyAgICBfX3B5eF90XzEgPSAwOworKyAgfQorKyAg X19weXhfdl9lbmFibGVfaSA9IF9fcHl4X3RfMTsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gIGdv dG8gX19weXhfTDA7CistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5FdmVudC5f X3NldHN0YXRlX2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICBy ZXR1cm4gX19weXhfcjsKKy19CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDI0CisrICogICAgICAgICBjZGVmIGludCBlbmFibGVfaSA9IDEgaWYgZW5hYmxlIGVsc2UgMAor KyAqICAgICAgICAgY2RlZiBpbnQgZXJyCisrICogICAgICAgICBjZGVmIG1wdl9ldmVudF9pZCBl dmVudF9pZCA9IGV2ZW50ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgZXJyID0gbXB2X3JlcXVlc3RfZXZlbnQoc2Vs Zi5fY3R4LCBldmVudF9pZCwgZW5hYmxlX2kpCisrICovCisrICBfX3B5eF90XzMgPSAoKGVudW0g bXB2X2V2ZW50X2lkKV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9ldmVudF9pZChfX3B5eF92X2V2 ZW50KSk7IGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQyNCwg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF92X2V2ZW50X2lkID0gX19weXhfdF8zOworIAorLS8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTgKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0MjUKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqICAgICAg ICAgY2RlZiBtcHZfZXZlbnRfaWQgZXZlbnRfaWQgPSBldmVudAorKyAqICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9 IG1wdl9yZXF1ZXN0X2V2ZW50KHNlbGYuX2N0eCwgZXZlbnRfaWQsIGVuYWJsZV9pKQorKyAqICAg ICAgICAgcmV0dXJuIGVycgorKyAqLworKyAgeworKyAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAor KyAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworKyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwor KyAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKysgICAgICAjZW5kaWYKKysgICAgICAv KnRyeToqLyB7CisrCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDI2CisrICogICAgICAgICBjZGVmIG1wdl9ldmVudF9pZCBldmVudF9pZCA9IGV2ZW50CisrICog ICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2V2 ZW50KHNlbGYuX2N0eCwgZXZlbnRfaWQsIGVuYWJsZV9pKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICByZXR1cm4gZXJyCisgICogCisrICovCisrICAgICAgICBfX3B5 eF92X2VyciA9IG1wdl9yZXF1ZXN0X2V2ZW50KF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9l dmVudF9pZCwgX19weXhfdl9lbmFibGVfaSk7CisrICAgICAgfQorKworKyAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjUKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgor KyAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfaWQgZXZlbnRfaWQgPSBldmVudAorKyAqICAgICAg ICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIGVyciA9IG1wdl9yZXF1ZXN0X2V2ZW50KHNlbGYuX2N0eCwgZXZlbnRfaWQsIGVuYWJsZV9p KQorKyAqICAgICAgICAgcmV0dXJuIGVycgorKyAqLworKyAgICAgIC8qZmluYWxseToqLyB7Cisr ICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQK KysgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAgUHlfQkxPQ0tf VEhSRUFEUworKyAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5eF9MNTsKKysg ICAgICAgIH0KKysgICAgICAgIF9fcHl4X0w1OjsKKysgICAgICB9CisrICB9CisrCisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDI3CisrICogICAgICAgICB3aXRoIG5vZ2ls OgorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2V2ZW50KHNlbGYuX2N0eCwgZXZl bnRfaWQsIGVuYWJsZV9pKQorKyAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisgICogCistICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KToKKy0gKiAgICAgICAg IHYgPSBmbigqaywgKiprdykKKysgKiAgICAgQF9lcnJvcnMKKyAgKi8KKysgIF9fUHl4X1hERUNS RUYoX19weXhfcik7CisrICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92 X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDQyNywgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgIF9fcHl4X3IgPSBfX3B5 eF90XzQ7CisrICBfX3B5eF90XzQgPSAwOworKyAgZ290byBfX3B5eF9MMDsKKyAKKy0vKiBQeXRo b24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzVfZXJyb3JzKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9m bik7IC8qcHJvdG8qLworLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl81X2Vycm9ycyA9IHsiX2Vycm9ycyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNV9lcnJvcnMsIE1FVEhfTywgMH07Cistc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNV9lcnJvcnMoUHlPYmplY3QgKl9f cHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2ZuKSB7CistICBQeU9iamVjdCAqX19weXhfciA9 IDA7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9lcnJvcnMgKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzRfZXJyb3JzKF9fcHl4X3NlbGYsICgoUHlPYmplY3QgKilf X3B5eF92X2ZuKSk7CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDEyCisr ICogCisrICogICAgIEBfZXJyb3JzCisrICogICAgIGRlZiByZXF1ZXN0X2V2ZW50KHNlbGYsIGV2 ZW50LCBlbmFibGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAi IiJFbmFibGUgb3IgZGlzYWJsZSBhIGdpdmVuIGV2ZW50LgorKyAqIAorKyAqLworIAorICAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5Db250ZXh0LnJlcXVlc3RfZXZlbnQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworKyAgX19weXhfTDA6OworKyAgX19Q eXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsK KyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MzE5CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzMAorICAqIAor LSAqIGRlZiBfZXJyb3JzKGZuKToKKy0gKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCist ICogICAgICAgICBpZiB2IDwgMDoKKysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIHNldF9s b2dfbGV2ZWwoc2VsZiwgbG9nbGV2ZWwpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICAiIiJXcmFwczogbXB2X3JlcXVlc3RfbG9nX21lc3NhZ2VzIiIiCisrICogICAg ICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X2Vycm9yc18x d3JhcHBlZChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2Jq ZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCistc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21k ZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3JzXzF3cmFwcGVkID0geyJ3cmFwcGVkIiwg KFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3JzXzF3cmFwcGVkLCBNRVRIX1ZBUkFSR1N8TUVUSF9L RVlXT1JEUywgMH07Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN19lcnJvcnNfMXdyYXBwZWQoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgeworLSAgUHlPYmplY3QgKl9fcHl4X3Zf ayA9IDA7CistICBQeU9iamVjdCAqX19weXhfdl9rdyA9IDA7Cisrc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfM3NldF9sb2dfbGV2ZWwoUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfbG9nbGV2ZWwpOyAvKnByb3Rv Ki8KKytzdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzJzZXRfbG9nX2xldmVsW10gPSAiV3JhcHM6IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyI7Cisr c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf M3NldF9sb2dfbGV2ZWwoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zf bG9nbGV2ZWwpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgid3JhcHBlZCAod3Jh cHBlcikiLCAwKTsKKy0gIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSAmJiB1bmxpa2VseSghX19Q eXhfQ2hlY2tLZXl3b3JkU3RyaW5ncyhfX3B5eF9rd2RzLCAid3JhcHBlZCIsIDEpKSkgcmV0dXJu IE5VTEw7CistICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKKy0gICAgX19weXhfdl9rdyA9 IFB5RGljdF9Db3B5KF9fcHl4X2t3ZHMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Zfa3cpKSByZXR1 cm4gTlVMTDsKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Zfa3cpOworLSAgfSBlbHNlIHsKKy0g ICAgX19weXhfdl9rdyA9IE5VTEw7CistICB9CistICBfX1B5eF9JTkNSRUYoX19weXhfYXJncyk7 CistICBfX3B5eF92X2sgPSBfX3B5eF9hcmdzOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83X2Vycm9yc193cmFwcGVkKF9fcHl4X3NlbGYsIF9fcHl4X3Zfaywg X19weXhfdl9rdyk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X2xvZ19sZXZl bCAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMnNldF9sb2dfbGV2ZWwoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4 X3ZfbG9nbGV2ZWwpKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhf WERFQ1JFRihfX3B5eF92X2spOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2t3KTsKKyAgIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAor LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3Jz X3dyYXBwZWQoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2ssIFB5T2Jq ZWN0ICpfX3B5eF92X2t3KSB7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKl9fcHl4X2N1cl9zY29wZTsKKy0gIHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9f X2Vycm9ycyAqX19weXhfb3V0ZXJfc2NvcGU7CistICBQeU9iamVjdCAqX19weXhfdl92ID0gTlVM TDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8yc2V0X2xvZ19sZXZlbChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2xvZ2xldmVsKSB7Cisr ICBjaGFyIGNvbnN0ICpfX3B5eF92X2xvZ2xldmVsX2M7CisrICBpbnQgX19weXhfdl9lcnI7Cisg ICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9u cworICAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CistICBpbnQgX19weXhfdF8yOworKyAg UHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVM TDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAgY2hhciBjb25zdCAqX19weXhf dF80OworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxl bmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgid3JhcHBlZCIsIDApOworLSAgX19weXhfb3V0ZXJfc2NvcGUgPSAoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19f ZXJyb3JzICopIF9fUHl4X0N5RnVuY3Rpb25fR2V0Q2xvc3VyZShfX3B5eF9zZWxmKTsKKy0gIF9f cHl4X2N1cl9zY29wZSA9IF9fcHl4X291dGVyX3Njb3BlOworKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoInNldF9sb2dfbGV2ZWwiLCAwKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF92X2xv Z2xldmVsKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjAKKy0g KiBkZWYgX2Vycm9ycyhmbik6CistICogICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KToKKy0gKiAg ICAgICAgIHYgPSBmbigqaywgKiprdykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgaWYgdiA8IDA6CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IodikKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzIKKysgKiAgICAgZGVmIHNldF9s b2dfbGV2ZWwoc2VsZiwgbG9nbGV2ZWwpOgorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9yZXF1 ZXN0X2xvZ19tZXNzYWdlcyIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBsb2dsZXZlbCA9IF9zdHJlbmMobG9n bGV2ZWwpCisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGxvZ2xldmVsX2MgPSBsb2dsZXZl bAorICAqLworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4pKSB7 IF9fUHl4X1JhaXNlQ2xvc3VyZU5hbWVFcnJvcigiZm4iKTsgX19QWVhfRVJSKDAsIDMyMCwgX19w eXhfTDFfZXJyb3IpIH0KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhf Y3VyX3Njb3BlLT5fX3B5eF92X2ZuLCBfX3B5eF92X2ssIF9fcHl4X3Zfa3cpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMjAsIF9fcHl4X0wxX2Vycm9yKQorKyAgI2lm bmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05TCisrICBpZiAodW5saWtlbHkoIVB5X09wdGlt aXplRmxhZykpIHsKKysgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDAp KSkgeworKyAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworKyAgICAg IF9fUFlYX0VSUigwLCA0MzIsIF9fcHl4X0wxX2Vycm9yKQorKyAgICB9CisrICB9CisrICAjZW5k aWYKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzMKKysgKiAgICAg ICAgICIiIldyYXBzOiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKKysgKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIGxvZ2xldmVsID0gX3N0cmVuYyhsb2dsZXZlbCkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFy KiBsb2dsZXZlbF9jID0gbG9nbGV2ZWwKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqLwor KyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJlbmMp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0MzMsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX3B5eF90XzMgPSBOVUxMOwor KyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzIpKSkgeworKyAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90 XzIpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKKysgICAgICBQeU9iamVjdCogZnVu Y3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF8zKTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAg IF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgIH0KKysgIH0KKysg IF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4 X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X2xvZ2xldmVsKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxP bmVBcmcoX19weXhfdF8yLCBfX3B5eF92X2xvZ2xldmVsKTsKKysgIF9fUHl4X1hERUNSRUYoX19w eXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDQzMywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKy0gIF9fcHl4X3ZfdiA9IF9fcHl4X3RfMTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworKyAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X2xvZ2xldmVsLCBf X3B5eF90XzEpOworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozMjEKKy0gKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgorLSAqICAg ICAgICAgdiA9IGZuKCprLCAqKmt3KQorLSAqICAgICAgICAgaWYgdiA8IDA6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcih2KQorLSAq ICAgICByZXR1cm4gd3JhcHBlZAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQzNAorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAqICAgICAgICAgbG9nbGV2ZWwg PSBfc3RyZW5jKGxvZ2xldmVsKQorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBsb2dsZXZl bF9jID0gbG9nbGV2ZWwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg Y2RlZiBpbnQgZXJyCisrICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgX19weXhfdF8x ID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl92LCBfX3B5eF9pbnRfMCwgUHlfTFQpOyBf X1B5eF9YR09UUkVGKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDMyMSwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVj dF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9F UlIoMCwgMzIxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworLSAgaWYgKHVubGlrZWx5KF9fcHl4X3RfMikpIHsKKysgIF9fcHl4X3Rf NCA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfbG9nbGV2ZWwpOyBpZiAodW5saWtl bHkoKCFfX3B5eF90XzQpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDM0LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3ZfbG9nbGV2ZWxfYyA9IF9fcHl4X3RfNDsKKyAKKy0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMgorLSAqICAgICAgICAgdiA9 IGZuKCprLCAqKmt3KQorLSAqICAgICAgICAgaWYgdiA8IDA6CistICogICAgICAgICAgICAgcmFp c2UgTVBWRXJyb3IodikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICByZXR1 cm4gd3JhcHBlZAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzNgorKyAq ICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBsb2dsZXZlbF9jID0gbG9nbGV2ZWwKKysgKiAgICAg ICAgIGNkZWYgaW50IGVycgorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2xvZ19tZXNz YWdlcyhzZWxmLl9jdHgsIGxvZ2xldmVsX2MpCisrICogICAgICAgICByZXR1cm4gZXJyCisrICov CisrICB7CisrICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlUaHJlYWRTdGF0ZSAq X3NhdmU7CisrICAgICAgUHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19QeXhfRmFzdEdJTF9S ZW1lbWJlcigpOworKyAgICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsKKysKKysgICAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzcKKysgKiAgICAgICAgIGNkZWYg aW50IGVycgorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBlcnIgPSBt cHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMoc2VsZi5fY3R4LCBsb2dsZXZlbF9jKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gZXJyCisgICogCisgICovCist ICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8zLCBfX3B5eF9uX3NfTVBWRXJy b3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAzMjIsIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAgX19weXhfdF80ID0g TlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhv ZF9DaGVjayhfX3B5eF90XzMpKSkgeworLSAgICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9T RUxGKF9fcHl4X3RfMyk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CistICAgICAg ICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8zKTsK Ky0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworLSAgICAgICAgX19QeXhfSU5DUkVG KGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlv bik7CisrICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyhfX3B5 eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfbG9nbGV2ZWxfYyk7CisgICAgICAgfQorLSAgICB9Cist ICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfMywgX19weXhfdF80LCBfX3B5eF92X3YpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZyhfX3B5eF90XzMsIF9fcHl4X3Zfdik7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKy0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgMzIyLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Cist ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICBfX1B5eF9S YWlzZShfX3B5eF90XzEsIDAsIDAsIDApOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKy0gICAgX19QWVhfRVJSKDAsIDMyMiwgX19weXhfTDFfZXJyb3IpCisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjEKKy0gKiAgICAgZGVm IHdyYXBwZWQoKmssICoqa3cpOgorLSAqICAgICAgICAgdiA9IGZuKCprLCAqKmt3KQorLSAqICAg ICAgICAgaWYgdiA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICAgICByYWlzZSBNUFZFcnJvcih2KQorLSAqICAgICByZXR1cm4gd3JhcHBlZAorKyAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzYKKysgKiAgICAgICAgIGNkZWYgY29u c3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsCisrICogICAgICAgICBjZGVmIGludCBlcnIK KysgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMoc2VsZi5fY3R4LCBs b2dsZXZlbF9jKQorKyAqICAgICAgICAgcmV0dXJuIGVycgorICAqLworKyAgICAgIC8qZmluYWxs eToqLyB7CisrICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lU SF9USFJFQUQKKysgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAg UHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5 eF9MNTsKKysgICAgICAgIH0KKysgICAgICAgIF9fcHl4X0w1OjsKKysgICAgICB9CisgICB9Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE5CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDM4CisrICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAq ICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyhzZWxmLl9jdHgsIGxv Z2xldmVsX2MpCisrICogICAgICAgICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKyAgKiAKKy0gKiBkZWYgX2Vycm9ycyhmbik6CistICogICAgIGRlZiB3cmFwcGVkKCpr LCAqKmt3KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgdiA9IGZu KCprLCAqKmt3KQorLSAqICAgICAgICAgaWYgdiA8IDA6CisrICogICAgIEBfZXJyb3JzCisrICov CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRf RnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA0MzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Cisr ICBfX3B5eF9yID0gX19weXhfdF8xOworKyAgX19weXhfdF8xID0gMDsKKysgIGdvdG8gX19weXhf TDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMwCisrICogCisr ICogICAgIEBfZXJyb3JzCisrICogICAgIGRlZiBzZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xldmVs KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIiV3JhcHM6IG1w dl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAor ICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gUHlfTm9u ZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wx X2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X1hERUNSRUYo X19weXhfdF8yKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdF80KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2 Ll9lcnJvcnMud3JhcHBlZCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4 dC5zZXRfbG9nX2xldmVsIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7CisgICBfX3B5eF9yID0gTlVMTDsKKyAgIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdl92KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9sb2dsZXZlbCk7CisgICBf X1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozMTgKKy0gKiAKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQx CisgICogCistICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KToKKy0gKiAgICAgICAgIHYgPSBmbigqaywg KiprdykKKysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIGxvYWRfY29uZmlnKHNlbGYsIGZp bGVuYW1lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIiV3Jh cHM6IG1wdl9sb2FkX2NvbmZpZ19maWxlIiIiCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4 CisgICovCisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfNF9lcnJvcnMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfZm4pIHsKKy0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqX19weXhfY3VyX3Njb3BlOworLSAgUHlPYmpl Y3QgKl9fcHl4X3Zfd3JhcHBlZCA9IDA7CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF81bG9hZF9j b25maWcoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZmlsZW5hbWUp OyAvKnByb3RvKi8KKytzdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzRsb2FkX2NvbmZpZ1tdID0gIldyYXBzOiBtcHZfbG9hZF9jb25maWdfZmlsZSI7 Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNWxvYWRfY29uZmlnKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X2ZpbGVuYW1lKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImxvYWRfY29uZmln ICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF80bG9hZF9jb25maWcoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3Zf ZmlsZW5hbWUpKTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisrCisrc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNGxvYWRf Y29uZmlnKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZmlsZW5hbWUpIHsKKysgIGNoYXIgY29uc3Qg Kl9fcHl4X3ZfX2ZpbGVuYW1lOworKyAgaW50IF9fcHl4X3ZfZXJyOworICAgUHlPYmplY3QgKl9f cHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0 ICpfX3B5eF90XzEgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQ eU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKysgIGNoYXIgY29uc3QgKl9fcHl4X3RfNDsKKyAg IGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9lcnJvcnMiLCAwKTsKKy0gIF9fcHl4X2N1cl9zY29wZSA9IChzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKilf X3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vy cm9ycyhfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0 X19fZXJyb3JzLCBfX3B5eF9lbXB0eV90dXBsZSwgTlVMTCk7CistICBpZiAodW5saWtlbHkoIV9f cHl4X2N1cl9zY29wZSkpIHsKKy0gICAgX19weXhfY3VyX3Njb3BlID0gKChzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKilQ eV9Ob25lKTsKKy0gICAgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgICBfX1BZWF9FUlIoMCwg MzE4LCBfX3B5eF9MMV9lcnJvcikKKy0gIH0gZWxzZSB7CistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF9jdXJfc2NvcGUpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImxvYWRfY29uZmln IiwgMCk7CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9maWxlbmFtZSk7CisrCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQzCisrICogICAgIGRlZiBsb2FkX2NvbmZpZyhz ZWxmLCBmaWxlbmFtZSk6CisrICogICAgICAgICAiIiJXcmFwczogbXB2X2xvYWRfY29uZmlnX2Zp bGUiIiIKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgZmlsZW5hbWUgPSBfc3RyZW5jKGZpbGVuYW1lKQorKyAqICAg ICAgICAgY2RlZiBjb25zdCBjaGFyKiBfZmlsZW5hbWUgPSBmaWxlbmFtZQorKyAqLworKyAgI2lm bmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05TCisrICBpZiAodW5saWtlbHkoIVB5X09wdGlt aXplRmxhZykpIHsKKysgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDAp KSkgeworKyAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworKyAgICAg IF9fUFlYX0VSUigwLCA0NDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICB9CisgICB9CistICBfX3B5 eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4gPSBfX3B5eF92X2ZuOworLSAgX19QeXhfSU5DUkVGKF9f cHl4X2N1cl9zY29wZS0+X19weXhfdl9mbik7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X2N1cl9z Y29wZS0+X19weXhfdl9mbik7CisrICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozMTkKKy0gKiAKKy0gKiBkZWYgX2Vycm9ycyhmbik6CistICogICAgIGRl ZiB3cmFwcGVkKCprLCAqKmt3KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgdiA9IGZuKCprLCAqKmt3KQorLSAqICAgICAgICAgaWYgdiA8IDA6CisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQ0CisrICogICAgICAgICAiIiJXcmFwczogbXB2 X2xvYWRfY29uZmlnX2ZpbGUiIiIKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAg ICAgICAgIGZpbGVuYW1lID0gX3N0cmVuYyhmaWxlbmFtZSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBfZmlsZW5hbWUgPSBmaWxlbmFt ZQorKyAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9D eUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN19lcnJvcnNf MXdyYXBwZWQsIDAsIF9fcHl4X25fc19lcnJvcnNfbG9jYWxzX3dyYXBwZWQsICgoUHlPYmplY3Qq KV9fcHl4X2N1cl9zY29wZSksIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2Qs ICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18yKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDMxOSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDQ0NCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKysgIF9fcHl4X3RfMyA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFD S19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAg IF9fcHl4X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CisrICAgIGlmIChsaWtl bHkoX19weXhfdF8zKSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dF VF9GVU5DVElPTihfX3B5eF90XzIpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOwor KyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVGX1NFVChf X3B5eF90XzIsIGZ1bmN0aW9uKTsKKysgICAgfQorKyAgfQorKyAgX19weXhfdF8xID0gKF9fcHl4 X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzMsIF9f cHl4X3ZfZmlsZW5hbWUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9f cHl4X3ZfZmlsZW5hbWUpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMg PSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNDQ0LCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdl93cmFw cGVkID0gX19weXhfdF8xOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9 IDA7CisrICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfZmlsZW5hbWUsIF9fcHl4X3RfMSk7Cisg ICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjMyMworLSAqICAgICAgICAgaWYgdiA8IDA6CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJy b3IodikKKy0gKiAgICAgcmV0dXJuIHdyYXBwZWQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqIAorLSAqIAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0NQor KyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAqICAgICAgICAgZmlsZW5hbWUgPSBfc3Ry ZW5jKGZpbGVuYW1lKQorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBfZmlsZW5hbWUgPSBm aWxlbmFtZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjZGVmIGlu dCBlcnIKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICovCisrICBfX3B5eF90XzQgPSBfX1B5 eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X2ZpbGVuYW1lKTsgaWYgKHVubGlrZWx5KCghX19w eXhfdF80KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ0NSwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF92X19maWxlbmFtZSA9IF9fcHl4X3RfNDsKKysKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDcKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hh ciogX2ZpbGVuYW1lID0gZmlsZW5hbWUKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgICAgIGVyciA9IG1wdl9sb2FkX2NvbmZpZ19maWxlKHNlbGYuX2N0eCwgX2ZpbGVuYW1lKQor KyAqICAgICAgICAgcmV0dXJuIGVycgorKyAqLworKyAgeworKyAgICAgICNpZmRlZiBXSVRIX1RI UkVBRAorKyAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworKyAgICAgIFB5X1VOQkxPQ0tfVEhS RUFEUworKyAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKysgICAgICAjZW5kaWYKKysg ICAgICAvKnRyeToqLyB7CisrCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NDQ4CisrICogICAgICAgICBjZGVmIGludCBlcnIKKysgKiAgICAgICAgIHdpdGggbm9n aWw6CisrICogICAgICAgICAgICAgZXJyID0gbXB2X2xvYWRfY29uZmlnX2ZpbGUoc2VsZi5fY3R4 LCBfZmlsZW5hbWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHJl dHVybiBlcnIKKysgKiAKKysgKi8KKysgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X2xvYWRfY29u ZmlnX2ZpbGUoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X19maWxlbmFtZSk7CisrICAgICAg fQorKworKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDcKKysgKiAg ICAgICAgIGNkZWYgY29uc3QgY2hhciogX2ZpbGVuYW1lID0gZmlsZW5hbWUKKysgKiAgICAgICAg IGNkZWYgaW50IGVycgorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9sb2FkX2NvbmZpZ19maWxlKHNl bGYuX2N0eCwgX2ZpbGVuYW1lKQorKyAqICAgICAgICAgcmV0dXJuIGVycgorKyAqLworKyAgICAg IC8qZmluYWxseToqLyB7CisrICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAj aWZkZWYgV0lUSF9USFJFQUQKKysgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysg ICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAg Z290byBfX3B5eF9MNTsKKysgICAgICAgIH0KKysgICAgICAgIF9fcHl4X0w1OjsKKysgICAgICB9 CisrICB9CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQ5CisrICog ICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9sb2FkX2NvbmZp Z19maWxlKHNlbGYuX2N0eCwgX2ZpbGVuYW1lKQorKyAqICAgICAgICAgcmV0dXJuIGVyciAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiBfZm9ybWF0X2Zvcihz ZWxmLCB2YWx1ZSk6CisgICovCisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19QeXhf SU5DUkVGKF9fcHl4X3Zfd3JhcHBlZCk7CistICBfX3B5eF9yID0gX19weXhfdl93cmFwcGVkOwor KyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0NDksIF9fcHl4X0wxX2Vycm9yKQorKyAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF9yID0gX19weXhfdF8xOworKyAgX19w eXhfdF8xID0gMDsKKyAgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzE4CistICogCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NDQxCisgICogCistICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KToKKy0gKiAgICAgICAgIHYg PSBmbigqaywgKiprdykKKysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIGxvYWRfY29uZmln KHNlbGYsIGZpbGVuYW1lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgIiIiV3JhcHM6IG1wdl9sb2FkX2NvbmZpZ19maWxlIiIiCisrICogICAgICAgICBhc3NlcnQg c2VsZi5fY3R4CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fcHl4 X0wxX2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9lcnJvcnMiLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsK KysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2LkNvbnRleHQubG9hZF9jb25maWciLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKyAgIF9fcHl4X3IgPSBOVUxMOworICAgX19weXhf TDA6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X3dyYXBwZWQpOworLSAgX19QeXhfREVDUkVG KCgoUHlPYmplY3QgKilfX3B5eF9jdXJfc2NvcGUpKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dl9maWxlbmFtZSk7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjkKKy0gKiAgICAgY29kZSA9IE5vbmUKKysvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUxCisrICogICAgICAgICByZXR1cm4gZXJy CisgICogCistICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5jb2RlID0gZQorLSAqICAgICAgICAgY2RlZiBj b25zdCBjaGFyKiBlcnJfYworKyAqICAgICBkZWYgX2Zvcm1hdF9mb3Ioc2VsZiwgdmFsdWUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBpZiBpc2luc3RhbmNlKHZh bHVlLCBiYXNlc3RyaW5nKToKKysgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJ TkcKKyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl8xX19pbml0X18oUHlPYmplY3Qg Kl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7 IC8qcHJvdG8qLworLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl84TVBWRXJyb3JfMV9faW5pdF9fID0geyJfX2luaXRfXyIsIChQeUNGdW5jdGlvbiko dm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl84TVBWRXJyb3JfMV9faW5pdF9fLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgMH07 Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVy cm9yXzFfX2luaXRfXyhQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3Ms IFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CistICBQeU9iamVjdCAqX19weXhfdl9zZWxmID0gMDsK Ky0gIFB5T2JqZWN0ICpfX3B5eF92X2UgPSAwOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cist ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVu byA9IDA7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfN19mb3JtYXRfZm9yKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X3ZhbHVlKTsgLypwcm90byovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfN19mb3JtYXRfZm9yKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9 IDA7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9faW5pdF9fICh3cmFwcGVyKSIsIDApOworLSAgeworLSAgICBzdGF0aWMgUHlP YmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19zZWxmLCZfX3B5eF9uX3Nf ZSwwfTsKKy0gICAgUHlPYmplY3QqIHZhbHVlc1syXSA9IHswLDB9OworLSAgICBpZiAodW5saWtl bHkoX19weXhfa3dkcykpIHsKKy0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAgY29u c3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7Cist ICAgICAgc3dpdGNoIChwb3NfYXJncykgeworLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNl ICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJy b3I7CistICAgICAgfQorLSAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsK Ky0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNlICAwOgorLSAgICAgICAg aWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dk cywgX19weXhfbl9zX3NlbGYpKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSBnb3Rv IF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwor LSAgICAgICAgY2FzZSAgMToKKy0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4 X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19lKSkgIT0gMCkpIGt3X2Fy Z3MtLTsKKy0gICAgICAgIGVsc2UgeworLSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52 YWxpZCgiX19pbml0X18iLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDNf ZXJyb3IpCistICAgICAgICB9CistICAgICAgfQorLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdz ID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29y ZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9f aW5pdF9fIikgPCAwKSkgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDNfZXJyb3IpCistICAgICAg fQorLSAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0gMikgewor LSAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgIH0gZWxzZSB7CistICAg ICAgdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKy0gICAgICB2 YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICB9CistICAg IF9fcHl4X3Zfc2VsZiA9IHZhbHVlc1swXTsKKy0gICAgX19weXhfdl9lID0gdmFsdWVzWzFdOwor LSAgfQorLSAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKy0gIF9fcHl4 X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2lu aXRfXyIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIo MCwgMzI5LCBfX3B5eF9MM19lcnJvcikKKy0gIF9fcHl4X0wzX2Vycm9yOjsKKy0gIF9fUHl4X0Fk ZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Lk1QVkVycm9yLl9faW5pdF9fIiwgX19weXhf Y2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBOVUxMOworLSAgX19weXhfTDRfYXJndW1lbnRf dW5wYWNraW5nX2RvbmU6OworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl84TVBWRXJyb3JfX19pbml0X18oX19weXhfc2VsZiwgX19weXhfdl9zZWxmLCBfX3B5eF92 X2UpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9mb3JtYXRfZm9yICh3cmFwcGVy KSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF82X2Zvcm1hdF9mb3IoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfdmFsdWUpKTsK KyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19faW5pdF9fKENZVEhPTl9V TlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF92X2UpIHsKKy0gIGNoYXIgY29uc3QgKl9fcHl4X3ZfZXJyX2M7CistICBpbnQg X19weXhfdl9lX2k7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfNl9mb3JtYXRfZm9yKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfdl92YWx1ZSkgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIGludCBfX3B5eF90XzE7CisgICBpbnQgX19weXhfdF8y OworLSAgaW50IF9fcHl4X3RfMzsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAg UHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVM TDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3Rf MyA9IE5VTEw7CisrICBpbnQgX19weXhfdF80OworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisg ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18iLCAwKTsKKy0g IF9fUHl4X0lOQ1JFRihfX3B5eF92X2UpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo Il9mb3JtYXRfZm9yIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzMwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUyCisgICogCist ICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKToKKy0gKiAgICAgICAgIHNlbGYuY29kZSA9IGUg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFy KiBlcnJfYworLSAqICAgICAgICAgY2RlZiBpbnQgZV9pCistICovCistICBpZiAoX19QeXhfUHlP YmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jb2RlLCBfX3B5eF92X2Up IDwgMCkgX19QWVhfRVJSKDAsIDMzMCwgX19weXhfTDFfZXJyb3IpCistCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMzCistICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIq IGVycl9jCistICogICAgICAgICBjZGVmIGludCBlX2kKKy0gKiAgICAgICAgIGlmIG5vdCBpc2lu c3RhbmNlKGUsIGJhc2VzdHJpbmcpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICAgICAgZV9pID0gZQorLSAqICAgICAgICAgICAgIHdpdGggbm9naWw6CisrICogICAg IGRlZiBfZm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6CisrICogICAgICAgICBpZiBpc2luc3RhbmNl KHZhbHVlLCBiYXNlc3RyaW5nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX1NUUklORworKyAqICAgICAgICAgZWxpZiBpc2lu c3RhbmNlKHZhbHVlLCBib29sKToKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5QmFzZVN0 cmluZ19DaGVjayhfX3B5eF92X2UpOyAKKy0gIF9fcHl4X3RfMiA9ICgoIShfX3B5eF90XzEgIT0g MCkpICE9IDApOworKyAgX19weXhfdF8xID0gX19QeXhfUHlCYXNlU3RyaW5nX0NoZWNrKF9fcHl4 X3ZfdmFsdWUpOyAKKysgIF9fcHl4X3RfMiA9IChfX3B5eF90XzEgIT0gMCk7CisgICBpZiAoX19w eXhfdF8yKSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzQK Ky0gKiAgICAgICAgIGNkZWYgaW50IGVfaQorLSAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo ZSwgYmFzZXN0cmluZyk6CistICogICAgICAgICAgICAgZV9pID0gZSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAg ICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ1MworKyAqICAgICBkZWYgX2Zvcm1hdF9mb3Ioc2VsZiwgdmFs dWUpOgorKyAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisrICog ICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfU1RSSU5HICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCk6CisrICog ICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRkxBRworICAqLworLSAgICBfX3B5eF90XzMg PSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdl9lKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMg PT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAzMzQsIF9fcHl4 X0wxX2Vycm9yKQorLSAgICBfX3B5eF92X2VfaSA9IF9fcHl4X3RfMzsKKysgICAgX19QeXhfWERF Q1JFRihfX3B5eF9yKTsKKysgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfZm9ybWF0KE1QVl9GT1JNQVRfU1RSSU5HKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBf X1BZWF9FUlIoMCwgNDUzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMyk7CisrICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7CisrICAgIF9fcHl4X3RfMyA9IDA7Cisr ICAgIGdvdG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMzUKKy0gKiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUsIGJhc2VzdHJpbmcpOgor LSAqICAgICAgICAgICAgIGVfaSA9IGUKKy0gKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgIGVycl9jID0gbXB2 X2Vycm9yX3N0cmluZyhlX2kpCistICogICAgICAgICAgICAgZSA9IF9zdHJkZWMoZXJyX2MpCisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTIKKysgKiAKKysgKiAgICAg ZGVmIF9mb3JtYXRfZm9yKHNlbGYsIHZhbHVlKToKKysgKiAgICAgICAgIGlmIGlzaW5zdGFuY2Uo dmFsdWUsIGJhc2VzdHJpbmcpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfU1RSSU5HCisrICogICAgICAgICBlbGlmIGlzaW5z dGFuY2UodmFsdWUsIGJvb2wpOgorICAqLworLSAgICB7CistICAgICAgICAjaWZkZWYgV0lUSF9U SFJFQUQKKy0gICAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAgICAgICAgUHlfVU5CTE9D S19USFJFQURTCistICAgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAgICAgICAj ZW5kaWYKKy0gICAgICAgIC8qdHJ5OiovIHsKKysgIH0KKyAKKy0gICAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzNgorLSAqICAgICAgICAgICAgIGVfaSA9IGUKKy0g KiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgICAgICBlcnJfYyA9IG1w dl9lcnJvcl9zdHJpbmcoZV9pKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICAgICAgZSA9IF9zdHJkZWMoZXJyX2MpCistICogICAgICAgICBFeGNlcHRpb24uX19pbml0 X18oc2VsZiwgZSkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTQKKysg KiAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorKyAqICAgICAgICAg ICAgIHJldHVybiBNUFZfRk9STUFUX1NUUklORworKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNl KHZhbHVlLCBib29sKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIHJldHVybiBNUFZfRk9STUFUX0ZMQUcKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2 YWx1ZSwgaW50KToKKyAgKi8KKy0gICAgICAgICAgX19weXhfdl9lcnJfYyA9IG1wdl9lcnJvcl9z dHJpbmcoX19weXhfdl9lX2kpOworLSAgICAgICAgfQorKyAgX19weXhfdF8zID0gKChQeU9iamVj dCopJlB5Qm9vbF9UeXBlKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOworKyAgX19weXhf dF8yID0gUHlPYmplY3RfSXNJbnN0YW5jZShfX3B5eF92X3ZhbHVlLCBfX3B5eF90XzMpOyBpZiAo dW5saWtlbHkoX19weXhfdF8yID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigwLCA0NTQsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Cisr ICBfX3B5eF90XzEgPSAoX19weXhfdF8yICE9IDApOworKyAgaWYgKF9fcHl4X3RfMSkgeworIAor LSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzNQorLSAqICAgICAg ICAgaWYgbm90IGlzaW5zdGFuY2UoZSwgYmFzZXN0cmluZyk6CistICogICAgICAgICAgICAgZV9p ID0gZQorLSAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkK Ky0gKiAgICAgICAgICAgICBlID0gX3N0cmRlYyhlcnJfYykKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ1NQorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFU X1NUUklORworKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKKysgKiAg ICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9GTEFHICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKKysgKiAgICAg ICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2NAorICAqLworLSAgICAgICAgLypmaW5hbGx5 OiovIHsKKy0gICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAgICAjaWZkZWYg V0lUSF9USFJFQUQKKy0gICAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAgICAg ICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAg ICBnb3RvIF9fcHl4X0w2OworLSAgICAgICAgICB9CistICAgICAgICAgIF9fcHl4X0w2OjsKKy0g ICAgICAgIH0KKy0gICAgfQorKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgICBfX3B5 eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9GTEFH KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDU1LCBfX3B5eF9MMV9l cnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fcHl4X3IgPSBfX3B5 eF90XzM7CisrICAgIF9fcHl4X3RfMyA9IDA7CisrICAgIGdvdG8gX19weXhfTDA7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzcKKy0gKiAgICAgICAgICAgICB3 aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgICAgICBlcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmco ZV9pKQorLSAqICAgICAgICAgICAgIGUgPSBfc3RyZGVjKGVycl9jKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgZSkKKy0g KiAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1NAorKyAqICAgICAg ICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisrICogICAgICAgICAgICAgcmV0 dXJuIE1QVl9GT1JNQVRfU1RSSU5HCisrICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUs IGJvb2wpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmV0 dXJuIE1QVl9GT1JNQVRfRkxBRworKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBp bnQpOgorICAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNSwgX19w eXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMz NywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworLSAgICBf X3B5eF90XzYgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9lcnJfYyk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDMzNywgX19weXhfTDFfZXJyb3IpCist ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgICBfX3B5eF90XzcgPSBOVUxMOworLSAg ICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9f cHl4X3RfNSkpKSB7CistICAgICAgX19weXhfdF83ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhf dF81KTsKKy0gICAgICBpZiAobGlrZWx5KF9fcHl4X3RfNykpIHsKKy0gICAgICAgIFB5T2JqZWN0 KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzUpOworLSAgICAgICAg X19QeXhfSU5DUkVGKF9fcHl4X3RfNyk7CistICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24p OworLSAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzUsIGZ1bmN0aW9uKTsKKy0gICAg ICB9CistICAgIH0KKy0gICAgX19weXhfdF80ID0gKF9fcHl4X3RfNykgPyBfX1B5eF9QeU9iamVj dF9DYWxsMkFyZ3MoX19weXhfdF81LCBfX3B5eF90XzcsIF9fcHl4X3RfNikgOiBfX1B5eF9QeU9i amVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwgX19weXhfdF82KTsKKy0gICAgX19QeXhfWERFQ1JF RihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKKy0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9F UlIoMCwgMzM3LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7 CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworLSAgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3ZfZSwgX19weXhfdF80KTsKKy0gICAgX19weXhfdF80ID0gMDsK KysgIH0KKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzMworLSAq ICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworLSAqICAgICAgICAgY2RlZiBpbnQgZV9p CistICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBiYXNlc3RyaW5nKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGVfaSA9IGUKKy0gKiAgICAgICAg ICAgICB3aXRoIG5vZ2lsOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1 NgorKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKKysgKiAgICAgICAg ICAgICByZXR1cm4gTVBWX0ZPUk1BVF9GTEFHCisrICogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo dmFsdWUsIGludCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2NAorKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZh bHVlLCBmbG9hdCk6CisrICovCisrICBfX3B5eF90XzEgPSBQeUludF9DaGVjayhfX3B5eF92X3Zh bHVlKTsgCisrICBfX3B5eF90XzIgPSAoX19weXhfdF8xICE9IDApOworKyAgaWYgKF9fcHl4X3Rf MikgeworKworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDU3CisrICog ICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRkxBRworKyAqICAgICAgICAgZWxpZiBpc2lu c3RhbmNlKHZhbHVlLCBpbnQpOgorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0lO VDY0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0 YW5jZSh2YWx1ZSwgZmxvYXQpOgorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RP VUJMRQorKyAqLworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgICBfX3B5eF90XzMg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9JTlQ2NCk7IGlm ICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ1NywgX19weXhfTDFfZXJyb3Ip CisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgICBfX3B5eF9yID0gX19weXhfdF8z OworKyAgICBfX3B5eF90XzMgPSAwOworKyAgICBnb3RvIF9fcHl4X0wwOworKworKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDU2CisrICogICAgICAgICBlbGlmIGlzaW5z dGFuY2UodmFsdWUsIGJvb2wpOgorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0ZM QUcKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0lOVDY0 CisrICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKyAgKi8KKyAgIH0K KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzgKKy0gKiAgICAgICAg ICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkKKy0gKiAgICAgICAgICAgICBl ID0gX3N0cmRlYyhlcnJfYykKKy0gKiAgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBl KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogY2xhc3MgUHlNUFZFcnJv cihFeGNlcHRpb24pOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OAor KyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorKyAqICAgICAgICAgICAg IHJldHVybiBNUFZfRk9STUFUX0lOVDY0CisrICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFs dWUsIGZsb2F0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAg IHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQorKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZh bHVlLCAodHVwbGUsIGxpc3QpKToKKysgKi8KKysgIF9fcHl4X3RfMiA9IFB5RmxvYXRfQ2hlY2so X19weXhfdl92YWx1ZSk7IAorKyAgX19weXhfdF8xID0gKF9fcHl4X3RfMiAhPSAwKTsKKysgIGlm IChfX3B5eF90XzEpIHsKKysKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQ1OQorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0lOVDY0CisrICogICAgICAg ICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKysgKiAgICAgICAgICAgICByZXR1cm4g TVBWX0ZPUk1BVF9ET1VCTEUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKToKKysgKiAgICAgICAgICAg ICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZCisrICovCisrICAgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CisrICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zv cm1hdChNUFZfRk9STUFUX0RPVUJMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDAsIDQ1OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMp OworKyAgICBfX3B5eF9yID0gX19weXhfdF8zOworKyAgICBfX3B5eF90XzMgPSAwOworKyAgICBn b3RvIF9fcHl4X0wwOworKworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDU4CisrICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6CisrICogICAgICAg ICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfSU5UNjQKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5j ZSh2YWx1ZSwgZmxvYXQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRE9VQkxFCisrICogICAgICAgICBlbGlmIGlzaW5zdGFu Y2UodmFsdWUsICh0dXBsZSwgbGlzdCkpOgorICAqLworLSAgX19weXhfdF81ID0gX19QeXhfUHlP YmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhj ZXB0aW9uKVswXSkpLCBfX3B5eF9uX3NfaW5pdCk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkg X19QWVhfRVJSKDAsIDMzOCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhf dF81KTsKKy0gIF9fcHl4X3RfNiA9IE5VTEw7CistICBfX3B5eF90XzMgPSAwOworLSAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkp IHsKKy0gICAgX19weXhfdF82ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF81KTsKKy0gICAg aWYgKGxpa2VseShfX3B5eF90XzYpKSB7CistICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNSk7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3RfNik7CistICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3RfNSwgZnVuY3Rpb24pOworLSAgICAgIF9fcHl4X3RfMyA9IDE7CistICAg IH0KKyAgIH0KKy0gICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKy0gIGlmIChQeUZ1bmN0aW9uX0No ZWNrKF9fcHl4X3RfNSkpIHsKKy0gICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhf dF82LCBfX3B5eF92X3NlbGYsIF9fcHl4X3ZfZX07CistICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5 RnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAyK19f cHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOCwgX19w eXhfTDFfZXJyb3IpCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICB9IGVsc2UKKy0gICNlbmRpZgor LSAgI2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwKKy0gIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25f Q2hlY2soX19weXhfdF81KSkgeworLSAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5 eF90XzYsIF9fcHl4X3Zfc2VsZiwgX19weXhfdl9lfTsKKy0gICAgX19weXhfdF80ID0gX19QeXhf UHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAy K19fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOCwg X19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICB9IGVsc2UKKy0gICNlbmRp ZgorLSAgeworLSAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfMyk7IGlmICh1 bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhfTDFfZXJyb3IpCist ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgICBpZiAoX19weXhfdF82KSB7CistICAg ICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzYpOyBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywg MCwgX19weXhfdF82KTsgX19weXhfdF82ID0gTlVMTDsKKy0gICAgfQorLSAgICBfX1B5eF9JTkNS RUYoX19weXhfdl9zZWxmKTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYpOworLSAg ICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMCtfX3B5eF90XzMsIF9fcHl4X3Zfc2VsZik7 CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X2UpOworLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4 X3ZfZSk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfMywgX19w eXhfdl9lKTsKKy0gICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzUs IF9fcHl4X3RfNywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAs IDMzOCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjAKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5j ZSh2YWx1ZSwgZmxvYXQpOgorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJM RQorKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9S TUFUX05PREVfQVJSQVkKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6 CisrICovCisrICBfX3B5eF90XzIgPSBQeVR1cGxlX0NoZWNrKF9fcHl4X3ZfdmFsdWUpOyAKKysg IF9fcHl4X3RfNCA9IChfX3B5eF90XzIgIT0gMCk7CisrICBpZiAoIV9fcHl4X3RfNCkgeworKyAg fSBlbHNlIHsKKysgICAgX19weXhfdF8xID0gX19weXhfdF80OworKyAgICBnb3RvIF9fcHl4X0w0 X2Jvb2xfYmlub3BfZG9uZTsKKyAgIH0KKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5 eF90XzUgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Cisr ICBfX3B5eF90XzQgPSBQeUxpc3RfQ2hlY2soX19weXhfdl92YWx1ZSk7IAorKyAgX19weXhfdF8y ID0gKF9fcHl4X3RfNCAhPSAwKTsKKysgIF9fcHl4X3RfMSA9IF9fcHl4X3RfMjsKKysgIF9fcHl4 X0w0X2Jvb2xfYmlub3BfZG9uZTo7CisrICBfX3B5eF90XzIgPSAoX19weXhfdF8xICE9IDApOwor KyAgaWYgKF9fcHl4X3RfMikgeworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMyOQorLSAqICAgICBjb2RlID0gTm9uZQorLSAqIAorLSAqICAgICBkZWYgX19pbml0X18o c2VsZiwgZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYu Y29kZSA9IGUKKy0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogZXJyX2MKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2MQorKyAqICAgICAgICAgICAgIHJldHVybiBN UFZfRk9STUFUX0RPVUJMRQorKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVw bGUsIGxpc3QpKToKKysgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZ ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5j ZSh2YWx1ZSwgZGljdCk6CisrICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9N QVAKKyAgKi8KKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19weXhfdF8zID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfTk9ERV9BUlJBWSk7 IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ2MSwgX19weXhfTDFfZXJy b3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgICBfX3B5eF9yID0gX19weXhf dF8zOworKyAgICBfX3B5eF90XzMgPSAwOworKyAgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVG KFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKKy0g IF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsK Ky0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Lk1QVkVycm9yLl9faW5p dF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBf X3B5eF9yID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9l KTsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0NjAKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwg ZmxvYXQpOgorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQorKyAqICAg ICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVf QVJSQVkKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisrICovCisr ICB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NworLSAqIAorLSAq IGNsYXNzIF9SZXBseVVzZXJEYXRhKG9iamVjdCk6CistICogICAgIGRlZiBfX2luaXRfXyhzZWxm LCBkYXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5j b3VudGVyID0gMAorLSAqICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjQ2MgorKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZh bHVlLCAodHVwbGUsIGxpc3QpKToKKysgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9O T0RFX0FSUkFZCisrICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JN QVRfTk9ERV9NQVAKKysgKiAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PTkUKKyAgKi8KKysg IF9fcHl4X3RfMiA9IFB5RGljdF9DaGVjayhfX3B5eF92X3ZhbHVlKTsgCisrICBfX3B5eF90XzEg PSAoX19weXhfdF8yICE9IDApOworKyAgaWYgKF9fcHl4X3RfMSkgeworIAorLS8qIFB5dGhvbiB3 cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTRfUmVwbHlVc2VyRGF0YV8xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLworLXN0YXRp YyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVz ZXJEYXRhXzFfX2luaXRfXyA9IHsiX19pbml0X18iLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNG dW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVw bHlVc2VyRGF0YV8xX19pbml0X18sIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfTsKKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVz ZXJEYXRhXzFfX2luaXRfXyhQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2Fy Z3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CistICBQeU9iamVjdCAqX19weXhfdl9zZWxmID0g MDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEgPSAwOworLSAgaW50IF9fcHl4X2xpbmVubyA9 IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhf Y2xpbmVubyA9IDA7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fICh3 cmFwcGVyKSIsIDApOworLSAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25h bWVzW10gPSB7Jl9fcHl4X25fc19zZWxmLCZfX3B5eF9uX3NfZGF0YSwwfTsKKy0gICAgUHlPYmpl Y3QqIHZhbHVlc1syXSA9IHswLDB9OworLSAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsK Ky0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3Nf YXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CistICAgICAgc3dpdGNoIChwb3Nf YXJncykgeworLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShf X3B5eF9hcmdzLCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNh c2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAg ICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQorLSAg ICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0Y2ggKHBv c19hcmdzKSB7CistICAgICAgICBjYXNlICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVz WzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3NlbGYp KSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxl X2Vycm9yOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMToK Ky0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3Ry KF9fcHl4X2t3ZHMsIF9fcHl4X25fc19kYXRhKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAg IGVsc2UgeworLSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18i LCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDM0NywgX19weXhfTDNfZXJyb3IpCistICAgICAg ICB9CistICAgICAgfQorLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAg ICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywg X19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9faW5pdF9fIikgPCAwKSkg X19QWVhfRVJSKDAsIDM0NywgX19weXhfTDNfZXJyb3IpCistICAgICAgfQorLSAgICB9IGVsc2Ug aWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0gMikgeworLSAgICAgIGdvdG8gX19w eXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgIH0gZWxzZSB7CistICAgICAgdmFsdWVzWzBdID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKy0gICAgICB2YWx1ZXNbMV0gPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICB9CistICAgIF9fcHl4X3Zfc2VsZiA9 IHZhbHVlc1swXTsKKy0gICAgX19weXhfdl9kYXRhID0gdmFsdWVzWzFdOworLSAgfQorLSAgZ290 byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKy0gIF9fcHl4X0w1X2FyZ3R1cGxl X2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDEsIDIs IDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5 eF9MM19lcnJvcikKKy0gIF9fcHl4X0wzX2Vycm9yOjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2Ll9SZXBseVVzZXJEYXRhLl9faW5pdF9fIiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKKy0gIHJldHVybiBOVUxMOworLSAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNr aW5nX2RvbmU6OworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NF9SZXBseVVzZXJEYXRhX19faW5pdF9fKF9fcHl4X3NlbGYsIF9fcHl4X3Zfc2VsZiwgX19weXhf dl9kYXRhKTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV9f X2luaXRfXyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9kYXRhKSB7CistICBQeU9iamVjdCAqX19weXhf ciA9IE5VTEw7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgaW50IF9fcHl4X2xp bmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQg X19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0 X18iLCAwKTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDgKKy0g KiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOgorLSAqICAgICBkZWYgX19pbml0X18oc2Vs ZiwgZGF0YSk6CistICogICAgICAgICBzZWxmLmNvdW50ZXIgPSAwICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKy0gKiAgICAgICAgIHNl bGYub2JzZXJ2ZWQgPSBGYWxzZQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDYzCisrICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9BUlJBWQorKyAq ICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKysgKiAgICAgICAgICAgICBy ZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX01BUCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT05FCisrICogCisgICovCistICBpZiAoX19Q eXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jb3VudGVyLCBf X3B5eF9pbnRfMCkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ4LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfTk9ERV9NQVApOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NjMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8zKTsKKysgICAgX19weXhfciA9IF9fcHl4X3RfMzsKKysgICAgX19weXhf dF8zID0gMDsKKysgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozNDkKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgorLSAq ICAgICAgICAgc2VsZi5jb3VudGVyID0gMAorLSAqICAgICAgICAgc2VsZi5kYXRhID0gZGF0YSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLm9ic2VydmVkID0g RmFsc2UKKy0gKiAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2Mgor KyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKToKKysgKiAg ICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZCisrICogICAgICAgICBlbGlm IGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9NQVAKKysgKiAgICAgICAgIHJl dHVybiBNUFZfRk9STUFUX05PTkUKKyAgKi8KKy0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRy U3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2RhdGEsIF9fcHl4X3ZfZGF0YSkgPCAwKSBfX1BZ WF9FUlIoMCwgMzQ5LCBfX3B5eF9MMV9lcnJvcikKKysgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjozNTAKKy0gKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKy0g KiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKy0gKiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBG YWxzZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDY0CisrICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRp Y3QpOgorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfTUFQCisrICogICAg ICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT05FICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KyAgKiAKKy0gKiAgICAgZGVmIGFkZChzZWxmKToKKysgKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0 KiBfcHJlcF9ub2RlX2xpc3Qoc2VsZiwgdmFsdWVzKToKKyAgKi8KKy0gIGlmIChfX1B5eF9QeU9i amVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX29ic2VydmVkLCBQeV9GYWxz ZSkgPCAwKSBfX1BZWF9FUlIoMCwgMzUwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X1hERUNS RUYoX19weXhfcik7CisrICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9m b3JtYXQoTVBWX0ZPUk1BVF9OT05FKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgNDY0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwor KyAgX19weXhfciA9IF9fcHl4X3RfMzsKKysgIF9fcHl4X3RfMyA9IDA7CisrICBnb3RvIF9fcHl4 X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NworKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1MQorKyAqICAgICAgICAgcmV0dXJuIGVy cgorICAqIAorLSAqIGNsYXNzIF9SZXBseVVzZXJEYXRhKG9iamVjdCk6CistICogICAgIGRlZiBf X2luaXRfXyhzZWxmLCBkYXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgc2VsZi5jb3VudGVyID0gMAorLSAqICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorKyAq ICAgICBkZWYgX2Zvcm1hdF9mb3Ioc2VsZiwgdmFsdWUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKysg KiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJTkcKKyAgKi8KKyAKKyAgIC8qIGZ1 bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQ eV9Ob25lKTsKKy0gIGdvdG8gX19weXhfTDA7CisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVwbHlVc2VyRGF0YS5fX2luaXRf XyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzMpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIu bGlicy5tcHYuQ29udGV4dC5fZm9ybWF0X2ZvciIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVu bywgX19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7Cisg ICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKK0BAIC04NTEwLDExNjAgKzkxODUsMTE4NiBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVz ZXJEYXRhX19faW5pdF9fKENZVEhPTgorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTIKKy0gKiAgICAgICAgIHNlbGYub2JzZXJ2 ZWQgPSBGYWxzZQorLSAqIAorLSAqICAgICBkZWYgYWRkKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMQorKy8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjYKKysgKiAgICAgICAgIHJldHVybiBNUFZfRk9STUFU X05PTkUKKyAgKiAKKysgKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBfcHJlcF9ub2RlX2xpc3Qo c2VsZiwgdmFsdWVzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg Y2RlZiBtcHZfbm9kZSBub2RlCisrICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0Cisg ICovCisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzNhZGQoUHlPYmplY3QgKl9f cHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlN ZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0 YV8zYWRkID0geyJhZGQiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzE0X1JlcGx5VXNlckRhdGFfM2FkZCwgTUVUSF9PLCAwfTsKKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzNhZGQoUHlP YmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5T2JqZWN0 ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiYWRkICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzJhZGQoX19weXhf c2VsZiwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOworLQorLSAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBf X3B5eF9yOworLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzJhZGQoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19w eXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3Ig PSBOVUxMOworK3N0YXRpYyBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9saXN0KHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3ZfdmFsdWVzKSB7CisrICBzdHJ1Y3QgbXB2X25vZGUgX19weXhfdl9ub2RlOworKyAgZW51bSBt cHZfZm9ybWF0IF9fcHl4X3ZfZm9ybWF0OworKyAgc3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4 X3Zfbm9kZV9saXN0OworKyAgUHlPYmplY3QgKl9fcHl4X3ZfaSA9IE5VTEw7CisrICBQeU9iamVj dCAqX19weXhfdl92YWx1ZSA9IE5VTEw7CisrICBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhf cjsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8x ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworKyAgUHlfc3NpemVfdCBf X3B5eF90XzE7CisrICBpbnQgX19weXhfdF8yOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5V TEw7CisrICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKysgIFB5T2JqZWN0ICooKl9fcHl4 X3RfNSkoUHlPYmplY3QgKik7CisrICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKysgIFB5 T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfOCA9IE5VTEw7 CisrICBlbnVtIG1wdl9mb3JtYXQgX19weXhfdF85OworKyAgUHlfc3NpemVfdCBfX3B5eF90XzEw OworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFt ZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiYWRkIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX3By ZXBfbm9kZV9saXN0IiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzUzCistICogCistICogICAgIGRlZiBhZGQoc2VsZik6CistICogICAgICAgICBzZWxmLmNv dW50ZXIgKz0gMSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGRl ZiByZW1vdmUoc2VsZik6CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDY5 CisrICogICAgICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKKysgKiAgICAgICAgIGNkZWYgbXB2X2Zv cm1hdCBmb3JtYXQKKysgKiAgICAgICAgIGNkZWYgbXB2X25vZGVfbGlzdCogbm9kZV9saXN0ID0g PG1wdl9ub2RlX2xpc3QqPm1hbGxvYyhzaXplb2YobXB2X25vZGVfbGlzdCkpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIG5vZGVfbGlzdC5udW0gPSBsZW4odmFsdWVz KQorKyAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKKyAgKi8KKy0gIF9fcHl4X3Rf MSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY291 bnRlcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDM1MywgX19weXhf TDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMiA9IF9f UHl4X1B5SW50X0FkZE9iakMoX19weXhfdF8xLCBfX3B5eF9pbnRfMSwgMSwgMSwgMCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDM1MywgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9z ZWxmLCBfX3B5eF9uX3NfY291bnRlciwgX19weXhfdF8yKSA8IDApIF9fUFlYX0VSUigwLCAzNTMs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9 IDA7CisrICBfX3B5eF92X25vZGVfbGlzdCA9ICgoc3RydWN0IG1wdl9ub2RlX2xpc3QgKiltYWxs b2MoKHNpemVvZihzdHJ1Y3QgbXB2X25vZGVfbGlzdCkpKSk7CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzUyCistICogICAgICAgICBzZWxmLm9ic2VydmVkID0gRmFs c2UKKy0gKiAKKy0gKiAgICAgZGVmIGFkZChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgc2VsZi5jb3VudGVyICs9IDEKKy0gKiAKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzAKKysgKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBm b3JtYXQKKysgKiAgICAgICAgIGNkZWYgbXB2X25vZGVfbGlzdCogbm9kZV9saXN0ID0gPG1wdl9u b2RlX2xpc3QqPm1hbGxvYyhzaXplb2YobXB2X25vZGVfbGlzdCkpCisrICogICAgICAgICBub2Rl X2xpc3QubnVtID0gbGVuKHZhbHVlcykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKKysgKiAgICAgICAgIG5vZGVfbGlzdC5r ZXlzID0gTlVMTAorICAqLworKyAgX19weXhfdF8xID0gUHlPYmplY3RfTGVuZ3RoKF9fcHl4X3Zf dmFsdWVzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMSA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19Q WVhfRVJSKDAsIDQ3MCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF92X25vZGVfbGlzdC0+bnVt ID0gX19weXhfdF8xOworIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9y ID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0g IF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxp YnMubXB2Ll9SZXBseVVzZXJEYXRhLmFkZCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7CistICBfX3B5eF9MMDo7CistICBf X1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNTUKKy0gKiAgICAgICAgIHNlbGYuY291bnRlciArPSAxCistICogCistICogICAg IGRlZiByZW1vdmUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHNlbGYuY291bnRlciAtPSAxCistICogCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NDcxCisrICogICAgICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIG5vZGVfbGlzdCA9 IDxtcHZfbm9kZV9saXN0Kj5tYWxsb2Moc2l6ZW9mKG1wdl9ub2RlX2xpc3QpKQorKyAqICAgICAg ICAgbm9kZV9saXN0Lm51bSA9IGxlbih2YWx1ZXMpCisrICogICAgICAgICBub2RlX2xpc3QudmFs dWVzID0gTlVMTCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBub2Rl X2xpc3Qua2V5cyA9IE5VTEwKKysgKiAgICAgICAgIGlmIG5vZGVfbGlzdC5udW06CisgICovCisr ICBfX3B5eF92X25vZGVfbGlzdC0+dmFsdWVzID0gTlVMTDsKKyAKKy0vKiBQeXRob24gd3JhcHBl ciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0 X1JlcGx5VXNlckRhdGFfNXJlbW92ZShQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzVyZW1vdmUgPSB7InJlbW92ZSIs IChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2Vy RGF0YV81cmVtb3ZlLCBNRVRIX08sIDB9OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNXJlbW92ZShQeU9iamVjdCAqX19w eXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3Ig PSAwOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJyZW1vdmUgKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNHJlbW92ZShfX3B5eF9zZWxm LCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNv ZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4 X3I7CistfQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3MgorKyAqICAg ICAgICAgbm9kZV9saXN0Lm51bSA9IGxlbih2YWx1ZXMpCisrICogICAgICAgICBub2RlX2xpc3Qu dmFsdWVzID0gTlVMTAorKyAqICAgICAgICAgbm9kZV9saXN0LmtleXMgPSBOVUxMICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIG5vZGVfbGlzdC5udW06CisrICog ICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlz dC5udW0gKiBzaXplb2YobXB2X25vZGUpKQorKyAqLworKyAgX19weXhfdl9ub2RlX2xpc3QtPmtl eXMgPSBOVUxMOworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNHJlbW92ZShDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpf X3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CistICBQeU9iamVjdCAqX19weXhf ciA9IE5VTEw7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9f cHl4X3RfMSA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKy0gIGludCBf X3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwor LSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo InJlbW92ZSIsIDApOworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3Mwor KyAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKKysgKiAgICAgICAgIG5vZGVfbGlz dC5rZXlzID0gTlVMTAorKyAqICAgICAgICAgaWYgbm9kZV9saXN0Lm51bTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2 X25vZGUqPm1hbGxvYyhub2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkKKysgKiAgICAg ICAgIGZvciBpLCB2YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVzKToKKysgKi8KKysgIF9fcHl4X3Rf MiA9IChfX3B5eF92X25vZGVfbGlzdC0+bnVtICE9IDApOworKyAgaWYgKF9fcHl4X3RfMikgewor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NgorLSAqIAorLSAqICAg ICBkZWYgcmVtb3ZlKHNlbGYpOgorLSAqICAgICAgICAgc2VsZi5jb3VudGVyIC09IDEgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDc0CisrICogICAgICAgICBub2RlX2xpc3Qua2V5cyA9IE5VTEwKKysgKiAg ICAgICAgIGlmIG5vZGVfbGlzdC5udW06CisrICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVl cyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2X25vZGUpKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBmb3IgaSwgdmFsdWUgaW4g ZW51bWVyYXRlKHZhbHVlcyk6CisrICogICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9ybWF0 X2Zvcih2YWx1ZSkKKysgKi8KKysgICAgX19weXhfdl9ub2RlX2xpc3QtPnZhbHVlcyA9ICgoc3Ry dWN0IG1wdl9ub2RlICopbWFsbG9jKChfX3B5eF92X25vZGVfbGlzdC0+bnVtICogKHNpemVvZihz dHJ1Y3QgbXB2X25vZGUpKSkpKTsKKysKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ3MworKyAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKKysgKiAgICAg ICAgIG5vZGVfbGlzdC5rZXlzID0gTlVMTAorKyAqICAgICAgICAgaWYgbm9kZV9saXN0Lm51bTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIG5vZGVfbGlzdC52 YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxvYyhub2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2Rl KSkKKysgKiAgICAgICAgIGZvciBpLCB2YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVzKToKKysgKi8K KysgIH0KKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzUKKysgKiAg ICAgICAgIGlmIG5vZGVfbGlzdC5udW06CisrICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVl cyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2X25vZGUpKQor KyAqICAgICAgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9ybWF0 X2Zvcih2YWx1ZSkKKysgKiAgICAgICAgICAgICBub2RlID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFs dWUodmFsdWUsIGZvcm1hdCkKKysgKi8KKysgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMCk7Cisr ICBfX3B5eF90XzMgPSBfX3B5eF9pbnRfMDsKKysgIGlmIChsaWtlbHkoUHlMaXN0X0NoZWNrRXhh Y3QoX19weXhfdl92YWx1ZXMpKSB8fCBQeVR1cGxlX0NoZWNrRXhhY3QoX19weXhfdl92YWx1ZXMp KSB7CisrICAgIF9fcHl4X3RfNCA9IF9fcHl4X3ZfdmFsdWVzOyBfX1B5eF9JTkNSRUYoX19weXhf dF80KTsgX19weXhfdF8xID0gMDsKKysgICAgX19weXhfdF81ID0gTlVMTDsKKysgIH0gZWxzZSB7 CisrICAgIF9fcHl4X3RfMSA9IC0xOyBfX3B5eF90XzQgPSBQeU9iamVjdF9HZXRJdGVyKF9fcHl4 X3ZfdmFsdWVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDc1LCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgIF9fcHl4 X3RfNSA9IFB5X1RZUEUoX19weXhfdF80KS0+dHBfaXRlcm5leHQ7IGlmICh1bmxpa2VseSghX19w eXhfdF81KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCisrICB9CisrICBmb3Ig KDs7KSB7CisrICAgIGlmIChsaWtlbHkoIV9fcHl4X3RfNSkpIHsKKysgICAgICBpZiAobGlrZWx5 KFB5TGlzdF9DaGVja0V4YWN0KF9fcHl4X3RfNCkpKSB7CisrICAgICAgICBpZiAoX19weXhfdF8x ID49IFB5TGlzdF9HRVRfU0laRShfX3B5eF90XzQpKSBicmVhazsKKysgICAgICAgICNpZiBDWVRI T05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworKyAg ICAgICAgX19weXhfdF82ID0gUHlMaXN0X0dFVF9JVEVNKF9fcHl4X3RfNCwgX19weXhfdF8xKTsg X19QeXhfSU5DUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfMSsrOyBpZiAodW5saWtlbHkoMCA8IDAp KSBfX1BZWF9FUlIoMCwgNDc1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICAgICNlbHNlCisrICAg ICAgICBfX3B5eF90XzYgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF80LCBfX3B5eF90XzEpOyBf X3B5eF90XzErKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDc1LCBf X3B5eF9MMV9lcnJvcikKKysgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKyAgICAg ICAgI2VuZGlmCisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGlmIChfX3B5eF90XzEgPj0gUHlU dXBsZV9HRVRfU0laRShfX3B5eF90XzQpKSBicmVhazsKKysgICAgICAgICNpZiBDWVRIT05fQVNT VU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworKyAgICAgICAg X19weXhfdF82ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF90XzQsIF9fcHl4X3RfMSk7IF9fUHl4 X0lOQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzErKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19Q WVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgICAjZWxzZQorKyAgICAgICAg X19weXhfdF82ID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfNCwgX19weXhfdF8xKTsgX19weXhf dF8xKys7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhf TDFfZXJyb3IpCisrICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgICAgICAgICNl bmRpZgorKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICBfX3B5eF90XzYgPSBfX3B5eF90 XzUoX19weXhfdF80KTsKKysgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIHsKKysgICAg ICAgIFB5T2JqZWN0KiBleGNfdHlwZSA9IFB5RXJyX09jY3VycmVkKCk7CisrICAgICAgICBpZiAo ZXhjX3R5cGUpIHsKKysgICAgICAgICAgaWYgKGxpa2VseShfX1B5eF9QeUVycl9HaXZlbkV4Y2Vw dGlvbk1hdGNoZXMoZXhjX3R5cGUsIFB5RXhjX1N0b3BJdGVyYXRpb24pKSkgUHlFcnJfQ2xlYXIo KTsKKysgICAgICAgICAgZWxzZSBfX1BZWF9FUlIoMCwgNDc1LCBfX3B5eF9MMV9lcnJvcikKKysg ICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF82KTsKKysgICAgfQorKyAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X3ZhbHVl LCBfX3B5eF90XzYpOworKyAgICBfX3B5eF90XzYgPSAwOworKyAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF8zKTsKKysgICAgX19QeXhfWERFQ1JFRl9TRVQoX19weXhfdl9pLCBfX3B5eF90XzMpOwor KyAgICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9BZGRPYmpDKF9fcHl4X3RfMywgX19weXhfaW50 XzEsIDEsIDAsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzUs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNjsKKysgICAg X19weXhfdF82ID0gMDsKKysKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQ3NgorKyAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxv Yyhub2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkKKysgKiAgICAgICAgIGZvciBpLCB2 YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVzKToKKysgKiAgICAgICAgICAgICBmb3JtYXQgPSBzZWxm Ll9mb3JtYXRfZm9yKHZhbHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICAgICAgbm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCisr ICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVlc1tpXSA9IG5vZGUKKysgKi8KKysgICAgX19w eXhfdF83ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9z ZWxmKSwgX19weXhfbl9zX2Zvcm1hdF9mb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9f UFlYX0VSUigwLCA0NzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhf dF83KTsKKysgICAgX19weXhfdF84ID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF83KSkpIHsKKysgICAgICBfX3B5 eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzcpOworKyAgICAgIGlmIChsaWtlbHko X19weXhfdF84KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VU X0ZVTkNUSU9OKF9fcHl4X3RfNyk7CisrICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF84KTsK KysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3RfNywgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQorKyAgICBfX3B5eF90 XzYgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzcsIF9f cHl4X3RfOCwgX19weXhfdl92YWx1ZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfNywgX19weXhfdl92YWx1ZSk7CisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsgX19w eXhfdF84ID0gMDsKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg NDc2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgICBfX3B5eF90Xzkg PSAoKGVudW0gbXB2X2Zvcm1hdClfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZm9ybWF0KF9fcHl4 X3RfNikpOyBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0NzYs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKysgICAgX19weXhfdl9mb3JtYXQgPSBfX3B5eF90Xzk7CisrCisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzcKKysgKiAgICAgICAgIGZvciBpLCB2YWx1ZSBp biBlbnVtZXJhdGUodmFsdWVzKToKKysgKiAgICAgICAgICAgICBmb3JtYXQgPSBzZWxmLl9mb3Jt YXRfZm9yKHZhbHVlKQorKyAqICAgICAgICAgICAgIG5vZGUgPSBzZWxmLl9wcmVwX25hdGl2ZV92 YWx1ZSh2YWx1ZSwgZm9ybWF0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICAgICAgbm9kZV9saXN0LnZhbHVlc1tpXSA9IG5vZGUKKysgKiAgICAgICAgIHJldHVybiBu b2RlX2xpc3QKKysgKi8KKysgICAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfZm9ybWF0KF9fcHl4X3ZfZm9ybWF0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgNDc3LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nik7CisrICAgIF9fcHl4X3Zfbm9kZSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fcHJl cF9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X3ZhbHVlLCBfX3B5eF90XzYpOwor KyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3OAorKyAqICAgICAgICAgICAgIGZvcm1h dCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCisrICogICAgICAgICAgICAgbm9kZSA9IHNlbGYu X3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCisrICogICAgICAgICAgICAgbm9kZV9s aXN0LnZhbHVlc1tpXSA9IG5vZGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgcmV0dXJuIG5vZGVfbGlzdAorICAqIAorICAqLworLSAgX19weXhfdF8xID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jb3VudGVyKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzU2LCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRf U3VidHJhY3RPYmpDKF9fcHl4X3RfMSwgX19weXhfaW50XzEsIDEsIDEsIDApOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzNTYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKy0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwg X19weXhfbl9zX2NvdW50ZXIsIF9fcHl4X3RfMikgPCAwKSBfX1BZWF9FUlIoMCwgMzU2LCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor KyAgICBfX3B5eF90XzEwID0gX19QeXhfUHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9pKTsgaWYg KHVubGlrZWx5KChfX3B5eF90XzEwID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJl ZCgpKSkgX19QWVhfRVJSKDAsIDQ3OCwgX19weXhfTDFfZXJyb3IpCisrICAgIChfX3B5eF92X25v ZGVfbGlzdC0+dmFsdWVzW19fcHl4X3RfMTBdKSA9IF9fcHl4X3Zfbm9kZTsKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTUKKy0gKiAgICAgICAgIHNlbGYuY291bnRl ciArPSAxCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzUKKysgKiAg ICAgICAgIGlmIG5vZGVfbGlzdC5udW06CisrICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVl cyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2X25vZGUpKQor KyAqICAgICAgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9ybWF0 X2Zvcih2YWx1ZSkKKysgKiAgICAgICAgICAgICBub2RlID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFs dWUodmFsdWUsIGZvcm1hdCkKKysgKi8KKysgIH0KKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQp OyBfX3B5eF90XzQgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc5CisrICogICAg ICAgICAgICAgbm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCisr ICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVlc1tpXSA9IG5vZGUKKysgKiAgICAgICAgIHJl dHVybiBub2RlX2xpc3QgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorLSAqICAg ICBkZWYgcmVtb3ZlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBzZWxmLmNvdW50ZXIgLT0gMQorKyAqICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVw X25vZGVfbWFwKHNlbGYsIG1hcCk6CisrICovCisrICBfX3B5eF9yID0gX19weXhfdl9ub2RlX2xp c3Q7CisrICBnb3RvIF9fcHl4X0wwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ2NgorKyAqICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ORQorICAqIAorKyAq ICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbGlzdChzZWxmLCB2YWx1ZXMpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjZGVmIG1wdl9ub2RlIG5v ZGUKKysgKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQKKyAgKi8KKyAKKyAgIC8qIGZ1 bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQ eV9Ob25lKTsKKy0gIGdvdG8gX19weXhfTDA7CisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CistICBf X1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVwbHlVc2VyRGF0YS5yZW1v dmUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9f cHl4X3IgPSBOVUxMOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzQpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOworKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzcpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOworKyAgX19Q eXhfV3JpdGVVbnJhaXNhYmxlKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5fcHJlcF9ub2Rl X2xpc3QiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAw KTsKKysgIF9fcHl4X3IgPSAwOworICAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19w eXhfcik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfaSk7CisrICBfX1B5eF9YREVDUkVGKF9f cHl4X3ZfdmFsdWUpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1 cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3 MAorLSAqIAorLSAqICAgICBAcHJvcGVydHkKKy0gKiAgICAgZGVmIGFwaV92ZXJzaW9uKHNlbGYp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1cm4gX0NBUElf TUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQSV9WRVJTSU9OCisrLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ4MQorKyAqICAgICAgICAgcmV0dXJuIG5vZGVfbGlzdAorICAqIAorKyAq ICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbWFwKHNlbGYsIG1hcCk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWYgY2hhciogY2tleQorKyAq ICAgICAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBsaXN0CisgICovCisgCistLyogUHl0aG9uIHdy YXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8xMWFwaV92ZXJzaW9uXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYp OyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8xMWFwaV92ZXJzaW9uXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFy YXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlciki LCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMTFhcGlfdmVyc2lvbl9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworLQorLSAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBf X3B5eF9yOworLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8xMWFwaV92ZXJzaW9uX19fZ2V0X18oQ1lUSE9OX1VOVVNFRCBzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYp IHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKytzdGF0aWMgc3RydWN0IG1wdl9ub2Rl X2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25vZGVf bWFwKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4 X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfbWFwKSB7CisrICBjaGFyICpfX3B5eF92X2NrZXk7 CisrICBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfdl9saXN0OworKyAgUHlPYmplY3QgKl9f cHl4X3Zfa2V5cyA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdl9pID0gTlVMTDsKKysgIFB5 T2JqZWN0ICpfX3B5eF92X2tleSA9IE5VTEw7CisrICBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19w eXhfcjsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhf dF8xID0gTlVMTDsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworICAgUHlPYmplY3Qg Kl9fcHl4X3RfMyA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKysgIFB5 X3NzaXplX3QgX19weXhfdF80OworKyAgaW50IF9fcHl4X3RfNTsKKysgIFB5T2JqZWN0ICooKl9f cHl4X3RfNikoUHlPYmplY3QgKik7CisrICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKKysg IFB5T2JqZWN0ICpfX3B5eF90XzggPSBOVUxMOworKyAgY2hhciAqX19weXhfdF85OworKyAgUHlf c3NpemVfdCBfX3B5eF90XzEwOworKyAgUHlfc3NpemVfdCBfX3B5eF90XzExOworICAgaW50IF9f cHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Cisg ICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19nZXRfXyIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9wcmVwX25vZGVf bWFwIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzcxCist ICogICAgIEBwcm9wZXJ0eQorLSAqICAgICBkZWYgYXBpX3ZlcnNpb24oc2VsZik6CistICogICAg ICAgICByZXR1cm4gX0NBUElfTUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQSV9WRVJTSU9OICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgQHByb3BlcnR5CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg0CisrICogICAgICAgICBjZGVmIGNoYXIq IGNrZXkKKysgKiAgICAgICAgIGNkZWYgbXB2X25vZGVfbGlzdCogbGlzdAorKyAqICAgICAgICAg bGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0KG1hcC52YWx1ZXMoKSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAga2V5cyA9IG1hcC5rZXlzKCkKKysgKiAgICAgICAg IGlmIG5vdCBsZW4oa2V5cyk6CisgICovCistICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAg X19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzEsIF9fcHl4X25fc19DQVBJX01JTk9S KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzcxLCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19DQVBJX01BSk9SKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMzcxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9tYXAsIF9fcHl4X25fc192YWx1 ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0ODQsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX3B5eF90XzMgPSBfX1B5 eF9QeUludF9Gcm9tX3Vuc2lnbmVkX2xvbmcoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X0NBUElfVkVSU0lPTik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDM3 MSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fcHl4 X3RfNCA9IFB5VHVwbGVfTmV3KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VS UigwLCAzNzEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Cist ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CistICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3Rf NCwgMCwgX19weXhfdF8xKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8yKTsKKy0gIFB5VHVw bGVfU0VUX0lURU0oX19weXhfdF80LCAxLCBfX3B5eF90XzIpOworLSAgX19QeXhfR0lWRVJFRihf X3B5eF90XzMpOworLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQsIDIsIF9fcHl4X3RfMyk7 CistICBfX3B5eF90XzEgPSAwOworLSAgX19weXhfdF8yID0gMDsKKy0gIF9fcHl4X3RfMyA9IDA7 CistICBfX3B5eF9yID0gX19weXhfdF80OworLSAgX19weXhfdF80ID0gMDsKKy0gIGdvdG8gX19w eXhfTDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzcwCistICog CistICogICAgIEBwcm9wZXJ0eQorLSAqICAgICBkZWYgYXBpX3ZlcnNpb24oc2VsZik6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiBfQ0FQSV9NSU5PUiwg X0NBUElfTUFKT1IsIF9DQVBJX1ZFUlNJT04KKy0gKiAKKy0gKi8KKy0KKy0gIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLworLSAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzEpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworLSAgX19QeXhfWERFQ1JFRihf X3B5eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworLSAgX19QeXhfQWRkVHJh Y2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5hcGlfdmVyc2lvbi5fX2dldF9fIiwg X19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9y ID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19Cist CistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3NAorLSAqIAorLSAqICAgICBA cHJvcGVydHkKKy0gKiAgICAgZGVmIG5hbWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICIiIlVuaXF1ZSBuYW1lIGZvciBldmVyeSBjb250ZXh0IGNyZWF0 ZWQuCistICogCistICovCistCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bmFtZV8xX19nZXRf XyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNG5hbWVfMV9fZ2V0X18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworLSAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X2dldF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF80bmFtZV9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworLQorLSAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0g IHJldHVybiBfX3B5eF9yOworLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bmFtZV9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworLSAgY2hhciBj b25zdCAqX19weXhfdl9uYW1lOworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwor LSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8zID0g TlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVu byA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIs IDApOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM4MAorLSAqICAg ICAgICAgIiIiCistICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIG5hbWUKKy0gKiAgICAgICAg IGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBuYW1lID0gbXB2X2NsaWVudF9uYW1lKHNl bGYuX2N0eCkKKy0gKi8KKy0gICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUworLSAg aWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CistICAgIGlmICh1bmxpa2VseSghKF9f cHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKy0gICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fz c2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIoMCwgMzgwLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfMyA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICBfX3B5eF90XzMgPSBQeU1l dGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsK KysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhf dF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKKysgICAgICBfX1B5eF9JTkNS RUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlv bik7CisgICAgIH0KKyAgIH0KKy0gICNlbmRpZgorLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjM4MQorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBuYW1lCistICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgbmFtZSA9IG1wdl9jbGllbnRf bmFtZShzZWxmLl9jdHgpCistICogICAgICAgICByZXR1cm4gX3N0cmRlYyhuYW1lKQorLSAqLwor LSAgeworLSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9z YXZlOworLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVt ZW1iZXIoKTsKKy0gICAgICAjZW5kaWYKKy0gICAgICAvKnRyeToqLyB7CistCistICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzgyCistICogICAgICAgICBhc3NlcnQg c2VsZi5fY3R4CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG5hbWUg PSBtcHZfY2xpZW50X25hbWUoc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICByZXR1cm4gX3N0cmRlYyhuYW1lKQorLSAqIAorLSAqLworLSAgICAgICAg X19weXhfdl9uYW1lID0gbXB2X2NsaWVudF9uYW1lKF9fcHl4X3Zfc2VsZi0+X2N0eCk7CistICAg ICAgfQorLQorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODEKKy0g KiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZQorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYu X2N0eAorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgICAgIG5hbWUgPSBtcHZfY2xpZW50X25hbWUoc2VsZi5fY3R4KQorLSAq ICAgICAgICAgcmV0dXJuIF9zdHJkZWMobmFtZSkKKy0gKi8KKy0gICAgICAvKmZpbmFsbHk6Ki8g eworLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhS RUFECistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CistICAgICAgICAgIFB5X0JM T0NLX1RIUkVBRFMKKy0gICAgICAgICAgI2VuZGlmCistICAgICAgICAgIGdvdG8gX19weXhfTDU7 CistICAgICAgICB9CistICAgICAgICBfX3B5eF9MNTo7CistICAgICAgfQorLSAgfQorKyAgX19w eXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3Rf MiwgX19weXhfdF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzIpOworKyAg X19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNDg0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7CisrICBfX3B5eF92X2xpc3QgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3By ZXBfbm9kZV9saXN0KF9fcHl4X3Zfc2VsZiwgX19weXhfdF8xKTsKKysgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM4MworLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBu YW1lID0gbXB2X2NsaWVudF9uYW1lKHNlbGYuX2N0eCkKKy0gKiAgICAgICAgIHJldHVybiBfc3Ry ZGVjKG5hbWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgQHBy b3BlcnR5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg1CisrICogICAg ICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIGxpc3QKKysgKiAgICAgICAgIGxpc3QgPSBzZWxmLl9w cmVwX25vZGVfbGlzdChtYXAudmFsdWVzKCkpCisrICogICAgICAgICBrZXlzID0gbWFwLmtleXMo KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBpZiBub3QgbGVuKGtl eXMpOgorKyAqICAgICAgICAgICAgIHJldHVybiBsaXN0CisgICovCistICBfX1B5eF9YREVDUkVG KF9fcHl4X3IpOworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4 X25fc19zdHJkZWMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzODMs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF92X21hcCwgX19weXhfbl9zX2tleXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCA0ODUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMik7CistICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9u YW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMzgzLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgX19weXhfdF80ID0gTlVM TDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF8yKSkpIHsKKy0gICAgX19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19w eXhfdF8yKTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CisrICBfX3B5eF90XzMgPSBO VUxMOworKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF8yKSkpIHsKKysgICAgX19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NFTEYoX19w eXhfdF8yKTsKKysgICAgaWYgKGxpa2VseShfX3B5eF90XzMpKSB7CisgICAgICAgUHlPYmplY3Qq IGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CistICAgICAgX19Q eXhfSU5DUkVGKF9fcHl4X3RfNCk7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7Cisg ICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKyAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfMiwgZnVuY3Rpb24pOworICAgICB9CisgICB9CistICBfX3B5eF90XzEgPSAoX19weXhf dF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19w eXhfdF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAzODMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0g KF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhf dF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzIpOworKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNDg1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cist ICBfX3B5eF9yID0gX19weXhfdF8xOworKyAgX19weXhfdl9rZXlzID0gX19weXhfdF8xOworICAg X19weXhfdF8xID0gMDsKKy0gIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Mzc0CistICogCistICogICAgIEBwcm9wZXJ0eQorLSAqICAgICBk ZWYgbmFtZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg IiIiVW5pcXVlIG5hbWUgZm9yIGV2ZXJ5IGNvbnRleHQgY3JlYXRlZC4KKy0gKiAKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODYKKysgKiAgICAgICAgIGxpc3QgPSBzZWxm Ll9wcmVwX25vZGVfbGlzdChtYXAudmFsdWVzKCkpCisrICogICAgICAgICBrZXlzID0gbWFwLmtl eXMoKQorKyAqICAgICAgICAgaWYgbm90IGxlbihrZXlzKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybiBsaXN0CisrICogICAgICAgICBsaXN0Lmtl eXMgPSA8Y2hhcioqPm1hbGxvYyhsaXN0Lm51bSkKKyAgKi8KKysgIF9fcHl4X3RfNCA9IFB5T2Jq ZWN0X0xlbmd0aChfX3B5eF92X2tleXMpOyBpZiAodW5saWtlbHkoX19weXhfdF80ID09ICgoUHlf c3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMCwgNDg2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNSA9ICgoIShfX3B5eF90XzQgIT0gMCkpICE9IDApOworKyAgaWYgKF9fcHl4X3RfNSkgewor IAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7 CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0Lm5hbWUu X19nZXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwor LSAgX19weXhfciA9IE5VTEw7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5 eF9yKTsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4 X3I7CistfQorLQorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODYKKy0gKiAK Ky0gKiAgICAgQHByb3BlcnR5CistICogICAgIGRlZiB0aW1lKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJJbnRlcm5hbCBtcHYgY2xpZW50IHRpbWUu CistICogCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODcKKysgKiAg ICAgICAgIGtleXMgPSBtYXAua2V5cygpCisrICogICAgICAgICBpZiBub3QgbGVuKGtleXMpOgor KyAqICAgICAgICAgICAgIHJldHVybiBsaXN0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgIGxpc3Qua2V5cyA9IDxjaGFyKio+bWFsbG9jKGxpc3QubnVtKQorKyAqICAg ICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6CisgICovCisrICAgIF9fcHl4X3Ig PSBfX3B5eF92X2xpc3Q7CisrICAgIGdvdG8gX19weXhfTDA7CisgCistLyogUHl0aG9uIHdyYXBw ZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF80dGltZV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byov Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNHRpbWVfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3Qg Kl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9 IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80dGltZV9fX2dldF9fKCgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zf c2VsZikpOworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg2CisrICog ICAgICAgICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QobWFwLnZhbHVlcygpKQorKyAqICAg ICAgICAga2V5cyA9IG1hcC5rZXlzKCkKKysgKiAgICAgICAgIGlmIG5vdCBsZW4oa2V5cyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByZXR1cm4gbGlzdAor KyAqICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxsb2MobGlzdC5udW0pCisrICovCisr ICB9CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ4OAorKyAqICAgICAgICAgaWYgbm90IGxlbihrZXlzKToKKysg KiAgICAgICAgICAgICByZXR1cm4gbGlzdAorKyAqICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIq Kj5tYWxsb2MobGlzdC5udW0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgIGZvciBpLCBrZXkgaW4gZW51bWVyYXRlKGtleXMpOgorKyAqICAgICAgICAgICAgIGtleSA9 IF9zdHJlbmMoa2V5KQorKyAqLworKyAgX19weXhfdl9saXN0LT5rZXlzID0gKChjaGFyICoqKW1h bGxvYyhfX3B5eF92X2xpc3QtPm51bSkpOworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1lX19fZ2V0X18oc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKSB7CistICBp bnQ2NF90IF9fcHl4X3ZfdGltZTsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsK Ky0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUg PSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0ODkKKysgKiAgICAgICAgICAgICByZXR1cm4gbGlzdAorKyAqICAgICAgICAgbGlzdC5r ZXlzID0gPGNoYXIqKj5tYWxsb2MobGlzdC5udW0pCisrICogICAgICAgICBmb3IgaSwga2V5IGlu IGVudW1lcmF0ZShrZXlzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgICAgIGtleSA9IF9zdHJlbmMoa2V5KQorKyAqICAgICAgICAgICAgIGNrZXkgPSBrZXkKKysg Ki8KKysgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMCk7CisrICBfX3B5eF90XzEgPSBfX3B5eF9p bnRfMDsKKysgIGlmIChsaWtlbHkoUHlMaXN0X0NoZWNrRXhhY3QoX19weXhfdl9rZXlzKSkgfHwg UHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3Zfa2V5cykpIHsKKysgICAgX19weXhfdF8yID0gX19w eXhfdl9rZXlzOyBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsgX19weXhfdF80ID0gMDsKKysgICAg X19weXhfdF82ID0gTlVMTDsKKysgIH0gZWxzZSB7CisrICAgIF9fcHl4X3RfNCA9IC0xOyBfX3B5 eF90XzIgPSBQeU9iamVjdF9HZXRJdGVyKF9fcHl4X3Zfa2V5cyk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDQ4OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzIpOworKyAgICBfX3B5eF90XzYgPSBQeV9UWVBFKF9fcHl4X3RfMiktPnRw X2l0ZXJuZXh0OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0ODksIF9f cHl4X0wxX2Vycm9yKQorKyAgfQorKyAgZm9yICg7OykgeworKyAgICBpZiAobGlrZWx5KCFfX3B5 eF90XzYpKSB7CisrICAgICAgaWYgKGxpa2VseShQeUxpc3RfQ2hlY2tFeGFjdChfX3B5eF90XzIp KSkgeworKyAgICAgICAgaWYgKF9fcHl4X3RfNCA+PSBQeUxpc3RfR0VUX1NJWkUoX19weXhfdF8y KSkgYnJlYWs7CisrICAgICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lU SE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMKKysgICAgICAgIF9fcHl4X3RfMyA9IFB5TGlzdF9HRVRf SVRFTShfX3B5eF90XzIsIF9fcHl4X3RfNCk7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOyBfX3B5 eF90XzQrKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAsIDQ4OSwgX19weXhfTDFf ZXJyb3IpCisrICAgICAgICAjZWxzZQorKyAgICAgICAgX19weXhfdF8zID0gUHlTZXF1ZW5jZV9J VEVNKF9fcHl4X3RfMiwgX19weXhfdF80KTsgX19weXhfdF80Kys7IGlmICh1bmxpa2VseSghX19w eXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ4OSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgICAgICNlbmRpZgorKyAgICAgIH0gZWxzZSB7Cisr ICAgICAgICBpZiAoX19weXhfdF80ID49IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdF8yKSkgYnJl YWs7CisrICAgICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FW T0lEX0JPUlJPV0VEX1JFRlMKKysgICAgICAgIF9fcHl4X3RfMyA9IFB5VHVwbGVfR0VUX0lURU0o X19weXhfdF8yLCBfX3B5eF90XzQpOyBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsgX19weXhfdF80 Kys7IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4X0wxX2Vycm9y KQorKyAgICAgICAgI2Vsc2UKKysgICAgICAgIF9fcHl4X3RfMyA9IFB5U2VxdWVuY2VfSVRFTShf X3B5eF90XzIsIF9fcHl4X3RfNCk7IF9fcHl4X3RfNCsrOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MykpIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7CisrICAgICAgICAjZW5kaWYKKysgICAgICB9CisrICAgIH0gZWxzZSB7 CisrICAgICAgX19weXhfdF8zID0gX19weXhfdF82KF9fcHl4X3RfMik7CisrICAgICAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzMpKSB7CisrICAgICAgICBQeU9iamVjdCogZXhjX3R5cGUgPSBQeUVy cl9PY2N1cnJlZCgpOworKyAgICAgICAgaWYgKGV4Y190eXBlKSB7CisrICAgICAgICAgIGlmIChs aWtlbHkoX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGV4Y190eXBlLCBQeUV4Y19T dG9wSXRlcmF0aW9uKSkpIFB5RXJyX0NsZWFyKCk7CisrICAgICAgICAgIGVsc2UgX19QWVhfRVJS KDAsIDQ4OSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysg ICAgICB9CisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIH0KKysgICAgX19Q eXhfWERFQ1JFRl9TRVQoX19weXhfdl9rZXksIF9fcHl4X3RfMyk7CisrICAgIF9fcHl4X3RfMyA9 IDA7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9YREVDUkVGX1NF VChfX3B5eF92X2ksIF9fcHl4X3RfMSk7CisrICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Fk ZE9iakMoX19weXhfdF8xLCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ4OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzMpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsKKysgICAgX19w eXhfdF8xID0gX19weXhfdF8zOworKyAgICBfX3B5eF90XzMgPSAwOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM5NAorLSAqICAgICAgICAgIiIiCistICogICAgICAg ICBjZGVmIGludDY0X3QgdGltZQorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAg ICAgICAgIHRpbWUgPSBtcHZfZ2V0X3RpbWVfdXMoc2VsZi5fY3R4KQorKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDkwCisrICogICAgICAgICBsaXN0LmtleXMgPSA8Y2hh cioqPm1hbGxvYyhsaXN0Lm51bSkKKysgKiAgICAgICAgIGZvciBpLCBrZXkgaW4gZW51bWVyYXRl KGtleXMpOgorKyAqICAgICAgICAgICAgIGtleSA9IF9zdHJlbmMoa2V5KSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgY2tleSA9IGtleQorKyAqICAgICAgICAg ICAgIGxpc3Qua2V5c1tpXSA9IDxjaGFyKj5tYWxsb2MobGVuKGtleSkgKyAxKQorICAqLworLSAg I2lmbmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05TCistICBpZiAodW5saWtlbHkoIVB5X09w dGltaXplRmxhZykpIHsKKy0gICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9 IDApKSkgeworLSAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAg ICAgIF9fUFlYX0VSUigwLCAzOTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfNywgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSgh X19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ5MCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzcpOworKyAgICBfX3B5eF90XzggPSBOVUxMOworKyAgICBpZiAoQ1lU SE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNykp KSB7CisrICAgICAgX19weXhfdF84ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF83KTsKKysg ICAgICBpZiAobGlrZWx5KF9fcHl4X3RfOCkpIHsKKysgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlv biA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzcpOworKyAgICAgICAgX19QeXhfSU5D UkVGKF9fcHl4X3RfOCk7CisrICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAg ICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzcsIGZ1bmN0aW9uKTsKKysgICAgICB9CisgICAg IH0KKy0gIH0KKy0gICNlbmRpZgorKyAgICBfX3B5eF90XzMgPSAoX19weXhfdF84KSA/IF9fUHl4 X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdl9rZXkpIDog X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzcsIF9fcHl4X3Zfa2V5KTsKKysgICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworKyAgICBpZiAodW5saWtl bHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0OTAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9f cHl4X3RfNyA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl9rZXksIF9fcHl4X3Rf Myk7CisrICAgIF9fcHl4X3RfMyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Mzk1CistICogICAgICAgICBjZGVmIGludDY0X3QgdGltZQorLSAqICAgICAgICAg YXNzZXJ0IHNlbGYuX2N0eAorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHRpbWUgPSBtcHZfZ2V0X3RpbWVfdXMoc2Vs Zi5fY3R4KQorLSAqICAgICAgICAgcmV0dXJuIHRpbWUKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQ5MQorKyAqICAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUo a2V5cyk6CisrICogICAgICAgICAgICAga2V5ID0gX3N0cmVuYyhrZXkpCisrICogICAgICAgICAg ICAgY2tleSA9IGtleSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAg ICAgbGlzdC5rZXlzW2ldID0gPGNoYXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCisrICogICAgICAg ICAgICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkKKyAgKi8KKy0gIHsKKy0gICAgICAjaWZk ZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKy0gICAgICBQeV9V TkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAgICAg I2VuZGlmCistICAgICAgLyp0cnk6Ki8geworKyAgICBfX3B5eF90XzkgPSBfX1B5eF9QeU9iamVj dF9Bc1dyaXRhYmxlU3RyaW5nKF9fcHl4X3Zfa2V5KTsgaWYgKHVubGlrZWx5KCghX19weXhfdF85 KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ5MSwgX19weXhfTDFfZXJyb3Ip CisrICAgIF9fcHl4X3ZfY2tleSA9IF9fcHl4X3RfOTsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozOTYKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgK Ky0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgdGltZSA9IG1wdl9nZXRf dGltZV91cyhzZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHJldHVybiB0aW1lCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 OTIKKysgKiAgICAgICAgICAgICBrZXkgPSBfc3RyZW5jKGtleSkKKysgKiAgICAgICAgICAgICBj a2V5ID0ga2V5CisrICogICAgICAgICAgICAgbGlzdC5rZXlzW2ldID0gPGNoYXIqPm1hbGxvYyhs ZW4oa2V5KSArIDEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICBzdHJjcHkobGlzdC5rZXlzW2ldLCBja2V5KQorKyAqICAgICAgICAgcmV0dXJuIGxpc3QKKysg Ki8KKysgICAgX19weXhfdF8xMCA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X2tleSk7IGlmICh1 bmxpa2VseShfX3B5eF90XzEwID09ICgoUHlfc3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMCwgNDky LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xMSA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6 ZV90KF9fcHl4X3ZfaSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8xMSA9PSAoUHlfc3NpemVfdCkt MSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0OTIsIF9fcHl4X0wxX2Vycm9y KQorKyAgICAoX19weXhfdl9saXN0LT5rZXlzW19fcHl4X3RfMTFdKSA9ICgoY2hhciAqKW1hbGxv YygoX19weXhfdF8xMCArIDEpKSk7CisrCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0OTMKKysgKiAgICAgICAgICAgICBja2V5ID0ga2V5CisrICogICAgICAgICAgICAg bGlzdC5rZXlzW2ldID0gPGNoYXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCisrICogICAgICAgICAg ICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgcmV0dXJuIGxpc3QKKyAgKiAKKyAgKi8KKy0gICAgICAgIF9fcHl4X3Zf dGltZSA9IG1wdl9nZXRfdGltZV91cyhfX3B5eF92X3NlbGYtPl9jdHgpOworLSAgICAgIH0KKysg ICAgX19weXhfdF8xMCA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3ZfaSk7IGlmICh1 bmxpa2VseSgoX19weXhfdF8xMCA9PSAoUHlfc3NpemVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQo KSkpIF9fUFlYX0VSUigwLCA0OTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAodm9pZCkoc3RyY3B5 KChfX3B5eF92X2xpc3QtPmtleXNbX19weXhfdF8xMF0pLCBfX3B5eF92X2NrZXkpKTsKKyAKKy0g ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk1CistICogICAgICAgICBj ZGVmIGludDY0X3QgdGltZQorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorLSAqICAgICAg ICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ICAgIHRpbWUgPSBtcHZfZ2V0X3RpbWVfdXMoc2VsZi5fY3R4KQorLSAqICAgICAgICAgcmV0dXJu IHRpbWUKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ4OQorKyAqICAg ICAgICAgICAgIHJldHVybiBsaXN0CisrICogICAgICAgICBsaXN0LmtleXMgPSA8Y2hhcioqPm1h bGxvYyhsaXN0Lm51bSkKKysgKiAgICAgICAgIGZvciBpLCBrZXkgaW4gZW51bWVyYXRlKGtleXMp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAga2V5ID0gX3N0 cmVuYyhrZXkpCisrICogICAgICAgICAgICAgY2tleSA9IGtleQorICAqLworLSAgICAgIC8qZmlu YWxseToqLyB7CistICAgICAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgICAgICAjaWZkZWYg V0lUSF9USFJFQUQKKy0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAg ICAgUHlfQkxPQ0tfVEhSRUFEUworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBf X3B5eF9MNTsKKy0gICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0w1OjsKKy0gICAgICB9CisgICB9 CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjM5NworLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAg ICAgICB0aW1lID0gbXB2X2dldF90aW1lX3VzKHNlbGYuX2N0eCkKKy0gKiAgICAgICAgIHJldHVy biB0aW1lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0OTQKKysgKiAgICAgICAgICAgICBsaXN0LmtleXNbaV0gPSA8Y2hh cio+bWFsbG9jKGxlbihrZXkpICsgMSkKKysgKiAgICAgICAgICAgICBzdHJjcHkobGlzdC5rZXlz W2ldLCBja2V5KQorKyAqICAgICAgICAgcmV0dXJuIGxpc3QgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqIAorLSAqICAgICBkZWYgc3VzcGVuZChzZWxmKToKKysgKiAgICAgY2RlZiBt cHZfbm9kZSBfcHJlcF9uYXRpdmVfdmFsdWUoc2VsZiwgdmFsdWUsIGZvcm1hdCk6CisgICovCist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJv bV9pbnQ2NF90KF9fcHl4X3ZfdGltZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDM5NywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gIF9fcHl4X3IgPSBfX3B5eF90XzE7CistICBfX3B5eF90XzEgPSAwOworKyAgX19weXhfciA9 IF9fcHl4X3ZfbGlzdDsKKyAgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Mzg2CistICogCistICogICAgIEBwcm9wZXJ0eQorLSAqICAgICBk ZWYgdGltZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg IiIiSW50ZXJuYWwgbXB2IGNsaWVudCB0aW1lLgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ4MQorKyAqICAgICAgICAgcmV0dXJuIG5vZGVfbGlzdAorICAqIAorKyAqICAg ICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbWFwKHNlbGYsIG1hcCk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWYgY2hhciogY2tleQorKyAqICAg ICAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBsaXN0CisgICovCisgCisgICAvKiBmdW5jdGlvbiBl eGl0IGNvZGUgKi8KKyAgIF9fcHl4X0wxX2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhf dF8xKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQu dGltZS5fX2dldF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFt ZSk7CistICBfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsK KysgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsKKysgIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgi dmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX3ByZXBfbm9kZV9tYXAiLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsKKysgIF9fcHl4X3IgPSAwOwor ICAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3Zfa2V5cyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfaSk7CisrICBfX1B5 eF9YREVDUkVGKF9fcHl4X3Zfa2V5KTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozOTkKKy0gKiAgICAgICAgIHJldHVybiB0aW1lCisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQ5NgorKyAqICAgICAgICAgcmV0dXJuIGxpc3QKKyAgKiAKKy0gKiAg ICAgZGVmIHN1c3BlbmQoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgICIiIldyYXBzOiBtcHZfc3VzcGVuZCIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYu X2N0eAorKyAqICAgICBjZGVmIG1wdl9ub2RlIF9wcmVwX25hdGl2ZV92YWx1ZShzZWxmLCB2YWx1 ZSwgZm9ybWF0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2Rl ZiBtcHZfbm9kZSBub2RlCisrICogICAgICAgICBub2RlLmZvcm1hdCA9IGZvcm1hdAorICAqLwor IAorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMXN1c3BlbmQoUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCistc3RhdGljIGNo YXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9zdXNwZW5kW10gPSAi V3JhcHM6IG1wdl9zdXNwZW5kIjsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xc3VzcGVuZChQeU9iamVjdCAqX19weXhfdl9zZWxmLCBD WVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0g MDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgic3VzcGVuZCAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfc3VzcGVuZCgoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKKy0KKy0gIC8q IGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 CistICByZXR1cm4gX19weXhfcjsKKy19CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfc3VzcGVuZChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5T2JqZWN0 ICpfX3B5eF9yID0gTlVMTDsKKytzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZShzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X3ZhbHVlLCBQeU9iamVjdCAqX19weXhfdl9mb3JtYXQpIHsKKysgIHN0cnVjdCBt cHZfbm9kZSBfX3B5eF92X25vZGU7CisrICBzdHJ1Y3QgbXB2X25vZGUgX19weXhfcjsKKyAgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBlbnVtIG1wdl9mb3JtYXQgX19weXhfdF8xOwor KyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8zID0g TlVMTDsKKysgIGludCBfX3B5eF90XzQ7CisrICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsK KysgIFB5X3NzaXplX3QgX19weXhfdF82OworKyAgY2hhciBjb25zdCAqX19weXhfdF83OworKyAg aW50IF9fcHl4X3RfODsKKysgIGludDY0X3QgX19weXhfdF85OworKyAgZG91YmxlIF9fcHl4X3Rf MTA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVu YW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJzdXNwZW5kIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgiX3ByZXBfbmF0aXZlX3ZhbHVlIiwgMCk7CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl92YWx1 ZSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDAxCistICogICAg IGRlZiBzdXNwZW5kKHNlbGYpOgorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zdXNwZW5kIiIi CistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgbXB2X3N1c3BlbmQo c2VsZi5fY3R4KQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5OAorKyAq ICAgICBjZGVmIG1wdl9ub2RlIF9wcmVwX25hdGl2ZV92YWx1ZShzZWxmLCB2YWx1ZSwgZm9ybWF0 KToKKysgKiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZQorKyAqICAgICAgICAgbm9kZS5mb3Jt YXQgPSBmb3JtYXQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgaWYg Zm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgorKyAqICAgICAgICAgICAgIHZhbHVlID0gX3N0 cmVuYyh2YWx1ZSkKKyAgKi8KKy0gICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUwor LSAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CistICAgIGlmICh1bmxpa2VseSgh KF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKy0gICAgICBQeUVycl9TZXROb25lKFB5RXhj X0Fzc2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIoMCwgNDAxLCBfX3B5eF9MMV9lcnJv cikKKy0gICAgfQorLSAgfQorLSAgI2VuZGlmCistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDAyCistICogICAgICAgICAiIiJXcmFwczogbXB2X3N1c3BlbmQiIiIKKy0g KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBtcHZfc3VzcGVuZChzZWxm Ll9jdHgpCistICogCistICovCistICB7CistICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAg ICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgUHlfVU5CTE9DS19USFJFQURTCistICAg ICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAgICNlbmRpZgorLSAgICAgIC8qdHJ5 OiovIHsKKysgIF9fcHl4X3RfMSA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50X0FzX2Vu dW1fX21wdl9mb3JtYXQoX19weXhfdl9mb3JtYXQpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3Vy cmVkKCkpKSBfX1BZWF9FUlIoMCwgNDk4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3Zfbm9k ZS5mb3JtYXQgPSBfX3B5eF90XzE7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDAzCistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAg ICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG1wdl9zdXNwZW5kKHNlbGYuX2N0eCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICBkZWYgcmVzdW1lKHNlbGYp OgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5OQorKyAqICAgICAgICAg Y2RlZiBtcHZfbm9kZSBub2RlCisrICogICAgICAgICBub2RlLmZvcm1hdCA9IGZvcm1hdAorKyAq ICAgICAgICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgdmFsdWUgPSBfc3RyZW5jKHZhbHVlKQorKyAq ICAgICAgICAgICAgIG5vZGUudS5zdHJpbmcgPSA8Y2hhcio+bWFsbG9jKGxlbih2YWx1ZSkgKyAx KQorICAqLworLSAgICAgICAgbXB2X3N1c3BlbmQoX19weXhfdl9zZWxmLT5fY3R4KTsKKy0gICAg ICB9CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBW X0ZPUk1BVF9TVFJJTkcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0 OTksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX3B5 eF90XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X2Zvcm1hdCwgX19weXhfdF8yLCBQ eV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMCwgNDk5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNU cnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAs IDQ5OSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKKysgIGlmIChfX3B5eF90XzQpIHsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NDAyCistICogICAgICAgICAiIiJXcmFwczogbXB2X3N1c3BlbmQi IiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIHdpdGggbm9naWw6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBtcHZfc3VzcGVu ZChzZWxmLl9jdHgpCistICogCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo1MDAKKysgKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0CisrICogICAgICAgICBpZiBm b3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CisrICogICAgICAgICAgICAgdmFsdWUgPSBfc3Ry ZW5jKHZhbHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAg bm9kZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpCisrICogICAgICAg ICAgICAgc3RyY3B5KG5vZGUudS5zdHJpbmcsIHZhbHVlKQorICAqLworLSAgICAgIC8qZmluYWxs eToqLyB7CistICAgICAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgICAgICAjaWZkZWYgV0lU SF9USFJFQUQKKy0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAg UHlfQkxPQ0tfVEhSRUFEUworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5 eF9MNTsKKy0gICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0w1OjsKKysgICAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1MDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdF81ID0gTlVMTDsKKysgICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworKyAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Cisr ICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CisrICAgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzUpOworKyAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAg ICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisgICAgICAgfQorLSAg fQorKyAgICB9CisrICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3Rf Q2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF81LCBfX3B5eF92X3ZhbHVlKSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X3ZhbHVlKTsKKysgICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCA1MDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8zKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl92YWx1ZSwgX19weXhfdF8zKTsK KysgICAgX19weXhfdF8zID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozOTkKKy0gKiAgICAgICAgIHJldHVybiB0aW1lCistICogCistICogICAgIGRlZiBzdXNw ZW5kKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJX cmFwczogbXB2X3N1c3BlbmQiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwMQorKyAqICAgICAgICAgaWYgZm9y bWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgorKyAqICAgICAgICAgICAgIHZhbHVlID0gX3N0cmVu Yyh2YWx1ZSkKKysgKiAgICAgICAgICAgICBub2RlLnUuc3RyaW5nID0gPGNoYXIqPm1hbGxvYyhs ZW4odmFsdWUpICsgMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIHN0cmNweShub2RlLnUuc3RyaW5nLCB2YWx1ZSkKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0 ID09IE1QVl9GT1JNQVRfRkxBRzoKKyAgKi8KKysgICAgX19weXhfdF82ID0gUHlPYmplY3RfTGVu Z3RoKF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtlbHkoX19weXhfdF82ID09ICgoUHlfc3NpemVf dCktMSkpKSBfX1BZWF9FUlIoMCwgNTAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdl9u b2RlLnUuc3RyaW5nID0gKChjaGFyICopbWFsbG9jKChfX3B5eF90XzYgKyAxKSkpOworIAorLSAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5D UkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0g IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuc3VzcGVuZCIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhf ciA9IE5VTEw7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKy0g IF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQor LQorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MDUKKy0gKiAgICAgICAgICAg ICBtcHZfc3VzcGVuZChzZWxmLl9jdHgpCistICogCistICogICAgIGRlZiByZXN1bWUoc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZf cmVzdW1lIiIiCistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDIKKysgKiAgICAgICAgICAgICB2YWx1ZSA9IF9zdHJl bmModmFsdWUpCisrICogICAgICAgICAgICAgbm9kZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2Mo bGVuKHZhbHVlKSArIDEpCisrICogICAgICAgICAgICAgc3RyY3B5KG5vZGUudS5zdHJpbmcsIHZh bHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBlbGlmIGZvcm1h dCA9PSBNUFZfRk9STUFUX0ZMQUc6CisrICogICAgICAgICAgICAgbm9kZS51LmZsYWcgPSAxIGlm IHZhbHVlIGVsc2UgMAorICAqLworKyAgICBfX3B5eF90XzcgPSBfX1B5eF9QeU9iamVjdF9Bc1N0 cmluZyhfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF83KSAmJiBQeUVycl9P Y2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDUwMiwgX19weXhfTDFfZXJyb3IpCisrICAgICh2b2lk KShzdHJjcHkoX19weXhfdl9ub2RlLnUuc3RyaW5nLCBfX3B5eF90XzcpKTsKKyAKKy0vKiBQeXRo b24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzNyZXN1bWUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCistc3RhdGljIGNoYXIgX19weXhfZG9j Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8ycmVzdW1lW10gPSAiV3JhcHM6IG1wdl9y ZXN1bWUiOworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzNyZXN1bWUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQ eU9iamVjdCAqdW51c2VkKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJlc3Vt ZSAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMnJlc3VtZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19w eXhfcjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTkKKysg KiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZQorKyAqICAgICAgICAgbm9kZS5mb3JtYXQgPSBm b3JtYXQKKysgKiAgICAgICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHZhbHVlID0gX3N0cmVuYyh2 YWx1ZSkKKysgKiAgICAgICAgICAgICBub2RlLnUuc3RyaW5nID0gPGNoYXIqPm1hbGxvYyhsZW4o dmFsdWUpICsgMSkKKysgKi8KKysgICAgZ290byBfX3B5eF9MMzsKKysgIH0KKyAKKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8ycmVzdW1l KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zf c2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19w eXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoInJlc3VtZSIsIDApOworKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjUwMworKyAqICAgICAgICAgICAgIG5vZGUudS5zdHJpbmcgPSA8Y2hh cio+bWFsbG9jKGxlbih2YWx1ZSkgKyAxKQorKyAqICAgICAgICAgICAgIHN0cmNweShub2RlLnUu c3RyaW5nLCB2YWx1ZSkKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxB RzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIG5vZGUudS5m bGFnID0gMSBpZiB2YWx1ZSBlbHNlIDAKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9G T1JNQVRfSU5UNjQ6CisrICovCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9GTEFHKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBf X1BZWF9FUlIoMCwgNTAzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzMpOworKyAgX19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQs IF9fcHl4X3RfMywgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUwMywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIF9fcHl4X3RfNCA9IF9fUHl4 X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF80IDwgMCkp IF9fUFlYX0VSUigwLCA1MDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICBpZiAoX19weXhfdF80KSB7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDA3CistICogICAgIGRlZiByZXN1bWUoc2VsZik6 CistICogICAgICAgICAiIiJXcmFwczogbXB2X3Jlc3VtZSIiIgorLSAqICAgICAgICAgYXNzZXJ0 IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB3aXRo IG5vZ2lsOgorLSAqICAgICAgICAgICAgIG1wdl9yZXN1bWUoc2VsZi5fY3R4KQorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA0CisrICogICAgICAgICAgICAgc3RyY3B5 KG5vZGUudS5zdHJpbmcsIHZhbHVlKQorKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZP Uk1BVF9GTEFHOgorKyAqICAgICAgICAgICAgIG5vZGUudS5mbGFnID0gMSBpZiB2YWx1ZSBlbHNl IDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZWxpZiBmb3JtYXQg PT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKysgKiAgICAgICAgICAgICBub2RlLnUuaW50NjQgPSB2YWx1 ZQorICAqLworLSAgI2lmbmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05TCistICBpZiAodW5s aWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKy0gICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9z ZWxmLT5fY3R4ICE9IDApKSkgeworLSAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9u RXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCA0MDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl92YWx1ZSk7IGlmICh1bmxp a2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwNCwgX19weXhfTDFfZXJyb3IpCisr ICAgIGlmIChfX3B5eF90XzQpIHsKKysgICAgICBfX3B5eF90XzggPSAxOworKyAgICB9IGVsc2Ug eworKyAgICAgIF9fcHl4X3RfOCA9IDA7CisgICAgIH0KKysgICAgX19weXhfdl9ub2RlLnUuZmxh ZyA9IF9fcHl4X3RfODsKKysKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjUwMworKyAqICAgICAgICAgICAgIG5vZGUudS5zdHJpbmcgPSA8Y2hhcio+bWFsbG9jKGxlbih2 YWx1ZSkgKyAxKQorKyAqICAgICAgICAgICAgIHN0cmNweShub2RlLnUuc3RyaW5nLCB2YWx1ZSkK KysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIG5vZGUudS5mbGFnID0gMSBpZiB2YWx1 ZSBlbHNlIDAKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6Cisr ICovCisrICAgIGdvdG8gX19weXhfTDM7CisgICB9CistICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MDgKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZf cmVzdW1lIiIiCistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAgICB3aXRo IG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgbXB2 X3Jlc3VtZShzZWxmLl9jdHgpCistICogCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTA1CisrICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6Cisr ICogICAgICAgICAgICAgbm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVsc2UgMAorKyAqICAgICAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZhbHVlCisrICogICAgICAg ICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKyAgKi8KKy0gIHsKKy0gICAgICAj aWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKy0gICAgICBQ eV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAg ICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8geworKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfSU5UNjQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA1MDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09U UkVGKF9fcHl4X3RfMik7CisrICBfX3B5eF90XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5 eF92X2Zvcm1hdCwgX19weXhfdF8yLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTA1LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhf dF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5 eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwNSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIGlmIChfX3B5eF90XzQpIHsKKyAK Ky0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MDkKKy0gKiAgICAg ICAgIGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAg ICAgICAgbXB2X3Jlc3VtZShzZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAKKy0gKiAgICAgQF9lcnJvcnMKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjUwNgorKyAqICAgICAgICAgICAgIG5vZGUudS5mbGFnID0gMSBpZiB2YWx1ZSBlbHNl IDAKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6CisrICogICAg ICAgICAgICAgbm9kZS51LmludDY0ID0gdmFsdWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisrICogICAg ICAgICAgICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQorICAqLworLSAgICAgICAgbXB2X3Jlc3Vt ZShfX3B5eF92X3NlbGYtPl9jdHgpOworLSAgICAgIH0KKysgICAgX19weXhfdF85ID0gX19QeXhf UHlJbnRfQXNfaW50NjRfdChfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5KChfX3B5eF90Xzkg PT0gKChpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA1MDYs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF92X25vZGUudS5pbnQ2NCA9IF9fcHl4X3RfOTsK KyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDA4CistICogICAg ICAgICAiIiJXcmFwczogbXB2X3Jlc3VtZSIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgICAgIG1wdl9yZXN1bWUoc2VsZi5fY3R4KQorLSAqIAorKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA1CisrICogICAgICAgICBlbGlmIGZvcm1hdCA9 PSBNUFZfRk9STUFUX0ZMQUc6CisrICogICAgICAgICAgICAgbm9kZS51LmZsYWcgPSAxIGlmIHZh bHVlIGVsc2UgMAorKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2 NCA9IHZhbHVlCisrICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToK KyAgKi8KKy0gICAgICAvKmZpbmFsbHk6Ki8geworLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sK Ky0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxf Rm9yZ2V0KCk7CistICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgI2VuZGlm CistICAgICAgICAgIGdvdG8gX19weXhfTDU7CistICAgICAgICB9CistICAgICAgICBfX3B5eF9M NTo7CistICAgICAgfQorKyAgICBnb3RvIF9fcHl4X0wzOworICAgfQorIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQwNQorLSAqICAgICAgICAgICAgIG1wdl9zdXNwZW5k KHNlbGYuX2N0eCkKKy0gKiAKKy0gKiAgICAgZGVmIHJlc3VtZShzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9yZXN1bWUiIiIKKy0g KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1MDcKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6 CisrICogICAgICAgICAgICAgbm9kZS51LmludDY0ID0gdmFsdWUKKysgKiAgICAgICAgIGVsaWYg Zm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICAgICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQorKyAqICAgICAgICAgZWxp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorICAqLworKyAgX19weXhfdF8zID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfRE9VQkxFKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTA3LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgX19weXhfdF8yID0gUHlPYmplY3RfUmlj aENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMywgUHlfRVEpOyBfX1B5eF9YR09UUkVG KF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUwNywg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzIpOyBpZiAo dW5saWtlbHkoX19weXhfdF80IDwgMCkpIF9fUFlYX0VSUigwLCA1MDcsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICBpZiAoX19w eXhfdF80KSB7CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQ eV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworLSAgX19w eXhfTDFfZXJyb3I6OworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYu Q29udGV4dC5yZXN1bWUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworLSAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVS RUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVy biBfX3B5eF9yOworLX0KKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUw OAorKyAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZhbHVlCisrICogICAgICAgICBlbGlm IGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKysgKiAgICAgICAgICAgICBub2RlLnUuZG91 YmxlXyA9IHZhbHVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGVs aWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKKysgKiAgICAgICAgICAgICBub2Rl LnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0KHZhbHVlKQorKyAqLworKyAgICBfX3B5eF90 XzEwID0gX19weXhfUHlGbG9hdF9Bc0RvdWJsZShfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5 KChfX3B5eF90XzEwID09IChkb3VibGUpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9F UlIoMCwgNTA4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdl9ub2RlLnUuZG91YmxlXyA9 IF9fcHl4X3RfMTA7CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQxMgor LSAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgcmVxdWVzdF9ldmVudChzZWxmLCBl dmVudCwgZW5hYmxlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg IiIiRW5hYmxlIG9yIGRpc2FibGUgYSBnaXZlbiBldmVudC4KKy0gKiAKKysgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwNworKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0g TVBWX0ZPUk1BVF9JTlQ2NDoKKysgKiAgICAgICAgICAgICBub2RlLnUuaW50NjQgPSB2YWx1ZQor KyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBub2RlLnUuZG91YmxlXyA9IHZhbHVl CisrICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6CisgICov CistCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF81cmVxdWVzdF9ldmVudChQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAv KnByb3RvKi8KKy1zdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzRyZXF1ZXN0X2V2ZW50W10gPSAiRW5hYmxlIG9yIGRpc2FibGUgYSBnaXZlbiBldmVu dC5cblxuICAgICAgICBBcmd1bWVudHM6XG4gICAgICAgIGV2ZW50IC0gU2VlIEV2ZW50c1xuICAg ICAgICBlbmFibGUgLSBUcnVlIHRvIGVuYWJsZSwgRmFsc2UgdG8gZGlzYWJsZVxuXG4gICAgICAg IFdyYXBzOiBtcHZfcmVxdWVzdF9ldmVudFxuICAgICAgICAiOworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzVyZXF1ZXN0X2V2ZW50KFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19w eXhfa3dkcykgeworLSAgUHlPYmplY3QgKl9fcHl4X3ZfZXZlbnQgPSAwOworLSAgUHlPYmplY3Qg Kl9fcHl4X3ZfZW5hYmxlID0gMDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29uc3Qg Y2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwor LSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK Ky0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJyZXF1ZXN0X2V2ZW50ICh3cmFwcGVyKSIs IDApOworLSAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7 Jl9fcHl4X25fc19ldmVudCwmX19weXhfbl9zX2VuYWJsZSwwfTsKKy0gICAgUHlPYmplY3QqIHZh bHVlc1syXSA9IHswLDB9OworLSAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKKy0gICAg ICBQeV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9 IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CistICAgICAgc3dpdGNoIChwb3NfYXJncykg eworLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9h cmdzLCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6 IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAgICAgIGRl ZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQorLSAgICAgIGt3 X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdz KSB7CistICAgICAgICBjYXNlICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0g X19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2V2ZW50KSkgIT0g MCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJv cjsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6CistICAg ICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5 eF9rd2RzLCBfX3B5eF9uX3NfZW5hYmxlKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVs c2UgeworLSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgicmVxdWVzdF9ldmVu dCIsIDEsIDIsIDIsIDEpOyBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MM19lcnJvcikKKy0gICAg ICAgIH0KKy0gICAgICB9CistICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAg ICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2Rz LCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAicmVxdWVzdF9ldmVudCIp IDwgMCkpIF9fUFlYX0VSUigwLCA0MTIsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAgIH0KKy0gICAg fSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9IDIpIHsKKy0gICAgICBn b3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICB9IGVsc2UgeworLSAgICAgIHZhbHVl c1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgdmFsdWVzWzFd ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgfQorLSAgICBfX3B5eF92 X2V2ZW50ID0gdmFsdWVzWzBdOworLSAgICBfX3B5eF92X2VuYWJsZSA9IHZhbHVlc1sxXTsKKysg ICAgZ290byBfX3B5eF9MMzsKKyAgIH0KKy0gIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNr aW5nX2RvbmU7CistICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFy Z3R1cGxlSW52YWxpZCgicmVxdWVzdF9ldmVudCIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUo X19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MM19lcnJvcikKKy0gIF9fcHl4 X0wzX2Vycm9yOjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNv bnRleHQucmVxdWVzdF9ldmVudCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhf ZmlsZW5hbWUpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4g TlVMTDsKKy0gIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3Ig PSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNHJlcXVlc3RfZXZlbnQo KChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhf dl9zZWxmKSwgX19weXhfdl9ldmVudCwgX19weXhfdl9lbmFibGUpOworLQorLSAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJl dHVybiBfX3B5eF9yOworLX0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF80cmVxdWVzdF9ldmVudChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X2V2ZW50LCBQeU9iamVjdCAqX19weXhfdl9lbmFibGUpIHsKKy0gIGludCBfX3B5eF92X2Vu YWJsZV9pOworLSAgaW50IF9fcHl4X3ZfZXJyOworLSAgZW51bSBtcHZfZXZlbnRfaWQgX19weXhf dl9ldmVudF9pZDsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCistICBpbnQgX19weXhfdF8xOworLSAgaW50IF9fcHl4X3RfMjsKKy0g IGVudW0gbXB2X2V2ZW50X2lkIF9fcHl4X3RfMzsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBO VUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxl bmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgicmVxdWVzdF9ldmVudCIsIDApOworKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjUwOQorKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1B VF9ET1VCTEU6CisrICogICAgICAgICAgICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQorKyAqICAg ICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVw X25vZGVfbGlzdCh2YWx1ZSkKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRf Tk9ERV9NQVA6CisrICovCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21w dl9mb3JtYXQoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgNTA5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworKyAgX19weXhfdF8zID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3Jt YXQsIF9fcHl4X3RfMiwgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7IGlmICh1bmxp a2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUwOSwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fcHl4X3RfNCA9IF9f UHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoX19weXhfdF80IDwg MCkpIF9fUFlYX0VSUigwLCA1MDksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICBpZiAoX19weXhfdF80KSB7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDIxCistICogICAgICAgICBXcmFwczogbXB2 X3JlcXVlc3RfZXZlbnQKKy0gKiAgICAgICAgICIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYu X2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmIGludCBl bmFibGVfaSA9IDEgaWYgZW5hYmxlIGVsc2UgMAorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTAKKysgKiAgICAgICAgICAg ICBub2RlLnUuZG91YmxlXyA9IHZhbHVlCisrICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZf Rk9STUFUX05PREVfQVJSQVk6CisrICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9w cmVwX25vZGVfbGlzdCh2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKysgKiAgICAgICAgICAg ICBub2RlLnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9tYXAodmFsdWUpCisgICovCistICAjaWZu ZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VSVElPTlMKKy0gIGlmICh1bmxpa2VseSghUHlfT3B0aW1p emVGbGFnKSkgeworLSAgICBpZiAodW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkp KSB7CistICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7CistICAgICAg X19QWVhfRVJSKDAsIDQyMSwgX19weXhfTDFfZXJyb3IpCistICAgIH0KKy0gIH0KKy0gICNlbmRp ZgorKyAgICBfX3B5eF92X25vZGUudS5saXN0ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYikt Pl9wcmVwX25vZGVfbGlzdChfX3B5eF92X3NlbGYsIF9fcHl4X3ZfdmFsdWUpOworIAorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyMgorLSAqICAgICAgICAgIiIiCistICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAgICBjZGVmIGludCBlbmFibGVfaSA9 IDEgaWYgZW5hYmxlIGVsc2UgMCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBjZGVmIGludCBlcnIKKy0gKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lkIGV2ZW50X2lk ID0gZXZlbnQKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwOQorKyAq ICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisrICogICAgICAgICAg ICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQorKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBW X0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbGlzdCh2YWx1ZSkKKysgKiAg ICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6CisgICovCistICBfX3B5 eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9lbmFibGUpOyBpZiAodW5saWtl bHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA0MjIsIF9fcHl4X0wxX2Vycm9yKQorLSAg aWYgKF9fcHl4X3RfMikgeworLSAgICBfX3B5eF90XzEgPSAxOworLSAgfSBlbHNlIHsKKy0gICAg X19weXhfdF8xID0gMDsKKysgICAgZ290byBfX3B5eF9MMzsKKyAgIH0KKy0gIF9fcHl4X3ZfZW5h YmxlX2kgPSBfX3B5eF90XzE7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDI0CistICogICAgICAgICBjZGVmIGludCBlbmFibGVfaSA9IDEgaWYgZW5hYmxlIGVsc2Ug MAorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCistICogICAgICAgICBjZGVmIG1wdl9ldmVudF9p ZCBldmVudF9pZCA9IGV2ZW50ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2X3JlcXVlc3RfZXZlbnQo c2VsZi5fY3R4LCBldmVudF9pZCwgZW5hYmxlX2kpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTExCisrICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05P REVfQVJSQVk6CisrICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVf bGlzdCh2YWx1ZSkKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9N QVA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBub2RlLnUu bGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9tYXAodmFsdWUpCisrICogICAgICAgICBlbHNlOgorICAq LworLSAgX19weXhfdF8zID0gKChlbnVtIG1wdl9ldmVudF9pZClfX1B5eF9QeUludF9Bc19lbnVt X19tcHZfZXZlbnRfaWQoX19weXhfdl9ldmVudCkpOyBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCA0MjQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdl9ldmVu dF9pZCA9IF9fcHl4X3RfMzsKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9f bXB2X2Zvcm1hdChNUFZfRk9STUFUX05PREVfTUFQKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzMpOworKyAgX19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3Jt YXQsIF9fcHl4X3RfMywgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUxMSwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIF9fcHl4X3RfNCA9IF9f UHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF80IDwg MCkpIF9fUFlYX0VSUigwLCA1MTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICBpZiAoX19weXhfdF80KSB7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDI1CistICogICAgICAgICBjZGVmIGludCBl cnIKKy0gKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lkIGV2ZW50X2lkID0gZXZlbnQKKy0gKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9ldmVudChzZWxmLl9jdHgsIGV2ZW50X2lkLCBlbmFi bGVfaSkKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjUxMgorKyAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5fcHJl cF9ub2RlX2xpc3QodmFsdWUpCisrICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X05PREVfTUFQOgorKyAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5fcHJlcF9ub2Rl X21hcCh2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZWxz ZToKKysgKiAgICAgICAgICAgICBub2RlLmZvcm1hdCA9IE1QVl9GT1JNQVRfTk9ORQorICAqLwor LSAgeworLSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9z YXZlOworLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVt ZW1iZXIoKTsKKy0gICAgICAjZW5kaWYKKy0gICAgICAvKnRyeToqLyB7CisrICAgIF9fcHl4X3Zf bm9kZS51Lmxpc3QgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbm9kZV9tYXAo X19weXhfdl9zZWxmLCBfX3B5eF92X3ZhbHVlKTsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0MjYKKy0gKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lkIGV2 ZW50X2lkID0gZXZlbnQKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAg ZXJyID0gbXB2X3JlcXVlc3RfZXZlbnQoc2VsZi5fY3R4LCBldmVudF9pZCwgZW5hYmxlX2kpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKy0gKiAK KysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxMQorKyAqICAgICAgICAg ZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorKyAqICAgICAgICAgICAgIG5v ZGUudS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QodmFsdWUpCisrICogICAgICAgICBlbGlm IGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbWFwKHZh bHVlKQorKyAqICAgICAgICAgZWxzZToKKyAgKi8KKy0gICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2 X3JlcXVlc3RfZXZlbnQoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X2V2ZW50X2lkLCBfX3B5 eF92X2VuYWJsZV9pKTsKKy0gICAgICB9CisrICAgIGdvdG8gX19weXhfTDM7CisrICB9CisgCist ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyNQorLSAqICAgICAgICAg Y2RlZiBpbnQgZXJyCistICogICAgICAgICBjZGVmIG1wdl9ldmVudF9pZCBldmVudF9pZCA9IGV2 ZW50CistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICAgICAgZXJyID0gbXB2X3JlcXVlc3RfZXZlbnQoc2VsZi5fY3R4LCBldmVu dF9pZCwgZW5hYmxlX2kpCistICogICAgICAgICByZXR1cm4gZXJyCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NTE0CisrICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBz ZWxmLl9wcmVwX25vZGVfbWFwKHZhbHVlKQorKyAqICAgICAgICAgZWxzZToKKysgKiAgICAgICAg ICAgICBub2RlLmZvcm1hdCA9IE1QVl9GT1JNQVRfTk9ORSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICByZXR1cm4gbm9kZQorKyAqIAorICAqLworLSAgICAgIC8qZmlu YWxseToqLyB7CistICAgICAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgICAgICAjaWZkZWYg V0lUSF9USFJFQUQKKy0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAg ICAgUHlfQkxPQ0tfVEhSRUFEUworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBf X3B5eF9MNTsKKy0gICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0w1OjsKKy0gICAgICB9CisrICAv KmVsc2UqLyB7CisrICAgIF9fcHl4X3Zfbm9kZS5mb3JtYXQgPSBNUFZfRk9STUFUX05PTkU7Cisg ICB9CisrICBfX3B5eF9MMzo7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDI3CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVyciA9IG1w dl9yZXF1ZXN0X2V2ZW50KHNlbGYuX2N0eCwgZXZlbnRfaWQsIGVuYWJsZV9pKQorLSAqICAgICAg ICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTE1CisrICogICAgICAgICBlbHNlOgorKyAqICAgICAg ICAgICAgIG5vZGUuZm9ybWF0ID0gTVBWX0ZPUk1BVF9OT05FCisrICogICAgICAgICByZXR1cm4g bm9kZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCistICogICAgIEBfZXJyb3Jz CisrICogICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3ZhbHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOgor ICAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5 SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgNDI3LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzQp OworLSAgX19weXhfciA9IF9fcHl4X3RfNDsKKy0gIF9fcHl4X3RfNCA9IDA7CisrICBfX3B5eF9y ID0gX19weXhfdl9ub2RlOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0MTIKKy0gKiAKKy0gKiAgICAgQF9lcnJvcnMKKy0gKiAgICAg ZGVmIHJlcXVlc3RfZXZlbnQoc2VsZiwgZXZlbnQsIGVuYWJsZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICIiIkVuYWJsZSBvciBkaXNhYmxlIGEgZ2l2ZW4gZXZl bnQuCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk2CisrICogICAgICAg ICByZXR1cm4gbGlzdAorICAqIAorKyAqICAgICBjZGVmIG1wdl9ub2RlIF9wcmVwX25hdGl2ZV92 YWx1ZShzZWxmLCB2YWx1ZSwgZm9ybWF0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlCisrICogICAgICAgICBub2RlLmZvcm1hdCA9 IGZvcm1hdAorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX3B5eF9M MV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9BZGRUcmFj ZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnJlcXVlc3RfZXZlbnQiLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxM OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzMpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworKyAgX19QeXhfV3JpdGVVbnJhaXNh YmxlKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5fcHJlcF9uYXRpdmVfdmFsdWUiLCBfX3B5 eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsKKysgIF9fUHl4 X3ByZXRlbmRfdG9faW5pdGlhbGl6ZSgmX19weXhfcik7CisgICBfX3B5eF9MMDo7CistICBfX1B5 eF9YR0lWRVJFRihfX3B5eF9yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl92YWx1ZSk7Cisg ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0K KyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMwCisrLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjUxNworKyAqICAgICAgICAgcmV0dXJuIG5vZGUKKyAgKiAK Ky0gKiAgICAgQF9lcnJvcnMKKy0gKiAgICAgZGVmIHNldF9sb2dfbGV2ZWwoc2VsZiwgbG9nbGV2 ZWwpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFwczog bXB2X3JlcXVlc3RfbG9nX21lc3NhZ2VzIiIiCistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4 CisrICogICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3ZhbHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBpZiBub2RlLmZvcm1hdCBp biAoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBNUFZfRk9STUFUX05PREVfTUFQKToKKysgKiAgICAg ICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOgorICAqLworIAorLS8qIFB5 dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfN3NldF9sb2dfbGV2ZWwoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3ZfbG9nbGV2ZWwpOyAvKnByb3RvKi8KKy1zdGF0aWMgY2hhciBfX3B5 eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZzZXRfbG9nX2xldmVsW10gPSAi V3JhcHM6IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyI7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfN3NldF9sb2dfbGV2ZWwoUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfbG9nbGV2ZWwpIHsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X2xvZ19sZXZlbCAod3JhcHBlcikiLCAwKTsKKy0g IF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNnNldF9s b2dfbGV2ZWwoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfbG9nbGV2ZWwpKTsKKy0KKy0g IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNnNldF9sb2dfbGV2ZWwoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9sb2dsZXZlbCkgeworLSAgY2hhciBjb25zdCAqX19weXhfdl9sb2dsZXZl bF9jOworLSAgaW50IF9fcHl4X3ZfZXJyOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX2ZyZWVfbmF0aXZlX3ZhbHVlKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgc3RydWN0 IG1wdl9ub2RlIF9fcHl4X3Zfbm9kZSkgeworKyAgaW50IF9fcHl4X3ZfaTsKKyAgIFB5T2JqZWN0 ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9i amVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwor LSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CistICBjaGFyIGNvbnN0ICpfX3B5eF90XzQ7 CisrICBpbnQgX19weXhfdF8xOworKyAgaW50IF9fcHl4X3RfMjsKKysgIGludCBfX3B5eF90XzM7 CisrICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKysgIGludCBfX3B5eF90XzU7CisgICBp bnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVM TDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJzZXRfbG9nX2xldmVsIiwgMCk7CistICBfX1B5eF9JTkNSRUYoX19weXhfdl9sb2dsZXZl bCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2ZyZWVfbmF0aXZlX3ZhbHVlIiwg MCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMyCistICogICAg IGRlZiBzZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xldmVsKToKKy0gKiAgICAgICAgICIiIldyYXBz OiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9j dHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgbG9nbGV2ZWwgPSBf c3RyZW5jKGxvZ2xldmVsKQorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBsb2dsZXZlbF9j ID0gbG9nbGV2ZWwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTgKKysg KiAKKysgKiAgICAgY2RlZiBfZnJlZV9uYXRpdmVfdmFsdWUoc2VsZiwgbXB2X25vZGUgbm9kZSk6 CisrICogICAgICAgICBpZiBub2RlLmZvcm1hdCBpbiAoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBN UFZfRk9STUFUX05PREVfTUFQKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6CisrICogICAgICAgICAg ICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKG5vZGUudS5saXN0LnZhbHVlc1tpXSkKKyAg Ki8KKy0gICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUworLSAgaWYgKHVubGlrZWx5 KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CistICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+ X2N0eCAhPSAwKSkpIHsKKy0gICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9y KTsKKy0gICAgICBfX1BZWF9FUlIoMCwgNDMyLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgfQorLSAg fQorLSAgI2VuZGlmCisrICBzd2l0Y2ggKF9fcHl4X3Zfbm9kZS5mb3JtYXQpIHsKKysgICAgY2Fz ZSBNUFZfRk9STUFUX05PREVfQVJSQVk6CisrICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX01BUDoK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzMKKy0gKiAgICAgICAg ICIiIldyYXBzOiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKKy0gKiAgICAgICAgIGFzc2Vy dCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIGxvZ2xldmVsID0gX3N0cmVuYyhsb2dsZXZlbCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBs b2dsZXZlbF9jID0gbG9nbGV2ZWwKKy0gKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTE5CisrICogICAgIGNkZWYgX2ZyZWVfbmF0 aXZlX3ZhbHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOgorKyAqICAgICAgICAgaWYgbm9kZS5mb3Jt YXQgaW4gKE1QVl9GT1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6CisrICog ICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92 YWx1ZShub2RlLnUubGlzdC52YWx1ZXNbaV0pCisrICogICAgICAgICAgICAgZnJlZShub2RlLnUu bGlzdC52YWx1ZXMpCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf MiwgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDQzMywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0g IF9fcHl4X3RfMyA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlr ZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4X3RfMyA9IFB5TWV0 aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkgewor LSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90 XzIpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOworLSAgICAgIF9fUHl4X0lOQ1JF RihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9u KTsKKysgICAgX19weXhfdF8xID0gX19weXhfdl9ub2RlLnUubGlzdC0+bnVtOworKyAgICBfX3B5 eF90XzIgPSBfX3B5eF90XzE7CisrICAgIGZvciAoX19weXhfdF8zID0gMDsgX19weXhfdF8zIDwg X19weXhfdF8yOyBfX3B5eF90XzMrPTEpIHsKKysgICAgICBfX3B5eF92X2kgPSBfX3B5eF90XzM7 CisrCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyMAorKyAqICAg ICAgICAgaWYgbm9kZS5mb3JtYXQgaW4gKE1QVl9GT1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZPUk1B VF9OT0RFX01BUCk6CisrICogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3Qu bnVtKToKKysgKiAgICAgICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZS51 Lmxpc3QudmFsdWVzW2ldKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICAgICAgZnJlZShub2RlLnUubGlzdC52YWx1ZXMpCisrICogICAgICAgICAgICAgaWYgbm9kZS5m b3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKysgKi8KKysgICAgICBfX3B5eF90XzQgPSAo KHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICop X19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2Vs ZiwgKF9fcHl4X3Zfbm9kZS51Lmxpc3QtPnZhbHVlc1tfX3B5eF92X2ldKSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDUyMCwgX19weXhfTDFfZXJyb3IpCisrICAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7 IF9fcHl4X3RfNCA9IDA7CisgICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzMp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92 X2xvZ2xldmVsKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92 X2xvZ2xldmVsKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsK Ky0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQzMywgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X2xvZ2xl dmVsLCBfX3B5eF90XzEpOworLSAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0MzQKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKy0g KiAgICAgICAgIGxvZ2xldmVsID0gX3N0cmVuYyhsb2dsZXZlbCkKKy0gKiAgICAgICAgIGNkZWYg Y29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgaW50IGVycgorLSAqICAgICAgICAgd2l0aCBub2dpbDoK KysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyMQorKyAqICAgICAgICAg ICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6CisrICogICAgICAgICAgICAgICAg IHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKG5vZGUudS5saXN0LnZhbHVlc1tpXSkKKysgKiAgICAg ICAgICAgICBmcmVlKG5vZGUudS5saXN0LnZhbHVlcykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9N QVA6CisrICogICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6 CisgICovCistICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X2xv Z2xldmVsKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF80KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDAsIDQzNCwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF92X2xvZ2xldmVsX2Mg PSBfX3B5eF90XzQ7CisrICAgIGZyZWUoX19weXhfdl9ub2RlLnUubGlzdC0+dmFsdWVzKTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzYKKy0gKiAgICAgICAgIGNk ZWYgY29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsCistICogICAgICAgICBjZGVmIGlu dCBlcnIKKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMoc2VsZi5f Y3R4LCBsb2dsZXZlbF9jKQorLSAqICAgICAgICAgcmV0dXJuIGVycgorKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTIyCisrICogICAgICAgICAgICAgICAgIHNlbGYuX2Zy ZWVfbmF0aXZlX3ZhbHVlKG5vZGUudS5saXN0LnZhbHVlc1tpXSkKKysgKiAgICAgICAgICAgICBm cmVlKG5vZGUudS5saXN0LnZhbHVlcykKKysgKiAgICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9 PSBNUFZfRk9STUFUX05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6CisrICogICAg ICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXNbaV0pCisgICovCistICB7Cist ICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7Cist ICAgICAgUHlfVU5CTE9DS19USFJFQURTCistICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigp OworLSAgICAgICNlbmRpZgorLSAgICAgIC8qdHJ5OiovIHsKKysgICAgX19weXhfdF81ID0gKChf X3B5eF92X25vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVApICE9IDApOworKyAgICBp ZiAoX19weXhfdF81KSB7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NDM3CistICogICAgICAgICBjZGVmIGludCBlcnIKKy0gKiAgICAgICAgIHdpdGggbm9n aWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2X3JlcXVlc3RfbG9nX21lc3NhZ2VzKHNlbGYu X2N0eCwgbG9nbGV2ZWxfYykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgcmV0dXJuIGVycgorLSAqIAorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1MjMKKysgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LnZhbHVlcykKKysgKiAg ICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorKyAqICAg ICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5s aXN0LmtleXNbaV0pCisrICogICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5cykK KyAgKi8KKy0gICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X3JlcXVlc3RfbG9nX21lc3NhZ2VzKF9f cHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9sb2dsZXZlbF9jKTsKKy0gICAgICB9CisrICAgICAg X19weXhfdF8xID0gX19weXhfdl9ub2RlLnUubGlzdC0+bnVtOworKyAgICAgIF9fcHl4X3RfMiA9 IF9fcHl4X3RfMTsKKysgICAgICBmb3IgKF9fcHl4X3RfMyA9IDA7IF9fcHl4X3RfMyA8IF9fcHl4 X3RfMjsgX19weXhfdF8zKz0xKSB7CisrICAgICAgICBfX3B5eF92X2kgPSBfX3B5eF90XzM7Cisg CistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzNgorLSAqICAgICAg ICAgY2RlZiBjb25zdCBjaGFyKiBsb2dsZXZlbF9jID0gbG9nbGV2ZWwKKy0gKiAgICAgICAgIGNk ZWYgaW50IGVycgorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyhz ZWxmLl9jdHgsIGxvZ2xldmVsX2MpCistICogICAgICAgICByZXR1cm4gZXJyCisrICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTI0CisrICogICAgICAgICAgICAgaWYg bm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKysgKiAgICAgICAgICAgICAgICAg Zm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKKysgKiAgICAgICAgICAgICAgICAgICAg IGZyZWUobm9kZS51Lmxpc3Qua2V5c1tpXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXMpCisrICogICAgICAgICAg ICAgZnJlZShub2RlLnUubGlzdCkKKyAgKi8KKy0gICAgICAvKmZpbmFsbHk6Ki8geworLSAgICAg ICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAg ICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CistICAgICAgICAgIFB5X0JMT0NLX1RIUkVB RFMKKy0gICAgICAgICAgI2VuZGlmCistICAgICAgICAgIGdvdG8gX19weXhfTDU7CistICAgICAg ICB9CistICAgICAgICBfX3B5eF9MNTo7CisrICAgICAgICBmcmVlKChfX3B5eF92X25vZGUudS5s aXN0LT5rZXlzW19fcHl4X3ZfaV0pKTsKKyAgICAgICB9CistICB9CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDM4CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAq ICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyhzZWxmLl9jdHgsIGxv Z2xldmVsX2MpCistICogICAgICAgICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAKKy0gKiAgICAgQF9lcnJvcnMKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTI1CisrICogICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5v ZGUudS5saXN0Lm51bSk6CisrICogICAgICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0 LmtleXNbaV0pCisrICogICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5cykgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxp c3QpCisrICogICAgICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgor ICAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5 SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgNDM4LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgX19weXhfciA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7CistICBnb3RvIF9f cHl4X0wwOworKyAgICAgIGZyZWUoX19weXhfdl9ub2RlLnUubGlzdC0+a2V5cyk7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMwCistICogCistICogICAgIEBfZXJy b3JzCistICogICAgIGRlZiBzZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xldmVsKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9yZXF1ZXN0X2xv Z19tZXNzYWdlcyIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjIKKysgKiAgICAgICAgICAgICAgICAgc2Vs Zi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZS51Lmxpc3QudmFsdWVzW2ldKQorKyAqICAgICAgICAg ICAgIGZyZWUobm9kZS51Lmxpc3QudmFsdWVzKQorKyAqICAgICAgICAgICAgIGlmIG5vZGUuZm9y bWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKKysg KiAgICAgICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5c1tpXSkKKyAgKi8KKysg ICAgfQorIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Mik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnNldF9sb2dfbGV2ZWwiLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworLSAg X19weXhfTDA6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2xvZ2xldmVsKTsKKy0gIF9fUHl4 X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Cist ICByZXR1cm4gX19weXhfcjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1MjYKKysgKiAgICAgICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5c1tp XSkKKysgKiAgICAgICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC5rZXlzKQorKyAqICAgICAg ICAgICAgIGZyZWUobm9kZS51Lmxpc3QpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CisrICogICAg ICAgICAgICAgZnJlZShub2RlLnUuc3RyaW5nKQorKyAqLworKyAgICBmcmVlKF9fcHl4X3Zfbm9k ZS51Lmxpc3QpOworIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDEKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxOAorICAqIAorLSAqICAgICBA X2Vycm9ycworLSAqICAgICBkZWYgbG9hZF9jb25maWcoc2VsZiwgZmlsZW5hbWUpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFwczogbXB2X2xvYWRfY29u ZmlnX2ZpbGUiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgY2RlZiBf ZnJlZV9uYXRpdmVfdmFsdWUoc2VsZiwgbXB2X25vZGUgbm9kZSk6CisrICogICAgICAgICBpZiBu b2RlLmZvcm1hdCBpbiAoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBNUFZfRk9STUFUX05PREVfTUFQ KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKG5vZGUudS5saXN0Lm51bSk6CisrICogICAgICAgICAgICAgICAgIHNlbGYuX2ZyZWVf bmF0aXZlX3ZhbHVlKG5vZGUudS5saXN0LnZhbHVlc1tpXSkKKyAgKi8KKysgICAgYnJlYWs7Cisr ICAgIGNhc2UgTVBWX0ZPUk1BVF9TVFJJTkc6CisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF85 bG9hZF9jb25maWcoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZmls ZW5hbWUpOyAvKnByb3RvKi8KKy1zdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0Xzhsb2FkX2NvbmZpZ1tdID0gIldyYXBzOiBtcHZfbG9hZF9jb25maWdf ZmlsZSI7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfOWxvYWRfY29uZmlnKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X2ZpbGVuYW1lKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImxvYWRf Y29uZmlnICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF84bG9hZF9jb25maWcoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9f cHl4X3ZfZmlsZW5hbWUpKTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf OGxvYWRfY29uZmlnKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZmlsZW5hbWUpIHsKKy0gIGNoYXIg Y29uc3QgKl9fcHl4X3ZfX2ZpbGVuYW1lOworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTI4CisrICogICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdCkKKysgKiAgICAg ICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CisrICogICAgICAgICAg ICAgZnJlZShub2RlLnUuc3RyaW5nKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog CisrICogICAgIGRlZiBjb21tYW5kKHNlbGYsICpjbWRsaXN0LCBhc3luY2hyb25vdXM9RmFsc2Us IGRhdGE9Tm9uZSk6CisrICovCisrICAgIGZyZWUoX19weXhfdl9ub2RlLnUuc3RyaW5nKTsKKysK KysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyNworKyAqICAgICAgICAg ICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXMpCisrICogICAgICAgICAgICAgZnJlZShub2Rl LnUubGlzdCkKKysgKiAgICAgICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJ Tkc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBmcmVlKG5v ZGUudS5zdHJpbmcpCisrICogCisrICovCisrICAgIGJyZWFrOworKyAgICBkZWZhdWx0OiBicmVh azsKKysgIH0KKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTcKKysg KiAgICAgICAgIHJldHVybiBub2RlCisrICogCisrICogICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3Zh bHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICBpZiBub2RlLmZvcm1hdCBpbiAoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBNUFZf Rk9STUFUX05PREVfTUFQKToKKysgKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUu bGlzdC5udW0pOgorKyAqLworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5 eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworKyAgZ290byBfX3B5eF9MMDsK KysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKysgIF9f UHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX2ZyZWVfbmF0aXZl X3ZhbHVlIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Cisr ICBfX3B5eF9yID0gMDsKKysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Ip OworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsK Kyt9CisrCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUzMAorKyAqICAgICAg ICAgICAgIGZyZWUobm9kZS51LnN0cmluZykKKysgKiAKKysgKiAgICAgZGVmIGNvbW1hbmQoc2Vs ZiwgKmNtZGxpc3QsIGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIiU2VuZCBhIGNvbW1hbmQgdG8gbXB2Lgor KyAqIAorKyAqLworKworKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOWNvbW1hbmQoUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2Rz KTsgLypwcm90byovCisrc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF84Y29tbWFuZFtdID0gIlNlbmQgYSBjb21tYW5kIHRvIG1wdi5cblxuICAgICAg ICBOb24tYXN5bmMgc3VjY2VzcyByZXR1cm5zIHRoZSBjb21tYW5kJ3MgcmVzcG9uc2UgZGF0YSwg b3RoZXJ3aXNlIE5vbmVcblxuICAgICAgICBBcmd1bWVudHM6XG4gICAgICAgIEFjY2VwdHMgcGFy YW1ldGVycyBhcyBhcmdzXG5cbiAgICAgICAgS2V5d29yZCBBcmd1bWVudHM6XG4gICAgICAgIGFz eW5jaHJvbm91czogVHJ1ZSB3aWxsIHJldHVybiByaWdodCBhd2F5LCBzdGF0dXMgY29tZXMgaW4g YXMgTVBWX0VWRU5UX0NPTU1BTkRfUkVQTFlcbiAgICAgICAgZGF0YTogT25seSB2YWxpZCBpZiBh c3luYywgZ2V0cyBzZW50IGJhY2sgYXMgcmVwbHlfdXNlcmRhdGEgaW4gdGhlIEV2ZW50XG5cbiAg ICAgICAgV3JhcHM6IG1wdl9jb21tYW5kX25vZGUgYW5kIG1wdl9jb21tYW5kX25vZGVfYXN5bmNc biAgICAgICAgIjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF85Y29tbWFuZChQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF92 X2FzeW5jaHJvbm91cyA9IDA7CisrICBQeU9iamVjdCAqX19weXhfdl9kYXRhID0gMDsKKysgIFB5 T2JqZWN0ICpfX3B5eF92X2NtZGxpc3QgPSAwOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisr ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVu byA9IDA7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueURlY2xh cmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImNvbW1hbmQgKHdyYXBwZXIp IiwgMCk7CisrICBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSA+IDApIHsKKysgICAg X19weXhfdl9jbWRsaXN0ID0gUHlUdXBsZV9HZXRTbGljZShfX3B5eF9hcmdzLCAwLCBQeVR1cGxl X0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5eF92X2NtZGxp c3QpKSB7CisrICAgICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICAgICAgcmV0 dXJuIE5VTEw7CisrICAgIH0KKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3ZfY21kbGlzdCk7Cisr ICB9IGVsc2UgeworKyAgICBfX3B5eF92X2NtZGxpc3QgPSBfX3B5eF9lbXB0eV90dXBsZTsgX19Q eXhfSU5DUkVGKF9fcHl4X2VtcHR5X3R1cGxlKTsKKysgIH0KKysgIHsKKysgICAgc3RhdGljIFB5 T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfYXN5bmNocm9ub3VzLCZf X3B5eF9uX3NfZGF0YSwwfTsKKysgICAgUHlPYmplY3QqIHZhbHVlc1syXSA9IHswLDB9OworKyAg ICB2YWx1ZXNbMF0gPSAoKFB5T2JqZWN0ICopUHlfRmFsc2UpOworKyAgICB2YWx1ZXNbMV0gPSAo KFB5T2JqZWN0ICopUHlfTm9uZSk7CisrICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgewor KyAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKysgICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19h cmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKysgICAgICBzd2l0Y2ggKHBvc19h cmdzKSB7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgY2FzZSAgMDogYnJlYWs7CisrICAg ICAgfQorKyAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKKysgICAgICBp ZiAoa3dfYXJncyA+IDAgJiYgbGlrZWx5KGt3X2FyZ3MgPD0gMikpIHsKKysgICAgICAgIFB5X3Nz aXplX3QgaW5kZXg7CisrICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAyICYmIGt3X2Fy Z3MgPiAwOyBpbmRleCsrKSB7CisrICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5 RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsICpfX3B5eF9weWFyZ25hbWVzW2luZGV4XSk7Cisr ICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7IGt3X2FyZ3MtLTsg fQorKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDAp KSB7CisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9f cHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgMCwgImNvbW1hbmQiKSA8IDAp KSBfX1BZWF9FUlIoMCwgNTMwLCBfX3B5eF9MM19lcnJvcikKKysgICAgICB9CisrICAgIH0gZWxz ZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSA8IDApIHsKKysgICAgICBnb3RvIF9f cHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworKyAgICB9IGVsc2UgeworKyAgICB9CisrICAgIF9fcHl4 X3ZfYXN5bmNocm9ub3VzID0gdmFsdWVzWzBdOworKyAgICBfX3B5eF92X2RhdGEgPSB2YWx1ZXNb MV07CisrICB9CisrICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworKyAg X19weXhfTDVfYXJndHVwbGVfZXJyb3I6OworKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQo ImNvbW1hbmQiLCAwLCAwLCAwLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhf RVJSKDAsIDUzMCwgX19weXhfTDNfZXJyb3IpCisrICBfX3B5eF9MM19lcnJvcjo7CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdl9jbWRsaXN0KTsgX19weXhfdl9jbWRsaXN0ID0gMDsKKysgIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuY29tbWFuZCIsIF9fcHl4 X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gTlVMTDsKKysgIF9fcHl4X0w0X2FyZ3VtZW50 X3VucGFja2luZ19kb25lOjsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgX19weXhfdl9hc3luY2hyb25vdXMsIF9f cHl4X3ZfZGF0YSwgX19weXhfdl9jbWRsaXN0KTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X2NtZGxpc3QpOworKyAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisrCisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9z ZWxmLCBQeU9iamVjdCAqX19weXhfdl9hc3luY2hyb25vdXMsIFB5T2JqZWN0ICpfX3B5eF92X2Rh dGEsIFB5T2JqZWN0ICpfX3B5eF92X2NtZGxpc3QpIHsKKysgIHN0cnVjdCBtcHZfbm9kZSBfX3B5 eF92X25vZGU7CisrICBzdHJ1Y3QgbXB2X25vZGUgX19weXhfdl9ub2RlcmVzdWx0OworICAgaW50 IF9fcHl4X3ZfZXJyOworKyAgdWludDY0X3QgX19weXhfdl9kYXRhX2lkOworKyAgUHlPYmplY3Qg Kl9fcHl4X3ZfcmVzdWx0ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF92X3VzZXJkYXRhcyA9 IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisgICBQeU9iamVjdCAq X19weXhfdF8yID0gTlVMTDsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgY2hh ciBjb25zdCAqX19weXhfdF80OworKyAgdWludDY0X3QgX19weXhfdF80OworKyAgaW50IF9fcHl4 X3RfNTsKKysgIGludCBfX3B5eF90XzY7CisrICBpbnQgX19weXhfdF83OworKyAgaW50IF9fcHl4 X3RfODsKKysgIGNoYXIgY29uc3QgKl9fcHl4X3RfOTsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEw ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzExID0gTlVMTDsKKysgIFB5T2JqZWN0ICpf X3B5eF90XzEyID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEzID0gTlVMTDsKKysgIFB5 T2JqZWN0ICpfX3B5eF90XzE0ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzE1ID0gTlVM TDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzE2ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90 XzE3ID0gTlVMTDsKKysgIGNoYXIgY29uc3QgKl9fcHl4X3RfMTg7CisgICBpbnQgX19weXhfbGlu ZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBf X3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJsb2FkX2Nv bmZpZyIsIDApOworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfZmlsZW5hbWUpOworKyAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoImNvbW1hbmQiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NDMKKy0gKiAgICAgZGVmIGxvYWRfY29uZmlnKHNlbGYsIGZp bGVuYW1lKToKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfbG9hZF9jb25maWdfZmlsZSIiIgor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU0NAorKyAqICAgICAgICAgV3Jh cHM6IG1wdl9jb21tYW5kX25vZGUgYW5kIG1wdl9jb21tYW5kX25vZGVfYXN5bmMKKysgKiAgICAg ICAgICIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgICAgICBmaWxlbmFtZSA9IF9zdHJlbmMoZmlsZW5hbWUpCistICog ICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIF9maWxlbmFtZSA9IGZpbGVuYW1lCisrICogICAgICAg ICBjZGVmIG1wdl9ub2RlIG5vZGUgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZShjbWRsaXN0LCBz ZWxmLl9mb3JtYXRfZm9yKGNtZGxpc3QpKQorKyAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2Rl cmVzdWx0CisgICovCisgICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VSVElPTlMKKyAgIGlm ICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworICAgICBpZiAodW5saWtlbHkoIShfX3B5 eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7CisgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3Nl cnRpb25FcnJvcik7CistICAgICAgX19QWVhfRVJSKDAsIDQ0MywgX19weXhfTDFfZXJyb3IpCisr ICAgICAgX19QWVhfRVJSKDAsIDU0NCwgX19weXhfTDFfZXJyb3IpCisgICAgIH0KKyAgIH0KKyAg ICNlbmRpZgorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0NAorLSAq ICAgICAgICAgIiIiV3JhcHM6IG1wdl9sb2FkX2NvbmZpZ19maWxlIiIiCisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTQ1CisrICogICAgICAgICAiIiIKKyAgKiAgICAgICAg IGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIGZpbGVuYW1lID0gX3N0cmVuYyhmaWxlbmFt ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBjb25zdCBj aGFyKiBfZmlsZW5hbWUgPSBmaWxlbmFtZQorKyAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2Rl ID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUoY21kbGlzdCwgc2VsZi5fZm9ybWF0X2ZvcihjbWRs aXN0KSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBtcHZf bm9kZSBub2RlcmVzdWx0CisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKi8KKy0gIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDQ0LCBfX3B5eF9MMV9lcnJvcikKKysg IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZiksIF9fcHl4X25fc19mb3JtYXRfZm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgNTQ1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworICAgX19weXhfdF8zID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhP RFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKysgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7 CisgICAgIF9fcHl4X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CisgICAgIGlm IChsaWtlbHkoX19weXhfdF8zKSkgeworICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0 aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworQEAgLTk2NzIsNjc5ICsxMDM3Myw3MjQgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf OGxvYWRfY29uZmlnKHN0cnVjdCBfX3AKKyAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Rf MiwgZnVuY3Rpb24pOworICAgICB9CisgICB9CistICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/ IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl9m aWxlbmFtZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9m aWxlbmFtZSk7CisrICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0Nh bGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl9jbWRsaXN0KSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X2NtZGxpc3QpOworICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNDQ0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU0NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworLSAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X2ZpbGVuYW1lLCBfX3B5eF90XzEp OworLSAgX19weXhfdF8xID0gMDsKKysgIF9fcHl4X3Zfbm9kZSA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9f cHl4X3Z0YWIpLT5fcHJlcF9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X2NtZGxp c3QsIF9fcHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDUKKy0gKiAgICAg ICAgIGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIGZpbGVuYW1lID0gX3N0cmVuYyhmaWxl bmFtZSkKKy0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogX2ZpbGVuYW1lID0gZmlsZW5hbWUg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjU0OQorICAqICAgICAgICAgY2RlZiBpbnQgZXJyCistICogICAgICAgICB3aXRo IG5vZ2lsOgorKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBkYXRhX2lkCisrICogICAgICAgICBy ZXN1bHQgPSBOb25lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHRy eToKKysgKiAgICAgICAgICAgICBkYXRhX2lkID0gaWQoZGF0YSkKKyAgKi8KKy0gIF9fcHl4X3Rf NCA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfZmlsZW5hbWUpOyBpZiAodW5saWtl bHkoKCFfX3B5eF90XzQpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDQ1LCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3ZfX2ZpbGVuYW1lID0gX19weXhfdF80OworKyAgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworKyAgX19weXhfdl9yZXN1bHQgPSBQeV9Ob25lOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0NworLSAqICAgICAgICAgY2RlZiBj b25zdCBjaGFyKiBfZmlsZW5hbWUgPSBmaWxlbmFtZQorLSAqICAgICAgICAgY2RlZiBpbnQgZXJy CistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgICAgICAgICAgZXJyID0gbXB2X2xvYWRfY29uZmlnX2ZpbGUoc2VsZi5fY3R4LCBfZmls ZW5hbWUpCistICogICAgICAgICByZXR1cm4gZXJyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTUwCisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGRhdGFfaWQKKysgKiAg ICAgICAgIHJlc3VsdCA9IE5vbmUKKysgKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGRhdGFfaWQgPSBpZChkYXRhKQorKyAqICAgICAg ICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CisgICovCistICB7CistICAgICAgI2lmZGVmIFdJ VEhfVEhSRUFECistICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgUHlfVU5CTE9D S19USFJFQURTCistICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAgICNlbmRp ZgorLSAgICAgIC8qdHJ5OiovIHsKKysgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDgKKy0gKiAgICAgICAgIGNkZWYgaW50IGVycgor LSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfbG9hZF9j b25maWdfZmlsZShzZWxmLl9jdHgsIF9maWxlbmFtZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgcmV0dXJuIGVycgorLSAqIAorKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTUxCisrICogICAgICAgICByZXN1bHQgPSBOb25lCisrICogICAg ICAgICB0cnk6CisrICogICAgICAgICAgICAgZGF0YV9pZCA9IGlkKGRhdGEpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgor KyAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgICAgICAgX19weXhfdl9l cnIgPSBtcHZfbG9hZF9jb25maWdfZmlsZShfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfX2Zp bGVuYW1lKTsKKy0gICAgICB9CisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxP bmVBcmcoX19weXhfYnVpbHRpbl9pZCwgX19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNTUxLCBfX3B5eF9MNF9lcnJvcikKKysgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisrICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0FzX3VpbnQ2NF90 KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF80ID09ICgodWludDY0X3QpLTEpKSAm JiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDU1MSwgX19weXhfTDRfZXJyb3IpCisr ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICBfX3B5eF92 X2RhdGFfaWQgPSBfX3B5eF90XzQ7CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ0NworLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBfZmlsZW5hbWUgPSBm aWxlbmFtZQorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCistICogICAgICAgICB3aXRoIG5vZ2ls OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2 X2xvYWRfY29uZmlnX2ZpbGUoc2VsZi5fY3R4LCBfZmlsZW5hbWUpCistICogICAgICAgICByZXR1 cm4gZXJyCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTIKKysgKiAg ICAgICAgIHRyeToKKysgKiAgICAgICAgICAgICBkYXRhX2lkID0gaWQoZGF0YSkKKysgKiAgICAg ICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgICAgICAg ICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlKHNlbGYuX2N0eCwgJm5vZGUsICZub2RlcmVzdWx0KQor ICAqLworLSAgICAgIC8qZmluYWxseToqLyB7CistICAgICAgICAvKm5vcm1hbCBleGl0Oiovewor KyAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9hc3luY2hyb25v dXMpOyBpZiAodW5saWtlbHkoX19weXhfdF81IDwgMCkpIF9fUFlYX0VSUigwLCA1NTIsIF9fcHl4 X0w0X2Vycm9yKQorKyAgICBfX3B5eF90XzYgPSAoKCFfX3B5eF90XzUpICE9IDApOworKyAgICBp ZiAoX19weXhfdF82KSB7CisrCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjU1MworKyAqICAgICAgICAgICAgIGRhdGFfaWQgPSBpZChkYXRhKQorKyAqICAgICAgICAg ICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CisrICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgICAgIGVy ciA9IG1wdl9jb21tYW5kX25vZGUoc2VsZi5fY3R4LCAmbm9kZSwgJm5vZGVyZXN1bHQpCisrICog ICAgICAgICAgICAgICAgIHRyeToKKysgKi8KKysgICAgICB7CisgICAgICAgICAgICNpZmRlZiBX SVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAgICAgICAg ICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworKyAg ICAgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKysgICAgICAgICAgX19QeXhfRmFzdEdJTF9SZW1l bWJlcigpOworICAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNTsKKy0g ICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0w1OjsKKy0gICAgICB9CistICB9CisrICAgICAgICAg IC8qdHJ5OiovIHsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDkK Ky0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2X2xvYWRf Y29uZmlnX2ZpbGUoc2VsZi5fY3R4LCBfZmlsZW5hbWUpCistICogICAgICAgICByZXR1cm4gZXJy ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgZGVmIF9mb3JtYXRf Zm9yKHNlbGYsIHZhbHVlKToKKysgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTU0CisrICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czoKKysgKiAg ICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICAgICAgICAgIGVyciA9 IG1wdl9jb21tYW5kX25vZGUoc2VsZi5fY3R4LCAmbm9kZSwgJm5vZGVyZXN1bHQpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgdHJ5OgorKyAqICAgICAg ICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlcmVzdWx0KSBp ZiBlcnIgPj0gMCBlbHNlIE5vbmUKKyAgKi8KKy0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7Cist ICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ0OSwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF90XzE7CistICBfX3B5 eF90XzEgPSAwOworLSAgZ290byBfX3B5eF9MMDsKKysgICAgICAgICAgICBfX3B5eF92X2VyciA9 IG1wdl9jb21tYW5kX25vZGUoX19weXhfdl9zZWxmLT5fY3R4LCAoJl9fcHl4X3Zfbm9kZSksICgm X19weXhfdl9ub2RlcmVzdWx0KSk7CisrICAgICAgICAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NDEKKy0gKiAKKy0gKiAgICAgQF9lcnJvcnMKKy0gKiAgICAg ZGVmIGxvYWRfY29uZmlnKHNlbGYsIGZpbGVuYW1lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9sb2FkX2NvbmZpZ19maWxlIiIiCistICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1NTMKKysgKiAgICAgICAgICAgICBkYXRhX2lkID0gaWQoZGF0YSkKKysg KiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgorKyAqICAgICAgICAgICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAg ICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlKHNlbGYuX2N0eCwgJm5vZGUsICZub2RlcmVz dWx0KQorKyAqICAgICAgICAgICAgICAgICB0cnk6CisgICovCisrICAgICAgICAgIC8qZmluYWxs eToqLyB7CisrICAgICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKysgICAgICAgICAgICAgICNp ZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsK KysgICAgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKysgICAgICAgICAgICAgICNlbmRpZgor KyAgICAgICAgICAgICAgZ290byBfX3B5eF9MOTsKKysgICAgICAgICAgICB9CisrICAgICAgICAg ICAgX19weXhfTDk6OworKyAgICAgICAgICB9CisrICAgICAgfQorIAorLSAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CistICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMyk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250 ZXh0LmxvYWRfY29uZmlnIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdl9maWxlbmFtZSk7CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKy0gIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQor LS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTEKKy0gKiAgICAgICAgIHJldHVy biBlcnIKKy0gKiAKKy0gKiAgICAgZGVmIF9mb3JtYXRfZm9yKHNlbGYsIHZhbHVlKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwg YmFzZXN0cmluZyk6CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfU1RSSU5HCisr ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1NQorKyAqICAgICAgICAg ICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X2Nv bW1hbmRfbm9kZShzZWxmLl9jdHgsICZub2RlLCAmbm9kZXJlc3VsdCkKKysgKiAgICAgICAgICAg ICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAg ICAgICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQpIGlmIGVyciA+ PSAwIGVsc2UgTm9uZQorKyAqICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAqLworKyAgICAg IC8qdHJ5OiovIHsKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExX2Zvcm1hdF9mb3IoUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8K Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xMV9mb3JtYXRfZm9yKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X3ZhbHVlKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9mb3JtYXRfZm9yICh3 cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8xMF9mb3JtYXRfZm9yKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3Zh bHVlKSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwX2Zvcm1hdF9m b3IoQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CistICBQeU9i amVjdCAqX19weXhfciA9IE5VTEw7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAg aW50IF9fcHl4X3RfMTsKKy0gIGludCBfX3B5eF90XzI7CistICBQeU9iamVjdCAqX19weXhfdF8z ID0gTlVMTDsKKy0gIGludCBfX3B5eF90XzQ7CistICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0g IGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5v ID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfZm9ybWF0X2ZvciIsIDApOwor LQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1MgorLSAqIAorLSAqICAg ICBkZWYgX2Zvcm1hdF9mb3Ioc2VsZiwgdmFsdWUpOgorLSAqICAgICAgICAgaWYgaXNpbnN0YW5j ZSh2YWx1ZSwgYmFzZXN0cmluZyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJTkcKKy0gKiAgICAgICAgIGVsaWYgaXNp bnN0YW5jZSh2YWx1ZSwgYm9vbCk6CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTU2CisrICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9u b2RlKHNlbGYuX2N0eCwgJm5vZGUsICZub2RlcmVzdWx0KQorKyAqICAgICAgICAgICAgICAgICB0 cnk6CisrICogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVl KG5vZGVyZXN1bHQpIGlmIGVyciA+PSAwIGVsc2UgTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICAgICAgICAgIGZpbmFsbHk6CisrICogICAgICAgICAgICAgICAg ICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlCYXNlU3RyaW5n X0NoZWNrKF9fcHl4X3ZfdmFsdWUpOyAKKy0gIF9fcHl4X3RfMiA9IChfX3B5eF90XzEgIT0gMCk7 CistICBpZiAoX19weXhfdF8yKSB7CisrICAgICAgICBpZiAoKChfX3B5eF92X2VyciA+PSAwKSAh PSAwKSkgeworKyAgICAgICAgICBfX3B5eF90XzIgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fY29udmVydF9ub2RlX3ZhbHVlKF9fcHl4X3Zfbm9kZXJlc3VsdCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU1NiwgX19weXhfTDExX2Vycm9yKQorKyAgICAg ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgICAgICAgX19weXhfdF8xID0gX19w eXhfdF8yOworKyAgICAgICAgICBfX3B5eF90XzIgPSAwOworKyAgICAgICAgfSBlbHNlIHsKKysg ICAgICAgICAgX19QeXhfSU5DUkVGKFB5X05vbmUpOworKyAgICAgICAgICBfX3B5eF90XzEgPSBQ eV9Ob25lOworKyAgICAgICAgfQorKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3Jl c3VsdCwgX19weXhfdF8xKTsKKysgICAgICAgIF9fcHl4X3RfMSA9IDA7CisrICAgICAgfQorIAor LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUzCistICogICAgIGRlZiBf Zm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6CistICogICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVl LCBiYXNlc3RyaW5nKToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJTkcg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNl KHZhbHVlLCBib29sKToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9GTEFHCisr ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1OAorKyAqICAgICAgICAg ICAgICAgICAgICAgcmVzdWx0ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlcmVzdWx0KSBpZiBl cnIgPj0gMCBlbHNlIE5vbmUKKysgKiAgICAgICAgICAgICAgICAgZmluYWxseToKKysgKiAgICAg ICAgICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2Rl cmVzdWx0KQorKyAqICAgICAgICAgICAgIGVsc2U6CisgICovCistICAgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zv cm1hdChNUFZfRk9STUFUX1NUUklORyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDAsIDQ1MywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMp OworLSAgICBfX3B5eF9yID0gX19weXhfdF8zOworLSAgICBfX3B5eF90XzMgPSAwOworLSAgICBn b3RvIF9fcHl4X0wwOworKyAgICAgIC8qZmluYWxseToqLyB7CisrICAgICAgICAvKm5vcm1hbCBl eGl0OioveworKyAgICAgICAgICB7CisrICAgICAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQK KysgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworKyAgICAgICAgICAgICAgUHlf VU5CTE9DS19USFJFQURTCisrICAgICAgICAgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7 CisrICAgICAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgICAgIC8qdHJ5OiovIHsKKyAKKy0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1MgorLSAqIAorLSAqICAgICBk ZWYgX2Zvcm1hdF9mb3Ioc2VsZiwgdmFsdWUpOgorLSAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2 YWx1ZSwgYmFzZXN0cmluZyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJTkcKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0 YW5jZSh2YWx1ZSwgYm9vbCk6CisrICAgICAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1NTkKKysgKiAgICAgICAgICAgICAgICAgZmluYWxseToKKysgKiAgICAg ICAgICAgICAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgICAgICAgICAgICAg bXB2X2ZyZWVfbm9kZV9jb250ZW50cygmbm9kZXJlc3VsdCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVsc2U6CisrICogICAgICAgICAgICAgICAgIHVzZXJk YXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCisgICovCistICB9 CisrICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoKCZfX3B5eF92X25vZGVy ZXN1bHQpKTsKKysgICAgICAgICAgICAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0NTQKKy0gKiAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJp bmcpOgorLSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX1NUUklORworLSAqICAgICAg ICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0ZMQUcKKy0gKiAgICAgICAg IGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKKysgICAgICAgICAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTgKKysgKiAgICAgICAgICAgICAgICAgICAgIHJlc3Vs dCA9IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZXJlc3VsdCkgaWYgZXJyID49IDAgZWxzZSBOb25l CisrICogICAgICAgICAgICAgICAgIGZpbmFsbHk6CisrICogICAgICAgICAgICAgICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAg ICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50cygmbm9kZXJlc3VsdCkKKysgKiAgICAg ICAgICAgICBlbHNlOgorICAqLworLSAgX19weXhfdF8zID0gKChQeU9iamVjdCopJlB5Qm9vbF9U eXBlKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOworLSAgX19weXhfdF8yID0gUHlPYmpl Y3RfSXNJbnN0YW5jZShfX3B5eF92X3ZhbHVlLCBfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoX19w eXhfdF8yID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigwLCA0NTQsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBfX3B5eF90XzEg PSAoX19weXhfdF8yICE9IDApOworLSAgaWYgKF9fcHl4X3RfMSkgeworKyAgICAgICAgICAgICAg LypmaW5hbGx5OiovIHsKKysgICAgICAgICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKysgICAg ICAgICAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAgICAgICAgICAgICAgICBfX1B5 eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAgICAgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMK KysgICAgICAgICAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgICAgICAgICBnb3RvIF9fcHl4 X0wxNTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBfX3B5eF9MMTU6Owor KyAgICAgICAgICAgICAgfQorKyAgICAgICAgICB9CisrICAgICAgICAgIGdvdG8gX19weXhfTDEy OworKyAgICAgICAgfQorKyAgICAgICAgX19weXhfTDExX2Vycm9yOjsKKysgICAgICAgIC8qZXhj ZXB0aW9uIGV4aXQ6Ki97CisrICAgICAgICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQor KyAgICAgICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorKyAgICAgICAgICBfX3B5eF90 XzEwID0gMDsgX19weXhfdF8xMSA9IDA7IF9fcHl4X3RfMTIgPSAwOyBfX3B5eF90XzEzID0gMDsg X19weXhfdF8xNCA9IDA7IF9fcHl4X3RfMTUgPSAwOworKyAgICAgICAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICAgICAgICAgIF9fUHl4X1hERUNSRUYoX19w eXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOworKyAgICAgICAgICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAz KSBfX1B5eF9FeGNlcHRpb25Td2FwKCZfX3B5eF90XzEzLCAmX19weXhfdF8xNCwgJl9fcHl4X3Rf MTUpOworKyAgICAgICAgICBpZiAoKFBZX01BSk9SX1ZFUlNJT04gPCAzKSB8fCB1bmxpa2VseShf X1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfMTAsICZfX3B5eF90XzExLCAmX19weXhfdF8xMikg PCAwKSkgX19QeXhfRXJyRmV0Y2goJl9fcHl4X3RfMTAsICZfX3B5eF90XzExLCAmX19weXhfdF8x Mik7CisrICAgICAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMCk7CisrICAgICAgICAgIF9f UHl4X1hHT1RSRUYoX19weXhfdF8xMSk7CisrICAgICAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhf dF8xMik7CisrICAgICAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMyk7CisrICAgICAgICAg IF9fUHl4X1hHT1RSRUYoX19weXhfdF8xNCk7CisrICAgICAgICAgIF9fUHl4X1hHT1RSRUYoX19w eXhfdF8xNSk7CisrICAgICAgICAgIF9fcHl4X3RfNyA9IF9fcHl4X2xpbmVubzsgX19weXhfdF84 ID0gX19weXhfY2xpbmVubzsgX19weXhfdF85ID0gX19weXhfZmlsZW5hbWU7CisrICAgICAgICAg IHsKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAor KyAgICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICAgICAgICAgICAg UHlfVU5CTE9DS19USFJFQURTCisrICAgICAgICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1i ZXIoKTsKKysgICAgICAgICAgICAgICAgI2VuZGlmCisrICAgICAgICAgICAgICAgIC8qdHJ5Oiov IHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1NQorLSAqICAg ICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX1NUUklORworLSAqICAgICAgICAgZWxpZiBpc2lu c3RhbmNlKHZhbHVlLCBib29sKToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9G TEFHICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0 YW5jZSh2YWx1ZSwgaW50KToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2 NAorKyAgICAgICAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 NTkKKysgKiAgICAgICAgICAgICAgICAgZmluYWxseToKKysgKiAgICAgICAgICAgICAgICAgICAg IHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9j b250ZW50cygmbm9kZXJlc3VsdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgIGVsc2U6CisrICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVw bHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCisgICovCistICAgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zv cm1hdChNUFZfRk9STUFUX0ZMQUcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigwLCA0NTUsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsK Ky0gICAgX19weXhfciA9IF9fcHl4X3RfMzsKKy0gICAgX19weXhfdF8zID0gMDsKKy0gICAgZ290 byBfX3B5eF9MMDsKKysgICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCgm X19weXhfdl9ub2RlcmVzdWx0KSk7CisrICAgICAgICAgICAgICAgIH0KKyAKKy0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1NAorLSAqICAgICAgICAgaWYgaXNpbnN0YW5j ZSh2YWx1ZSwgYmFzZXN0cmluZyk6CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRf U1RSSU5HCistICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRf RkxBRworLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorKyAgICAgICAg ICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU4CisrICogICAgICAg ICAgICAgICAgICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQpIGlm IGVyciA+PSAwIGVsc2UgTm9uZQorKyAqICAgICAgICAgICAgICAgICBmaW5hbGx5OgorKyAqICAg ICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoJm5v ZGVyZXN1bHQpCisrICogICAgICAgICAgICAgZWxzZToKKyAgKi8KKy0gIH0KKy0KKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTYKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0 YW5jZSh2YWx1ZSwgYm9vbCk6CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRkxB RworLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfSU5UNjQK Ky0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgorLSAqLworLSAgX19w eXhfdF8xID0gUHlJbnRfQ2hlY2soX19weXhfdl92YWx1ZSk7IAorLSAgX19weXhfdF8yID0gKF9f cHl4X3RfMSAhPSAwKTsKKy0gIGlmIChfX3B5eF90XzIpIHsKKysgICAgICAgICAgICAgICAgLypm aW5hbGx5OiovIHsKKysgICAgICAgICAgICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAg ICAgICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAgICAgICAgICAgICBf X1B5eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAgICAgICAgICAgICAgICAgUHlfQkxPQ0tfVEhS RUFEUworKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisrICAgICAgICAgICAgICAgICAgICBn b3RvIF9fcHl4X0wyMDsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAg X19weXhfTDIwOjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAg ICAgfQorKyAgICAgICAgICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAzKSB7CisrICAgICAgICAg ICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMyk7CisrICAgICAgICAgICAgX19QeXhfWEdJVkVS RUYoX19weXhfdF8xNCk7CisrICAgICAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xNSk7 CisrICAgICAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMywgX19weXhfdF8x NCwgX19weXhfdF8xNSk7CisrICAgICAgICAgIH0KKysgICAgICAgICAgX19QeXhfWEdJVkVSRUYo X19weXhfdF8xMCk7CisrICAgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTEpOworKyAg ICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEyKTsKKysgICAgICAgICAgX19QeXhfRXJy UmVzdG9yZShfX3B5eF90XzEwLCBfX3B5eF90XzExLCBfX3B5eF90XzEyKTsKKysgICAgICAgICAg X19weXhfdF8xMCA9IDA7IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90XzEyID0gMDsgX19weXhfdF8x MyA9IDA7IF9fcHl4X3RfMTQgPSAwOyBfX3B5eF90XzE1ID0gMDsKKysgICAgICAgICAgX19weXhf bGluZW5vID0gX19weXhfdF83OyBfX3B5eF9jbGluZW5vID0gX19weXhfdF84OyBfX3B5eF9maWxl bmFtZSA9IF9fcHl4X3RfOTsKKysgICAgICAgICAgZ290byBfX3B5eF9MNF9lcnJvcjsKKysgICAg ICAgIH0KKysgICAgICAgIF9fcHl4X0wxMjo7CisrICAgICAgfQorIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDU3CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9G T1JNQVRfRkxBRworLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorLSAq ICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0lOVDY0ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgorLSAq ICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQorKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTIKKysgKiAgICAgICAgIHRyeToKKysgKiAgICAgICAg ICAgICBkYXRhX2lkID0gaWQoZGF0YSkKKysgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9u b3VzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgIHdp dGggbm9naWw6CisrICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2Rl KHNlbGYuX2N0eCwgJm5vZGUsICZub2RlcmVzdWx0KQorICAqLworLSAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3IpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9m b3JtYXQoTVBWX0ZPUk1BVF9JTlQ2NCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDAsIDQ1NywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMp OworLSAgICBfX3B5eF9yID0gX19weXhfdF8zOworLSAgICBfX3B5eF90XzMgPSAwOworLSAgICBn b3RvIF9fcHl4X0wwOworKyAgICAgIGdvdG8gX19weXhfTDY7CisrICAgIH0KKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1NgorLSAqICAgICAgICAgZWxpZiBpc2lu c3RhbmNlKHZhbHVlLCBib29sKToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9G TEFHCistICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2 NAorLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjEKKysgKiAgICAgICAgICAgICAgICAgICAg ICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2RlcmVzdWx0KQorKyAqICAgICAgICAgICAg IGVsc2U6CisrICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRh dGEuZ2V0KGRhdGFfaWQsIE5vbmUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6CisrICogICAgICAgICAgICAgICAg ICAgICBfcmVwbHlfdXNlcmRhdGFzW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRh dGEoZGF0YSkKKyAgKi8KKy0gIH0KKysgICAgLyplbHNlKi8geworKyAgICAgIF9fcHl4X3RfMiA9 IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwg X19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU2 MSwgX19weXhfTDRfZXJyb3IpCisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICAg ICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5eF92X2RhdGFfaWQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA1NjEsIF9fcHl4X0w0X2Vy cm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgICAgIF9fcHl4X3RfMTYg PSBOVUxMOworKyAgICAgIF9fcHl4X3RfOCA9IDA7CisrICAgICAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKysgICAgICAg IF9fcHl4X3RfMTYgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICAgICAgaWYg KGxpa2VseShfX3B5eF90XzE2KSkgeworKyAgICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQ eU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICAgICAgX19QeXhfSU5DUkVG KF9fcHl4X3RfMTYpOworKyAgICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAg ICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworKyAgICAgICAgICBf X3B5eF90XzggPSAxOworKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICAjaWYgQ1lUSE9OX0ZB U1RfUFlDQUxMCisrICAgICAgaWYgKFB5RnVuY3Rpb25fQ2hlY2soX19weXhfdF8yKSkgeworKyAg ICAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF8xNiwgX19weXhfdF8zLCBQ eV9Ob25lfTsKKysgICAgICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGwo X19weXhfdF8yLCBfX3B5eF90ZW1wKzEtX19weXhfdF84LCAyK19fcHl4X3RfOCk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU2MSwgX19weXhfTDRfZXJyb3IpCisrICAg ICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTYpOyBfX3B5eF90XzE2ID0gMDsKKysgICAgICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Myk7IF9fcHl4X3RfMyA9IDA7CisrICAgICAgfSBlbHNlCisrICAgICAgI2VuZGlmCisrICAgICAg I2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwKKysgICAgICBpZiAoX19QeXhfUHlGYXN0Q0Z1bmN0aW9u X0NoZWNrKF9fcHl4X3RfMikpIHsKKysgICAgICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0g e19fcHl4X3RfMTYsIF9fcHl4X3RfMywgUHlfTm9uZX07CisrICAgICAgICBfX3B5eF90XzEgPSBf X1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5eF90 XzgsIDIrX19weXhfdF84KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg NTYxLCBfX3B5eF9MNF9lcnJvcikKKysgICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNik7 IF9fcHl4X3RfMTYgPSAwOworKyAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAg ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgICAgICB9IGVs c2UKKysgICAgICAjZW5kaWYKKysgICAgICB7CisrICAgICAgICBfX3B5eF90XzE3ID0gUHlUdXBs ZV9OZXcoMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMTcpKSBfX1BZWF9FUlIo MCwgNTYxLCBfX3B5eF9MNF9lcnJvcikKKysgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzE3 KTsKKysgICAgICAgIGlmIChfX3B5eF90XzE2KSB7CisrICAgICAgICAgIF9fUHl4X0dJVkVSRUYo X19weXhfdF8xNik7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xNywgMCwgX19weXhfdF8xNik7 IF9fcHl4X3RfMTYgPSBOVUxMOworKyAgICAgICAgfQorKyAgICAgICAgX19QeXhfR0lWRVJFRihf X3B5eF90XzMpOworKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzE3LCAwK19fcHl4 X3RfOCwgX19weXhfdF8zKTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgICAg ICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CisrICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfMTcsIDErX19weXhfdF84LCBQeV9Ob25lKTsKKysgICAgICAgIF9fcHl4X3RfMyA9IDA7 CisrICAgICAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMiwgX19w eXhfdF8xNywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU2 MSwgX19weXhfTDRfZXJyb3IpCisrICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysg ICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzE3KTsgX19weXhfdF8xNyA9IDA7CisrICAgICAg fQorKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICAg IF9fcHl4X3ZfdXNlcmRhdGFzID0gX19weXhfdF8xOworKyAgICAgIF9fcHl4X3RfMSA9IDA7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDU4CistICogICAgICAgICBl bGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9G T1JNQVRfSU5UNjQKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9G T1JNQVRfRE9VQkxFCistICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0dXBsZSwg bGlzdCkpOgorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjIKKysg KiAgICAgICAgICAgICBlbHNlOgorKyAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxm LnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQorKyAqICAgICAgICAgICAgICAgICBp ZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tkYXRhX2lkXSA9IHVzZXJkYXRhcyA9 IF9SZXBseVVzZXJEYXRhKGRhdGEpCisrICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQo KQorICAqLworLSAgX19weXhfdF8yID0gUHlGbG9hdF9DaGVjayhfX3B5eF92X3ZhbHVlKTsgCist ICBfX3B5eF90XzEgPSAoX19weXhfdF8yICE9IDApOworLSAgaWYgKF9fcHl4X3RfMSkgeworKyAg ICAgIF9fcHl4X3RfNiA9IChfX3B5eF92X3VzZXJkYXRhcyA9PSBQeV9Ob25lKTsKKysgICAgICBf X3B5eF90XzUgPSAoX19weXhfdF82ICE9IDApOworKyAgICAgIGlmIChfX3B5eF90XzUpIHsKKyAK Ky0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OQorLSAqICAgICAgICAg ICAgIHJldHVybiBNUFZfRk9STUFUX0lOVDY0CistICogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo dmFsdWUsIGZsb2F0KToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9ET1VCTEUg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNl KHZhbHVlLCAodHVwbGUsIGxpc3QpKToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1B VF9OT0RFX0FSUkFZCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTYzCisrICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEu Z2V0KGRhdGFfaWQsIE5vbmUpCisrICogICAgICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBO b25lOgorKyAqICAgICAgICAgICAgICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tkYXRhX2lkXSA9 IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCisrICogICAgICAgICAg ICAgICAgIHdpdGggbm9naWw6CisgICovCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Cist ICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9S TUFUX0RPVUJMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ1OSwg X19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX3B5 eF9yID0gX19weXhfdF8zOworLSAgICBfX3B5eF90XzMgPSAwOworLSAgICBnb3RvIF9fcHl4X0ww OworKyAgICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25f c19SZXBseVVzZXJEYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg NTYzLCBfX3B5eF9MNF9lcnJvcikKKysgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwor KyAgICAgICAgX19weXhfdF8xNyA9IE5VTEw7CisrICAgICAgICBpZiAoQ1lUSE9OX1VOUEFDS19N RVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAgICAg ICAgIF9fcHl4X3RfMTcgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICAgICAg ICBpZiAobGlrZWx5KF9fcHl4X3RfMTcpKSB7CisrICAgICAgICAgICAgUHlPYmplY3QqIGZ1bmN0 aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CisrICAgICAgICAgICAgX19Q eXhfSU5DUkVGKF9fcHl4X3RfMTcpOworKyAgICAgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlv bik7CisrICAgICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsK KysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgX19weXhfdF8xID0gKF9fcHl4X3Rf MTcpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8xNywgX19w eXhfdl9kYXRhKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92 X2RhdGEpOworKyAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE3KTsgX19weXhfdF8xNyA9 IDA7CisrICAgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NjMs IF9fcHl4X0w0X2Vycm9yKQorKyAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAg ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgICAgIGlm ICh1bmxpa2VseShfX1B5eF9TZXRJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2 X19yZXBseV91c2VyZGF0YXMsIF9fcHl4X3ZfZGF0YV9pZCwgX19weXhfdF8xLCB1aW50NjRfdCwg MCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAs IDU2MywgX19weXhfTDRfZXJyb3IpCisrICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsK KysgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X3RfMSk7 CisrICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OAorLSAqICAgICAgICAgZWxp ZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorLSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9S TUFUX0lOVDY0CistICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9S TUFUX0RPVUJMRQorLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxp c3QpKToKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjIKKysg KiAgICAgICAgICAgICBlbHNlOgorKyAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxm LnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQorKyAqICAgICAgICAgICAgICAgICBp ZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tkYXRhX2lkXSA9IHVzZXJkYXRhcyA9 IF9SZXBseVVzZXJEYXRhKGRhdGEpCisrICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQo KQorICAqLworLSAgfQorKyAgICAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0NjAKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgor LSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQorLSAqICAgICAgICAgZWxp ZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfQVJSQVkKKy0g KiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisrICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2NAorKyAqICAgICAgICAgICAgICAgICBpZiB1c2Vy ZGF0YXMgaXMgTm9uZToKKysgKiAgICAgICAgICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0YXNb ZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorKyAqICAgICAgICAg ICAgICAgICB1c2VyZGF0YXMuYWRkKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgICAgICAgICAgZXJy ID0gbXB2X2NvbW1hbmRfbm9kZV9hc3luYyhzZWxmLl9jdHgsIGRhdGFfaWQsICZub2RlKQorICAq LworLSAgX19weXhfdF8yID0gUHlUdXBsZV9DaGVjayhfX3B5eF92X3ZhbHVlKTsgCistICBfX3B5 eF90XzQgPSAoX19weXhfdF8yICE9IDApOworLSAgaWYgKCFfX3B5eF90XzQpIHsKKy0gIH0gZWxz ZSB7CistICAgIF9fcHl4X3RfMSA9IF9fcHl4X3RfNDsKKy0gICAgZ290byBfX3B5eF9MNF9ib29s X2Jpbm9wX2RvbmU7CistICB9CistICBfX3B5eF90XzQgPSBQeUxpc3RfQ2hlY2soX19weXhfdl92 YWx1ZSk7IAorLSAgX19weXhfdF8yID0gKF9fcHl4X3RfNCAhPSAwKTsKKy0gIF9fcHl4X3RfMSA9 IF9fcHl4X3RfMjsKKy0gIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7CistICBfX3B5eF90XzIg PSAoX19weXhfdF8xICE9IDApOworLSAgaWYgKF9fcHl4X3RfMikgeworKyAgICAgIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X25f c19hZGQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1NjQsIF9fcHl4 X0w0X2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICAgIF9fcHl4 X3RfMTcgPSBOVUxMOworKyAgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5 KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAgICAgICBfX3B5eF90XzE3ID0gUHlN ZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgICAgIGlmIChsaWtlbHkoX19weXhfdF8x NykpIHsKKysgICAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfMik7CisrICAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzE3KTsKKysg ICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKysgICAgICAgIH0KKysgICAgICB9CisrICAgICAg X19weXhfdF8xID0gKF9fcHl4X3RfMTcpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzIsIF9fcHl4X3RfMTcpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7 CisrICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE3KTsgX19weXhfdF8xNyA9IDA7CisrICAg ICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTY0LCBfX3B5eF9MNF9l cnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ2MQorLSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQorLSAq ICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKToKKy0gKiAgICAg ICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CistICog ICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9NQVAKKysgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY1CisrICogICAgICAgICAgICAgICAgICAgICBfcmVw bHlfdXNlcmRhdGFzW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkK KysgKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCisrICogICAgICAgICAgICAgICAg IHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICAgICAgICAgIGVyciA9IG1wdl9jb21tYW5kX25vZGVfYXN5bmMoc2VsZi5fY3R4LCBkYXRhX2lk LCAmbm9kZSkKKysgKiAgICAgICAgIGZpbmFsbHk6CisgICovCistICAgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zv cm1hdChNUFZfRk9STUFUX05PREVfQVJSQVkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9f UFlYX0VSUigwLCA0NjEsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8zKTsKKy0gICAgX19weXhfciA9IF9fcHl4X3RfMzsKKy0gICAgX19weXhfdF8zID0gMDsKKy0g ICAgZ290byBfX3B5eF9MMDsKKysgICAgICB7CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVB RAorKyAgICAgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICAgICAgUHlfVU5CTE9D S19USFJFQURTCisrICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKysgICAgICAg ICAgI2VuZGlmCisrICAgICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ2MAorLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVl LCBmbG9hdCk6CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRE9VQkxFCistICog ICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0dXBsZSwgbGlzdCkpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9E RV9BUlJBWQorLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKysgICAg ICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY2CisrICogICAgICAg ICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorKyAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2ls OgorKyAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZV9hc3luYyhz ZWxmLl9jdHgsIGRhdGFfaWQsICZub2RlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICBmaW5hbGx5OgorKyAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3Zh bHVlKG5vZGUpCisrICovCisrICAgICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfY29tbWFuZF9u b2RlX2FzeW5jKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9kYXRhX2lkLCAoJl9fcHl4X3Zf bm9kZSkpOworKyAgICAgICAgICB9CisrCisrICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1NjUKKysgKiAgICAgICAgICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0 YXNbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorKyAqICAgICAg ICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkKKysgKiAgICAgICAgICAgICAgICAgd2l0aCBub2dp bDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICAgICAg ZXJyID0gbXB2X2NvbW1hbmRfbm9kZV9hc3luYyhzZWxmLl9jdHgsIGRhdGFfaWQsICZub2RlKQor KyAqICAgICAgICAgZmluYWxseToKKyAgKi8KKysgICAgICAgICAgLypmaW5hbGx5OiovIHsKKysg ICAgICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAgICAgI2lmZGVmIFdJVEhf VEhSRUFECisrICAgICAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAgICAg ICAgICAgUHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAgICAgI2VuZGlmCisrICAgICAgICAg ICAgICBnb3RvIF9fcHl4X0wyNDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgX19weXhf TDI0OjsKKysgICAgICAgICAgfQorKyAgICAgIH0KKysgICAgfQorKyAgICBfX3B5eF9MNjo7Cisg ICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYyCistICogICAg ICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0dXBsZSwgbGlzdCkpOgorLSAqICAgICAgICAg ICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfQVJSQVkKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0 YW5jZSh2YWx1ZSwgZGljdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX01BUAorLSAqICAgICAgICAgcmV0dXJuIE1Q Vl9GT1JNQVRfTk9ORQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2OAor KyAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZV9hc3luYyhzZWxm Ll9jdHgsIGRhdGFfaWQsICZub2RlKQorKyAqICAgICAgICAgZmluYWxseToKKysgKiAgICAgICAg ICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICBpZiBlcnIgPCAwOgorKyAqICAgICAgICAgICAgIHJhaXNlIE1Q VkVycm9yKGVycikKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IFB5RGljdF9DaGVjayhfX3B5eF92X3Zh bHVlKTsgCistICBfX3B5eF90XzEgPSAoX19weXhfdF8yICE9IDApOworLSAgaWYgKF9fcHl4X3Rf MSkgeworKyAgLypmaW5hbGx5OiovIHsKKysgICAgLypub3JtYWwgZXhpdDoqL3sKKysgICAgICBf X3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVl KF9fcHl4X3Zfc2VsZiwgX19weXhfdl9ub2RlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgNTY4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK KysgICAgICBnb3RvIF9fcHl4X0w1OworKyAgICB9CisrICAgIF9fcHl4X0w0X2Vycm9yOjsKKysg ICAgLypleGNlcHRpb24gZXhpdDoqL3sKKysgICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xh cmUKKysgICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorKyAgICAgIF9fcHl4X3RfMTUg PSAwOyBfX3B5eF90XzE0ID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3RfMTIgPSAwOyBfX3B5 eF90XzExID0gMDsgX19weXhfdF8xMCA9IDA7CisrICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNik7IF9f cHl4X3RfMTYgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNyk7IF9fcHl4X3Rf MTcgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsK KysgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICAgICAg aWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgX19QeXhfRXhjZXB0aW9uU3dhcCgmX19weXhfdF8x MiwgJl9fcHl4X3RfMTEsICZfX3B5eF90XzEwKTsKKysgICAgICBpZiAoKFBZX01BSk9SX1ZFUlNJ T04gPCAzKSB8fCB1bmxpa2VseShfX1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfMTUsICZfX3B5 eF90XzE0LCAmX19weXhfdF8xMykgPCAwKSkgX19QeXhfRXJyRmV0Y2goJl9fcHl4X3RfMTUsICZf X3B5eF90XzE0LCAmX19weXhfdF8xMyk7CisrICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE1 KTsKKysgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTQpOworKyAgICAgIF9fUHl4X1hHT1RS RUYoX19weXhfdF8xMyk7CisrICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzEyKTsKKysgICAg ICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTEpOworKyAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhf dF8xMCk7CisrICAgICAgX19weXhfdF84ID0gX19weXhfbGluZW5vOyBfX3B5eF90XzcgPSBfX3B5 eF9jbGluZW5vOyBfX3B5eF90XzE4ID0gX19weXhfZmlsZW5hbWU7CisrICAgICAgeworKyAgICAg ICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92 YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfbm9kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDU2OCwgX19weXhfTDI2X2Vycm9yKQorKyAgICAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisrICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKysgICAgICB9CisrICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgewor KyAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMik7CisrICAgICAgICBfX1B5eF9YR0lW RVJFRihfX3B5eF90XzExKTsKKysgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTApOwor KyAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMiwgX19weXhfdF8xMSwgX19w eXhfdF8xMCk7CisrICAgICAgfQorKyAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTUpOwor KyAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTQpOworKyAgICAgIF9fUHl4X1hHSVZFUkVG KF9fcHl4X3RfMTMpOworKyAgICAgIF9fUHl4X0VyclJlc3RvcmUoX19weXhfdF8xNSwgX19weXhf dF8xNCwgX19weXhfdF8xMyk7CisrICAgICAgX19weXhfdF8xNSA9IDA7IF9fcHl4X3RfMTQgPSAw OyBfX3B5eF90XzEzID0gMDsgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90 XzEwID0gMDsKKysgICAgICBfX3B5eF9saW5lbm8gPSBfX3B5eF90Xzg7IF9fcHl4X2NsaW5lbm8g PSBfX3B5eF90Xzc7IF9fcHl4X2ZpbGVuYW1lID0gX19weXhfdF8xODsKKysgICAgICBnb3RvIF9f cHl4X0wxX2Vycm9yOworKyAgICAgIF9fcHl4X0wyNl9lcnJvcjo7CisrICAgICAgaWYgKFBZX01B Sk9SX1ZFUlNJT04gPj0gMykgeworKyAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMik7 CisrICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzExKTsKKysgICAgICAgIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3RfMTApOworKyAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhf dF8xMiwgX19weXhfdF8xMSwgX19weXhfdF8xMCk7CisrICAgICAgfQorKyAgICAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xNSk7IF9fcHl4X3RfMTUgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xNCk7IF9fcHl4X3RfMTQgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF8xMyk7IF9fcHl4X3RfMTMgPSAwOworKyAgICAgIF9fcHl4X3RfMTIgPSAwOyBfX3B5eF90XzEx ID0gMDsgX19weXhfdF8xMCA9IDA7CisrICAgICAgZ290byBfX3B5eF9MMV9lcnJvcjsKKysgICAg fQorKyAgICBfX3B5eF9MNTo7CisrICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0NjMKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX0FS UkFZCistICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorLSAqICAgICAg ICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfTUFQICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PTkUKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjkKKysgKiAgICAgICAgIGZpbmFsbHk6CisrICogICAg ICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZSkKKysgKiAgICAgICAgIGlmIGVy ciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByYWlz ZSBNUFZFcnJvcihlcnIpCisrICogICAgICAgICByZXR1cm4gcmVzdWx0CisrICovCisrICBfX3B5 eF90XzUgPSAoKF9fcHl4X3ZfZXJyIDwgMCkgIT0gMCk7CisrICBpZiAodW5saWtlbHkoX19weXhf dF81KSkgeworKworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcwCisr ICogICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZSkKKysgKiAgICAgICAg IGlmIGVyciA8IDA6CisrICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gcmVzdWx0CisgICogCisg ICovCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4 X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX05PREVfTUFQKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDYzLCBfX3B5eF9MMV9lcnJvcikKKy0g ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7Cist ICAgIF9fcHl4X3RfMyA9IDA7CistICAgIGdvdG8gX19weXhfTDA7CisrICAgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1NzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdF8xNyA9IF9fUHl4X1B5SW50X0Zy b21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzE3KSkgX19QWVhfRVJS KDAsIDU3MCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzE3KTsK KysgICAgX19weXhfdF8zID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAm JiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICAgIF9fcHl4X3Rf MyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CisrICAgICAgaWYgKGxpa2VseShfX3B5 eF90XzMpKSB7CisrICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVO Q1RJT04oX19weXhfdF8yKTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOworKyAg ICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQo X19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgICAgfQorKyAgICB9CisrICAgIF9fcHl4X3RfMSA9 IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhf dF8zLCBfX3B5eF90XzE3KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBf X3B5eF90XzE3KTsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAw OworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xNyk7IF9fcHl4X3RfMTcgPSAwOworKyAgICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NzAsIF9fcHl4X0wxX2Vycm9y KQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwg MCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICBf X1BZWF9FUlIoMCwgNTcwLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ2MgorLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVl LCAodHVwbGUsIGxpc3QpKToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RF X0FSUkFZCistICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRf Tk9ERV9NQVAKKy0gKiAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PTkUKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2OQorKyAqICAgICAgICAgZmluYWxseToKKysg KiAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlKQorKyAqICAgICAgICAg aWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAg IHJhaXNlIE1QVkVycm9yKGVycikKKysgKiAgICAgICAgIHJldHVybiByZXN1bHQKKyAgKi8KKyAg IH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjQKKy0gKiAgICAg ICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CistICogICAgICAgICAgICAgcmV0dXJu IE1QVl9GT1JNQVRfTk9ERV9NQVAKKy0gKiAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PTkUg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjU3MQorKyAqICAgICAgICAgaWYgZXJyIDwgMDoKKysgKiAgICAgICAgICAgICBy YWlzZSBNUFZFcnJvcihlcnIpCisrICogICAgICAgICByZXR1cm4gcmVzdWx0ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBfcHJl cF9ub2RlX2xpc3Qoc2VsZiwgdmFsdWVzKToKKysgKiAgICAgQF9lcnJvcnMKKyAgKi8KKyAgIF9f UHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2Vu dW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9OT05FKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMCwgNDY0LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzMpOworLSAgX19weXhfciA9IF9fcHl4X3RfMzsKKy0gIF9fcHl4X3RfMyA9IDA7CisrICBf X1B5eF9JTkNSRUYoX19weXhfdl9yZXN1bHQpOworKyAgX19weXhfciA9IF9fcHl4X3ZfcmVzdWx0 OworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0NTEKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1MzAKKysgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5zdHJpbmcpCisr ICogCisrICogICAgIGRlZiBjb21tYW5kKHNlbGYsICpjbWRsaXN0LCBhc3luY2hyb25vdXM9RmFs c2UsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICIiIlNlbmQgYSBjb21tYW5kIHRvIG1wdi4KKyAgKiAKKy0gKiAgICAgZGVmIF9mb3JtYXRfZm9y KHNlbGYsIHZhbHVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg aWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CistICogICAgICAgICAgICAgcmV0dXJu IE1QVl9GT1JNQVRfU1RSSU5HCisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K KyAgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKysgIF9f UHl4X1hERUNSRUYoX19weXhfdF8yKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0g IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX2Zvcm1hdF9m b3IiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9f UHl4X1hERUNSRUYoX19weXhfdF8xNik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTcpOwor KyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5jb21tYW5k IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5 eF9yID0gTlVMTDsKKyAgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9yZXN1 bHQpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X3VzZXJkYXRhcyk7CisgICBfX1B5eF9YR0lW RVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0 dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 NjYKKy0gKiAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PTkUKKysvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTc0CisrICogCisrICogICAgIEBfZXJyb3JzCisrICogICAgIGRl ZiBnZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIiR2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9w ZXJ0eSBhc3luY2hyb25vdXNseS4KKyAgKiAKKy0gKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBf cHJlcF9ub2RlX2xpc3Qoc2VsZiwgdmFsdWVzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlCistICogICAgICAgICBjZGVmIG1wdl9m b3JtYXQgZm9ybWF0CisgICovCisgCistc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX2xpc3Qoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQ eU9iamVjdCAqX19weXhfdl92YWx1ZXMpIHsKKy0gIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF92X25v ZGU7CistICBlbnVtIG1wdl9mb3JtYXQgX19weXhfdl9mb3JtYXQ7CistICBzdHJ1Y3QgbXB2X25v ZGVfbGlzdCAqX19weXhfdl9ub2RlX2xpc3Q7CistICBQeU9iamVjdCAqX19weXhfdl9pID0gTlVM TDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlID0gTlVMTDsKKy0gIHN0cnVjdCBtcHZfbm9k ZV9saXN0ICpfX3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5X3Nz aXplX3QgX19weXhfdF8xOworLSAgaW50IF9fcHl4X3RfMjsKKy0gIFB5T2JqZWN0ICpfX3B5eF90 XzMgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CistICBQeU9iamVjdCAq KCpfX3B5eF90XzUpKFB5T2JqZWN0ICopOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7 CistICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90Xzgg PSBOVUxMOworLSAgZW51bSBtcHZfZm9ybWF0IF9fcHl4X3RfOTsKKy0gIFB5X3NzaXplX3QgX19w eXhfdF8xMDsKKysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExZ2V0X3Byb3BlcnR5X2FzeW5jKFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19w eXhfa3dkcyk7IC8qcHJvdG8qLworK3N0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlfYXN5bmNbXSA9ICJHZXRzIHRoZSB2YWx1 ZSBvZiBhIHByb3BlcnR5IGFzeW5jaHJvbm91c2x5LlxuXG4gICAgICAgIEFyZ3VtZW50czpcbiAg ICAgICAgcHJvcDogUHJvcGVydHkgdG8gZ2V0IHRoZSB2YWx1ZSBvZi5cblxuICAgICAgICBLZXl3 b3JkIGFyZ3VtZW50czpcbiAgICAgICAgZGF0YTogVmFsdWUgdG8gYmUgcGFzc2VkIGludG8gdGhl IHJlcGx5X3VzZXJkYXRhIG9mIHRoZSByZXNwb25zZSBldmVudC5cbiAgICAgICAgV3JhcHM6IG1w dl9nZXRfcHJvcGVydHlfYXN5bmMiOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExZ2V0X3Byb3BlcnR5X2FzeW5jKFB5T2JqZWN0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykg eworKyAgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCA9IDA7CisrICBQeU9iamVjdCAqX19weXhfdl9k YXRhID0gMDsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9wcmVwX25vZGVfbGlzdCIsIDApOworLQorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2OQorLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBu b2RlCistICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0CistICogICAgICAgICBjZGVm IG1wdl9ub2RlX2xpc3QqIG5vZGVfbGlzdCA9IDxtcHZfbm9kZV9saXN0Kj5tYWxsb2Moc2l6ZW9m KG1wdl9ub2RlX2xpc3QpKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICBub2RlX2xpc3QubnVtID0gbGVuKHZhbHVlcykKKy0gKiAgICAgICAgIG5vZGVfbGlzdC52YWx1 ZXMgPSBOVUxMCistICovCistICBfX3B5eF92X25vZGVfbGlzdCA9ICgoc3RydWN0IG1wdl9ub2Rl X2xpc3QgKiltYWxsb2MoKHNpemVvZihzdHJ1Y3QgbXB2X25vZGVfbGlzdCkpKSk7CistCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDcwCistICogICAgICAgICBjZGVmIG1w dl9mb3JtYXQgZm9ybWF0CistICogICAgICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIG5vZGVfbGlz dCA9IDxtcHZfbm9kZV9saXN0Kj5tYWxsb2Moc2l6ZW9mKG1wdl9ub2RlX2xpc3QpKQorLSAqICAg ICAgICAgbm9kZV9saXN0Lm51bSA9IGxlbih2YWx1ZXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSBOVUxMCistICogICAgICAgICBu b2RlX2xpc3Qua2V5cyA9IE5VTEwKKy0gKi8KKy0gIF9fcHl4X3RfMSA9IFB5T2JqZWN0X0xlbmd0 aChfX3B5eF92X3ZhbHVlcyk7IGlmICh1bmxpa2VseShfX3B5eF90XzEgPT0gKChQeV9zc2l6ZV90 KS0xKSkpIF9fUFlYX0VSUigwLCA0NzAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdl9ub2Rl X2xpc3QtPm51bSA9IF9fcHl4X3RfMTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0NzEKKy0gKiAgICAgICAgIGNkZWYgbXB2X25vZGVfbGlzdCogbm9kZV9saXN0ID0g PG1wdl9ub2RlX2xpc3QqPm1hbGxvYyhzaXplb2YobXB2X25vZGVfbGlzdCkpCistICogICAgICAg ICBub2RlX2xpc3QubnVtID0gbGVuKHZhbHVlcykKKy0gKiAgICAgICAgIG5vZGVfbGlzdC52YWx1 ZXMgPSBOVUxMICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIG5vZGVf bGlzdC5rZXlzID0gTlVMTAorLSAqICAgICAgICAgaWYgbm9kZV9saXN0Lm51bToKKy0gKi8KKy0g IF9fcHl4X3Zfbm9kZV9saXN0LT52YWx1ZXMgPSBOVUxMOworLQorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ3MgorLSAqICAgICAgICAgbm9kZV9saXN0Lm51bSA9IGxlbih2 YWx1ZXMpCistICogICAgICAgICBub2RlX2xpc3QudmFsdWVzID0gTlVMTAorLSAqICAgICAgICAg bm9kZV9saXN0LmtleXMgPSBOVUxMICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgIGlmIG5vZGVfbGlzdC5udW06CistICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVl cyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2X25vZGUpKQor LSAqLworLSAgX19weXhfdl9ub2RlX2xpc3QtPmtleXMgPSBOVUxMOworLQorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3MworLSAqICAgICAgICAgbm9kZV9saXN0LnZhbHVl cyA9IE5VTEwKKy0gKiAgICAgICAgIG5vZGVfbGlzdC5rZXlzID0gTlVMTAorLSAqICAgICAgICAg aWYgbm9kZV9saXN0Lm51bTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxvYyhub2RlX2xpc3QubnVt ICogc2l6ZW9mKG1wdl9ub2RlKSkKKy0gKiAgICAgICAgIGZvciBpLCB2YWx1ZSBpbiBlbnVtZXJh dGUodmFsdWVzKToKKy0gKi8KKy0gIF9fcHl4X3RfMiA9IChfX3B5eF92X25vZGVfbGlzdC0+bnVt ICE9IDApOworLSAgaWYgKF9fcHl4X3RfMikgeworLQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDc0CistICogICAgICAgICBub2RlX2xpc3Qua2V5cyA9IE5VTEwKKy0g KiAgICAgICAgIGlmIG5vZGVfbGlzdC5udW06CistICogICAgICAgICAgICAgbm9kZV9saXN0LnZh bHVlcyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2X25vZGUp KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBmb3IgaSwgdmFsdWUg aW4gZW51bWVyYXRlKHZhbHVlcyk6CistICogICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9y bWF0X2Zvcih2YWx1ZSkKKy0gKi8KKy0gICAgX19weXhfdl9ub2RlX2xpc3QtPnZhbHVlcyA9ICgo c3RydWN0IG1wdl9ub2RlICopbWFsbG9jKChfX3B5eF92X25vZGVfbGlzdC0+bnVtICogKHNpemVv ZihzdHJ1Y3QgbXB2X25vZGUpKSkpKTsKKy0KKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ3MworLSAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKKy0gKiAg ICAgICAgIG5vZGVfbGlzdC5rZXlzID0gTlVMTAorLSAqICAgICAgICAgaWYgbm9kZV9saXN0Lm51 bTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG5vZGVfbGlz dC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxvYyhub2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9u b2RlKSkKKy0gKiAgICAgICAgIGZvciBpLCB2YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVzKToKKy0g Ki8KKy0gIH0KKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzUKKy0g KiAgICAgICAgIGlmIG5vZGVfbGlzdC5udW06CistICogICAgICAgICAgICAgbm9kZV9saXN0LnZh bHVlcyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2X25vZGUp KQorLSAqICAgICAgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9y bWF0X2Zvcih2YWx1ZSkKKy0gKiAgICAgICAgICAgICBub2RlID0gc2VsZi5fcHJlcF9uYXRpdmVf dmFsdWUodmFsdWUsIGZvcm1hdCkKKy0gKi8KKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMCk7 CistICBfX3B5eF90XzMgPSBfX3B5eF9pbnRfMDsKKy0gIGlmIChsaWtlbHkoUHlMaXN0X0NoZWNr RXhhY3QoX19weXhfdl92YWx1ZXMpKSB8fCBQeVR1cGxlX0NoZWNrRXhhY3QoX19weXhfdl92YWx1 ZXMpKSB7CistICAgIF9fcHl4X3RfNCA9IF9fcHl4X3ZfdmFsdWVzOyBfX1B5eF9JTkNSRUYoX19w eXhfdF80KTsgX19weXhfdF8xID0gMDsKKy0gICAgX19weXhfdF81ID0gTlVMTDsKKy0gIH0gZWxz ZSB7CistICAgIF9fcHl4X3RfMSA9IC0xOyBfX3B5eF90XzQgPSBQeU9iamVjdF9HZXRJdGVyKF9f cHl4X3ZfdmFsdWVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDc1 LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgIF9f cHl4X3RfNSA9IFB5X1RZUEUoX19weXhfdF80KS0+dHBfaXRlcm5leHQ7IGlmICh1bmxpa2VseSgh X19weXhfdF81KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCistICB9CistICBm b3IgKDs7KSB7CistICAgIGlmIChsaWtlbHkoIV9fcHl4X3RfNSkpIHsKKy0gICAgICBpZiAobGlr ZWx5KFB5TGlzdF9DaGVja0V4YWN0KF9fcHl4X3RfNCkpKSB7CistICAgICAgICBpZiAoX19weXhf dF8xID49IFB5TGlzdF9HRVRfU0laRShfX3B5eF90XzQpKSBicmVhazsKKy0gICAgICAgICNpZiBD WVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUwor LSAgICAgICAgX19weXhfdF82ID0gUHlMaXN0X0dFVF9JVEVNKF9fcHl4X3RfNCwgX19weXhfdF8x KTsgX19QeXhfSU5DUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfMSsrOyBpZiAodW5saWtlbHkoMCA8 IDApKSBfX1BZWF9FUlIoMCwgNDc1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICAgICNlbHNlCist ICAgICAgICBfX3B5eF90XzYgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF80LCBfX3B5eF90XzEp OyBfX3B5eF90XzErKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDc1 LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAg ICAgICAgI2VuZGlmCistICAgICAgfSBlbHNlIHsKKy0gICAgICAgIGlmIChfX3B5eF90XzEgPj0g UHlUdXBsZV9HRVRfU0laRShfX3B5eF90XzQpKSBicmVhazsKKy0gICAgICAgICNpZiBDWVRIT05f QVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworLSAgICAg ICAgX19weXhfdF82ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF90XzQsIF9fcHl4X3RfMSk7IF9f UHl4X0lOQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzErKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkg X19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCistICAgICAgICAjZWxzZQorLSAgICAg ICAgX19weXhfdF82ID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfNCwgX19weXhfdF8xKTsgX19w eXhfdF8xKys7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19w eXhfTDFfZXJyb3IpCistICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgICAg ICNlbmRpZgorKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworKyAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJnZXRfcHJvcGVydHlfYXN5 bmMgKHdyYXBwZXIpIiwgMCk7CisrICB7CisrICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5 YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3Byb3AsJl9fcHl4X25fc19kYXRhLDB9OworKyAgICBQ eU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07CisrICAgIHZhbHVlc1sxXSA9ICgoUHlPYmplY3Qg KilQeV9Ob25lKTsKKysgICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7CisrICAgICAgUHlf c3NpemVfdCBrd19hcmdzOworKyAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1 cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpOworKyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKysg ICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywg MSk7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAxOiB2YWx1 ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworKyAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMDogYnJlYWs7CisrICAgICAgICBkZWZhdWx0 OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworICAgICAgIH0KKy0gICAgfSBlbHNlIHsK Ky0gICAgICBfX3B5eF90XzYgPSBfX3B5eF90XzUoX19weXhfdF80KTsKKy0gICAgICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIHsKKy0gICAgICAgIFB5T2JqZWN0KiBleGNfdHlwZSA9IFB5RXJy X09jY3VycmVkKCk7CistICAgICAgICBpZiAoZXhjX3R5cGUpIHsKKy0gICAgICAgICAgaWYgKGxp a2VseShfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoZXhjX3R5cGUsIFB5RXhjX1N0 b3BJdGVyYXRpb24pKSkgUHlFcnJfQ2xlYXIoKTsKKy0gICAgICAgICAgZWxzZSBfX1BZWF9FUlIo MCwgNDc1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19w eXhfa3dkcyk7CisrICAgICAgc3dpdGNoIChwb3NfYXJncykgeworKyAgICAgICAgY2FzZSAgMDoK KysgICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3Ry KF9fcHl4X2t3ZHMsIF9fcHl4X25fc19wcm9wKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAg IGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgICAgIENZVEhPTl9GQUxM VEhST1VHSDsKKysgICAgICAgIGNhc2UgIDE6CisrICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsK KysgICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19w eXhfa3dkcywgX19weXhfbl9zX2RhdGEpOworKyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVz WzFdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorICAgICAgICAgfQorLSAgICAgICAgYnJlYWs7Cisg ICAgICAgfQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgICB9CistICAgIF9f UHl4X1hERUNSRUZfU0VUKF9fcHl4X3ZfdmFsdWUsIF9fcHl4X3RfNik7CistICAgIF9fcHl4X3Rf NiA9IDA7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9YREVDUkVG X1NFVChfX3B5eF92X2ksIF9fcHl4X3RfMyk7CistICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50 X0FkZE9iakMoX19weXhfdF8zLCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsKKy0gICAg X19weXhfdF8zID0gX19weXhfdF82OworLSAgICBfX3B5eF90XzYgPSAwOworLQorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc2CistICogICAgICAgICAgICAgbm9kZV9s aXN0LnZhbHVlcyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2 X25vZGUpKQorLSAqICAgICAgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOgor LSAqICAgICAgICAgICAgIGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBub2RlID0gc2VsZi5fcHJlcF9u YXRpdmVfdmFsdWUodmFsdWUsIGZvcm1hdCkKKy0gKiAgICAgICAgICAgICBub2RlX2xpc3QudmFs dWVzW2ldID0gbm9kZQorLSAqLworLSAgICBfX3B5eF90XzcgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0X2Zvcik7 IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ3NiwgX19weXhfTDFfZXJy b3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgICBfX3B5eF90XzggPSBOVUxM OworLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVj ayhfX3B5eF90XzcpKSkgeworLSAgICAgIF9fcHl4X3RfOCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9f cHl4X3RfNyk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzgpKSB7CistICAgICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF83KTsKKy0gICAg ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzgpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0 aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF83LCBmdW5jdGlvbik7Cisr ICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworKyAgICAgICAgaWYgKHVubGlrZWx5 KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVz LCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAiZ2V0X3Byb3BlcnR5X2FzeW5jIikgPCAwKSkgX19QWVhf RVJSKDAsIDU3NCwgX19weXhfTDNfZXJyb3IpCisrICAgICAgfQorKyAgICB9IGVsc2UgeworKyAg ICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgeworKyAgICAgICAgY2Fz ZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKysgICAg ICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5 VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CisrICAgICAgICBicmVhazsKKysgICAgICAg IGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisgICAgICAgfQorICAgICB9 CistICAgIF9fcHl4X3RfNiA9IChfX3B5eF90XzgpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdz KF9fcHl4X3RfNywgX19weXhfdF84LCBfX3B5eF92X3ZhbHVlKSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF83LCBfX3B5eF92X3ZhbHVlKTsKKy0gICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA0NzYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Cist ICAgIF9fcHl4X3RfOSA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50X0FzX2VudW1fX21w dl9mb3JtYXQoX19weXhfdF82KSk7IGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkgX19Q WVhfRVJSKDAsIDQ3NiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICBfX3B5eF92X2Zvcm1hdCA9IF9fcHl4X3RfOTsKKy0K Ky0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3NworLSAqICAgICAgICAg Zm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOgorLSAqICAgICAgICAgICAgIGZvcm1h dCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCistICogICAgICAgICAgICAgbm9kZSA9IHNlbGYu X3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICBub2RlX2xpc3QudmFsdWVzW2ldID0gbm9kZQorLSAqICAg ICAgICAgcmV0dXJuIG5vZGVfbGlzdAorLSAqLworLSAgICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoX19weXhfdl9mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzcsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF82KTsKKy0gICAgX19weXhfdl9ub2RlID0gKChzdHJ1Y3QgX19weXhfdnRh YnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19w eXhfdnRhYiktPl9wcmVwX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3ZfdmFsdWUs IF9fcHl4X3RfNik7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OworLQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc4CistICogICAg ICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkKKy0gKiAgICAgICAgICAg ICBub2RlID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUodmFsdWUsIGZvcm1hdCkKKy0gKiAgICAg ICAgICAgICBub2RlX2xpc3QudmFsdWVzW2ldID0gbm9kZSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICByZXR1cm4gbm9kZV9saXN0CistICogCistICovCistICAgIF9f cHl4X3RfMTAgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5eF92X2kpOyBpZiAodW5saWtl bHkoKF9fcHl4X3RfMTAgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBf X1BZWF9FUlIoMCwgNDc4LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgKF9fcHl4X3Zfbm9kZV9saXN0 LT52YWx1ZXNbX19weXhfdF8xMF0pID0gX19weXhfdl9ub2RlOworLQorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc1CistICogICAgICAgICBpZiBub2RlX2xpc3QubnVt OgorLSAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxvYyhu b2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkKKy0gKiAgICAgICAgIGZvciBpLCB2YWx1 ZSBpbiBlbnVtZXJhdGUodmFsdWVzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgICAgIGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCistICogICAgICAg ICAgICAgbm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCistICov CisrICAgIF9fcHl4X3ZfcHJvcCA9IHZhbHVlc1swXTsKKysgICAgX19weXhfdl9kYXRhID0gdmFs dWVzWzFdOworICAgfQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7 CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0KKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzkKKy0gKiAgICAgICAgICAgICBub2RlID0g c2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUodmFsdWUsIGZvcm1hdCkKKy0gKiAgICAgICAgICAgICBu b2RlX2xpc3QudmFsdWVzW2ldID0gbm9kZQorLSAqICAgICAgICAgcmV0dXJuIG5vZGVfbGlzdCAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGNkZWYgbXB2X25vZGVf bGlzdCogX3ByZXBfbm9kZV9tYXAoc2VsZiwgbWFwKToKKy0gKi8KKy0gIF9fcHl4X3IgPSBfX3B5 eF92X25vZGVfbGlzdDsKKy0gIGdvdG8gX19weXhfTDA7CistCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NDY2CistICogICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT05F CistICogCistICogICAgIGNkZWYgbXB2X25vZGVfbGlzdCogX3ByZXBfbm9kZV9saXN0KHNlbGYs IHZhbHVlcyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYg bXB2X25vZGUgbm9kZQorLSAqICAgICAgICAgY2RlZiBtcHZfZm9ybWF0IGZvcm1hdAorLSAqLwor KyAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKysgIF9fcHl4X0w1X2Fy Z3R1cGxlX2Vycm9yOjsKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJnZXRfcHJvcGVy dHlfYXN5bmMiLCAwLCAxLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhf RVJSKDAsIDU3NCwgX19weXhfTDNfZXJyb3IpCisrICBfX3B5eF9MM19lcnJvcjo7CisrICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmdldF9wcm9wZXJ0eV9h c3luYyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gTlVMTDsKKysgIF9fcHl4 X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlfYXN5bmMoKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwg X19weXhfdl9wcm9wLCBfX3B5eF92X2RhdGEpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf OCk7CistICBfX1B5eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0 Ll9wcmVwX25vZGVfbGlzdCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUsIDEsIDApOworLSAgX19weXhfciA9IDA7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9Y REVDUkVGKF9fcHl4X3ZfaSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfdmFsdWUpOworICAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9Cisg CistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ4MQorLSAqICAgICAgICAgcmV0 dXJuIG5vZGVfbGlzdAorLSAqIAorLSAqICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25v ZGVfbWFwKHNlbGYsIG1hcCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIGNkZWYgY2hhciogY2tleQorLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBsaXN0 CistICovCistCistc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX21hcChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X21hcCkgeworLSAgY2hhciAqX19weXhfdl9ja2V5OworLSAgc3RydWN0IG1wdl9ub2RlX2xp c3QgKl9fcHl4X3ZfbGlzdDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2tleXMgPSBOVUxMOworLSAg UHlPYmplY3QgKl9fcHl4X3ZfaSA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdl9rZXkgPSBO VUxMOworLSAgc3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X3I7Cisrc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlf YXN5bmMoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQeU9iamVjdCAqX19weXhfdl9kYXRh KSB7CisrICB1aW50NjRfdCBfX3B5eF92X2lkX2RhdGE7CisrICBQeU9iamVjdCAqX19weXhfdl91 c2VyZGF0YXMgPSBOVUxMOworKyAgY2hhciBjb25zdCAqX19weXhfdl9wcm9wX2M7CisrICBpbnQg X19weXhfdl9lcnI7CisrICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisgICBQeU9i amVjdCAqX19weXhfdF8yID0gTlVMTDsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOwor LSAgUHlfc3NpemVfdCBfX3B5eF90XzQ7CistICBpbnQgX19weXhfdF81OworLSAgUHlPYmplY3Qg KigqX19weXhfdF82KShQeU9iamVjdCAqKTsKKysgIFB5X2hhc2hfdCBfX3B5eF90XzQ7CisrICBQ eU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKysgIGludCBfX3B5eF90XzY7CisgICBQeU9iamVj dCAqX19weXhfdF83ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzggPSBOVUxMOworLSAg Y2hhciAqX19weXhfdF85OworLSAgUHlfc3NpemVfdCBfX3B5eF90XzEwOworLSAgUHlfc3NpemVf dCBfX3B5eF90XzExOworKyAgaW50IF9fcHl4X3RfODsKKysgIGludCBfX3B5eF90Xzk7CisrICBj aGFyIGNvbnN0ICpfX3B5eF90XzEwOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25z dCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7 CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX3ByZXBfbm9kZV9tYXAiLCAwKTsKKysg IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJnZXRfcHJvcGVydHlfYXN5bmMiLCAwKTsKKysg IF9fUHl4X0lOQ1JFRihfX3B5eF92X3Byb3ApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ4NAorLSAqICAgICAgICAgY2RlZiBjaGFyKiBja2V5CistICogICAgICAg ICBjZGVmIG1wdl9ub2RlX2xpc3QqIGxpc3QKKy0gKiAgICAgICAgIGxpc3QgPSBzZWxmLl9wcmVw X25vZGVfbGlzdChtYXAudmFsdWVzKCkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgIGtleXMgPSBtYXAua2V5cygpCistICogICAgICAgICBpZiBub3QgbGVuKGtleXMp OgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4MworKyAqICAgICAgICAg ZGF0YTogVmFsdWUgdG8gYmUgcGFzc2VkIGludG8gdGhlIHJlcGx5X3VzZXJkYXRhIG9mIHRoZSBy ZXNwb25zZSBldmVudC4KKysgKiAgICAgICAgIFdyYXBzOiBtcHZfZ2V0X3Byb3BlcnR5X2FzeW5j IiIiCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCisrICogICAgICAgICBjZGVm IHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorICAqLworLSAgX19weXhf dF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X21hcCwgX19weXhfbl9zX3Zh bHVlcyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQ4NCwgX19weXhf TDFfZXJyb3IpCisrICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VSVElPTlMKKysgIGlmICh1 bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworKyAgICBpZiAodW5saWtlbHkoIShfX3B5eF92 X3NlbGYtPl9jdHggIT0gMCkpKSB7CisrICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRp b25FcnJvcik7CisrICAgICAgX19QWVhfRVJSKDAsIDU4MywgX19weXhfTDFfZXJyb3IpCisrICAg IH0KKysgIH0KKysgICNlbmRpZgorKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjU4NAorKyAqICAgICAgICAgV3JhcHM6IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMiIiIKKysg KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHBy b3ApICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWYgdWludDY0 X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisrICogICAgICAgICB1c2VyZGF0YXMg PSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorKyAqLworKyAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1ODQsIF9fcHl4X0wxX2Vycm9yKQorICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICBfX3B5eF90XzMgPSBOVUxMOworLSAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkp IHsKKysgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF8yKSkpIHsKKyAgICAgX19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NFTEYoX19w eXhfdF8yKTsKKyAgICAgaWYgKGxpa2VseShfX3B5eF90XzMpKSB7CisgICAgICAgUHlPYmplY3Qq IGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CitAQCAtMTAzNTMs MjIzICsxMTA5OSwyMzQgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX20KKyAgICAgICBfX1B5eF9E RUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworICAgICB9CisgICB9CistICBfX3B5eF90 XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBf X3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7CisrICBfX3B5 eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIs IF9fcHl4X3RfMywgX19weXhfdl9wcm9wKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfdF8yLCBfX3B5eF92X3Byb3ApOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5 eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNDg0 LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDU4NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19weXhfdl9saXN0 ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9wcmVwX25vZGVfbGlzdChfX3B5eF92X3Nl bGYsIF9fcHl4X3RfMSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKysgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl9wcm9wLCBfX3B5eF90XzEpOworKyAgX19w eXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODUK Ky0gKiAgICAgICAgIGNkZWYgbXB2X25vZGVfbGlzdCogbGlzdAorLSAqICAgICAgICAgbGlzdCA9 IHNlbGYuX3ByZXBfbm9kZV9saXN0KG1hcC52YWx1ZXMoKSkKKy0gKiAgICAgICAgIGtleXMgPSBt YXAua2V5cygpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIG5v dCBsZW4oa2V5cyk6CistICogICAgICAgICAgICAgcmV0dXJuIGxpc3QKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODUKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgK KysgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCisrICogICAgICAgICBjZGVmIHVpbnQ2 NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChp ZF9kYXRhLCBOb25lKQorKyAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6CisgICovCist ICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfbWFwLCBfX3B5 eF9uX3Nfa2V5cyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQ4NSwg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBQeU9iamVjdF9IYXNoKF9fcHl4X3ZfZGF0 YSk7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPT0gKChQeV9oYXNoX3QpLTEpKSkgX19QWVhfRVJS KDAsIDU4NSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF92X2lkX2RhdGEgPSAoKHVpbnQ2NF90 KV9fcHl4X3RfNCk7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTg2 CisrICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKQorKyAqICAgICAgICAgY2RlZiB1aW50 NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKysgKiAgICAgICAgIHVzZXJkYXRh cyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgorKyAqICAg ICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVw bHlVc2VyRGF0YShkYXRhKQorKyAqLworKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF9uX3NfZ2V0KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTg2LCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gTlVMTDsKKysgIF9f cHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoX19weXhfdl9pZF9kYXRhKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTg2LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgX19weXhfdF81ID0gTlVMTDsKKysgIF9f cHl4X3RfNiA9IDA7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRf U0VMRihfX3B5eF90XzIpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKKysgICAgX19w eXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgaWYgKGxpa2VseShf X3B5eF90XzUpKSB7CisgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZV TkNUSU9OKF9fcHl4X3RfMik7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7CisrICAg ICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7CisgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKKyAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworKyAgICAg IF9fcHl4X3RfNiA9IDE7CisgICAgIH0KKyAgIH0KKy0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzMp ID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5 eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhf dF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDQ4NSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK KysgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKysgIGlmIChQeUZ1bmN0aW9uX0NoZWNrKF9fcHl4 X3RfMikpIHsKKysgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF81LCBfX3B5 eF90XzMsIFB5X05vbmV9OworKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RD YWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODYsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKKysgIH0gZWxzZQorKyAgI2VuZGlmCisrICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FM TAorKyAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzIpKSB7CisrICAg IFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4X3RfNSwgX19weXhfdF8zLCBQeV9Ob25l fTsKKysgICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8y LCBfX3B5eF90ZW1wKzEtX19weXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDU4NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKysgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAg fSBlbHNlCisrICAjZW5kaWYKKysgIHsKKysgICAgX19weXhfdF83ID0gUHlUdXBsZV9OZXcoMitf X3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA1ODYsIF9f cHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKysgICAgaWYgKF9f cHl4X3RfNSkgeworKyAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF81KTsgUHlUdXBsZV9TRVRf SVRFTShfX3B5eF90XzcsIDAsIF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IE5VTEw7CisrICAgIH0K KysgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzMpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfNywgMCtfX3B5eF90XzYsIF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0lOQ1JFRihQeV9O b25lKTsKKysgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKysgICAgUHlUdXBsZV9TRVRfSVRF TShfX3B5eF90XzcsIDErX19weXhfdF82LCBQeV9Ob25lKTsKKysgICAgX19weXhfdF8zID0gMDsK KysgICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzIsIF9fcHl4X3Rf NywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU4NiwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgIH0KKyAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19weXhfdl9rZXlzID0gX19weXhfdF8xOwor KyAgX19weXhfdl91c2VyZGF0YXMgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ4NgorLSAqICAgICAgICAgbGlz dCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0KG1hcC52YWx1ZXMoKSkKKy0gKiAgICAgICAgIGtleXMg PSBtYXAua2V5cygpCistICogICAgICAgICBpZiBub3QgbGVuKGtleXMpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIGxpc3QKKy0gKiAgICAgICAg IGxpc3Qua2V5cyA9IDxjaGFyKio+bWFsbG9jKGxpc3QubnVtKQorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjU4NworKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRh ID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKysgKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVw bHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCisrICogICAgICAgICBpZiB1c2VyZGF0YXMg aXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHNl bGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShk YXRhKQorKyAqICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCisgICovCistICBfX3B5eF90XzQgPSBQ eU9iamVjdF9MZW5ndGgoX19weXhfdl9rZXlzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA9PSAo KFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDQ4NiwgX19weXhfTDFfZXJyb3IpCistICBf X3B5eF90XzUgPSAoKCEoX19weXhfdF80ICE9IDApKSAhPSAwKTsKKy0gIGlmIChfX3B5eF90XzUp IHsKKysgIF9fcHl4X3RfOCA9IChfX3B5eF92X3VzZXJkYXRhcyA9PSBQeV9Ob25lKTsKKysgIF9f cHl4X3RfOSA9IChfX3B5eF90XzggIT0gMCk7CisrICBpZiAoX19weXhfdF85KSB7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODcKKy0gKiAgICAgICAgIGtleXMg PSBtYXAua2V5cygpCistICogICAgICAgICBpZiBub3QgbGVuKGtleXMpOgorLSAqICAgICAgICAg ICAgIHJldHVybiBsaXN0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg IGxpc3Qua2V5cyA9IDxjaGFyKio+bWFsbG9jKGxpc3QubnVtKQorLSAqICAgICAgICAgZm9yIGks IGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1ODgKKysgKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEu Z2V0KGlkX2RhdGEsIE5vbmUpCisrICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKKysg KiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRhdGFzID0g X1JlcGx5VXNlckRhdGEoZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgdXNlcmRhdGFzLmFkZCgpCisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3Bf YyA9IHByb3AKKyAgKi8KKy0gICAgX19weXhfciA9IF9fcHl4X3ZfbGlzdDsKKy0gICAgZ290byBf X3B5eF9MMDsKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4 X25fc19SZXBseVVzZXJEYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgNTg4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Cisr ICAgIF9fcHl4X3RfNyA9IE5VTEw7CisrICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg dW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKysgICAgICBfX3B5eF90Xzcg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICAgIGlmIChsaWtlbHkoX19weXhf dF83KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfMik7CisrICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF83KTsKKysgICAg ICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfMiwgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQorKyAgICBfX3B5eF90XzEgPSAo X19weXhfdF83KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3Rf NywgX19weXhfdl9kYXRhKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBf X3B5eF92X2RhdGEpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9 IDA7CisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU4OCwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgaWYgKHVubGlrZWx5KF9fUHl4 X1NldEl0ZW1JbnQoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfdl9pZF9kYXRh LCBfX3B5eF90XzEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAw LCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNTg4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhf SU5DUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl91c2VyZGF0 YXMsIF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg2CistICog ICAgICAgICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QobWFwLnZhbHVlcygpKQorLSAqICAg ICAgICAga2V5cyA9IG1hcC5rZXlzKCkKKy0gKiAgICAgICAgIGlmIG5vdCBsZW4oa2V5cyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByZXR1cm4gbGlzdAor LSAqICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxsb2MobGlzdC5udW0pCisrICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODcKKysgKiAgICAgICAgIGNkZWYgdWlu dDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisrICogICAgICAgICB1c2VyZGF0 YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorKyAqICAgICAgICAg aWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1Jl cGx5VXNlckRhdGEoZGF0YSkKKysgKiAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorICAqLworICAg fQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ4OAorLSAqICAgICAg ICAgaWYgbm90IGxlbihrZXlzKToKKy0gKiAgICAgICAgICAgICByZXR1cm4gbGlzdAorLSAqICAg ICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxsb2MobGlzdC5udW0pICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGZvciBpLCBrZXkgaW4gZW51bWVyYXRlKGtleXMp OgorLSAqICAgICAgICAgICAgIGtleSA9IF9zdHJlbmMoa2V5KQorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjU4OQorKyAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6 CisrICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRh cyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisrICogICAgICAgICB1c2VyZGF0YXMuYWRkKCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBw cm9wX2MgPSBwcm9wCisrICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgX19weXhfdl9s aXN0LT5rZXlzID0gKChjaGFyICoqKW1hbGxvYyhfX3B5eF92X2xpc3QtPm51bSkpOworKyAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19w eXhfbl9zX2FkZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU4OSwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fcHl4X3Rf NyA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhv ZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICBfX3B5eF90XzcgPSBQeU1ldGhvZF9HRVRfU0VM RihfX3B5eF90XzIpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfNykpIHsKKysgICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAg ICBfX1B5eF9JTkNSRUYoX19weXhfdF83KTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24p OworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgIH0K KysgIH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzcpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfNykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19w eXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysg IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU4OSwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3Rf MSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg5CistICog ICAgICAgICAgICAgcmV0dXJuIGxpc3QKKy0gKiAgICAgICAgIGxpc3Qua2V5cyA9IDxjaGFyKio+ bWFsbG9jKGxpc3QubnVtKQorLSAqICAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5 cyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBrZXkgPSBf c3RyZW5jKGtleSkKKy0gKiAgICAgICAgICAgICBja2V5ID0ga2V5CisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NTkwCisrICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2Vy ZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisrICogICAg ICAgICB1c2VyZGF0YXMuYWRkKCkKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9j ID0gcHJvcCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB3aXRoIG5v Z2lsOgorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMoCisgICov CistICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzApOworLSAgX19weXhfdF8xID0gX19weXhfaW50 XzA7CistICBpZiAobGlrZWx5KFB5TGlzdF9DaGVja0V4YWN0KF9fcHl4X3Zfa2V5cykpIHx8IFB5 VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X2tleXMpKSB7CistICAgIF9fcHl4X3RfMiA9IF9fcHl4 X3Zfa2V5czsgX19QeXhfSU5DUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfNCA9IDA7CistICAgIF9f cHl4X3RfNiA9IE5VTEw7CistICB9IGVsc2UgeworLSAgICBfX3B5eF90XzQgPSAtMTsgX19weXhf dF8yID0gUHlPYmplY3RfR2V0SXRlcihfX3B5eF92X2tleXMpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF82ID0gUHlfVFlQRShfX3B5eF90XzIpLT50cF9p dGVybmV4dDsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5 eF9MMV9lcnJvcikKKy0gIH0KKy0gIGZvciAoOzspIHsKKy0gICAgaWYgKGxpa2VseSghX19weXhf dF82KSkgeworLSAgICAgIGlmIChsaWtlbHkoUHlMaXN0X0NoZWNrRXhhY3QoX19weXhfdF8yKSkp IHsKKy0gICAgICAgIGlmIChfX3B5eF90XzQgPj0gUHlMaXN0X0dFVF9TSVpFKF9fcHl4X3RfMikp IGJyZWFrOworLSAgICAgICAgI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhP Tl9BVk9JRF9CT1JST1dFRF9SRUZTCistICAgICAgICBfX3B5eF90XzMgPSBQeUxpc3RfR0VUX0lU RU0oX19weXhfdF8yLCBfX3B5eF90XzQpOyBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsgX19weXhf dF80Kys7IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4X0wxX2Vy cm9yKQorLSAgICAgICAgI2Vsc2UKKy0gICAgICAgIF9fcHl4X3RfMyA9IFB5U2VxdWVuY2VfSVRF TShfX3B5eF90XzIsIF9fcHl4X3RfNCk7IF9fcHl4X3RfNCsrOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4X0wxX2Vycm9yKQorLSAgICAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMyk7CistICAgICAgICAjZW5kaWYKKy0gICAgICB9IGVsc2UgeworLSAg ICAgICAgaWYgKF9fcHl4X3RfNCA+PSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X3RfMikpIGJyZWFr OworLSAgICAgICAgI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9J RF9CT1JST1dFRF9SRUZTCistICAgICAgICBfX3B5eF90XzMgPSBQeVR1cGxlX0dFVF9JVEVNKF9f cHl4X3RfMiwgX19weXhfdF80KTsgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfNCsr OyBpZiAodW5saWtlbHkoMCA8IDApKSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikK Ky0gICAgICAgICNlbHNlCistICAgICAgICBfX3B5eF90XzMgPSBQeVNlcXVlbmNlX0lURU0oX19w eXhfdF8yLCBfX3B5eF90XzQpOyBfX3B5eF90XzQrKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzMpOworLSAgICAgICAgI2VuZGlmCistICAgICAgfQorLSAgICB9IGVsc2Ugewor LSAgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNihfX3B5eF90XzIpOworLSAgICAgIGlmICh1bmxp a2VseSghX19weXhfdF8zKSkgeworLSAgICAgICAgUHlPYmplY3QqIGV4Y190eXBlID0gUHlFcnJf T2NjdXJyZWQoKTsKKy0gICAgICAgIGlmIChleGNfdHlwZSkgeworLSAgICAgICAgICBpZiAobGlr ZWx5KF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyhleGNfdHlwZSwgUHlFeGNfU3Rv cEl0ZXJhdGlvbikpKSBQeUVycl9DbGVhcigpOworLSAgICAgICAgICBlbHNlIF9fUFlYX0VSUigw LCA0ODksIF9fcHl4X0wxX2Vycm9yKQorLSAgICAgICAgfQorLSAgICAgICAgYnJlYWs7CistICAg ICAgfQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICB9CistICAgIF9fUHl4 X1hERUNSRUZfU0VUKF9fcHl4X3Zfa2V5LCBfX3B5eF90XzMpOworLSAgICBfX3B5eF90XzMgPSAw OworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfWERFQ1JFRl9TRVQo X19weXhfdl9pLCBfX3B5eF90XzEpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9BZGRP YmpDKF9fcHl4X3RfMSwgX19weXhfaW50XzEsIDEsIDAsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8zKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4 X3RfMSA9IF9fcHl4X3RfMzsKKy0gICAgX19weXhfdF8zID0gMDsKKy0KKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5MAorLSAqICAgICAgICAgbGlzdC5rZXlzID0gPGNo YXIqKj5tYWxsb2MobGlzdC5udW0pCistICogICAgICAgICBmb3IgaSwga2V5IGluIGVudW1lcmF0 ZShrZXlzKToKKy0gKiAgICAgICAgICAgICBrZXkgPSBfc3RyZW5jKGtleSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGNrZXkgPSBrZXkKKy0gKiAgICAgICAg ICAgICBsaXN0LmtleXNbaV0gPSA8Y2hhcio+bWFsbG9jKGxlbihrZXkpICsgMSkKKy0gKi8KKy0g ICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzcsIF9fcHl4X25fc19zdHJlbmMp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA0OTAsIF9fcHl4X0wxX2Vy cm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKy0gICAgX19weXhfdF84ID0gTlVM TDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9D aGVjayhfX3B5eF90XzcpKSkgeworLSAgICAgIF9fcHl4X3RfOCA9IFB5TWV0aG9kX0dFVF9TRUxG KF9fcHl4X3RfNyk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzgpKSB7CistICAgICAgICBQ eU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF83KTsKKy0g ICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzgpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1 bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF83LCBmdW5jdGlvbik7 CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzgpID8gX19QeXhf UHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNywgX19weXhfdF84LCBfX3B5eF92X2tleSkgOiBf X1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNywgX19weXhfdl9rZXkpOworLSAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7CistICAgIGlmICh1bmxpa2Vs eSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ5MCwgX19weXhfTDFfZXJyb3IpCistICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19w eXhfdF83ID0gMDsKKy0gICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X2tleSwgX19weXhfdF8z KTsKKy0gICAgX19weXhfdF8zID0gMDsKKy0KKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ5MQorLSAqICAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6 CistICogICAgICAgICAgICAga2V5ID0gX3N0cmVuYyhrZXkpCistICogICAgICAgICAgICAgY2tl eSA9IGtleSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgbGlz dC5rZXlzW2ldID0gPGNoYXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCistICogICAgICAgICAgICAg c3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkKKy0gKi8KKy0gICAgX19weXhfdF85ID0gX19QeXhf UHlPYmplY3RfQXNXcml0YWJsZVN0cmluZyhfX3B5eF92X2tleSk7IGlmICh1bmxpa2VseSgoIV9f cHl4X3RfOSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0OTEsIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX3B5eF92X2NrZXkgPSBfX3B5eF90Xzk7CisrICBfX3B5eF90XzEwID0g X19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9wcm9wKTsgaWYgKHVubGlrZWx5KCghX19w eXhfdF8xMCkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA1OTAsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfdl9wcm9wX2MgPSBfX3B5eF90XzEwOworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDkyCistICogICAgICAgICAgICAga2V5ID0gX3N0 cmVuYyhrZXkpCistICogICAgICAgICAgICAgY2tleSA9IGtleQorLSAqICAgICAgICAgICAgIGxp c3Qua2V5c1tpXSA9IDxjaGFyKj5tYWxsb2MobGVuKGtleSkgKyAxKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkK Ky0gKiAgICAgICAgIHJldHVybiBsaXN0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTkxCisrICogICAgICAgICB1c2VyZGF0YXMuYWRkKCkKKysgKiAgICAgICAgIGNkZWYg Y29uc3QgY2hhciogcHJvcF9jID0gcHJvcAorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9nZXRfcHJv cGVydHlfYXN5bmMoCisrICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKKyAgKi8KKy0gICAg X19weXhfdF8xMCA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X2tleSk7IGlmICh1bmxpa2VseShf X3B5eF90XzEwID09ICgoUHlfc3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMCwgNDkyLCBfX3B5eF9M MV9lcnJvcikKKy0gICAgX19weXhfdF8xMSA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4 X3ZfaSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8xMSA9PSAoUHlfc3NpemVfdCktMSkgJiYgUHlF cnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0OTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgICAo X19weXhfdl9saXN0LT5rZXlzW19fcHl4X3RfMTFdKSA9ICgoY2hhciAqKW1hbGxvYygoX19weXhf dF8xMCArIDEpKSk7CisrICB7CisrICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlU aHJlYWRTdGF0ZSAqX3NhdmU7CisrICAgICAgUHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19Q eXhfRmFzdEdJTF9SZW1lbWJlcigpOworKyAgICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsK KyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5MworLSAqICAgICAg ICAgICAgIGNrZXkgPSBrZXkKKy0gKiAgICAgICAgICAgICBsaXN0LmtleXNbaV0gPSA8Y2hhcio+ bWFsbG9jKGxlbihrZXkpICsgMSkKKy0gKiAgICAgICAgICAgICBzdHJjcHkobGlzdC5rZXlzW2ld LCBja2V5KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1cm4g bGlzdAorLSAqIAorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5 MgorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wCisrICogICAgICAg ICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9nZXRfcHJvcGVydHlfYXN5 bmMoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgc2Vs Zi5fY3R4LAorKyAqICAgICAgICAgICAgICAgICBpZF9kYXRhLAorICAqLworLSAgICBfX3B5eF90 XzEwID0gX19QeXhfUHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9pKTsgaWYgKHVubGlrZWx5KChf X3B5eF90XzEwID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDQ5MywgX19weXhfTDFfZXJyb3IpCistICAgICh2b2lkKShzdHJjcHkoKF9fcHl4X3Zf bGlzdC0+a2V5c1tfX3B5eF90XzEwXSksIF9fcHl4X3ZfY2tleSkpOworKyAgICAgICAgX19weXhf dl9lcnIgPSBtcHZfZ2V0X3Byb3BlcnR5X2FzeW5jKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhf dl9pZF9kYXRhLCBfX3B5eF92X3Byb3BfYywgTVBWX0ZPUk1BVF9OT0RFKTsKKysgICAgICB9Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODkKKy0gKiAgICAgICAg ICAgICByZXR1cm4gbGlzdAorLSAqICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxsb2Mo bGlzdC5udW0pCistICogICAgICAgICBmb3IgaSwga2V5IGluIGVudW1lcmF0ZShrZXlzKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGtleSA9IF9zdHJlbmMo a2V5KQorLSAqICAgICAgICAgICAgIGNrZXkgPSBrZXkKKysgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTkxCisrICogICAgICAgICB1c2VyZGF0YXMuYWRkKCkKKysgKiAg ICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcAorKyAqICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9 IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMoCisrICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwK KyAgKi8KKysgICAgICAvKmZpbmFsbHk6Ki8geworKyAgICAgICAgLypub3JtYWwgZXhpdDoqL3sK KysgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAgIF9fUHl4X0Zhc3RHSUxf Rm9yZ2V0KCk7CisrICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKysgICAgICAgICAgI2VuZGlm CisrICAgICAgICAgIGdvdG8gX19weXhfTDY7CisrICAgICAgICB9CisrICAgICAgICBfX3B5eF9M Njo7CisrICAgICAgfQorICAgfQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTQKKy0gKiAgICAgICAgICAgICBs aXN0LmtleXNbaV0gPSA8Y2hhcio+bWFsbG9jKGxlbihrZXkpICsgMSkKKy0gKiAgICAgICAgICAg ICBzdHJjcHkobGlzdC5rZXlzW2ldLCBja2V5KQorLSAqICAgICAgICAgcmV0dXJuIGxpc3QgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjU5OAorKyAqICAgICAgICAgICAgICAgICBNUFZfRk9STUFUX05PREUsCisrICogICAg ICAgICAgICAgKQorKyAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisgICogCistICogICAgIGNkZWYgbXB2X25vZGUgX3ByZXBfbmF0aXZlX3ZhbHVlKHNl bGYsIHZhbHVlLCBmb3JtYXQpOgorKyAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhz ZWxmLCBwcm9wLCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6CisgICovCistICBfX3B5eF9yID0g X19weXhfdl9saXN0OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgIF9fcHl4X3RfMSA9 IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNTk4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworKyAgX19weXhfciA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7Cisg ICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQ4MQorLSAqICAgICAgICAgcmV0dXJuIG5vZGVfbGlzdAorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjU3NAorKyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYg Z2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIkdldHMgdGhlIHZhbHVlIG9mIGEgcHJvcGVy dHkgYXN5bmNocm9ub3VzbHkuCisgICogCistICogICAgIGNkZWYgbXB2X25vZGVfbGlzdCogX3By ZXBfbm9kZV9tYXAoc2VsZiwgbWFwKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgY2RlZiBjaGFyKiBja2V5CistICogICAgICAgICBjZGVmIG1wdl9ub2RlX2xpc3Qq IGxpc3QKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworQEAgLTEwNTc3LDYx OCArMTEzMzQsNTM5IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9tCisgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMSk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CisgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CisgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7CistICBfX1B5 eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0Ll9wcmVwX25vZGVf bWFwIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSwgMSwgMCk7 CistICBfX3B5eF9yID0gMDsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMu bXB2LkNvbnRleHQuZ2V0X3Byb3BlcnR5X2FzeW5jIiwgX19weXhfY2xpbmVubywgX19weXhfbGlu ZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKyAgIF9fcHl4X0wwOjsK Ky0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9rZXlzKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhf dl9pKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9rZXkpOworKyAgX19QeXhfWERFQ1JFRihf X3B5eF92X3VzZXJkYXRhcyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfcHJvcCk7CisrICBf X1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0OTYKKy0gKiAgICAgICAgIHJldHVybiBsaXN0CisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjYwMAorKyAqICAgICAgICAgcmV0dXJuIGVycgorICAqIAorLSAqICAg ICBjZGVmIG1wdl9ub2RlIF9wcmVwX25hdGl2ZV92YWx1ZShzZWxmLCB2YWx1ZSwgZm9ybWF0KTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBu b2RlCistICogICAgICAgICBub2RlLmZvcm1hdCA9IGZvcm1hdAorKyAqICAgICBkZWYgdHJ5X2dl dF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9wLCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHRyeToKKysgKiAgICAgICAg ICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKQorICAq LworIAorLXN0YXRpYyBzdHJ1Y3QgbXB2X25vZGUgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFs dWUsIFB5T2JqZWN0ICpfX3B5eF92X2Zvcm1hdCkgeworLSAgc3RydWN0IG1wdl9ub2RlIF9fcHl4 X3Zfbm9kZTsKKy0gIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKy0gIGVudW0gbXB2X2Zvcm1hdCBfX3B5eF90XzE7CistICBQeU9iamVjdCAq X19weXhfdF8yID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgaW50 IF9fcHl4X3RfNDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOworLSAgUHlfc3NpemVf dCBfX3B5eF90XzY7CistICBjaGFyIGNvbnN0ICpfX3B5eF90Xzc7CistICBpbnQgX19weXhfdF84 OworLSAgaW50NjRfdCBfX3B5eF90Xzk7CistICBkb3VibGUgX19weXhfdF8xMDsKKysvKiBQeXRo b24gd3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzEzdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhQeU9iamVjdCAqX19weXhf dl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnBy b3RvKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8xM3RyeV9nZXRfcHJvcGVydHlfYXN5bmMoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwg UHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CisrICBQeU9iamVj dCAqX19weXhfdl9wcm9wID0gMDsKKysgIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEgPSAwOworKyAg UHlPYmplY3QgKl9fcHl4X3ZfZGVmYXVsdCA9IDA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsK KyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGlu ZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfcHJlcF9uYXRpdmVfdmFs dWUiLCAwKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlKTsKKy0KKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTgKKy0gKiAgICAgY2RlZiBtcHZfbm9kZSBfcHJl cF9uYXRpdmVfdmFsdWUoc2VsZiwgdmFsdWUsIGZvcm1hdCk6CistICogICAgICAgICBjZGVmIG1w dl9ub2RlIG5vZGUKKy0gKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NU UklORzoKKy0gKiAgICAgICAgICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUpCistICovCistICBf X3B5eF90XzEgPSAoKGVudW0gbXB2X2Zvcm1hdClfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZm9y bWF0KF9fcHl4X3ZfZm9ybWF0KSk7IGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkgX19Q WVhfRVJSKDAsIDQ5OCwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF92X25vZGUuZm9ybWF0ID0g X19weXhfdF8xOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5OQor LSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlCistICogICAgICAgICBub2RlLmZvcm1hdCA9 IGZvcm1hdAorLSAqICAgICAgICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgdmFsdWUgPSBfc3RyZW5j KHZhbHVlKQorLSAqICAgICAgICAgICAgIG5vZGUudS5zdHJpbmcgPSA8Y2hhcio+bWFsbG9jKGxl bih2YWx1ZSkgKyAxKQorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9lbnVt X19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfU1RSSU5HKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgNDk5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworLSAgX19weXhfdF8zID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3Jt YXQsIF9fcHl4X3RfMiwgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7IGlmICh1bmxp a2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ5OSwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIF9fcHl4X3RfNCA9IF9f UHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoX19weXhfdF80IDwg MCkpIF9fUFlYX0VSUigwLCA0OTksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9f cHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAoX19weXhfdF80KSB7CistCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDAKKy0gKiAgICAgICAgIG5vZGUuZm9y bWF0ID0gZm9ybWF0CistICogICAgICAgICBpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6 CistICogICAgICAgICAgICAgdmFsdWUgPSBfc3RyZW5jKHZhbHVlKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgbm9kZS51LnN0cmluZyA9IDxjaGFyKj5tYWxs b2MobGVuKHZhbHVlKSArIDEpCistICogICAgICAgICAgICAgc3RyY3B5KG5vZGUudS5zdHJpbmcs IHZhbHVlKQorLSAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwg X19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDUwMCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAg ICBfX3B5eF90XzUgPSBOVUxMOworLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVu bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgICAgX19weXhfdF81ID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKy0gICAgICBpZiAobGlrZWx5KF9fcHl4X3Rf NSkpIHsKKy0gICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElP TihfX3B5eF90XzIpOworLSAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7CistICAgICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzIsIGZ1bmN0aW9uKTsKKy0gICAgICB9CistICAgIH0KKy0gICAgX19weXhfdF8zID0gKF9f cHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzUs IF9fcHl4X3ZfdmFsdWUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9f cHl4X3ZfdmFsdWUpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9 IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUwMCwgX19w eXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgX19QeXhfREVDUkVGX1NFVChf X3B5eF92X3ZhbHVlLCBfX3B5eF90XzMpOworLSAgICBfX3B5eF90XzMgPSAwOworKyAgUHlPYmpl Y3QgKl9fcHl4X3IgPSAwOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJ0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jICh3cmFwcGVyKSIs IDApOworKyAgeworKyAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7 Jl9fcHl4X25fc19wcm9wLCZfX3B5eF9uX3NfZGF0YSwmX19weXhfbl9zX2RlZmF1bHQsMH07Cisr ICAgIFB5T2JqZWN0KiB2YWx1ZXNbM10gPSB7MCwwLDB9OworKyAgICB2YWx1ZXNbMV0gPSAoKFB5 T2JqZWN0ICopUHlfTm9uZSk7CisrICAgIHZhbHVlc1syXSA9ICgoUHlPYmplY3QgKilQeV9Ob25l KTsKKysgICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7CisrICAgICAgUHlfc3NpemVfdCBr d19hcmdzOworKyAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9T SVpFKF9fcHl4X2FyZ3MpOworKyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNh c2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CisrICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQ eVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOworKyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5 eF9hcmdzLCAwKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2Ug IDA6IGJyZWFrOworKyAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJv cjsKKysgICAgICB9CisrICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOwor KyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBp ZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2Rz LCBfX3B5eF9uX3NfcHJvcCkpICE9IDApKSBrd19hcmdzLS07CisrICAgICAgICBlbHNlIGdvdG8g X19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Cisr ICAgICAgICBjYXNlICAxOgorKyAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7CisrICAgICAgICAg IFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9f cHl4X25fc19kYXRhKTsKKysgICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1sxXSA9IHZhbHVl OyBrd19hcmdzLS07IH0KKysgICAgICAgIH0KKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsK KysgICAgICAgIGNhc2UgIDI6CisrICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKysgICAgICAg ICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywg X19weXhfbl9zX2RlZmF1bHQpOworKyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzJdID0g dmFsdWU7IGt3X2FyZ3MtLTsgfQorKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBpZiAodW5s aWtlbHkoa3dfYXJncyA+IDApKSB7CisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VP cHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywg cG9zX2FyZ3MsICJ0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jIikgPCAwKSkgX19QWVhfRVJSKDAsIDYw MCwgX19weXhfTDNfZXJyb3IpCisrICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgIHN3aXRj aCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgeworKyAgICAgICAgY2FzZSAgMzogdmFs dWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsKKysgICAgICAgIENZVEhP Tl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VU X0lURU0oX19weXhfYXJncywgMSk7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAg ICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDAp OworKyAgICAgICAgYnJlYWs7CisrICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1 cGxlX2Vycm9yOworKyAgICAgIH0KKysgICAgfQorKyAgICBfX3B5eF92X3Byb3AgPSB2YWx1ZXNb MF07CisrICAgIF9fcHl4X3ZfZGF0YSA9IHZhbHVlc1sxXTsKKysgICAgX19weXhfdl9kZWZhdWx0 ID0gdmFsdWVzWzJdOworKyAgfQorKyAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdf ZG9uZTsKKysgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKysgIF9fUHl4X1JhaXNlQXJndHVw bGVJbnZhbGlkKCJ0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jIiwgMCwgMSwgMywgUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA2MDAsIF9fcHl4X0wzX2Vycm9yKQorKyAg X19weXhfTDNfZXJyb3I6OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5t cHYuQ29udGV4dC50cnlfZ2V0X3Byb3BlcnR5X2FzeW5jIiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKysgIHJldHVybiBOVUxMOworKyAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6 OworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8x MnRyeV9nZXRfcHJvcGVydHlfYXN5bmMoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgX19weXhfdl9wcm9wLCBfX3B5eF92X2Rh dGEsIF9fcHl4X3ZfZGVmYXVsdCk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1MDEKKy0gKiAgICAgICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoK Ky0gKiAgICAgICAgICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUpCistICogICAgICAgICAgICAg bm9kZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBzdHJjcHkobm9kZS51LnN0cmluZywg dmFsdWUpCistICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CistICov CistICAgIF9fcHl4X3RfNiA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X3ZhbHVlKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfNiA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDUwMSwg X19weXhfTDFfZXJyb3IpCistICAgIF9fcHl4X3Zfbm9kZS51LnN0cmluZyA9ICgoY2hhciAqKW1h bGxvYygoX19weXhfdF82ICsgMSkpKTsKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDIKKy0gKiAgICAgICAg ICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUpCistICogICAgICAgICAgICAgbm9kZS51LnN0cmlu ZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpCistICogICAgICAgICAgICAgc3RyY3B5 KG5vZGUudS5zdHJpbmcsIHZhbHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CistICogICAgICAgICAgICAg bm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVsc2UgMAorLSAqLworLSAgICBfX3B5eF90XzcgPSBf X1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5KCghX19w eXhfdF83KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDUwMiwgX19weXhfTDFf ZXJyb3IpCistICAgICh2b2lkKShzdHJjcHkoX19weXhfdl9ub2RlLnUuc3RyaW5nLCBfX3B5eF90 XzcpKTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8xMnRyeV9nZXRfcHJvcGVydHlfYXN5bmMoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9w cm9wLCBQeU9iamVjdCAqX19weXhfdl9kYXRhLCBQeU9iamVjdCAqX19weXhfdl9kZWZhdWx0KSB7 CisrICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucworKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhf dF8yID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworKyAgUHlPYmplY3Qg Kl9fcHl4X3RfNCA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKysgIFB5 T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7 CisrICBpbnQgX19weXhfdF84OworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBj aGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cisr ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgidHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIsIDAp OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk5CistICogICAg ICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKKy0gKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0 CistICogICAgICAgICBpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUp CistICogICAgICAgICAgICAgbm9kZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVl KSArIDEpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjAxCisrICogCisr ICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSwg ZGVmYXVsdD1Ob25lKToKKysgKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhwcm9w LCBkYXRhPWRhdGEpCisrICogICAgICAgICBleGNlcHQgTVBWRXJyb3I6CisgICovCistICAgIGdv dG8gX19weXhfTDM7CistICB9CisrICB7CisrICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFy ZQorKyAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorKyAgICBfX1B5eF9FeGNlcHRpb25T YXZlKCZfX3B5eF90XzEsICZfX3B5eF90XzIsICZfX3B5eF90XzMpOworKyAgICBfX1B5eF9YR09U UkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19Q eXhfWEdPVFJFRihfX3B5eF90XzMpOworKyAgICAvKnRyeToqLyB7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTAzCistICogICAgICAgICAgICAgbm9kZS51LnN0cmlu ZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpCistICogICAgICAgICAgICAgc3RyY3B5 KG5vZGUudS5zdHJpbmcsIHZhbHVlKQorLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZP Uk1BVF9GTEFHOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg bm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVsc2UgMAorLSAqICAgICAgICAgZWxpZiBmb3JtYXQg PT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NjAyCisrICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3As IGRhdGE9Tm9uZSwgZGVmYXVsdD1Ob25lKToKKysgKiAgICAgICAgIHRyeToKKysgKiAgICAgICAg ICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBleGNlcHQgTVBWRXJyb3I6Cisr ICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgKi8KKy0gIF9fcHl4X3RfMyA9IF9fUHl4 X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX0ZMQUcpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA1MDMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMyk7CistICBfX3B5eF90XzIgPSBQeU9iamVjdF9SaWNoQ29tcGFy ZShfX3B5eF92X2Zvcm1hdCwgX19weXhfdF8zLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhf dF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTAzLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAg X19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlmICh1bmxpa2Vs eShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwMywgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIGlmIChfX3B5eF90XzQp IHsKKysgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgICAgIF9fcHl4X3RfNCA9IF9f UHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4 X25fc19nZXRfcHJvcGVydHlfYXN5bmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCA2MDIsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzQpOworKyAgICAgIF9fcHl4X3RfNSA9IFB5VHVwbGVfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNSkpIF9fUFlYX0VSUigwLCA2MDIsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzUpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3Byb3ApOwor KyAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9wcm9wKTsKKysgICAgICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfNSwgMCwgX19weXhfdl9wcm9wKTsKKysgICAgICBfX3B5eF90XzYgPSBfX1B5 eF9QeURpY3RfTmV3UHJlc2l6ZWQoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDYwMiwgX19weXhfTDNfZXJyb3IpCisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nik7CisrICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X3RfNiwgX19weXhfbl9zX2RhdGEs IF9fcHl4X3ZfZGF0YSkgPCAwKSBfX1BZWF9FUlIoMCwgNjAyLCBfX3B5eF9MM19lcnJvcikKKysg ICAgICBfX3B5eF90XzcgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfNCwgX19weXhfdF81 LCBfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA2MDIs IF9fcHl4X0wzX2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICAgIF9fcHl4X3IgPSBfX3B5eF90Xzc7CisrICAg ICAgX19weXhfdF83ID0gMDsKKysgICAgICBnb3RvIF9fcHl4X0w3X3RyeV9yZXR1cm47CisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDQKKy0gKiAgICAgICAgICAg ICBzdHJjcHkobm9kZS51LnN0cmluZywgdmFsdWUpCistICogICAgICAgICBlbGlmIGZvcm1hdCA9 PSBNUFZfRk9STUFUX0ZMQUc6CistICogICAgICAgICAgICAgbm9kZS51LmZsYWcgPSAxIGlmIHZh bHVlIGVsc2UgMCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBlbGlm IGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorLSAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2 NCA9IHZhbHVlCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwMQor KyAqIAorKyAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9wLCBkYXRh PU5vbmUsIGRlZmF1bHQ9Tm9uZSk6CisrICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHlfYXN5 bmMocHJvcCwgZGF0YT1kYXRhKQorKyAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOgorICAqLwor LSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl92YWx1ZSk7IGlm ICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwNCwgX19weXhfTDFfZXJy b3IpCistICAgIGlmIChfX3B5eF90XzQpIHsKKy0gICAgICBfX3B5eF90XzggPSAxOworLSAgICB9 IGVsc2UgeworLSAgICAgIF9fcHl4X3RfOCA9IDA7CisgICAgIH0KKy0gICAgX19weXhfdl9ub2Rl LnUuZmxhZyA9IF9fcHl4X3RfODsKKysgICAgX19weXhfTDNfZXJyb3I6OworKyAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgIF9fUHl4X1hERUNSRUYoX19w eXhfdF81KTsgX19weXhfdF81ID0gMDsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOyBf X3B5eF90XzYgPSAwOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9 IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDMKKy0gKiAg ICAgICAgICAgICBub2RlLnUuc3RyaW5nID0gPGNoYXIqPm1hbGxvYyhsZW4odmFsdWUpICsgMSkK Ky0gKiAgICAgICAgICAgICBzdHJjcHkobm9kZS51LnN0cmluZywgdmFsdWUpCistICogICAgICAg ICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICBub2RlLnUuZmxhZyA9IDEgaWYgdmFsdWUgZWxzZSAwCist ICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjAzCisrICogICAgICAgICB0cnk6CisrICogICAg ICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5X2FzeW5jKHByb3AsIGRhdGE9ZGF0YSkK KysgKiAgICAgICAgIGV4Y2VwdCBNUFZFcnJvcjogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisrICogCisgICovCistICAgIGdvdG8g X19weXhfTDM7CistICB9CisrICAgIF9fUHl4X0VyckZldGNoKCZfX3B5eF90XzcsICZfX3B5eF90 XzYsICZfX3B5eF90XzUpOworKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf NCwgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9F UlIoMCwgNjAzLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzQpOworKyAgICBfX3B5eF90XzggPSBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNo ZXMoX19weXhfdF83LCBfX3B5eF90XzQpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKysgICAgX19QeXhfRXJyUmVzdG9yZShfX3B5eF90XzcsIF9fcHl4X3Rf NiwgX19weXhfdF81KTsKKysgICAgX19weXhfdF83ID0gMDsgX19weXhfdF82ID0gMDsgX19weXhf dF81ID0gMDsKKysgICAgaWYgKF9fcHl4X3RfOCkgeworKyAgICAgIF9fUHl4X0FkZFRyYWNlYmFj aygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQudHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIsIF9f cHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgICAgIGlmIChf X1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfNSwgJl9fcHl4X3RfNiwgJl9fcHl4X3RfNykgPCAw KSBfX1BZWF9FUlIoMCwgNjAzLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCisrICAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNSk7CisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTA1CistICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZM QUc6CistICogICAgICAgICAgICAgbm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVsc2UgMAorLSAq ICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZhbHVlCistICog ICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKysgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA0CisrICogICAgICAgICAgICAgcmV0dXJuIHNl bGYuZ2V0X3Byb3BlcnR5X2FzeW5jKHByb3AsIGRhdGE9ZGF0YSkKKysgKiAgICAgICAgIGV4Y2Vw dCBNUFZFcnJvcjoKKysgKiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYs IHByb3AsIGRlZmF1bHQ9Tm9uZSk6CisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9G cm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9JTlQ2NCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDUwNSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4 X3ZfZm9ybWF0LCBfX3B5eF90XzIsIFB5X0VRKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzMpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA1MDUsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBfX3B5eF90 XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KF9fcHl4 X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTA1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RF Q1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKF9fcHl4X3RfNCkgeworKyAg ICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zf ZGVmYXVsdCk7CisrICAgICAgX19weXhfciA9IF9fcHl4X3ZfZGVmYXVsdDsKKysgICAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKysgICAgICBfX1B5eF9ERUNSRUYo X19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83 KTsgX19weXhfdF83ID0gMDsKKysgICAgICBnb3RvIF9fcHl4X0w2X2V4Y2VwdF9yZXR1cm47Cisr ICAgIH0KKysgICAgZ290byBfX3B5eF9MNV9leGNlcHRfZXJyb3I7CisrICAgIF9fcHl4X0w1X2V4 Y2VwdF9lcnJvcjo7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 MDYKKy0gKiAgICAgICAgICAgICBub2RlLnUuZmxhZyA9IDEgaWYgdmFsdWUgZWxzZSAwCistICog ICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorLSAqICAgICAgICAgICAg IG5vZGUudS5pbnQ2NCA9IHZhbHVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOgorLSAqICAgICAgICAgICAg IG5vZGUudS5kb3VibGVfID0gdmFsdWUKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYwMQorKyAqIAorKyAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxm LCBwcm9wLCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6CisrICogICAgICAgICB0cnk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRf cHJvcGVydHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKQorKyAqICAgICAgICAgZXhjZXB0IE1QVkVy cm9yOgorICAqLworLSAgICBfX3B5eF90XzkgPSBfX1B5eF9QeUludF9Bc19pbnQ2NF90KF9fcHl4 X3ZfdmFsdWUpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfOSA9PSAoKGludDY0X3QpLTEpKSAmJiBQ eUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDUwNiwgX19weXhfTDFfZXJyb3IpCistICAg IF9fcHl4X3Zfbm9kZS51LmludDY0ID0gX19weXhfdF85OworLQorLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NTA1CistICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZf Rk9STUFUX0ZMQUc6CistICogICAgICAgICAgICAgbm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVs c2UgMAorLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZh bHVlCistICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKy0gKi8K Ky0gICAgZ290byBfX3B5eF9MMzsKKy0gIH0KKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo1MDcKKy0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5U NjQ6CistICogICAgICAgICAgICAgbm9kZS51LmludDY0ID0gdmFsdWUKKy0gKiAgICAgICAgIGVs aWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICAgICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQorLSAqICAgICAgICAg ZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorLSAqLworLSAgX19weXhfdF8z ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfRE9VQkxFKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTA3LCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgX19weXhfdF8yID0gUHlPYmplY3Rf UmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMywgUHlfRVEpOyBfX1B5eF9YR09U UkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUw NywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8z ID0gMDsKKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzIpOyBp ZiAodW5saWtlbHkoX19weXhfdF80IDwgMCkpIF9fUFlYX0VSUigwLCA1MDcsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBpZiAo X19weXhfdF80KSB7CistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 MDgKKy0gKiAgICAgICAgICAgICBub2RlLnUuaW50NjQgPSB2YWx1ZQorLSAqICAgICAgICAgZWxp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CistICogICAgICAgICAgICAgbm9kZS51LmRv dWJsZV8gPSB2YWx1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBl bGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6CistICogICAgICAgICAgICAgbm9k ZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbGlzdCh2YWx1ZSkKKy0gKi8KKy0gICAgX19weXhf dF8xMCA9IF9fcHl4X1B5RmxvYXRfQXNEb3VibGUoX19weXhfdl92YWx1ZSk7IGlmICh1bmxpa2Vs eSgoX19weXhfdF8xMCA9PSAoZG91YmxlKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDUwOCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fcHl4X3Zfbm9kZS51LmRvdWJsZV8g PSBfX3B5eF90XzEwOworLQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTA3CistICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorLSAqICAg ICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZhbHVlCistICogICAgICAgICBlbGlmIGZvcm1hdCA9 PSBNUFZfRk9STUFUX0RPVUJMRTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgIG5vZGUudS5kb3VibGVfID0gdmFsdWUKKy0gKiAgICAgICAgIGVsaWYgZm9ybWF0 ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKKy0gKi8KKy0gICAgZ290byBfX3B5eF9MMzsKKy0g IH0KKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDkKKy0gKiAgICAg ICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOgorLSAqICAgICAgICAgICAgIG5v ZGUudS5kb3VibGVfID0gdmFsdWUKKy0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JN QVRfTk9ERV9BUlJBWTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ICAgIG5vZGUudS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QodmFsdWUpCistICogICAgICAg ICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorLSAqLworLSAgX19weXhfdF8y ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfTk9ERV9BUlJB WSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUwOSwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IFB5T2Jq ZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfZm9ybWF0LCBfX3B5eF90XzIsIFB5X0VRKTsgX19QeXhf WEdPVFJFRihfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigw LCA1MDksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7CistICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8z KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTA5LCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAg aWYgKF9fcHl4X3RfNCkgeworLQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTEwCistICogICAgICAgICAgICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQorLSAqICAgICAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorLSAqICAgICAgICAgICAg IG5vZGUudS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QodmFsdWUpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9E RV9NQVA6CistICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbWFw KHZhbHVlKQorLSAqLworLSAgICBfX3B5eF92X25vZGUudS5saXN0ID0gKChzdHJ1Y3QgX19weXhf dnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+ X19weXhfdnRhYiktPl9wcmVwX25vZGVfbGlzdChfX3B5eF92X3NlbGYsIF9fcHl4X3ZfdmFsdWUp OworLQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA5CistICogICAg ICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKy0gKiAgICAgICAgICAgICBu b2RlLnUuZG91YmxlXyA9IHZhbHVlCistICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX05PREVfQVJSQVk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICAgICBub2RlLnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0KHZhbHVlKQorLSAqICAgICAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKy0gKi8KKy0gICAgZ290byBf X3B5eF9MMzsKKy0gIH0KKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 MTEKKy0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKKy0g KiAgICAgICAgICAgICBub2RlLnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0KHZhbHVlKQor LSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5f cHJlcF9ub2RlX21hcCh2YWx1ZSkKKy0gKiAgICAgICAgIGVsc2U6CistICovCistICBfX3B5eF90 XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9OT0RFX01B UCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUxMSwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fcHl4X3RfMiA9IFB5T2Jq ZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfZm9ybWF0LCBfX3B5eF90XzMsIFB5X0VRKTsgX19QeXhf WEdPVFJFRihfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigw LCA1MTEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4 X3RfMyA9IDA7CistICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8y KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAg aWYgKF9fcHl4X3RfNCkgeworLQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTEyCistICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbGlz dCh2YWx1ZSkKKy0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6 CistICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbWFwKHZhbHVl KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBlbHNlOgorLSAqICAg ICAgICAgICAgIG5vZGUuZm9ybWF0ID0gTVBWX0ZPUk1BVF9OT05FCistICovCistICAgIF9fcHl4 X3Zfbm9kZS51Lmxpc3QgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbm9kZV9t YXAoX19weXhfdl9zZWxmLCBfX3B5eF92X3ZhbHVlKTsKKy0KKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjUxMQorLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZP Uk1BVF9OT0RFX0FSUkFZOgorLSAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5fcHJl cF9ub2RlX2xpc3QodmFsdWUpCistICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg bm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbWFwKHZhbHVlKQorLSAqICAgICAgICAgZWxz ZToKKy0gKi8KKy0gICAgZ290byBfX3B5eF9MMzsKKy0gIH0KKy0KKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1MTQKKy0gKiAgICAgICAgICAgICBub2RlLnUubGlzdCA9IHNl bGYuX3ByZXBfbm9kZV9tYXAodmFsdWUpCistICogICAgICAgICBlbHNlOgorLSAqICAgICAgICAg ICAgIG5vZGUuZm9ybWF0ID0gTVBWX0ZPUk1BVF9OT05FICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiBub2RlCistICogCistICovCistICAvKmVsc2UqLyB7 CistICAgIF9fcHl4X3Zfbm9kZS5mb3JtYXQgPSBNUFZfRk9STUFUX05PTkU7CisrICAgIF9fUHl4 X1hHSVZFUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMik7Cisr ICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0 KF9fcHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMpOworKyAgICBnb3RvIF9fcHl4X0wxX2Vy cm9yOworKyAgICBfX3B5eF9MN190cnlfcmV0dXJuOjsKKysgICAgX19QeXhfWEdJVkVSRUYoX19w eXhfdF8xKTsKKysgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfWEdJ VkVSRUYoX19weXhfdF8zKTsKKysgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xLCBf X3B5eF90XzIsIF9fcHl4X3RfMyk7CisrICAgIGdvdG8gX19weXhfTDA7CisrICAgIF9fcHl4X0w2 X2V4Y2VwdF9yZXR1cm46OworKyAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEpOworKyAgICBf X1B5eF9YR0lWRVJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzMp OworKyAgICBfX1B5eF9FeGNlcHRpb25SZXNldChfX3B5eF90XzEsIF9fcHl4X3RfMiwgX19weXhf dF8zKTsKKysgICAgZ290byBfX3B5eF9MMDsKKyAgIH0KKy0gIF9fcHl4X0wzOjsKKy0KKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTUKKy0gKiAgICAgICAgIGVsc2U6Cist ICogICAgICAgICAgICAgbm9kZS5mb3JtYXQgPSBNUFZfRk9STUFUX05PTkUKKy0gKiAgICAgICAg IHJldHVybiBub2RlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAg Y2RlZiBfZnJlZV9uYXRpdmVfdmFsdWUoc2VsZiwgbXB2X25vZGUgbm9kZSk6CistICovCistICBf X3B5eF9yID0gX19weXhfdl9ub2RlOworLSAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTYKKy0gKiAgICAgICAgIHJldHVybiBsaXN0Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjAwCisrICogICAgICAgICByZXR1 cm4gZXJyCisgICogCistICogICAgIGNkZWYgbXB2X25vZGUgX3ByZXBfbmF0aXZlX3ZhbHVlKHNl bGYsIHZhbHVlLCBmb3JtYXQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKKy0gKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0 CisrICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9u ZSwgZGVmYXVsdD1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgdHJ5OgorKyAqICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhw cm9wLCBkYXRhPWRhdGEpCisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAg IF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKyAgIF9f UHl4X1hERUNSRUYoX19weXhfdF81KTsKKy0gIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0 dGVyLmxpYnMubXB2LkNvbnRleHQuX3ByZXBfbmF0aXZlX3ZhbHVlIiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSwgMSwgMCk7CistICBfX1B5eF9wcmV0ZW5kX3Rv X2luaXRpYWxpemUoJl9fcHl4X3IpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOworKyAg X19QeXhfWERFQ1JFRihfX3B5eF90XzcpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0 ZXIubGlicy5tcHYuQ29udGV4dC50cnlfZ2V0X3Byb3BlcnR5X2FzeW5jIiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKyAg IF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl92YWx1ZSk7CisrICBfX1B5eF9Y R0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAg cmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo1MTcKKy0gKiAgICAgICAgIHJldHVybiBub2RlCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjYwNgorKyAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisgICogCistICog ICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3ZhbHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBpZiBub2RlLmZvcm1hdCBpbiAoTVBW X0ZPUk1BVF9OT0RFX0FSUkFZLCBNUFZfRk9STUFUX05PREVfTUFQKToKKy0gKiAgICAgICAgICAg ICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOgorKyAqICAgICBkZWYgdHJ5X2dldF9w cm9wZXJ0eShzZWxmLCBwcm9wLCBkZWZhdWx0PU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICB0cnk6CisrICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0 X3Byb3BlcnR5KHByb3ApCisgICovCisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBzdHJ1Y3Qg bXB2X25vZGUgX19weXhfdl9ub2RlKSB7CistICBpbnQgX19weXhfdl9pOworLSAgUHlPYmplY3Qg Kl9fcHl4X3IgPSBOVUxMOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIGludCBf X3B5eF90XzE7CistICBpbnQgX19weXhfdF8yOworLSAgaW50IF9fcHl4X3RfMzsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfNTsKKysvKiBQeXRob24gd3Jh cHBlciAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzE1dHJ5X2dldF9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNXRy eV9nZXRfcHJvcGVydHkoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2Fy Z3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CisrICBQeU9iamVjdCAqX19weXhfdl9wcm9wID0g MDsKKysgIFB5T2JqZWN0ICpfX3B5eF92X2RlZmF1bHQgPSAwOworICAgaW50IF9fcHl4X2xpbmVu byA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2ZyZWVfbmF0 aXZlX3ZhbHVlIiwgMCk7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInRyeV9nZXRf cHJvcGVydHkgKHdyYXBwZXIpIiwgMCk7CisrICB7CisrICAgIHN0YXRpYyBQeU9iamVjdCAqKl9f cHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3Byb3AsJl9fcHl4X25fc19kZWZhdWx0LDB9 OworKyAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07CisrICAgIHZhbHVlc1sxXSA9ICgo UHlPYmplY3QgKilQeV9Ob25lKTsKKysgICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7Cisr ICAgICAgUHlfc3NpemVfdCBrd19hcmdzOworKyAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2Fy Z3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpOworKyAgICAgIHN3aXRjaCAocG9zX2Fy Z3MpIHsKKysgICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMSk7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNl ICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworKyAgICAg ICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMDogYnJlYWs7CisrICAgICAg ICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworKyAgICAgIH0KKysgICAg ICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7CisrICAgICAgc3dpdGNoIChwb3Nf YXJncykgeworKyAgICAgICAgY2FzZSAgMDoKKysgICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sw XSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19wcm9wKSkg IT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9l cnJvcjsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDE6Cisr ICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKysgICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0g X19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2RlZmF1bHQpOwor KyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzFdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQor KyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7 CisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4 X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJ0cnlfZ2V0X3By b3BlcnR5IikgPCAwKSkgX19QWVhfRVJSKDAsIDYwNiwgX19weXhfTDNfZXJyb3IpCisrICAgICAg fQorKyAgICB9IGVsc2UgeworKyAgICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKSkgeworKyAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShf X3B5eF9hcmdzLCAxKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNh c2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CisrICAg ICAgICBicmVhazsKKysgICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJy b3I7CisrICAgICAgfQorKyAgICB9CisrICAgIF9fcHl4X3ZfcHJvcCA9IHZhbHVlc1swXTsKKysg ICAgX19weXhfdl9kZWZhdWx0ID0gdmFsdWVzWzFdOworKyAgfQorKyAgZ290byBfX3B5eF9MNF9h cmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKysgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKysg IF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJ0cnlfZ2V0X3Byb3BlcnR5IiwgMCwgMSwgMiwg UHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA2MDYsIF9fcHl4X0wz X2Vycm9yKQorKyAgX19weXhfTDNfZXJyb3I6OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuQ29udGV4dC50cnlfZ2V0X3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKysgIHJldHVybiBOVUxMOworKyAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5n X2RvbmU6OworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8xNHRyeV9nZXRfcHJvcGVydHkoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgX19weXhfdl9wcm9wLCBfX3B5eF92X2Rl ZmF1bHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxOAorLSAq IAorLSAqICAgICBjZGVmIF9mcmVlX25hdGl2ZV92YWx1ZShzZWxmLCBtcHZfbm9kZSBub2RlKToK Ky0gKiAgICAgICAgIGlmIG5vZGUuZm9ybWF0IGluIChNUFZfRk9STUFUX05PREVfQVJSQVksIE1Q Vl9GT1JNQVRfTk9ERV9NQVApOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKKy0gKiAgICAgICAgICAg ICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZS51Lmxpc3QudmFsdWVzW2ldKQorLSAq LworLSAgc3dpdGNoIChfX3B5eF92X25vZGUuZm9ybWF0KSB7CistICAgIGNhc2UgTVBWX0ZPUk1B VF9OT0RFX0FSUkFZOgorLSAgICBjYXNlIE1QVl9GT1JNQVRfTk9ERV9NQVA6CistCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTkKKy0gKiAgICAgY2RlZiBfZnJlZV9u YXRpdmVfdmFsdWUoc2VsZiwgbXB2X25vZGUgbm9kZSk6CistICogICAgICAgICBpZiBub2RlLmZv cm1hdCBpbiAoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBNUFZfRk9STUFUX05PREVfTUFQKToKKy0g KiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZl X3ZhbHVlKG5vZGUudS5saXN0LnZhbHVlc1tpXSkKKy0gKiAgICAgICAgICAgICBmcmVlKG5vZGUu dS5saXN0LnZhbHVlcykKKy0gKi8KKy0gICAgX19weXhfdF8xID0gX19weXhfdl9ub2RlLnUubGlz dC0+bnVtOworLSAgICBfX3B5eF90XzIgPSBfX3B5eF90XzE7CistICAgIGZvciAoX19weXhfdF8z ID0gMDsgX19weXhfdF8zIDwgX19weXhfdF8yOyBfX3B5eF90XzMrPTEpIHsKKy0gICAgICBfX3B5 eF92X2kgPSBfX3B5eF90XzM7CistCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjUyMAorLSAqICAgICAgICAgaWYgbm9kZS5mb3JtYXQgaW4gKE1QVl9GT1JNQVRfTk9E RV9BUlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6CistICogICAgICAgICAgICAgZm9yIGkgaW4g cmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKKy0gKiAgICAgICAgICAgICAgICAgc2VsZi5fZnJlZV9u YXRpdmVfdmFsdWUobm9kZS51Lmxpc3QudmFsdWVzW2ldKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC52YWx1ZXMpCistICogICAg ICAgICAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKy0gKi8KKy0g ICAgICBfX3B5eF90XzQgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZl X3ZhbHVlKF9fcHl4X3Zfc2VsZiwgKF9fcHl4X3Zfbm9kZS51Lmxpc3QtPnZhbHVlc1tfX3B5eF92 X2ldKSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDUyMCwgX19weXhf TDFfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAgIH0KKy0KKy0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyMQorLSAqICAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKG5vZGUudS5saXN0Lm51bSk6CistICogICAgICAgICAgICAgICAgIHNlbGYuX2ZyZWVf bmF0aXZlX3ZhbHVlKG5vZGUudS5saXN0LnZhbHVlc1tpXSkKKy0gKiAgICAgICAgICAgICBmcmVl KG5vZGUudS5saXN0LnZhbHVlcykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6CistICogICAg ICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6CistICovCistICAg IGZyZWUoX19weXhfdl9ub2RlLnUubGlzdC0+dmFsdWVzKTsKKysgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19w eXhfcjsKKyt9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjIK Ky0gKiAgICAgICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZS51Lmxpc3Qu dmFsdWVzW2ldKQorLSAqICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3QudmFsdWVzKQorLSAq ICAgICAgICAgICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFu Z2Uobm9kZS51Lmxpc3QubnVtKToKKy0gKiAgICAgICAgICAgICAgICAgICAgIGZyZWUobm9kZS51 Lmxpc3Qua2V5c1tpXSkKKy0gKi8KKy0gICAgX19weXhfdF81ID0gKChfX3B5eF92X25vZGUuZm9y bWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVApICE9IDApOworLSAgICBpZiAoX19weXhfdF81KSB7 Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMTR0cnlfZ2V0X3Byb3BlcnR5KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmpl Y3QgKl9fcHl4X3ZfZGVmYXVsdCkgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworKyAg X19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxM OworKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8z ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAgUHlPYmplY3QgKl9f cHl4X3RfNSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKysgIFB5T2Jq ZWN0ICpfX3B5eF90XzcgPSBOVUxMOworKyAgaW50IF9fcHl4X3RfODsKKysgIGludCBfX3B5eF9s aW5lbm8gPSAwOworKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50 IF9fcHl4X2NsaW5lbm8gPSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInRyeV9n ZXRfcHJvcGVydHkiLCAwKTsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTIzCistICogICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC52YWx1ZXMpCistICog ICAgICAgICAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKy0gKiAg ICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICAgICAgZnJlZShub2RlLnUu bGlzdC5rZXlzW2ldKQorLSAqICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXMp CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA3CisrICogCisrICogICAg IGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9uZSk6CisrICogICAg ICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBy ZXR1cm4gc2VsZi5nZXRfcHJvcGVydHkocHJvcCkKKysgKiAgICAgICAgIGV4Y2VwdCBNUFZFcnJv cjoKKyAgKi8KKy0gICAgICBfX3B5eF90XzEgPSBfX3B5eF92X25vZGUudS5saXN0LT5udW07Cist ICAgICAgX19weXhfdF8yID0gX19weXhfdF8xOworLSAgICAgIGZvciAoX19weXhfdF8zID0gMDsg X19weXhfdF8zIDwgX19weXhfdF8yOyBfX3B5eF90XzMrPTEpIHsKKy0gICAgICAgIF9fcHl4X3Zf aSA9IF9fcHl4X3RfMzsKKysgIHsKKysgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9kZWNsYXJlCisr ICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfYXNzaWduCisrICAgIF9fUHl4X0V4Y2VwdGlvblNhdmUo Jl9fcHl4X3RfMSwgJl9fcHl4X3RfMiwgJl9fcHl4X3RfMyk7CisrICAgIF9fUHl4X1hHT1RSRUYo X19weXhfdF8xKTsKKysgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9Y R09UUkVGKF9fcHl4X3RfMyk7CisrICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjQKKy0gKiAgICAgICAgICAgICBpZiBub2RlLmZv cm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorLSAqICAgICAgICAgICAgICAgICBmb3IgaSBp biByYW5nZShub2RlLnUubGlzdC5udW0pOgorLSAqICAgICAgICAgICAgICAgICAgICAgZnJlZShu b2RlLnUubGlzdC5rZXlzW2ldKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5cykKKy0gKiAgICAgICAgICAgICBmcmVl KG5vZGUudS5saXN0KQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 MDgKKysgKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGVmYXVsdD1Ob25l KToKKysgKiAgICAgICAgIHRyeToKKysgKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJv cGVydHkocHJvcCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZXhj ZXB0IE1QVkVycm9yOgorKyAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisgICovCistICAg ICAgICBmcmVlKChfX3B5eF92X25vZGUudS5saXN0LT5rZXlzW19fcHl4X3ZfaV0pKTsKKysgICAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2Jq ZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19nZXRf cHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA2MDgsIF9f cHl4X0wzX2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworKyAgICAgIF9f cHl4X3RfNiA9IE5VTEw7CisrICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtl bHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkpIHsKKysgICAgICAgIF9fcHl4X3RfNiA9IFB5 TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNSk7CisrICAgICAgICBpZiAobGlrZWx5KF9fcHl4X3Rf NikpIHsKKysgICAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfNSk7CisrICAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzYpOworKyAg ICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3RfNSwgZnVuY3Rpb24pOworKyAgICAgICAgfQorICAgICAgIH0KKysgICAgICBf X3B5eF90XzQgPSAoX19weXhfdF82KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzUsIF9fcHl4X3RfNiwgX19weXhfdl9wcm9wKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF81LCBfX3B5eF92X3Byb3ApOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKKysgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCA2MDgsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzQpOworKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworKyAg ICAgIF9fcHl4X3IgPSBfX3B5eF90XzQ7CisrICAgICAgX19weXhfdF80ID0gMDsKKysgICAgICBn b3RvIF9fcHl4X0w3X3RyeV9yZXR1cm47CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjUyNQorLSAqICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2Rl LnUubGlzdC5udW0pOgorLSAqICAgICAgICAgICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC5r ZXlzW2ldKQorLSAqICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXMpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0 KQorLSAqICAgICAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKy0g Ki8KKy0gICAgICBmcmVlKF9fcHl4X3Zfbm9kZS51Lmxpc3QtPmtleXMpOworLQorLSAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjIKKy0gKiAgICAgICAgICAgICAgICAg c2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZS51Lmxpc3QudmFsdWVzW2ldKQorLSAqICAgICAg ICAgICAgIGZyZWUobm9kZS51Lmxpc3QudmFsdWVzKQorLSAqICAgICAgICAgICAgIGlmIG5vZGUu Zm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToK Ky0gKiAgICAgICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5c1tpXSkKKysgICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA3CisrICogCisrICogICAgIGRl ZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9uZSk6CisrICogICAgICAg ICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByZXR1 cm4gc2VsZi5nZXRfcHJvcGVydHkocHJvcCkKKysgKiAgICAgICAgIGV4Y2VwdCBNUFZFcnJvcjoK KyAgKi8KKyAgICAgfQorKyAgICBfX3B5eF9MM19lcnJvcjo7CisrICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUp OyBfX3B5eF90XzUgPSAwOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3Rf NiA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjYKKy0g KiAgICAgICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5c1tpXSkKKy0gKiAgICAg ICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC5rZXlzKQorLSAqICAgICAgICAgICAgIGZyZWUo bm9kZS51Lmxpc3QpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGVs aWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CistICogICAgICAgICAgICAgZnJl ZShub2RlLnUuc3RyaW5nKQorLSAqLworLSAgICBmcmVlKF9fcHl4X3Zfbm9kZS51Lmxpc3QpOwor LQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTE4CisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDkKKysgKiAgICAgICAgIHRyeToKKysgKiAg ICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHkocHJvcCkKKysgKiAgICAgICAgIGV4 Y2VwdCBNUFZFcnJvcjogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIHJldHVybiBkZWZhdWx0CisgICogCistICogICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3ZhbHVl KHNlbGYsIG1wdl9ub2RlIG5vZGUpOgorLSAqICAgICAgICAgaWYgbm9kZS5mb3JtYXQgaW4gKE1Q Vl9GT1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlz dC5udW0pOgorLSAqICAgICAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2Rl LnUubGlzdC52YWx1ZXNbaV0pCisgICovCistICAgIGJyZWFrOworLSAgICBjYXNlIE1QVl9GT1JN QVRfU1RSSU5HOgorKyAgICBfX1B5eF9FcnJGZXRjaCgmX19weXhfdF80LCAmX19weXhfdF81LCAm X19weXhfdF82KTsKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzcsIF9f cHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAs IDYwOSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83 KTsKKysgICAgX19weXhfdF84ID0gX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKF9f cHl4X3RfNCwgX19weXhfdF83KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4 X3RfNyA9IDA7CisrICAgIF9fUHl4X0VyclJlc3RvcmUoX19weXhfdF80LCBfX3B5eF90XzUsIF9f cHl4X3RfNik7CisrICAgIF9fcHl4X3RfNCA9IDA7IF9fcHl4X3RfNSA9IDA7IF9fcHl4X3RfNiA9 IDA7CisrICAgIGlmIChfX3B5eF90XzgpIHsKKysgICAgICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnRyeV9nZXRfcHJvcGVydHkiLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgICAgICBpZiAoX19QeXhfR2V0RXhj ZXB0aW9uKCZfX3B5eF90XzYsICZfX3B5eF90XzUsICZfX3B5eF90XzQpIDwgMCkgX19QWVhfRVJS KDAsIDYwOSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOworKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworKyAgICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzQpOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTI4CistICogICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdCkKKy0gKiAgICAgICAgIGVs aWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CistICogICAgICAgICAgICAgZnJl ZShub2RlLnUuc3RyaW5nKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYxMAorKyAqICAgICAgICAgICAgIHJldHVy biBzZWxmLmdldF9wcm9wZXJ0eShwcm9wKQorKyAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOgor KyAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAKKy0gKiAgICAgZGVmIGNvbW1hbmQoc2VsZiwgKmNtZGxpc3QsIGFzeW5jaHJvbm91 cz1GYWxzZSwgZGF0YT1Ob25lKToKKysgKiAgICAgZGVmIGdldF9wcm9wZXJ0eShzZWxmLCBwcm9w KToKKyAgKi8KKy0gICAgZnJlZShfX3B5eF92X25vZGUudS5zdHJpbmcpOworKyAgICAgIF9fUHl4 X1hERUNSRUYoX19weXhfcik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfZGVmYXVsdCk7 CisrICAgICAgX19weXhfciA9IF9fcHl4X3ZfZGVmYXVsdDsKKysgICAgICBfX1B5eF9ERUNSRUYo X19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81 KTsgX19weXhfdF81ID0gMDsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKKysgICAgICBnb3RvIF9fcHl4X0w2X2V4Y2VwdF9yZXR1cm47CisrICAgIH0KKysg ICAgZ290byBfX3B5eF9MNV9leGNlcHRfZXJyb3I7CisrICAgIF9fcHl4X0w1X2V4Y2VwdF9lcnJv cjo7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjcKKy0gKiAg ICAgICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC5rZXlzKQorLSAqICAgICAgICAgICAgIGZy ZWUobm9kZS51Lmxpc3QpCistICogICAgICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JN QVRfU1RSSU5HOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg ZnJlZShub2RlLnUuc3RyaW5nKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjA3CisgICogCisrICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRl ZmF1bHQ9Tm9uZSk6CisrICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHkocHJvcCkKKysgKiAg ICAgICAgIGV4Y2VwdCBNUFZFcnJvcjoKKyAgKi8KKy0gICAgYnJlYWs7CistICAgIGRlZmF1bHQ6 IGJyZWFrOworKyAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9YR0lW RVJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzMpOworKyAgICBf X1B5eF9FeGNlcHRpb25SZXNldChfX3B5eF90XzEsIF9fcHl4X3RfMiwgX19weXhfdF8zKTsKKysg ICAgZ290byBfX3B5eF9MMV9lcnJvcjsKKysgICAgX19weXhfTDdfdHJ5X3JldHVybjo7CisrICAg IF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Rf Mik7CisrICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0V4Y2VwdGlv blJlc2V0KF9fcHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMpOworKyAgICBnb3RvIF9fcHl4 X0wwOworKyAgICBfX3B5eF9MNl9leGNlcHRfcmV0dXJuOjsKKysgICAgX19QeXhfWEdJVkVSRUYo X19weXhfdF8xKTsKKysgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhf WEdJVkVSRUYoX19weXhfdF8zKTsKKysgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8x LCBfX3B5eF90XzIsIF9fcHl4X3RfMyk7CisrICAgIGdvdG8gX19weXhfTDA7CisgICB9CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTE3CistICogICAgICAgICByZXR1 cm4gbm9kZQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwNgorKyAqICAg ICAgICAgICAgIHJldHVybiBkZWZhdWx0CisgICogCistICogICAgIGNkZWYgX2ZyZWVfbmF0aXZl X3ZhbHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICBpZiBub2RlLmZvcm1hdCBpbiAoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBN UFZfRk9STUFUX05PREVfTUFQKToKKy0gKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2Rl LnUubGlzdC5udW0pOgorKyAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eShzZWxmLCBwcm9wLCBk ZWZhdWx0PU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB0 cnk6CisrICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5KHByb3ApCisgICov CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQeV9Ob25lOyBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworICAgX19weXhfTDFfZXJy b3I6OworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworLSAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5fZnJlZV9uYXRpdmVfdmFsdWUiLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAwOwor KyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYp OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2 aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC50cnlfZ2V0X3Byb3BlcnR5IiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKyAg IF9fcHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUzMAorLSAqICAgICAgICAgICAgIGZyZWUobm9kZS51 LnN0cmluZykKKy0gKiAKKy0gKiAgICAgZGVmIGNvbW1hbmQoc2VsZiwgKmNtZGxpc3QsIGFzeW5j aHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgIiIiU2VuZCBhIGNvbW1hbmQgdG8gbXB2LgorKy8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo2MTIKKysgKiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAq IAorKyAqICAgICBkZWYgZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3ApOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJXcmFwczogbXB2X2dldF9wcm9wZXJ0eSIiIgor KyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVy ICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMTNjb21tYW5kKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9h cmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLworLXN0YXRpYyBjaGFyIF9fcHl4 X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJjb21tYW5kW10gPSAiU2VuZCBh IGNvbW1hbmQgdG8gbXB2LlxuXG4gICAgICAgIE5vbi1hc3luYyBzdWNjZXNzIHJldHVybnMgdGhl IGNvbW1hbmQncyByZXNwb25zZSBkYXRhLCBvdGhlcndpc2UgTm9uZVxuXG4gICAgICAgIEFyZ3Vt ZW50czpcbiAgICAgICAgQWNjZXB0cyBwYXJhbWV0ZXJzIGFzIGFyZ3NcblxuICAgICAgICBLZXl3 b3JkIEFyZ3VtZW50czpcbiAgICAgICAgYXN5bmNocm9ub3VzOiBUcnVlIHdpbGwgcmV0dXJuIHJp Z2h0IGF3YXksIHN0YXR1cyBjb21lcyBpbiBhcyBNUFZfRVZFTlRfQ09NTUFORF9SRVBMWVxuICAg ICAgICBkYXRhOiBPbmx5IHZhbGlkIGlmIGFzeW5jLCBnZXRzIHNlbnQgYmFjayBhcyByZXBseV91 c2VyZGF0YSBpbiB0aGUgRXZlbnRcblxuICAgICAgICBXcmFwczogbXB2X2NvbW1hbmRfbm9kZSBh bmQgbXB2X2NvbW1hbmRfbm9kZV9hc3luY1xuICAgICAgICAiOworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEzY29tbWFuZChQeU9iamVj dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3 ZHMpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2FzeW5jaHJvbm91cyA9IDA7CistICBQeU9iamVj dCAqX19weXhfdl9kYXRhID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2NtZGxpc3QgPSAwOwor LSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9 IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTdnZXRfcHJvcGVydHkoUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCk7IC8qcHJvdG8qLworK3N0 YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRf cHJvcGVydHlbXSA9ICJXcmFwczogbXB2X2dldF9wcm9wZXJ0eSI7Cisrc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTdnZXRfcHJvcGVydHko UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCkgeworICAgUHlP YmplY3QgKl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjb21tYW5kICh3cmFwcGVyKSIsIDApOworLSAgaWYg KFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgPiAwKSB7CistICAgIF9fcHl4X3ZfY21kbGlz dCA9IFB5VHVwbGVfR2V0U2xpY2UoX19weXhfYXJncywgMCwgUHlUdXBsZV9HRVRfU0laRShfX3B5 eF9hcmdzKSk7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdl9jbWRsaXN0KSkgeworLSAgICAg IF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgICAgIHJldHVybiBOVUxMOworLSAg ICB9CistICAgIF9fUHl4X0dPVFJFRihfX3B5eF92X2NtZGxpc3QpOworLSAgfSBlbHNlIHsKKy0g ICAgX19weXhfdl9jbWRsaXN0ID0gX19weXhfZW1wdHlfdHVwbGU7IF9fUHl4X0lOQ1JFRihfX3B5 eF9lbXB0eV90dXBsZSk7CistICB9CistICB7CistICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4 X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX2FzeW5jaHJvbm91cywmX19weXhfbl9zX2RhdGEs MH07CistICAgIFB5T2JqZWN0KiB2YWx1ZXNbMl0gPSB7MCwwfTsKKy0gICAgdmFsdWVzWzBdID0g KChQeU9iamVjdCAqKVB5X0ZhbHNlKTsKKy0gICAgdmFsdWVzWzFdID0gKChQeU9iamVjdCAqKVB5 X05vbmUpOworLSAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKKy0gICAgICBQeV9zc2l6 ZV90IGt3X2FyZ3M7CistICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVf R0VUX1NJWkUoX19weXhfYXJncyk7CistICAgICAgc3dpdGNoIChwb3NfYXJncykgeworLSAgICAg ICAgZGVmYXVsdDoKKy0gICAgICAgIGNhc2UgIDA6IGJyZWFrOworLSAgICAgIH0KKy0gICAgICBr d19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7CistICAgICAgaWYgKGt3X2FyZ3MgPiAw ICYmIGxpa2VseShrd19hcmdzIDw9IDIpKSB7CistICAgICAgICBQeV9zc2l6ZV90IGluZGV4Owor LSAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgMiAmJiBrd19hcmdzID4gMDsgaW5kZXgr KykgeworLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0 cihfX3B5eF9rd2RzLCAqX19weXhfcHlhcmduYW1lc1tpbmRleF0pOworLSAgICAgICAgICBpZiAo dmFsdWUpIHsgdmFsdWVzW2luZGV4XSA9IHZhbHVlOyBrd19hcmdzLS07IH0KKy0gICAgICAgIH0K Ky0gICAgICB9CistICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAg aWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5 eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIDAsICJjb21tYW5kIikgPCAwKSkgX19QWVhfRVJSKDAs IDUzMCwgX19weXhfTDNfZXJyb3IpCistICAgICAgfQorLSAgICB9IGVsc2UgaWYgKFB5VHVwbGVf R0VUX1NJWkUoX19weXhfYXJncykgPCAwKSB7CistICAgICAgZ290byBfX3B5eF9MNV9hcmd0dXBs ZV9lcnJvcjsKKy0gICAgfSBlbHNlIHsKKy0gICAgfQorLSAgICBfX3B5eF92X2FzeW5jaHJvbm91 cyA9IHZhbHVlc1swXTsKKy0gICAgX19weXhfdl9kYXRhID0gdmFsdWVzWzFdOworLSAgfQorLSAg Z290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKy0gIF9fcHl4X0w1X2FyZ3R1 cGxlX2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJjb21tYW5kIiwgMCwg MCwgMCwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA1MzAsIF9f cHl4X0wzX2Vycm9yKQorLSAgX19weXhfTDNfZXJyb3I6OworLSAgX19QeXhfREVDUkVGKF9fcHl4 X3ZfY21kbGlzdCk7IF9fcHl4X3ZfY21kbGlzdCA9IDA7CistICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmNvbW1hbmQiLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOworLSAgcmV0dXJuIE5VTEw7CistICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9u ZTo7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzEyY29tbWFuZCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X2FzeW5jaHJvbm91cywgX19weXhfdl9kYXRhLCBf X3B5eF92X2NtZGxpc3QpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImdldF9wcm9w ZXJ0eSAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9f cHl4X3ZfcHJvcCkpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9Y REVDUkVGKF9fcHl4X3ZfY21kbGlzdCk7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMmNvbW1hbmQoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfdl9hc3luY2hyb25vdXMsIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEsIFB5T2JqZWN0ICpf X3B5eF92X2NtZGxpc3QpIHsKKy0gIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF92X25vZGU7CistICBz dHJ1Y3QgbXB2X25vZGUgX19weXhfdl9ub2RlcmVzdWx0OworK3N0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5KHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3ZfcHJvcCkgeworKyAgc3RydWN0IG1wdl9ub2RlIF9fcHl4X3ZfcmVz dWx0OworKyAgY2hhciBjb25zdCAqX19weXhfdl9wcm9wX2M7CisgICBpbnQgX19weXhfdl9lcnI7 CistICB1aW50NjRfdCBfX3B5eF92X2RhdGFfaWQ7CistICBQeU9iamVjdCAqX19weXhfdl9yZXN1 bHQgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfdXNlcmRhdGFzID0gTlVMTDsKKysgIFB5 T2JqZWN0ICpfX3B5eF92X3YgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwor ICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBO VUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhf dF8zID0gTlVMTDsKKy0gIHVpbnQ2NF90IF9fcHl4X3RfNDsKKysgIGNoYXIgY29uc3QgKl9fcHl4 X3RfNDsKKyAgIGludCBfX3B5eF90XzU7CistICBpbnQgX19weXhfdF82OworKyAgUHlPYmplY3Qg Kl9fcHl4X3RfNiA9IE5VTEw7CisgICBpbnQgX19weXhfdF83OworICAgaW50IF9fcHl4X3RfODsK KyAgIGNoYXIgY29uc3QgKl9fcHl4X3RfOTsKK0BAIC0xMTE5OCw0MSArMTE4NzYsMzkgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJj b21tYW5kKHN0cnVjdCBfX3B5eF8KKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEzID0gTlVMTDsKKyAg IFB5T2JqZWN0ICpfX3B5eF90XzE0ID0gTlVMTDsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzE1ID0g TlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzE2ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5 eF90XzE3ID0gTlVMTDsKKy0gIGNoYXIgY29uc3QgKl9fcHl4X3RfMTg7CisgICBpbnQgX19weXhf bGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGlu dCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjb21t YW5kIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0X3Byb3BlcnR5Iiwg MCk7CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1NDQKKy0gKiAgICAgICAgIFdyYXBzOiBtcHZfY29tbWFuZF9u b2RlIGFuZCBtcHZfY29tbWFuZF9ub2RlX2FzeW5jCistICogICAgICAgICAiIiIKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MTQKKysgKiAgICAgZGVmIGdldF9wcm9wZXJ0 eShzZWxmLCBwcm9wKToKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfZ2V0X3Byb3BlcnR5IiIi CisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3Zh bHVlKGNtZGxpc3QsIHNlbGYuX2Zvcm1hdF9mb3IoY21kbGlzdCkpCistICogICAgICAgICBjZGVm IG1wdl9ub2RlIG5vZGVyZXN1bHQKKysgKiAgICAgICAgIGNkZWYgbXB2X25vZGUgcmVzdWx0Cisr ICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKQorICAqLworICAgI2lmbmRlZiBDWVRIT05f V0lUSE9VVF9BU1NFUlRJT05TCisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsK KyAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworICAgICAg IFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigw LCA1NDQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA2MTQsIF9fcHl4X0wx X2Vycm9yKQorICAgICB9CisgICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo1NDUKKy0gKiAgICAgICAgICIiIgorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjYxNgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorLSAq ICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUoY21k bGlzdCwgc2VsZi5fZm9ybWF0X2ZvcihjbWRsaXN0KSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlcmVzdWx0CisrICogICAgICAgICBj ZGVmIG1wdl9ub2RlIHJlc3VsdAorKyAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBw cm9wX2MgPSBwcm9wCisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKi8KKy0gIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiks IF9fcHl4X25fc19mb3JtYXRfZm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgNTQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgNjE2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzIpOworICAgX19weXhfdF8zID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMg JiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICBpZiAoQ1lUSE9OX1VO UEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Cisg ICAgIF9fcHl4X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CisgICAgIGlmIChs aWtlbHkoX19weXhfdF8zKSkgeworICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9k X0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworQEAgLTExMjQxLDYyNSArMTE5MTcsMzMyIEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEy Y29tbWFuZChzdHJ1Y3QgX19weXhfCisgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIs IGZ1bmN0aW9uKTsKKyAgICAgfQorICAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBf X1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzMsIF9fcHl4X3ZfY21k bGlzdCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9jbWRs aXN0KTsKKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X3Byb3ApIDogX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfcHJvcCk7CisgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCA1NDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNjE2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cist ICBfX3B5eF92X25vZGUgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbmF0aXZl X3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl9jbWRsaXN0LCBfX3B5eF90XzEpOworLSAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX1B5eF9ERUNSRUZfU0VU KF9fcHl4X3ZfcHJvcCwgX19weXhfdF8xKTsKKysgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTQ5CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjE3CisrICogICAgICAgICBjZGVmIG1wdl9ub2RlIHJlc3VsdAorKyAq ICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hh ciogcHJvcF9jID0gcHJvcCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAg ICBjZGVmIGludCBlcnIKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgZGF0YV9pZAorLSAqICAg ICAgICAgcmVzdWx0ID0gTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICB0cnk6CistICogICAgICAgICAgICAgZGF0YV9pZCA9IGlkKGRhdGEpCistICovCistICBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBfX3B5eF92X3Jlc3VsdCA9IFB5X05vbmU7CistCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTUwCistICogICAgICAgICBjZGVm IHVpbnQ2NF90IGRhdGFfaWQKKy0gKiAgICAgICAgIHJlc3VsdCA9IE5vbmUKKy0gKiAgICAgICAg IHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGRhdGFf aWQgPSBpZChkYXRhKQorLSAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CisrICog ICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgLyp0cnk6Ki8geworKyAgX19weXhfdF80ID0g X19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9wcm9wKTsgaWYgKHVubGlrZWx5KCghX19w eXhfdF80KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDYxNywgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF92X3Byb3BfYyA9IF9fcHl4X3RfNDsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1MQorLSAqICAgICAgICAgcmVzdWx0ID0gTm9uZQor LSAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgIGRhdGFfaWQgPSBpZChkYXRhKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJv bm91czoKKy0gKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MTkKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJv cF9jID0gcHJvcAorKyAqICAgICAgICAgY2RlZiBpbnQgZXJyCisrICogICAgICAgICB3aXRoIG5v Z2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgZXJyID0g bXB2X2dldF9wcm9wZXJ0eSgKKysgKiAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorICAqLwor LSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5f aWQsIF9fcHl4X3ZfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDU1MSwgX19weXhfTDRfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAg ICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5s aWtlbHkoKF9fcHl4X3RfNCA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkp IF9fUFlYX0VSUigwLCA1NTEsIF9fcHl4X0w0X2Vycm9yKQorLSAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAgX19weXhfdl9kYXRhX2lkID0gX19weXhfdF80 OworKyAgeworKyAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgIFB5VGhyZWFkU3RhdGUg Kl9zYXZlOworKyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworKyAgICAgIF9fUHl4X0Zhc3RHSUxf UmVtZW1iZXIoKTsKKysgICAgICAjZW5kaWYKKysgICAgICAvKnRyeToqLyB7CisgCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTIKKy0gKiAgICAgICAgIHRyeToKKy0g KiAgICAgICAgICAgICBkYXRhX2lkID0gaWQoZGF0YSkKKy0gKiAgICAgICAgICAgICBpZiBub3Qg YXN5bmNocm9ub3VzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAg ICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29t bWFuZF9ub2RlKHNlbGYuX2N0eCwgJm5vZGUsICZub2RlcmVzdWx0KQorKyAgICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYyMAorKyAqICAgICAgICAgY2RlZiBpbnQgZXJy CisrICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9nZXRf cHJvcGVydHkoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAg ICAgc2VsZi5fY3R4LAorKyAqICAgICAgICAgICAgICAgICBwcm9wX2MsCisgICovCistICAgIF9f cHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X2FzeW5jaHJvbm91cyk7IGlm ICh1bmxpa2VseShfX3B5eF90XzUgPCAwKSkgX19QWVhfRVJSKDAsIDU1MiwgX19weXhfTDRfZXJy b3IpCistICAgIF9fcHl4X3RfNiA9ICgoIV9fcHl4X3RfNSkgIT0gMCk7CistICAgIGlmIChfX3B5 eF90XzYpIHsKKysgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X2dldF9wcm9wZXJ0eShfX3B5eF92 X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcHJvcF9jLCBNUFZfRk9STUFUX05PREUsICgmX19weXhfdl9y ZXN1bHQpKTsKKysgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjU1MworLSAqICAgICAgICAgICAgIGRhdGFfaWQgPSBpZChkYXRhKQorLSAqICAgICAg ICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CistICogICAgICAgICAgICAgICAgIHdpdGggbm9n aWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgICAg IGVyciA9IG1wdl9jb21tYW5kX25vZGUoc2VsZi5fY3R4LCAmbm9kZSwgJm5vZGVyZXN1bHQpCist ICogICAgICAgICAgICAgICAgIHRyeToKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjE5CisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AK KysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9nZXRfcHJv cGVydHkoCisrICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKKyAgKi8KKy0gICAgICB7Cisr ICAgICAgLypmaW5hbGx5OiovIHsKKysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CisgICAgICAg ICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsK Ky0gICAgICAgICAgUHlfVU5CTE9DS19USFJFQURTCistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxf UmVtZW1iZXIoKTsKKysgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAg ICAgUHlfQkxPQ0tfVEhSRUFEUworICAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgLyp0cnk6 Ki8geworLQorLSAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 NTQKKy0gKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgorLSAqICAgICAgICAgICAg ICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X2NvbW1h bmRfbm9kZShzZWxmLl9jdHgsICZub2RlLCAmbm9kZXJlc3VsdCkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICB0cnk6CistICogICAgICAgICAgICAgICAg ICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQpIGlmIGVyciA+PSAw IGVsc2UgTm9uZQorLSAqLworLSAgICAgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X2NvbW1hbmRf bm9kZShfX3B5eF92X3NlbGYtPl9jdHgsICgmX19weXhfdl9ub2RlKSwgKCZfX3B5eF92X25vZGVy ZXN1bHQpKTsKKy0gICAgICAgICAgfQorLQorLSAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTUzCistICogICAgICAgICAgICAgZGF0YV9pZCA9IGlkKGRhdGEpCist ICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czoKKy0gKiAgICAgICAgICAgICAgICAg d2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg ICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZShzZWxmLl9jdHgsICZub2RlLCAmbm9kZXJl c3VsdCkKKy0gKiAgICAgICAgICAgICAgICAgdHJ5OgorLSAqLworLSAgICAgICAgICAvKmZpbmFs bHk6Ki8geworLSAgICAgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICAgICAj aWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7 CistICAgICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICAgICAjZW5kaWYK Ky0gICAgICAgICAgICAgIGdvdG8gX19weXhfTDk7CistICAgICAgICAgICAgfQorLSAgICAgICAg ICAgIF9fcHl4X0w5OjsKKy0gICAgICAgICAgfQorKyAgICAgICAgICBnb3RvIF9fcHl4X0w1Owor KyAgICAgICAgfQorKyAgICAgICAgX19weXhfTDU6OworICAgICAgIH0KKysgIH0KKyAKKy0gICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU1CistICogICAgICAgICAgICAg ICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFu ZF9ub2RlKHNlbGYuX2N0eCwgJm5vZGUsICZub2RlcmVzdWx0KQorLSAqICAgICAgICAgICAgICAg ICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAg ICAgIHJlc3VsdCA9IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZXJlc3VsdCkgaWYgZXJyID49IDAg ZWxzZSBOb25lCistICogICAgICAgICAgICAgICAgIGZpbmFsbHk6CisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjI2CisrICogICAgICAgICAgICAgICAgICZyZXN1bHQsCisr ICogICAgICAgICAgICAgKQorKyAqICAgICAgICAgaWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKysgKiAg ICAgICAgIHRyeToKKyAgKi8KKy0gICAgICAvKnRyeToqLyB7CisrICBfX3B5eF90XzUgPSAoKF9f cHl4X3ZfZXJyIDwgMCkgIT0gMCk7CisrICBpZiAodW5saWtlbHkoX19weXhfdF81KSkgeworIAor LSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1NgorLSAqICAgICAg ICAgICAgICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZShzZWxmLl9jdHgsICZub2RlLCAm bm9kZXJlc3VsdCkKKy0gKiAgICAgICAgICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgICAg ICAgICAgcmVzdWx0ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlcmVzdWx0KSBpZiBlcnIgPj0g MCBlbHNlIE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg ICAgICBmaW5hbGx5OgorLSAqICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYyNworKyAqICAgICAgICAgICAgICkK KysgKiAgICAgICAgIGlmIGVyciA8IDA6CisrICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3Io ZXJyKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB0cnk6CisrICog ICAgICAgICAgICAgdiA9IF9jb252ZXJ0X25vZGVfdmFsdWUocmVzdWx0KQorICAqLworLSAgICAg ICAgaWYgKCgoX19weXhfdl9lcnIgPj0gMCkgIT0gMCkpIHsKKy0gICAgICAgICAgX19weXhfdF8y ID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShfX3B5 eF92X25vZGVyZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1 NTYsIF9fcHl4X0wxMV9lcnJvcikKKy0gICAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7 CistICAgICAgICAgIF9fcHl4X3RfMSA9IF9fcHl4X3RfMjsKKy0gICAgICAgICAgX19weXhfdF8y ID0gMDsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25l KTsKKy0gICAgICAgICAgX19weXhfdF8xID0gUHlfTm9uZTsKKy0gICAgICAgIH0KKy0gICAgICAg IF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl9yZXN1bHQsIF9fcHl4X3RfMSk7CistICAgICAgICBf X3B5eF90XzEgPSAwOworKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwg X19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgNjI3LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Cisr ICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNjI3LCBfX3B5eF9MMV9lcnJvcikKKysg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fcHl4X3RfNiA9IE5VTEw7CisrICAg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19w eXhfdF8yKSkpIHsKKysgICAgICBfX3B5eF90XzYgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90 XzIpOworKyAgICAgIGlmIChsaWtlbHkoX19weXhfdF82KSkgeworKyAgICAgICAgUHlPYmplY3Qq IGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CisrICAgICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF82KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7 CisrICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworICAgICAg IH0KKysgICAgfQorKyAgICBfX3B5eF90XzEgPSAoX19weXhfdF82KSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNiwgX19weXhfdF8zKSA6IF9fUHl4X1B5T2Jq ZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOworKyAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMp OyBfX3B5eF90XzMgPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA2MjcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK KysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4 X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEp OyBfX3B5eF90XzEgPSAwOworKyAgICBfX1BZWF9FUlIoMCwgNjI3LCBfX3B5eF9MMV9lcnJvcikK KyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU4CistICogICAg ICAgICAgICAgICAgICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQp IGlmIGVyciA+PSAwIGVsc2UgTm9uZQorLSAqICAgICAgICAgICAgICAgICBmaW5hbGx5OgorLSAq ICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMo Jm5vZGVyZXN1bHQpCistICogICAgICAgICAgICAgZWxzZToKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjYyNgorKyAqICAgICAgICAgICAgICAgICAmcmVzdWx0LAorKyAq ICAgICAgICAgICAgICkKKysgKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCisrICogICAg ICAgICB0cnk6CisgICovCistICAgICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFs IGV4aXQ6Ki97CistICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVB RAorLSAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgICAgICAgICBQ eV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIo KTsKKy0gICAgICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICAgICAgLyp0cnk6Ki8geworKyAg fQorIAorLSAgICAgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTU5CistICogICAgICAgICAgICAgICAgIGZpbmFsbHk6CistICogICAgICAgICAgICAgICAgICAg ICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVf Y29udGVudHMoJm5vZGVyZXN1bHQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgICAgICBlbHNlOgorLSAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJl cGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjYyOAorKyAqICAgICAgICAgaWYgZXJyIDwgMDoKKysgKiAgICAgICAgICAg ICByYWlzZSBNUFZFcnJvcihlcnIpCisrICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICB2ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShyZXN1 bHQpCisrICogICAgICAgICBmaW5hbGx5OgorICAqLworLSAgICAgICAgICAgICAgICBtcHZfZnJl ZV9ub2RlX2NvbnRlbnRzKCgmX19weXhfdl9ub2RlcmVzdWx0KSk7CistICAgICAgICAgICAgICB9 CisrICAvKnRyeToqLyB7CisgCistICAgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTU4CistICogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfY29udmVy dF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQpIGlmIGVyciA+PSAwIGVsc2UgTm9uZQorLSAqICAgICAg ICAgICAgICAgICBmaW5hbGx5OgorLSAqICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICAgICAgICAg IG1wdl9mcmVlX25vZGVfY29udGVudHMoJm5vZGVyZXN1bHQpCistICogICAgICAgICAgICAgZWxz ZToKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYyOQorKyAqICAgICAg ICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKysgKiAgICAgICAgIHRyeToKKysgKiAgICAgICAg ICAgICB2ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShyZXN1bHQpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIGZpbmFsbHk6CisrICogICAgICAgICAgICAgd2l0aCBub2dp bDoKKyAgKi8KKy0gICAgICAgICAgICAgIC8qZmluYWxseToqLyB7CistICAgICAgICAgICAgICAg IC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFE CistICAgICAgICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAg ICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICAgICAgICAgI2VuZGlmCistICAg ICAgICAgICAgICAgICAgZ290byBfX3B5eF9MMTU7CistICAgICAgICAgICAgICAgIH0KKy0gICAg ICAgICAgICAgICAgX19weXhfTDE1OjsKKy0gICAgICAgICAgICAgIH0KKy0gICAgICAgICAgfQor LSAgICAgICAgICBnb3RvIF9fcHl4X0wxMjsKKy0gICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0wx MV9lcnJvcjo7CistICAgICAgICAvKmV4Y2VwdGlvbiBleGl0OioveworLSAgICAgICAgICBfX1B5 eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKKy0gICAgICAgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9h c3NpZ24KKy0gICAgICAgICAgX19weXhfdF8xMCA9IDA7IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90 XzEyID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3RfMTQgPSAwOyBfX3B5eF90XzE1ID0gMDsK Ky0gICAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAg ICAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgICAg ICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAgICAgICAg aWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgX19QeXhfRXhjZXB0aW9uU3dhcCgmX19weXhfdF8x MywgJl9fcHl4X3RfMTQsICZfX3B5eF90XzE1KTsKKy0gICAgICAgICAgaWYgKChQWV9NQUpPUl9W RVJTSU9OIDwgMykgfHwgdW5saWtlbHkoX19QeXhfR2V0RXhjZXB0aW9uKCZfX3B5eF90XzEwLCAm X19weXhfdF8xMSwgJl9fcHl4X3RfMTIpIDwgMCkpIF9fUHl4X0VyckZldGNoKCZfX3B5eF90XzEw LCAmX19weXhfdF8xMSwgJl9fcHl4X3RfMTIpOworLSAgICAgICAgICBfX1B5eF9YR09UUkVGKF9f cHl4X3RfMTApOworLSAgICAgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTEpOworLSAgICAg ICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTIpOworLSAgICAgICAgICBfX1B5eF9YR09UUkVG KF9fcHl4X3RfMTMpOworLSAgICAgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTQpOworLSAg ICAgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTUpOworLSAgICAgICAgICBfX3B5eF90Xzcg PSBfX3B5eF9saW5lbm87IF9fcHl4X3RfOCA9IF9fcHl4X2NsaW5lbm87IF9fcHl4X3RfOSA9IF9f cHl4X2ZpbGVuYW1lOworLSAgICAgICAgICB7CistICAgICAgICAgICAgeworLSAgICAgICAgICAg ICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAq X3NhdmU7CistICAgICAgICAgICAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgICAgICAg ICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAgICAgICAgICAgICAgICNlbmRpZgor LSAgICAgICAgICAgICAgICAvKnRyeToqLyB7CisrICAgIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoX19weXhfdl9yZXN1bHQpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2MjksIF9fcHl4X0w4X2Vycm9y KQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19weXhfdl92ID0gX19weXhf dF8xOworKyAgICBfX3B5eF90XzEgPSAwOworKyAgfQorIAorLSAgICAgICAgICAgICAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTkKKy0gKiAgICAgICAgICAgICAgICAg ZmluYWxseToKKy0gKiAgICAgICAgICAgICAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAg ICAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50cygmbm9kZXJlc3VsdCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGVsc2U6CistICogICAg ICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQs IE5vbmUpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMxCisrICogICAg ICAgICAgICAgdiA9IF9jb252ZXJ0X25vZGVfdmFsdWUocmVzdWx0KQorKyAqICAgICAgICAgZmlu YWxseToKKysgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoJnJlc3Vs dCkKKysgKiAgICAgICAgIHJldHVybiB2CisgICovCistICAgICAgICAgICAgICAgICAgbXB2X2Zy ZWVfbm9kZV9jb250ZW50cygoJl9fcHl4X3Zfbm9kZXJlc3VsdCkpOworLSAgICAgICAgICAgICAg ICB9CisrICAvKmZpbmFsbHk6Ki8geworKyAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgIHsK KysgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAgIFB5VGhyZWFkU3RhdGUg Kl9zYXZlOworKyAgICAgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKysgICAgICAgICAgX19QeXhf RmFzdEdJTF9SZW1lbWJlcigpOworKyAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgLyp0cnk6 Ki8geworIAorLSAgICAgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTU4CistICogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3Zh bHVlKG5vZGVyZXN1bHQpIGlmIGVyciA+PSAwIGVsc2UgTm9uZQorLSAqICAgICAgICAgICAgICAg ICBmaW5hbGx5OgorLSAqICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICAgICAgICAgIG1wdl9mcmVl X25vZGVfY29udGVudHMoJm5vZGVyZXN1bHQpCistICogICAgICAgICAgICAgZWxzZToKKysgICAg ICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMyCisrICogICAgICAg ICBmaW5hbGx5OgorKyAqICAgICAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAg ICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoJnJlc3VsdCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgcmV0dXJuIHYKKysgKiAKKyAgKi8KKy0gICAgICAgICAgICAg ICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgICAgICAgICAgICAvKm5vcm1hbCBleGl0Oiovewor LSAgICAgICAgICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgICAgICAg ICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAgICAgICAgICAgICAgICAgICAgUHlfQkxP Q0tfVEhSRUFEUworLSAgICAgICAgICAgICAgICAgICAgI2VuZGlmCistICAgICAgICAgICAgICAg ICAgICBnb3RvIF9fcHl4X0wyMDsKKy0gICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAg ICAgICAgX19weXhfTDIwOjsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgIH0KKy0g ICAgICAgICAgfQorLSAgICAgICAgICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAzKSB7CistICAg ICAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMyk7CistICAgICAgICAgICAgX19QeXhf WEdJVkVSRUYoX19weXhfdF8xNCk7CistICAgICAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhf dF8xNSk7CistICAgICAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMywgX19w eXhfdF8xNCwgX19weXhfdF8xNSk7CisrICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50 cygoJl9fcHl4X3ZfcmVzdWx0KSk7CisgICAgICAgICAgIH0KKy0gICAgICAgICAgX19QeXhfWEdJ VkVSRUYoX19weXhfdF8xMCk7CistICAgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTEp OworLSAgICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEyKTsKKy0gICAgICAgICAgX19Q eXhfRXJyUmVzdG9yZShfX3B5eF90XzEwLCBfX3B5eF90XzExLCBfX3B5eF90XzEyKTsKKy0gICAg ICAgICAgX19weXhfdF8xMCA9IDA7IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90XzEyID0gMDsgX19w eXhfdF8xMyA9IDA7IF9fcHl4X3RfMTQgPSAwOyBfX3B5eF90XzE1ID0gMDsKKy0gICAgICAgICAg X19weXhfbGluZW5vID0gX19weXhfdF83OyBfX3B5eF9jbGluZW5vID0gX19weXhfdF84OyBfX3B5 eF9maWxlbmFtZSA9IF9fcHl4X3RfOTsKKy0gICAgICAgICAgZ290byBfX3B5eF9MNF9lcnJvcjsK Ky0gICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0wxMjo7CistICAgICAgfQorIAorLSAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTIKKy0gKiAgICAgICAgIHRyeToKKy0g KiAgICAgICAgICAgICBkYXRhX2lkID0gaWQoZGF0YSkKKy0gKiAgICAgICAgICAgICBpZiBub3Qg YXN5bmNocm9ub3VzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAg ICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29t bWFuZF9ub2RlKHNlbGYuX2N0eCwgJm5vZGUsICZub2RlcmVzdWx0KQorKyAgICAgICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMxCisrICogICAgICAgICAgICAgdiA9IF9j b252ZXJ0X25vZGVfdmFsdWUocmVzdWx0KQorKyAqICAgICAgICAgZmluYWxseToKKysgKiAgICAg ICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoJnJlc3VsdCkKKysgKiAgICAgICAg IHJldHVybiB2CisgICovCistICAgICAgZ290byBfX3B5eF9MNjsKKysgICAgICAgICAgLypmaW5h bGx5OiovIHsKKysgICAgICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAgICAg I2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgp OworKyAgICAgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAgICAgI2VuZGlm CisrICAgICAgICAgICAgICBnb3RvIF9fcHl4X0wxMjsKKysgICAgICAgICAgICB9CisrICAgICAg ICAgICAgX19weXhfTDEyOjsKKysgICAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBnb3RvIF9f cHl4X0w5OworICAgICB9CisrICAgIF9fcHl4X0w4X2Vycm9yOjsKKysgICAgLypleGNlcHRpb24g ZXhpdDoqL3sKKysgICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKKysgICAgICBfX1B5 eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorKyAgICAgIF9fcHl4X3RfMTAgPSAwOyBfX3B5eF90XzEx ID0gMDsgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTMgPSAwOyBfX3B5eF90XzE0ID0gMDsgX19w eXhfdF8xNSA9IDA7CisrICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysg ICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICAgICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICAgIGlmIChQWV9NQUpP Ul9WRVJTSU9OID49IDMpIF9fUHl4X0V4Y2VwdGlvblN3YXAoJl9fcHl4X3RfMTMsICZfX3B5eF90 XzE0LCAmX19weXhfdF8xNSk7CisrICAgICAgaWYgKChQWV9NQUpPUl9WRVJTSU9OIDwgMykgfHwg dW5saWtlbHkoX19QeXhfR2V0RXhjZXB0aW9uKCZfX3B5eF90XzEwLCAmX19weXhfdF8xMSwgJl9f cHl4X3RfMTIpIDwgMCkpIF9fUHl4X0VyckZldGNoKCZfX3B5eF90XzEwLCAmX19weXhfdF8xMSwg Jl9fcHl4X3RfMTIpOworKyAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMCk7CisrICAgICAg X19QeXhfWEdPVFJFRihfX3B5eF90XzExKTsKKysgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3Rf MTIpOworKyAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMyk7CisrICAgICAgX19QeXhfWEdP VFJFRihfX3B5eF90XzE0KTsKKysgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTUpOworKyAg ICAgIF9fcHl4X3RfNyA9IF9fcHl4X2xpbmVubzsgX19weXhfdF84ID0gX19weXhfY2xpbmVubzsg X19weXhfdF85ID0gX19weXhfZmlsZW5hbWU7CisrICAgICAgeworKyAgICAgICAgeworKyAgICAg ICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKl9z YXZlOworKyAgICAgICAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAgIF9fUHl4 X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKysgICAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgICAv KnRyeToqLyB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjEK Ky0gKiAgICAgICAgICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2Rl cmVzdWx0KQorLSAqICAgICAgICAgICAgIGVsc2U6CistICogICAgICAgICAgICAgICAgIHVzZXJk YXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5v bmU6CistICogICAgICAgICAgICAgICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2RhdGFfaWRdID0g dXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKysgICAgICAgICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzIKKysgKiAgICAgICAgIGZpbmFsbHk6CisrICog ICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9k ZV9jb250ZW50cygmcmVzdWx0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICByZXR1cm4gdgorKyAqIAorICAqLworLSAgICAvKmVsc2UqLyB7CistICAgICAgX19weXhf dF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJk YXRhLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgNTYxLCBfX3B5eF9MNF9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK Ky0gICAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfZGF0 YV9pZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDU2MSwgX19weXhf TDRfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgICAgX19weXhf dF8xNiA9IE5VTEw7CistICAgICAgX19weXhfdF84ID0gMDsKKy0gICAgICBpZiAoQ1lUSE9OX1VO UEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAg ICAgICAgX19weXhfdF8xNiA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgICAg ICBpZiAobGlrZWx5KF9fcHl4X3RfMTYpKSB7CistICAgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlv biA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworLSAgICAgICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF8xNik7CistICAgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Cist ICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgICAg ICAgIF9fcHl4X3RfOCA9IDE7CistICAgICAgICB9CistICAgICAgfQorLSAgICAgICNpZiBDWVRI T05fRkFTVF9QWUNBTEwKKy0gICAgICBpZiAoUHlGdW5jdGlvbl9DaGVjayhfX3B5eF90XzIpKSB7 CistICAgICAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzE2LCBfX3B5eF90 XzMsIFB5X05vbmV9OworLSAgICAgICAgX19weXhfdF8xID0gX19QeXhfUHlGdW5jdGlvbl9GYXN0 Q2FsbChfX3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5eF90XzgsIDIrX19weXhfdF84KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTYxLCBfX3B5eF9MNF9lcnJvcikK Ky0gICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNik7IF9fcHl4X3RfMTYgPSAwOworLSAg ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgICAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAgICB9IGVsc2UKKy0gICAgICAjZW5kaWYKKy0g ICAgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAorLSAgICAgIGlmIChfX1B5eF9QeUZhc3RDRnVu Y3Rpb25fQ2hlY2soX19weXhfdF8yKSkgeworLSAgICAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBb M10gPSB7X19weXhfdF8xNiwgX19weXhfdF8zLCBQeV9Ob25lfTsKKy0gICAgICAgIF9fcHl4X3Rf MSA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9f cHl4X3RfOCwgMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA1NjEsIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzE2KTsgX19weXhfdF8xNiA9IDA7CistICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICAg IH0gZWxzZQorLSAgICAgICNlbmRpZgorLSAgICAgIHsKKy0gICAgICAgIF9fcHl4X3RfMTcgPSBQ eVR1cGxlX05ldygyK19fcHl4X3RfOCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xNykpIF9fUFlY X0VSUigwLCA1NjEsIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMTcpOworLSAgICAgICAgaWYgKF9fcHl4X3RfMTYpIHsKKy0gICAgICAgICAgX19QeXhfR0lW RVJFRihfX3B5eF90XzE2KTsgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzE3LCAwLCBfX3B5eF90 XzE2KTsgX19weXhfdF8xNiA9IE5VTEw7CistICAgICAgICB9CistICAgICAgICBfX1B5eF9HSVZF UkVGKF9fcHl4X3RfMyk7CistICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMTcsIDAr X19weXhfdF84LCBfX3B5eF90XzMpOworLSAgICAgICAgX19QeXhfSU5DUkVGKFB5X05vbmUpOwor LSAgICAgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKy0gICAgICAgIFB5VHVwbGVfU0VUX0lU RU0oX19weXhfdF8xNywgMStfX3B5eF90XzgsIFB5X05vbmUpOworLSAgICAgICAgX19weXhfdF8z ID0gMDsKKy0gICAgICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8y LCBfX3B5eF90XzE3LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgNTYxLCBfX3B5eF9MNF9lcnJvcikKKy0gICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMTcpOyBfX3B5eF90XzE3ID0gMDsKKy0g ICAgICB9CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cist ICAgICAgX19weXhfdl91c2VyZGF0YXMgPSBfX3B5eF90XzE7CistICAgICAgX19weXhfdF8xID0g MDsKKy0KKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTYyCistICog ICAgICAgICAgICAgZWxzZToKKy0gKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5y ZXBseV91c2VyZGF0YS5nZXQoZGF0YV9pZCwgTm9uZSkKKy0gKiAgICAgICAgICAgICAgICAgaWYg dXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0YXNbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBf UmVwbHlVc2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkK Ky0gKi8KKy0gICAgICBfX3B5eF90XzYgPSAoX19weXhfdl91c2VyZGF0YXMgPT0gUHlfTm9uZSk7 CistICAgICAgX19weXhfdF81ID0gKF9fcHl4X3RfNiAhPSAwKTsKKy0gICAgICBpZiAoX19weXhf dF81KSB7CisrICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCgmX19weXhfdl9y ZXN1bHQpKTsKKysgICAgICAgICAgICB9CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTYzCistICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYu cmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCistICogICAgICAgICAgICAgICAgIGlm IHVzZXJkYXRhcyBpcyBOb25lOgorLSAqICAgICAgICAgICAgICAgICAgICAgX3JlcGx5X3VzZXJk YXRhc1tkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgp CistICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6CisrICAgICAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzMQorKyAqICAgICAgICAgICAgIHYgPSBfY29udmVy dF9ub2RlX3ZhbHVlKHJlc3VsdCkKKysgKiAgICAgICAgIGZpbmFsbHk6CisrICogICAgICAgICAg ICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZyZXN1bHQpCisrICogICAgICAgICByZXR1 cm4gdgorICAqLworLSAgICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIs IF9fcHl4X25fc19SZXBseVVzZXJEYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgNTYzLCBfX3B5eF9MNF9lcnJvcikKKy0gICAgICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworLSAgICAgICAgX19weXhfdF8xNyA9IE5VTEw7CistICAgICAgICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7 CistICAgICAgICAgIF9fcHl4X3RfMTcgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwor LSAgICAgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfMTcpKSB7CistICAgICAgICAgICAgUHlPYmpl Y3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CistICAgICAg ICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMTcpOworLSAgICAgICAgICAgIF9fUHl4X0lOQ1JF RihmdW5jdGlvbik7CistICAgICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1 bmN0aW9uKTsKKy0gICAgICAgICAgfQorKyAgICAgICAgICAgIC8qZmluYWxseToqLyB7CisrICAg ICAgICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAgICAgICAjaWZkZWYgV0lU SF9USFJFQUQKKysgICAgICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAg ICAgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAgICAgICAjZW5kaWYKKysg ICAgICAgICAgICAgICAgZ290byBfX3B5eF9MMTc7CisrICAgICAgICAgICAgICB9CisrICAgICAg ICAgICAgICBfX3B5eF9MMTc6OworKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKy0gICAgICAg IF9fcHl4X3RfMSA9IChfX3B5eF90XzE3KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzIsIF9fcHl4X3RfMTcsIF9fcHl4X3ZfZGF0YSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25l QXJnKF9fcHl4X3RfMiwgX19weXhfdl9kYXRhKTsKKy0gICAgICAgIF9fUHl4X1hERUNSRUYoX19w eXhfdF8xNyk7IF9fcHl4X3RfMTcgPSAwOworLSAgICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNTYzLCBfX3B5eF9MNF9lcnJvcikKKy0gICAgICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworLSAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfU2V0SXRlbUludChfX3B5eF92 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2RhdGFfaWQs IF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAs IDEpIDwgMCkpIF9fUFlYX0VSUigwLCA1NjMsIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgICAgX19Q eXhfSU5DUkVGKF9fcHl4X3RfMSk7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Zf dXNlcmRhdGFzLCBfX3B5eF90XzEpOworLSAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTYyCistICogICAgICAgICAgICAgZWxzZToKKy0gKiAgICAgICAgICAgICAgICAgdXNl cmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoZGF0YV9pZCwgTm9uZSkKKy0gKiAgICAg ICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0YXNbZGF0YV9pZF0g PSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgICAgICAgICB1 c2VyZGF0YXMuYWRkKCkKKy0gKi8KKyAgICAgICB9CistCistICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjU2NAorLSAqICAgICAgICAgICAgICAgICBpZiB1c2VyZGF0YXMg aXMgTm9uZToKKy0gKiAgICAgICAgICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0YXNbZGF0YV9p ZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgICAgICAg ICB1c2VyZGF0YXMuYWRkKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2 X2NvbW1hbmRfbm9kZV9hc3luYyhzZWxmLl9jdHgsIGRhdGFfaWQsICZub2RlKQorLSAqLworLSAg ICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0 YXMsIF9fcHl4X25fc19hZGQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigw LCA1NjQsIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwor LSAgICAgIF9fcHl4X3RfMTcgPSBOVUxMOworLSAgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhP RFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgICAgICBfX3B5 eF90XzE3ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKy0gICAgICAgIGlmIChsaWtl bHkoX19weXhfdF8xNykpIHsKKy0gICAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CistICAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzE3KTsKKy0gICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgICAg X19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKy0gICAgICAgIH0KKysgICAg ICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAzKSB7CisrICAgICAgICBfX1B5eF9YR0lWRVJFRihf X3B5eF90XzEzKTsKKysgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTQpOworKyAgICAg ICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xNSk7CisrICAgICAgICBfX1B5eF9FeGNlcHRpb25S ZXNldChfX3B5eF90XzEzLCBfX3B5eF90XzE0LCBfX3B5eF90XzE1KTsKKyAgICAgICB9CistICAg ICAgX19weXhfdF8xID0gKF9fcHl4X3RfMTcpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzIsIF9fcHl4X3RfMTcpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3Rf Mik7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE3KTsgX19weXhfdF8xNyA9IDA7Cist ICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTY0LCBfX3B5eF9M NF9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEw KTsKKysgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzExKTsKKysgICAgICBfX1B5eF9YR0lW RVJFRihfX3B5eF90XzEyKTsKKysgICAgICBfX1B5eF9FcnJSZXN0b3JlKF9fcHl4X3RfMTAsIF9f cHl4X3RfMTEsIF9fcHl4X3RfMTIpOworKyAgICAgIF9fcHl4X3RfMTAgPSAwOyBfX3B5eF90XzEx ID0gMDsgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTMgPSAwOyBfX3B5eF90XzE0ID0gMDsgX19w eXhfdF8xNSA9IDA7CisrICAgICAgX19weXhfbGluZW5vID0gX19weXhfdF83OyBfX3B5eF9jbGlu ZW5vID0gX19weXhfdF84OyBfX3B5eF9maWxlbmFtZSA9IF9fcHl4X3RfOTsKKysgICAgICBnb3Rv IF9fcHl4X0wxX2Vycm9yOworKyAgICB9CisrICAgIF9fcHl4X0w5OjsKKysgIH0KKyAKKy0gICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY1CistICogICAgICAgICAgICAg ICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNl ckRhdGEoZGF0YSkKKy0gKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCistICogICAg ICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1wdl9jb21tYW5kX25vZGVfYXN5bmMoc2VsZi5f Y3R4LCBkYXRhX2lkLCAmbm9kZSkKKy0gKiAgICAgICAgIGZpbmFsbHk6CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMzCisrICogICAgICAgICAgICAgd2l0aCBub2dpbDoK KysgKiAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50cygmcmVzdWx0KQorKyAq ICAgICAgICAgcmV0dXJuIHYgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAq ICAgICBAX2Vycm9ycworICAqLworLSAgICAgIHsKKy0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhS RUFECistICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAgICAgICAgICBQeV9VTkJM T0NLX1RIUkVBRFMKKy0gICAgICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAg ICAgICAjZW5kaWYKKy0gICAgICAgICAgLyp0cnk6Ki8geworKyAgX19QeXhfWERFQ1JFRihfX3B5 eF9yKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3YpOworKyAgX19weXhfciA9IF9fcHl4X3Zf djsKKysgIGdvdG8gX19weXhfTDA7CisgCistICAgICAgICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjU2NgorLSAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkK Ky0gKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICAgICAgICAg IGVyciA9IG1wdl9jb21tYW5kX25vZGVfYXN5bmMoc2VsZi5fY3R4LCBkYXRhX2lkLCAmbm9kZSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZmluYWxseToKKy0gKiAg ICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlKQorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjYxMgorKyAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0 CisrICogCisrICogICAgIGRlZiBnZXRfcHJvcGVydHkoc2VsZiwgcHJvcCk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfZ2V0X3Byb3BlcnR5 IiIiCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICovCistICAgICAgICAgICAgX19w eXhfdl9lcnIgPSBtcHZfY29tbWFuZF9ub2RlX2FzeW5jKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19w eXhfdl9kYXRhX2lkLCAoJl9fcHl4X3Zfbm9kZSkpOworLSAgICAgICAgICB9CisgCistICAgICAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjUKKy0gKiAgICAgICAgICAg ICAgICAgICAgIF9yZXBseV91c2VyZGF0YXNbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlV c2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkKKy0gKiAg ICAgICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZV9hc3luYyhzZWxm Ll9jdHgsIGRhdGFfaWQsICZub2RlKQorLSAqICAgICAgICAgZmluYWxseToKKy0gKi8KKy0gICAg ICAgICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgICAgICAvKm5vcm1hbCBleGl0OioveworLSAg ICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgICAgICBfX1B5eF9GYXN0 R0lMX0ZvcmdldCgpOworLSAgICAgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworLSAgICAgICAg ICAgICAgI2VuZGlmCistICAgICAgICAgICAgICBnb3RvIF9fcHl4X0wyNDsKKy0gICAgICAgICAg ICB9CistICAgICAgICAgICAgX19weXhfTDI0OjsKKy0gICAgICAgICAgfQorLSAgICAgIH0KKy0g ICAgfQorLSAgICBfX3B5eF9MNjo7CistICB9CisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K KysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKysgIF9f UHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0 dGVyLmxpYnMubXB2LkNvbnRleHQuZ2V0X3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKysgIF9fcHl4X0ww OjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl92KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dl9wcm9wKTsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY4CistICogICAgICAgICAgICAgICAgICAgICBlcnIg PSBtcHZfY29tbWFuZF9ub2RlX2FzeW5jKHNlbGYuX2N0eCwgZGF0YV9pZCwgJm5vZGUpCistICog ICAgICAgICBmaW5hbGx5OgorLSAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVl KG5vZGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIGVyciA8 IDA6CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorLSAqLworLSAgLypmaW5h bGx5OiovIHsKKy0gICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICBfX3B5eF90XzEgPSAoKHN0 cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19w eXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwg X19weXhfdl9ub2RlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTY4 LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAgICBnb3RvIF9f cHl4X0w1OworLSAgICB9CistICAgIF9fcHl4X0w0X2Vycm9yOjsKKy0gICAgLypleGNlcHRpb24g ZXhpdDoqL3sKKy0gICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKKy0gICAgICBfX1B5 eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorLSAgICAgIF9fcHl4X3RfMTUgPSAwOyBfX3B5eF90XzE0 ID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3RfMTIgPSAwOyBfX3B5eF90XzExID0gMDsgX19w eXhfdF8xMCA9IDA7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNik7IF9fcHl4X3RfMTYgPSAwOwor LSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNyk7IF9fcHl4X3RfMTcgPSAwOworLSAgICAg IF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICAgICAgaWYgKFBZX01BSk9SX1ZF UlNJT04gPj0gMykgX19QeXhfRXhjZXB0aW9uU3dhcCgmX19weXhfdF8xMiwgJl9fcHl4X3RfMTEs ICZfX3B5eF90XzEwKTsKKy0gICAgICBpZiAoKFBZX01BSk9SX1ZFUlNJT04gPCAzKSB8fCB1bmxp a2VseShfX1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfMTUsICZfX3B5eF90XzE0LCAmX19weXhf dF8xMykgPCAwKSkgX19QeXhfRXJyRmV0Y2goJl9fcHl4X3RfMTUsICZfX3B5eF90XzE0LCAmX19w eXhfdF8xMyk7CistICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE1KTsKKy0gICAgICBfX1B5 eF9YR09UUkVGKF9fcHl4X3RfMTQpOworLSAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMyk7 CistICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzEyKTsKKy0gICAgICBfX1B5eF9YR09UUkVG KF9fcHl4X3RfMTEpOworLSAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMCk7CistICAgICAg X19weXhfdF84ID0gX19weXhfbGluZW5vOyBfX3B5eF90XzcgPSBfX3B5eF9jbGluZW5vOyBfX3B5 eF90XzE4ID0gX19weXhfZmlsZW5hbWU7CistICAgICAgeworLSAgICAgICAgX19weXhfdF8xID0g KChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAq KV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3Nl bGYsIF9fcHl4X3Zfbm9kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDU2OCwgX19weXhfTDI2X2Vycm9yKQorLSAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CistICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAg ICB9CistICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgeworLSAgICAgICAgX19QeXhf WEdJVkVSRUYoX19weXhfdF8xMik7CistICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEx KTsKKy0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTApOworLSAgICAgICAgX19QeXhf RXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMiwgX19weXhfdF8xMSwgX19weXhfdF8xMCk7CistICAg ICAgfQorLSAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTUpOworLSAgICAgIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3RfMTQpOworLSAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTMpOwor LSAgICAgIF9fUHl4X0VyclJlc3RvcmUoX19weXhfdF8xNSwgX19weXhfdF8xNCwgX19weXhfdF8x Myk7CistICAgICAgX19weXhfdF8xNSA9IDA7IF9fcHl4X3RfMTQgPSAwOyBfX3B5eF90XzEzID0g MDsgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90XzEwID0gMDsKKy0gICAg ICBfX3B5eF9saW5lbm8gPSBfX3B5eF90Xzg7IF9fcHl4X2NsaW5lbm8gPSBfX3B5eF90Xzc7IF9f cHl4X2ZpbGVuYW1lID0gX19weXhfdF8xODsKKy0gICAgICBnb3RvIF9fcHl4X0wxX2Vycm9yOwor LSAgICAgIF9fcHl4X0wyNl9lcnJvcjo7CistICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJT04gPj0g MykgeworLSAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMik7CistICAgICAgICBfX1B5 eF9YR0lWRVJFRihfX3B5eF90XzExKTsKKy0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Rf MTApOworLSAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMiwgX19weXhfdF8x MSwgX19weXhfdF8xMCk7CistICAgICAgfQorLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8x NSk7IF9fcHl4X3RfMTUgPSAwOworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNCk7IF9f cHl4X3RfMTQgPSAwOworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xMyk7IF9fcHl4X3Rf MTMgPSAwOworLSAgICAgIF9fcHl4X3RfMTIgPSAwOyBfX3B5eF90XzExID0gMDsgX19weXhfdF8x MCA9IDA7CistICAgICAgZ290byBfX3B5eF9MMV9lcnJvcjsKKy0gICAgfQorLSAgICBfX3B5eF9M NTo7CistICB9CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY5Cist ICogICAgICAgICBmaW5hbGx5OgorLSAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3Zh bHVlKG5vZGUpCistICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorLSAqICAgICAgICAg cmV0dXJuIHJlc3VsdAorLSAqLworLSAgX19weXhfdF81ID0gKChfX3B5eF92X2VyciA8IDApICE9 IDApOworLSAgaWYgKHVubGlrZWx5KF9fcHl4X3RfNSkpIHsKKy0KKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjU3MAorLSAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0 aXZlX3ZhbHVlKG5vZGUpCistICogICAgICAgICBpZiBlcnIgPCAwOgorLSAqICAgICAgICAgICAg IHJhaXNlIE1QVkVycm9yKGVycikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgcmV0dXJuIHJlc3VsdAorLSAqIAorLSAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9i YWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgNTcwLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4X3RfMTcgPSBfX1B5eF9QeUludF9Gcm9tX2ludChf X3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xNykpIF9fUFlYX0VSUigwLCA1NzAs IF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xNyk7CistICAgIF9f cHl4X3RfMyA9IE5VTEw7CistICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtl bHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAgICBfX3B5eF90XzMgPSBQeU1l dGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkg eworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9f cHl4X3RfMik7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKKy0gICAgICAgIF9f UHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Rf MiwgZnVuY3Rpb24pOworLSAgICAgIH0KKy0gICAgfQorLSAgICBfX3B5eF90XzEgPSAoX19weXhf dF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19w eXhfdF8xNykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8x Nyk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMTcpOyBfX3B5eF90XzE3ID0gMDsKKy0gICAgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTcwLCBfX3B5eF9MMV9lcnJvcikKKy0gICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworLSAgICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOworLSAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAgX19QWVhfRVJS KDAsIDU3MCwgX19weXhfTDFfZXJyb3IpCistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo1NjkKKy0gKiAgICAgICAgIGZpbmFsbHk6CistICogICAgICAgICAgICAgc2Vs Zi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZSkKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihl cnIpCistICogICAgICAgICByZXR1cm4gcmVzdWx0CistICovCistICB9CistCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcxCistICogICAgICAgICBpZiBlcnIgPCAwOgor LSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKy0gKiAgICAgICAgIHJldHVybiBy ZXN1bHQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICBAX2Vycm9y cworLSAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5 eF92X3Jlc3VsdCk7CistICBfX3B5eF9yID0gX19weXhfdl9yZXN1bHQ7CistICBnb3RvIF9fcHl4 X0wwOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUzMAorLSAqICAg ICAgICAgICAgIGZyZWUobm9kZS51LnN0cmluZykKKy0gKiAKKy0gKiAgICAgZGVmIGNvbW1hbmQo c2VsZiwgKmNtZGxpc3QsIGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiU2VuZCBhIGNvbW1hbmQgdG8gbXB2 LgorLSAqIAorLSAqLworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9M MV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMTYpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE3KTsKKy0gIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuY29tbWFuZCIsIF9fcHl4 X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5V TEw7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfcmVzdWx0KTsKKy0g IF9fUHl4X1hERUNSRUYoX19weXhfdl91c2VyZGF0YXMpOworLSAgX19QeXhfWEdJVkVSRUYoX19w eXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5 eF9yOworLX0KKy0KKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTc0CistICog CistICogICAgIEBfZXJyb3JzCistICogICAgIGRlZiBnZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwg cHJvcCwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgIiIiR2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBhc3luY2hyb25vdXNseS4KKy0gKiAK KysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjM2CisrICogCisrICogICAgIEBf ZXJyb3JzCisrICogICAgIGRlZiBzZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSwg YXN5bmNocm9ub3VzPUZhbHNlLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICAiIiJXcmFwczogbXB2X3NldF9wcm9wZXJ0eSBhbmQgbXB2X3NldF9w cm9wZXJ0eV9hc3luYyIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqLworIAor IC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTVnZXRfcHJvcGVydHlfYXN5bmMoUHlPYmplY3QgKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsg Lypwcm90byovCistc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8xNGdldF9wcm9wZXJ0eV9hc3luY1tdID0gIkdldHMgdGhlIHZhbHVlIG9mIGEgcHJv cGVydHkgYXN5bmNocm9ub3VzbHkuXG5cbiAgICAgICAgQXJndW1lbnRzOlxuICAgICAgICBwcm9w OiBQcm9wZXJ0eSB0byBnZXQgdGhlIHZhbHVlIG9mLlxuXG4gICAgICAgIEtleXdvcmQgYXJndW1l bnRzOlxuICAgICAgICBkYXRhOiBWYWx1ZSB0byBiZSBwYXNzZWQgaW50byB0aGUgcmVwbHlfdXNl cmRhdGEgb2YgdGhlIHJlc3BvbnNlIGV2ZW50LlxuICAgICAgICBXcmFwczogbXB2X2dldF9wcm9w ZXJ0eV9hc3luYyI7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMTVnZXRfcHJvcGVydHlfYXN5bmMoUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7Cisrc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTlzZXRf cHJvcGVydHkoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5 T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisrc3RhdGljIGNoYXIgX19weXhfZG9jXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eVtdID0gIldyYXBzOiBt cHZfc2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIjsKKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOXNldF9wcm9w ZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmpl Y3QgKl9fcHl4X2t3ZHMpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF92X3Byb3AgPSAwOworKyAgUHlP YmplY3QgKl9fcHl4X3ZfdmFsdWUgPSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfYXN5bmNocm9u b3VzID0gMDsKKyAgIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEgPSAwOworICAgaW50IF9fcHl4X2xp bmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQg X19weXhfY2xpbmVubyA9IDA7CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImdldF9w cm9wZXJ0eV9hc3luYyAod3JhcHBlcikiLCAwKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJzZXRfcHJvcGVydHkgKHdyYXBwZXIpIiwgMCk7CisgICB7CistICAgIHN0YXRpYyBQeU9i amVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3Byb3AsJl9fcHl4X25fc19k YXRhLDB9OworLSAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07CistICAgIHZhbHVlc1sx XSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKKysgICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhf cHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfcHJvcCwmX19weXhfbl9zX3ZhbHVlLCZfX3B5eF9u X3NfYXN5bmNocm9ub3VzLCZfX3B5eF9uX3NfZGF0YSwwfTsKKysgICAgUHlPYmplY3QqIHZhbHVl c1s0XSA9IHswLDAsMCwwfTsKKysgICAgdmFsdWVzWzFdID0gKChQeU9iamVjdCAqKVB5X1RydWUp OworKyAgICB2YWx1ZXNbMl0gPSAoKFB5T2JqZWN0ICopUHlfRmFsc2UpOworKyAgICB2YWx1ZXNb M10gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7CisgICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2Rz KSkgeworICAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKyAgICAgICBjb25zdCBQeV9zc2l6ZV90 IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKyAgICAgICBzd2l0Y2gg KHBvc19hcmdzKSB7CisrICAgICAgICBjYXNlICA0OiB2YWx1ZXNbM10gPSBQeVR1cGxlX0dFVF9J VEVNKF9fcHl4X2FyZ3MsIDMpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAg ICAgY2FzZSAgMzogdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsK KysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKyAgICAgICAgIGNhc2UgIDI6IHZhbHVlc1sx XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CisgICAgICAgICBDWVRIT05fRkFM TFRIUk9VR0g7CisgICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVN KF9fcHl4X2FyZ3MsIDApOworQEAgLTExODc1LDE1ICsxMjI1OCwzMSBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNWdldF9wcm9wZXJ0 eV9hc3luYyhQeQorICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworICAgICAgICAgY2FzZSAg MToKKyAgICAgICAgIGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCogdmFs dWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZGF0YSk7 CisrICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9f cHl4X2t3ZHMsIF9fcHl4X25fc192YWx1ZSk7CisgICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1 ZXNbMV0gPSB2YWx1ZTsga3dfYXJncy0tOyB9CisgICAgICAgICB9CisrICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAyOgorKyAgICAgICAgaWYgKGt3X2FyZ3MgPiAw KSB7CisrICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3Ry KF9fcHl4X2t3ZHMsIF9fcHl4X25fc19hc3luY2hyb25vdXMpOworKyAgICAgICAgICBpZiAodmFs dWUpIHsgdmFsdWVzWzJdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorKyAgICAgICAgfQorKyAgICAg ICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMzoKKysgICAgICAgIGlmIChr d19hcmdzID4gMCkgeworKyAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3Rf R2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZGF0YSk7CisrICAgICAgICAgIGlmICh2 YWx1ZSkgeyB2YWx1ZXNbM10gPSB2YWx1ZTsga3dfYXJncy0tOyB9CisrICAgICAgICB9CisgICAg ICAgfQorICAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1 bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlh cmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgImdldF9wcm9wZXJ0eV9hc3luYyIpIDwgMCkp IF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYgKHVubGlrZWx5 KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVz LCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0X3Byb3BlcnR5IikgPCAwKSkgX19QWVhfRVJSKDAs IDYzNiwgX19weXhfTDNfZXJyb3IpCisgICAgICAgfQorICAgICB9IGVsc2UgeworICAgICAgIHN3 aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgeworKyAgICAgICAgY2FzZSAgNDog dmFsdWVzWzNdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAzKTsKKysgICAgICAgIENZ VEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVf R0VUX0lURU0oX19weXhfYXJncywgMik7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Cisg ICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3Ms IDEpOworICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworICAgICAgICAgY2FzZSAgMTogdmFs dWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKK0BAIC0xMTg5Miw3MCAr MTIyOTEsODMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMTVnZXRfcHJvcGVydHlfYXN5bmMoUHkKKyAgICAgICB9CisgICAgIH0KKyAg ICAgX19weXhfdl9wcm9wID0gdmFsdWVzWzBdOworLSAgICBfX3B5eF92X2RhdGEgPSB2YWx1ZXNb MV07CisrICAgIF9fcHl4X3ZfdmFsdWUgPSB2YWx1ZXNbMV07CisrICAgIF9fcHl4X3ZfYXN5bmNo cm9ub3VzID0gdmFsdWVzWzJdOworKyAgICBfX3B5eF92X2RhdGEgPSB2YWx1ZXNbM107CisgICB9 CisgICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworICAgX19weXhfTDVf YXJndHVwbGVfZXJyb3I6OworLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoImdldF9wcm9w ZXJ0eV9hc3luYyIsIDAsIDEsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZ WF9FUlIoMCwgNTc0LCBfX3B5eF9MM19lcnJvcikKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZh bGlkKCJzZXRfcHJvcGVydHkiLCAwLCAxLCA0LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3Mp KTsgX19QWVhfRVJSKDAsIDYzNiwgX19weXhfTDNfZXJyb3IpCisgICBfX3B5eF9MM19lcnJvcjo7 CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmdldF9w cm9wZXJ0eV9hc3luYyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5z ZXRfcHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1l KTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIE5VTEw7Cisg ICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7CistICBfX3B5eF9yID0gX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE0Z2V0X3Byb3BlcnR5X2FzeW5jKCgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zf c2VsZiksIF9fcHl4X3ZfcHJvcCwgX19weXhfdl9kYXRhKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwg X19weXhfdl9wcm9wLCBfX3B5eF92X3ZhbHVlLCBfX3B5eF92X2FzeW5jaHJvbm91cywgX19weXhf dl9kYXRhKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTRnZXRfcHJv cGVydHlfYXN5bmMoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQeU9iamVjdCAqX19weXhf dl9kYXRhKSB7CistICB1aW50NjRfdCBfX3B5eF92X2lkX2RhdGE7CistICBQeU9iamVjdCAqX19w eXhfdl91c2VyZGF0YXMgPSBOVUxMOworLSAgY2hhciBjb25zdCAqX19weXhfdl9wcm9wX2M7Cisr c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MThzZXRfcHJvcGVydHkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQeU9iamVjdCAqX19w eXhfdl92YWx1ZSwgUHlPYmplY3QgKl9fcHl4X3ZfYXN5bmNocm9ub3VzLCBQeU9iamVjdCAqX19w eXhfdl9kYXRhKSB7CisrICBlbnVtIG1wdl9mb3JtYXQgX19weXhfdl9mb3JtYXQ7CisrICBzdHJ1 Y3QgbXB2X25vZGUgX19weXhfdl92OworICAgaW50IF9fcHl4X3ZfZXJyOworKyAgdWludDY0X3Qg X19weXhfdl9kYXRhX2lkOworKyAgY2hhciBjb25zdCAqX19weXhfdl9wcm9wX2M7CisrICBQeU9i amVjdCAqX19weXhfdl91c2VyZGF0YXMgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBO VUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90 XzEgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisgICBQeU9iamVjdCAq X19weXhfdF8zID0gTlVMTDsKKy0gIFB5X2hhc2hfdCBfX3B5eF90XzQ7CistICBQeU9iamVjdCAq X19weXhfdF81ID0gTlVMTDsKKysgIGVudW0gbXB2X2Zvcm1hdCBfX3B5eF90XzQ7CisrICBjaGFy IGNvbnN0ICpfX3B5eF90XzU7CisgICBpbnQgX19weXhfdF82OworLSAgUHlPYmplY3QgKl9fcHl4 X3RfNyA9IE5VTEw7CistICBpbnQgX19weXhfdF84OworLSAgaW50IF9fcHl4X3RfOTsKKy0gIGNo YXIgY29uc3QgKl9fcHl4X3RfMTA7CisrICBpbnQgX19weXhfdF83OworKyAgUHlfaGFzaF90IF9f cHl4X3RfODsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzkgPSBOVUxMOworKyAgaW50IF9fcHl4X3Rf MTA7CisrICBQeU9iamVjdCAqX19weXhfdF8xMSA9IE5VTEw7CisrICBpbnQgX19weXhfdF8xMjsK KysgIGNoYXIgY29uc3QgKl9fcHl4X3RfMTM7CisrICBQeU9iamVjdCAqX19weXhfdF8xNCA9IE5V TEw7CisrICBQeU9iamVjdCAqX19weXhfdF8xNSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhf dF8xNiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8xNyA9IE5VTEw7CisrICBQeU9iamVj dCAqX19weXhfdF8xOCA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8xOSA9IE5VTEw7Cisg ICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJnZXRfcHJvcGVydHlfYXN5bmMiLCAwKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJzZXRfcHJvcGVydHkiLCAwKTsKKyAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3Byb3Ap OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4MworLSAqICAgICAg ICAgZGF0YTogVmFsdWUgdG8gYmUgcGFzc2VkIGludG8gdGhlIHJlcGx5X3VzZXJkYXRhIG9mIHRo ZSByZXNwb25zZSBldmVudC4KKy0gKiAgICAgICAgIFdyYXBzOiBtcHZfZ2V0X3Byb3BlcnR5X2Fz eW5jIiIiCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjM4CisrICogICAg IGRlZiBzZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSwgYXN5bmNocm9ub3VzPUZh bHNlLCBkYXRhPU5vbmUpOgorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfcHJvcGVydHkg YW5kIG1wdl9zZXRfcHJvcGVydHlfYXN5bmMiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9j dHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgcHJvcCA9IF9zdHJl bmMocHJvcCkKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5o YXNoKGRhdGEpCisrICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0ID0gc2VsZi5fZm9y bWF0X2Zvcih2YWx1ZSkKKyAgKi8KKyAgICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9O UworICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CisgICAgIGlmICh1bmxpa2Vs eSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKyAgICAgICBQeUVycl9TZXROb25lKFB5 RXhjX0Fzc2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIoMCwgNTgzLCBfX3B5eF9MMV9l cnJvcikKKysgICAgICBfX1BZWF9FUlIoMCwgNjM4LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgfQor ICAgfQorICAgI2VuZGlmCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTg0CistICogICAgICAgICBXcmFwczogbXB2X2dldF9wcm9wZXJ0eV9hc3luYyIiIgorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzOQorKyAqICAgICAgICAgIiIiV3JhcHM6 IG1wdl9zZXRfcHJvcGVydHkgYW5kIG1wdl9zZXRfcHJvcGVydHlfYXN5bmMiIiIKKyAgKiAgICAg ICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRf ZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCistICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxm LnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorKyAqICAgICAgICAgY2RlZiBtcHZf Zm9ybWF0IGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCisrICogICAgICAgICBjZGVm IG1wdl9ub2RlIHYgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQorICAq LworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJl bmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1ODQsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25f c19zdHJlbmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2MzksIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICBfX3B5eF90XzMg PSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhv ZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAgLTExOTY5LDUyMyArMTIzODEsNDgwIEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE0Z2V0 X3Byb3BlcnR5X2FzeW5jKHN0CisgICB9CisgICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9f UHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl9wcm9w KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X3Byb3ApOwor ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTg0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYzOSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3Byb3AsIF9fcHl4 X3RfMSk7CisgICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjU4NQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0MAor ICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMo cHJvcCkKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNo KGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHVzZXJkYXRh cyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCistICogICAgICAgICBp ZiB1c2VyZGF0YXMgaXMgTm9uZToKKy0gKi8KKy0gIF9fcHl4X3RfNCA9IFB5T2JqZWN0X0hhc2go X19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA9PSAoKFB5X2hhc2hfdCktMSkp KSBfX1BZWF9FUlIoMCwgNTg1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3ZfaWRfZGF0YSA9 ICgodWludDY0X3QpX19weXhfdF80KTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1ODYKKy0gKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCistICogICAgICAg ICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorLSAqICAgICAg ICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5v bmU6CistICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJk YXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisrICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQg Zm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgY2RlZiBtcHZfbm9kZSB2ID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFs dWUodmFsdWUsIGZvcm1hdCkKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAqLworLSAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPnJlcGx5X3Vz ZXJkYXRhLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgNTg2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0 X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19mb3JtYXRf Zm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNjQwLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gX19Q eXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5eF92X2lkX2RhdGEpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCA1ODYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7CistICBfX3B5eF90XzUgPSBOVUxMOworLSAgX19weXhfdF82ID0gMDsK KysgIF9fcHl4X3RfMyA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICBfX3B5eF90XzUgPSBQeU1l dGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfNSkpIHsK KysgICAgX19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgaWYg KGxpa2VseShfX3B5eF90XzMpKSB7CisgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Rf NSk7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7CisgICAgICAgX19QeXhfSU5DUkVG KGZ1bmN0aW9uKTsKKyAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24p OworLSAgICAgIF9fcHl4X3RfNiA9IDE7CistICAgIH0KKy0gIH0KKy0gICNpZiBDWVRIT05fRkFT VF9QWUNBTEwKKy0gIGlmIChQeUZ1bmN0aW9uX0NoZWNrKF9fcHl4X3RfMikpIHsKKy0gICAgUHlP YmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF81LCBfX3B5eF90XzMsIFB5X05vbmV9Owor LSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwgX19w eXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA1ODYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIH0gZWxz ZQorLSAgI2VuZGlmCistICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAorLSAgaWYgKF9fUHl4X1B5 RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzIpKSB7CistICAgIFB5T2JqZWN0ICpfX3B5eF90 ZW1wWzNdID0ge19fcHl4X3RfNSwgX19weXhfdF8zLCBQeV9Ob25lfTsKKy0gICAgX19weXhfdF8x ID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8yLCBfX3B5eF90ZW1wKzEtX19w eXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDU4NiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsg X19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgfSBlbHNlCistICAjZW5kaWYK Ky0gIHsKKy0gICAgX19weXhfdF83ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzYpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA1ODYsIF9fcHl4X0wxX2Vycm9yKQorLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKy0gICAgaWYgKF9fcHl4X3RfNSkgeworLSAgICAg IF9fUHl4X0dJVkVSRUYoX19weXhfdF81KTsgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDAs IF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IE5VTEw7CisgICAgIH0KKy0gICAgX19QeXhfR0lWRVJF RihfX3B5eF90XzMpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMCtfX3B5eF90 XzYsIF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gICAgX19QeXhf R0lWRVJFRihQeV9Ob25lKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDErX19w eXhfdF82LCBQeV9Ob25lKTsKKy0gICAgX19weXhfdF8zID0gMDsKKy0gICAgX19weXhfdF8xID0g X19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzIsIF9fcHl4X3RfNywgTlVMTCk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU4NiwgX19weXhfTDFfZXJyb3IpCistICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsg X19weXhfdF83ID0gMDsKKyAgIH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhf UHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X3ZhbHVlKSA6 IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X3ZhbHVlKTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY0MCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworLSAgX19weXhfdl91c2VyZGF0YXMgPSBfX3B5eF90XzE7CistICBfX3B5eF90XzEg PSAwOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4NworLSAqICAg ICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKy0gKiAg ICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUp CistICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1 c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgdXNlcmRhdGFzLmFk ZCgpCistICovCistICBfX3B5eF90XzggPSAoX19weXhfdl91c2VyZGF0YXMgPT0gUHlfTm9uZSk7 CistICBfX3B5eF90XzkgPSAoX19weXhfdF84ICE9IDApOworLSAgaWYgKF9fcHl4X3RfOSkgewor LQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTg4CistICogICAgICAg ICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorLSAq ICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6CistICogICAgICAgICAgICAgc2VsZi5yZXBs eV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQor LSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wCistICovCistICAgIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0 YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU4OCwgX19weXhfTDFf ZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX3B5eF90XzcgPSBO VUxMOworLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9k X0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgICAgX19weXhfdF83ID0gUHlNZXRob2RfR0VUX1NF TEYoX19weXhfdF8yKTsKKy0gICAgICBpZiAobGlrZWx5KF9fcHl4X3RfNykpIHsKKy0gICAgICAg IFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwor LSAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNyk7CistICAgICAgICBfX1B5eF9JTkNSRUYo ZnVuY3Rpb24pOworLSAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9u KTsKKy0gICAgICB9CistICAgIH0KKy0gICAgX19weXhfdF8xID0gKF9fcHl4X3RfNykgPyBfX1B5 eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzcsIF9fcHl4X3ZfZGF0YSkg OiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9kYXRhKTsKKy0g ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQorLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CistICAgIGlmICh1bmxpa2VseShfX1B5eF9TZXRJdGVtSW50KF9fcHl4 X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X3ZfaWRfZGF0YSwgX19weXhfdF8xLCB1aW50 NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhf RVJSKDAsIDU4OCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEp OworLSAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF90XzEpOwor LSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0KKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4NworLSAqICAgICAgICAgY2RlZiB1aW50 NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKy0gKiAgICAgICAgIHVzZXJkYXRh cyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCistICogICAgICAgICBp ZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVw bHlVc2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCistICovCistICB9 CisrICBfX3B5eF90XzQgPSAoKGVudW0gbXB2X2Zvcm1hdClfX1B5eF9QeUludF9Bc19lbnVtX19t cHZfZm9ybWF0KF9fcHl4X3RfMSkpOyBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJyZWQoKSkpIF9f UFlYX0VSUigwLCA2NDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX3B5eF92X2Zvcm1hdCA9IF9fcHl4X3RfNDsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODkKKy0gKiAgICAgICAgIGlmIHVz ZXJkYXRhcyBpcyBOb25lOgorLSAqICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRf ZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgdXNl cmRhdGFzLmFkZCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNk ZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDEKKysgKiAgICAgICAgIHByb3Ag PSBfc3RyZW5jKHByb3ApCisrICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0ID0gc2Vs Zi5fZm9ybWF0X2Zvcih2YWx1ZSkKKysgKiAgICAgICAgIGNkZWYgbXB2X25vZGUgdiA9IHNlbGYu X3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqICAgICAgICAgY2RlZiB1aW50NjRf dCBkYXRhX2lkCisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3NfYWRkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgNTg5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOworLSAgX19weXhfdF83ID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4 X3RfNyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgIGlmIChsaWtlbHkoX19w eXhfdF83KSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzcpOworLSAgICAg IF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90 XzIsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3RfNykg PyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF83KSA6IF9fUHl4 X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzIpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzcpOyBfX3B5eF90XzcgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgNTg5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2Zvcm1hdChfX3B5eF92X2Zvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDY0MSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor KyAgX19weXhfdl92ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9wcmVwX25hdGl2ZV92 YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3ZfdmFsdWUsIF9fcHl4X3RfMSk7CisgICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo1OTAKKy0gKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRh W2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKy0gKiAgICAgICAg IHVzZXJkYXRhcy5hZGQoKQorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBw cm9wICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHdpdGggbm9naWw6 CistICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9wZXJ0eV9hc3luYygKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDUKKysgKiAgICAgICAgIGNkZWYgdWludDY0 X3QgZGF0YV9pZAorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MKKysgKiAgICAg ICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHBy b3BfYyA9IHByb3AKKysgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgorICAqLwor LSAgX19weXhfdF8xMCA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfcHJvcCk7IGlm ICh1bmxpa2VseSgoIV9fcHl4X3RfMTApICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIo MCwgNTkwLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3ZfcHJvcF9jID0gX19weXhfdF8xMDsK KysgIC8qdHJ5OiovIHsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 OTEKKy0gKiAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorLSAqICAgICAgICAgY2RlZiBjb25zdCBj aGFyKiBwcm9wX2MgPSBwcm9wCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9wZXJ0eV9h c3luYygKKy0gKiAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjQ2CisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHBy b3BfYworKyAqICAgICAgICAgdHJ5OgorKyAqICAgICAgICAgICAgIHByb3BfYyA9IHByb3AgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hy b25vdXM6CisrICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6CisgICovCistICB7CistICAg ICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAg ICAgUHlfVU5CTE9DS19USFJFQURTCistICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwor LSAgICAgICNlbmRpZgorLSAgICAgIC8qdHJ5OiovIHsKKysgICAgX19weXhfdF81ID0gX19QeXhf UHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9wcm9wKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF81 KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDY0NiwgX19weXhfTDRfZXJyb3Ip CisrICAgIF9fcHl4X3ZfcHJvcF9jID0gX19weXhfdF81OworIAorLSAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MgorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFy KiBwcm9wX2MgPSBwcm9wCistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAg IGVyciA9IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorLSAqICAgICAgICAgICAgICAgICBp ZF9kYXRhLAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjQ3CisrICog ICAgICAgICB0cnk6CisrICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAorKyAqICAgICAgICAg ICAgIGlmIG5vdCBhc3luY2hyb25vdXM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICAgICAgICAgIGVy ciA9IG1wdl9zZXRfcHJvcGVydHkoCisgICovCistICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9n ZXRfcHJvcGVydHlfYXN5bmMoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X2lkX2RhdGEsIF9f cHl4X3ZfcHJvcF9jLCBNUFZfRk9STUFUX05PREUpOworLSAgICAgIH0KKysgICAgX19weXhfdF82 ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfYXN5bmNocm9ub3VzKTsgaWYgKHVubGlr ZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgNjQ3LCBfX3B5eF9MNF9lcnJvcikKKysg ICAgX19weXhfdF83ID0gKCghX19weXhfdF82KSAhPSAwKTsKKysgICAgaWYgKF9fcHl4X3RfNykg eworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OTEKKy0gKiAg ICAgICAgIHVzZXJkYXRhcy5hZGQoKQorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9w X2MgPSBwcm9wCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9wZXJ0eV9hc3luYygKKy0g KiAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2NDgKKysgKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wCisrICogICAg ICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czoKKysgKiAgICAgICAgICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICAg ICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0eSgKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICBz ZWxmLl9jdHgsCisgICovCistICAgICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFs IGV4aXQ6Ki97CisrICAgICAgeworICAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAg ICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFE UworKyAgICAgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICAgICAgUHlfVU5CTE9D S19USFJFQURTCisrICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKyAgICAgICAg ICAgI2VuZGlmCistICAgICAgICAgIGdvdG8gX19weXhfTDY7CistICAgICAgICB9CistICAgICAg ICBfX3B5eF9MNjo7CistICAgICAgfQorLSAgfQorKyAgICAgICAgICAvKnRyeToqLyB7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTk4CistICogICAgICAgICAgICAg ICAgIE1QVl9GT1JNQVRfTk9ERSwKKy0gKiAgICAgICAgICAgICApCistICogICAgICAgICByZXR1 cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgZGVmIHRy eV9nZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lLCBkZWZhdWx0PU5vbmUp OgorKyAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDkKKysg KiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgorKyAqICAgICAgICAgICAgICAgICB3 aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0 eSggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICAgICAg ICAgIHNlbGYuX2N0eCwKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX2MsCisgICov CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRf RnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA1OTgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Cist ICBfX3B5eF9yID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKy0gIGdvdG8gX19weXhf TDA7CisrICAgICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfc2V0X3Byb3BlcnR5KF9fcHl4X3Zf c2VsZi0+X2N0eCwgX19weXhfdl9wcm9wX2MsIE1QVl9GT1JNQVRfTk9ERSwgKCZfX3B5eF92X3Yp KTsKKysgICAgICAgICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjU3NAorLSAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgZ2V0X3Byb3BlcnR5X2Fz eW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgICIiIkdldHMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgYXN5bmNocm9ub3Vz bHkuCistICogCisrICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 NDgKKysgKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wCisrICogICAgICAgICAgICAgaWYgbm90 IGFzeW5jaHJvbm91czoKKysgKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3Nl dF9wcm9wZXJ0eSgKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCisgICov CisrICAgICAgICAgIC8qZmluYWxseToqLyB7CisrICAgICAgICAgICAgLypub3JtYWwgZXhpdDoq L3sKKysgICAgICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICAgICAgX19Q eXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKysg ICAgICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICAgICAgZ290byBfX3B5eF9MOTsKKysgICAg ICAgICAgICB9CisrICAgICAgICAgICAgX19weXhfTDk6OworKyAgICAgICAgICB9CisrICAgICAg fQorIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf NSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmdldF9wcm9wZXJ0eV9hc3luYyIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7 CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfdXNlcmRhdGFzKTsKKy0g IF9fUHl4X1hERUNSRUYoX19weXhfdl9wcm9wKTsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Ip OworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsK Ky19CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1NQorKyAqICAg ICAgICAgICAgICAgICAgICAgICAgICZ2CisrICogICAgICAgICAgICAgICAgICAgICApCisrICog ICAgICAgICAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgICAgIGRhdGFfaWQgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorKyAqICAgICAg ICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUp CisrICovCisrICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgICBfX3B5eF90XzEg PSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDY1NSwgX19weXhfTDRfZXJyb3IpCisrICAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisrICAgICAgX19weXhfciA9IF9fcHl4X3RfMTsKKysgICAgICBfX3B5 eF90XzEgPSAwOworKyAgICAgIGdvdG8gX19weXhfTDNfcmV0dXJuOworIAorLS8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDAKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKy0gKiAK Ky0gKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25l LCBkZWZhdWx0PU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0NworICAqICAgICAgICAgdHJ5OgorLSAq ICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhwcm9wLCBkYXRhPWRh dGEpCisrICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAorKyAqICAgICAgICAgICAgIGlmIG5v dCBhc3luY2hyb25vdXM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1wdl9z ZXRfcHJvcGVydHkoCisgICovCisrICAgIH0KKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE3 dHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xN3RyeV9nZXRf cHJvcGVydHlfYXN5bmMoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2Fy Z3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CistICBQeU9iamVjdCAqX19weXhfdl9wcm9wID0g MDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3Zf ZGVmYXVsdCA9IDA7CistICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0IGNoYXIgKl9f cHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgidHJ5X2dldF9wcm9wZXJ0eV9hc3luYyAod3JhcHBlciki LCAwKTsKKy0gIHsKKy0gICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0g eyZfX3B5eF9uX3NfcHJvcCwmX19weXhfbl9zX2RhdGEsJl9fcHl4X25fc19kZWZhdWx0LDB9Owor LSAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCwwfTsKKy0gICAgdmFsdWVzWzFdID0gKChQ eU9iamVjdCAqKVB5X05vbmUpOworLSAgICB2YWx1ZXNbMl0gPSAoKFB5T2JqZWN0ICopUHlfTm9u ZSk7CistICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworLSAgICAgIFB5X3NzaXplX3Qg a3dfYXJnczsKKy0gICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBj YXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOworLSAg ICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNl ICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJy b3I7CistICAgICAgfQorLSAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsK Ky0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNlICAwOgorLSAgICAgICAg aWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dk cywgX19weXhfbl9zX3Byb3ApKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSBnb3Rv IF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwor LSAgICAgICAgY2FzZSAgMToKKy0gICAgICAgIGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAg ICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBf X3B5eF9uX3NfZGF0YSk7CistICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNbMV0gPSB2YWx1 ZTsga3dfYXJncy0tOyB9CistICAgICAgICB9CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 CistICAgICAgICBjYXNlICAyOgorLSAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7CistICAgICAg ICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMs IF9fcHl4X25fc19kZWZhdWx0KTsKKy0gICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1syXSA9 IHZhbHVlOyBrd19hcmdzLS07IH0KKy0gICAgICAgIH0KKy0gICAgICB9CistICAgICAgaWYgKHVu bGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNl T3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMs IHBvc19hcmdzLCAidHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIpIDwgMCkpIF9fUFlYX0VSUigwLCA2 MDAsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjU2CisrICogICAgICAgICAgICAgICAgICAgICApCisrICogICAgICAgICAgICAgICAgIHJl dHVybiBlcnIKKysgKiAgICAgICAgICAgICBkYXRhX2lkID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHVzZXJkYXRhcyA9 IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCisrICogICAgICAgICAgICAg aWYgdXNlcmRhdGFzIGlzIE5vbmU6CisrICovCisrICAgIF9fcHl4X3RfOCA9IFB5T2JqZWN0X0hh c2goX19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfOCA9PSAoKFB5X2hhc2hfdCkt MSkpKSBfX1BZWF9FUlIoMCwgNjU2LCBfX3B5eF9MNF9lcnJvcikKKysgICAgX19weXhfdl9kYXRh X2lkID0gKCh1aW50NjRfdClfX3B5eF90XzgpOworKworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjU3CisrICogICAgICAgICAgICAgICAgIHJldHVybiBlcnIKKysgKiAg ICAgICAgICAgICBkYXRhX2lkID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKysgKiAgICAgICAgICAg ICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlz IE5vbmU6CisrICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbZGF0YV9pZF0g PSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorKyAqLworKyAgICBfX3B5eF90XzIg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEs IF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2 NTcsIF9fcHl4X0w0X2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAg X19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5eF92X2RhdGFfaWQpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9y KQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgX19weXhfdF85ID0gTlVMTDsK KysgICAgX19weXhfdF8xMCA9IDA7CisrICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAgICAgX19weXhfdF85ID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgICBpZiAobGlrZWx5KF9fcHl4X3Rf OSkpIHsKKysgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElP TihfX3B5eF90XzIpOworKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfOSk7CisrICAgICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzIsIGZ1bmN0aW9uKTsKKysgICAgICAgIF9fcHl4X3RfMTAgPSAxOworICAgICAgIH0KKy0g ICAgfSBlbHNlIHsKKy0gICAgICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykp IHsKKy0gICAgICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhf YXJncywgMik7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAy OiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAgICAg Q1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBs ZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKy0gICAgICAgIGJyZWFrOworLSAgICAgICAgZGVm YXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgfQorKyAgICAjaWYgQ1lU SE9OX0ZBU1RfUFlDQUxMCisrICAgIGlmIChQeUZ1bmN0aW9uX0NoZWNrKF9fcHl4X3RfMikpIHsK KysgICAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzksIF9fcHl4X3RfMywg UHlfTm9uZX07CisrICAgICAgX19weXhfdF8xID0gX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChf X3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5eF90XzEwLCAyK19fcHl4X3RfMTApOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9yKQorKyAg ICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsgX19weXhfdF85ID0gMDsKKysgICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19w eXhfdF8zID0gMDsKKysgICAgfSBlbHNlCisrICAgICNlbmRpZgorKyAgICAjaWYgQ1lUSE9OX0ZB U1RfUFlDQ0FMTAorKyAgICBpZiAoX19QeXhfUHlGYXN0Q0Z1bmN0aW9uX0NoZWNrKF9fcHl4X3Rf MikpIHsKKysgICAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzksIF9fcHl4 X3RfMywgUHlfTm9uZX07CisrICAgICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFz dENhbGwoX19weXhfdF8yLCBfX3B5eF90ZW1wKzEtX19weXhfdF8xMCwgMitfX3B5eF90XzEwKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjU3LCBfX3B5eF9MNF9lcnJv cikKKysgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7CisrICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Myk7IF9fcHl4X3RfMyA9IDA7CisrICAgIH0gZWxzZQorKyAgICAjZW5kaWYKKysgICAgeworKyAg ICAgIF9fcHl4X3RfMTEgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfMTApOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMTEpKSBfX1BZWF9FUlIoMCwgNjU3LCBfX3B5eF9MNF9lcnJvcikKKysgICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xMSk7CisrICAgICAgaWYgKF9fcHl4X3RfOSkgeworKyAgICAg ICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzkpOyBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMTEs IDAsIF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IE5VTEw7CisgICAgICAgfQorKyAgICAgIF9fUHl4 X0dJVkVSRUYoX19weXhfdF8zKTsKKysgICAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMTEs IDArX19weXhfdF8xMCwgX19weXhfdF8zKTsKKysgICAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7 CisrICAgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKysgICAgICBQeVR1cGxlX1NFVF9JVEVN KF9fcHl4X3RfMTEsIDErX19weXhfdF8xMCwgUHlfTm9uZSk7CisrICAgICAgX19weXhfdF8zID0g MDsKKysgICAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMiwgX19w eXhfdF8xMSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY1 NywgX19weXhfTDRfZXJyb3IpCisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90XzExID0gMDsKKyAgICAgfQorLSAg ICBfX3B5eF92X3Byb3AgPSB2YWx1ZXNbMF07CistICAgIF9fcHl4X3ZfZGF0YSA9IHZhbHVlc1sx XTsKKy0gICAgX19weXhfdl9kZWZhdWx0ID0gdmFsdWVzWzJdOworLSAgfQorLSAgZ290byBfX3B5 eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKy0gIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9y OjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJ0cnlfZ2V0X3Byb3BlcnR5X2FzeW5j IiwgMCwgMSwgMywgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA2 MDAsIF9fcHl4X0wzX2Vycm9yKQorLSAgX19weXhfTDNfZXJyb3I6OworLSAgX19QeXhfQWRkVHJh Y2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC50cnlfZ2V0X3Byb3BlcnR5X2FzeW5j IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBOVUxMOworLSAgX19weXhfTDRf YXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNnRyeV9nZXRfcHJvcGVydHlfYXN5bmMoKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwg X19weXhfdl9wcm9wLCBfX3B5eF92X2RhdGEsIF9fcHl4X3ZfZGVmYXVsdCk7CistCistICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwor LSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19w eXhfdF8yID0gMDsKKysgICAgX19weXhfdl91c2VyZGF0YXMgPSBfX3B5eF90XzE7CisrICAgIF9f cHl4X3RfMSA9IDA7CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMTZ0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfcHJvcCwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSwgUHlPYmplY3QgKl9fcHl4X3Zf ZGVmYXVsdCkgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgUHlPYmpl Y3QgKl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKy0g IFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5V TEw7CistICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90 XzcgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfODsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOwor LSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInRyeV9nZXRfcHJvcGVydHlf YXN5bmMiLCAwKTsKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1OAor KyAqICAgICAgICAgICAgIGRhdGFfaWQgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorKyAqICAgICAg ICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUp CisrICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtkYXRh X2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisrICogICAgICAgICAgICAg dXNlcmRhdGFzLmFkZCgpCisrICovCisrICAgIF9fcHl4X3RfNyA9IChfX3B5eF92X3VzZXJkYXRh cyA9PSBQeV9Ob25lKTsKKysgICAgX19weXhfdF82ID0gKF9fcHl4X3RfNyAhPSAwKTsKKysgICAg aWYgKF9fcHl4X3RfNikgeworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjYwMQorLSAqIAorLSAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9w LCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6CistICogICAgICAgICB0cnk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVy dHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKQorLSAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOgor KyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTkKKysgKiAgICAgICAg ICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQor KyAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgorKyAqICAgICAgICAgICAgICAg ICBzZWxmLnJlcGx5X3VzZXJkYXRhW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRh dGEoZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHVz ZXJkYXRhcy5hZGQoKQorKyAqICAgICAgICAgICAgIHdpdGggbm9naWw6CisgICovCistICB7Cist ICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQorLSAgICBfX1B5eF9QeVRocmVhZFN0YXRl X2Fzc2lnbgorLSAgICBfX1B5eF9FeGNlcHRpb25TYXZlKCZfX3B5eF90XzEsICZfX3B5eF90XzIs ICZfX3B5eF90XzMpOworLSAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4 X1hHT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzMpOworLSAg ICAvKnRyeToqLyB7CisrICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIs IF9fcHl4X25fc19SZXBseVVzZXJEYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgNjU5LCBfX3B5eF9MNF9lcnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8yKTsKKysgICAgICBfX3B5eF90XzExID0gTlVMTDsKKysgICAgICBpZiAoQ1lUSE9OX1VOUEFD S19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAg ICAgICBfX3B5eF90XzExID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgICAg IGlmIChsaWtlbHkoX19weXhfdF8xMSkpIHsKKysgICAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9u ID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CisrICAgICAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzExKTsKKysgICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysg ICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKysgICAgICAg IH0KKysgICAgICB9CisrICAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfMTEpID8gX19QeXhfUHlP YmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8xMSwgX19weXhfdl9kYXRhKSA6IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X2RhdGEpOworKyAgICAg IF9fUHl4X1hERUNSRUYoX19weXhfdF8xMSk7IF9fcHl4X3RfMTEgPSAwOworKyAgICAgIGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY1OSwgX19weXhfTDRfZXJyb3IpCisr ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1J bnQoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfdl9kYXRhX2lkLCBfX3B5eF90 XzEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDAp KSBfX1BZWF9FUlIoMCwgNjU5LCBfX3B5eF9MNF9lcnJvcikKKysgICAgICBfX1B5eF9JTkNSRUYo X19weXhfdF8xKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfdXNlcmRhdGFzLCBf X3B5eF90XzEpOworKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDIKKy0gKiAg ICAgZGVmIHRyeV9nZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lLCBkZWZh dWx0PU5vbmUpOgorLSAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgIHJldHVybiBzZWxm LmdldF9wcm9wZXJ0eV9hc3luYyhwcm9wLCBkYXRhPWRhdGEpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIGV4Y2VwdCBNUFZFcnJvcjoKKy0gKiAgICAgICAgICAgICBy ZXR1cm4gZGVmYXVsdAorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 NTgKKysgKiAgICAgICAgICAgICBkYXRhX2lkID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKysgKiAg ICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBO b25lKQorKyAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFb ZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorKyAqICAgICAgICAg ICAgIHVzZXJkYXRhcy5hZGQoKQorICAqLworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CistICAgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0 ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX2dldF9wcm9wZXJ0eV9hc3luYyk7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDYwMiwgX19weXhfTDNfZXJyb3IpCistICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgICAgX19weXhfdF81ID0gUHlUdXBsZV9O ZXcoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDYwMiwgX19weXhf TDNfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CistICAgICAgX19QeXhf SU5DUkVGKF9fcHl4X3ZfcHJvcCk7CistICAgICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3Byb3Ap OworLSAgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF81LCAwLCBfX3B5eF92X3Byb3ApOwor LSAgICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNjAyLCBfX3B5eF9MM19lcnJvcikKKy0gICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oX19w eXhfdF82LCBfX3B5eF9uX3NfZGF0YSwgX19weXhfdl9kYXRhKSA8IDApIF9fUFlYX0VSUigwLCA2 MDIsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5T2JqZWN0X0Nh bGwoX19weXhfdF80LCBfX3B5eF90XzUsIF9fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhf dF83KSkgX19QWVhfRVJSKDAsIDYwMiwgX19weXhfTDNfZXJyb3IpCistICAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNyk7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3Rf NCA9IDA7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Cist ICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CistICAgICAgX19w eXhfciA9IF9fcHl4X3RfNzsKKy0gICAgICBfX3B5eF90XzcgPSAwOworLSAgICAgIGdvdG8gX19w eXhfTDdfdHJ5X3JldHVybjsKKysgICAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2MDEKKy0gKiAKKy0gKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHlfYXN5 bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lLCBkZWZhdWx0PU5vbmUpOgorLSAqICAgICAgICAgdHJ5 OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIHNl bGYuZ2V0X3Byb3BlcnR5X2FzeW5jKHByb3AsIGRhdGE9ZGF0YSkKKy0gKiAgICAgICAgIGV4Y2Vw dCBNUFZFcnJvcjoKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2MAor KyAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgorKyAqICAgICAgICAgICAgICAg ICBzZWxmLnJlcGx5X3VzZXJkYXRhW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRh dGEoZGF0YSkKKysgKiAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAg ICAgICAgIGVyciA9IG1wdl9zZXRfcHJvcGVydHlfYXN5bmMoCisgICovCisrICAgIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X25f c19hZGQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2NjAsIF9fcHl4 X0w0X2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdF8x MSA9IE5VTEw7CisrICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0 aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAgICAgX19weXhfdF8xMSA9IFB5TWV0aG9kX0dF VF9TRUxGKF9fcHl4X3RfMik7CisrICAgICAgaWYgKGxpa2VseShfX3B5eF90XzExKSkgeworKyAg ICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3Rf Mik7CisrICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xMSk7CisrICAgICAgICBfX1B5eF9J TkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1 bmN0aW9uKTsKKysgICAgICB9CisgICAgIH0KKy0gICAgX19weXhfTDNfZXJyb3I6OworLSAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAgIF9fUHl4X1hERUNS RUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4 X3RfNyA9IDA7CisrICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzExKSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzExKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxO b0FyZyhfX3B5eF90XzIpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90 XzExID0gMDsKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjYw LCBfX3B5eF9MNF9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX1B5eF9ERUNSRUYo X19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjYwMworLSAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgIHJldHVy biBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhwcm9wLCBkYXRhPWRhdGEpCistICogICAgICAgICBl eGNlcHQgTVBWRXJyb3I6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICAgICByZXR1cm4gZGVmYXVsdAorLSAqIAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjYxCisrICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbZGF0 YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorKyAqICAgICAgICAgICAg IHVzZXJkYXRhcy5hZGQoKQorKyAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3NldF9wcm9w ZXJ0eV9hc3luYygKKysgKiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKKyAgKi8KKy0g ICAgX19QeXhfRXJyRmV0Y2goJl9fcHl4X3RfNywgJl9fcHl4X3RfNiwgJl9fcHl4X3RfNSk7Cist ICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3NfTVBWRXJy b3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2MDMsIF9fcHl4X0w1 X2V4Y2VwdF9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgIF9fcHl4 X3RfOCA9IF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyhfX3B5eF90XzcsIF9fcHl4 X3RfNCk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAg ICBfX1B5eF9FcnJSZXN0b3JlKF9fcHl4X3RfNywgX19weXhfdF82LCBfX3B5eF90XzUpOworLSAg ICBfX3B5eF90XzcgPSAwOyBfX3B5eF90XzYgPSAwOyBfX3B5eF90XzUgPSAwOworLSAgICBpZiAo X19weXhfdF84KSB7CistICAgICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5t cHYuQ29udGV4dC50cnlfZ2V0X3Byb3BlcnR5X2FzeW5jIiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlvbigm X19weXhfdF81LCAmX19weXhfdF82LCAmX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2MDMs IF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsK Ky0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF83KTsKKysgICAgeworKyAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICBQ eVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworKyAgICAg ICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworKyAgICAgICAgI2VuZGlmCisrICAgICAgICAv KnRyeToqLyB7CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYw NAorLSAqICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhwcm9wLCBk YXRhPWRhdGEpCistICogICAgICAgICBleGNlcHQgTVBWRXJyb3I6CistICogICAgICAgICAgICAg cmV0dXJuIGRlZmF1bHQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAg ICBkZWYgdHJ5X2dldF9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkZWZhdWx0PU5vbmUpOgorKyAgICAg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYyCisrICogICAgICAgICAg ICAgdXNlcmRhdGFzLmFkZCgpCisrICogICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAg ICAgICAgICAgICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0eV9hc3luYyggICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorKyAqICAg ICAgICAgICAgICAgICAgICAgZGF0YV9pZCwKKyAgKi8KKy0gICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X2RlZmF1bHQpOworLSAgICAgIF9f cHl4X3IgPSBfX3B5eF92X2RlZmF1bHQ7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7 IF9fcHl4X3RfNSA9IDA7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3Rf NiA9IDA7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Cist ICAgICAgZ290byBfX3B5eF9MNl9leGNlcHRfcmV0dXJuOworKyAgICAgICAgICBfX3B5eF92X2Vy ciA9IG1wdl9zZXRfcHJvcGVydHlfYXN5bmMoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X2Rh dGFfaWQsIF9fcHl4X3ZfcHJvcF9jLCBNUFZfRk9STUFUX05PREUsICgmX19weXhfdl92KSk7Cisr ICAgICAgICB9CisrCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NjYxCisrICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbZGF0YV9pZF0gPSB1 c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorKyAqICAgICAgICAgICAgIHVzZXJkYXRh cy5hZGQoKQorKyAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0eV9hc3lu YygKKysgKiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKKysgKi8KKysgICAgICAgIC8q ZmluYWxseToqLyB7CisrICAgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CisrICAgICAgICAgICAg I2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsK KysgICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgICAgI2VuZGlmCisrICAg ICAgICAgICAgZ290byBfX3B5eF9MMTM7CisrICAgICAgICAgIH0KKysgICAgICAgICAgX19weXhf TDEzOjsKKysgICAgICAgIH0KKyAgICAgfQorLSAgICBnb3RvIF9fcHl4X0w1X2V4Y2VwdF9lcnJv cjsKKy0gICAgX19weXhfTDVfZXhjZXB0X2Vycm9yOjsKKysgIH0KKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwMQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjY3MAorKyAqICAgICAgICAgICAgICAgICApCisrICogICAgICAgICBmaW5hbGx5 OgorKyAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKHYpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHJldHVybiBlcnIKKyAgKiAKKy0gKiAgICAg ZGVmIHRyeV9nZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lLCBkZWZhdWx0 PU5vbmUpOgorLSAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5X2FzeW5jKHByb3AsIGRhdGE9 ZGF0YSkKKy0gKiAgICAgICAgIGV4Y2VwdCBNUFZFcnJvcjoKKyAgKi8KKy0gICAgX19QeXhfWEdJ VkVSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8yKTsKKy0gICAg X19QeXhfWEdJVkVSRUYoX19weXhfdF8zKTsKKy0gICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19w eXhfdF8xLCBfX3B5eF90XzIsIF9fcHl4X3RfMyk7CistICAgIGdvdG8gX19weXhfTDFfZXJyb3I7 CistICAgIF9fcHl4X0w3X3RyeV9yZXR1cm46OworLSAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90 XzEpOworLSAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9YR0lWRVJF RihfX3B5eF90XzMpOworLSAgICBfX1B5eF9FeGNlcHRpb25SZXNldChfX3B5eF90XzEsIF9fcHl4 X3RfMiwgX19weXhfdF8zKTsKKy0gICAgZ290byBfX3B5eF9MMDsKKy0gICAgX19weXhfTDZfZXhj ZXB0X3JldHVybjo7CistICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4 X1hHSVZFUkVGKF9fcHl4X3RfMik7CistICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMyk7Cist ICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9fcHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMp OworLSAgICBnb3RvIF9fcHl4X0wwOworKyAgLypmaW5hbGx5OiovIHsKKysgICAgLypub3JtYWwg ZXhpdDoqL3sKKysgICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+ X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjcwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKysgICAgICBnb3RvIF9fcHl4X0w1OworKyAgICB9CisrICAgIF9fcHl4 X0w0X2Vycm9yOjsKKysgICAgLypleGNlcHRpb24gZXhpdDoqL3sKKysgICAgICBfX1B5eF9QeVRo cmVhZFN0YXRlX2RlY2xhcmUKKysgICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorKyAg ICAgIF9fcHl4X3RfMTQgPSAwOyBfX3B5eF90XzE1ID0gMDsgX19weXhfdF8xNiA9IDA7IF9fcHl4 X3RfMTcgPSAwOyBfX3B5eF90XzE4ID0gMDsgX19weXhfdF8xOSA9IDA7CisrICAgICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xMSk7IF9fcHl4X3RfMTEgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7CisrICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90Xzkg PSAwOworKyAgICAgIGlmIChQWV9NQUpPUl9WRVJTSU9OID49IDMpIF9fUHl4X0V4Y2VwdGlvblN3 YXAoJl9fcHl4X3RfMTcsICZfX3B5eF90XzE4LCAmX19weXhfdF8xOSk7CisrICAgICAgaWYgKChQ WV9NQUpPUl9WRVJTSU9OIDwgMykgfHwgdW5saWtlbHkoX19QeXhfR2V0RXhjZXB0aW9uKCZfX3B5 eF90XzE0LCAmX19weXhfdF8xNSwgJl9fcHl4X3RfMTYpIDwgMCkpIF9fUHl4X0VyckZldGNoKCZf X3B5eF90XzE0LCAmX19weXhfdF8xNSwgJl9fcHl4X3RfMTYpOworKyAgICAgIF9fUHl4X1hHT1RS RUYoX19weXhfdF8xNCk7CisrICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE1KTsKKysgICAg ICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTYpOworKyAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhf dF8xNyk7CisrICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE4KTsKKysgICAgICBfX1B5eF9Y R09UUkVGKF9fcHl4X3RfMTkpOworKyAgICAgIF9fcHl4X3RfMTAgPSBfX3B5eF9saW5lbm87IF9f cHl4X3RfMTIgPSBfX3B5eF9jbGluZW5vOyBfX3B5eF90XzEzID0gX19weXhfZmlsZW5hbWU7Cisr ICAgICAgeworKyAgICAgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYikt Pl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfdik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3MCwgX19weXhfTDE1X2Vycm9yKQorKyAgICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKysgICAgICB9CisrICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJ T04gPj0gMykgeworKyAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xNyk7CisrICAgICAg ICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzE4KTsKKysgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3RfMTkpOworKyAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xNywgX19w eXhfdF8xOCwgX19weXhfdF8xOSk7CisrICAgICAgfQorKyAgICAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3RfMTQpOworKyAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTUpOworKyAgICAgIF9f UHl4X1hHSVZFUkVGKF9fcHl4X3RfMTYpOworKyAgICAgIF9fUHl4X0VyclJlc3RvcmUoX19weXhf dF8xNCwgX19weXhfdF8xNSwgX19weXhfdF8xNik7CisrICAgICAgX19weXhfdF8xNCA9IDA7IF9f cHl4X3RfMTUgPSAwOyBfX3B5eF90XzE2ID0gMDsgX19weXhfdF8xNyA9IDA7IF9fcHl4X3RfMTgg PSAwOyBfX3B5eF90XzE5ID0gMDsKKysgICAgICBfX3B5eF9saW5lbm8gPSBfX3B5eF90XzEwOyBf X3B5eF9jbGluZW5vID0gX19weXhfdF8xMjsgX19weXhfZmlsZW5hbWUgPSBfX3B5eF90XzEzOwor KyAgICAgIGdvdG8gX19weXhfTDFfZXJyb3I7CisrICAgICAgX19weXhfTDE1X2Vycm9yOjsKKysg ICAgICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAzKSB7CisrICAgICAgICBfX1B5eF9YR0lWRVJF RihfX3B5eF90XzE3KTsKKysgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTgpOworKyAg ICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xOSk7CisrICAgICAgICBfX1B5eF9FeGNlcHRp b25SZXNldChfX3B5eF90XzE3LCBfX3B5eF90XzE4LCBfX3B5eF90XzE5KTsKKysgICAgICB9Cisr ICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE0KTsgX19weXhfdF8xNCA9IDA7CisrICAgICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzE1KTsgX19weXhfdF8xNSA9IDA7CisrICAgICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzE2KTsgX19weXhfdF8xNiA9IDA7CisrICAgICAgX19weXhfdF8xNyA9 IDA7IF9fcHl4X3RfMTggPSAwOyBfX3B5eF90XzE5ID0gMDsKKysgICAgICBnb3RvIF9fcHl4X0wx X2Vycm9yOworKyAgICB9CisrICAgIF9fcHl4X0wzX3JldHVybjogeworKyAgICAgIF9fcHl4X3Rf MTkgPSBfX3B5eF9yOworKyAgICAgIF9fcHl4X3IgPSAwOworKyAgICAgIF9fcHl4X3RfMSA9ICgo c3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilf X3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxm LCBfX3B5eF92X3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NzAs IF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICAgIF9fcHl4X3Ig PSBfX3B5eF90XzE5OworKyAgICAgIF9fcHl4X3RfMTkgPSAwOworKyAgICAgIGdvdG8gX19weXhf TDA7CisrICAgIH0KKysgICAgX19weXhfTDU6OworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjYwMAorLSAqICAgICAgICAgcmV0dXJuIGVycgorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3MQorKyAqICAgICAgICAgZmluYWxseToKKysg KiAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZSh2KQorKyAqICAgICAgICAgcmV0 dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCistICogICAgIGRlZiB0 cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSwgZGVmYXVsdD1Ob25l KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgdHJ5OgorLSAqICAg ICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhwcm9wLCBkYXRhPWRhdGEp CisrICogICAgIEBfZXJyb3JzCisrICovCisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAg X19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NzEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF9yID0gX19weXhfdF8xOworKyAgX19weXhf dF8xID0gMDsKKysgIGdvdG8gX19weXhfTDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NjM2CisrICogCisrICogICAgIEBfZXJyb3JzCisrICogICAgIGRlZiBzZXRf cHJvcGVydHkoc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSwgYXN5bmNocm9ub3VzPUZhbHNlLCBkYXRh PU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJXcmFw czogbXB2X3NldF9wcm9wZXJ0eSBhbmQgbXB2X3NldF9wcm9wZXJ0eV9hc3luYyIiIgorKyAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnRyeV9nZXRfcHJvcGVydHlfYXN5bmMiLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNS RUYoX19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsKKysgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xMSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJz Lm1wdi5Db250ZXh0LnNldF9wcm9wZXJ0eSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CistICBf X1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl91c2VyZGF0 YXMpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X3Byb3ApOworKyAgX19QeXhfWEdJVkVSRUYo X19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBf X3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA2Cist ICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Njc0CisgICogCistICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHBy b3AsIGRlZmF1bHQ9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHRyeToKKy0gKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHkocHJvcCkK KysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIHNldF9vcHRpb24oc2VsZiwgcHJvcCwgdmFs dWU9VHJ1ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIldy YXBzOiBtcHZfc2V0X29wdGlvbiIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAq LworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTl0cnlfZ2V0X3Byb3BlcnR5KFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dk cyk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzE5dHJ5X2dldF9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKytzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMXNldF9v cHRpb24oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2Jq ZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisrc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMHNldF9vcHRpb25bXSA9ICJXcmFwczogbXB2X3Nl dF9vcHRpb24iOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzIxc2V0X29wdGlvbihQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVj dCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKyAgIFB5T2JqZWN0ICpfX3B5 eF92X3Byb3AgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfZGVmYXVsdCA9IDA7CisrICBQeU9i amVjdCAqX19weXhfdl92YWx1ZSA9IDA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNv bnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0g MDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgidHJ5X2dldF9wcm9wZXJ0eSAod3Jh cHBlcikiLCAwKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfb3B0aW9uICh3 cmFwcGVyKSIsIDApOworICAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25h bWVzW10gPSB7Jl9fcHl4X25fc19wcm9wLCZfX3B5eF9uX3NfZGVmYXVsdCwwfTsKKysgICAgc3Rh dGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfcHJvcCwmX19w eXhfbl9zX3ZhbHVlLDB9OworICAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07CistICAg IHZhbHVlc1sxXSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKKysgICAgdmFsdWVzWzFdID0gKChQ eU9iamVjdCAqKVB5X1RydWUpOworICAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKKyAg ICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CisgICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJn cyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CitAQCAtMTI1MDUsMTIgKzEyODc0LDEy IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzE5dHJ5X2dldF9wcm9wZXJ0eShQeU9iCisgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 CisgICAgICAgICBjYXNlICAxOgorICAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7CistICAgICAg ICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMs IF9fcHl4X25fc19kZWZhdWx0KTsKKysgICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhf UHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3ZhbHVlKTsKKyAgICAgICAg ICAgaWYgKHZhbHVlKSB7IHZhbHVlc1sxXSA9IHZhbHVlOyBrd19hcmdzLS07IH0KKyAgICAgICAg IH0KKyAgICAgICB9CisgICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAg ICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBf X3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAidHJ5X2dldF9wcm9wZXJ0eSIp IDwgMCkpIF9fUFlYX0VSUigwLCA2MDYsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYgKHVu bGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFy Z25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0X29wdGlvbiIpIDwgMCkpIF9fUFlYX0VS UigwLCA2NzQsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKyAgICAg ICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpIHsKK0BAIC0xMjUyMiwyNTgg KzEyODkxLDc0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzE5dHJ5X2dldF9wcm9wZXJ0eShQeU9iCisgICAgICAgfQorICAgICB9Cisg ICAgIF9fcHl4X3ZfcHJvcCA9IHZhbHVlc1swXTsKKy0gICAgX19weXhfdl9kZWZhdWx0ID0gdmFs dWVzWzFdOworKyAgICBfX3B5eF92X3ZhbHVlID0gdmFsdWVzWzFdOworICAgfQorICAgZ290byBf X3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKyAgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vy cm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJ0cnlfZ2V0X3Byb3BlcnR5Iiwg MCwgMSwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA2MDYs IF9fcHl4X0wzX2Vycm9yKQorKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInNldF9vcHRp b24iLCAwLCAxLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAs IDY3NCwgX19weXhfTDNfZXJyb3IpCisgICBfX3B5eF9MM19lcnJvcjo7CistICBfX1B5eF9BZGRU cmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnRyeV9nZXRfcHJvcGVydHkiLCBf X3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X0Fk ZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuc2V0X29wdGlvbiIsIF9fcHl4 X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gTlVMTDsKKyAgIF9fcHl4X0w0X2FyZ3VtZW50 X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMTh0cnlfZ2V0X3Byb3BlcnR5KCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfcHJvcCwg X19weXhfdl9kZWZhdWx0KTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MTh0cnlfZ2V0X3Byb3BlcnR5KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmplY3Qg Kl9fcHl4X3ZfZGVmYXVsdCkgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwor LSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8zID0g TlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4 X3RfNSA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKy0gIFB5T2JqZWN0 ICpfX3B5eF90XzcgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfODsKKy0gIGludCBfX3B5eF9saW5l bm8gPSAwOworLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9f cHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInRyeV9nZXRf cHJvcGVydHkiLCAwKTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 MDcKKy0gKiAKKy0gKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGVmYXVs dD1Ob25lKToKKy0gKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eShwcm9wKQorLSAqICAgICAg ICAgZXhjZXB0IE1QVkVycm9yOgorLSAqLworLSAgeworLSAgICBfX1B5eF9QeVRocmVhZFN0YXRl X2RlY2xhcmUKKy0gICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24KKy0gICAgX19QeXhfRXhj ZXB0aW9uU2F2ZSgmX19weXhfdF8xLCAmX19weXhfdF8yLCAmX19weXhfdF8zKTsKKy0gICAgX19Q eXhfWEdPVFJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7Cist ICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsKKy0gICAgLyp0cnk6Ki8geworLQorLSAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDgKKy0gKiAgICAgZGVmIHRyeV9n ZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGVmYXVsdD1Ob25lKToKKy0gKiAgICAgICAgIHRyeToK Ky0gKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHkocHJvcCkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOgorLSAqICAg ICAgICAgICAgIHJldHVybiBkZWZhdWx0CistICovCistICAgICAgX19QeXhfWERFQ1JFRihfX3B5 eF9yKTsKKy0gICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlP YmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgNjA4LCBfX3B5eF9MM19lcnJvcikKKy0gICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKy0gICAgICBfX3B5eF90XzYgPSBOVUxMOworLSAg ICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9f cHl4X3RfNSkpKSB7CistICAgICAgICBfX3B5eF90XzYgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5 eF90XzUpOworLSAgICAgICAgaWYgKGxpa2VseShfX3B5eF90XzYpKSB7CistICAgICAgICAgIFB5 T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzUpOworLSAg ICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF82KTsKKy0gICAgICAgICAgX19QeXhfSU5DUkVG KGZ1bmN0aW9uKTsKKy0gICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzUsIGZ1bmN0 aW9uKTsKKy0gICAgICAgIH0KKy0gICAgICB9CistICAgICAgX19weXhfdF80ID0gKF9fcHl4X3Rf NikgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF81LCBfX3B5eF90XzYsIF9fcHl4 X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwgX19weXhfdl9w cm9wKTsKKy0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cist ICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNjA4LCBfX3B5eF9M M19lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgICBfX3B5eF9yID0gX19weXhf dF80OworLSAgICAgIF9fcHl4X3RfNCA9IDA7CistICAgICAgZ290byBfX3B5eF9MN190cnlfcmV0 dXJuOworLQorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDcKKy0g KiAKKy0gKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGVmYXVsdD1Ob25l KToKKy0gKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eShwcm9wKQorLSAqICAgICAgICAgZXhj ZXB0IE1QVkVycm9yOgorLSAqLworLSAgICB9CistICAgIF9fcHl4X0wzX2Vycm9yOjsKKy0gICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF82KTsgX19weXhfdF82ID0gMDsKKy0KKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYwOQorLSAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgIHJldHVybiBzZWxm LmdldF9wcm9wZXJ0eShwcm9wKQorLSAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKy0g KiAKKy0gKi8KKy0gICAgX19QeXhfRXJyRmV0Y2goJl9fcHl4X3RfNCwgJl9fcHl4X3RfNSwgJl9f cHl4X3RfNik7CistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5 eF9uX3NfTVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA2 MDksIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7 CistICAgIF9fcHl4X3RfOCA9IF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyhfX3B5 eF90XzQsIF9fcHl4X3RfNyk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90 XzcgPSAwOworLSAgICBfX1B5eF9FcnJSZXN0b3JlKF9fcHl4X3RfNCwgX19weXhfdF81LCBfX3B5 eF90XzYpOworLSAgICBfX3B5eF90XzQgPSAwOyBfX3B5eF90XzUgPSAwOyBfX3B5eF90XzYgPSAw OworLSAgICBpZiAoX19weXhfdF84KSB7CistICAgICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuQ29udGV4dC50cnlfZ2V0X3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICAgICAgaWYgKF9fUHl4X0dldEV4Y2Vw dGlvbigmX19weXhfdF82LCAmX19weXhfdF81LCAmX19weXhfdF80KSA8IDApIF9fUFlYX0VSUigw LCA2MDksIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKy0gICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF80KTsKKy0KKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjEwCistICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5KHByb3ApCist ICogICAgICAgICBleGNlcHQgTVBWRXJyb3I6CistICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1 bHQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICBkZWYgZ2V0X3By b3BlcnR5KHNlbGYsIHByb3ApOgorLSAqLworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfZGVmYXVsdCk7CistICAgICAgX19weXhfciA9 IF9fcHl4X3ZfZGVmYXVsdDsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhf dF80ID0gMDsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsK Ky0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gICAgICBn b3RvIF9fcHl4X0w2X2V4Y2VwdF9yZXR1cm47CistICAgIH0KKy0gICAgZ290byBfX3B5eF9MNV9l eGNlcHRfZXJyb3I7CistICAgIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcjo7CistCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDcKKy0gKiAKKy0gKiAgICAgZGVmIHRyeV9n ZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGVmYXVsdD1Ob25lKToKKy0gKiAgICAgICAgIHRyeTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHJldHVybiBzZWxm LmdldF9wcm9wZXJ0eShwcm9wKQorLSAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOgorLSAqLwor LSAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9YR0lWRVJFRihfX3B5 eF90XzIpOworLSAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9FeGNl cHRpb25SZXNldChfX3B5eF90XzEsIF9fcHl4X3RfMiwgX19weXhfdF8zKTsKKy0gICAgZ290byBf X3B5eF9MMV9lcnJvcjsKKy0gICAgX19weXhfTDdfdHJ5X3JldHVybjo7CistICAgIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMik7CistICAg IF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9f cHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMpOworLSAgICBnb3RvIF9fcHl4X0wwOworLSAg ICBfX3B5eF9MNl9leGNlcHRfcmV0dXJuOjsKKy0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8x KTsKKy0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfWEdJVkVSRUYo X19weXhfdF8zKTsKKy0gICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xLCBfX3B5eF90 XzIsIF9fcHl4X3RfMyk7CistICAgIGdvdG8gX19weXhfTDA7CistICB9CistCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA2CistICogICAgICAgICAgICAgcmV0dXJuIGRl ZmF1bHQKKy0gKiAKKy0gKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGVm YXVsdD1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgdHJ5 OgorLSAqICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eShwcm9wKQorLSAqLwor LQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7 CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnRyeV9n ZXRfcHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1l KTsKKy0gIF9fcHl4X3IgPSBOVUxMOworLSAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYo X19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBf X3B5eF9yOworLX0KKy0KKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjEyCist ICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKy0gKiAKKy0gKiAgICAgZGVmIGdldF9wcm9w ZXJ0eShzZWxmLCBwcm9wKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgIiIiV3JhcHM6IG1wdl9nZXRfcHJvcGVydHkiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxm Ll9jdHgKKy0gKi8KKy0KKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIxZ2V0X3Byb3BlcnR5KFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3ApOyAvKnByb3RvKi8K Ky1zdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIw Z2V0X3Byb3BlcnR5W10gPSAiV3JhcHM6IG1wdl9nZXRfcHJvcGVydHkiOworLXN0YXRpYyBQeU9i amVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIxZ2V0X3Byb3Bl cnR5KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3ApIHsKKy0g IFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0X3Byb3BlcnR5ICh3cmFwcGVyKSIsIDAp OworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8y MGdldF9wcm9wZXJ0eSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9wcm9wKSk7CisrICBf X3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29w dGlvbigoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilf X3B5eF92X3NlbGYpLCBfX3B5eF92X3Byb3AsIF9fcHl4X3ZfdmFsdWUpOworIAorICAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAg IHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMGdldF9wcm9wZXJ0eShzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X3Byb3ApIHsKKy0gIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF92X3Jlc3VsdDsKKy0gIGNo YXIgY29uc3QgKl9fcHl4X3ZfcHJvcF9jOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CisrICBlbnVtIG1wdl9mb3Jt YXQgX19weXhfdl9mb3JtYXQ7CisrICBzdHJ1Y3QgbXB2X25vZGUgX19weXhfdl92OworICAgaW50 IF9fcHl4X3ZfZXJyOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfdiA9IE5VTEw7CisrICBjaGFyIGNv bnN0ICpfX3B5eF92X3Byb3BfYzsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsK KyAgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfMyA9 IE5VTEw7CistICBjaGFyIGNvbnN0ICpfX3B5eF90XzQ7CistICBpbnQgX19weXhfdF81OworLSAg UHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7CisrICBlbnVtIG1wdl9mb3JtYXQgX19weXhfdF80 OworKyAgY2hhciBjb25zdCAqX19weXhfdF81OworKyAgaW50IF9fcHl4X3RfNjsKKyAgIGludCBf X3B5eF90Xzc7CistICBpbnQgX19weXhfdF84OworLSAgY2hhciBjb25zdCAqX19weXhfdF85Owor KyAgY2hhciBjb25zdCAqX19weXhfdF84OworKyAgUHlPYmplY3QgKl9fcHl4X3RfOSA9IE5VTEw7 CisgICBQeU9iamVjdCAqX19weXhfdF8xMCA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfdF8x MSA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfdF8xMiA9IE5VTEw7CisgICBQeU9iamVjdCAq X19weXhfdF8xMyA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfdF8xNCA9IE5VTEw7CistICBQ eU9iamVjdCAqX19weXhfdF8xNSA9IE5VTEw7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAg IGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5v ID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJnZXRfcHJvcGVydHkiLCAwKTsK KysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfb3B0aW9uIiwgMCk7CisgICBfX1B5 eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo2MTQKKy0gKiAgICAgZGVmIGdldF9wcm9wZXJ0eShzZWxmLCBwcm9wKToKKy0gKiAg ICAgICAgICIiIldyYXBzOiBtcHZfZ2V0X3Byb3BlcnR5IiIiCisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Njc2CisrICogICAgIGRlZiBzZXRfb3B0aW9uKHNlbGYsIHByb3As IHZhbHVlPVRydWUpOgorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCisg ICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgIGNkZWYgbXB2X25vZGUgcmVzdWx0CisgICogICAgICAgICBwcm9wID0gX3N0 cmVuYyhwcm9wKQorKyAqICAgICAgICAgY2RlZiBtcHZfZm9ybWF0IGZvcm1hdCA9IHNlbGYuX2Zv cm1hdF9mb3IodmFsdWUpCisgICovCisgICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VSVElP TlMKKyAgIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworICAgICBpZiAodW5saWtl bHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7CisgICAgICAgUHlFcnJfU2V0Tm9uZShQ eUV4Y19Bc3NlcnRpb25FcnJvcik7CistICAgICAgX19QWVhfRVJSKDAsIDYxNCwgX19weXhfTDFf ZXJyb3IpCisrICAgICAgX19QWVhfRVJSKDAsIDY3NiwgX19weXhfTDFfZXJyb3IpCisgICAgIH0K KyAgIH0KKyAgICNlbmRpZgorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjYxNgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3NworKyAqICAgICAg ICAgIiIiV3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCisgICogICAgICAgICBhc3NlcnQgc2VsZi5f Y3R4CistICogICAgICAgICBjZGVmIG1wdl9ub2RlIHJlc3VsdAorICAqICAgICAgICAgcHJvcCA9 IF9zdHJlbmMocHJvcCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg Y2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wCistICogICAgICAgICBjZGVmIGludCBlcnIK KysgKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZh bHVlKQorKyAqICAgICAgICAgY2RlZiBtcHZfbm9kZSB2ID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFs dWUodmFsdWUsIGZvcm1hdCkKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgNjE2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgNjc3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworICAgX19weXhfdF8zID0gTlVMTDsKKyAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhP RFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKK0BAIC0xMjc4Nywy NzUgKzEyOTcyLDIwMCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8yMGdldF9wcm9wZXJ0eShzdHJ1Y3QgXworICAgfQorICAgX19weXhf dF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBf X3B5eF90XzMsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfMiwgX19weXhfdl9wcm9wKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYxNiwg X19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA2NzcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgIF9fUHl4X0RFQ1JFRl9T RVQoX19weXhfdl9wcm9wLCBfX3B5eF90XzEpOworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MTcKKy0gKiAgICAgICAgIGNkZWYgbXB2 X25vZGUgcmVzdWx0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njc4Cisr ICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBwcm9wID0gX3N0cmVuYyhw cm9wKQorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgaW50IGVycgorLSAqICAgICAg ICAgd2l0aCBub2dpbDoKKy0gKi8KKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0FzU3Ry aW5nKF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNCkgJiYgUHlFcnJfT2Nj dXJyZWQoKSkpIF9fUFlYX0VSUigwLCA2MTcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdl9w cm9wX2MgPSBfX3B5eF90XzQ7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjE5CistICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AKKysgKiAg ICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZhbHVlKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjZGVmIG1wdl9ub2RlIHYg PSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQorICAqICAgICAgICAgY2Rl ZiBpbnQgZXJyCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9wZXJ0eSgKKy0gKiAgICAg ICAgICAgICAgICAgc2VsZi5fY3R4LAorICAqLworLSAgeworLSAgICAgICNpZmRlZiBXSVRIX1RI UkVBRAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAgICAgIFB5X1VOQkxPQ0tfVEhS RUFEUworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKy0gICAgICAjZW5kaWYKKy0g ICAgICAvKnRyeToqLyB7CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0X2Zvcik7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY3OCwgX19weXhfTDFfZXJyb3IpCisr ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fcHl4X3RfMyA9IE5VTEw7CisrICBpZiAo Q1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworKyAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAg ICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQ eU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF8zKTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgIH0KKysgIH0KKysgIF9fcHl4X3Rf MSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19w eXhfdF8zLCBfX3B5eF92X3ZhbHVlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhf dF8yLCBfX3B5eF92X3ZhbHVlKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3OCwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhfdF80ID0gKChlbnVtIG1w dl9mb3JtYXQpX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2Zvcm1hdChfX3B5eF90XzEpKTsgaWYg KHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNjc4LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19w eXhfdl9mb3JtYXQgPSBfX3B5eF90XzQ7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjIwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 Njc5CisrICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKQorKyAqICAgICAgICAgY2RlZiBt cHZfZm9ybWF0IGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCisrICogICAgICAgICBj ZGVmIG1wdl9ub2RlIHYgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBjZGVmIGludCBlcnIKKy0g KiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9w ZXJ0eSggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBz ZWxmLl9jdHgsCistICogICAgICAgICAgICAgICAgIHByb3BfYywKKysgKiAgICAgICAgIGNkZWYg Y29uc3QgY2hhciogcHJvcF9jCisgICovCistICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9nZXRf cHJvcGVydHkoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X3Byb3BfYywgTVBWX0ZPUk1BVF9O T0RFLCAoJl9fcHl4X3ZfcmVzdWx0KSk7CistICAgICAgfQorKyAgX19weXhfdF8xID0gX19QeXhf UHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KF9fcHl4X3ZfZm9ybWF0KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjc5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19weXhfdl92ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0 cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhf dnRhYiktPl9wcmVwX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3ZfdmFsdWUsIF9f cHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAK Ky0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjE5CistICogICAgICAg ICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2ODIKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorLSAqICAgICAgICAg d2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg IGVyciA9IG1wdl9nZXRfcHJvcGVydHkoCistICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwK Ky0gKi8KKy0gICAgICAvKmZpbmFsbHk6Ki8geworLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sK Ky0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxf Rm9yZ2V0KCk7CistICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgI2VuZGlm CistICAgICAgICAgIGdvdG8gX19weXhfTDU7CistICAgICAgICB9CistICAgICAgICBfX3B5eF9M NTo7CistICAgICAgfQorLSAgfQorLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjYyNgorLSAqICAgICAgICAgICAgICAgICAmcmVzdWx0LAorLSAqICAgICAgICAgICAgICkK Ky0gKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCistICogICAgICAgICB0cnk6CisrICog ICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYworKyAqICAgICAgICAgdHJ5OiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAorKyAq ICAgICAgICAgICAgIHdpdGggbm9naWw6CisgICovCistICBfX3B5eF90XzUgPSAoKF9fcHl4X3Zf ZXJyIDwgMCkgIT0gMCk7CistICBpZiAodW5saWtlbHkoX19weXhfdF81KSkgeworKyAgLyp0cnk6 Ki8geworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjI3CistICog ICAgICAgICAgICAgKQorLSAqICAgICAgICAgaWYgZXJyIDwgMDoKKy0gKiAgICAgICAgICAgICBy YWlzZSBNUFZFcnJvcihlcnIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY4MworKyAqICAgICAgICAgY2RlZiBjb25z dCBjaGFyKiBwcm9wX2MKKyAgKiAgICAgICAgIHRyeToKKy0gKiAgICAgICAgICAgICB2ID0gX2Nv bnZlcnRfbm9kZV92YWx1ZShyZXN1bHQpCisrICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcCAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgd2l0aCBub2dpbDoK KysgKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3NldF9vcHRpb24oCisgICovCistICAgIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2MjcsIF9fcHl4X0wxX2Vycm9y KQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF8zID0gX19QeXhf UHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9f UFlYX0VSUigwLCA2MjcsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8zKTsKKy0gICAgX19weXhfdF82ID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICAgIF9f cHl4X3RfNiA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgICAgaWYgKGxpa2Vs eShfX3B5eF90XzYpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9H RVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzYp OworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JF Rl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4 X3RfMSA9IChfX3B5eF90XzYpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwg X19weXhfdF82LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90 XzIsIF9fcHl4X3RfMyk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICAg IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYyNywgX19weXhfTDFfZXJy b3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgX19QeXhfUmFpc2UoX19weXhfdF8xLCAwLCAw LCAwKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAg IF9fUFlYX0VSUigwLCA2MjcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzUgPSBfX1B5 eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X3Byb3ApOyBpZiAodW5saWtlbHkoKCFfX3B5eF90 XzUpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNjgzLCBfX3B5eF9MNF9lcnJv cikKKysgICAgX19weXhfdl9wcm9wX2MgPSBfX3B5eF90XzU7CisgCistICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MjYKKy0gKiAgICAgICAgICAgICAgICAgJnJlc3VsdCwK Ky0gKiAgICAgICAgICAgICApCistICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njg0CisgICogICAgICAgICB0cnk6 CisrICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAorKyAqICAgICAgICAgICAgIHdpdGggbm9n aWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgZXJy ID0gbXB2X3NldF9vcHRpb24oCisrICogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCisg ICovCistICB9CisrICAgIHsKKysgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAg UHlUaHJlYWRTdGF0ZSAqX3NhdmU7CisrICAgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKysgICAg ICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKysgICAgICAgICNlbmRpZgorKyAgICAgICAg Lyp0cnk6Ki8geworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYyOAor LSAqICAgICAgICAgaWYgZXJyIDwgMDoKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihl cnIpCistICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgICAgICB2ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShyZXN1bHQpCistICogICAgICAgICBm aW5hbGx5OgorKyAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njg1 CisrICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAorKyAqICAgICAgICAgICAgIHdpdGggbm9n aWw6CisrICogICAgICAgICAgICAgICAgIGVyciA9IG1wdl9zZXRfb3B0aW9uKCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCisr ICogICAgICAgICAgICAgICAgICAgICBwcm9wX2MsCisgICovCistICAvKnRyeToqLyB7CisrICAg ICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X3NldF9vcHRpb24oX19weXhfdl9zZWxmLT5fY3R4LCBf X3B5eF92X3Byb3BfYywgTVBWX0ZPUk1BVF9OT0RFLCAoJl9fcHl4X3ZfdikpOworKyAgICAgICAg fQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjI5CistICogICAg ICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjY4NAorICAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgIHYg PSBfY29udmVydF9ub2RlX3ZhbHVlKHJlc3VsdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgZmluYWxseToKKy0gKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorKyAq ICAgICAgICAgICAgIHByb3BfYyA9IHByb3AKKysgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgIGVyciA9IG1w dl9zZXRfb3B0aW9uKAorKyAqICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorICAqLwor LSAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9u b2RlX3ZhbHVlKF9fcHl4X3ZfcmVzdWx0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgNjI5LCBfX3B5eF9MOF9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CistICAgIF9fcHl4X3ZfdiA9IF9fcHl4X3RfMTsKKy0gICAgX19weXhfdF8xID0gMDsKKysg ICAgICAgIC8qZmluYWxseToqLyB7CisrICAgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CisrICAg ICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9G b3JnZXQoKTsKKysgICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgICAgI2Vu ZGlmCisrICAgICAgICAgICAgZ290byBfX3B5eF9MODsKKysgICAgICAgICAgfQorKyAgICAgICAg ICBfX3B5eF9MODo7CisrICAgICAgICB9CisrICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzEKKy0gKiAgICAgICAgICAgICB2ID0gX2NvbnZlcnRf bm9kZV92YWx1ZShyZXN1bHQpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NjkyCisrICogICAgICAgICAgICAgICAgICkKKyAgKiAgICAgICAgIGZpbmFsbHk6CistICogICAg ICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZyZXN1bHQpCistICogICAgICAg ICByZXR1cm4gdgorKyAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKHYpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHJldHVybiBlcnIKKysgKiAK KyAgKi8KKyAgIC8qZmluYWxseToqLyB7CisgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAg eworLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAgICAgUHlUaHJlYWRTdGF0 ZSAqX3NhdmU7CistICAgICAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgICAgICBfX1B5 eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICAvKnRy eToqLyB7CistCistICAgICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjYzMgorLSAqICAgICAgICAgZmluYWxseToKKy0gKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgor LSAqICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZyZXN1bHQpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiB2CistICogCistICov CistICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50cygoJl9fcHl4X3ZfcmVzdWx0KSk7 CistICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYzMQorLSAqICAgICAgICAgICAgIHYgPSBfY29udmVydF9ub2RlX3ZhbHVlKHJlc3Vs dCkKKy0gKiAgICAgICAgIGZpbmFsbHk6CistICogICAgICAgICAgICAgd2l0aCBub2dpbDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBtcHZfZnJlZV9u b2RlX2NvbnRlbnRzKCZyZXN1bHQpCistICogICAgICAgICByZXR1cm4gdgorLSAqLworLSAgICAg ICAgICAvKmZpbmFsbHk6Ki8geworLSAgICAgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAg ICAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAgICAgICAgIF9fUHl4X0Zhc3RH SUxfRm9yZ2V0KCk7CistICAgICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAg ICAgICAjZW5kaWYKKy0gICAgICAgICAgICAgIGdvdG8gX19weXhfTDEyOworLSAgICAgICAgICAg IH0KKy0gICAgICAgICAgICBfX3B5eF9MMTI6OworLSAgICAgICAgICB9CistICAgICAgfQorLSAg ICAgIGdvdG8gX19weXhfTDk7CisrICAgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRh YnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19w eXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfdik7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY5MiwgX19weXhfTDFfZXJyb3Ip CisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICAgICAgZ290byBfX3B5eF9MNTsKKyAgICAgfQor LSAgICBfX3B5eF9MOF9lcnJvcjo7CisrICAgIF9fcHl4X0w0X2Vycm9yOjsKKyAgICAgLypleGNl cHRpb24gZXhpdDoqL3sKKyAgICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKKyAgICAg ICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorLSAgICAgIF9fcHl4X3RfMTAgPSAwOyBfX3B5 eF90XzExID0gMDsgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTMgPSAwOyBfX3B5eF90XzE0ID0g MDsgX19weXhfdF8xNSA9IDA7CisrICAgICAgX19weXhfdF85ID0gMDsgX19weXhfdF8xMCA9IDA7 IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90XzEyID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3Rf MTQgPSAwOworICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK KyAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgICAgICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gICAgICBpZiAoUFlfTUFKT1JfVkVS U0lPTiA+PSAzKSBfX1B5eF9FeGNlcHRpb25Td2FwKCZfX3B5eF90XzEzLCAmX19weXhfdF8xNCwg Jl9fcHl4X3RfMTUpOworLSAgICAgIGlmICgoUFlfTUFKT1JfVkVSU0lPTiA8IDMpIHx8IHVubGlr ZWx5KF9fUHl4X0dldEV4Y2VwdGlvbigmX19weXhfdF8xMCwgJl9fcHl4X3RfMTEsICZfX3B5eF90 XzEyKSA8IDApKSBfX1B5eF9FcnJGZXRjaCgmX19weXhfdF8xMCwgJl9fcHl4X3RfMTEsICZfX3B5 eF90XzEyKTsKKysgICAgICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAzKSBfX1B5eF9FeGNlcHRp b25Td2FwKCZfX3B5eF90XzEyLCAmX19weXhfdF8xMywgJl9fcHl4X3RfMTQpOworKyAgICAgIGlm ICgoUFlfTUFKT1JfVkVSU0lPTiA8IDMpIHx8IHVubGlrZWx5KF9fUHl4X0dldEV4Y2VwdGlvbigm X19weXhfdF85LCAmX19weXhfdF8xMCwgJl9fcHl4X3RfMTEpIDwgMCkpIF9fUHl4X0VyckZldGNo KCZfX3B5eF90XzksICZfX3B5eF90XzEwLCAmX19weXhfdF8xMSk7CisrICAgICAgX19QeXhfWEdP VFJFRihfX3B5eF90XzkpOworICAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMCk7CisgICAg ICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzExKTsKKyAgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4 X3RfMTIpOworICAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMyk7CisgICAgICAgX19QeXhf WEdPVFJFRihfX3B5eF90XzE0KTsKKy0gICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTUpOwor LSAgICAgIF9fcHl4X3RfNyA9IF9fcHl4X2xpbmVubzsgX19weXhfdF84ID0gX19weXhfY2xpbmVu bzsgX19weXhfdF85ID0gX19weXhfZmlsZW5hbWU7CisrICAgICAgX19weXhfdF82ID0gX19weXhf bGluZW5vOyBfX3B5eF90XzcgPSBfX3B5eF9jbGluZW5vOyBfX3B5eF90XzggPSBfX3B5eF9maWxl bmFtZTsKKyAgICAgICB7CistICAgICAgICB7CistICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhS RUFECistICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgICAgICAgUHlf VU5CTE9DS19USFJFQURTCistICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwor LSAgICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICAgIC8qdHJ5OiovIHsKKy0KKy0gICAgICAg ICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzIKKy0gKiAgICAgICAg IGZpbmFsbHk6CistICogICAgICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICAg ICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50cygmcmVzdWx0KSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICByZXR1cm4gdgorLSAqIAorLSAqLworLSAgICAgICAgICAgICAg bXB2X2ZyZWVfbm9kZV9jb250ZW50cygoJl9fcHl4X3ZfcmVzdWx0KSk7CistICAgICAgICAgICAg fQorLQorLSAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzEK Ky0gKiAgICAgICAgICAgICB2ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShyZXN1bHQpCistICogICAg ICAgICBmaW5hbGx5OgorLSAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50 cygmcmVzdWx0KQorLSAqICAgICAgICAgcmV0dXJuIHYKKy0gKi8KKy0gICAgICAgICAgICAvKmZp bmFsbHk6Ki8geworLSAgICAgICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAg ICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgICAgICAgIF9fUHl4X0Zhc3RHSUxf Rm9yZ2V0KCk7CistICAgICAgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAg ICAgICAgI2VuZGlmCistICAgICAgICAgICAgICAgIGdvdG8gX19weXhfTDE3OworLSAgICAgICAg ICAgICAgfQorLSAgICAgICAgICAgICAgX19weXhfTDE3OjsKKy0gICAgICAgICAgICB9CistICAg ICAgICB9CisrICAgICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+ X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjkyLCBfX3B5eF9MMTBfZXJyb3IpCisrICAgICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworICAgICAgIH0KKyAgICAgICBpZiAoUFlfTUFKT1JfVkVSU0lP TiA+PSAzKSB7CisrICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEyKTsKKyAgICAgICAg IF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTMpOworICAgICAgICAgX19QeXhfWEdJVkVSRUYoX19w eXhfdF8xNCk7CistICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzE1KTsKKy0gICAgICAg IF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9fcHl4X3RfMTMsIF9fcHl4X3RfMTQsIF9fcHl4X3RfMTUp OworKyAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMiwgX19weXhfdF8xMywg X19weXhfdF8xNCk7CisgICAgICAgfQorKyAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfOSk7 CisgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMCk7CisgICAgICAgX19QeXhfWEdJVkVS RUYoX19weXhfdF8xMSk7CistICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMik7CistICAg ICAgX19QeXhfRXJyUmVzdG9yZShfX3B5eF90XzEwLCBfX3B5eF90XzExLCBfX3B5eF90XzEyKTsK Ky0gICAgICBfX3B5eF90XzEwID0gMDsgX19weXhfdF8xMSA9IDA7IF9fcHl4X3RfMTIgPSAwOyBf X3B5eF90XzEzID0gMDsgX19weXhfdF8xNCA9IDA7IF9fcHl4X3RfMTUgPSAwOworLSAgICAgIF9f cHl4X2xpbmVubyA9IF9fcHl4X3RfNzsgX19weXhfY2xpbmVubyA9IF9fcHl4X3RfODsgX19weXhf ZmlsZW5hbWUgPSBfX3B5eF90Xzk7CisrICAgICAgX19QeXhfRXJyUmVzdG9yZShfX3B5eF90Xzks IF9fcHl4X3RfMTAsIF9fcHl4X3RfMTEpOworKyAgICAgIF9fcHl4X3RfOSA9IDA7IF9fcHl4X3Rf MTAgPSAwOyBfX3B5eF90XzExID0gMDsgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTMgPSAwOyBf X3B5eF90XzE0ID0gMDsKKysgICAgICBfX3B5eF9saW5lbm8gPSBfX3B5eF90XzY7IF9fcHl4X2Ns aW5lbm8gPSBfX3B5eF90Xzc7IF9fcHl4X2ZpbGVuYW1lID0gX19weXhfdF84OworKyAgICAgIGdv dG8gX19weXhfTDFfZXJyb3I7CisrICAgICAgX19weXhfTDEwX2Vycm9yOjsKKysgICAgICBpZiAo UFlfTUFKT1JfVkVSU0lPTiA+PSAzKSB7CisrICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90 XzEyKTsKKysgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTMpOworKyAgICAgICAgX19Q eXhfWEdJVkVSRUYoX19weXhfdF8xNCk7CisrICAgICAgICBfX1B5eF9FeGNlcHRpb25SZXNldChf X3B5eF90XzEyLCBfX3B5eF90XzEzLCBfX3B5eF90XzE0KTsKKysgICAgICB9CisrICAgICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90XzkgPSAwOworKyAgICAgIF9fUHl4X1hERUNS RUYoX19weXhfdF8xMCk7IF9fcHl4X3RfMTAgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19w eXhfdF8xMSk7IF9fcHl4X3RfMTEgPSAwOworKyAgICAgIF9fcHl4X3RfMTIgPSAwOyBfX3B5eF90 XzEzID0gMDsgX19weXhfdF8xNCA9IDA7CisgICAgICAgZ290byBfX3B5eF9MMV9lcnJvcjsKKyAg ICAgfQorLSAgICBfX3B5eF9MOTo7CisrICAgIF9fcHl4X0w1OjsKKyAgIH0KKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzMKKy0gKiAgICAgICAgICAgICB3aXRoIG5v Z2lsOgorLSAqICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZyZXN1bHQp CistICogICAgICAgICByZXR1cm4gdiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjkzCisrICogICAgICAgICBmaW5hbGx5 OgorKyAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKHYpCisrICogICAgICAg ICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKyAgKiAgICAg QF9lcnJvcnMKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX1B5eF9JTkNS RUYoX19weXhfdl92KTsKKy0gIF9fcHl4X3IgPSBfX3B5eF92X3Y7CisrICBfX3B5eF90XzEgPSBf X1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDY5MywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKysgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworICAg Z290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 MTIKKy0gKiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjY3NAorICAqIAorLSAqICAgICBkZWYgZ2V0X3Byb3BlcnR5KHNlbGYs IHByb3ApOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFw czogbXB2X2dldF9wcm9wZXJ0eSIiIgorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgc2V0 X29wdGlvbihzZWxmLCBwcm9wLCB2YWx1ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCisgICogICAgICAg ICBhc3NlcnQgc2VsZi5fY3R4CisgICovCisgCitAQCAtMTMwNjQsMTA0NyArMTMxNzQsNzk4IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzIwZ2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Cisg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmdldF9wcm9wZXJ0eSIsIF9fcHl4X2NsaW5lbm8sIF9f cHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuQ29udGV4dC5zZXRfb3B0aW9uIiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5eF9yID0gTlVMTDsKKyAgIF9fcHl4X0ww OjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl92KTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhf dl9wcm9wKTsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjYzNgorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo2OTYKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKy0gKiAgICAgZGVmIHNldF9wcm9wZXJ0 eShzZWxmLCBwcm9wLCB2YWx1ZT1UcnVlLCBhc3luY2hyb25vdXM9RmFsc2UsIGRhdGE9Tm9uZSk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZf c2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIiCisrICogICAgIGRlZiBp bml0aWFsaXplKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICAiIiJXcmFwczogbXB2X2luaXRpYWxpemUiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9j dHgKKyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIzc2V0X3Byb3BlcnR5KFB5T2Jq ZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhf a3dkcyk7IC8qcHJvdG8qLworLXN0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMjJzZXRfcHJvcGVydHlbXSA9ICJXcmFwczogbXB2X3NldF9wcm9wZXJ0 eSBhbmQgbXB2X3NldF9wcm9wZXJ0eV9hc3luYyI7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjNzZXRfcHJvcGVydHkoUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2Rz KSB7CistICBQeU9iamVjdCAqX19weXhfdl9wcm9wID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92 X3ZhbHVlID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2FzeW5jaHJvbm91cyA9IDA7CistICBQ eU9iamVjdCAqX19weXhfdl9kYXRhID0gMDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAg Y29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8g PSAwOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzIzaW5pdGlhbGl6ZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VE IFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KKytzdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIyaW5pdGlhbGl6ZVtdID0gIldyYXBzOiBtcHZf aW5pdGlhbGl6ZSI7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMjNpbml0aWFsaXplKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhP Tl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwor ICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJzZXRfcHJvcGVydHkgKHdyYXBwZXIpIiwgMCk7CistICB7CistICAgIHN0YXRpYyBQeU9i amVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3Byb3AsJl9fcHl4X25fc192 YWx1ZSwmX19weXhfbl9zX2FzeW5jaHJvbm91cywmX19weXhfbl9zX2RhdGEsMH07CistICAgIFB5 T2JqZWN0KiB2YWx1ZXNbNF0gPSB7MCwwLDAsMH07CistICAgIHZhbHVlc1sxXSA9ICgoUHlPYmpl Y3QgKilQeV9UcnVlKTsKKy0gICAgdmFsdWVzWzJdID0gKChQeU9iamVjdCAqKVB5X0ZhbHNlKTsK Ky0gICAgdmFsdWVzWzNdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOworLSAgICBpZiAodW5saWtl bHkoX19weXhfa3dkcykpIHsKKy0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAgY29u c3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7Cist ICAgICAgc3dpdGNoIChwb3NfYXJncykgeworLSAgICAgICAgY2FzZSAgNDogdmFsdWVzWzNdID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAzKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKKy0gICAgICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMik7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNl ICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAg ICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlU dXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VH SDsKKy0gICAgICAgIGNhc2UgIDA6IGJyZWFrOworLSAgICAgICAgZGVmYXVsdDogZ290byBfX3B5 eF9MNV9hcmd0dXBsZV9lcnJvcjsKKy0gICAgICB9CistICAgICAga3dfYXJncyA9IFB5RGljdF9T aXplKF9fcHl4X2t3ZHMpOworLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKy0gICAgICAgIGNh c2UgIDA6CistICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0 SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHJvcCkpICE9IDApKSBrd19hcmdzLS07Cist ICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgICBDWVRI T05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAxOgorLSAgICAgICAgaWYgKGt3X2FyZ3Mg PiAwKSB7CistICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVt U3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc192YWx1ZSk7CistICAgICAgICAgIGlmICh2YWx1ZSkg eyB2YWx1ZXNbMV0gPSB2YWx1ZTsga3dfYXJncy0tOyB9CistICAgICAgICB9CistICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAyOgorLSAgICAgICAgaWYgKGt3X2Fy Z3MgPiAwKSB7CistICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJ dGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19hc3luY2hyb25vdXMpOworLSAgICAgICAgICBp ZiAodmFsdWUpIHsgdmFsdWVzWzJdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorLSAgICAgICAgfQor LSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMzoKKy0gICAgICAg IGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9Q eURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZGF0YSk7CistICAgICAgICAg IGlmICh2YWx1ZSkgeyB2YWx1ZXNbM10gPSB2YWx1ZTsga3dfYXJncy0tOyB9CistICAgICAgICB9 CistICAgICAgfQorLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAgICAg IGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19w eXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgInNldF9wcm9wZXJ0eSIpIDwgMCkp IF9fUFlYX0VSUigwLCA2MzYsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAgIH0KKy0gICAgfSBlbHNl IHsKKy0gICAgICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpIHsKKy0gICAg ICAgIGNhc2UgIDQ6IHZhbHVlc1szXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMyk7 CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAzOiB2YWx1ZXNb Ml0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOworLSAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRF TShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAg IGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Cist ICAgICAgICBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVf ZXJyb3I7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4X3ZfcHJvcCA9IHZhbHVlc1swXTsK Ky0gICAgX19weXhfdl92YWx1ZSA9IHZhbHVlc1sxXTsKKy0gICAgX19weXhfdl9hc3luY2hyb25v dXMgPSB2YWx1ZXNbMl07CistICAgIF9fcHl4X3ZfZGF0YSA9IHZhbHVlc1szXTsKKy0gIH0KKy0g IGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CistICBfX3B5eF9MNV9hcmd0 dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgic2V0X3Byb3BlcnR5 IiwgMCwgMSwgNCwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA2 MzYsIF9fcHl4X0wzX2Vycm9yKQorLSAgX19weXhfTDNfZXJyb3I6OworLSAgX19QeXhfQWRkVHJh Y2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5zZXRfcHJvcGVydHkiLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIE5VTEw7CistICBfX3B5eF9MNF9hcmd1bWVudF91 bnBhY2tpbmdfZG9uZTo7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzIyc2V0X3Byb3BlcnR5KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfcHJvcCwgX19weXhf dl92YWx1ZSwgX19weXhfdl9hc3luY2hyb25vdXMsIF9fcHl4X3ZfZGF0YSk7CisrICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiaW5pdGlhbGl6ZSAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4 X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjJpbml0aWFsaXpl KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4 X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMnNldF9w cm9wZXJ0eShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X3Zh bHVlLCBQeU9iamVjdCAqX19weXhfdl9hc3luY2hyb25vdXMsIFB5T2JqZWN0ICpfX3B5eF92X2Rh dGEpIHsKKy0gIGVudW0gbXB2X2Zvcm1hdCBfX3B5eF92X2Zvcm1hdDsKKy0gIHN0cnVjdCBtcHZf bm9kZSBfX3B5eF92X3Y7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMjJpbml0aWFsaXplKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworICAgaW50IF9fcHl4X3ZfZXJy OworLSAgdWludDY0X3QgX19weXhfdl9kYXRhX2lkOworLSAgY2hhciBjb25zdCAqX19weXhfdl9w cm9wX2M7CistICBQeU9iamVjdCAqX19weXhfdl91c2VyZGF0YXMgPSBOVUxMOworICAgUHlPYmpl Y3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5 T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7 CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKy0gIGVudW0gbXB2X2Zvcm1hdCBfX3B5 eF90XzQ7CistICBjaGFyIGNvbnN0ICpfX3B5eF90XzU7CistICBpbnQgX19weXhfdF82OworLSAg aW50IF9fcHl4X3RfNzsKKy0gIFB5X2hhc2hfdCBfX3B5eF90Xzg7CistICBQeU9iamVjdCAqX19w eXhfdF85ID0gTlVMTDsKKy0gIGludCBfX3B5eF90XzEwOworLSAgUHlPYmplY3QgKl9fcHl4X3Rf MTEgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfMTI7CistICBjaGFyIGNvbnN0ICpfX3B5eF90XzEz OworLSAgUHlPYmplY3QgKl9fcHl4X3RfMTQgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3Rf MTUgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMTYgPSBOVUxMOworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMTcgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMTggPSBOVUxMOworLSAg UHlPYmplY3QgKl9fcHl4X3RfMTkgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisg ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X3Byb3BlcnR5IiwgMCk7 CistICBfX1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJpbml0aWFsaXplIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjM4CistICogICAgIGRlZiBzZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgdmFsdWU9 VHJ1ZSwgYXN5bmNocm9ub3VzPUZhbHNlLCBkYXRhPU5vbmUpOgorLSAqICAgICAgICAgIiIiV3Jh cHM6IG1wdl9zZXRfcHJvcGVydHkgYW5kIG1wdl9zZXRfcHJvcGVydHlfYXN5bmMiIiIKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2OTgKKysgKiAgICAgZGVmIGluaXRpYWxp emUoc2VsZik6CisrICogICAgICAgICAiIiJXcmFwczogbXB2X2luaXRpYWxpemUiIiIKKyAgKiAg ICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKy0gKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1h dCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZhbHVlKQorKyAqICAgICAgICAgY2RlZiBpbnQg ZXJyCisrICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworICAgI2lmbmRlZiBDWVRIT05fV0lU SE9VVF9BU1NFUlRJT05TCisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKyAg ICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworICAgICAgIFB5 RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCA2 MzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA2OTgsIF9fcHl4X0wxX2Vy cm9yKQorICAgICB9CisgICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2MzkKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X3Byb3BlcnR5 IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIiCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzAwCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAg ICBwcm9wID0gX3N0cmVuYyhwcm9wKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkK Ky0gKiAgICAgICAgIGNkZWYgbXB2X25vZGUgdiA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZh bHVlLCBmb3JtYXQpCisrICogICAgICAgICBjZGVmIGludCBlcnIKKysgKiAgICAgICAgIHdpdGgg bm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBlcnIg PSBtcHZfaW5pdGlhbGl6ZShzZWxmLl9jdHgpCisrICogICAgICAgICByZXR1cm4gZXJyCisgICov CistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVu Yyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDYzOSwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IE5VTEw7 CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNr KF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfMik7CistICAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkgeworLSAgICAgIFB5T2JqZWN0KiBm dW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzMpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAg ICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQor LSAgX19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19w eXhfdF8yLCBfX3B5eF90XzMsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25l QXJnKF9fcHl4X3RfMiwgX19weXhfdl9wcm9wKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8z KTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDYzOSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19QeXhfREVDUkVG X1NFVChfX3B5eF92X3Byb3AsIF9fcHl4X3RfMSk7CistICBfX3B5eF90XzEgPSAwOworKyAgewor KyAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwor KyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworKyAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIo KTsKKysgICAgICAjZW5kaWYKKysgICAgICAvKnRyeToqLyB7CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjQwCistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Cist ICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKQorLSAqICAgICAgICAgY2RlZiBtcHZfZm9y bWF0IGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgbXB2X25vZGUgdiA9IHNlbGYuX3ByZXBfbmF0aXZl X3ZhbHVlKHZhbHVlLCBmb3JtYXQpCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NzAxCisgICogICAgICAgICBjZGVmIGludCBlcnIKKysgKiAgICAgICAgIHdpdGgg bm9naWw6CisrICogICAgICAgICAgICAgZXJyID0gbXB2X2luaXRpYWxpemUoc2VsZi5fY3R4KSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gZXJyCisrICog CisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0X2Zvcik7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY0MCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VO UEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAg ICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICBpZiAobGlr ZWx5KF9fcHl4X3RfMykpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9H RVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsK Ky0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQo X19weXhfdF8yLCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfMSA9IChfX3B5 eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBf X3B5eF92X3ZhbHVlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5 eF92X3ZhbHVlKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsK Ky0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY0MCwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19weXhfdF80ID0gKChlbnVtIG1wdl9mb3JtYXQp X19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2Zvcm1hdChfX3B5eF90XzEpKTsgaWYgKHVubGlrZWx5 KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNjQwLCBfX3B5eF9MMV9lcnJvcikKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgX19weXhfdl9mb3Jt YXQgPSBfX3B5eF90XzQ7CisrICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9pbml0aWFsaXplKF9f cHl4X3Zfc2VsZi0+X2N0eCk7CisrICAgICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjY0MQorLSAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKy0gKiAg ICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZhbHVlKQor LSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSB2ID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUodmFs dWUsIGZvcm1hdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDAKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9j dHgKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBk YXRhX2lkCistICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9m b3JtYXQoX19weXhfdl9mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA2NDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Cist ICBfX3B5eF92X3YgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbmF0aXZlX3Zh bHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92YWx1ZSwgX19weXhfdF8xKTsKKy0gIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLQorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjY0NQorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBkYXRhX2lkCist ICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYworLSAqICAgICAgICAgdHJ5OiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAor LSAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CisrICogICAgICAgICB3aXRoIG5v Z2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgZXJyID0g bXB2X2luaXRpYWxpemUoc2VsZi5fY3R4KQorKyAqICAgICAgICAgcmV0dXJuIGVycgorICAqLwor LSAgLyp0cnk6Ki8geworKyAgICAgIC8qZmluYWxseToqLyB7CisrICAgICAgICAvKm5vcm1hbCBl eGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAgICAgICAgX19QeXhf RmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAg ICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5eF9MNTsKKysgICAgICAgIH0KKysgICAgICAg IF9fcHl4X0w1OjsKKysgICAgICB9CisrICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2NDYKKy0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9jCist ICogICAgICAgICB0cnk6CistICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czoK Ky0gKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3MDIKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAg ICAgZXJyID0gbXB2X2luaXRpYWxpemUoc2VsZi5fY3R4KQorKyAqICAgICAgICAgcmV0dXJuIGVy ciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiB3YWl0X2V2 ZW50KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICovCistICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5 T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNSkg JiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA2NDYsIF9fcHl4X0w0X2Vycm9yKQor LSAgICBfX3B5eF92X3Byb3BfYyA9IF9fcHl4X3RfNTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf cik7CisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcwMiwgX19weXhfTDFfZXJyb3Ip CisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fcHl4X3IgPSBfX3B5eF90XzE7Cisr ICBfX3B5eF90XzEgPSAwOworKyAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjY0NworLSAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAg ICAgIHByb3BfYyA9IHByb3AKKy0gKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgIHdpdGggbm9n aWw6CistICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfc2V0X3Byb3BlcnR5KAorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5NgorKyAqIAorKyAqICAgICBAX2Vy cm9ycworKyAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9pbml0aWFsaXplIiIiCisrICogICAg ICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICovCistICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2Jq ZWN0X0lzVHJ1ZShfX3B5eF92X2FzeW5jaHJvbm91cyk7IGlmICh1bmxpa2VseShfX3B5eF90XzYg PCAwKSkgX19QWVhfRVJSKDAsIDY0NywgX19weXhfTDRfZXJyb3IpCistICAgIF9fcHl4X3RfNyA9 ICgoIV9fcHl4X3RfNikgIT0gMCk7CistICAgIGlmIChfX3B5eF90XzcpIHsKKyAKKy0gICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjQ4CistICogICAgICAgICAgICAgcHJv cF9jID0gcHJvcAorLSAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CistICogICAg ICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1wdl9zZXRfcHJvcGVydHkoCistICogICAgICAg ICAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorLSAqLworLSAgICAgIHsKKy0gICAgICAgICAg I2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAg ICAgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgX19QeXhfRmFzdEdJTF9SZW1l bWJlcigpOworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgLyp0cnk6Ki8geworKyAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5Db250ZXh0LmluaXRpYWxpemUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworKyAgX19weXhfTDA6OworKyAgX19QeXhf WEdJVkVSRUYoX19weXhfcik7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysg IHJldHVybiBfX3B5eF9yOworK30KKyAKKy0gICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjQ5CistICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czoK Ky0gKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICAgICAgICAg IGVyciA9IG1wdl9zZXRfcHJvcGVydHkoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCistICogICAgICAgICAgICAgICAg ICAgICAgICAgcHJvcF9jLAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDQK KysgKiAgICAgICAgIHJldHVybiBlcnIKKysgKiAKKysgKiAgICAgZGVmIHdhaXRfZXZlbnQoc2Vs ZiwgdGltZW91dD1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgIiIiV3JhcHM6IG1wdl93YWl0X2V2ZW50IiIiCisrICogICAgICAgICBhc3NlcnQgc2VsZi5f Y3R4CisgICovCistICAgICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfc2V0X3Byb3BlcnR5KF9f cHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9wcm9wX2MsIE1QVl9GT1JNQVRfTk9ERSwgKCZfX3B5 eF92X3YpKTsKKy0gICAgICAgICAgfQorIAorLSAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjQ4CistICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAorLSAqICAg ICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CistICogICAgICAgICAgICAgICAgIHdpdGgg bm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAg ICAgIGVyciA9IG1wdl9zZXRfcHJvcGVydHkoCistICogICAgICAgICAgICAgICAgICAgICAgICAg c2VsZi5fY3R4LAorLSAqLworLSAgICAgICAgICAvKmZpbmFsbHk6Ki8geworLSAgICAgICAgICAg IC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0g ICAgICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CistICAgICAgICAgICAgICBQeV9C TE9DS19USFJFQURTCistICAgICAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgICAgIGdvdG8g X19weXhfTDk7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIF9fcHl4X0w5OjsKKy0gICAg ICAgICAgfQorKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjV3YWl0X2V2ZW50KFB5T2JqZWN0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7 IC8qcHJvdG8qLworK3N0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMjR3YWl0X2V2ZW50W10gPSAiV3JhcHM6IG1wdl93YWl0X2V2ZW50IjsKKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNXdh aXRfZXZlbnQoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5 T2JqZWN0ICpfX3B5eF9rd2RzKSB7CisrICBQeU9iamVjdCAqX19weXhfdl90aW1lb3V0ID0gMDsK KysgIGludCBfX3B5eF9saW5lbm8gPSAwOworKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUg PSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3Ig PSAwOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJ3YWl0X2V2ZW50ICh3cmFwcGVyKSIsIDApOworKyAgeworKyAgICBzdGF0aWMg UHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc190aW1lb3V0LDB9Owor KyAgICBQeU9iamVjdCogdmFsdWVzWzFdID0gezB9OworKyAgICB2YWx1ZXNbMF0gPSAoKFB5T2Jq ZWN0ICopUHlfTm9uZSk7CisrICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworKyAgICAg IFB5X3NzaXplX3Qga3dfYXJnczsKKysgICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdzID0g UHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKysgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7 CisrICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2Fy Z3MsIDApOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMDog YnJlYWs7CisrICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwor KyAgICAgIH0KKysgICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7CisrICAg ICAgc3dpdGNoIChwb3NfYXJncykgeworKyAgICAgICAgY2FzZSAgMDoKKysgICAgICAgIGlmIChr d19hcmdzID4gMCkgeworKyAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3Rf R2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfdGltZW91dCk7CisrICAgICAgICAgIGlm ICh2YWx1ZSkgeyB2YWx1ZXNbMF0gPSB2YWx1ZTsga3dfYXJncy0tOyB9CisrICAgICAgICB9Cisr ICAgICAgfQorKyAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKysgICAgICAgIGlm ICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhf cHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIndhaXRfZXZlbnQiKSA8IDApKSBfX1BZ WF9FUlIoMCwgNzA0LCBfX3B5eF9MM19lcnJvcikKKysgICAgICB9CisrICAgIH0gZWxzZSB7Cisr ICAgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKSB7CisrICAgICAgICBj YXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworKyAg ICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMDogYnJlYWs7CisrICAg ICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworICAgICAgIH0KKysg ICAgfQorKyAgICBfX3B5eF92X3RpbWVvdXQgPSB2YWx1ZXNbMF07CisrICB9CisrICBnb3RvIF9f cHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworKyAgX19weXhfTDVfYXJndHVwbGVfZXJy b3I6OworKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIndhaXRfZXZlbnQiLCAwLCAwLCAx LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDcwNCwgX19weXhf TDNfZXJyb3IpCisrICBfX3B5eF9MM19lcnJvcjo7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LndhaXRfZXZlbnQiLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOworKyAgcmV0dXJuIE5VTEw7CisrICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9u ZTo7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzI0d2FpdF9ldmVudCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X3RpbWVvdXQpOworIAorLSAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTUKKy0gKiAgICAgICAgICAgICAgICAgICAg ICAgICAmdgorLSAqICAgICAgICAgICAgICAgICAgICAgKQorLSAqICAgICAgICAgICAgICAgICBy ZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBk YXRhX2lkID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKy0gKiAgICAgICAgICAgICB1c2VyZGF0YXMg PSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQorLSAqLworLSAgICAgIF9f UHl4X1hERUNSRUYoX19weXhfcik7CistICAgICAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJv bV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA2NTUsIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CistICAgICAgX19weXhfdF8xID0gMDsKKy0gICAg ICBnb3RvIF9fcHl4X0wzX3JldHVybjsKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9Cisg CistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0NworLSAqICAgICAg ICAgdHJ5OgorLSAqICAgICAgICAgICAgIHByb3BfYyA9IHByb3AKKy0gKiAgICAgICAgICAgICBp ZiBub3QgYXN5bmNocm9ub3VzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBt cHZfc2V0X3Byb3BlcnR5KAorK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzI0d2FpdF9ldmVudChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Rp bWVvdXQpIHsKKysgIGRvdWJsZSBfX3B5eF92X3RpbWVvdXRfZDsKKysgIHN0cnVjdCBtcHZfZXZl bnQgKl9fcHl4X3ZfZXZlbnQ7CisrICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisrICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgZG91YmxlIF9fcHl4X3RfMTsKKysgIGludCBfX3B5 eF90XzI7CisrICBkb3VibGUgX19weXhfdF8zOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5V TEw7CisrICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8g PSAwOworKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndhaXRfZXZlbnQi LCAwKTsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDYKKysgKiAg ICAgZGVmIHdhaXRfZXZlbnQoc2VsZiwgdGltZW91dD1Ob25lKToKKysgKiAgICAgICAgICIiIldy YXBzOiBtcHZfd2FpdF9ldmVudCIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjZGVmIGRvdWJsZSB0aW1lb3V0 X2QgPSB0aW1lb3V0IGlmIHRpbWVvdXQgaXMgbm90IE5vbmUgZWxzZSAtMQorKyAqICAgICAgICAg Y2RlZiBtcHZfZXZlbnQqIGV2ZW50CisgICovCisrICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FT U0VSVElPTlMKKysgIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworKyAgICBpZiAo dW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7CisrICAgICAgUHlFcnJfU2V0 Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7CisrICAgICAgX19QWVhfRVJSKDAsIDcwNiwgX19w eXhfTDFfZXJyb3IpCisgICAgIH0KKysgIH0KKysgICNlbmRpZgorIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjU2CistICogICAgICAgICAgICAgICAgICAgICApCist ICogICAgICAgICAgICAgICAgIHJldHVybiBlcnIKKy0gKiAgICAgICAgICAgICBkYXRhX2lkID0g PHVpbnQ2NF90Pmhhc2goZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5v bmUpCistICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzA3CisrICogICAgICAgICAiIiJXcmFwczogbXB2X3dh aXRfZXZlbnQiIiIKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIGNk ZWYgZG91YmxlIHRpbWVvdXRfZCA9IHRpbWVvdXQgaWYgdGltZW91dCBpcyBub3QgTm9uZSBlbHNl IC0xICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWYgbXB2X2V2 ZW50KiBldmVudAorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gICAgX19weXhfdF84 ID0gUHlPYmplY3RfSGFzaChfX3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF84ID09 ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlYX0VSUigwLCA2NTYsIF9fcHl4X0w0X2Vycm9yKQorLSAg ICBfX3B5eF92X2RhdGFfaWQgPSAoKHVpbnQ2NF90KV9fcHl4X3RfOCk7CistCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTcKKy0gKiAgICAgICAgICAgICAgICAgcmV0 dXJuIGVycgorLSAqICAgICAgICAgICAgIGRhdGFfaWQgPSA8dWludDY0X3Q+aGFzaChkYXRhKQor LSAqICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFf aWQsIE5vbmUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBp ZiB1c2VyZGF0YXMgaXMgTm9uZToKKy0gKiAgICAgICAgICAgICAgICAgc2VsZi5yZXBseV91c2Vy ZGF0YVtkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCistICovCist ICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLT5y ZXBseV91c2VyZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDY1NywgX19weXhfTDRfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4 X3ZfZGF0YV9pZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDY1Nywg X19weXhfTDRfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX3B5 eF90XzkgPSBOVUxMOworLSAgICBfX3B5eF90XzEwID0gMDsKKy0gICAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAg ICBfX3B5eF90XzkgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICAgIGlmIChs aWtlbHkoX19weXhfdF85KSkgeworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhf dF85KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9E RUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworLSAgICAgICAgX19weXhfdF8xMCA9IDE7 CistICAgICAgfQorLSAgICB9CistICAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKy0gICAgaWYg KFB5RnVuY3Rpb25fQ2hlY2soX19weXhfdF8yKSkgeworLSAgICAgIFB5T2JqZWN0ICpfX3B5eF90 ZW1wWzNdID0ge19fcHl4X3RfOSwgX19weXhfdF8zLCBQeV9Ob25lfTsKKy0gICAgICBfX3B5eF90 XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9f cHl4X3RfMTAsIDIrX19weXhfdF8xMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDY1NywgX19weXhfTDRfZXJyb3IpCistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzkpOyBfX3B5eF90XzkgPSAwOworLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAg ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICB9IGVsc2UK Ky0gICAgI2VuZGlmCistICAgICNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCistICAgIGlmIChfX1B5 eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2soX19weXhfdF8yKSkgeworLSAgICAgIFB5T2JqZWN0ICpf X3B5eF90ZW1wWzNdID0ge19fcHl4X3RfOSwgX19weXhfdF8zLCBQeV9Ob25lfTsKKy0gICAgICBf X3B5eF90XzEgPSBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzIsIF9fcHl4X3Rl bXArMS1fX3B5eF90XzEwLCAyK19fcHl4X3RfMTApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF85KTsgX19weXhfdF85ID0gMDsKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAg fSBlbHNlCistICAgICNlbmRpZgorLSAgICB7CistICAgICAgX19weXhfdF8xMSA9IFB5VHVwbGVf TmV3KDIrX19weXhfdF8xMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xMSkpIF9fUFlYX0VSUigw LCA2NTcsIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzExKTsK Ky0gICAgICBpZiAoX19weXhfdF85KSB7CistICAgICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Rf OSk7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xMSwgMCwgX19weXhfdF85KTsgX19weXhfdF85 ID0gTlVMTDsKKy0gICAgICB9CistICAgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzMpOworLSAg ICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xMSwgMCtfX3B5eF90XzEwLCBfX3B5eF90XzMp OworLSAgICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gICAgICBfX1B5eF9HSVZFUkVGKFB5 X05vbmUpOworLSAgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xMSwgMStfX3B5eF90XzEw LCBQeV9Ob25lKTsKKy0gICAgICBfX3B5eF90XzMgPSAwOworLSAgICAgIF9fcHl4X3RfMSA9IF9f UHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90XzExLCBOVUxMKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjU3LCBfX3B5eF9MNF9lcnJvcikKKy0gICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8x MSk7IF9fcHl4X3RfMTEgPSAwOworLSAgICB9CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworLSAgICBfX3B5eF92X3VzZXJkYXRhcyA9IF9fcHl4X3RfMTsKKy0g ICAgX19weXhfdF8xID0gMDsKKysgIF9fcHl4X3RfMiA9IChfX3B5eF92X3RpbWVvdXQgIT0gUHlf Tm9uZSk7CisrICBpZiAoKF9fcHl4X3RfMiAhPSAwKSkgeworKyAgICBfX3B5eF90XzMgPSBfX3B5 eF9QeUZsb2F0X0FzRG91YmxlKF9fcHl4X3ZfdGltZW91dCk7IGlmICh1bmxpa2VseSgoX19weXhf dF8zID09IChkb3VibGUpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNzA3 LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xID0gX19weXhfdF8zOworKyAgfSBlbHNl IHsKKysgICAgX19weXhfdF8xID0gLTEuMDsKKysgIH0KKysgIF9fcHl4X3ZfdGltZW91dF9kID0g X19weXhfdF8xOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjU4 CistICogICAgICAgICAgICAgZGF0YV9pZCA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCistICogICAg ICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoZGF0YV9pZCwgTm9u ZSkKKy0gKiAgICAgICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2Rh dGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKy0gKiAgICAgICAgICAg ICB1c2VyZGF0YXMuYWRkKCkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MDkKKysgKiAgICAgICAgIGNkZWYgZG91YmxlIHRpbWVvdXRfZCA9IHRpbWVvdXQgaWYgdGltZW91 dCBpcyBub3QgTm9uZSBlbHNlIC0xCisrICogICAgICAgICBjZGVmIG1wdl9ldmVudCogZXZlbnQK KysgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgICAgICBldmVudCA9IG1wdl93YWl0X2V2ZW50KHNlbGYuX2N0eCwgdGltZW91dF9k KQorKyAqICAgICAgICAgcmV0dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpCisgICovCist ICAgIF9fcHl4X3RfNyA9IChfX3B5eF92X3VzZXJkYXRhcyA9PSBQeV9Ob25lKTsKKy0gICAgX19w eXhfdF82ID0gKF9fcHl4X3RfNyAhPSAwKTsKKy0gICAgaWYgKF9fcHl4X3RfNikgeworKyAgewor KyAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwor KyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworKyAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIo KTsKKysgICAgICAjZW5kaWYKKysgICAgICAvKnRyeToqLyB7CisgCistICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1OQorLSAqICAgICAgICAgICAgIHVzZXJkYXRhcyA9 IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCistICogICAgICAgICAgICAg aWYgdXNlcmRhdGFzIGlzIE5vbmU6CistICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNl cmRhdGFbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCist ICogICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3MTAKKysgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50KiBldmVudAorKyAq ICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBldmVudCA9IG1wdl93YWl0X2V2 ZW50KHNlbGYuX2N0eCwgdGltZW91dF9kKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICByZXR1cm4gRXZlbnQoKS5faW5pdChldmVudCwgc2VsZikKKysgKiAKKyAgKi8K Ky0gICAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX1Jl cGx5VXNlckRhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2NTks IF9fcHl4X0w0X2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICAg IF9fcHl4X3RfMTEgPSBOVUxMOworLSAgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg dW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAgICAgIF9fcHl4X3Rf MTEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICAgICAgaWYgKGxpa2VseShf X3B5eF90XzExKSkgeworLSAgICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9H RVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Rf MTEpOworLSAgICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgICAgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworLSAgICAgICAgfQorKyAgICAgICAg X19weXhfdl9ldmVudCA9IG1wdl93YWl0X2V2ZW50KF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhf dl90aW1lb3V0X2QpOworICAgICAgIH0KKy0gICAgICBfX3B5eF90XzEgPSAoX19weXhfdF8xMSkg PyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzExLCBfX3B5eF92 X2RhdGEpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfZGF0 YSk7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzExKTsgX19weXhfdF8xMSA9IDA7Cist ICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjU5LCBfX3B5eF9M NF9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgICBpZiAodW5saWtlbHkoX19Q eXhfU2V0SXRlbUludChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2RhdGFf aWQsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAs IDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA2NTksIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgIF9f UHl4X0lOQ1JFRihfX3B5eF90XzEpOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl91 c2VyZGF0YXMsIF9fcHl4X3RfMSk7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7CistCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjY1OAorLSAqICAgICAgICAgICAgIGRhdGFfaWQgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorLSAq ICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQs IE5vbmUpCistICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YVtkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCistICogICAgICAg ICAgICAgdXNlcmRhdGFzLmFkZCgpCistICovCistICAgIH0KKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjY2MAorLSAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBp cyBOb25lOgorLSAqICAgICAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2RhdGFfaWRd ID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKy0gKiAgICAgICAgICAgICB1c2Vy ZGF0YXMuYWRkKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg IHdpdGggbm9naWw6CistICogICAgICAgICAgICAgICAgIGVyciA9IG1wdl9zZXRfcHJvcGVydHlf YXN5bmMoCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwOQorKyAq ICAgICAgICAgY2RlZiBkb3VibGUgdGltZW91dF9kID0gdGltZW91dCBpZiB0aW1lb3V0IGlzIG5v dCBOb25lIGVsc2UgLTEKKysgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50KiBldmVudAorKyAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgICAgIGV2ZW50ID0gbXB2X3dhaXRfZXZlbnQoc2VsZi5fY3R4LCB0aW1lb3V0X2QpCisrICog ICAgICAgICByZXR1cm4gRXZlbnQoKS5faW5pdChldmVudCwgc2VsZikKKyAgKi8KKy0gICAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19w eXhfbl9zX2FkZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY2MCwg X19weXhfTDRfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX3B5 eF90XzExID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAgICBfX3B5eF90XzExID0gUHlNZXRo b2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKy0gICAgICBpZiAobGlrZWx5KF9fcHl4X3RfMTEpKSB7 CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19w eXhfdF8yKTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzExKTsKKy0gICAgICAgIF9f UHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Rf MiwgZnVuY3Rpb24pOworKyAgICAgIC8qZmluYWxseToqLyB7CisrICAgICAgICAvKm5vcm1hbCBl eGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAgICAgICAgX19QeXhf RmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAg ICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5eF9MNTsKKysgICAgICAgIH0KKysgICAgICAg IF9fcHl4X0w1OjsKKyAgICAgICB9CistICAgIH0KKy0gICAgX19weXhfdF8xID0gKF9fcHl4X3Rf MTEpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMTEpIDog X19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7CistICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xMSk7IF9fcHl4X3RfMTEgPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA2NjAsIF9fcHl4X0w0X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgfQorIAor LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYxCistICogICAgICAgICAg ICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlV c2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorLSAqICAgICAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICAgICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0eV9hc3luYygKKy0gKiAgICAgICAgICAg ICAgICAgICAgIHNlbGYuX2N0eCwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3MTEKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgZXZlbnQgPSBt cHZfd2FpdF9ldmVudChzZWxmLl9jdHgsIHRpbWVvdXRfZCkKKysgKiAgICAgICAgIHJldHVybiBF dmVudCgpLl9pbml0KGV2ZW50LCBzZWxmKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogCisrICogICAgIGRlZiB3YWtldXAoc2VsZik6CisgICovCistICAgIHsKKy0gICAgICAgICNp ZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAg ICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsK Ky0gICAgICAgICNlbmRpZgorLSAgICAgICAgLyp0cnk6Ki8geworKyAgX19QeXhfWERFQ1JFRihf X3B5eF9yKTsKKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2Jq ZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KSk7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDcxMSwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgIF9fcHl4X3RfNSA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3RfNCktPl9fcHl4X3Z0YWIpLT5f aW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19w eXhfdF80KSwgX19weXhfdl9ldmVudCwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA3MTEsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKysgIF9fcHl4X3IgPSBfX3B5eF90XzU7CisrICBfX3B5eF90XzUgPSAw OworKyAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjY2MgorLSAqICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorLSAqICAg ICAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgICAgIGVyciA9IG1wdl9zZXRf cHJvcGVydHlfYXN5bmMoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICAgICAgICAgICAgIHNlbGYuX2N0eCwKKy0gKiAgICAgICAgICAgICAgICAgICAgIGRhdGFfaWQs CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzA0CisrICogICAgICAgICBy ZXR1cm4gZXJyCisrICogCisrICogICAgIGRlZiB3YWl0X2V2ZW50KHNlbGYsIHRpbWVvdXQ9Tm9u ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIldyYXBzOiBt cHZfd2FpdF9ldmVudCIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqLworLSAg ICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9zZXRfcHJvcGVydHlfYXN5bmMoX19weXhfdl9zZWxm LT5fY3R4LCBfX3B5eF92X2RhdGFfaWQsIF9fcHl4X3ZfcHJvcF9jLCBNUFZfRk9STUFUX05PREUs ICgmX19weXhfdl92KSk7CistICAgICAgICB9CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NjYxCistICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNl cmRhdGFbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorLSAqICAg ICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorLSAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2 X3NldF9wcm9wZXJ0eV9hc3luYygKKy0gKiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwK Ky0gKi8KKy0gICAgICAgIC8qZmluYWxseToqLyB7CistICAgICAgICAgIC8qbm9ybWFsIGV4aXQ6 Ki97CistICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgICAgX19QeXhf RmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAg ICAgICAgI2VuZGlmCistICAgICAgICAgICAgZ290byBfX3B5eF9MMTM7CistICAgICAgICAgIH0K Ky0gICAgICAgICAgX19weXhfTDEzOjsKKy0gICAgICAgIH0KKy0gICAgfQorLSAgfQorKyAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CisrICBfX1B5eF9B ZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LndhaXRfZXZlbnQiLCBfX3B5 eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBO VUxMOworKyAgX19weXhfTDA6OworKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisrICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzAKKy0gKiAgICAgICAgICAgICAg ICAgKQorLSAqICAgICAgICAgZmluYWxseToKKy0gKiAgICAgICAgICAgICBzZWxmLl9mcmVlX25h dGl2ZV92YWx1ZSh2KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBy ZXR1cm4gZXJyCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxMworKyAqICAg ICAgICAgcmV0dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpCisgICogCisrICogICAgIGRl ZiB3YWtldXAoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICIiIldyYXBzOiBtcHZfd2FrZXVwIiIiCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Cisg ICovCistICAvKmZpbmFsbHk6Ki8geworLSAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgIF9f cHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUo X19weXhfdl9zZWxmLCBfX3B5eF92X3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA2NzAsIF9fcHl4X0wxX2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAg ICAgIGdvdG8gX19weXhfTDU7CistICAgIH0KKy0gICAgX19weXhfTDRfZXJyb3I6OworLSAgICAv KmV4Y2VwdGlvbiBleGl0OioveworLSAgICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQor LSAgICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfYXNzaWduCistICAgICAgX19weXhfdF8xNCA9IDA7 IF9fcHl4X3RfMTUgPSAwOyBfX3B5eF90XzE2ID0gMDsgX19weXhfdF8xNyA9IDA7IF9fcHl4X3Rf MTggPSAwOyBfX3B5eF90XzE5ID0gMDsKKy0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzExKTsgX19weXhf dF8xMSA9IDA7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7CistICAgICAgaWYgKFBZ X01BSk9SX1ZFUlNJT04gPj0gMykgX19QeXhfRXhjZXB0aW9uU3dhcCgmX19weXhfdF8xNywgJl9f cHl4X3RfMTgsICZfX3B5eF90XzE5KTsKKy0gICAgICBpZiAoKFBZX01BSk9SX1ZFUlNJT04gPCAz KSB8fCB1bmxpa2VseShfX1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfMTQsICZfX3B5eF90XzE1 LCAmX19weXhfdF8xNikgPCAwKSkgX19QeXhfRXJyRmV0Y2goJl9fcHl4X3RfMTQsICZfX3B5eF90 XzE1LCAmX19weXhfdF8xNik7CistICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE0KTsKKy0g ICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTUpOworLSAgICAgIF9fUHl4X1hHT1RSRUYoX19w eXhfdF8xNik7CistICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE3KTsKKy0gICAgICBfX1B5 eF9YR09UUkVGKF9fcHl4X3RfMTgpOworLSAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xOSk7 CistICAgICAgX19weXhfdF8xMCA9IF9fcHl4X2xpbmVubzsgX19weXhfdF8xMiA9IF9fcHl4X2Ns aW5lbm87IF9fcHl4X3RfMTMgPSBfX3B5eF9maWxlbmFtZTsKKy0gICAgICB7CistICAgICAgICBf X3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVl KF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgNjcwLCBfX3B5eF9MMTVfZXJyb3IpCistICAgICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OworLSAgICAgIH0KKy0gICAgICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAzKSB7CistICAgICAg ICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzE3KTsKKy0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3RfMTgpOworLSAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xOSk7CistICAgICAg ICBfX1B5eF9FeGNlcHRpb25SZXNldChfX3B5eF90XzE3LCBfX3B5eF90XzE4LCBfX3B5eF90XzE5 KTsKKy0gICAgICB9CistICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xNCk7CistICAgICAg X19QeXhfWEdJVkVSRUYoX19weXhfdF8xNSk7CistICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhf dF8xNik7CistICAgICAgX19QeXhfRXJyUmVzdG9yZShfX3B5eF90XzE0LCBfX3B5eF90XzE1LCBf X3B5eF90XzE2KTsKKy0gICAgICBfX3B5eF90XzE0ID0gMDsgX19weXhfdF8xNSA9IDA7IF9fcHl4 X3RfMTYgPSAwOyBfX3B5eF90XzE3ID0gMDsgX19weXhfdF8xOCA9IDA7IF9fcHl4X3RfMTkgPSAw OworLSAgICAgIF9fcHl4X2xpbmVubyA9IF9fcHl4X3RfMTA7IF9fcHl4X2NsaW5lbm8gPSBfX3B5 eF90XzEyOyBfX3B5eF9maWxlbmFtZSA9IF9fcHl4X3RfMTM7CistICAgICAgZ290byBfX3B5eF9M MV9lcnJvcjsKKy0gICAgICBfX3B5eF9MMTVfZXJyb3I6OworLSAgICAgIGlmIChQWV9NQUpPUl9W RVJTSU9OID49IDMpIHsKKy0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTcpOworLSAg ICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xOCk7CistICAgICAgICBfX1B5eF9YR0lWRVJF RihfX3B5eF90XzE5KTsKKy0gICAgICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9fcHl4X3RfMTcs IF9fcHl4X3RfMTgsIF9fcHl4X3RfMTkpOworLSAgICAgIH0KKy0gICAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMTQpOyBfX3B5eF90XzE0ID0gMDsKKy0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMTUpOyBfX3B5eF90XzE1ID0gMDsKKy0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTYp OyBfX3B5eF90XzE2ID0gMDsKKy0gICAgICBfX3B5eF90XzE3ID0gMDsgX19weXhfdF8xOCA9IDA7 IF9fcHl4X3RfMTkgPSAwOworLSAgICAgIGdvdG8gX19weXhfTDFfZXJyb3I7CistICAgIH0KKy0g ICAgX19weXhfTDNfcmV0dXJuOiB7CistICAgICAgX19weXhfdF8xOSA9IF9fcHl4X3I7CistICAg ICAgX19weXhfciA9IDA7CistICAgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0 cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhf dnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfdik7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3MCwgX19weXhfTDFfZXJyb3IpCist ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgICAgX19weXhfciA9IF9fcHl4X3RfMTk7CistICAg ICAgX19weXhfdF8xOSA9IDA7CistICAgICAgZ290byBfX3B5eF9MMDsKKysKKysvKiBQeXRob24g d3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzI3d2FrZXVwKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVT RUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworK3N0YXRpYyBjaGFyIF9fcHl4X2RvY185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjZ3YWtldXBbXSA9ICJXcmFwczogbXB2X3dh a2V1cCI7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMjd3YWtldXAoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQ eU9iamVjdCAqdW51c2VkKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndha2V1 cCAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMjZ3YWtldXAoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7CisrCisrICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9f cHl4X3I7CisrfQorKworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzI2d2FrZXVwKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBO VUxMOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIGludCBfX3B5eF9saW5lbm8g PSAwOworKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndha2V1cCIsIDAp OworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxNQorKyAqICAgICBk ZWYgd2FrZXVwKHNlbGYpOgorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAiIiIKKysg KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfd2FrZXVwKHNlbGYu X2N0eCkKKysgKi8KKysgICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUworKyAgaWYg KHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CisrICAgIGlmICh1bmxpa2VseSghKF9fcHl4 X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKysgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2Vy dGlvbkVycm9yKTsKKysgICAgICBfX1BZWF9FUlIoMCwgNzE1LCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgfQorLSAgICBfX3B5eF9MNTo7CisgICB9CisrICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzEKKy0gKiAgICAgICAgIGZpbmFsbHk6CistICogICAg ICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUodikKKy0gKiAgICAgICAgIHJldHVybiBl cnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjcxNgorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAiIiIKKysg KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBtcHZfd2FrZXVwKHNlbGYu X2N0eCkKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMKKyAgKi8KKy0gIF9fUHl4X1hERUNSRUYoX19w eXhfcik7CistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3MSwgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF90XzE7 CistICBfX3B5eF90XzEgPSAwOworLSAgZ290byBfX3B5eF9MMDsKKysgIHsKKysgICAgICAjaWZk ZWYgV0lUSF9USFJFQUQKKysgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICBQeV9V TkJMT0NLX1RIUkVBRFMKKysgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CisrICAgICAg I2VuZGlmCisrICAgICAgLyp0cnk6Ki8geworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjYzNgorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjcxNworKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAqICAgICAgICAgd2l0aCBub2dp bDoKKysgKiAgICAgICAgICAgICBtcHZfd2FrZXVwKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgc2V0X3By b3BlcnR5KHNlbGYsIHByb3AsIHZhbHVlPVRydWUsIGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1O b25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6 IG1wdl9zZXRfcHJvcGVydHkgYW5kIG1wdl9zZXRfcHJvcGVydHlfYXN5bmMiIiIKKysgKiAgICAg ZGVmIHNldF93YWtldXBfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgorKyAqLworKyAgICAgICAg bXB2X3dha2V1cChfX3B5eF92X3NlbGYtPl9jdHgpOworKyAgICAgIH0KKysKKysgICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE2CisrICogICAgICAgICAiIiJXcmFwczog bXB2X3dha2V1cCIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAqICAgICAgICAg d2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAg IG1wdl93YWtldXAoc2VsZi5fY3R4KQorKyAqIAorKyAqLworKyAgICAgIC8qZmluYWxseToqLyB7 CisrICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lUSF9USFJF QUQKKysgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAgUHlfQkxP Q0tfVEhSRUFEUworKyAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5eF9MNTsK KysgICAgICAgIH0KKysgICAgICAgIF9fcHl4X0w1OjsKKysgICAgICB9CisrICB9CisrCisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzEzCisrICogICAgICAgICByZXR1cm4g RXZlbnQoKS5faW5pdChldmVudCwgc2VsZikKKysgKiAKKysgKiAgICAgZGVmIHdha2V1cChzZWxm KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIiV3JhcHM6IG1w dl93YWtldXAiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKi8KKyAKKyAgIC8q IGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JF RihQeV9Ob25lKTsKKysgIGdvdG8gX19weXhfTDA7CisgICBfX3B5eF9MMV9lcnJvcjo7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOSk7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2 aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5zZXRfcHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBf X3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2LkNvbnRleHQud2FrZXVwIiwgX19weXhfY2xpbmVubywgX19weXhfbGlu ZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5eF9yID0gTlVMTDsKKyAgIF9fcHl4X0wwOjsK Ky0gIF9fUHl4X1hERUNSRUYoX19weXhfdl91c2VyZGF0YXMpOworLSAgX19QeXhfWERFQ1JFRihf X3B5eF92X3Byb3ApOworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njc0CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjcxOQorKyAqICAgICAgICAgICAgIG1wdl93YWtldXAoc2VsZi5fY3R4KQorICAq IAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgc2V0X29wdGlvbihzZWxmLCBwcm9wLCB2 YWx1ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIi V3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCisrICogICAgIGRlZiBzZXRfd2FrZXVwX2NhbGxiYWNr KHNlbGYsIGNhbGxiYWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgIiIiV3JhcHM6IG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrIiIiCisgICogICAgICAgICBhc3Nl cnQgc2VsZi5fY3R4CisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNXNldF9vcHRp b24oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0 ICpfX3B5eF9rd2RzKTsgLypwcm90byovCistc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNHNldF9vcHRpb25bXSA9ICJXcmFwczogbXB2X3NldF9v cHRpb24iOworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzI1c2V0X29wdGlvbihQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92 X3Byb3AgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUgPSAwOworLSAgaW50IF9fcHl4 X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBp bnQgX19weXhfY2xpbmVubyA9IDA7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjlzZXRfd2FrZXVwX2NhbGxiYWNrKFB5T2JqZWN0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2NhbGxiYWNrKTsgLypwcm90byovCisrc3Rh dGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yOHNldF93 YWtldXBfY2FsbGJhY2tbXSA9ICJXcmFwczogbXB2X3NldF93YWtldXBfY2FsbGJhY2siOworK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI5 c2V0X3dha2V1cF9jYWxsYmFjayhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9jYWxsYmFjaykgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVm TmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfb3B0 aW9uICh3cmFwcGVyKSIsIDApOworLSAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9w eWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19wcm9wLCZfX3B5eF9uX3NfdmFsdWUsMH07CistICAg IFB5T2JqZWN0KiB2YWx1ZXNbMl0gPSB7MCwwfTsKKy0gICAgdmFsdWVzWzFdID0gKChQeU9iamVj dCAqKVB5X1RydWUpOworLSAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKKy0gICAgICBQ eV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5 VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CistICAgICAgc3dpdGNoIChwb3NfYXJncykgewor LSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdz LCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZh bHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBDWVRI T05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1 bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQorLSAgICAgIGt3X2Fy Z3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7 CistICAgICAgICBjYXNlICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19Q eXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3Byb3ApKSAhPSAwKSkg a3dfYXJncy0tOworLSAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwor LSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMToKKy0gICAgICAg IGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9Q eURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfdmFsdWUpOworLSAgICAgICAg ICBpZiAodmFsdWUpIHsgdmFsdWVzWzFdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorLSAgICAgICAg fQorLSAgICAgIH0KKy0gICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7CistICAgICAg ICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9f cHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJzZXRfb3B0aW9uIikgPCAwKSkg X19QWVhfRVJSKDAsIDY3NCwgX19weXhfTDNfZXJyb3IpCistICAgICAgfQorLSAgICB9IGVsc2Ug eworLSAgICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgeworLSAgICAg ICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsK Ky0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1sw XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBicmVhazsKKy0g ICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQor LSAgICB9CistICAgIF9fcHl4X3ZfcHJvcCA9IHZhbHVlc1swXTsKKy0gICAgX19weXhfdl92YWx1 ZSA9IHZhbHVlc1sxXTsKKy0gIH0KKy0gIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5n X2RvbmU7CistICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1 cGxlSW52YWxpZCgic2V0X29wdGlvbiIsIDAsIDEsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhf YXJncykpOyBfX1BZWF9FUlIoMCwgNjc0LCBfX3B5eF9MM19lcnJvcikKKy0gIF9fcHl4X0wzX2Vy cm9yOjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQu c2V0X29wdGlvbiIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gTlVMTDsKKy0g IF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3IgPSBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjRzZXRfb3B0aW9uKCgoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9f cHl4X3ZfcHJvcCwgX19weXhfdl92YWx1ZSk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgic2V0X3dha2V1cF9jYWxsYmFjayAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjhzZXRfd2FrZXVwX2NhbGxiYWNr KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4 X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X2NhbGxiYWNrKSk7CisgCisgICAvKiBmdW5j dGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAg cmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI0c2V0X29wdGlvbihzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CistICBlbnVtIG1wdl9mb3JtYXQg X19weXhfdl9mb3JtYXQ7CistICBzdHJ1Y3QgbXB2X25vZGUgX19weXhfdl92OworLSAgaW50IF9f cHl4X3ZfZXJyOworLSAgY2hhciBjb25zdCAqX19weXhfdl9wcm9wX2M7Cisrc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjhzZXRfd2FrZXVw X2NhbGxiYWNrKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2FsbGJhY2spIHsKKysgIHVpbnQ2NF90 IF9fcHl4X3ZfbmFtZTsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIFB5 T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworKyAgdWludDY0X3QgX19weXhfdF8yOworICAgUHlP YmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CistICBlbnVtIG1wdl9mb3JtYXQgX19weXhfdF80Owor LSAgY2hhciBjb25zdCAqX19weXhfdF81OworLSAgaW50IF9fcHl4X3RfNjsKKy0gIGludCBfX3B5 eF90Xzc7CistICBjaGFyIGNvbnN0ICpfX3B5eF90Xzg7CistICBQeU9iamVjdCAqX19weXhfdF85 ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEwID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpf X3B5eF90XzExID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEyID0gTlVMTDsKKy0gIFB5 T2JqZWN0ICpfX3B5eF90XzEzID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzE0ID0gTlVM TDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9 IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhf Y2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X29wdGlvbiIs IDApOworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfcHJvcCk7CisrICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgic2V0X3dha2V1cF9jYWxsYmFjayIsIDApOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjY3NgorLSAqICAgICBkZWYgc2V0X29wdGlvbihzZWxmLCBw cm9wLCB2YWx1ZT1UcnVlKToKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X29wdGlvbiIi IgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyMQorKyAqICAgICBkZWYg c2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6CisrICogICAgICAgICAiIiJXcmFw czogbXB2X3NldF93YWtldXBfY2FsbGJhY2siIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9j dHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcHJvcCA9IF9zdHJl bmMocHJvcCkKKy0gKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3Jt YXRfZm9yKHZhbHVlKQorKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBuYW1lID0gPHVpbnQ2NF90 PmlkKHNlbGYpCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKyAgKi8KKyAg ICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUworICAgaWYgKHVubGlrZWx5KCFQeV9P cHRpbWl6ZUZsYWcpKSB7CisgICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAh PSAwKSkpIHsKKyAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKKy0g ICAgICBfX1BZWF9FUlIoMCwgNjc2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1BZWF9FUlIo MCwgNzIxLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgfQorICAgfQorICAgI2VuZGlmCisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njc3CistICogICAgICAgICAiIiJXcmFw czogbXB2X3NldF9vcHRpb24iIiIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3MjIKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayIiIgor ICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorLSAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMo cHJvcCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBtcHZf Zm9ybWF0IGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCistICogICAgICAgICBjZGVm IG1wdl9ub2RlIHYgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQorKyAq ICAgICAgICAgY2RlZiB1aW50NjRfdCBuYW1lID0gPHVpbnQ2NF90PmlkKHNlbGYpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFj aworKyAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zZXQoY2FsbGJhY2spCisgICovCist ICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY3NywgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IE5VTEw7Cist ICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9f cHl4X3RfMikpKSB7CistICAgIF9fcHl4X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3Rf Mik7CistICAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5j dGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzMpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAg X19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAg X19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhf dF8yLCBfX3B5eF90XzMsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfMiwgX19weXhfdl9wcm9wKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsg X19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDY3NywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X2J1aWx0aW5faWQsICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNzIyLCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CistICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfcHJvcCwgX19weXhf dF8xKTsKKy0gIF9fcHl4X3RfMSA9IDA7CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Bc191 aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2NF90 KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA3MjIsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX3B5 eF92X25hbWUgPSAoKHVpbnQ2NF90KV9fcHl4X3RfMik7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Njc4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NzIzCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAgICBwcm9wID0g X3N0cmVuYyhwcm9wKQorLSAqICAgICAgICAgY2RlZiBtcHZfZm9ybWF0IGZvcm1hdCA9IHNlbGYu X2Zvcm1hdF9mb3IodmFsdWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIGNkZWYgbXB2X25vZGUgdiA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3Jt YXQpCistICogICAgICAgICBjZGVmIGludCBlcnIKKysgKiAgICAgICAgIGNkZWYgdWludDY0X3Qg bmFtZSA9IDx1aW50NjRfdD5pZChzZWxmKQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNh bGxiYWNrICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuY2Fs bGJhY2t0aHJlYWQuc2V0KGNhbGxiYWNrKQorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8K Ky0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9f cHl4X3Zfc2VsZiksIF9fcHl4X25fc19mb3JtYXRfZm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgNjc4LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOworLSAgX19weXhfdF8zID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4 X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgIGlmIChsaWtlbHkoX19w eXhfdF8zKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOworKyAgX19Q eXhfSU5DUkVGKF9fcHl4X3ZfY2FsbGJhY2spOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X2Nh bGxiYWNrKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmNhbGxiYWNrKTsKKysgIF9f UHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmNhbGxiYWNrKTsKKysgIF9fcHl4X3Zfc2VsZi0+Y2Fs bGJhY2sgPSBfX3B5eF92X2NhbGxiYWNrOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjcyNAorKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBuYW1lID0gPHVpbnQ2NF90 PmlkKHNlbGYpCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKysgKiAgICAg ICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2V0KGNhbGxiYWNrKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIG1wdl9z ZXRfd2FrZXVwX2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1lKQor KyAqLworKyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3Nl bGYtPmNhbGxiYWNrdGhyZWFkLCBfX3B5eF9uX3Nfc2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMCwgNzI0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOworKyAgX19weXhfdF80ID0gTlVMTDsKKysgIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7CisrICAgIF9fcHl4 X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7CisrICAgIGlmIChsaWtlbHkoX19w eXhfdF80KSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzMpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworICAgICAg IF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90 XzIsIGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywgZnVuY3Rp b24pOworICAgICB9CisgICB9CistICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5 T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl92YWx1ZSkgOiBf X1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl92YWx1ZSk7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf dF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8zLCBf X3B5eF90XzQsIF9fcHl4X3ZfY2FsbGJhY2spIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzMsIF9fcHl4X3ZfY2FsbGJhY2spOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQp OyBfX3B5eF90XzQgPSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgNzI0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAg X19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBfX3B5eF90XzQgPSAo KGVudW0gbXB2X2Zvcm1hdClfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZm9ybWF0KF9fcHl4X3Rf MSkpOyBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA2NzgsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7 CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3Zf Zm9ybWF0ID0gX19weXhfdF80OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjY3OQorLSAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKy0gKiAgICAgICAgIGNk ZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZhbHVlKQorLSAqICAgICAg ICAgY2RlZiBtcHZfbm9kZSB2ID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUodmFsdWUsIGZvcm1h dCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBpbnQgZXJy CistICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYworKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjcyNQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxi YWNrCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNldChjYWxsYmFjaykKKysgKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9jdHgsIF9jX2NhbGxiYWNrLCA8 dm9pZCo+bmFtZSkKKysgKiAKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21f ZW51bV9fbXB2X2Zvcm1hdChfX3B5eF92X2Zvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDY3OSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKy0gIF9fcHl4X3ZfdiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fcHJl cF9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X3ZhbHVlLCBfX3B5eF90XzEpOwor LSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICB7CisrICAgICAg I2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CisrICAgICAg UHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworKyAg ICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2ODIKKy0gKiAgICAgICAgIGNkZWYgaW50IGVycgorLSAqICAgICAgICAg Y2RlZiBjb25zdCBjaGFyKiBwcm9wX2MKKy0gKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHByb3BfYyA9IHByb3AKKy0gKiAgICAgICAg ICAgICB3aXRoIG5vZ2lsOgorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjcyNgorKyAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zZXQoY2FsbGJhY2spCisr ICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIG1wdl9zZXRfd2FrZXVwX2Nh bGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1lKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiBnZXRfd2FrZXVwX3BpcGUoc2VsZik6 CisgICovCistICAvKnRyeToqLyB7CisrICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhf X3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX2NhbGxi YWNrLCAoKHZvaWQgKilfX3B5eF92X25hbWUpKTsKKysgICAgICB9CisgCistICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2ODMKKy0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hh ciogcHJvcF9jCistICogICAgICAgICB0cnk6CistICogICAgICAgICAgICAgcHJvcF9jID0gcHJv cCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgd2l0aCBub2dp bDoKKy0gKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3NldF9vcHRpb24oCisrICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyNQorKyAqICAgICAgICAgc2VsZi5jYWxs YmFjayA9IGNhbGxiYWNrCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNldChjYWxs YmFjaykKKysgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9jdHgsIF9j X2NhbGxiYWNrLCA8dm9pZCo+bmFtZSkKKysgKiAKKyAgKi8KKy0gICAgX19weXhfdF81ID0gX19Q eXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9wcm9wKTsgaWYgKHVubGlrZWx5KCghX19weXhf dF81KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDY4MywgX19weXhfTDRfZXJy b3IpCistICAgIF9fcHl4X3ZfcHJvcF9jID0gX19weXhfdF81OworKyAgICAgIC8qZmluYWxseToq LyB7CisrICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lUSF9U SFJFQUQKKysgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAgUHlf QkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5eF9M NTsKKysgICAgICAgIH0KKysgICAgICAgIF9fcHl4X0w1OjsKKysgICAgICB9CisrICB9CisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2ODQKKy0gKiAgICAgICAgIHRy eToKKy0gKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wCistICogICAgICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBl cnIgPSBtcHZfc2V0X29wdGlvbigKKy0gKiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MTkKKysgKiAgICAgICAgICAg ICBtcHZfd2FrZXVwKHNlbGYuX2N0eCkKKysgKiAKKysgKiAgICAgZGVmIHNldF93YWtldXBfY2Fs bGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICAiIiJXcmFwczogbXB2X3NldF93YWtldXBfY2FsbGJhY2siIiIKKysgKiAgICAgICAg IGFzc2VydCBzZWxmLl9jdHgKKyAgKi8KKy0gICAgeworLSAgICAgICAgI2lmZGVmIFdJVEhfVEhS RUFECistICAgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKy0gICAgICAgIFB5X1VOQkxPQ0tf VEhSRUFEUworLSAgICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAgICAgI2Vu ZGlmCistICAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo2ODUKKy0gKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wCistICog ICAgICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3Nl dF9vcHRpb24oICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAg ICAgICAgIHNlbGYuX2N0eCwKKy0gKiAgICAgICAgICAgICAgICAgICAgIHByb3BfYywKKysgIC8q IGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JF RihQeV9Ob25lKTsKKysgIGdvdG8gX19weXhfTDA7CisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Cisr ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1 dHRlci5saWJzLm1wdi5Db250ZXh0LnNldF93YWtldXBfY2FsbGJhY2siLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworKyAg X19weXhfTDA6OworKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisrICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysKKysvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzI4CisrICogICAgICAgICAgICAgbXB2X3NldF93YWtl dXBfY2FsbGJhY2soc2VsZi5fY3R4LCBfY19jYWxsYmFjaywgPHZvaWQqPm5hbWUpCisrICogCisr ICogICAgIGRlZiBnZXRfd2FrZXVwX3BpcGUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfZ2V0X3dha2V1cF9waXBlIiIiCisrICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICovCistICAgICAgICAgIF9fcHl4X3ZfZXJyID0g bXB2X3NldF9vcHRpb24oX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X3Byb3BfYywgTVBWX0ZP Uk1BVF9OT0RFLCAoJl9fcHl4X3ZfdikpOworLSAgICAgICAgfQorIAorLSAgICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY4NAorLSAqICAgICAgICAgdHJ5OgorLSAqICAg ICAgICAgICAgIHByb3BfYyA9IHByb3AKKy0gKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgIGVyciA9IG1wdl9z ZXRfb3B0aW9uKAorLSAqICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorKy8qIFB5dGhv biB3cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMzFnZXRfd2FrZXVwX3BpcGUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwg Q1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCisrc3RhdGljIGNoYXIg X19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93YWtldXBfcGlw ZVtdID0gIldyYXBzOiBtcHZfZ2V0X3dha2V1cF9waXBlIjsKKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMWdldF93YWtldXBfcGlwZShQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsK KysgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25z CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0X3dha2V1cF9waXBlICh3cmFwcGVy KSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8zMGdldF93YWtldXBfcGlwZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19w eXhfcjsKKyt9CisrCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMzBnZXRfd2FrZXVwX3BpcGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKSB7CisrICBpbnQgX19weXhfdl9w aXBlOworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworKyAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworKyAgaW50IF9fcHl4X2xp bmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQg X19weXhfY2xpbmVubyA9IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0X3dh a2V1cF9waXBlIiwgMCk7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzMwCisrICogICAgIGRlZiBnZXRfd2FrZXVwX3BpcGUoc2VsZik6CisrICogICAgICAgICAiIiJX cmFwczogbXB2X2dldF93YWtldXBfcGlwZSIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjZGVmIGludCBwaXBl CisrICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgICAgICAgLypmaW5hbGx5OiovIHsK Ky0gICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAgICAjaWZkZWYgV0lUSF9U SFJFQUQKKy0gICAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAgICAgICAgICAg IFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgICBnb3Rv IF9fcHl4X0w4OworLSAgICAgICAgICB9CistICAgICAgICAgIF9fcHl4X0w4OjsKKy0gICAgICAg IH0KKysgICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUworKyAgaWYgKHVubGlrZWx5 KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CisrICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+ X2N0eCAhPSAwKSkpIHsKKysgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9y KTsKKysgICAgICBfX1BZWF9FUlIoMCwgNzMwLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgfQorICAg fQorKyAgI2VuZGlmCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njky CistICogICAgICAgICAgICAgICAgICkKKy0gKiAgICAgICAgIGZpbmFsbHk6CistICogICAgICAg ICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUodikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgcmV0dXJuIGVycgorLSAqIAorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjczMgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAqICAg ICAgICAgY2RlZiBpbnQgcGlwZQorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHBpcGUgPSBtcHZfZ2V0X3dha2V1cF9w aXBlKHNlbGYuX2N0eCkKKysgKiAgICAgICAgIHJldHVybiBwaXBlCisgICovCistICAvKmZpbmFs bHk6Ki8geworLSAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgIF9fcHl4X3RfMSA9ICgoc3Ry dWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5 eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBf X3B5eF92X3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2OTIsIF9f cHl4X0wxX2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICAgIGdvdG8gX19weXhf TDU7CistICAgIH0KKy0gICAgX19weXhfTDRfZXJyb3I6OworLSAgICAvKmV4Y2VwdGlvbiBleGl0 OioveworLSAgICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQorLSAgICAgIF9fUHl4X1B5 VGhyZWFkU3RhdGVfYXNzaWduCistICAgICAgX19weXhfdF85ID0gMDsgX19weXhfdF8xMCA9IDA7 IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90XzEyID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3Rf MTQgPSAwOworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK Ky0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICAgIGlmIChQWV9N QUpPUl9WRVJTSU9OID49IDMpIF9fUHl4X0V4Y2VwdGlvblN3YXAoJl9fcHl4X3RfMTIsICZfX3B5 eF90XzEzLCAmX19weXhfdF8xNCk7CistICAgICAgaWYgKChQWV9NQUpPUl9WRVJTSU9OIDwgMykg fHwgdW5saWtlbHkoX19QeXhfR2V0RXhjZXB0aW9uKCZfX3B5eF90XzksICZfX3B5eF90XzEwLCAm X19weXhfdF8xMSkgPCAwKSkgX19QeXhfRXJyRmV0Y2goJl9fcHl4X3RfOSwgJl9fcHl4X3RfMTAs ICZfX3B5eF90XzExKTsKKy0gICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfOSk7CistICAgICAg X19QeXhfWEdPVFJFRihfX3B5eF90XzEwKTsKKy0gICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3Rf MTEpOworLSAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMik7CistICAgICAgX19QeXhfWEdP VFJFRihfX3B5eF90XzEzKTsKKy0gICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTQpOworLSAg ICAgIF9fcHl4X3RfNiA9IF9fcHl4X2xpbmVubzsgX19weXhfdF83ID0gX19weXhfY2xpbmVubzsg X19weXhfdF84ID0gX19weXhfZmlsZW5hbWU7CistICAgICAgeworLSAgICAgICAgX19weXhfdF8x ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92 X3NlbGYsIF9fcHl4X3Zfdik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDY5MiwgX19weXhfTDEwX2Vycm9yKQorLSAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CistICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAg ICB9CistICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgeworLSAgICAgICAgX19QeXhf WEdJVkVSRUYoX19weXhfdF8xMik7CistICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEz KTsKKy0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTQpOworLSAgICAgICAgX19QeXhf RXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMiwgX19weXhfdF8xMywgX19weXhfdF8xNCk7CisrICB7 CisrICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7 CisrICAgICAgUHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJl cigpOworKyAgICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsKKysKKysgICAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MzMKKysgKiAgICAgICAgIGNkZWYgaW50IHBp cGUKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgcGlwZSA9IG1wdl9n ZXRfd2FrZXVwX3BpcGUoc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICByZXR1cm4gcGlwZQorKyAqIAorKyAqLworKyAgICAgICAgX19weXhfdl9waXBl ID0gbXB2X2dldF93YWtldXBfcGlwZShfX3B5eF92X3NlbGYtPl9jdHgpOworICAgICAgIH0KKy0g ICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzkpOworLSAgICAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3RfMTApOworLSAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTEpOworLSAgICAgIF9f UHl4X0VyclJlc3RvcmUoX19weXhfdF85LCBfX3B5eF90XzEwLCBfX3B5eF90XzExKTsKKy0gICAg ICBfX3B5eF90XzkgPSAwOyBfX3B5eF90XzEwID0gMDsgX19weXhfdF8xMSA9IDA7IF9fcHl4X3Rf MTIgPSAwOyBfX3B5eF90XzEzID0gMDsgX19weXhfdF8xNCA9IDA7CistICAgICAgX19weXhfbGlu ZW5vID0gX19weXhfdF82OyBfX3B5eF9jbGluZW5vID0gX19weXhfdF83OyBfX3B5eF9maWxlbmFt ZSA9IF9fcHl4X3RfODsKKy0gICAgICBnb3RvIF9fcHl4X0wxX2Vycm9yOworLSAgICAgIF9fcHl4 X0wxMF9lcnJvcjo7CistICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgeworLSAgICAg ICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMik7CistICAgICAgICBfX1B5eF9YR0lWRVJFRihf X3B5eF90XzEzKTsKKy0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTQpOworLSAgICAg ICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMiwgX19weXhfdF8xMywgX19weXhfdF8x NCk7CisrCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczMgorKyAq ICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAqICAgICAgICAgY2RlZiBpbnQgcGlwZQorKyAq ICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgIHBpcGUgPSBtcHZfZ2V0X3dha2V1cF9waXBlKHNlbGYuX2N0eCkKKysgKiAgICAg ICAgIHJldHVybiBwaXBlCisrICovCisrICAgICAgLypmaW5hbGx5OiovIHsKKysgICAgICAgIC8q bm9ybWFsIGV4aXQ6Ki97CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAg ICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisr ICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICBnb3RvIF9fcHl4X0w1OworKyAgICAgICAgfQor KyAgICAgICAgX19weXhfTDU6OworICAgICAgIH0KKy0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfOSk7IF9fcHl4X3RfOSA9IDA7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEwKTsg X19weXhfdF8xMCA9IDA7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzExKTsgX19weXhf dF8xMSA9IDA7CistICAgICAgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTMgPSAwOyBfX3B5eF90 XzE0ID0gMDsKKy0gICAgICBnb3RvIF9fcHl4X0wxX2Vycm9yOworLSAgICB9CistICAgIF9fcHl4 X0w1OjsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2OTMK Ky0gKiAgICAgICAgIGZpbmFsbHk6CistICogICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVf dmFsdWUodikKKy0gKiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczNAorKyAqICAgICAg ICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBwaXBlID0gbXB2X2dldF93YWtldXBfcGlw ZShzZWxmLl9jdHgpCisrICogICAgICAgICByZXR1cm4gcGlwZSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogCistICogICAgIEBfZXJyb3JzCisrICogICAgIGRlZiBfX2Npbml0X18o c2VsZik6CisgICovCisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8xID0g X19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA2OTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19Q eXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9waXBlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgNzM0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOworICAgX19weXhfciA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgICBn b3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3 NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyOAorKyAqICAgICAgICAg ICAgIG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lk Kj5uYW1lKQorICAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgc2V0X29wdGlvbihz ZWxmLCBwcm9wLCB2YWx1ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCisrICogICAgIGRlZiBnZXRfd2Fr ZXVwX3BpcGUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICIiIldyYXBzOiBtcHZfZ2V0X3dha2V1cF9waXBlIiIiCisgICogICAgICAgICBhc3NlcnQgc2Vs Zi5fY3R4CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fcHl4X0wx X2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYo X19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuc2V0X29wdGlvbiIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfQWRkVHJhY2Vi YWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5nZXRfd2FrZXVwX3BpcGUiLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKyAgIF9fcHl4X3IgPSBOVUxM OworICAgX19weXhfTDA6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X3Byb3ApOworICAgX19Q eXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsK KyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6Njk2CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczNgorKyAqICAg ICAgICAgcmV0dXJuIHBpcGUKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMKKy0gKiAgICAgZGVmIGlu aXRpYWxpemUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICIiIldyYXBzOiBtcHZfaW5pdGlhbGl6ZSIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAorKyAqICAgICBkZWYgX19jaW5pdF9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYp CisrICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICov Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMjdpbml0aWFsaXplKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjZpbml0aWFsaXplW10gPSAiV3JhcHM6IG1wdl9pbml0 aWFsaXplIjsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8yN2luaXRpYWxpemUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqdW51c2VkKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7Cisrc3Rh dGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzNfX2Npbml0 X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0 ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMzNfX2Npbml0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwg UHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CisrICBpbnQgX19w eXhfcjsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiaW5pdGlhbGl6ZSAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjZpbml0aWFsaXplKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikp OworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fY2luaXRfXyAod3JhcHBlcikiLCAw KTsKKysgIGlmICh1bmxpa2VseShQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpID4gMCkpIHsK KysgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fY2luaXRfXyIsIDEsIDAsIDAsIFB5 VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyByZXR1cm4gLTE7fQorKyAgaWYgKHVubGlrZWx5 KF9fcHl4X2t3ZHMpICYmIHVubGlrZWx5KFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpID4gMCkgJiYg dW5saWtlbHkoIV9fUHl4X0NoZWNrS2V5d29yZFN0cmluZ3MoX19weXhfa3dkcywgIl9fY2luaXRf XyIsIDApKSkgcmV0dXJuIC0xOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8zMl9fY2luaXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKKyAKKyAgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1 cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMjZpbml0aWFsaXplKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworLSAgaW50IF9fcHl4X3Zf ZXJyOworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworK3N0YXRpYyBpbnQgX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMyX19jaW5pdF9fKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworKyAgdWlu dDY0X3QgX19weXhfdl9jdHhpZDsKKysgIGludCBfX3B5eF9yOworICAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworKyAgdWludDY0X3Qg X19weXhfdF8yOworKyAgaW50IF9fcHl4X3RfMzsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBO VUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CisgICBpbnQgX19weXhfbGluZW5v ID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5 eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJpbml0aWFsaXpl IiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19jaW5pdF9fIiwgMCk7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njk4CistICogICAgIGRlZiBp bml0aWFsaXplKHNlbGYpOgorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9pbml0aWFsaXplIiIi CistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjczNworKyAqIAorKyAqICAgICBkZWYgX19jaW5pdF9fKHNlbGYpOgorKyAqICAg ICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAg ICAgIHNlbGYuX2N0eCA9IG1wdl9jcmVhdGUoKQorICAqLworLSAgI2lmbmRlZiBDWVRIT05fV0lU SE9VVF9BU1NFUlRJT05TCistICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKy0g ICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworLSAgICAgIFB5 RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCA2 OTgsIF9fcHl4X0wxX2Vycm9yKQorLSAgICB9CistICB9CistICAjZW5kaWYKKysgIF9fcHl4X3Rf MSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfYnVpbHRpbl9pZCwgKChQeU9iamVj dCAqKV9fcHl4X3Zfc2VsZikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA3MzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBf X3B5eF90XzIgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5saWtl bHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9f UFlYX0VSUigwLCA3MzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX3B5eF92X2N0eGlkID0gKCh1aW50NjRfdClfX3B5eF90 XzIpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwMAorLSAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzM4CisrICogICAgIGRlZiBfX2Npbml0X18o c2VsZik6CisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNl bGYpCisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICAgICAgZXJyID0gbXB2X2luaXRpYWxpemUoc2VsZi5fY3R4KQorLSAqICAg ICAgICAgcmV0dXJuIGVycgorKyAqICAgICAgICAgICAgIHNlbGYuX2N0eCA9IG1wdl9jcmVhdGUo KQorKyAqICAgICAgICAgaWYgbm90IHNlbGYuX2N0eDoKKyAgKi8KKyAgIHsKKyAgICAgICAjaWZk ZWYgV0lUSF9USFJFQUQKK0BAIC0xNDExNCwyMiArMTM5NzUsMjIgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjZpbml0aWFsaXplKHN0 cnVjdCBfX3AKKyAgICAgICAjZW5kaWYKKyAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAxCistICogICAgICAgICBjZGVmIGlu dCBlcnIKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MzkKKysg KiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2VsZikKKyAgKiAg ICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2X2luaXRpYWxpemUo c2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1 cm4gZXJyCistICogCisrICogICAgICAgICAgICAgc2VsZi5fY3R4ID0gbXB2X2NyZWF0ZSgpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIG5vdCBzZWxmLl9jdHg6 CisrICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3Ii KQorICAqLworLSAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfaW5pdGlhbGl6ZShfX3B5eF92X3Nl bGYtPl9jdHgpOworKyAgICAgICAgX19weXhfdl9zZWxmLT5fY3R4ID0gbXB2X2NyZWF0ZSgpOwor ICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAw CistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAgICBjZGVmIGludCBlcnIK KysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzM4CisrICogICAgIGRl ZiBfX2Npbml0X18oc2VsZik6CisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVp bnQ2NF90PmlkKHNlbGYpCisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2X2luaXRpYWxpemUoc2VsZi5f Y3R4KQorLSAqICAgICAgICAgcmV0dXJuIGVycgorKyAqICAgICAgICAgICAgIHNlbGYuX2N0eCA9 IG1wdl9jcmVhdGUoKQorKyAqICAgICAgICAgaWYgbm90IHNlbGYuX2N0eDoKKyAgKi8KKyAgICAg ICAvKmZpbmFsbHk6Ki8geworICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKK0BAIC0xNDE0Myw2 NiArMTQwMDQsMjAwIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzI2aW5pdGlhbGl6ZShzdHJ1Y3QgX19wCisgICAgICAgfQorICAgfQor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwMgorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0MAorICAqICAgICAgICAgd2l0aCBub2dpbDoKKy0g KiAgICAgICAgICAgICBlcnIgPSBtcHZfaW5pdGlhbGl6ZShzZWxmLl9jdHgpCistICogICAgICAg ICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAg ZGVmIHdhaXRfZXZlbnQoc2VsZiwgdGltZW91dD1Ob25lKToKKysgKiAgICAgICAgICAgICBzZWxm Ll9jdHggPSBtcHZfY3JlYXRlKCkKKysgKiAgICAgICAgIGlmIG5vdCBzZWxmLl9jdHg6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcigi Q29udGV4dCBjcmVhdGlvbiBlcnJvciIpCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFk ID0gQ2FsbGJhY2tUaHJlYWQoKQorICAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0g IF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNzAyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfciA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4 X3RfMSA9IDA7CistICBnb3RvIF9fcHl4X0wwOworKyAgX19weXhfdF8zID0gKCghKF9fcHl4X3Zf c2VsZi0+X2N0eCAhPSAwKSkgIT0gMCk7CisrICBpZiAodW5saWtlbHkoX19weXhfdF8zKSkgewor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5NgorLSAqIAorLSAqICAg ICBAX2Vycm9ycworLSAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9pbml0aWFsaXplIiIiCist ICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3NDEKKysgKiAgICAgICAgICAgICBzZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkK KysgKiAgICAgICAgIGlmIG5vdCBzZWxmLl9jdHg6CisrICogICAgICAgICAgICAgcmFpc2UgTVBW RXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3IiKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkID0gQ2FsbGJhY2tUaHJlYWQoKQor KyAqICAgICAgICAgX2NhbGxiYWNrc1tjdHhpZF0gPSBzZWxmLmNhbGxiYWNrdGhyZWFkCisgICov CisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3NfTVBW RXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NDEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgICAgX19weXhfdF81 ID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzQpKSkgeworKyAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dF VF9TRUxGKF9fcHl4X3RfNCk7CisrICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CisrICAg ICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF80 KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworKyAgICAgICAgX19QeXhfSU5D UkVGKGZ1bmN0aW9uKTsKKysgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF80LCBmdW5j dGlvbik7CisrICAgICAgfQorKyAgICB9CisrICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzUpID8g X19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNCwgX19weXhfdF81LCBfX3B5eF9rcF9z X0NvbnRleHRfY3JlYXRpb25fZXJyb3IpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzQsIF9fcHl4X2twX3NfQ29udGV4dF9jcmVhdGlvbl9lcnJvcik7CisrICAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNzQxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQg PSAwOworKyAgICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgICAgX19QWVhfRVJSKDAsIDc0MSwg X19weXhfTDFfZXJyb3IpCisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4 X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuaW5pdGlhbGl6ZSIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7 CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0MAorKyAqICAgICAgICAgd2l0aCBub2dpbDoK KysgKiAgICAgICAgICAgICBzZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkKKysgKiAgICAgICAgIGlm IG5vdCBzZWxmLl9jdHg6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICAgICByYWlzZSBNUFZFcnJvcigiQ29udGV4dCBjcmVhdGlvbiBlcnJvciIpCisrICogICAgICAg ICBzZWxmLmNhbGxiYWNrdGhyZWFkID0gQ2FsbGJhY2tUaHJlYWQoKQorKyAqLworKyAgfQorKwor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0MgorKyAqICAgICAgICAgaWYg bm90IHNlbGYuX2N0eDoKKysgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcigiQ29udGV4dCBj cmVhdGlvbiBlcnJvciIpCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkID0gQ2FsbGJh Y2tUaHJlYWQoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBfY2Fs bGJhY2tzW2N0eGlkXSA9IHNlbGYuY2FsbGJhY2t0aHJlYWQKKysgKiAgICAgICAgIHNlbGYucmVw bHlfdXNlcmRhdGEgPSBkaWN0KCkKKysgKi8KKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF80LCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNCkpIF9fUFlYX0VSUigwLCA3NDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfNCk7CisrICBfX3B5eF90XzUgPSBOVUxMOworKyAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzQpKSkgeworKyAgICBf X3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzQpOworKyAgICBpZiAobGlrZWx5 KF9fcHl4X3RfNSkpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRf RlVOQ1RJT04oX19weXhfdF80KTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKysg ICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19w eXhfdF80LCBmdW5jdGlvbik7CisrICAgIH0KKysgIH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90 XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSkgOiBf X1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF80KTsKKysgIF9fUHl4X1hERUNSRUYoX19w eXhfdF81KTsgX19weXhfdF81ID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDc0MiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgX19QeXhf R0lWRVJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+Y2FsbGJh Y2t0aHJlYWQpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQp OworKyAgX19weXhfdl9zZWxmLT5jYWxsYmFja3RocmVhZCA9IF9fcHl4X3RfMTsKKysgIF9fcHl4 X3RfMSA9IDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQzCisr ICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3IiKQor KyAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZCA9IENhbGxiYWNrVGhyZWFkKCkKKysgKiAg ICAgICAgIF9jYWxsYmFja3NbY3R4aWRdID0gc2VsZi5jYWxsYmFja3RocmVhZCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gZGlj dCgpCisrICogICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXSA9IHNlbGYucmVwbHlfdXNl cmRhdGEKKysgKi8KKysgIF9fcHl4X3RfMSA9IF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQ7 CisrICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKysgIGlmICh1bmxpa2VseShfX1B5eF9TZXRJ dGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3Zf Y3R4aWQsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3Qs IDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA3NDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzQ0CisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFk ID0gQ2FsbGJhY2tUaHJlYWQoKQorKyAqICAgICAgICAgX2NhbGxiYWNrc1tjdHhpZF0gPSBzZWxm LmNhbGxiYWNrdGhyZWFkCisrICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gZGljdCgp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIF9yZXBseV91c2VyZGF0 YXNbY3R4aWRdID0gc2VsZi5yZXBseV91c2VyZGF0YQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFj a3RocmVhZC5zdGFydCgpCisrICovCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeURpY3RfTmV3UHJl c2l6ZWQoMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDc0NCwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dJVkVS RUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJk YXRhKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKKysg IF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEg PSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0NQorKyAqICAg ICAgICAgX2NhbGxiYWNrc1tjdHhpZF0gPSBzZWxmLmNhbGxiYWNrdGhyZWFkCisrICogICAgICAg ICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gZGljdCgpCisrICogICAgICAgICBfcmVwbHlfdXNlcmRh dGFzW2N0eGlkXSA9IHNlbGYucmVwbHlfdXNlcmRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zdGFydCgpCisrICogCisrICov CisrICBfX3B5eF90XzEgPSBfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhOworKyAgX19QeXhf SU5DUkVGKF9fcHl4X3RfMSk7CisrICBpZiAodW5saWtlbHkoX19QeXhfU2V0SXRlbUludChfX3B5 eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlk LCBfX3B5eF90XzEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAw LCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc0NgorKyAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IGRp Y3QoKQorKyAqICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0gPSBzZWxmLnJlcGx5X3Vz ZXJkYXRhCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnN0YXJ0KCkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqLworKyAgX19w eXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPmNhbGxiYWNr dGhyZWFkLCBfX3B5eF9uX3Nfc3RhcnQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCA3NDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7 CisrICBfX3B5eF90XzUgPSBOVUxMOworKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBs aWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKKysgICAgX19weXhfdF81ID0gUHlN ZXRob2RfR0VUX1NFTEYoX19weXhfdF80KTsKKysgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7 CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4 X3RfNCk7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7CisrICAgICAgX19QeXhfSU5D UkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNCwgZnVuY3Rp b24pOworKyAgICB9CisrICB9CisrICBfX3B5eF90XzEgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF80LCBfX3B5eF90XzUpIDogX19QeXhfUHlPYmplY3Rf Q2FsbE5vQXJnKF9fcHl4X3RfNCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4 X3RfNSA9IDA7CisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3NDYs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9E RUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjczNgorKyAqICAgICAgICAgcmV0dXJuIHBpcGUKKysgKiAKKysgKiAgICAgZGVmIF9fY2lu aXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2Rl ZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKQorKyAqICAgICAgICAgd2l0aCBu b2dpbDoKKysgKi8KKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9 IDA7CisrICBnb3RvIF9fcHl4X0wwOworKyAgX19weXhfTDFfZXJyb3I6OworKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzUpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGli cy5tcHYuQ29udGV4dC5fX2Npbml0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSAtMTsKKysgIF9fcHl4X0wwOjsKKyAgIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDQKKy0gKiAgICAgICAgIHJldHVybiBl cnIKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQ5CisgICogCistICogICAg IGRlZiB3YWl0X2V2ZW50KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfd2FpdF9ldmVudCIiIgorKyAqICAg ICBAX2Vycm9ycworKyAqICAgICBkZWYgb2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkYXRh PU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJXcmFw czogbXB2X29ic2VydmVfcHJvcGVydHkiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgK KyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI5d2FpdF9ldmVudChQeU9iamVjdCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMp OyAvKnByb3RvKi8KKy1zdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzI4d2FpdF9ldmVudFtdID0gIldyYXBzOiBtcHZfd2FpdF9ldmVudCI7Cistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjl3 YWl0X2V2ZW50KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQ eU9iamVjdCAqX19weXhfa3dkcykgeworLSAgUHlPYmplY3QgKl9fcHl4X3ZfdGltZW91dCA9IDA7 Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMzVvYnNlcnZlX3Byb3BlcnR5KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLworK3N0YXRpYyBjaGFy IF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzRvYnNlcnZlX3Byb3Bl cnR5W10gPSAiV3JhcHM6IG1wdl9vYnNlcnZlX3Byb3BlcnR5IjsKKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNW9ic2VydmVfcHJvcGVy dHkoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0 ICpfX3B5eF9rd2RzKSB7CisrICBQeU9iamVjdCAqX19weXhfdl9wcm9wID0gMDsKKysgIFB5T2Jq ZWN0ICpfX3B5eF92X2RhdGEgPSAwOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25z dCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7 CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9u cworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndhaXRfZXZlbnQgKHdyYXBwZXIpIiwg MCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgib2JzZXJ2ZV9wcm9wZXJ0eSAod3Jh cHBlcikiLCAwKTsKKyAgIHsKKy0gICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1l c1tdID0geyZfX3B5eF9uX3NfdGltZW91dCwwfTsKKy0gICAgUHlPYmplY3QqIHZhbHVlc1sxXSA9 IHswfTsKKy0gICAgdmFsdWVzWzBdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOworKyAgICBzdGF0 aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19wcm9wLCZfX3B5 eF9uX3NfZGF0YSwwfTsKKysgICAgUHlPYmplY3QqIHZhbHVlc1syXSA9IHswLDB9OworKyAgICB2 YWx1ZXNbMV0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7CisgICAgIGlmICh1bmxpa2VseShfX3B5 eF9rd2RzKSkgeworICAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKyAgICAgICBjb25zdCBQeV9z c2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKyAgICAgICBz d2l0Y2ggKHBvc19hcmdzKSB7CisrICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxl X0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwor ICAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdz LCAwKTsKKyAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKyAgICAgICAgIGNhc2UgIDA6IGJy ZWFrOworQEAgLTE0MjExLDExNyArMTQyMDYsMjkxIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI5d2FpdF9ldmVudChQeU9iamVjdCAq CisgICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworICAgICAgIHN3aXRj aCAocG9zX2FyZ3MpIHsKKyAgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBpZiAobGlrZWx5KCh2 YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nf cHJvcCkpICE9IDApKSBrd19hcmdzLS07CisrICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJn dHVwbGVfZXJyb3I7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNl ICAxOgorICAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7CistICAgICAgICAgIFB5T2JqZWN0KiB2 YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc190aW1l b3V0KTsKKy0gICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1swXSA9IHZhbHVlOyBrd19hcmdz LS07IH0KKysgICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1T dHIoX19weXhfa3dkcywgX19weXhfbl9zX2RhdGEpOworKyAgICAgICAgICBpZiAodmFsdWUpIHsg dmFsdWVzWzFdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorICAgICAgICAgfQorICAgICAgIH0KKyAg ICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7CistICAgICAgICBpZiAodW5saWtlbHko X19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMs IDAsIHZhbHVlcywgcG9zX2FyZ3MsICJ3YWl0X2V2ZW50IikgPCAwKSkgX19QWVhfRVJSKDAsIDcw NCwgX19weXhfTDNfZXJyb3IpCisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRp b25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9z X2FyZ3MsICJvYnNlcnZlX3Byb3BlcnR5IikgPCAwKSkgX19QWVhfRVJSKDAsIDc0OSwgX19weXhf TDNfZXJyb3IpCisgICAgICAgfQorICAgICB9IGVsc2UgeworICAgICAgIHN3aXRjaCAoUHlUdXBs ZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgeworLSAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKysgICAgICAgIGNhc2UgIDI6IHZhbHVl c1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CisgICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAwOiBicmVhazsKKysgICAgICAgIGNhc2UgIDE6 IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CisrICAgICAgICBi cmVhazsKKyAgICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Cisg ICAgICAgfQorICAgICB9CistICAgIF9fcHl4X3ZfdGltZW91dCA9IHZhbHVlc1swXTsKKysgICAg X19weXhfdl9wcm9wID0gdmFsdWVzWzBdOworKyAgICBfX3B5eF92X2RhdGEgPSB2YWx1ZXNbMV07 CisgICB9CisgICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworICAgX19w eXhfTDVfYXJndHVwbGVfZXJyb3I6OworLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIndh aXRfZXZlbnQiLCAwLCAwLCAxLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhf RVJSKDAsIDcwNCwgX19weXhfTDNfZXJyb3IpCisrICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxp ZCgib2JzZXJ2ZV9wcm9wZXJ0eSIsIDAsIDEsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cykpOyBfX1BZWF9FUlIoMCwgNzQ5LCBfX3B5eF9MM19lcnJvcikKKyAgIF9fcHl4X0wzX2Vycm9y OjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQud2Fp dF9ldmVudCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwor KyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5vYnNlcnZl X3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBOVUxMOworICAg X19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OworLSAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yOHdhaXRfZXZlbnQoKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgX19w eXhfdl90aW1lb3V0KTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMzRvYnNlcnZlX3Byb3BlcnR5KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfcHJvcCwgX19w eXhfdl9kYXRhKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjh3YWl0 X2V2ZW50KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdGltZW91dCkgeworLSAgZG91YmxlIF9fcHl4 X3ZfdGltZW91dF9kOworLSAgc3RydWN0IG1wdl9ldmVudCAqX19weXhfdl9ldmVudDsKKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNG9i c2VydmVfcHJvcGVydHkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQeU9iamVjdCAqX19w eXhfdl9kYXRhKSB7CisrICB1aW50NjRfdCBfX3B5eF92X2lkX2RhdGE7CisrICBQeU9iamVjdCAq X19weXhfdl91c2VyZGF0YXMgPSBOVUxMOworKyAgY2hhciAqX19weXhfdl9wcm9wYzsKKysgIGlu dCBfX3B5eF92X2VycjsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCistICBkb3VibGUgX19weXhfdF8xOworLSAgaW50IF9fcHl4X3Rf MjsKKy0gIGRvdWJsZSBfX3B5eF90XzM7CisrICBQeV9oYXNoX3QgX19weXhfdF8xOworKyAgUHlP YmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsK KyAgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfNSA9 IE5VTEw7CisrICBpbnQgX19weXhfdF82OworKyAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7 CisrICBpbnQgX19weXhfdF84OworKyAgaW50IF9fcHl4X3RfOTsKKysgIGNoYXIgKl9fcHl4X3Rf MTA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVu YW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJ3YWl0X2V2ZW50IiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgib2JzZXJ2ZV9wcm9wZXJ0eSIsIDApOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfcHJv cCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzA2CistICogICAg IGRlZiB3YWl0X2V2ZW50KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CistICogICAgICAgICAiIiJXcmFw czogbXB2X3dhaXRfZXZlbnQiIiIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3NTEKKysgKiAgICAgZGVmIG9ic2VydmVfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGF0YT1Ob25l KToKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eSIiIgorICAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICBjZGVmIGRvdWJsZSB0aW1lb3V0X2QgPSB0aW1lb3V0IGlmIHRpbWVvdXQgaXMgbm90 IE5vbmUgZWxzZSAtMQorLSAqICAgICAgICAgY2RlZiBtcHZfZXZlbnQqIGV2ZW50CisrICogICAg ICAgICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorKyAqICAg ICAgICAgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisgICovCisgICAjaWZuZGVmIENZ VEhPTl9XSVRIT1VUX0FTU0VSVElPTlMKKyAgIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFn KSkgeworICAgICBpZiAodW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7Cisg ICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7CistICAgICAgX19QWVhf RVJSKDAsIDcwNiwgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19QWVhfRVJSKDAsIDc1MSwgX19w eXhfTDFfZXJyb3IpCisgICAgIH0KKyAgIH0KKyAgICNlbmRpZgorIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjcwNworLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWl0 X2V2ZW50IiIiCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzUyCisrICog ICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVfcHJvcGVydHkiIiIKKyAgKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIGNkZWYgZG91YmxlIHRpbWVvdXRfZCA9IHRpbWVv dXQgaWYgdGltZW91dCBpcyBub3QgTm9uZSBlbHNlIC0xICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50KiBldmVudAorLSAqICAgICAgICAgd2l0 aCBub2dpbDoKKysgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5o YXNoKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlkX2Rh dGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorKyAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5y ZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IChf X3B5eF92X3RpbWVvdXQgIT0gUHlfTm9uZSk7CistICBpZiAoKF9fcHl4X3RfMiAhPSAwKSkgewor LSAgICBfX3B5eF90XzMgPSBfX3B5eF9QeUZsb2F0X0FzRG91YmxlKF9fcHl4X3ZfdGltZW91dCk7 IGlmICh1bmxpa2VseSgoX19weXhfdF8zID09IChkb3VibGUpLTEpICYmIFB5RXJyX09jY3VycmVk KCkpKSBfX1BZWF9FUlIoMCwgNzA3LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19weXhfdF8xID0g X19weXhfdF8zOworLSAgfSBlbHNlIHsKKy0gICAgX19weXhfdF8xID0gLTEuMDsKKy0gIH0KKy0g IF9fcHl4X3ZfdGltZW91dF9kID0gX19weXhfdF8xOworKyAgX19weXhfdF8xID0gUHlPYmplY3Rf SGFzaChfX3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF8xID09ICgoUHlfaGFzaF90 KS0xKSkpIF9fUFlYX0VSUigwLCA3NTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdl9pZF9k YXRhID0gKCh1aW50NjRfdClfX3B5eF90XzEpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjcwOQorLSAqICAgICAgICAgY2RlZiBkb3VibGUgdGltZW91dF9kID0gdGlt ZW91dCBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGVsc2UgLTEKKy0gKiAgICAgICAgIGNkZWYgbXB2 X2V2ZW50KiBldmVudAorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGV2ZW50ID0gbXB2X3dhaXRfZXZlbnQoc2VsZi5f Y3R4LCB0aW1lb3V0X2QpCistICogICAgICAgICByZXR1cm4gRXZlbnQoKS5faW5pdChldmVudCwg c2VsZikKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTMKKysgKiAgICAg ICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9 IDx1aW50NjRfdD5oYXNoKGRhdGEpCisrICogICAgICAgICBpZF9kYXRhID0gPHVpbnQ2NF90Pmhh c2goZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgdXNlcmRh dGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKysgKiAgICAgICAg IGlmIHVzZXJkYXRhcyBpcyBOb25lOgorICAqLworLSAgeworLSAgICAgICNpZmRlZiBXSVRIX1RI UkVBRAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAgICAgIFB5X1VOQkxPQ0tfVEhS RUFEUworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKy0gICAgICAjZW5kaWYKKy0g ICAgICAvKnRyeToqLyB7CisrICBfX3B5eF90XzEgPSBQeU9iamVjdF9IYXNoKF9fcHl4X3ZfZGF0 YSk7IGlmICh1bmxpa2VseShfX3B5eF90XzEgPT0gKChQeV9oYXNoX3QpLTEpKSkgX19QWVhfRVJS KDAsIDc1MywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF92X2lkX2RhdGEgPSAoKHVpbnQ2NF90 KV9fcHl4X3RfMSk7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NzEwCistICogICAgICAgICBjZGVmIG1wdl9ldmVudCogZXZlbnQKKy0gKiAgICAgICAgIHdp dGggbm9naWw6CistICogICAgICAgICAgICAgZXZlbnQgPSBtcHZfd2FpdF9ldmVudChzZWxmLl9j dHgsIHRpbWVvdXRfZCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg cmV0dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpCistICogCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzU0CisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGlkX2Rh dGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorKyAqICAgICAgICAgaWRfZGF0YSA9IDx1aW50NjRf dD5oYXNoKGRhdGEpCisrICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRh LmdldChpZF9kYXRhLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKKysgKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3Vz ZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKyAgKi8K Ky0gICAgICAgIF9fcHl4X3ZfZXZlbnQgPSBtcHZfd2FpdF9ldmVudChfX3B5eF92X3NlbGYtPl9j dHgsIF9fcHl4X3ZfdGltZW91dF9kKTsKKy0gICAgICB9CistCistICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjcwOQorLSAqICAgICAgICAgY2RlZiBkb3VibGUgdGltZW91 dF9kID0gdGltZW91dCBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGVsc2UgLTEKKy0gKiAgICAgICAg IGNkZWYgbXB2X2V2ZW50KiBldmVudAorKyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF9uX3NfZ2V0KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgX19weXhfdF80ID0gX19QeXhfUHlJbnRf RnJvbV91aW50NjRfdChfX3B5eF92X2lkX2RhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCA3NTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNCk7CisrICBfX3B5eF90XzUgPSBOVUxMOworKyAgX19weXhfdF82ID0gMDsKKysgIGlmIChD WVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykp KSB7CisrICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7CisrICAg IGlmIChsaWtlbHkoX19weXhfdF81KSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5 TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzUpOworKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVD UkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKysgICAgICBfX3B5eF90XzYgPSAxOworKyAg ICB9CisrICB9CisrICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCisrICBpZiAoUHlGdW5jdGlvbl9D aGVjayhfX3B5eF90XzMpKSB7CisrICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4 X3RfNSwgX19weXhfdF80LCBQeV9Ob25lfTsKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlGdW5j dGlvbl9GYXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1fX3B5eF90XzYsIDIrX19weXhf dF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5eF9M MV9lcnJvcikKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwor KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf NCk7IF9fcHl4X3RfNCA9IDA7CisrICB9IGVsc2UKKysgICNlbmRpZgorKyAgI2lmIENZVEhPTl9G QVNUX1BZQ0NBTEwKKysgIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2soX19weXhfdF8z KSkgeworKyAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzUsIF9fcHl4X3Rf NCwgUHlfTm9uZX07CisrICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxs KF9fcHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NTQsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80 ID0gMDsKKysgIH0gZWxzZQorKyAgI2VuZGlmCisrICB7CisrICAgIF9fcHl4X3RfNyA9IFB5VHVw bGVfTmV3KDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIo MCwgNzU0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Cisr ICAgIGlmIChfX3B5eF90XzUpIHsKKysgICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNSk7IFB5 VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCBfX3B5eF90XzUpOyBfX3B5eF90XzUgPSBOVUxM OworKyAgICB9CisrICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF80KTsKKysgICAgUHlUdXBsZV9T RVRfSVRFTShfX3B5eF90XzcsIDArX19weXhfdF82LCBfX3B5eF90XzQpOworKyAgICBfX1B5eF9J TkNSRUYoUHlfTm9uZSk7CisrICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CisrICAgIFB5VHVw bGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfNiwgUHlfTm9uZSk7CisrICAgIF9fcHl4 X3RfNCA9IDA7CisrICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8z LCBfX3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigw LCA3NTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisrICB9CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIF9fcHl4X3ZfdXNlcmRhdGFz ID0gX19weXhfdF8yOworKyAgX19weXhfdF8yID0gMDsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3NTUKKysgKiAgICAgICAgIGlkX2RhdGEgPSA8dWludDY0X3Q+aGFz aChkYXRhKQorKyAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQo aWRfZGF0YSwgTm9uZSkKKysgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisrICogICAgICAg ICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlCisrICovCisrICBfX3B5eF90XzggPSAoX19weXhf dl91c2VyZGF0YXMgPT0gUHlfTm9uZSk7CisrICBfX3B5eF90XzkgPSAoX19weXhfdF84ICE9IDAp OworKyAgaWYgKF9fcHl4X3RfOSkgeworKworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NzU2CisrICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRh LmdldChpZF9kYXRhLCBOb25lKQorKyAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6Cisr ICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9 IF9SZXBseVVzZXJEYXRhKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9IFRydWUKKysgKiAgICAgICAgIHByb3AgPSBfc3Ry ZW5jKHByb3ApCisrICovCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8z LCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDc1NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzMpOworKyAgICBfX3B5eF90XzcgPSBOVUxMOworKyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRI T0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7CisrICAgICAgX19w eXhfdF83ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKKysgICAgICBpZiAobGlrZWx5 KF9fcHl4X3RfNykpIHsKKysgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dF VF9GVU5DVElPTihfX3B5eF90XzMpOworKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNyk7 CisrICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKysgICAgICB9CisrICAgIH0KKysgICAgX19weXhf dF8yID0gKF9fcHl4X3RfNykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8zLCBf X3B5eF90XzcsIF9fcHl4X3ZfZGF0YSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfMywgX19weXhfdl9kYXRhKTsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBfX3B5 eF90XzcgPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3 NTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICAgIGlmICh1bmxpa2Vs eShfX1B5eF9TZXRJdGVtSW50KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X3Zf aWRfZGF0YSwgX19weXhfdF8yLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRf dCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc1NiwgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Zf dXNlcmRhdGFzLCBfX3B5eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19w eXhfdF8yID0gMDsKKysKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1 NQorKyAqICAgICAgICAgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisrICogICAgICAg ICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorKyAq ICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRh dGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKysgKiAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZl ZCA9IFRydWUKKysgKi8KKysgIH0KKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3NTcKKysgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgorKyAqICAgICAgICAg ICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2Vy RGF0YShkYXRhKQorKyAqICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gVHJ1ZSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKQor KyAqICAgICAgICAgY2RlZiBjaGFyKiBwcm9wYyA9IHByb3AKKysgKi8KKysgIGlmIChfX1B5eF9Q eU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3Nfb2JzZXJ2ZWQs IFB5X1RydWUpIDwgMCkgX19QWVhfRVJSKDAsIDc1NywgX19weXhfTDFfZXJyb3IpCisrCisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzU4CisrICogICAgICAgICAgICAgc2Vs Zi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRh dGEpCisrICogICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlCisrICogICAgICAgICBw cm9wID0gX3N0cmVuYyhwcm9wKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICBjZGVmIGNoYXIqIHByb3BjID0gcHJvcAorKyAqICAgICAgICAgY2RlZiBpbnQgZXJyCisr ICovCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMywgX19weXhfbl9zX3N0 cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc1OCwgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgIF9fcHl4X3RfNyA9IE5V TEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0No ZWNrKF9fcHl4X3RfMykpKSB7CisrICAgIF9fcHl4X3RfNyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9f cHl4X3RfMyk7CisrICAgIGlmIChsaWtlbHkoX19weXhfdF83KSkgeworKyAgICAgIFB5T2JqZWN0 KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOworKyAgICAgIF9f UHl4X0lOQ1JFRihfX3B5eF90XzcpOworKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Cisr ICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKysgICAgfQorKyAg fQorKyAgX19weXhfdF8yID0gKF9fcHl4X3RfNykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3Mo X19weXhfdF8zLCBfX3B5eF90XzcsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X3RfMywgX19weXhfdl9wcm9wKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dF83KTsgX19weXhfdF83ID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDAsIDc1OCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK KysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgX19QeXhfREVD UkVGX1NFVChfX3B5eF92X3Byb3AsIF9fcHl4X3RfMik7CisrICBfX3B5eF90XzIgPSAwOworKwor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1OQorKyAqICAgICAgICAgdXNl cmRhdGFzLm9ic2VydmVkID0gVHJ1ZQorKyAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkK KysgKiAgICAgICAgIGNkZWYgY2hhciogcHJvcGMgPSBwcm9wICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqICAgICAgICAgd2l0aCBub2dp bDoKKysgKi8KKysgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9Bc1dyaXRhYmxlU3RyaW5n KF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfMTApICYmIFB5RXJyX09jY3Vy cmVkKCkpKSBfX1BZWF9FUlIoMCwgNzU5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3ZfcHJv cGMgPSBfX3B5eF90XzEwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojc2MQorKyAqICAgICAgICAgY2RlZiBjaGFyKiBwcm9wYyA9IHByb3AKKysgKiAgICAgICAgIGNk ZWYgaW50IGVycgorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgICAgIGV2ZW50ID0gbXB2X3dhaXRfZXZlbnQoc2VsZi5fY3R4 LCB0aW1lb3V0X2QpCistICogICAgICAgICByZXR1cm4gRXZlbnQoKS5faW5pdChldmVudCwgc2Vs ZikKKysgKiAgICAgICAgICAgICBlcnIgPSBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eSgKKysgKiAgICAg ICAgICAgICAgICAgc2VsZi5fY3R4LAorKyAqLworKyAgeworKyAgICAgICNpZmRlZiBXSVRIX1RI UkVBRAorKyAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworKyAgICAgIFB5X1VOQkxPQ0tfVEhS RUFEUworKyAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKysgICAgICAjZW5kaWYKKysg ICAgICAvKnRyeToqLyB7CisrCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NzYyCisrICogICAgICAgICBjZGVmIGludCBlcnIKKysgKiAgICAgICAgIHdpdGggbm9n aWw6CisrICogICAgICAgICAgICAgZXJyID0gbXB2X29ic2VydmVfcHJvcGVydHkoICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorKyAq ICAgICAgICAgICAgICAgICBpZF9kYXRhLAorKyAqLworKyAgICAgICAgX19weXhfdl9lcnIgPSBt cHZfb2JzZXJ2ZV9wcm9wZXJ0eShfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfaWRfZGF0YSwg X19weXhfdl9wcm9wYywgTVBWX0ZPUk1BVF9OT0RFKTsKKysgICAgICB9CisrCisrICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc2MQorKyAqICAgICAgICAgY2RlZiBjaGFy KiBwcm9wYyA9IHByb3AKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqICAgICAgICAgd2l0 aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVy ciA9IG1wdl9vYnNlcnZlX3Byb3BlcnR5KAorKyAqICAgICAgICAgICAgICAgICBzZWxmLl9jdHgs CisgICovCisgICAgICAgLypmaW5hbGx5OiovIHsKKyAgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97 CitAQCAtMTQzMjksMTAxICsxNDQ5OCwyNDggQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjh3YWl0X2V2ZW50KHN0cnVjdCBfX3AKKyAg ICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKyAgICAgICAgICAgUHlfQkxPQ0tfVEhS RUFEUworICAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNTsKKysgICAg ICAgICAgZ290byBfX3B5eF9MNjsKKyAgICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0w1OjsKKysg ICAgICAgIF9fcHl4X0w2OjsKKyAgICAgICB9CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NzExCistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAg ICAgICAgIGV2ZW50ID0gbXB2X3dhaXRfZXZlbnQoc2VsZi5fY3R4LCB0aW1lb3V0X2QpCistICog ICAgICAgICByZXR1cm4gRXZlbnQoKS5faW5pdChldmVudCwgc2VsZikgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc2OAor KyAqICAgICAgICAgICAgICAgICBNUFZfRk9STUFUX05PREUsCisrICogICAgICAgICAgICAgKQor KyAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICog CistICogICAgIGRlZiB3YWtldXAoc2VsZik6CisrICogICAgIEBfZXJyb3JzCisgICovCisgICBf X1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2Fs bE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZl bnQpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNzExLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgX19weXhfdF81ID0gKChz dHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKikoKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdF80KS0+ X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRXZlbnQgKilfX3B5eF90XzQpLCBfX3B5eF92X2V2ZW50LCAoKFB5T2JqZWN0ICopX19weXhf dl9zZWxmKSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDcxMSwgX19w eXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKy0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgX19weXhfciA9IF9fcHl4X3RfNTsKKy0g IF9fcHl4X3RfNSA9IDA7CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5 eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc2OCwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fcHl4X3IgPSBf X3B5eF90XzI7CisrICBfX3B5eF90XzIgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDQKKy0gKiAgICAgICAgIHJldHVybiBl cnIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDkKKyAgKiAKKy0gKiAg ICAgZGVmIHdhaXRfZXZlbnQoc2VsZiwgdGltZW91dD1Ob25lKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWl0X2V2ZW50IiIiCisrICog ICAgIEBfZXJyb3JzCisrICogICAgIGRlZiBvYnNlcnZlX3Byb3BlcnR5KHNlbGYsIHByb3AsIGRh dGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIldy YXBzOiBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eSIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX3B5eF9MMV9lcnJv cjo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMyk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CisgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250 ZXh0LndhaXRfZXZlbnQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsKKysgIF9fUHl4X0FkZFRyYWNlYmFj aygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQub2JzZXJ2ZV9wcm9wZXJ0eSIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IE5VTEw7 CisgICBfX3B5eF9MMDo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfdXNlcmRhdGFzKTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfdl9wcm9wKTsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Ip OworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsK KyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxMworLSAqICAgICAg ICAgcmV0dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpCisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc3MQorICAqIAorLSAqICAgICBkZWYgd2FrZXVwKHNlbGYpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFwczogbXB2X3dha2V1 cCIiIgorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgdW5vYnNlcnZlX3Byb3BlcnR5KHNl bGYsIGRhdGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJX cmFwczogbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYu X2N0eAorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzF3YWtldXAoUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byov Cistc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8z MHdha2V1cFtdID0gIldyYXBzOiBtcHZfd2FrZXVwIjsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMXdha2V1cChQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zN3Vub2JzZXJ2 ZV9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9kYXRh KTsgLypwcm90byovCisrc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0eVtdID0gIldyYXBzOiBtcHZfdW5vYnNlcnZl X3Byb3BlcnR5IjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8zN3Vub2JzZXJ2ZV9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfdl9kYXRhKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7Cisg ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIndha2V1cCAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzB3YWtldXAoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7CisrICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgidW5vYnNlcnZlX3Byb3BlcnR5ICh3cmFwcGVyKSIsIDApOworKyAg X19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNnVub2Jz ZXJ2ZV9wcm9wZXJ0eSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9kYXRhKSk7CisgCisg ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMwd2FrZXVwKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworK3N0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM2dW5v YnNlcnZlX3Byb3BlcnR5KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSkgeworKyAgdWludDY0 X3QgX19weXhfdl9pZF9kYXRhOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfdXNlcmRhdGFzID0gTlVM TDsKKysgIGludCBfX3B5eF92X2VycjsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAg IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBQeV9oYXNoX3QgX19weXhfdF8xOworKyAg UHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVM TDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3Rf NSA9IE5VTEw7CisrICBpbnQgX19weXhfdF82OworKyAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5V TEw7CisrICBpbnQgX19weXhfdF84OworKyAgaW50IF9fcHl4X3RfOTsKKyAgIGludCBfX3B5eF9s aW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworICAgaW50 IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndha2V1 cCIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVub2JzZXJ2ZV9wcm9wZXJ0 eSIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxNQorLSAq ICAgICBkZWYgd2FrZXVwKHNlbGYpOgorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAi IiIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzMKKysgKiAgICAgZGVm IHVub2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBkYXRhKToKKysgKiAgICAgICAgICIiIldyYXBzOiBt cHZfdW5vYnNlcnZlX3Byb3BlcnR5IiIiCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICog ICAgICAgICAgICAgbXB2X3dha2V1cChzZWxmLl9jdHgpCisrICogICAgICAgICBjZGVmIHVpbnQ2 NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorKyAqICAgICAgICAgdXNlcmRhdGFz ID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKyAgKi8KKyAgICNpZm5k ZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUworICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6 ZUZsYWcpKSB7CisgICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkp IHsKKyAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKKy0gICAgICBf X1BZWF9FUlIoMCwgNzE1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1BZWF9FUlIoMCwgNzcz LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgfQorICAgfQorICAgI2VuZGlmCisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE2CistICogICAgICAgICAiIiJXcmFwczogbXB2 X3dha2V1cCIiIgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3NAorKyAq ICAgICAgICAgIiIiV3JhcHM6IG1wdl91bm9ic2VydmVfcHJvcGVydHkiIiIKKysgKiAgICAgICAg IGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1 aW50NjRfdD5oYXNoKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCisr ICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgbm90IE5vbmU6CisrICovCisrICBfX3B5eF90XzEg PSBQeU9iamVjdF9IYXNoKF9fcHl4X3ZfZGF0YSk7IGlmICh1bmxpa2VseShfX3B5eF90XzEgPT0g KChQeV9oYXNoX3QpLTEpKSkgX19QWVhfRVJSKDAsIDc3NCwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF92X2lkX2RhdGEgPSAoKHVpbnQ2NF90KV9fcHl4X3RfMSk7CisrCisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc1CisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4 CisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRh KQorKyAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0 YSwgTm9uZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgaWYgdXNl cmRhdGFzIGlzIG5vdCBOb25lOgorKyAqICAgICAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9 IEZhbHNlCisrICovCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf R09UUkVGKF9fcHl4X3RfMyk7CisrICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2 NF90KF9fcHl4X3ZfaWRfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDAsIDc3NSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysg IF9fcHl4X3RfNSA9IE5VTEw7CisrICBfX3B5eF90XzYgPSAwOworKyAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKKysgICAg X19weXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKKysgICAgaWYgKGxpa2Vs eShfX3B5eF90XzUpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VU X0ZVTkNUSU9OKF9fcHl4X3RfMyk7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7Cisr ICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfMywgZnVuY3Rpb24pOworKyAgICAgIF9fcHl4X3RfNiA9IDE7CisrICAgIH0KKysgIH0K KysgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKysgIGlmIChQeUZ1bmN0aW9uX0NoZWNrKF9fcHl4 X3RfMykpIHsKKysgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF81LCBfX3B5 eF90XzQsIFB5X05vbmV9OworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RD YWxsKF9fcHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhf dF80ID0gMDsKKysgIH0gZWxzZQorKyAgI2VuZGlmCisrICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FM TAorKyAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzMpKSB7CisrICAg IFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4X3RfNSwgX19weXhfdF80LCBQeV9Ob25l fTsKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8z LCBfX3B5eF90ZW1wKzEtX19weXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDc3NSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKysgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMik7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAg fSBlbHNlCisrICAjZW5kaWYKKysgIHsKKysgICAgX19weXhfdF83ID0gUHlUdXBsZV9OZXcoMitf X3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA3NzUsIF9f cHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKysgICAgaWYgKF9f cHl4X3RfNSkgeworKyAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF81KTsgUHlUdXBsZV9TRVRf SVRFTShfX3B5eF90XzcsIDAsIF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IE5VTEw7CisrICAgIH0K KysgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzQpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfNywgMCtfX3B5eF90XzYsIF9fcHl4X3RfNCk7CisrICAgIF9fUHl4X0lOQ1JFRihQeV9O b25lKTsKKysgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKysgICAgUHlUdXBsZV9TRVRfSVRF TShfX3B5eF90XzcsIDErX19weXhfdF82LCBQeV9Ob25lKTsKKysgICAgX19weXhfdF80ID0gMDsK KysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzMsIF9fcHl4X3Rf NywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc3NSwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgIH0KKysgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgX19weXhfdl91c2VyZGF0YXMgPSBfX3B5eF90 XzI7CisrICBfX3B5eF90XzIgPSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjc3NgorKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90 Pmhhc2goZGF0YSkKKysgKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEu Z2V0KGlkX2RhdGEsIE5vbmUpCisrICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgbm90IE5vbmU6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICB1c2VyZGF0YXMu b2JzZXJ2ZWQgPSBGYWxzZQorKyAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcy5jb3VudGVyIDw9 IDA6CisrICovCisrICBfX3B5eF90XzggPSAoX19weXhfdl91c2VyZGF0YXMgIT0gUHlfTm9uZSk7 CisrICBfX3B5eF90XzkgPSAoX19weXhfdF84ICE9IDApOworKyAgaWYgKF9fcHl4X3RfOSkgewor KworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc3CisrICogICAgICAg ICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorKyAq ICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIG5vdCBOb25lOgorKyAqICAgICAgICAgICAgIHVzZXJk YXRhcy5vYnNlcnZlZCA9IEZhbHNlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgICAgICAgICBpZiB1c2VyZGF0YXMuY291bnRlciA8PSAwOgorKyAqICAgICAgICAgICAgICAg ICBkZWwgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXQorKyAqLworKyAgICBpZiAoX19QeXhf UHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX29ic2VydmVk LCBQeV9GYWxzZSkgPCAwKSBfX1BZWF9FUlIoMCwgNzc3LCBfX3B5eF9MMV9lcnJvcikKKysKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3OAorKyAqICAgICAgICAgaWYg dXNlcmRhdGFzIGlzIG5vdCBOb25lOgorKyAqICAgICAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZl ZCA9IEZhbHNlCisrICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzLmNvdW50ZXIgPD0gMDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICBkZWwgc2VsZi5y ZXBseV91c2VyZGF0YVtpZF9kYXRhXQorKyAqICAgICAgICAgY2RlZiBpbnQgZXJyCisrICovCisr ICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0 YXMsIF9fcHl4X25fc19jb3VudGVyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgNzc4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7 CisrICAgIF9fcHl4X3RfMyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3RfMiwgX19weXhf aW50XzAsIFB5X0xFKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCA3NzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgX19weXhfdF85ID0gX19QeXhf UHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5eF90XzkgPCAwKSkg X19QWVhfRVJSKDAsIDc3OCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgICBpZiAoX19weXhfdF85KSB7CisrCisrICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3OQorKyAqICAgICAgICAgICAgIHVz ZXJkYXRhcy5vYnNlcnZlZCA9IEZhbHNlCisrICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzLmNv dW50ZXIgPD0gMDoKKysgKiAgICAgICAgICAgICAgICAgZGVsIHNlbGYucmVwbHlfdXNlcmRhdGFb aWRfZGF0YV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBp bnQgZXJyCisrICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqLworKyAgICAgIGlmICh1bmxpa2Vs eShfX1B5eF9EZWxJdGVtSW50KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X3Zf aWRfZGF0YSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEp IDwgMCkpIF9fUFlYX0VSUigwLCA3NzksIF9fcHl4X0wxX2Vycm9yKQorKworKyAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzgKKysgKiAgICAgICAgIGlmIHVzZXJkYXRh cyBpcyBub3QgTm9uZToKKysgKiAgICAgICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBGYWxz ZQorKyAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcy5jb3VudGVyIDw9IDA6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgZGVsIHNlbGYucmVwbHlfdXNl cmRhdGFbaWRfZGF0YV0KKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqLworKyAgICB9Cisr CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzYKKysgKiAgICAgICAg IGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisrICogICAgICAg ICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorKyAq ICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gRmFsc2UKKysgKiAg ICAgICAgICAgICBpZiB1c2VyZGF0YXMuY291bnRlciA8PSAwOgorKyAqLworKyAgfQorKworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4MQorKyAqICAgICAgICAgICAgICAg ICBkZWwgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXQorKyAqICAgICAgICAgY2RlZiBpbnQg ZXJyCisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICAgICAgbXB2X3dha2V1cChzZWxmLl9jdHgpCistICogCisrICogICAgICAg ICAgICAgZXJyID0gbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSgKKysgKiAgICAgICAgICAgICAgICAg c2VsZi5fY3R4LAorICAqLworICAgeworICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorQEAgLTE0 NDMzLDIyICsxNDc0OSwyMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8zMHdha2V1cChzdHJ1Y3QgX19weXhfbworICAgICAgICNlbmRp ZgorICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3MTcKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgICAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3ODIKKysgKiAgICAgICAgIGNkZWYgaW50 IGVycgorICAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfd2FrZXVw KHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICBk ZWYgc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6CisrICogICAgICAgICAgICAg ZXJyID0gbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCisrICogICAgICAgICAgICAgICAgIGlk X2RhdGEsCisgICovCistICAgICAgICBtcHZfd2FrZXVwKF9fcHl4X3Zfc2VsZi0+X2N0eCk7Cisr ICAgICAgICBfX3B5eF92X2VyciA9IG1wdl91bm9ic2VydmVfcHJvcGVydHkoX19weXhfdl9zZWxm LT5fY3R4LCBfX3B5eF92X2lkX2RhdGEpOworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE2CistICogICAgICAgICAiIiJXcmFwczogbXB2X3dh a2V1cCIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3ODEKKysgKiAgICAgICAgICAgICAgICAgZGVsIHNlbGYu cmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0KKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgIG1wdl93YWtldXAoc2VsZi5fY3R4KQorLSAqIAorKyAqICAgICAgICAgICAgIGVyciA9 IG1wdl91bm9ic2VydmVfcHJvcGVydHkoCisrICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwK KyAgKi8KKyAgICAgICAvKmZpbmFsbHk6Ki8geworICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sK K0BAIC0xNDQ1NiwxNDEgKzE0NzcyLDEzNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMHdha2V1cChzdHJ1Y3QgX19weXhfbworICAg ICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworICAgICAgICAgICBQeV9CTE9DS19USFJF QURTCisgICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICBnb3RvIF9fcHl4X0w1OworKyAgICAg ICAgICBnb3RvIF9fcHl4X0w3OworICAgICAgICAgfQorLSAgICAgICAgX19weXhfTDU6OworKyAg ICAgICAgX19weXhfTDc6OworICAgICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3MTMKKy0gKiAgICAgICAgIHJldHVybiBFdmVudCgpLl9pbml0KGV2 ZW50LCBzZWxmKQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4NgorKyAq ICAgICAgICAgICAgICAgICBpZF9kYXRhLAorKyAqICAgICAgICAgICAgICkKKysgKiAgICAgICAg IHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorLSAqICAgICBk ZWYgd2FrZXVwKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAiIiJXcmFwczogbXB2X3dha2V1cCIiIgorKyAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6Cisr ICovCisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgX19weXhfdF8zID0gX19QeXhfUHlJ bnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlY X0VSUigwLCA3ODYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7 CisrICBfX3B5eF9yID0gX19weXhfdF8zOworKyAgX19weXhfdF8zID0gMDsKKysgIGdvdG8gX19w eXhfTDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzcxCisrICog CisrICogICAgIEBfZXJyb3JzCisrICogICAgIGRlZiB1bm9ic2VydmVfcHJvcGVydHkoc2VsZiwg ZGF0YSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIldyYXBz OiBtcHZfdW5vYnNlcnZlX3Byb3BlcnR5IiIiCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4 CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQeV9O b25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworICAgX19weXhf TDFfZXJyb3I6OworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29u dGV4dC53YWtldXAiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1l KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKysgIF9fUHl4X1hERUNSRUYoX19w eXhfdF81KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsKKysgIF9fUHl4X0FkZFRyYWNl YmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQudW5vYnNlcnZlX3Byb3BlcnR5IiwgX19w eXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5eF9yID0g TlVMTDsKKyAgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl91c2VyZGF0YXMp OworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzE5CistICogICAgICAgICAgICAgbXB2X3dha2V1cChzZWxmLl9jdHgp CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4OAorKyAqICAgICAgICAgcmV0 dXJuIGVycgorICAqIAorLSAqICAgICBkZWYgc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLCBjYWxs YmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICIiIldyYXBz OiBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAorKyAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgorKyAqICAgICAgICAgICAgIHJl dHVybgorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzNzZXRfd2FrZXVwX2NhbGxi YWNrKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2NhbGxiYWNrKTsg Lypwcm90byovCistc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8zMnNldF93YWtldXBfY2FsbGJhY2tbXSA9ICJXcmFwczogbXB2X3NldF93YWtldXBf Y2FsbGJhY2siOworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzMzc2V0X3dha2V1cF9jYWxsYmFjayhQeU9iamVjdCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfdl9jYWxsYmFjaykgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM5c2h1dGRvd24oUHlPYmplY3QgKl9f cHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCisr c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MzlzaHV0ZG93bihQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0 ICp1bnVzZWQpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X3dha2V1cF9j YWxsYmFjayAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMzJzZXRfd2FrZXVwX2NhbGxiYWNrKCgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksICgoUHlP YmplY3QgKilfX3B5eF92X2NhbGxiYWNrKSk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgic2h1dGRvd24gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24oKChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7CisgCisgICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwor ICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMyc2V0X3dha2V1cF9jYWxsYmFjayhzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF92X2NhbGxiYWNrKSB7CistICB1aW50NjRfdCBfX3B5eF92X25hbWU7Cisr c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MzhzaHV0ZG93bihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICpfX3B5eF92X3NlbGYpIHsKKysgIHVpbnQ2NF90IF9fcHl4X3ZfY3R4aWQ7CisgICBQeU9iamVj dCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlP YmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CistICB1aW50NjRfdCBfX3B5eF90XzI7CistICBQeU9i amVjdCAqX19weXhfdF8zID0gTlVMTDsKKysgIGludCBfX3B5eF90XzE7CisrICBQeU9iamVjdCAq X19weXhfdF8yID0gTlVMTDsKKysgIHVpbnQ2NF90IF9fcHl4X3RfMzsKKyAgIFB5T2JqZWN0ICpf X3B5eF90XzQgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CisgICBpbnQg X19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsK KyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJzZXRfd2FrZXVwX2NhbGxiYWNrIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgic2h1dGRvd24iLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3MjEKKy0gKiAgICAgZGVmIHNldF93YWtldXBfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgor LSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrIiIiCistICogICAg ICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgIGNkZWYgdWludDY0X3QgbmFtZSA9IDx1aW50NjRfdD5pZChzZWxmKQorLSAqICAgICAg ICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Nzg5CisrICogCisrICogICAgIGRlZiBzaHV0ZG93bihzZWxmKToKKysgKiAgICAg ICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICAgICAgcmV0dXJuCisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0g PHVpbnQ2NF90PmlkKHNlbGYpCisgICovCistICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VS VElPTlMKKy0gIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworLSAgICBpZiAodW5s aWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7CistICAgICAgUHlFcnJfU2V0Tm9u ZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7CistICAgICAgX19QWVhfRVJSKDAsIDcyMSwgX19weXhf TDFfZXJyb3IpCistICAgIH0KKy0gIH0KKy0gICNlbmRpZgorKyAgX19weXhfdF8xID0gKChfX3B5 eF92X3NlbGYtPl9jdHggPT0gTlVMTCkgIT0gMCk7CisrICBpZiAoX19weXhfdF8xKSB7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzIyCistICogICAgICAgICAiIiJX cmFwczogbXB2X3NldF93YWtldXBfY2FsbGJhY2siIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxm Ll9jdHgKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgbmFtZSA9IDx1aW50NjRfdD5pZChzZWxm KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmNhbGxiYWNr ID0gY2FsbGJhY2sKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2V0KGNhbGxiYWNr KQorLSAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF9i dWlsdGluX2lkLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDcyMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0FzX3VpbnQ2NF90KF9f cHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09ICgodWludDY0X3QpLTEpKSAmJiBQ eUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDcyMiwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3ZfbmFtZSA9 ICgodWludDY0X3QpX19weXhfdF8yKTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo3MjMKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIGNk ZWYgdWludDY0X3QgbmFtZSA9IDx1aW50NjRfdD5pZChzZWxmKQorLSAqICAgICAgICAgc2VsZi5j YWxsYmFjayA9IGNhbGxiYWNrICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2V0KGNhbGxiYWNrKQorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzkwCisrICogICAgIGRlZiBzaHV0ZG93bihzZWxmKToKKysg KiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgorKyAqICAgICAgICAgICAgIHJldHVybiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0 eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqLwor LSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfY2FsbGJhY2spOworLSAgX19QeXhfR0lWRVJFRihfX3B5 eF92X2NhbGxiYWNrKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmNhbGxiYWNrKTsK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmNhbGxiYWNrKTsKKy0gIF9fcHl4X3Zfc2Vs Zi0+Y2FsbGJhY2sgPSBfX3B5eF92X2NhbGxiYWNrOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3IpOworKyAgICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworKyAg ICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjcyNAorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBuYW1lID0gPHVpbnQ2NF90PmlkKHNlbGYp CistICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKy0gKiAgICAgICAgIHNlbGYu Y2FsbGJhY2t0aHJlYWQuc2V0KGNhbGxiYWNrKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG1wdl9zZXRfd2FrZXVw X2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1lKQorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg5CisrICogCisrICogICAgIGRlZiBzaHV0 ZG93bihzZWxmKToKKysgKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmV0dXJuCisrICogICAgICAgICBj ZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCisgICovCistICBfX3B5eF90 XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJl YWQsIF9fcHl4X25fc19zZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigw LCA3MjQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICBf X3B5eF90XzQgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKKy0gICAgX19weXhfdF80ID0gUHlNZXRob2Rf R0VUX1NFTEYoX19weXhfdF8zKTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CistICAg ICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMyk7 CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7CistICAgICAgX19QeXhfSU5DUkVGKGZ1 bmN0aW9uKTsKKy0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywgZnVuY3Rpb24pOwor LSAgICB9CisgICB9CistICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGwyQXJncyhfX3B5eF90XzMsIF9fcHl4X3RfNCwgX19weXhfdl9jYWxsYmFjaykgOiBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdl9jYWxsYmFjayk7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3MjQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8z ID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyNQorLSAqICAgICAgICAgc2VsZi5j YWxsYmFjayA9IGNhbGxiYWNrCistICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNldChj YWxsYmFjaykKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTEKKysgKiAg ICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgorKyAqICAgICAgICAgICAgIHJldHVybgorKyAq ICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAg ICAgICAgIG1wdl90ZXJtaW5hdGVfZGVzdHJveShzZWxmLl9jdHgpCisrICovCisrICBfX3B5eF90 XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5faWQsICgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgNzkxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAg X19weXhfdF8zID0gX19QeXhfUHlJbnRfQXNfdWludDY0X3QoX19weXhfdF8yKTsgaWYgKHVubGlr ZWx5KChfX3B5eF90XzMgPT0gKCh1aW50NjRfdCktMSkpICYmIFB5RXJyX09jY3VycmVkKCkpKSBf X1BZWF9FUlIoMCwgNzkxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhfdl9jdHhpZCA9ICgodWludDY0X3QpX19weXhf dF8zKTsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTIKKysgKiAg ICAgICAgICAgICByZXR1cm4KKysgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWlu dDY0X3Q+aWQoc2VsZikKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxm Ll9jdHgsIF9jX2NhbGxiYWNrLCA8dm9pZCo+bmFtZSkKKy0gKiAKKysgKiAgICAgICAgICAgICBt cHZfdGVybWluYXRlX2Rlc3Ryb3koc2VsZi5fY3R4KQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFj a3RocmVhZC5zaHV0ZG93bigpCisgICovCisgICB7CisgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFE CitAQCAtMTQ2MDAsMjIgKzE0OTA5LDIyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMyc2V0X3dha2V1cF9jYWxsYmFjayhzCisgICAg ICAgI2VuZGlmCisgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjcyNgorLSAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5z ZXQoY2FsbGJhY2spCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzkzCisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYp CisgICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG1wdl9zZXRfd2FrZXVw X2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1lKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGRlZiBnZXRfd2FrZXVwX3BpcGUoc2Vs Zik6CisrICogICAgICAgICAgICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KHNlbGYuX2N0eCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVh ZC5zaHV0ZG93bigpCisrICogICAgICAgICBkZWwgX2NhbGxiYWNrc1tjdHhpZF0KKyAgKi8KKy0g ICAgICAgIG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfY2FsbGJhY2ssICgodm9pZCAqKV9fcHl4X3ZfbmFt ZSkpOworKyAgICAgICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KF9fcHl4X3Zfc2VsZi0+X2N0eCk7 CisgICAgICAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MjUKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjaworLSAqICAgICAgICAgc2Vs Zi5jYWxsYmFja3RocmVhZC5zZXQoY2FsbGJhY2spCisrICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc5MgorKyAqICAgICAgICAgICAgIHJldHVybgorKyAqICAgICAgICAg Y2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKQorICAqICAgICAgICAgd2l0 aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG1w dl9zZXRfd2FrZXVwX2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1l KQorLSAqIAorKyAqICAgICAgICAgICAgIG1wdl90ZXJtaW5hdGVfZGVzdHJveShzZWxmLl9jdHgp CisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNodXRkb3duKCkKKyAgKi8KKyAgICAg ICAvKmZpbmFsbHk6Ki8geworICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKK0BAIC0xNDYyMywy OCArMTQ5MzIsMTA3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzMyc2V0X3dha2V1cF9jYWxsYmFjayhzCisgICAgICAgICAgIF9fUHl4 X0Zhc3RHSUxfRm9yZ2V0KCk7CisgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKyAgICAgICAg ICAgI2VuZGlmCistICAgICAgICAgIGdvdG8gX19weXhfTDU7CisrICAgICAgICAgIGdvdG8gX19w eXhfTDY7CisgICAgICAgICB9CistICAgICAgICBfX3B5eF9MNTo7CisrICAgICAgICBfX3B5eF9M Njo7CisgICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjcxOQorLSAqICAgICAgICAgICAgIG1wdl93YWtldXAoc2VsZi5fY3R4KQorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5NAorKyAqICAgICAgICAgd2l0aCBub2dpbDoK KysgKiAgICAgICAgICAgICBtcHZfdGVybWluYXRlX2Rlc3Ryb3koc2VsZi5fY3R4KQorKyAqICAg ICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zaHV0ZG93bigpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIGRlbCBfY2FsbGJhY2tzW2N0eGlkXQorKyAqICAgICAgICAg ZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdCisrICovCisrICBfX3B5eF90XzQgPSBfX1B5eF9Q eU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQsIF9fcHl4X25f c19zaHV0ZG93bik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc5NCwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgIF9fcHl4X3Rf NSA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhv ZF9DaGVjayhfX3B5eF90XzQpKSkgeworKyAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VM RihfX3B5eF90XzQpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfNSkpIHsKKysgICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF80KTsKKysgICAg ICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24p OworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF80LCBmdW5jdGlvbik7CisrICAgIH0K KysgIH0KKysgIF9fcHl4X3RfMiA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19w eXhfdF80KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKysg IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc5NCwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk1CisrICog ICAgICAgICAgICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KHNlbGYuX2N0eCkKKysgKiAgICAgICAg IHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRvd24oKQorKyAqICAgICAgICAgZGVsIF9jYWxsYmFj a3NbY3R4aWRdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGRlbCBf cmVwbHlfdXNlcmRhdGFzW2N0eGlkXQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUK KysgKi8KKysgIGlmICh1bmxpa2VseShfX1B5eF9EZWxJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRl cl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3ZfY3R4aWQsIHVpbnQ2NF90LCAwLCBfX1B5 eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzk1LCBf X3B5eF9MMV9lcnJvcikKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 OTYKKysgKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRvd24oKQorKyAqICAgICAg ICAgZGVsIF9jYWxsYmFja3NbY3R4aWRdCisrICogICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRh c1tjdHhpZF0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5j YWxsYmFjayA9IE5vbmUKKysgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBOb25lCisr ICovCisrICBpZiAodW5saWtlbHkoX19QeXhfRGVsSXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50NjRfdCwgMCwg X19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc5 NiwgX19weXhfTDFfZXJyb3IpCisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6Nzk3CisrICogICAgICAgICBkZWwgX2NhbGxiYWNrc1tjdHhpZF0KKysgKiAgICAgICAgIGRl bCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5v bmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5yZXBseV91 c2VyZGF0YSA9IE5vbmUKKysgKiAgICAgICAgIHNlbGYuX2N0eCA9IE5VTEwKKysgKi8KKysgIF9f UHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CisrICBfX1B5 eF9HT1RSRUYoX19weXhfdl9zZWxmLT5jYWxsYmFjayk7CisrICBfX1B5eF9ERUNSRUYoX19weXhf dl9zZWxmLT5jYWxsYmFjayk7CisrICBfX3B5eF92X3NlbGYtPmNhbGxiYWNrID0gUHlfTm9uZTsK KysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTgKKysgKiAgICAgICAg IGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9 IE5vbmUKKysgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBOb25lICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuX2N0eCA9IE5VTEwKKyAgKiAKKy0g KiAgICAgZGVmIHNldF93YWtldXBfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFwczogbXB2X3NldF93YWtldXBf Y2FsbGJhY2siIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKi8KKysgIF9fUHl4 X0lOQ1JFRihQeV9Ob25lKTsKKysgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CisrICBfX1B5eF9H T1RSRUYoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSk7CisrICBfX1B5eF9ERUNSRUYoX19w eXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSk7CisrICBfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJk YXRhID0gUHlfTm9uZTsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 OTkKKysgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lCisrICogICAgICAgICBzZWxmLnJl cGx5X3VzZXJkYXRhID0gTm9uZQorKyAqICAgICAgICAgc2VsZi5fY3R4ID0gTlVMTCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgICMgZGVmIG9wZW5nbF9jYl9hcGko c2VsZik6CisrICovCisrICBfX3B5eF92X3NlbGYtPl9jdHggPSBOVUxMOworKworKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4OAorKyAqICAgICAgICAgcmV0dXJuIGVycgor KyAqIAorKyAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgorKyAqICAgICAgICAgICAg IHJldHVybgorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX3B5eF9y ID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworICAgZ290byBfX3B5eF9MMDsKKyAg IF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKyAgIF9f UHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2LkNvbnRleHQuc2V0X3dha2V1cF9jYWxsYmFjayIsIF9fcHl4X2NsaW5lbm8sIF9f cHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUp OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5zaHV0 ZG93biIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAg X19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9y KTsKK0BAIC0xNDY1MiwzNzQgKzE1MDQwLDQwMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMnNldF93YWtldXBfY2FsbGJhY2socwor ICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3MjgKKy0gKiAgICAgICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9j dHgsIF9jX2NhbGxiYWNrLCA8dm9pZCo+bmFtZSkKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODEzCisrICogICAgICMgICAgIHJldHVybiBjdHgKKysgKiAKKysgKiAgICAgZGVm IF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICBzZWxmLnNodXRkb3duKCkKKyAgKiAKKy0gKiAgICAgZGVmIGdldF93YWtldXBfcGlwZShz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6 IG1wdl9nZXRfd2FrZXVwX3BpcGUiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAg Ki8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM1Z2V0X3dha2V1cF9waXBlKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8q LworLXN0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MzRnZXRfd2FrZXVwX3BpcGVbXSA9ICJXcmFwczogbXB2X2dldF93YWtldXBfcGlwZSI7Cistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzVn ZXRfd2FrZXVwX3BpcGUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9i amVjdCAqdW51c2VkKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7Cisrc3RhdGljIHZvaWQg X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQxX19kZWFsbG9jX18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworK3N0YXRpYyB2b2lkIF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80MV9fZGVhbGxvY19fKFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYpIHsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiZ2V0X3dha2V1cF9waXBlICh3cmFwcGVyKSIsIDApOworLSAgX19w eXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNGdldF93YWtl dXBfcGlwZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQg KilfX3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlYWxs b2NfXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF80MF9fZGVhbGxvY19fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5 eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8zNGdldF93YWtldXBfcGlwZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKy0gIGludCBfX3B5eF92X3Bp cGU7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Cisrc3RhdGljIHZvaWQgX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQwX19kZWFsbG9jX18oc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKSB7CisgICBf X1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7 CisrICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzMg PSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9m aWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiZ2V0X3dha2V1cF9waXBlIiwgMCk7CisrICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18iLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3MzAKKy0gKiAgICAgZGVmIGdldF93YWtldXBfcGlwZShzZWxmKToK Ky0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfZ2V0X3dha2V1cF9waXBlIiIiCistICogICAgICAg ICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIGNkZWYgaW50IHBpcGUKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODE0CisrICogCisrICogICAgIGRlZiBfX2RlYWxsb2Nf XyhzZWxmKToKKysgKiAgICAgICAgIHNlbGYuc2h1dGRvd24oKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogCisrICogY2RlZiB2b2lkICpfY19nZXRwcm9jYWRkcmVzcyh2b2lkICpj dHgsIGNvbnN0IGNoYXIgKm5hbWUpIHdpdGggZ2lsOgorICAqLworLSAgI2lmbmRlZiBDWVRIT05f V0lUSE9VVF9BU1NFUlRJT05TCistICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsK Ky0gICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworLSAgICAg IFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigw LCA3MzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX3NodXRkb3duKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgODE0LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgX19weXhfdF8zID0gTlVMTDsKKysg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfMikpKSB7CisrICAgIF9fcHl4X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7 CisrICAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlv biA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworKyAgICAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzMpOworKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKyAgICAgfQorICAgfQorLSAgI2Vu ZGlmCisrICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF8yLCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4 X3RfMik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4MTQsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczMgorLSAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorLSAqICAgICAgICAgY2RlZiBpbnQgcGlwZQorLSAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgIHBpcGUgPSBtcHZfZ2V0X3dha2V1cF9waXBlKHNlbGYuX2N0eCkKKy0gKiAgICAgICAg IHJldHVybiBwaXBlCistICovCistICB7CistICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAg ICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgUHlfVU5CTE9DS19USFJFQURTCistICAg ICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAgICNlbmRpZgorLSAgICAgIC8qdHJ5 OiovIHsKKy0KKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MzMK Ky0gKiAgICAgICAgIGNkZWYgaW50IHBpcGUKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICog ICAgICAgICAgICAgcGlwZSA9IG1wdl9nZXRfd2FrZXVwX3BpcGUoc2VsZi5fY3R4KSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1cm4gcGlwZQorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxMworKyAqICAgICAjICAgICByZXR1cm4gY3R4 CisrICogCisrICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5zaHV0ZG93bigpCisgICogCisgICovCistICAg ICAgICBfX3B5eF92X3BpcGUgPSBtcHZfZ2V0X3dha2V1cF9waXBlKF9fcHl4X3Zfc2VsZi0+X2N0 eCk7CistICAgICAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3MzIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIGNkZWYgaW50 IHBpcGUKKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICBwaXBlID0gbXB2X2dldF93YWtldXBfcGlwZShzZWxmLl9jdHgp CistICogICAgICAgICByZXR1cm4gcGlwZQorKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisr ICBnb3RvIF9fcHl4X0wwOworKyAgX19weXhfTDFfZXJyb3I6OworKyAgX19QeXhfWERFQ1JFRihf X3B5eF90XzEpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworKyAgX19QeXhfWERFQ1JF RihfX3B5eF90XzMpOworKyAgX19QeXhfV3JpdGVVbnJhaXNhYmxlKCJ2aWRjdXR0ZXIubGlicy5t cHYuQ29udGV4dC5fX2RlYWxsb2NfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19w eXhfZmlsZW5hbWUsIDEsIDApOworKyAgX19weXhfTDA6OworKyAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CisrfQorKworKy8qICIodHJlZSBmcmFnbWVudCkiOjEKKysgKiBkZWYgX19y ZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgcmFpc2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5vbi10cml2 aWFsIF9fY2luaXRfXyIpCisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhf c3RhdGUpOgorICAqLworLSAgICAgIC8qZmluYWxseToqLyB7CistICAgICAgICAvKm5vcm1hbCBl eGl0OioveworLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAgICAgX19QeXhf RmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworLSAgICAgICAg ICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNTsKKy0gICAgICAgIH0KKy0gICAgICAg IF9fcHl4X0w1OjsKKy0gICAgICB9CistICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzM0CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAg IHBpcGUgPSBtcHZfZ2V0X3dha2V1cF9waXBlKHNlbGYuX2N0eCkKKy0gKiAgICAgICAgIHJldHVy biBwaXBlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgZGVmIF9f Y2luaXRfXyhzZWxmKToKKysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQzX19yZWR1Y2VfY3l0aG9u X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2Vk KTsgLypwcm90byovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfNDNfX3JlZHVjZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxm LCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9y ID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9y ID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQyX19yZWR1Y2VfY3l0 aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICop X19weXhfdl9zZWxmKSk7CisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQy X19yZWR1Y2VfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKysgIFB5T2JqZWN0ICpfX3B5 eF9yID0gTlVMTDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBQeU9iamVjdCAq X19weXhfdF8xID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAwOworKyAgY29uc3QgY2hh ciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fIiwgMCk7CisrCisr ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoyCisrICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYp OgorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2VfXyBkdWUgdG8g bm9uLXRyaXZpYWwgX19jaW5pdF9fIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq IGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgcmFp c2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5vbi10cml2aWFsIF9f Y2luaXRfXyIpCisgICovCistICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8x ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9waXBlKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNzM0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9 IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3IsIF9fcHl4X3R1cGxl X18zLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMiwgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3IgPSBf X3B5eF90XzE7CistICBfX3B5eF90XzEgPSAwOworLSAgZ290byBfX3B5eF9MMDsKKysgIF9fUHl4 X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKysgIF9fUFlYX0VSUigxLCAyLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjgKKy0gKiAgICAgICAgICAgICBt cHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9jdHgsIF9jX2NhbGxiYWNrLCA8dm9pZCo+bmFt ZSkKKy0gKiAKKy0gKiAgICAgZGVmIGdldF93YWtldXBfcGlwZShzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9nZXRfd2FrZXVwX3Bp cGUiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgIC8qICIodHJlZSBmcmFnbWVu dCkiOjEKKysgKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNl X18gZHVlIHRvIG5vbi10cml2aWFsIF9fY2luaXRfXyIpCisrICogZGVmIF9fc2V0c3RhdGVfY3l0 aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCisgICBfX3B5eF9MMV9lcnJvcjo7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7 CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmdldF93 YWtldXBfcGlwZSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5fX3Jl ZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOworICAgX19weXhfciA9IE5VTEw7CistICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJF RihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJu IF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MzYK Ky0gKiAgICAgICAgIHJldHVybiBwaXBlCistICogCistICogICAgIGRlZiBfX2Npbml0X18oc2Vs Zik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgdWludDY0 X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2VsZikKKy0gKiAgICAgICAgIHdpdGggbm9naWw6Cisr LyogIih0cmVlIGZyYWdtZW50KSI6MworKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToK KysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5v bi10cml2aWFsIF9fY2luaXRfXyIpCisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwg X19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHJhaXNl IFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Np bml0X18iKQorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIGludCBfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzdfX2Npbml0X18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2Rz KTsgLypwcm90byovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMzdfX2Npbml0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CistICBpbnQgX19weXhfcjsKKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80NV9f c2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3ZfX19weXhfc3RhdGUpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80NV9fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKysgIFB5 T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19jaW5pdF9fICh3cmFwcGVyKSIsIDApOworLSAg aWYgKHVubGlrZWx5KFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgPiAwKSkgeworLSAgICBf X1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19jaW5pdF9fIiwgMSwgMCwgMCwgUHlUdXBsZV9H RVRfU0laRShfX3B5eF9hcmdzKSk7IHJldHVybiAtMTt9CistICBpZiAodW5saWtlbHkoX19weXhf a3dkcykgJiYgdW5saWtlbHkoUHlEaWN0X1NpemUoX19weXhfa3dkcykgPiAwKSAmJiB1bmxpa2Vs eSghX19QeXhfQ2hlY2tLZXl3b3JkU3RyaW5ncyhfX3B5eF9rd2RzLCAiX19jaW5pdF9fIiwgMCkp KSByZXR1cm4gLTE7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzM2X19jaW5pdF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ0X19zZXRzdGF0ZV9jeXRo b25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilf X3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOworIAorICAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNl9fY2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKy0gIHVpbnQ2NF90 IF9fcHl4X3ZfY3R4aWQ7CistICBpbnQgX19weXhfcjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80NF9fc2V0c3RhdGVfY3l0aG9uX18o Q1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf c3RhdGUpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIHVpbnQ2NF90 IF9fcHl4X3RfMjsKKy0gIGludCBfX3B5eF90XzM7CistICBQeU9iamVjdCAqX19weXhfdF80ID0g TlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVu byA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19jaW5pdF9f IiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25f XyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczNworLSAq IAorLSAqICAgICBkZWYgX19jaW5pdF9fKHNlbGYpOgorLSAqICAgICAgICAgY2RlZiB1aW50NjRf dCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIHNlbGYuX2N0eCA9IG1w dl9jcmVhdGUoKQorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6NAorKyAqICAgICByYWlzZSBUeXBl RXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9f IikKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CisrICog ICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJp dmlhbCBfX2Npbml0X18iKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICovCistICBf X3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5faWQsICgo UHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgNzM3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2Jq ZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3IsIF9fcHl4X3R1cGxlX180LCBOVUxMKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgNCwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50 X0FzX3VpbnQ2NF90KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09ICgodWlu dDY0X3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDczNywgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOworICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX3B5eF92X2N0eGlkID0gKCh1 aW50NjRfdClfX3B5eF90XzIpOworKyAgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vycm9yKQor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczOAorLSAqICAgICBkZWYg X19jaW5pdF9fKHNlbGYpOgorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50 NjRfdD5pZChzZWxmKQorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHNlbGYuX2N0eCA9IG1wdl9jcmVhdGUoKQorLSAq ICAgICAgICAgaWYgbm90IHNlbGYuX2N0eDoKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjMKKysg KiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigi bm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKQorKyAq IGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19y ZWR1Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikKKyAgKi8KKy0gIHsKKy0gICAg ICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKy0gICAg ICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Cist ICAgICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjczOQorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhp ZCA9IDx1aW50NjRfdD5pZChzZWxmKQorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAg ICAgICAgICBzZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgaWYgbm90IHNlbGYuX2N0eDoKKy0gKiAgICAgICAgICAgICByYWlz ZSBNUFZFcnJvcigiQ29udGV4dCBjcmVhdGlvbiBlcnJvciIpCisrICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KKysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8x KTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX19z ZXRzdGF0ZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUpOworKyAgX19weXhfciA9IE5VTEw7CisrICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsK KysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7Cisr fQorKworKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MTYKKysgKiAgICAgICAg IHNlbGYuc2h1dGRvd24oKQorKyAqIAorKyAqIGNkZWYgdm9pZCAqX2NfZ2V0cHJvY2FkZHJlc3Mo dm9pZCAqY3R4LCBjb25zdCBjaGFyICpuYW1lKSB3aXRoIGdpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICByZXR1cm4gPHZvaWQgKj48aW50cHRyX3Q+KDxvYmplY3Q+Y3R4 KShuYW1lKQorKyAqIAorICAqLworLSAgICAgICAgX19weXhfdl9zZWxmLT5fY3R4ID0gbXB2X2Ny ZWF0ZSgpOworLSAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NzM4CistICogICAgIGRlZiBfX2Npbml0X18oc2VsZik6CistICogICAgICAgICBjZGVm IHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCistICogICAgICAgICB3aXRoIG5v Z2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgc2VsZi5f Y3R4ID0gbXB2X2NyZWF0ZSgpCistICogICAgICAgICBpZiBub3Qgc2VsZi5fY3R4OgorK3N0YXRp YyB2b2lkICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY19nZXRwcm9jYWRkcmVzcyh2 b2lkICpfX3B5eF92X2N0eCwgY2hhciBjb25zdCAqX19weXhfdl9uYW1lKSB7CisrICB2b2lkICpf X3B5eF9yOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIFB5T2JqZWN0ICpfX3B5 eF90XzEgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVj dCAqX19weXhfdF8zID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAg aW50cHRyX3QgX19weXhfdF81OworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBj aGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cisr ICAjaWZkZWYgV0lUSF9USFJFQUQKKysgIFB5R0lMU3RhdGVfU1RBVEUgX19weXhfZ2lsc3RhdGVf c2F2ZSA9IF9fUHl4X1B5R0lMU3RhdGVfRW5zdXJlKCk7CisrICAjZW5kaWYKKysgIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfY19nZXRwcm9jYWRkcmVzcyIsIDApOworKworKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNworKyAqIAorKyAqIGNkZWYgdm9pZCAqX2Nf Z2V0cHJvY2FkZHJlc3Modm9pZCAqY3R4LCBjb25zdCBjaGFyICpuYW1lKSB3aXRoIGdpbDoKKysg KiAgICAgcmV0dXJuIDx2b2lkICo+PGludHB0cl90Pig8b2JqZWN0PmN0eCkobmFtZSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAqIGNkZWYgdm9pZCBfY191cGRhdGVjYih2 b2lkICpjdHgpIHdpdGggZ2lsOgorICAqLworLSAgICAgIC8qZmluYWxseToqLyB7CistICAgICAg ICAvKm5vcm1hbCBleGl0OioveworLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAg ICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFE UworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNTsKKy0gICAgICAg IH0KKy0gICAgICAgIF9fcHl4X0w1OjsKKy0gICAgICB9CisrICBfX3B5eF90XzIgPSBfX1B5eF9Q eUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgODE3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworKyAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilfX3B5eF92X2N0eCkpOworKyAg X19weXhfdF8zID0gKChQeU9iamVjdCAqKV9fcHl4X3ZfY3R4KTsgX19weXhfdF80ID0gTlVMTDsK KysgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF8zKSkpIHsKKysgICAgX19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhf dF8zKTsKKysgICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1 bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMyk7CisrICAgICAgX19QeXhf SU5DUkVGKF9fcHl4X3RfNCk7CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAg ICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywgZnVuY3Rpb24pOworKyAgICB9CisgICB9Cisr ICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzMsIF9fcHl4X3RfNCwgX19weXhfdF8yKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8zLCBfX3B5eF90XzIpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5 eF90XzQgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisr ICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4MTcsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhf dF8zKTsgX19weXhfdF8zID0gMDsKKysgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0FzX2ludHB0 cl90KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF81ID09ICgoaW50cHRyX3QpLTEp KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDgxNywgX19weXhfTDFfZXJyb3Ip CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9fcHl4X3Ig PSAoKHZvaWQgKikoKGludHB0cl90KV9fcHl4X3RfNSkpOworKyAgZ290byBfX3B5eF9MMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDAKKy0gKiAgICAgICAgIHdp dGggbm9naWw6CistICogICAgICAgICAgICAgc2VsZi5fY3R4ID0gbXB2X2NyZWF0ZSgpCistICog ICAgICAgICBpZiBub3Qgc2VsZi5fY3R4OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3IiKQor LSAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZCA9IENhbGxiYWNrVGhyZWFkKCkKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MTYKKysgKiAgICAgICAgIHNlbGYuc2h1 dGRvd24oKQorKyAqIAorKyAqIGNkZWYgdm9pZCAqX2NfZ2V0cHJvY2FkZHJlc3Modm9pZCAqY3R4 LCBjb25zdCBjaGFyICpuYW1lKSB3aXRoIGdpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICByZXR1cm4gPHZvaWQgKj48aW50cHRyX3Q+KDxvYmplY3Q+Y3R4KShuYW1lKQor KyAqIAorICAqLworLSAgX19weXhfdF8zID0gKCghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkg IT0gMCk7CistICBpZiAodW5saWtlbHkoX19weXhfdF8zKSkgeworIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQxCistICogICAgICAgICAgICAgc2VsZi5fY3R4ID0g bXB2X2NyZWF0ZSgpCistICogICAgICAgICBpZiBub3Qgc2VsZi5fY3R4OgorLSAqICAgICAgICAg ICAgIHJhaXNlIE1QVkVycm9yKCJDb250ZXh0IGNyZWF0aW9uIGVycm9yIikgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZCA9IENhbGxi YWNrVGhyZWFkKCkKKy0gKiAgICAgICAgIF9jYWxsYmFja3NbY3R4aWRdID0gc2VsZi5jYWxsYmFj a3RocmVhZAorLSAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwg X19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIo MCwgNzQxLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Cist ICAgIF9fcHl4X3RfNSA9IE5VTEw7CistICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg dW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKKy0gICAgICBfX3B5eF90XzUg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzQpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhf dF81KSkgeworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfNCk7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKy0gICAg ICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfNCwgZnVuY3Rpb24pOworLSAgICAgIH0KKy0gICAgfQorLSAgICBfX3B5eF90XzEgPSAo X19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzQsIF9fcHl4X3Rf NSwgX19weXhfa3Bfc19Db250ZXh0X2NyZWF0aW9uX2Vycm9yKSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF80LCBfX3B5eF9rcF9zX0NvbnRleHRfY3JlYXRpb25fZXJyb3IpOwor LSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CistICAgIGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDc0MSwgX19weXhfTDFfZXJyb3IpCist ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKKy0gICAgX19QeXhfUmFpc2UoX19weXhfdF8xLCAwLCAwLCAwKTsK Ky0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fUFlY X0VSUigwLCA3NDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICov CisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Cisr ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CisrICBfX1B5eF9Xcml0ZVVucmFpc2FibGUoInZp ZGN1dHRlci5saWJzLm1wdi5fY19nZXRwcm9jYWRkcmVzcyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUsIDEsIDApOworKyAgX19weXhfciA9IDA7CisrICBfX3B5 eF9MMDo7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgICNpZmRlZiBXSVRI X1RIUkVBRAorKyAgX19QeXhfUHlHSUxTdGF0ZV9SZWxlYXNlKF9fcHl4X2dpbHN0YXRlX3NhdmUp OworKyAgI2VuZGlmCisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDAKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICog ICAgICAgICAgICAgc2VsZi5fY3R4ID0gbXB2X2NyZWF0ZSgpCistICogICAgICAgICBpZiBub3Qg c2VsZi5fY3R4OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg cmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3IiKQorLSAqICAgICAgICAgc2Vs Zi5jYWxsYmFja3RocmVhZCA9IENhbGxiYWNrVGhyZWFkKCkKKysvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODE5CisrICogICAgIHJldHVybiA8dm9pZCAqPjxpbnRwdHJfdD4oPG9i amVjdD5jdHgpKG5hbWUpCisrICogCisrICogY2RlZiB2b2lkIF9jX3VwZGF0ZWNiKHZvaWQgKmN0 eCkgd2l0aCBnaWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgKDxvYmpl Y3Q+Y3R4KSgpCisrICogCisgICovCistICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzQyCistICogICAgICAgICBpZiBub3Qgc2VsZi5fY3R4OgorLSAqICAgICAg ICAgICAgIHJhaXNlIE1QVkVycm9yKCJDb250ZXh0IGNyZWF0aW9uIGVycm9yIikKKy0gKiAgICAg ICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQgPSBDYWxsYmFja1RocmVhZCgpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIF9jYWxsYmFja3NbY3R4aWRdID0gc2VsZi5jYWxs YmFja3RocmVhZAorLSAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IGRpY3QoKQorK3N0 YXRpYyB2b2lkIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX3VwZGF0ZWNiKHZvaWQg Kl9fcHl4X3ZfY3R4KSB7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgUHlPYmpl Y3QgKl9fcHl4X3RfMSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKysg IFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisr ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVu byA9IDA7CisrICAjaWZkZWYgV0lUSF9USFJFQUQKKysgIFB5R0lMU3RhdGVfU1RBVEUgX19weXhf Z2lsc3RhdGVfc2F2ZSA9IF9fUHl4X1B5R0lMU3RhdGVfRW5zdXJlKCk7CisrICAjZW5kaWYKKysg IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfY191cGRhdGVjYiIsIDApOworKworKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgyMAorKyAqIAorKyAqIGNkZWYgdm9pZCBf Y191cGRhdGVjYih2b2lkICpjdHgpIHdpdGggZ2lsOgorKyAqICAgICAoPG9iamVjdD5jdHgpKCkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAqICMgY2RlZiBjbGFzcyBPcGVu R0xDb250ZXh0KG9iamVjdCk6CisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9f cHl4X3RfNCwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzQpKSBfX1BZWF9FUlIoMCwgNzQyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOworLSAgX19weXhfdF81ID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKKy0gICAgX19w eXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF80KTsKKy0gICAgaWYgKGxpa2VseShf X3B5eF90XzUpKSB7CistICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZV TkNUSU9OKF9fcHl4X3RfNCk7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7CisrICBf X1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKV9fcHl4X3ZfY3R4KSk7CisrICBfX3B5eF90XzIgPSAo KFB5T2JqZWN0ICopX19weXhfdl9jdHgpOyBfX3B5eF90XzMgPSBOVUxMOworKyAgaWYgKENZVEhP Tl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkg eworKyAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICBp ZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1l dGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhf dF8zKTsKKyAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JF Rl9TRVQoX19weXhfdF80LCBmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzIsIGZ1bmN0aW9uKTsKKyAgICAgfQorICAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3Rf NSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNCwgX19weXhfdF81KSA6IF9f UHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzQpOworLSAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzUpOyBfX3B5eF90XzUgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgNzQyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMp ID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5 eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dF8zKTsgX19weXhfdF8zID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDgyMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgX19QeXhfR0lW RVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0 aHJlYWQpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQpOwor LSAgX19weXhfdl9zZWxmLT5jYWxsYmFja3RocmVhZCA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3Rf MSA9IDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQzCistICog ICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3IiKQorLSAq ICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZCA9IENhbGxiYWNrVGhyZWFkKCkKKy0gKiAgICAg ICAgIF9jYWxsYmFja3NbY3R4aWRdID0gc2VsZi5jYWxsYmFja3RocmVhZCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gZGljdCgp CistICogICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXSA9IHNlbGYucmVwbHlfdXNlcmRh dGEKKy0gKi8KKy0gIF9fcHl4X3RfMSA9IF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQ7Cist ICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKy0gIGlmICh1bmxpa2VseShfX1B5eF9TZXRJdGVt SW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3ZfY3R4 aWQsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAs IDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA3NDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf REVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3NDQKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQgPSBDYWxsYmFja1RocmVh ZCgpCistICogICAgICAgICBfY2FsbGJhY2tzW2N0eGlkXSA9IHNlbGYuY2FsbGJhY2t0aHJlYWQK Ky0gKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBkaWN0KCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0gPSBzZWxm LnJlcGx5X3VzZXJkYXRhCistICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnN0YXJ0KCkK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MTkKKysgKiAgICAgcmV0dXJu IDx2b2lkICo+PGludHB0cl90Pig8b2JqZWN0PmN0eCkobmFtZSkKKysgKiAKKysgKiBjZGVmIHZv aWQgX2NfdXBkYXRlY2Iodm9pZCAqY3R4KSB3aXRoIGdpbDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAoPG9iamVjdD5jdHgpKCkKKysgKiAKKyAgKi8KKy0gIF9fcHl4X3Rf MSA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgNzQ0LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVGKF9f cHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2Vs Zi0+cmVwbHlfdXNlcmRhdGEpOworLSAgX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSA9IF9f cHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzQ1CistICogICAgICAgICBfY2FsbGJhY2tzW2N0eGlkXSA9IHNlbGYuY2Fs bGJhY2t0aHJlYWQKKy0gKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBkaWN0KCkKKy0g KiAgICAgICAgIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdID0gc2VsZi5yZXBseV91c2VyZGF0YSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhy ZWFkLnN0YXJ0KCkKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgZ290byBfX3B5eF9M MDsKKysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsK KysgIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0dGVyLmxpYnMubXB2Ll9jX3VwZGF0ZWNi IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSwgMSwgMCk7Cisr ICBfX3B5eF9MMDo7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgICNpZmRl ZiBXSVRIX1RIUkVBRAorKyAgX19QeXhfUHlHSUxTdGF0ZV9SZWxlYXNlKF9fcHl4X2dpbHN0YXRl X3NhdmUpOworKyAgI2VuZGlmCisrfQorKworKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo4ODYKKysgKiAgICAgICAgIG9iamVjdCBvd25lZAorICAqIAorKyAqICAgICBkZWYgX19p bml0X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNl bGYub3duZWQgPSBbXQorKyAqICAgICAgICAgc2VsZi5wYXJhbXNbMF0udHlwZSA9IE1QVl9SRU5E RVJfUEFSQU1fSU5WQUxJRAorICAqLworLSAgX19weXhfdF8xID0gX19weXhfdl9zZWxmLT5yZXBs eV91c2VyZGF0YTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworLSAgaWYgKHVubGlrZWx5 KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3Vz ZXJkYXRhcywgX19weXhfdl9jdHhpZCwgX19weXhfdF8xLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJ bnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc0NSwgX19weXhf TDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDYKKy0gKiAgICAgICAgIHNl bGYucmVwbHlfdXNlcmRhdGEgPSBkaWN0KCkKKy0gKiAgICAgICAgIF9yZXBseV91c2VyZGF0YXNb Y3R4aWRdID0gc2VsZi5yZXBseV91c2VyZGF0YQorLSAqICAgICAgICAgc2VsZi5jYWxsYmFja3Ro cmVhZC5zdGFydCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysvKiBQeXRob24gd3Jh cHBlciAqLworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1Jl bmRlclBhcmFtc18xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisrc3RhdGljIGludCBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzFfX2luaXRfXyhQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9f cHl4X2t3ZHMpIHsKKysgIGludCBfX3B5eF9yOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlv bnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyAod3JhcHBlcikiLCAw KTsKKysgIGlmICh1bmxpa2VseShQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpID4gMCkpIHsK KysgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMSwgMCwgMCwgUHlU dXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IHJldHVybiAtMTt9CisrICBpZiAodW5saWtlbHko X19weXhfa3dkcykgJiYgdW5saWtlbHkoUHlEaWN0X1NpemUoX19weXhfa3dkcykgPiAwKSAmJiB1 bmxpa2VseSghX19QeXhfQ2hlY2tLZXl3b3JkU3RyaW5ncyhfX3B5eF9rd2RzLCAiX19pbml0X18i LCAwKSkpIHJldHVybiAtMTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNfUmVuZGVyUGFyYW1zX19faW5pdF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3Zfc2VsZikpOworKworKyAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsK KysgIHJldHVybiBfX3B5eF9yOworK30KKysKKytzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfX19pbml0X18oc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqX19weXhfdl9zZWxmKSB7CisrICBp bnQgX19weXhfcjsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBQeU9iamVjdCAq X19weXhfdF8xID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAwOworKyAgY29uc3QgY2hh ciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fIiwgMCk7CisrCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODg3CisrICogCisrICogICAgIGRlZiBfX2luaXRf XyhzZWxmKToKKysgKiAgICAgICAgIHNlbGYub3duZWQgPSBbXSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLnBhcmFtc1swXS50eXBlID0gTVBWX1JFTkRFUl9Q QVJBTV9JTlZBTElECisgICogCistICogICAgIEBfZXJyb3JzCisgICovCistICBfX3B5eF90XzQg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQs IF9fcHl4X25fc19zdGFydCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAs IDc0NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gIF9f cHl4X3RfNSA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQ eU1ldGhvZF9DaGVjayhfX3B5eF90XzQpKSkgeworLSAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9H RVRfU0VMRihfX3B5eF90XzQpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfNSkpIHsKKy0gICAg ICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF80KTsK Ky0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVu Y3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF80LCBmdW5jdGlvbik7Cist ICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9B cmcoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0g MDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDc0NiwgX19weXhf TDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBQeUxpc3RfTmV3KDApOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4ODcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19QeXhf R0lWRVJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+b3duZWQp OworKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+b3duZWQpOworKyAgX19weXhfdl9zZWxm LT5vd25lZCA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzM2CistICogICAgICAgICByZXR1cm4gcGlwZQorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4OAorKyAqICAgICBkZWYgX19pbml0 X18oc2VsZik6CisrICogICAgICAgICBzZWxmLm93bmVkID0gW10KKysgKiAgICAgICAgIHNlbGYu cGFyYW1zWzBdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqIAorLSAqICAgICBkZWYgX19jaW5pdF9fKHNlbGYpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0g PHVpbnQ2NF90PmlkKHNlbGYpCistICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICBjZGVm IGFkZF92b2lkcChzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgdm9pZCAqcCwgYmludCBv d25lZD1GYWxzZSk6CisrICovCisrICAoX19weXhfdl9zZWxmLT5wYXJhbXNbMF0pLnR5cGUgPSBN UFZfUkVOREVSX1BBUkFNX0lOVkFMSUQ7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODg2CisrICogICAgICAgICBvYmplY3Qgb3duZWQKKysgKiAKKysgKiAgICAgZGVm IF9faW5pdF9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICBzZWxmLm93bmVkID0gW10KKysgKiAgICAgICAgIHNlbGYucGFyYW1zWzBdLnR5cGUgPSBNUFZf UkVOREVSX1BBUkFNX0lOVkFMSUQKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LworQEAgLTE1MDI3LDEwOTQgKzE1NDQ0LDQ3OSBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNl9fY2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXwor ICAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wxX2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdF81KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2 LkNvbnRleHQuX19jaW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVu ZGVyUGFyYW1zLl9faW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSk7CisgICBfX3B5eF9yID0gLTE7CisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQ5CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjg5MAorKyAqICAgICAgICAgc2VsZi5wYXJhbXNbMF0udHlwZSA9IE1QVl9SRU5E RVJfUEFSQU1fSU5WQUxJRAorICAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgb2Jz ZXJ2ZV9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVfcHJvcGVydHkiIiIK Ky0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgY2RlZiBhZGRfdm9pZHAoc2Vs ZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFsc2UpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjb3VudCA9IGxlbihzZWxm Lm93bmVkKQorKyAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJBTVM6CisgICov CisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zOW9ic2VydmVfcHJvcGVydHkoUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2Rz KTsgLypwcm90byovCistc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8zOG9ic2VydmVfcHJvcGVydHlbXSA9ICJXcmFwczogbXB2X29ic2VydmVfcHJv cGVydHkiOworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzM5b2JzZXJ2ZV9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKy0gIFB5T2JqZWN0ICpf X3B5eF92X3Byb3AgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSA9IDA7CistICBpbnQg X19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsK Ky0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0g IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgib2JzZXJ2ZV9wcm9wZXJ0eSAod3JhcHBlcikiLCAwKTsKKy0gIHsKKy0gICAgc3RhdGljIFB5 T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfcHJvcCwmX19weXhfbl9z X2RhdGEsMH07CistICAgIFB5T2JqZWN0KiB2YWx1ZXNbMl0gPSB7MCwwfTsKKy0gICAgdmFsdWVz WzFdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOworLSAgICBpZiAodW5saWtlbHkoX19weXhfa3dk cykpIHsKKy0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAgY29uc3QgUHlfc3NpemVf dCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CistICAgICAgc3dpdGNo IChwb3NfYXJncykgeworLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRf SVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAg ICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7 CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAwOiBicmVhazsK Ky0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAg fQorLSAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0 Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNlICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgo dmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9z X3Byb3ApKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1X2Fy Z3R1cGxlX2Vycm9yOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2Fz ZSAgMToKKy0gICAgICAgIGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCog dmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZGF0 YSk7CistICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNbMV0gPSB2YWx1ZTsga3dfYXJncy0t OyB9CistICAgICAgICB9CistICAgICAgfQorLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4g MCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMo X19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIm9ic2Vy dmVfcHJvcGVydHkiKSA8IDApKSBfX1BZWF9FUlIoMCwgNzQ5LCBfX3B5eF9MM19lcnJvcikKKy0g ICAgICB9CistICAgIH0gZWxzZSB7CistICAgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9TSVpFKF9f cHl4X2FyZ3MpKSB7CistICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9J VEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAg ICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsK Ky0gICAgICAgIGJyZWFrOworLSAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBs ZV9lcnJvcjsKKy0gICAgICB9CistICAgIH0KKy0gICAgX19weXhfdl9wcm9wID0gdmFsdWVzWzBd OworLSAgICBfX3B5eF92X2RhdGEgPSB2YWx1ZXNbMV07CistICB9CistICBnb3RvIF9fcHl4X0w0 X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworLSAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6Owor LSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIm9ic2VydmVfcHJvcGVydHkiLCAwLCAxLCAy LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDc0OSwgX19weXhf TDNfZXJyb3IpCistICBfX3B5eF9MM19lcnJvcjo7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5Db250ZXh0Lm9ic2VydmVfcHJvcGVydHkiLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOworLSAgcmV0dXJuIE5VTEw7CistICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tp bmdfZG9uZTo7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzM4b2JzZXJ2ZV9wcm9wZXJ0eSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X3Byb3AsIF9fcHl4X3Zf ZGF0YSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4b2JzZXJ2ZV9w cm9wZXJ0eShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X2Rh dGEpIHsKKy0gIHVpbnQ2NF90IF9fcHl4X3ZfaWRfZGF0YTsKKy0gIFB5T2JqZWN0ICpfX3B5eF92 X3VzZXJkYXRhcyA9IE5VTEw7CistICBjaGFyICpfX3B5eF92X3Byb3BjOworLSAgaW50IF9fcHl4 X3ZfZXJyOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNfUmVuZGVyUGFyYW1zX2FkZF92b2lkcChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fUmVuZGVyUGFyYW1zICpfX3B5eF92X3NlbGYsIGVudW0gbXB2X3JlbmRlcl9wYXJh bV90eXBlIF9fcHl4X3ZfdCwgdm9pZCAqX19weXhfdl9wLCBzdHJ1Y3QgX19weXhfb3B0X2FyZ3Nf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfdm9pZHAgKl9fcHl4X29w dGlvbmFsX2FyZ3MpIHsKKysgIGludCBfX3B5eF92X293bmVkID0gKChpbnQpMCk7CisrICBQeU9i amVjdCAqX19weXhfdl9jb3VudCA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7 CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlfaGFzaF90IF9fcHl4X3RfMTsK Ky0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9 IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIFB5X3NzaXplX3QgX19w eXhfdF8yOworKyAgaW50IF9fcHl4X3RfMzsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxM OworICAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CisgICBpbnQgX19weXhfdF82OworLSAg UHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CistICBpbnQgX19weXhfdF84OworLSAgaW50IF9f cHl4X3RfOTsKKy0gIGNoYXIgKl9fcHl4X3RfMTA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsK KyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGlu ZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJvYnNlcnZlX3Byb3BlcnR5 IiwgMCk7CistICBfX1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKKy0KKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTEKKy0gKiAgICAgZGVmIG9ic2VydmVfcHJvcGVydHko c2VsZiwgcHJvcCwgZGF0YT1Ob25lKToKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfb2JzZXJ2 ZV9wcm9wZXJ0eSIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWlu dDY0X3Q+aGFzaChkYXRhKQorLSAqICAgICAgICAgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRh dGEpCistICovCistICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VSVElPTlMKKy0gIGlmICh1 bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworLSAgICBpZiAodW5saWtlbHkoIShfX3B5eF92 X3NlbGYtPl9jdHggIT0gMCkpKSB7CistICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRp b25FcnJvcik7CistICAgICAgX19QWVhfRVJSKDAsIDc1MSwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiYWRkX3ZvaWRwIiwgMCk7CisrICBpZiAoX19weXhf b3B0aW9uYWxfYXJncykgeworKyAgICBpZiAoX19weXhfb3B0aW9uYWxfYXJncy0+X19weXhfbiA+ IDApIHsKKysgICAgICBfX3B5eF92X293bmVkID0gX19weXhfb3B0aW9uYWxfYXJncy0+b3duZWQ7 CisgICAgIH0KKyAgIH0KKy0gICNlbmRpZgorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjc1MgorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9vYnNlcnZlX3Byb3BlcnR5 IiIiCistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAgICBjZGVmIHVpbnQ2 NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKy0gKiAg ICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUp CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODkxCisrICogCisrICogICAg IGNkZWYgYWRkX3ZvaWRwKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSB0LCB2b2lkICpwLCBi aW50IG93bmVkPUZhbHNlKToKKysgKiAgICAgICAgIGNvdW50ID0gbGVuKHNlbGYub3duZWQpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIGNvdW50ID49IE1BWF9S RU5ERVJfUEFSQU1TOgorKyAqICAgICAgICAgICAgIGlmIG93bmVkOgorICAqLworLSAgX19weXhf dF8xID0gUHlPYmplY3RfSGFzaChfX3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF8x ID09ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlYX0VSUigwLCA3NTIsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19weXhfdl9pZF9kYXRhID0gKCh1aW50NjRfdClfX3B5eF90XzEpOworKyAgX19weXhfdF8x ID0gX19weXhfdl9zZWxmLT5vd25lZDsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAg X19weXhfdF8yID0gUHlPYmplY3RfTGVuZ3RoKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5 eF90XzIgPT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VSUigwLCA4OTEsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX3B5 eF90XzEgPSBQeUludF9Gcm9tU3NpemVfdChfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCA4OTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7CisrICBfX3B5eF92X2NvdW50ID0gX19weXhfdF8xOworKyAgX19weXhfdF8x ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTMKKy0gKiAg ICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0 YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCistICogICAgICAgICBpZF9kYXRhID0gPHVpbnQ2NF90 Pmhhc2goZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgdXNl cmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKy0gKiAgICAg ICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjg5MgorKyAqICAgICBjZGVmIGFkZF92b2lkcChzZWxmLCBtcHZfcmVuZGVyX3BhcmFt X3R5cGUgdCwgdm9pZCAqcCwgYmludCBvd25lZD1GYWxzZSk6CisrICogICAgICAgICBjb3VudCA9 IGxlbihzZWxmLm93bmVkKQorKyAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJB TVM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBpZiBvd25l ZDoKKysgKiAgICAgICAgICAgICAgICAgZnJlZShwKQorICAqLworLSAgX19weXhfdF8xID0gUHlP YmplY3RfSGFzaChfX3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF8xID09ICgoUHlf aGFzaF90KS0xKSkpIF9fUFlYX0VSUigwLCA3NTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhf dl9pZF9kYXRhID0gKCh1aW50NjRfdClfX3B5eF90XzEpOworKyAgX19weXhfdF8xID0gUHlPYmpl Y3RfUmljaENvbXBhcmUoX19weXhfdl9jb3VudCwgX19weXhfaW50XzMyLCBQeV9HRSk7IF9fUHl4 X1hHT1RSRUYoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgODkyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0lz VHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlYX0VSUigw LCA4OTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4 X3RfMSA9IDA7CisrICBpZiAoX19weXhfdF8zKSB7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzU0CistICogICAgICAgICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8 dWludDY0X3Q+aGFzaChkYXRhKQorLSAqICAgICAgICAgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNo KGRhdGEpCistICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChp ZF9kYXRhLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBp ZiB1c2VyZGF0YXMgaXMgTm9uZToKKy0gKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRh W2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5MworKyAqICAgICAgICAgY291bnQgPSBsZW4o c2VsZi5vd25lZCkKKysgKiAgICAgICAgIGlmIGNvdW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOgor KyAqICAgICAgICAgICAgIGlmIG93bmVkOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICAgICAgICAgIGZyZWUocCkKKysgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVy cm9yKCJSZW5kZXJQYXJhbXMgb3ZlcmZsb3ciKQorICAqLworLSAgX19weXhfdF8zID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF9u X3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgX19weXhfdF80ID0g X19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5eF92X2lkX2RhdGEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhf R09UUkVGKF9fcHl4X3RfNCk7CistICBfX3B5eF90XzUgPSBOVUxMOworLSAgX19weXhfdF82ID0g MDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNr KF9fcHl4X3RfMykpKSB7CistICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfMyk7CistICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgeworLSAgICAgIFB5T2JqZWN0KiBm dW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOworLSAgICAgIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzUpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAg ICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKy0gICAgICBfX3B5eF90 XzYgPSAxOworLSAgICB9CistICB9CistICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCistICBpZiAo UHlGdW5jdGlvbl9DaGVjayhfX3B5eF90XzMpKSB7CistICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1w WzNdID0ge19fcHl4X3RfNSwgX19weXhfdF80LCBQeV9Ob25lfTsKKy0gICAgX19weXhfdF8yID0g X19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1fX3B5eF90 XzYsIDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg NzU0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5 eF90XzUgPSAwOworLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICB9IGVsc2UKKy0gICNlbmRpZgorLSAg I2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwKKy0gIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hl Y2soX19weXhfdF8zKSkgeworLSAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90 XzUsIF9fcHl4X3RfNCwgUHlfTm9uZX07CistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Q0Z1bmN0 aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90 XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NTQsIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Cist ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKKy0gIH0gZWxzZQorLSAgI2VuZGlmCistICB7CistICAgIF9fcHl4 X3RfNyA9IFB5VHVwbGVfTmV3KDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90Xzcp KSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNyk7CistICAgIGlmIChfX3B5eF90XzUpIHsKKy0gICAgICBfX1B5eF9HSVZFUkVGKF9f cHl4X3RfNSk7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCBfX3B5eF90XzUpOyBfX3B5 eF90XzUgPSBOVUxMOworLSAgICB9CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF80KTsKKy0g ICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDArX19weXhfdF82LCBfX3B5eF90XzQpOwor LSAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7 CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfNiwgUHlfTm9uZSk7 CistICAgIF9fcHl4X3RfNCA9IDA7CistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0Nh bGwoX19weXhfdF8zLCBfX3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCA3NTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Cist ICB9CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIF9fcHl4 X3ZfdXNlcmRhdGFzID0gX19weXhfdF8yOworLSAgX19weXhfdF8yID0gMDsKKysgICAgX19weXhf dF8zID0gKF9fcHl4X3Zfb3duZWQgIT0gMCk7CisrICAgIGlmIChfX3B5eF90XzMpIHsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTUKKy0gKiAgICAgICAgIGlkX2Rh dGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorLSAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5y ZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKy0gKiAgICAgICAgIGlmIHVzZXJkYXRh cyBpcyBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg c2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRh KGRhdGEpCistICogICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlCisrICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5NAorKyAqICAgICAgICAgaWYgY291bnQg Pj0gTUFYX1JFTkRFUl9QQVJBTVM6CisrICogICAgICAgICAgICAgaWYgb3duZWQ6CisrICogICAg ICAgICAgICAgICAgIGZyZWUocCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlJlbmRlclBhcmFtcyBvdmVyZmxvdyIpCisrICog CisgICovCistICBfX3B5eF90XzggPSAoX19weXhfdl91c2VyZGF0YXMgPT0gUHlfTm9uZSk7Cist ICBfX3B5eF90XzkgPSAoX19weXhfdF84ICE9IDApOworLSAgaWYgKF9fcHl4X3RfOSkgeworKyAg ICAgIGZyZWUoX19weXhfdl9wKTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjc1NgorLSAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5n ZXQoaWRfZGF0YSwgTm9uZSkKKy0gKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgorLSAq ICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBf UmVwbHlVc2VyRGF0YShkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlCistICogICAgICAgICBwcm9wID0gX3N0cmVu Yyhwcm9wKQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTMKKysg KiAgICAgICAgIGNvdW50ID0gbGVuKHNlbGYub3duZWQpCisrICogICAgICAgICBpZiBjb3VudCA+ PSBNQVhfUkVOREVSX1BBUkFNUzoKKysgKiAgICAgICAgICAgICBpZiBvd25lZDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICBmcmVlKHApCisrICogICAg ICAgICAgICAgcmFpc2UgUHlNUFZFcnJvcigiUmVuZGVyUGFyYW1zIG92ZXJmbG93IikKKyAgKi8K Ky0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzMsIF9fcHl4X25fc19SZXBs eVVzZXJEYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNzU2LCBf X3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fcHl4 X3RfNyA9IE5VTEw7CistICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKKy0gICAgICBfX3B5eF90XzcgPSBQeU1ldGhv ZF9HRVRfU0VMRihfX3B5eF90XzMpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF83KSkgewor LSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4 X3RfMyk7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF83KTsKKy0gICAgICAgIF9fUHl4 X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywg ZnVuY3Rpb24pOworLSAgICAgIH0KKyAgICAgfQorLSAgICBfX3B5eF90XzIgPSAoX19weXhfdF83 KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzMsIF9fcHl4X3RfNywgX19weXhf dl9kYXRhKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF92X2Rh dGEpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICAg IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc1NiwgX19weXhfTDFfZXJy b3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAgaWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1J bnQoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfdl9pZF9kYXRhLCBfX3B5eF90 XzIsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDAp KSBfX1BZWF9FUlIoMCwgNzU2LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfSU5DUkVGKF9f cHl4X3RfMik7CistICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4 X3RfMik7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLQor LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzU1CistICogICAgICAgICBp ZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKy0gKiAgICAgICAgIHVzZXJkYXRhcyA9IHNl bGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCistICogICAgICAgICBpZiB1c2Vy ZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2Vy RGF0YShkYXRhKQorLSAqICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gVHJ1ZQorLSAqLwor LSAgfQorLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1NworLSAqICAg ICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6CistICogICAgICAgICAgICAgc2VsZi5yZXBseV91 c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCistICog ICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCistICogICAgICAgICBjZGVm IGNoYXIqIHByb3BjID0gcHJvcAorLSAqLworLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJT dHIoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X25fc19vYnNlcnZlZCwgUHlfVHJ1ZSkgPCAwKSBf X1BZWF9FUlIoMCwgNzU3LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3NTgKKy0gKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRh W2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKy0gKiAgICAgICAg IHVzZXJkYXRhcy5vYnNlcnZlZCA9IFRydWUKKy0gKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHBy b3ApICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgY2hhciog cHJvcGMgPSBwcm9wCistICogICAgICAgICBjZGVmIGludCBlcnIKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjg5NQorKyAqICAgICAgICAgICAgIGlmIG93bmVkOgorKyAq ICAgICAgICAgICAgICAgICBmcmVlKHApCisrICogICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJv cigiUmVuZGVyUGFyYW1zIG92ZXJmbG93IikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqIAorKyAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLnR5cGUgPSB0CisgICovCistICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMywgX19weXhfbl9zX3N0cmVuYyk7IGlm ICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc1OCwgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fcHl4X3RfNyA9IE5VTEw7CistICBp ZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfMykpKSB7CistICAgIF9fcHl4X3RfNyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7 CistICAgIGlmIChsaWtlbHkoX19weXhfdF83KSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlv biA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOworLSAgICAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzcpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKysgICAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19QeU1QVkVycm9yKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgODk1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgIF9fcHl4X3RfNSA9IE5VTEw7CisrICAgIGlmIChD WVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF80 KSkpIHsKKysgICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzQpOwor KyAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0 aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNCk7CisrICAgICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF81KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAg ICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNCwgZnVuY3Rpb24pOworKyAgICAgIH0KKyAg ICAgfQorLSAgfQorLSAgX19weXhfdF8yID0gKF9fcHl4X3RfNykgPyBfX1B5eF9QeU9iamVjdF9D YWxsMkFyZ3MoX19weXhfdF8zLCBfX3B5eF90XzcsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9i amVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdl9wcm9wKTsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDc1OCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAg X19QeXhfREVDUkVGX1NFVChfX3B5eF92X3Byb3AsIF9fcHl4X3RfMik7CistICBfX3B5eF90XzIg PSAwOworKyAgICBfX3B5eF90XzEgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwy QXJncyhfX3B5eF90XzQsIF9fcHl4X3RfNSwgX19weXhfa3Bfc19SZW5kZXJQYXJhbXNfb3ZlcmZs b3cpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X2twX3NfUmVu ZGVyUGFyYW1zX292ZXJmbG93KTsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5 eF90XzUgPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4 OTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgIF9fUHl4X1JhaXNl KF9fcHl4X3RfMSwgMCwgMCwgMCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworKyAgICBfX1BZWF9FUlIoMCwgODk1LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTkKKy0gKiAgICAgICAgIHVzZXJk YXRhcy5vYnNlcnZlZCA9IFRydWUKKy0gKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCist ICogICAgICAgICBjZGVmIGNoYXIqIHByb3BjID0gcHJvcCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICBjZGVmIGludCBlcnIKKy0gKiAgICAgICAgIHdpdGggbm9naWw6 CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTIKKysgKiAgICAgY2Rl ZiBhZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQg b3duZWQ9RmFsc2UpOgorKyAqICAgICAgICAgY291bnQgPSBsZW4oc2VsZi5vd25lZCkKKysgKiAg ICAgICAgIGlmIGNvdW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICAgICAgaWYgb3duZWQ6CisrICogICAgICAgICAgICAgICAg IGZyZWUocCkKKyAgKi8KKy0gIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9Bc1dyaXRhYmxl U3RyaW5nKF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfMTApICYmIFB5RXJy X09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNzU5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4 X3ZfcHJvcGMgPSBfX3B5eF90XzEwOworKyAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjc2MQorLSAqICAgICAgICAgY2RlZiBjaGFyKiBwcm9wYyA9IHByb3AKKy0g KiAgICAgICAgIGNkZWYgaW50IGVycgorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vYnNlcnZlX3By b3BlcnR5KAorLSAqICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6ODk3CisrICogICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJv cigiUmVuZGVyUGFyYW1zIG92ZXJmbG93IikKKysgKiAKKysgKiAgICAgICAgIHNlbGYucGFyYW1z W2NvdW50XS50eXBlID0gdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICBzZWxmLnBhcmFtc1tjb3VudF0uZGF0YSA9IHAKKysgKiAgICAgICAgIHNlbGYucGFyYW1zW2Nv dW50ICsgMV0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJRAorICAqLworLSAgeworLSAg ICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAg ICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsK Ky0gICAgICAjZW5kaWYKKy0gICAgICAvKnRyeToqLyB7CisrICBfX3B5eF90XzIgPSBfX1B5eF9Q eUluZGV4X0FzU3NpemVfdChfX3B5eF92X2NvdW50KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzIg PT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgODk3 LCBfX3B5eF9MMV9lcnJvcikKKysgIChfX3B5eF92X3NlbGYtPnBhcmFtc1tfX3B5eF90XzJdKS50 eXBlID0gX19weXhfdl90OworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjc2MgorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCistICogICAgICAgICB3aXRoIG5v Z2lsOgorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vYnNlcnZlX3Byb3BlcnR5KCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKKy0g KiAgICAgICAgICAgICAgICAgaWRfZGF0YSwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4OTgKKysgKiAKKysgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50XS50eXBlID0g dAorKyAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEgPSBwICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50ICsgMV0udHlwZSA9 IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJRAorKyAqICAgICAgICAgc2VsZi5vd25lZC5hcHBlbmQo b3duZWQpCisgICovCistICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9vYnNlcnZlX3Byb3BlcnR5 KF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9pZF9kYXRhLCBfX3B5eF92X3Byb3BjLCBNUFZf Rk9STUFUX05PREUpOworLSAgICAgIH0KKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW5kZXhfQXNT c2l6ZV90KF9fcHl4X3ZfY291bnQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoUHlfc3Np emVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4OTgsIF9fcHl4X0wx X2Vycm9yKQorKyAgKF9fcHl4X3Zfc2VsZi0+cGFyYW1zW19fcHl4X3RfMl0pLmRhdGEgPSBfX3B5 eF92X3A7CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc2MQor LSAqICAgICAgICAgY2RlZiBjaGFyKiBwcm9wYyA9IHByb3AKKy0gKiAgICAgICAgIGNkZWYgaW50 IGVycgorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vYnNlcnZlX3Byb3BlcnR5KAorLSAqICAgICAg ICAgICAgICAgICBzZWxmLl9jdHgsCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6ODk5CisrICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudF0udHlwZSA9IHQKKysgKiAgICAg ICAgIHNlbGYucGFyYW1zW2NvdW50XS5kYXRhID0gcAorKyAqICAgICAgICAgc2VsZi5wYXJhbXNb Y291bnQgKyAxXS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElEICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQorKyAq IAorICAqLworLSAgICAgIC8qZmluYWxseToqLyB7CistICAgICAgICAvKm5vcm1hbCBleGl0Oiov eworLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAgICAgX19QeXhfRmFzdEdJ TF9Gb3JnZXQoKTsKKy0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworLSAgICAgICAgICAjZW5k aWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNjsKKy0gICAgICAgIH0KKy0gICAgICAgIF9fcHl4 X0w2OjsKKy0gICAgICB9CistICB9CisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9BZGRPYmpD KF9fcHl4X3ZfY291bnQsIF9fcHl4X2ludF8xLCAxLCAwLCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgODk5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOworKyAgX19weXhfdF8yID0gX19QeXhfUHlJbmRleF9Bc1NzaXplX3QoX19w eXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzIgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5 RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgODk5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgKF9fcHl4X3Zfc2VsZi0+ cGFyYW1zW19fcHl4X3RfMl0pLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQ7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzY4CistICogICAgICAgICAgICAg ICAgIE1QVl9GT1JNQVRfTk9ERSwKKy0gKiAgICAgICAgICAgICApCistICogICAgICAgICByZXR1 cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MDAKKysgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50XS5kYXRh ID0gcAorKyAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnQgKyAxXS50eXBlID0gTVBWX1JFTkRF Ul9QQVJBTV9JTlZBTElECisrICogICAgICAgICBzZWxmLm93bmVkLmFwcGVuZChvd25lZCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorLSAqICAgICBAX2Vycm9ycworKyAqICAg ICBjZGVmIGFkZF9pbnQoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGludCB2YWwpOgor ICAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5 SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgNzY4LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIp OworLSAgX19weXhfciA9IF9fcHl4X3RfMjsKKy0gIF9fcHl4X3RfMiA9IDA7CistICBnb3RvIF9f cHl4X0wwOworKyAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKF9fcHl4X3Zfb3du ZWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MDAsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF90XzYgPSBfX1B5 eF9QeU9iamVjdF9BcHBlbmQoX19weXhfdl9zZWxmLT5vd25lZCwgX19weXhfdF8xKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfNiA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMCwgOTAwLCBfX3B5eF9M MV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0OQorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjg5MAorKyAqICAgICAgICAgc2VsZi5wYXJhbXNbMF0udHlw ZSA9IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJRAorICAqIAorLSAqICAgICBAX2Vycm9ycworLSAq ICAgICBkZWYgb2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkYXRhPU5vbmUpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVf cHJvcGVydHkiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgY2RlZiBh ZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3du ZWQ9RmFsc2UpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjb3Vu dCA9IGxlbihzZWxmLm93bmVkKQorKyAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9Q QVJBTVM6CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3Ig PSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOworICAg X19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworLSAgX19QeXhf WERFQ1JFRihfX3B5eF90XzMpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzQpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzcpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0 ZXIubGlicy5tcHYuQ29udGV4dC5vYnNlcnZlX3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19w eXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9SZW5kZXJQYXJhbXMuYWRkX3ZvaWRw IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5 eF9yID0gMDsKKyAgIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl91c2VyZGF0 YXMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X3Byb3ApOworKyAgX19QeXhfWERFQ1JFRihf X3B5eF92X2NvdW50KTsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3MQorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MDIKKysgKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQorICAq IAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgdW5vYnNlcnZlX3Byb3BlcnR5KHNlbGYs IGRhdGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFw czogbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAorKyAqICAgICBjZGVmIGFkZF9pbnQoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGlu dCB2YWwpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjZGVmIGlu dCAqcCA9IDxpbnQgKj5tYWxsb2Moc2l6ZW9mKGludCkpCisrICogICAgICAgICBwWzBdID0gdmFs CisgICovCisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80MXVub2JzZXJ2ZV9wcm9wZXJ0eShQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9kYXRhKTsgLypwcm90byov Cistc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80 MHVub2JzZXJ2ZV9wcm9wZXJ0eVtdID0gIldyYXBzOiBtcHZfdW5vYnNlcnZlX3Byb3BlcnR5IjsK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF80MXVub2JzZXJ2ZV9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfdl9kYXRhKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVub2JzZXJ2 ZV9wcm9wZXJ0eSAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDB1bm9ic2VydmVfcHJvcGVydHkoKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQ eU9iamVjdCAqKV9fcHl4X3ZfZGF0YSkpOworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICov CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOwor LX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF80MHVub2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEp IHsKKy0gIHVpbnQ2NF90IF9fcHl4X3ZfaWRfZGF0YTsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X3Vz ZXJkYXRhcyA9IE5VTEw7CistICBpbnQgX19weXhfdl9lcnI7Cisrc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRkX2ludChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpfX3B5eF92 X3NlbGYsIGVudW0gbXB2X3JlbmRlcl9wYXJhbV90eXBlIF9fcHl4X3ZfdCwgaW50IF9fcHl4X3Zf dmFsKSB7CisrICBpbnQgKl9fcHl4X3ZfcDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsK KyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeV9oYXNoX3QgX19weXhfdF8xOwor LSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8zID0g TlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4 X3RfNSA9IE5VTEw7CistICBpbnQgX19weXhfdF82OworLSAgUHlPYmplY3QgKl9fcHl4X3RfNyA9 IE5VTEw7CistICBpbnQgX19weXhfdF84OworLSAgaW50IF9fcHl4X3RfOTsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzEgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBj aGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cist ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgidW5vYnNlcnZlX3Byb3BlcnR5IiwgMCk7Cisr ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiYWRkX2ludCIsIDApOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3MworLSAqICAgICBkZWYgdW5vYnNlcnZlX3By b3BlcnR5KHNlbGYsIGRhdGEpOgorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl91bm9ic2VydmVf cHJvcGVydHkiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2 NF90Pmhhc2goZGF0YSkKKy0gKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRh dGEuZ2V0KGlkX2RhdGEsIE5vbmUpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTAzCisrICogCisrICogICAgIGNkZWYgYWRkX2ludChzZWxmLCBtcHZfcmVuZGVyX3BhcmFt X3R5cGUgdCwgaW50IHZhbCk6CisrICogICAgICAgICBjZGVmIGludCAqcCA9IDxpbnQgKj5tYWxs b2Moc2l6ZW9mKGludCkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IHBbMF0gPSB2YWwKKysgKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApCisgICovCistICAj aWZuZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VSVElPTlMKKy0gIGlmICh1bmxpa2VseSghUHlfT3B0 aW1pemVGbGFnKSkgeworLSAgICBpZiAodW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0g MCkpKSB7CistICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7CistICAg ICAgX19QWVhfRVJSKDAsIDc3MywgX19weXhfTDFfZXJyb3IpCistICAgIH0KKy0gIH0KKy0gICNl bmRpZgorKyAgX19weXhfdl9wID0gKChpbnQgKiltYWxsb2MoKHNpemVvZihpbnQpKSkpOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3NAorLSAqICAgICAgICAgIiIi V3JhcHM6IG1wdl91bm9ic2VydmVfcHJvcGVydHkiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxm Ll9jdHgKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNo KGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHVzZXJkYXRh cyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCistICogICAgICAgICBp ZiB1c2VyZGF0YXMgaXMgbm90IE5vbmU6CistICovCistICBfX3B5eF90XzEgPSBQeU9iamVjdF9I YXNoKF9fcHl4X3ZfZGF0YSk7IGlmICh1bmxpa2VseShfX3B5eF90XzEgPT0gKChQeV9oYXNoX3Qp LTEpKSkgX19QWVhfRVJSKDAsIDc3NCwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF92X2lkX2Rh dGEgPSAoKHVpbnQ2NF90KV9fcHl4X3RfMSk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6Nzc1CistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAg ICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorLSAqICAgICAg ICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIG5v dCBOb25lOgorLSAqICAgICAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9IEZhbHNlCistICov CistICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+ cmVwbHlfdXNlcmRhdGEsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykp IF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMyk7CistICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3Zf aWRfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc3NSwgX19w eXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gIF9fcHl4X3RfNSA9 IE5VTEw7CistICBfX3B5eF90XzYgPSAwOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAm JiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKKy0gICAgX19weXhfdF81ID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90XzUp KSB7CistICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9f cHl4X3RfMyk7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7CistICAgICAgX19QeXhf SU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywgZnVu Y3Rpb24pOworLSAgICAgIF9fcHl4X3RfNiA9IDE7CistICAgIH0KKy0gIH0KKy0gICNpZiBDWVRI T05fRkFTVF9QWUNBTEwKKy0gIGlmIChQeUZ1bmN0aW9uX0NoZWNrKF9fcHl4X3RfMykpIHsKKy0g ICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF81LCBfX3B5eF90XzQsIFB5X05v bmV9OworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3Rf MywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0g IH0gZWxzZQorLSAgI2VuZGlmCistICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAorLSAgaWYgKF9f UHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzMpKSB7CistICAgIFB5T2JqZWN0ICpf X3B5eF90ZW1wWzNdID0ge19fcHl4X3RfNSwgX19weXhfdF80LCBQeV9Ob25lfTsKKy0gICAgX19w eXhfdF8yID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8zLCBfX3B5eF90ZW1w KzEtX19weXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDc3NSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgfSBlbHNlCistICAj ZW5kaWYKKy0gIHsKKy0gICAgX19weXhfdF83ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzYpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9y KQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKy0gICAgaWYgKF9fcHl4X3RfNSkgewor LSAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF81KTsgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzcsIDAsIF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IE5VTEw7CistICAgIH0KKy0gICAgX19QeXhf R0lWRVJFRihfX3B5eF90XzQpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMCtf X3B5eF90XzYsIF9fcHl4X3RfNCk7CistICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gICAg X19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90Xzcs IDErX19weXhfdF82LCBQeV9Ob25lKTsKKy0gICAgX19weXhfdF80ID0gMDsKKy0gICAgX19weXhf dF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzMsIF9fcHl4X3RfNywgTlVMTCk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc3NSwgX19weXhfTDFfZXJyb3Ip CistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhf dF83KTsgX19weXhfdF83ID0gMDsKKy0gIH0KKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBf X3B5eF90XzMgPSAwOworLSAgX19weXhfdl91c2VyZGF0YXMgPSBfX3B5eF90XzI7CistICBfX3B5 eF90XzIgPSAwOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3Ngor LSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkK Ky0gKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEs IE5vbmUpCistICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgbm90IE5vbmU6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBG YWxzZQorLSAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcy5jb3VudGVyIDw9IDA6CistICovCist ICBfX3B5eF90XzggPSAoX19weXhfdl91c2VyZGF0YXMgIT0gUHlfTm9uZSk7CistICBfX3B5eF90 XzkgPSAoX19weXhfdF84ICE9IDApOworLSAgaWYgKF9fcHl4X3RfOSkgeworLQorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc3CistICogICAgICAgICB1c2VyZGF0YXMg PSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorLSAqICAgICAgICAgaWYg dXNlcmRhdGFzIGlzIG5vdCBOb25lOgorLSAqICAgICAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZl ZCA9IEZhbHNlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBp ZiB1c2VyZGF0YXMuY291bnRlciA8PSAwOgorLSAqICAgICAgICAgICAgICAgICBkZWwgc2VsZi5y ZXBseV91c2VyZGF0YVtpZF9kYXRhXQorLSAqLworLSAgICBpZiAoX19QeXhfUHlPYmplY3RfU2V0 QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX29ic2VydmVkLCBQeV9GYWxzZSkg PCAwKSBfX1BZWF9FUlIoMCwgNzc3LCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3OAorLSAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlz IG5vdCBOb25lOgorLSAqICAgICAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9IEZhbHNlCist ICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzLmNvdW50ZXIgPD0gMDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBkZWwgc2VsZi5yZXBseV91c2VyZGF0 YVtpZF9kYXRhXQorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCistICovCistICAgIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X25f c19jb3VudGVyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzc4LCBf X3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4 X3RfMyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3RfMiwgX19weXhfaW50XzAsIFB5X0xF KTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9f UFlYX0VSUigwLCA3NzgsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgX19weXhfdF85ID0gX19QeXhfUHlPYmplY3RfSXNU cnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5eF90XzkgPCAwKSkgX19QWVhfRVJSKDAs IDc3OCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5 eF90XzMgPSAwOworLSAgICBpZiAoX19weXhfdF85KSB7CistCistICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjc3OQorLSAqICAgICAgICAgICAgIHVzZXJkYXRhcy5vYnNl cnZlZCA9IEZhbHNlCistICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzLmNvdW50ZXIgPD0gMDoK Ky0gKiAgICAgICAgICAgICAgICAgZGVsIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCistICog ICAgICAgICB3aXRoIG5vZ2lsOgorLSAqLworLSAgICAgIGlmICh1bmxpa2VseShfX1B5eF9EZWxJ dGVtSW50KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X3ZfaWRfZGF0YSwgdWlu dDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlY X0VSUigwLCA3NzksIF9fcHl4X0wxX2Vycm9yKQorLQorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3NzgKKy0gKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBub3QgTm9u ZToKKy0gKiAgICAgICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBGYWxzZQorLSAqICAgICAg ICAgICAgIGlmIHVzZXJkYXRhcy5jb3VudGVyIDw9IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZGVsIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0 YV0KKy0gKiAgICAgICAgIGNkZWYgaW50IGVycgorLSAqLworLSAgICB9CistCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzYKKy0gKiAgICAgICAgIGNkZWYgdWludDY0 X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCistICogICAgICAgICB1c2VyZGF0YXMg PSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorLSAqICAgICAgICAgaWYg dXNlcmRhdGFzIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gRmFsc2UKKy0gKiAgICAgICAgICAgICBp ZiB1c2VyZGF0YXMuY291bnRlciA8PSAwOgorLSAqLworLSAgfQorLQorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjc4MQorLSAqICAgICAgICAgICAgICAgICBkZWwgc2VsZi5y ZXBseV91c2VyZGF0YVtpZF9kYXRhXQorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCistICogICAg ICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAgICAgZXJyID0gbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSgKKy0gKiAgICAgICAgICAgICAgICAg c2VsZi5fY3R4LAorLSAqLworLSAgeworLSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAg IFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAg IF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKy0gICAgICAjZW5kaWYKKy0gICAgICAvKnRyeToq LyB7CistCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzgyCist ICogICAgICAgICBjZGVmIGludCBlcnIKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAg ICAgICAgICAgZXJyID0gbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSggICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCistICogICAgICAgICAg ICAgICAgIGlkX2RhdGEsCistICovCistICAgICAgICBfX3B5eF92X2VyciA9IG1wdl91bm9ic2Vy dmVfcHJvcGVydHkoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X2lkX2RhdGEpOworLSAgICAg IH0KKy0KKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzgxCistICog ICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdCistICogICAg ICAgICBjZGVmIGludCBlcnIKKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfdW5vYnNlcnZlX3Byb3Bl cnR5KAorLSAqICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTA0CisrICogICAgIGNkZWYgYWRkX2ludChzZWxmLCBtcHZfcmVu ZGVyX3BhcmFtX3R5cGUgdCwgaW50IHZhbCk6CisrICogICAgICAgICBjZGVmIGludCAqcCA9IDxp bnQgKj5tYWxsb2Moc2l6ZW9mKGludCkpCisrICogICAgICAgICBwWzBdID0gdmFsICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApCisr ICogCisgICovCistICAgICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4aXQ6 Ki97CistICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0 R0lMX0ZvcmdldCgpOworLSAgICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICNl bmRpZgorLSAgICAgICAgICBnb3RvIF9fcHl4X0w3OworLSAgICAgICAgfQorLSAgICAgICAgX19w eXhfTDc6OworLSAgICAgIH0KKy0gIH0KKysgIChfX3B5eF92X3BbMF0pID0gX19weXhfdl92YWw7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg2CistICogICAgICAg ICAgICAgICAgIGlkX2RhdGEsCistICogICAgICAgICAgICAgKQorLSAqICAgICAgICAgcmV0dXJu IGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTA1CisrICogICAgICAgICBjZGVmIGludCAqcCA9IDxpbnQgKj5tYWxs b2Moc2l6ZW9mKGludCkpCisrICogICAgICAgICBwWzBdID0gdmFsCisrICogICAgICAgICBzZWxm LmFkZF92b2lkcCh0LCBwKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCistICog ICAgIGRlZiBzaHV0ZG93bihzZWxmKToKKysgKiAgICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1w dl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBjaGFyICpzKToKKyAgKi8KKy0gIF9fUHl4X1hERUNSRUYo X19weXhfcik7CistICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vy cik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc4NiwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF90 XzM7CistICBfX3B5eF90XzMgPSAwOworLSAgZ290byBfX3B5eF9MMDsKKysgIF9fcHl4X3RfMSA9 ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQ YXJhbXMgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9zZWxm LCBfX3B5eF92X3QsIF9fcHl4X3ZfcCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDkwNSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3MQorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjkwMgorKyAqICAgICAgICAgc2VsZi5vd25lZC5hcHBlbmQob3du ZWQpCisgICogCistICogICAgIEBfZXJyb3JzCistICogICAgIGRlZiB1bm9ic2VydmVfcHJvcGVy dHkoc2VsZiwgZGF0YSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICIiIldyYXBzOiBtcHZfdW5vYnNlcnZlX3Byb3BlcnR5IiIiCistICogICAgICAgICBhc3NlcnQg c2VsZi5fY3R4CisrICogICAgIGNkZWYgYWRkX2ludChzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5 cGUgdCwgaW50IHZhbCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IGNkZWYgaW50ICpwID0gPGludCAqPm1hbGxvYyhzaXplb2YoaW50KSkKKysgKiAgICAgICAgIHBb MF0gPSB2YWwKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhf ciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgIGdvdG8gX19weXhfTDA7Cisg ICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7Cist ICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnVub2JzZXJ2 ZV9wcm9wZXJ0eSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OworLSAgX19weXhfciA9IE5VTEw7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBf X1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVuZGVyUGFyYW1zLmFkZF9p bnQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9f cHl4X3IgPSAwOworICAgX19weXhfTDA6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X3VzZXJk YXRhcyk7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo3ODgKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKysvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA3CisrICogICAgICAgICBzZWxmLmFkZF92b2lk cCh0LCBwKQorICAqIAorLSAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgorLSAqICAg ICAgICAgICAgIHJldHVybgorKyAqICAgICBjZGVmIGFkZF9zdHJpbmcoc2VsZiwgbXB2X3JlbmRl cl9wYXJhbV90eXBlIHQsIGNoYXIgKnMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICBjZGVmIGNoYXIgKnAgPSA8Y2hhciAqPm1hbGxvYyhzdHJsZW4ocykgKyAxKQor KyAqICAgICAgICAgc3RyY3B5KHAsIHMpCisgICovCisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8K Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF80M3NodXRkb3duKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmpl Y3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQzc2h1dGRvd24oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7CistICBQeU9iamVjdCAqX19weXhf ciA9IDA7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoInNodXRkb3duICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80MnNodXRkb3duKCgoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOwor LQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80MnNodXRkb3duKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgewor LSAgdWludDY0X3QgX19weXhfdl9jdHhpZDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfc3RyaW5nKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKl9fcHl4X3Zfc2VsZiwg ZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgX19weXhfdl90LCBjaGFyICpfX3B5eF92X3MpIHsK KysgIGNoYXIgKl9fcHl4X3ZfcDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBpbnQgX19weXhfdF8xOworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMiA9IE5VTEw7CistICB1aW50NjRfdCBfX3B5eF90XzM7CistICBQeU9iamVjdCAq X19weXhfdF80ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOworKyAgUHlP YmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNv bnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0g MDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzaHV0ZG93biIsIDApOworKyAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoImFkZF9zdHJpbmciLCAwKTsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3ODkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MDgKKyAgKiAKKy0gKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOgorLSAqICAg ICAgICAgaWYgc2VsZi5fY3R4ID09IE5VTEw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgICAgICByZXR1cm4KKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQg PSA8dWludDY0X3Q+aWQoc2VsZikKKy0gKi8KKy0gIF9fcHl4X3RfMSA9ICgoX19weXhfdl9zZWxm LT5fY3R4ID09IE5VTEwpICE9IDApOworLSAgaWYgKF9fcHl4X3RfMSkgeworLQorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzkwCistICogICAgIGRlZiBzaHV0ZG93bihz ZWxmKToKKy0gKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgorLSAqICAgICAgICAgICAg IHJldHVybiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmIHVp bnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCistICogICAgICAgICB3aXRoIG5vZ2ls OgorLSAqLworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBfX3B5eF9yID0gUHlf Tm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgICBnb3RvIF9fcHl4X0wwOworLQorLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg5CistICogCistICogICAgIGRl ZiBzaHV0ZG93bihzZWxmKToKKy0gKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuCistICogICAg ICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCistICovCistICB9 CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzkxCistICogICAgICAg ICBpZiBzZWxmLl9jdHggPT0gTlVMTDoKKy0gKiAgICAgICAgICAgICByZXR1cm4KKy0gKiAgICAg ICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2VsZikgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAg ICBtcHZfdGVybWluYXRlX2Rlc3Ryb3koc2VsZi5fY3R4KQorLSAqLworLSAgX19weXhfdF8yID0g X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF9idWlsdGluX2lkLCAoKFB5T2JqZWN0ICop X19weXhfdl9zZWxmKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc5 MSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4 X3RfMyA9IF9fUHl4X1B5SW50X0FzX3VpbnQ2NF90KF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSgo X19weXhfdF8zID09ICgodWludDY0X3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDc5MSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsg X19weXhfdF8yID0gMDsKKy0gIF9fcHl4X3ZfY3R4aWQgPSAoKHVpbnQ2NF90KV9fcHl4X3RfMyk7 CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzkyCistICogICAgICAg ICAgICAgcmV0dXJuCistICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90 PmlkKHNlbGYpCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICAgICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KHNlbGYuX2N0eCkK Ky0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRvd24oKQorLSAqLworLSAgewor LSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwor LSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIo KTsKKy0gICAgICAjZW5kaWYKKy0gICAgICAvKnRyeToqLyB7CistCistICAgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzkzCistICogICAgICAgICBjZGVmIHVpbnQ2NF90 IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAq ICAgICAgICAgICAgIG1wdl90ZXJtaW5hdGVfZGVzdHJveShzZWxmLl9jdHgpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRv d24oKQorLSAqICAgICAgICAgZGVsIF9jYWxsYmFja3NbY3R4aWRdCistICovCistICAgICAgICBt cHZfdGVybWluYXRlX2Rlc3Ryb3koX19weXhfdl9zZWxmLT5fY3R4KTsKKy0gICAgICB9CistCist ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5MgorLSAqICAgICAgICAg ICAgIHJldHVybgorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5p ZChzZWxmKQorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgICAgIG1wdl90ZXJtaW5hdGVfZGVzdHJveShzZWxmLl9jdHgpCist ICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNodXRkb3duKCkKKy0gKi8KKy0gICAgICAv KmZpbmFsbHk6Ki8geworLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAgI2lm ZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CistICAg ICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgI2VuZGlmCistICAgICAgICAgIGdv dG8gX19weXhfTDY7CistICAgICAgICB9CistICAgICAgICBfX3B5eF9MNjo7CistICAgICAgfQor LSAgfQorLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5NAorLSAqICAg ICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfdGVybWluYXRlX2Rlc3Ryb3ko c2VsZi5fY3R4KQorLSAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zaHV0ZG93bigpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGRlbCBfY2FsbGJhY2tzW2N0 eGlkXQorLSAqICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdCistICovCistICBf X3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJh Y2t0aHJlYWQsIF9fcHl4X25fc19zaHV0ZG93bik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkg X19QWVhfRVJSKDAsIDc5NCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhf dF80KTsKKy0gIF9fcHl4X3RfNSA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RT ICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzQpKSkgeworLSAgICBfX3B5eF90XzUg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzQpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3Rf NSkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04o X19weXhfdF80KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKy0gICAgICBfX1B5 eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF80LCBm dW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfMiA9IChfX3B5eF90XzUpID8gX19Q eXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSkgOiBfX1B5eF9QeU9i amVjdF9DYWxsTm9BcmcoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsg X19weXhfdF81ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDc5NCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgX19QeXhfREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Nzk1CistICogICAgICAgICAgICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KHNlbGYu X2N0eCkKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRvd24oKQorLSAqICAg ICAgICAgZGVsIF9jYWxsYmFja3NbY3R4aWRdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXQorLSAqICAgICAgICAgc2Vs Zi5jYWxsYmFjayA9IE5vbmUKKy0gKi8KKy0gIGlmICh1bmxpa2VseShfX1B5eF9EZWxJdGVtSW50 KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3ZfY3R4aWQs IHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBf X1BZWF9FUlIoMCwgNzk1LCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3OTYKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1 dGRvd24oKQorLSAqICAgICAgICAgZGVsIF9jYWxsYmFja3NbY3R4aWRdCistICogICAgICAgICBk ZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKKy0gKiAgICAgICAgIHNlbGYucmVwbHlf dXNlcmRhdGEgPSBOb25lCistICovCistICBpZiAodW5saWtlbHkoX19QeXhfRGVsSXRlbUludChf X3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0 eGlkLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAw KSkgX19QWVhfRVJSKDAsIDc5NiwgX19weXhfTDFfZXJyb3IpCistCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk3CistICogICAgICAgICBkZWwgX2NhbGxiYWNrc1tjdHhp ZF0KKy0gKiAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXQorLSAqICAgICAgICAg c2VsZi5jYWxsYmFjayA9IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IE5vbmUKKy0gKiAgICAgICAgIHNlbGYuX2N0eCA9 IE5VTEwKKysgKiAgICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlw ZSB0LCBjaGFyICpzKToKKysgKiAgICAgICAgIGNkZWYgY2hhciAqcCA9IDxjaGFyICo+bWFsbG9j KHN0cmxlbihzKSArIDEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IHN0cmNweShwLCBzKQorKyAqICAgICAgICAgc2VsZi5hZGRfdm9pZHAodCwgcCkKKyAgKi8KKy0g IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CistICBf X1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5jYWxsYmFjayk7CistICBfX1B5eF9ERUNSRUYoX19w eXhfdl9zZWxmLT5jYWxsYmFjayk7CistICBfX3B5eF92X3NlbGYtPmNhbGxiYWNrID0gUHlfTm9u ZTsKKysgIF9fcHl4X3ZfcCA9ICgoY2hhciAqKW1hbGxvYygoc3RybGVuKF9fcHl4X3ZfcykgKyAx KSkpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5OAorLSAqICAg ICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdCistICogICAgICAgICBzZWxmLmNhbGxi YWNrID0gTm9uZQorLSAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IE5vbmUgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5fY3R4ID0gTlVMTAorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwOQorKyAqICAgICBjZGVmIGFkZF9z dHJpbmcoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGNoYXIgKnMpOgorKyAqICAgICAg ICAgY2RlZiBjaGFyICpwID0gPGNoYXIgKj5tYWxsb2Moc3RybGVuKHMpICsgMSkKKysgKiAgICAg ICAgIHN0cmNweShwLCBzKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICBzZWxmLmFkZF92b2lkcCh0LCBwKQorICAqIAorICAqLworLSAgX19QeXhfSU5DUkVGKFB5X05v bmUpOworLSAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92 X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnJl cGx5X3VzZXJkYXRhKTsKKy0gIF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBQeV9Ob25l OworKyAgKHZvaWQpKHN0cmNweShfX3B5eF92X3AsIF9fcHl4X3ZfcykpOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5OQorLSAqICAgICAgICAgc2VsZi5jYWxsYmFj ayA9IE5vbmUKKy0gKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBOb25lCistICogICAg ICAgICBzZWxmLl9jdHggPSBOVUxMICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTAKKysgKiAgICAgICAgIGNkZWYgY2hh ciAqcCA9IDxjaGFyICo+bWFsbG9jKHN0cmxlbihzKSArIDEpCisrICogICAgICAgICBzdHJjcHko cCwgcykKKysgKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAgZGVmIG9wZW5nbF9jYl9hcGkoc2VsZik6CisrICog ICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKKyAgKi8KKy0gIF9fcHl4X3Zfc2VsZi0+X2N0eCA9 IE5VTEw7CisrICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+ YWRkX3ZvaWRwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl90LCBfX3B5eF92X3AsIE5VTEwpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MTAsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 ODgKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo5MDcKKysgKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApCisgICogCistICog ICAgIGRlZiBzaHV0ZG93bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgaWYgc2VsZi5fY3R4ID09IE5VTEw6CistICogICAgICAgICAgICAgcmV0dXJuCisr ICogICAgIGNkZWYgYWRkX3N0cmluZyhzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgY2hh ciAqcyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWYgY2hh ciAqcCA9IDxjaGFyICo+bWFsbG9jKHN0cmxlbihzKSArIDEpCisrICogICAgICAgICBzdHJjcHko cCwgcykKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19weXhfciA9 IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKyAgIGdvdG8gX19weXhfTDA7CisgICBf X3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CistICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CistICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnNodXRkb3duIiwgX19w eXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0g TlVMTDsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFj aygidmlkY3V0dGVyLmxpYnMubXB2Ll9SZW5kZXJQYXJhbXMuYWRkX3N0cmluZyIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhfciA9IDA7Cisg ICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MDEKKy0gKiAgICAgICAgIHNlbGYuX2N0eCA9IE5V TEwKKy0gKiAKKy0gKiAgICAgZGVmIG9wZW5nbF9jYl9hcGkoc2VsZik6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgdm9pZCAqY2IKKysvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTEyCisrICogICAgICAgICBzZWxmLmFkZF92b2lkcCh0LCBw KQorICAqIAorKyAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGZvciBpLCBqIGluIGVudW1lcmF0ZShzZWxmLm93bmVk KToKKysgKiAgICAgICAgICAgICBpZiBqOgorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICov Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNDVvcGVuZ2xfY2JfYXBpKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ1b3BlbmdsX2NiX2FwaShQeU9iamVjdCAq X19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF9yID0gMDsKKytzdGF0aWMgdm9pZCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNfUmVuZGVyUGFyYW1zXzNfX2RlYWxsb2NfXyhQeU9iamVjdCAqX19weXhfdl9zZWxm KTsgLypwcm90byovCisrc3RhdGljIHZvaWQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzX1JlbmRlclBhcmFtc18zX19kZWFsbG9jX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewor ICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJvcGVuZ2xfY2JfYXBpICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80NG9wZW5nbF9jYl9hcGkoKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7 CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18gKHdyYXBwZXIpIiwg MCk7CisrICBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzJf X2RlYWxsb2NfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5k ZXJQYXJhbXMgKilfX3B5eF92X3NlbGYpKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsK KyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfNDRvcGVuZ2xfY2JfYXBpKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworLSAgdm9pZCAqX19weXhfdl9fY3R4Owor LSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAq X19weXhfdl9jdHggPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworK3N0YXRp YyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfMl9f ZGVhbGxvY19fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQ YXJhbXMgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9fcHl4X3ZfaSA9IE5VTEw7Cisr ICBQeU9iamVjdCAqX19weXhfdl9qID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCistICBpbnQgX19weXhfdF8xOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Cisg ICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBO VUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CisrICBQeV9zc2l6ZV90IF9fcHl4 X3RfMzsKKysgIFB5T2JqZWN0ICooKl9fcHl4X3RfNCkoUHlPYmplY3QgKik7CisrICBQeU9iamVj dCAqX19weXhfdF81ID0gTlVMTDsKKysgIGludCBfX3B5eF90XzY7CisrICBQeV9zc2l6ZV90IF9f cHl4X3RfNzsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIm9wZW5nbF9jYl9hcGkiLCAwKTsKKy0KKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MDQKKy0gKiAgICAgICAgIGNkZWYgdm9pZCAqY2IKKy0g KiAKKy0gKiAgICAgICAgIF9jdHggPSBtcHZfZ2V0X3N1Yl9hcGkoc2VsZi5fY3R4LCBNUFZfU1VC X0FQSV9PUEVOR0xfQ0IpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg IGlmIG5vdCBfY3R4OgorLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKCJPcGVuR0wgQVBJ IG5vdCBhdmFpbGFibGUiKQorLSAqLworLSAgX19weXhfdl9fY3R4ID0gbXB2X2dldF9zdWJfYXBp KF9fcHl4X3Zfc2VsZi0+X2N0eCwgTVBWX1NVQl9BUElfT1BFTkdMX0NCKTsKKy0KKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MDUKKy0gKiAKKy0gKiAgICAgICAgIF9jdHgg PSBtcHZfZ2V0X3N1Yl9hcGkoc2VsZi5fY3R4LCBNUFZfU1VCX0FQSV9PUEVOR0xfQ0IpCistICog ICAgICAgICBpZiBub3QgX2N0eDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgIHJhaXNlIE1QVkVycm9yKCJPcGVuR0wgQVBJIG5vdCBhdmFpbGFibGUiKQorLSAq IAorLSAqLworLSAgX19weXhfdF8xID0gKCghKF9fcHl4X3ZfX2N0eCAhPSAwKSkgIT0gMCk7Cist ICBpZiAodW5saWtlbHkoX19weXhfdF8xKSkgeworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fZGVhbGxvY19fIiwgMCk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4MDYKKy0gKiAgICAgICAgIF9jdHggPSBtcHZfZ2V0X3N1Yl9hcGkoc2VsZi5fY3R4 LCBNUFZfU1VCX0FQSV9PUEVOR0xfQ0IpCistICogICAgICAgICBpZiBub3QgX2N0eDoKKy0gKiAg ICAgICAgICAgICByYWlzZSBNUFZFcnJvcigiT3BlbkdMIEFQSSBub3QgYXZhaWxhYmxlIikgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjkxMworICAqIAorLSAqICAgICAgICAgY3R4ID0gT3BlbkdMQ29udGV4dCgpCisrICog ICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKKysgKiAgICAgICAgIGZvciBpLCBqIGluIGVudW1l cmF0ZShzZWxmLm93bmVkKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgICAgIGlmIGo6CisrICogICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0 YSkKKyAgKi8KKy0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzMsIF9fcHl4 X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDgw NiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgX19Q eXhfSU5DUkVGKF9fcHl4X2ludF8wKTsKKysgIF9fcHl4X3RfMSA9IF9fcHl4X2ludF8wOworKyAg aWYgKGxpa2VseShQeUxpc3RfQ2hlY2tFeGFjdChfX3B5eF92X3NlbGYtPm93bmVkKSkgfHwgUHlU dXBsZV9DaGVja0V4YWN0KF9fcHl4X3Zfc2VsZi0+b3duZWQpKSB7CisrICAgIF9fcHl4X3RfMiA9 IF9fcHl4X3Zfc2VsZi0+b3duZWQ7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzMg PSAwOworICAgICBfX3B5eF90XzQgPSBOVUxMOworLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRI T0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7CistICAgICAgX19w eXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKKy0gICAgICBpZiAobGlrZWx5 KF9fcHl4X3RfNCkpIHsKKy0gICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dF VF9GVU5DVElPTihfX3B5eF90XzMpOworLSAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7 CistICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKy0gICAgICB9CistICAgIH0KKy0gICAgX19weXhf dF8yID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8zLCBf X3B5eF90XzQsIF9fcHl4X2twX3NfT3BlbkdMX0FQSV9ub3RfYXZhaWxhYmxlKSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF9rcF9zX09wZW5HTF9BUElfbm90X2F2 YWlsYWJsZSk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsK Ky0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgODA2LCBfX3B5eF9M MV9lcnJvcikKKysgIH0gZWxzZSB7CisrICAgIF9fcHl4X3RfMyA9IC0xOyBfX3B5eF90XzIgPSBQ eU9iamVjdF9HZXRJdGVyKF9fcHl4X3Zfc2VsZi0+b3duZWQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7CistICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMiwgMCwgMCwgMCk7CistICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBfX1BZWF9FUlIoMCwgODA2LCBf X3B5eF9MMV9lcnJvcikKKy0KKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjgwNQorLSAqIAorLSAqICAgICAgICAgX2N0eCA9IG1wdl9nZXRfc3ViX2FwaShzZWxmLl9jdHgs IE1QVl9TVUJfQVBJX09QRU5HTF9DQikKKy0gKiAgICAgICAgIGlmIG5vdCBfY3R4OiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoIk9w ZW5HTCBBUEkgbm90IGF2YWlsYWJsZSIpCistICogCistICovCisrICAgIF9fcHl4X3RfNCA9IFB5 X1RZUEUoX19weXhfdF8yKS0+dHBfaXRlcm5leHQ7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkg X19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCisgICB9CisrICBmb3IgKDs7KSB7Cisr ICAgIGlmIChsaWtlbHkoIV9fcHl4X3RfNCkpIHsKKysgICAgICBpZiAobGlrZWx5KFB5TGlzdF9D aGVja0V4YWN0KF9fcHl4X3RfMikpKSB7CisrICAgICAgICBpZiAoX19weXhfdF8zID49IFB5TGlz dF9HRVRfU0laRShfX3B5eF90XzIpKSBicmVhazsKKysgICAgICAgICNpZiBDWVRIT05fQVNTVU1F X1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworKyAgICAgICAgX19w eXhfdF81ID0gUHlMaXN0X0dFVF9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF8zKTsgX19QeXhfSU5D UkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfMysrOyBpZiAodW5saWtlbHkoMCA8IDApKSBfX1BZWF9F UlIoMCwgOTEzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICAgICNlbHNlCisrICAgICAgICBfX3B5 eF90XzUgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF8yLCBfX3B5eF90XzMpOyBfX3B5eF90XzMr KzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgOTEzLCBfX3B5eF9MMV9l cnJvcikKKysgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworKyAgICAgICAgI2VuZGlm CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGlmIChfX3B5eF90XzMgPj0gUHlUdXBsZV9HRVRf U0laRShfX3B5eF90XzIpKSBicmVhazsKKysgICAgICAgICNpZiBDWVRIT05fQVNTVU1FX1NBRkVf TUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworKyAgICAgICAgX19weXhfdF81 ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF90XzIsIF9fcHl4X3RfMyk7IF9fUHl4X0lOQ1JFRihf X3B5eF90XzUpOyBfX3B5eF90XzMrKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAs IDkxMywgX19weXhfTDFfZXJyb3IpCisrICAgICAgICAjZWxzZQorKyAgICAgICAgX19weXhfdF81 ID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF8zKTsgX19weXhfdF8zKys7IGlm ICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3Ip CisrICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKysgICAgICAgICNlbmRpZgorKyAg ICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICBfX3B5eF90XzUgPSBfX3B5eF90XzQoX19weXhf dF8yKTsKKysgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIHsKKysgICAgICAgIFB5T2Jq ZWN0KiBleGNfdHlwZSA9IFB5RXJyX09jY3VycmVkKCk7CisrICAgICAgICBpZiAoZXhjX3R5cGUp IHsKKysgICAgICAgICAgaWYgKGxpa2VseShfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNo ZXMoZXhjX3R5cGUsIFB5RXhjX1N0b3BJdGVyYXRpb24pKSkgUHlFcnJfQ2xlYXIoKTsKKysgICAg ICAgICAgZWxzZSBfX1BZWF9FUlIoMCwgOTEzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICAgIH0K KysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81 KTsKKysgICAgfQorKyAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X2osIF9fcHl4X3RfNSk7 CisrICAgIF9fcHl4X3RfNSA9IDA7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAg ICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X2ksIF9fcHl4X3RfMSk7CisrICAgIF9fcHl4X3Rf NSA9IF9fUHl4X1B5SW50X0FkZE9iakMoX19weXhfdF8xLCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7 IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJy b3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworKyAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsKKysgICAgX19weXhfdF8xID0gX19weXhfdF81OworKyAgICBfX3B5eF90XzUgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgwOAorLSAqICAgICAg ICAgICAgIHJhaXNlIE1QVkVycm9yKCJPcGVuR0wgQVBJIG5vdCBhdmFpbGFibGUiKQorLSAqIAor LSAqICAgICAgICAgY3R4ID0gT3BlbkdMQ29udGV4dCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIGN0eC5fY3R4ID0gPG1wdl9vcGVuZ2xfY2JfY29udGV4dCo+X2N0 eAorLSAqIAorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4 dCkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA4MDgsIF9fcHl4X0wx X2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX3B5eF92X2N0eCA9ICgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqKV9f cHl4X3RfMik7CistICBfX3B5eF90XzIgPSAwOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjgwOQorLSAqIAorLSAqICAgICAgICAgY3R4ID0gT3BlbkdMQ29udGV4dCgp CistICogICAgICAgICBjdHguX2N0eCA9IDxtcHZfb3BlbmdsX2NiX2NvbnRleHQqPl9jdHggICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICAgICAgcmV0dXJuIGN0eAor LSAqLworLSAgX19weXhfdl9jdHgtPl9jdHggPSAoKHN0cnVjdCBtcHZfb3BlbmdsX2NiX2NvbnRl eHQgKilfX3B5eF92X19jdHgpOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjgxMQorLSAqICAgICAgICAgY3R4Ll9jdHggPSA8bXB2X29wZW5nbF9jYl9jb250ZXh0Kj5f Y3R4CistICogCistICogICAgICAgICByZXR1cm4gY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxNAor ICAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6CisrICogICAgICAgICBmb3IgaSwgaiBpbiBl bnVtZXJhdGUoc2VsZi5vd25lZCk6CisrICogICAgICAgICAgICAgaWYgajogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICBmcmVlKHNlbGYucGFyYW1zW2ld LmRhdGEpCisrICogCisgICovCistICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19QeXhf SU5DUkVGKCgoUHlPYmplY3QgKilfX3B5eF92X2N0eCkpOworLSAgX19weXhfciA9ICgoUHlPYmpl Y3QgKilfX3B5eF92X2N0eCk7CistICBnb3RvIF9fcHl4X0wwOworKyAgICBfX3B5eF90XzYgPSBf X1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9qKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8 IDApKSBfX1BZWF9FUlIoMCwgOTE0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgaWYgKF9fcHl4X3Rf NikgeworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgwMQorLSAqICAg ICAgICAgc2VsZi5fY3R4ID0gTlVMTAorLSAqIAorLSAqICAgICBkZWYgb3BlbmdsX2NiX2FwaShz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiB2b2lk ICpjYgorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTUKKysgKiAg ICAgICAgIGZvciBpLCBqIGluIGVudW1lcmF0ZShzZWxmLm93bmVkKToKKysgKiAgICAgICAgICAg ICBpZiBqOgorKyAqICAgICAgICAgICAgICAgICBmcmVlKHNlbGYucGFyYW1zW2ldLmRhdGEpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKysgKiBjZGVmIHZvaWQgKmdldF9wb2lu dGVyKGNvbnN0IGNoYXIgKm5hbWUsIG9iamVjdCBvYmopOgorICAqLworKyAgICAgIF9fcHl4X3Rf NyA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3ZfaSk7IGlmICh1bmxpa2VseSgoX19w eXhfdF83ID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJS KDAsIDkxNSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgZnJlZSgoX19weXhfdl9zZWxmLT5wYXJh bXNbX19weXhfdF83XSkuZGF0YSk7CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0g IF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9f UHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQub3BlbmdsX2NiX2Fw aSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19w eXhfciA9IE5VTEw7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YREVDUkVGKChQeU9iamVjdCAq KV9fcHl4X3ZfY3R4KTsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxMworLSAqICAgICAgICAgcmV0dXJuIGN0eAor LSAqIAorLSAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuc2h1dGRvd24oKQorKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTQKKysgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYp OgorKyAqICAgICAgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOgorKyAqICAg ICAgICAgICAgIGlmIGo6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICAgICAgICAgZnJlZShzZWxmLnBhcmFtc1tpXS5kYXRhKQorICAqIAorICAqLworKyAgICB9Cisg CistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgdm9pZCBfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfNDdfX2RlYWxsb2NfXyhQeU9iamVjdCAqX19weXhfdl9zZWxm KTsgLypwcm90byovCistc3RhdGljIHZvaWQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzQ3X19kZWFsbG9jX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X2RlYWxsb2NfXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF80Nl9fZGVhbGxvY19fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworLQorLSAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy19CistCist c3RhdGljIHZvaWQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ2X19k ZWFsbG9jX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAq X19weXhfdl9zZWxmKSB7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmpl Y3QgKl9fcHl4X3RfMSA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKy0g IFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cist ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18iLCAwKTsK Ky0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MTQKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxMworICAqIAorICAqICAgICBkZWYgX19kZWFs bG9jX18oc2VsZik6CistICogICAgICAgICBzZWxmLnNodXRkb3duKCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqIGNkZWYgdm9pZCAqX2NfZ2V0cHJvY2FkZHJlc3Modm9p ZCAqY3R4LCBjb25zdCBjaGFyICpuYW1lKSB3aXRoIGdpbDoKKysgKiAgICAgICAgIGZvciBpLCBq IGluIGVudW1lcmF0ZShzZWxmLm93bmVkKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgICAgIGlmIGo6CisrICogICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJh bXNbaV0uZGF0YSkKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19zaHV0ZG93bik7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDgxNCwgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IE5VTEw7CistICBpZiAo Q1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworLSAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAg ICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQ eU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF8zKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgIH0KKyAgIH0KKy0gIF9fcHl4X3Rf MSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9f cHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDgxNCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODEzCistICogICAgICAgICByZXR1cm4gY3R4 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTEyCisrICogICAgICAgICBz ZWxmLmFkZF92b2lkcCh0LCBwKQorICAqIAorICAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuc2h1dGRvd24o KQorLSAqIAorKyAqICAgICAgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOgor KyAqICAgICAgICAgICAgIGlmIGo6CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KK0BAIC0xNjEyMiwzMiArMTU5MjQsMzQgQEAgc3RhdGljIHZvaWQgX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ2X19kZWFsbG9jX18oc3RydWN0IF9fcHl4X28KKyAg IF9fcHl4X0wxX2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4 X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9f UHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX19kZWFsbG9j X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsK KysgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKKysgIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgi dmlkY3V0dGVyLmxpYnMubXB2Ll9SZW5kZXJQYXJhbXMuX19kZWFsbG9jX18iLCBfX3B5eF9jbGlu ZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsKKyAgIF9fcHl4X0wwOjsK KysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9pKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9q KTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworIH0KKyAKKyAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxCisgICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVsdCBf X3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKQorKyAqICAgICByYWlzZSBU eXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2Jq ZWN0IGZvciBwaWNrbGluZyIpCisgICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19w eXhfc3RhdGUpOgorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDlfX3JlZHVjZV9j eXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1 bnVzZWQpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF80OV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgeworK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc181X19yZWR1 Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVj dCAqdW51c2VkKTsgLypwcm90byovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzVfX3JlZHVjZV9jeXRob25fXyhQeU9iamVj dCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKyAgIFB5 T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18gKHdyYXBwZXIpIiwg MCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzQ4X19yZWR1Y2VfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc180X19yZWR1Y2VfY3l0aG9uX18oKChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19w eXhfdl9zZWxmKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fUHl4X1Jl Zk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ4X19y ZWR1Y2VfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfNF9fcmVkdWNlX2N5 dGhvbl9fKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX1JlbmRlclBhcmFtcyAqX19weXhfdl9zZWxmKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9 IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4 X3RfMSA9IE5VTEw7CitAQCAtMTYxNTgsMTEgKzE1OTYyLDExIEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ4X19yZWR1Y2VfY3l0aG9u X18oQ1lUCisgCisgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoyCisgICogZGVmIF9fcmVkdWNlX2N5 dGhvbl9fKHNlbGYpOgorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1 Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBj b252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKyAgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9z dGF0ZSk6CistICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1 ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKQorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNl bGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNr bGluZyIpCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2J1 aWx0aW5fVHlwZUVycm9yLCBfX3B5eF90dXBsZV9fMywgTlVMTCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0g X19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF9idWlsdGluX1R5cGVFcnJvciwgX19weXhfdHVwbGVf XzUsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAyLCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhfUmFpc2Uo X19weXhfdF8xLCAwLCAwLCAwKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworQEAgLTE2MTcwLDE0ICsxNTk3NCwxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80OF9fcmVkdWNlX2N5dGhvbl9fKENZ VAorIAorICAgLyogIih0cmVlIGZyYWdtZW50KSI6MQorICAqIGRlZiBfX3JlZHVjZV9jeXRob25f XyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICByYWlzZSBUeXBl RXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9f IikKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29udmVy dGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorICAqIGRlZiBfX3NldHN0YXRl X2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworICAgX19weXhfTDFfZXJyb3I6OworICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzEpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5f X3JlZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlbmRl clBhcmFtcy5fX3JlZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9YR0lWRVJFRihf X3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworQEAgLTE2MTg2LDI1 ICsxNTk5MCwyNSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF80OF9fcmVkdWNlX2N5dGhvbl9fKENZVAorIAorIC8qICIodHJlZSBmcmFn bWVudCkiOjMKKyAgKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6CistICogICAgIHJhaXNl IFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Np bml0X18iKQorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBj b252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCisgICogZGVmIF9fc2V0 c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1 ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKQorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNl bGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNr bGluZyIpCisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF81MV9fc2V0c3RhdGVfY3l0 aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3Rh dGUpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF81MV9fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zf c2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfN19fc2V0c3Rh dGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19w eXhfc3RhdGUpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfN19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKyAgIFB5 T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyAod3JhcHBlciki LCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNTBfX3NldHN0YXRlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X19f cHl4X3N0YXRlKSk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzX1JlbmRlclBhcmFtc182X19zZXRzdGF0ZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3NlbGYpLCAoKFB5 T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5 eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF81MF9fc2V0c3RhdGVfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfNl9f c2V0c3RhdGVfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0g TlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhf dF8xID0gTlVMTDsKK0BAIC0xNjIxNCwxMSArMTYwMTgsMTEgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNTBfX3NldHN0YXRlX2N5dGhv bl9fKEMKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9f IiwgMCk7CisgCisgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0CistICogICAgIHJhaXNlIFR5cGVF cnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18i KQorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0 ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCisgICogZGVmIF9fc2V0c3RhdGVf Y3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5v IGRlZmF1bHQgX19yZWR1Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFy YW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4 X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3IsIF9fcHl4X3R1cGxlX180LCBO VUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgNCwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2J1aWx0aW5f VHlwZUVycm9yLCBfX3B5eF90dXBsZV9fNiwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CisgICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOworICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CitAQCAtMTYyMjYsMjY3NSArMTYwMzAsMjE4 NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF81MF9fc2V0c3RhdGVfY3l0aG9uX18oQworIAorICAgLyogIih0cmVlIGZyYWdtZW50KSI6 MworICAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKy0gKiAgICAgcmFpc2UgVHlwZUVy cm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5vbi10cml2aWFsIF9fY2luaXRfXyIp CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZlcnRl ZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKyAgKiBkZWYgX19zZXRzdGF0ZV9j eXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5v bi10cml2aWFsIF9fY2luaXRfXyIpCisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJh bXMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikK KyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19weXhfTDFfZXJyb3I6 OworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2 aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5fX3NldHN0YXRlX2N5dGhvbl9fIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX1B5eF9BZGRUcmFjZWJh Y2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVuZGVyUGFyYW1zLl9fc2V0c3RhdGVfY3l0aG9uX18i LCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKyAgIF9fcHl4 X3IgPSBOVUxMOworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODE2CistICogICAgICAgICBzZWxmLnNodXRkb3duKCkK Ky0gKiAKKy0gKiBjZGVmIHZvaWQgKl9jX2dldHByb2NhZGRyZXNzKHZvaWQgKmN0eCwgY29uc3Qg Y2hhciAqbmFtZSkgd2l0aCBnaWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgcmV0dXJuIDx2b2lkICo+PGludHB0cl90Pig8b2JqZWN0PmN0eCkobmFtZSkKKysvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE3CisrICogICAgICAgICAgICAgICAgIGZyZWUo c2VsZi5wYXJhbXNbaV0uZGF0YSkKKyAgKiAKKysgKiBjZGVmIHZvaWQgKmdldF9wb2ludGVyKGNv bnN0IGNoYXIgKm5hbWUsIG9iamVjdCBvYmopOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgIGNkZWYgdm9pZCAqcAorKyAqICAgICBpZiBQeUNhcHN1bGVfSXNWYWxpZChvYmos IG5hbWUpOgorICAqLworIAorLXN0YXRpYyB2b2lkICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fY19nZXRwcm9jYWRkcmVzcyh2b2lkICpfX3B5eF92X2N0eCwgY2hhciBjb25zdCAqX19w eXhfdl9uYW1lKSB7Cisrc3RhdGljIHZvaWQgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2 X2dldF9wb2ludGVyKGNoYXIgY29uc3QgKl9fcHl4X3ZfbmFtZSwgUHlPYmplY3QgKl9fcHl4X3Zf b2JqKSB7CisrICB2b2lkICpfX3B5eF92X3A7CisgICB2b2lkICpfX3B5eF9yOworICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAg UHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVM TDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAgaW50IF9fcHl4X3RfMTsKKysg IHZvaWQgKl9fcHl4X3RfMjsKKysgIGludCBfX3B5eF90XzM7CisrICBpbnQgX19weXhfdF80Owor ICAgaW50cHRyX3QgX19weXhfdF81OworKyAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7Cisr ICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzggPSBO VUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfOSA9IE5VTEw7CisgICBpbnQgX19weXhfbGluZW5v ID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5 eF9jbGluZW5vID0gMDsKKy0gICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgUHlHSUxTdGF0ZV9TVEFU RSBfX3B5eF9naWxzdGF0ZV9zYXZlID0gX19QeXhfUHlHSUxTdGF0ZV9FbnN1cmUoKTsKKy0gICNl bmRpZgorLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9jX2dldHByb2NhZGRyZXNzIiwg MCk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODE3CistICogCist ICogY2RlZiB2b2lkICpfY19nZXRwcm9jYWRkcmVzcyh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm5h bWUpIHdpdGggZ2lsOgorLSAqICAgICByZXR1cm4gPHZvaWQgKj48aW50cHRyX3Q+KDxvYmplY3Q+ Y3R4KShuYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogY2RlZiB2 b2lkIF9jX3VwZGF0ZWNiKHZvaWQgKmN0eCkgd2l0aCBnaWw6CistICovCistICBfX3B5eF90XzIg PSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgODE3LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzIpOworLSAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilfX3B5eF92X2N0 eCkpOworLSAgX19weXhfdF8zID0gKChQeU9iamVjdCAqKV9fcHl4X3ZfY3R4KTsgX19weXhfdF80 ID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRo b2RfQ2hlY2soX19weXhfdF8zKSkpIHsKKy0gICAgX19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NF TEYoX19weXhfdF8zKTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CistICAgICAgUHlP YmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMyk7CistICAg ICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7CistICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKKy0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywgZnVuY3Rpb24pOworLSAgICB9 CistICB9CistICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwy QXJncyhfX3B5eF90XzMsIF9fcHl4X3RfNCwgX19weXhfdF8yKSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF90XzIpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4MTcsIF9f cHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9ERUNS RUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50 X0FzX2ludHB0cl90KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF81ID09ICgoaW50 cHRyX3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDgxNywgX19weXhf TDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0g IF9fcHl4X3IgPSAoKHZvaWQgKikoKGludHB0cl90KV9fcHl4X3RfNSkpOworLSAgZ290byBfX3B5 eF9MMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJnZXRfcG9pbnRlciIsIDApOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNgorLSAqICAgICAgICAg c2VsZi5zaHV0ZG93bigpCistICogCistICogY2RlZiB2b2lkICpfY19nZXRwcm9jYWRkcmVzcyh2 b2lkICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUpIHdpdGggZ2lsOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIHJldHVybiA8dm9pZCAqPjxpbnRwdHJfdD4oPG9iamVjdD5jdHgp KG5hbWUpCistICogCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE5Cisr ICogY2RlZiB2b2lkICpnZXRfcG9pbnRlcihjb25zdCBjaGFyICpuYW1lLCBvYmplY3Qgb2JqKToK KysgKiAgICAgY2RlZiB2b2lkICpwCisrICogICAgIGlmIFB5Q2Fwc3VsZV9Jc1ZhbGlkKG9iaiwg bmFtZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHAgPSBQeUNh cHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCisrICogICAgIGVsaWYgaXNpbnN0YW5jZShvYmos IGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6CisgICovCisrICBfX3B5eF90 XzEgPSAoUHlDYXBzdWxlX0lzVmFsaWQoX19weXhfdl9vYmosIF9fcHl4X3ZfbmFtZSkgIT0gMCk7 CisrICBpZiAoX19weXhfdF8xKSB7CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0g IF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0 dGVyLmxpYnMubXB2Ll9jX2dldHByb2NhZGRyZXNzIiwgX19weXhfY2xpbmVubywgX19weXhfbGlu ZW5vLCBfX3B5eF9maWxlbmFtZSwgMSwgMCk7CistICBfX3B5eF9yID0gMDsKKy0gIF9fcHl4X0ww OjsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgI2lmZGVmIFdJVEhfVEhS RUFECistICBfX1B5eF9QeUdJTFN0YXRlX1JlbGVhc2UoX19weXhfZ2lsc3RhdGVfc2F2ZSk7Cist ICAjZW5kaWYKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjkyMAorKyAqICAgICBjZGVmIHZvaWQgKnAKKysgKiAgICAgaWYgUHlD YXBzdWxlX0lzVmFsaWQob2JqLCBuYW1lKToKKysgKiAgICAgICAgIHAgPSBQeUNhcHN1bGVfR2V0 UG9pbnRlcihvYmosIG5hbWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ZWxpZiBpc2luc3RhbmNlKG9iaiwgaW50KSBvciBpc2luc3RhbmNlKG9iaiwgbG9uZykgYW5kIG9i ajoKKysgKiAgICAgICAgIHAgPSA8dm9pZCAqPjxpbnRwdHJfdD5vYmoKKysgKi8KKysgICAgX19w eXhfdF8yID0gUHlDYXBzdWxlX0dldFBvaW50ZXIoX19weXhfdl9vYmosIF9fcHl4X3ZfbmFtZSk7 IGlmICh1bmxpa2VseShfX3B5eF90XzIgPT0gKCh2b2lkICopTlVMTCkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCA5MjAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF92X3Ag PSBfX3B5eF90XzI7CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxOQor LSAqICAgICByZXR1cm4gPHZvaWQgKj48aW50cHRyX3Q+KDxvYmplY3Q+Y3R4KShuYW1lKQorLSAq IAorLSAqIGNkZWYgdm9pZCBfY191cGRhdGVjYih2b2lkICpjdHgpIHdpdGggZ2lsOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICg8b2JqZWN0PmN0eCkoKQorLSAqIAorKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE5CisrICogY2RlZiB2b2lkICpn ZXRfcG9pbnRlcihjb25zdCBjaGFyICpuYW1lLCBvYmplY3Qgb2JqKToKKysgKiAgICAgY2RlZiB2 b2lkICpwCisrICogICAgIGlmIFB5Q2Fwc3VsZV9Jc1ZhbGlkKG9iaiwgbmFtZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHAgPSBQeUNhcHN1bGVfR2V0UG9pbnRl cihvYmosIG5hbWUpCisrICogICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGludCkgb3IgaXNpbnN0 YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6CisgICovCisrICAgIGdvdG8gX19weXhfTDM7CisrICB9 CisgCistc3RhdGljIHZvaWQgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfdXBkYXRl Y2Iodm9pZCAqX19weXhfdl9jdHgpIHsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBO VUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CistICBpbnQgX19weXhfbGluZW5v ID0gMDsKKy0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5 eF9jbGluZW5vID0gMDsKKy0gICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgUHlHSUxTdGF0ZV9TVEFU RSBfX3B5eF9naWxzdGF0ZV9zYXZlID0gX19QeXhfUHlHSUxTdGF0ZV9FbnN1cmUoKTsKKy0gICNl bmRpZgorLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9jX3VwZGF0ZWNiIiwgMCk7Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTIxCisrICogICAgIGlmIFB5Q2Fw c3VsZV9Jc1ZhbGlkKG9iaiwgbmFtZSk6CisrICogICAgICAgICBwID0gUHlDYXBzdWxlX0dldFBv aW50ZXIob2JqLCBuYW1lKQorKyAqICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBpbnQpIG9yIGlz aW5zdGFuY2Uob2JqLCBsb25nKSBhbmQgb2JqOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICBwID0gPHZvaWQgKj48aW50cHRyX3Q+b2JqCisrICogICAgIGVsc2U6Cisr ICovCisrICBfX3B5eF90XzMgPSBQeUludF9DaGVjayhfX3B5eF92X29iaik7IAorKyAgX19weXhf dF80ID0gKF9fcHl4X3RfMyAhPSAwKTsKKysgIGlmICghX19weXhfdF80KSB7CisrICB9IGVsc2Ug eworKyAgICBfX3B5eF90XzEgPSBfX3B5eF90XzQ7CisrICAgIGdvdG8gX19weXhfTDRfYm9vbF9i aW5vcF9kb25lOworKyAgfQorKyAgX19weXhfdF80ID0gUHlMb25nX0NoZWNrKF9fcHl4X3Zfb2Jq KTsgCisrICBfX3B5eF90XzMgPSAoX19weXhfdF80ICE9IDApOworKyAgaWYgKF9fcHl4X3RfMykg eworKyAgfSBlbHNlIHsKKysgICAgX19weXhfdF8xID0gX19weXhfdF8zOworKyAgICBnb3RvIF9f cHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKKysgIH0KKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2Jq ZWN0X0lzVHJ1ZShfX3B5eF92X29iaik7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19Q WVhfRVJSKDAsIDkyMSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX3B5eF90XzM7 CisrICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OworKyAgaWYgKGxpa2VseShfX3B5eF90XzEp KSB7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODIwCistICogCist ICogY2RlZiB2b2lkIF9jX3VwZGF0ZWNiKHZvaWQgKmN0eCkgd2l0aCBnaWw6CistICogICAgICg8 b2JqZWN0PmN0eCkoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjIKKysgKiAgICAgICAgIHAgPSBQeUNhcHN1bGVf R2V0UG9pbnRlcihvYmosIG5hbWUpCisrICogICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGludCkg b3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6CisrICogICAgICAgICBwID0gPHZvaWQg Kj48aW50cHRyX3Q+b2JqICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZWxz ZToKKysgKiAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlVua25vd24gb3IgaW52YWxpZCBwb2lu dGVyIG9iamVjdDogJXIiICUgb2JqKQorKyAqLworKyAgICBfX3B5eF90XzUgPSBfX1B5eF9QeUlu dF9Bc19pbnRwdHJfdChfX3B5eF92X29iaik7IGlmICh1bmxpa2VseSgoX19weXhfdF81ID09ICgo aW50cHRyX3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDkyMiwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3ZfcCA9ICgodm9pZCAqKSgoaW50cHRyX3QpX19weXhf dF81KSk7CisrCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjEKKysg KiAgICAgaWYgUHlDYXBzdWxlX0lzVmFsaWQob2JqLCBuYW1lKToKKysgKiAgICAgICAgIHAgPSBQ eUNhcHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCisrICogICAgIGVsaWYgaXNpbnN0YW5jZShv YmosIGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHAgPSA8dm9pZCAqPjxpbnRwdHJfdD5vYmoKKysg KiAgICAgZWxzZToKKysgKi8KKysgICAgZ290byBfX3B5eF9MMzsKKysgIH0KKysKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjQKKysgKiAgICAgICAgIHAgPSA8dm9pZCAq PjxpbnRwdHJfdD5vYmoKKysgKiAgICAgZWxzZToKKysgKiAgICAgICAgIHJhaXNlIFB5TVBWRXJy b3IoIlVua25vd24gb3IgaW52YWxpZCBwb2ludGVyIG9iamVjdDogJXIiICUgb2JqKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHJldHVybiBwCisgICogCistICogY2RlZiBj bGFzcyBPcGVuR0xDb250ZXh0KG9iamVjdCk6CisgICovCistICBfX1B5eF9JTkNSRUYoKChQeU9i amVjdCAqKV9fcHl4X3ZfY3R4KSk7CistICBfX3B5eF90XzIgPSAoKFB5T2JqZWN0ICopX19weXhf dl9jdHgpOyBfX3B5eF90XzMgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAm JiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICBfX3B5eF90XzMg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3Rf MykpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04o X19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKKy0gICAgICBfX1B5 eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBm dW5jdGlvbik7CisrICAvKmVsc2UqLyB7CisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF83LCBfX3B5eF9uX3NfUHlNUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF83 KSkgX19QWVhfRVJSKDAsIDkyNCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOworKyAgICBfX3B5eF90XzggPSBfX1B5eF9QeVN0cmluZ19Gb3JtYXRTYWZlKF9f cHl4X2twX3NfVW5rbm93bl9vcl9pbnZhbGlkX3BvaW50ZXJfb2JqZWMsIF9fcHl4X3Zfb2JqKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBfX1BZWF9FUlIoMCwgOTI0LCBfX3B5eF9MMV9lcnJv cikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfOCk7CisrICAgIF9fcHl4X3RfOSA9IE5VTEw7 CisrICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF83KSkpIHsKKysgICAgICBfX3B5eF90XzkgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzcpOworKyAgICAgIGlmIChsaWtlbHkoX19weXhfdF85KSkgeworKyAgICAgICAgUHlP YmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNyk7CisrICAg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF85KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5j dGlvbik7CisrICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNywgZnVuY3Rpb24pOwor KyAgICAgIH0KKyAgICAgfQorKyAgICBfX3B5eF90XzYgPSAoX19weXhfdF85KSA/IF9fUHl4X1B5 T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzcsIF9fcHl4X3RfOSwgX19weXhfdF84KSA6IF9fUHl4 X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF83LCBfX3B5eF90XzgpOworKyAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzgpOyBfX3B5eF90XzggPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9f UFlYX0VSUigwLCA5MjQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisrICAg IF9fUHl4X1JhaXNlKF9fcHl4X3RfNiwgMCwgMCwgMCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICBfX1BZWF9FUlIoMCwgOTI0LCBfX3B5eF9MMV9l cnJvcikKKyAgIH0KKy0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9B cmcoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDgyMCwgX19weXhf TDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7CisrICBfX3B5eF9MMzo7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6ODE5CistICogICAgIHJldHVybiA8dm9pZCAqPjxpbnRwdHJfdD4oPG9iamVj dD5jdHgpKG5hbWUpCistICogCistICogY2RlZiB2b2lkIF9jX3VwZGF0ZWNiKHZvaWQgKmN0eCkg d2l0aCBnaWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgKDxvYmplY3Q+ Y3R4KSgpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTI1CisrICogICAg IGVsc2U6CisrICogICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJVbmtub3duIG9yIGludmFsaWQg cG9pbnRlciBvYmplY3Q6ICVyIiAlIG9iaikKKysgKiAgICAgcmV0dXJuIHAgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqIAorKyAqIEBjeXRob24uaW50ZXJuYWwKKyAgKi8KKy0KKy0g IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IF9fcHl4X3ZfcDsKKyAgIGdv dG8gX19weXhfTDA7CistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CistICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMyk7CistICBfX1B5eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5f Y191cGRhdGVjYiIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUs IDEsIDApOworLSAgX19weXhfTDA6OworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 CistICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gIF9fUHl4X1B5R0lMU3RhdGVfUmVsZWFzZShfX3B5 eF9naWxzdGF0ZV9zYXZlKTsKKy0gICNlbmRpZgorLX0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODI4CistICogICAgICAgICBvYmplY3QgdXBkYXRlX2NiCisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE3CisrICogICAgICAgICAgICAgICAgIGZy ZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkKKyAgKiAKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmluaXRlZCA9 IEZhbHNlCistICogICAgICAgICB3YXJuaW5ncy53YXJuKCJPcGVuR0xDb250ZXh0IGlzIGRlcHJl Y2F0ZWQsIHBsZWFzZSBzd2l0Y2ggdG8gUmVuZGVyQ29udGV4dCIsIERlcHJlY2F0aW9uV2Fybmlu ZykKKysgKiBjZGVmIHZvaWQgKmdldF9wb2ludGVyKGNvbnN0IGNoYXIgKm5hbWUsIG9iamVjdCBv YmopOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGNkZWYgdm9pZCAqcAor KyAqICAgICBpZiBQeUNhcHN1bGVfSXNWYWxpZChvYmosIG5hbWUpOgorICAqLworIAorLS8qIFB5 dGhvbiB3cmFwcGVyICovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNPcGVuR0xDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0 aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMV9f aW5pdF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9i amVjdCAqX19weXhfa3dkcykgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fICh3cmFw cGVyKSIsIDApOworLSAgaWYgKHVubGlrZWx5KFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykg PiAwKSkgeworLSAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAxLCAw LCAwLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgcmV0dXJuIC0xO30KKy0gIGlmICh1 bmxpa2VseShfX3B5eF9rd2RzKSAmJiB1bmxpa2VseShQeURpY3RfU2l6ZShfX3B5eF9rd2RzKSA+ IDApICYmIHVubGlrZWx5KCFfX1B5eF9DaGVja0tleXdvcmRTdHJpbmdzKF9fcHl4X2t3ZHMsICJf X2luaXRfXyIsIDApKSkgcmV0dXJuIC0xOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfX19pbml0X18oKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICopX19weXhfdl9zZWxmKSk7Cist CisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9f UHl4X1hERUNSRUYoX19weXhfdF82KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsK KysgIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0dGVyLmxpYnMubXB2LmdldF9wb2ludGVy IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSwgMSwgMCk7Cisr ICBfX3B5eF9yID0gMDsKKysgIF9fcHl4X0wwOjsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRpYyBpbnQgX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpfX3B5eF92X3NlbGYp IHsKKy0gIGludCBfX3B5eF9yOworKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 MjkKKysgKiBAY3l0aG9uLmludGVybmFsCisrICogY2RlZiBjbGFzcyBSZW5kZXJGcmFtZUluZm8o b2JqZWN0KToKKysgKiAgICAgY2RlZiBfZnJvbV9zdHJ1Y3Qoc2VsZiwgbXB2X3JlbmRlcl9mcmFt ZV9pbmZvICppbmZvKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg c2VsZi5wcmVzZW50ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZP X1BSRVNFTlQpCisrICogICAgICAgICBzZWxmLnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFncyAm IE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpCisrICovCisrCisrc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNVJlbmRlckZyYW1lSW5mb19fZnJvbV9z dHJ1Y3Qoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJ bmZvICpfX3B5eF92X3NlbGYsIHN0cnVjdCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKl9fcHl4X3Zf aW5mbykgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMiA9IE5VTEw7CisrICBpbnQgX19weXhfdF8yOworICAgaW50IF9fcHl4X2xpbmVu byA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18i LCAwKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfZnJvbV9zdHJ1Y3QiLCAwKTsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MjkKKy0gKiAKKy0gKiAg ICAgZGVmIF9faW5pdF9fKHNlbGYpOgorLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB3YXJuaW5ncy53YXJuKCJP cGVuR0xDb250ZXh0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBzd2l0Y2ggdG8gUmVuZGVyQ29udGV4 dCIsIERlcHJlY2F0aW9uV2FybmluZykKKy0gKiAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MzAKKysgKiBjZGVmIGNsYXNzIFJlbmRlckZyYW1lSW5mbyhvYmplY3QpOgor KyAqICAgICBjZGVmIF9mcm9tX3N0cnVjdChzZWxmLCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKmlu Zm8pOgorKyAqICAgICAgICAgc2VsZi5wcmVzZW50ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBW X1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgIHNlbGYucmVkcmF3ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRF Ul9GUkFNRV9JTkZPX1JFRFJBVykKKysgKiAgICAgICAgIHNlbGYucmVwZWF0ID0gYm9vbChpbmZv WzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVBVCkKKyAgKi8KKy0gIF9fcHl4 X3Zfc2VsZi0+aW5pdGVkID0gMDsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWlu dDY0X3QoKChfX3B5eF92X2luZm9bMF0pLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BS RVNFTlQpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMwLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19weXhfdF8yID0g X19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIg PCAwKSkgX19QWVhfRVJSKDAsIDkzMCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYo X19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5Qm9vbF9G cm9tTG9uZygoISghX19weXhfdF8yKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA5MzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9z ZWxmKSwgX19weXhfbl9zX3ByZXNlbnQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMw LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgzMAorLSAqICAg ICBkZWYgX19pbml0X18oc2VsZik6CistICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCist ICogICAgICAgICB3YXJuaW5ncy53YXJuKCJPcGVuR0xDb250ZXh0IGlzIGRlcHJlY2F0ZWQsIHBs ZWFzZSBzd2l0Y2ggdG8gUmVuZGVyQ29udGV4dCIsIERlcHJlY2F0aW9uV2FybmluZykgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICBkZWYgaW5pdF9nbChzZWxmLCBl eHRzLCBnZXRfcHJvY19hZGRyZXNzKToKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo5MzEKKysgKiAgICAgY2RlZiBfZnJvbV9zdHJ1Y3Qoc2VsZiwgbXB2X3JlbmRlcl9mcmFt ZV9pbmZvICppbmZvKToKKysgKiAgICAgICAgIHNlbGYucHJlc2VudCA9IGJvb2woaW5mb1swXS5m bGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19QUkVTRU5UKQorKyAqICAgICAgICAgc2VsZi5y ZWRyYXcgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUkVEUkFX KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLnJlcGVhdCA9 IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpCisrICog ICAgICAgICBzZWxmLmJsb2NrX3ZzeW5jID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRF Ul9GUkFNRV9JTkZPX0JMT0NLX1ZTWU5DKQorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFs TmFtZShfX3B5eF90XzEsIF9fcHl4X25fc193YXJuaW5ncyk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDgzMCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBf X1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KCgoX19weXhfdl9pbmZvWzBdKS5mbGFncyAmIE1QVl9S RU5ERVJfRlJBTUVfSU5GT19SRURSQVcpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzEsIF9f cHl4X25fc193YXJuKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgODMw LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgX19weXhf dF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5 eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDkzMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5 T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90dXBsZV9fNSwgTlVMTCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDgzMCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoIV9fcHl4X3RfMikpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7CisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cigoKFB5T2JqZWN0ICop X19weXhfdl9zZWxmKSwgX19weXhfbl9zX3JlZHJhdywgX19weXhfdF8xKSA8IDApIF9fUFlYX0VS UigwLCA5MzEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODI4 CistICogICAgICAgICBvYmplY3QgdXBkYXRlX2NiCistICogCistICogICAgIGRlZiBfX2luaXRf XyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5p bml0ZWQgPSBGYWxzZQorLSAqICAgICAgICAgd2FybmluZ3Mud2FybigiT3BlbkdMQ29udGV4dCBp cyBkZXByZWNhdGVkLCBwbGVhc2Ugc3dpdGNoIHRvIFJlbmRlckNvbnRleHQiLCBEZXByZWNhdGlv bldhcm5pbmcpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTMyCisrICog ICAgICAgICBzZWxmLnByZXNlbnQgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZS QU1FX0lORk9fUFJFU0VOVCkKKysgKiAgICAgICAgIHNlbGYucmVkcmF3ID0gYm9vbChpbmZvWzBd LmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFRFJBVykKKysgKiAgICAgICAgIHNlbGYu cmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVB VCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5ibG9ja192 c3luYyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19CTE9DS19W U1lOQykKKysgKiAgICAgICAgIHNlbGYudGFyZ2V0X3RpbWUgPSBpbmZvWzBdLnRhcmdldF90aW1l CisgICovCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KCgoX19weXhf dl9pbmZvWzBdKS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMyLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3Rf SXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJS KDAsIDkzMiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISghX19w eXhfdF8yKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzIsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBpZiAoX19QeXhf UHlPYmplY3RfU2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9z X3JlcGVhdCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCA5MzIsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSAwOworLSAgZ290byBfX3B5eF9MMDsK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzMKKysgKiAgICAgICAgIHNl bGYucmVkcmF3ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JF RFJBVykKKysgKiAgICAgICAgIHNlbGYucmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBW X1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVBVCkKKysgKiAgICAgICAgIHNlbGYuYmxvY2tfdnN5bmMg PSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYudGFyZ2V0X3Rp bWUgPSBpbmZvWzBdLnRhcmdldF90aW1lCisrICogICAgICAgICByZXR1cm4gc2VsZgorKyAqLwor KyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCgoKF9fcHl4X3ZfaW5mb1sw XSkuZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNU cnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAs IDkzMywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISghX19weXhf dF8yKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBpZiAoX19QeXhfUHlP YmplY3RfU2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX2Js b2NrX3ZzeW5jLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDkzMywgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzQKKysgKiAgICAgICAgIHNlbGYucmVw ZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVBVCkK KysgKiAgICAgICAgIHNlbGYuYmxvY2tfdnN5bmMgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZf UkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMpCisrICogICAgICAgICBzZWxmLnRhcmdldF90 aW1lID0gaW5mb1swXS50YXJnZXRfdGltZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICByZXR1cm4gc2VsZgorKyAqIAorKyAqLworKyAgX19weXhfdF8xID0gX19QeXhf UHlJbnRfRnJvbV9pbnQ2NF90KChfX3B5eF92X2luZm9bMF0pLnRhcmdldF90aW1lKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTM0LCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJT dHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc190YXJnZXRfdGltZSwgX19w eXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCA5MzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTM1CisrICogICAgICAgICBzZWxmLmJsb2NrX3ZzeW5jID0gYm9v bChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX0JMT0NLX1ZTWU5DKQorKyAq ICAgICAgICAgc2VsZi50YXJnZXRfdGltZSA9IGluZm9bMF0udGFyZ2V0X3RpbWUKKysgKiAgICAg ICAgIHJldHVybiBzZWxmICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiBj ZGVmIGNsYXNzIFJlbmRlckNvbnRleHQob2JqZWN0KToKKysgKi8KKysgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CisrICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOwor KyAgX19weXhfciA9ICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpOworKyAgZ290byBfX3B5eF9M MDsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjkKKysgKiBAY3l0 aG9uLmludGVybmFsCisrICogY2RlZiBjbGFzcyBSZW5kZXJGcmFtZUluZm8ob2JqZWN0KToKKysg KiAgICAgY2RlZiBfZnJvbV9zdHJ1Y3Qoc2VsZiwgbXB2X3JlbmRlcl9mcmFtZV9pbmZvICppbmZv KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5wcmVzZW50 ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpCisr ICogICAgICAgICBzZWxmLnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJf RlJBTUVfSU5GT19SRURSQVcpCisrICovCisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K KyAgIF9fcHl4X0wxX2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2Lk9wZW5HTENvbnRleHQuX19pbml0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAtMTsKKysgIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckZyYW1lSW5mby5fZnJvbV9zdHJ1Y3Qi LCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4 X3IgPSAwOworICAgX19weXhfTDA6OworKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAK Ky0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODMyCistICogICAgICAgICB3YXJu aW5ncy53YXJuKCJPcGVuR0xDb250ZXh0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBzd2l0Y2ggdG8g UmVuZGVyQ29udGV4dCIsIERlcHJlY2F0aW9uV2FybmluZykKKy0gKiAKKy0gKiAgICAgZGVmIGlu aXRfZ2woc2VsZiwgZXh0cywgZ2V0X3Byb2NfYWRkcmVzcyk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIGV4dHMgPSBfc3RyZW5jKGV4dHMpIGlmIGV4dHMgaXMgbm90 IE5vbmUgZWxzZSBOb25lCistICogICAgICAgICBjZGVmIGNoYXIqIGV4dHNjID0gTlVMTAorKy8q ICIodHJlZSBmcmFnbWVudCkiOjEKKysgKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgY2RlZiB0dXBsZSBzdGF0ZQorKyAq ICAgICBjZGVmIG9iamVjdCBfZGljdAorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xD b250ZXh0XzNpbml0X2dsKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9h cmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF8zaW5pdF9nbChQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9f cHl4X2t3ZHMpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2V4dHMgPSAwOworLSAgUHlPYmplY3Qg Kl9fcHl4X3ZfZ2V0X3Byb2NfYWRkcmVzcyA9IDA7CistICBpbnQgX19weXhfbGluZW5vID0gMDsK Ky0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGlu ZW5vID0gMDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xNVJlbmRlckZyYW1lSW5mb18xX19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zf c2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCisrc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUlu Zm9fMV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVT RUQgUHlPYmplY3QgKnVudXNlZCkgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworICAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJp bml0X2dsICh3cmFwcGVyKSIsIDApOworLSAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5 eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19leHRzLCZfX3B5eF9uX3NfZ2V0X3Byb2NfYWRk cmVzcywwfTsKKy0gICAgUHlPYmplY3QqIHZhbHVlc1syXSA9IHswLDB9OworLSAgICBpZiAodW5s aWtlbHkoX19weXhfa3dkcykpIHsKKy0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAg Y29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7 CistICAgICAgc3dpdGNoIChwb3NfYXJncykgeworLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFd ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxM VEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0o X19weXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBj YXNlICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVf ZXJyb3I7CistICAgICAgfQorLSAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2Rz KTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNlICAwOgorLSAgICAg ICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhf a3dkcywgX19weXhfbl9zX2V4dHMpKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSBn b3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OworLSAgICAgICAgY2FzZSAgMToKKy0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9f UHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19nZXRfcHJvY19hZGRy ZXNzKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVsc2UgeworLSAgICAgICAgICBfX1B5 eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiaW5pdF9nbCIsIDEsIDIsIDIsIDEpOyBfX1BZWF9FUlIo MCwgODMyLCBfX3B5eF9MM19lcnJvcikKKy0gICAgICAgIH0KKy0gICAgICB9CistICAgICAgaWYg KHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1Bh cnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1 ZXMsIHBvc19hcmdzLCAiaW5pdF9nbCIpIDwgMCkpIF9fUFlYX0VSUigwLCA4MzIsIF9fcHl4X0wz X2Vycm9yKQorLSAgICAgIH0KKy0gICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4 X2FyZ3MpICE9IDIpIHsKKy0gICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAg ICB9IGVsc2UgeworLSAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJn cywgMCk7CistICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAx KTsKKy0gICAgfQorLSAgICBfX3B5eF92X2V4dHMgPSB2YWx1ZXNbMF07CistICAgIF9fcHl4X3Zf Z2V0X3Byb2NfYWRkcmVzcyA9IHZhbHVlc1sxXTsKKy0gIH0KKy0gIGdvdG8gX19weXhfTDRfYXJn dW1lbnRfdW5wYWNraW5nX2RvbmU7CistICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBf X1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiaW5pdF9nbCIsIDEsIDIsIDIsIFB5VHVwbGVfR0VU X1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgODMyLCBfX3B5eF9MM19lcnJvcikKKy0g IF9fcHl4X0wzX2Vycm9yOjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMu bXB2Lk9wZW5HTENvbnRleHQuaW5pdF9nbCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICBy ZXR1cm4gTlVMTDsKKy0gIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzJp bml0X2dsKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29u dGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfZXh0cywgX19weXhfdl9nZXRfcHJvY19hZGRy ZXNzKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyAo d3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTVSZW5kZXJGcmFtZUluZm9fX19yZWR1Y2VfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKilfX3B5eF92X3NlbGYpKTsK KyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzJpbml0X2dsKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQgKl9fcHl4 X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZXh0cywgUHlPYmplY3QgKl9fcHl4X3ZfZ2V0X3By b2NfYWRkcmVzcykgeworLSAgY2hhciAqX19weXhfdl9leHRzYzsKKy0gIGludCBfX3B5eF92X2Vy cjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNVJl bmRlckZyYW1lSW5mb19fX3JlZHVjZV9jeXRob25fXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmpl Y3QgKl9fcHl4X3Zfc3RhdGUgPSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX2RpY3QgPSAwOwor KyAgaW50IF9fcHl4X3ZfdXNlX3NldHN0YXRlOworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxM OworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEg PSBOVUxMOworICAgaW50IF9fcHl4X3RfMjsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxM OworKyAgaW50IF9fcHl4X3RfMzsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworICAg UHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBpbnQgX19weXhfdF82OworLSAgY2hhciAq X19weXhfdF83OworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5 eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiaW5pdF9nbCIsIDApOworLSAgX19QeXhfSU5DUkVGKF9fcHl4 X3ZfZXh0cyk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODMzCist ICogCistICogICAgIGRlZiBpbml0X2dsKHNlbGYsIGV4dHMsIGdldF9wcm9jX2FkZHJlc3MpOgor LSAqICAgICAgICAgZXh0cyA9IF9zdHJlbmMoZXh0cykgaWYgZXh0cyBpcyBub3QgTm9uZSBlbHNl IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBjaGFy KiBleHRzYyA9IE5VTEwKKy0gKiAgICAgICAgIGlmIGV4dHMgaXMgbm90IE5vbmU6CistICovCist ICBfX3B5eF90XzIgPSAoX19weXhfdl9leHRzICE9IFB5X05vbmUpOworLSAgaWYgKChfX3B5eF90 XzIgIT0gMCkpIHsKKy0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9f cHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA4 MzMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAg X19weXhfdF81ID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzQpKSkgeworLSAgICAgIF9fcHl4X3RfNSA9IFB5 TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNCk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUp KSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04o X19weXhfdF80KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworLSAgICAgICAg X19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhf dF80LCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4X3RfMyA9IChfX3B5 eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNCwgX19weXhfdF81LCBf X3B5eF92X2V4dHMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4 X3ZfZXh0cyk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsK Ky0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgODMzLCBfX3B5eF9M MV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBfX3B5eF90XzEgPSBfX3B5eF90XzM7 CistICAgIF9fcHl4X3RfMyA9IDA7CistICB9IGVsc2UgeworLSAgICBfX1B5eF9JTkNSRUYoUHlf Tm9uZSk7CistICAgIF9fcHl4X3RfMSA9IFB5X05vbmU7CistICB9CistICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3ZfZXh0cywgX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMSA9IDA7CisrICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18iLCAwKTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MzQKKy0gKiAgICAgZGVmIGluaXRfZ2wo c2VsZiwgZXh0cywgZ2V0X3Byb2NfYWRkcmVzcyk6CistICogICAgICAgICBleHRzID0gX3N0cmVu YyhleHRzKSBpZiBleHRzIGlzIG5vdCBOb25lIGVsc2UgTm9uZQorLSAqICAgICAgICAgY2RlZiBj aGFyKiBleHRzYyA9IE5VTEwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgaWYgZXh0cyBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgICAgICBleHRzYyA9IGV4dHMKKysg IC8qICIodHJlZSBmcmFnbWVudCkiOjUKKysgKiAgICAgY2RlZiBvYmplY3QgX2RpY3QKKysgKiAg ICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQorKyAqICAgICBzdGF0ZSA9ICgpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3Rf XycsIE5vbmUpCisrICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorICAqLworLSAgX19weXhf dl9leHRzYyA9IE5VTEw7CisrICBfX1B5eF9JTkNSRUYoX19weXhfZW1wdHlfdHVwbGUpOworKyAg X19weXhfdl9zdGF0ZSA9IF9fcHl4X2VtcHR5X3R1cGxlOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjgzNQorLSAqICAgICAgICAgZXh0cyA9IF9zdHJlbmMoZXh0cykg aWYgZXh0cyBpcyBub3QgTm9uZSBlbHNlIE5vbmUKKy0gKiAgICAgICAgIGNkZWYgY2hhciogZXh0 c2MgPSBOVUxMCistICogICAgICAgICBpZiBleHRzIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZXh0c2MgPSBleHRzCistICogICAgICAg ICB3aXRoIG5vZ2lsOgorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6NgorKyAqICAgICBjZGVmIGJp bnQgdXNlX3NldHN0YXRlCisrICogICAgIHN0YXRlID0gKCkKKysgKiAgICAgX2RpY3QgPSBnZXRh dHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6CisrICogICAgICAgICBzdGF0ZSArPSAoX2Rp Y3QsKQorICAqLworLSAgX19weXhfdF8yID0gKF9fcHl4X3ZfZXh0cyAhPSBQeV9Ob25lKTsKKy0g IF9fcHl4X3RfNiA9IChfX3B5eF90XzIgIT0gMCk7CistICBpZiAoX19weXhfdF82KSB7CisrICBf X3B5eF90XzEgPSBfX1B5eF9HZXRBdHRyMygoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19w eXhfbl9zX2RpY3QsIFB5X05vbmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigxLCA2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAg X19weXhfdl9fZGljdCA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7CisgCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MzYKKy0gKiAgICAgICAgIGNkZWYgY2hh ciogZXh0c2MgPSBOVUxMCistICogICAgICAgICBpZiBleHRzIGlzIG5vdCBOb25lOgorLSAqICAg ICAgICAgICAgIGV4dHNjID0gZXh0cyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vcGVuZ2xfY2Jf aW5pdF9nbChzZWxmLl9jdHgsIGV4dHNjLCAmX2NfZ2V0cHJvY2FkZHJlc3MsCisrICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjo3CisrICogICAgIHN0YXRlID0gKCkKKysgKiAgICAgX2RpY3QgPSBnZXRh dHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCisrICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25l OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzdGF0ZSArPSAoX2Rp Y3QsKQorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorICAqLworLSAgICBfX3B5eF90 XzcgPSBfX1B5eF9QeU9iamVjdF9Bc1dyaXRhYmxlU3RyaW5nKF9fcHl4X3ZfZXh0cyk7IGlmICh1 bmxpa2VseSgoIV9fcHl4X3RfNykgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4 MzYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX3B5eF92X2V4dHNjID0gX19weXhfdF83OworKyAg X19weXhfdF8yID0gKF9fcHl4X3ZfX2RpY3QgIT0gUHlfTm9uZSk7CisrICBfX3B5eF90XzMgPSAo X19weXhfdF8yICE9IDApOworKyAgaWYgKF9fcHl4X3RfMykgeworIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODM1CistICogICAgICAgICBleHRzID0gX3N0cmVuYyhl eHRzKSBpZiBleHRzIGlzIG5vdCBOb25lIGVsc2UgTm9uZQorLSAqICAgICAgICAgY2RlZiBjaGFy KiBleHRzYyA9IE5VTEwKKy0gKiAgICAgICAgIGlmIGV4dHMgaXMgbm90IE5vbmU6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBleHRzYyA9IGV4dHMKKy0gKiAg ICAgICAgIHdpdGggbm9naWw6CisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKysgKiAgICAg X2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCisrICogICAgIGlmIF9kaWN0 IGlzIG5vdCBOb25lOgorKyAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorKyAqICAg ICBlbHNlOgorICAqLworLSAgfQorKyAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygxKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgOCwgX19weXhfTDFfZXJyb3IpCisr ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9f ZGljdCk7CisrICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9fZGljdCk7CisrICAgIFB5VHVwbGVf U0VUX0lURU0oX19weXhfdF8xLCAwLCBfX3B5eF92X19kaWN0KTsKKysgICAgX19weXhfdF80ID0g UHlOdW1iZXJfSW5QbGFjZUFkZChfX3B5eF92X3N0YXRlLCBfX3B5eF90XzEpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCA4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworKyAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Zfc3RhdGUsICgoUHlPYmpl Y3QqKV9fcHl4X3RfNCkpOworKyAgICBfX3B5eF90XzQgPSAwOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjgzNworLSAqICAgICAgICAgaWYgZXh0cyBpcyBub3QgTm9u ZToKKy0gKiAgICAgICAgICAgICBleHRzYyA9IGV4dHMKKy0gKiAgICAgICAgIHdpdGggbm9naWw6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZf b3BlbmdsX2NiX2luaXRfZ2woc2VsZi5fY3R4LCBleHRzYywgJl9jX2dldHByb2NhZGRyZXNzLAor LSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dm9pZCAqPmdldF9w cm9jX2FkZHJlc3MpCisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjkKKysgKiAgICAgaWYgX2Rp Y3QgaXMgbm90IE5vbmU6CisrICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQorKyAqICAgICAg ICAgdXNlX3NldHN0YXRlID0gVHJ1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgIGVsc2U6CisrICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBGYWxzZQorICAqLworLSAgewor LSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwor LSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIo KTsKKy0gICAgICAjZW5kaWYKKy0gICAgICAvKnRyeToqLyB7CisrICAgIF9fcHl4X3ZfdXNlX3Nl dHN0YXRlID0gMTsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo4MzgKKy0gKiAgICAgICAgICAgICBleHRzYyA9IGV4dHMKKy0gKiAgICAgICAgIHdpdGggbm9n aWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9pbml0X2dsKHNlbGYuX2N0 eCwgZXh0c2MsICZfY19nZXRwcm9jYWRkcmVzcywgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dm9pZCAqPmdl dF9wcm9jX2FkZHJlc3MpCistICogICAgICAgICBpZiBlcnIgPCAwOgorKyAgICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjo3CisrICogICAgIHN0YXRlID0gKCkKKysgKiAgICAgX2RpY3QgPSBnZXRhdHRy KHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCisrICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzdGF0ZSArPSAoX2RpY3Qs KQorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorICAqLworLSAgICAgICAgX19weXhf dl9lcnIgPSBtcHZfb3BlbmdsX2NiX2luaXRfZ2woX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92 X2V4dHNjLCAoJl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX2dldHByb2NhZGRyZXNz KSwgKCh2b2lkICopX19weXhfdl9nZXRfcHJvY19hZGRyZXNzKSk7CistICAgICAgfQorKyAgICBn b3RvIF9fcHl4X0wzOworKyAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4MzcKKy0gKiAgICAgICAgIGlmIGV4dHMgaXMgbm90IE5vbmU6CistICogICAgICAg ICAgICAgZXh0c2MgPSBleHRzCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9pbml0 X2dsKHNlbGYuX2N0eCwgZXh0c2MsICZfY19nZXRwcm9jYWRkcmVzcywKKy0gKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZvaWQgKj5nZXRfcHJvY19hZGRyZXNzKQor KyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKKysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRy dWUKKysgKiAgICAgZWxzZToKKysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IEZhbHNlICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgaWYgdXNlX3NldHN0YXRlOgorKyAqICAg ICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiks IDB4ZDQxZDhjZCwgTm9uZSksIHN0YXRlCisgICovCistICAgICAgLypmaW5hbGx5OiovIHsKKy0g ICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAor LSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAgICAgICAgICBQeV9CTE9DS19U SFJFQURTCistICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICBnb3RvIF9fcHl4X0w2OworLSAg ICAgICAgfQorLSAgICAgICAgX19weXhfTDY6OworLSAgICAgIH0KKysgIC8qZWxzZSovIHsKKysg ICAgX19weXhfdl91c2Vfc2V0c3RhdGUgPSAwOworICAgfQorKyAgX19weXhfTDM6OworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg0MAorLSAqICAgICAgICAgICAgIGVy ciA9IG1wdl9vcGVuZ2xfY2JfaW5pdF9nbChzZWxmLl9jdHgsIGV4dHNjLCAmX2NfZ2V0cHJvY2Fk ZHJlc3MsCistICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2b2lk ICo+Z2V0X3Byb2NfYWRkcmVzcykKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCist ICogCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgorKyAqICAgICBlbHNlOgorKyAqICAgICAg ICAgdXNlX3NldHN0YXRlID0gRmFsc2UKKysgKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVf UmVuZGVyRnJhbWVJbmZvLCAodHlwZShzZWxmKSwgMHhkNDFkOGNkLCBOb25lKSwgc3RhdGUKKysg KiAgICAgZWxzZToKKyAgKi8KKy0gIF9fcHl4X3RfNiA9ICgoX19weXhfdl9lcnIgPCAwKSAhPSAw KTsKKy0gIGlmICh1bmxpa2VseShfX3B5eF90XzYpKSB7CisrICBfX3B5eF90XzMgPSAoX19weXhf dl91c2Vfc2V0c3RhdGUgIT0gMCk7CisrICBpZiAoX19weXhfdF8zKSB7CisgCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NDEKKy0gKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPHZvaWQgKj5nZXRfcHJvY19hZGRyZXNzKQorLSAqICAgICAg ICAgaWYgZXJyIDwgMDoKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0g VHJ1ZQorKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMworKyAqICAgICAgICAgdXNlX3NldHN0 YXRlID0gRmFsc2UKKysgKiAgICAgaWYgdXNlX3NldHN0YXRlOgorKyAqICAgICAgICAgcmV0dXJu IF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwg Tm9uZSksIHN0YXRlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZWxzZToK KysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8sICh0eXBl KHNlbGYpLCAweGQ0MWQ4Y2QsIHN0YXRlKQorICAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9i YWxOYW1lKF9fcHl4X3RfMywgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzMpKSBfX1BZWF9FUlIoMCwgODQxLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7CistICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9f cHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgODQxLCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19weXhfdW5waWNrbGVfUmVu ZGVyRnJhbWVJbmZvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMSwgMTMs IF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgX19w eXhfdF81ID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2Vs eShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzMpKSkgeworLSAgICAgIF9fcHl4X3RfNSA9IFB5TWV0 aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7 CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19w eXhfdF8zKTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworLSAgICAgICAgX19Q eXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8z LCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4X3RfMSA9IChfX3B5eF90 XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMywgX19weXhfdF81LCBfX3B5 eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzMsIF9fcHl4X3RfNCk7 CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAgIGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDg0MSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4 X3RfMSA9IFB5VHVwbGVfTmV3KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigxLCAxMywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAgX19QeXhf UmFpc2UoX19weXhfdF8xLCAwLCAwLCAwKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistICAgIF9fUFlYX0VSUigwLCA4NDEsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZikpKSk7CisrICAgIF9fUHl4X0dJVkVSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQ eU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF8xLCAwLCAoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkp KTsKKysgICAgX19QeXhfSU5DUkVGKF9fcHl4X2ludF8yMjI0MTkxNDkpOworKyAgICBfX1B5eF9H SVZFUkVGKF9fcHl4X2ludF8yMjI0MTkxNDkpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfMSwgMSwgX19weXhfaW50XzIyMjQxOTE0OSk7CisrICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25l KTsKKysgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShf X3B5eF90XzEsIDIsIFB5X05vbmUpOworKyAgICBfX3B5eF90XzUgPSBQeVR1cGxlX05ldygzKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9y KQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKysgICAgX19QeXhfR0lWRVJFRihfX3B5 eF90XzQpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNSwgMCwgX19weXhfdF80KTsK KysgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfNSwgMSwgX19weXhfdF8xKTsKKysgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc3RhdGUp OworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc3RhdGUpOworKyAgICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfNSwgMiwgX19weXhfdl9zdGF0ZSk7CisrICAgIF9fcHl4X3RfNCA9IDA7Cisr ICAgIF9fcHl4X3RfMSA9IDA7CisrICAgIF9fcHl4X3IgPSBfX3B5eF90XzU7CisrICAgIF9fcHl4 X3RfNSA9IDA7CisrICAgIGdvdG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo4NDAKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2Ni X2luaXRfZ2woc2VsZi5fY3R4LCBleHRzYywgJl9jX2dldHByb2NhZGRyZXNzLAorLSAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dm9pZCAqPmdldF9wcm9jX2FkZHJl c3MpCistICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorLSAqIAorKyAgICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxMgorKyAqICAgICBlbHNlOgorKyAqICAgICAgICAgdXNlX3NldHN0YXRl ID0gRmFsc2UKKysgKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZv LCAodHlwZShzZWxmKSwgMHhkNDFkOGNkLCBOb25lKSwgc3RhdGUKKysgKiAgICAgZWxzZToKKyAg Ki8KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NDMKKy0g KiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCistICogCistICogICAgICAgICBzZWxm LmluaXRlZCA9IFRydWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAg ICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6CisrICAvKiAiKHRyZWUgZnJhZ21l bnQpIjoxNQorKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5m bywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwgTm9uZSksIHN0YXRlCisrICogICAgIGVsc2U6Cisr ICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCAodHlwZShz ZWxmKSwgMHhkNDFkOGNkLCBzdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq IGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgX19w eXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUp CisgICovCistICBfX3B5eF92X3NlbGYtPmluaXRlZCA9IDE7CisrICAvKmVsc2UqLyB7CisrICAg IF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF81LCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyk7IGlmICh1 bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDEsIDE1LCBfX3B5eF9MMV9lcnJvcikKKysg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CisrICAgIF9fcHl4X3RfMSA9IFB5VHVwbGVfTmV3 KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNSwgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9JTkNSRUYo KChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7CisrICAg IF9fUHl4X0dJVkVSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zf c2VsZikpKSk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCAoKFB5T2JqZWN0 ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKysgICAgX19QeXhfSU5D UkVGKF9fcHl4X2ludF8yMjI0MTkxNDkpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X2ludF8y MjI0MTkxNDkpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMSwgX19weXhfaW50 XzIyMjQxOTE0OSk7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3N0YXRlKTsKKysgICAgX19Q eXhfR0lWRVJFRihfX3B5eF92X3N0YXRlKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzEsIDIsIF9fcHl4X3Zfc3RhdGUpOworKyAgICBfX3B5eF90XzQgPSBQeVR1cGxlX05ldygyKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9y KQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgICAgX19QeXhfR0lWRVJFRihfX3B5 eF90XzUpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNCwgMCwgX19weXhfdF81KTsK KysgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfNCwgMSwgX19weXhfdF8xKTsKKysgICAgX19weXhfdF81ID0gMDsKKysgICAgX19weXhf dF8xID0gMDsKKysgICAgX19weXhfciA9IF9fcHl4X3RfNDsKKysgICAgX19weXhfdF80ID0gMDsK KysgICAgZ290byBfX3B5eF9MMDsKKysgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo4MzIKKy0gKiAgICAgICAgIHdhcm5pbmdzLndhcm4oIk9wZW5HTENvbnRleHQg aXMgZGVwcmVjYXRlZCwgcGxlYXNlIHN3aXRjaCB0byBSZW5kZXJDb250ZXh0IiwgRGVwcmVjYXRp b25XYXJuaW5nKQorLSAqIAorLSAqICAgICBkZWYgaW5pdF9nbChzZWxmLCBleHRzLCBnZXRfcHJv Y19hZGRyZXNzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZXh0 cyA9IF9zdHJlbmMoZXh0cykgaWYgZXh0cyBpcyBub3QgTm9uZSBlbHNlIE5vbmUKKy0gKiAgICAg ICAgIGNkZWYgY2hhciogZXh0c2MgPSBOVUxMCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisr ICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgIGNkZWYgdHVwbGUgc3RhdGUKKysgKiAgICAgY2RlZiBvYmplY3QgX2RpY3QK KyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IFB5X05v bmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gIGdvdG8gX19weXhfTDA7CisgICBfX3B5eF9M MV9lcnJvcjo7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMyk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CisgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5PcGVuR0xDb250ZXh0LmluaXRfZ2wiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2 LlJlbmRlckZyYW1lSW5mby5fX3JlZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9M MDo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfZXh0cyk7CisrICBfX1B5eF9YREVDUkVGKF9f cHl4X3Zfc3RhdGUpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X19kaWN0KTsKKyAgIF9fUHl4 X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Cisg ICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjg0NQorLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCistICogCistICogICAgIGRl ZiBzZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgc2VsZi51cGRhdGVfY2IgPSBjYgorLSAqICAgICAgICAgd2l0aCBu b2dpbDoKKysvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNgorKyAqICAgICBlbHNlOgorKyAqICAgICAg ICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4 ZDQxZDhjZCwgc3RhdGUpCisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhf c3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIF9fcHl4X3VucGlj a2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQorICAqLwor IAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzVzZXRfdXBkYXRlX2NhbGxiYWNrKFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2NiKTsgLypwcm90byovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xD b250ZXh0XzVzZXRfdXBkYXRlX2NhbGxiYWNrKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF92X2NiKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKnByb3Rv Ki8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNVJl bmRlckZyYW1lSW5mb18zX19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworICAgUHlPYmplY3QgKl9fcHl4X3Ig PSAwOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJzZXRfdXBkYXRlX2NhbGxiYWNrICh3cmFwcGVyKSIsIDApOworLSAgX19weXhf ciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfNHNldF91 cGRhdGVfY2FsbGJhY2soKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9P cGVuR0xDb250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfY2IpKTsK KysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fICh3cmFw cGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NVJlbmRlckZyYW1lSW5mb18yX19zZXRzdGF0ZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqKV9fcHl4X3Zfc2VsZiksICgo UHlPYmplY3QgKilfX3B5eF92X19fcHl4X3N0YXRlKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9f cHl4X3I7CisgfQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzT3BlbkdMQ29udGV4dF80c2V0X3VwZGF0ZV9jYWxsYmFjayhzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpfX3B5eF92X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF92X2NiKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fMl9fc2V0c3RhdGVfY3l0aG9uX18oc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICpfX3B5 eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CisgICBQeU9iamVjdCAq X19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoInNldF91cGRhdGVfY2FsbGJhY2siLCAwKTsKKy0KKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NDYKKy0gKiAKKy0gKiAgICAgZGVmIHNl dF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOgorLSAqICAgICAgICAgc2VsZi51cGRhdGVfY2Ig PSBjYiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB3aXRoIG5vZ2ls OgorLSAqICAgICAgICAgICAgIG1wdl9vcGVuZ2xfY2Jfc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxm Ll9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQgKj5jYikKKy0gKi8KKy0gIF9fUHl4X0lOQ1JFRihf X3B5eF92X2NiKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdl9jYik7CistICBfX1B5eF9HT1RS RUYoX19weXhfdl9zZWxmLT51cGRhdGVfY2IpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2Vs Zi0+dXBkYXRlX2NiKTsKKy0gIF9fcHl4X3Zfc2VsZi0+dXBkYXRlX2NiID0gX19weXhfdl9jYjsK Ky0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NDcKKy0gKiAgICAgZGVm IHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOgorLSAqICAgICAgICAgc2VsZi51cGRhdGVf Y2IgPSBjYgorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgICAgIG1wdl9vcGVuZ2xfY2Jfc2V0X3VwZGF0ZV9jYWxsYmFjayhz ZWxmLl9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQgKj5jYikKKy0gKiAKKy0gKi8KKy0gIHsKKy0g ICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKy0g ICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7 CistICAgICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8geworLQorLSAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg0OAorLSAqICAgICAgICAgc2VsZi51cGRhdGVfY2Ig PSBjYgorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfb3Blbmds X2NiX3NldF91cGRhdGVfY2FsbGJhY2soc2VsZi5fY3R4LCAmX2NfdXBkYXRlY2IsIDx2b2lkICo+ Y2IpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgZGVmIGRyYXco c2VsZiwgZmJvLCB3LCBoKToKKy0gKi8KKy0gICAgICAgIG1wdl9vcGVuZ2xfY2Jfc2V0X3VwZGF0 ZV9jYWxsYmFjayhfX3B5eF92X3NlbGYtPl9jdHgsICgmX19weXhfZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX2NfdXBkYXRlY2IpLCAoKHZvaWQgKilfX3B5eF92X2NiKSk7CistICAgICAgfQorKyAg UHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisrICBpbnQgX19weXhfbGluZW5vID0gMDsKKysg IGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5v ID0gMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9f IiwgMCk7CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg0Nwor LSAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6CistICogICAgICAgICBz ZWxmLnVwZGF0ZV9jYiA9IGNiCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgbXB2X29wZW5nbF9jYl9zZXRfdXBkYXRl X2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAqPmNiKQorLSAqIAorKyAg LyogIih0cmVlIGZyYWdtZW50KSI6MTcKKysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2ts ZV9SZW5kZXJGcmFtZUluZm8sICh0eXBlKHNlbGYpLCAweGQ0MWQ4Y2QsIHN0YXRlKQorKyAqIGRl ZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgX19weXhf dW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKi8KKy0gICAgICAvKmZpbmFsbHk6Ki8gewor LSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFE CistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CistICAgICAgICAgIFB5X0JMT0NL X1RIUkVBRFMKKy0gICAgICAgICAgI2VuZGlmCistICAgICAgICAgIGdvdG8gX19weXhfTDU7Cist ICAgICAgICB9CistICAgICAgICBfX3B5eF9MNTo7CistICAgICAgfQorLSAgfQorKyAgaWYgKCEo bGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X19fcHl4X3N0YXRlKSl8fCgoX19weXhf dl9fX3B5eF9zdGF0ZSkgPT0gUHlfTm9uZSl8fChQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9y LCAiRXhwZWN0ZWQgJS4xNnMsIGdvdCAlLjIwMHMiLCAidHVwbGUiLCBQeV9UWVBFKF9fcHl4X3Zf X19weXhfc3RhdGUpLT50cF9uYW1lKSwgMCkpKSBfX1BZWF9FUlIoMSwgMTcsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhf dW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoX19weXhfdl9zZWxmLCAoKFB5T2Jq ZWN0KilfX3B5eF92X19fcHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDEsIDE3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODQ1CistICogICAgICAgICBzZWxmLmluaXRl ZCA9IFRydWUKKy0gKiAKKy0gKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2Ip OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLnVwZGF0ZV9j YiA9IGNiCistICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6 MTYKKysgKiAgICAgZWxzZToKKysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9SZW5k ZXJGcmFtZUluZm8sICh0eXBlKHNlbGYpLCAweGQ0MWQ4Y2QsIHN0YXRlKQorKyAqIGRlZiBfX3Nl dHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0 ZShzZWxmLCBfX3B5eF9zdGF0ZSkKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LworICAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgIGdvdG8g X19weXhfTDA7CisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf MSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJGcmFt ZUluZm8uX19zZXRzdGF0ZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOworKyAgX19weXhfciA9IE5VTEw7CisrICBfX3B5eF9MMDo7CisgICBf X1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4NTAKKy0gKiAgICAgICAgICAgICBtcHZfb3BlbmdsX2NiX3NldF91cGRhdGVfY2Fs bGJhY2soc2VsZi5fY3R4LCAmX2NfdXBkYXRlY2IsIDx2b2lkICo+Y2IpCisrLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk1MAorKyAqICAgICAgICAgYmludCBpbml0ZWQKKyAgKiAK Ky0gKiAgICAgZGVmIGRyYXcoc2VsZiwgZmJvLCB3LCBoKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgY2RlZjoKKy0gKiAgICAgICAgICAgICBpbnQgZmJvYyA9IGZi bworKyAqICAgICBkZWYgX19pbml0X18oc2VsZiwgbXB2LCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICAgICAgICAgICBhcGlfdHlwZSwKKysgKiAgICAgICAgICAgICAg ICAgIG9wZW5nbF9pbml0X3BhcmFtcz1Ob25lLAorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVy ICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNP cGVuR0xDb250ZXh0XzdkcmF3KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF83ZHJhdyhQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9f cHl4X2t3ZHMpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2ZibyA9IDA7CistICBQeU9iamVjdCAq X19weXhfdl93ID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2ggPSAwOworK3N0YXRpYyBpbnQg X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xX19pbml0X18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpf X3B5eF9rd2RzKTsgLypwcm90byovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKysgIFB5T2Jq ZWN0ICpfX3B5eF92X21wdiA9IDA7CisrICBQeU9iamVjdCAqX19weXhfdl9hcGlfdHlwZSA9IDA7 CisrICBQeU9iamVjdCAqX19weXhfdl9vcGVuZ2xfaW5pdF9wYXJhbXMgPSAwOworKyAgUHlPYmpl Y3QgKl9fcHl4X3ZfYWR2YW5jZWRfY29udHJvbCA9IDA7CisrICBQeU9iamVjdCAqX19weXhfdl94 MTFfZGlzcGxheSA9IDA7CisrICBQeU9iamVjdCAqX19weXhfdl93bF9kaXNwbGF5ID0gMDsKKysg IFB5T2JqZWN0ICpfX3B5eF92X2RybV9kaXNwbGF5ID0gMDsKKysgIFB5T2JqZWN0ICpfX3B5eF92 X2RybV9vc2Rfc2l6ZSA9IDA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNo YXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0g IFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKysgIGludCBfX3B5eF9yOworICAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJkcmF3ICh3cmFw cGVyKSIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fICh3cmFw cGVyKSIsIDApOworICAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVz W10gPSB7Jl9fcHl4X25fc19mYm8sJl9fcHl4X25fc193LCZfX3B5eF9uX3NfaCwwfTsKKy0gICAg UHlPYmplY3QqIHZhbHVlc1szXSA9IHswLDAsMH07CistICAgIGlmICh1bmxpa2VseShfX3B5eF9r d2RzKSkgeworLSAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKy0gICAgICBjb25zdCBQeV9zc2l6 ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKy0gICAgICBzd2l0 Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dF VF9JVEVNKF9fcHl4X2FyZ3MsIDIpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAg ICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAx KTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVl c1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6 IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQorLSAgICAgIGt3X2FyZ3Mg PSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Cist ICAgICAgICBjYXNlICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhf UHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2ZibykpICE9IDApKSBrd19h cmdzLS07CistICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAxOgorLSAgICAgICAgaWYg KGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywg X19weXhfbl9zX3cpKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSB7CistICAgICAg ICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJkcmF3IiwgMSwgMywgMywgMSk7IF9fUFlY X0VSUigwLCA4NTAsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAgICAgfQorLSAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMjoKKy0gICAgICAgIGlmIChsaWtlbHkoKHZh bHVlc1syXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19o KSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVsc2UgeworLSAgICAgICAgICBfX1B5eF9S YWlzZUFyZ3R1cGxlSW52YWxpZCgiZHJhdyIsIDEsIDMsIDMsIDIpOyBfX1BZWF9FUlIoMCwgODUw LCBfX3B5eF9MM19lcnJvcikKKy0gICAgICAgIH0KKy0gICAgICB9CistICAgICAgaWYgKHVubGlr ZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0 aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBv c19hcmdzLCAiZHJhdyIpIDwgMCkpIF9fUFlYX0VSUigwLCA4NTAsIF9fcHl4X0wzX2Vycm9yKQor LSAgICAgIH0KKy0gICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9 IDMpIHsKKy0gICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICB9IGVsc2Ug eworLSAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Cist ICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAg ICB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOworLSAgICB9Cist ICAgIF9fcHl4X3ZfZmJvID0gdmFsdWVzWzBdOworLSAgICBfX3B5eF92X3cgPSB2YWx1ZXNbMV07 CistICAgIF9fcHl4X3ZfaCA9IHZhbHVlc1syXTsKKy0gIH0KKy0gIGdvdG8gX19weXhfTDRfYXJn dW1lbnRfdW5wYWNraW5nX2RvbmU7CistICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBf X1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiZHJhdyIsIDEsIDMsIDMsIFB5VHVwbGVfR0VUX1NJ WkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgODUwLCBfX3B5eF9MM19lcnJvcikKKy0gIF9f cHl4X0wzX2Vycm9yOjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2 Lk9wZW5HTENvbnRleHQuZHJhdyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhf ZmlsZW5hbWUpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4g TlVMTDsKKy0gIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3Ig PSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzZkcmF3KCgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqKV9f cHl4X3Zfc2VsZiksIF9fcHl4X3ZfZmJvLCBfX3B5eF92X3csIF9fcHl4X3ZfaCk7CisrICAgIHN0 YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX21wdiwmX19w eXhfbl9zX2FwaV90eXBlLCZfX3B5eF9uX3Nfb3BlbmdsX2luaXRfcGFyYW1zLCZfX3B5eF9uX3Nf YWR2YW5jZWRfY29udHJvbCwmX19weXhfbl9zX3gxMV9kaXNwbGF5LCZfX3B5eF9uX3Nfd2xfZGlz cGxheSwmX19weXhfbl9zX2RybV9kaXNwbGF5LCZfX3B5eF9uX3NfZHJtX29zZF9zaXplLDB9Owor KyAgICBQeU9iamVjdCogdmFsdWVzWzhdID0gezAsMCwwLDAsMCwwLDAsMH07CisgCistICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwor LSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF82ZHJhdyhzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF92X2ZibywgUHlPYmplY3QgKl9fcHl4X3ZfdywgUHlPYmplY3QgKl9fcHl4X3Zf aCkgeworLSAgaW50IF9fcHl4X3ZfZmJvYzsKKy0gIGludCBfX3B5eF92X3djOworLSAgaW50IF9f cHl4X3ZfaGM7CistICBpbnQgX19weXhfdl9lcnI7CistICBQeU9iamVjdCAqX19weXhfciA9IE5V TEw7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgaW50IF9fcHl4X3RfMTsKKy0g IGludCBfX3B5eF90XzI7CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7Cist ICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOwor LSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImRyYXciLCAwKTsKKy0KKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NTIKKy0gKiAgICAgZGVmIGRyYXco c2VsZiwgZmJvLCB3LCBoKToKKy0gKiAgICAgICAgIGNkZWY6CistICogICAgICAgICAgICAgaW50 IGZib2MgPSBmYm8gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg IGludCB3YyA9IHcKKy0gKiAgICAgICAgICAgICBpbnQgaGMgPSBoCisrICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTIKKysgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1w diwKKysgKiAgICAgICAgICAgICAgICAgIGFwaV90eXBlLAorKyAqICAgICAgICAgICAgICAgICAg b3BlbmdsX2luaXRfcGFyYW1zPU5vbmUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgICAgICAgICAgIGFkdmFuY2VkX2NvbnRyb2w9RmFsc2UsCisrICogICAgICAgICAg ICAgICAgICB4MTFfZGlzcGxheT1Ob25lLAorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlJ bnRfQXNfaW50KF9fcHl4X3ZfZmJvKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzEgPT0gKGludCkt MSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4NTIsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19weXhfdl9mYm9jID0gX19weXhfdF8xOworKyAgICB2YWx1ZXNbMl0gPSAoKFB5T2Jq ZWN0ICopUHlfTm9uZSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 ODUzCistICogICAgICAgICBjZGVmOgorLSAqICAgICAgICAgICAgIGludCBmYm9jID0gZmJvCist ICogICAgICAgICAgICAgaW50IHdjID0gdyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgICAgICAgICAgaW50IGhjID0gaAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKysgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk1MworKyAqICAgICAgICAgICAgICAg ICAgYXBpX3R5cGUsCisrICogICAgICAgICAgICAgICAgICBvcGVuZ2xfaW5pdF9wYXJhbXM9Tm9u ZSwKKysgKiAgICAgICAgICAgICAgICAgIGFkdmFuY2VkX2NvbnRyb2w9RmFsc2UsICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgIHgxMV9kaXNwbGF5PU5v bmUsCisrICogICAgICAgICAgICAgICAgICB3bF9kaXNwbGF5PU5vbmUsCisgICovCistICBfX3B5 eF90XzEgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdl93KTsgaWYgKHVubGlrZWx5KChfX3B5 eF90XzEgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4NTMs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdl93YyA9IF9fcHl4X3RfMTsKKysgICAgdmFsdWVz WzNdID0gKChQeU9iamVjdCAqKVB5X0ZhbHNlKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4NTQKKy0gKiAgICAgICAgICAgICBpbnQgZmJvYyA9IGZibworLSAqICAg ICAgICAgICAgIGludCB3YyA9IHcKKy0gKiAgICAgICAgICAgICBpbnQgaGMgPSBoICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAg ICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9kcmF3KHNlbGYuX2N0eCwgZmJvYywgd2MsIGhjKQor KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTU0CisrICogICAgICAgICAg ICAgICAgICBvcGVuZ2xfaW5pdF9wYXJhbXM9Tm9uZSwKKysgKiAgICAgICAgICAgICAgICAgIGFk dmFuY2VkX2NvbnRyb2w9RmFsc2UsCisrICogICAgICAgICAgICAgICAgICB4MTFfZGlzcGxheT1O b25lLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgICB3 bF9kaXNwbGF5PU5vbmUsCisrICogICAgICAgICAgICAgICAgICBkcm1fZGlzcGxheT1Ob25lLAor ICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3ZfaCk7IGlmICh1 bmxpa2VseSgoX19weXhfdF8xID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZ WF9FUlIoMCwgODU0LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3ZfaGMgPSBfX3B5eF90XzE7 CisrICAgIHZhbHVlc1s0XSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NTUKKy0gKiAgICAgICAgICAgICBpbnQgd2MgPSB3 CistICogICAgICAgICAgICAgaW50IGhjID0gaAorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vcGVu Z2xfY2JfZHJhdyhzZWxmLl9jdHgsIGZib2MsIHdjLCBoYykKKy0gKiAgICAgICAgIGlmIGVyciA8 IDA6CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTUKKysgKiAgICAg ICAgICAgICAgICAgIGFkdmFuY2VkX2NvbnRyb2w9RmFsc2UsCisrICogICAgICAgICAgICAgICAg ICB4MTFfZGlzcGxheT1Ob25lLAorKyAqICAgICAgICAgICAgICAgICAgd2xfZGlzcGxheT1Ob25l LCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgICBkcm1f ZGlzcGxheT1Ob25lLAorKyAqICAgICAgICAgICAgICAgICAgZHJtX29zZF9zaXplPU5vbmUKKyAg Ki8KKy0gIHsKKy0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRl ICpfc2F2ZTsKKy0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lM X1JlbWVtYmVyKCk7CistICAgICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8geworKyAgICB2YWx1 ZXNbNV0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7CisgCistICAgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6ODU2CistICogICAgICAgICAgICAgaW50IGhjID0gaAorLSAq ICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2Ni X2RyYXcoc2VsZi5fY3R4LCBmYm9jLCB3YywgaGMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJy b3IoZXJyKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTU2CisrICog ICAgICAgICAgICAgICAgICB4MTFfZGlzcGxheT1Ob25lLAorKyAqICAgICAgICAgICAgICAgICAg d2xfZGlzcGxheT1Ob25lLAorKyAqICAgICAgICAgICAgICAgICAgZHJtX2Rpc3BsYXk9Tm9uZSwg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICAgZHJtX29z ZF9zaXplPU5vbmUKKysgKiAgICAgICAgICAgICAgICAgICk6CisgICovCistICAgICAgICBfX3B5 eF92X2VyciA9IG1wdl9vcGVuZ2xfY2JfZHJhdyhfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3Zf ZmJvYywgX19weXhfdl93YywgX19weXhfdl9oYyk7CistICAgICAgfQorKyAgICB2YWx1ZXNbNl0g PSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjg1NQorLSAqICAgICAgICAgICAgIGludCB3YyA9IHcKKy0gKiAgICAgICAg ICAgICBpbnQgaGMgPSBoCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9kcmF3KHNl bGYuX2N0eCwgZmJvYywgd2MsIGhjKQorLSAqICAgICAgICAgaWYgZXJyIDwgMDoKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk1NworKyAqICAgICAgICAgICAgICAgICAg d2xfZGlzcGxheT1Ob25lLAorKyAqICAgICAgICAgICAgICAgICAgZHJtX2Rpc3BsYXk9Tm9uZSwK KysgKiAgICAgICAgICAgICAgICAgIGRybV9vc2Rfc2l6ZT1Ob25lICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgICk6CisrICogCisgICovCistICAgICAg LypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICNp ZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAg ICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICBn b3RvIF9fcHl4X0w1OworKyAgICB2YWx1ZXNbN10gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7Cisr ICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworKyAgICAgIFB5X3NzaXplX3Qga3dfYXJn czsKKysgICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShf X3B5eF9hcmdzKTsKKysgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CisrICAgICAgICBjYXNlICA4 OiB2YWx1ZXNbN10gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDcpOworKyAgICAgICAg Q1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgNzogdmFsdWVzWzZdID0gUHlUdXBs ZV9HRVRfSVRFTShfX3B5eF9hcmdzLCA2KTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsK KysgICAgICAgIGNhc2UgIDY6IHZhbHVlc1s1XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJn cywgNSk7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICA1OiB2 YWx1ZXNbNF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDQpOworKyAgICAgICAgQ1lU SE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgNDogdmFsdWVzWzNdID0gUHlUdXBsZV9H RVRfSVRFTShfX3B5eF9hcmdzLCAzKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysg ICAgICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywg Mik7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAyOiB2YWx1 ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRf SVRFTShfX3B5eF9hcmdzLCAwKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAg ICAgIGNhc2UgIDA6IGJyZWFrOworKyAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0 dXBsZV9lcnJvcjsKKysgICAgICB9CisrICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4 X2t3ZHMpOworKyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDA6Cisr ICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihf X3B5eF9rd2RzLCBfX3B5eF9uX3NfbXB2KSkgIT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAgIGVs c2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKKysgICAgICAgIGNhc2UgIDE6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0g PSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfYXBpX3R5cGUp KSAhPSAwKSkga3dfYXJncy0tOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgIF9fUHl4X1Jh aXNlQXJndHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDAsIDIsIDgsIDEpOyBfX1BZWF9FUlIoMCwg OTUwLCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgIH0KKysgICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKKysgICAgICAgIGNhc2UgIDI6CisrICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKysg ICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhf a3dkcywgX19weXhfbl9zX29wZW5nbF9pbml0X3BhcmFtcyk7CisrICAgICAgICAgIGlmICh2YWx1 ZSkgeyB2YWx1ZXNbMl0gPSB2YWx1ZTsga3dfYXJncy0tOyB9CisrICAgICAgICB9CisrICAgICAg ICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAzOgorKyAgICAgICAgaWYgKGt3 X2FyZ3MgPiAwKSB7CisrICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9H ZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19hZHZhbmNlZF9jb250cm9sKTsKKysgICAg ICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1szXSA9IHZhbHVlOyBrd19hcmdzLS07IH0KKysgICAg ICAgIH0KKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDQ6Cisr ICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKysgICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0g X19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3gxMV9kaXNwbGF5 KTsKKysgICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1s0XSA9IHZhbHVlOyBrd19hcmdzLS07 IH0KKysgICAgICAgIH0KKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNh c2UgIDU6CisrICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKysgICAgICAgICAgUHlPYmplY3Qq IHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3ds X2Rpc3BsYXkpOworKyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzVdID0gdmFsdWU7IGt3 X2FyZ3MtLTsgfQorKyAgICAgICAgfQorKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAg ICAgICAgY2FzZSAgNjoKKysgICAgICAgIGlmIChrd19hcmdzID4gMCkgeworKyAgICAgICAgICBQ eU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5 eF9uX3NfZHJtX2Rpc3BsYXkpOworKyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzZdID0g dmFsdWU7IGt3X2FyZ3MtLTsgfQorKyAgICAgICAgfQorKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOworKyAgICAgICAgY2FzZSAgNzoKKysgICAgICAgIGlmIChrd19hcmdzID4gMCkgeworKyAg ICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9r d2RzLCBfX3B5eF9uX3NfZHJtX29zZF9zaXplKTsKKysgICAgICAgICAgaWYgKHZhbHVlKSB7IHZh bHVlc1s3XSA9IHZhbHVlOyBrd19hcmdzLS07IH0KKyAgICAgICAgIH0KKy0gICAgICAgIF9fcHl4 X0w1OjsKKyAgICAgICB9CistICB9CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6ODU3CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVyciA9 IG1wdl9vcGVuZ2xfY2JfZHJhdyhzZWxmLl9jdHgsIGZib2MsIHdjLCBoYykKKy0gKiAgICAgICAg IGlmIGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAg ICByYWlzZSBNUFZFcnJvcihlcnIpCistICogCistICovCistICBfX3B5eF90XzIgPSAoKF9fcHl4 X3ZfZXJyIDwgMCkgIT0gMCk7CistICBpZiAodW5saWtlbHkoX19weXhfdF8yKSkgeworLQorLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODU4CistICogICAgICAgICAgICAg ZXJyID0gbXB2X29wZW5nbF9jYl9kcmF3KHNlbGYuX2N0eCwgZmJvYywgd2MsIGhjKQorLSAqICAg ICAgICAgaWYgZXJyIDwgMDoKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgZGVmIHJlcG9ydF9mbGlw KHNlbGYsIHRpbWUpOgorLSAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4 X3RfNCwgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgODU4LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NCk7CistICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgODU4LCBfX3B5eF9MMV9lcnJv cikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CistICAgIF9fcHl4X3RfNiA9IE5VTEw7 CistICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF80KSkpIHsKKy0gICAgICBfX3B5eF90XzYgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzQpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF82KSkgeworLSAgICAgICAgUHlP YmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNCk7CistICAg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF82KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5j dGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNCwgZnVuY3Rpb24pOwor KyAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKysgICAgICAgIGlmICh1bmxpa2Vs eShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1l cywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9faW5pdF9fIikgPCAwKSkgX19QWVhfRVJSKDAsIDk1 MCwgX19weXhfTDNfZXJyb3IpCisrICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgIHN3aXRj aCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgeworKyAgICAgICAgY2FzZSAgODogdmFs dWVzWzddID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCA3KTsKKysgICAgICAgIENZVEhP Tl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDc6IHZhbHVlc1s2XSA9IFB5VHVwbGVfR0VU X0lURU0oX19weXhfYXJncywgNik7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAg ICAgICBjYXNlICA2OiB2YWx1ZXNbNV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDUp OworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgNTogdmFsdWVz WzRdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCA0KTsKKysgICAgICAgIENZVEhPTl9G QUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDQ6IHZhbHVlc1szXSA9IFB5VHVwbGVfR0VUX0lU RU0oX19weXhfYXJncywgMyk7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAg ICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOwor KyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFd ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKysgICAgICAgIHZhbHVlc1swXSA9 IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CisrICAgICAgICBicmVhazsKKysgICAg ICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisgICAgICAgfQorICAg ICB9CistICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzYpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfNCwgX19weXhfdF82LCBfX3B5eF90XzUpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF82KTsgX19weXhfdF82ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4 X3RfNSA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDg1 OCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBf X1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gICAgX19QeXhfUmFpc2Uo X19weXhfdF8zLCAwLCAwLCAwKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4 X3RfMyA9IDA7CistICAgIF9fUFlYX0VSUigwLCA4NTgsIF9fcHl4X0wxX2Vycm9yKQorLQorLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODU3CistICogICAgICAgICB3aXRo IG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vcGVuZ2xfY2JfZHJhdyhzZWxmLl9j dHgsIGZib2MsIHdjLCBoYykKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCistICog CistICovCisrICAgIF9fcHl4X3ZfbXB2ID0gdmFsdWVzWzBdOworKyAgICBfX3B5eF92X2FwaV90 eXBlID0gdmFsdWVzWzFdOworKyAgICBfX3B5eF92X29wZW5nbF9pbml0X3BhcmFtcyA9IHZhbHVl c1syXTsKKysgICAgX19weXhfdl9hZHZhbmNlZF9jb250cm9sID0gdmFsdWVzWzNdOworKyAgICBf X3B5eF92X3gxMV9kaXNwbGF5ID0gdmFsdWVzWzRdOworKyAgICBfX3B5eF92X3dsX2Rpc3BsYXkg PSB2YWx1ZXNbNV07CisrICAgIF9fcHl4X3ZfZHJtX2Rpc3BsYXkgPSB2YWx1ZXNbNl07CisrICAg IF9fcHl4X3ZfZHJtX29zZF9zaXplID0gdmFsdWVzWzddOworICAgfQorLQorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg1MAorLSAqICAgICAgICAgICAgIG1wdl9vcGVuZ2xf Y2Jfc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLl9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQgKj5j YikKKy0gKiAKKy0gKiAgICAgZGVmIGRyYXcoc2VsZiwgZmJvLCB3LCBoKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZjoKKy0gKiAgICAgICAgICAgICBpbnQg ZmJvYyA9IGZibworLSAqLworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5 eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsK Ky0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKKy0g IF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0 dGVyLmxpYnMubXB2Lk9wZW5HTENvbnRleHQuZHJhdyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xp bmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7CistICBfX3B5eF9MMDo7 CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKysgIGdvdG8gX19weXhfTDRfYXJndW1lbnRf dW5wYWNraW5nX2RvbmU7CisrICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CisrICBfX1B5eF9S YWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAwLCAyLCA4LCBQeVR1cGxlX0dFVF9TSVpF KF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDk1MCwgX19weXhfTDNfZXJyb3IpCisrICBfX3B5 eF9MM19lcnJvcjo7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5S ZW5kZXJDb250ZXh0Ll9faW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5 eF9maWxlbmFtZSk7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVy biBfX3B5eF9yOworLX0KKysgIHJldHVybiAtMTsKKysgIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFj a2luZ19kb25lOjsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNSZW5kZXJDb250ZXh0X19faW5pdF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfbXB2LCBfX3B5 eF92X2FwaV90eXBlLCBfX3B5eF92X29wZW5nbF9pbml0X3BhcmFtcywgX19weXhfdl9hZHZhbmNl ZF9jb250cm9sLCBfX3B5eF92X3gxMV9kaXNwbGF5LCBfX3B5eF92X3dsX2Rpc3BsYXksIF9fcHl4 X3ZfZHJtX2Rpc3BsYXksIF9fcHl4X3ZfZHJtX29zZF9zaXplKTsKKyAKKy0vKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6ODYwCistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3Io ZXJyKQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk1MAorKyAqICAgICAg ICAgYmludCBpbml0ZWQKKyAgKiAKKy0gKiAgICAgZGVmIHJlcG9ydF9mbGlwKHNlbGYsIHRpbWUp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmIGludDY0X3Qg Y3RpbWUgPSB0aW1lCistICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICBkZWYgX19pbml0 X18oc2VsZiwgbXB2LCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAg ICAgICAgICBhcGlfdHlwZSwKKysgKiAgICAgICAgICAgICAgICAgIG9wZW5nbF9pbml0X3BhcmFt cz1Ob25lLAorICAqLworIAorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzlyZXBvcnRf ZmxpcChQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl90aW1lKTsgLypw cm90byovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNPcGVuR0xDb250ZXh0XzlyZXBvcnRfZmxpcChQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl90aW1lKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJl cG9ydF9mbGlwICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfOHJlcG9ydF9mbGlwKCgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiks ICgoUHlPYmplY3QgKilfX3B5eF92X3RpbWUpKTsKKy0KKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhf cjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNPcGVuR0xDb250ZXh0XzhyZXBvcnRfZmxpcChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X3RpbWUpIHsKKy0gIGludDY0X3QgX19weXhfdl9jdGltZTsKKy0gIGludCBfX3B5eF92X2Vy cjsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKytzdGF0aWMgaW50IF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmLCBQ eU9iamVjdCAqX19weXhfdl9tcHYsIFB5T2JqZWN0ICpfX3B5eF92X2FwaV90eXBlLCBQeU9iamVj dCAqX19weXhfdl9vcGVuZ2xfaW5pdF9wYXJhbXMsIFB5T2JqZWN0ICpfX3B5eF92X2FkdmFuY2Vk X2NvbnRyb2wsIFB5T2JqZWN0ICpfX3B5eF92X3gxMV9kaXNwbGF5LCBQeU9iamVjdCAqX19weXhf dl93bF9kaXNwbGF5LCBQeU9iamVjdCAqX19weXhfdl9kcm1fZGlzcGxheSwgUHlPYmplY3QgKl9f cHl4X3ZfZHJtX29zZF9zaXplKSB7CisrICBzdHJ1Y3QgbXB2X29wZW5nbF9pbml0X3BhcmFtcyBf X3B5eF92X2dsX3BhcmFtczsKKysgIHN0cnVjdCBtcHZfb3BlbmdsX2RybV9wYXJhbXMgX19weXhf dl9kcm1fcGFyYW1zOworKyAgc3RydWN0IG1wdl9vcGVuZ2xfZHJtX29zZF9zaXplIF9fcHl4X3Zf X2RybV9vc2Rfc2l6ZTsKKysgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X19SZW5kZXJQYXJhbXMgKl9fcHl4X3ZfcGFyYW1zID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5 eF92X2FycCA9IE5VTEw7CisrICBpbnQgX19weXhfdl9lcnI7CisrICBpbnQgX19weXhfcjsKKyAg IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBpbnQ2NF90IF9fcHl4X3RfMTsKKy0gIGlu dCBfX3B5eF90XzI7CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzEgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBp bnQgX19weXhfdF8zOworICAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CisgICBQeU9iamVj dCAqX19weXhfdF81ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOworKyAg aW50IF9fcHl4X3RfNjsKKysgIGludCBfX3B5eF90Xzc7CisrICBjaGFyIGNvbnN0ICpfX3B5eF90 Xzg7CisrICBQeU9iamVjdCAqKCpfX3B5eF90XzkpKFB5T2JqZWN0ICopOworKyAgaW50IF9fcHl4 X3RfMTA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2Zp bGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJyZXBvcnRfZmxpcCIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9faW5pdF9fIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODYxCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTY1Cisr ICogICAgICAgICAgICAgbXB2X29wZW5nbF9kcm1fb3NkX3NpemUgX2RybV9vc2Rfc2l6ZQorICAq IAorLSAqICAgICBkZWYgcmVwb3J0X2ZsaXAoc2VsZiwgdGltZSk6CistICogICAgICAgICBjZGVm IGludDY0X3QgY3RpbWUgPSB0aW1lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9y ZXBvcnRfZmxpcChzZWxmLl9jdHgsIGN0aW1lKQorKyAqICAgICAgICAgc2VsZi5fbXB2ID0gbXB2 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgICAgIG1lbXNldCgm Z2xfcGFyYW1zLCAwLCBzaXplb2YoZ2xfcGFyYW1zKSkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9f UHl4X1B5SW50X0FzX2ludDY0X3QoX19weXhfdl90aW1lKTsgaWYgKHVubGlrZWx5KChfX3B5eF90 XzEgPT0gKChpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4 NjEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdl9jdGltZSA9IF9fcHl4X3RfMTsKKysgIGlm ICghKGxpa2VseSgoKF9fcHl4X3ZfbXB2KSA9PSBQeV9Ob25lKSB8fCBsaWtlbHkoX19QeXhfVHlw ZVRlc3QoX19weXhfdl9tcHYsIF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0KSkpKSkgX19QWVhfRVJSKDAsIDk2NSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEg PSBfX3B5eF92X21wdjsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfR0lW RVJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+X21wdik7Cisr ICBfX1B5eF9ERUNSRUYoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZi0+X21wdikpOworKyAgX19w eXhfdl9zZWxmLT5fbXB2ID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICopX19weXhfdF8xKTsKKysgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODYyCistICogICAgIGRlZiByZXBvcnRfZmxpcChz ZWxmLCB0aW1lKToKKy0gKiAgICAgICAgIGNkZWYgaW50NjRfdCBjdGltZSA9IHRpbWUKKy0gKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2NiX3JlcG9ydF9mbGlwKHNlbGYuX2N0eCwgY3RpbWUp CistICogICAgICAgICBpZiBlcnIgPCAwOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk2NworKyAqICAgICAgICAgc2VsZi5fbXB2ID0gbXB2CisrICogCisrICogICAgICAg ICBtZW1zZXQoJmdsX3BhcmFtcywgMCwgc2l6ZW9mKGdsX3BhcmFtcykpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIG1lbXNldCgmZHJtX3BhcmFtcywgMCwgc2l6ZW9m KGRybV9wYXJhbXMpKQorKyAqICAgICAgICAgbWVtc2V0KCZfZHJtX29zZF9zaXplLCAwLCBzaXpl b2YoX2RybV9vc2Rfc2l6ZSkpCisgICovCistICB7CistICAgICAgI2lmZGVmIFdJVEhfVEhSRUFE CistICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgUHlfVU5CTE9DS19USFJFQURT CistICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAgICNlbmRpZgorLSAgICAg IC8qdHJ5OiovIHsKKysgICh2b2lkKShtZW1zZXQoKCZfX3B5eF92X2dsX3BhcmFtcyksIDAsIChz aXplb2YoX19weXhfdl9nbF9wYXJhbXMpKSkpOworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjg2MworLSAqICAgICAgICAgY2RlZiBpbnQ2NF90IGN0aW1lID0g dGltZQorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZf b3BlbmdsX2NiX3JlcG9ydF9mbGlwKHNlbGYuX2N0eCwgY3RpbWUpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6CistICogICAgICAgICAgICAgcmFp c2UgTVBWRXJyb3IoZXJyKQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk2 OAorKyAqIAorKyAqICAgICAgICAgbWVtc2V0KCZnbF9wYXJhbXMsIDAsIHNpemVvZihnbF9wYXJh bXMpKQorKyAqICAgICAgICAgbWVtc2V0KCZkcm1fcGFyYW1zLCAwLCBzaXplb2YoZHJtX3BhcmFt cykpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIG1lbXNldCgmX2Ry bV9vc2Rfc2l6ZSwgMCwgc2l6ZW9mKF9kcm1fb3NkX3NpemUpKQorKyAqIAorICAqLworLSAgICAg ICAgX19weXhfdl9lcnIgPSBtcHZfb3BlbmdsX2NiX3JlcG9ydF9mbGlwKF9fcHl4X3Zfc2VsZi0+ X2N0eCwgX19weXhfdl9jdGltZSk7CistICAgICAgfQorKyAgKHZvaWQpKG1lbXNldCgoJl9fcHl4 X3ZfZHJtX3BhcmFtcyksIDAsIChzaXplb2YoX19weXhfdl9kcm1fcGFyYW1zKSkpKTsKKyAKKy0g ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODYyCistICogICAgIGRlZiBy ZXBvcnRfZmxpcChzZWxmLCB0aW1lKToKKy0gKiAgICAgICAgIGNkZWYgaW50NjRfdCBjdGltZSA9 IHRpbWUKKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2NiX3JlcG9ydF9mbGlwKHNlbGYu X2N0eCwgY3RpbWUpCistICogICAgICAgICBpZiBlcnIgPCAwOgorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjk2OQorKyAqICAgICAgICAgbWVtc2V0KCZnbF9wYXJhbXMsIDAs IHNpemVvZihnbF9wYXJhbXMpKQorKyAqICAgICAgICAgbWVtc2V0KCZkcm1fcGFyYW1zLCAwLCBz aXplb2YoZHJtX3BhcmFtcykpCisrICogICAgICAgICBtZW1zZXQoJl9kcm1fb3NkX3NpemUsIDAs IHNpemVvZihfZHJtX29zZF9zaXplKSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq IAorKyAqICAgICAgICAgcGFyYW1zID0gX1JlbmRlclBhcmFtcygpCisgICovCistICAgICAgLypm aW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICNpZmRl ZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAgICAg ICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICBnb3Rv IF9fcHl4X0w1OworLSAgICAgICAgfQorLSAgICAgICAgX19weXhfTDU6OworLSAgICAgIH0KKy0g IH0KKysgICh2b2lkKShtZW1zZXQoKCZfX3B5eF92X19kcm1fb3NkX3NpemUpLCAwLCAoc2l6ZW9m KF9fcHl4X3ZfX2RybV9vc2Rfc2l6ZSkpKSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6ODY0CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAg IGVyciA9IG1wdl9vcGVuZ2xfY2JfcmVwb3J0X2ZsaXAoc2VsZi5fY3R4LCBjdGltZSkKKy0gKiAg ICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTcxCisrICogICAgICAgICBtZW1zZXQoJl9kcm1fb3NkX3NpemUsIDAsIHNpemVv ZihfZHJtX29zZF9zaXplKSkKKysgKiAKKysgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJh bXMoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisrICogICAgICAgICBpZiBh cGlfdHlwZSA9PSBzZWxmLkFQSV9PUEVOR0w6CisgICovCistICBfX3B5eF90XzIgPSAoKF9fcHl4 X3ZfZXJyIDwgMCkgIT0gMCk7CistICBpZiAodW5saWtlbHkoX19weXhfdF8yKSkgeworKyAgX19w eXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcykpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5NzEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF92X3BhcmFtcyA9ICgoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3RfMSk7CisrICBfX3B5 eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODY1 CistICogICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9yZXBvcnRfZmxpcChzZWxmLl9j dHgsIGN0aW1lKQorLSAqICAgICAgICAgaWYgZXJyIDwgMDoKKy0gKiAgICAgICAgICAgICByYWlz ZSBNUFZFcnJvcihlcnIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzMKKysgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5k ZXJQYXJhbXMoKQorKyAqIAorKyAqICAgICAgICAgaWYgYXBpX3R5cGUgPT0gc2VsZi5BUElfT1BF TkdMOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcGFyYW1z LmFkZF9zdHJpbmcoTVBWX1JFTkRFUl9QQVJBTV9BUElfVFlQRSwgTVBWX1JFTkRFUl9BUElfVFlQ RV9PUEVOR0wpCisrICogICAgICAgICBlbHNlOgorKyAqLworKyAgX19weXhfdF8xID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9z X0FQSV9PUEVOR0wpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5NzMs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF90 XzIgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X2FwaV90eXBlLCBfX3B5eF90XzEsIFB5 X0VRKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCA5NzMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1Ry dWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwg OTczLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworKyAgaWYgKGxpa2VseShfX3B5eF90XzMpKSB7CisrCisrICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzQKKysgKiAKKysgKiAgICAgICAgIGlmIGFwaV90eXBl ID09IHNlbGYuQVBJX09QRU5HTDoKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3N0cmluZyhN UFZfUkVOREVSX1BBUkFNX0FQSV9UWVBFLCBNUFZfUkVOREVSX0FQSV9UWVBFX09QRU5HTCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZWxzZToKKysgKiAgICAgICAg ICAgICByYWlzZSBQeU1QVkVycm9yKCJVbmtub3duIGFwaV90eXBlICVyIiAlIGFwaV90eXBlKQor KyAqLworKyAgICBfX3B5eF90XzIgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIp LT5hZGRfc3RyaW5nKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0FQSV9UWVBFLCBN UFZfUkVOREVSX0FQSV9UWVBFX09QRU5HTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDk3NCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3MworKyAqICAgICAgICAgcGFy YW1zID0gX1JlbmRlclBhcmFtcygpCisrICogCisrICogICAgICAgICBpZiBhcGlfdHlwZSA9PSBz ZWxmLkFQSV9PUEVOR0w6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICAgICBwYXJhbXMuYWRkX3N0cmluZyhNUFZfUkVOREVSX1BBUkFNX0FQSV9UWVBFLCBNUFZfUkVO REVSX0FQSV9UWVBFX09QRU5HTCkKKysgKiAgICAgICAgIGVsc2U6CisrICovCisrICAgIGdvdG8g X19weXhfTDM7CisrICB9CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTc2CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9zdHJpbmcoTVBWX1JFTkRFUl9QQVJBTV9B UElfVFlQRSwgTVBWX1JFTkRFUl9BUElfVFlQRV9PUEVOR0wpCisrICogICAgICAgICBlbHNlOgor KyAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlVua25vd24gYXBpX3R5cGUgJXIiICUg YXBpX3R5cGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAgZGVm IHVuaW5pdF9nbChzZWxmKToKKysgKiAgICAgICAgIGlmIG9wZW5nbF9pbml0X3BhcmFtcyBpcyBu b3QgTm9uZToKKyAgKi8KKy0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQs IF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDAsIDg2NSwgX19weXhfTDFfZXJyb3IpCisrICAvKmVsc2UqLyB7CisrICAgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfUHlNUFZFcnJvcik7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk3NiwgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX3B5eF90XzQgPSBfX1B5eF9QeVN0cmlu Z19Gb3JtYXRTYWZlKF9fcHl4X2twX3NfVW5rbm93bl9hcGlfdHlwZV9yLCBfX3B5eF92X2FwaV90 eXBlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgOTc2LCBfX3B5eF9M MV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgIF9fcHl4X3RfNSA9 IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzUpKSBfX1BZWF9FUlIoMCwgODY1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNSk7CistICAgIF9fcHl4X3RfNiA9IE5VTEw7CistICAgIGlmIChDWVRIT05fVU5Q QUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKKy0g ICAgICBfX3B5eF90XzYgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzQpOworLSAgICAgIGlm IChsaWtlbHkoX19weXhfdF82KSkgeworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNCk7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF82KTsKKysgICAgX19weXhfdF81ID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzEpKSkgeworKyAgICAg IF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMSk7CisrICAgICAgaWYgKGxp a2VseShfX3B5eF90XzUpKSB7CisrICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhv ZF9HRVRfRlVOQ1RJT04oX19weXhfdF8xKTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzUpOworICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdF80LCBmdW5jdGlvbik7CisrICAgICAgICBfX1B5eF9ERUNSRUZfU0VU KF9fcHl4X3RfMSwgZnVuY3Rpb24pOworICAgICAgIH0KKyAgICAgfQorLSAgICBfX3B5eF90XzMg PSAoX19weXhfdF82KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzQsIF9fcHl4 X3RfNiwgX19weXhfdF81KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF80LCBf X3B5eF90XzUpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7 CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworLSAgICBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA4NjUsIF9fcHl4X0wxX2Vycm9yKQor LSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgX19weXhfdF8yID0gKF9fcHl4X3Rf NSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8xLCBfX3B5eF90XzUsIF9fcHl4 X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMSwgX19weXhfdF80KTsK KysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworICAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gICAgX19QeXhfUmFpc2UoX19w eXhfdF8zLCAwLCAwLCAwKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3Rf MyA9IDA7CistICAgIF9fUFlYX0VSUigwLCA4NjUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5NzYsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisrICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMiwgMCwgMCwgMCk7 CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX1BZ WF9FUlIoMCwgOTc2LCBfX3B5eF9MMV9lcnJvcikKKysgIH0KKysgIF9fcHl4X0wzOjsKKyAKKy0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg2NAorLSAqICAgICAgICAgd2l0 aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2NiX3JlcG9ydF9mbGlw KHNlbGYuX2N0eCwgY3RpbWUpCistICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3OAorKyAqICAgICAgICAgICAgIHJh aXNlIFB5TVBWRXJyb3IoIlVua25vd24gYXBpX3R5cGUgJXIiICUgYXBpX3R5cGUpCisgICogCisr ICogICAgICAgICBpZiBvcGVuZ2xfaW5pdF9wYXJhbXMgaXMgbm90IE5vbmU6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBzZWxmLl9nZXRfcHJvY19hZGRyZXNz ID0gb3BlbmdsX2luaXRfcGFyYW1zWyJnZXRfcHJvY19hZGRyZXNzIl0KKysgKiAgICAgICAgICAg ICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzcyA9ICZfY19nZXRwcm9jYWRkcmVzcworICAqLwor LSAgfQorKyAgX19weXhfdF8zID0gKF9fcHl4X3Zfb3BlbmdsX2luaXRfcGFyYW1zICE9IFB5X05v bmUpOworKyAgX19weXhfdF82ID0gKF9fcHl4X3RfMyAhPSAwKTsKKysgIGlmIChfX3B5eF90XzYp IHsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NjAKKy0gKiAgICAg ICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5NzkKKyAgKiAKKy0gKiAgICAgZGVmIHJlcG9ydF9mbGlwKHNlbGYsIHRpbWUp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmIGludDY0X3Qg Y3RpbWUgPSB0aW1lCistICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgaWYgb3Bl bmdsX2luaXRfcGFyYW1zIGlzIG5vdCBOb25lOgorKyAqICAgICAgICAgICAgIHNlbGYuX2dldF9w cm9jX2FkZHJlc3MgPSBvcGVuZ2xfaW5pdF9wYXJhbXNbImdldF9wcm9jX2FkZHJlc3MiXSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9w cm9jX2FkZHJlc3MgPSAmX2NfZ2V0cHJvY2FkZHJlc3MKKysgKiAgICAgICAgICAgICBnbF9wYXJh bXMuZ2V0X3Byb2NfYWRkcmVzc19jdHggPSA8dm9pZCAqPnNlbGYuX2dldF9wcm9jX2FkZHJlc3MK KyAgKi8KKysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfRGljdF9HZXRJdGVtKF9fcHl4 X3Zfb3BlbmdsX2luaXRfcGFyYW1zLCBfX3B5eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcyk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk3OSwgX19weXhfTDFfZXJyb3IpCisr ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Rf Mik7CisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPl9nZXRfcHJvY19hZGRyZXNzKTsK KysgICAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+X2dldF9wcm9jX2FkZHJlc3MpOworKyAg ICBfX3B5eF92X3NlbGYtPl9nZXRfcHJvY19hZGRyZXNzID0gX19weXhfdF8yOworKyAgICBfX3B5 eF90XzIgPSAwOworIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0g UHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0gIF9f cHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X1hE RUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF82KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxp YnMubXB2Lk9wZW5HTENvbnRleHQucmVwb3J0X2ZsaXAiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworLSAgX19weXhfTDA6 OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjk4MAorKyAqICAgICAgICAgaWYgb3BlbmdsX2luaXRfcGFyYW1zIGlz IG5vdCBOb25lOgorKyAqICAgICAgICAgICAgIHNlbGYuX2dldF9wcm9jX2FkZHJlc3MgPSBvcGVu Z2xfaW5pdF9wYXJhbXNbImdldF9wcm9jX2FkZHJlc3MiXQorKyAqICAgICAgICAgICAgIGdsX3Bh cmFtcy5nZXRfcHJvY19hZGRyZXNzID0gJl9jX2dldHByb2NhZGRyZXNzICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVz c19jdHggPSA8dm9pZCAqPnNlbGYuX2dldF9wcm9jX2FkZHJlc3MKKysgKiAgICAgICAgICAgICBw YXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0lOSVRfUEFSQU1TLCAmZ2xf cGFyYW1zKQorKyAqLworKyAgICBfX3B5eF92X2dsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzID0g KCZfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY19nZXRwcm9jYWRkcmVzcyk7CisgCist LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg2NworLSAqICAgICAgICAgICAgIHJh aXNlIE1QVkVycm9yKGVycikKKy0gKiAKKy0gKiAgICAgZGVmIHVuaW5pdF9nbChzZWxmKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVk OgorLSAqICAgICAgICAgICAgIHJldHVybgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTgxCisrICogICAgICAgICAgICAgc2VsZi5fZ2V0X3Byb2NfYWRkcmVzcyA9IG9w ZW5nbF9pbml0X3BhcmFtc1siZ2V0X3Byb2NfYWRkcmVzcyJdCisrICogICAgICAgICAgICAgZ2xf cGFyYW1zLmdldF9wcm9jX2FkZHJlc3MgPSAmX2NfZ2V0cHJvY2FkZHJlc3MKKysgKiAgICAgICAg ICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzc19jdHggPSA8dm9pZCAqPnNlbGYuX2dldF9w cm9jX2FkZHJlc3MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAg IHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZn bF9wYXJhbXMpCisrICogICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9sOgorICAqLworKyAgICBf X3B5eF92X2dsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9ICgodm9pZCAqKV9fcHl4X3Zf c2VsZi0+X2dldF9wcm9jX2FkZHJlc3MpOworIAorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250 ZXh0XzExdW5pbml0X2dsKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF8xMXVuaW5pdF9nbChQeU9iamVjdCAq X19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgidW5pbml0X2dsICh3cmFwcGVyKSIsIDApOworLSAgX19w eXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTB1 bmluaXRfZ2woKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xD b250ZXh0ICopX19weXhfdl9zZWxmKSk7CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo5ODIKKysgKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzcyA9 ICZfY19nZXRwcm9jYWRkcmVzcworKyAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19h ZGRyZXNzX2N0eCA9IDx2b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVzcworKyAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMs ICZnbF9wYXJhbXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlm IGFkdmFuY2VkX2NvbnRyb2w6CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JF TkRFUl9QQVJBTV9BRFZBTkNFRF9DT05UUk9MLCAxKQorKyAqLworKyAgICBfX3B5eF90XzIgPSAo KHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9wYXJh bXMsIE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0lOSVRfUEFSQU1TLCAoJl9fcHl4X3ZfZ2xfcGFy YW1zKSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk4Miwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4g X19weXhfcjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzgK KysgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJVbmtub3duIGFwaV90eXBlICVyIiAl IGFwaV90eXBlKQorKyAqIAorKyAqICAgICAgICAgaWYgb3BlbmdsX2luaXRfcGFyYW1zIGlzIG5v dCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgc2Vs Zi5fZ2V0X3Byb2NfYWRkcmVzcyA9IG9wZW5nbF9pbml0X3BhcmFtc1siZ2V0X3Byb2NfYWRkcmVz cyJdCisrICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3MgPSAmX2NfZ2V0 cHJvY2FkZHJlc3MKKysgKi8KKysgIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTB1bmluaXRfZ2woc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqX19weXhfdl9zZWxm KSB7CistICBpbnQgX19weXhfdl9lcnI7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Cist ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgaW50IF9fcHl4X3RfMTsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF90XzIgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Cist ICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBO VUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxl bmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgidW5pbml0X2dsIiwgMCk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODY4CistICogCistICogICAgIGRlZiB1bmluaXRfZ2woc2VsZik6Cist ICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICByZXR1cm4KKy0gKiAgICAgICAgIHdpdGggbm9naWw6CisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTgzCisrICogICAgICAgICAgICAgZ2xf cGFyYW1zLmdldF9wcm9jX2FkZHJlc3NfY3R4ID0gPHZvaWQgKj5zZWxmLl9nZXRfcHJvY19hZGRy ZXNzCisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09Q RU5HTF9JTklUX1BBUkFNUywgJmdsX3BhcmFtcykKKysgKiAgICAgICAgIGlmIGFkdmFuY2VkX2Nv bnRyb2w6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBwYXJh bXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpCisrICogICAg ICAgICBpZiB4MTFfZGlzcGxheToKKyAgKi8KKy0gIF9fcHl4X3RfMSA9ICgoIShfX3B5eF92X3Nl bGYtPmluaXRlZCAhPSAwKSkgIT0gMCk7CistICBpZiAoX19weXhfdF8xKSB7CisrICBfX3B5eF90 XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9hZHZhbmNlZF9jb250cm9sKTsgaWYg KHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgOTgzLCBfX3B5eF9MMV9lcnJv cikKKysgIGlmIChfX3B5eF90XzYpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjg2OQorLSAqICAgICBkZWYgdW5pbml0X2dsKHNlbGYpOgorLSAqICAgICAgICAg aWYgbm90IHNlbGYuaW5pdGVkOgorLSAqICAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAg IGVyciA9IG1wdl9vcGVuZ2xfY2JfdW5pbml0X2dsKHNlbGYuX2N0eCkKKysgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4NAorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf dm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMpCisr ICogICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9sOgorKyAqICAgICAgICAgICAgIHBhcmFtcy5h ZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6CisrICogICAgICAg ICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheQorICAqLworLSAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3IpOworLSAgICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5 X05vbmUpOworLSAgICBnb3RvIF9fcHl4X0wwOworKyAgICBfX3B5eF90XzIgPSAoKHN0cnVjdCBf X3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19w eXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVO REVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCA5ODQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NjgKKy0gKiAKKy0gKiAg ICAgZGVmIHVuaW5pdF9nbChzZWxmKToKKy0gKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHJldHVybgorLSAq ICAgICAgICAgd2l0aCBub2dpbDoKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjk4MworKyAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9 IDx2b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVzcworKyAqICAgICAgICAgICAgIHBhcmFtcy5h ZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMp CisrICogICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9sOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9B RFZBTkNFRF9DT05UUk9MLCAxKQorKyAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6CisgICovCisg ICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODcwCistICogICAg ICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6CistICogICAgICAgICAgICAgcmV0dXJuCistICogICAg ICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl91bmluaXRfZ2woc2VsZi5fY3R4KQorLSAqICAgICAg ICAgaWYgZXJyIDwgMDoKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODUK KysgKiAgICAgICAgIGlmIGFkdmFuY2VkX2NvbnRyb2w6CisrICogICAgICAgICAgICAgcGFyYW1z LmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9BRFZBTkNFRF9DT05UUk9MLCAxKQorKyAqICAgICAg ICAgaWYgeDExX2Rpc3BsYXk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgICAgICBzZWxmLl94MTFfZGlzcGxheSA9IHgxMV9kaXNwbGF5CisrICogICAgICAgICAgICAg cGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1gxMV9ESVNQTEFZLCBnZXRfcG9pbnRl cigiRGlzcGxheSIsIHgxMV9kaXNwbGF5KSkKKyAgKi8KKy0gIHsKKy0gICAgICAjaWZkZWYgV0lU SF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKy0gICAgICBQeV9VTkJMT0NL X1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAgICAgI2VuZGlm CistICAgICAgLyp0cnk6Ki8geworKyAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVl KF9fcHl4X3ZfeDExX2Rpc3BsYXkpOyBpZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlY X0VSUigwLCA5ODUsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fcHl4X3RfNikgeworIAorLSAg ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg3MQorLSAqICAgICAgICAg ICAgIHJldHVybgorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBlcnIg PSBtcHZfb3BlbmdsX2NiX3VuaW5pdF9nbChzZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6CistICogICAgICAgICAgICAgcmFpc2Ug TVBWRXJyb3IoZXJyKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTg2 CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9BRFZBTkNF RF9DT05UUk9MLCAxKQorKyAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6CisrICogICAgICAgICAg ICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFN X1gxMV9ESVNQTEFZLCBnZXRfcG9pbnRlcigiRGlzcGxheSIsIHgxMV9kaXNwbGF5KSkKKysgKiAg ICAgICAgIGlmIHdsX2Rpc3BsYXk6CisgICovCistICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9v cGVuZ2xfY2JfdW5pbml0X2dsKF9fcHl4X3Zfc2VsZi0+X2N0eCk7CistICAgICAgfQorKyAgICBf X1B5eF9JTkNSRUYoX19weXhfdl94MTFfZGlzcGxheSk7CisrICAgIF9fUHl4X0dJVkVSRUYoX19w eXhfdl94MTFfZGlzcGxheSk7CisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPl94MTFf ZGlzcGxheSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPl94MTFfZGlzcGxheSk7 CisrICAgIF9fcHl4X3Zfc2VsZi0+X3gxMV9kaXNwbGF5ID0gX19weXhfdl94MTFfZGlzcGxheTsK KyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODcwCistICogICAg ICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6CistICogICAgICAgICAgICAgcmV0dXJuCistICogICAg ICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl91bmluaXRfZ2woc2VsZi5fY3R4KQorLSAqICAgICAg ICAgaWYgZXJyIDwgMDoKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4 NworKyAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6CisrICogICAgICAgICAgICAgc2VsZi5feDEx X2Rpc3BsYXkgPSB4MTFfZGlzcGxheQorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAo TVBWX1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwgZ2V0X3BvaW50ZXIoIkRpc3BsYXkiLCB4MTFf ZGlzcGxheSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIHds X2Rpc3BsYXk6CisrICogICAgICAgICAgICAgc2VsZi5fd2xfZGlzcGxheSA9IHdsX2Rpc3BsYXkK KysgKi8KKysgICAgX19weXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFi KS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX1gxMV9ESVNQTEFZ LCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9nZXRfcG9pbnRlcigoKGNoYXIgY29uc3Qg KikiRGlzcGxheSIpLCBfX3B5eF92X3gxMV9kaXNwbGF5KSwgTlVMTCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk4NywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhf dF8yID0gMDsKKysKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4NQor KyAqICAgICAgICAgaWYgYWR2YW5jZWRfY29udHJvbDoKKysgKiAgICAgICAgICAgICBwYXJhbXMu YWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpCisrICogICAgICAg ICBpZiB4MTFfZGlzcGxheTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkKKysgKiAgICAgICAgICAgICBw YXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2ludGVy KCJEaXNwbGF5IiwgeDExX2Rpc3BsYXkpKQorICAqLworLSAgICAgIC8qZmluYWxseToqLyB7Cist ICAgICAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQK Ky0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAgUHlfQkxPQ0tf VEhSRUFEUworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNjsKKy0g ICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0w2OjsKKy0gICAgICB9CisgICB9CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODcyCistICogICAgICAgICB3aXRoIG5vZ2ls OgorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vcGVuZ2xfY2JfdW5pbml0X2dsKHNlbGYuX2N0 eCkKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCistICogICAgICAgICBzZWxmLmlu aXRlZCA9IEZhbHNlCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTg4Cisr ICogICAgICAgICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheQorKyAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwgZ2V0 X3BvaW50ZXIoIkRpc3BsYXkiLCB4MTFfZGlzcGxheSkpCisrICogICAgICAgICBpZiB3bF9kaXNw bGF5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgc2VsZi5f d2xfZGlzcGxheSA9IHdsX2Rpc3BsYXkKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRw KE1QVl9SRU5ERVJfUEFSQU1fV0xfRElTUExBWSwgZ2V0X3BvaW50ZXIoIndsX2Rpc3BsYXkiLCB3 bF9kaXNwbGF5KSkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9ICgoX19weXhfdl9lcnIgPCAwKSAhPSAw KTsKKy0gIGlmICh1bmxpa2VseShfX3B5eF90XzEpKSB7CisrICBfX3B5eF90XzYgPSBfX1B5eF9Q eU9iamVjdF9Jc1RydWUoX19weXhfdl93bF9kaXNwbGF5KTsgaWYgKHVubGlrZWx5KF9fcHl4X3Rf NiA8IDApKSBfX1BZWF9FUlIoMCwgOTg4LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX3B5eF90 XzYpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg3MworLSAq ICAgICAgICAgICAgIGVyciA9IG1wdl9vcGVuZ2xfY2JfdW5pbml0X2dsKHNlbGYuX2N0eCkKKy0g KiAgICAgICAgIGlmIGVyciA8IDA6CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJy KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmluaXRlZCA9 IEZhbHNlCistICogCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODkK KysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJ U1BMQVksIGdldF9wb2ludGVyKCJEaXNwbGF5IiwgeDExX2Rpc3BsYXkpKQorKyAqICAgICAgICAg aWYgd2xfZGlzcGxheToKKysgKiAgICAgICAgICAgICBzZWxmLl93bF9kaXNwbGF5ID0gd2xfZGlz cGxheSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcGFyYW1z LmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9k aXNwbGF5Iiwgd2xfZGlzcGxheSkpCisrICogICAgICAgICBpZiBkcm1fZGlzcGxheToKKyAgKi8K Ky0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzMsIF9fcHl4X25fc19NUFZF cnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDg3MywgX19weXhf TDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX3B5eF90XzQg PSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhf dF80KSkgX19QWVhfRVJSKDAsIDg3MywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzQpOworLSAgICBfX3B5eF90XzUgPSBOVUxMOworLSAgICBpZiAoQ1lUSE9OX1VO UEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7Cist ICAgICAgX19weXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKKy0gICAgICBp ZiAobGlrZWx5KF9fcHl4X3RfNSkpIHsKKy0gICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5 TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOworLSAgICAgICAgX19QeXhfSU5DUkVGKF9f cHl4X3RfNSk7CistICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKy0gICAgICB9CistICAgIH0KKy0g ICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19w eXhfdF8zLCBfX3B5eF90XzUsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfMywgX19weXhfdF80KTsKKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBf X3B5eF90XzUgPSAwOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKy0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgODczLCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfd2xfZGlzcGxheSk7CisrICAg IF9fUHl4X0dJVkVSRUYoX19weXhfdl93bF9kaXNwbGF5KTsKKysgICAgX19QeXhfR09UUkVGKF9f cHl4X3Zfc2VsZi0+X3dsX2Rpc3BsYXkpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxm LT5fd2xfZGlzcGxheSk7CisrICAgIF9fcHl4X3Zfc2VsZi0+X3dsX2Rpc3BsYXkgPSBfX3B5eF92 X3dsX2Rpc3BsYXk7CisrCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 OTAKKysgKiAgICAgICAgIGlmIHdsX2Rpc3BsYXk6CisrICogICAgICAgICAgICAgc2VsZi5fd2xf ZGlzcGxheSA9IHdsX2Rpc3BsYXkKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1Q Vl9SRU5ERVJfUEFSQU1fV0xfRElTUExBWSwgZ2V0X3BvaW50ZXIoIndsX2Rpc3BsYXkiLCB3bF9k aXNwbGF5KSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgaWYgZHJt X2Rpc3BsYXk6CisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5Lmdl dCgiZmQiLCAtMSkKKysgKi8KKysgICAgX19weXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0 cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1z LT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFN X1dMX0RJU1BMQVksIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X2dldF9wb2ludGVyKCgo Y2hhciBjb25zdCAqKSJ3bF9kaXNwbGF5IiksIF9fcHl4X3Zfd2xfZGlzcGxheSksIE5VTEwpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTAsIF9fcHl4X0wxX2Vycm9y KQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMiwgMCwgMCwg MCk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBf X1BZWF9FUlIoMCwgODczLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjg3MgorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAg ICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2NiX3VuaW5pdF9nbChzZWxmLl9jdHgpCistICogICAg ICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxz ZQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTg4CisrICogICAgICAg ICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheQorKyAqICAgICAgICAgICAgIHBh cmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwgZ2V0X3BvaW50ZXIo IkRpc3BsYXkiLCB4MTFfZGlzcGxheSkpCisrICogICAgICAgICBpZiB3bF9kaXNwbGF5OiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgc2VsZi5fd2xfZGlzcGxh eSA9IHdsX2Rpc3BsYXkKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5E RVJfUEFSQU1fV0xfRElTUExBWSwgZ2V0X3BvaW50ZXIoIndsX2Rpc3BsYXkiLCB3bF9kaXNwbGF5 KSkKKyAgKi8KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4 NzQKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJy b3IoZXJyKQorLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogCistICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTEKKysgKiAgICAgICAgICAgICBzZWxm Ll93bF9kaXNwbGF5ID0gd2xfZGlzcGxheQorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9p ZHAoTVBWX1JFTkRFUl9QQVJBTV9XTF9ESVNQTEFZLCBnZXRfcG9pbnRlcigid2xfZGlzcGxheSIs IHdsX2Rpc3BsYXkpKQorKyAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3Bs YXkuZ2V0KCJmZCIsIC0xKQorKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRy bV9kaXNwbGF5LmdldCgiY3J0Y19pZCIsIC0xKQorICAqLworLSAgX19weXhfdl9zZWxmLT5pbml0 ZWQgPSAwOworKyAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfZHJt X2Rpc3BsYXkpOyBpZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlYX0VSUigwLCA5OTEs IF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fcHl4X3RfNikgeworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjg2NworLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9y KGVycikKKy0gKiAKKy0gKiAgICAgZGVmIHVuaW5pdF9nbChzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgorLSAqICAgICAg ICAgICAgIHJldHVybgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTky CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJ U1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCisrICogICAgICAg ICBpZiBkcm1fZGlzcGxheToKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rp c3BsYXkuZ2V0KCJmZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICAgICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwg LTEpCisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxh eS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0xKQorICAqLworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9Q eU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfZHJtX2Rpc3BsYXksIF9fcHl4X25fc19nZXQpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTIsIF9fcHl4X0wxX2Vycm9y KQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdF8xID0gX19QeXhf UHlPYmplY3RfQ2FsbChfX3B5eF90XzIsIF9fcHl4X3R1cGxlX183LCBOVUxMKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTkyLCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworKyAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhf dF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzcgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCA5OTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgICAgX19weXhfdl9kcm1fcGFyYW1zLmZk ID0gX19weXhfdF83OworIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9y ID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0g IF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF81KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2Lk9wZW5HTENvbnRleHQudW5pbml0X2dsIiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsKKy0gIF9fcHl4X0ww OjsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjg3NgorLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQorLSAq IAorLSAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHNlbGYudW5pbml0X2dsKCkKKy0gKiAKKysgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MworKyAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6 CisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAt MSkKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQo ImNydGNfaWQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3Jf aWQiLCAtMSkKKysgKiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5nZXQoImF0b21pY19y ZXF1ZXN0X3B0ciIsIE5vbmUpCisgICovCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0 X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5MywgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVj dF9DYWxsKF9fcHl4X3RfMSwgX19weXhfdHVwbGVfXzgsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3Rf MSA9IDA7CisrICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzIpOyBp ZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDAsIDk5MywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX3B5eF92X2RybV9wYXJhbXMuY3J0Y19pZCA9 IF9fcHl4X3RfNzsKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyB2b2lkIF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTNfX2RlYWxsb2NfXyhQ eU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCistc3RhdGljIHZvaWQgX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF8xM19fZGVhbGxvY19fKFB5T2Jq ZWN0ICpfX3B5eF92X3NlbGYpIHsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18gKHdyYXBwZXIpIiwgMCk7Cist ICBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzEyX19kZWFs bG9jX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250 ZXh0ICopX19weXhfdl9zZWxmKSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0g IF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLX0KKy0KKy1zdGF0aWMgdm9pZCBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzEyX19kZWFsbG9jX18o c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqX19w eXhfdl9zZWxmKSB7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMSA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKy0gIFB5 T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBj b25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9 IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18iLCAwKTsKKy0K Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NzcKKy0gKiAKKy0gKiAgICAg ZGVmIF9fZGVhbGxvY19fKHNlbGYpOgorLSAqICAgICAgICAgc2VsZi51bmluaXRfZ2woKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogREVGIE1BWF9SRU5ERVJfUEFSQU1T ID0gMzIKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5NAorKyAqICAg ICAgICAgICAgIGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpCisrICog ICAgICAgICAgICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lk IiwgLTEpCisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlz cGxheS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVxdWVzdF9w dHIiLCBOb25lKQorKyAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKKyAgKi8KKy0g IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZiksIF9fcHl4X25fc191bmluaXRfZ2wpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCA4NzcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMik7CistICBfX3B5eF90XzMgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9E UyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAgX19weXhfdF8z ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90 XzMpKSB7CistICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9O KF9fcHl4X3RfMik7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7CistICAgICAgX19Q eXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwg ZnVuY3Rpb24pOworLSAgICB9CistICB9CistICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpIDogX19QeXhfUHlP YmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7 IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA4NzcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihf X3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKF9fcHl4X3ZfZHJtX2Rpc3BsYXksIF9fcHl4X25fc19nZXQpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTQsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdF8xID0gX19QeXhfUHlPYmpl Y3RfQ2FsbChfX3B5eF90XzIsIF9fcHl4X3R1cGxlX185LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTk0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworKyAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdF8xKTsg aWYgKHVubGlrZWx5KChfX3B5eF90XzcgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkp IF9fUFlYX0VSUigwLCA5OTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgICAgX19weXhfdl9kcm1fcGFyYW1zLmNvbm5lY3Rv cl9pZCA9IF9fcHl4X3RfNzsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo4NzYKKy0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKKy0gKiAKKy0gKiAgICAgZGVm IF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBzZWxmLnVuaW5pdF9nbCgpCistICogCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5OTUKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1f ZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNv bm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpCisrICogICAg ICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVxdWVzdF9wdHIiLCBOb25l KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgaWYgYXJwIGlz IG5vdCBOb25lOgorKyAqICAgICAgICAgICAgICAgICBkcm1fcGFyYW1zLmF0b21pY19yZXF1ZXN0 X3B0ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5nZXRfcG9pbnRlcihhcnAsICJkcm1Nb2RlQXRv bWljUmVxKiIpCisgICovCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5NSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9f cHl4X3RfMSwgX19weXhfdHVwbGVfXzEwLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgOTk1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMik7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwor KyAgICBfX3B5eF92X2FycCA9IF9fcHl4X3RfMjsKKysgICAgX19weXhfdF8yID0gMDsKKyAKKy0g IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgZ290byBfX3B5eF9MMDsKKy0gIF9fcHl4X0wx X2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYo X19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X1dyaXRl VW5yYWlzYWJsZSgidmlkY3V0dGVyLmxpYnMubXB2Lk9wZW5HTENvbnRleHQuX19kZWFsbG9jX18i LCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsKKy0g IF9fcHl4X0wwOjsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLX0KKy0KKy0v KiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2Vs Zi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGlu ZyIpCistICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk2CisrICogICAgICAgICAgICAg ZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNvbm5lY3Rvcl9pZCIs IC0xKQorKyAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVl c3RfcHRyIiwgTm9uZSkKKysgKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5h dG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJw LCAiZHJtTW9kZUF0b21pY1JlcSoiKQorKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVy X2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkKKyAgKi8KKysgICAgX19weXhf dF82ID0gKF9fcHl4X3ZfYXJwICE9IFB5X05vbmUpOworKyAgICBfX3B5eF90XzMgPSAoX19weXhf dF82ICE9IDApOworKyAgICBpZiAoX19weXhfdF8zKSB7CisgCistLyogUHl0aG9uIHdyYXBwZXIg Ki8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09w ZW5HTENvbnRleHRfMTVfX3JlZHVjZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBD WVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTVfX3Jl ZHVjZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2Jq ZWN0ICp1bnVzZWQpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2Vf Y3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF8xNF9fcmVkdWNlX2N5dGhvbl9fKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqKV9fcHl4X3Zf c2VsZikpOworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0KKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTRf X3JlZHVjZV9jeXRob25fXyhDWVRIT05fVU5VU0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X09wZW5HTENvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3Qg Kl9fcHl4X3IgPSBOVUxMOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2Jq ZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25z dCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7 CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18iLCAwKTsK Ky0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjIKKy0gKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18o c2VsZik6CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252 ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0 ZSk6CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0 ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCisrICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk5NworKyAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNw bGF5LmdldCgiYXRvbWljX3JlcXVlc3RfcHRyIiwgTm9uZSkKKysgKiAgICAgICAgICAgICBpZiBh cnAgaXMgbm90IE5vbmU6CisrICogICAgICAgICAgICAgICAgIGRybV9wYXJhbXMuYXRvbWljX3Jl cXVlc3RfcHRyID0gPF9kcm1Nb2RlQXRvbWljUmVxICoqPmdldF9wb2ludGVyKGFycCwgImRybU1v ZGVBdG9taWNSZXEqIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIGRybV9wYXJhbXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAt MSkKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJN X0RJU1BMQVksICZkcm1fcGFyYW1zKQorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmpl Y3RfQ2FsbChfX3B5eF9idWlsdGluX1R5cGVFcnJvciwgX19weXhfdHVwbGVfXzYsIE5VTEwpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAyLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfUmFpc2UoX19weXhfdF8xLCAw LCAwLCAwKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAg X19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fcHl4X3RfOCA9IF9fUHl4 X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfYXJwKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF84 KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDk5NywgX19weXhfTDFfZXJyb3Ip CisrICAgICAgX19weXhfdl9kcm1fcGFyYW1zLmF0b21pY19yZXF1ZXN0X3B0ciA9ICgoc3RydWN0 IF9kcm1Nb2RlQXRvbWljUmVxICoqKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X2dldF9w b2ludGVyKF9fcHl4X3RfOCwgX19weXhfa3Bfc19kcm1Nb2RlQXRvbWljUmVxKSk7CisgCistICAv KiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2Vs Zi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGlu ZyIpCistICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorKyAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTYKKysgKiAgICAgICAgICAg ICBkcm1fcGFyYW1zLmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lk IiwgLTEpCisrICogICAgICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVx dWVzdF9wdHIiLCBOb25lKQorKyAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICBkcm1fcGFyYW1z LmF0b21pY19yZXF1ZXN0X3B0ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5nZXRfcG9pbnRlcihh cnAsICJkcm1Nb2RlQXRvbWljUmVxKiIpCisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5yZW5k ZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJlbmRlcl9mZCIsIC0xKQorICAqLworKyAgICB9Cisg CistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2Lk9wZW5HTENvbnRleHQuX19yZWR1Y2VfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworLSAg X19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0KKy0vKiAiKHRyZWUgZnJhZ21lbnQpIjozCist ICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorLSAqICAgICByYWlzZSBUeXBlRXJyb3Io InNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlj a2xpbmciKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNl bGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xp bmciKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk4CisrICogICAg ICAgICAgICAgaWYgYXJwIGlzIG5vdCBOb25lOgorKyAqICAgICAgICAgICAgICAgICBkcm1fcGFy YW1zLmF0b21pY19yZXF1ZXN0X3B0ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5nZXRfcG9pbnRl cihhcnAsICJkcm1Nb2RlQXRvbWljUmVxKiIpCisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5y ZW5kZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJlbmRlcl9mZCIsIC0xKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVO REVSX1BBUkFNX0RSTV9ESVNQTEFZLCAmZHJtX3BhcmFtcykKKysgKiAgICAgICAgIGlmIGRybV9v c2Rfc2l6ZToKKyAgKi8KKysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF92X2RybV9kaXNwbGF5LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgOTk4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMik7CisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19w eXhfdF8yLCBfX3B5eF90dXBsZV9fMTEsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCA5OTgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisr ICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtl bHkoKF9fcHl4X3RfNyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJS KDAsIDk5OCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworKyAgICBfX3B5eF92X2RybV9wYXJhbXMucmVuZGVyX2ZkID0gX19weXhf dF83OworIAorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzE3X19zZXRzdGF0ZV9jeXRo b25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0 ZSk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzT3BlbkdMQ29udGV4dF8xN19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKy0gIFB5T2JqZWN0 ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsK Ky0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250 ZXh0XzE2X19zZXRzdGF0ZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X09wZW5HTENvbnRleHQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19w eXhfdl9fX3B5eF9zdGF0ZSkpOworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0K Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5H TENvbnRleHRfMTZfX3NldHN0YXRlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqX19weXhfdl9zZWxmLCBD WVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CistICBQeU9iamVj dCAqX19weXhfciA9IE5VTEw7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlP YmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CistICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0gIGNv bnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5vID0g MDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fIiwg MCk7CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0CistICogICAgIHJhaXNlIFR5cGVFcnJv cigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBw aWNrbGluZyIpCistICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUp OgorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVk IHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTkKKysgKiAg ICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVB dG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQorKyAqICAg ICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJf ZmQiLCAtMSkKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFS QU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1zKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6CisrICogICAgICAgICAgICAgX2RybV9vc2Rf c2l6ZS53aWR0aCwgX2RybV9vc2Rfc2l6ZS5oZWlnaHQgPSBkcm1fb3NkX3NpemUKKyAgKi8KKy0g IF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3Is IF9fcHl4X3R1cGxlX183LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0g IF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7CistICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fUFlYX0VSUigxLCA0LCBfX3B5eF9MMV9lcnJvcikK KysgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRk X3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAoJl9f cHl4X3ZfZHJtX3BhcmFtcyksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA5OTksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAv KiAiKHRyZWUgZnJhZ21lbnQpIjozCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgor LSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRv IGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhv bl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEg UHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTkxCisrICogICAgICAgICAgICAgc2VsZi5fd2xfZGlzcGxheSA9IHdsX2Rp c3BsYXkKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1f V0xfRElTUExBWSwgZ2V0X3BvaW50ZXIoIndsX2Rpc3BsYXkiLCB3bF9kaXNwbGF5KSkKKysgKiAg ICAgICAgIGlmIGRybV9kaXNwbGF5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAtMSkKKysg KiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNydGNf aWQiLCAtMSkKKyAgKi8KKysgIH0KKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAg X19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19QeXhf QWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuT3BlbkdMQ29udGV4dC5fX3NldHN0YXRl X2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 CistICBfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCist LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4NgorLSAqICAgICAgICAgb2JqZWN0 IG93bmVkCistICogCistICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5vd25lZCA9IFtdCistICogICAgICAgICBz ZWxmLnBhcmFtc1swXS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElECisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAwMAorKyAqICAgICAgICAgICAgIGRybV9wYXJh bXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkKKysgKiAgICAg ICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICZk cm1fcGFyYW1zKQorKyAqICAgICAgICAgaWYgZHJtX29zZF9zaXplOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgX2RybV9vc2Rfc2l6ZS53aWR0aCwgX2RybV9v c2Rfc2l6ZS5oZWlnaHQgPSBkcm1fb3NkX3NpemUKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRk X3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX09TRF9TSVpFLCAmX2RybV9vc2Rfc2l6ZSkKKyAg Ki8KKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X2RybV9vc2Rf c2l6ZSk7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDEwMDAsIF9f cHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fcHl4X3RfMykgeworIAorLS8qIFB5dGhvbiB3cmFwcGVy ICovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVy UGFyYW1zXzFfX2luaXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhf YXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgaW50IF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfMV9faW5pdF9fKFB5T2Jq ZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhf a3dkcykgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwor LSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fICh3cmFwcGVyKSIsIDApOwor LSAgaWYgKHVubGlrZWx5KFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgPiAwKSkgeworLSAg ICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAxLCAwLCAwLCBQeVR1cGxl X0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgcmV0dXJuIC0xO30KKy0gIGlmICh1bmxpa2VseShfX3B5 eF9rd2RzKSAmJiB1bmxpa2VseShQeURpY3RfU2l6ZShfX3B5eF9rd2RzKSA+IDApICYmIHVubGlr ZWx5KCFfX1B5eF9DaGVja0tleXdvcmRTdHJpbmdzKF9fcHl4X2t3ZHMsICJfX2luaXRfXyIsIDAp KSkgcmV0dXJuIC0xOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM19SZW5kZXJQYXJhbXNfX19pbml0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmKSk7CistCistICAvKiBmdW5j dGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAg cmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19fX2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpfX3B5eF92X3NlbGYpIHsKKy0gIGludCBf X3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5 eF90XzEgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpf X3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18iLCAwKTsKKy0KKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4ODcKKy0gKiAKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNl bGYpOgorLSAqICAgICAgICAgc2VsZi5vd25lZCA9IFtdICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHNlbGYucGFyYW1zWzBdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFN X0lOVkFMSUQKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDEKKysg KiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BM QVksICZkcm1fcGFyYW1zKQorKyAqICAgICAgICAgaWYgZHJtX29zZF9zaXplOgorKyAqICAgICAg ICAgICAgIF9kcm1fb3NkX3NpemUud2lkdGgsIF9kcm1fb3NkX3NpemUuaGVpZ2h0ID0gZHJtX29z ZF9zaXplICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBwYXJh bXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX09TRF9TSVpFLCAmX2RybV9vc2Rfc2l6 ZSkKKyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IFB5TGlzdF9OZXcoMCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDg4NywgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPm93bmVkKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF92 X3NlbGYtPm93bmVkKTsKKy0gIF9fcHl4X3Zfc2VsZi0+b3duZWQgPSBfX3B5eF90XzE7CistICBf X3B5eF90XzEgPSAwOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4 OAorLSAqICAgICBkZWYgX19pbml0X18oc2VsZik6CistICogICAgICAgICBzZWxmLm93bmVkID0g W10KKy0gKiAgICAgICAgIHNlbGYucGFyYW1zWzBdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lO VkFMSUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICBjZGVmIGFk ZF92b2lkcChzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgdm9pZCAqcCwgYmludCBvd25l ZD1GYWxzZSk6CistICovCistICAoX19weXhfdl9zZWxmLT5wYXJhbXNbMF0pLnR5cGUgPSBNUFZf UkVOREVSX1BBUkFNX0lOVkFMSUQ7CisrICAgIGlmICgobGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFj dChfX3B5eF92X2RybV9vc2Rfc2l6ZSkpKSB8fCAoUHlMaXN0X0NoZWNrRXhhY3QoX19weXhfdl9k cm1fb3NkX3NpemUpKSkgeworKyAgICAgIFB5T2JqZWN0KiBzZXF1ZW5jZSA9IF9fcHl4X3ZfZHJt X29zZF9zaXplOworKyAgICAgIFB5X3NzaXplX3Qgc2l6ZSA9IF9fUHl4X1B5U2VxdWVuY2VfU0la RShzZXF1ZW5jZSk7CisrICAgICAgaWYgKHVubGlrZWx5KHNpemUgIT0gMikpIHsKKysgICAgICAg IGlmIChzaXplID4gMikgX19QeXhfUmFpc2VUb29NYW55VmFsdWVzRXJyb3IoMik7CisrICAgICAg ICBlbHNlIGlmIChzaXplID49IDApIF9fUHl4X1JhaXNlTmVlZE1vcmVWYWx1ZXNFcnJvcihzaXpl KTsKKysgICAgICAgIF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICB9 CisrICAgICAgI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9C T1JST1dFRF9SRUZTCisrICAgICAgaWYgKGxpa2VseShQeVR1cGxlX0NoZWNrRXhhY3Qoc2VxdWVu Y2UpKSkgeworKyAgICAgICAgX19weXhfdF8xID0gUHlUdXBsZV9HRVRfSVRFTShzZXF1ZW5jZSwg MCk7IAorKyAgICAgICAgX19weXhfdF8yID0gUHlUdXBsZV9HRVRfSVRFTShzZXF1ZW5jZSwgMSk7 IAorKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBfX3B5eF90XzEgPSBQeUxpc3RfR0VUX0lURU0o c2VxdWVuY2UsIDApOyAKKysgICAgICAgIF9fcHl4X3RfMiA9IFB5TGlzdF9HRVRfSVRFTShzZXF1 ZW5jZSwgMSk7IAorKyAgICAgIH0KKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKysg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKysgICAgICAjZWxzZQorKyAgICAgIF9fcHl4 X3RfMSA9IFB5U2VxdWVuY2VfSVRFTShzZXF1ZW5jZSwgMCk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDEwMDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworKyAgICAgIF9fcHl4X3RfMiA9IFB5U2VxdWVuY2VfSVRFTShzZXF1 ZW5jZSwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwMDEsIF9f cHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICAgICNl bmRpZgorKyAgICB9IGVsc2UgeworKyAgICAgIFB5X3NzaXplX3QgaW5kZXggPSAtMTsKKysgICAg ICBfX3B5eF90XzQgPSBQeU9iamVjdF9HZXRJdGVyKF9fcHl4X3ZfZHJtX29zZF9zaXplKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3Ip CisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgICAgX19weXhfdF85ID0gUHlf VFlQRShfX3B5eF90XzQpLT50cF9pdGVybmV4dDsKKysgICAgICBpbmRleCA9IDA7IF9fcHl4X3Rf MSA9IF9fcHl4X3RfOShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIGdvdG8g X19weXhfTDExX3VucGFja2luZ19mYWlsZWQ7CisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CisrICAgICAgaW5kZXggPSAxOyBfX3B5eF90XzIgPSBfX3B5eF90XzkoX19weXhfdF80KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBnb3RvIF9fcHl4X0wxMV91bnBhY2tpbmdfZmFpbGVk OworKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICAgIGlmIChfX1B5eF9JdGVy bmV4dFVucGFja0VuZENoZWNrKF9fcHl4X3RfOShfX3B5eF90XzQpLCAyKSA8IDApIF9fUFlYX0VS UigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX3B5eF90XzkgPSBOVUxMOworKyAg ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgICAgIGdvdG8g X19weXhfTDEyX3VucGFja2luZ19kb25lOworKyAgICAgIF9fcHl4X0wxMV91bnBhY2tpbmdfZmFp bGVkOjsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysg ICAgICBfX3B5eF90XzkgPSBOVUxMOworKyAgICAgIGlmIChfX1B5eF9JdGVyRmluaXNoKCkgPT0g MCkgX19QeXhfUmFpc2VOZWVkTW9yZVZhbHVlc0Vycm9yKGluZGV4KTsKKysgICAgICBfX1BZWF9F UlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19weXhfTDEyX3VucGFja2luZ19k b25lOjsKKysgICAgfQorKyAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhf dF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzcgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9Q eUludF9Bc19pbnQoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzEwID09IChpbnQp LTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJy b3IpCisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBf X3B5eF92X19kcm1fb3NkX3NpemUud2lkdGggPSBfX3B5eF90Xzc7CisrICAgIF9fcHl4X3ZfX2Ry bV9vc2Rfc2l6ZS5oZWlnaHQgPSBfX3B5eF90XzEwOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjg4NgorLSAqICAgICAgICAgb2JqZWN0IG93bmVkCisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDAyCisrICogICAgICAgICBpZiBkcm1fb3Nk X3NpemU6CisrICogICAgICAgICAgICAgX2RybV9vc2Rfc2l6ZS53aWR0aCwgX2RybV9vc2Rfc2l6 ZS5oZWlnaHQgPSBkcm1fb3NkX3NpemUKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRw KE1QVl9SRU5ERVJfUEFSQU1fRFJNX09TRF9TSVpFLCAmX2RybV9vc2Rfc2l6ZSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorLSAqICAgICBkZWYgX19pbml0X18oc2VsZik6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYub3duZWQgPSBbXQor LSAqICAgICAgICAgc2VsZi5wYXJhbXNbMF0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJ RAorKyAqICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2NyZWF0ZSgmc2VsZi5fY3R4 LCBzZWxmLl9tcHYuX2N0eCwgcGFyYW1zLnBhcmFtcykKKyAgKi8KKysgICAgX19weXhfdF8yID0g KChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBh cmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFy YW1zLCBNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgKCZfX3B5eF92X19kcm1fb3NkX3Np emUpLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTAwMiwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworLSAgX19weXhfciA9IDA7CistICBnb3RvIF9fcHl4X0wwOworLSAgX19weXhf TDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19QeXhfQWRkVHJh Y2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlbmRlclBhcmFtcy5fX2luaXRfXyIsIF9fcHl4 X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IC0x OworLSAgX19weXhfTDA6OworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICBy ZXR1cm4gX19weXhfcjsKKy19CistCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojg5MAorLSAqICAgICAgICAgc2VsZi5wYXJhbXNbMF0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1f SU5WQUxJRAorLSAqIAorLSAqICAgICBjZGVmIGFkZF92b2lkcChzZWxmLCBtcHZfcmVuZGVyX3Bh cmFtX3R5cGUgdCwgdm9pZCAqcCwgYmludCBvd25lZD1GYWxzZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNvdW50ID0gbGVuKHNlbGYub3duZWQpCistICogICAg ICAgICBpZiBjb3VudCA+PSBNQVhfUkVOREVSX1BBUkFNUzoKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwMDAKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLnJlbmRl cl9mZCA9IGRybV9kaXNwbGF5LmdldCgicmVuZGVyX2ZkIiwgLTEpCisrICogICAgICAgICAgICAg cGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAmZHJtX3BhcmFt cykKKysgKiAgICAgICAgIGlmIGRybV9vc2Rfc2l6ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgICAgIF9kcm1fb3NkX3NpemUud2lkdGgsIF9kcm1fb3NkX3NpemUu aGVpZ2h0ID0gZHJtX29zZF9zaXplCisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChN UFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgJl9kcm1fb3NkX3NpemUpCisgICovCistCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQ YXJhbXNfYWRkX3ZvaWRwKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19S ZW5kZXJQYXJhbXMgKl9fcHl4X3Zfc2VsZiwgZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgX19w eXhfdl90LCB2b2lkICpfX3B5eF92X3AsIHN0cnVjdCBfX3B5eF9vcHRfYXJnc185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF92b2lkcCAqX19weXhfb3B0aW9uYWxfYXJn cykgeworLSAgaW50IF9fcHl4X3Zfb3duZWQgPSAoKGludCkwKTsKKy0gIFB5T2JqZWN0ICpfX3B5 eF92X2NvdW50ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0g IFB5X3NzaXplX3QgX19weXhfdF8yOworLSAgaW50IF9fcHl4X3RfMzsKKy0gIFB5T2JqZWN0ICpf X3B5eF90XzQgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBpbnQg X19weXhfdF82OworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5 eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiYWRkX3ZvaWRwIiwgMCk7CistICBpZiAoX19weXhfb3B0aW9u YWxfYXJncykgeworLSAgICBpZiAoX19weXhfb3B0aW9uYWxfYXJncy0+X19weXhfbiA+IDApIHsK Ky0gICAgICBfX3B5eF92X293bmVkID0gX19weXhfb3B0aW9uYWxfYXJncy0+b3duZWQ7CistICAg IH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTEKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDA0CisrICogICAgICAgICAgICAg cGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgJl9kcm1fb3Nk X3NpemUpCisgICogCistICogICAgIGNkZWYgYWRkX3ZvaWRwKHNlbGYsIG1wdl9yZW5kZXJfcGFy YW1fdHlwZSB0LCB2b2lkICpwLCBiaW50IG93bmVkPUZhbHNlKToKKy0gKiAgICAgICAgIGNvdW50 ID0gbGVuKHNlbGYub3duZWQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIGlmIGNvdW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOgorLSAqICAgICAgICAgICAgIGlmIG93 bmVkOgorLSAqLworLSAgX19weXhfdF8xID0gX19weXhfdl9zZWxmLT5vd25lZDsKKy0gIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gUHlPYmplY3RfTGVuZ3RoKF9fcHl4 X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlY X0VSUigwLCA4OTEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistICBfX3B5eF90XzEgPSBQeUludF9Gcm9tU3NpemVfdChfX3B5eF90 XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4OTEsIF9fcHl4X0wx X2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX3B5eF92X2NvdW50ID0g X19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4OTIKKy0gKiAgICAgY2RlZiBhZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRl cl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFsc2UpOgorLSAqICAgICAgICAg Y291bnQgPSBsZW4oc2VsZi5vd25lZCkKKy0gKiAgICAgICAgIGlmIGNvdW50ID49IE1BWF9SRU5E RVJfUEFSQU1TOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg aWYgb3duZWQ6CistICogICAgICAgICAgICAgICAgIGZyZWUocCkKKy0gKi8KKy0gIF9fcHl4X3Rf MSA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfY291bnQsIF9fcHl4X2ludF8zMiwgUHlf R0UpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDg5MiwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90XzMgPSBfX1B5eF9Q eU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBf X1BZWF9FUlIoMCwgODkyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworLSAgaWYgKF9fcHl4X3RfMykgeworLQorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODkzCistICogICAgICAgICBjb3VudCA9IGxlbihz ZWxmLm93bmVkKQorLSAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJBTVM6Cist ICogICAgICAgICAgICAgaWYgb3duZWQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICAgICAgZnJlZShwKQorLSAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJy b3IoIlJlbmRlclBhcmFtcyBvdmVyZmxvdyIpCisrICogICAgICAgICBlcnIgPSBtcHZfcmVuZGVy X2NvbnRleHRfY3JlYXRlKCZzZWxmLl9jdHgsIHNlbGYuX21wdi5fY3R4LCBwYXJhbXMucGFyYW1z KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBpZiBlcnIgPCAwOgor KyAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKyAgKi8KKy0gICAgX19weXhfdF8z ID0gKF9fcHl4X3Zfb3duZWQgIT0gMCk7CistICAgIGlmIChfX3B5eF90XzMpIHsKKysgIF9fcHl4 X3ZfZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2NyZWF0ZSgoJl9fcHl4X3Zfc2VsZi0+X2N0eCks IF9fcHl4X3Zfc2VsZi0+X21wdi0+X2N0eCwgX19weXhfdl9wYXJhbXMtPnBhcmFtcyk7CisgCist ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5NAorLSAqICAgICAgICAg aWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJBTVM6CistICogICAgICAgICAgICAgaWYgb3duZWQ6 CistICogICAgICAgICAgICAgICAgIGZyZWUocCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlJlbmRlclBhcmFtcyBvdmVyZmxv dyIpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAwNQorICAqIAorKyAq ICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2NyZWF0ZSgmc2VsZi5fY3R4LCBzZWxm Ll9tcHYuX2N0eCwgcGFyYW1zLnBhcmFtcykKKysgKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihl cnIpCisrICogICAgICAgICBzZWxmLmluaXRlZCA9IFRydWUKKyAgKi8KKy0gICAgICBmcmVlKF9f cHl4X3ZfcCk7CistCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5 MworLSAqICAgICAgICAgY291bnQgPSBsZW4oc2VsZi5vd25lZCkKKy0gKiAgICAgICAgIGlmIGNv dW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOgorLSAqICAgICAgICAgICAgIGlmIG93bmVkOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgIGZyZWUocCkKKy0g KiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJSZW5kZXJQYXJhbXMgb3ZlcmZsb3ciKQor LSAqLworLSAgICB9CisrICBfX3B5eF90XzMgPSAoKF9fcHl4X3ZfZXJyIDwgMCkgIT0gMCk7Cisr ICBpZiAodW5saWtlbHkoX19weXhfdF8zKSkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODk1CistICogICAgICAgICAgICAgaWYgb3duZWQ6CistICogICAgICAg ICAgICAgICAgIGZyZWUocCkKKy0gKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJSZW5k ZXJQYXJhbXMgb3ZlcmZsb3ciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDA2CisrICogICAgICAgICBlcnIgPSBt cHZfcmVuZGVyX2NvbnRleHRfY3JlYXRlKCZzZWxmLl9jdHgsIHNlbGYuX21wdi5fY3R4LCBwYXJh bXMucGFyYW1zKQorKyAqICAgICAgICAgaWYgZXJyIDwgMDoKKysgKiAgICAgICAgICAgICByYWlz ZSBNUFZFcnJvcihlcnIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IHNlbGYuaW5pdGVkID0gVHJ1ZQorICAqIAorLSAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRd LnR5cGUgPSB0CisgICovCistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80 LCBfX3B5eF9uX3NfUHlNUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhf RVJSKDAsIDg5NSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF8xLCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAxMDA2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7CisrICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4 X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAwNiwgX19w eXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgICBfX3B5eF90 XzUgPSBOVUxMOworLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfNCkpKSB7CistICAgICAgX19weXhfdF81ID0gUHlNZXRob2Rf R0VUX1NFTEYoX19weXhfdF80KTsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1 bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzEpKSkgeworKyAgICAgIF9fcHl4X3RfNSA9 IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMSk7CisgICAgICAgaWYgKGxpa2VseShfX3B5eF90 XzUpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJ T04oX19weXhfdF80KTsKKysgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dF VF9GVU5DVElPTihfX3B5eF90XzEpOworICAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7 CisgICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzQsIGZ1bmN0aW9uKTsKKysgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19w eXhfdF8xLCBmdW5jdGlvbik7CisgICAgICAgfQorICAgICB9CistICAgIF9fcHl4X3RfMSA9IChf X3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNCwgX19weXhfdF81 LCBfX3B5eF9rcF9zX1JlbmRlclBhcmFtc19vdmVyZmxvdykgOiBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X3RfNCwgX19weXhfa3Bfc19SZW5kZXJQYXJhbXNfb3ZlcmZsb3cpOworKyAg ICBfX3B5eF90XzIgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzEsIF9fcHl4X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8xLCBfX3B5eF90XzQpOworICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9f cHl4X3RfNSA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDg5NSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gICAgX19QeXhfUmFp c2UoX19weXhfdF8xLCAwLCAwLCAwKTsKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgMTAwNiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0g ICAgX19QWVhfRVJSKDAsIDg5NSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X1JhaXNlKF9f cHl4X3RfMiwgMCwgMCwgMCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworKyAgICBfX1BZWF9FUlIoMCwgMTAwNiwgX19weXhfTDFfZXJyb3IpCisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTIKKy0gKiAgICAgY2RlZiBhZGRf dm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9 RmFsc2UpOgorLSAqICAgICAgICAgY291bnQgPSBsZW4oc2VsZi5vd25lZCkKKy0gKiAgICAgICAg IGlmIGNvdW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICAgICAgaWYgb3duZWQ6CistICogICAgICAgICAgICAgICAgIGZyZWUo cCkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDUKKysgKiAKKysg KiAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2Vs Zi5fbXB2Ll9jdHgsIHBhcmFtcy5wYXJhbXMpCisrICogICAgICAgICBpZiBlcnIgPCAwOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3Io ZXJyKQorKyAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCisgICovCisgICB9CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODk3CistICogICAgICAgICAgICAgcmFp c2UgUHlNUFZFcnJvcigiUmVuZGVyUGFyYW1zIG92ZXJmbG93IikKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDA3CisrICogICAgICAgICBpZiBlcnIgPCAwOgorKyAqICAg ICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKysgKiAgICAgICAgIHNlbGYuaW5pdGVkID0g VHJ1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCistICogICAgICAgICBzZWxm LnBhcmFtc1tjb3VudF0udHlwZSA9IHQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEgPSBwCistICogICAgICAgICBzZWxmLnBh cmFtc1tjb3VudCArIDFdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQKKysgKiAgICAg QF9lcnJvcnMKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9f cHl4X3ZfY291bnQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoUHlfc3NpemVfdCktMSkg JiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4OTcsIF9fcHl4X0wxX2Vycm9yKQor LSAgKF9fcHl4X3Zfc2VsZi0+cGFyYW1zW19fcHl4X3RfMl0pLnR5cGUgPSBfX3B5eF92X3Q7Cisr ICBfX3B5eF92X3NlbGYtPmluaXRlZCA9IDE7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6ODk4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTUw CisrICogICAgICAgICBiaW50IGluaXRlZAorICAqIAorLSAqICAgICAgICAgc2VsZi5wYXJhbXNb Y291bnRdLnR5cGUgPSB0CistICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudF0uZGF0YSA9IHAg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5wYXJhbXNbY291 bnQgKyAxXS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElECistICogICAgICAgICBzZWxm Lm93bmVkLmFwcGVuZChvd25lZCkKKy0gKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW5kZXhf QXNTc2l6ZV90KF9fcHl4X3ZfY291bnQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoUHlf c3NpemVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4OTgsIF9fcHl4 X0wxX2Vycm9yKQorLSAgKF9fcHl4X3Zfc2VsZi0+cGFyYW1zW19fcHl4X3RfMl0pLmRhdGEgPSBf X3B5eF92X3A7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODk5Cist ICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudF0udHlwZSA9IHQKKy0gKiAgICAgICAgIHNlbGYu cGFyYW1zW2NvdW50XS5kYXRhID0gcAorLSAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnQgKyAx XS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElEICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQorLSAqIAorLSAqLwor LSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfQWRkT2JqQyhfX3B5eF92X2NvdW50LCBfX3B5eF9p bnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDg5 OSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4 X3RfMiA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgo X19weXhfdF8yID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDg5OSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKy0gIChfX3B5eF92X3NlbGYtPnBhcmFtc1tfX3B5eF90XzJdKS50eXBl ID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElEOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjkwMAorLSAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEgPSBw CistICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudCArIDFdLnR5cGUgPSBNUFZfUkVOREVSX1BB UkFNX0lOVkFMSUQKKy0gKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGNkZWYgYWRkX2ludChzZWxmLCBt cHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgaW50IHZhbCk6CistICovCistICBfX3B5eF90XzEgPSBf X1B5eF9QeUJvb2xfRnJvbUxvbmcoX19weXhfdl9vd25lZCk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDkwMCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0FwcGVuZChfX3B5eF92 X3NlbGYtPm93bmVkLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF82ID09ICgoaW50 KS0xKSkpIF9fUFlYX0VSUigwLCA5MDAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6ODkwCistICogICAgICAgICBzZWxmLnBhcmFtc1swXS50eXBlID0gTVBWX1JF TkRFUl9QQVJBTV9JTlZBTElECistICogCistICogICAgIGNkZWYgYWRkX3ZvaWRwKHNlbGYsIG1w dl9yZW5kZXJfcGFyYW1fdHlwZSB0LCB2b2lkICpwLCBiaW50IG93bmVkPUZhbHNlKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY291bnQgPSBsZW4oc2VsZi5vd25l ZCkKKy0gKiAgICAgICAgIGlmIGNvdW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOgorKyAqICAgICBk ZWYgX19pbml0X18oc2VsZiwgbXB2LCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICAgICAgICAgICBhcGlfdHlwZSwKKysgKiAgICAgICAgICAgICAgICAgIG9wZW5nbF9p bml0X3BhcmFtcz1Ob25lLAorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCist ICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworKyAgX19weXhfciA9 IDA7CisgICBnb3RvIF9fcHl4X0wwOworICAgX19weXhfTDFfZXJyb3I6OworICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzQpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworLSAgX19Q eXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlbmRlclBhcmFtcy5hZGRfdm9p ZHAiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9f cHl4X3IgPSAwOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVu ZGVyQ29udGV4dC5fX2luaXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhf ZmlsZW5hbWUpOworKyAgX19weXhfciA9IC0xOworICAgX19weXhfTDA6OworLSAgX19QeXhfWERF Q1JFRihfX3B5eF92X2NvdW50KTsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19Q eXhfWERFQ1JFRigoUHlPYmplY3QgKilfX3B5eF92X3BhcmFtcyk7CisrICBfX1B5eF9YREVDUkVG KF9fcHl4X3ZfYXJwKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0 dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 MDIKKy0gKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQorKy8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDEwCisgICogCistICogICAgIGNkZWYgYWRkX2ludChzZWxm LCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgaW50IHZhbCk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgaW50ICpwID0gPGludCAqPm1hbGxvYyhzaXplb2Yo aW50KSkKKy0gKiAgICAgICAgIHBbMF0gPSB2YWwKKysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAg ZGVmIHNldF9pY2NfcHJvZmlsZShzZWxmLCBpY2NfYmxvYik6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWY6CisrICogICAgICAgICAgICAgbXB2X3JlbmRlcl9w YXJhbSBwYXJhbQorICAqLworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF9pbnQoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqX19weXhfdl9zZWxmLCBlbnVtIG1wdl9y ZW5kZXJfcGFyYW1fdHlwZSBfX3B5eF92X3QsIGludCBfX3B5eF92X3ZhbCkgeworLSAgaW50ICpf X3B5eF92X3A7CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfM3NldF9pY2NfcHJvZmls ZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9pY2NfYmxvYik7IC8q cHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF8zc2V0X2ljY19wcm9maWxlKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF92X2ljY19ibG9iKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7 CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoInNldF9pY2NfcHJvZmlsZSAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2Zp bGUoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0 ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfaWNjX2Jsb2IpKTsKKysKKysg IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisrCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2ZpbGUo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9pY2NfYmxvYikgeworKyAgc3RydWN0IG1wdl9y ZW5kZXJfcGFyYW0gX19weXhfdl9wYXJhbTsKKysgIHN0cnVjdCBtcHZfYnl0ZV9hcnJheSBfX3B5 eF92X3ZhbDsKKysgIGludCBfX3B5eF92X2VycjsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVM TDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8x ID0gTlVMTDsKKysgIGludCBfX3B5eF90XzE7CisrICBpbnQgX19weXhfdF8yOworKyAgUHlPYmpl Y3QgKl9fcHl4X3RfMyA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKysg IFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOworKyAgY2hhciAqX19weXhfdF82OworKyAgUHlf c3NpemVfdCBfX3B5eF90Xzc7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNo YXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0g IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJhZGRfaW50IiwgMCk7CisrICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgic2V0X2ljY19wcm9maWxlIiwgMCk7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTAzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTAxNgorKyAqICAgICAgICAgICAgIGludCBlcnIKKyAgKiAKKy0gKiAgICAgY2Rl ZiBhZGRfaW50KHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBpbnQgdmFsKToKKy0gKiAg ICAgICAgIGNkZWYgaW50ICpwID0gPGludCAqPm1hbGxvYyhzaXplb2YoaW50KSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcFswXSA9IHZhbAorLSAqICAgICAgICAg c2VsZi5hZGRfdm9pZHAodCwgcCkKKysgKiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGljY19i bG9iLCBieXRlcyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICByYWlzZSBQeU1QVkVycm9yKCJpY2NfYmxvYiBzaG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIp CisrICogICAgICAgICB2YWwuZGF0YSA9IDx2b2lkICo+PGNoYXIgKj5pY2NfYmxvYgorICAqLwor LSAgX19weXhfdl9wID0gKChpbnQgKiltYWxsb2MoKHNpemVvZihpbnQpKSkpOworKyAgX19weXhf dF8xID0gUHlCeXRlc19DaGVjayhfX3B5eF92X2ljY19ibG9iKTsgCisrICBfX3B5eF90XzIgPSAo KCEoX19weXhfdF8xICE9IDApKSAhPSAwKTsKKysgIGlmICh1bmxpa2VseShfX3B5eF90XzIpKSB7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA0CistICogICAgIGNk ZWYgYWRkX2ludChzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgaW50IHZhbCk6CistICog ICAgICAgICBjZGVmIGludCAqcCA9IDxpbnQgKj5tYWxsb2Moc2l6ZW9mKGludCkpCistICogICAg ICAgICBwWzBdID0gdmFsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg IHNlbGYuYWRkX3ZvaWRwKHQsIHApCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDE3CisgICogCisrICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpY2NfYmxvYiwg Ynl0ZXMpOgorKyAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoImljY19ibG9iIHNob3Vs ZCBiZSBhIGJ5dGVzIGluc3RhbmNlIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgdmFsLmRhdGEgPSA8dm9pZCAqPjxjaGFyICo+aWNjX2Jsb2IKKysgKiAgICAgICAg IHZhbC5zaXplID0gbGVuKGljY19ibG9iKQorICAqLworLSAgKF9fcHl4X3ZfcFswXSkgPSBfX3B5 eF92X3ZhbDsKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4 X25fc19QeU1QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwg MTAxNywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAg ICBfX3B5eF90XzUgPSBOVUxMOworKyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVu bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNCkpKSB7CisrICAgICAgX19weXhfdF81ID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF80KTsKKysgICAgICBpZiAobGlrZWx5KF9fcHl4X3Rf NSkpIHsKKysgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElP TihfX3B5eF90XzQpOworKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7CisrICAgICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzQsIGZ1bmN0aW9uKTsKKysgICAgICB9CisrICAgIH0KKysgICAgX19weXhfdF8zID0gKF9f cHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF80LCBfX3B5eF90XzUs IF9fcHl4X2twX3NfaWNjX2Jsb2Jfc2hvdWxkX2JlX2FfYnl0ZXNfaW5zdGEpIDogX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X2twX3NfaWNjX2Jsb2Jfc2hvdWxkX2Jl X2FfYnl0ZXNfaW5zdGEpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3Rf NSA9IDA7CisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDEwMTcs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgIF9fUHl4X1JhaXNlKF9f cHl4X3RfMywgMCwgMCwgMCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworKyAgICBfX1BZWF9FUlIoMCwgMTAxNywgX19weXhfTDFfZXJyb3IpCisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA1CistICogICAgICAgICBjZGVmIGlu dCAqcCA9IDxpbnQgKj5tYWxsb2Moc2l6ZW9mKGludCkpCistICogICAgICAgICBwWzBdID0gdmFs CistICogICAgICAgICBzZWxmLmFkZF92b2lkcCh0LCBwKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDE2CisrICog ICAgICAgICAgICAgaW50IGVycgorICAqIAorLSAqICAgICBjZGVmIGFkZF9zdHJpbmcoc2VsZiwg bXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGNoYXIgKnMpOgorKyAqICAgICAgICAgaWYgbm90IGlz aW5zdGFuY2UoaWNjX2Jsb2IsIGJ5dGVzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoImljY19ibG9iIHNob3VsZCBiZSBhIGJ5 dGVzIGluc3RhbmNlIikKKysgKiAgICAgICAgIHZhbC5kYXRhID0gPHZvaWQgKj48Y2hhciAqPmlj Y19ibG9iCisgICovCistICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmLT5fX3B5eF92 dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl90LCBfX3B5eF92X3AsIE5VTEwp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MDUsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKysgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MDIKKy0gKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMTgKKysgKiAgICAgICAgIGlmIG5v dCBpc2luc3RhbmNlKGljY19ibG9iLCBieXRlcyk6CisrICogICAgICAgICAgICAgcmFpc2UgUHlN UFZFcnJvcigiaWNjX2Jsb2Igc2hvdWxkIGJlIGEgYnl0ZXMgaW5zdGFuY2UiKQorKyAqICAgICAg ICAgdmFsLmRhdGEgPSA8dm9pZCAqPjxjaGFyICo+aWNjX2Jsb2IgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgdmFsLnNpemUgPSBsZW4oaWNjX2Jsb2IpCisgICogCist ICogICAgIGNkZWYgYWRkX2ludChzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgaW50IHZh bCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgaW50ICpw ID0gPGludCAqPm1hbGxvYyhzaXplb2YoaW50KSkKKy0gKiAgICAgICAgIHBbMF0gPSB2YWwKKyAg Ki8KKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0FzV3JpdGFibGVTdHJpbmcoX19weXhf dl9pY2NfYmxvYik7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNikgJiYgUHlFcnJfT2NjdXJyZWQo KSkpIF9fUFlYX0VSUigwLCAxMDE4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3ZfdmFsLmRh dGEgPSAoKHZvaWQgKikoKGNoYXIgKilfX3B5eF90XzYpKTsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsK Ky0gIGdvdG8gX19weXhfTDA7CistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5f UmVuZGVyUGFyYW1zLmFkZF9pbnQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAwOworLSAgX19weXhfTDA6OworLSAgX19QeXhfWEdJ VkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJl dHVybiBfX3B5eF9yOworLX0KKy0KKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTA3CistICogICAgICAgICBzZWxmLmFkZF92b2lkcCh0LCBwKQorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwMTkKKysgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9y KCJpY2NfYmxvYiBzaG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIpCisrICogICAgICAgICB2YWwu ZGF0YSA9IDx2b2lkICo+PGNoYXIgKj5pY2NfYmxvYgorKyAqICAgICAgICAgdmFsLnNpemUgPSBs ZW4oaWNjX2Jsb2IpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAg Y2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBjaGFyICpzKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBjaGFyICpwID0g PGNoYXIgKj5tYWxsb2Moc3RybGVuKHMpICsgMSkKKy0gKiAgICAgICAgIHN0cmNweShwLCBzKQor KyAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSUNDX1BST0ZJTEUKKyAg Ki8KKysgIF9fcHl4X3RfNyA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X2ljY19ibG9iKTsgaWYg KHVubGlrZWx5KF9fcHl4X3RfNyA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDEw MTksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdl92YWwuc2l6ZSA9IF9fcHl4X3RfNzsKKyAK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRl clBhcmFtc19hZGRfc3RyaW5nKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X19SZW5kZXJQYXJhbXMgKl9fcHl4X3Zfc2VsZiwgZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5cGUg X19weXhfdl90LCBjaGFyICpfX3B5eF92X3MpIHsKKy0gIGNoYXIgKl9fcHl4X3ZfcDsKKy0gIFB5 T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOwor LSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImFkZF9zdHJpbmciLCAwKTsK Ky0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDgKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDIxCisrICogICAgICAgICB2YWwuc2l6ZSA9IGxl bihpY2NfYmxvYikKKysgKiAKKysgKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BB UkFNX0lDQ19QUk9GSUxFICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IHBhcmFtLmRhdGEgPSAmdmFsCisgICogCistICogICAgIGNkZWYgYWRkX3N0cmluZyhzZWxmLCBt cHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgY2hhciAqcyk6CistICogICAgICAgICBjZGVmIGNoYXIg KnAgPSA8Y2hhciAqPm1hbGxvYyhzdHJsZW4ocykgKyAxKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICBzdHJjcHkocCwgcykKKy0gKiAgICAgICAgIHNlbGYuYWRkX3Zv aWRwKHQsIHApCisgICovCistICBfX3B5eF92X3AgPSAoKGNoYXIgKiltYWxsb2MoKHN0cmxlbihf X3B5eF92X3MpICsgMSkpKTsKKysgIF9fcHl4X3ZfcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFS QU1fSUNDX1BST0ZJTEU7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTA5CistICogICAgIGNkZWYgYWRkX3N0cmluZyhzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUg dCwgY2hhciAqcyk6CistICogICAgICAgICBjZGVmIGNoYXIgKnAgPSA8Y2hhciAqPm1hbGxvYyhz dHJsZW4ocykgKyAxKQorLSAqICAgICAgICAgc3RyY3B5KHAsIHMpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyMgorKyAqIAorKyAqICAgICAgICAgcGFyYW0u dHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSUNDX1BST0ZJTEUKKysgKiAgICAgICAgIHBhcmFtLmRh dGEgPSAmdmFsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKysgKiAgICAgICAg IHdpdGggbm9naWw6CisgICovCistICAodm9pZCkoc3RyY3B5KF9fcHl4X3ZfcCwgX19weXhfdl9z KSk7CisrICBfX3B5eF92X3BhcmFtLmRhdGEgPSAoJl9fcHl4X3ZfdmFsKTsKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTAKKy0gKiAgICAgICAgIGNkZWYgY2hhciAq cCA9IDxjaGFyICo+bWFsbG9jKHN0cmxlbihzKSArIDEpCistICogICAgICAgICBzdHJjcHkocCwg cykKKy0gKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI0CisrICog ICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAorICAqIAorLSAqICAgICBkZWYgX19kZWFsbG9jX18o c2VsZik6CisrICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0 ZXIoc2VsZi5fY3R4LCBwYXJhbSkKKysgKiAgICAgICAgIHJldHVybiBlcnIKKyAgKi8KKy0gIF9f cHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2 X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19w eXhfdl9zZWxmLCBfX3B5eF92X3QsIF9fcHl4X3ZfcCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDkxMCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OworKyAgeworKyAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgIFB5VGhyZWFkU3RhdGUg Kl9zYXZlOworKyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworKyAgICAgIF9fUHl4X0Zhc3RHSUxf UmVtZW1iZXIoKTsKKysgICAgICAjZW5kaWYKKysgICAgICAvKnRyeToqLyB7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA3CistICogICAgICAgICBzZWxmLmFkZF92 b2lkcCh0LCBwKQorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEw MjUKKysgKiAKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgZXJyID0g bXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4LCBwYXJhbSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmV0dXJuIGVycgorICAqIAorLSAq ICAgICBjZGVmIGFkZF9zdHJpbmcoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGNoYXIg KnMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmIGNoYXIg KnAgPSA8Y2hhciAqPm1hbGxvYyhzdHJsZW4ocykgKyAxKQorLSAqICAgICAgICAgc3RyY3B5KHAs IHMpCisgICovCisrICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9yZW5kZXJfY29udGV4dF9zZXRf cGFyYW1ldGVyKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9wYXJhbSk7CisrICAgICAgfQor IAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gUHlfTm9uZTsgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0gIF9fcHl4X0wxX2Vycm9y OjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2Ll9SZW5kZXJQYXJhbXMuYWRkX3N0cmluZyIsIF9fcHl4X2NsaW5l bm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IDA7CistICBf X3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKy0gIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLS8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTIKKy0gKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQs IHApCistICogCistICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3du ZWQpOgorLSAqICAgICAgICAgICAgIGlmIGo6CistICovCistCistLyogUHl0aG9uIHdyYXBwZXIg Ki8KKy1zdGF0aWMgdm9pZCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVy UGFyYW1zXzNfX2RlYWxsb2NfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCist c3RhdGljIHZvaWQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFt c18zX19kZWFsbG9jX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlYWxsb2Nf XyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19S ZW5kZXJQYXJhbXNfMl9fZGVhbGxvY19fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3Zfc2VsZikpOworLQorLSAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy19Cist Cistc3RhdGljIHZvaWQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBh cmFtc18yX19kZWFsbG9jX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X1JlbmRlclBhcmFtcyAqX19weXhfdl9zZWxmKSB7CistICBQeU9iamVjdCAqX19weXhfdl9pID0g TlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2ogPSBOVUxMOworLSAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMiA9IE5VTEw7CistICBQeV9zc2l6ZV90IF9fcHl4X3RfMzsKKy0gIFB5T2JqZWN0 ICooKl9fcHl4X3RfNCkoUHlPYmplY3QgKik7CistICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVM TDsKKy0gIGludCBfX3B5eF90XzY7CistICBQeV9zc2l6ZV90IF9fcHl4X3RfNzsKKy0gIGludCBf X3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwor LSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo Il9fZGVhbGxvY19fIiwgMCk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTEzCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjQKKysg KiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsCisgICogCistICogICAgIGRlZiBfX2RlYWxsb2Nf XyhzZWxmKToKKy0gKiAgICAgICAgIGZvciBpLCBqIGluIGVudW1lcmF0ZShzZWxmLm93bmVkKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGlmIGo6CistICog ICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkKKysgKiAgICAgICAgIHdp dGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBl cnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3BhcmFtZXRlcihzZWxmLl9jdHgsIHBhcmFtKQor KyAqICAgICAgICAgcmV0dXJuIGVycgorICAqLworLSAgX19QeXhfSU5DUkVGKF9fcHl4X2ludF8w KTsKKy0gIF9fcHl4X3RfMSA9IF9fcHl4X2ludF8wOworLSAgaWYgKGxpa2VseShQeUxpc3RfQ2hl Y2tFeGFjdChfX3B5eF92X3NlbGYtPm93bmVkKSkgfHwgUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4 X3Zfc2VsZi0+b3duZWQpKSB7CistICAgIF9fcHl4X3RfMiA9IF9fcHl4X3Zfc2VsZi0+b3duZWQ7 IF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzMgPSAwOworLSAgICBfX3B5eF90XzQg PSBOVUxMOworLSAgfSBlbHNlIHsKKy0gICAgX19weXhfdF8zID0gLTE7IF9fcHl4X3RfMiA9IFB5 T2JqZWN0X0dldEl0ZXIoX19weXhfdl9zZWxmLT5vd25lZCk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzIpOworLSAgICBfX3B5eF90XzQgPSBQeV9UWVBFKF9fcHl4X3RfMiktPnRwX2l0 ZXJuZXh0OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4 X0wxX2Vycm9yKQorLSAgfQorLSAgZm9yICg7OykgeworLSAgICBpZiAobGlrZWx5KCFfX3B5eF90 XzQpKSB7CistICAgICAgaWYgKGxpa2VseShQeUxpc3RfQ2hlY2tFeGFjdChfX3B5eF90XzIpKSkg eworLSAgICAgICAgaWYgKF9fcHl4X3RfMyA+PSBQeUxpc3RfR0VUX1NJWkUoX19weXhfdF8yKSkg YnJlYWs7CistICAgICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9O X0FWT0lEX0JPUlJPV0VEX1JFRlMKKy0gICAgICAgIF9fcHl4X3RfNSA9IFB5TGlzdF9HRVRfSVRF TShfX3B5eF90XzIsIF9fcHl4X3RfMyk7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90 XzMrKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJy b3IpCistICAgICAgICAjZWxzZQorLSAgICAgICAgX19weXhfdF81ID0gUHlTZXF1ZW5jZV9JVEVN KF9fcHl4X3RfMiwgX19weXhfdF8zKTsgX19weXhfdF8zKys7IGlmICh1bmxpa2VseSghX19weXhf dF81KSkgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCistICAgICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF81KTsKKy0gICAgICAgICNlbmRpZgorLSAgICAgIH0gZWxzZSB7CistICAg ICAgICBpZiAoX19weXhfdF8zID49IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdF8yKSkgYnJlYWs7 CistICAgICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lE X0JPUlJPV0VEX1JFRlMKKy0gICAgICAgIF9fcHl4X3RfNSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfdF8yLCBfX3B5eF90XzMpOyBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsgX19weXhfdF8zKys7 IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4X0wxX2Vycm9yKQor LSAgICAgICAgI2Vsc2UKKy0gICAgICAgIF9fcHl4X3RfNSA9IFB5U2VxdWVuY2VfSVRFTShfX3B5 eF90XzIsIF9fcHl4X3RfMyk7IF9fcHl4X3RfMysrOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkp IF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNSk7CistICAgICAgICAjZW5kaWYKKy0gICAgICB9CistICAgIH0gZWxzZSB7Cist ICAgICAgX19weXhfdF81ID0gX19weXhfdF80KF9fcHl4X3RfMik7CistICAgICAgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzUpKSB7CistICAgICAgICBQeU9iamVjdCogZXhjX3R5cGUgPSBQeUVycl9P Y2N1cnJlZCgpOworLSAgICAgICAgaWYgKGV4Y190eXBlKSB7CistICAgICAgICAgIGlmIChsaWtl bHkoX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGV4Y190eXBlLCBQeUV4Y19TdG9w SXRlcmF0aW9uKSkpIFB5RXJyX0NsZWFyKCk7CistICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAs IDkxMywgX19weXhfTDFfZXJyb3IpCisrICAgICAgLypmaW5hbGx5OiovIHsKKysgICAgICAgIC8q bm9ybWFsIGV4aXQ6Ki97CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAg ICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisr ICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICBnb3RvIF9fcHl4X0w2OworICAgICAgICAgfQor LSAgICAgICAgYnJlYWs7CisrICAgICAgICBfX3B5eF9MNjo7CisgICAgICAgfQorLSAgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzUpOworLSAgICB9CistICAgIF9fUHl4X1hERUNSRUZfU0VUKF9f cHl4X3ZfaiwgX19weXhfdF81KTsKKy0gICAgX19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfSU5D UkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4X1hERUNSRUZfU0VUKF9fcHl4X3ZfaSwgX19weXhf dF8xKTsKKy0gICAgX19weXhfdF81ID0gX19QeXhfUHlJbnRfQWRkT2JqQyhfX3B5eF90XzEsIF9f cHl4X2ludF8xLCAxLCAwLCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIo MCwgOTEzLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7Cist ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOworLSAgICBfX3B5eF90XzEgPSBfX3B5eF90XzU7 CistICAgIF9fcHl4X3RfNSA9IDA7CistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo5MTQKKy0gKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOgorLSAqICAgICAgICAg Zm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOgorLSAqICAgICAgICAgICAgIGlmIGo6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZnJlZShz ZWxmLnBhcmFtc1tpXS5kYXRhKQorLSAqIAorLSAqLworLSAgICBfX3B5eF90XzYgPSBfX1B5eF9Q eU9iamVjdF9Jc1RydWUoX19weXhfdl9qKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBf X1BZWF9FUlIoMCwgOTE0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgaWYgKF9fcHl4X3RfNikgewor LQorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTUKKy0gKiAgICAg ICAgIGZvciBpLCBqIGluIGVudW1lcmF0ZShzZWxmLm93bmVkKToKKy0gKiAgICAgICAgICAgICBp ZiBqOgorLSAqICAgICAgICAgICAgICAgICBmcmVlKHNlbGYucGFyYW1zW2ldLmRhdGEpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiBjZGVmIHZvaWQgKmdldF9wb2ludGVy KGNvbnN0IGNoYXIgKm5hbWUsIG9iamVjdCBvYmopOgorLSAqLworLSAgICAgIF9fcHl4X3RfNyA9 IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3ZfaSk7IGlmICh1bmxpa2VseSgoX19weXhf dF83ID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAs IDkxNSwgX19weXhfTDFfZXJyb3IpCistICAgICAgZnJlZSgoX19weXhfdl9zZWxmLT5wYXJhbXNb X19weXhfdF83XSkuZGF0YSk7CistCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjkxNAorLSAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6CistICogICAgICAgICBm b3IgaSwgaiBpbiBlbnVtZXJhdGUoc2VsZi5vd25lZCk6CistICogICAgICAgICAgICAgaWYgajog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBmcmVlKHNl bGYucGFyYW1zW2ldLmRhdGEpCistICogCistICovCistICAgIH0KKysgIH0KKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxMworKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwMjYKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAg ICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4LCBw YXJhbSkKKysgKiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqIAorLSAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6CistICogICAgICAgICBmb3Ig aSwgaiBpbiBlbnVtZXJhdGUoc2VsZi5vd25lZCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICBpZiBqOgorLSAqICAgICAgICAgICAgICAgICBmcmVlKHNlbGYu cGFyYW1zW2ldLmRhdGEpCisrICogICAgIEBfZXJyb3JzCisgICovCistICB9CistICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgIF9fcHl4 X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTAyNiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9H T1RSRUYoX19weXhfdF8zKTsKKysgIF9fcHl4X3IgPSBfX3B5eF90XzM7CisrICBfX3B5eF90XzMg PSAwOworKyAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo5MTIKKy0gKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAxMAorICAqIAorLSAqICAgICBkZWYgX19kZWFs bG9jX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGZv ciBpLCBqIGluIGVudW1lcmF0ZShzZWxmLm93bmVkKToKKy0gKiAgICAgICAgICAgICBpZiBqOgor KyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgc2V0X2ljY19wcm9maWxlKHNlbGYsIGljY19i bG9iKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZjoKKysg KiAgICAgICAgICAgICBtcHZfcmVuZGVyX3BhcmFtIHBhcmFtCisgICovCisgCisgICAvKiBmdW5j dGlvbiBleGl0IGNvZGUgKi8KKy0gIGdvdG8gX19weXhfTDA7CisgICBfX3B5eF9MMV9lcnJvcjo7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Mik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfNCk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CistICBfX1B5eF9Xcml0ZVVucmFp c2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5fUmVuZGVyUGFyYW1zLl9fZGVhbGxvY19fIiwgX19w eXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSwgMSwgMCk7CisrICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0LnNldF9pY2Nf cHJvZmlsZSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwor KyAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4 X3ZfaSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfaik7CisrICBfX1B5eF9YR0lWRVJFRihf X3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9f cHl4X3I7CisgfQorIAorLS8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0gKiBkZWYgX19yZWR1Y2Vf Y3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcmFp c2UgVHlwZUVycm9yKCJzZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9u IG9iamVjdCBmb3IgcGlja2xpbmciKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYs IF9fcHl4X3N0YXRlKToKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyOQor KyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgc2V0X2FtYmllbnRfbGlnaHQoc2Vs ZiwgbHV4KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZjoK KysgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX3BhcmFtIHBhcmFtCisgICovCisgCisgLyogUHl0 aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM19SZW5kZXJQYXJhbXNfNV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBh cmFtc181X19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqdW51c2VkKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzVzZXRfYW1iaWVudF9saWdodChQeU9i amVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9sdXgpOyAvKnByb3RvKi8KKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNv bnRleHRfNXNldF9hbWJpZW50X2xpZ2h0KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X2x1eCkgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVm TmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3JlZHVj ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzRfX3JlZHVjZV9jeXRob25fXygoKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92 X3NlbGYpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfYW1iaWVudF9saWdo dCAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNSZW5kZXJDb250ZXh0XzRzZXRfYW1iaWVudF9saWdodCgoKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpLCAo KFB5T2JqZWN0ICopX19weXhfdl9sdXgpKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsK KyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNfUmVuZGVyUGFyYW1zXzRfX3JlZHVjZV9jeXRob25fXyhDWVRIT05fVU5VU0VEIHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKl9fcHl4X3Zfc2Vs ZikgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz UmVuZGVyQ29udGV4dF80c2V0X2FtYmllbnRfbGlnaHQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9sdXgpIHsKKysgIHN0cnVjdCBtcHZfcmVuZGVyX3BhcmFtIF9fcHl4X3ZfcGFyYW07Cisr ICBpbnQgX19weXhfdl92YWw7CisrICBpbnQgX19weXhfdl9lcnI7CisgICBQeU9iamVjdCAqX19w eXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMSA9IE5VTEw7CisrICBpbnQgX19weXhfdF8xOworKyAgUHlPYmplY3QgKl9fcHl4 X3RfMiA9IE5VTEw7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9f cHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyIsIDApOworKyAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoInNldF9hbWJpZW50X2xpZ2h0IiwgMCk7CisgCistICAvKiAi KHRyZWUgZnJhZ21lbnQpIjoyCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorLSAq ICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8g YSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CistICog ICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBh IFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDM1CisrICogICAgICAgICAgICAgaW50IGVycgorKyAqIAorKyAqICAgICAg ICAgdmFsID0gbHV4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHBh cmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0FNQklFTlRfTElHSFQKKysgKiAgICAgICAgIHBh cmFtLmRhdGEgPSAmdmFsCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxs KF9fcHl4X2J1aWx0aW5fVHlwZUVycm9yLCBfX3B5eF90dXBsZV9fOCwgTlVMTCk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDAp OworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX1BZWF9F UlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Bc19p bnQoX19weXhfdl9sdXgpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMSA9PSAoaW50KS0xKSAmJiBQ eUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwMzUsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfdl92YWwgPSBfX3B5eF90XzE7CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCist ICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZl cnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYgX19zZXRzdGF0 ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTAzNgorKyAqIAorKyAqICAgICAgICAgdmFsID0gbHV4CisrICogICAgICAg ICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9BTUJJRU5UX0xJR0hUICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsCisrICogCisg ICovCisrICBfX3B5eF92X3BhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0FNQklFTlRfTElH SFQ7CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X0wxX2Vycm9yOjsK Ky0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2Ll9SZW5kZXJQYXJhbXMuX19yZWR1Y2VfY3l0aG9uX18iLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxM OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0KKy0vKiAiKHRyZWUgZnJhZ21lbnQp IjozCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorLSAqICAgICByYWlzZSBUeXBl RXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0 IGZvciBwaWNrbGluZyIpCistICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhf c3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJhaXNlIFR5cGVF cnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3Qg Zm9yIHBpY2tsaW5nIikKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM3 CisrICogICAgICAgICB2YWwgPSBsdXgKKysgKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVO REVSX1BBUkFNX0FNQklFTlRfTElHSFQKKysgKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgICAgIHdpdGggbm9naWw6 CisgICovCisrICBfX3B5eF92X3BhcmFtLmRhdGEgPSAoJl9fcHl4X3ZfdmFsKTsKKyAKKy0vKiBQ eXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc183X19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qcHJvdG8qLwor LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRl clBhcmFtc183X19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwor LSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfNl9fc2V0c3RhdGVf Y3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfc3RhdGUp KTsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM5CisrICogICAgICAg ICBwYXJhbS5kYXRhID0gJnZhbAorKyAqIAorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJf Y29udGV4dF9zZXRfcGFyYW1ldGVyKHNlbGYuX2N0eCwgcGFyYW0pCisrICogICAgICAgICByZXR1 cm4gZXJyCisrICovCisrICB7CisrICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlU aHJlYWRTdGF0ZSAqX3NhdmU7CisrICAgICAgUHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19Q eXhfRmFzdEdJTF9SZW1lbWJlcigpOworKyAgICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsK KyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CisrICAgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0MAorKyAqIAorKyAqICAgICAgICAgd2l0aCBub2dpbDoK KysgKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3BhcmFtZXRlcihz ZWxmLl9jdHgsIHBhcmFtKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICByZXR1cm4gZXJyCisrICogCisrICovCisrICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9yZW5k ZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9wYXJh bSk7CisrICAgICAgfQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc182X19zZXRzdGF0ZV9jeXRob25fXyhDWVRIT05fVU5V U0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMg Kl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0 ZSkgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgaW50IF9fcHl4X2xp bmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQg X19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRz dGF0ZV9jeXRob25fXyIsIDApOworKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDM5CisrICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAorKyAqIAorKyAqICAgICAg ICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKHNlbGYuX2N0eCwgcGFy YW0pCisrICogICAgICAgICByZXR1cm4gZXJyCisrICovCisrICAgICAgLypmaW5hbGx5OiovIHsK KysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVB RAorKyAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAgICAgICBQeV9CTE9D S19USFJFQURTCisrICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICBnb3RvIF9fcHl4X0w1Owor KyAgICAgICAgfQorKyAgICAgICAgX19weXhfTDU6OworKyAgICAgIH0KKysgIH0KKyAKKy0gIC8q ICIodHJlZSBmcmFnbWVudCkiOjQKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLnBhcmFt cyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQor LSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKy0gKiAgICAg cmFpc2UgVHlwZUVycm9yKCJzZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0 aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0MQorKyAqICAgICAgICAgd2l0 aCBub2dpbDoKKysgKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3Bh cmFtZXRlcihzZWxmLl9jdHgsIHBhcmFtKQorKyAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiBnZXRfbmV4dF9mcmFtZV9p bmZvKHNlbGYpOgorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5 eF9idWlsdGluX1R5cGVFcnJvciwgX19weXhfdHVwbGVfXzksIE5VTEwpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCA0LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfUmFpc2UoX19weXhfdF8xLCAwLCAwLCAwKTsKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgX19QWVhfRVJSKDEs IDQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgIF9fcHl4 X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTA0MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKysgIF9fcHl4X3IgPSBfX3B5eF90XzI7CisrICBfX3B5eF90XzIg PSAwOworKyAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjMKKy0g KiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6CistICogICAgIHJhaXNlIFR5cGVFcnJvcigi c2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBp Y2tsaW5nIikKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJz ZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlj a2xpbmciKQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjkKKysgKiAK KysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIHNldF9hbWJpZW50X2xpZ2h0KHNlbGYsIGx1 eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWY6CisrICog ICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJhbSBwYXJhbQorICAqLworIAorICAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVu ZGVyUGFyYW1zLl9fc2V0c3RhdGVfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5l bm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9f UHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckNvbnRleHQuc2V0X2Ft YmllbnRfbGlnaHQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1l KTsKKyAgIF9fcHl4X3IgPSBOVUxMOworKyAgX19weXhfTDA6OworICAgX19QeXhfWEdJVkVSRUYo X19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBf X3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE3Cist ICogICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkKKysvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0MworKyAqICAgICAgICAgcmV0dXJuIGVycgorICAq IAorLSAqIGNkZWYgdm9pZCAqZ2V0X3BvaW50ZXIoY29uc3QgY2hhciAqbmFtZSwgb2JqZWN0IG9i aik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgY2RlZiB2b2lkICpwCist ICogICAgIGlmIFB5Q2Fwc3VsZV9Jc1ZhbGlkKG9iaiwgbmFtZSk6CisrICogICAgIGRlZiBnZXRf bmV4dF9mcmFtZV9pbmZvKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICBjZGVmOgorKyAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfZnJhbWVfaW5mbyBpbmZv CisgICovCisgCistc3RhdGljIHZvaWQgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X2dl dF9wb2ludGVyKGNoYXIgY29uc3QgKl9fcHl4X3ZfbmFtZSwgUHlPYmplY3QgKl9fcHl4X3Zfb2Jq KSB7CistICB2b2lkICpfX3B5eF92X3A7CistICB2b2lkICpfX3B5eF9yOworKy8qIFB5dGhvbiB3 cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNSZW5kZXJDb250ZXh0XzdnZXRfbmV4dF9mcmFtZV9pbmZvKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworK3N0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF83Z2V0X25leHRfZnJhbWVfaW5mbyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5V U0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKysgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi Z2V0X25leHRfZnJhbWVfaW5mbyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzZnZXRfbmV4dF9mcmFtZV9p bmZvKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dCAqKV9fcHl4X3Zfc2VsZikpOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysK KytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfNmdldF9uZXh0X2ZyYW1lX2luZm8oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmKSB7CisrICBzdHJ1Y3QgbXB2 X3JlbmRlcl9mcmFtZV9pbmZvIF9fcHl4X3ZfaW5mbzsKKysgIHN0cnVjdCBtcHZfcmVuZGVyX3Bh cmFtIF9fcHl4X3ZfcGFyYW07CisrICBpbnQgX19weXhfdl9lcnI7CisrICBQeU9iamVjdCAqX19w eXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgaW50IF9fcHl4 X3RfMTsKKy0gIHZvaWQgKl9fcHl4X3RfMjsKKy0gIGludCBfX3B5eF90XzM7CistICBpbnQgX19w eXhfdF80OworLSAgaW50cHRyX3QgX19weXhfdF81OworLSAgUHlPYmplY3QgKl9fcHl4X3RfNiA9 IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5 eF90XzggPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfOSA9IE5VTEw7CisrICBQeU9iamVj dCAqX19weXhfdF8yID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworKyAg UHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVM TDsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5h bWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoImdldF9wb2ludGVyIiwgMCk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTE5CistICogY2RlZiB2b2lkICpnZXRfcG9pbnRlcihjb25zdCBjaGFy ICpuYW1lLCBvYmplY3Qgb2JqKToKKy0gKiAgICAgY2RlZiB2b2lkICpwCistICogICAgIGlmIFB5 Q2Fwc3VsZV9Jc1ZhbGlkKG9iaiwgbmFtZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgIHAgPSBQeUNhcHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCistICogICAg IGVsaWYgaXNpbnN0YW5jZShvYmosIGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBv Ymo6CistICovCistICBfX3B5eF90XzEgPSAoUHlDYXBzdWxlX0lzVmFsaWQoX19weXhfdl9vYmos IF9fcHl4X3ZfbmFtZSkgIT0gMCk7CistICBpZiAoX19weXhfdF8xKSB7CisrICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiZ2V0X25leHRfZnJhbWVfaW5mbyIsIDApOworIAorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTIwCistICogICAgIGNkZWYgdm9pZCAqcAor LSAqICAgICBpZiBQeUNhcHN1bGVfSXNWYWxpZChvYmosIG5hbWUpOgorLSAqICAgICAgICAgcCA9 IFB5Q2Fwc3VsZV9HZXRQb2ludGVyKG9iaiwgbmFtZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBpbnQpIG9yIGlzaW5zdGFuY2Uob2Jq LCBsb25nKSBhbmQgb2JqOgorLSAqICAgICAgICAgcCA9IDx2b2lkICo+PGludHB0cl90Pm9iagor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNDgKKysgKiAgICAgICAgICAg ICBtcHZfcmVuZGVyX3BhcmFtIHBhcmFtCisrICogCisrICogICAgICAgICBwYXJhbS50eXBlID0g TVBWX1JFTkRFUl9QQVJBTV9ORVhUX0ZSQU1FX0lORk8gICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZpbmZvCisrICogICAgICAgICB3aXRoIG5v Z2lsOgorICAqLworLSAgICBfX3B5eF90XzIgPSBQeUNhcHN1bGVfR2V0UG9pbnRlcihfX3B5eF92 X29iaiwgX19weXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA9PSAoKHZvaWQgKilO VUxMKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDkyMCwgX19weXhfTDFfZXJy b3IpCistICAgIF9fcHl4X3ZfcCA9IF9fcHl4X3RfMjsKKysgIF9fcHl4X3ZfcGFyYW0udHlwZSA9 IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9JTkZPOworIAorLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTE5CistICogY2RlZiB2b2lkICpnZXRfcG9pbnRlcihjb25z dCBjaGFyICpuYW1lLCBvYmplY3Qgb2JqKToKKy0gKiAgICAgY2RlZiB2b2lkICpwCistICogICAg IGlmIFB5Q2Fwc3VsZV9Jc1ZhbGlkKG9iaiwgbmFtZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHAgPSBQeUNhcHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCist ICogICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcp IGFuZCBvYmo6CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0OQorKyAq IAorKyAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9J TkZPCisrICogICAgICAgICBwYXJhbS5kYXRhID0gJmluZm8gICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBlcnIgPSBt cHZfcmVuZGVyX2NvbnRleHRfZ2V0X2luZm8oc2VsZi5fY3R4LCBwYXJhbSkKKyAgKi8KKy0gICAg Z290byBfX3B5eF9MMzsKKy0gIH0KKysgIF9fcHl4X3ZfcGFyYW0uZGF0YSA9ICgmX19weXhfdl9p bmZvKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjEKKy0gKiAg ICAgaWYgUHlDYXBzdWxlX0lzVmFsaWQob2JqLCBuYW1lKToKKy0gKiAgICAgICAgIHAgPSBQeUNh cHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCistICogICAgIGVsaWYgaXNpbnN0YW5jZShvYmos IGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHAgPSA8dm9pZCAqPjxpbnRwdHJfdD5vYmoKKy0gKiAg ICAgZWxzZToKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDUwCisrICog ICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9ORVhUX0ZSQU1FX0lORk8KKysg KiAgICAgICAgIHBhcmFtLmRhdGEgPSAmaW5mbworKyAqICAgICAgICAgd2l0aCBub2dpbDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5k ZXJfY29udGV4dF9nZXRfaW5mbyhzZWxmLl9jdHgsIHBhcmFtKQorKyAqICAgICAgICAgaWYgZXJy IDwgMDoKKyAgKi8KKy0gIF9fcHl4X3RfMyA9IFB5SW50X0NoZWNrKF9fcHl4X3Zfb2JqKTsgCist ICBfX3B5eF90XzQgPSAoX19weXhfdF8zICE9IDApOworLSAgaWYgKCFfX3B5eF90XzQpIHsKKy0g IH0gZWxzZSB7CistICAgIF9fcHl4X3RfMSA9IF9fcHl4X3RfNDsKKy0gICAgZ290byBfX3B5eF9M NF9ib29sX2Jpbm9wX2RvbmU7CistICB9CistICBfX3B5eF90XzQgPSBQeUxvbmdfQ2hlY2soX19w eXhfdl9vYmopOyAKKy0gIF9fcHl4X3RfMyA9IChfX3B5eF90XzQgIT0gMCk7CistICBpZiAoX19w eXhfdF8zKSB7CistICB9IGVsc2UgeworLSAgICBfX3B5eF90XzEgPSBfX3B5eF90XzM7CistICAg IGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworLSAgfQorLSAgX19weXhfdF8zID0gX19Q eXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zfb2JqKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8 IDApKSBfX1BZWF9FUlIoMCwgOTIxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfMSA9IF9f cHl4X3RfMzsKKy0gIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7CistICBpZiAobGlrZWx5KF9f cHl4X3RfMSkpIHsKKysgIHsKKysgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAgICBQeVRo cmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKysgICAgICBfX1B5 eF9GYXN0R0lMX1JlbWVtYmVyKCk7CisrICAgICAgI2VuZGlmCisrICAgICAgLyp0cnk6Ki8gewor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTIyCistICogICAgICAg ICBwID0gUHlDYXBzdWxlX0dldFBvaW50ZXIob2JqLCBuYW1lKQorLSAqICAgICBlbGlmIGlzaW5z dGFuY2Uob2JqLCBpbnQpIG9yIGlzaW5zdGFuY2Uob2JqLCBsb25nKSBhbmQgb2JqOgorLSAqICAg ICAgICAgcCA9IDx2b2lkICo+PGludHB0cl90Pm9iaiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgIGVsc2U6CistICogICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJVbmtub3du IG9yIGludmFsaWQgcG9pbnRlciBvYmplY3Q6ICVyIiAlIG9iaikKKysgICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDUxCisrICogICAgICAgICBwYXJhbS5kYXRhID0g JmluZm8KKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgZXJyID0gbXB2 X3JlbmRlcl9jb250ZXh0X2dldF9pbmZvKHNlbGYuX2N0eCwgcGFyYW0pICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIGVyciA8IDA6CisrICogICAgICAgICAgICAg cmFpc2UgTVBWRXJyb3IoZXJyKQorICAqLworLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeUludF9B c19pbnRwdHJfdChfX3B5eF92X29iaik7IGlmICh1bmxpa2VseSgoX19weXhfdF81ID09ICgoaW50 cHRyX3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDkyMiwgX19weXhf TDFfZXJyb3IpCistICAgIF9fcHl4X3ZfcCA9ICgodm9pZCAqKSgoaW50cHRyX3QpX19weXhfdF81 KSk7CisrICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhf X3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW0pOworKyAgICAgIH0KKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkyMQorLSAqICAgICBpZiBQeUNhcHN1bGVf SXNWYWxpZChvYmosIG5hbWUpOgorLSAqICAgICAgICAgcCA9IFB5Q2Fwc3VsZV9HZXRQb2ludGVy KG9iaiwgbmFtZSkKKy0gKiAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgaW50KSBvciBpc2luc3Rh bmNlKG9iaiwgbG9uZykgYW5kIG9iajogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgcCA9IDx2b2lkICo+PGludHB0cl90Pm9iagorLSAqICAgICBlbHNlOgorKyAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDUwCisrICogICAgICAgICBwYXJh bS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9ORVhUX0ZSQU1FX0lORk8KKysgKiAgICAgICAgIHBh cmFtLmRhdGEgPSAmaW5mbworKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9n ZXRfaW5mbyhzZWxmLl9jdHgsIHBhcmFtKQorKyAqICAgICAgICAgaWYgZXJyIDwgMDoKKyAgKi8K Ky0gICAgZ290byBfX3B5eF9MMzsKKysgICAgICAvKmZpbmFsbHk6Ki8geworKyAgICAgICAgLypu b3JtYWwgZXhpdDoqL3sKKysgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAg IF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CisrICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKysg ICAgICAgICAgI2VuZGlmCisrICAgICAgICAgIGdvdG8gX19weXhfTDU7CisrICAgICAgICB9Cisr ICAgICAgICBfX3B5eF9MNTo7CisrICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjkyNAorLSAqICAgICAgICAgcCA9IDx2b2lkICo+PGludHB0cl90 Pm9iagorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgcmFpc2UgUHlNUFZFcnJvcigiVW5rbm93 biBvciBpbnZhbGlkIHBvaW50ZXIgb2JqZWN0OiAlciIgJSBvYmopICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgcmV0dXJuIHAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDUyCisrICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAg IGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhzZWxmLl9jdHgsIHBhcmFtKQorKyAq ICAgICAgICAgaWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKyAgKiAKKyAgKi8KKy0gIC8qZWxzZSovIHsK Ky0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzcsIF9fcHl4X25fc19QeU1Q VkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgOTI0LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICAgIF9fcHl4X3Rf OCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdFNhZmUoX19weXhfa3Bfc19Vbmtub3duX29yX2ludmFs aWRfcG9pbnRlcl9vYmplYywgX19weXhfdl9vYmopOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOCkp IF9fUFlYX0VSUigwLCA5MjQsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF84KTsKKy0gICAgX19weXhfdF85ID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzcpKSkgeworLSAgICAg IF9fcHl4X3RfOSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNyk7CistICAgICAgaWYgKGxp a2VseShfX3B5eF90XzkpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhv ZF9HRVRfRlVOQ1RJT04oX19weXhfdF83KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzkpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdF83LCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9f cHl4X3RfNiA9IChfX3B5eF90XzkpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf NywgX19weXhfdF85LCBfX3B5eF90XzgpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzcsIF9fcHl4X3RfOCk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsgX19weXhf dF85ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7Cist ICAgIGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkyNCwgX19weXhfTDFf ZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgICBfX1B5eF9ERUNSRUYo X19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gICAgX19QeXhfUmFpc2UoX19weXhfdF82LCAw LCAwLCAwKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cist ICAgIF9fUFlYX0VSUigwLCA5MjQsIF9fcHl4X0wxX2Vycm9yKQorLSAgfQorLSAgX19weXhfTDM6 OworKyAgX19weXhfdF8xID0gKChfX3B5eF92X2VyciA8IDApICE9IDApOworKyAgaWYgKHVubGlr ZWx5KF9fcHl4X3RfMSkpIHsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5MjUKKy0gKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlVua25v d24gb3IgaW52YWxpZCBwb2ludGVyIG9iamVjdDogJXIiICUgb2JqKQorLSAqICAgICByZXR1cm4g cCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDUzCisrICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250 ZXh0X2dldF9pbmZvKHNlbGYuX2N0eCwgcGFyYW0pCisrICogICAgICAgICBpZiBlcnIgPCAwOgor KyAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqIAorLSAqIEBjeXRob24uaW50ZXJuYWwKKysgKiAgICAgICAgIHJldHVybiBS ZW5kZXJGcmFtZUluZm8oKS5fZnJvbV9zdHJ1Y3QoJmluZm8pCisgICovCistICBfX3B5eF9yID0g X19weXhfdl9wOworLSAgZ290byBfX3B5eF9MMDsKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFs TmFtZShfX3B5eF90XzMsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDAsIDEwNTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8zKTsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19w eXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDUzLCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgIF9fcHl4 X3RfNSA9IE5VTEw7CisrICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKKysgICAgICBfX3B5eF90XzUgPSBQeU1ldGhv ZF9HRVRfU0VMRihfX3B5eF90XzMpOworKyAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewor KyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4 X3RfMyk7CisrICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKysgICAgICAgIF9fUHl4 X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywg ZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQorKyAgICBfX3B5eF90XzIgPSAoX19weXhfdF81 KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzMsIF9fcHl4X3RfNSwgX19weXhf dF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF90XzQpOwor KyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMDUzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworKyAgICBfX1B5eF9SYWlzZShfX3B5eF90XzIsIDAsIDAsIDApOworKyAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgX19QWVhfRVJSKDAsIDEw NTMsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjkxNworLSAqICAgICAgICAgICAgICAgICBmcmVlKHNlbGYucGFyYW1zW2ldLmRhdGEpCisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDUyCisrICogICAgICAgICB3 aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRf aW5mbyhzZWxmLl9jdHgsIHBhcmFtKQorKyAqICAgICAgICAgaWYgZXJyIDwgMDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikK KyAgKiAKKy0gKiBjZGVmIHZvaWQgKmdldF9wb2ludGVyKGNvbnN0IGNoYXIgKm5hbWUsIG9iamVj dCBvYmopOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgdm9pZCAq cAorLSAqICAgICBpZiBQeUNhcHN1bGVfSXNWYWxpZChvYmosIG5hbWUpOgorLSAqLworLQorLSAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfOCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOSk7CistICBf X1B5eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5nZXRfcG9pbnRlciIsIF9f cHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUsIDEsIDApOworLSAgX19w eXhfciA9IDA7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0KKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTI5CistICogQGN5dGhvbi5pbnRlcm5hbAorLSAqIGNkZWYgY2xhc3MgUmVuZGVy RnJhbWVJbmZvKG9iamVjdCk6CistICogICAgIGNkZWYgX2Zyb21fc3RydWN0KHNlbGYsIG1wdl9y ZW5kZXJfZnJhbWVfaW5mbyAqaW5mbyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgIHNlbGYucHJlc2VudCA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJf RlJBTUVfSU5GT19QUkVTRU5UKQorLSAqICAgICAgICAgc2VsZi5yZWRyYXcgPSBib29sKGluZm9b MF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUkVEUkFXKQorLSAqLworLQorLXN0YXRp YyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUlu Zm9fX2Zyb21fc3RydWN0KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Jl bmRlckZyYW1lSW5mbyAqX19weXhfdl9zZWxmLCBzdHJ1Y3QgbXB2X3JlbmRlcl9mcmFtZV9pbmZv ICpfX3B5eF92X2luZm8pIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0g IGludCBfX3B5eF90XzI7CistICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0IGNoYXIg Kl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfZnJvbV9zdHJ1Y3QiLCAwKTsKKy0KKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzAKKy0gKiBjZGVmIGNsYXNzIFJlbmRlckZy YW1lSW5mbyhvYmplY3QpOgorLSAqICAgICBjZGVmIF9mcm9tX3N0cnVjdChzZWxmLCBtcHZfcmVu ZGVyX2ZyYW1lX2luZm8gKmluZm8pOgorLSAqICAgICAgICAgc2VsZi5wcmVzZW50ID0gYm9vbChp bmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYucmVkcmF3ID0gYm9vbChpbmZvWzBd LmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFRFJBVykKKy0gKiAgICAgICAgIHNlbGYu cmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVB VCkKKy0gKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKChfX3B5 eF92X2luZm9bMF0pLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMwLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhf RVJSKDAsIDkzMCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISgh X19weXhfdF8yKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzAs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19Q eXhfUHlPYmplY3RfU2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhf bl9zX3ByZXNlbnQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMwLCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLQorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMQorLSAqICAgICBjZGVmIF9mcm9t X3N0cnVjdChzZWxmLCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKmluZm8pOgorLSAqICAgICAgICAg c2VsZi5wcmVzZW50ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZP X1BSRVNFTlQpCistICogICAgICAgICBzZWxmLnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFncyAm IE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgIHNlbGYucmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JF TkRFUl9GUkFNRV9JTkZPX1JFUEVBVCkKKy0gKiAgICAgICAgIHNlbGYuYmxvY2tfdnN5bmMgPSBi b29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMpCist ICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KCgoX19weXhfdl9p bmZvWzBdKS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNU cnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAs IDkzMSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISghX19weXhf dF8yKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzEsIF9fcHl4 X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhfUHlP YmplY3RfU2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX3Jl ZHJhdywgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCA5MzEsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTMyCistICogICAgICAgICBzZWxmLnByZXNlbnQg PSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUFJFU0VOVCkKKy0g KiAgICAgICAgIHNlbGYucmVkcmF3ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9G UkFNRV9JTkZPX1JFRFJBVykKKy0gKiAgICAgICAgIHNlbGYucmVwZWF0ID0gYm9vbChpbmZvWzBd LmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVBVCkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5ibG9ja192c3luYyA9IGJvb2woaW5mb1swXS5m bGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19CTE9DS19WU1lOQykKKy0gKiAgICAgICAgIHNl bGYudGFyZ2V0X3RpbWUgPSBpbmZvWzBdLnRhcmdldF90aW1lCistICovCistICBfX3B5eF90XzEg PSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KCgoX19weXhfdl9pbmZvWzBdKS5mbGFncyAmIE1Q Vl9SRU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgOTMyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlm ICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDkzMiwgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4 X3RfMSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISghX19weXhfdF8yKSkpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cigo KFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX3JlcGVhdCwgX19weXhfdF8xKSA8 IDApIF9fUFlYX0VSUigwLCA5MzIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTMzCistICogICAgICAgICBzZWxmLnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFn cyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpCistICogICAgICAgICBzZWxmLnJlcGVh dCA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpCist ICogICAgICAgICBzZWxmLmJsb2NrX3ZzeW5jID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JF TkRFUl9GUkFNRV9JTkZPX0JMT0NLX1ZTWU5DKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICBzZWxmLnRhcmdldF90aW1lID0gaW5mb1swXS50YXJnZXRfdGltZQorLSAq ICAgICAgICAgcmV0dXJuIHNlbGYKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zy b21fdWludDY0X3QoKChfX3B5eF92X2luZm9bMF0pLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9J TkZPX0JMT0NLX1ZTWU5DKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDkzMywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9f cHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtlbHko X19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX3B5eF90XzEgPSBfX1B5 eF9QeUJvb2xfRnJvbUxvbmcoKCEoIV9fcHl4X3RfMikpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgOTMzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAq KV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19ibG9ja192c3luYywgX19weXhfdF8xKSA8IDApIF9f UFlYX0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisrICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTM0CistICogICAgICAgICBzZWxmLnJlcGVhdCA9IGJvb2woaW5mb1swXS5mbGFn cyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpCistICogICAgICAgICBzZWxmLmJsb2Nr X3ZzeW5jID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX0JMT0NL X1ZTWU5DKQorLSAqICAgICAgICAgc2VsZi50YXJnZXRfdGltZSA9IGluZm9bMF0udGFyZ2V0X3Rp bWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIHNlbGYK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU1CisrICogICAgICAgICAg ICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorICAqIAorLSAqLworLSAgX19weXhfdF8xID0gX19QeXhf UHlJbnRfRnJvbV9pbnQ2NF90KChfX3B5eF92X2luZm9bMF0pLnRhcmdldF90aW1lKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTM0LCBfX3B5eF9MMV9lcnJvcikKKy0g IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJT dHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc190YXJnZXRfdGltZSwgX19w eXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCA5MzQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTM1CistICogICAgICAgICBzZWxmLmJsb2NrX3ZzeW5jID0gYm9v bChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX0JMT0NLX1ZTWU5DKQorLSAq ICAgICAgICAgc2VsZi50YXJnZXRfdGltZSA9IGluZm9bMF0udGFyZ2V0X3RpbWUKKy0gKiAgICAg ICAgIHJldHVybiBzZWxmICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IHJldHVybiBSZW5kZXJGcmFtZUluZm8oKS5fZnJvbV9zdHJ1Y3QoJmluZm8pICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiBjZGVmIGNsYXNzIFJlbmRlckNvbnRleHQob2Jq ZWN0KToKKysgKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOgorICAqLwor ICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICop X19weXhfdl9zZWxmKSk7CistICBfX3B5eF9yID0gKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZik7 CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVjdCAqKV9f cHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8pKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTA1NSwgX19weXhfTDFfZXJyb3IpCisr ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fcHl4X3RfMyA9ICgoc3RydWN0IF9fcHl4 X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqKSgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICopX19w eXhfdF8yKS0+X19weXhfdnRhYiktPl9mcm9tX3N0cnVjdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqKV9fcHl4X3RfMiksICgmX19weXhf dl9pbmZvKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDEwNTUsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9ERUNS RUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fcHl4X3IgPSBfX3B5eF90XzM7Cisr ICBfX3B5eF90XzMgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5MjkKKy0gKiBAY3l0aG9uLmludGVybmFsCistICogY2RlZiBj bGFzcyBSZW5kZXJGcmFtZUluZm8ob2JqZWN0KToKKy0gKiAgICAgY2RlZiBfZnJvbV9zdHJ1Y3Qo c2VsZiwgbXB2X3JlbmRlcl9mcmFtZV9pbmZvICppbmZvKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5wcmVzZW50ID0gYm9vbChpbmZvWzBdLmZsYWdzICYg TVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpCistICogICAgICAgICBzZWxmLnJlZHJhdyA9 IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpCisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0MworKyAqICAgICAgICAgcmV0dXJu IGVycgorKyAqIAorKyAqICAgICBkZWYgZ2V0X25leHRfZnJhbWVfaW5mbyhzZWxmKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZjoKKysgKiAgICAgICAgICAg ICBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gaW5mbworICAqLworIAorICAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf MSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJGcmFt ZUluZm8uX2Zyb21fc3RydWN0IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSk7CistICBfX3B5eF9yID0gMDsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsK KysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80 KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckNvbnRleHQuZ2V0X25leHRfZnJhbWVfaW5mbyIsIF9f cHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhfciA9 IE5VTEw7CisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAor LS8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0gKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgY2RlZiB0dXBsZSBzdGF0ZQor LSAqICAgICBjZGVmIG9iamVjdCBfZGljdAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDU3CisrICogICAgICAgICByZXR1cm4gUmVuZGVyRnJhbWVJbmZvKCkuX2Zyb21fc3Ry dWN0KCZpbmZvKQorKyAqIAorKyAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBj Yik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHdpdGggbm9naWw6 CisrICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3NldF91cGRhdGVfY2FsbGJhY2so c2VsZi5fY3R4LCAmX2NfdXBkYXRlY2IsIDx2b2lkICo+Y2IpCisgICovCisgCisgLyogUHl0aG9u IHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNVJlbmRlckZyYW1lSW5mb18xX19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4 X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFt ZUluZm9fMV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9V TlVTRUQgUHlPYmplY3QgKnVudXNlZCkgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF85c2V0X3VwZGF0ZV9jYWxsYmFjayhQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9jYik7IC8qcHJvdG8qLwor K3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVy Q29udGV4dF85c2V0X3VwZGF0ZV9jYWxsYmFjayhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9jYikgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3Jl ZHVjZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fX19yZWR1Y2VfY3l0aG9uX18oKChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKilf X3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfdXBkYXRl X2NhbGxiYWNrICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfOHNldF91cGRhdGVfY2FsbGJhY2soKChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopX19weXhf dl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfY2IpKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4g X19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fX19yZWR1Y2VfY3l0aG9uX18oc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICpfX3B5eF92X3NlbGYp IHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X3N0YXRlID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92 X19kaWN0ID0gMDsKKy0gIGludCBfX3B5eF92X3VzZV9zZXRzdGF0ZTsKKytzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfOHNldF91 cGRhdGVfY2FsbGJhY2soc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVu ZGVyQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9jYikgeworICAgUHlP YmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0g IFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfMjsKKy0gIGludCBf X3B5eF90XzM7CistICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpf X3B5eF90XzUgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFy ICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18iLCAwKTsKKy0KKy0g IC8qICIodHJlZSBmcmFnbWVudCkiOjUKKy0gKiAgICAgY2RlZiBvYmplY3QgX2RpY3QKKy0gKiAg ICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQorLSAqICAgICBzdGF0ZSA9ICgpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3Rf XycsIE5vbmUpCistICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorLSAqLworLSAgX19QeXhf SU5DUkVGKF9fcHl4X2VtcHR5X3R1cGxlKTsKKy0gIF9fcHl4X3Zfc3RhdGUgPSBfX3B5eF9lbXB0 eV90dXBsZTsKKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjYKKy0gKiAgICAgY2RlZiBiaW50 IHVzZV9zZXRzdGF0ZQorLSAqICAgICBzdGF0ZSA9ICgpCistICogICAgIF9kaWN0ID0gZ2V0YXR0 cihzZWxmLCAnX19kaWN0X18nLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorLSAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0 LCkKKy0gKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0dldEF0dHIzKCgoUHlPYmplY3QgKilfX3B5 eF92X3NlbGYpLCBfX3B5eF9uX3NfZGljdCwgUHlfTm9uZSk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CistICBfX3B5eF92X19kaWN0ID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0g MDsKKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjcKKy0gKiAgICAgc3RhdGUgPSAoKQorLSAq ICAgICBfZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKy0gKiAgICAgaWYg X2RpY3QgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHN0YXRlICs9IChfZGljdCwpCistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCist ICovCistICBfX3B5eF90XzIgPSAoX19weXhfdl9fZGljdCAhPSBQeV9Ob25lKTsKKy0gIF9fcHl4 X3RfMyA9IChfX3B5eF90XzIgIT0gMCk7CistICBpZiAoX19weXhfdF8zKSB7CistCistICAgIC8q ICIodHJlZSBmcmFnbWVudCkiOjgKKy0gKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2Rp Y3RfXycsIE5vbmUpCistICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorLSAqICAgICAgICAg c3RhdGUgKz0gKF9kaWN0LCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorLSAqICAgICBlbHNlOgorLSAqLworLSAgICBfX3B5eF90 XzEgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MSwgOCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAg ICBfX1B5eF9JTkNSRUYoX19weXhfdl9fZGljdCk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhf dl9fZGljdCk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCBfX3B5eF92X19k aWN0KTsKKy0gICAgX19weXhfdF80ID0gUHlOdW1iZXJfSW5QbGFjZUFkZChfX3B5eF92X3N0YXRl LCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCA4LCBf X3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICBfX1B5eF9ERUNSRUZfU0VU KF9fcHl4X3Zfc3RhdGUsICgoUHlPYmplY3QqKV9fcHl4X3RfNCkpOworLSAgICBfX3B5eF90XzQg PSAwOworLQorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo5CistICogICAgIGlmIF9kaWN0IGlz IG5vdCBOb25lOgorLSAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKKy0gKiAgICAgICAgIHVz ZV9zZXRzdGF0ZSA9IFRydWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBl bHNlOgorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gRmFsc2UKKy0gKi8KKy0gICAgX19weXhf dl91c2Vfc2V0c3RhdGUgPSAxOworLQorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3CistICog ICAgIHN0YXRlID0gKCkKKy0gKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycs IE5vbmUpCistICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQorLSAqICAgICAgICAgdXNl X3NldHN0YXRlID0gVHJ1ZQorLSAqLworLSAgICBnb3RvIF9fcHl4X0wzOworLSAgfQorLQorLSAg LyogIih0cmVlIGZyYWdtZW50KSI6MTEKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUK Ky0gKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IEZhbHNlICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgaWYgdXNlX3NldHN0YXRlOgorLSAqICAgICAg ICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4 ZDQxZDhjZCwgTm9uZSksIHN0YXRlCistICovCistICAvKmVsc2UqLyB7CistICAgIF9fcHl4X3Zf dXNlX3NldHN0YXRlID0gMDsKKy0gIH0KKy0gIF9fcHl4X0wzOjsKKysgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJzZXRfdXBkYXRlX2NhbGxiYWNrIiwgMCk7CisgCistICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxMgorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0g RmFsc2UKKy0gKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCAo dHlwZShzZWxmKSwgMHhkNDFkOGNkLCBOb25lKSwgc3RhdGUKKy0gKiAgICAgZWxzZToKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU4CisrICogCisrICogICAgIGRlZiBz ZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKToKKysgKiAgICAgICAgIHdpdGggbm9naWw6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2Nv bnRleHRfc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLl9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQg Kj5jYikKKysgKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKKyAgKi8KKy0gIF9fcHl4X3Rf MyA9IChfX3B5eF92X3VzZV9zZXRzdGF0ZSAhPSAwKTsKKy0gIGlmIChfX3B5eF90XzMpIHsKKysg IHsKKysgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAgICBQeVRocmVhZFN0YXRlICpfc2F2 ZTsKKysgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKysgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVt YmVyKCk7CisrICAgICAgI2VuZGlmCisrICAgICAgLyp0cnk6Ki8geworIAorLSAgICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxMworLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gRmFsc2UKKy0gKiAg ICAgaWYgdXNlX3NldHN0YXRlOgorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1Jl bmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwgTm9uZSksIHN0YXRlICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHJldHVy biBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8sICh0eXBlKHNlbGYpLCAweGQ0MWQ4Y2Qs IHN0YXRlKQorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTkK KysgKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOgorKyAqICAgICAgICAg d2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3VwZGF0 ZV9jYWxsYmFjayhzZWxmLl9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQgKj5jYikgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi51cGRhdGVfY2IgPSBjYgorKyAq IAorICAqLworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFt ZUluZm8pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCAxMywgX19weXhf TDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgICBfX3B5eF90XzEg PSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwg MTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAg X19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3Nl bGYpKSkpOworLSAgICBfX1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpKSkpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwg MCwgKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7Cist ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMjIyNDE5MTQ5KTsKKy0gICAgX19QeXhfR0lWRVJF RihfX3B5eF9pbnRfMjIyNDE5MTQ5KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEs IDEsIF9fcHl4X2ludF8yMjI0MTkxNDkpOworLSAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Cist ICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF8xLCAyLCBQeV9Ob25lKTsKKy0gICAgX19weXhfdF81ID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1 bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKy0g ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF80 KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzUsIDAsIF9fcHl4X3RfNCk7CistICAg IF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzUsIDEsIF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3N0YXRlKTsKKy0g ICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3N0YXRlKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShf X3B5eF90XzUsIDIsIF9fcHl4X3Zfc3RhdGUpOworLSAgICBfX3B5eF90XzQgPSAwOworLSAgICBf X3B5eF90XzEgPSAwOworLSAgICBfX3B5eF9yID0gX19weXhfdF81OworLSAgICBfX3B5eF90XzUg PSAwOworLSAgICBnb3RvIF9fcHl4X0wwOworKyAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3Nl dF91cGRhdGVfY2FsbGJhY2soX19weXhfdl9zZWxmLT5fY3R4LCAoJl9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2X19jX3VwZGF0ZWNiKSwgKCh2b2lkICopX19weXhfdl9jYikpOworKyAgICAg IH0KKyAKKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKKy0gKiAgICAgZWxzZToKKy0gKiAg ICAgICAgIHVzZV9zZXRzdGF0ZSA9IEZhbHNlCistICogICAgIGlmIHVzZV9zZXRzdGF0ZTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlj a2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwgTm9uZSksIHN0YXRl CistICogICAgIGVsc2U6CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwNTgKKysgKiAKKysgKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOgor KyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9zZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYu X2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAqPmNiKQorKyAqICAgICAgICAgc2VsZi51cGRhdGVf Y2IgPSBjYgorICAqLworKyAgICAgIC8qZmluYWxseToqLyB7CisrICAgICAgICAvKm5vcm1hbCBl eGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAgICAgICAgX19QeXhf RmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAg ICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5eF9MNTsKKysgICAgICAgIH0KKysgICAgICAg IF9fcHl4X0w1OjsKKysgICAgICB9CisgICB9CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox NQorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgKHR5 cGUoc2VsZiksIDB4ZDQxZDhjZCwgTm9uZSksIHN0YXRlCistICogICAgIGVsc2U6CistICogICAg ICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCAodHlwZShzZWxmKSwg MHhkNDFkOGNkLCBzdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIGRlZiBf X3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19weXhfdW5w aWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2MAorKyAqICAgICAgICAgd2l0aCBu b2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3VwZGF0ZV9jYWxs YmFjayhzZWxmLl9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQgKj5jYikKKysgKiAgICAgICAgIHNl bGYudXBkYXRlX2NiID0gY2IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAq ICAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAqLworLSAgLyplbHNlKi8geworLSAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3IpOworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf NSwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8pOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNSkpIF9fUFlYX0VSUigxLCAxNSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzUpOworLSAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygzKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQor LSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfSU5DUkVGKCgoUHlPYmpl Y3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworLSAgICBfX1B5eF9H SVZFUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkp OworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMCwgKChQeU9iamVjdCAqKVB5X1RZ UEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF9pbnRfMjIyNDE5MTQ5KTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRfMjIyNDE5MTQ5 KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4X2ludF8yMjI0MTkx NDkpOworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9zdGF0ZSk7CistICAgIF9fUHl4X0dJVkVS RUYoX19weXhfdl9zdGF0ZSk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAyLCBf X3B5eF92X3N0YXRlKTsKKy0gICAgX19weXhfdF80ID0gUHlUdXBsZV9OZXcoMik7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEsIDE1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF81KTsK Ky0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQsIDAsIF9fcHl4X3RfNSk7CistICAgIF9f UHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQs IDEsIF9fcHl4X3RfMSk7CistICAgIF9fcHl4X3RfNSA9IDA7CistICAgIF9fcHl4X3RfMSA9IDA7 CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzQ7CistICAgIF9fcHl4X3RfNCA9IDA7CistICAgIGdv dG8gX19weXhfTDA7CistICB9CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9jYik7CisrICBfX1B5 eF9HSVZFUkVGKF9fcHl4X3ZfY2IpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+dXBk YXRlX2NiKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnVwZGF0ZV9jYik7CisrICBf X3B5eF92X3NlbGYtPnVwZGF0ZV9jYiA9IF9fcHl4X3ZfY2I7CisgCistICAvKiAiKHRyZWUgZnJh Z21lbnQpIjoxCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgdHVwbGUgc3RhdGUKKy0gKiAgICAgY2RlZiBv YmplY3QgX2RpY3QKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU3Cisr ICogICAgICAgICByZXR1cm4gUmVuZGVyRnJhbWVJbmZvKCkuX2Zyb21fc3RydWN0KCZpbmZvKQor KyAqIAorKyAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAg ICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3NldF91cGRhdGVfY2FsbGJhY2soc2VsZi5fY3R4LCAm X2NfdXBkYXRlY2IsIDx2b2lkICo+Y2IpCisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNv ZGUgKi8KKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsK Ky0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81 KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckZyYW1l SW5mby5fX3JlZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19w eXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7CistICBfX3B5eF9MMDo7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3Zfc3RhdGUpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X19kaWN0 KTsKKysgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisgICBfX1B5 eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwor ICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICIodHJlZSBmcmFnbWVudCkiOjE2CistICog ICAgIGVsc2U6CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJ bmZvLCAodHlwZShzZWxmKSwgMHhkNDFkOGNkLCBzdGF0ZSkKKy0gKiBkZWYgX19zZXRzdGF0ZV9j eXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoc2VsZiwg X19weXhfc3RhdGUpCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjIKKysg KiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKKysgKiAKKysgKiAgICAgZGVmIHVwZGF0ZShz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiB1aW50 NjRfdCByZXQKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisgICovCisgCisgLyogUHl0aG9uIHdy YXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xNVJlbmRlckZyYW1lSW5mb18zX19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhf dl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qcHJvdG8qLworLXN0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE1UmVuZGVyRnJhbWVJ bmZvXzNfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzExdXBkYXRlKFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29u dGV4dF8xMXVwZGF0ZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2Jq ZWN0ICp1bnVzZWQpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0 ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fMl9fc2V0c3RhdGVfY3l0aG9uX18oKChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKilf X3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOworKyAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVwZGF0ZSAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4 X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEwdXBk YXRlKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dCAqKV9fcHl4X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNVJlbmRl ckZyYW1lSW5mb18yX19zZXRzdGF0ZV9jeXRob25fXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3ZfX19weXhfc3RhdGUpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTB1cGRhdGUoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmKSB7CisrICB1 aW50NjRfdCBfX3B5eF92X3JldDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsK KyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUg PSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18iLCAwKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJ1cGRhdGUiLCAwKTsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjE3Cist ICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCAodHlwZShz ZWxmKSwgMHhkNDFkOGNkLCBzdGF0ZSkKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxm LCBfX3B5eF9zdGF0ZSk6CistICogICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19f c2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2NAorKyAqICAgICBkZWYg dXBkYXRlKHNlbGYpOgorKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCByZXQKKysgKiAgICAgICAg IHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICByZXQgPSBtcHZfcmVuZGVyX2NvbnRleHRfdXBkYXRlKHNlbGYuX2N0eCkKKysgKiAgICAgICAg IHJldHVybiByZXQKKyAgKi8KKy0gIGlmICghKGxpa2VseShQeVR1cGxlX0NoZWNrRXhhY3QoX19w eXhfdl9fX3B5eF9zdGF0ZSkpfHwoKF9fcHl4X3ZfX19weXhfc3RhdGUpID09IFB5X05vbmUpfHwo UHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkV4cGVjdGVkICUuMTZzLCBnb3QgJS4yMDBz IiwgInR1cGxlIiwgUHlfVFlQRShfX3B5eF92X19fcHl4X3N0YXRlKS0+dHBfbmFtZSksIDApKSkg X19QWVhfRVJSKDEsIDE3LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfMSA9IF9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0 X3N0YXRlKF9fcHl4X3Zfc2VsZiwgKChQeU9iamVjdCopX19weXhfdl9fX3B5eF9zdGF0ZSkpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFfZXJyb3Ip CisrICB7CisrICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlUaHJlYWRTdGF0ZSAq X3NhdmU7CisrICAgICAgUHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19QeXhfRmFzdEdJTF9S ZW1lbWJlcigpOworKyAgICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsKKysKKysgICAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY1CisrICogICAgICAgICBjZGVm IHVpbnQ2NF90IHJldAorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBy ZXQgPSBtcHZfcmVuZGVyX2NvbnRleHRfdXBkYXRlKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmV0dXJuIHJldAorKyAqIAorKyAqLworKyAgICAg ICAgX19weXhfdl9yZXQgPSBtcHZfcmVuZGVyX2NvbnRleHRfdXBkYXRlKF9fcHl4X3Zfc2VsZi0+ X2N0eCk7CisrICAgICAgfQorKworKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDY0CisrICogICAgIGRlZiB1cGRhdGUoc2VsZik6CisrICogICAgICAgICBjZGVmIHVp bnQ2NF90IHJldAorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldCA9IG1wdl9yZW5kZXJfY29udGV4dF91cGRhdGUo c2VsZi5fY3R4KQorKyAqICAgICAgICAgcmV0dXJuIHJldAorKyAqLworKyAgICAgIC8qZmluYWxs eToqLyB7CisrICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lU SF9USFJFQUQKKysgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAg UHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5 eF9MNTsKKysgICAgICAgIH0KKysgICAgICAgIF9fcHl4X0w1OjsKKysgICAgICB9CisrICB9Cisr CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2NgorKyAqICAgICAgICAg d2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICByZXQgPSBtcHZfcmVuZGVyX2NvbnRleHRfdXBk YXRlKHNlbGYuX2N0eCkKKysgKiAgICAgICAgIHJldHVybiByZXQgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqLworKyAgX19QeXhfWERFQ1JF RihfX3B5eF9yKTsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoX19w eXhfdl9yZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDY2LCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX3B5eF9yID0gX19weXhfdF8xOwor KyAgX19weXhfdF8xID0gMDsKKysgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAiKHRyZWUgZnJh Z21lbnQpIjoxNgorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlj a2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwgc3RhdGUpCistICog ZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19f c2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwNjIKKysgKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKKysgKiAKKysg KiAgICAgZGVmIHVwZGF0ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgY2RlZiB1aW50NjRfdCByZXQKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisgICov CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQeV9Ob25lOyBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworICAgX19weXhfTDFfZXJy b3I6OworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyRnJhbWVJbmZvLl9fc2V0c3RhdGVfY3l0aG9uX18i LCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckNvbnRleHQudXBkYXRlIiwg X19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5eF9y ID0gTlVMTDsKKyAgIF9fcHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworQEAg LTE4OTAyLDk4ICsxODIxOCw4MCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNVJlbmRlckZyYW1lSW5mb18yX19zZXRzdGF0ZV9jeQorICAgcmV0dXJu IF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTAK Ky0gKiAgICAgICAgIGJpbnQgaW5pdGVkCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwNjkKKyAgKiAKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1wdiwgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICAgYXBpX3R5cGUsCistICog ICAgICAgICAgICAgICAgICBvcGVuZ2xfaW5pdF9wYXJhbXM9Tm9uZSwKKysgKiAgICAgQF9lcnJv cnMKKysgKiAgICAgZGVmIHJlbmRlcihzZWxmLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLAorKyAqICAgICAgICAgICAgICAg IGZsaXBfeT1GYWxzZSwKKyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBp bnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xX19pbml0 X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0 ICpfX3B5eF9rd2RzKTsgLypwcm90byovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX19weXhfdl9z ZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKy0gIFB5 T2JqZWN0ICpfX3B5eF92X21wdiA9IDA7CistICBQeU9iamVjdCAqX19weXhfdl9hcGlfdHlwZSA9 IDA7CistICBQeU9iamVjdCAqX19weXhfdl9vcGVuZ2xfaW5pdF9wYXJhbXMgPSAwOworLSAgUHlP YmplY3QgKl9fcHl4X3ZfYWR2YW5jZWRfY29udHJvbCA9IDA7CistICBQeU9iamVjdCAqX19weXhf dl94MTFfZGlzcGxheSA9IDA7CistICBQeU9iamVjdCAqX19weXhfdl93bF9kaXNwbGF5ID0gMDsK Ky0gIFB5T2JqZWN0ICpfX3B5eF92X2RybV9kaXNwbGF5ID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5 eF92X2RybV9vc2Rfc2l6ZSA9IDA7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEzcmVuZGVyKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJv dG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz UmVuZGVyQ29udGV4dF8xM3JlbmRlcihQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF92 X29wZW5nbF9mYm8gPSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfZmxpcF95ID0gMDsKKysgIFB5 T2JqZWN0ICpfX3B5eF92X2RlcHRoID0gMDsKKysgIFB5T2JqZWN0ICpfX3B5eF92X2Jsb2NrX2Zv cl90YXJnZXRfdGltZSA9IDA7CisrICBQeU9iamVjdCAqX19weXhfdl9za2lwX3JlbmRlcmluZyA9 IDA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVu YW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIGludCBfX3B5eF9yOwor KyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK Ky0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyAod3JhcHBlcikiLCAwKTsK KysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJyZW5kZXIgKHdyYXBwZXIpIiwgMCk7Cisg ICB7CistICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhf bl9zX21wdiwmX19weXhfbl9zX2FwaV90eXBlLCZfX3B5eF9uX3Nfb3BlbmdsX2luaXRfcGFyYW1z LCZfX3B5eF9uX3NfYWR2YW5jZWRfY29udHJvbCwmX19weXhfbl9zX3gxMV9kaXNwbGF5LCZfX3B5 eF9uX3Nfd2xfZGlzcGxheSwmX19weXhfbl9zX2RybV9kaXNwbGF5LCZfX3B5eF9uX3NfZHJtX29z ZF9zaXplLDB9OworLSAgICBQeU9iamVjdCogdmFsdWVzWzhdID0gezAsMCwwLDAsMCwwLDAsMH07 CistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTIKKy0gKiAgICAg ZGVmIF9faW5pdF9fKHNlbGYsIG1wdiwKKy0gKiAgICAgICAgICAgICAgICAgIGFwaV90eXBlLAor LSAqICAgICAgICAgICAgICAgICAgb3BlbmdsX2luaXRfcGFyYW1zPU5vbmUsICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgIGFkdmFuY2VkX2NvbnRyb2w9 RmFsc2UsCistICogICAgICAgICAgICAgICAgICB4MTFfZGlzcGxheT1Ob25lLAorLSAqLworLSAg ICB2YWx1ZXNbMl0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7CisrICAgIHN0YXRpYyBQeU9iamVj dCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX29wZW5nbF9mYm8sJl9fcHl4X25f c19mbGlwX3ksJl9fcHl4X25fc19kZXB0aCwmX19weXhfbl9zX2Jsb2NrX2Zvcl90YXJnZXRfdGlt ZSwmX19weXhfbl9zX3NraXBfcmVuZGVyaW5nLDB9OworKyAgICBQeU9iamVjdCogdmFsdWVzWzVd ID0gezAsMCwwLDAsMH07CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5NTMKKy0gKiAgICAgICAgICAgICAgICAgIGFwaV90eXBlLAorLSAqICAgICAgICAgICAgICAg ICAgb3BlbmdsX2luaXRfcGFyYW1zPU5vbmUsCistICogICAgICAgICAgICAgICAgICBhZHZhbmNl ZF9jb250cm9sPUZhbHNlLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAgICAgICAgICB4MTFfZGlzcGxheT1Ob25lLAorLSAqICAgICAgICAgICAgICAgICAgd2xfZGlz cGxheT1Ob25lLAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MAor KyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgcmVuZGVyKHNlbGYsCisrICogICAgICAgICAg ICAgICAgb3BlbmdsX2Zibz1Ob25lLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorKyAqICAgICAgICAgICAgICAgIGRlcHRoPU5v bmUsCisgICovCistICAgIHZhbHVlc1szXSA9ICgoUHlPYmplY3QgKilQeV9GYWxzZSk7CisrICAg IHZhbHVlc1swXSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk1NAorLSAqICAgICAgICAgICAgICAgICAgb3BlbmdsX2lu aXRfcGFyYW1zPU5vbmUsCistICogICAgICAgICAgICAgICAgICBhZHZhbmNlZF9jb250cm9sPUZh bHNlLAorLSAqICAgICAgICAgICAgICAgICAgeDExX2Rpc3BsYXk9Tm9uZSwgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICAgd2xfZGlzcGxheT1Ob25lLAor LSAqICAgICAgICAgICAgICAgICAgZHJtX2Rpc3BsYXk9Tm9uZSwKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwNzEKKysgKiAgICAgZGVmIHJlbmRlcihzZWxmLAorKyAq ICAgICAgICAgICAgICAgIG9wZW5nbF9mYm89Tm9uZSwKKysgKiAgICAgICAgICAgICAgICBmbGlw X3k9RmFsc2UsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAg ICBkZXB0aD1Ob25lLAorKyAqICAgICAgICAgICAgICAgIGJsb2NrX2Zvcl90YXJnZXRfdGltZT1U cnVlLAorICAqLworLSAgICB2YWx1ZXNbNF0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7CisrICAg IHZhbHVlc1sxXSA9ICgoUHlPYmplY3QgKilQeV9GYWxzZSk7CisgCistICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTUKKy0gKiAgICAgICAgICAgICAgICAgIGFkdmFuY2Vk X2NvbnRyb2w9RmFsc2UsCistICogICAgICAgICAgICAgICAgICB4MTFfZGlzcGxheT1Ob25lLAor LSAqICAgICAgICAgICAgICAgICAgd2xfZGlzcGxheT1Ob25lLCAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgICBkcm1fZGlzcGxheT1Ob25lLAorLSAqICAg ICAgICAgICAgICAgICAgZHJtX29zZF9zaXplPU5vbmUKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwNzIKKysgKiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUs CisrICogICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorKyAqICAgICAgICAgICAgICAgIGRl cHRoPU5vbmUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAg ICBibG9ja19mb3JfdGFyZ2V0X3RpbWU9VHJ1ZSwKKysgKiAgICAgICAgICAgICAgICBza2lwX3Jl bmRlcmluZz1GYWxzZSk6CisgICovCistICAgIHZhbHVlc1s1XSA9ICgoUHlPYmplY3QgKilQeV9O b25lKTsKKysgICAgdmFsdWVzWzJdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOworIAorLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTU2CistICogICAgICAgICAgICAgICAg ICB4MTFfZGlzcGxheT1Ob25lLAorLSAqICAgICAgICAgICAgICAgICAgd2xfZGlzcGxheT1Ob25l LAorLSAqICAgICAgICAgICAgICAgICAgZHJtX2Rpc3BsYXk9Tm9uZSwgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICAgZHJtX29zZF9zaXplPU5vbmUKKy0g KiAgICAgICAgICAgICAgICAgICk6CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDczCisrICogICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorKyAqICAgICAgICAg ICAgICAgIGRlcHRoPU5vbmUsCisrICogICAgICAgICAgICAgICAgYmxvY2tfZm9yX3RhcmdldF90 aW1lPVRydWUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAg ICBza2lwX3JlbmRlcmluZz1GYWxzZSk6CisrICogCisgICovCistICAgIHZhbHVlc1s2XSA9ICgo UHlPYmplY3QgKilQeV9Ob25lKTsKKysgICAgdmFsdWVzWzNdID0gKChQeU9iamVjdCAqKVB5X1Ry dWUpOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTU3CistICog ICAgICAgICAgICAgICAgICB3bF9kaXNwbGF5PU5vbmUsCistICogICAgICAgICAgICAgICAgICBk cm1fZGlzcGxheT1Ob25lLAorLSAqICAgICAgICAgICAgICAgICAgZHJtX29zZF9zaXplPU5vbmUg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICAgKToKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNzQKKysgKiAgICAgICAgICAg ICAgICBkZXB0aD1Ob25lLAorKyAqICAgICAgICAgICAgICAgIGJsb2NrX2Zvcl90YXJnZXRfdGlt ZT1UcnVlLAorKyAqICAgICAgICAgICAgICAgIHNraXBfcmVuZGVyaW5nPUZhbHNlKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorKyAqICAgICAgICAgY2RlZjoKKyAgKi8KKy0g ICAgdmFsdWVzWzddID0gKChQeU9iamVjdCAqKVB5X05vbmUpOworKyAgICB2YWx1ZXNbNF0gPSAo KFB5T2JqZWN0ICopUHlfRmFsc2UpOworICAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsK KyAgICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CisgICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3Nf YXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CisgICAgICAgc3dpdGNoIChwb3Nf YXJncykgeworLSAgICAgICAgY2FzZSAgODogdmFsdWVzWzddID0gUHlUdXBsZV9HRVRfSVRFTShf X3B5eF9hcmdzLCA3KTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNh c2UgIDc6IHZhbHVlc1s2XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgNik7CistICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICA2OiB2YWx1ZXNbNV0gPSBQ eVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDUpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOworICAgICAgICAgY2FzZSAgNTogdmFsdWVzWzRdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5 eF9hcmdzLCA0KTsKKyAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKyAgICAgICAgIGNhc2Ug IDQ6IHZhbHVlc1szXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMyk7CitAQCAtMTkw MTAsNjIgKzE4MzA4LDQwIEBAIHN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzUmVuZGVyQ29udGV4dF8xX19pbml0X18oUHlPYmplY3QgKl9fCisgICAgICAga3dfYXJn cyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworICAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsK KyAgICAgICAgIGNhc2UgIDA6CistICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5 eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfbXB2KSkgIT0gMCkpIGt3 X2FyZ3MtLTsKKy0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysg ICAgICAgIGlmIChrd19hcmdzID4gMCkgeworKyAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBf X1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nfb3BlbmdsX2Zibyk7 CisrICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNbMF0gPSB2YWx1ZTsga3dfYXJncy0tOyB9 CisrICAgICAgICB9CisgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisgICAgICAgICBjYXNl ICAxOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0 ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2FwaV90eXBlKSkgIT0gMCkpIGt3X2FyZ3MtLTsK Ky0gICAgICAgIGVsc2UgeworLSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgi X19pbml0X18iLCAwLCAyLCA4LCAxKTsgX19QWVhfRVJSKDAsIDk1MCwgX19weXhfTDNfZXJyb3Ip CisrICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKysgICAgICAgICAgUHlPYmplY3QqIHZhbHVl ID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2ZsaXBfeSk7 CisrICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNbMV0gPSB2YWx1ZTsga3dfYXJncy0tOyB9 CisgICAgICAgICB9CisgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisgICAgICAgICBjYXNl ICAyOgorICAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7CistICAgICAgICAgIFB5T2JqZWN0KiB2 YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19vcGVu Z2xfaW5pdF9wYXJhbXMpOworKyAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURp Y3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZGVwdGgpOworICAgICAgICAgICBp ZiAodmFsdWUpIHsgdmFsdWVzWzJdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorICAgICAgICAgfQor ICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworICAgICAgICAgY2FzZSAgMzoKKyAgICAgICAg IGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9Q eURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfYWR2YW5jZWRfY29udHJvbCk7 CisrICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9f cHl4X2t3ZHMsIF9fcHl4X25fc19ibG9ja19mb3JfdGFyZ2V0X3RpbWUpOworICAgICAgICAgICBp ZiAodmFsdWUpIHsgdmFsdWVzWzNdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorICAgICAgICAgfQor ICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworICAgICAgICAgY2FzZSAgNDoKKyAgICAgICAg IGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9Q eURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfeDExX2Rpc3BsYXkpOworKyAg ICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9r d2RzLCBfX3B5eF9uX3Nfc2tpcF9yZW5kZXJpbmcpOworICAgICAgICAgICBpZiAodmFsdWUpIHsg dmFsdWVzWzRdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorICAgICAgICAgfQorLSAgICAgICAgQ1lU SE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgNToKKy0gICAgICAgIGlmIChrd19hcmdz ID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRl bVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nfd2xfZGlzcGxheSk7CistICAgICAgICAgIGlmICh2 YWx1ZSkgeyB2YWx1ZXNbNV0gPSB2YWx1ZTsga3dfYXJncy0tOyB9CistICAgICAgICB9CistICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICA2OgorLSAgICAgICAgaWYg KGt3X2FyZ3MgPiAwKSB7CistICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGlj dF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19kcm1fZGlzcGxheSk7CistICAgICAg ICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNbNl0gPSB2YWx1ZTsga3dfYXJncy0tOyB9CistICAgICAg ICB9CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICA3OgorLSAg ICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7CistICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9f UHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19kcm1fb3NkX3NpemUp OworLSAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzddID0gdmFsdWU7IGt3X2FyZ3MtLTsg fQorLSAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDAp KSB7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9f cHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJfX2luaXRf XyIpIDwgMCkpIF9fUFlYX0VSUigwLCA5NTAsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYg KHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9w eWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAicmVuZGVyIikgPCAwKSkgX19QWVhfRVJS KDAsIDEwNjksIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKyAgICAg ICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpIHsKKy0gICAgICAgIGNhc2Ug IDg6IHZhbHVlc1s3XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgNyk7CistICAgICAg ICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICA3OiB2YWx1ZXNbNl0gPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDYpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OworLSAgICAgICAgY2FzZSAgNjogdmFsdWVzWzVdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9h cmdzLCA1KTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKyAgICAgICAgIGNhc2UgIDU6 IHZhbHVlc1s0XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgNCk7CisgICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7CisgICAgICAgICBjYXNlICA0OiB2YWx1ZXNbM10gPSBQeVR1cGxl X0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDMpOworQEAgLTE5MDczLDM2ICsxODM0OSwzNSBAQCBzdGF0 aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMV9f aW5pdF9fKFB5T2JqZWN0ICpfXworICAgICAgICAgY2FzZSAgMzogdmFsdWVzWzJdID0gUHlUdXBs ZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsKKyAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsK KyAgICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJn cywgMSk7CistICAgICAgICB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3Ms IDApOworLSAgICAgICAgYnJlYWs7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAg ICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDAp OworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMDogYnJlYWs7 CisgICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworICAgICAg IH0KKyAgICAgfQorLSAgICBfX3B5eF92X21wdiA9IHZhbHVlc1swXTsKKy0gICAgX19weXhfdl9h cGlfdHlwZSA9IHZhbHVlc1sxXTsKKy0gICAgX19weXhfdl9vcGVuZ2xfaW5pdF9wYXJhbXMgPSB2 YWx1ZXNbMl07CistICAgIF9fcHl4X3ZfYWR2YW5jZWRfY29udHJvbCA9IHZhbHVlc1szXTsKKy0g ICAgX19weXhfdl94MTFfZGlzcGxheSA9IHZhbHVlc1s0XTsKKy0gICAgX19weXhfdl93bF9kaXNw bGF5ID0gdmFsdWVzWzVdOworLSAgICBfX3B5eF92X2RybV9kaXNwbGF5ID0gdmFsdWVzWzZdOwor LSAgICBfX3B5eF92X2RybV9vc2Rfc2l6ZSA9IHZhbHVlc1s3XTsKKy0gIH0KKy0gIGdvdG8gX19w eXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CisrICAgIF9fcHl4X3Zfb3BlbmdsX2ZibyA9 IHZhbHVlc1swXTsKKysgICAgX19weXhfdl9mbGlwX3kgPSB2YWx1ZXNbMV07CisrICAgIF9fcHl4 X3ZfZGVwdGggPSB2YWx1ZXNbMl07CisrICAgIF9fcHl4X3ZfYmxvY2tfZm9yX3RhcmdldF90aW1l ID0gdmFsdWVzWzNdOworKyAgICBfX3B5eF92X3NraXBfcmVuZGVyaW5nID0gdmFsdWVzWzRdOwor KyAgfQorKyAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKyAgIF9fcHl4 X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2lu aXRfXyIsIDAsIDIsIDgsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIo MCwgOTUwLCBfX3B5eF9MM19lcnJvcikKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJy ZW5kZXIiLCAwLCAwLCA1LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJS KDAsIDEwNjksIF9fcHl4X0wzX2Vycm9yKQorICAgX19weXhfTDNfZXJyb3I6OworLSAgX19QeXhf QWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dC5fX2luaXRfXyIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhf QWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dC5yZW5kZXIiLCBf X3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKyAgIF9fUHl4X1Jl Zk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIC0xOworKyAgcmV0dXJuIE5VTEw7Cisg ICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7CistICBfX3B5eF9yID0gX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXygoKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92 X3NlbGYpLCBfX3B5eF92X21wdiwgX19weXhfdl9hcGlfdHlwZSwgX19weXhfdl9vcGVuZ2xfaW5p dF9wYXJhbXMsIF9fcHl4X3ZfYWR2YW5jZWRfY29udHJvbCwgX19weXhfdl94MTFfZGlzcGxheSwg X19weXhfdl93bF9kaXNwbGF5LCBfX3B5eF92X2RybV9kaXNwbGF5LCBfX3B5eF92X2RybV9vc2Rf c2l6ZSk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVu ZGVyQ29udGV4dF8xMnJlbmRlcigoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X29wZW5nbF9mYm8sIF9f cHl4X3ZfZmxpcF95LCBfX3B5eF92X2RlcHRoLCBfX3B5eF92X2Jsb2NrX2Zvcl90YXJnZXRfdGlt ZSwgX19weXhfdl9za2lwX3JlbmRlcmluZyk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTUwCistICogICAgICAgICBiaW50IGluaXRlZAorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjkKKyAgKiAKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNl bGYsIG1wdiwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAg ICAgYXBpX3R5cGUsCistICogICAgICAgICAgICAgICAgICBvcGVuZ2xfaW5pdF9wYXJhbXM9Tm9u ZSwKKysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIHJlbmRlcihzZWxmLCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLAor KyAqICAgICAgICAgICAgICAgIGZsaXBfeT1GYWxzZSwKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLworQEAgLTE5MTEwLDc4NiArMTgzODUsNjI2IEBAIHN0YXRpYyBpbnQgX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xX19pbml0X18oUHlP YmplY3QgKl9fCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIGludCBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfbXB2LCBQeU9iamVjdCAqX19weXhfdl9hcGlfdHlwZSwgUHlP YmplY3QgKl9fcHl4X3Zfb3BlbmdsX2luaXRfcGFyYW1zLCBQeU9iamVjdCAqX19weXhfdl9hZHZh bmNlZF9jb250cm9sLCBQeU9iamVjdCAqX19weXhfdl94MTFfZGlzcGxheSwgUHlPYmplY3QgKl9f cHl4X3Zfd2xfZGlzcGxheSwgUHlPYmplY3QgKl9fcHl4X3ZfZHJtX2Rpc3BsYXksIFB5T2JqZWN0 ICpfX3B5eF92X2RybV9vc2Rfc2l6ZSkgeworLSAgc3RydWN0IG1wdl9vcGVuZ2xfaW5pdF9wYXJh bXMgX19weXhfdl9nbF9wYXJhbXM7CistICBzdHJ1Y3QgbXB2X29wZW5nbF9kcm1fcGFyYW1zIF9f cHl4X3ZfZHJtX3BhcmFtczsKKy0gIHN0cnVjdCBtcHZfb3BlbmdsX2RybV9vc2Rfc2l6ZSBfX3B5 eF92X19kcm1fb3NkX3NpemU7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEycmVuZGVyKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3Zfb3BlbmdsX2ZibywgUHlPYmplY3QgKl9fcHl4X3ZfZmxpcF95LCBQeU9iamVjdCAq X19weXhfdl9kZXB0aCwgUHlPYmplY3QgKl9fcHl4X3ZfYmxvY2tfZm9yX3RhcmdldF90aW1lLCBQ eU9iamVjdCAqX19weXhfdl9za2lwX3JlbmRlcmluZykgeworKyAgc3RydWN0IG1wdl9vcGVuZ2xf ZmJvIF9fcHl4X3ZfZmJvOworICAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX1JlbmRlclBhcmFtcyAqX19weXhfdl9wYXJhbXMgPSBOVUxMOworLSAgUHlPYmplY3QgKl9f cHl4X3ZfYXJwID0gTlVMTDsKKy0gIGludCBfX3B5eF92X2VycjsKKy0gIGludCBfX3B5eF9yOwor KyAgaW50IF9fcHl4X3ZfcmV0OworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwor LSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBpbnQgX19weXhfdF8yOworICAgaW50 IF9fcHl4X3RfMzsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfNSA9IE5VTEw7CisrICBpbnQgX19weXhfdF81OworICAgaW50IF9fcHl4X3RfNjsK Ky0gIGludCBfX3B5eF90Xzc7CistICBjaGFyIGNvbnN0ICpfX3B5eF90Xzg7CistICBQeU9iamVj dCAqKCpfX3B5eF90XzkpKFB5T2JqZWN0ICopOworLSAgaW50IF9fcHl4X3RfMTA7CisgICBpbnQg X19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsK KyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJfX2luaXRfXyIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJlbmRlciIs IDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk2NQorLSAqICAg ICAgICAgICAgIG1wdl9vcGVuZ2xfZHJtX29zZF9zaXplIF9kcm1fb3NkX3NpemUKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDc5CisrICogICAgICAgICAgICAgbXB2X29w ZW5nbF9mYm8gZmJvCisgICogCistICogICAgICAgICBzZWxmLl9tcHYgPSBtcHYgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcGFyYW1zID0gX1JlbmRlclBhcmFtcygp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAgICAgIG1lbXNldCgm Z2xfcGFyYW1zLCAwLCBzaXplb2YoZ2xfcGFyYW1zKSkKKysgKiAgICAgICAgIGlmIG9wZW5nbF9m Ym86CisgICovCistICBpZiAoIShsaWtlbHkoKChfX3B5eF92X21wdikgPT0gUHlfTm9uZSkgfHwg bGlrZWx5KF9fUHl4X1R5cGVUZXN0KF9fcHl4X3ZfbXB2LCBfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCkpKSkpIF9fUFlYX0VSUigwLCA5NjUsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19weXhfdF8xID0gX19weXhfdl9tcHY7CistICBfX1B5eF9JTkNSRUYoX19weXhfdF8x KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92 X3NlbGYtPl9tcHYpOworLSAgX19QeXhfREVDUkVGKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYt Pl9tcHYpKTsKKy0gIF9fcHl4X3Zfc2VsZi0+X21wdiA9ICgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3RfMSk7CisrICBfX3B5eF90XzEgPSBf X1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDEwNzksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CisrICBfX3B5eF92X3BhcmFtcyA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3RfMSk7CisgICBfX3B5eF90XzEgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk2NworLSAqICAgICAg ICAgc2VsZi5fbXB2ID0gbXB2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA4MQorKyAqICAgICAgICAgcGFyYW1zID0gX1JlbmRlclBhcmFtcygpCisgICogCistICogICAg ICAgICBtZW1zZXQoJmdsX3BhcmFtcywgMCwgc2l6ZW9mKGdsX3BhcmFtcykpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIG1lbXNldCgmZHJtX3BhcmFtcywgMCwgc2l6 ZW9mKGRybV9wYXJhbXMpKQorLSAqICAgICAgICAgbWVtc2V0KCZfZHJtX29zZF9zaXplLCAwLCBz aXplb2YoX2RybV9vc2Rfc2l6ZSkpCisrICogICAgICAgICBpZiBvcGVuZ2xfZmJvOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgbWVtc2V0KCZmYm8sIDAsIHNp emVvZihmYm8pKQorKyAqICAgICAgICAgICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJvLmdldCgiZmJv IiwgMCkgb3IgMAorICAqLworLSAgKHZvaWQpKG1lbXNldCgoJl9fcHl4X3ZfZ2xfcGFyYW1zKSwg MCwgKHNpemVvZihfX3B5eF92X2dsX3BhcmFtcykpKSk7CisrICBfX3B5eF90XzIgPSBfX1B5eF9Q eU9iamVjdF9Jc1RydWUoX19weXhfdl9vcGVuZ2xfZmJvKTsgaWYgKHVubGlrZWx5KF9fcHl4X3Rf MiA8IDApKSBfX1BZWF9FUlIoMCwgMTA4MSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19weXhf dF8yKSB7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTY4CistICog CistICogICAgICAgICBtZW1zZXQoJmdsX3BhcmFtcywgMCwgc2l6ZW9mKGdsX3BhcmFtcykpCist ICogICAgICAgICBtZW1zZXQoJmRybV9wYXJhbXMsIDAsIHNpemVvZihkcm1fcGFyYW1zKSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgbWVtc2V0KCZfZHJtX29zZF9z aXplLCAwLCBzaXplb2YoX2RybV9vc2Rfc2l6ZSkpCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDgyCisgICogCisrICogICAgICAgICBpZiBvcGVuZ2xfZmJvOgorKyAq ICAgICAgICAgICAgIG1lbXNldCgmZmJvLCAwLCBzaXplb2YoZmJvKSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJvLmdldCgi ZmJvIiwgMCkgb3IgMAorKyAqICAgICAgICAgICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdCisg ICovCistICAodm9pZCkobWVtc2V0KCgmX19weXhfdl9kcm1fcGFyYW1zKSwgMCwgKHNpemVvZihf X3B5eF92X2RybV9wYXJhbXMpKSkpOworKyAgICAodm9pZCkobWVtc2V0KCgmX19weXhfdl9mYm8p LCAwLCAoc2l6ZW9mKF9fcHl4X3ZfZmJvKSkpKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5NjkKKy0gKiAgICAgICAgIG1lbXNldCgmZ2xfcGFyYW1zLCAwLCBzaXpl b2YoZ2xfcGFyYW1zKSkKKy0gKiAgICAgICAgIG1lbXNldCgmZHJtX3BhcmFtcywgMCwgc2l6ZW9m KGRybV9wYXJhbXMpKQorLSAqICAgICAgICAgbWVtc2V0KCZfZHJtX29zZF9zaXplLCAwLCBzaXpl b2YoX2RybV9vc2Rfc2l6ZSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0g KiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJhbXMoKQorKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA4MworKyAqICAgICAgICAgaWYgb3BlbmdsX2ZibzoKKysgKiAg ICAgICAgICAgICBtZW1zZXQoJmZibywgMCwgc2l6ZW9mKGZibykpCisrICogICAgICAgICAgICAg ZmJvLmZibyA9IG9wZW5nbF9mYm8uZ2V0KCJmYm8iLCAwKSBvciAwICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBmYm8udyA9IG9wZW5nbF9mYm9bInciXQorKyAq ICAgICAgICAgICAgIGZiby5oID0gb3BlbmdsX2Zib1siaCJdCisgICovCistICAodm9pZCkobWVt c2V0KCgmX19weXhfdl9fZHJtX29zZF9zaXplKSwgMCwgKHNpemVvZihfX3B5eF92X19kcm1fb3Nk X3NpemUpKSkpOworKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3Zfb3BlbmdsX2ZibywgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90 XzEsIF9fcHl4X3R1cGxlX18xMiwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhf dF80KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICAg IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzQpOyBpZiAodW5saWtl bHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikKKysg ICAgaWYgKCFfX3B5eF90XzIpIHsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19w eXhfdF80ID0gMDsKKysgICAgfSBlbHNlIHsKKysgICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeUlu dF9Bc19pbnQoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzUgPT0gKGludCktMSkg JiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikK KysgICAgICBfX3B5eF90XzMgPSBfX3B5eF90XzU7CisrICAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgICAgZ290byBfX3B5eF9MNF9ib29sX2Jpbm9wX2Rv bmU7CisrICAgIH0KKysgICAgX19weXhfdF8zID0gMDsKKysgICAgX19weXhfTDRfYm9vbF9iaW5v cF9kb25lOjsKKysgICAgX19weXhfdl9mYm8uZmJvID0gX19weXhfdF8zOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3MQorLSAqICAgICAgICAgbWVtc2V0KCZfZHJt X29zZF9zaXplLCAwLCBzaXplb2YoX2RybV9vc2Rfc2l6ZSkpCistICogCistICogICAgICAgICBw YXJhbXMgPSBfUmVuZGVyUGFyYW1zKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq IAorLSAqICAgICAgICAgaWYgYXBpX3R5cGUgPT0gc2VsZi5BUElfT1BFTkdMOgorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4NAorKyAqICAgICAgICAgICAgIG1lbXNl dCgmZmJvLCAwLCBzaXplb2YoZmJvKSkKKysgKiAgICAgICAgICAgICBmYm8uZmJvID0gb3Blbmds X2Ziby5nZXQoImZibyIsIDApIG9yIDAKKysgKiAgICAgICAgICAgICBmYm8udyA9IG9wZW5nbF9m Ym9bInciXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgZmJv LmggPSBvcGVuZ2xfZmJvWyJoIl0KKysgKiAgICAgICAgICAgICBmYm8uaW50ZXJuYWxfZm9ybWF0 ID0gb3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIsIDApIG9yIDAKKyAgKi8KKy0gIF9f cHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMpKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTcxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdl9wYXJhbXMgPSAoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF90XzEpOworLSAgX19w eXhfdF8xID0gMDsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfRGljdF9HZXRJdGVt KF9fcHl4X3Zfb3BlbmdsX2ZibywgX19weXhfbl9zX3cpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCAxMDg0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNCk7CisrICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90 XzQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJl ZCgpKSkgX19QWVhfRVJSKDAsIDEwODQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9ERUNS RUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgICAgX19weXhfdl9mYm8udyA9IF9fcHl4 X3RfMzsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzMKKy0gKiAg ICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJhbXMoKQorLSAqIAorLSAqICAgICAgICAgaWYgYXBp X3R5cGUgPT0gc2VsZi5BUElfT1BFTkdMOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgICAgICAgICAgcGFyYW1zLmFkZF9zdHJpbmcoTVBWX1JFTkRFUl9QQVJBTV9BUElfVFlQ RSwgTVBWX1JFTkRFUl9BUElfVFlQRV9PUEVOR0wpCistICogICAgICAgICBlbHNlOgorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4NQorKyAqICAgICAgICAgICAgIGZi by5mYm8gPSBvcGVuZ2xfZmJvLmdldCgiZmJvIiwgMCkgb3IgMAorKyAqICAgICAgICAgICAgIGZi by53ID0gb3BlbmdsX2Zib1sidyJdCisrICogICAgICAgICAgICAgZmJvLmggPSBvcGVuZ2xfZmJv WyJoIl0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGZiby5p bnRlcm5hbF9mb3JtYXQgPSBvcGVuZ2xfZmJvLmdldCgiaW50ZXJuYWxfZm9ybWF0IiwgMCkgb3Ig MAorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVO R0xfRkJPLCAmZmJvKQorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX0FQSV9PUEVOR0wpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5NzMsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX3B5eF90XzIgPSBQeU9iamVjdF9S aWNoQ29tcGFyZShfX3B5eF92X2FwaV90eXBlLCBfX3B5eF90XzEsIFB5X0VRKTsgX19QeXhfWEdP VFJFRihfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5 NzMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3Rf MSA9IDA7CistICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8yKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwgOTczLCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgaWYg KGxpa2VseShfX3B5eF90XzMpKSB7CisrICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0Rp Y3RfR2V0SXRlbShfX3B5eF92X29wZW5nbF9mYm8sIF9fcHl4X25fc19oKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTA4NSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Bc19p bnQoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGludCktMSkgJiYgUHlF cnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDg1LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgIF9fcHl4X3ZfZmJv LmggPSBfX3B5eF90XzM7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5NzQKKy0gKiAKKy0gKiAgICAgICAgIGlmIGFwaV90eXBlID09IHNlbGYuQVBJX09QRU5HTDoK Ky0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3N0cmluZyhNUFZfUkVOREVSX1BBUkFNX0FQSV9U WVBFLCBNUFZfUkVOREVSX0FQSV9UWVBFX09QRU5HTCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgZWxzZToKKy0gKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9y KCJVbmtub3duIGFwaV90eXBlICVyIiAlIGFwaV90eXBlKQorKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA4NgorKyAqICAgICAgICAgICAgIGZiby53ID0gb3BlbmdsX2Zi b1sidyJdCisrICogICAgICAgICAgICAgZmJvLmggPSBvcGVuZ2xfZmJvWyJoIl0KKysgKiAgICAg ICAgICAgICBmYm8uaW50ZXJuYWxfZm9ybWF0ID0gb3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zv cm1hdCIsIDApIG9yIDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfRkJPLCAmZmJvKQor KyAqICAgICAgICAgaWYgZmxpcF95OgorICAqLworLSAgICBfX3B5eF90XzIgPSAoKHN0cnVjdCBf X3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19w eXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfc3RyaW5nKF9fcHl4X3ZfcGFyYW1zLCBNUFZf UkVOREVSX1BBUkFNX0FQSV9UWVBFLCBNUFZfUkVOREVSX0FQSV9UWVBFX09QRU5HTCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk3NCwgX19weXhfTDFfZXJyb3IpCist ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihfX3B5eF92X29wZW5nbF9mYm8sIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDg2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNCk7CisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwo X19weXhfdF80LCBfX3B5eF90dXBsZV9fMTMsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAxMDg2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAw OworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYg KHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJy b3IpCisrICAgIGlmICghX19weXhfdF8yKSB7CisrICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisrICAgIH0gZWxzZSB7CisrICAgICAgX19weXhfdF81ID0gX19Q eXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF81ID09IChp bnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFf ZXJyb3IpCisrICAgICAgX19weXhfdF8zID0gX19weXhfdF81OworKyAgICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICAgIGdvdG8gX19weXhfTDZfYm9vbF9i aW5vcF9kb25lOworKyAgICB9CisrICAgIF9fcHl4X3RfMyA9IDA7CisrICAgIF9fcHl4X0w2X2Jv b2xfYmlub3BfZG9uZTo7CisrICAgIF9fcHl4X3ZfZmJvLmludGVybmFsX2Zvcm1hdCA9IF9fcHl4 X3RfMzsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3MworKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4NworKyAqICAgICAgICAgICAg IGZiby5oID0gb3BlbmdsX2Zib1siaCJdCisrICogICAgICAgICAgICAgZmJvLmludGVybmFsX2Zv cm1hdCA9IG9wZW5nbF9mYm8uZ2V0KCJpbnRlcm5hbF9mb3JtYXQiLCAwKSBvciAwCisrICogICAg ICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZm Ym8pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIGZsaXBfeToK KysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwg MSkKKysgKi8KKysgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92 dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9G Qk8sICgmX19weXhfdl9mYm8pLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgMTA4NywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODEKKyAgKiAgICAgICAgIHBh cmFtcyA9IF9SZW5kZXJQYXJhbXMoKQorICAqIAorLSAqICAgICAgICAgaWYgYXBpX3R5cGUgPT0g c2VsZi5BUElfT1BFTkdMOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAgICAgcGFyYW1zLmFkZF9zdHJpbmcoTVBWX1JFTkRFUl9QQVJBTV9BUElfVFlQRSwgTVBWX1JF TkRFUl9BUElfVFlQRV9PUEVOR0wpCistICogICAgICAgICBlbHNlOgorKyAqICAgICAgICAgaWYg b3BlbmdsX2ZibzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAg IG1lbXNldCgmZmJvLCAwLCBzaXplb2YoZmJvKSkKKysgKiAgICAgICAgICAgICBmYm8uZmJvID0g b3BlbmdsX2Ziby5nZXQoImZibyIsIDApIG9yIDAKKyAgKi8KKy0gICAgZ290byBfX3B5eF9MMzsK KyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzYKKy0gKiAg ICAgICAgICAgICBwYXJhbXMuYWRkX3N0cmluZyhNUFZfUkVOREVSX1BBUkFNX0FQSV9UWVBFLCBN UFZfUkVOREVSX0FQSV9UWVBFX09QRU5HTCkKKy0gKiAgICAgICAgIGVsc2U6CistICogICAgICAg ICAgICAgcmFpc2UgUHlNUFZFcnJvcigiVW5rbm93biBhcGlfdHlwZSAlciIgJSBhcGlfdHlwZSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICAgICAgaWYgb3Blbmds X2luaXRfcGFyYW1zIGlzIG5vdCBOb25lOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwODgKKysgKiAgICAgICAgICAgICBmYm8uaW50ZXJuYWxfZm9ybWF0ID0gb3Blbmds X2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIsIDApIG9yIDAKKysgKiAgICAgICAgICAgICBwYXJh bXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZibykKKysgKiAgICAg ICAgIGlmIGZsaXBfeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fRkxJUF9ZLCAxKQorKyAqICAgICAg ICAgaWYgZGVwdGggaXMgbm90IE5vbmU6CisgICovCistICAvKmVsc2UqLyB7CistICAgIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfUHlNUFZFcnJvcik7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk3NiwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9mbGlwX3kpOyBp ZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCAxMDg4LCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX3B5eF90XzIpIHsKKysKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwODkKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9S RU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZibykKKysgKiAgICAgICAgIGlmIGZsaXBfeToKKysg KiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgaWYgZGVwdGggaXMgbm90 IE5vbmU6CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9E RVBUSCwgZGVwdGgpCisrICovCisrICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJz dHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFt cy0+X19weXhfdnRhYiktPmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1f RkxJUF9ZLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA4OSwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX3B5 eF90XzQgPSBfX1B5eF9QeVN0cmluZ19Gb3JtYXRTYWZlKF9fcHl4X2twX3NfVW5rbm93bl9hcGlf dHlwZV9yLCBfX3B5eF92X2FwaV90eXBlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgOTc2LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NCk7CistICAgIF9fcHl4X3RfNSA9IE5VTEw7CistICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhP RFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8xKSkpIHsKKy0gICAgICBfX3B5 eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzEpOworLSAgICAgIGlmIChsaWtlbHko X19weXhfdF81KSkgeworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VU X0ZVTkNUSU9OKF9fcHl4X3RfMSk7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsK Ky0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3RfMSwgZnVuY3Rpb24pOworLSAgICAgIH0KKy0gICAgfQorLSAgICBfX3B5eF90 XzIgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzEsIF9f cHl4X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8x LCBfX3B5eF90XzQpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9 IDA7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5NzYsIF9fcHl4X0wxX2Vycm9y KQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMiwgMCwgMCwg MCk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBf X1BZWF9FUlIoMCwgOTc2LCBfX3B5eF9MMV9lcnJvcikKKysKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwODgKKysgKiAgICAgICAgICAgICBmYm8uaW50ZXJuYWxfZm9y bWF0ID0gb3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIsIDApIG9yIDAKKysgKiAgICAg ICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZi bykKKysgKiAgICAgICAgIGlmIGZsaXBfeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fRkxJUF9ZLCAx KQorKyAqICAgICAgICAgaWYgZGVwdGggaXMgbm90IE5vbmU6CisrICovCisgICB9CistICBfX3B5 eF9MMzo7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTc4CistICog ICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJvcigiVW5rbm93biBhcGlfdHlwZSAlciIgJSBhcGlf dHlwZSkKKy0gKiAKKy0gKiAgICAgICAgIGlmIG9wZW5nbF9pbml0X3BhcmFtcyBpcyBub3QgTm9u ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHNlbGYuX2dl dF9wcm9jX2FkZHJlc3MgPSBvcGVuZ2xfaW5pdF9wYXJhbXNbImdldF9wcm9jX2FkZHJlc3MiXQor LSAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzID0gJl9jX2dldHByb2Nh ZGRyZXNzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5MAorKyAqICAg ICAgICAgaWYgZmxpcF95OgorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5E RVJfUEFSQU1fRkxJUF9ZLCAxKQorKyAqICAgICAgICAgaWYgZGVwdGggaXMgbm90IE5vbmU6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2lu dChNUFZfUkVOREVSX1BBUkFNX0RFUFRILCBkZXB0aCkKKysgKiAgICAgICAgIGlmIG5vdCBibG9j a19mb3JfdGFyZ2V0X3RpbWU6CisgICovCistICBfX3B5eF90XzMgPSAoX19weXhfdl9vcGVuZ2xf aW5pdF9wYXJhbXMgIT0gUHlfTm9uZSk7CistICBfX3B5eF90XzYgPSAoX19weXhfdF8zICE9IDAp OworKyAgX19weXhfdF8yID0gKF9fcHl4X3ZfZGVwdGggIT0gUHlfTm9uZSk7CisrICBfX3B5eF90 XzYgPSAoX19weXhfdF8yICE9IDApOworICAgaWYgKF9fcHl4X3RfNikgeworIAorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTc5CistICogCistICogICAgICAgICBpZiBv cGVuZ2xfaW5pdF9wYXJhbXMgaXMgbm90IE5vbmU6CistICogICAgICAgICAgICAgc2VsZi5fZ2V0 X3Byb2NfYWRkcmVzcyA9IG9wZW5nbF9pbml0X3BhcmFtc1siZ2V0X3Byb2NfYWRkcmVzcyJdICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0 X3Byb2NfYWRkcmVzcyA9ICZfY19nZXRwcm9jYWRkcmVzcworLSAqICAgICAgICAgICAgIGdsX3Bh cmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9IDx2b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVz cworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5MQorKyAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fRkxJUF9ZLCAxKQorKyAqICAg ICAgICAgaWYgZGVwdGggaXMgbm90IE5vbmU6CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9p bnQoTVBWX1JFTkRFUl9QQVJBTV9ERVBUSCwgZGVwdGgpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0X3RpbWU6CisrICogICAg ICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VU X1RJTUUsIDApCisgICovCistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0RpY3RfR2V0 SXRlbShfX3B5eF92X29wZW5nbF9pbml0X3BhcmFtcywgX19weXhfbl9zX2dldF9wcm9jX2FkZHJl c3MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5NzksIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfR0lWRVJF RihfX3B5eF90XzIpOworLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5fZ2V0X3Byb2Nf YWRkcmVzcyk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPl9nZXRfcHJvY19hZGRy ZXNzKTsKKy0gICAgX19weXhfdl9zZWxmLT5fZ2V0X3Byb2NfYWRkcmVzcyA9IF9fcHl4X3RfMjsK Ky0gICAgX19weXhfdF8yID0gMDsKKysgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfQXNfaW50 KF9fcHl4X3ZfZGVwdGgpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoaW50KS0xKSAmJiBQ eUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwOTEsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50 KF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0RFUFRILCBfX3B5eF90XzMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDkxLCBfX3B5eF9MMV9lcnJvcikK KysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTgwCistICogICAgICAgICBpZiBvcGVuZ2xfaW5pdF9wYXJhbXMgaXMgbm90IE5vbmU6 CistICogICAgICAgICAgICAgc2VsZi5fZ2V0X3Byb2NfYWRkcmVzcyA9IG9wZW5nbF9pbml0X3Bh cmFtc1siZ2V0X3Byb2NfYWRkcmVzcyJdCistICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9w cm9jX2FkZHJlc3MgPSAmX2NfZ2V0cHJvY2FkZHJlc3MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9IDx2 b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVzcworLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf dm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMpCisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkwCisrICogICAgICAgICBp ZiBmbGlwX3k6CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJB TV9GTElQX1ksIDEpCisrICogICAgICAgICBpZiBkZXB0aCBpcyBub3QgTm9uZTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9S RU5ERVJfUEFSQU1fREVQVEgsIGRlcHRoKQorKyAqICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90 YXJnZXRfdGltZToKKyAgKi8KKy0gICAgX19weXhfdl9nbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVz cyA9ICgmX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfZ2V0cHJvY2FkZHJlc3MpOwor KyAgfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTgxCistICog ICAgICAgICAgICAgc2VsZi5fZ2V0X3Byb2NfYWRkcmVzcyA9IG9wZW5nbF9pbml0X3BhcmFtc1si Z2V0X3Byb2NfYWRkcmVzcyJdCistICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2Fk ZHJlc3MgPSAmX2NfZ2V0cHJvY2FkZHJlc3MKKy0gKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0 X3Byb2NfYWRkcmVzc19jdHggPSA8dm9pZCAqPnNlbGYuX2dldF9wcm9jX2FkZHJlc3MgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAo TVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMpCistICogICAg ICAgICBpZiBhZHZhbmNlZF9jb250cm9sOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwOTIKKysgKiAgICAgICAgIGlmIGRlcHRoIGlzIG5vdCBOb25lOgorKyAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIGRlcHRoKQorKyAq ICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90YXJnZXRfdGltZTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFS QU1fQkxPQ0tfRk9SX1RBUkdFVF9USU1FLCAwKQorKyAqICAgICAgICAgaWYgc2tpcF9yZW5kZXJp bmc6CisgICovCistICAgIF9fcHl4X3ZfZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3NfY3R4ID0g KCh2b2lkICopX19weXhfdl9zZWxmLT5fZ2V0X3Byb2NfYWRkcmVzcyk7CisrICBfX3B5eF90XzYg PSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUpOyBp ZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlYX0VSUigwLCAxMDkyLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X3RfMiA9ICgoIV9fcHl4X3RfNikgIT0gMCk7CisrICBpZiAoX19weXhf dF8yKSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODIKKy0g KiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzcyA9ICZfY19nZXRwcm9jYWRk cmVzcworLSAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9IDx2 b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVzcworLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf dm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIGFkdmFuY2VkX2NvbnRy b2w6CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9BRFZB TkNFRF9DT05UUk9MLCAxKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA5MworKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQ VEgsIGRlcHRoKQorKyAqICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90YXJnZXRfdGltZToKKysg KiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0JMT0NLX0ZPUl9U QVJHRVRfVElNRSwgMCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg aWYgc2tpcF9yZW5kZXJpbmc6CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JF TkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkKKyAgKi8KKy0gICAgX19weXhfdF8yID0gKChz dHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFt cyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFyYW1z LCBNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9JTklUX1BBUkFNUywgKCZfX3B5eF92X2dsX3BhcmFt cyksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5ODIsIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fcHl4X3RfMSA9ICgoc3Ry dWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMg KilfX3B5eF92X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1Q Vl9SRU5ERVJfUEFSQU1fQkxPQ0tfRk9SX1RBUkdFVF9USU1FLCAwKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA5MywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3OAor LSAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlVua25vd24gYXBpX3R5cGUgJXIiICUg YXBpX3R5cGUpCistICogCistICogICAgICAgICBpZiBvcGVuZ2xfaW5pdF9wYXJhbXMgaXMgbm90 IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBzZWxm Ll9nZXRfcHJvY19hZGRyZXNzID0gb3BlbmdsX2luaXRfcGFyYW1zWyJnZXRfcHJvY19hZGRyZXNz Il0KKy0gKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzcyA9ICZfY19nZXRw cm9jYWRkcmVzcworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5Mgor KyAqICAgICAgICAgaWYgZGVwdGggaXMgbm90IE5vbmU6CisrICogICAgICAgICAgICAgcGFyYW1z LmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9ERVBUSCwgZGVwdGgpCisrICogICAgICAgICBpZiBu b3QgYmxvY2tfZm9yX3RhcmdldF90aW1lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1Jf VEFSR0VUX1RJTUUsIDApCisrICogICAgICAgICBpZiBza2lwX3JlbmRlcmluZzoKKyAgKi8KKyAg IH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODMKKy0gKiAgICAg ICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzc19jdHggPSA8dm9pZCAqPnNlbGYuX2dl dF9wcm9jX2FkZHJlc3MKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5E RVJfUEFSQU1fT1BFTkdMX0lOSVRfUEFSQU1TLCAmZ2xfcGFyYW1zKQorLSAqICAgICAgICAgaWYg YWR2YW5jZWRfY29udHJvbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwg MSkKKy0gKiAgICAgICAgIGlmIHgxMV9kaXNwbGF5OgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwOTQKKysgKiAgICAgICAgIGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0X3Rp bWU6CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9D S19GT1JfVEFSR0VUX1RJTUUsIDApCisrICogICAgICAgICBpZiBza2lwX3JlbmRlcmluZzogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50 KE1QVl9SRU5ERVJfUEFSQU1fU0tJUF9SRU5ERVJJTkcsIDEpCisrICogCisgICovCistICBfX3B5 eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9hZHZhbmNlZF9jb250cm9sKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgOTgzLCBfX3B5eF9MMV9l cnJvcikKKy0gIGlmIChfX3B5eF90XzYpIHsKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0 X0lzVHJ1ZShfX3B5eF92X3NraXBfcmVuZGVyaW5nKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8 IDApKSBfX1BZWF9FUlIoMCwgMTA5NCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19weXhfdF8y KSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODQKKy0gKiAg ICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0lOSVRf UEFSQU1TLCAmZ2xfcGFyYW1zKQorLSAqICAgICAgICAgaWYgYWR2YW5jZWRfY29udHJvbDoKKy0g KiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VEX0NP TlRST0wsIDEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIHgx MV9kaXNwbGF5OgorLSAqICAgICAgICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3Bs YXkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTUKKysgKiAgICAg ICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0JMT0NLX0ZPUl9UQVJHRVRf VElNRSwgMCkKKysgKiAgICAgICAgIGlmIHNraXBfcmVuZGVyaW5nOgorKyAqICAgICAgICAgICAg IHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fU0tJUF9SRU5ERVJJTkcsIDEpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgICAgIHdpdGggbm9naWw6Cisg ICovCistICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19weXhfdnRhYikt PmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJP TCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk4NCwgX19weXhf TDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgX19weXhfdF8xID0gKChzdHJ1Y3Qg X19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9f cHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywgTVBWX1JF TkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDEwOTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODMKKy0gKiAgICAgICAg ICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzc19jdHggPSA8dm9pZCAqPnNlbGYuX2dldF9w cm9jX2FkZHJlc3MKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJf UEFSQU1fT1BFTkdMX0lOSVRfUEFSQU1TLCAmZ2xfcGFyYW1zKQorLSAqICAgICAgICAgaWYgYWR2 YW5jZWRfY29udHJvbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkK Ky0gKiAgICAgICAgIGlmIHgxMV9kaXNwbGF5OgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTA5NAorKyAqICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90YXJnZXRfdGlt ZToKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0JMT0NL X0ZPUl9UQVJHRVRfVElNRSwgMCkKKysgKiAgICAgICAgIGlmIHNraXBfcmVuZGVyaW5nOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQo TVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkKKysgKiAKKyAgKi8KKyAgIH0KKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODUKKy0gKiAgICAgICAgIGlm IGFkdmFuY2VkX2NvbnRyb2w6CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JF TkRFUl9QQVJBTV9BRFZBTkNFRF9DT05UUk9MLCAxKQorLSAqICAgICAgICAgaWYgeDExX2Rpc3Bs YXk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBzZWxmLl94 MTFfZGlzcGxheSA9IHgxMV9kaXNwbGF5CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lk cChNUFZfUkVOREVSX1BBUkFNX1gxMV9ESVNQTEFZLCBnZXRfcG9pbnRlcigiRGlzcGxheSIsIHgx MV9kaXNwbGF5KSkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDk3Cisr ICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRF UklORywgMSkKKysgKiAKKysgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByZXQgPSBtcHZfcmVuZGVyX2NvbnRleHRfcmVu ZGVyKHNlbGYuX2N0eCwgcGFyYW1zLnBhcmFtcykKKysgKiAgICAgICAgIHJldHVybiByZXQKKyAg Ki8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X3gxMV9kaXNw bGF5KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgOTg1LCBfX3B5 eF9MMV9lcnJvcikKKy0gIGlmIChfX3B5eF90XzYpIHsKKysgIHsKKysgICAgICAjaWZkZWYgV0lU SF9USFJFQUQKKysgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICBQeV9VTkJMT0NL X1RIUkVBRFMKKysgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CisrICAgICAgI2VuZGlm CisrICAgICAgLyp0cnk6Ki8geworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTg2CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJB TV9BRFZBTkNFRF9DT05UUk9MLCAxKQorLSAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6CistICog ICAgICAgICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVO REVSX1BBUkFNX1gxMV9ESVNQTEFZLCBnZXRfcG9pbnRlcigiRGlzcGxheSIsIHgxMV9kaXNwbGF5 KSkKKy0gKiAgICAgICAgIGlmIHdsX2Rpc3BsYXk6CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA5OAorKyAqIAorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysg KiAgICAgICAgICAgICByZXQgPSBtcHZfcmVuZGVyX2NvbnRleHRfcmVuZGVyKHNlbGYuX2N0eCwg cGFyYW1zLnBhcmFtcykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg cmV0dXJuIHJldAorKyAqIAorICAqLworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl94MTFfZGlz cGxheSk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl94MTFfZGlzcGxheSk7CistICAgIF9f UHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPl94MTFfZGlzcGxheSk7CistICAgIF9fUHl4X0RFQ1JF RihfX3B5eF92X3NlbGYtPl94MTFfZGlzcGxheSk7CistICAgIF9fcHl4X3Zfc2VsZi0+X3gxMV9k aXNwbGF5ID0gX19weXhfdl94MTFfZGlzcGxheTsKKysgICAgICAgIF9fcHl4X3ZfcmV0ID0gbXB2 X3JlbmRlcl9jb250ZXh0X3JlbmRlcihfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW1z LT5wYXJhbXMpOworKyAgICAgIH0KKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk4NworLSAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6CistICogICAgICAgICAgICAg c2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheQorLSAqICAgICAgICAgICAgIHBhcmFtcy5h ZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwgZ2V0X3BvaW50ZXIoIkRpc3Bs YXkiLCB4MTFfZGlzcGxheSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIGlmIHdsX2Rpc3BsYXk6CistICogICAgICAgICAgICAgc2VsZi5fd2xfZGlzcGxheSA9IHds X2Rpc3BsYXkKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5Nwor KyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fU0tJUF9SRU5E RVJJTkcsIDEpCisrICogCisrICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3Jl bmRlcihzZWxmLl9jdHgsIHBhcmFtcy5wYXJhbXMpCisrICogICAgICAgICByZXR1cm4gcmV0Cisg ICovCistICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19weXhfdnRhYikt PmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwg X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3BvaW50ZXIoKChjaGFyIGNvbnN0ICop IkRpc3BsYXkiKSwgX19weXhfdl94MTFfZGlzcGxheSksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA5ODcsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7CisrICAgICAgLypmaW5hbGx5OiovIHsKKysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97 CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICBfX1B5eF9GYXN0R0lM X0ZvcmdldCgpOworKyAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgICNlbmRp ZgorKyAgICAgICAgICBnb3RvIF9fcHl4X0wxNDsKKysgICAgICAgIH0KKysgICAgICAgIF9fcHl4 X0wxNDo7CisrICAgICAgfQorKyAgfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTg1CistICogICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9sOgorLSAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwg MSkKKy0gKiAgICAgICAgIGlmIHgxMV9kaXNwbGF5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheQorLSAq ICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9YMTFfRElTUExB WSwgZ2V0X3BvaW50ZXIoIkRpc3BsYXkiLCB4MTFfZGlzcGxheSkpCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5OQorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAg ICAgICAgICAgICByZXQgPSBtcHZfcmVuZGVyX2NvbnRleHRfcmVuZGVyKHNlbGYuX2N0eCwgcGFy YW1zLnBhcmFtcykKKysgKiAgICAgICAgIHJldHVybiByZXQgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqIAorKyAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6CisgICovCistICB9 CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRf RnJvbV9pbnQoX19weXhfdl9yZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAxMDk5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor KyAgX19weXhfciA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7CisrICBnb3RvIF9fcHl4 X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4OAorLSAqICAg ICAgICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkKKy0gKiAgICAgICAgICAg ICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2lu dGVyKCJEaXNwbGF5IiwgeDExX2Rpc3BsYXkpKQorLSAqICAgICAgICAgaWYgd2xfZGlzcGxheTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rp c3BsYXkgPSB3bF9kaXNwbGF5CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZf UkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlz cGxheSkpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2OQorKyAqIAor KyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgcmVuZGVyKHNlbGYsICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUsCisrICog ICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhf UHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zfd2xfZGlzcGxheSk7IGlmICh1bmxpa2VseShfX3B5eF90 XzYgPCAwKSkgX19QWVhfRVJSKDAsIDk4OCwgX19weXhfTDFfZXJyb3IpCistICBpZiAoX19weXhf dF82KSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODkKKy0g KiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJU1BM QVksIGdldF9wb2ludGVyKCJEaXNwbGF5IiwgeDExX2Rpc3BsYXkpKQorLSAqICAgICAgICAgaWYg d2xfZGlzcGxheToKKy0gKiAgICAgICAgICAgICBzZWxmLl93bF9kaXNwbGF5ID0gd2xfZGlzcGxh eSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcGFyYW1zLmFk ZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNw bGF5Iiwgd2xfZGlzcGxheSkpCistICogICAgICAgICBpZiBkcm1fZGlzcGxheToKKy0gKi8KKy0g ICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfd2xfZGlzcGxheSk7CistICAgIF9fUHl4X0dJVkVSRUYo X19weXhfdl93bF9kaXNwbGF5KTsKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+X3ds X2Rpc3BsYXkpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5fd2xfZGlzcGxheSk7 CistICAgIF9fcHl4X3Zfc2VsZi0+X3dsX2Rpc3BsYXkgPSBfX3B5eF92X3dsX2Rpc3BsYXk7Cisr ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4 X1hERUNSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKysgIF9f UHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckNvbnRleHQucmVuZGVy IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5 eF9yID0gTlVMTDsKKysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hERUNSRUYoKFB5T2JqZWN0ICop X19weXhfdl9wYXJhbXMpOworKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisrICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MAorLSAqICAgICAgICAgaWYgd2xf ZGlzcGxheToKKy0gKiAgICAgICAgICAgICBzZWxmLl93bF9kaXNwbGF5ID0gd2xfZGlzcGxheQor LSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9XTF9ESVNQ TEFZLCBnZXRfcG9pbnRlcigid2xfZGlzcGxheSIsIHdsX2Rpc3BsYXkpKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBpZiBkcm1fZGlzcGxheToKKy0gKiAgICAgICAg ICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIsIC0xKQorKy8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTAxCisrICogICAgICAgICByZXR1cm4gcmV0Cisr ICogCisrICogICAgIGRlZiByZXBvcnRfc3dhcChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfcmVu ZGVyX2NvbnRleHRfcmVwb3J0X3N3YXAoc2VsZi5fY3R4KQorICAqLworLSAgICBfX3B5eF90XzIg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9w YXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1fV0xfRElTUExBWSwgX19weXhfZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfZ2V0X3BvaW50ZXIoKChjaGFyIGNvbnN0ICopIndsX2Rpc3BsYXkiKSwgX19weXhf dl93bF9kaXNwbGF5KSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDk5MCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwor LSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4OAorLSAqICAgICAgICAgICAgIHNlbGYu X3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3Zv aWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2ludGVyKCJEaXNwbGF5Iiwg eDExX2Rpc3BsYXkpKQorLSAqICAgICAgICAgaWYgd2xfZGlzcGxheTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNw bGF5CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dM X0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCistICovCist ICB9CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTVyZXBvcnRfc3dhcChQeU9iamVj dCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3Rv Ki8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfMTVyZXBvcnRfc3dhcChQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05f VU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKysg IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgicmVwb3J0X3N3YXAgKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNHJlcG9ydF9zd2FwKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKV9fcHl4X3Zf c2VsZikpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MQorLSAq ICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNwbGF5CistICogICAgICAgICAg ICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9wb2lu dGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCistICogICAgICAgICBpZiBkcm1fZGlzcGxh eTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGRybV9wYXJh bXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpCistICogICAgICAgICAgICAgZHJtX3Bh cmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpCistICovCistICBf X3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9kcm1fZGlzcGxheSk7IGlm ICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDk5MSwgX19weXhfTDFfZXJy b3IpCistICBpZiAoX19weXhfdF82KSB7CisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysg IF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTkyCistICogICAgICAg ICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9w b2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCistICogICAgICAgICBpZiBkcm1fZGlz cGxheToKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJm ZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZHJt X3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpCistICogICAg ICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNvbm5l Y3Rvcl9pZCIsIC0xKQorLSAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3ZfZHJtX2Rpc3BsYXksIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2Fs bChfX3B5eF90XzIsIF9fcHl4X3R1cGxlX18xMCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDk5MiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKKy0gICAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMSk7IGlmICh1 bmxpa2VseSgoX19weXhfdF83ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZ WF9FUlIoMCwgOTkyLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3ZfZHJtX3BhcmFtcy5mZCA9IF9fcHl4X3Rf NzsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfMTRyZXBvcnRfc3dhcChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKysgIFB5T2JqZWN0ICpfX3B5 eF9yID0gTlVMTDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgicmVwb3J0X3N3YXAiLCAwKTsKKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk5MworLSAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6Cist ICogICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAtMSkK Ky0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNy dGNfaWQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg IGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQi LCAtMSkKKy0gKiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5nZXQoImF0b21pY19yZXF1 ZXN0X3B0ciIsIE5vbmUpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEw MgorKyAqIAorKyAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6CisrICogICAgICAgICB3aXRo IG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgbXB2 X3JlbmRlcl9jb250ZXh0X3JlcG9ydF9zd2FwKHNlbGYuX2N0eCkKKysgKiAKKyAgKi8KKy0gICAg X19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2RybV9kaXNwbGF5 LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg OTkzLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAg IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8xLCBfX3B5eF90dXBsZV9f MTEsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTMsIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3RfNyA9IF9fUHl4 X1B5SW50X0FzX2ludChfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoaW50 KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDk5MywgX19weXhfTDFfZXJy b3IpCistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBf X3B5eF92X2RybV9wYXJhbXMuY3J0Y19pZCA9IF9fcHl4X3RfNzsKKysgIHsKKysgICAgICAjaWZk ZWYgV0lUSF9USFJFQUQKKysgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICBQeV9V TkJMT0NLX1RIUkVBRFMKKysgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CisrICAgICAg I2VuZGlmCisrICAgICAgLyp0cnk6Ki8geworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTk0CistICogICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNw bGF5LmdldCgiZmQiLCAtMSkKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBk cm1fZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1z LmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxh eS5nZXQoImF0b21pY19yZXF1ZXN0X3B0ciIsIE5vbmUpCistICogICAgICAgICAgICAgaWYgYXJw IGlzIG5vdCBOb25lOgorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExMDMKKysgKiAgICAgZGVmIHJlcG9ydF9zd2FwKHNlbGYpOgorKyAqICAgICAgICAgd2l0aCBu b2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfcmVwb3J0X3N3YXAoc2Vs Zi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiBm cmVlKHNlbGYpOgorICAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRy U3RyKF9fcHl4X3ZfZHJtX2Rpc3BsYXksIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChf X3B5eF90XzIsIF9fcHl4X3R1cGxlX18xMiwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDk5NCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsK Ky0gICAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMSk7IGlmICh1bmxp a2VseSgoX19weXhfdF83ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9F UlIoMCwgOTk0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3ZfZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBf X3B5eF90Xzc7CisrICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfcmVwb3J0X3N3YXAoX19weXhf dl9zZWxmLT5fY3R4KTsKKysgICAgICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5OTUKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1f ZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNv bm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpCistICogICAg ICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVxdWVzdF9wdHIiLCBOb25l KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgaWYgYXJwIGlz IG5vdCBOb25lOgorLSAqICAgICAgICAgICAgICAgICBkcm1fcGFyYW1zLmF0b21pY19yZXF1ZXN0 X3B0ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5nZXRfcG9pbnRlcihhcnAsICJkcm1Nb2RlQXRv bWljUmVxKiIpCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDIK KysgKiAKKysgKiAgICAgZGVmIHJlcG9ydF9zd2FwKHNlbGYpOgorKyAqICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIG1wdl9y ZW5kZXJfY29udGV4dF9yZXBvcnRfc3dhcChzZWxmLl9jdHgpCisrICogCisgICovCistICAgIF9f cHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwg X19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5 NSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBf X3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMSwgX19weXhfdHVwbGVfXzEz LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTk1LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICBfX3B5eF92X2FycCA9IF9fcHl4 X3RfMjsKKy0gICAgX19weXhfdF8yID0gMDsKKysgICAgICAvKmZpbmFsbHk6Ki8geworKyAgICAg ICAgLypub3JtYWwgZXhpdDoqL3sKKysgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAg ICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CisrICAgICAgICAgIFB5X0JMT0NLX1RIUkVB RFMKKysgICAgICAgICAgI2VuZGlmCisrICAgICAgICAgIGdvdG8gX19weXhfTDU7CisrICAgICAg ICB9CisrICAgICAgICBfX3B5eF9MNTo7CisrICAgICAgfQorKyAgfQorIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk2CistICogICAgICAgICAgICAgZHJtX3BhcmFt cy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0xKQorLSAq ICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVlc3RfcHRyIiwg Tm9uZSkKKy0gKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5hdG9taWNfcmVx dWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9k ZUF0b21pY1JlcSoiKQorLSAqICAgICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVyX2ZkID0gZHJt X2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTAxCisrICogICAgICAgICByZXR1cm4gcmV0CisrICogCisrICogICAgIGRl ZiByZXBvcnRfc3dhcChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfcmVw b3J0X3N3YXAoc2VsZi5fY3R4KQorICAqLworLSAgICBfX3B5eF90XzYgPSAoX19weXhfdl9hcnAg IT0gUHlfTm9uZSk7CistICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzYgIT0gMCk7CistICAgIGlm IChfX3B5eF90XzMpIHsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTk3CistICogICAgICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVx dWVzdF9wdHIiLCBOb25lKQorLSAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKKy0g KiAgICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1v ZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZHJtX3BhcmFtcy5yZW5k ZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJlbmRlcl9mZCIsIC0xKQorLSAqICAgICAgICAgICAg IHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9EUk1fRElTUExBWSwgJmRybV9wYXJh bXMpCistICovCistICAgICAgX19weXhfdF84ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19w eXhfdl9hcnApOyBpZiAodW5saWtlbHkoKCFfX3B5eF90XzgpICYmIFB5RXJyX09jY3VycmVkKCkp KSBfX1BZWF9FUlIoMCwgOTk3LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICBfX3B5eF92X2RybV9w YXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gKChzdHJ1Y3QgX2RybU1vZGVBdG9taWNSZXEgKiop X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3BvaW50ZXIoX19weXhfdF84LCBfX3B5 eF9rcF9zX2RybU1vZGVBdG9taWNSZXEpKTsKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor KyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3IpOworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICBy ZXR1cm4gX19weXhfcjsKKyt9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk5NgorLSAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJt X2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkKKy0gKiAgICAgICAgICAgICBhcnAgPSBk cm1fZGlzcGxheS5nZXQoImF0b21pY19yZXF1ZXN0X3B0ciIsIE5vbmUpCistICogICAgICAgICAg ICAgaWYgYXJwIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICAgICAgICAgIGRybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gPF9kcm1Nb2Rl QXRvbWljUmVxICoqPmdldF9wb2ludGVyKGFycCwgImRybU1vZGVBdG9taWNSZXEqIikKKy0gKiAg ICAgICAgICAgICBkcm1fcGFyYW1zLnJlbmRlcl9mZCA9IGRybV9kaXNwbGF5LmdldCgicmVuZGVy X2ZkIiwgLTEpCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDUKKysgKiAg ICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfcmVwb3J0X3N3YXAoc2VsZi5fY3R4KQorKyAq IAorKyAqICAgICBkZWYgZnJlZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgorKyAqICAgICAgICAgICAgIHJldHVybgor ICAqLworLSAgICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 OTgKKy0gKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6CistICogICAgICAgICAgICAg ICAgIGRybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gPF9kcm1Nb2RlQXRvbWljUmVxICoq PmdldF9wb2ludGVyKGFycCwgImRybU1vZGVBdG9taWNSZXEqIikKKy0gKiAgICAgICAgICAgICBk cm1fcGFyYW1zLnJlbmRlcl9mZCA9IGRybV9kaXNwbGF5LmdldCgicmVuZGVyX2ZkIiwgLTEpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3Zv aWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1zKQorLSAqICAgICAg ICAgaWYgZHJtX29zZF9zaXplOgorLSAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKF9fcHl4X3ZfZHJtX2Rpc3BsYXksIF9fcHl4X25fc19nZXQpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTgsIF9fcHl4X0wxX2Vycm9yKQorLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmpl Y3RfQ2FsbChfX3B5eF90XzIsIF9fcHl4X3R1cGxlX18xNCwgTlVMTCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5OCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhf dF8yID0gMDsKKy0gICAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMSk7 IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkp KSBfX1BZWF9FUlIoMCwgOTk4LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3ZfZHJtX3BhcmFtcy5yZW5kZXJf ZmQgPSBfX3B5eF90Xzc7CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTdmcmVlKFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8q cHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF8xN2ZyZWUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqdW51c2VkKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBf X1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo ImZyZWUgKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZyZWUoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxmKSk7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTkKKy0gKiAgICAgICAgICAgICAg ICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+ Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQorLSAqICAgICAgICAgICAgIGRy bV9wYXJhbXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkKKy0g KiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BM QVksICZkcm1fcGFyYW1zKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICBpZiBkcm1fb3NkX3NpemU6CistICogICAgICAgICAgICAgX2RybV9vc2Rfc2l6ZS53aWR0aCwg X2RybV9vc2Rfc2l6ZS5oZWlnaHQgPSBkcm1fb3NkX3NpemUKKy0gKi8KKy0gICAgX19weXhfdF8x ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRl clBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3Zf cGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAoJl9fcHl4X3ZfZHJtX3BhcmFt cyksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5OTksIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICAvKiBmdW5jdGlvbiBleGl0IGNv ZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4 X3I7CisrfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTkxCist ICogICAgICAgICAgICAgc2VsZi5fd2xfZGlzcGxheSA9IHdsX2Rpc3BsYXkKKy0gKiAgICAgICAg ICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fV0xfRElTUExBWSwgZ2V0X3Bv aW50ZXIoIndsX2Rpc3BsYXkiLCB3bF9kaXNwbGF5KSkKKy0gKiAgICAgICAgIGlmIGRybV9kaXNw bGF5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZHJtX3Bh cmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAtMSkKKy0gKiAgICAgICAgICAgICBkcm1f cGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKKy0gKi8KKy0g IH0KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfMTZmcmVlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X1JlbmRlckNvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBO VUxMOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIGludCBfX3B5eF90XzE7Cisr ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZnJlZSIsIDApOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDAKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1z LnJlbmRlcl9mZCA9IGRybV9kaXNwbGF5LmdldCgicmVuZGVyX2ZkIiwgLTEpCistICogICAgICAg ICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAmZHJt X3BhcmFtcykKKy0gKiAgICAgICAgIGlmIGRybV9vc2Rfc2l6ZTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIF9kcm1fb3NkX3NpemUud2lkdGgsIF9kcm1fb3Nk X3NpemUuaGVpZ2h0ID0gZHJtX29zZF9zaXplCistICogICAgICAgICAgICAgcGFyYW1zLmFkZF92 b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgJl9kcm1fb3NkX3NpemUpCistICov CistICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9kcm1fb3NkX3Np emUpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlYX0VSUigwLCAxMDAwLCBfX3B5 eF9MMV9lcnJvcikKKy0gIGlmIChfX3B5eF90XzMpIHsKKy0KKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwMDEKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRw KE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1zKQorLSAqICAgICAgICAg aWYgZHJtX29zZF9zaXplOgorLSAqICAgICAgICAgICAgIF9kcm1fb3NkX3NpemUud2lkdGgsIF9k cm1fb3NkX3NpemUuaGVpZ2h0ID0gZHJtX29zZF9zaXplICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1f RFJNX09TRF9TSVpFLCAmX2RybV9vc2Rfc2l6ZSkKKy0gKiAKKy0gKi8KKy0gICAgaWYgKChsaWtl bHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfZHJtX29zZF9zaXplKSkpIHx8IChQeUxpc3Rf Q2hlY2tFeGFjdChfX3B5eF92X2RybV9vc2Rfc2l6ZSkpKSB7CistICAgICAgUHlPYmplY3QqIHNl cXVlbmNlID0gX19weXhfdl9kcm1fb3NkX3NpemU7CistICAgICAgUHlfc3NpemVfdCBzaXplID0g X19QeXhfUHlTZXF1ZW5jZV9TSVpFKHNlcXVlbmNlKTsKKy0gICAgICBpZiAodW5saWtlbHkoc2l6 ZSAhPSAyKSkgeworLSAgICAgICAgaWYgKHNpemUgPiAyKSBfX1B5eF9SYWlzZVRvb01hbnlWYWx1 ZXNFcnJvcigyKTsKKy0gICAgICAgIGVsc2UgaWYgKHNpemUgPj0gMCkgX19QeXhfUmFpc2VOZWVk TW9yZVZhbHVlc0Vycm9yKHNpemUpOworLSAgICAgICAgX19QWVhfRVJSKDAsIDEwMDEsIF9fcHl4 X0wxX2Vycm9yKQorLSAgICAgIH0KKy0gICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JP UyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMKKy0gICAgICBpZiAobGlrZWx5KFB5VHVw bGVfQ2hlY2tFeGFjdChzZXF1ZW5jZSkpKSB7CistICAgICAgICBfX3B5eF90XzEgPSBQeVR1cGxl X0dFVF9JVEVNKHNlcXVlbmNlLCAwKTsgCistICAgICAgICBfX3B5eF90XzIgPSBQeVR1cGxlX0dF VF9JVEVNKHNlcXVlbmNlLCAxKTsgCistICAgICAgfSBlbHNlIHsKKy0gICAgICAgIF9fcHl4X3Rf MSA9IFB5TGlzdF9HRVRfSVRFTShzZXF1ZW5jZSwgMCk7IAorLSAgICAgICAgX19weXhfdF8yID0g UHlMaXN0X0dFVF9JVEVNKHNlcXVlbmNlLCAxKTsgCistICAgICAgfQorLSAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzEpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOworLSAgICAg ICNlbHNlCistICAgICAgX19weXhfdF8xID0gUHlTZXF1ZW5jZV9JVEVNKHNlcXVlbmNlLCAwKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJy b3IpCistICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgICAgX19weXhfdF8yID0g UHlTZXF1ZW5jZV9JVEVNKHNlcXVlbmNlLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMik7CistICAgICAgI2VuZGlmCistICAgIH0gZWxzZSB7CistICAgICAgUHlfc3NpemVf dCBpbmRleCA9IC0xOworLSAgICAgIF9fcHl4X3RfNCA9IFB5T2JqZWN0X0dldEl0ZXIoX19weXhf dl9kcm1fb3NkX3NpemUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAx MDAxLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0g ICAgICBfX3B5eF90XzkgPSBQeV9UWVBFKF9fcHl4X3RfNCktPnRwX2l0ZXJuZXh0OworLSAgICAg IGluZGV4ID0gMDsgX19weXhfdF8xID0gX19weXhfdF85KF9fcHl4X3RfNCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgZ290byBfX3B5eF9MMTFfdW5wYWNraW5nX2ZhaWxlZDsKKy0gICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgICBpbmRleCA9IDE7IF9fcHl4X3RfMiA9IF9f cHl4X3RfOShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIGdvdG8gX19weXhf TDExX3VucGFja2luZ19mYWlsZWQ7CistICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Cist ICAgICAgaWYgKF9fUHl4X0l0ZXJuZXh0VW5wYWNrRW5kQ2hlY2soX19weXhfdF85KF9fcHl4X3Rf NCksIDIpIDwgMCkgX19QWVhfRVJSKDAsIDEwMDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgICAgIF9f cHl4X3RfOSA9IE5VTEw7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3Rf NCA9IDA7CistICAgICAgZ290byBfX3B5eF9MMTJfdW5wYWNraW5nX2RvbmU7CistICAgICAgX19w eXhfTDExX3VucGFja2luZ19mYWlsZWQ6OworLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQp OyBfX3B5eF90XzQgPSAwOworLSAgICAgIF9fcHl4X3RfOSA9IE5VTEw7CistICAgICAgaWYgKF9f UHl4X0l0ZXJGaW5pc2goKSA9PSAwKSBfX1B5eF9SYWlzZU5lZWRNb3JlVmFsdWVzRXJyb3IoaW5k ZXgpOworLSAgICAgIF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICBf X3B5eF9MMTJfdW5wYWNraW5nX2RvbmU6OworLSAgICB9CistICAgIF9fcHl4X3RfNyA9IF9fUHl4 X1B5SW50X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoaW50 KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwMDEsIF9fcHl4X0wxX2Vy cm9yKQorLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAg X19weXhfdF8xMCA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzIpOyBpZiAodW5saWtlbHko KF9fcHl4X3RfMTAgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigw LCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9f cHl4X3RfMiA9IDA7CistICAgIF9fcHl4X3ZfX2RybV9vc2Rfc2l6ZS53aWR0aCA9IF9fcHl4X3Rf NzsKKy0gICAgX19weXhfdl9fZHJtX29zZF9zaXplLmhlaWdodCA9IF9fcHl4X3RfMTA7CistCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDAyCistICogICAgICAgICBp ZiBkcm1fb3NkX3NpemU6CistICogICAgICAgICAgICAgX2RybV9vc2Rfc2l6ZS53aWR0aCwgX2Ry bV9vc2Rfc2l6ZS5oZWlnaHQgPSBkcm1fb3NkX3NpemUKKy0gKiAgICAgICAgICAgICBwYXJhbXMu YWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX09TRF9TSVpFLCAmX2RybV9vc2Rfc2l6ZSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExMDYKKyAgKiAKKy0gKiAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4 dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2Ll9jdHgsIHBhcmFtcy5wYXJhbXMpCisrICog ICAgIGRlZiBmcmVlKHNlbGYpOgorKyAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmV0dXJuCisrICogICAg ICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgICBfX3B5eF90XzIgPSAoKHN0cnVjdCBfX3B5eF92 dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9w YXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJf UEFSQU1fRFJNX09TRF9TSVpFLCAoJl9fcHl4X3ZfX2RybV9vc2Rfc2l6ZSksIE5VTEwpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMDAyLCBfX3B5eF9MMV9lcnJvcikK Ky0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhfdF8xID0gKCghKF9fcHl4X3Zfc2VsZi0+aW5p dGVkICE9IDApKSAhPSAwKTsKKysgIGlmIChfX3B5eF90XzEpIHsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDAKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1z LnJlbmRlcl9mZCA9IGRybV9kaXNwbGF5LmdldCgicmVuZGVyX2ZkIiwgLTEpCistICogICAgICAg ICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAmZHJt X3BhcmFtcykKKy0gKiAgICAgICAgIGlmIGRybV9vc2Rfc2l6ZTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIF9kcm1fb3NkX3NpemUud2lkdGgsIF9kcm1fb3Nk X3NpemUuaGVpZ2h0ID0gZHJtX29zZF9zaXplCistICogICAgICAgICAgICAgcGFyYW1zLmFkZF92 b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgJl9kcm1fb3NkX3NpemUpCisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTA3CisrICogICAgIGRlZiBmcmVl KHNlbGYpOgorKyAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgorKyAqICAgICAgICAgICAg IHJldHVybiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB3aXRoIG5v Z2lsOgorKyAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0eCkK KyAgKi8KKy0gIH0KKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19weXhfciA9 IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgICAgZ290byBfX3B5eF9MMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDA0CistICogICAgICAgICAg ICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgJl9kcm1f b3NkX3NpemUpCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTA2Cisg ICogCistICogICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfY3JlYXRlKCZzZWxmLl9j dHgsIHNlbGYuX21wdi5fY3R4LCBwYXJhbXMucGFyYW1zKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICBpZiBlcnIgPCAwOgorLSAqICAgICAgICAgICAgIHJhaXNlIE1Q VkVycm9yKGVycikKKysgKiAgICAgZGVmIGZyZWUoc2VsZik6CisrICogICAgICAgICBpZiBub3Qg c2VsZi5pbml0ZWQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICByZXR1cm4KKysgKiAgICAgICAgIHdpdGggbm9naWw6CisgICovCistICBfX3B5eF92X2VyciA9 IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoKCZfX3B5eF92X3NlbGYtPl9jdHgpLCBfX3B5eF92 X3NlbGYtPl9tcHYtPl9jdHgsIF9fcHl4X3ZfcGFyYW1zLT5wYXJhbXMpOworKyAgfQorIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDUKKy0gKiAKKy0gKiAgICAgICAg IGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2Ll9j dHgsIHBhcmFtcy5wYXJhbXMpCistICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorLSAq ICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEwOAorKyAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgorKyAqICAgICAg ICAgICAgIHJldHVybgorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYu X2N0eCkKKysgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKKyAgKi8KKy0gIF9fcHl4X3Rf MyA9ICgoX19weXhfdl9lcnIgPCAwKSAhPSAwKTsKKy0gIGlmICh1bmxpa2VseShfX3B5eF90XzMp KSB7CisrICB7CisrICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlUaHJlYWRTdGF0 ZSAqX3NhdmU7CisrICAgICAgUHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19QeXhfRmFzdEdJ TF9SZW1lbWJlcigpOworKyAgICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDYKKy0gKiAgICAgICAgIGVyciA9 IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2Ll9jdHgsIHBh cmFtcy5wYXJhbXMpCistICogICAgICAgICBpZiBlcnIgPCAwOgorLSAqICAgICAgICAgICAgIHJh aXNlIE1QVkVycm9yKGVycikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgc2VsZi5pbml0ZWQgPSBUcnVlCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEwOQorKyAqICAgICAgICAgICAgIHJldHVybgorKyAqICAgICAgICAgd2l0aCBu b2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuaW5pdGVkID0g RmFsc2UKKyAgKiAKKyAgKi8KKy0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzEsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDEwMDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKy0gICAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDA2LCBfX3B5eF9MMV9lcnJv cikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgIF9fcHl4X3RfNSA9IE5VTEw7 CistICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF8xKSkpIHsKKy0gICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzEpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgeworLSAgICAgICAgUHlP YmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMSk7CistICAg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5j dGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMSwgZnVuY3Rpb24pOwor KyAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X2ZyZWUoX19weXhfdl9zZWxmLT5fY3R4KTsKKyAg ICAgICB9CistICAgIH0KKy0gICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9i amVjdF9DYWxsMkFyZ3MoX19weXhfdF8xLCBfX3B5eF90XzUsIF9fcHl4X3RfNCkgOiBfX1B5eF9Q eU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMSwgX19weXhfdF80KTsKKy0gICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhf dF80KTsgX19weXhfdF80ID0gMDsKKy0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgMTAwNiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzIpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAg X19QeXhfUmFpc2UoX19weXhfdF8yLCAwLCAwLCAwKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUFlYX0VSUigwLCAxMDA2LCBfX3B5eF9MMV9l cnJvcikKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDUKKy0g KiAKKy0gKiAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoJnNlbGYuX2N0 eCwgc2VsZi5fbXB2Ll9jdHgsIHBhcmFtcy5wYXJhbXMpCistICogICAgICAgICBpZiBlcnIgPCAw OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmFpc2UgTVBW RXJyb3IoZXJyKQorLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCisrICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDgKKysgKiAgICAgICAgIGlmIG5vdCBzZWxm LmluaXRlZDoKKysgKiAgICAgICAgICAgICByZXR1cm4KKysgKiAgICAgICAgIHdpdGggbm9naWw6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVy X2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCisrICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNl CisgICovCisrICAgICAgLypmaW5hbGx5OiovIHsKKysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97 CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICBfX1B5eF9GYXN0R0lM X0ZvcmdldCgpOworKyAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgICNlbmRp ZgorKyAgICAgICAgICBnb3RvIF9fcHl4X0w2OworKyAgICAgICAgfQorKyAgICAgICAgX19weXhf TDY6OworKyAgICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDA3CistICogICAgICAgICBpZiBlcnIgPCAwOgorLSAqICAgICAgICAgICAgIHJhaXNl IE1QVkVycm9yKGVycikKKy0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0gVHJ1ZSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTExMAorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVy X2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCisrICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNl ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMKKysg KiAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAqLworLSAgX19weXhfdl9zZWxmLT5pbml0ZWQgPSAx OworKyAgX19weXhfdl9zZWxmLT5pbml0ZWQgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjk1MAorLSAqICAgICAgICAgYmludCBpbml0ZWQKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTA1CisrICogICAgICAgICAgICAgbXB2X3JlbmRl cl9jb250ZXh0X3JlcG9ydF9zd2FwKHNlbGYuX2N0eCkKKyAgKiAKKy0gKiAgICAgZGVmIF9faW5p dF9fKHNlbGYsIG1wdiwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ICAgICAgICAgYXBpX3R5cGUsCistICogICAgICAgICAgICAgICAgICBvcGVuZ2xfaW5pdF9wYXJh bXM9Tm9uZSwKKysgKiAgICAgZGVmIGZyZWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKysgKiAgICAgICAgICAgICBy ZXR1cm4KKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9 IDA7CistICBnb3RvIF9fcHl4X0wwOworLSAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERF Q1JFRihfX3B5eF90XzEpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworLSAgX19QeXhf WERFQ1JFRihfX3B5eF90XzQpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworLSAgX19Q eXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dC5fX2luaXRf XyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19w eXhfciA9IC0xOworKyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsK KyAgIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoKFB5T2JqZWN0ICopX19weXhfdl9wYXJh bXMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2FycCk7CisrICBfX1B5eF9YR0lWRVJFRihf X3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9f cHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDEwCisr LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTIKKysgKiAgICAgICAgIHNlbGYu aW5pdGVkID0gRmFsc2UKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMKKy0gKiAgICAgZGVmIHNldF9p Y2NfcHJvZmlsZShzZWxmLCBpY2NfYmxvYik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgIGNkZWY6CistICogICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJhbSBwYXJh bQorKyAqICAgICBkZWYgY2xvc2Uoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKysgKiAgICAgICAgICAgICByZXR1cm4K KyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8zc2V0X2ljY19wcm9maWxl KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2ljY19ibG9iKTsgLypw cm90byovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNSZW5kZXJDb250ZXh0XzNzZXRfaWNjX3Byb2ZpbGUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3ZfaWNjX2Jsb2IpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTljbG9zZShQeU9iamVjdCAq X19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8K KytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfMTljbG9zZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5 T2JqZWN0ICp1bnVzZWQpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X2lj Y19wcm9maWxlICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMnNldF9pY2NfcHJvZmlsZSgoKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3Nl bGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9pY2NfYmxvYikpOworKyAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoImNsb3NlICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMThjbG9zZSgoKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3Nl bGYpKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRf aWNjX3Byb2ZpbGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9pY2NfYmxvYikgeworLSAg c3RydWN0IG1wdl9yZW5kZXJfcGFyYW0gX19weXhfdl9wYXJhbTsKKy0gIHN0cnVjdCBtcHZfYnl0 ZV9hcnJheSBfX3B5eF92X3ZhbDsKKy0gIGludCBfX3B5eF92X2VycjsKKytzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMThjbG9z ZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICpf X3B5eF92X3NlbGYpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCisgICBpbnQgX19weXhfdF8xOworLSAgaW50IF9fcHl4X3RfMjsK Ky0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9 IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKy0gIGNoYXIgKl9fcHl4X3Rf NjsKKy0gIFB5X3NzaXplX3QgX19weXhfdF83OworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cist ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X2ljY19wcm9maWxlIiwg MCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiY2xvc2UiLCAwKTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDE2CistICogICAgICAgICAgICAgaW50 IGVycgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTMKKyAgKiAKKy0g KiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGljY19ibG9iLCBieXRlcyk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJpY2Nf YmxvYiBzaG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIpCistICogICAgICAgICB2YWwuZGF0YSA9 IDx2b2lkICo+PGNoYXIgKj5pY2NfYmxvYgorLSAqLworLSAgX19weXhfdF8xID0gUHlCeXRlc19D aGVjayhfX3B5eF92X2ljY19ibG9iKTsgCistICBfX3B5eF90XzIgPSAoKCEoX19weXhfdF8xICE9 IDApKSAhPSAwKTsKKy0gIGlmICh1bmxpa2VseShfX3B5eF90XzIpKSB7CistCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDE3CistICogCistICogICAgICAgICBpZiBu b3QgaXNpbnN0YW5jZShpY2NfYmxvYiwgYnl0ZXMpOgorLSAqICAgICAgICAgICAgIHJhaXNlIFB5 TVBWRXJyb3IoImljY19ibG9iIHNob3VsZCBiZSBhIGJ5dGVzIGluc3RhbmNlIikgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgdmFsLmRhdGEgPSA8dm9pZCAqPjxjaGFy ICo+aWNjX2Jsb2IKKy0gKiAgICAgICAgIHZhbC5zaXplID0gbGVuKGljY19ibG9iKQorLSAqLwor LSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX1B5TVBW RXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDE3LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgIF9fcHl4X3Rf NSA9IE5VTEw7CistICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlN ZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKKy0gICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9H RVRfU0VMRihfX3B5eF90XzQpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgeworLSAg ICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3Rf NCk7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKy0gICAgICAgIF9fUHl4X0lO Q1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNCwgZnVu Y3Rpb24pOworLSAgICAgIH0KKy0gICAgfQorLSAgICBfX3B5eF90XzMgPSAoX19weXhfdF81KSA/ IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzQsIF9fcHl4X3RfNSwgX19weXhfa3Bf c19pY2NfYmxvYl9zaG91bGRfYmVfYV9ieXRlc19pbnN0YSkgOiBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X3RfNCwgX19weXhfa3Bfc19pY2NfYmxvYl9zaG91bGRfYmVfYV9ieXRlc19p bnN0YSk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0g ICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTAxNywgX19weXhfTDFf ZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9ERUNSRUYo X19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gICAgX19QeXhfUmFpc2UoX19weXhfdF8zLCAw LCAwLCAwKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Cist ICAgIF9fUFlYX0VSUigwLCAxMDE3LCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMTYKKy0gKiAgICAgICAgICAgICBpbnQgZXJyCist ICogCistICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpY2NfYmxvYiwgYnl0ZXMpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJv cigiaWNjX2Jsb2Igc2hvdWxkIGJlIGEgYnl0ZXMgaW5zdGFuY2UiKQorLSAqICAgICAgICAgdmFs LmRhdGEgPSA8dm9pZCAqPjxjaGFyICo+aWNjX2Jsb2IKKy0gKi8KKy0gIH0KKy0KKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDE4CistICogICAgICAgICBpZiBub3QgaXNp bnN0YW5jZShpY2NfYmxvYiwgYnl0ZXMpOgorLSAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJy b3IoImljY19ibG9iIHNob3VsZCBiZSBhIGJ5dGVzIGluc3RhbmNlIikKKy0gKiAgICAgICAgIHZh bC5kYXRhID0gPHZvaWQgKj48Y2hhciAqPmljY19ibG9iICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHZhbC5zaXplID0gbGVuKGljY19ibG9iKQorLSAqIAorLSAqLwor LSAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfQXNXcml0YWJsZVN0cmluZyhfX3B5eF92X2lj Y19ibG9iKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF82KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDAsIDEwMTgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdl92YWwuZGF0YSA9 ICgodm9pZCAqKSgoY2hhciAqKV9fcHl4X3RfNikpOworLQorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwMTkKKy0gKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJp Y2NfYmxvYiBzaG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIpCistICogICAgICAgICB2YWwuZGF0 YSA9IDx2b2lkICo+PGNoYXIgKj5pY2NfYmxvYgorLSAqICAgICAgICAgdmFsLnNpemUgPSBsZW4o aWNjX2Jsb2IpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgICAg IHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lDQ19QUk9GSUxFCisrICogICAgIGRlZiBj bG9zZShzZWxmKToKKysgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybgorKyAqICAgICAgICAgd2l0 aCBub2dpbDoKKyAgKi8KKy0gIF9fcHl4X3RfNyA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X2lj Y19ibG9iKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNyA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19Q WVhfRVJSKDAsIDEwMTksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdl92YWwuc2l6ZSA9IF9f cHl4X3RfNzsKKysgIF9fcHl4X3RfMSA9ICgoIShfX3B5eF92X3NlbGYtPmluaXRlZCAhPSAwKSkg IT0gMCk7CisrICBpZiAoX19weXhfdF8xKSB7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTAyMQorLSAqICAgICAgICAgdmFsLnNpemUgPSBsZW4oaWNjX2Jsb2IpCist ICogCistICogICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JQ0NfUFJPRklM RSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBwYXJhbS5kYXRhID0g JnZhbAorLSAqIAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExNAor KyAqICAgICBkZWYgY2xvc2Uoc2VsZik6CisrICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6 CisrICogICAgICAgICAgICAgcmV0dXJuICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0 X2ZyZWUoc2VsZi5fY3R4KQorICAqLworLSAgX19weXhfdl9wYXJhbS50eXBlID0gTVBWX1JFTkRF Ul9QQVJBTV9JQ0NfUFJPRklMRTsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAg X19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgICAgZ290byBfX3B5 eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDIyCistICog CistICogICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JQ0NfUFJPRklMRQor LSAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZ2YWwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExMworICAqIAorKyAq ICAgICBkZWYgY2xvc2Uoc2VsZik6CisrICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByZXR1cm4KKyAgKiAg ICAgICAgIHdpdGggbm9naWw6CisgICovCistICBfX3B5eF92X3BhcmFtLmRhdGEgPSAoJl9fcHl4 X3ZfdmFsKTsKKysgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDI0CistICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAorLSAqIAorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMTUKKysgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRl ZDoKKysgKiAgICAgICAgICAgICByZXR1cm4KKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVy X2NvbnRleHRfc2V0X3BhcmFtZXRlcihzZWxmLl9jdHgsIHBhcmFtKQorLSAqICAgICAgICAgcmV0 dXJuIGVycgorKyAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0 eCkKKysgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKKyAgKi8KKyAgIHsKKyAgICAgICAj aWZkZWYgV0lUSF9USFJFQUQKK0BAIC0xOTg5OSwyMiArMTkwMTQsMjIgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRf aWNjX3Byb2ZpbGUKKyAgICAgICAjZW5kaWYKKyAgICAgICAvKnRyeToqLyB7CisgCistICAgICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyNQorLSAqIAorKyAgICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTYKKysgKiAgICAgICAgICAgICBy ZXR1cm4KKyAgKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2 X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4LCBwYXJhbSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIGVycgorKyAqICAgICAgICAg ICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQorICAqIAorICAqLwor LSAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3BhcmFtZXRlcihf X3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW0pOworKyAgICAgICAgbXB2X3JlbmRlcl9j b250ZXh0X2ZyZWUoX19weXhfdl9zZWxmLT5fY3R4KTsKKyAgICAgICB9CisgCistICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjQKKy0gKiAgICAgICAgIHBhcmFtLmRh dGEgPSAmdmFsCistICogCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExMTUKKysgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKysgKiAgICAgICAgICAgICBy ZXR1cm4KKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3BhcmFtZXRl cihzZWxmLl9jdHgsIHBhcmFtKQorLSAqICAgICAgICAgcmV0dXJuIGVycgorKyAqICAgICAgICAg ICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0eCkKKysgKiAgICAgICAgIHNlbGYu aW5pdGVkID0gRmFsc2UKKyAgKi8KKyAgICAgICAvKmZpbmFsbHk6Ki8geworICAgICAgICAgLypu b3JtYWwgZXhpdDoqL3sKK0BAIC0xOTkyOCwxNDg1ICsxOTA0MywxNTA1IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yc2V0 X2ljY19wcm9maWxlCisgICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwMjYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTE3CisgICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9y ZW5kZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKHNlbGYuX2N0eCwgcGFyYW0pCistICogICAgICAg ICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCisrICogICAgICAgICBzZWxmLmlu aXRlZCA9IEZhbHNlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAg QF9lcnJvcnMKKysgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOgorICAqLworLSAgX19QeXhf WERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9f cHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTAyNiwg X19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fcHl4X3Ig PSBfX3B5eF90XzM7CistICBfX3B5eF90XzMgPSAwOworLSAgZ290byBfX3B5eF9MMDsKKysgIF9f cHl4X3Zfc2VsZi0+aW5pdGVkID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDEwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExMgor KyAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQorICAqIAorLSAqICAgICBAX2Vycm9ycwor LSAqICAgICBkZWYgc2V0X2ljY19wcm9maWxlKHNlbGYsIGljY19ibG9iKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZjoKKy0gKiAgICAgICAgICAgICBtcHZf cmVuZGVyX3BhcmFtIHBhcmFtCisrICogICAgIGRlZiBjbG9zZShzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgorKyAqICAg ICAgICAgICAgIHJldHVybgorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCist ICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CistICBf X1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0LnNldF9p Y2NfcHJvZmlsZSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OworLSAgX19weXhfciA9IE5VTEw7CisrICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVG KFB5X05vbmUpOworICAgX19weXhfTDA6OworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Cisg ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0K KyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyOQorKy8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE5CisrICogICAgICAgICBzZWxmLmluaXRlZCA9IEZh bHNlCisrICogCisrICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5jbG9zZSgpCisgICogCistICogICAgIEBf ZXJyb3JzCistICogICAgIGRlZiBzZXRfYW1iaWVudF9saWdodChzZWxmLCBsdXgpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmOgorLSAqICAgICAgICAgICAg IG1wdl9yZW5kZXJfcGFyYW0gcGFyYW0KKyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLwor LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVy Q29udGV4dF81c2V0X2FtYmllbnRfbGlnaHQoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfbHV4KTsgLypwcm90byovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzVzZXRfYW1iaWVudF9saWdodChQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9sdXgpIHsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF9yID0gMDsKKytzdGF0aWMgdm9pZCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNSZW5kZXJDb250ZXh0XzIxX19kZWFsbG9jX18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs Zik7IC8qcHJvdG8qLworK3N0YXRpYyB2b2lkIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfMjFfX2RlYWxsb2NfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7 CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoInNldF9hbWJpZW50X2xpZ2h0ICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNHNldF9hbWJpZW50 X2xpZ2h0KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29u dGV4dCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X2x1eCkpOworKyAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVhbGxvY19fICh3cmFwcGVyKSIsIDApOworKyAg X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yMF9fZGVhbGxv Y19fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dCAqKV9fcHl4X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworIH0KKyAK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfNHNldF9hbWJpZW50X2xpZ2h0KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zf bHV4KSB7CistICBzdHJ1Y3QgbXB2X3JlbmRlcl9wYXJhbSBfX3B5eF92X3BhcmFtOworLSAgaW50 IF9fcHl4X3ZfdmFsOworLSAgaW50IF9fcHl4X3ZfZXJyOworLSAgUHlPYmplY3QgKl9fcHl4X3Ig PSBOVUxMOworK3N0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfMjBfX2RlYWxsb2NfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKyAgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCistICBpbnQgX19weXhfdF8xOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9 IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5 eF90XzMgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpf X3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X2FtYmllbnRfbGlnaHQiLCAwKTsKKysgIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlYWxsb2NfXyIsIDApOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMzUKKy0gKiAgICAgICAgICAgICBpbnQgZXJyCisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEyMAorICAqIAorLSAqICAgICAg ICAgdmFsID0gbHV4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHBh cmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0FNQklFTlRfTElHSFQKKy0gKiAgICAgICAgIHBh cmFtLmRhdGEgPSAmdmFsCisrICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKKysgKiAgICAg ICAgIHNlbGYuY2xvc2UoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICog Y2RlZiBjbGFzcyBPcGVuR0xSZW5kZXJDb250ZXh0KFJlbmRlckNvbnRleHQpOgorICAqLworLSAg X19weXhfdF8xID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3ZfbHV4KTsgaWYgKHVubGlrZWx5 KChfX3B5eF90XzEgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigw LCAxMDM1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3ZfdmFsID0gX19weXhfdF8xOworKyAg X19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhf dl9zZWxmKSwgX19weXhfbl9zX2Nsb3NlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgMTEyMCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKKysgIF9fcHl4X3RfMyA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICBfX3B5eF90XzMgPSBQ eU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykp IHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19w eXhfdF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKKysgICAgICBfX1B5eF9J TkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5j dGlvbik7CisrICAgIH0KKysgIH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVj dF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19w eXhfdF8zID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEx MjAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwMzYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE5Cisr ICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCisgICogCistICogICAgICAgICB2YWwgPSBs dXgKKy0gKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0FNQklFTlRfTElH SFQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcGFyYW0uZGF0YSA9 ICZ2YWwKKysgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmNsb3NlKCkKKyAgKiAKKyAgKi8KKy0gIF9fcHl4 X3ZfcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fQU1CSUVOVF9MSUdIVDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM3CistICogICAgICAgICB2YWwgPSBs dXgKKy0gKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0FNQklFTlRfTElH SFQKKy0gKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICovCistICBfX3B5eF92X3Bh cmFtLmRhdGEgPSAoJl9fcHl4X3ZfdmFsKTsKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor KyAgZ290byBfX3B5eF9MMDsKKysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNS RUYoX19weXhfdF8zKTsKKysgIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0dGVyLmxpYnMu bXB2LlJlbmRlckNvbnRleHQuX19kZWFsbG9jX18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5l bm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsKKysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworK30KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDM5CistICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAorLSAqIAorLSAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKHNlbGYuX2N0eCwg cGFyYW0pCistICogICAgICAgICByZXR1cm4gZXJyCisrLyogIih0cmVlIGZyYWdtZW50KSI6MQor KyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVy dGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorKyAqIGRlZiBfX3NldHN0YXRl X2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKyAgKi8KKy0gIHsKKy0gICAgICAjaWZkZWYg V0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKy0gICAgICBQeV9VTkJM T0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAgICAgI2Vu ZGlmCistICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwNDAKKy0gKiAKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAg ICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4 LCBwYXJhbSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJu IGVycgorLSAqIAorLSAqLworLSAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfcmVuZGVyX2NvbnRl eHRfc2V0X3BhcmFtZXRlcihfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW0pOworLSAg ICAgIH0KKysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yM19fcmVkdWNlX2N5dGhvbl9f KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7 IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzUmVuZGVyQ29udGV4dF8yM19fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgeworKyAgUHlPYmplY3QgKl9f cHl4X3IgPSAwOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKysgIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzIy X19yZWR1Y2VfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9SZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxmKSk7CisgCistICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwMzkKKy0gKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFs CistICogCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0 ZXIoc2VsZi5fY3R4LCBwYXJhbSkKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKy0gKi8KKy0gICAg ICAvKmZpbmFsbHk6Ki8geworLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAg I2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Cist ICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgI2VuZGlmCistICAgICAgICAg IGdvdG8gX19weXhfTDU7CistICAgICAgICB9CistICAgICAgICBfX3B5eF9MNTo7CistICAgICAg fQorLSAgfQorKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDQxCistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAq ICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKHNlbGYu X2N0eCwgcGFyYW0pCistICogICAgICAgICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgZGVmIGdldF9uZXh0X2ZyYW1lX2luZm8oc2VsZik6Cisr c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJD b250ZXh0XzIyX19yZWR1Y2VfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKysg IFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25z CisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAw OworKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2Ns aW5lbm8gPSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhv bl9fIiwgMCk7CisrCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoyCisrICogZGVmIF9fcmVkdWNl X2N5dGhvbl9fKHNlbGYpOgorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5u b3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwg X19weXhfc3RhdGUpOgorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3Qg YmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorICAqLworLSAg X19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21f aW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MTA0MSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9f cHl4X3IgPSBfX3B5eF90XzI7CistICBfX3B5eF90XzIgPSAwOworLSAgZ290byBfX3B5eF9MMDsK KysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJy b3IsIF9fcHl4X3R1cGxlX18xNCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CisrICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOworKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJy b3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyOQorLSAqIAor LSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgc2V0X2FtYmllbnRfbGlnaHQoc2VsZiwgbHV4 KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZjoKKy0gKiAg ICAgICAgICAgICBtcHZfcmVuZGVyX3BhcmFtIHBhcmFtCisrICAvKiAiKHRyZWUgZnJhZ21lbnQp IjoxCisrICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBj b252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCisrICogZGVmIF9fc2V0 c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorICAqLworIAorICAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMik7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5k ZXJDb250ZXh0LnNldF9hbWJpZW50X2xpZ2h0IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5v LCBfX3B5eF9maWxlbmFtZSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0Ll9fcmVkdWNl X2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 CisgICBfX3B5eF9yID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNDMKKy0g KiAgICAgICAgIHJldHVybiBlcnIKKy0gKiAKKy0gKiAgICAgZGVmIGdldF9uZXh0X2ZyYW1lX2lu Zm8oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWY6 CistICogICAgICAgICAgICAgbXB2X3JlbmRlcl9mcmFtZV9pbmZvIGluZm8KKysvKiAiKHRyZWUg ZnJhZ21lbnQpIjozCisrICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorKyAqICAgICBy YWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9u IG9iamVjdCBmb3IgcGlja2xpbmciKQorKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYs IF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICByYWlz ZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9i amVjdCBmb3IgcGlja2xpbmciKQorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250 ZXh0XzdnZXRfbmV4dF9mcmFtZV9pbmZvKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9V TlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF83Z2V0X25leHRfZnJh bWVfaW5mbyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1 bnVzZWQpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfMjVfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLypwcm90byovCisrc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0 XzI1X19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfdl9fX3B5eF9zdGF0ZSkgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworICAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJn ZXRfbmV4dF9mcmFtZV9pbmZvICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNmdldF9uZXh0X2ZyYW1lX2lu Zm8oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0 ICopX19weXhfdl9zZWxmKSk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRz dGF0ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzI0X19zZXRzdGF0ZV9jeXRob25fXygo KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilf X3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOworIAorICAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNmdldF9uZXh0X2ZyYW1lX2lu Zm8oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAq X19weXhfdl9zZWxmKSB7CistICBzdHJ1Y3QgbXB2X3JlbmRlcl9mcmFtZV9pbmZvIF9fcHl4X3Zf aW5mbzsKKy0gIHN0cnVjdCBtcHZfcmVuZGVyX3BhcmFtIF9fcHl4X3ZfcGFyYW07CistICBpbnQg X19weXhfdl9lcnI7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNSZW5kZXJDb250ZXh0XzI0X19zZXRzdGF0ZV9jeXRob25fXyhDWVRIT05fVU5VU0VE IHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9f cHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkg eworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJh dGlvbnMKKy0gIGludCBfX3B5eF90XzE7CistICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsK Ky0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9 IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5 eF90XzEgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpf X3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0X25leHRfZnJhbWVfaW5mbyIsIDApOworLQorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNDgKKy0gKiAgICAgICAgICAgICBt cHZfcmVuZGVyX3BhcmFtIHBhcmFtCistICogCistICogICAgICAgICBwYXJhbS50eXBlID0gTVBW X1JFTkRFUl9QQVJBTV9ORVhUX0ZSQU1FX0lORk8gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZpbmZvCistICogICAgICAgICB3aXRoIG5vZ2ls OgorLSAqLworLSAgX19weXhfdl9wYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9ORVhUX0ZS QU1FX0lORk87CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0OQor LSAqIAorLSAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFN RV9JTkZPCistICogICAgICAgICBwYXJhbS5kYXRhID0gJmluZm8gICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBlcnIg PSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0X2luZm8oc2VsZi5fY3R4LCBwYXJhbSkKKy0gKi8KKy0g IF9fcHl4X3ZfcGFyYW0uZGF0YSA9ICgmX19weXhfdl9pbmZvKTsKKysgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fIiwgMCk7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MAorLSAqICAgICAgICAgcGFyYW0udHlwZSA9IE1Q Vl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9JTkZPCistICogICAgICAgICBwYXJhbS5kYXRhID0g JmluZm8KKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0X2luZm8oc2Vs Zi5fY3R4LCBwYXJhbSkKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6CisrICAvKiAiKHRyZWUgZnJh Z21lbnQpIjo0CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBj b252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCisrICogZGVmIF9fc2V0 c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorKyAqICAgICByYWlzZSBUeXBlRXJy b3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3Ig cGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICovCistICB7CistICAg ICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAg ICAgUHlfVU5CTE9DS19USFJFQURTCistICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwor LSAgICAgICNlbmRpZgorLSAgICAgIC8qdHJ5OiovIHsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5 T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3IsIF9fcHl4X3R1cGxlX18xNSwgTlVM TCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9SYWlzZShfX3B5eF90 XzEsIDAsIDAsIDApOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 CisrICBfX1BZWF9FUlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCisgCistICAgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MQorLSAqICAgICAgICAgcGFyYW0uZGF0YSA9 ICZpbmZvCistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVyciA9IG1w dl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhzZWxmLl9jdHgsIHBhcmFtKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBpZiBlcnIgPCAwOgorLSAqICAgICAgICAgICAg IHJhaXNlIE1QVkVycm9yKGVycikKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjMKKysgKiBkZWYg X19yZWR1Y2VfY3l0aG9uX18oc2VsZik6CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5f Y3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIp CisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4 IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCisg ICovCistICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhf X3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW0pOworLSAgICAgIH0KKyAKKy0gICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MAorLSAqICAgICAgICAgcGFyYW0u dHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9JTkZPCistICogICAgICAgICBwYXJh bS5kYXRhID0gJmluZm8KKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0 X2luZm8oc2VsZi5fY3R4LCBwYXJhbSkKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6CistICovCist ICAgICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAg ICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgp OworLSAgICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICNlbmRpZgorLSAgICAg ICAgICBnb3RvIF9fcHl4X0w1OworLSAgICAgICAgfQorLSAgICAgICAgX19weXhfTDU6OworLSAg ICAgIH0KKy0gIH0KKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfTDFfZXJy b3I6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dC5fX3NldHN0YXRlX2N5dGhvbl9fIiwg X19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9y ID0gTlVMTDsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MgorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0g KiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0X2luZm8oc2VsZi5fY3R4 LCBwYXJhbSkKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCisrLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMjMKKyAgKiAKKysgKiBjZGVmIGNsYXNzIE9wZW5HTFJl bmRlckNvbnRleHQoUmVuZGVyQ29udGV4dCk6CisrICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBt cHYsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgIGdl dF9wcm9jX2FkZHJlc3MsCisrICogICAgICAgICAgICAgICAgICAqYXJncywgKiprd2FyZ3MpOgor ICAqLworLSAgX19weXhfdF8xID0gKChfX3B5eF92X2VyciA8IDApICE9IDApOworLSAgaWYgKHVu bGlrZWx5KF9fcHl4X3RfMSkpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwNTMKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0 X2luZm8oc2VsZi5fY3R4LCBwYXJhbSkKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6CistICogICAg ICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogCistICogICAgICAgICByZXR1cm4gUmVuZGVyRnJhbWVJbmZvKCkuX2Zyb21fc3RydWN0 KCZpbmZvKQorLSAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMywg X19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIo MCwgMTA1MywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwor LSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1 bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwNTMsIF9fcHl4X0wxX2Vycm9yKQor LSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgX19weXhfdF81ID0gTlVMTDsKKy0g ICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzMpKSkgeworLSAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfMyk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CistICAgICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8zKTsKKy0gICAgICAg IF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlvbik7CistICAg ICAgfQorKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMp OyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x OU9wZW5HTFJlbmRlckNvbnRleHRfMV9faW5pdF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgeworKyAgUHlPYmplY3Qg Kl9fcHl4X3ZfbXB2ID0gMDsKKysgIFB5T2JqZWN0ICpfX3B5eF92X2dldF9wcm9jX2FkZHJlc3Mg PSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfYXJncyA9IDA7CisrICBQeU9iamVjdCAqX19weXhf dl9rd2FyZ3MgPSAwOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFyICpf X3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisrICBpbnQg X19weXhfcjsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19pbml0X18gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF92X2t3YXJn cyA9IFB5RGljdF9OZXcoKTsgaWYgKHVubGlrZWx5KCFfX3B5eF92X2t3YXJncykpIHJldHVybiAt MTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X2t3YXJncyk7CisrICBpZiAoUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKSA+IDIpIHsKKysgICAgX19weXhfdl9hcmdzID0gUHlUdXBsZV9HZXRT bGljZShfX3B5eF9hcmdzLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsKKysgICAg aWYgKHVubGlrZWx5KCFfX3B5eF92X2FyZ3MpKSB7CisrICAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3Zfa3dhcmdzKTsgX19weXhfdl9rd2FyZ3MgPSAwOworKyAgICAgIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworKyAgICAgIHJldHVybiAtMTsKKyAgICAgfQorLSAgICBfX3B5eF90XzIg PSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzMsIF9fcHl4 X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBf X3B5eF90XzQpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7 CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMDUzLCBfX3B5eF9MMV9lcnJvcikK Ky0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICBfX1B5eF9SYWlzZShfX3B5eF90XzIsIDAsIDAsIDAp OworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgX19Q WVhfRVJSKDAsIDEwNTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhf dl9hcmdzKTsKKysgIH0gZWxzZSB7CisrICAgIF9fcHl4X3ZfYXJncyA9IF9fcHl4X2VtcHR5X3R1 cGxlOyBfX1B5eF9JTkNSRUYoX19weXhfZW1wdHlfdHVwbGUpOworKyAgfQorKyAgeworKyAgICBz dGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19tcHYsJl9f cHl4X25fc19nZXRfcHJvY19hZGRyZXNzLDB9OworKyAgICBQeU9iamVjdCogdmFsdWVzWzJdID0g ezAsMH07CisrICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworKyAgICAgIFB5X3NzaXpl X3Qga3dfYXJnczsKKysgICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9H RVRfU0laRShfX3B5eF9hcmdzKTsKKysgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CisrICAgICAg ICBkZWZhdWx0OgorKyAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRF TShfX3B5eF9hcmdzLCAxKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAg IGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Cisr ICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAwOiBicmVhazsKKysg ICAgICB9CisrICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworKyAgICAg IHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBpZiAobGlr ZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5 eF9uX3NfbXB2KSkgIT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAgIGVsc2UgZ290byBfX3B5eF9M NV9hcmd0dXBsZV9lcnJvcjsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAg IGNhc2UgIDE6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3Rf R2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcykpICE9IDAp KSBrd19hcmdzLS07CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgX19QeXhfUmFpc2VBcmd0 dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAxMTIzLCBf X3B5eF9MM19lcnJvcikKKysgICAgICAgIH0KKysgICAgICB9CisrICAgICAgaWYgKHVubGlrZWx5 KGt3X2FyZ3MgPiAwKSkgeworKyAgICAgICAgY29uc3QgUHlfc3NpemVfdCB1c2VkX3Bvc19hcmdz ID0gKHBvc19hcmdzIDwgMikgPyBwb3NfYXJncyA6IDI7CisrICAgICAgICBpZiAodW5saWtlbHko X19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMs IF9fcHl4X3Zfa3dhcmdzLCB2YWx1ZXMsIHVzZWRfcG9zX2FyZ3MsICJfX2luaXRfXyIpIDwgMCkp IF9fUFlYX0VSUigwLCAxMTIzLCBfX3B5eF9MM19lcnJvcikKKysgICAgICB9CisrICAgIH0gZWxz ZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSA8IDIpIHsKKysgICAgICBnb3RvIF9f cHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworKyAgICB9IGVsc2UgeworKyAgICAgIHZhbHVlc1swXSA9 IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CisrICAgICAgdmFsdWVzWzFdID0gUHlU dXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKysgICAgfQorKyAgICBfX3B5eF92X21wdiA9 IHZhbHVlc1swXTsKKysgICAgX19weXhfdl9nZXRfcHJvY19hZGRyZXNzID0gdmFsdWVzWzFdOwor KyAgfQorKyAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKysgIF9fcHl4 X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2lu aXRfXyIsIDAsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIo MCwgMTEyMywgX19weXhfTDNfZXJyb3IpCisrICBfX3B5eF9MM19lcnJvcjo7CisrICBfX1B5eF9E RUNSRUYoX19weXhfdl9hcmdzKTsgX19weXhfdl9hcmdzID0gMDsKKysgIF9fUHl4X0RFQ1JFRihf X3B5eF92X2t3YXJncyk7IF9fcHl4X3Zfa3dhcmdzID0gMDsKKysgIF9fUHl4X0FkZFRyYWNlYmFj aygidmlkY3V0dGVyLmxpYnMubXB2Lk9wZW5HTFJlbmRlckNvbnRleHQuX19pbml0X18iLCBfX3B5 eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIC0xOworKyAgX19weXhfTDRfYXJndW1lbnRf dW5wYWNraW5nX2RvbmU6OworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xOU9wZW5HTFJlbmRlckNvbnRleHRfX19pbml0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxmKSwg X19weXhfdl9tcHYsIF9fcHl4X3ZfZ2V0X3Byb2NfYWRkcmVzcywgX19weXhfdl9hcmdzLCBfX3B5 eF92X2t3YXJncyk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDUyCistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9y ZW5kZXJfY29udGV4dF9nZXRfaW5mbyhzZWxmLl9jdHgsIHBhcmFtKQorLSAqICAgICAgICAgaWYg ZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHJh aXNlIE1QVkVycm9yKGVycikKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19QeXhf WERFQ1JFRihfX3B5eF92X2FyZ3MpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X2t3YXJncyk7 CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOwor K30KKysKKytzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5H TFJlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhf dl9tcHYsIFB5T2JqZWN0ICpfX3B5eF92X2dldF9wcm9jX2FkZHJlc3MsIFB5T2JqZWN0ICpfX3B5 eF92X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF92X2t3YXJncykgeworKyAgUHlPYmplY3QgKl9fcHl4 X3ZfaW5pdF9wYXJhbXMgPSBOVUxMOworKyAgaW50IF9fcHl4X3I7CisrICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisrICBQeU9iamVj dCAqX19weXhfdF8yID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworKyAg UHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CisrICBpbnQgX19weXhfbGluZW5vID0gMDsKKysg IGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5v ID0gMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyIsIDApOworKwor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMjcKKysgKiAgICAgICAgICAg ICAgICAgICphcmdzLCAqKmt3YXJncyk6CisrICogICAgICAgICBpbml0X3BhcmFtcyA9IHsKKysg KiAgICAgICAgICAgICAiZ2V0X3Byb2NfYWRkcmVzcyI6IGdldF9wcm9jX2FkZHJlc3MgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgfQorKyAqICAgICAgICAgUmVuZGVy Q29udGV4dC5fX2luaXRfXyhzZWxmLCBtcHYsIFJlbmRlckNvbnRleHQuQVBJX09QRU5HTCwKKysg Ki8KKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEyNywgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF90XzEs IF9fcHl4X25fc19nZXRfcHJvY19hZGRyZXNzLCBfX3B5eF92X2dldF9wcm9jX2FkZHJlc3MpIDwg MCkgX19QWVhfRVJSKDAsIDExMjcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdl9pbml0X3Bh cmFtcyA9ICgoUHlPYmplY3QqKV9fcHl4X3RfMSk7CisrICBfX3B5eF90XzEgPSAwOworKworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMjkKKysgKiAgICAgICAgICAgICAi Z2V0X3Byb2NfYWRkcmVzcyI6IGdldF9wcm9jX2FkZHJlc3MKKysgKiAgICAgICAgIH0KKysgKiAg ICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0X18oc2VsZiwgbXB2LCBSZW5kZXJDb250ZXh0LkFQ SV9PUEVOR0wsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW5pdF9wYXJhbXMsICphcmdzLCAqKmt3YXJncykKKyAgKiAKKyAg Ki8KKy0gIH0KKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9i amVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSwg X19weXhfbl9zX2luaXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAx MTI5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfcHR5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQpLCBfX3B5eF9uX3NfQVBJX09Q RU5HTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExMjksIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1NQorLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVy cm9yKGVycikKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTMwCisrICog ICAgICAgICB9CisrICogICAgICAgICBSZW5kZXJDb250ZXh0Ll9faW5pdF9fKHNlbGYsIG1wdiwg UmVuZGVyQ29udGV4dC5BUElfT1BFTkdMLAorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbml0X3BhcmFtcywgKmFyZ3MsICoqa3dhcmdzKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisgICogCistICogICAgICAgICByZXR1cm4gUmVuZGVyRnJhbWVJbmZvKCkuX2Zyb21f c3RydWN0KCZpbmZvKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogY2xhc3MgQ2Fs bGJhY2tUaHJlYWQoVGhyZWFkKToKKysgKi8KKysgIF9fcHl4X3RfMyA9IFB5VHVwbGVfTmV3KDQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTI5LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgX19QeXhfSU5DUkVGKCgoUHlP YmplY3QgKilfX3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X0dJVkVSRUYoKChQeU9iamVjdCAqKV9f cHl4X3Zfc2VsZikpOworKyAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDAsICgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF92X21wdik7CisrICBf X1B5eF9HSVZFUkVGKF9fcHl4X3ZfbXB2KTsKKysgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8z LCAxLCBfX3B5eF92X21wdik7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMik7CisrICBQeVR1 cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMiwgX19weXhfdF8yKTsKKysgIF9fUHl4X0lOQ1JFRihf X3B5eF92X2luaXRfcGFyYW1zKTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9pbml0X3BhcmFt cyk7CisrICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMywgX19weXhfdl9pbml0X3BhcmFt cyk7CisrICBfX3B5eF90XzIgPSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExMjkKKysgKiAgICAgICAgICAgICAiZ2V0X3Byb2NfYWRkcmVzcyI6IGdldF9wcm9j X2FkZHJlc3MKKysgKiAgICAgICAgIH0KKysgKiAgICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0 X18oc2VsZiwgbXB2LCBSZW5kZXJDb250ZXh0LkFQSV9PUEVOR0wsICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXJh bXMsICphcmdzLCAqKmt3YXJncykKKyAgKiAKKy0gKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJh Y2soc2VsZiwgY2IpOgorICAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4 X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbykpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMDU1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3Rf MiA9IFB5TnVtYmVyX0FkZChfX3B5eF90XzMsIF9fcHl4X3ZfYXJncyk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExMjksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7CistICBfX3B5eF90XzMgPSAoKHN0cnVjdCBfX3B5eF92dGFic3Ry dWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKikoKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqKV9fcHl4X3RfMikt Pl9fcHl4X3Z0YWIpLT5fZnJvbV9zdHJ1Y3QoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKilfX3B5eF90XzIpLCAoJl9fcHl4X3ZfaW5mbykp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMDU1LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzAKKysgKiAgICAgICAgIH0KKysg KiAgICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0X18oc2VsZiwgbXB2LCBSZW5kZXJDb250ZXh0 LkFQSV9PUEVOR0wsCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfcGFy YW1zLCAqYXJncywgKiprd2FyZ3MpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAK KysgKiBjbGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOgorKyAqLworKyAgX19weXhfdF8zID0g UHlEaWN0X0NvcHkoX19weXhfdl9rd2FyZ3MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9f UFlYX0VSUigwLCAxMTMwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzMpOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMjkKKysgKiAg ICAgICAgICAgICAiZ2V0X3Byb2NfYWRkcmVzcyI6IGdldF9wcm9jX2FkZHJlc3MKKysgKiAgICAg ICAgIH0KKysgKiAgICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0X18oc2VsZiwgbXB2LCBSZW5k ZXJDb250ZXh0LkFQSV9PUEVOR0wsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXJhbXMsICphcmdzLCAqKmt3YXJn cykKKysgKiAKKysgKi8KKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhf dF8xLCBfX3B5eF90XzIsIF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDAsIDExMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NCk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19weXhfciA9IF9fcHl4X3Rf MzsKKy0gIF9fcHl4X3RfMyA9IDA7CistICBnb3RvIF9fcHl4X0wwOworKyAgX19QeXhfREVDUkVG KF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDQzCistICogICAgICAgICByZXR1cm4gZXJyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEyMworICAqIAorLSAqICAgICBkZWYgZ2V0X25leHRfZnJhbWVfaW5mbyhzZWxm KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZjoKKy0gKiAg ICAgICAgICAgICBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gaW5mbworKyAqIGNkZWYgY2xhc3MgT3Bl bkdMUmVuZGVyQ29udGV4dChSZW5kZXJDb250ZXh0KToKKysgKiAgICAgZGVmIF9faW5pdF9fKHNl bGYsIG1wdiwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAg ICAgZ2V0X3Byb2NfYWRkcmVzcywKKysgKiAgICAgICAgICAgICAgICAgICphcmdzLCAqKmt3YXJn cyk6CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3IgPSAw OworKyAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNS RUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKyAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF81KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxp YnMubXB2LlJlbmRlckNvbnRleHQuZ2V0X25leHRfZnJhbWVfaW5mbyIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7CisrICBf X1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5PcGVuR0xSZW5kZXJDb250ZXh0 Ll9faW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 CisrICBfX3B5eF9yID0gLTE7CisgICBfX3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5 eF9yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9pbml0X3BhcmFtcyk7CisgICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1NworLSAqICAgICAgICAgcmV0dXJuIFJl bmRlckZyYW1lSW5mbygpLl9mcm9tX3N0cnVjdCgmaW5mbykKKy0gKiAKKy0gKiAgICAgZGVmIHNl dF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29u dGV4dF9zZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAq PmNiKQorKy8qICIodHJlZSBmcmFnbWVudCkiOjEKKysgKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18o c2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgcmFpc2UgVHlwZUVy cm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9y IHBpY2tsaW5nIikKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0 ZSk6CisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfOXNldF91cGRhdGVf Y2FsbGJhY2soUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2IpOyAv KnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfOXNldF91cGRhdGVfY2FsbGJhY2soUHlPYmplY3QgKl9fcHl4X3Zf c2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2IpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5HTFJlbmRlckNvbnRleHRfM19fcmVkdWNlX2N5 dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVu dXNlZCk7IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF8zX19yZWR1Y2VfY3l0aG9uX18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7CisgICBQ eU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldF91cGRhdGVfY2FsbGJhY2sgKHdyYXBwZXIp IiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVu ZGVyQ29udGV4dF84c2V0X3VwZGF0ZV9jYWxsYmFjaygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0 ICopX19weXhfdl9jYikpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNl X2N5dGhvbl9fICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xOU9wZW5HTFJlbmRlckNvbnRleHRfMl9fcmVkdWNlX2N5dGhvbl9fKCgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4 dCAqKV9fcHl4X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfOHNldF91cGRhdGVfY2FsbGJhY2soc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhf dl9jYikgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzE5T3BlbkdMUmVuZGVyQ29udGV4dF8yX19yZWR1Y2VfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0 ICpfX3B5eF92X3NlbGYpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0 X3VwZGF0ZV9jYWxsYmFjayIsIDApOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Cisr ICBpbnQgX19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwNTgKKy0gKiAKKy0gKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJh Y2soc2VsZiwgY2IpOgorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9zZXRfdXBkYXRl X2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAqPmNiKQorLSAqICAgICAg ICAgc2VsZi51cGRhdGVfY2IgPSBjYgorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MgorKyAqIGRl ZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxm Ll9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5n IikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhv bl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9j dHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikK KyAgKi8KKy0gIHsKKy0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0 YXRlICpfc2F2ZTsKKy0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0 R0lMX1JlbWVtYmVyKCk7CistICAgICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8geworKyAgX19w eXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF9idWlsdGluX1R5cGVFcnJvciwgX19w eXhfdHVwbGVfXzE2LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MSwgMiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9f UHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKKysgIF9fUFlYX0VSUigxLCAyLCBfX3B5eF9MMV9lcnJvcikKKyAK Ky0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU5CistICogICAg IGRlZiBzZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKToKKy0gKiAgICAgICAgIHdpdGggbm9n aWw6CistICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3NldF91cGRhdGVfY2FsbGJh Y2soc2VsZi5fY3R4LCAmX2NfdXBkYXRlY2IsIDx2b2lkICo+Y2IpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKKy0gKiAKKy0gKi8K Ky0gICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9zZXRfdXBkYXRlX2NhbGxiYWNrKF9fcHl4X3Zf c2VsZi0+X2N0eCwgKCZfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY191cGRhdGVjYiks ICgodm9pZCAqKV9fcHl4X3ZfY2IpKTsKKy0gICAgICB9CistCistICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTgKKy0gKiAKKy0gKiAgICAgZGVmIHNldF91cGRhdGVf Y2FsbGJhY2soc2VsZiwgY2IpOgorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9zZXRf dXBkYXRlX2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAqPmNiKQorLSAq ICAgICAgICAgc2VsZi51cGRhdGVfY2IgPSBjYgorLSAqLworLSAgICAgIC8qZmluYWxseToqLyB7 CistICAgICAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJF QUQKKy0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAgUHlfQkxP Q0tfVEhSRUFEUworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNTsK Ky0gICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0w1OjsKKy0gICAgICB9CistICB9CistCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2MAorLSAqICAgICAgICAgd2l0aCBu b2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3VwZGF0ZV9jYWxs YmFjayhzZWxmLl9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQgKj5jYikKKy0gKiAgICAgICAgIHNl bGYudXBkYXRlX2NiID0gY2IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAq ICAgICBkZWYgdXBkYXRlKHNlbGYpOgorLSAqLworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfY2Ip OworLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X2NiKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92 X3NlbGYtPnVwZGF0ZV9jYik7CistICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT51cGRhdGVf Y2IpOworLSAgX19weXhfdl9zZWxmLT51cGRhdGVfY2IgPSBfX3B5eF92X2NiOworLQorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTcKKy0gKiAgICAgICAgIHJldHVybiBS ZW5kZXJGcmFtZUluZm8oKS5fZnJvbV9zdHJ1Y3QoJmluZm8pCistICogCistICogICAgIGRlZiBz ZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2Nv bnRleHRfc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLl9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQg Kj5jYikKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjEKKysgKiBkZWYgX19yZWR1Y2VfY3l0aG9u X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgcmFpc2UgVHlw ZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3Qg Zm9yIHBpY2tsaW5nIikKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9z dGF0ZSk6CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3Ig PSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBfX3B5eF9MMV9lcnJvcjo7Cisr ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1 dHRlci5saWJzLm1wdi5PcGVuR0xSZW5kZXJDb250ZXh0Ll9fcmVkdWNlX2N5dGhvbl9fIiwgX19w eXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0g TlVMTDsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwNjIKKy0gKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IK Ky0gKiAKKy0gKiAgICAgZGVmIHVwZGF0ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCByZXQKKy0gKiAgICAgICAgIHdpdGggbm9n aWw6CisrLyogIih0cmVlIGZyYWdtZW50KSI6MworKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhz ZWxmKToKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZl cnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKysgKiBkZWYgX19zZXRzdGF0 ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRl ZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKyAgKi8KKyAKKyAvKiBQeXRob24g d3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzUmVuZGVyQ29udGV4dF8xMXVwZGF0ZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTF1cGRhdGUo UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7 Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVu R0xSZW5kZXJDb250ZXh0XzVfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLypwcm90byovCisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250 ZXh0XzVfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7CisgICBf X1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo InVwZGF0ZSAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEwdXBkYXRlKCgoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18gKHdyYXBwZXIp IiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3Bl bkdMUmVuZGVyQ29udGV4dF80X19zZXRzdGF0ZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYp LCAoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOworIAorICAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVy biBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTB1cGRhdGUoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmKSB7CistICB1aW50 NjRfdCBfX3B5eF92X3JldDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xOU9wZW5HTFJlbmRlckNvbnRleHRfNF9fc2V0c3RhdGVfY3l0aG9uX18oQ1lU SE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xS ZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4 X3ZfX19weXhfc3RhdGUpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKyAg IGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoInVwZGF0ZSIsIDApOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwNjQKKy0gKiAgICAgZGVmIHVwZGF0ZShzZWxmKToKKy0gKiAgICAgICAgIGNkZWYgdWlu dDY0X3QgcmV0CistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3VwZGF0ZShz ZWxmLl9jdHgpCistICogICAgICAgICByZXR1cm4gcmV0CistICovCistICB7CistICAgICAgI2lm ZGVmIFdJVEhfVEhSRUFECistICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgUHlf VU5CTE9DS19USFJFQURTCistICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAg ICNlbmRpZgorLSAgICAgIC8qdHJ5OiovIHsKKy0KKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDY1CistICogICAgICAgICBjZGVmIHVpbnQ2NF90IHJldAorLSAq ICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICByZXQgPSBtcHZfcmVuZGVyX2Nv bnRleHRfdXBkYXRlKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgcmV0dXJuIHJldAorLSAqIAorLSAqLworLSAgICAgICAgX19weXhfdl9yZXQgPSBt cHZfcmVuZGVyX2NvbnRleHRfdXBkYXRlKF9fcHl4X3Zfc2VsZi0+X2N0eCk7CistICAgICAgfQor LQorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY0CistICogICAg IGRlZiB1cGRhdGUoc2VsZik6CistICogICAgICAgICBjZGVmIHVpbnQ2NF90IHJldAorLSAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgIHJldCA9IG1wdl9yZW5kZXJfY29udGV4dF91cGRhdGUoc2VsZi5fY3R4KQorLSAqICAg ICAgICAgcmV0dXJuIHJldAorLSAqLworLSAgICAgIC8qZmluYWxseToqLyB7CistICAgICAgICAv Km5vcm1hbCBleGl0OioveworLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAg ICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwor LSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNTsKKy0gICAgICAgIH0K Ky0gICAgICAgIF9fcHl4X0w1OjsKKy0gICAgICB9CistICB9CisrICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyIsIDApOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjYKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICog ICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3VwZGF0ZShzZWxmLl9jdHgpCist ICogICAgICAgICByZXR1cm4gcmV0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAK Ky0gKiAgICAgQF9lcnJvcnMKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKysgKiAgICAgcmFp c2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBv YmplY3QgZm9yIHBpY2tsaW5nIikKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBf X3B5eF9zdGF0ZSk6CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBi ZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKi8KKy0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBf X3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfcmV0KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA2NiwgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2J1aWx0aW5fVHlwZUVycm9y LCBfX3B5eF90dXBsZV9fMTcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigxLCA0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgX19weXhfciA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7CistICBnb3RvIF9fcHl4 X0wwOworKyAgX19QeXhfUmFpc2UoX19weXhfdF8xLCAwLCAwLCAwKTsKKysgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wx X2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjIKKy0g KiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKKy0gKiAKKy0gKiAgICAgZGVmIHVwZGF0ZShz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiB1aW50 NjRfdCByZXQKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CisrICAvKiAiKHRyZWUgZnJhZ21lbnQp IjozCisrICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorKyAqICAgICByYWlzZSBUeXBl RXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBm b3IgcGlja2xpbmciKQorKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0 YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICByYWlzZSBUeXBlRXJy b3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3Ig cGlja2xpbmciKQorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX3B5 eF9MMV9lcnJvcjo7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9BZGRU cmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0LnVwZGF0ZSIsIF9fcHl4 X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfQWRkVHJh Y2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuT3BlbkdMUmVuZGVyQ29udGV4dC5fX3NldHN0YXRl X2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 CisgICBfX3B5eF9yID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjkKKysv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMworICAqIAorLSAqICAgICBAX2Vy cm9ycworLSAqICAgICBkZWYgcmVuZGVyKHNlbGYsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUsCistICogICAgICAgICAgICAg ICAgZmxpcF95PUZhbHNlLAorKyAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6CisrICog ICAgIGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCisrICogICAgICAgICBzZWxmLmRhZW1vbiA9 IFRydWUKKyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xM3JlbmRlcihQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9f cHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIoUHlPYmplY3QgKl9fcHl4X3Zf c2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CistICBQ eU9iamVjdCAqX19weXhfdl9vcGVuZ2xfZmJvID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2Zs aXBfeSA9IDA7CistICBQeU9iamVjdCAqX19weXhfdl9kZXB0aCA9IDA7CistICBQeU9iamVjdCAq X19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3Zf c2tpcF9yZW5kZXJpbmcgPSAwOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBj aGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cisr c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFj a1RocmVhZF8xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8xX19pbml0X18gPSB7Il9faW5pdF9fIiwg KFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhy ZWFkXzFfX2luaXRfXywgTUVUSF9PLCAwfTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzFfX2luaXRfXyhQeU9iamVjdCAq X19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworICAgUHlPYmplY3QgKl9fcHl4 X3IgPSAwOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJyZW5kZXIgKHdyYXBwZXIpIiwgMCk7CistICB7CistICAgIHN0YXRpYyBQ eU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX29wZW5nbF9mYm8sJl9f cHl4X25fc19mbGlwX3ksJl9fcHl4X25fc19kZXB0aCwmX19weXhfbl9zX2Jsb2NrX2Zvcl90YXJn ZXRfdGltZSwmX19weXhfbl9zX3NraXBfcmVuZGVyaW5nLDB9OworLSAgICBQeU9iamVjdCogdmFs dWVzWzVdID0gezAsMCwwLDAsMH07CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19p bml0X18gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfX19pbml0X18oX19weXhfc2VsZiwgKChQeU9iamVj dCAqKV9fcHl4X3Zfc2VsZikpOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTA3MAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgcmVuZGVyKHNlbGYsCist ICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorLSAqICAgICAgICAgICAg ICAgIGRlcHRoPU5vbmUsCistICovCistICAgIHZhbHVlc1swXSA9ICgoUHlPYmplY3QgKilQeV9O b25lKTsKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDcxCistICogICAgIGRlZiByZW5kZXIoc2VsZiwKKy0g KiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUsCistICogICAgICAgICAgICAgICAgZmxp cF95PUZhbHNlLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg ICAgZGVwdGg9Tm9uZSwKKy0gKiAgICAgICAgICAgICAgICBibG9ja19mb3JfdGFyZ2V0X3RpbWU9 VHJ1ZSwKKy0gKi8KKy0gICAgdmFsdWVzWzFdID0gKChQeU9iamVjdCAqKVB5X0ZhbHNlKTsKKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNr VGhyZWFkX19faW5pdF9fKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF92X3NlbGYpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKysgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsK KysgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9 IE5VTEw7CisrICBpbnQgX19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9fcHl4X2Zp bGVuYW1lID0gTlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKysgIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyIsIDApOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA3MgorLSAqICAgICAgICAgICAgICAgIG9wZW5nbF9mYm89Tm9u ZSwKKy0gKiAgICAgICAgICAgICAgICBmbGlwX3k9RmFsc2UsCistICogICAgICAgICAgICAgICAg ZGVwdGg9Tm9uZSwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg ICAgIGJsb2NrX2Zvcl90YXJnZXRfdGltZT1UcnVlLAorLSAqICAgICAgICAgICAgICAgIHNraXBf cmVuZGVyaW5nPUZhbHNlKToKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTM0CisrICogY2xhc3MgQ2FsbGJhY2tUaHJlYWQoVGhyZWFkKToKKysgKiAgICAgZGVmIF9faW5p dF9fKHNlbGYpOgorKyAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorKyAqICAg ICAgICAgc2VsZi5sb2NrID0gU2VtYXBob3JlKCkKKyAgKi8KKy0gICAgdmFsdWVzWzJdID0gKChQ eU9iamVjdCAqKVB5X05vbmUpOworKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzIsIF9fcHl4X25fc19UaHJlYWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VS UigwLCAxMTM0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwor KyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzIsIF9fcHl4 X25fc19pbml0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTEzNCwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhfdF8yID0gTlVMTDsKKysg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19w eXhfdF8zKSkpIHsKKysgICAgX19weXhfdF8yID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8z KTsKKysgICAgaWYgKGxpa2VseShfX3B5eF90XzIpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0 aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMyk7CisrICAgICAgX19QeXhfSU5D UkVGKF9fcHl4X3RfMik7CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBf X1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywgZnVuY3Rpb24pOworKyAgICB9CisrICB9CisrICBf X3B5eF90XzEgPSAoX19weXhfdF8yKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzMsIF9fcHl4X3RfMiwgX19weXhfdl9zZWxmKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8zLCBfX3B5eF92X3NlbGYpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MTEzNCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDczCistICogICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorLSAqICAg ICAgICAgICAgICAgIGRlcHRoPU5vbmUsCistICogICAgICAgICAgICAgICAgYmxvY2tfZm9yX3Rh cmdldF90aW1lPVRydWUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICAgICAgICBza2lwX3JlbmRlcmluZz1GYWxzZSk6CistICogCisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTEzNQorKyAqICAgICBkZWYgX19pbml0X18oc2VsZik6CisrICog ICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKKysgKiAgICAgICAgIHNlbGYuZGFlbW9uID0g VHJ1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmxvY2sg PSBTZW1hcGhvcmUoKQorKyAqICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoVHJ1ZSkKKyAgKi8K Ky0gICAgdmFsdWVzWzNdID0gKChQeU9iamVjdCAqKVB5X1RydWUpOworKyAgaWYgKF9fUHl4X1B5 T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfZGFlbW9uLCBQeV9UcnVl KSA8IDApIF9fUFlYX0VSUigwLCAxMTM1LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNzQKKy0gKiAgICAgICAgICAgICAgICBkZXB0 aD1Ob25lLAorLSAqICAgICAgICAgICAgICAgIGJsb2NrX2Zvcl90YXJnZXRfdGltZT1UcnVlLAor LSAqICAgICAgICAgICAgICAgIHNraXBfcmVuZGVyaW5nPUZhbHNlKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICAgICAgY2RlZjoKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTM2CisrICogICAgICAgICBUaHJlYWQuX19pbml0X18oc2Vs ZikKKysgKiAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorKyAqICAgICAgICAgc2VsZi5sb2Nr ID0gU2VtYXBob3JlKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg c2VsZi5sb2NrLmFjcXVpcmUoVHJ1ZSkKKysgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25l CisgICovCistICAgIHZhbHVlc1s0XSA9ICgoUHlPYmplY3QgKilQeV9GYWxzZSk7CistICAgIGlm ICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworLSAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKy0g ICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNlICA1OiB2YWx1 ZXNbNF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDQpOworLSAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgNDogdmFsdWVzWzNdID0gUHlUdXBsZV9HRVRf SVRFTShfX3B5eF9hcmdzLCAzKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAg ICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7 CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAyOiB2YWx1ZXNb MV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRF TShfX3B5eF9hcmdzLCAwKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAg IGNhc2UgIDA6IGJyZWFrOworLSAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBs ZV9lcnJvcjsKKy0gICAgICB9CistICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3 ZHMpOworLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKy0gICAgICAgIGNhc2UgIDA6CistICAg ICAgICBpZiAoa3dfYXJncyA+IDApIHsKKy0gICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19Q eXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX29wZW5nbF9mYm8pOwor LSAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzBdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQor LSAgICAgICAgfQorLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAg MToKKy0gICAgICAgIGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCogdmFs dWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZmxpcF95 KTsKKy0gICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1sxXSA9IHZhbHVlOyBrd19hcmdzLS07 IH0KKy0gICAgICAgIH0KKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNh c2UgIDI6CistICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKy0gICAgICAgICAgUHlPYmplY3Qq IHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2Rl cHRoKTsKKy0gICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1syXSA9IHZhbHVlOyBrd19hcmdz LS07IH0KKy0gICAgICAgIH0KKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAg IGNhc2UgIDM6CistICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKy0gICAgICAgICAgUHlPYmpl Y3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9z X2Jsb2NrX2Zvcl90YXJnZXRfdGltZSk7CistICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNb M10gPSB2YWx1ZTsga3dfYXJncy0tOyB9CistICAgICAgICB9CistICAgICAgICBDWVRIT05fRkFM TFRIUk9VR0g7CistICAgICAgICBjYXNlICA0OgorLSAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7 CistICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9f cHl4X2t3ZHMsIF9fcHl4X25fc19za2lwX3JlbmRlcmluZyk7CistICAgICAgICAgIGlmICh2YWx1 ZSkgeyB2YWx1ZXNbNF0gPSB2YWx1ZTsga3dfYXJncy0tOyB9CistICAgICAgICB9CistICAgICAg fQorLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxp a2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmdu YW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgInJlbmRlciIpIDwgMCkpIF9fUFlYX0VSUigwLCAx MDY5LCBfX3B5eF9MM19lcnJvcikKKy0gICAgICB9CistICAgIH0gZWxzZSB7CistICAgICAgc3dp dGNoIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKSB7CistICAgICAgICBjYXNlICA1OiB2 YWx1ZXNbNF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDQpOworLSAgICAgICAgQ1lU SE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgNDogdmFsdWVzWzNdID0gUHlUdXBsZV9H RVRfSVRFTShfX3B5eF9hcmdzLCAzKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0g ICAgICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywg Mik7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAyOiB2YWx1 ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRf SVRFTShfX3B5eF9hcmdzLCAwKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAg ICAgIGNhc2UgIDA6IGJyZWFrOworLSAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0 dXBsZV9lcnJvcjsKKy0gICAgICB9CisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4 X3RfMywgX19weXhfbl9zX1NlbWFwaG9yZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDExMzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Myk7CisrICBfX3B5eF90XzIgPSBOVUxMOworKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAm JiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzMpKSkgeworKyAgICBfX3B5eF90XzIg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzMpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3Rf MikpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04o X19weXhfdF8zKTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKysgICAgICBfX1B5 eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBm dW5jdGlvbik7CisgICAgIH0KKy0gICAgX19weXhfdl9vcGVuZ2xfZmJvID0gdmFsdWVzWzBdOwor LSAgICBfX3B5eF92X2ZsaXBfeSA9IHZhbHVlc1sxXTsKKy0gICAgX19weXhfdl9kZXB0aCA9IHZh bHVlc1syXTsKKy0gICAgX19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUgPSB2YWx1ZXNbM107 CistICAgIF9fcHl4X3Zfc2tpcF9yZW5kZXJpbmcgPSB2YWx1ZXNbNF07CisgICB9CistICBnb3Rv IF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworLSAgX19weXhfTDVfYXJndHVwbGVf ZXJyb3I6OworLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInJlbmRlciIsIDAsIDAsIDUs IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMTA2OSwgX19weXhf TDNfZXJyb3IpCistICBfX3B5eF9MM19lcnJvcjo7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0LnJlbmRlciIsIF9fcHl4X2NsaW5lbm8sIF9f cHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhfdF8xID0gKF9fcHl4X3RfMikg PyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdF8yKSA6IF9fUHl4 X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzMpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMTEzNiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK KysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgaWYgKF9fUHl4 X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfbG9jaywgX19weXhf dF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTM2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExMzcKKysgKiAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorKyAq ICAgICAgICAgc2VsZi5sb2NrID0gU2VtYXBob3JlKCkKKysgKiAgICAgICAgIHNlbGYubG9jay5h Y3F1aXJlKFRydWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNl bGYuY2FsbGJhY2sgPSBOb25lCisrICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZQor KyAqLworKyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3Nl bGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIo MCwgMTEzNywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysg IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF8zLCBfX3B5eF9u X3NfYWNxdWlyZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExMzcs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIF9fcHl4X3RfMyA9IE5VTEw7Cisr ICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5 eF90XzIpKSkgeworKyAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIp OworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF8zKTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9f UHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgIH0KKysgIH0KKysgIF9f cHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf MiwgX19weXhfdF8zLCBQeV9UcnVlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhf dF8yLCBQeV9UcnVlKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMzcsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYo X19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx MzgKKysgKiAgICAgICAgIHNlbGYubG9jayA9IFNlbWFwaG9yZSgpCisrICogICAgICAgICBzZWxm LmxvY2suYWNxdWlyZShUcnVlKQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0g RmFsc2UKKysgKiAKKysgKi8KKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4 X3Zfc2VsZiwgX19weXhfbl9zX2NhbGxiYWNrLCBQeV9Ob25lKSA8IDApIF9fUFlYX0VSUigwLCAx MTM4LCBfX3B5eF9MMV9lcnJvcikKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTM5CisrICogICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQorKyAqICAgICAg ICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKKysgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IEZh bHNlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgZGVmIHNodXRk b3duKHNlbGYpOgorKyAqLworKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhf dl9zZWxmLCBfX3B5eF9uX3NfaXNzaHV0ZG93biwgUHlfRmFsc2UpIDwgMCkgX19QWVhfRVJSKDAs IDExMzksIF9fcHl4X0wxX2Vycm9yKQorKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExMzMKKysgKiAKKysgKiBjbGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOgorKyAq ICAgICBkZWYgX19pbml0X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQorKyAqICAgICAgICAgc2VsZi5kYWVtb24g PSBUcnVlCisrICovCisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3Ig PSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOworKyAg X19weXhfTDFfZXJyb3I6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzIpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworKyAgX19Q eXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQuX19pbml0 X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9f cHl4X3IgPSBOVUxMOworKyAgX19weXhfTDA6OworKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7 CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBOVUxMOworLSAg X19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OworLSAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTJyZW5kZXIoKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopX19weXhfdl9z ZWxmKSwgX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF92X2ZsaXBfeSwgX19weXhfdl9kZXB0aCwg X19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUsIF9fcHl4X3Zfc2tpcF9yZW5kZXJpbmcpOwor KyAgcmV0dXJuIF9fcHl4X3I7CisrfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwNjkKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQorKyAq ICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gRmFsc2UKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMK Ky0gKiAgICAgZGVmIHJlbmRlcihzZWxmLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLAorLSAqICAgICAgICAgICAgICAgIGZs aXBfeT1GYWxzZSwKKysgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVlCisrICogICAg ICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorICAqLworIAorKy8qIFB5dGhvbiB3cmFwcGVyICov Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxs YmFja1RocmVhZF8zc2h1dGRvd24oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8zc2h1dGRvd24gPSB7InNodXRkb3du IiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNr VGhyZWFkXzNzaHV0ZG93biwgTUVUSF9PLCAwfTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzNzaHV0ZG93bihQeU9iamVj dCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9f cHl4X3IgPSAwOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJzaHV0ZG93biAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8yc2h1dGRvd24o X19weXhfc2VsZiwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOworKworICAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJl dHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTJyZW5kZXIoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVj dCAqX19weXhfdl9vcGVuZ2xfZmJvLCBQeU9iamVjdCAqX19weXhfdl9mbGlwX3ksIFB5T2JqZWN0 ICpfX3B5eF92X2RlcHRoLCBQeU9iamVjdCAqX19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUs IFB5T2JqZWN0ICpfX3B5eF92X3NraXBfcmVuZGVyaW5nKSB7CistICBzdHJ1Y3QgbXB2X29wZW5n bF9mYm8gX19weXhfdl9mYm87CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fUmVuZGVyUGFyYW1zICpfX3B5eF92X3BhcmFtcyA9IE5VTEw7CistICBpbnQgX19weXhf dl9yZXQ7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTRDYWxsYmFja1RocmVhZF8yc2h1dGRvd24oQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhf c2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBO VUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90 XzEgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfMjsKKy0gIGludCBfX3B5eF90XzM7CistICBQeU9i amVjdCAqX19weXhfdF80ID0gTlVMTDsKKy0gIGludCBfX3B5eF90XzU7CistICBpbnQgX19weXhf dF82OworKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhf dF8zID0gTlVMTDsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19w eXhfZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoInJlbmRlciIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoInNodXRkb3duIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTA3OQorLSAqICAgICAgICAgICAgIG1wdl9vcGVuZ2xfZmJvIGZibworLSAqIAor LSAqICAgICAgICAgcGFyYW1zID0gX1JlbmRlclBhcmFtcygpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQyCisgICog CistICogICAgICAgICBpZiBvcGVuZ2xfZmJvOgorKyAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6 CisrICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lCisrICogICAgICAgICBz ZWxmLmxvY2sucmVsZWFzZSgpCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9D YWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f UmVuZGVyUGFyYW1zKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEw NzksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX3B5 eF92X3BhcmFtcyA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1Jl bmRlclBhcmFtcyAqKV9fcHl4X3RfMSk7CistICBfX3B5eF90XzEgPSAwOworKyAgaWYgKF9fUHl4 X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfaXNzaHV0ZG93biwg UHlfVHJ1ZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE0MiwgX19weXhfTDFfZXJyb3IpCisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4MQorLSAqICAgICAgICAgcGFyYW1z ID0gX1JlbmRlclBhcmFtcygpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTE0MworKyAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6CisrICogICAgICAgICBzZWxmLmlzc2h1 dGRvd24gPSBUcnVlCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisgICog CistICogICAgICAgICBpZiBvcGVuZ2xfZmJvOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICAgICAgbWVtc2V0KCZmYm8sIDAsIHNpemVvZihmYm8pKQorLSAqICAgICAg ICAgICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJvLmdldCgiZmJvIiwgMCkgb3IgMAorICAqLworLSAg X19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zfb3BlbmdsX2Zibyk7IGlm ICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDEwODEsIF9fcHl4X0wxX2Vy cm9yKQorLSAgaWYgKF9fcHl4X3RfMikgeworKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJT dHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2ssIFB5X05vbmUpIDwgMCkgX19QWVhf RVJSKDAsIDExNDMsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTA4MgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExNDQKKysgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IFRydWUKKysgKiAgICAgICAgIHNl bGYuY2FsbGJhY2sgPSBOb25lCisrICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAgICAgIGlmIG9wZW5nbF9mYm86 CistICogICAgICAgICAgICAgbWVtc2V0KCZmYm8sIDAsIHNpemVvZihmYm8pKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZmJvLmZibyA9IG9wZW5nbF9mYm8u Z2V0KCJmYm8iLCAwKSBvciAwCistICogICAgICAgICAgICAgZmJvLncgPSBvcGVuZ2xfZmJvWyJ3 Il0KKy0gKi8KKy0gICAgKHZvaWQpKG1lbXNldCgoJl9fcHl4X3ZfZmJvKSwgMCwgKHNpemVvZihf X3B5eF92X2ZibykpKSk7CistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDgzCistICogICAgICAgICBpZiBvcGVuZ2xfZmJvOgorLSAqICAgICAgICAgICAgIG1lbXNl dCgmZmJvLCAwLCBzaXplb2YoZmJvKSkKKy0gKiAgICAgICAgICAgICBmYm8uZmJvID0gb3Blbmds X2Ziby5nZXQoImZibyIsIDApIG9yIDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdCistICogICAgICAgICAgICAgZmJv LmggPSBvcGVuZ2xfZmJvWyJoIl0KKysgKiAgICAgZGVmIGNhbGwoc2VsZik6CisgICovCistICAg IF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9vcGVuZ2xfZmJv LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MTA4MywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAg ICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMSwgX19weXhfdHVwbGVf XzE1LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTA4Mywg X19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAgX19weXhfdF8yID0gX19Q eXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNCk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAw KSkgX19QWVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBpZiAoIV9fcHl4X3Rf MikgeworLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAg ICB9IGVsc2UgeworLSAgICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90 XzQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNSA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJl ZCgpKSkgX19QWVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICAgIF9fcHl4X3Rf MyA9IF9fcHl4X3RfNTsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80 ID0gMDsKKy0gICAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKKysgIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfbG9j ayk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExNDQsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX3B5eF90XzMgPSBfX1B5 eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfMiwgX19weXhfbl9zX3JlbGVhc2UpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTQ0LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CisrICBfX3B5eF90XzIgPSBOVUxMOworKyAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKKysgICAg X19weXhfdF8yID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKKysgICAgaWYgKGxpa2Vs eShfX3B5eF90XzIpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VU X0ZVTkNUSU9OKF9fcHl4X3RfMyk7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMik7Cisr ICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfMywgZnVuY3Rpb24pOworICAgICB9CistICAgIF9fcHl4X3RfMyA9IDA7CistICAgIF9f cHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7CistICAgIF9fcHl4X3ZfZmJvLmZibyA9IF9fcHl4X3Rf MzsKKy0KKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODQKKy0gKiAg ICAgICAgICAgICBtZW1zZXQoJmZibywgMCwgc2l6ZW9mKGZibykpCistICogICAgICAgICAgICAg ZmJvLmZibyA9IG9wZW5nbF9mYm8uZ2V0KCJmYm8iLCAwKSBvciAwCistICogICAgICAgICAgICAg ZmJvLncgPSBvcGVuZ2xfZmJvWyJ3Il0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgICAgIGZiby5oID0gb3BlbmdsX2Zib1siaCJdCistICogICAgICAgICAgICAgZmJv LmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8uZ2V0KCJpbnRlcm5hbF9mb3JtYXQiLCAwKSBv ciAwCistICovCistICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0RpY3RfR2V0SXRlbShf X3B5eF92X29wZW5nbF9mYm8sIF9fcHl4X25fc193KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgMTA4NCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdF80 KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQo KSkpIF9fUFlYX0VSUigwLCAxMDg0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAgIF9fcHl4X3ZfZmJvLncgPSBfX3B5eF90 XzM7CistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg1CistICog ICAgICAgICAgICAgZmJvLmZibyA9IG9wZW5nbF9mYm8uZ2V0KCJmYm8iLCAwKSBvciAwCistICog ICAgICAgICAgICAgZmJvLncgPSBvcGVuZ2xfZmJvWyJ3Il0KKy0gKiAgICAgICAgICAgICBmYm8u aCA9IG9wZW5nbF9mYm9bImgiXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8uZ2V0KCJpbnRlcm5hbF9m b3JtYXQiLCAwKSBvciAwCistICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVO REVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCistICovCistICAgIF9fcHl4X3RfNCA9IF9fUHl4 X1B5T2JqZWN0X0RpY3RfR2V0SXRlbShfX3B5eF92X29wZW5nbF9mYm8sIF9fcHl4X25fc19oKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTA4NSwgX19weXhfTDFfZXJy b3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgICBfX3B5eF90XzMgPSBfX1B5 eF9QeUludF9Bc19pbnQoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGlu dCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDg1LCBfX3B5eF9MMV9l cnJvcikKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAg IF9fcHl4X3ZfZmJvLmggPSBfX3B5eF90XzM7CisrICB9CisrICBfX3B5eF90XzEgPSAoX19weXhf dF8yKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF90XzIpIDog X19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCAxMTQ0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwODYKKy0gKiAgICAgICAgICAgICBmYm8udyA9IG9wZW5n bF9mYm9bInciXQorLSAqICAgICAgICAgICAgIGZiby5oID0gb3BlbmdsX2Zib1siaCJdCistICog ICAgICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8uZ2V0KCJpbnRlcm5h bF9mb3JtYXQiLCAwKSBvciAwICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZi bykKKy0gKiAgICAgICAgIGlmIGZsaXBfeToKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTQxCisrICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZQorKyAqIAor KyAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IFRydWUKKysgKiAgICAgICAgIHNlbGYuY2Fs bGJhY2sgPSBOb25lCisgICovCistICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0 dHJTdHIoX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzQpOworLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxs KF9fcHl4X3RfNCwgX19weXhfdHVwbGVfXzE2LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKy0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlm ICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDEwODYsIF9fcHl4X0wxX2Vy cm9yKQorLSAgICBpZiAoIV9fcHl4X3RfMikgeworLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICB9IGVsc2UgeworLSAgICAgIF9fcHl4X3RfNSA9IF9f UHl4X1B5SW50X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNSA9PSAo aW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwODYsIF9fcHl4X0wx X2Vycm9yKQorLSAgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNTsKKy0gICAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAgICBnb3RvIF9fcHl4X0w2X2Jvb2xf Ymlub3BfZG9uZTsKKy0gICAgfQorLSAgICBfX3B5eF90XzMgPSAwOworLSAgICBfX3B5eF9MNl9i b29sX2Jpbm9wX2RvbmU6OworLSAgICBfX3B5eF92X2Ziby5pbnRlcm5hbF9mb3JtYXQgPSBfX3B5 eF90XzM7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg3Cist ICogICAgICAgICAgICAgZmJvLmggPSBvcGVuZ2xfZmJvWyJoIl0KKy0gKiAgICAgICAgICAgICBm Ym8uaW50ZXJuYWxfZm9ybWF0ID0gb3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIsIDAp IG9yIDAKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1f T1BFTkdMX0ZCTywgJmZibykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgaWYgZmxpcF95OgorLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJf UEFSQU1fRkxJUF9ZLCAxKQorLSAqLworLSAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92 dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9w YXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJf UEFSQU1fT1BFTkdMX0ZCTywgKCZfX3B5eF92X2ZibyksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDg3LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9yID0gUHlfTm9u ZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworKyAgZ290byBfX3B5eF9MMDsKKysgIF9fcHl4X0wx X2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X1hERUNSRUYo X19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNhbGxiYWNrVGhyZWFkLnNodXRkb3duIiwgX19w eXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0g TlVMTDsKKysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDgxCistICogICAgICAgICBw YXJhbXMgPSBfUmVuZGVyUGFyYW1zKCkKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTE0NgorKyAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQorKyAqIAorKyAqICAgICBk ZWYgY2FsbChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg c2VsZi5sb2NrLnJlbGVhc2UoKQorICAqIAorLSAqICAgICAgICAgaWYgb3BlbmdsX2ZibzogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG1lbXNldCgmZmJvLCAw LCBzaXplb2YoZmJvKSkKKy0gKiAgICAgICAgICAgICBmYm8uZmJvID0gb3BlbmdsX2Ziby5nZXQo ImZibyIsIDApIG9yIDAKKyAgKi8KKy0gIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDg4CistICogICAgICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9w ZW5nbF9mYm8uZ2V0KCJpbnRlcm5hbF9mb3JtYXQiLCAwKSBvciAwCistICogICAgICAgICAgICAg cGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCistICog ICAgICAgICBpZiBmbGlwX3k6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKKy0gKiAg ICAgICAgIGlmIGRlcHRoIGlzIG5vdCBOb25lOgorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhf UHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfZmxpcF95KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8 IDApKSBfX1BZWF9FUlIoMCwgMTA4OCwgX19weXhfTDFfZXJyb3IpCistICBpZiAoX19weXhfdF8y KSB7CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzVjYWxsKFB5T2JqZWN0ICpfX3B5 eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCisrc3RhdGljIFB5TWV0 aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRf NWNhbGwgPSB7ImNhbGwiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzE0Q2FsbGJhY2tUaHJlYWRfNWNhbGwsIE1FVEhfTywgMH07Cisrc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF81Y2FsbChQ eU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmpl Y3QgKl9fcHl4X3IgPSAwOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjYWxsICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9 IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzRjYWxsKF9f cHl4X3NlbGYsICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODkKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRk X3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZibykKKy0gKiAgICAgICAgIGlm IGZsaXBfeToKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFN X0ZMSVBfWSwgMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgaWYg ZGVwdGggaXMgbm90IE5vbmU6CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JF TkRFUl9QQVJBTV9ERVBUSCwgZGVwdGgpCistICovCistICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0 IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilf X3B5eF92X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1QVl9S RU5ERVJfUEFSQU1fRkxJUF9ZLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMTA4OSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIC8qIGZ1 bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Cisr ICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDg4CistICogICAgICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9wZW5n bF9mYm8uZ2V0KCJpbnRlcm5hbF9mb3JtYXQiLCAwKSBvciAwCistICogICAgICAgICAgICAgcGFy YW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCistICogICAg ICAgICBpZiBmbGlwX3k6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKKy0gKiAgICAg ICAgIGlmIGRlcHRoIGlzIG5vdCBOb25lOgorLSAqLworLSAgfQorK3N0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNGNhbGwoQ1lU SE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikg eworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJh dGlvbnMKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4 X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKysgIGludCBfX3B5 eF9saW5lbm8gPSAwOworKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAg aW50IF9fcHl4X2NsaW5lbm8gPSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImNh bGwiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkwCist ICogICAgICAgICBpZiBmbGlwX3k6CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBW X1JFTkRFUl9QQVJBTV9GTElQX1ksIDEpCistICogICAgICAgICBpZiBkZXB0aCBpcyBub3QgTm9u ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHBhcmFtcy5h ZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIGRlcHRoKQorLSAqICAgICAgICAgaWYgbm90 IGJsb2NrX2Zvcl90YXJnZXRfdGltZToKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTQ3CisrICogCisrICogICAgIGRlZiBjYWxsKHNlbGYpOgorKyAqICAgICAgICAgc2Vs Zi5sb2NrLnJlbGVhc2UoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICog ICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJhY2spOgorICAqLworLSAgX19weXhfdF8yID0gKF9fcHl4 X3ZfZGVwdGggIT0gUHlfTm9uZSk7CistICBfX3B5eF90XzYgPSAoX19weXhfdF8yICE9IDApOwor LSAgaWYgKF9fcHl4X3RfNikgeworKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgMTE0NywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYo X19weXhfdF8yKTsKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19w eXhfdF8yLCBfX3B5eF9uX3NfcmVsZWFzZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDExNDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Myk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fcHl4 X3RfMiA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzMpKSkgeworKyAgICBfX3B5eF90XzIgPSBQeU1ldGhvZF9HRVRf U0VMRihfX3B5eF90XzMpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMikpIHsKKysgICAgICBQ eU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8zKTsKKysg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rp b24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlvbik7CisrICAg IH0KKysgIH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzIpID8gX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzMsIF9fcHl4X3RfMikgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9Bcmco X19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsK KysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNDcsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19w eXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5 MQorLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fRkxJUF9Z LCAxKQorLSAqICAgICAgICAgaWYgZGVwdGggaXMgbm90IE5vbmU6CistICogICAgICAgICAgICAg cGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9ERVBUSCwgZGVwdGgpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0X3Rp bWU6CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9D S19GT1JfVEFSR0VUX1RJTUUsIDApCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTE0NgorKyAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQorKyAqIAorKyAqICAgICBk ZWYgY2FsbChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg c2VsZi5sb2NrLnJlbGVhc2UoKQorKyAqIAorICAqLworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9Q eUludF9Bc19pbnQoX19weXhfdl9kZXB0aCk7IGlmICh1bmxpa2VseSgoX19weXhfdF8zID09IChp bnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMTA5MSwgX19weXhfTDFf ZXJyb3IpCistICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1 dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19weXhfdnRh YiktPmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIF9fcHl4 X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwOTEsIF9fcHl4 X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDkwCistICogICAgICAgICBpZiBmbGlwX3k6CistICogICAgICAg ICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9GTElQX1ksIDEpCistICogICAg ICAgICBpZiBkZXB0aCBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIGRl cHRoKQorLSAqICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90YXJnZXRfdGltZToKKy0gKi8KKy0g IH0KKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IFB5X05vbmU7IF9f UHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgIGdvdG8gX19weXhfTDA7CisrICBfX3B5eF9MMV9lcnJv cjo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9BZGRUcmFjZWJh Y2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1RocmVhZC5jYWxsIiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKysg IF9fcHl4X0wwOjsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5MgorLSAqICAgICAgICAgaWYgZGVwdGggaXMg bm90IE5vbmU6CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJB TV9ERVBUSCwgZGVwdGgpCistICogICAgICAgICBpZiBub3QgYmxvY2tfZm9yX3RhcmdldF90aW1l OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcGFyYW1zLmFk ZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCistICogICAg ICAgICBpZiBza2lwX3JlbmRlcmluZzoKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTE0OQorKyAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQorKyAqIAorKyAqICAgICBk ZWYgc2V0KHNlbGYsIGNhbGxiYWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisrICogCisgICovCistICBfX3B5eF90 XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUp OyBpZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlYX0VSUigwLCAxMDkyLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fcHl4X3RfMiA9ICgoIV9fcHl4X3RfNikgIT0gMCk7CistICBpZiAoX19w eXhfdF8yKSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkz CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9ERVBUSCwg ZGVwdGgpCistICogICAgICAgICBpZiBub3QgYmxvY2tfZm9yX3RhcmdldF90aW1lOgorLSAqICAg ICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQkxPQ0tfRk9SX1RBUkdF VF9USU1FLCAwKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBpZiBz a2lwX3JlbmRlcmluZzoKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVS X1BBUkFNX1NLSVBfUkVOREVSSU5HLCAxKQorLSAqLworLSAgICBfX3B5eF90XzEgPSAoKHN0cnVj dCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICop X19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4X3ZfcGFyYW1zLCBNUFZf UkVOREVSX1BBUkFNX0JMT0NLX0ZPUl9UQVJHRVRfVElNRSwgMCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwOTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3Rf MSA9IDA7CistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkyCist ICogICAgICAgICBpZiBkZXB0aCBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgICAgICBwYXJhbXMu YWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0RFUFRILCBkZXB0aCkKKy0gKiAgICAgICAgIGlmIG5v dCBibG9ja19mb3JfdGFyZ2V0X3RpbWU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0JMT0NLX0ZPUl9U QVJHRVRfVElNRSwgMCkKKy0gKiAgICAgICAgIGlmIHNraXBfcmVuZGVyaW5nOgorLSAqLworLSAg fQorLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTQKKy0gKiAgICAg ICAgIGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0X3RpbWU6CistICogICAgICAgICAgICAgcGFyYW1z LmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCistICog ICAgICAgICBpZiBza2lwX3JlbmRlcmluZzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fU0tJUF9SRU5E RVJJTkcsIDEpCistICogCistICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1Ry dWUoX19weXhfdl9za2lwX3JlbmRlcmluZyk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkg X19QWVhfRVJSKDAsIDEwOTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgaWYgKF9fcHl4X3RfMikgewor LQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NQorLSAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQkxPQ0tfRk9SX1RBUkdFVF9U SU1FLCAwKQorLSAqICAgICAgICAgaWYgc2tpcF9yZW5kZXJpbmc6CistICogICAgICAgICAgICAg cGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0g Ki8KKy0gICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+ YWRkX2ludChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywg MSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwOTUsIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDk0CistICogICAgICAgICBpZiBub3QgYmxvY2tfZm9yX3RhcmdldF90 aW1lOgorLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQkxP Q0tfRk9SX1RBUkdFVF9USU1FLCAwKQorLSAqICAgICAgICAgaWYgc2tpcF9yZW5kZXJpbmc6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2lu dChNUFZfUkVOREVSX1BBUkFNX1NLSVBfUkVOREVSSU5HLCAxKQorLSAqIAorLSAqLworLSAgfQor LQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTcKKy0gKiAgICAgICAg ICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX1NLSVBfUkVOREVSSU5HLCAxKQor LSAqIAorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgICAgIHJldCA9IG1wdl9yZW5kZXJfY29udGV4dF9yZW5kZXIoc2VsZi5f Y3R4LCBwYXJhbXMucGFyYW1zKQorLSAqICAgICAgICAgcmV0dXJuIHJldAorLSAqLworKy8qIFB5 dGhvbiB3cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF83c2V0KFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9i amVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKytzdGF0 aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFj a1RocmVhZF83c2V0ID0geyJzZXQiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldp dGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVh ZF83c2V0LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgMH07Cisrc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF83c2V0KFB5 T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4 X2t3ZHMpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYgPSAwOworKyAgUHlPYmplY3QgKl9f cHl4X3ZfY2FsbGJhY2sgPSAwOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBj aGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cisr ICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwor KyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldCAod3JhcHBlcikiLCAwKTsKKyAgIHsK Ky0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsK Ky0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVy KCk7CistICAgICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8geworLQorLSAgICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTgKKy0gKiAKKy0gKiAgICAgICAgIHdpdGgg bm9naWw6CistICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3JlbmRlcihz ZWxmLl9jdHgsIHBhcmFtcy5wYXJhbXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgIHJldHVybiByZXQKKy0gKiAKKy0gKi8KKy0gICAgICAgIF9fcHl4X3ZfcmV0ID0g bXB2X3JlbmRlcl9jb250ZXh0X3JlbmRlcihfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFy YW1zLT5wYXJhbXMpOworKyAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10g PSB7Jl9fcHl4X25fc19zZWxmLCZfX3B5eF9uX3NfY2FsbGJhY2ssMH07CisrICAgIFB5T2JqZWN0 KiB2YWx1ZXNbMl0gPSB7MCwwfTsKKysgICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7Cisr ICAgICAgUHlfc3NpemVfdCBrd19hcmdzOworKyAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2Fy Z3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpOworKyAgICAgIHN3aXRjaCAocG9zX2Fy Z3MpIHsKKysgICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMSk7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNl ICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworKyAgICAg ICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMDogYnJlYWs7CisrICAgICAg ICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworICAgICAgIH0KKy0KKy0g ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NworLSAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fU0tJUF9SRU5ERVJJTkcsIDEpCist ICogCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3JlbmRlcihzZWxmLl9j dHgsIHBhcmFtcy5wYXJhbXMpCistICogICAgICAgICByZXR1cm4gcmV0CistICovCistICAgICAg LypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICNp ZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAg ICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICBn b3RvIF9fcHl4X0wxNDsKKysgICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7 CisrICAgICAgc3dpdGNoIChwb3NfYXJncykgeworKyAgICAgICAgY2FzZSAgMDoKKysgICAgICAg IGlmIChsaWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3 ZHMsIF9fcHl4X25fc19zZWxmKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAgIGVsc2UgZ290 byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsK KysgICAgICAgIGNhc2UgIDE6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5 eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfY2FsbGJhY2spKSAhPSAw KSkga3dfYXJncy0tOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJn dHVwbGVJbnZhbGlkKCJzZXQiLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4 X0wzX2Vycm9yKQorICAgICAgICAgfQorLSAgICAgICAgX19weXhfTDE0OjsKKyAgICAgICB9Cisr ICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworKyAgICAgICAgaWYgKHVubGlrZWx5 KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVz LCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0IikgPCAwKSkgX19QWVhfRVJSKDAsIDExNDksIF9f cHl4X0wzX2Vycm9yKQorKyAgICAgIH0KKysgICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpF KF9fcHl4X2FyZ3MpICE9IDIpIHsKKysgICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9y OworKyAgICB9IGVsc2UgeworKyAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMCk7CisrICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9h cmdzLCAxKTsKKysgICAgfQorKyAgICBfX3B5eF92X3NlbGYgPSB2YWx1ZXNbMF07CisrICAgIF9f cHl4X3ZfY2FsbGJhY2sgPSB2YWx1ZXNbMV07CisgICB9CisrICBnb3RvIF9fcHl4X0w0X2FyZ3Vt ZW50X3VucGFja2luZ19kb25lOworKyAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6OworKyAgX19Q eXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInNldCIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUo X19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMTE0OSwgX19weXhfTDNfZXJyb3IpCisrICBfX3B5 eF9MM19lcnJvcjo7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5D YWxsYmFja1RocmVhZC5zZXQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2Zp bGVuYW1lKTsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIE5V TEw7CisrICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7CisrICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNnNldChfX3B5 eF9zZWxmLCBfX3B5eF92X3NlbGYsIF9fcHl4X3ZfY2FsbGJhY2spOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTkKKy0gKiAgICAgICAgIHdpdGggbm9naWw6Cist ICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3JlbmRlcihzZWxmLl9jdHgs IHBhcmFtcy5wYXJhbXMpCistICogICAgICAgICByZXR1cm4gcmV0ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisrCisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF82 c2V0KENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2NhbGxiYWNrKSB7CisrICBQeU9iamVjdCAqX19weXhf ciA9IE5VTEw7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgaW50IF9fcHl4X2xp bmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQg X19weXhfY2xpbmVubyA9IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0Iiwg MCk7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1MAorICAqIAor LSAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6CisrICogICAgIGRlZiBzZXQoc2VsZiwgY2Fs bGJhY2spOgorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgZGVmIHJ1bihzZWxmKToKKyAgKi8KKy0g IF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9t X2ludChfX3B5eF92X3JldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDEwOTksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBf X3B5eF9yID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKy0gIGdvdG8gX19weXhfTDA7 CisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25f c19jYWxsYmFjaywgX19weXhfdl9jYWxsYmFjaykgPCAwKSBfX1BZWF9FUlIoMCwgMTE1MCwgX19w eXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2 OQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDkKKysgKiAgICAgICAg IHNlbGYubG9jay5yZWxlYXNlKCkKKysgKiAKKysgKiAgICAgZGVmIHNldChzZWxmLCBjYWxsYmFj ayk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuY2FsbGJh Y2sgPSBjYWxsYmFjaworICAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgcmVuZGVy KHNlbGYsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICBv cGVuZ2xfZmJvPU5vbmUsCistICogICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorICAqLwor IAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9yID0gUHlfTm9uZTsgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworKyAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wxX2Vycm9y OjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhf dF80KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckNv bnRleHQucmVuZGVyIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFt ZSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1Ro cmVhZC5zZXQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsK KyAgIF9fcHl4X3IgPSBOVUxMOworICAgX19weXhfTDA6OworLSAgX19QeXhfWERFQ1JFRigoUHlP YmplY3QgKilfX3B5eF92X3BhcmFtcyk7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAg IF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQor IAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTAxCistICogICAgICAgICBy ZXR1cm4gcmV0CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTIKKysgKiAg ICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjaworICAqIAorLSAqICAgICBkZWYgcmVwb3J0 X3N3YXAoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHdp dGggbm9naWw6CistICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3JlcG9ydF9zd2Fw KHNlbGYuX2N0eCkKKysgKiAgICAgZGVmIHJ1bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNzaHV0ZG93bjoKKysgKiAgICAg ICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQorICAqLworIAorIC8qIFB5dGhvbiB3cmFw cGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNSZW5kZXJDb250ZXh0XzE1cmVwb3J0X3N3YXAoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lU SE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCistc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE1cmVwb3J0 X3N3YXAoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51 c2VkKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTRDYWxsYmFja1RocmVhZF85cnVuKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9zZWxmKTsgLypwcm90byovCisrc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfOXJ1biA9IHsicnVuIiwgKFB5Q0Z1 bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzly dW4sIE1FVEhfTywgMH07Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF85cnVuKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9zZWxmKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJl cG9ydF9zd2FwICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTRyZXBvcnRfc3dhcCgoKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYp KTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJydW4gKHdyYXBwZXIpIiwgMCk7Cisr ICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJl YWRfOHJ1bihfX3B5eF9zZWxmLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7CisgCisgICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNHJlcG9ydF9zd2FwKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4X3Zf c2VsZikgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzE0Q2FsbGJhY2tUaHJlYWRfOHJ1bihDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxm LCBQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7 CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoInJlcG9ydF9zd2FwIiwgMCk7CisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsK KysgIGludCBfX3B5eF90XzI7CisrICBpbnQgX19weXhfdF8zOworKyAgUHlPYmplY3QgKl9fcHl4 X3RfNCA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzYgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CisrICBp bnQgX19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVM TDsKKysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJydW4iLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTAyCistICogCistICogICAgIGRlZiByZXBvcnRfc3dhcChzZWxmKToKKy0gKiAgICAgICAgIHdp dGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBt cHZfcmVuZGVyX2NvbnRleHRfcmVwb3J0X3N3YXAoc2VsZi5fY3R4KQorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNTMKKyAgKiAKKysgKiAgICAgZGVmIHJ1bihzZWxmKToK KysgKiAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmlzc2h1dGRvd246ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQorKyAq ICAgICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNrKHNlbGYuY2FsbGJhY2spIGlmIHNlbGYuY2Fs bGJhY2sgZWxzZSBOb25lCisgICovCistICB7CistICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECist ICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgUHlfVU5CTE9DS19USFJFQURTCist ICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAgICNlbmRpZgorLSAgICAgIC8q dHJ5OiovIHsKKysgIHdoaWxlICgxKSB7CisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0 X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfaXNzaHV0ZG93bik7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNTMsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhf RVJSKDAsIDExNTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKKysgICAgX19weXhfdF8zID0gKCghX19weXhfdF8yKSAhPSAwKTsK KysgICAgaWYgKCFfX3B5eF90XzMpIGJyZWFrOworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExMDMKKy0gKiAgICAgZGVmIHJlcG9ydF9zd2FwKHNlbGYpOgor LSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRl eHRfcmVwb3J0X3N3YXAoc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU0CisrICogICAgIGRlZiBy dW4oc2VsZik6CisrICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3NodXRkb3duOgorKyAqICAg ICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBp ZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9uZQorICAqIAorLSAqICAgICBkZWYgZnJlZShzZWxmKToK KyAgKi8KKy0gICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9yZXBvcnRfc3dhcChfX3B5eF92X3Nl bGYtPl9jdHgpOworLSAgICAgIH0KKy0KKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEwMgorLSAqIAorLSAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6CistICog ICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3JlcG9ydF9zd2FwKHNlbGYuX2N0eCkKKysgICAg X19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4 X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTE1NCwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgICBfX3B5 eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNCwgX19weXhfbl9zX2Fj cXVpcmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAxMTU0LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CisrICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgICBfX3B5eF90XzQgPSBOVUxMOwor KyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzUpKSkgeworKyAgICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfNSk7CisrICAgICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CisrICAgICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF81KTsKKysgICAgICAg IF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworKyAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKKysgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF81LCBmdW5jdGlvbik7CisrICAg ICAgfQorKyAgICB9CisrICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmpl Y3RfQ2FsbDJBcmdzKF9fcHl4X3RfNSwgX19weXhfdF80LCBQeV9UcnVlKSA6IF9fUHl4X1B5T2Jq ZWN0X0NhbGxPbmVBcmcoX19weXhfdF81LCBQeV9UcnVlKTsKKysgICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxMTU0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwor KyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTUKKysgKiAgICAgICAgIHdoaWxlIG5v dCBzZWxmLmlzc2h1dGRvd246CisrICogICAgICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoVHJ1 ZSkKKysgKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBpZiBz ZWxmLmNhbGxiYWNrIGVsc2UgTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICog CisrICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgorICAqLworLSAgICAg IC8qZmluYWxseToqLyB7CistICAgICAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgICAgICAj aWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0g ICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAg Z290byBfX3B5eF9MNTsKKysgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jYWxsYmFjayk7IGlmICh1bmxpa2VseSghX19weXhf dF81KSkgX19QWVhfRVJSKDAsIDExNTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF81KTsKKysgICAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9f cHl4X3RfNSk7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDExNTUs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81 ID0gMDsKKysgICAgaWYgKF9fcHl4X3RfMykgeworKyAgICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5 T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfbXB2X2NhbGxiYWNrKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTE1NSwgX19weXhfTDFfZXJy b3IpCisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgICAgX19weXhfdF82ID0g X19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jYWxsYmFj ayk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExNTUsIF9fcHl4X0wx X2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKyAgICAgIF9fcHl4X3Rf NyA9IE5VTEw7CisrICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlN ZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKKysgICAgICAgIF9fcHl4X3RfNyA9IFB5TWV0aG9k X0dFVF9TRUxGKF9fcHl4X3RfNCk7CisrICAgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfNykpIHsK KysgICAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9f cHl4X3RfNCk7CisrICAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzcpOworKyAgICAgICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfNCwgZnVuY3Rpb24pOworICAgICAgICAgfQorLSAgICAgICAgX19weXhfTDU6OworICAg ICAgIH0KKysgICAgICBfX3B5eF90XzUgPSAoX19weXhfdF83KSA/IF9fUHl4X1B5T2JqZWN0X0Nh bGwyQXJncyhfX3B5eF90XzQsIF9fcHl4X3RfNywgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoX19weXhfdF80LCBfX3B5eF90XzYpOworKyAgICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKKysgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlY X0VSUigwLCAxMTU1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF81KTsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysg ICAgICBfX3B5eF90XzEgPSBfX3B5eF90XzU7CisrICAgICAgX19weXhfdF81ID0gMDsKKysgICAg fSBlbHNlIHsKKysgICAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICAgICAgX19weXhfdF8x ID0gUHlfTm9uZTsKKysgICAgfQorKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTAxCistICogICAgICAgICByZXR1cm4gcmV0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTE1MgorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisgICog CistICogICAgIGRlZiByZXBvcnRfc3dhcChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfcmVuZGVy X2NvbnRleHRfcmVwb3J0X3N3YXAoc2VsZi5fY3R4KQorKyAqICAgICBkZWYgcnVuKHNlbGYpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5p c3NodXRkb3duOgorKyAqICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCisgICov CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fcHl4X3IgPSBQeV9Ob25lOyBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOworKyAgX19weXhfTDFfZXJy b3I6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzQpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworKyAgX19QeXhfWERFQ1JFRihf X3B5eF90XzYpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOworKyAgX19QeXhfQWRkVHJh Y2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQucnVuIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsK KysgIF9fcHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDUKKy0gKiAgICAgICAgICAgICBtcHZfcmVu ZGVyX2NvbnRleHRfcmVwb3J0X3N3YXAoc2VsZi5fY3R4KQorKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTU3CisrICogICAgICAgICAgICAgc2VsZi5tcHZfY2FsbGJhY2soc2Vs Zi5jYWxsYmFjaykgaWYgc2VsZi5jYWxsYmFjayBlbHNlIE5vbmUKKyAgKiAKKy0gKiAgICAgZGVm IGZyZWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlm IG5vdCBzZWxmLmluaXRlZDoKKy0gKiAgICAgICAgICAgICByZXR1cm4KKysgKiAgICAgZGVmIG1w dl9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgIHRyeToKKysgKiAgICAgICAgICAgICBjYWxsYmFjaygpCisgICovCisgCisg LyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTdmcmVlKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8x N2ZyZWUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51 c2VkKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTRDYWxsYmFja1RocmVhZF8xMW1wdl9jYWxsYmFjayhQeU9iamVjdCAqX19weXhfc2VsZiwgUHlP YmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisrc3Rh dGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJh Y2tUaHJlYWRfMTFtcHZfY2FsbGJhY2sgPSB7Im1wdl9jYWxsYmFjayIsIChQeUNGdW5jdGlvbiko dm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNENhbGxiYWNrVGhyZWFkXzExbXB2X2NhbGxiYWNrLCBNRVRIX1ZBUkFSR1N8TUVUSF9L RVlXT1JEUywgMH07Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTRDYWxsYmFja1RocmVhZF8xMW1wdl9jYWxsYmFjayhQeU9iamVjdCAqX19weXhfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CisrICBDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYgPSAwOworKyAgUHlPYmplY3QgKl9fcHl4 X3ZfY2FsbGJhY2sgPSAwOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFy ICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBQ eU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImZyZWUgKHdyYXBwZXIpIiwgMCk7CistICBfX3B5 eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZy ZWUoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0 ICopX19weXhfdl9zZWxmKSk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgibXB2X2Nh bGxiYWNrICh3cmFwcGVyKSIsIDApOworKyAgeworKyAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5 eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19zZWxmLCZfX3B5eF9uX3NfY2FsbGJhY2ssMH07 CisrICAgIFB5T2JqZWN0KiB2YWx1ZXNbMl0gPSB7MCwwfTsKKysgICAgaWYgKHVubGlrZWx5KF9f cHl4X2t3ZHMpKSB7CisrICAgICAgUHlfc3NpemVfdCBrd19hcmdzOworKyAgICAgIGNvbnN0IFB5 X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpOworKyAgICAg IHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 CisrICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2Fy Z3MsIDApOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMDog YnJlYWs7CisrICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwor KyAgICAgIH0KKysgICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7CisrICAg ICAgc3dpdGNoIChwb3NfYXJncykgeworKyAgICAgICAgY2FzZSAgMDoKKysgICAgICAgIGlmIChs aWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9f cHl4X25fc19zZWxmKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAgIGVsc2UgZ290byBfX3B5 eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAg ICAgIGNhc2UgIDE6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURp Y3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfY2FsbGJhY2spKSAhPSAwKSkga3df YXJncy0tOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJ bnZhbGlkKCJtcHZfY2FsbGJhY2siLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDExNTcsIF9f cHl4X0wzX2Vycm9yKQorKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBpZiAodW5saWtlbHko a3dfYXJncyA+IDApKSB7CisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25h bEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2Fy Z3MsICJtcHZfY2FsbGJhY2siKSA8IDApKSBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDNfZXJy b3IpCisrICAgICAgfQorKyAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cykgIT0gMikgeworKyAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisrICAgIH0g ZWxzZSB7CisrICAgICAgdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAw KTsKKysgICAgICB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOwor KyAgICB9CisrICAgIF9fcHl4X3Zfc2VsZiA9IHZhbHVlc1swXTsKKysgICAgX19weXhfdl9jYWxs YmFjayA9IHZhbHVlc1sxXTsKKysgIH0KKysgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNr aW5nX2RvbmU7CisrICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CisrICBfX1B5eF9SYWlzZUFy Z3R1cGxlSW52YWxpZCgibXB2X2NhbGxiYWNrIiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0laRShf X3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MM19lcnJvcikKKysgIF9fcHl4 X0wzX2Vycm9yOjsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNh bGxiYWNrVGhyZWFkLm1wdl9jYWxsYmFjayIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICBy ZXR1cm4gTlVMTDsKKysgIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKysgIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8x MG1wdl9jYWxsYmFjayhfX3B5eF9zZWxmLCBfX3B5eF92X3NlbGYsIF9fcHl4X3ZfY2FsbGJhY2sp OworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTZmcmVlKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4 X3Zfc2VsZikgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTBtcHZfY2FsbGJhY2soQ1lUSE9OX1VOVVNFRCBQeU9iamVj dCAqX19weXhfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9jYWxsYmFjaykgeworKyAgUHlPYmplY3QgKl9fcHl4X3ZfZSA9IE5VTEw7 CisgICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucworLSAgaW50IF9fcHl4X3RfMTsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJm cmVlIiwgMCk7CisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIFB5T2JqZWN0ICpf X3B5eF90XzIgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CisrICBQeU9i amVjdCAqX19weXhfdF80ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwor KyAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7CisrICBpbnQgX19weXhfdF83OworKyAgUHlP YmplY3QgKl9fcHl4X3RfOCA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF85ID0gTlVMTDsK KysgIFB5T2JqZWN0ICpfX3B5eF90XzEwID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEx ID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAwOworKyAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworKyAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIm1wdl9jYWxsYmFjayIsIDApOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMDYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTU4CisgICogCistICogICAgIGRlZiBmcmVlKHNlbGYpOgorLSAqICAgICAgICAg aWYgbm90IHNlbGYuaW5pdGVkOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICAgICAgcmV0dXJuCistICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICBkZWYgbXB2 X2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrKToKKysgKiAgICAgICAgIHRyeTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGNhbGxiYWNrKCkKKysgKiAgICAgICAg IGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgKi8KKy0gIF9fcHl4X3RfMSA9ICgoIShfX3B5eF92 X3NlbGYtPmluaXRlZCAhPSAwKSkgIT0gMCk7CistICBpZiAoX19weXhfdF8xKSB7CisrICB7Cisr ICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQorKyAgICBfX1B5eF9QeVRocmVhZFN0YXRl X2Fzc2lnbgorKyAgICBfX1B5eF9FeGNlcHRpb25TYXZlKCZfX3B5eF90XzEsICZfX3B5eF90XzIs ICZfX3B5eF90XzMpOworKyAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4 X1hHT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzMpOworKyAg ICAvKnRyeToqLyB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTA3CistICogICAgIGRlZiBmcmVlKHNlbGYpOgorLSAqICAgICAgICAgaWYgbm90IHNlbGYuaW5p dGVkOgorLSAqICAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29u dGV4dF9mcmVlKHNlbGYuX2N0eCkKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTE1OQorKyAqICAgICBkZWYgbXB2X2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrKToKKysg KiAgICAgICAgIHRyeToKKysgKiAgICAgICAgICAgICBjYWxsYmFjaygpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKysgKiAg ICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJweW1wdiBlcnJvciBkdXJpbmcgY2FsbGJhY2s6 ICVzXG4iICUgZSkKKyAgKi8KKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19w eXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gICAgZ290byBfX3B5eF9M MDsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9jYWxsYmFjayk7CisrICAgICAgX19weXhf dF81ID0gX19weXhfdl9jYWxsYmFjazsgX19weXhfdF82ID0gTlVMTDsKKysgICAgICBpZiAoQ1lU SE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNSkp KSB7CisrICAgICAgICBfX3B5eF90XzYgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzUpOwor KyAgICAgICAgaWYgKGxpa2VseShfX3B5eF90XzYpKSB7CisrICAgICAgICAgIFB5T2JqZWN0KiBm dW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzUpOworKyAgICAgICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF82KTsKKysgICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKKysgICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzUsIGZ1bmN0aW9uKTsKKysg ICAgICAgIH0KKysgICAgICB9CisrICAgICAgX19weXhfdF80ID0gKF9fcHl4X3RfNikgPyBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwgX19weXhfdF82KSA6IF9fUHl4X1B5T2Jq ZWN0X0NhbGxOb0FyZyhfX3B5eF90XzUpOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKKysgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCAxMTU5LCBfX3B5eF9MM19lcnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF80KTsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKysg ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDYKKysgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1OAorICAqIAorLSAqICAgICBkZWYgZnJlZShzZWxmKToK Ky0gKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgICAgIHJldHVybgorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKysg KiAgICAgZGVmIG1wdl9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6CisrICogICAgICAgICB0cnk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBjYWxsYmFjaygp CisrICogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICovCistICB9CisrICAgIH0K KysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgICAgZ290byBfX3B5eF9MOF90cnlfZW5kOwor KyAgICBfX3B5eF9MM19lcnJvcjo7CisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19w eXhfdF80ID0gMDsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAw OworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwOAorLSAqICAgICAgICAgaWYgbm90 IHNlbGYuaW5pdGVkOgorLSAqICAgICAgICAgICAgIHJldHVybgorLSAqICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG1wdl9y ZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0eCkKKy0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0g RmFsc2UKKy0gKi8KKy0gIHsKKy0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRo cmVhZFN0YXRlICpfc2F2ZTsKKy0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5 eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAgICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8gewor LQorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDkKKy0gKiAg ICAgICAgICAgICByZXR1cm4KKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAg ICAgbXB2X3JlbmRlcl9jb250ZXh0X2ZyZWUoc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTYwCisrICogICAgICAgICB0cnk6CisrICogICAg ICAgICAgICAgY2FsbGJhY2soKQorKyAqICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgc3lzLnN0ZGVyci53 cml0ZSgicHltcHYgZXJyb3IgZHVyaW5nIGNhbGxiYWNrOiAlc1xuIiAlIGUpCisgICogCisgICov CistICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShfX3B5eF92X3NlbGYtPl9jdHgpOwor LSAgICAgIH0KKysgICAgX19weXhfdF83ID0gX19QeXhfUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcygo KFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0aW9uKVswXSkpKTsKKysg ICAgaWYgKF9fcHl4X3RfNykgeworKyAgICAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2LkNhbGxiYWNrVGhyZWFkLm1wdl9jYWxsYmFjayIsIF9fcHl4X2NsaW5lbm8sIF9f cHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgICAgIGlmIChfX1B5eF9HZXRFeGNlcHRp b24oJl9fcHl4X3RfNCwgJl9fcHl4X3RfNSwgJl9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwg MTE2MCwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzQpOworKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworKyAgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworKyAgICAgIF9f cHl4X3ZfZSA9IF9fcHl4X3RfNTsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEwOAorLSAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgorLSAqICAgICAg ICAgICAgIHJldHVybgorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYu X2N0eCkKKy0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKKysgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2MQorKyAqICAgICAgICAgICAgIGNhbGxiYWNrKCkK KysgKiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKysgKiAgICAgICAgICAgICBzeXMu c3RkZXJyLndyaXRlKCJweW1wdiBlcnJvciBkdXJpbmcgY2FsbGJhY2s6ICVzXG4iICUgZSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAqIGNkZWYgdm9pZCBfY19jYWxsYmFj ayh2b2lkKiBkKSB3aXRoIGdpbDoKKyAgKi8KKy0gICAgICAvKmZpbmFsbHk6Ki8geworLSAgICAg ICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAg ICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CistICAgICAgICAgIFB5X0JMT0NLX1RIUkVB RFMKKy0gICAgICAgICAgI2VuZGlmCistICAgICAgICAgIGdvdG8gX19weXhfTDY7CisrICAgICAg X19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzksIF9fcHl4X25fc19zeXMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlYX0VSUigwLCAxMTYxLCBfX3B5eF9MNV9leGNlcHRf ZXJyb3IpCisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfOSk7CisrICAgICAgX19weXhfdF8x MCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF85LCBfX3B5eF9uX3Nfc3RkZXJy KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEwKSkgX19QWVhfRVJSKDAsIDExNjEsIF9fcHl4X0w1 X2V4Y2VwdF9lcnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xMCk7CisrICAgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7CisrICAgICAgX19weXhfdF85 ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzEwLCBfX3B5eF9uX3Nfd3JpdGUp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlYX0VSUigwLCAxMTYxLCBfX3B5eF9MNV9l eGNlcHRfZXJyb3IpCisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfOSk7CisrICAgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMTApOyBfX3B5eF90XzEwID0gMDsKKysgICAgICBfX3B5eF90XzEw ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0U2FmZShfX3B5eF9rcF9zX3B5bXB2X2Vycm9yX2R1cmlu Z19jYWxsYmFja19zLCBfX3B5eF92X2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMTApKSBfX1BZ WF9FUlIoMCwgMTE2MSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEwKTsKKysgICAgICBfX3B5eF90XzExID0gTlVMTDsKKysgICAgICBpZiAoQ1lU SE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzkpKSkg eworKyAgICAgICAgX19weXhfdF8xMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfOSk7Cisr ICAgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfMTEpKSB7CisrICAgICAgICAgIFB5T2JqZWN0KiBm dW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzkpOworKyAgICAgICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF8xMSk7CisrICAgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlv bik7CisrICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF85LCBmdW5jdGlvbik7Cisg ICAgICAgICB9CistICAgICAgICBfX3B5eF9MNjo7CisgICAgICAgfQorLSAgfQorKyAgICAgIF9f cHl4X3RfOCA9IChfX3B5eF90XzExKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzksIF9fcHl4X3RfMTEsIF9fcHl4X3RfMTApIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzksIF9fcHl4X3RfMTApOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xMSk7 IF9fcHl4X3RfMTEgPSAwOworKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEwKTsgX19weXhf dF8xMCA9IDA7CisrICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBfX1BZWF9FUlIoMCwg MTE2MSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzgpOworKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90XzkgPSAwOworKyAg ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworKyAgICAgIF9fUHl4 X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgICAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICAgIGdvdG8gX19weXhfTDRfZXhjZXB0aW9uX2hhbmRs ZWQ7CisrICAgIH0KKysgICAgZ290byBfX3B5eF9MNV9leGNlcHRfZXJyb3I7CisrICAgIF9fcHl4 X0w1X2V4Y2VwdF9lcnJvcjo7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTExMAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfcmVu ZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCistICogICAgICAgICBzZWxmLmluaXRlZCA9IEZh bHNlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExNTgKKyAgKiAKKy0gKiAgICAgZGVmIGNsb3NlKHNlbGYpOgorKyAq ICAgICBkZWYgbXB2X2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrKToKKysgKiAgICAgICAgIHRyeTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGNhbGxiYWNrKCkK KysgKiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgKi8KKy0gIF9fcHl4X3Zfc2Vs Zi0+aW5pdGVkID0gMDsKKysgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xKTsKKysgICAgX19Q eXhfWEdJVkVSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8zKTsK KysgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xLCBfX3B5eF90XzIsIF9fcHl4X3Rf Myk7CisrICAgIGdvdG8gX19weXhfTDFfZXJyb3I7CisrICAgIF9fcHl4X0w0X2V4Y2VwdGlvbl9o YW5kbGVkOjsKKysgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xKTsKKysgICAgX19QeXhfWEdJ VkVSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8zKTsKKysgICAg X19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xLCBfX3B5eF90XzIsIF9fcHl4X3RfMyk7Cisr ICAgIF9fcHl4X0w4X3RyeV9lbmQ6OworKyAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExMDUKKy0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfcmVw b3J0X3N3YXAoc2VsZi5fY3R4KQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExNTcKKysgKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBp ZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9uZQorICAqIAorLSAqICAgICBkZWYgZnJlZShzZWxmKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgaWYgbm90IHNlbGYuaW5p dGVkOgorLSAqICAgICAgICAgICAgIHJldHVybgorKyAqICAgICBkZWYgbXB2X2NhbGxiYWNrKHNl bGYsIGNhbGxiYWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg dHJ5OgorKyAqICAgICAgICAgICAgIGNhbGxiYWNrKCkKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLworICAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25l KTsKKysgIGdvdG8gX19weXhfTDA7CisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CisrICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7CisrICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfOSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTApOworKyAg X19QeXhfWERFQ1JFRihfX3B5eF90XzExKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0 dGVyLmxpYnMubXB2LkNhbGxiYWNrVGhyZWFkLm1wdl9jYWxsYmFjayIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhfciA9IE5VTEw7CisgICBf X3B5eF9MMDo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfZSk7CisgICBfX1B5eF9YR0lWRVJF RihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJu IF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTEy CistICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCisrLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExNjMKKysgKiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJweW1w diBlcnJvciBkdXJpbmcgY2FsbGJhY2s6ICVzXG4iICUgZSkKKyAgKiAKKy0gKiAgICAgZGVmIGNs b3NlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBpZiBu b3Qgc2VsZi5pbml0ZWQ6CistICogICAgICAgICAgICAgcmV0dXJuCisrICogY2RlZiB2b2lkIF9j X2NhbGxiYWNrKHZvaWQqIGQpIHdpdGggZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgIGNkZWYgdWludDY0X3QgbmFtZSA9IDx1aW50NjRfdD5kCisrICogICAgIGNhbGxi YWNrID0gX2NhbGxiYWNrcy5nZXQobmFtZSkKKyAgKi8KKyAKKy0vKiBQeXRob24gd3JhcHBlciAq LworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVu ZGVyQ29udGV4dF8xOWNsb3NlKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xOWNsb3NlKFB5T2JqZWN0ICpf X3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgeworLSAgUHlPYmpl Y3QgKl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjbG9zZSAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3Ig PSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE4Y2xvc2Uo KChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICop X19weXhfdl9zZWxmKSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29u dGV4dF8xOGNsb3NlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckNvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwor K3N0YXRpYyB2b2lkIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX2NhbGxiYWNrKHZv aWQgKl9fcHl4X3ZfZCkgeworKyAgdWludDY0X3QgX19weXhfdl9uYW1lOworKyAgUHlPYmplY3Qg Kl9fcHl4X3ZfY2FsbGJhY2sgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK Ky0gIGludCBfX3B5eF90XzE7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiY2xvc2Ui LCAwKTsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4 X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzQgPSBOVUxMOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBj aGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cisr ICAjaWZkZWYgV0lUSF9USFJFQUQKKysgIFB5R0lMU3RhdGVfU1RBVEUgX19weXhfZ2lsc3RhdGVf c2F2ZSA9IF9fUHl4X1B5R0lMU3RhdGVfRW5zdXJlKCk7CisrICAjZW5kaWYKKysgIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfY19jYWxsYmFjayIsIDApOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMTMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTY0CisgICogCistICogICAgIGRlZiBjbG9zZShzZWxmKToKKy0gKiAgICAgICAg IGlmIG5vdCBzZWxmLmluaXRlZDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgIHJldHVybgorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiBjZGVmIHZvaWQg X2NfY2FsbGJhY2sodm9pZCogZCkgd2l0aCBnaWw6CisrICogICAgIGNkZWYgdWludDY0X3QgbmFt ZSA9IDx1aW50NjRfdD5kICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgY2Fs bGJhY2sgPSBfY2FsbGJhY2tzLmdldChuYW1lKQorKyAqICAgICBjYWxsYmFjay5jYWxsKCkKKyAg Ki8KKy0gIF9fcHl4X3RfMSA9ICgoIShfX3B5eF92X3NlbGYtPmluaXRlZCAhPSAwKSkgIT0gMCk7 CistICBpZiAoX19weXhfdF8xKSB7CisrICBfX3B5eF92X25hbWUgPSAoKHVpbnQ2NF90KV9fcHl4 X3ZfZCk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE0Cist ICogICAgIGRlZiBjbG9zZShzZWxmKToKKy0gKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoK Ky0gKiAgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRf ZnJlZShzZWxmLl9jdHgpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2 NQorKyAqIGNkZWYgdm9pZCBfY19jYWxsYmFjayh2b2lkKiBkKSB3aXRoIGdpbDoKKysgKiAgICAg Y2RlZiB1aW50NjRfdCBuYW1lID0gPHVpbnQ2NF90PmQKKysgKiAgICAgY2FsbGJhY2sgPSBfY2Fs bGJhY2tzLmdldChuYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGNh bGxiYWNrLmNhbGwoKQorICAqLworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBf X3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgICBnb3RvIF9fcHl4 X0wwOworKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fY2FsbGJhY2tzLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTE2NSwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21f dWludDY0X3QoX19weXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgMTE2NSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsK KysgIF9fcHl4X3RfNCA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICBfX3B5eF90XzQgPSBQeU1l dGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsK KysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhf dF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsKKysgICAgICBfX1B5eF9JTkNS RUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlv bik7CisrICAgIH0KKysgIH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlP YmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8z KTsgX19weXhfdF8zID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDExNjUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Cisr ICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fcHl4X3ZfY2Fs bGJhY2sgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExMworLSAqIAorLSAqICAgICBkZWYgY2xvc2Uoc2Vs Zik6CistICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByZXR1cm4KKy0gKiAgICAgICAgIHdpdGggbm9naWw6 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2NgorKyAqICAgICBjZGVm IHVpbnQ2NF90IG5hbWUgPSA8dWludDY0X3Q+ZAorKyAqICAgICBjYWxsYmFjayA9IF9jYWxsYmFj a3MuZ2V0KG5hbWUpCisrICogICAgIGNhbGxiYWNrLmNhbGwoKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICovCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KF9fcHl4X3ZfY2FsbGJhY2ssIF9fcHl4X25fc19jYWxsKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgMTE2NiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYo X19weXhfdF8yKTsKKysgIF9fcHl4X3RfMyA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19N RVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICBfX3B5 eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICBpZiAobGlrZWx5KF9f cHl4X3RfMykpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVO Q1RJT04oX19weXhfdF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKKysgICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhf dF8yLCBmdW5jdGlvbik7CisrICAgIH0KKyAgIH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMp ID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5 eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dF8zKTsgX19weXhfdF8zID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDExNjYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExMTUKKy0gKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKy0g KiAgICAgICAgICAgICByZXR1cm4KKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJl ZShzZWxmLl9jdHgpCistICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCistICovCistICB7 CistICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7 CistICAgICAgUHlfVU5CTE9DS19USFJFQURTCistICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJl cigpOworLSAgICAgICNlbmRpZgorLSAgICAgIC8qdHJ5OiovIHsKKy0KKy0gICAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE2CistICogICAgICAgICAgICAgcmV0dXJu CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29u dGV4dF9mcmVlKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQorLSAqIAorLSAqLworLSAgICAgICAgbXB2X3JlbmRl cl9jb250ZXh0X2ZyZWUoX19weXhfdl9zZWxmLT5fY3R4KTsKKy0gICAgICB9CistCistICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTUKKy0gKiAgICAgICAgIGlmIG5v dCBzZWxmLmluaXRlZDoKKy0gKiAgICAgICAgICAgICByZXR1cm4KKy0gKiAgICAgICAgIHdpdGgg bm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBtcHZf cmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCistICogICAgICAgICBzZWxmLmluaXRlZCA9 IEZhbHNlCistICovCistICAgICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4 aXQ6Ki97CistICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9G YXN0R0lMX0ZvcmdldCgpOworLSAgICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAg ICNlbmRpZgorLSAgICAgICAgICBnb3RvIF9fcHl4X0w2OworLSAgICAgICAgfQorLSAgICAgICAg X19weXhfTDY6OworLSAgICAgIH0KKy0gIH0KKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTE3CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAg IG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0eCkKKy0gKiAgICAgICAgIHNlbGYuaW5p dGVkID0gRmFsc2UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICBk ZWYgX19kZWFsbG9jX18oc2VsZik6CistICovCistICBfX3B5eF92X3NlbGYtPmluaXRlZCA9IDA7 CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExMgorLSAqICAgICAg ICAgc2VsZi5pbml0ZWQgPSBGYWxzZQorLSAqIAorLSAqICAgICBkZWYgY2xvc2Uoc2VsZik6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRl ZDoKKy0gKiAgICAgICAgICAgICByZXR1cm4KKy0gKi8KKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0g IF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTkKKy0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0g RmFsc2UKKy0gKiAKKy0gKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmNsb3NlKCkKKy0gKiAKKy0gKi8KKy0K Ky0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyB2b2lkIF9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjFfX2RlYWxsb2NfXyhQeU9iamVjdCAqX19weXhf dl9zZWxmKTsgLypwcm90byovCistc3RhdGljIHZvaWQgX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzUmVuZGVyQ29udGV4dF8yMV9fZGVhbGxvY19fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYpIHsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19kZWFsbG9jX18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzIwX19kZWFsbG9jX18oKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopX19weXhfdl9z ZWxmKSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOworLX0KKy0KKy1zdGF0aWMgdm9pZCBfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzIwX19kZWFsbG9jX18oc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmKSB7Cist ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5V TEw7CistICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90 XzMgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5 eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18iLCAwKTsKKy0KKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTIwCistICogCistICogICAgIGRlZiBfX2RlYWxsb2Nf XyhzZWxmKToKKy0gKiAgICAgICAgIHNlbGYuY2xvc2UoKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogCistICogY2RlZiBjbGFzcyBPcGVuR0xSZW5kZXJDb250ZXh0KFJlbmRlckNv bnRleHQpOgorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigo KFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX2Nsb3NlKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTEyMCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IE5VTEw7CistICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewor LSAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICBpZiAo bGlrZWx5KF9fcHl4X3RfMykpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhv ZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8z KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9T RVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfMSA9IChf X3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3Rf MykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDExMjAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLQorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTkKKy0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0g RmFsc2UKKy0gKiAKKy0gKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmNsb3NlKCkKKy0gKiAKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTYzCisrICogICAgICAgICAgICAgc3lzLnN0 ZGVyci53cml0ZSgicHltcHYgZXJyb3IgZHVyaW5nIGNhbGxiYWNrOiAlc1xuIiAlIGUpCisrICog CisrICogY2RlZiB2b2lkIF9jX2NhbGxiYWNrKHZvaWQqIGQpIHdpdGggZ2lsOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGNkZWYgdWludDY0X3QgbmFtZSA9IDx1aW50NjRf dD5kCisrICogICAgIGNhbGxiYWNrID0gX2NhbGxiYWNrcy5nZXQobmFtZSkKKyAgKi8KKyAKKyAg IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworQEAgLTIxNDE1LDc3NCArMjA1NTAsMTI0NCBAQCBz dGF0aWMgdm9pZCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0 XzIwX19kZWFsbG9jX18oc3RydWN0CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Cist ICBfX1B5eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0 Ll9fZGVhbGxvY19fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFt ZSwgMSwgMCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CisrICBfX1B5eF9Xcml0ZVVu cmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5fY19jYWxsYmFjayIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUsIDEsIDApOworICAgX19weXhfTDA6OworKyAg X19QeXhfWERFQ1JFRihfX3B5eF92X2NhbGxiYWNrKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOworKyAgI2lmZGVmIFdJVEhfVEhSRUFECisrICBfX1B5eF9QeUdJTFN0YXRlX1Jl bGVhc2UoX19weXhfZ2lsc3RhdGVfc2F2ZSk7CisrICAjZW5kaWYKKyB9CisgCisgLyogIih0cmVl IGZyYWdtZW50KSI6MQorLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBj YW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorLSAq IGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiBkZWYgX19w eXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZChfX3B5eF90eXBlLCBsb25nIF9fcHl4X2NoZWNr c3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg Y2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhf cmVzdWx0CisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjNfX3JlZHVj ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0 ICp1bnVzZWQpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjNfX3JlZHVjZV9jeXRob25fXyhQeU9iamVj dCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X19weXhfdW5waWNr bGVfRW5kT2ZGaWxlUmVhY2hlZChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisrc3RhdGljIFB5TWV0aG9k RGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfX3B5eF91bnBpY2tsZV9FbmRP ZkZpbGVSZWFjaGVkID0geyJfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkIiwgKFB5Q0Z1 bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzdfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkLCBNRVRIX1ZBUkFS R1N8TUVUSF9LRVlXT1JEUywgMH07Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN19fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQoUHlPYmplY3Qg Kl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykg eworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSA9IDA7CisrICBsb25nIF9fcHl4X3Zf X19weXhfY2hlY2tzdW07CisrICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSA9IDA7Cisr ICBpbnQgX19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0g MDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yMl9fcmVkdWNl X2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo Il9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQgKHdyYXBwZXIpIiwgMCk7CisrICB7Cisr ICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3B5 eF90eXBlLCZfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCZfX3B5eF9uX3NfcHl4X3N0YXRlLDB9Owor KyAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCwwfTsKKysgICAgaWYgKHVubGlrZWx5KF9f cHl4X2t3ZHMpKSB7CisrICAgICAgUHlfc3NpemVfdCBrd19hcmdzOworKyAgICAgIGNvbnN0IFB5 X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpOworKyAgICAg IHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 CisrICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2Fy Z3MsIDEpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMTog dmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKysgICAgICAgIENZ VEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDA6IGJyZWFrOworKyAgICAgICAgZGVm YXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgICB9CisrICAgICAga3df YXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworKyAgICAgIHN3aXRjaCAocG9zX2FyZ3Mp IHsKKysgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBf X1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X3R5cGUpKSAh PSAwKSkga3dfYXJncy0tOworKyAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vy cm9yOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMToKKysg ICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9f cHl4X2t3ZHMsIF9fcHl4X25fc19weXhfY2hlY2tzdW0pKSAhPSAwKSkga3dfYXJncy0tOworKyAg ICAgICAgZWxzZSB7CisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5 eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkIiwgMSwgMywgMywgMSk7IF9fUFlYX0VSUigxLCAx LCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgIH0KKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VH SDsKKysgICAgICAgIGNhc2UgIDI6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMl0gPSBf X1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X3N0YXRlKSkg IT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICBfX1B5eF9SYWlz ZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCIsIDEsIDMs IDMsIDIpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCisrICAgICAgICB9CisrICAg ICAgfQorKyAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKysgICAgICAgIGlmICh1 bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlh cmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJl YWNoZWQiKSA8IDApKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCisrICAgICAgfQor KyAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0gMykgeworKyAg ICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisrICAgIH0gZWxzZSB7CisrICAgICAg dmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKysgICAgICB2YWx1 ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAgICAgIHZhbHVlc1sy XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CisrICAgIH0KKysgICAgX19weXhf dl9fX3B5eF90eXBlID0gdmFsdWVzWzBdOworKyAgICBfX3B5eF92X19fcHl4X2NoZWNrc3VtID0g X19QeXhfUHlJbnRfQXNfbG9uZyh2YWx1ZXNbMV0pOyBpZiAodW5saWtlbHkoKF9fcHl4X3ZfX19w eXhfY2hlY2tzdW0gPT0gKGxvbmcpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIo MSwgMSwgX19weXhfTDNfZXJyb3IpCisrICAgIF9fcHl4X3ZfX19weXhfc3RhdGUgPSB2YWx1ZXNb Ml07CisrICB9CisrICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworKyAg X19weXhfTDVfYXJndHVwbGVfZXJyb3I6OworKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQo Il9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQiLCAxLCAzLCAzLCBQeVR1cGxlX0dFVF9T SVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorKyAgX19w eXhfTDNfZXJyb3I6OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYu X19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xp bmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 CisrICByZXR1cm4gTlVMTDsKKysgIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsK KysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNl9fcHl4X3VucGlj a2xlX0VuZE9mRmlsZVJlYWNoZWQoX19weXhfc2VsZiwgX19weXhfdl9fX3B5eF90eXBlLCBfX3B5 eF92X19fcHl4X2NoZWNrc3VtLCBfX3B5eF92X19fcHl4X3N0YXRlKTsKKyAKKyAgIC8qIGZ1bmN0 aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICBy ZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzIyX19yZWR1Y2VfY3l0aG9uX18oQ1lUSE9O X1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250 ZXh0ICpfX3B5eF92X3NlbGYpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl82X19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZChDWVRIT05fVU5V U0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF90eXBlLCBs b25nIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRl KSB7CisrICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvciA9IDA7CisrICBQeU9i amVjdCAqX19weXhfdl9fX3B5eF9yZXN1bHQgPSAwOworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBO VUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90 XzEgPSBOVUxMOworKyAgaW50IF9fcHl4X3RfMTsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBO VUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhf dF80ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOworKyAgaW50IF9fcHl4 X3RfNjsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmls ZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fIiwgMCk7CisrICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCIsIDApOworIAor LSAgLyogIih0cmVlIGZyYWdtZW50KSI6MgorLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxm KToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRl ZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToK Ky0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0 byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKysgIC8qICIodHJlZSBmcmFnbWVudCki OjQKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBv YmplY3QgX19weXhfcmVzdWx0CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4NTZiZTli NjogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZnJvbSBwaWNrbGUg aW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlz ZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHg1NmJl OWI2ID0gKGVycm9yLCByZWFzb24pKSIgJSBfX3B5eF9jaGVja3N1bSkKKyAgKi8KKy0gIF9fcHl4 X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3IsIF9fcHl4 X3R1cGxlX18xNywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEs IDIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5 eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistICBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzEgPSAoKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gIT0gMHg1NmJlOWI2KSAhPSAwKTsK KysgIGlmIChfX3B5eF90XzEpIHsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0gKiBk ZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0 byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRo b25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjUKKysg KiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3Vt ICE9IDB4NTZiZTliNjoKKysgKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJv ciBhcyBfX3B5eF9QaWNrbGVFcnJvciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAo JXMgdnMgMHg1NmJlOWI2ID0gKGVycm9yLCByZWFzb24pKSIgJSBfX3B5eF9jaGVja3N1bSkKKysg KiAgICAgX19weXhfcmVzdWx0ID0gRW5kT2ZGaWxlUmVhY2hlZC5fX25ld19fKF9fcHl4X3R5cGUp CisgICovCisrICAgIF9fcHl4X3RfMiA9IFB5TGlzdF9OZXcoMSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19QaWNrbGVFcnJvcik7 CisrICAgIF9fUHl4X0dJVkVSRUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKysgICAgUHlMaXN0 X1NFVF9JVEVNKF9fcHl4X3RfMiwgMCwgX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKysgICAgX19w eXhfdF8zID0gX19QeXhfSW1wb3J0KF9fcHl4X25fc19waWNrbGUsIF9fcHl4X3RfMiwgLTEpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikK KysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9JbXBvcnRGcm9tKF9f cHl4X3RfMywgX19weXhfbl9zX1BpY2tsZUVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdl9fX3B5 eF9QaWNrbGVFcnJvciA9IF9fcHl4X3RfMjsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMg PSAwOworIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0Ll9fcmVkdWNlX2N5dGhvbl9fIiwgX19weXhf Y2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVM TDsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistLyogIih0cmVlIGZyYWdtZW50 KSI6MworLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKy0gKiAgICAgcmFpc2UgVHlw ZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3Qg Zm9yIHBpY2tsaW5nIikKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9z dGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcmFpc2UgVHlwZUVy cm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9y IHBpY2tsaW5nIikKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6NgorKyAqICAgICBpZiBfX3B5 eF9jaGVja3N1bSAhPSAweDU2YmU5YjY6CisrICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQg UGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgICAgIHJhaXNlIF9fcHl4 X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDU2YmU5YjYgPSAo ZXJyb3IsIHJlYXNvbikpIiAlIF9fcHl4X2NoZWNrc3VtKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgIF9fcHl4X3Jlc3VsdCA9IEVuZE9mRmlsZVJlYWNoZWQuX19uZXdfXyhf X3B5eF90eXBlKQorKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKyAgKi8KKysg ICAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9sb25nKF9fcHl4X3ZfX19weXhfY2hlY2tz dW0pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9l cnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICAgIF9fcHl4X3RfNCA9IF9f UHl4X1B5U3RyaW5nX0Zvcm1hdChfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192 c18weDU2LCBfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigx LCA2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX1B5eF9JTkNS RUYoX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcik7CisrICAgIF9fcHl4X3RfMiA9IF9fcHl4X3Zf X19weXhfUGlja2xlRXJyb3I7IF9fcHl4X3RfNSA9IE5VTEw7CisrICAgIGlmIChDWVRIT05fVU5Q QUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKysg ICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICAgIGlm IChsaWtlbHkoX19weXhfdF81KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CisrICAgICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF81KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQorKyAg ICBfX3B5eF90XzMgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzIsIF9fcHl4X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8yLCBfX3B5eF90XzQpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9f cHl4X3RfNSA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAw OworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9M MV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX1B5eF9SYWlzZShfX3B5eF90XzMs IDAsIDAsIDApOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsK KysgICAgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorIAorLS8qIFB5dGhvbiB3cmFw cGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNSZW5kZXJDb250ZXh0XzI1X19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9z ZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qcHJvdG8qLworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8y NV9fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3ZfX19weXhfc3RhdGUpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19z ZXRzdGF0ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzI0X19zZXRzdGF0ZV9jeXRob25f XygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQg KilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOworKyAg ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0CisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2ts ZUVycm9yCisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorKyAqICAgICBpZiBfX3B5 eF9jaGVja3N1bSAhPSAweDU2YmU5YjY6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVF cnJvcgorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBj aGVja3N1bXMgKCVzIHZzIDB4NTZiZTliNiA9IChlcnJvciwgcmVhc29uKSkiICUgX19weXhfY2hl Y2tzdW0pCisrICovCisrICB9CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAg LyogIih0cmVlIGZyYWdtZW50KSI6NworKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBp Y2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlzZSBfX3B5eF9Q aWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHg1NmJlOWI2ID0gKGVy cm9yLCByZWFzb24pKSIgJSBfX3B5eF9jaGVja3N1bSkKKysgKiAgICAgX19weXhfcmVzdWx0ID0g RW5kT2ZGaWxlUmVhY2hlZC5fX25ld19fKF9fcHl4X3R5cGUpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6CisrICogICAgICAg ICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoPEVuZE9mRmlsZVJl YWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICovCisrICBfX3B5eF90XzIgPSBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCksIF9fcHl4X25fc19uZXcpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgX19weXhfdF80ID0gTlVMTDsKKysgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7 CisrICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CisrICAgIGlm IChsaWtlbHkoX19weXhfdF80KSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0 aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzQpOworKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKysgICAgfQorKyAgfQorKyAgX19weXhfdF8zID0g KF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90 XzQsIF9fcHl4X3ZfX19weXhfdHlwZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfMiwgX19weXhfdl9fX3B5eF90eXBlKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEs IDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fcHl4X3ZfX19weXhfcmVz dWx0ID0gX19weXhfdF8zOworKyAgX19weXhfdF8zID0gMDsKKyAKKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjRfX3NldHN0 YXRlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2Jq ZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7 CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9 IE5VTEw7CistICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0IGNoYXIgKl9fcHl4X2Zp bGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fIiwgMCk7CisrICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjo4CisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21w YXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHg1NmJlOWI2ID0gKGVycm9yLCByZWFzb24pKSIgJSBf X3B5eF9jaGVja3N1bSkKKysgKiAgICAgX19weXhfcmVzdWx0ID0gRW5kT2ZGaWxlUmVhY2hlZC5f X25ld19fKF9fcHl4X3R5cGUpCisrICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBfX3B5eF91bnBpY2tsZV9F bmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoPEVuZE9mRmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3Vs dCwgX19weXhfc3RhdGUpCisrICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKysgKi8KKysgIF9f cHl4X3RfMSA9IChfX3B5eF92X19fcHl4X3N0YXRlICE9IFB5X05vbmUpOworKyAgX19weXhfdF82 ID0gKF9fcHl4X3RfMSAhPSAwKTsKKysgIGlmIChfX3B5eF90XzYpIHsKKyAKKy0gIC8qICIodHJl ZSBmcmFnbWVudCkiOjQKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90 IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYg X19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CistICogICAgIHJhaXNlIFR5 cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0 IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgICAgLyogIih0 cmVlIGZyYWdtZW50KSI6OQorKyAqICAgICBfX3B5eF9yZXN1bHQgPSBFbmRPZkZpbGVSZWFjaGVk Ll9fbmV3X18oX19weXhfdHlwZSkKKysgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6 CisrICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUo PEVuZE9mRmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorKyAqIGNkZWYg X19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKEVuZE9mRmlsZVJlYWNo ZWQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisgICovCistICBfX3B5eF90XzEg PSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2J1aWx0aW5fVHlwZUVycm9yLCBfX3B5eF90dXBs ZV9fMTgsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCA0LCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfUmFp c2UoX19weXhfdF8xLCAwLCAwLCAwKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworLSAgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAo IShsaWtlbHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5 eF92X19fcHl4X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJy b3IsICJFeHBlY3RlZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5X1RZUEUoX19weXhf dl9fX3B5eF9zdGF0ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCA5LCBfX3B5eF9MMV9l cnJvcikKKysgICAgX19weXhfdF8zID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19w eXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKCgoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqKV9fcHl4X3ZfX19weXhf cmVzdWx0KSwgKChQeU9iamVjdCopX19weXhfdl9fX3B5eF9zdGF0ZSkpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA5LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MworLSAqIGRlZiBfX3JlZHVjZV9j eXRob25fXyhzZWxmKToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90 IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYg X19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJl IGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKysgICAgLyogIih0 cmVlIGZyYWdtZW50KSI6OAorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIklu Y29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4NTZiZTliNiA9IChlcnJvciwgcmVhc29uKSki ICUgX19weXhfY2hlY2tzdW0pCisrICogICAgIF9fcHl4X3Jlc3VsdCA9IEVuZE9mRmlsZVJlYWNo ZWQuX19uZXdfXyhfX3B5eF90eXBlKQorKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9u ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgX19weXhfdW5waWNr bGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKDxFbmRPZkZpbGVSZWFjaGVkPiBfX3B5eF9y ZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CisrICovCisr ICB9CisrCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMAorKyAqICAgICBpZiBfX3B5eF9zdGF0 ZSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNo ZWRfX3NldF9zdGF0ZSg8RW5kT2ZGaWxlUmVhY2hlZD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0 ZSkKKysgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogY2RlZiBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUo RW5kT2ZGaWxlUmVhY2hlZCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKysgKiAg ICAgX19weXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5yZWFz b24gPSBfX3B5eF9zdGF0ZVsxXQorKyAqLworKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysg IF9fUHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdCk7CisrICBfX3B5eF9yID0gX19weXhf dl9fX3B5eF9yZXN1bHQ7CisrICBnb3RvIF9fcHl4X0wwOworKworKyAgLyogIih0cmVlIGZyYWdt ZW50KSI6MQorKyAqIGRlZiBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkKF9fcHl4X3R5 cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgorKyAqICAg ICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworICAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEp OworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4 dC5fX3NldHN0YXRlX2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5 eF9maWxlbmFtZSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CisrICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJz Lm1wdi5fX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkIiwgX19weXhfY2xpbmVubywgX19w eXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5eF9yID0gTlVMTDsKKysgIF9fcHl4 X0wwOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcik7CisrICBf X1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKyAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMjMKKy0g KiAKKy0gKiBjZGVmIGNsYXNzIE9wZW5HTFJlbmRlckNvbnRleHQoUmVuZGVyQ29udGV4dCk6Cist ICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtcHYsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICAgICAgIGdldF9wcm9jX2FkZHJlc3MsCistICogICAgICAgICAg ICAgICAgICAqYXJncywgKiprd2FyZ3MpOgorKy8qICIodHJlZSBmcmFnbWVudCkiOjExCisrICog ICAgICAgICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoPEVuZE9m RmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICogICAgIHJldHVybiBf X3B5eF9yZXN1bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3Nl dF9zdGF0ZShFbmRPZkZpbGVSZWFjaGVkIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIF9fcHl4X3Jlc3VsdC5lcnJv ciA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQucmVhc29uID0gX19weXhfc3RhdGVbMV0K KysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0 LCAnX19kaWN0X18nKToKKyAgKi8KKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBp bnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF8x X19pbml0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5 T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCistc3RhdGljIGludCBfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVj dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3 ZHMpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X21wdiA9IDA7CistICBQeU9iamVjdCAqX19weXhf dl9nZXRfcHJvY19hZGRyZXNzID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2FyZ3MgPSAwOwor LSAgUHlPYmplY3QgKl9fcHl4X3Zfa3dhcmdzID0gMDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRf X3NldF9zdGF0ZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZp bGVSZWFjaGVkICpfX3B5eF92X19fcHl4X3Jlc3VsdCwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf c3RhdGUpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIGludCBfX3B5 eF90XzI7CisrICBQeV9zc2l6ZV90IF9fcHl4X3RfMzsKKysgIGludCBfX3B5eF90XzQ7CisrICBp bnQgX19weXhfdF81OworKyAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7CisrICBQeU9iamVj dCAqX19weXhfdF83ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzggPSBOVUxMOworICAg aW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5V TEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19p bml0X18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF92X2t3YXJncyA9IFB5RGljdF9OZXcoKTsg aWYgKHVubGlrZWx5KCFfX3B5eF92X2t3YXJncykpIHJldHVybiAtMTsKKy0gIF9fUHl4X0dPVFJF RihfX3B5eF92X2t3YXJncyk7CistICBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSA+ IDIpIHsKKy0gICAgX19weXhfdl9hcmdzID0gUHlUdXBsZV9HZXRTbGljZShfX3B5eF9hcmdzLCAy LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsKKy0gICAgaWYgKHVubGlrZWx5KCFfX3B5 eF92X2FyZ3MpKSB7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Zfa3dhcmdzKTsgX19weXhf dl9rd2FyZ3MgPSAwOworLSAgICAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAg ICAgIHJldHVybiAtMTsKKy0gICAgfQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdl9hcmdzKTsK Ky0gIH0gZWxzZSB7CistICAgIF9fcHl4X3ZfYXJncyA9IF9fcHl4X2VtcHR5X3R1cGxlOyBfX1B5 eF9JTkNSRUYoX19weXhfZW1wdHlfdHVwbGUpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZSIsIDApOworKwor KyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKKysgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAor KyAqIGNkZWYgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKEVuZE9m RmlsZVJlYWNoZWQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIF9f cHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQucmVhc29uID0g X19weXhfc3RhdGVbMV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBpZiBs ZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycp OgorKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVsy XSkKKysgKi8KKysgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUp KSB7CisrICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9i amVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOworKyAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4 X0wxX2Vycm9yKQorICAgfQorLSAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFy Z25hbWVzW10gPSB7Jl9fcHl4X25fc19tcHYsJl9fcHl4X25fc19nZXRfcHJvY19hZGRyZXNzLDB9 OworLSAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07CistICAgIGlmICh1bmxpa2VseShf X3B5eF9rd2RzKSkgeworLSAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKy0gICAgICBjb25zdCBQ eV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKy0gICAg ICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgY2FzZSAg MjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAg IENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAgICB9CistICAgICAga3dfYXJncyA9IFB5 RGljdF9TaXplKF9fcHl4X2t3ZHMpOworLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKy0gICAg ICAgIGNhc2UgIDA6CistICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURp Y3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfbXB2KSkgIT0gMCkpIGt3X2FyZ3Mt LTsKKy0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKy0gICAgICAg IENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6CistICAgICAgICBpZiAobGlr ZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5 eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcykpICE9IDApKSBrd19hcmdzLS07CistICAgICAgICBlbHNl IHsKKy0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwg MiwgMiwgMSk7IF9fUFlYX0VSUigwLCAxMTIzLCBfX3B5eF9MM19lcnJvcikKKy0gICAgICAgIH0K Ky0gICAgICB9CisrICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3Zf X19weXhfc3RhdGUsIDAsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90 XzEpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5lcnJvcik7CisrICBf X1B5eF9ERUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPmVycm9yKTsKKysgIF9fcHl4X3ZfX19w eXhfcmVzdWx0LT5lcnJvciA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7CisrICBpZiAo dW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworKyAgICBQeUVycl9T ZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNj cmlwdGFibGUiKTsKKysgICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKysgIH0K KysgIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0 ZSwgMSwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CisrICBf X1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnJlYXNvbik7CisrICBfX1B5eF9ERUNS RUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnJlYXNvbik7CisrICBfX3B5eF92X19fcHl4X3Jlc3Vs dC0+cmVhc29uID0gX19weXhfdF8xOworKyAgX19weXhfdF8xID0gMDsKKysKKysgIC8qICIodHJl ZSBmcmFnbWVudCkiOjEzCisrICogY2RlZiBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVk X19zZXRfc3RhdGUoRW5kT2ZGaWxlUmVhY2hlZCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0 YXRlKToKKysgKiAgICAgX19weXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMF07IF9fcHl4 X3Jlc3VsdC5yZWFzb24gPSBfX3B5eF9zdGF0ZVsxXQorKyAqICAgICBpZiBsZW4oX19weXhfc3Rh dGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBk YXRlKF9fcHl4X3N0YXRlWzJdKQorKyAqLworKyAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhf c3RhdGUgPT0gUHlfTm9uZSkpIHsKKysgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv ciwgIm9iamVjdCBvZiB0eXBlICdOb25lVHlwZScgaGFzIG5vIGxlbigpIik7CisrICAgIF9fUFlY X0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCisrICB9CisrICBfX3B5eF90XzMgPSBQeVR1cGxl X0dFVF9TSVpFKF9fcHl4X3ZfX19weXhfc3RhdGUpOyBpZiAodW5saWtlbHkoX19weXhfdF8zID09 ICgoUHlfc3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfdF80ID0gKChfX3B5eF90XzMgPiAyKSAhPSAwKTsKKysgIGlmIChfX3B5eF90XzQpIHsK KysgIH0gZWxzZSB7CisrICAgIF9fcHl4X3RfMiA9IF9fcHl4X3RfNDsKKysgICAgZ290byBfX3B5 eF9MNF9ib29sX2Jpbm9wX2RvbmU7CisrICB9CisrICBfX3B5eF90XzQgPSBfX1B5eF9IYXNBdHRy KCgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4X3Jlc3VsdCksIF9fcHl4X25fc19kaWN0KTsgaWYg KHVubGlrZWx5KF9fcHl4X3RfNCA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF81ID0gKF9fcHl4X3RfNCAhPSAwKTsKKysgIF9fcHl4X3Rf MiA9IF9fcHl4X3RfNTsKKysgIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7CisrICBpZiAoX19w eXhfdF8yKSB7CisrCisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjE0CisrICogICAgIF9fcHl4 X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQucmVhc29uID0gX19w eXhfc3RhdGVbMV0KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIo X19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKysgKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2Rp Y3RfXy51cGRhdGUoX19weXhfc3RhdGVbMl0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKi8KKysgICAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2Jq ZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoX19weXhfdF82LCBfX3B5eF9uX3NfdXBkYXRlKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF83KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CisrICAgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7 CisrICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2Jq ZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CisrICAgICAgX19QWVhfRVJSKDEsIDE0LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgfQorKyAgICBfX3B5eF90XzYgPSBfX1B5eF9HZXRJdGVtSW50X1R1 cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDIsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9u ZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDE0LCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAgIF9fcHl4 X3RfOCA9IE5VTEw7CisrICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfNykpKSB7CisrICAgICAgX19weXhfdF84ID0gUHlNZXRob2Rf R0VUX1NFTEYoX19weXhfdF83KTsKKysgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfOCkpIHsKKysg ICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90 XzcpOworKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfOCk7CisrICAgICAgICBfX1B5eF9J TkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzcsIGZ1 bmN0aW9uKTsKKysgICAgICB9CisrICAgIH0KKysgICAgX19weXhfdF8xID0gKF9fcHl4X3RfOCkg PyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF83LCBfX3B5eF90XzgsIF9fcHl4X3Rf NikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNywgX19weXhfdF82KTsKKysg ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9 IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKworKyAg ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMworKyAqIGNkZWYgX19weXhfdW5waWNrbGVfRW5kT2ZG aWxlUmVhY2hlZF9fc2V0X3N0YXRlKEVuZE9mRmlsZVJlYWNoZWQgX19weXhfcmVzdWx0LCB0dXBs ZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRl WzBdOyBfX3B5eF9yZXN1bHQucmVhc29uID0gX19weXhfc3RhdGVbMV0KKysgKiAgICAgaWYgbGVu KF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9f ZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVsyXSkKKysgKi8KKysgIH0KKysKKysgIC8qICIodHJl ZSBmcmFnbWVudCkiOjExCisrICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFj aGVkX19zZXRfc3RhdGUoPEVuZE9mRmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3Rh dGUpCisrICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xl X0VuZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZShFbmRPZkZpbGVSZWFjaGVkIF9fcHl4X3Jlc3Vs dCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgIF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQucmVh c29uID0gX19weXhfc3RhdGVbMV0KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5k IGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKysgKi8KKysKKysgIC8qIGZ1bmN0 aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9O b25lKTsKKysgIGdvdG8gX19weXhfTDA7CisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7CisrICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7CisrICBf X1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9FbmRP ZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSAwOworKyAgX19weXhfTDA6OworKyAgX19QeXhf WEdJVkVSRUYoX19weXhfcik7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysg IHJldHVybiBfX3B5eF9yOworK30KKysKKysvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisrICogZGVm IF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1 bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGNk ZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jl c3VsdAorKyAqLworKworKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOV9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2Uo UHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19w eXhfa3dkcyk7IC8qcHJvdG8qLworK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl85X19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSA9IHsiX19weXhfdW5w aWNrbGVfTG9nTWVzc2FnZSIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtl eXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl85X19weXhfdW5waWNrbGVfTG9n TWVzc2FnZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9OworK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzlfX3B5eF91bnBpY2tsZV9Mb2dNZXNz YWdlKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3Qg Kl9fcHl4X2t3ZHMpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5cGUgPSAwOworKyAg bG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf c3RhdGUgPSAwOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5 eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisrICBQeU9iamVj dCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UgKHdyYXBwZXIp IiwgMCk7CisrICB7CisrICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9 IHsmX19weXhfbl9zX3B5eF90eXBlLCZfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCZfX3B5eF9uX3Nf cHl4X3N0YXRlLDB9OworKyAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCwwfTsKKysgICAg aWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7CisrICAgICAgUHlfc3NpemVfdCBrd19hcmdzOwor KyAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4 X2FyZ3MpOworKyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDM6IHZh bHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CisrICAgICAgICBDWVRI T05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dF VF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAg ICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAw KTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDA6IGJyZWFr OworKyAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAg ICB9CisrICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworKyAgICAgIHN3 aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBpZiAobGlrZWx5 KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9u X3NfcHl4X3R5cGUpKSAhPSAwKSkga3dfYXJncy0tOworKyAgICAgICAgZWxzZSBnb3RvIF9fcHl4 X0w1X2FyZ3R1cGxlX2Vycm9yOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAg ICAgY2FzZSAgMToKKysgICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGlj dF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhfY2hlY2tzdW0pKSAhPSAwKSkg a3dfYXJncy0tOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVw bGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlIiwgMSwgMywgMywgMSk7IF9fUFlY X0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgIH0KKysgICAgICAgIENZVEhPTl9G QUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDI6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1 ZXNbMl0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4 X3N0YXRlKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICBf X1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSIsIDEs IDMsIDMsIDIpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCisrICAgICAgICB9Cisr ICAgICAgfQorICAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGNv bnN0IFB5X3NzaXplX3QgdXNlZF9wb3NfYXJncyA9IChwb3NfYXJncyA8IDIpID8gcG9zX2FyZ3Mg OiAyOworLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3Jkcyhf X3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCBfX3B5eF92X2t3YXJncywgdmFsdWVzLCB1c2Vk X3Bvc19hcmdzLCAiX19pbml0X18iKSA8IDApKSBfX1BZWF9FUlIoMCwgMTEyMywgX19weXhfTDNf ZXJyb3IpCisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRz KF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJfX3B5 eF91bnBpY2tsZV9Mb2dNZXNzYWdlIikgPCAwKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vy cm9yKQorICAgICAgIH0KKy0gICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2Fy Z3MpIDwgMikgeworKyAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykg IT0gMykgeworICAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisgICAgIH0gZWxz ZSB7CisgICAgICAgdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsK KyAgICAgICB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAg ICAgIHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CisgICAgIH0K Ky0gICAgX19weXhfdl9tcHYgPSB2YWx1ZXNbMF07CistICAgIF9fcHl4X3ZfZ2V0X3Byb2NfYWRk cmVzcyA9IHZhbHVlc1sxXTsKKysgICAgX19weXhfdl9fX3B5eF90eXBlID0gdmFsdWVzWzBdOwor KyAgICBfX3B5eF92X19fcHl4X2NoZWNrc3VtID0gX19QeXhfUHlJbnRfQXNfbG9uZyh2YWx1ZXNb MV0pOyBpZiAodW5saWtlbHkoKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gPT0gKGxvbmcpLTEpICYm IFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCisrICAg IF9fcHl4X3ZfX19weXhfc3RhdGUgPSB2YWx1ZXNbMl07CisgICB9CisgICBnb3RvIF9fcHl4X0w0 X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6Owor LSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwgMiwgMiwgUHlUdXBs ZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCAxMTIzLCBfX3B5eF9MM19lcnJv cikKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9Mb2dNZXNz YWdlIiwgMSwgMywgMywgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigx LCAxLCBfX3B5eF9MM19lcnJvcikKKyAgIF9fcHl4X0wzX2Vycm9yOjsKKy0gIF9fUHl4X0RFQ1JF RihfX3B5eF92X2FyZ3MpOyBfX3B5eF92X2FyZ3MgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4 X3Zfa3dhcmdzKTsgX19weXhfdl9rd2FyZ3MgPSAwOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2 aWRjdXR0ZXIubGlicy5tcHYuT3BlbkdMUmVuZGVyQ29udGV4dC5fX2luaXRfXyIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfQWRkVHJhY2Vi YWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSIsIF9fcHl4 X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gLTE7CisrICByZXR1cm4gTlVMTDsKKyAgIF9f cHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0X19faW5pdF9fKCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCAq KV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfbXB2LCBfX3B5eF92X2dldF9wcm9jX2FkZHJlc3MsIF9f cHl4X3ZfYXJncywgX19weXhfdl9rd2FyZ3MpOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl84X19weXhfdW5waWNrbGVfTG9nTWVzc2FnZShfX3B5eF9zZWxmLCBf X3B5eF92X19fcHl4X3R5cGUsIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIF9fcHl4X3ZfX19weXhf c3RhdGUpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9YREVDUkVG KF9fcHl4X3ZfYXJncyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfa3dhcmdzKTsKKyAgIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAor LXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVy Q29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9P cGVuR0xSZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X21wdiwg UHlPYmplY3QgKl9fcHl4X3ZfZ2V0X3Byb2NfYWRkcmVzcywgUHlPYmplY3QgKl9fcHl4X3ZfYXJn cywgUHlPYmplY3QgKl9fcHl4X3Zfa3dhcmdzKSB7CistICBQeU9iamVjdCAqX19weXhfdl9pbml0 X3BhcmFtcyA9IE5VTEw7CistICBpbnQgX19weXhfcjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84X19weXhfdW5waWNrbGVfTG9nTWVzc2FnZShDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF90 eXBlLCBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4 X3N0YXRlKSB7CisrICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvciA9IDA7Cisr ICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9yZXN1bHQgPSAwOworKyAgUHlPYmplY3QgKl9fcHl4 X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpf X3B5eF90XzEgPSBOVUxMOworKyAgaW50IF9fcHl4X3RfMTsKKyAgIFB5T2JqZWN0ICpfX3B5eF90 XzIgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CisrICBQeU9iamVjdCAq X19weXhfdF80ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOworKyAgaW50 IF9fcHl4X3RfNjsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19w eXhfZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSIsIDApOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMjcKKy0gKiAgICAgICAgICAgICAgICAgICph cmdzLCAqKmt3YXJncyk6CistICogICAgICAgICBpbml0X3BhcmFtcyA9IHsKKy0gKiAgICAgICAg ICAgICAiZ2V0X3Byb2NfYWRkcmVzcyI6IGdldF9wcm9jX2FkZHJlc3MgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgfQorLSAqICAgICAgICAgUmVuZGVyQ29udGV4dC5f X2luaXRfXyhzZWxmLCBtcHYsIFJlbmRlckNvbnRleHQuQVBJX09QRU5HTCwKKysgIC8qICIodHJl ZSBmcmFnbWVudCkiOjQKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysg KiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3Vt ICE9IDB4ODc3NGZhZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICog ICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAo JXMgdnMgMHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZpeCwgdGV4dCkpIiAlIF9f cHl4X2NoZWNrc3VtKQorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlEaWN0X05ld1ByZXNp emVkKDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTI3LCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgaWYgKFB5RGljdF9T ZXRJdGVtKF9fcHl4X3RfMSwgX19weXhfbl9zX2dldF9wcm9jX2FkZHJlc3MsIF9fcHl4X3ZfZ2V0 X3Byb2NfYWRkcmVzcykgPCAwKSBfX1BZWF9FUlIoMCwgMTEyNywgX19weXhfTDFfZXJyb3IpCist ICBfX3B5eF92X2luaXRfcGFyYW1zID0gKChQeU9iamVjdCopX19weXhfdF8xKTsKKy0gIF9fcHl4 X3RfMSA9IDA7CisrICBfX3B5eF90XzEgPSAoKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gIT0gMHg4 Nzc0ZmFlKSAhPSAwKTsKKysgIGlmIChfX3B5eF90XzEpIHsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTI5CistICogICAgICAgICAgICAgImdldF9wcm9jX2FkZHJl c3MiOiBnZXRfcHJvY19hZGRyZXNzCistICogICAgICAgICB9CistICogICAgICAgICBSZW5kZXJD b250ZXh0Ll9faW5pdF9fKHNlbGYsIG1wdiwgUmVuZGVyQ29udGV4dC5BUElfT1BFTkdMLCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGluaXRfcGFyYW1zLCAqYXJncywgKiprd2FyZ3MpCistICogCisrICAgIC8qICIodHJlZSBm cmFnbWVudCkiOjUKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CisrICogICAgIGlm IF9fcHl4X2NoZWNrc3VtICE9IDB4ODc3NGZhZToKKysgKiAgICAgICAgIGZyb20gcGlja2xlIGlt cG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvciAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRp YmxlIGNoZWNrc3VtcyAoJXMgdnMgMHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZp eCwgdGV4dCkpIiAlIF9fcHl4X2NoZWNrc3VtKQorKyAqICAgICBfX3B5eF9yZXN1bHQgPSBMb2dN ZXNzYWdlLl9fbmV3X18oX19weXhfdHlwZSkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5 T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJDb250ZXh0KSwgX19weXhfbl9zX2luaXQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTI5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cigoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNv bnRleHQpLCBfX3B5eF9uX3NfQVBJX09QRU5HTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDExMjksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMik7CisrICAgIF9fcHl4X3RfMiA9IFB5TGlzdF9OZXcoMSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19QaWNrbGVFcnJvcik7 CisrICAgIF9fUHl4X0dJVkVSRUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKysgICAgUHlMaXN0 X1NFVF9JVEVNKF9fcHl4X3RfMiwgMCwgX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKysgICAgX19w eXhfdF8zID0gX19QeXhfSW1wb3J0KF9fcHl4X25fc19waWNrbGUsIF9fcHl4X3RfMiwgLTEpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikK KysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9JbXBvcnRGcm9tKF9f cHl4X3RfMywgX19weXhfbl9zX1BpY2tsZUVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdl9fX3B5 eF9QaWNrbGVFcnJvciA9IF9fcHl4X3RfMjsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMg PSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzAKKy0gKiAg ICAgICAgIH0KKy0gKiAgICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0X18oc2VsZiwgbXB2LCBS ZW5kZXJDb250ZXh0LkFQSV9PUEVOR0wsCistICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGluaXRfcGFyYW1zLCAqYXJncywgKiprd2FyZ3MpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAKKy0gKiBjbGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOgorKyAgICAvKiAi KHRyZWUgZnJhZ21lbnQpIjo2CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4ODc3NGZh ZToKKysgKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9Q aWNrbGVFcnJvcgorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0 aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ODc3NGZhZSA9IChsZXZlbCwgbG9nX2xldmVsLCBwcmVm aXgsIHRleHQpKSIgJSBfX3B5eF9jaGVja3N1bSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICBfX3B5eF9yZXN1bHQgPSBMb2dNZXNzYWdlLl9fbmV3X18oX19weXhfdHlwZSkK KysgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6CisgICovCistICBfX3B5eF90XzMg PSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwg MTEyOSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9f UHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7CistICBfX1B5eF9HSVZFUkVG KCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsKKy0gIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF8zLCAwLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7CistICBfX1B5eF9JTkNSRUYoX19w eXhfdl9tcHYpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X21wdik7CistICBQeVR1cGxlX1NF VF9JVEVNKF9fcHl4X3RfMywgMSwgX19weXhfdl9tcHYpOworLSAgX19QeXhfR0lWRVJFRihfX3B5 eF90XzIpOworLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDIsIF9fcHl4X3RfMik7Cist ICBfX1B5eF9JTkNSRUYoX19weXhfdl9pbml0X3BhcmFtcyk7CistICBfX1B5eF9HSVZFUkVGKF9f cHl4X3ZfaW5pdF9wYXJhbXMpOworLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDMsIF9f cHl4X3ZfaW5pdF9wYXJhbXMpOworLSAgX19weXhfdF8yID0gMDsKKysgICAgX19weXhfdF8yID0g X19QeXhfUHlJbnRfRnJvbV9sb25nKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0pOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMik7CisrICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5U3RyaW5nX0Zv cm1hdChfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDg3LCBfX3B5eF90 XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9l cnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9fX3B5 eF9QaWNrbGVFcnJvcik7CisrICAgIF9fcHl4X3RfMiA9IF9fcHl4X3ZfX19weXhfUGlja2xlRXJy b3I7IF9fcHl4X3RfNSA9IE5VTEw7CisrICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg dW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKysgICAgICBfX3B5eF90XzUg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICAgIGlmIChsaWtlbHkoX19weXhf dF81KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfMik7CisrICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKysgICAg ICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfMiwgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQorKyAgICBfX3B5eF90XzMgPSAo X19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3Rf NSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5 eF90XzQpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Cisr ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworKyAgICBfX1B5eF9SYWlzZShfX3B5eF90XzMsIDAsIDAsIDApOworKyAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgICAgX19QWVhfRVJS KDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExMjkKKy0gKiAgICAgICAgICAgICAiZ2V0X3Byb2NfYWRkcmVzcyI6IGdldF9wcm9j X2FkZHJlc3MKKy0gKiAgICAgICAgIH0KKy0gKiAgICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0 X18oc2VsZiwgbXB2LCBSZW5kZXJDb250ZXh0LkFQSV9PUEVOR0wsICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXJh bXMsICphcmdzLCAqKmt3YXJncykKKy0gKiAKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6NAor KyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgorKyAqICAgICBjZGVmIG9iamVj dCBfX3B5eF9yZXN1bHQKKysgKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHg4Nzc0ZmFlOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBv cnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgICAgIHJhaXNlIF9f cHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDg3NzRmYWUg PSAobGV2ZWwsIGxvZ19sZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19weXhfY2hlY2tzdW0pCisg ICovCistICBfX3B5eF90XzIgPSBQeU51bWJlcl9BZGQoX19weXhfdF8zLCBfX3B5eF92X2FyZ3Mp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTI5LCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTEzMAorLSAqICAgICAgICAgfQorLSAqICAgICAgICAgUmVuZGVyQ29udGV4 dC5fX2luaXRfXyhzZWxmLCBtcHYsIFJlbmRlckNvbnRleHQuQVBJX09QRU5HTCwKKy0gKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXJhbXMsICphcmdzLCAqKmt3YXJncykg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqIGNsYXNzIENhbGxiYWNrVGhy ZWFkKFRocmVhZCk6CisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3CisrICogICAgICAgICBmcm9t IHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAg ICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2 cyAweDg3NzRmYWUgPSAobGV2ZWwsIGxvZ19sZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19weXhf Y2hlY2tzdW0pCisrICogICAgIF9fcHl4X3Jlc3VsdCA9IExvZ01lc3NhZ2UuX19uZXdfXyhfX3B5 eF90eXBlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGlmIF9fcHl4X3N0 YXRlIGlzIG5vdCBOb25lOgorKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9f c2V0X3N0YXRlKDxMb2dNZXNzYWdlPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorICAqLwor LSAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzEsIF9fcHl4X3RfMiwg X19weXhfdl9rd2FyZ3MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAx MTI5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0 dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlKSwgX19weXhfbl9zX25ldyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Cisr ICBfX3B5eF90XzQgPSBOVUxMOworKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtl bHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKysgICAgX19weXhfdF80ID0gUHlNZXRo b2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7Cisr ICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3Rf Mik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7CisrICAgICAgX19QeXhfSU5DUkVG KGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24p OworKyAgICB9CisrICB9CisrICBfX3B5eF90XzMgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdl9fX3B5eF90eXBlKSA6 IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X19fcHl4X3R5cGUp OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgNywgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cist ICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIF9fcHl4X3ZfX19w eXhfcmVzdWx0ID0gX19weXhfdF8zOworKyAgX19weXhfdF8zID0gMDsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTIzCistICogCistICogY2RlZiBjbGFzcyBPcGVu R0xSZW5kZXJDb250ZXh0KFJlbmRlckNvbnRleHQpOgorLSAqICAgICBkZWYgX19pbml0X18oc2Vs ZiwgbXB2LCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAg ICBnZXRfcHJvY19hZGRyZXNzLAorLSAqICAgICAgICAgICAgICAgICAgKmFyZ3MsICoqa3dhcmdz KToKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKysgKiAgICAgICAgIHJhaXNlIF9fcHl4X1Bp Y2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDg3NzRmYWUgPSAobGV2 ZWwsIGxvZ19sZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19weXhfY2hlY2tzdW0pCisrICogICAg IF9fcHl4X3Jlc3VsdCA9IExvZ01lc3NhZ2UuX19uZXdfXyhfX3B5eF90eXBlKQorKyAqICAgICBp ZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKDxMb2dNZXNz YWdlPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19weXhfcmVz dWx0CisgICovCisrICBfX3B5eF90XzEgPSAoX19weXhfdl9fX3B5eF9zdGF0ZSAhPSBQeV9Ob25l KTsKKysgIF9fcHl4X3RfNiA9IChfX3B5eF90XzEgIT0gMCk7CisrICBpZiAoX19weXhfdF82KSB7 CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSAwOworLSAgZ290 byBfX3B5eF9MMDsKKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhf dF8xKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19w eXhfdF8zKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Lk9wZW5H TFJlbmRlckNvbnRleHQuX19pbml0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAtMTsKKy0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdl9pbml0X3BhcmFtcyk7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0KKy0vKiAiKHRyZWUgZnJhZ21lbnQp IjoxCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBj b252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCistICogZGVmIF9fc2V0 c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorKyAgICAvKiAiKHRyZWUgZnJhZ21l bnQpIjo5CisrICogICAgIF9fcHl4X3Jlc3VsdCA9IExvZ01lc3NhZ2UuX19uZXdfXyhfX3B5eF90 eXBlKQorKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIF9f cHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19weXhfcmVz dWx0LCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBy ZXR1cm4gX19weXhfcmVzdWx0CisrICogY2RlZiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19z ZXRfc3RhdGUoTG9nTWVzc2FnZSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKyAg Ki8KKysgICAgaWYgKCEobGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X19fcHl4X3N0 YXRlKSl8fCgoX19weXhfdl9fX3B5eF9zdGF0ZSkgPT0gUHlfTm9uZSl8fChQeUVycl9Gb3JtYXQo UHlFeGNfVHlwZUVycm9yLCAiRXhwZWN0ZWQgJS4xNnMsIGdvdCAlLjIwMHMiLCAidHVwbGUiLCBQ eV9UWVBFKF9fcHl4X3ZfX19weXhfc3RhdGUpLT50cF9uYW1lKSwgMCkpKSBfX1BZWF9FUlIoMSwg OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2X19fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZSgoKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X19fcHl4 X3Jlc3VsdCksICgoUHlPYmplY3QqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgOSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzMpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF8zX19yZWR1 Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVj dCAqdW51c2VkKTsgLypwcm90byovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0XzNfX3JlZHVjZV9jeXRob25fXyhQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsK Ky0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25z CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18gKHdyYXBw ZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5 T3BlbkdMUmVuZGVyQ29udGV4dF8yX19yZWR1Y2VfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxm KSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF8y X19yZWR1Y2VfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5 T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOwor LSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9f IiwgMCk7CisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKysgKiAgICAgICAgIHJhaXNlIF9f cHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDg3NzRmYWUg PSAobGV2ZWwsIGxvZ19sZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19weXhfY2hlY2tzdW0pCisr ICogICAgIF9fcHl4X3Jlc3VsdCA9IExvZ01lc3NhZ2UuX19uZXdfXyhfX3B5eF90eXBlKQorKyAq ICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKDxM b2dNZXNzYWdlPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19w eXhfcmVzdWx0CisrICovCisrICB9CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoyCistICog ZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNl bGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xp bmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogZGVmIF9fc2V0c3RhdGVfY3l0 aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYu X2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmci KQorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTAKKysgKiAgICAgaWYgX19weXhfc3RhdGUgaXMg bm90IE5vbmU6CisrICogICAgICAgICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3Rh dGUoPExvZ01lc3NhZ2U+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICogICAgIHJldHVy biBfX3B5eF9yZXN1bHQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIGNkZWYgX19w eXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKExvZ01lc3NhZ2UgX19weXhfcmVzdWx0 LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIF9fcHl4X3Jlc3VsdC5sZXZlbCA9IF9fcHl4 X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubG9nX2xldmVsID0gX19weXhfc3RhdGVbMV07IF9fcHl4 X3Jlc3VsdC5wcmVmaXggPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnRleHQgPSBfX3B5 eF9zdGF0ZVszXQorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5 eF9idWlsdGluX1R5cGVFcnJvciwgX19weXhfdHVwbGVfXzE5LCBOVUxMKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7Cist ICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fUFlYX0VSUigx LCAyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICBfX1B5 eF9JTkNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQpOworKyAgX19weXhfciA9IF9fcHl4X3ZfX19w eXhfcmVzdWx0OworKyAgZ290byBfX3B5eF9MMDsKKyAKKyAgIC8qICIodHJlZSBmcmFnbWVudCki OjEKKy0gKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNv bnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYgX19zZXRz dGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CisrICogZGVmIF9fcHl4X3VucGlja2xl X0xvZ01lc3NhZ2UoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4 X1BpY2tsZUVycm9yCisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorICAqLworIAor ICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5s aWJzLm1wdi5PcGVuR0xSZW5kZXJDb250ZXh0Ll9fcmVkdWNlX2N5dGhvbl9fIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfNCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CisrICBfX1B5eF9BZGRU cmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlIiwg X19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5eF9y ID0gTlVMTDsKKysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9Q aWNrbGVFcnJvcik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKyAg IF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogIih0cmVlIGZyYWdtZW50KSI6Mwor LSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9y KCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBp Y2tsaW5nIikKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJz ZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2ts aW5nIikKKysvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMQorKyAqICAgICAgICAgX19weXhfdW5waWNr bGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKDxMb2dNZXNzYWdlPiBfX3B5eF9yZXN1bHQsIF9fcHl4 X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CisrICogY2RlZiBfX3B5eF91bnBp Y2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoTG9nTWVzc2FnZSBfX3B5eF9yZXN1bHQsIHR1cGxl IF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBfX3B5 eF9yZXN1bHQubGV2ZWwgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LmxvZ19sZXZlbCA9 IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQucHJlZml4ID0gX19weXhfc3RhdGVbMl07IF9f cHl4X3Jlc3VsdC50ZXh0ID0gX19weXhfc3RhdGVbM10KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0 YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKyAgKi8KKyAK Ky0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF81X19zZXRzdGF0ZV9jeXRob25f XyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7 IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF81X19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworLSAgUHlPYmpl Y3QgKl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fICh3cmFwcGVyKSIsIDAp OworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5HTFJl bmRlckNvbnRleHRfNF9fc2V0c3RhdGVfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQ eU9iamVjdCAqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19w eXhfcjsKKy19CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0XzRfX3NldHN0YXRlX2N5dGhvbl9fKENZVEhPTl9V TlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVy Q29udGV4dCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF92X19f cHl4X3N0YXRlKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9fX3B5eF9yZXN1bHQs IFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9 IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4 X3RfMSA9IE5VTEw7CisrICBpbnQgX19weXhfdF8yOworKyAgUHlfc3NpemVfdCBfX3B5eF90XzM7 CisrICBpbnQgX19weXhfdF80OworKyAgaW50IF9fcHl4X3RfNTsKKysgIFB5T2JqZWN0ICpfX3B5 eF90XzYgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CisrICBQeU9iamVj dCAqX19weXhfdF84ID0gTlVMTDsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3Qg Y2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwor LSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18iLCAwKTsK KysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdl X19zZXRfc3RhdGUiLCAwKTsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKy0gKiAgICAg cmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhv biBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxm LCBfX3B5eF9zdGF0ZSk6CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5v dCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjEyCisrICogICAg IHJldHVybiBfX3B5eF9yZXN1bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2Vf X3NldF9zdGF0ZShMb2dNZXNzYWdlIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgor KyAqICAgICBfX3B5eF9yZXN1bHQubGV2ZWwgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0 LmxvZ19sZXZlbCA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQucHJlZml4ID0gX19weXhf c3RhdGVbMl07IF9fcHl4X3Jlc3VsdC50ZXh0ID0gX19weXhfc3RhdGVbM10gICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFz YXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgorKyAqICAgICAgICAgX19weXhfcmVzdWx0 Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9f UHl4X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3IsIF9fcHl4X3R1cGxlX18y MCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDQsIF9fcHl4 X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9u ZSkpIHsKKysgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScg b2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CisrICAgIF9fUFlYX0VSUigxLCAxMiwgX19w eXhfTDFfZXJyb3IpCisrICB9CisrICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxl KF9fcHl4X3ZfX19weXhfc3RhdGUsIDAsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywg MCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfUmFpc2Uo X19weXhfdF8xLCAwLCAwLCAwKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworLSAgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vycm9yKQorLQorLSAgLyogIih0 cmVlIGZyYWdtZW50KSI6MworLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKy0gKiAg ICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5 dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhz ZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg cmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhv biBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKi8KKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworLSAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwor LSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuT3BlbkdMUmVuZGVyQ29u dGV4dC5fX3NldHN0YXRlX2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBf X3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X0dJVkVSRUYoX19w eXhfdF8xKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+bGV2ZWwpOwor KyAgX19QeXhfREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5sZXZlbCk7CisrICBfX3B5eF92 X19fcHl4X3Jlc3VsdC0+bGV2ZWwgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworKyAg aWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKysgICAgUHlF cnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBz dWJzY3JpcHRhYmxlIik7CisrICAgIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisr ICB9CisrICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhf c3RhdGUsIDEsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwor KyAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5sb2dfbGV2ZWwpOworKyAgX19Q eXhfREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5sb2dfbGV2ZWwpOworKyAgX19weXhfdl9f X3B5eF9yZXN1bHQtPmxvZ19sZXZlbCA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7Cisr ICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworKyAgICBQ eUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90 IHN1YnNjcmlwdGFibGUiKTsKKysgICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikK KysgIH0KKysgIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5 eF9zdGF0ZSwgMiwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7 CisrICBfX1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnByZWZpeCk7CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnByZWZpeCk7CisrICBfX3B5eF92X19fcHl4 X3Jlc3VsdC0+cHJlZml4ID0gX19weXhfdF8xOworKyAgX19weXhfdF8xID0gMDsKKysgIGlmICh1 bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7CisrICAgIFB5RXJyX1Nl dFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2Ny aXB0YWJsZSIpOworKyAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgfQor KyAgX19weXhfdF8xID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRl LCAzLCBsb25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKysgIF9f UHl4X0dPVFJFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+dGV4dCk7CisrICBfX1B5eF9ERUNSRUYo X19weXhfdl9fX3B5eF9yZXN1bHQtPnRleHQpOworKyAgX19weXhfdl9fX3B5eF9yZXN1bHQtPnRl eHQgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworKworKyAgLyogIih0cmVlIGZyYWdt ZW50KSI6MTMKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZShM b2dNZXNzYWdlIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgorKyAqICAgICBfX3B5 eF9yZXN1bHQubGV2ZWwgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LmxvZ19sZXZlbCA9 IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQucHJlZml4ID0gX19weXhfc3RhdGVbMl07IF9f cHl4X3Jlc3VsdC50ZXh0ID0gX19weXhfc3RhdGVbM10KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0 YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVw ZGF0ZShfX3B5eF9zdGF0ZVs0XSkKKysgKi8KKysgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4 X3N0YXRlID09IFB5X05vbmUpKSB7CisrICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJy b3IsICJvYmplY3Qgb2YgdHlwZSAnTm9uZVR5cGUnIGhhcyBubyBsZW4oKSIpOworKyAgICBfX1BZ WF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgfQorKyAgX19weXhfdF8zID0gUHlUdXBs ZV9HRVRfU0laRShfX3B5eF92X19fcHl4X3N0YXRlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA9 PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fcHl4X3RfNCA9ICgoX19weXhfdF8zID4gNCkgIT0gMCk7CisrICBpZiAoX19weXhfdF80KSB7 CisrICB9IGVsc2UgeworKyAgICBfX3B5eF90XzIgPSBfX3B5eF90XzQ7CisrICAgIGdvdG8gX19w eXhfTDRfYm9vbF9iaW5vcF9kb25lOworKyAgfQorKyAgX19weXhfdF80ID0gX19QeXhfSGFzQXR0 cigoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7IGlm ICh1bmxpa2VseShfX3B5eF90XzQgPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNSA9IChfX3B5eF90XzQgIT0gMCk7CisrICBfX3B5eF90 XzIgPSBfX3B5eF90XzU7CisrICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OworKyAgaWYgKF9f cHl4X3RfMikgeworKworKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNAorKyAqICAgICBfX3B5 eF9yZXN1bHQubGV2ZWwgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LmxvZ19sZXZlbCA9 IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQucHJlZml4ID0gX19weXhfc3RhdGVbMl07IF9f cHl4X3Jlc3VsdC50ZXh0ID0gX19weXhfc3RhdGVbM10KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0 YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKysgKiAgICAg ICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbNF0pICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKi8KKysgICAgX19weXhfdF82ID0gX19QeXhfUHlPYmpl Y3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9u X3NfZGljdCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAgIF9fcHl4X3Rf NyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF82LCBfX3B5eF9uX3NfdXBkYXRl KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKysgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICAgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4 X3N0YXRlID09IFB5X05vbmUpKSB7CisrICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF cnJvciwgIidOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CisrICAgICAg X19QWVhfRVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgfQorKyAgICBfX3B5eF90XzYg PSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDQsIGxvbmcsIDEs IF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNik7CisrICAgIF9fcHl4X3RfOCA9IE5VTEw7CisrICAgIGlmIChDWVRIT05fVU5QQUNL X01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNykpKSB7CisrICAgICAg X19weXhfdF84ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF83KTsKKysgICAgICBpZiAobGlr ZWx5KF9fcHl4X3RfOCkpIHsKKysgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9k X0dFVF9GVU5DVElPTihfX3B5eF90XzcpOworKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Rf OCk7CisrICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVD UkVGX1NFVChfX3B5eF90XzcsIGZ1bmN0aW9uKTsKKysgICAgICB9CisrICAgIH0KKysgICAgX19w eXhfdF8xID0gKF9fcHl4X3RfOCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF83 LCBfX3B5eF90XzgsIF9fcHl4X3RfNikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfNywgX19weXhfdF82KTsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90 XzggPSAwOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysg ICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworKworKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMworKyAqIGNkZWYg X19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKExvZ01lc3NhZ2UgX19weXhfcmVz dWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIF9fcHl4X3Jlc3VsdC5sZXZlbCA9IF9f cHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubG9nX2xldmVsID0gX19weXhfc3RhdGVbMV07IF9f cHl4X3Jlc3VsdC5wcmVmaXggPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnRleHQgPSBf X3B5eF9zdGF0ZVszXQorKyAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0 cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzRd KQorKyAqLworKyAgfQorKworKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKKysgKiAgICAgICAg IF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19weXhf cmVzdWx0LCBfX3B5eF9zdGF0ZSkKKysgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorKyAqIGNk ZWYgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKExvZ01lc3NhZ2UgX19weXhf cmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgX19weXhfcmVzdWx0LmxldmVsID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3Vs dC5sb2dfbGV2ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LnByZWZpeCA9IF9fcHl4 X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNdCisrICogICAgIGlm IGxlbihfX3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9f Jyk6CisrICovCisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3IgPSBQ eV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOworKyAgX19w eXhfTDFfZXJyb3I6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzYpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOworKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzgpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGli cy5tcHYuX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlIiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gMDsKKysgIF9f cHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMzMKKy0gKiAKKy0gKiBjbGFzcyBDYWxsYmFja1RocmVh ZChUaHJlYWQpOgorLSAqICAgICBkZWYgX19pbml0X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQorLSAqICAgICAg ICAgc2VsZi5kYWVtb24gPSBUcnVlCisrLyogIih0cmVlIGZyYWdtZW50KSI6MQorKyAqIGRlZiBf X3B5eF91bnBpY2tsZV9Qcm9wZXJ0eShfX3B5eF90eXBlLCBsb25nIF9fcHl4X2NoZWNrc3VtLCBf X3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgY2RlZiBv YmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0 CisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzFfX2luaXRfXyhQeU9i amVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0 YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxi YWNrVGhyZWFkXzFfX2luaXRfXyA9IHsiX19pbml0X18iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMV9faW5pdF9fLCBNRVRIX08s IDB9OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0 Q2FsbGJhY2tUaHJlYWRfMV9faW5pdF9fKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAq X19weXhfdl9zZWxmKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTFfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eShQeU9iamVjdCAqX19weXhfc2VsZiwg UHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisr c3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzExX19w eXhfdW5waWNrbGVfUHJvcGVydHkgPSB7Il9fcHl4X3VucGlja2xlX1Byb3BlcnR5IiwgKFB5Q0Z1 bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzExX19weXhfdW5waWNrbGVfUHJvcGVydHksIE1FVEhfVkFSQVJHU3xNRVRI X0tFWVdPUkRTLCAwfTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xMV9fcHl4X3VucGlja2xlX1Byb3BlcnR5KFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQ eU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKysgIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X3R5cGUgPSAwOworKyAgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3Vt OworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUgPSAwOworKyAgaW50IF9fcHl4X2xp bmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQg X19weXhfY2xpbmVubyA9IDA7CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5p dF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNENhbGxiYWNrVGhyZWFkX19faW5pdF9fKF9fcHl4X3NlbGYsICgoUHlPYmplY3Qg KilfX3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91 bnBpY2tsZV9Qcm9wZXJ0eSAod3JhcHBlcikiLCAwKTsKKysgIHsKKysgICAgc3RhdGljIFB5T2Jq ZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfcHl4X3R5cGUsJl9fcHl4X25f c19weXhfY2hlY2tzdW0sJl9fcHl4X25fc19weXhfc3RhdGUsMH07CisrICAgIFB5T2JqZWN0KiB2 YWx1ZXNbM10gPSB7MCwwLDB9OworKyAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKKysg ICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CisrICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJn cyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CisrICAgICAgc3dpdGNoIChwb3NfYXJn cykgeworKyAgICAgICAgY2FzZSAgMzogdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5 eF9hcmdzLCAyKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2Ug IDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CisrICAgICAg ICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OworKyAgICAgICAgY2FzZSAgMDogYnJlYWs7CisrICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4 X0w1X2FyZ3R1cGxlX2Vycm9yOworKyAgICAgIH0KKysgICAgICBrd19hcmdzID0gUHlEaWN0X1Np emUoX19weXhfa3dkcyk7CisrICAgICAgc3dpdGNoIChwb3NfYXJncykgeworKyAgICAgICAgY2Fz ZSAgMDoKKysgICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5RGljdF9HZXRJ dGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhfdHlwZSkpICE9IDApKSBrd19hcmdzLS07 CisrICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisrICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAxOgorKyAgICAgICAgaWYgKGxpa2Vs eSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhf bl9zX3B5eF9jaGVja3N1bSkpICE9IDApKSBrd19hcmdzLS07CisrICAgICAgICBlbHNlIHsKKysg ICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3VucGlja2xlX1Byb3Bl cnR5IiwgMSwgMywgMywgMSk7IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKysgICAg ICAgIH0KKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDI6Cisr ICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMl0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihf X3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X3N0YXRlKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKysgICAg ICAgIGVsc2UgeworKyAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhf dW5waWNrbGVfUHJvcGVydHkiLCAxLCAzLCAzLCAyKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wz X2Vycm9yKQorKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBpZiAodW5saWtlbHkoa3dfYXJn cyA+IDApKSB7CisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdv cmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJf X3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSIpIDwgMCkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19l cnJvcikKKysgICAgICB9CisrICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKSAhPSAzKSB7CisrICAgICAgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAg fSBlbHNlIHsKKysgICAgICB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3Ms IDApOworKyAgICAgIHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7 CisrICAgICAgdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsKKysg ICAgfQorKyAgICBfX3B5eF92X19fcHl4X3R5cGUgPSB2YWx1ZXNbMF07CisrICAgIF9fcHl4X3Zf X19weXhfY2hlY2tzdW0gPSBfX1B5eF9QeUludF9Bc19sb25nKHZhbHVlc1sxXSk7IGlmICh1bmxp a2VseSgoX19weXhfdl9fX3B5eF9jaGVja3N1bSA9PSAobG9uZyktMSkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKysgICAgX19weXhfdl9fX3B5 eF9zdGF0ZSA9IHZhbHVlc1syXTsKKysgIH0KKysgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5w YWNraW5nX2RvbmU7CisrICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CisrICBfX1B5eF9SYWlz ZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfUHJvcGVydHkiLCAxLCAzLCAzLCBQeVR1 cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9y KQorKyAgX19weXhfTDNfZXJyb3I6OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIu bGlicy5tcHYuX19weXhfdW5waWNrbGVfUHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworKyAgcmV0dXJuIE5VTEw7CisrICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7 CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwX19weXhfdW5w aWNrbGVfUHJvcGVydHkoX19weXhfc2VsZiwgX19weXhfdl9fX3B5eF90eXBlLCBfX3B5eF92X19f cHl4X2NoZWNrc3VtLCBfX3B5eF92X19fcHl4X3N0YXRlKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4g X19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF9fX2luaXRfXyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0 ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Cisrc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0 eShDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9f X3B5eF90eXBlLCBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIFB5T2JqZWN0ICpfX3B5eF92 X19fcHl4X3N0YXRlKSB7CisrICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvciA9 IDA7CisrICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9yZXN1bHQgPSAwOworICAgUHlPYmplY3Qg Kl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2Jq ZWN0ICpfX3B5eF90XzEgPSBOVUxMOworKyAgaW50IF9fcHl4X3RfMTsKKyAgIFB5T2JqZWN0ICpf X3B5eF90XzIgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CisrICBQeU9i amVjdCAqX19weXhfdF80ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwor KyAgaW50IF9fcHl4X3RfNjsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hh ciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fIiwgMCk7CisrICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfUHJvcGVydHkiLCAwKTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTM0CistICogY2xhc3MgQ2FsbGJhY2tU aHJlYWQoVGhyZWFkKToKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorLSAqICAgICAgICAg VGhyZWFkLl9faW5pdF9fKHNlbGYpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorLSAqICAgICAgICAgc2VsZi5sb2NrID0gU2VtYXBo b3JlKCkKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKysgKiAgICAgY2RlZiBvYmplY3QgX19w eXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CisrICogICAg IGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4MDU3MmQxMTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4 X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21w YXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEsIG5hbWUpKSIgJSBfX3B5 eF9jaGVja3N1bSkKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8y LCBfX3B5eF9uX3NfVGhyZWFkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgMTEzNCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0g IF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF8yLCBfX3B5eF9u X3NfaW5pdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDExMzQsIF9f cHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9ERUNS RUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIF9fcHl4X3RfMiA9IE5VTEw7CistICBp ZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfMykpKSB7CistICAgIF9fcHl4X3RfMiA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7 CistICAgIGlmIChsaWtlbHkoX19weXhfdF8yKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlv biA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOworLSAgICAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAgX19w eXhfdF8xID0gKF9fcHl4X3RfMikgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8z LCBfX3B5eF90XzIsIF9fcHl4X3Zfc2VsZikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9f cHl4X3RfMywgX19weXhfdl9zZWxmKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsgX19w eXhfdF8yID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEx MzQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5 eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19weXhfdF8xID0gKChfX3B5eF92X19fcHl4X2No ZWNrc3VtICE9IDB4MDU3MmQxMSkgIT0gMCk7CisrICBpZiAoX19weXhfdF8xKSB7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzNQorLSAqICAgICBkZWYgX19pbml0 X18oc2VsZik6CistICogICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKKy0gKiAgICAgICAg IHNlbGYuZGFlbW9uID0gVHJ1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBzZWxmLmxvY2sgPSBTZW1hcGhvcmUoKQorLSAqICAgICAgICAgc2VsZi5sb2NrLmFjcXVp cmUoVHJ1ZSkKKy0gKi8KKy0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zf c2VsZiwgX19weXhfbl9zX2RhZW1vbiwgUHlfVHJ1ZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTEzNSwg X19weXhfTDFfZXJyb3IpCisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjUKKysgKiAgICAgY2Rl ZiBvYmplY3QgX19weXhfcmVzdWx0CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4MDU3 MmQxMToKKysgKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5 eF9QaWNrbGVFcnJvciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBy YWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHgw NTcyZDExID0gKGRhdGEsIG5hbWUpKSIgJSBfX3B5eF9jaGVja3N1bSkKKysgKiAgICAgX19weXhf cmVzdWx0ID0gUHJvcGVydHkuX19uZXdfXyhfX3B5eF90eXBlKQorKyAqLworKyAgICBfX3B5eF90 XzIgPSBQeUxpc3RfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigx LCA1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICAg IF9fUHl4X0lOQ1JFRihfX3B5eF9uX3NfUGlja2xlRXJyb3IpOworKyAgICBfX1B5eF9HSVZFUkVG KF9fcHl4X25fc19QaWNrbGVFcnJvcik7CisrICAgIFB5TGlzdF9TRVRfSVRFTShfX3B5eF90XzIs IDAsIF9fcHl4X25fc19QaWNrbGVFcnJvcik7CisrICAgIF9fcHl4X3RfMyA9IF9fUHl4X0ltcG9y dChfX3B5eF9uX3NfcGlja2xlLCBfX3B5eF90XzIsIC0xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsK KysgICAgX19weXhfdF8yID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzMsIF9fcHl4X25fc19Q aWNrbGVFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9f cHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhf SU5DUkVGKF9fcHl4X3RfMik7CisrICAgIF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IgPSBfX3B5 eF90XzI7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTM2CistICogICAgICAgICBUaHJlYWQuX19pbml0 X18oc2VsZikKKy0gKiAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorLSAqICAgICAgICAgc2Vs Zi5sb2NrID0gU2VtYXBob3JlKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoVHJ1ZSkKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sg PSBOb25lCisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjYKKysgKiAgICAgaWYgX19weXhfY2hl Y2tzdW0gIT0gMHgwNTcyZDExOgorKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2ts ZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNr bGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEs IG5hbWUpKSIgJSBfX3B5eF9jaGVja3N1bSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICBfX3B5eF9yZXN1bHQgPSBQcm9wZXJ0eS5fX25ld19fKF9fcHl4X3R5cGUpCisrICog ICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorICAqLworLSAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzMsIF9fcHl4X25fc19TZW1hcGhvcmUpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTM2LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzMpOworLSAgX19weXhfdF8yID0gTlVMTDsKKy0gIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsK Ky0gICAgX19weXhfdF8yID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKKy0gICAgaWYg KGxpa2VseShfX3B5eF90XzIpKSB7CistICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMyk7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Rf Mik7CistICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3RfMywgZnVuY3Rpb24pOworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9G cm9tX2xvbmcoX19weXhfdl9fX3B5eF9jaGVja3N1bSk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0KF9fcHl4X2tw X3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4MDUsIF9fcHl4X3RfMik7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9f cHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9y KTsKKysgICAgX19weXhfdF8yID0gX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcjsgX19weXhfdF81 ID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dF VF9TRUxGKF9fcHl4X3RfMik7CisrICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CisrICAg ICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8y KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworKyAgICAgICAgX19QeXhfSU5D UkVGKGZ1bmN0aW9uKTsKKysgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5j dGlvbik7CisrICAgICAgfQorICAgICB9CisrICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8g X19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF81LCBfX3B5eF90XzQp IDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfNCk7CisrICAg IF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKysgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgIGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8zKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 CisrICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMywgMCwgMCwgMCk7CisrICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgICBfX1BZWF9FUlIoMSwgNiwgX19weXhf TDFfZXJyb3IpCisrCisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKysgKiAgICAgY2RlZiBv YmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0 CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4MDU3MmQxMTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9y IGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJv cigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEsIG5hbWUp KSIgJSBfX3B5eF9jaGVja3N1bSkKKysgKi8KKyAgIH0KKy0gIF9fcHl4X3RfMSA9IChfX3B5eF90 XzIpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzMsIF9fcHl4X3RfMikgOiBf X1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8zKTsKKy0gIF9fUHl4X1hERUNSRUYoX19w eXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDExMzYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmIChf X1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2xvY2ssIF9f cHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMTEzNiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTM3CistICogICAgICAgICBzZWxmLmRhZW1vbiA9IFRydWUK Ky0gKiAgICAgICAgIHNlbGYubG9jayA9IFNlbWFwaG9yZSgpCistICogICAgICAgICBzZWxmLmxv Y2suYWNxdWlyZShUcnVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICBzZWxmLmNhbGxiYWNrID0gTm9uZQorLSAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gRmFs c2UKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjcKKysgKiAgICAgICAgIGZyb20gcGlja2xlIGlt cG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgorKyAqICAgICAgICAgcmFpc2Ug X19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4MDU3MmQx MSA9IChkYXRhLCBuYW1lKSkiICUgX19weXhfY2hlY2tzdW0pCisrICogICAgIF9fcHl4X3Jlc3Vs dCA9IFByb3BlcnR5Ll9fbmV3X18oX19weXhfdHlwZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIF9f cHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoPFByb3BlcnR5PiBfX3B5eF9yZXN1bHQs IF9fcHl4X3N0YXRlKQorICAqLworLSAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMCwgMTEzNywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYo X19weXhfdF8zKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19w eXhfdF8zLCBfX3B5eF9uX3NfYWNxdWlyZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDExMzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlP YmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X1Byb3BlcnR5KSwgX19weXhfbl9zX25ldyk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMik7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIF9f cHl4X3RfMyA9IE5VTEw7CisrICBfX3B5eF90XzQgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAg X19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKy0gICAgaWYgKGxpa2Vs eShfX3B5eF90XzMpKSB7CisrICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfMik7CisrICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgeworICAgICAgIFB5T2JqZWN0KiBm dW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzMpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworICAg ICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzIsIGZ1bmN0aW9uKTsKKyAgICAgfQorICAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3Rf MykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzMsIFB5X1Ry dWUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIFB5X1RydWUpOworLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEzNywgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fcHl4X3RfMyA9IChfX3B5eF90XzQpID8gX19QeXhf UHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF92X19fcHl4X3R5 cGUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfX19weXhf dHlwZSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA3LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKysgIF9fcHl4X3ZfX19weXhfcmVzdWx0ID0gX19weXhfdF8zOworKyAgX19weXhfdF8zID0g MDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTM4CistICogICAg ICAgICBzZWxmLmxvY2sgPSBTZW1hcGhvcmUoKQorLSAqICAgICAgICAgc2VsZi5sb2NrLmFjcXVp cmUoVHJ1ZSkKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IEZhbHNlCistICog CisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo4CisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNr bGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEs IG5hbWUpKSIgJSBfX3B5eF9jaGVja3N1bSkKKysgKiAgICAgX19weXhfcmVzdWx0ID0gUHJvcGVy dHkuX19uZXdfXyhfX3B5eF90eXBlKQorKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9u ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgX19weXhfdW5waWNr bGVfUHJvcGVydHlfX3NldF9zdGF0ZSg8UHJvcGVydHk+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3Rh dGUpCisrICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKyAgKi8KKy0gIGlmIChfX1B5eF9QeU9i amVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NhbGxiYWNrLCBQeV9Ob25l KSA8IDApIF9fUFlYX0VSUigwLCAxMTM4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9 IChfX3B5eF92X19fcHl4X3N0YXRlICE9IFB5X05vbmUpOworKyAgX19weXhfdF82ID0gKF9fcHl4 X3RfMSAhPSAwKTsKKysgIGlmIChfX3B5eF90XzYpIHsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTM5CistICogICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVl KQorLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKKy0gKiAgICAgICAgIHNlbGYuaXNz aHV0ZG93biA9IEZhbHNlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAg ICAgZGVmIHNodXRkb3duKHNlbGYpOgorKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo5CisrICog ICAgIF9fcHl4X3Jlc3VsdCA9IFByb3BlcnR5Ll9fbmV3X18oX19weXhfdHlwZSkKKysgKiAgICAg aWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6CisrICogICAgICAgICBfX3B5eF91bnBpY2tsZV9Q cm9wZXJ0eV9fc2V0X3N0YXRlKDxQcm9wZXJ0eT4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0 CisrICogY2RlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKFByb3BlcnR5IF9f cHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgorICAqLworLSAgaWYgKF9fUHl4X1B5T2Jq ZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfaXNzaHV0ZG93biwgUHlfRmFs c2UpIDwgMCkgX19QWVhfRVJSKDAsIDExMzksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAoIShs aWtlbHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5eF92 X19fcHl4X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3Is ICJFeHBlY3RlZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5X1RZUEUoX19weXhfdl9f X3B5eF9zdGF0ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCA5LCBfX3B5eF9MMV9lcnJv cikKKysgICAgX19weXhfdF8zID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhf dW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCAoKFB5T2JqZWN0 KilfX3B5eF92X19fcHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsK KysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMworLSAqIAorLSAqIGNsYXNzIENhbGxi YWNrVGhyZWFkKFRocmVhZCk6CistICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCist ICogICAgICAgICBzZWxmLmRhZW1vbiA9IFRydWUKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6 OAorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVj a3N1bXMgKCVzIHZzIDB4MDU3MmQxMSA9IChkYXRhLCBuYW1lKSkiICUgX19weXhfY2hlY2tzdW0p CisrICogICAgIF9fcHl4X3Jlc3VsdCA9IFByb3BlcnR5Ll9fbmV3X18oX19weXhfdHlwZSkKKysg KiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoPFBy b3BlcnR5PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19weXhf cmVzdWx0CisgICovCisrICB9CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9f cHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICAvKiAiKHRyZWUgZnJh Z21lbnQpIjoxMAorKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKysgKiAgICAg ICAgIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoPFByb3BlcnR5PiBfX3B5eF9y ZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19z ZXRfc3RhdGUoUHJvcGVydHkgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICog ICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5uYW1l ID0gX19weXhfc3RhdGVbMV0KKysgKi8KKysgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICBf X1B5eF9JTkNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQpOworKyAgX19weXhfciA9IF9fcHl4X3Zf X19weXhfcmVzdWx0OworICAgZ290byBfX3B5eF9MMDsKKysKKysgIC8qICIodHJlZSBmcmFnbWVu dCkiOjEKKysgKiBkZWYgX19weXhfdW5waWNrbGVfUHJvcGVydHkoX19weXhfdHlwZSwgbG9uZyBf X3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgIGNkZWYgb2Jq ZWN0IF9fcHl4X3Jlc3VsdAorKyAqLworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisg ICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMik7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBf X1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1RocmVhZC5fX2lu aXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAg X19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOwor KyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVf UHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsK KyAgIF9fcHl4X3IgPSBOVUxMOworICAgX19weXhfTDA6OworKyAgX19QeXhfWERFQ1JFRihfX3B5 eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9y ZXN1bHQpOworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQorLSAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0g RmFsc2UKKy0gKiAKKy0gKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVlCistICogICAg ICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorKy8qICIodHJlZSBmcmFnbWVudCkiOjExCisrICog ICAgICAgICBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKDxQcm9wZXJ0eT4gX19w eXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKysgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorKyAq IGNkZWYgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShQcm9wZXJ0eSBfX3B5eF9y ZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQu bmFtZSA9IF9fcHl4X3N0YXRlWzFdCisrICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFu ZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CisgICovCisgCistLyogUHl0aG9u IHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNENhbGxiYWNrVGhyZWFkXzNzaHV0ZG93bihQeU9iamVjdCAqX19weXhfc2VsZiwgUHlP YmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5 eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzNzaHV0ZG93biA9 IHsic2h1dGRvd24iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzE0Q2FsbGJhY2tUaHJlYWRfM3NodXRkb3duLCBNRVRIX08sIDB9OworLXN0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfM3NodXRk b3duKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CistICBQ eU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNodXRkb3duICh3cmFwcGVyKSIsIDApOworLSAg X19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFk XzJzaHV0ZG93bihfX3B5eF9zZWxmLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7CistCist ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMnNodXRkb3duKENZVEhP Tl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsK KytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Vu cGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3ZfX19weXhfcmVzdWx0LCBQeU9iamVjdCAqX19weXhf dl9fX3B5eF9zdGF0ZSkgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAg UHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVM TDsKKysgIGludCBfX3B5eF90XzI7CisrICBQeV9zc2l6ZV90IF9fcHl4X3RfMzsKKysgIGludCBf X3B5eF90XzQ7CisrICBpbnQgX19weXhfdF81OworKyAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5V TEw7CisrICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90 XzggPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5 eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgic2h1dGRvd24iLCAwKTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTQyCistICogCistICogICAgIGRlZiBzaHV0ZG93bihzZWxm KToKKy0gKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IFRydWUgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKKy0gKiAgICAgICAg IHNlbGYubG9jay5yZWxlYXNlKCkKKy0gKi8KKy0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRy U3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2lzc2h1dGRvd24sIFB5X1RydWUpIDwgMCkgX19Q WVhfRVJSKDAsIDExNDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUiLCAwKTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQzCistICogICAgIGRlZiBzaHV0ZG93 bihzZWxmKToKKy0gKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IFRydWUKKy0gKiAgICAgICAg IHNlbGYuY2FsbGJhY2sgPSBOb25lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKKy0gKiAKKysgIC8qICIodHJlZSBmcmFnbWVudCki OjEyCisrICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xl X1Byb3BlcnR5X19zZXRfc3RhdGUoUHJvcGVydHkgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9z dGF0ZSk6CisrICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4 X3Jlc3VsdC5uYW1lID0gX19weXhfc3RhdGVbMV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1 bHQsICdfX2RpY3RfXycpOgorKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0 ZShfX3B5eF9zdGF0ZVsyXSkKKyAgKi8KKy0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3Ry KF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NhbGxiYWNrLCBQeV9Ob25lKSA8IDApIF9fUFlYX0VS UigwLCAxMTQzLCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTQ0CistICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVlCistICog ICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorLSAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVh c2UoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGRlZiBjYWxs KHNlbGYpOgorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhf dF8yKTsKKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF8y LCBfX3B5eF9uX3NfcmVsZWFzZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDAsIDExNDQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Cist ICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIF9fcHl4X3RfMiA9 IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9D aGVjayhfX3B5eF90XzMpKSkgeworLSAgICBfX3B5eF90XzIgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzMpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMikpIHsKKy0gICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8zKTsKKy0gICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwor LSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlvbik7CistICAgIH0KKysg IGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7CisrICAgIFB5 RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qg c3Vic2NyaXB0YWJsZSIpOworKyAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQor ICAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3RfMikgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25l QXJnKF9fcHl4X3RfMywgX19weXhfdF8yKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5 eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJy b3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhf c3RhdGUsIDAsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK KysgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X19f cHl4X3Jlc3VsdC0+ZGF0YSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQt PmRhdGEpOworKyAgX19weXhfdl9fX3B5eF9yZXN1bHQtPmRhdGEgPSBfX3B5eF90XzE7CisrICBf X3B5eF90XzEgPSAwOworKyAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlf Tm9uZSkpIHsKKysgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlw ZScgb2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CisrICAgIF9fUFlYX0VSUigxLCAxMiwg X19weXhfTDFfZXJyb3IpCisrICB9CisrICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1 cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDEsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9u ZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR0lW RVJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5u YW1lKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+bmFtZSk7CisrICBf X3B5eF92X19fcHl4X3Jlc3VsdC0+bmFtZSA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQorLSAqICAgICAg ICAgc2VsZi5pc3NodXRkb3duID0gRmFsc2UKKy0gKiAKKy0gKiAgICAgZGVmIHNodXRkb3duKHNl bGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmlzc2h1 dGRvd24gPSBUcnVlCistICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorKyAgLyogIih0 cmVlIGZyYWdtZW50KSI6MTMKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRf c3RhdGUoUHJvcGVydHkgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAg IF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5uYW1lID0g X19weXhfc3RhdGVbMV0KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0 dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVsy XSkKKyAgKi8KKysgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUp KSB7CisrICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJvYmplY3Qgb2YgdHlw ZSAnTm9uZVR5cGUnIGhhcyBubyBsZW4oKSIpOworKyAgICBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgfQorKyAgX19weXhfdF8zID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF92 X19fcHl4X3N0YXRlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA9PSAoKFB5X3NzaXplX3QpLTEp KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNCA9ICgoX19w eXhfdF8zID4gMikgIT0gMCk7CisrICBpZiAoX19weXhfdF80KSB7CisrICB9IGVsc2UgeworKyAg ICBfX3B5eF90XzIgPSBfX3B5eF90XzQ7CisrICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9k b25lOworKyAgfQorKyAgX19weXhfdF80ID0gX19QeXhfSGFzQXR0cigoKFB5T2JqZWN0ICopX19w eXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7IGlmICh1bmxpa2VseShfX3B5eF90 XzQgPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfNSA9IChfX3B5eF90XzQgIT0gMCk7CisrICBfX3B5eF90XzIgPSBfX3B5eF90XzU7Cisr ICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OworKyAgaWYgKF9fcHl4X3RfMikgeworIAorLSAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5D UkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0g IF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsK Ky0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2LkNhbGxiYWNrVGhyZWFkLnNodXRkb3duIiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsKKy0gIF9f cHl4X0wwOjsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNDYKKy0gKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNl KCkKKy0gKiAKKy0gKiAgICAgZGVmIGNhbGwoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKKy0gKiAKKysgICAgLyogIih0 cmVlIGZyYWdtZW50KSI6MTQKKysgKiAgICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9zdGF0 ZVswXTsgX19weXhfcmVzdWx0Lm5hbWUgPSBfX3B5eF9zdGF0ZVsxXQorKyAqICAgICBpZiBsZW4o X19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgor KyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVsyXSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqLworKyAgICBfX3B5eF90XzYgPSBfX1B5 eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4X3Jlc3VsdCks IF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMSwg MTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgICAg X19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzYsIF9fcHl4X25f c191cGRhdGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigxLCAxNCwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgICAgaWYgKHVubGlrZWx5KF9fcHl4 X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKysgICAgICBQeUVycl9TZXRTdHJpbmcoUHlF eGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsK KysgICAgICBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICB9CisrICAgIF9f cHl4X3RfNiA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMiwg bG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9H T1RSRUYoX19weXhfdF82KTsKKysgICAgX19weXhfdF84ID0gTlVMTDsKKysgICAgaWYgKENZVEhP Tl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF83KSkpIHsK KysgICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzcpOworKyAgICAg IGlmIChsaWtlbHkoX19weXhfdF84KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0g UHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNyk7CisrICAgICAgICBfX1B5eF9JTkNSRUYo X19weXhfdF84KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBf X1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNywgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQor KyAgICBfX3B5eF90XzEgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhf X3B5eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF83LCBfX3B5eF90XzYpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7 IF9fcHl4X3RfOCA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYg PSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNCwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFk XzVjYWxsKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypw cm90byovCistc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18z bXB2XzE0Q2FsbGJhY2tUaHJlYWRfNWNhbGwgPSB7ImNhbGwiLCAoUHlDRnVuY3Rpb24pX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNWNhbGwsIE1FVEhfTywg MH07Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRD YWxsYmFja1RocmVhZF81Y2FsbChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjYWxsICh3cmFwcGVy KSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENh bGxiYWNrVGhyZWFkXzRjYWxsKF9fcHl4X3NlbGYsICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYp KTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF80Y2FsbChD WVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxm KSB7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CistICBfX1B5eF9SZWZOYW5ueURlY2xh cmF0aW9ucworLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CistICBQeU9iamVjdCAqX19w eXhfdF8yID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgaW50IF9f cHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Cist ICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi Y2FsbCIsIDApOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDcK Ky0gKiAKKy0gKiAgICAgZGVmIGNhbGwoc2VsZik6CistICogICAgICAgICBzZWxmLmxvY2sucmVs ZWFzZSgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgZGVmIHNl dChzZWxmLCBjYWxsYmFjayk6CisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjEzCisrICogY2Rl ZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKFByb3BlcnR5IF9fcHl4X3Jlc3Vs dCwgdHVwbGUgX19weXhfc3RhdGUpOgorKyAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4 X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubmFtZSA9IF9fcHl4X3N0YXRlWzFdCisrICogICAgIGlm IGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9f Jyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIF9fcHl4X3Jlc3Vs dC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbMl0pCisgICovCistICBfX3B5eF90XzIgPSBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2xvY2spOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTQ3LCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gX19QeXhfUHlP YmplY3RfR2V0QXR0clN0cihfX3B5eF90XzIsIF9fcHl4X25fc19yZWxlYXNlKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTE0NywgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5 eF90XzIgPSAwOworLSAgX19weXhfdF8yID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7CistICAgIF9fcHl4 X3RfMiA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7CistICAgIGlmIChsaWtlbHkoX19w eXhfdF8yKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzMpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOworLSAgICAg IF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90 XzMsIGZ1bmN0aW9uKTsKKy0gICAgfQorICAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3RfMikg PyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdF8yKSA6IF9fUHl4 X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMTE0NywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTE0NgorLSAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQorLSAq IAorLSAqICAgICBkZWYgY2FsbChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQorLSAqIAorKyAgLyogIih0cmVlIGZyYWdt ZW50KSI6MTEKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUo PFByb3BlcnR5PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19w eXhfcmVzdWx0CisrICogY2RlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKFBy b3BlcnR5IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07 IF9fcHl4X3Jlc3VsdC5uYW1lID0gX19weXhfc3RhdGVbMV0KKysgKiAgICAgaWYgbGVuKF9fcHl4 X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKyAgKi8K KyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworQEAgLTIyMTkwLDQzICsyMTc5NSw0NSBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxi YWNrVGhyZWFkXzRjYWxsKENZVEhPTl9VTgorICAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wx X2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYo X19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNhbGxiYWNrVGhyZWFkLmNhbGwiLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxM OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzcpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOworKyAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZSIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhf ciA9IDA7CisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAor LS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ5CistICogICAgICAgICBzZWxm LmxvY2sucmVsZWFzZSgpCistICogCistICogICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJhY2spOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmNhbGxiYWNrID0g Y2FsbGJhY2sKKy0gKiAKKysvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisrICogZGVmIF9fcHl4X3Vu cGlja2xlX0V2ZW50KF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRl KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBjZGVmIG9iamVjdCBfX3B5 eF9QaWNrbGVFcnJvcgorKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKyAgKi8KKyAK KyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfN3NldChQeU9iamVjdCAqX19weXhfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byov Cistc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0 Q2FsbGJhY2tUaHJlYWRfN3NldCA9IHsic2V0IiwgKFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVu Y3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJh Y2tUaHJlYWRfN3NldCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9OworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRf N3NldChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0 ICpfX3B5eF9rd2RzKSB7CistICBQeU9iamVjdCAqX19weXhfdl9zZWxmID0gMDsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF92X2NhbGxiYWNrID0gMDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19fcHl4X3VucGlja2xlX0V2ZW50KFB5T2JqZWN0ICpfX3B5 eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnBy b3RvKi8KKytzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNfX3B5eF91bnBpY2tsZV9FdmVudCA9IHsiX19weXhfdW5waWNrbGVfRXZlbnQiLCAoUHlD RnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNfX3B5eF91bnBpY2tsZV9FdmVudCwgTUVUSF9WQVJBUkdTfE1FVEhf S0VZV09SRFMsIDB9OworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzX19weXhfdW5waWNrbGVfRXZlbnQoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgeworKyAgUHlPYmplY3QgKl9f cHl4X3ZfX19weXhfdHlwZSA9IDA7CisrICBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tzdW07Cisr ICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSA9IDA7CisgICBpbnQgX19weXhfbGluZW5v ID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5 eF9jbGluZW5vID0gMDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0ICh3cmFw cGVyKSIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xl X0V2ZW50ICh3cmFwcGVyKSIsIDApOworICAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5 eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19zZWxmLCZfX3B5eF9uX3NfY2FsbGJhY2ssMH07 CistICAgIFB5T2JqZWN0KiB2YWx1ZXNbMl0gPSB7MCwwfTsKKysgICAgc3RhdGljIFB5T2JqZWN0 ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfcHl4X3R5cGUsJl9fcHl4X25fc19w eXhfY2hlY2tzdW0sJl9fcHl4X25fc19weXhfc3RhdGUsMH07CisrICAgIFB5T2JqZWN0KiB2YWx1 ZXNbM10gPSB7MCwwLDB9OworICAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKKyAgICAg ICBQeV9zc2l6ZV90IGt3X2FyZ3M7CisgICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9 IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CisgICAgICAgc3dpdGNoIChwb3NfYXJncykg eworKyAgICAgICAgY2FzZSAgMzogdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9h cmdzLCAyKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKyAgICAgICAgIGNhc2UgIDI6 IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CisgICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7CisgICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxl X0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworQEAgLTIyMjM3LDIwNyArMjE4NDQsMzc4IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tU aHJlYWRfN3NldChQeU9iamVjdCAqCisgICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4 X2t3ZHMpOworICAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKyAgICAgICAgIGNhc2UgIDA6Cist ICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihf X3B5eF9rd2RzLCBfX3B5eF9uX3Nfc2VsZikpICE9IDApKSBrd19hcmdzLS07CisrICAgICAgICBp ZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2Rz LCBfX3B5eF9uX3NfcHl4X3R5cGUpKSAhPSAwKSkga3dfYXJncy0tOworICAgICAgICAgZWxzZSBn b3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OworICAgICAgICAgY2FzZSAgMToKKy0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9f UHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19jYWxsYmFjaykpICE9 IDApKSBrd19hcmdzLS07CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9Q eURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X2NoZWNrc3VtKSkgIT0g MCkpIGt3X2FyZ3MtLTsKKyAgICAgICAgIGVsc2UgeworLSAgICAgICAgICBfX1B5eF9SYWlzZUFy Z3R1cGxlSW52YWxpZCgic2V0IiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5 eF9MM19lcnJvcikKKysgICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4 X3VucGlja2xlX0V2ZW50IiwgMSwgMywgMywgMSk7IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19l cnJvcikKKysgICAgICAgIH0KKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAg IGNhc2UgIDI6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMl0gPSBfX1B5eF9QeURpY3Rf R2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X3N0YXRlKSkgIT0gMCkpIGt3X2Fy Z3MtLTsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52 YWxpZCgiX19weXhfdW5waWNrbGVfRXZlbnQiLCAxLCAzLCAzLCAyKTsgX19QWVhfRVJSKDEsIDEs IF9fcHl4X0wzX2Vycm9yKQorICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBpZiAodW5saWtl bHkoa3dfYXJncyA+IDApKSB7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRp b25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9z X2FyZ3MsICJzZXQiKSA8IDApKSBfX1BZWF9FUlIoMCwgMTE0OSwgX19weXhfTDNfZXJyb3IpCisr ICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3 ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJfX3B5eF91bnBpY2ts ZV9FdmVudCIpIDwgMCkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKyAgICAgICB9 CistICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7Cisr ICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAzKSB7CisgICAg ICAgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKyAgICAgfSBlbHNlIHsKKyAgICAgICB2 YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworICAgICAgIHZhbHVl c1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CisrICAgICAgdmFsdWVzWzJd ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsKKyAgICAgfQorLSAgICBfX3B5eF92 X3NlbGYgPSB2YWx1ZXNbMF07CistICAgIF9fcHl4X3ZfY2FsbGJhY2sgPSB2YWx1ZXNbMV07Cisr ICAgIF9fcHl4X3ZfX19weXhfdHlwZSA9IHZhbHVlc1swXTsKKysgICAgX19weXhfdl9fX3B5eF9j aGVja3N1bSA9IF9fUHl4X1B5SW50X0FzX2xvbmcodmFsdWVzWzFdKTsgaWYgKHVubGlrZWx5KChf X3B5eF92X19fcHl4X2NoZWNrc3VtID09IChsb25nKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorKyAgICBfX3B5eF92X19fcHl4X3N0YXRl ID0gdmFsdWVzWzJdOworICAgfQorICAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdf ZG9uZTsKKyAgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVw bGVJbnZhbGlkKCJzZXQiLCAxLCAyLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsg X19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wzX2Vycm9yKQorKyAgX19QeXhfUmFpc2VBcmd0dXBs ZUludmFsaWQoIl9fcHl4X3VucGlja2xlX0V2ZW50IiwgMSwgMywgMywgUHlUdXBsZV9HRVRfU0la RShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKyAgIF9fcHl4 X0wzX2Vycm9yOjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNh bGxiYWNrVGhyZWFkLnNldCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhf dW5waWNrbGVfRXZlbnQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIE5VTEw7 CisgICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7CistICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNnNldChfX3B5eF9z ZWxmLCBfX3B5eF92X3NlbGYsIF9fcHl4X3ZfY2FsbGJhY2spOworKyAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMl9fcHl4X3VucGlja2xlX0V2ZW50KF9fcHl4X3Nl bGYsIF9fcHl4X3ZfX19weXhfdHlwZSwgX19weXhfdl9fX3B5eF9jaGVja3N1bSwgX19weXhfdl9f X3B5eF9zdGF0ZSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fUHl4X1Jl Zk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJl YWRfNnNldChDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9jYWxsYmFjaykgeworK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEyX19weXhfdW5waWNrbGVfRXZlbnQo Q1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19w eXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9iamVjdCAqX19weXhfdl9f X3B5eF9zdGF0ZSkgeworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IgPSAw OworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfcmVzdWx0ID0gMDsKKyAgIFB5T2JqZWN0ICpf X3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBpbnQgX19w eXhfdF8xOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19w eXhfdF8zID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAgUHlPYmpl Y3QgKl9fcHl4X3RfNSA9IE5VTEw7CisrICBpbnQgX19weXhfdF82OworICAgaW50IF9fcHl4X2xp bmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQg X19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0Iiwg MCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfRXZlbnQi LCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTUwCistICog CistICogICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJhY2spOgorLSAqICAgICAgICAgc2VsZi5jYWxs YmFjayA9IGNhbGxiYWNrICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAg ICAgZGVmIHJ1bihzZWxmKToKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKysgKiAgICAgY2Rl ZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVz dWx0CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4ZGEzOGMyNTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVy cm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVF cnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhkYTM4YzI1ID0gKGRhdGEsIGVy cm9yLCBpZCwgcmVwbHlfdXNlcmRhdGEpKSIgJSBfX3B5eF9jaGVja3N1bSkKKyAgKi8KKy0gIGlm IChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NhbGxi YWNrLCBfX3B5eF92X2NhbGxiYWNrKSA8IDApIF9fUFlYX0VSUigwLCAxMTUwLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X3RfMSA9ICgoX19weXhfdl9fX3B5eF9jaGVja3N1bSAhPSAweGRhMzhj MjUpICE9IDApOworKyAgaWYgKF9fcHl4X3RfMSkgeworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExNDkKKy0gKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKKy0g KiAKKy0gKiAgICAgZGVmIHNldChzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjaworLSAqIAorKyAg ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo1CisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3Vs dAorKyAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweGRhMzhjMjU6CisrICogICAgICAgICBm cm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJy b3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJv ciwgaWQsIHJlcGx5X3VzZXJkYXRhKSkiICUgX19weXhfY2hlY2tzdW0pCisrICogICAgIF9fcHl4 X3Jlc3VsdCA9IEV2ZW50Ll9fbmV3X18oX19weXhfdHlwZSkKKyAgKi8KKysgICAgX19weXhfdF8y ID0gUHlMaXN0X05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwg NSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBf X1B5eF9JTkNSRUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKysgICAgX19QeXhfR0lWRVJFRihf X3B5eF9uX3NfUGlja2xlRXJyb3IpOworKyAgICBQeUxpc3RfU0VUX0lURU0oX19weXhfdF8yLCAw LCBfX3B5eF9uX3NfUGlja2xlRXJyb3IpOworKyAgICBfX3B5eF90XzMgPSBfX1B5eF9JbXBvcnQo X19weXhfbl9zX3BpY2tsZSwgX19weXhfdF8yLCAtMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8z KSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8zKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisr ICAgIF9fcHl4X3RfMiA9IF9fUHl4X0ltcG9ydEZyb20oX19weXhfdF8zLCBfX3B5eF9uX3NfUGlj a2xlRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA1LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzIpOworKyAgICBfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yID0gX19weXhf dF8yOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgCistICAvKiBmdW5jdGlv biBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9u ZSk7CisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjYKKysgKiAgICAgaWYgX19weXhfY2hlY2tz dW0gIT0gMHhkYTM4YzI1OgorKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVy cm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVF cnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhkYTM4YzI1ID0gKGRhdGEsIGVy cm9yLCBpZCwgcmVwbHlfdXNlcmRhdGEpKSIgJSBfX3B5eF9jaGVja3N1bSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBfX3B5eF9yZXN1bHQgPSBFdmVudC5fX25ld19fKF9f cHl4X3R5cGUpCisrICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorKyAqLworKyAg ICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2xvbmcoX19weXhfdl9fX3B5eF9jaGVja3N1 bSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdF80ID0gX19Q eXhfUHlTdHJpbmdfRm9ybWF0KF9fcHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3Zz XzB4ZGEsIF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEs IDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X0lOQ1JF RihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKysgICAgX19weXhfdF8yID0gX19weXhfdl9f X3B5eF9QaWNrbGVFcnJvcjsgX19weXhfdF81ID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAg ICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CisrICAgICAgaWYg KGxpa2VseShfX3B5eF90XzUpKSB7CisrICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1l dGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzUpOworKyAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICAgIF9fUHl4 X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgICAgfQorKyAgICB9CisrICAg IF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4 X3RfMiwgX19weXhfdF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzIsIF9fcHl4X3RfNCk7CisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19w eXhfdF81ID0gMDsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7 CisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wx X2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMywg MCwgMCwgMCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwor KyAgICBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrCisrICAgIC8qICIodHJlZSBm cmFnbWVudCkiOjQKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAg ICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9 IDB4ZGEzOGMyNTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZnJv bSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAg ICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMg dnMgMHhkYTM4YzI1ID0gKGRhdGEsIGVycm9yLCBpZCwgcmVwbHlfdXNlcmRhdGEpKSIgJSBfX3B5 eF9jaGVja3N1bSkKKysgKi8KKysgIH0KKysKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjcKKysg KiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVF cnJvcgorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBj aGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJvciwgaWQsIHJlcGx5X3VzZXJk YXRhKSkiICUgX19weXhfY2hlY2tzdW0pCisrICogICAgIF9fcHl4X3Jlc3VsdCA9IEV2ZW50Ll9f bmV3X18oX19weXhfdHlwZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBp ZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0V2 ZW50X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqLwor KyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19w eXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KSwgX19weXhfbl9zX25ldyk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX3B5eF90XzQgPSBOVUxMOworKyAgaWYg KENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8y KSkpIHsKKysgICAgX19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysg ICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0g UHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CisrICAgICAgX19QeXhfSU5DUkVGKF9f cHl4X3RfNCk7CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9E RUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworKyAgICB9CisrICB9CisrICBfX3B5eF90 XzMgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9f cHl4X3RfNCwgX19weXhfdl9fX3B5eF90eXBlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8yLCBfX3B5eF92X19fcHl4X3R5cGUpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMSwgNywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhfdl9fX3B5 eF9yZXN1bHQgPSBfX3B5eF90XzM7CisrICBfX3B5eF90XzMgPSAwOworKworKyAgLyogIih0cmVl IGZyYWdtZW50KSI6OAorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29t cGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJvciwgaWQsIHJl cGx5X3VzZXJkYXRhKSkiICUgX19weXhfY2hlY2tzdW0pCisrICogICAgIF9fcHl4X3Jlc3VsdCA9 IEV2ZW50Ll9fbmV3X18oX19weXhfdHlwZSkKKysgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90 IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIF9fcHl4X3Vu cGlja2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRl KQorKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CisrICovCisrICBfX3B5eF90XzEgPSAoX19w eXhfdl9fX3B5eF9zdGF0ZSAhPSBQeV9Ob25lKTsKKysgIF9fcHl4X3RfNiA9IChfX3B5eF90XzEg IT0gMCk7CisrICBpZiAoX19weXhfdF82KSB7CisrCisrICAgIC8qICIodHJlZSBmcmFnbWVudCki OjkKKysgKiAgICAgX19weXhfcmVzdWx0ID0gRXZlbnQuX19uZXdfXyhfX3B5eF90eXBlKQorKyAq ICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIF9fcHl4X3VucGlj a2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQK KysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoRXZlbnQgX19weXhfcmVz dWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICovCisrICAgIGlmICghKGxpa2VseShQeVR1cGxl X0NoZWNrRXhhY3QoX19weXhfdl9fX3B5eF9zdGF0ZSkpfHwoKF9fcHl4X3ZfX19weXhfc3RhdGUp ID09IFB5X05vbmUpfHwoUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkV4cGVjdGVkICUu MTZzLCBnb3QgJS4yMDBzIiwgInR1cGxlIiwgUHlfVFlQRShfX3B5eF92X19fcHl4X3N0YXRlKS0+ dHBfbmFtZSksIDApKSkgX19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5 eF90XzMgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9FdmVu dF9fc2V0X3N0YXRlKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZl bnQgKilfX3B5eF92X19fcHl4X3Jlc3VsdCksICgoUHlPYmplY3QqKV9fcHl4X3ZfX19weXhfc3Rh dGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgOSwgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgICBfX1B5eF9ERUNSRUYo X19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6 OAorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVj a3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJvciwgaWQsIHJlcGx5X3VzZXJkYXRh KSkiICUgX19weXhfY2hlY2tzdW0pCisrICogICAgIF9fcHl4X3Jlc3VsdCA9IEV2ZW50Ll9fbmV3 X18oX19weXhfdHlwZSkKKysgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0V2ZW50 X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICBy ZXR1cm4gX19weXhfcmVzdWx0CisrICovCisrICB9CisrCisrICAvKiAiKHRyZWUgZnJhZ21lbnQp IjoxMAorKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIF9f cHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4 X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoRXZlbnQg X19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIF9fcHl4X3Jlc3VsdC5k YXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzFd OyBfX3B5eF9yZXN1bHQuaWQgPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnJlcGx5X3Vz ZXJkYXRhID0gX19weXhfc3RhdGVbM10KKysgKi8KKysgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQpOworKyAgX19weXhfciA9IF9f cHl4X3ZfX19weXhfcmVzdWx0OworICAgZ290byBfX3B5eF9MMDsKKysKKysgIC8qICIodHJlZSBm cmFnbWVudCkiOjEKKysgKiBkZWYgX19weXhfdW5waWNrbGVfRXZlbnQoX19weXhfdHlwZSwgbG9u ZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgIGNkZWYg b2JqZWN0IF9fcHl4X3Jlc3VsdAorKyAqLworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICov CisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5s aWJzLm1wdi5DYWxsYmFja1RocmVhZC5zZXQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8s IF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4 X1hERUNSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKysgIF9f UHl4X1hERUNSRUYoX19weXhfdF81KTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX0V2ZW50IiwgX19weXhfY2xpbmVubywgX19weXhfbGlu ZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5eF9yID0gTlVMTDsKKyAgIF9fcHl4X0wwOjsK KysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcik7CisrICBfX1B5eF9Y REVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Ip OworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsK KyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTIKKy0gKiAgICAg ICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjaworLSAqIAorLSAqICAgICBkZWYgcnVuKHNlbGYp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB3aGlsZSBub3Qgc2Vs Zi5pc3NodXRkb3duOgorLSAqICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCisr LyogIih0cmVlIGZyYWdtZW50KSI6MTEKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0V2ZW50 X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICBy ZXR1cm4gX19weXhfcmVzdWx0CisrICogY2RlZiBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0 YXRlKEV2ZW50IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVb MF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQuaWQg PSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnJlcGx5X3VzZXJkYXRhID0gX19weXhfc3Rh dGVbM10KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhf cmVzdWx0LCAnX19kaWN0X18nKToKKyAgKi8KKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tU aHJlYWRfOXJ1bihQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7 IC8qcHJvdG8qLworLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzlydW4gPSB7InJ1biIsIChQeUNGdW5jdGlvbilfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF85cnVuLCBNRVRIX08s IDB9OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0 Q2FsbGJhY2tUaHJlYWRfOXJ1bihQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJydW4gKHdyYXBwZXIp IiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2Fs bGJhY2tUaHJlYWRfOHJ1bihfX3B5eF9zZWxmLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7 CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfOHJ1bihDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7 Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91 bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0V2ZW50ICpfX3B5eF92X19fcHl4X3Jlc3VsdCwgUHlPYmplY3QgKl9fcHl4X3ZfX19w eXhfc3RhdGUpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKyAgIGludCBf X3B5eF90XzI7CistICBpbnQgX19weXhfdF8zOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5V TEw7CistICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90 XzYgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CisrICBlbnVtIG1wdl9l dmVudF9pZCBfX3B5eF90XzM7CisrICBpbnQgX19weXhfdF80OworKyAgUHlfc3NpemVfdCBfX3B5 eF90XzU7CisrICBpbnQgX19weXhfdF82OworKyAgaW50IF9fcHl4X3RfNzsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzggPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfOSA9IE5VTEw7CisrICBQ eU9iamVjdCAqX19weXhfdF8xMCA9IE5VTEw7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAg IGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5v ID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJydW4iLCAwKTsKKy0KKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTUzCistICogCistICogICAgIGRlZiBy dW4oc2VsZik6CistICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3NodXRkb3duOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUo VHJ1ZSkKKy0gKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBp ZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9uZQorLSAqLworLSAgd2hpbGUgKDEpIHsKKy0gICAgX19w eXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25f c19pc3NodXRkb3duKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE1 MywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBf X3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgMTE1MywgX19weXhfTDFfZXJyb3IpCistICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICBfX3B5eF90XzMg PSAoKCFfX3B5eF90XzIpICE9IDApOworLSAgICBpZiAoIV9fcHl4X3RfMykgYnJlYWs7CisrICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0 ZSIsIDApOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1NAor LSAqICAgICBkZWYgcnVuKHNlbGYpOgorLSAqICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNzaHV0 ZG93bjoKKy0gKiAgICAgICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgc2VsZi5tcHZfY2FsbGJhY2soc2Vs Zi5jYWxsYmFjaykgaWYgc2VsZi5jYWxsYmFjayBlbHNlIE5vbmUKKy0gKiAKKysgIC8qICIodHJl ZSBmcmFnbWVudCkiOjEyCisrICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKysgKiBjZGVmIF9f cHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoRXZlbnQgX19weXhfcmVzdWx0LCB0dXBsZSBf X3B5eF9zdGF0ZSk6CisrICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07 IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQuaWQgPSBf X3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnJlcGx5X3VzZXJkYXRhID0gX19weXhfc3RhdGVb M10gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBpZiBsZW4oX19weXhfc3Rh dGUpID4gNCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgorKyAqICAgICAg ICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkKKyAgKi8KKy0g ICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9f cHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTE1 NCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgICBf X3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNCwgX19weXhfbl9z X2FjcXVpcmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAxMTU0LCBf X3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CistICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBfX3B5eF90XzQgPSBOVUxM OworLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVj ayhfX3B5eF90XzUpKSkgeworLSAgICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9f cHl4X3RfNSk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CistICAgICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF81KTsKKy0gICAg ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworKyAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19w eXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKysgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF cnJvciwgIidOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CisrICAgIF9f UFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisrICB9CisrICBfX3B5eF90XzEgPSBfX1B5 eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDAsIGxvbmcsIDEsIF9fUHl4 X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zf X19weXhfcmVzdWx0LT5kYXRhKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3Vs dC0+ZGF0YSk7CisrICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+ZGF0YSA9IF9fcHl4X3RfMTsKKysg IF9fcHl4X3RfMSA9IDA7CisrICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQ eV9Ob25lKSkgeworKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVU eXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsKKysgICAgX19QWVhfRVJSKDEsIDEy LCBfX3B5eF9MMV9lcnJvcikKKysgIH0KKysgIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRf VHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMSwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9s b25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF90 XzIgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90 XzIgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigxLCAxMiwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK KysgIF9fcHl4X3ZfX19weXhfcmVzdWx0LT5lcnJvciA9IF9fcHl4X3RfMjsKKysgIGlmICh1bmxp a2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7CisrICAgIFB5RXJyX1NldFN0 cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0 YWJsZSIpOworKyAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgfQorKyAg X19weXhfdF8xID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAy LCBsb25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKysgIF9fcHl4X3RfMyA9ICgoZW51bSBtcHZfZXZlbnRfaWQpX19Q eXhfUHlJbnRfQXNfZW51bV9fbXB2X2V2ZW50X2lkKF9fcHl4X3RfMSkpOyBpZiAodW5saWtlbHko UHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9fcHl4X3ZfX19weXhf cmVzdWx0LT5pZCA9IF9fcHl4X3RfMzsKKysgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0 YXRlID09IFB5X05vbmUpKSB7CisrICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3Is ICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOworKyAgICBfX1BZWF9F UlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgfQorKyAgX19weXhfdF8xID0gX19QeXhfR2V0 SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAzLCBsb25nLCAxLCBfX1B5eF9QeUlu dF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysg IF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X19fcHl4 X3Jlc3VsdC0+cmVwbHlfdXNlcmRhdGEpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3ZfX19weXhf cmVzdWx0LT5yZXBseV91c2VyZGF0YSk7CisrICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+cmVwbHlf dXNlcmRhdGEgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworKworKyAgLyogIih0cmVl IGZyYWdtZW50KSI6MTMKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUo RXZlbnQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIF9fcHl4X3Jl c3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0 YXRlWzFdOyBfX3B5eF9yZXN1bHQuaWQgPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnJl cGx5X3VzZXJkYXRhID0gX19weXhfc3RhdGVbM10KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRl KSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0 ZShfX3B5eF9zdGF0ZVs0XSkKKysgKi8KKysgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0 YXRlID09IFB5X05vbmUpKSB7CisrICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3Is ICJvYmplY3Qgb2YgdHlwZSAnTm9uZVR5cGUnIGhhcyBubyBsZW4oKSIpOworKyAgICBfX1BZWF9F UlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgfQorKyAgX19weXhfdF81ID0gUHlUdXBsZV9H RVRfU0laRShfX3B5eF92X19fcHl4X3N0YXRlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNSA9PSAo KFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfNiA9ICgoX19weXhfdF81ID4gNCkgIT0gMCk7CisrICBpZiAoX19weXhfdF82KSB7Cisr ICB9IGVsc2UgeworKyAgICBfX3B5eF90XzQgPSBfX3B5eF90XzY7CisrICAgIGdvdG8gX19weXhf TDRfYm9vbF9iaW5vcF9kb25lOworKyAgfQorKyAgX19weXhfdF82ID0gX19QeXhfSGFzQXR0cigo KFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7IGlmICh1 bmxpa2VseShfX3B5eF90XzYgPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfNyA9IChfX3B5eF90XzYgIT0gMCk7CisrICBfX3B5eF90XzQg PSBfX3B5eF90Xzc7CisrICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OworKyAgaWYgKF9fcHl4 X3RfNCkgeworKworKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNAorKyAqICAgICBfX3B5eF9y ZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9z dGF0ZVsxXTsgX19weXhfcmVzdWx0LmlkID0gX19weXhfc3RhdGVbMl07IF9fcHl4X3Jlc3VsdC5y ZXBseV91c2VyZGF0YSA9IF9fcHl4X3N0YXRlWzNdCisrICogICAgIGlmIGxlbihfX3B5eF9zdGF0 ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CisrICogICAgICAg ICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzRdKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICovCisrICAgIF9fcHl4X3RfOCA9IF9fUHl4X1B5T2JqZWN0 X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfcmVzdWx0KSwgX19weXhfbl9z X2RpY3QpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOCkpIF9fUFlYX0VSUigxLCAxNCwgX19weXhf TDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzgpOworKyAgICBfX3B5eF90Xzkg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfOCwgX19weXhfbl9zX3VwZGF0ZSk7 IGlmICh1bmxpa2VseSghX19weXhfdF85KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJv cikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfOSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzgpOyBfX3B5eF90XzggPSAwOworKyAgICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9z dGF0ZSA9PSBQeV9Ob25lKSkgeworKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJy b3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOworKyAgICAgIF9f UFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCisrICAgIH0KKysgICAgX19weXhfdF84ID0g X19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCA0LCBsb25nLCAxLCBf X1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOCkp IF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzgpOworKyAgICBfX3B5eF90XzEwID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF85KSkpIHsKKysgICAgICBf X3B5eF90XzEwID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF85KTsKKysgICAgICBpZiAobGlr ZWx5KF9fcHl4X3RfMTApKSB7CisrICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhv ZF9HRVRfRlVOQ1RJT04oX19weXhfdF85KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzEwKTsKKyAgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9E RUNSRUZfU0VUKF9fcHl4X3RfNSwgZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF90XzksIGZ1bmN0aW9uKTsKKyAgICAgICB9CisgICAgIH0KKy0gICAgX19weXhfdF8x ID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF81LCBfX3B5 eF90XzQsIFB5X1RydWUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzUsIFB5 X1RydWUpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Cist ICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNTQsIF9fcHl4X0wx X2Vycm9yKQorKyAgICBfX3B5eF90XzEgPSAoX19weXhfdF8xMCkgPyBfX1B5eF9QeU9iamVjdF9D YWxsMkFyZ3MoX19weXhfdF85LCBfX3B5eF90XzEwLCBfX3B5eF90XzgpIDogX19QeXhfUHlPYmpl Y3RfQ2FsbE9uZUFyZyhfX3B5eF90XzksIF9fcHl4X3RfOCk7CisrICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xMCk7IF9fcHl4X3RfMTAgPSAwOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF84 KTsgX19weXhfdF84ID0gMDsKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90XzkgPSAwOworICAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExNTUKKy0gKiAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmlzc2h1dGRvd246Cist ICogICAgICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoVHJ1ZSkKKy0gKiAgICAgICAgICAgICBz ZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBpZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9u ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGRlZiBtcHZfY2Fs bGJhY2soc2VsZiwgY2FsbGJhY2spOgorKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMworKyAq IGNkZWYgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShFdmVudCBfX3B5eF9yZXN1bHQs IHR1cGxlIF9fcHl4X3N0YXRlKToKKysgKiAgICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9z dGF0ZVswXTsgX19weXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMV07IF9fcHl4X3Jlc3Vs dC5pZCA9IF9fcHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQucmVwbHlfdXNlcmRhdGEgPSBfX3B5 eF9zdGF0ZVszXQorKyAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0cihf X3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzRdKQor ICAqLworLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zf c2VsZiwgX19weXhfbl9zX2NhbGxiYWNrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZ WF9FUlIoMCwgMTE1NSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzUpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF81KTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwgMTE1NSwgX19weXhfTDFf ZXJyb3IpCistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworLSAg ICBpZiAoX19weXhfdF8zKSB7CistICAgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19tcHZfY2FsbGJhY2spOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMTU1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgICBfX3B5eF90XzYgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NhbGxiYWNrKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE1NSwgX19weXhfTDFfZXJyb3IpCist ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICAgICAgX19weXhfdF83ID0gTlVMTDsK Ky0gICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVj ayhfX3B5eF90XzQpKSkgeworLSAgICAgICAgX19weXhfdF83ID0gUHlNZXRob2RfR0VUX1NFTEYo X19weXhfdF80KTsKKy0gICAgICAgIGlmIChsaWtlbHkoX19weXhfdF83KSkgeworLSAgICAgICAg ICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF80KTsK Ky0gICAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNyk7CistICAgICAgICAgIF9fUHl4X0lO Q1JFRihmdW5jdGlvbik7CistICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF80LCBm dW5jdGlvbik7CistICAgICAgICB9CistICAgICAgfQorLSAgICAgIF9fcHl4X3RfNSA9IChfX3B5 eF90XzcpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNCwgX19weXhfdF83LCBf X3B5eF90XzYpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3Rf Nik7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAg ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICAgIGlmICh1 bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDExNTUsIF9fcHl4X0wxX2Vycm9yKQor LSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICAgIF9fcHl4X3RfMSA9IF9fcHl4X3RfNTsKKy0g ICAgICBfX3B5eF90XzUgPSAwOworLSAgICB9IGVsc2UgeworLSAgICAgIF9fUHl4X0lOQ1JFRihQ eV9Ob25lKTsKKy0gICAgICBfX3B5eF90XzEgPSBQeV9Ob25lOworLSAgICB9CistICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworICAgfQorIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTIKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sg PSBjYWxsYmFjaworLSAqIAorLSAqICAgICBkZWYgcnVuKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3NodXRkb3duOgorLSAq ICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCisrICAvKiAiKHRyZWUgZnJhZ21l bnQpIjoxMQorKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZSg8RXZl bnQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICogICAgIHJldHVybiBfX3B5eF9yZXN1 bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoRXZlbnQgX19weXhf cmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0 LmVycm9yID0gX19weXhfc3RhdGVbMV07IF9fcHl4X3Jlc3VsdC5pZCA9IF9fcHl4X3N0YXRlWzJd OyBfX3B5eF9yZXN1bHQucmVwbHlfdXNlcmRhdGEgPSBfX3B5eF9zdGF0ZVszXQorKyAqICAgICBp ZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3Rf XycpOgorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCitAQCAtMjI0NDUsNDUg KzIyMjIzLDQ1IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzE0Q2FsbGJhY2tUaHJlYWRfOHJ1bihDWVRIT05fVU5VCisgICBnb3RvIF9fcHl4X0wwOwor ICAgX19weXhfTDFfZXJyb3I6OworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzQpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzYpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOwor LSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQu cnVuIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBf X3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsKKysgIF9fUHl4X1hE RUNSRUYoX19weXhfdF85KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xMCk7CisrICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9FdmVudF9f c2V0X3N0YXRlIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 CisrICBfX3B5eF9yID0gMDsKKyAgIF9fcHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4 X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhf cjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTcKKy0gKiAg ICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBpZiBzZWxmLmNhbGxi YWNrIGVsc2UgTm9uZQorLSAqIAorLSAqICAgICBkZWYgbXB2X2NhbGxiYWNrKHNlbGYsIGNhbGxi YWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgdHJ5OgorLSAq ICAgICAgICAgICAgIGNhbGxiYWNrKCkKKysvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisrICogZGVm IF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyhfX3B5eF90eXBlLCBsb25nIF9fcHl4X2No ZWNrc3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19w eXhfcmVzdWx0CisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzExbXB2 X2NhbGxiYWNrKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlP YmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlNZXRob2REZWYgX19weXhf bWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8xMW1wdl9jYWxsYmFj ayA9IHsibXB2X2NhbGxiYWNrIiwgKFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRo S2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRf MTFtcHZfY2FsbGJhY2ssIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfTsKKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFk XzExbXB2X2NhbGxiYWNrKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJn cywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKy0gIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9f cHl4X3Zfc2VsZiA9IDA7CistICBQeU9iamVjdCAqX19weXhfdl9jYWxsYmFjayA9IDA7Cisrc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVfX3B5eF91bnBp Y2tsZV9SZW5kZXJGcmFtZUluZm8oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLworK3N0YXRpYyBQeU1ldGhv ZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNV9fcHl4X3VucGlja2xlX1Jl bmRlckZyYW1lSW5mbyA9IHsiX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvIiwgKFB5Q0Z1 bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzE1X19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCBNRVRIX1ZBUkFS R1N8TUVUSF9LRVlXT1JEUywgMH07Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTVfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8oUHlPYmplY3Qg Kl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykg eworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSA9IDA7CisrICBsb25nIF9fcHl4X3Zf X19weXhfY2hlY2tzdW07CisrICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSA9IDA7Cisg ICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0g MDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgibXB2X2NhbGxiYWNrICh3cmFwcGVyKSIsIDApOworKyAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyAod3JhcHBlcikiLCAw KTsKKyAgIHsKKy0gICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZf X3B5eF9uX3Nfc2VsZiwmX19weXhfbl9zX2NhbGxiYWNrLDB9OworLSAgICBQeU9iamVjdCogdmFs dWVzWzJdID0gezAsMH07CisrICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNb XSA9IHsmX19weXhfbl9zX3B5eF90eXBlLCZfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCZfX3B5eF9u X3NfcHl4X3N0YXRlLDB9OworKyAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCwwfTsKKyAg ICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7CisgICAgICAgUHlfc3NpemVfdCBrd19hcmdz OworICAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9f cHl4X2FyZ3MpOworICAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDM6 IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CisrICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7CisgICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxl X0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwor ICAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdz LCAwKTsKK0BAIC0yMjQ5NCw2MDY4ICsyMjI3MiwyMzcwIEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTFtcHZfY2FsbGJh Y2soCisgICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworICAgICAgIHN3 aXRjaCAocG9zX2FyZ3MpIHsKKyAgICAgICAgIGNhc2UgIDA6CistICAgICAgICBpZiAobGlrZWx5 KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9u X3Nfc2VsZikpICE9IDApKSBrd19hcmdzLS07CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNb MF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X3R5 cGUpKSAhPSAwKSkga3dfYXJncy0tOworICAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1X2FyZ3R1 cGxlX2Vycm9yOworICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworICAgICAgICAgY2FzZSAg MToKKy0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVt U3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19jYWxsYmFjaykpICE9IDApKSBrd19hcmdzLS07Cisr ICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihf X3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X2NoZWNrc3VtKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKyAg ICAgICAgIGVsc2UgeworLSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgibXB2 X2NhbGxiYWNrIiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MM19lcnJv cikKKysgICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3VucGlja2xl X1JlbmRlckZyYW1lSW5mbyIsIDEsIDMsIDMsIDEpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNf ZXJyb3IpCisrICAgICAgICB9CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAg ICBjYXNlICAyOgorKyAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzJdID0gX19QeXhfUHlEaWN0 X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF9zdGF0ZSkpICE9IDApKSBrd19h cmdzLS07CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUlu dmFsaWQoIl9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyIsIDEsIDMsIDMsIDIpOyBfX1BZ WF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCisgICAgICAgICB9CisgICAgICAgfQorICAgICAg IGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5 eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwg dmFsdWVzLCBwb3NfYXJncywgIm1wdl9jYWxsYmFjayIpIDwgMCkpIF9fUFlYX0VSUigwLCAxMTU3 LCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlv bmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3Nf YXJncywgIl9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyIpIDwgMCkpIF9fUFlYX0VSUigx LCAxLCBfX3B5eF9MM19lcnJvcikKKyAgICAgICB9CistICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9H RVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7CisrICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKSAhPSAzKSB7CisgICAgICAgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9l cnJvcjsKKyAgICAgfSBlbHNlIHsKKyAgICAgICB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVN KF9fcHl4X2FyZ3MsIDApOworICAgICAgIHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMSk7CisrICAgICAgdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9h cmdzLCAyKTsKKyAgICAgfQorLSAgICBfX3B5eF92X3NlbGYgPSB2YWx1ZXNbMF07CistICAgIF9f cHl4X3ZfY2FsbGJhY2sgPSB2YWx1ZXNbMV07CisrICAgIF9fcHl4X3ZfX19weXhfdHlwZSA9IHZh bHVlc1swXTsKKysgICAgX19weXhfdl9fX3B5eF9jaGVja3N1bSA9IF9fUHl4X1B5SW50X0FzX2xv bmcodmFsdWVzWzFdKTsgaWYgKHVubGlrZWx5KChfX3B5eF92X19fcHl4X2NoZWNrc3VtID09IChs b25nKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vy cm9yKQorKyAgICBfX3B5eF92X19fcHl4X3N0YXRlID0gdmFsdWVzWzJdOworICAgfQorICAgZ290 byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKyAgIF9fcHl4X0w1X2FyZ3R1cGxl X2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJtcHZfY2FsbGJhY2siLCAx LCAyLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDExNTcs IF9fcHl4X0wzX2Vycm9yKQorKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3Vu cGlja2xlX1JlbmRlckZyYW1lSW5mbyIsIDEsIDMsIDMsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhf YXJncykpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCisgICBfX3B5eF9MM19lcnJv cjo7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1Ro cmVhZC5tcHZfY2FsbGJhY2siLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2Zp bGVuYW1lKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4 X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICBy ZXR1cm4gTlVMTDsKKyAgIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8x MG1wdl9jYWxsYmFjayhfX3B5eF9zZWxmLCBfX3B5eF92X3NlbGYsIF9fcHl4X3ZfY2FsbGJhY2sp OworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9fcHl4X3Vu cGlja2xlX1JlbmRlckZyYW1lSW5mbyhfX3B5eF9zZWxmLCBfX3B5eF92X19fcHl4X3R5cGUsIF9f cHl4X3ZfX19weXhfY2hlY2tzdW0sIF9fcHl4X3ZfX19weXhfc3RhdGUpOworIAorICAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAg IHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNrKENZVEhPTl9V TlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4 X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2FsbGJhY2spIHsKKy0gIFB5T2JqZWN0ICpfX3B5 eF92X2UgPSBOVUxMOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzE0X19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvKENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5cGUsIGxvbmcgX19w eXhfdl9fX3B5eF9jaGVja3N1bSwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKysg IFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yID0gMDsKKysgIFB5T2JqZWN0ICpf X3B5eF92X19fcHl4X3Jlc3VsdCA9IDA7CisgICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Cisg ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5V TEw7CisrICBpbnQgX19weXhfdF8xOworICAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Cisg ICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBO VUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhf dF82ID0gTlVMTDsKKy0gIGludCBfX3B5eF90Xzc7CistICBQeU9iamVjdCAqX19weXhfdF84ID0g TlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzkgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4 X3RfMTAgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMTEgPSBOVUxMOworKyAgaW50IF9f cHl4X3RfNjsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIm1wdl9jYWxsYmFjayIsIDApOworKyAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyIsIDApOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTgKKy0gKiAKKy0gKiAgICAgZGVm IG1wdl9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6CistICogICAgICAgICB0cnk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBjYWxsYmFjaygpCistICogICAg ICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0Cisr ICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgIGNkZWYgb2JqZWN0 IF9fcHl4X3Jlc3VsdAorKyAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweGQ0MWQ4Y2Q6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9y dCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgorKyAqICAgICAgICAgcmFpc2UgX19w eXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZDQxZDhjZCA9 ICgpKSIgJSBfX3B5eF9jaGVja3N1bSkKKyAgKi8KKy0gIHsKKy0gICAgX19QeXhfUHlUaHJlYWRT dGF0ZV9kZWNsYXJlCistICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfYXNzaWduCistICAgIF9fUHl4 X0V4Y2VwdGlvblNhdmUoJl9fcHl4X3RfMSwgJl9fcHl4X3RfMiwgJl9fcHl4X3RfMyk7CistICAg IF9fUHl4X1hHT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzIp OworLSAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7CistICAgIC8qdHJ5OiovIHsKKysgIF9f cHl4X3RfMSA9ICgoX19weXhfdl9fX3B5eF9jaGVja3N1bSAhPSAweGQ0MWQ4Y2QpICE9IDApOwor KyAgaWYgKF9fcHl4X3RfMSkgeworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTU5CistICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgor LSAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgIGNhbGxiYWNrKCkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorLSAq ICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInB5bXB2IGVycm9yIGR1cmluZyBjYWxsYmFj azogJXNcbiIgJSBlKQorKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo1CisrICogICAgIGNkZWYg b2JqZWN0IF9fcHl4X3Jlc3VsdAorKyAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweGQ0MWQ4 Y2Q6CisrICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhf UGlja2xlRXJyb3IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmFp c2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZDQx ZDhjZCA9ICgpKSIgJSBfX3B5eF9jaGVja3N1bSkKKysgKiAgICAgX19weXhfcmVzdWx0ID0gUmVu ZGVyRnJhbWVJbmZvLl9fbmV3X18oX19weXhfdHlwZSkKKyAgKi8KKy0gICAgICBfX1B5eF9JTkNS RUYoX19weXhfdl9jYWxsYmFjayk7CistICAgICAgX19weXhfdF81ID0gX19weXhfdl9jYWxsYmFj azsgX19weXhfdF82ID0gTlVMTDsKKy0gICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNSkpKSB7CistICAgICAgICBfX3B5eF90 XzYgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzUpOworLSAgICAgICAgaWYgKGxpa2VseShf X3B5eF90XzYpKSB7CistICAgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dF VF9GVU5DVElPTihfX3B5eF90XzUpOworLSAgICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF82 KTsKKy0gICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgICAgX19QeXhf REVDUkVGX1NFVChfX3B5eF90XzUsIGZ1bmN0aW9uKTsKKy0gICAgICAgIH0KKy0gICAgICB9Cist ICAgICAgX19weXhfdF80ID0gKF9fcHl4X3RfNikgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfNSwgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90 XzUpOworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0g ICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMTU5LCBfX3B5eF9M M19lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgICAgX19weXhfdF8yID0gUHlMaXN0X05ldygxKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3Ip CisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhf bl9zX1BpY2tsZUVycm9yKTsKKysgICAgX19QeXhfR0lWRVJFRihfX3B5eF9uX3NfUGlja2xlRXJy b3IpOworKyAgICBQeUxpc3RfU0VUX0lURU0oX19weXhfdF8yLCAwLCBfX3B5eF9uX3NfUGlja2xl RXJyb3IpOworKyAgICBfX3B5eF90XzMgPSBfX1B5eF9JbXBvcnQoX19weXhfbl9zX3BpY2tsZSwg X19weXhfdF8yLCAtMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDUs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fcHl4X3RfMiA9IF9f UHl4X0ltcG9ydEZyb20oX19weXhfdF8zLCBfX3B5eF9uX3NfUGlja2xlRXJyb3IpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOwor KyAgICBfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yID0gX19weXhfdF8yOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExNTgKKy0gKiAKKy0gKiAgICAgZGVmIG1wdl9jYWxsYmFjayhzZWxmLCBjYWxs YmFjayk6CistICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICBjYWxsYmFjaygpCistICogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFz IGU6CisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjYKKysgKiAgICAgaWYgX19weXhfY2hlY2tz dW0gIT0gMHhkNDFkOGNkOgorKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVy cm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVF cnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhkNDFkOGNkID0gKCkpIiAlIF9f cHl4X2NoZWNrc3VtKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIF9fcHl4 X3Jlc3VsdCA9IFJlbmRlckZyYW1lSW5mby5fX25ld19fKF9fcHl4X3R5cGUpCisrICogICAgIGlm IF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorICAqLworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9Q eUludF9Gcm9tX2xvbmcoX19weXhfdl9fX3B5eF9jaGVja3N1bSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0KF9f cHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4ZDQsIF9fcHl4X3RfMik7IGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Mik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X1BpY2ts ZUVycm9yKTsKKysgICAgX19weXhfdF8yID0gX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcjsgX19w eXhfdF81ID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2Vs eShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICAgIF9fcHl4X3RfNSA9IFB5TWV0 aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CisrICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7 CisrICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19w eXhfdF8yKTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworKyAgICAgICAgX19Q eXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8y LCBmdW5jdGlvbik7CisrICAgICAgfQorICAgICB9CistICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOyBfX3B5 eF90XzIgPSAwOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7 CistICAgIGdvdG8gX19weXhfTDhfdHJ5X2VuZDsKKy0gICAgX19weXhfTDNfZXJyb3I6OworLSAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgIF9fcHl4X3Rf MyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19w eXhfdF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIs IF9fcHl4X3RfNCk7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0g MDsKKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICBf X1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgICAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzMpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhf dF8yID0gMDsKKysgICAgX19QeXhfUmFpc2UoX19weXhfdF8zLCAwLCAwLCAwKTsKKysgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICAgIF9fUFlYX0VSUigxLCA2 LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExNjAKKy0gKiAgICAgICAgIHRyeToKKy0gKiAgICAgICAgICAgICBjYWxsYmFjaygpCist ICogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJweW1wdiBlcnJvciBkdXJp bmcgY2FsbGJhY2s6ICVzXG4iICUgZSkKKy0gKiAKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6 NAorKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgorKyAqICAgICBjZGVmIG9i amVjdCBfX3B5eF9yZXN1bHQKKysgKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHhkNDFkOGNk OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBmcm9tIHBpY2tsZSBp bXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgICAgIHJhaXNl IF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGQ0MWQ4 Y2QgPSAoKSkiICUgX19weXhfY2hlY2tzdW0pCisgICovCistICAgIF9fcHl4X3RfNyA9IF9fUHl4 X1B5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoKChQeU9iamVjdCAqKSgmKChQeVR5cGVPYmplY3QqKVB5 RXhjX0V4Y2VwdGlvbilbMF0pKSk7CistICAgIGlmIChfX3B5eF90XzcpIHsKKy0gICAgICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1RocmVhZC5tcHZfY2Fs bGJhY2siLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0g ICAgICBpZiAoX19QeXhfR2V0RXhjZXB0aW9uKCZfX3B5eF90XzQsICZfX3B5eF90XzUsICZfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNjAsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKy0g ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF81KTsKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF81KTsKKy0gICAgICBfX3B5eF92X2UgPSBfX3B5eF90XzU7CisrICB9CisgCist ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNjEKKy0gKiAgICAgICAg ICAgICBjYWxsYmFjaygpCistICogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CistICog ICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgicHltcHYgZXJyb3IgZHVyaW5nIGNhbGxiYWNr OiAlc1xuIiAlIGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiBjZGVm IHZvaWQgX2NfY2FsbGJhY2sodm9pZCogZCkgd2l0aCBnaWw6CisrICAvKiAiKHRyZWUgZnJhZ21l bnQpIjo3CisrICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19w eXhfUGlja2xlRXJyb3IKKysgKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNv bXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGQ0MWQ4Y2QgPSAoKSkiICUgX19weXhfY2hlY2tz dW0pCisrICogICAgIF9fcHl4X3Jlc3VsdCA9IFJlbmRlckZyYW1lSW5mby5fX25ld19fKF9fcHl4 X3R5cGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgaWYgX19weXhfc3Rh dGUgaXMgbm90IE5vbmU6CisrICogICAgICAgICBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUlu Zm9fX3NldF9zdGF0ZSg8UmVuZGVyRnJhbWVJbmZvPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRl KQorICAqLworLSAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF85LCBfX3B5 eF9uX3Nfc3lzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzkpKSBfX1BZWF9FUlIoMCwgMTE2MSwg X19weXhfTDVfZXhjZXB0X2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzkpOwor LSAgICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfOSwg X19weXhfbl9zX3N0ZGVycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xMCkpIF9fUFlYX0VSUigw LCAxMTYxLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMTApOworLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90XzkgPSAwOwor LSAgICAgIF9fcHl4X3RfOSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF8xMCwg X19weXhfbl9zX3dyaXRlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzkpKSBfX1BZWF9FUlIoMCwg MTE2MSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzkpOworLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEwKTsgX19weXhfdF8xMCA9IDA7Cist ICAgICAgX19weXhfdF8xMCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdFNhZmUoX19weXhfa3Bfc19w eW1wdl9lcnJvcl9kdXJpbmdfY2FsbGJhY2tfcywgX19weXhfdl9lKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEwKSkgX19QWVhfRVJSKDAsIDExNjEsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKy0g ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xMCk7CistICAgICAgX19weXhfdF8xMSA9IE5VTEw7 CistICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF85KSkpIHsKKy0gICAgICAgIF9fcHl4X3RfMTEgPSBQeU1ldGhvZF9HRVRfU0VM RihfX3B5eF90XzkpOworLSAgICAgICAgaWYgKGxpa2VseShfX3B5eF90XzExKSkgeworLSAgICAg ICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF85 KTsKKy0gICAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMTEpOworLSAgICAgICAgICBfX1B5 eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Rf OSwgZnVuY3Rpb24pOworLSAgICAgICAgfQorLSAgICAgIH0KKy0gICAgICBfX3B5eF90XzggPSAo X19weXhfdF8xMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF85LCBfX3B5eF90 XzExLCBfX3B5eF90XzEwKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF85LCBf X3B5eF90XzEwKTsKKy0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90XzEx ID0gMDsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xMCk7IF9fcHl4X3RfMTAgPSAwOwor LSAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF84KSkgX19QWVhfRVJSKDAsIDExNjEsIF9fcHl4 X0w1X2V4Y2VwdF9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF84KTsKKy0gICAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF85KTsgX19weXhfdF85ID0gMDsKKy0gICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF84KTsgX19weXhfdF84ID0gMDsKKy0gICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUp OyBfX3B5eF90XzUgPSAwOworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKKy0gICAgICBnb3RvIF9fcHl4X0w0X2V4Y2VwdGlvbl9oYW5kbGVkOworKyAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfcHR5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyksIF9fcHl4X25fc19uZXcp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA3LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgX19weXhfdF80ID0gTlVMTDsKKysg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfMikpKSB7CisrICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7 CisrICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlv biA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworKyAgICAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzQpOworKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKyAgICAgfQorLSAgICBnb3RvIF9f cHl4X0w1X2V4Y2VwdF9lcnJvcjsKKy0gICAgX19weXhfTDVfZXhjZXB0X2Vycm9yOjsKKysgIH0K KysgIF9fcHl4X3RfMyA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF92X19fcHl4X3R5cGUpIDogX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfX19weXhfdHlwZSk7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MykpIF9fUFlYX0VSUigxLCA3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzMpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICBf X3B5eF92X19fcHl4X3Jlc3VsdCA9IF9fcHl4X3RfMzsKKysgIF9fcHl4X3RfMyA9IDA7CisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU4CistICogCistICogICAg IGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgorLSAqICAgICAgICAgdHJ5OiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgY2FsbGJhY2soKQorLSAq ICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6 OAorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVj a3N1bXMgKCVzIHZzIDB4ZDQxZDhjZCA9ICgpKSIgJSBfX3B5eF9jaGVja3N1bSkKKysgKiAgICAg X19weXhfcmVzdWx0ID0gUmVuZGVyRnJhbWVJbmZvLl9fbmV3X18oX19weXhfdHlwZSkKKysgKiAg ICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRl KDxSZW5kZXJGcmFtZUluZm8+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICogICAgIHJl dHVybiBfX3B5eF9yZXN1bHQKKysgKi8KKysgIF9fcHl4X3RfMSA9IChfX3B5eF92X19fcHl4X3N0 YXRlICE9IFB5X05vbmUpOworKyAgX19weXhfdF82ID0gKF9fcHl4X3RfMSAhPSAwKTsKKysgIGlm IChfX3B5eF90XzYpIHsKKysKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6OQorKyAqICAgICBf X3B5eF9yZXN1bHQgPSBSZW5kZXJGcmFtZUluZm8uX19uZXdfXyhfX3B5eF90eXBlKQorKyAqICAg ICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xl X1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKDxSZW5kZXJGcmFtZUluZm8+IF9fcHl4X3Jlc3Vs dCwgX19weXhfc3RhdGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgcmV0 dXJuIF9fcHl4X3Jlc3VsdAorKyAqIGNkZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZv X19zZXRfc3RhdGUoUmVuZGVyRnJhbWVJbmZvIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3Rh dGUpOgorKyAqLworKyAgICBpZiAoIShsaWtlbHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3Zf X19weXhfc3RhdGUpKXx8KChfX3B5eF92X19fcHl4X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJy X0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJFeHBlY3RlZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0 dXBsZSIsIFB5X1RZUEUoX19weXhfdl9fX3B5eF9zdGF0ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlY X0VSUigxLCA5LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8zID0gX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3Rh dGUoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUlu Zm8gKilfX3B5eF92X19fcHl4X3Jlc3VsdCksICgoUHlPYmplY3QqKV9fcHl4X3ZfX19weXhfc3Rh dGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgOSwgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgICBfX1B5eF9ERUNSRUYo X19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6 OAorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVj a3N1bXMgKCVzIHZzIDB4ZDQxZDhjZCA9ICgpKSIgJSBfX3B5eF9jaGVja3N1bSkKKysgKiAgICAg X19weXhfcmVzdWx0ID0gUmVuZGVyRnJhbWVJbmZvLl9fbmV3X18oX19weXhfdHlwZSkKKysgKiAg ICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRl KDxSZW5kZXJGcmFtZUluZm8+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICogICAgIHJl dHVybiBfX3B5eF9yZXN1bHQKKyAgKi8KKy0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xKTsK Ky0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfWEdJVkVSRUYoX19w eXhfdF8zKTsKKy0gICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xLCBfX3B5eF90XzIs IF9fcHl4X3RfMyk7CistICAgIGdvdG8gX19weXhfTDFfZXJyb3I7CistICAgIF9fcHl4X0w0X2V4 Y2VwdGlvbl9oYW5kbGVkOjsKKy0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xKTsKKy0gICAg X19QeXhfWEdJVkVSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8z KTsKKy0gICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xLCBfX3B5eF90XzIsIF9fcHl4 X3RfMyk7CistICAgIF9fcHl4X0w4X3RyeV9lbmQ6OworICAgfQorIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNTcKKy0gKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxs YmFjayhzZWxmLmNhbGxiYWNrKSBpZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9uZQorLSAqIAorLSAq ICAgICBkZWYgbXB2X2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgIGNhbGxiYWNrKCkK KysgIC8qICIodHJlZSBmcmFnbWVudCkiOjEwCisrICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5v dCBOb25lOgorKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRf c3RhdGUoPFJlbmRlckZyYW1lSW5mbz4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKysgKiAg ICAgcmV0dXJuIF9fcHl4X3Jlc3VsdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog Y2RlZiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZShSZW5kZXJGcmFt ZUluZm8gX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIGlmIGxlbihf X3B5eF9zdGF0ZSkgPiAwIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6Cisr ICovCisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zf X19weXhfcmVzdWx0KTsKKysgIF9fcHl4X3IgPSBfX3B5eF92X19fcHl4X3Jlc3VsdDsKKysgIGdv dG8gX19weXhfTDA7CisrCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisrICogZGVmIF9fcHl4 X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyhfX3B5eF90eXBlLCBsb25nIF9fcHl4X2NoZWNrc3Vt LCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgY2Rl ZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVz dWx0CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQ eV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworICAgX19w eXhfTDFfZXJyb3I6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzMpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzUpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOworLSAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzgpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzkpOworLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzEwKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xMSk7 CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1RocmVh ZC5tcHZfY2FsbGJhY2siLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3Vu cGlja2xlX1JlbmRlckZyYW1lSW5mbyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19w eXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3ZfZSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfUGlj a2xlRXJyb3IpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdCk7CisgICBf X1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTYzCistICogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgicHltcHYgZXJy b3IgZHVyaW5nIGNhbGxiYWNrOiAlc1xuIiAlIGUpCistICogCistICogY2RlZiB2b2lkIF9jX2Nh bGxiYWNrKHZvaWQqIGQpIHdpdGggZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIGNkZWYgdWludDY0X3QgbmFtZSA9IDx1aW50NjRfdD5kCistICogICAgIGNhbGxiYWNr ID0gX2NhbGxiYWNrcy5nZXQobmFtZSkKKysvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMQorKyAqICAg ICAgICAgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoPFJlbmRlckZy YW1lSW5mbz4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKysgKiAgICAgcmV0dXJuIF9fcHl4 X3Jlc3VsdAorKyAqIGNkZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3Rh dGUoUmVuZGVyRnJhbWVJbmZvIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAw IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CisrICogICAgICAgICBfX3B5 eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzBdKQorICAqLworIAorLXN0YXRp YyB2b2lkIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX2NhbGxiYWNrKHZvaWQgKl9f cHl4X3ZfZCkgeworLSAgdWludDY0X3QgX19weXhfdl9uYW1lOworLSAgUHlPYmplY3QgKl9fcHl4 X3ZfY2FsbGJhY2sgPSBOVUxMOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICpfX3B5 eF92X19fcHl4X3Jlc3VsdCwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKysgIFB5 T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBO VUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhf dF80ID0gTlVMTDsKKysgIGludCBfX3B5eF90XzE7CisrICBQeV9zc2l6ZV90IF9fcHl4X3RfMjsK KysgIGludCBfX3B5eF90XzM7CisrICBpbnQgX19weXhfdF80OworKyAgUHlPYmplY3QgKl9fcHl4 X3RfNSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzcgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfOCA9IE5VTEw7CisgICBp bnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVM TDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gICNpZmRlZiBXSVRIX1RIUkVBRAorLSAg UHlHSUxTdGF0ZV9TVEFURSBfX3B5eF9naWxzdGF0ZV9zYXZlID0gX19QeXhfUHlHSUxTdGF0ZV9F bnN1cmUoKTsKKy0gICNlbmRpZgorLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9jX2Nh bGxiYWNrIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19weXhfdW5waWNr bGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTY0CistICogCistICogY2RlZiB2b2lkIF9jX2NhbGxiYWNr KHZvaWQqIGQpIHdpdGggZ2lsOgorLSAqICAgICBjZGVmIHVpbnQ2NF90IG5hbWUgPSA8dWludDY0 X3Q+ZCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNhbGxiYWNrID0gX2Nh bGxiYWNrcy5nZXQobmFtZSkKKy0gKiAgICAgY2FsbGJhY2suY2FsbCgpCisrICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxMgorKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CisrICogY2RlZiBfX3B5 eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZShSZW5kZXJGcmFtZUluZm8gX19w eXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIGlmIGxlbihfX3B5eF9zdGF0 ZSkgPiAwIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRh dGUoX19weXhfc3RhdGVbMF0pCisgICovCistICBfX3B5eF92X25hbWUgPSAoKHVpbnQ2NF90KV9f cHl4X3ZfZCk7CisrICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25l KSkgeworKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAib2JqZWN0IG9mIHR5 cGUgJ05vbmVUeXBlJyBoYXMgbm8gbGVuKCkiKTsKKysgICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5 eF9MMV9lcnJvcikKKysgIH0KKysgIF9fcHl4X3RfMiA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhf dl9fX3B5eF9zdGF0ZSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPT0gKChQeV9zc2l6ZV90KS0x KSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSAoKF9f cHl4X3RfMiA+IDApICE9IDApOworKyAgaWYgKF9fcHl4X3RfMykgeworKyAgfSBlbHNlIHsKKysg ICAgX19weXhfdF8xID0gX19weXhfdF8zOworKyAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3Bf ZG9uZTsKKysgIH0KKysgIF9fcHl4X3RfMyA9IF9fUHl4X0hhc0F0dHIoKChQeU9iamVjdCAqKV9f cHl4X3ZfX19weXhfcmVzdWx0KSwgX19weXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoX19weXhf dF8zID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzQgPSAoX19weXhfdF8zICE9IDApOworKyAgX19weXhfdF8xID0gX19weXhfdF80Owor KyAgX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKKysgIGlmIChfX3B5eF90XzEpIHsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTY1CistICogY2RlZiB2b2lkIF9j X2NhbGxiYWNrKHZvaWQqIGQpIHdpdGggZ2lsOgorLSAqICAgICBjZGVmIHVpbnQ2NF90IG5hbWUg PSA8dWludDY0X3Q+ZAorLSAqICAgICBjYWxsYmFjayA9IF9jYWxsYmFja3MuZ2V0KG5hbWUpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgY2FsbGJhY2suY2FsbCgpCisrICAg IC8qICIodHJlZSBmcmFnbWVudCkiOjEzCisrICogY2RlZiBfX3B5eF91bnBpY2tsZV9SZW5kZXJG cmFtZUluZm9fX3NldF9zdGF0ZShSZW5kZXJGcmFtZUluZm8gX19weXhfcmVzdWx0LCB0dXBsZSBf X3B5eF9zdGF0ZSk6CisrICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAwIGFuZCBoYXNhdHRy KF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CisrICogICAgICAgICBfX3B5eF9yZXN1bHQuX19k aWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzBdKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zf OXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X25fc19nZXQpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTY1LCBfX3B5eF9MMV9lcnJvcikKKy0g IF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJv bV91aW50NjRfdChfX3B5eF92X25hbWUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlY X0VSUigwLCAxMTY1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMp OworLSAgX19weXhfdF80ID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4X3RfNCA9IFB5 TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkg eworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5 eF90XzIpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworLSAgICAgIF9fUHl4X0lO Q1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0 aW9uKTsKKysgICAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2Jq ZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoX19weXhfdF82LCBfX3B5eF9uX3NfdXBkYXRlKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF83KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CisrICAgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7 CisrICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2Jq ZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CisrICAgICAgX19QWVhfRVJSKDEsIDEzLCBfX3B5 eF9MMV9lcnJvcikKKyAgICAgfQorLSAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBf X1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykg OiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihf X3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMTE2NSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19w eXhfdl9jYWxsYmFjayA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7CisrICAgIF9fcHl4 X3RfNiA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMCwgbG9u ZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF82KTsKKysgICAgX19weXhfdF84ID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9V TlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF83KSkpIHsKKysg ICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzcpOworKyAgICAgIGlm IChsaWtlbHkoX19weXhfdF84KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNyk7CisrICAgICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF84KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3RfNywgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQorKyAg ICBfX3B5eF90XzUgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF83LCBfX3B5eF90XzYpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7IF9f cHl4X3RfOCA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigxLCAxMywgX19weXhf TDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworKyAgICBfX1B5eF9ERUNS RUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf NSk7IF9fcHl4X3RfNSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTE2NgorLSAqICAgICBjZGVmIHVpbnQ2NF90IG5hbWUgPSA8dWludDY0X3Q+ZAorLSAqICAg ICBjYWxsYmFjayA9IF9jYWxsYmFja3MuZ2V0KG5hbWUpCistICogICAgIGNhbGxiYWNrLmNhbGwo KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAgIC8qICIodHJlZSBmcmFnbWVudCki OjEyCisrICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xl X1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKFJlbmRlckZyYW1lSW5mbyBfX3B5eF9yZXN1bHQs IHR1cGxlIF9fcHl4X3N0YXRlKToKKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDAgYW5k IGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9z dGF0ZVswXSkKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIo X19weXhfdl9jYWxsYmFjaywgX19weXhfbl9zX2NhbGwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCAxMTY2LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOworLSAgX19weXhfdF8zID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4 X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgIGlmIChsaWtlbHkoX19w eXhfdF8zKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOworLSAgICAg IF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90 XzIsIGZ1bmN0aW9uKTsKKy0gICAgfQorICAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3RfMykg PyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKSA6IF9fUHl4 X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzIpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMTE2NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTE2MworLSAqICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInB5 bXB2IGVycm9yIGR1cmluZyBjYWxsYmFjazogJXNcbiIgJSBlKQorLSAqIAorLSAqIGNkZWYgdm9p ZCBfY19jYWxsYmFjayh2b2lkKiBkKSB3aXRoIGdpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICBjZGVmIHVpbnQ2NF90IG5hbWUgPSA8dWludDY0X3Q+ZAorLSAqICAgICBj YWxsYmFjayA9IF9jYWxsYmFja3MuZ2V0KG5hbWUpCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox MQorKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUo PFJlbmRlckZyYW1lSW5mbz4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKysgKiAgICAgcmV0 dXJuIF9fcHl4X3Jlc3VsdAorKyAqIGNkZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZv X19zZXRfc3RhdGUoUmVuZGVyRnJhbWVJbmZvIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3Rh dGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGlmIGxlbihfX3B5eF9z dGF0ZSkgPiAwIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CisrICogICAg ICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzBdKQorICAqLwor IAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9yID0gUHlfTm9uZTsgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworICAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wxX2Vycm9y OjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhf dF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X1hERUNSRUYoX19w eXhfdF80KTsKKy0gIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0dGVyLmxpYnMubXB2Ll9j X2NhbGxiYWNrIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSwg MSwgMCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CisrICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CisrICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfOCk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5f X3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZSIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhfciA9IDA7CisgICBfX3B5 eF9MMDo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfY2FsbGJhY2spOworKyAgX19QeXhfWEdJ VkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gICNp ZmRlZiBXSVRIX1RIUkVBRAorLSAgX19QeXhfUHlHSUxTdGF0ZV9SZWxlYXNlKF9fcHl4X2dpbHN0 YXRlX3NhdmUpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorK3N0YXRpYyBzdHJ1Y3QgX19weXhf dnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCBfX3B5eF92 dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQ7CisrCisrc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJl YWNoZWQoUHlUeXBlT2JqZWN0ICp0LCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICphLCBDWVRIT05f VU5VU0VEIFB5T2JqZWN0ICprKSB7CisrICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICpwOworKyAgUHlPYmplY3QgKm87CisrICBpZiAobGlr ZWx5KCh0LT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QpID09IDApKSB7CisrICAg IG8gPSAoKnQtPnRwX2FsbG9jKSh0LCAwKTsKKysgIH0gZWxzZSB7CisrICAgIG8gPSAoUHlPYmpl Y3QgKikgUHlCYXNlT2JqZWN0X1R5cGUudHBfbmV3KHQsIF9fcHl4X2VtcHR5X3R1cGxlLCAwKTsK KysgIH0KKysgIGlmICh1bmxpa2VseSghbykpIHJldHVybiAwOworKyAgcCA9ICgoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqKW8pOworKyAg cC0+X19weXhfdnRhYiA9IF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9m RmlsZVJlYWNoZWQ7CisrICBwLT5yZWFzb24gPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7 CisrICBwLT5lcnJvciA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIHJldHVybiBv OworK30KKysKKytzdGF0aWMgdm9pZCBfX3B5eF90cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FbmRPZkZpbGVSZWFjaGVkKFB5T2JqZWN0ICpvKSB7CisrICBzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICpwID0gKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKilvOworKyAgI2lm IENZVEhPTl9VU0VfVFBfRklOQUxJWkUKKysgIGlmICh1bmxpa2VseShQeVR5cGVfSGFzRmVhdHVy ZShQeV9UWVBFKG8pLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmIFB5X1RZUEUobyktPnRw X2ZpbmFsaXplKSAmJiAhX1B5R0NfRklOQUxJWkVEKG8pKSB7CisrICAgIGlmIChQeU9iamVjdF9D YWxsRmluYWxpemVyRnJvbURlYWxsb2MobykpIHJldHVybjsKKysgIH0KKyAgICNlbmRpZgorKyAg UHlPYmplY3RfR0NfVW5UcmFjayhvKTsKKysgIFB5X0NMRUFSKHAtPnJlYXNvbik7CisrICBQeV9D TEVBUihwLT5lcnJvcik7CisrICAoKlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOworIH0KKyAKKy0v KiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJl YWNoZWQoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2ts ZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqLworK3N0YXRpYyBp bnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNo ZWQoUHlPYmplY3QgKm8sIHZpc2l0cHJvYyB2LCB2b2lkICphKSB7CisrICBpbnQgZTsKKysgIHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKnAg PSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hl ZCAqKW87CisrICBpZiAocC0+cmVhc29uKSB7CisrICAgIGUgPSAoKnYpKHAtPnJlYXNvbiwgYSk7 IGlmIChlKSByZXR1cm4gZTsKKysgIH0KKysgIGlmIChwLT5lcnJvcikgeworKyAgICBlID0gKCp2 KShwLT5lcnJvciwgYSk7IGlmIChlKSByZXR1cm4gZTsKKysgIH0KKysgIHJldHVybiAwOworK30K KyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkKFB5T2Jq ZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3 ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN19fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQgPSB7Il9fcHl4X3Vu cGlja2xlX0VuZE9mRmlsZVJlYWNoZWQiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlv bldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN19fcHl4X3VucGlj a2xlX0VuZE9mRmlsZVJlYWNoZWQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfTsKKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X19weXhfdW5w aWNrbGVfRW5kT2ZGaWxlUmVhY2hlZChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9f cHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CistICBQeU9iamVjdCAqX19weXhfdl9f X3B5eF90eXBlID0gMDsKKy0gIGxvbmcgX19weXhfdl9fX3B5eF9jaGVja3N1bTsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlID0gMDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOwor LSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBpY2tsZV9F bmRPZkZpbGVSZWFjaGVkICh3cmFwcGVyKSIsIDApOworLSAgeworLSAgICBzdGF0aWMgUHlPYmpl Y3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19weXhfdHlwZSwmX19weXhfbl9z X3B5eF9jaGVja3N1bSwmX19weXhfbl9zX3B5eF9zdGF0ZSwwfTsKKy0gICAgUHlPYmplY3QqIHZh bHVlc1szXSA9IHswLDAsMH07CistICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworLSAg ICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKy0gICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdz ID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdz KSB7CistICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4 X2FyZ3MsIDIpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAg MjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAg IENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhf TDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQorLSAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6 ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNl ICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0 ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF90eXBlKSkgIT0gMCkpIGt3X2FyZ3MtLTsK Ky0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKy0gICAgICAgIENZ VEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6CistICAgICAgICBpZiAobGlrZWx5 KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9u X3NfcHl4X2NoZWNrc3VtKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVsc2UgeworLSAg ICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfRW5kT2ZG aWxlUmVhY2hlZCIsIDEsIDMsIDMsIDEpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3Ip CistICAgICAgICB9CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNl ICAyOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzJdID0gX19QeXhfUHlEaWN0X0dldEl0 ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF9zdGF0ZSkpICE9IDApKSBrd19hcmdzLS07 CistICAgICAgICBlbHNlIHsKKy0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQo Il9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQiLCAxLCAzLCAzLCAyKTsgX19QWVhfRVJS KDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAgICAgfQorLSAgICAgIH0KKy0gICAgICBpZiAo dW5saWtlbHkoa3dfYXJncyA+IDApKSB7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFy c2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVl cywgcG9zX2FyZ3MsICJfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkIikgPCAwKSkgX19Q WVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAgIH0KKy0gICAgfSBlbHNlIGlmIChQ eVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9IDMpIHsKKy0gICAgICBnb3RvIF9fcHl4X0w1 X2FyZ3R1cGxlX2Vycm9yOworLSAgICB9IGVsc2UgeworLSAgICAgIHZhbHVlc1swXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9H RVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9J VEVNKF9fcHl4X2FyZ3MsIDIpOworLSAgICB9CistICAgIF9fcHl4X3ZfX19weXhfdHlwZSA9IHZh bHVlc1swXTsKKy0gICAgX19weXhfdl9fX3B5eF9jaGVja3N1bSA9IF9fUHl4X1B5SW50X0FzX2xv bmcodmFsdWVzWzFdKTsgaWYgKHVubGlrZWx5KChfX3B5eF92X19fcHl4X2NoZWNrc3VtID09IChs b25nKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vy cm9yKQorLSAgICBfX3B5eF92X19fcHl4X3N0YXRlID0gdmFsdWVzWzJdOworLSAgfQorLSAgZ290 byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKy0gIF9fcHl4X0w1X2FyZ3R1cGxl X2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9F bmRPZkZpbGVSZWFjaGVkIiwgMSwgMywgMywgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7 IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKy0gIF9fcHl4X0wzX2Vycm9yOjsKKy0g IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX0Vu ZE9mRmlsZVJlYWNoZWQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIE5VTEw7 CistICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7CistICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzZfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFj aGVkKF9fcHl4X3NlbGYsIF9fcHl4X3ZfX19weXhfdHlwZSwgX19weXhfdl9fX3B5eF9jaGVja3N1 bSwgX19weXhfdl9fX3B5eF9zdGF0ZSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K Ky0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7Cisr c3RhdGljIGludCBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxl UmVhY2hlZChQeU9iamVjdCAqbykgeworKyAgUHlPYmplY3QqIHRtcDsKKysgIHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKnAgPSAoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqKW87Cisr ICB0bXAgPSAoKFB5T2JqZWN0KilwLT5yZWFzb24pOworKyAgcC0+cmVhc29uID0gUHlfTm9uZTsg UHlfSU5DUkVGKFB5X05vbmUpOworKyAgUHlfWERFQ1JFRih0bXApOworKyAgdG1wID0gKChQeU9i amVjdCopcC0+ZXJyb3IpOworKyAgcC0+ZXJyb3IgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9u ZSk7CisrICBQeV9YREVDUkVGKHRtcCk7CisrICByZXR1cm4gMDsKKyB9CisgCistc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNl9fcHl4X3VucGlja2xlX0Vu ZE9mRmlsZVJlYWNoZWQoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9i amVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf UGlja2xlRXJyb3IgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfcmVzdWx0ID0gMDsK Ky0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCistICBpbnQgX19weXhfdF8xOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Cist ICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBO VUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBpbnQgX19weXhfdF82Owor LSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9 IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCIsIDApOworLQorLSAgLyog Iih0cmVlIGZyYWdtZW50KSI6NAorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJv cgorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKy0gKiAgICAgaWYgX19weXhfY2hl Y2tzdW0gIT0gMHg1NmJlOWI2OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IK Ky0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tz dW1zICglcyB2cyAweDU2YmU5YjYgPSAoZXJyb3IsIHJlYXNvbikpIiAlIF9fcHl4X2NoZWNrc3Vt KQorLSAqLworLSAgX19weXhfdF8xID0gKChfX3B5eF92X19fcHl4X2NoZWNrc3VtICE9IDB4NTZi ZTliNikgIT0gMCk7CistICBpZiAoX19weXhfdF8xKSB7CistCistICAgIC8qICIodHJlZSBmcmFn bWVudCkiOjUKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9f cHl4X2NoZWNrc3VtICE9IDB4NTZiZTliNjoKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9y dCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvciAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxl IGNoZWNrc3VtcyAoJXMgdnMgMHg1NmJlOWI2ID0gKGVycm9yLCByZWFzb24pKSIgJSBfX3B5eF9j aGVja3N1bSkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gRW5kT2ZGaWxlUmVhY2hlZC5fX25ld19f KF9fcHl4X3R5cGUpCistICovCistICAgIF9fcHl4X3RfMiA9IFB5TGlzdF9OZXcoMSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19Q aWNrbGVFcnJvcik7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsK Ky0gICAgUHlMaXN0X1NFVF9JVEVNKF9fcHl4X3RfMiwgMCwgX19weXhfbl9zX1BpY2tsZUVycm9y KTsKKy0gICAgX19weXhfdF8zID0gX19QeXhfSW1wb3J0KF9fcHl4X25fc19waWNrbGUsIF9fcHl4 X3RfMiwgLTEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA1LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9J bXBvcnRGcm9tKF9fcHl4X3RfMywgX19weXhfbl9zX1BpY2tsZUVycm9yKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKy0gICAg X19weXhfdl9fX3B5eF9QaWNrbGVFcnJvciA9IF9fcHl4X3RfMjsKKy0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMp OyBfX3B5eF90XzMgPSAwOworLQorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2CistICogICAg IGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4NTZiZTliNjoKKy0gKiAgICAgICAgIGZyb20gcGlja2xl IGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICAgICAgcmFp c2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4NTZi ZTliNiA9IChlcnJvciwgcmVhc29uKSkiICUgX19weXhfY2hlY2tzdW0pICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gRW5kT2ZGaWxlUmVhY2hlZC5f X25ld19fKF9fcHl4X3R5cGUpCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgor LSAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2xvbmcoX19weXhfdl9fX3B5 eF9jaGVja3N1bSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDYsIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhf dF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0KF9fcHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNr c3Vtc19zX3ZzXzB4NTYsIF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9f UHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKy0gICAgX19weXhfdF8yID0g X19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcjsgX19weXhfdF81ID0gTlVMTDsKKy0gICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworLSAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Cist ICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzUpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAg ICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgICAgfQorLSAg ICB9CistICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfMiwgX19weXhfdF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfNCk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4 X3RfNCA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDYs IF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X1JhaXNlKF9f cHl4X3RfMywgMCwgMCwgMCk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworLSAgICBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJl YWNoZWRfcmVhc29uKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKysgIHJl dHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkXzZy ZWFzb25fMV9fZ2V0X18obyk7CisrfQorIAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0Cist ICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0 IF9fcHl4X3Jlc3VsdAorLSAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweDU2YmU5YjY6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9y dCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICAgICAgcmFpc2UgX19w eXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4NTZiZTliNiA9 IChlcnJvciwgcmVhc29uKSkiICUgX19weXhfY2hlY2tzdW0pCistICovCisrc3RhdGljIGludCBf X3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfcmVh c29uKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Cisr ICBpZiAodikgeworKyAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2 RW5kT2ZGaWxlUmVhY2hlZF82cmVhc29uXzNfX3NldF9fKG8sIHYpOworICAgfQorLQorLSAgLyog Iih0cmVlIGZyYWdtZW50KSI6NworLSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2ts ZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNr bGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHg1NmJlOWI2ID0gKGVycm9y LCByZWFzb24pKSIgJSBfX3B5eF9jaGVja3N1bSkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gRW5k T2ZGaWxlUmVhY2hlZC5fX25ld19fKF9fcHl4X3R5cGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6CistICogICAgICAgICBf X3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoPEVuZE9mRmlsZVJlYWNo ZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCistICovCistICBfX3B5eF90XzIgPSBfX1B5 eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCksIF9fcHl4X25fc19uZXcpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA3LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF80ID0gTlVMTDsKKy0gIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Cist ICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgIGlmIChs aWtlbHkoX19weXhfdF80KSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9k X0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQp OworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKy0gICAgfQorKyAgZWxzZSB7CisrICAgIHJldHVybiBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkXzZyZWFzb25f NV9fZGVsX18obyk7CisgICB9CistICBfX3B5eF90XzMgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5 T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdl9fX3B5eF90eXBl KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X19fcHl4X3R5 cGUpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgNywgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworLSAgX19weXhfdl9fX3B5eF9yZXN1bHQgPSBfX3B5eF90XzM7CistICBf X3B5eF90XzMgPSAwOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6OAorLSAqICAgICAgICAg cmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4 NTZiZTliNiA9IChlcnJvciwgcmVhc29uKSkiICUgX19weXhfY2hlY2tzdW0pCistICogICAgIF9f cHl4X3Jlc3VsdCA9IEVuZE9mRmlsZVJlYWNoZWQuX19uZXdfXyhfX3B5eF90eXBlKQorLSAqICAg ICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRl KDxFbmRPZkZpbGVSZWFjaGVkPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICBy ZXR1cm4gX19weXhfcmVzdWx0CistICovCistICBfX3B5eF90XzEgPSAoX19weXhfdl9fX3B5eF9z dGF0ZSAhPSBQeV9Ob25lKTsKKy0gIF9fcHl4X3RfNiA9IChfX3B5eF90XzEgIT0gMCk7CistICBp ZiAoX19weXhfdF82KSB7CisrfQorIAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo5CistICog ICAgIF9fcHl4X3Jlc3VsdCA9IEVuZE9mRmlsZVJlYWNoZWQuX19uZXdfXyhfX3B5eF90eXBlKQor LSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgIF9fcHl4X3Vu cGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZSg8RW5kT2ZGaWxlUmVhY2hlZD4gX19w eXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICByZXR1cm4gX19weXhfcmVzdWx0CistICogY2RlZiBfX3B5eF91bnBpY2tsZV9FbmRPZkZp bGVSZWFjaGVkX19zZXRfc3RhdGUoRW5kT2ZGaWxlUmVhY2hlZCBfX3B5eF9yZXN1bHQsIHR1cGxl IF9fcHl4X3N0YXRlKToKKy0gKi8KKy0gICAgaWYgKCEobGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFj dChfX3B5eF92X19fcHl4X3N0YXRlKSl8fCgoX19weXhfdl9fX3B5eF9zdGF0ZSkgPT0gUHlfTm9u ZSl8fChQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiRXhwZWN0ZWQgJS4xNnMsIGdvdCAl LjIwMHMiLCAidHVwbGUiLCBQeV9UWVBFKF9fcHl4X3ZfX19weXhfc3RhdGUpLT50cF9uYW1lKSwg MCkpKSBfX1BZWF9FUlIoMSwgOSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fcHl4X3RfMyA9IF9f cHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNo ZWRfX3NldF9zdGF0ZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Vu ZE9mRmlsZVJlYWNoZWQgKilfX3B5eF92X19fcHl4X3Jlc3VsdCksICgoUHlPYmplY3QqKV9fcHl4 X3ZfX19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwg OSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBf X1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9l cnJvcihQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CisrICByZXR1cm4gX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF81ZXJyb3JfMV9f Z2V0X18obyk7CisrfQorIAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo4CistICogICAgICAg ICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMg MHg1NmJlOWI2ID0gKGVycm9yLCByZWFzb24pKSIgJSBfX3B5eF9jaGVja3N1bSkKKy0gKiAgICAg X19weXhfcmVzdWx0ID0gRW5kT2ZGaWxlUmVhY2hlZC5fX25ld19fKF9fcHl4X3R5cGUpCistICog ICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3Rh dGUoPEVuZE9mRmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCistICogICAg IHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKi8KKytzdGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9lcnJvcihQeU9iamVjdCAqbywg UHlPYmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworKyAgaWYgKHYpIHsKKysgICAg cmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRf NWVycm9yXzNfX3NldF9fKG8sIHYpOworKyAgfQorKyAgZWxzZSB7CisrICAgIHJldHVybiBfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkXzVlcnJvcl81X19k ZWxfXyhvKTsKKyAgIH0KKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEwCistICogICAgIGlm IF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfRW5k T2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKDxFbmRPZkZpbGVSZWFjaGVkPiBfX3B5eF9yZXN1bHQs IF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRf X3NldF9zdGF0ZShFbmRPZkZpbGVSZWFjaGVkIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3Rh dGUpOgorLSAqICAgICBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhf cmVzdWx0LnJlYXNvbiA9IF9fcHl4X3N0YXRlWzFdCistICovCistICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKy0gIF9fcHl4 X3IgPSBfX3B5eF92X19fcHl4X3Jlc3VsdDsKKy0gIGdvdG8gX19weXhfTDA7CistCistICAvKiAi KHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNo ZWQoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVy cm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqLworLQorLSAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CistICBfX1B5eF9B ZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVS ZWFjaGVkIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Cist ICBfX3B5eF9yID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhf dl9fX3B5eF9QaWNrbGVFcnJvcik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfcmVz dWx0KTsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogIih0cmVlIGZyYWdt ZW50KSI6MTEKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3Nl dF9zdGF0ZSg8RW5kT2ZGaWxlUmVhY2hlZD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0g KiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorLSAqIGNkZWYgX19weXhfdW5waWNrbGVfRW5kT2ZG aWxlUmVhY2hlZF9fc2V0X3N0YXRlKEVuZE9mRmlsZVJlYWNoZWQgX19weXhfcmVzdWx0LCB0dXBs ZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX19w eXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5yZWFzb24gPSBf X3B5eF9zdGF0ZVsxXQorLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0 cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgorLSAqLworK3N0YXRpYyBQeU1ldGhvZERlZiBf X3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkW10gPSB7 CisrICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfMV9fcmVkdWNlX2N5dGhvbl9fLCBNRVRI X05PQVJHUywgMH0sCisrICB7Il9fc2V0c3RhdGVfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24pX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF8zX19zZXRzdGF0 ZV9jeXRob25fXywgTUVUSF9PLCAwfSwKKysgIHswLCAwLCAwLCAwfQorK307CisgCistc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9F bmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqX19weXhfdl9fX3B5eF9yZXN1bHQsIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Cist ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5V TEw7CistICBpbnQgX19weXhfdF8yOworLSAgUHlfc3NpemVfdCBfX3B5eF90XzM7CistICBpbnQg X19weXhfdF80OworLSAgaW50IF9fcHl4X3RfNTsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBO VUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhf dF84ID0gTlVMTDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19w eXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3Nl dF9zdGF0ZSIsIDApOworK3N0YXRpYyBzdHJ1Y3QgUHlHZXRTZXREZWYgX19weXhfZ2V0c2V0c185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZFtdID0geworKyAgeyhjaGFyICop InJlYXNvbiIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxl UmVhY2hlZF9yZWFzb24sIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5k T2ZGaWxlUmVhY2hlZF9yZWFzb24sIChjaGFyICopMCwgMH0sCisrICB7KGNoYXIgKikiZXJyb3Ii LCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRf ZXJyb3IsIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVh Y2hlZF9lcnJvciwgKGNoYXIgKikwLCAwfSwKKysgIHswLCAwLCAwLCAwLCAwfQorK307CisgCist ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Cist ICogY2RlZiBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoRW5kT2ZG aWxlUmVhY2hlZCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19w eXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5yZWFzb24gPSBf X3B5eF9zdGF0ZVsxXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGlmIGxl bihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6 CistICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzJd KQorLSAqLworLSAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkp IHsKKy0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2Jq ZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CistICAgIF9fUFlYX0VSUigxLCAxMiwgX19weXhf TDFfZXJyb3IpCistICB9CistICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9f cHl4X3ZfX19weXhfc3RhdGUsIDAsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwg MCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR0lWRVJFRihf X3B5eF90XzEpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5lcnJvcik7 CistICBfX1B5eF9ERUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPmVycm9yKTsKKy0gIF9fcHl4 X3ZfX19weXhfcmVzdWx0LT5lcnJvciA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7Cist ICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAgICBQ eUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90 IHN1YnNjcmlwdGFibGUiKTsKKy0gICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikK Ky0gIH0KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5 eF9zdGF0ZSwgMSwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7 CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnJlYXNvbik7CistICBfX1B5 eF9ERUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnJlYXNvbik7CistICBfX3B5eF92X19fcHl4 X3Jlc3VsdC0+cmVhc29uID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKytzdGF0aWMg UHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJl YWNoZWQgPSB7CisrICBQeVZhck9iamVjdF9IRUFEX0lOSVQoMCwgMCkKKysgICJ2aWRjdXR0ZXIu bGlicy5tcHYuRW5kT2ZGaWxlUmVhY2hlZCIsIC8qdHBfbmFtZSovCisrICBzaXplb2Yoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCksIC8qdHBf YmFzaWNzaXplKi8KKysgIDAsIC8qdHBfaXRlbXNpemUqLworKyAgX19weXhfdHBfZGVhbGxvY185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCwgLyp0cF9kZWFsbG9jKi8KKysg ICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKysgIDAsIC8qdHBfcHJpbnQqLworKyAg I2VuZGlmCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorKyAgMCwgLyp0cF92 ZWN0b3JjYWxsX29mZnNldCovCisrICAjZW5kaWYKKysgIDAsIC8qdHBfZ2V0YXR0ciovCisrICAw LCAvKnRwX3NldGF0dHIqLworKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAwLCAvKnRw X2NvbXBhcmUqLworKyAgI2VuZGlmCisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCisrICAw LCAvKnRwX2FzX2FzeW5jKi8KKysgICNlbmRpZgorKyAgMCwgLyp0cF9yZXByKi8KKysgIDAsIC8q dHBfYXNfbnVtYmVyKi8KKysgIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworKyAgMCwgLyp0cF9hc19t YXBwaW5nKi8KKysgIDAsIC8qdHBfaGFzaCovCisrICAwLCAvKnRwX2NhbGwqLworKyAgMCwgLyp0 cF9zdHIqLworKyAgMCwgLyp0cF9nZXRhdHRybyovCisrICAwLCAvKnRwX3NldGF0dHJvKi8KKysg IDAsIC8qdHBfYXNfYnVmZmVyKi8KKysgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0hB VkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1NfSEFWRV9ORVdC VUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3Mq LworKyAgIkRhdGEgZmllbGQgZm9yIE1QVl9FVkVOVF9FTkRfRklMRSBldmVudHNcblxuICAgIFdy YXBzOiBtcHZfZXZlbnRfZW5kX2ZpbGVcbiAgICAiLCAvKnRwX2RvYyovCisrICBfX3B5eF90cF90 cmF2ZXJzZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCwgLyp0cF90cmF2 ZXJzZSovCisrICBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxl UmVhY2hlZCwgLyp0cF9jbGVhciovCisrICAwLCAvKnRwX3JpY2hjb21wYXJlKi8KKysgIDAsIC8q dHBfd2Vha2xpc3RvZmZzZXQqLworKyAgMCwgLyp0cF9pdGVyKi8KKysgIDAsIC8qdHBfaXRlcm5l eHQqLworKyAgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVh Y2hlZCwgLyp0cF9tZXRob2RzKi8KKysgIDAsIC8qdHBfbWVtYmVycyovCisrICBfX3B5eF9nZXRz ZXRzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLCAvKnRwX2dldHNldCov CisrICAwLCAvKnRwX2Jhc2UqLworKyAgMCwgLyp0cF9kaWN0Ki8KKysgIDAsIC8qdHBfZGVzY3Jf Z2V0Ki8KKysgIDAsIC8qdHBfZGVzY3Jfc2V0Ki8KKysgIDAsIC8qdHBfZGljdG9mZnNldCovCisr ICAwLCAvKnRwX2luaXQqLworKyAgMCwgLyp0cF9hbGxvYyovCisrICBfX3B5eF90cF9uZXdfOXZp ZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQsIC8qdHBfbmV3Ki8KKysgIDAsIC8q dHBfZnJlZSovCisrICAwLCAvKnRwX2lzX2djKi8KKysgIDAsIC8qdHBfYmFzZXMqLworKyAgMCwg Lyp0cF9tcm8qLworKyAgMCwgLyp0cF9jYWNoZSovCisrICAwLCAvKnRwX3N1YmNsYXNzZXMqLwor KyAgMCwgLyp0cF93ZWFrbGlzdCovCisrICAwLCAvKnRwX2RlbCovCisrICAwLCAvKnRwX3ZlcnNp b25fdGFnKi8KKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCisrICAwLCAvKnRw X2ZpbmFsaXplKi8KKysgICNlbmRpZgorKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAw YjEgJiYgKCFDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgfHwgUFlQWV9WRVJTSU9OX05VTSA+PSAw eDA3MDMwODAwKQorKyAgMCwgLyp0cF92ZWN0b3JjYWxsKi8KKysgICNlbmRpZgorKyAgI2lmIFBZ X1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAw CisrICAwLCAvKnRwX3ByaW50Ki8KKysgICNlbmRpZgorKyAgI2lmIENZVEhPTl9DT01QSUxJTkdf SU5fUFlQWSAmJiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDkwMDAwCisrICAwLCAvKnRwX3B5cHlf ZmxhZ3MqLworKyAgI2VuZGlmCisrfTsKKytzdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3Rf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Mb2dNZXNzYWdlOworIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKKy0g KiBjZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZShFbmRPZkZp bGVSZWFjaGVkIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5 eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LnJlYXNvbiA9IF9f cHl4X3N0YXRlWzFdCistICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRy KF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbMl0p CistICovCistICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkg eworLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAib2JqZWN0IG9mIHR5cGUg J05vbmVUeXBlJyBoYXMgbm8gbGVuKCkiKTsKKy0gICAgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9M MV9lcnJvcikKKy0gIH0KKy0gIF9fcHl4X3RfMyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdl9f X3B5eF9zdGF0ZSk7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPT0gKChQeV9zc2l6ZV90KS0xKSkp IF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90XzQgPSAoKF9fcHl4 X3RfMyA+IDIpICE9IDApOworLSAgaWYgKF9fcHl4X3RfNCkgeworK3N0YXRpYyBQeU9iamVjdCAq X19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKFB5VHlwZU9iamVj dCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqYSwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAq aykgeworKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2Fn ZSAqcDsKKysgIFB5T2JqZWN0ICpvOworKyAgaWYgKGxpa2VseSgodC0+dHBfZmxhZ3MgJiBQeV9U UEZMQUdTX0lTX0FCU1RSQUNUKSA9PSAwKSkgeworKyAgICBvID0gKCp0LT50cF9hbGxvYykodCwg MCk7CisgICB9IGVsc2UgeworLSAgICBfX3B5eF90XzIgPSBfX3B5eF90XzQ7CistICAgIGdvdG8g X19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworKyAgICBvID0gKFB5T2JqZWN0ICopIFB5QmFzZU9i amVjdF9UeXBlLnRwX25ldyh0LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7CisgICB9CistICBfX3B5 eF90XzQgPSBfX1B5eF9IYXNBdHRyKCgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4X3Jlc3VsdCks IF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA9PSAoKGludCktMSkpKSBf X1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdF81ID0gKF9fcHl4X3Rf NCAhPSAwKTsKKy0gIF9fcHl4X3RfMiA9IF9fcHl4X3RfNTsKKy0gIF9fcHl4X0w0X2Jvb2xfYmlu b3BfZG9uZTo7CistICBpZiAoX19weXhfdF8yKSB7CisrICBpZiAodW5saWtlbHkoIW8pKSByZXR1 cm4gMDsKKysgIHAgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xv Z01lc3NhZ2UgKilvKTsKKysgIHAtPl9fcHl4X3Z0YWIgPSBfX3B5eF92dGFicHRyXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlOworKyAgcC0+cHJlZml4ID0gUHlfTm9uZTsgUHlfSU5D UkVGKFB5X05vbmUpOworKyAgcC0+bGV2ZWwgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7 CisrICBwLT50ZXh0ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworKyAgcC0+bG9nX2xl dmVsID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworKyAgcmV0dXJuIG87CisrfQorIAor LSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNAorLSAqICAgICBfX3B5eF9yZXN1bHQuZXJyb3Ig PSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LnJlYXNvbiA9IF9fcHl4X3N0YXRlWzFdCist ICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwg J19fZGljdF9fJyk6CistICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9f cHl4X3N0YXRlWzJdKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICovCistICAgIF9f cHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zf X19weXhfcmVzdWx0KSwgX19weXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOworLSAgICBfX3B5eF90XzcgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4 X3RfNiwgX19weXhfbl9zX3VwZGF0ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhf RVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7 CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICBpZiAo dW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAgICAgIFB5RXJy X1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vi c2NyaXB0YWJsZSIpOworLSAgICAgIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCist ICAgIH0KKy0gICAgX19weXhfdF82ID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19f cHl4X3N0YXRlLCAyLCBsb25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3Ip CistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgICBfX3B5eF90XzggPSBOVUxMOwor LSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzcpKSkgeworLSAgICAgIF9fcHl4X3RfOCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfNyk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzgpKSB7CistICAgICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF83KTsKKy0gICAgICAg IF9fUHl4X0lOQ1JFRihfX3B5eF90XzgpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF83LCBmdW5jdGlvbik7CistICAg ICAgfQorLSAgICB9CistICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzgpID8gX19QeXhfUHlPYmpl Y3RfQ2FsbDJBcmdzKF9fcHl4X3RfNywgX19weXhfdF84LCBfX3B5eF90XzYpIDogX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzcsIF9fcHl4X3RfNik7CistICAgIF9fUHl4X1hERUNS RUYoX19weXhfdF84KTsgX19weXhfdF84ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Nik7IF9fcHl4X3RfNiA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKytzdGF0aWMgdm9pZCBfX3B5eF90 cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKFB5T2JqZWN0ICpvKSB7 CisrICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpw ID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilv OworKyAgI2lmIENZVEhPTl9VU0VfVFBfRklOQUxJWkUKKysgIGlmICh1bmxpa2VseShQeVR5cGVf SGFzRmVhdHVyZShQeV9UWVBFKG8pLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmIFB5X1RZ UEUobyktPnRwX2ZpbmFsaXplKSAmJiAhX1B5R0NfRklOQUxJWkVEKG8pKSB7CisrICAgIGlmIChQ eU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2MobykpIHJldHVybjsKKysgIH0KKysgICNl bmRpZgorKyAgUHlPYmplY3RfR0NfVW5UcmFjayhvKTsKKysgIFB5X0NMRUFSKHAtPnByZWZpeCk7 CisrICBQeV9DTEVBUihwLT5sZXZlbCk7CisrICBQeV9DTEVBUihwLT50ZXh0KTsKKysgIFB5X0NM RUFSKHAtPmxvZ19sZXZlbCk7CisrICAoKlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOworK30KKyAK Ky0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0Vu ZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZShFbmRPZkZpbGVSZWFjaGVkIF9fcHl4X3Jlc3VsdCwg dHVwbGUgX19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9z dGF0ZVswXTsgX19weXhfcmVzdWx0LnJlYXNvbiA9IF9fcHl4X3N0YXRlWzFdCistICogICAgIGlm IGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9f Jyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIF9fcHl4X3Jlc3Vs dC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbMl0pCistICovCisrc3RhdGljIGludCBfX3B5 eF90cF90cmF2ZXJzZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZShQeU9iamVjdCAq bywgdmlzaXRwcm9jIHYsIHZvaWQgKmEpIHsKKysgIGludCBlOworKyAgc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqcCA9IChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopbzsKKysgIGlmIChwLT5wcmVmaXgp IHsKKysgICAgZSA9ICgqdikocC0+cHJlZml4LCBhKTsgaWYgKGUpIHJldHVybiBlOworKyAgfQor KyAgaWYgKHAtPmxldmVsKSB7CisrICAgIGUgPSAoKnYpKHAtPmxldmVsLCBhKTsgaWYgKGUpIHJl dHVybiBlOworKyAgfQorKyAgaWYgKHAtPnRleHQpIHsKKysgICAgZSA9ICgqdikocC0+dGV4dCwg YSk7IGlmIChlKSByZXR1cm4gZTsKKysgIH0KKysgIGlmIChwLT5sb2dfbGV2ZWwpIHsKKysgICAg ZSA9ICgqdikocC0+bG9nX2xldmVsLCBhKTsgaWYgKGUpIHJldHVybiBlOworICAgfQorKyAgcmV0 dXJuIDA7CisrfQorIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKKy0gKiAgICAgICAgIF9f cHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZSg8RW5kT2ZGaWxlUmVhY2hl ZD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3Vs dAorLSAqIGNkZWYgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKEVu ZE9mRmlsZVJlYWNoZWQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX19weXhfcmVzdWx0LmVycm9yID0gX19weXhf c3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5yZWFzb24gPSBfX3B5eF9zdGF0ZVsxXQorLSAqICAgICBp ZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3Rf XycpOgorLSAqLworK3N0YXRpYyBpbnQgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2UoUHlPYmplY3QgKm8pIHsKKysgIFB5T2JqZWN0KiB0bXA7CisrICBzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpwID0gKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilvOworKyAgdG1w ID0gKChQeU9iamVjdCopcC0+cHJlZml4KTsKKysgIHAtPnByZWZpeCA9IFB5X05vbmU7IFB5X0lO Q1JFRihQeV9Ob25lKTsKKysgIFB5X1hERUNSRUYodG1wKTsKKysgIHRtcCA9ICgoUHlPYmplY3Qq KXAtPmxldmVsKTsKKysgIHAtPmxldmVsID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwor KyAgUHlfWERFQ1JFRih0bXApOworKyAgdG1wID0gKChQeU9iamVjdCopcC0+dGV4dCk7CisrICBw LT50ZXh0ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworKyAgUHlfWERFQ1JFRih0bXAp OworKyAgdG1wID0gKChQeU9iamVjdCopcC0+bG9nX2xldmVsKTsKKysgIHAtPmxvZ19sZXZlbCA9 IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIFB5X1hERUNSRUYodG1wKTsKKysgIHJl dHVybiAwOworK30KKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9 IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gIGdvdG8gX19weXhfTDA7CistICBf X3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfOCk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5s aWJzLm1wdi5fX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUiLCBfX3B5 eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAw OworLSAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworK3N0YXRpYyBQeU9i amVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX3By ZWZpeChQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CisrICByZXR1cm4gX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzFfX2dldF9f KG8pOworIH0KKyAKKy0vKiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcHl4X3VucGlj a2xlX0lucHV0RGlzcGF0Y2goX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhf c3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0 IF9fcHl4X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAq LworLQorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfOV9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2goUHlPYmpl Y3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dk cyk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl85X19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCA9IHsiX19weXhfdW5waWNr bGVfSW5wdXREaXNwYXRjaCIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtl eXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl85X19weXhfdW5waWNrbGVfSW5w dXREaXNwYXRjaCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9OworLXN0YXRpYyBQeU9i amVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzlfX3B5eF91bnBpY2tsZV9JbnB1 dERpc3BhdGNoKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlP YmplY3QgKl9fcHl4X2t3ZHMpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5cGUgPSAw OworLSAgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtOworLSAgUHlPYmplY3QgKl9fcHl4X3Zf X19weXhfc3RhdGUgPSAwOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFy ICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBQ eU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2gg KHdyYXBwZXIpIiwgMCk7CistICB7CistICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJn bmFtZXNbXSA9IHsmX19weXhfbl9zX3B5eF90eXBlLCZfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCZf X3B5eF9uX3NfcHl4X3N0YXRlLDB9OworLSAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCww fTsKKy0gICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7CistICAgICAgUHlfc3NpemVfdCBr d19hcmdzOworLSAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9T SVpFKF9fcHl4X2FyZ3MpOworLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKy0gICAgICAgIGNh c2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CistICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQ eVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOworLSAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5 eF9hcmdzLCAwKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2Ug IDA6IGJyZWFrOworLSAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJv cjsKKy0gICAgICB9CistICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOwor LSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKy0gICAgICAgIGNhc2UgIDA6CistICAgICAgICBp ZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2Rz LCBfX3B5eF9uX3NfcHl4X3R5cGUpKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSBn b3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OworLSAgICAgICAgY2FzZSAgMToKKy0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9f UHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhfY2hlY2tzdW0p KSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSB7CistICAgICAgICAgIF9fUHl4X1Jh aXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoIiwgMSwgMywg MywgMSk7IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKy0gICAgICAgIH0KKy0gICAg ICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDI6CistICAgICAgICBpZiAo bGlrZWx5KCh2YWx1ZXNbMl0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBf X3B5eF9uX3NfcHl4X3N0YXRlKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVsc2Ugewor LSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfSW5w dXREaXNwYXRjaCIsIDEsIDMsIDMsIDIpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3Ip CistICAgICAgICB9CistICAgICAgfQorLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkp IHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19w eXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9fcHl4X3Vu cGlja2xlX0lucHV0RGlzcGF0Y2giKSA8IDApKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJy b3IpCistICAgICAgfQorLSAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cykgIT0gMykgeworLSAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgIH0g ZWxzZSB7CistICAgICAgdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAw KTsKKy0gICAgICB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOwor LSAgICAgIHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CistICAg IH0KKy0gICAgX19weXhfdl9fX3B5eF90eXBlID0gdmFsdWVzWzBdOworLSAgICBfX3B5eF92X19f cHl4X2NoZWNrc3VtID0gX19QeXhfUHlJbnRfQXNfbG9uZyh2YWx1ZXNbMV0pOyBpZiAodW5saWtl bHkoKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gPT0gKGxvbmcpLTEpICYmIFB5RXJyX09jY3VycmVk KCkpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCistICAgIF9fcHl4X3ZfX19weXhf c3RhdGUgPSB2YWx1ZXNbMl07Cisrc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfcHJlZml4KFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwg Q1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CisrICBpZiAodikgeworKyAgICByZXR1cm4gX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzNfX3NldF9fKG8s IHYpOworKyAgfQorKyAgZWxzZSB7CisrICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVmaXhfNV9fZGVsX18obyk7CisgICB9CistICBnb3Rv IF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworLSAgX19weXhfTDVfYXJndHVwbGVf ZXJyb3I6OworLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3VucGlja2xlX0lu cHV0RGlzcGF0Y2giLCAxLCAzLCAzLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19Q WVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorLSAgX19weXhfTDNfZXJyb3I6OworLSAgX19Q eXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfSW5wdXRE aXNwYXRjaCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwor LSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gTlVMTDsKKy0gIF9f cHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfOF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2goX19weXhf c2VsZiwgX19weXhfdl9fX3B5eF90eXBlLCBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBfX3B5eF92 X19fcHl4X3N0YXRlKTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhf UmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOF9fcHl4X3VucGlj a2xlX0lucHV0RGlzcGF0Y2goQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlP YmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQ eU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19w eXhfUGlja2xlRXJyb3IgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfcmVzdWx0ID0g MDsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFy YXRpb25zCistICBpbnQgX19weXhfdF8xOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7 CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQg PSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBpbnQgX19weXhfdF82 OworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFt ZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCIsIDApOworLQorLSAgLyog Iih0cmVlIGZyYWdtZW50KSI6NAorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJv cgorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKy0gKiAgICAgaWYgX19weXhfY2hl Y2tzdW0gIT0gMHhiZjY0MWE5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IK Ky0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tz dW1zICglcyB2cyAweGJmNjQxYTkgPSAoYXJnMCwgdHlwZSkpIiAlIF9fcHl4X2NoZWNrc3VtKQor LSAqLworLSAgX19weXhfdF8xID0gKChfX3B5eF92X19fcHl4X2NoZWNrc3VtICE9IDB4YmY2NDFh OSkgIT0gMCk7CistICBpZiAoX19weXhfdF8xKSB7CistCistICAgIC8qICIodHJlZSBmcmFnbWVu dCkiOjUKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9fcHl4 X2NoZWNrc3VtICE9IDB4YmY2NDFhOToKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQ aWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNo ZWNrc3VtcyAoJXMgdnMgMHhiZjY0MWE5ID0gKGFyZzAsIHR5cGUpKSIgJSBfX3B5eF9jaGVja3N1 bSkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gSW5wdXREaXNwYXRjaC5fX25ld19fKF9fcHl4X3R5 cGUpCistICovCistICAgIF9fcHl4X3RfMiA9IFB5TGlzdF9OZXcoMSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19QaWNrbGVFcnJv cik7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKy0gICAgUHlM aXN0X1NFVF9JVEVNKF9fcHl4X3RfMiwgMCwgX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKy0gICAg X19weXhfdF8zID0gX19QeXhfSW1wb3J0KF9fcHl4X25fc19waWNrbGUsIF9fcHl4X3RfMiwgLTEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJv cikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9JbXBvcnRGcm9t KF9fcHl4X3RfMywgX19weXhfbl9zX1BpY2tsZUVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdl9f X3B5eF9QaWNrbGVFcnJvciA9IF9fcHl4X3RfMjsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Mik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworLQorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2CistICogICAgIGlmIF9fcHl4 X2NoZWNrc3VtICE9IDB4YmY2NDFhOToKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQ aWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICAgICAgcmFpc2UgX19weXhf UGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4YmY2NDFhOSA9IChh cmcwLCB0eXBlKSkiICUgX19weXhfY2hlY2tzdW0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gSW5wdXREaXNwYXRjaC5fX25ld19fKF9fcHl4X3R5 cGUpCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorLSAqLworLSAgICBfX3B5 eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2xvbmcoX19weXhfdl9fX3B5eF9jaGVja3N1bSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQor LSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF80ID0gX19QeXhfUHlT dHJpbmdfRm9ybWF0KF9fcHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4YmYs IF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEsIDYsIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKy0gICAgX19weXhfdF8yID0gX19weXhfdl9fX3B5eF9Q aWNrbGVFcnJvcjsgX19weXhfdF81ID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICAgIF9f cHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgICAgaWYgKGxpa2Vs eShfX3B5eF90XzUpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9H RVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUp OworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JF Rl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4 X3RfMyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwg X19weXhfdF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90 XzIsIF9fcHl4X3RfNCk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81 ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAg IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9y KQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMywgMCwgMCwg MCk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICBf X1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9n ZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfbGV2ZWwoUHlPYmplY3Qg Km8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworKyAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzFfX2dldF9fKG8pOworK30KKyAKKy0g ICAgLyogIih0cmVlIGZyYWdtZW50KSI6NAorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNr bGVFcnJvcgorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKy0gKiAgICAgaWYgX19w eXhfY2hlY2tzdW0gIT0gMHhiZjY0MWE5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xl RXJyb3IKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUg Y2hlY2tzdW1zICglcyB2cyAweGJmNjQxYTkgPSAoYXJnMCwgdHlwZSkpIiAlIF9fcHl4X2NoZWNr c3VtKQorLSAqLworK3N0YXRpYyBpbnQgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTBMb2dNZXNzYWdlX2xldmVsKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9OX1VO VVNFRCB2b2lkICp4KSB7CisrICBpZiAodikgeworKyAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxfM19fc2V0X18obywgdik7CisgICB9 CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3CistICogICAgICAgICBmcm9tIHBpY2tsZSBp bXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgICAgIHJhaXNl IF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGJmNjQx YTkgPSAoYXJnMCwgdHlwZSkpIiAlIF9fcHl4X2NoZWNrc3VtKQorLSAqICAgICBfX3B5eF9yZXN1 bHQgPSBJbnB1dERpc3BhdGNoLl9fbmV3X18oX19weXhfdHlwZSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKy0gKiAgICAg ICAgIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZSg8SW5wdXREaXNwYXRj aD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4 X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9JbnB1dERpc3BhdGNoKSwgX19weXhfbl9zX25ldyk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfMik7CistICBfX3B5eF90XzQgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAg X19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKy0gICAgaWYgKGxpa2Vs eShfX3B5eF90XzQpKSB7CistICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VU X0ZVTkNUSU9OKF9fcHl4X3RfMik7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7Cist ICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfMiwgZnVuY3Rpb24pOworLSAgICB9CisrICBlbHNlIHsKKysgICAgcmV0dXJuIF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzVfX2RlbF9fKG8p OworICAgfQorLSAgX19weXhfdF8zID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3ZfX19weXhfdHlwZSkgOiBfX1B5eF9Q eU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9fX3B5eF90eXBlKTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKKy0gIF9fcHl4X3ZfX19weXhfcmVzdWx0ID0gX19weXhfdF8zOworLSAgX19weXhfdF8zID0g MDsKKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4 X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGJmNjQxYTkgPSAo YXJnMCwgdHlwZSkpIiAlIF9fcHl4X2NoZWNrc3VtKQorLSAqICAgICBfX3B5eF9yZXN1bHQgPSBJ bnB1dERpc3BhdGNoLl9fbmV3X18oX19weXhfdHlwZSkKKy0gKiAgICAgaWYgX19weXhfc3RhdGUg aXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIF9f cHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZSg8SW5wdXREaXNwYXRjaD4gX19w eXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorLSAq LworLSAgX19weXhfdF8xID0gKF9fcHl4X3ZfX19weXhfc3RhdGUgIT0gUHlfTm9uZSk7CistICBf X3B5eF90XzYgPSAoX19weXhfdF8xICE9IDApOworLSAgaWYgKF9fcHl4X3RfNikgeworK30KKyAK Ky0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6OQorLSAqICAgICBfX3B5eF9yZXN1bHQgPSBJbnB1 dERpc3BhdGNoLl9fbmV3X18oX19weXhfdHlwZSkKKy0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMg bm90IE5vbmU6CistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoX19zZXRf c3RhdGUoPElucHV0RGlzcGF0Y2g+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorLSAqIGNk ZWYgX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0X3N0YXRlKElucHV0RGlzcGF0Y2gg X19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CistICovCistICAgIGlmICghKGxpa2Vs eShQeVR1cGxlX0NoZWNrRXhhY3QoX19weXhfdl9fX3B5eF9zdGF0ZSkpfHwoKF9fcHl4X3ZfX19w eXhfc3RhdGUpID09IFB5X05vbmUpfHwoUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkV4 cGVjdGVkICUuMTZzLCBnb3QgJS4yMDBzIiwgInR1cGxlIiwgUHlfVFlQRShfX3B5eF92X19fcHl4 X3N0YXRlKS0+dHBfbmFtZSksIDApKSkgX19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQor LSAgICBfX3B5eF90XzMgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBp Y2tsZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCAoKFB5 T2JqZWN0KilfX3B5eF92X19fcHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkg X19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8zKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Cisrc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01l c3NhZ2VfdGV4dChQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CisrICByZXR1 cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF8xX19n ZXRfXyhvKTsKKyt9CisgCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKy0gKiAgICAgICAg IHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAw eGJmNjQxYTkgPSAoYXJnMCwgdHlwZSkpIiAlIF9fcHl4X2NoZWNrc3VtKQorLSAqICAgICBfX3B5 eF9yZXN1bHQgPSBJbnB1dERpc3BhdGNoLl9fbmV3X18oX19weXhfdHlwZSkKKy0gKiAgICAgaWYg X19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZSg8SW5wdXRE aXNwYXRjaD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4 X3Jlc3VsdAorLSAqLworK3N0YXRpYyBpbnQgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTBMb2dNZXNzYWdlX3RleHQoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2LCBDWVRIT05f VU5VU0VEIHZvaWQgKngpIHsKKysgIGlmICh2KSB7CisrICAgIHJldHVybiBfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0ZXh0XzNfX3NldF9fKG8sIHYpOworICAg fQorKyAgZWxzZSB7CisrICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTBMb2dNZXNzYWdlXzR0ZXh0XzVfX2RlbF9fKG8pOworKyAgfQorK30KKyAKKy0gIC8qICIodHJl ZSBmcmFnbWVudCkiOjEwCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorLSAq ICAgICAgICAgX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0X3N0YXRlKDxJbnB1dERp c3BhdGNoPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19weXhf cmVzdWx0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiBjZGVmIF9fcHl4X3VucGlj a2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZShJbnB1dERpc3BhdGNoIF9fcHl4X3Jlc3VsdCwg dHVwbGUgX19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5eF9yZXN1bHQuYXJnMCA9IF9fcHl4X3N0 YXRlWzBdOyBfX3B5eF9yZXN1bHQudHlwZSA9IF9fcHl4X3N0YXRlWzFdCistICovCistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0 KTsKKy0gIF9fcHl4X3IgPSBfX3B5eF92X19fcHl4X3Jlc3VsdDsKKy0gIGdvdG8gX19weXhfTDA7 CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcHl4X3VucGlja2xlX0lu cHV0RGlzcGF0Y2goX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4 X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqLworK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dN ZXNzYWdlX2xvZ19sZXZlbChQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Cisr ICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9n X2xldmVsXzFfX2dldF9fKG8pOworK30KKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor LSAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworLSAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0 ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7CistICBf X3B5eF9MMDo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IpOwor LSAgX19QeXhfWERFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdCk7CistICBfX1B5eF9YR0lWRVJF RihfX3B5eF9yKTsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJu IF9fcHl4X3I7Cisrc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfbG9nX2xldmVsKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9O X1VOVVNFRCB2b2lkICp4KSB7CisrICBpZiAodikgeworKyAgICByZXR1cm4gX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsXzNfX3NldF9fKG8sIHYp OworKyAgfQorKyAgZWxzZSB7CisrICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTBMb2dNZXNzYWdlXzlsb2dfbGV2ZWxfNV9fZGVsX18obyk7CisrICB9CisgfQorIAor LS8qICIodHJlZSBmcmFnbWVudCkiOjExCistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9JbnB1 dERpc3BhdGNoX19zZXRfc3RhdGUoPElucHV0RGlzcGF0Y2g+IF9fcHl4X3Jlc3VsdCwgX19weXhf c3RhdGUpCistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlj a2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZShJbnB1dERpc3BhdGNoIF9fcHl4X3Jlc3VsdCwg dHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg IF9fcHl4X3Jlc3VsdC5hcmcwID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC50eXBlID0g X19weXhfc3RhdGVbMV0KKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0 dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKy0gKi8KKytzdGF0aWMgUHlNZXRob2REZWYg X19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZVtdID0geworKyAg eyJfX3JlZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTBMb2dNZXNzYWdlXzFfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9 LAorKyAgeyJfX3NldHN0YXRlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfM19fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhf TywgMH0sCisrICB7MCwgMCwgMCwgMH0KKyt9OworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0 X3N0YXRlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0 Y2ggKl9fcHl4X3ZfX19weXhfcmVzdWx0LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkg eworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJh dGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfMjsK Ky0gIFB5X3NzaXplX3QgX19weXhfdF8zOworLSAgaW50IF9fcHl4X3RfNDsKKy0gIGludCBfX3B5 eF90XzU7CistICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5 eF90XzcgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfOCA9IE5VTEw7CistICBpbnQgX19w eXhfbGluZW5vID0gMDsKKy0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0g IGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUiLCAwKTsKKytzdGF0aWMgc3Ry dWN0IFB5R2V0U2V0RGVmIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01l c3NhZ2VbXSA9IHsKKysgIHsoY2hhciAqKSJwcmVmaXgiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfcHJlZml4LCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfcHJlZml4LCAoY2hhciAqKTAsIDB9LAorKyAgeyhj aGFyICopImxldmVsIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dN ZXNzYWdlX2xldmVsLCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01l c3NhZ2VfbGV2ZWwsIChjaGFyICopMCwgMH0sCisrICB7KGNoYXIgKikidGV4dCIsIF9fcHl4X2dl dHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV90ZXh0LCBfX3B5eF9zZXRw cm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfdGV4dCwgKGNoYXIgKikwLCAw fSwKKysgIHsoY2hhciAqKSJsb2dfbGV2ZWwiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xMExvZ01lc3NhZ2VfbG9nX2xldmVsLCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfbG9nX2xldmVsLCAoY2hhciAqKTAsIDB9LAorKyAgezAs IDAsIDAsIDAsIDB9CisrfTsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEyCistICogICAg IHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0 Y2hfX3NldF9zdGF0ZShJbnB1dERpc3BhdGNoIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3Rh dGUpOgorLSAqICAgICBfX3B5eF9yZXN1bHQuYXJnMCA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9y ZXN1bHQudHlwZSA9IF9fcHl4X3N0YXRlWzFdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0 LCAnX19kaWN0X18nKToKKy0gKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUo X19weXhfc3RhdGVbMl0pCistICovCistICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0 ZSA9PSBQeV9Ob25lKSkgeworLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAi J05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsKKy0gICAgX19QWVhfRVJS KDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKytzdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgPSB7CisrICBQeVZhck9iamVjdF9IRUFE X0lOSVQoMCwgMCkKKysgICJ2aWRjdXR0ZXIubGlicy5tcHYuTG9nTWVzc2FnZSIsIC8qdHBfbmFt ZSovCisrICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9n TWVzc2FnZSksIC8qdHBfYmFzaWNzaXplKi8KKysgIDAsIC8qdHBfaXRlbXNpemUqLworKyAgX19w eXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSwgLyp0cF9kZWFs bG9jKi8KKysgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKysgIDAsIC8qdHBfcHJp bnQqLworKyAgI2VuZGlmCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorKyAg MCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCisrICAjZW5kaWYKKysgIDAsIC8qdHBfZ2V0YXR0 ciovCisrICAwLCAvKnRwX3NldGF0dHIqLworKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisr ICAwLCAvKnRwX2NvbXBhcmUqLworKyAgI2VuZGlmCisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+ PSAzCisrICAwLCAvKnRwX2FzX2FzeW5jKi8KKysgICNlbmRpZgorKyAgMCwgLyp0cF9yZXByKi8K KysgIDAsIC8qdHBfYXNfbnVtYmVyKi8KKysgIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworKyAgMCwg Lyp0cF9hc19tYXBwaW5nKi8KKysgIDAsIC8qdHBfaGFzaCovCisrICAwLCAvKnRwX2NhbGwqLwor KyAgMCwgLyp0cF9zdHIqLworKyAgMCwgLyp0cF9nZXRhdHRybyovCisrICAwLCAvKnRwX3NldGF0 dHJvKi8KKysgIDAsIC8qdHBfYXNfYnVmZmVyKi8KKysgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9U UEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1Nf SEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8q dHBfZmxhZ3MqLworKyAgIkRhdGEgZmllbGQgZm9yIE1QVl9FVkVOVF9MT0dfTUVTU0FHRSBldmVu dHMuXG5cbiAgICBXcmFwczogbXB2X2V2ZW50X2xvZ19tZXNzYWdlXG4gICAgIiwgLyp0cF9kb2Mq LworKyAgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2Us IC8qdHBfdHJhdmVyc2UqLworKyAgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2 X0xvZ01lc3NhZ2UsIC8qdHBfY2xlYXIqLworKyAgMCwgLyp0cF9yaWNoY29tcGFyZSovCisrICAw LCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKysgIDAsIC8qdHBfaXRlciovCisrICAwLCAvKnRwX2l0 ZXJuZXh0Ki8KKysgIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3Nh Z2UsIC8qdHBfbWV0aG9kcyovCisrICAwLCAvKnRwX21lbWJlcnMqLworKyAgX19weXhfZ2V0c2V0 c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSwgLyp0cF9nZXRzZXQqLworKyAgMCwg Lyp0cF9iYXNlKi8KKysgIDAsIC8qdHBfZGljdCovCisrICAwLCAvKnRwX2Rlc2NyX2dldCovCisr ICAwLCAvKnRwX2Rlc2NyX3NldCovCisrICAwLCAvKnRwX2RpY3RvZmZzZXQqLworKyAgMCwgLyp0 cF9pbml0Ki8KKysgIDAsIC8qdHBfYWxsb2MqLworKyAgX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Mb2dNZXNzYWdlLCAvKnRwX25ldyovCisrICAwLCAvKnRwX2ZyZWUqLworKyAg MCwgLyp0cF9pc19nYyovCisrICAwLCAvKnRwX2Jhc2VzKi8KKysgIDAsIC8qdHBfbXJvKi8KKysg IDAsIC8qdHBfY2FjaGUqLworKyAgMCwgLyp0cF9zdWJjbGFzc2VzKi8KKysgIDAsIC8qdHBfd2Vh a2xpc3QqLworKyAgMCwgLyp0cF9kZWwqLworKyAgMCwgLyp0cF92ZXJzaW9uX3RhZyovCisrICAj aWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA0MDBhMQorKyAgMCwgLyp0cF9maW5hbGl6ZSovCisr ICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGIxICYmICghQ1lUSE9O X0NPTVBJTElOR19JTl9QWVBZIHx8IFBZUFlfVkVSU0lPTl9OVU0gPj0gMHgwNzAzMDgwMCkKKysg IDAsIC8qdHBfdmVjdG9yY2FsbCovCisrICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+ PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAorKyAgMCwgLyp0cF9w cmludCovCisrICAjZW5kaWYKKysgICNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgJiYgUFlf VkVSU0lPTl9IRVggPj0gMHgwMzA5MDAwMAorKyAgMCwgLyp0cF9weXB5X2ZsYWdzKi8KKysgICNl bmRpZgorK307Cisrc3RhdGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Qcm9wZXJ0eSBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3Bl cnR5OworKworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eShQeVR5cGVPYmplY3QgKnQsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmEs IENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKKysgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpwOworKyAgUHlPYmplY3QgKm87CisrICBpZiAobGlr ZWx5KCh0LT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QpID09IDApKSB7CisrICAg IG8gPSAoKnQtPnRwX2FsbG9jKSh0LCAwKTsKKysgIH0gZWxzZSB7CisrICAgIG8gPSAoUHlPYmpl Y3QgKikgUHlCYXNlT2JqZWN0X1R5cGUudHBfbmV3KHQsIF9fcHl4X2VtcHR5X3R1cGxlLCAwKTsK KyAgIH0KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5 eF9zdGF0ZSwgMCwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7 CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPmFyZzApOworLSAgX19QeXhf REVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5hcmcwKTsKKy0gIF9fcHl4X3ZfX19weXhfcmVz dWx0LT5hcmcwID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKy0gIGlmICh1bmxpa2Vs eShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7CistICAgIFB5RXJyX1NldFN0cmlu ZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJs ZSIpOworLSAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlr ZWx5KCFvKSkgcmV0dXJuIDA7CisrICBwID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Qcm9wZXJ0eSAqKW8pOworKyAgcC0+X19weXhfdnRhYiA9IF9fcHl4X3Z0YWJw dHJfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5OworKyAgcC0+bmFtZSA9IFB5X05vbmU7 IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIHAtPmRhdGEgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlf Tm9uZSk7CisrICByZXR1cm4gbzsKKyt9CisrCisrc3RhdGljIHZvaWQgX19weXhfdHBfZGVhbGxv Y185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkoUHlPYmplY3QgKm8pIHsKKysgIHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpwID0gKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopbzsKKysgICNpZiBDWVRI T05fVVNFX1RQX0ZJTkFMSVpFCisrICBpZiAodW5saWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUoUHlf VFlQRShvKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9UWVBFKG8pLT50cF9maW5h bGl6ZSkgJiYgIV9QeUdDX0ZJTkFMSVpFRChvKSkgeworKyAgICBpZiAoUHlPYmplY3RfQ2FsbEZp bmFsaXplckZyb21EZWFsbG9jKG8pKSByZXR1cm47CisgICB9CistICBfX3B5eF90XzEgPSBfX1B5 eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDEsIGxvbmcsIDEsIF9fUHl4 X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zf X19weXhfcmVzdWx0LT50eXBlKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3Vs dC0+dHlwZSk7CistICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+dHlwZSA9IF9fcHl4X3RfMTsKKy0g IF9fcHl4X3RfMSA9IDA7CisrICAjZW5kaWYKKysgIFB5T2JqZWN0X0dDX1VuVHJhY2sobyk7Cisr ICBQeV9DTEVBUihwLT5uYW1lKTsKKysgIFB5X0NMRUFSKHAtPmRhdGEpOworKyAgKCpQeV9UWVBF KG8pLT50cF9mcmVlKShvKTsKKyt9CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMworLSAq IGNkZWYgX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0X3N0YXRlKElucHV0RGlzcGF0 Y2ggX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CistICogICAgIF9fcHl4X3Jlc3Vs dC5hcmcwID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC50eXBlID0gX19weXhfc3RhdGVb MV0KKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVz dWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVsyXSkKKy0gKi8KKy0g IGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7CistICAgIFB5 RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJvYmplY3Qgb2YgdHlwZSAnTm9uZVR5cGUn IGhhcyBubyBsZW4oKSIpOworLSAgICBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQor K3N0YXRpYyBpbnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3Bl cnR5KFB5T2JqZWN0ICpvLCB2aXNpdHByb2Mgdiwgdm9pZCAqYSkgeworKyAgaW50IGU7CisrICBz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqcCA9IChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKW87CisrICBpZiAo cC0+bmFtZSkgeworKyAgICBlID0gKCp2KShwLT5uYW1lLCBhKTsgaWYgKGUpIHJldHVybiBlOwor ICAgfQorLSAgX19weXhfdF8zID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF92X19fcHl4X3N0YXRl KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJS KDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfNCA9ICgoX19weXhfdF8zID4gMikg IT0gMCk7CistICBpZiAoX19weXhfdF80KSB7CistICB9IGVsc2UgeworLSAgICBfX3B5eF90XzIg PSBfX3B5eF90XzQ7CistICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworKyAgaWYg KHAtPmRhdGEpIHsKKysgICAgZSA9ICgqdikocC0+ZGF0YSwgYSk7IGlmIChlKSByZXR1cm4gZTsK KyAgIH0KKy0gIF9fcHl4X3RfNCA9IF9fUHl4X0hhc0F0dHIoKChQeU9iamVjdCAqKV9fcHl4X3Zf X19weXhfcmVzdWx0KSwgX19weXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoX19weXhfdF80ID09 ICgoaW50KS0xKSkpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90 XzUgPSAoX19weXhfdF80ICE9IDApOworLSAgX19weXhfdF8yID0gX19weXhfdF81OworLSAgX19w eXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKKy0gIGlmIChfX3B5eF90XzIpIHsKKysgIHJldHVybiAw OworK30KKyAKKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTQKKy0gKiAgICAgX19weXhfcmVz dWx0LmFyZzAgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LnR5cGUgPSBfX3B5eF9zdGF0 ZVsxXQorLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9y ZXN1bHQsICdfX2RpY3RfXycpOgorLSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVw ZGF0ZShfX3B5eF9zdGF0ZVsyXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqLwor LSAgICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilf X3B5eF92X19fcHl4X3Jlc3VsdCksIF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RS RUYoX19weXhfdF82KTsKKy0gICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF90XzYsIF9fcHl4X25fc191cGRhdGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykp IF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzcpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0g ICAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKy0gICAg ICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMg bm90IHN1YnNjcmlwdGFibGUiKTsKKy0gICAgICBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vy cm9yKQorLSAgICB9CistICAgIF9fcHl4X3RfNiA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19w eXhfdl9fX3B5eF9zdGF0ZSwgMiwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAw LCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgX19weXhfdF84ID0g TlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2Rf Q2hlY2soX19weXhfdF83KSkpIHsKKy0gICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VM RihfX3B5eF90XzcpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF84KSkgeworLSAgICAgICAg UHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNyk7Cist ICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF84KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihm dW5jdGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNywgZnVuY3Rpb24p OworLSAgICAgIH0KKy0gICAgfQorLSAgICBfX3B5eF90XzEgPSAoX19weXhfdF84KSA/IF9fUHl4 X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdF82KSA6IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF83LCBfX3B5eF90XzYpOworLSAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7CistICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0g ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Cisrc3RhdGljIGludCBf X3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkoUHlPYmplY3QgKm8p IHsKKysgIFB5T2JqZWN0KiB0bXA7CisrICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Qcm9wZXJ0eSAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eSAqKW87CisrICB0bXAgPSAoKFB5T2JqZWN0KilwLT5uYW1lKTsKKysgIHAt Pm5hbWUgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CisrICBQeV9YREVDUkVGKHRtcCk7 CisrICB0bXAgPSAoKFB5T2JqZWN0KilwLT5kYXRhKTsKKysgIHAtPmRhdGEgPSBQeV9Ob25lOyBQ eV9JTkNSRUYoUHlfTm9uZSk7CisrICBQeV9YREVDUkVGKHRtcCk7CisrICByZXR1cm4gMDsKKyt9 CisgCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjEzCistICogY2RlZiBfX3B5eF91bnBpY2ts ZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUoSW5wdXREaXNwYXRjaCBfX3B5eF9yZXN1bHQsIHR1 cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19weXhfcmVzdWx0LmFyZzAgPSBfX3B5eF9zdGF0 ZVswXTsgX19weXhfcmVzdWx0LnR5cGUgPSBfX3B5eF9zdGF0ZVsxXQorLSAqICAgICBpZiBsZW4o X19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBfX3B5eF9yZXN1bHQuX19k aWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzJdKQorLSAqLworK3N0YXRpYyBQeU9iamVjdCAqX19w eXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X25hbWUoUHlPYmplY3Qg Km8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworKyAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVfMV9fZ2V0X18obyk7CisrfQorKworK3N0YXRp YyBpbnQgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X25hbWUo UHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKysgIGlm ICh2KSB7CisrICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3Bl cnR5XzRuYW1lXzNfX3NldF9fKG8sIHYpOworKyAgfQorKyAgZWxzZSB7CisrICAgIHJldHVybiBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRuYW1lXzVfX2RlbF9fKG8p OworICAgfQorK30KKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjExCistICogICAgICAgICBf X3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUoPElucHV0RGlzcGF0Y2g+IF9f cHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0g KiBjZGVmIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZShJbnB1dERpc3Bh dGNoIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIF9fcHl4X3Jlc3VsdC5hcmcwID0gX19weXhfc3RhdGVbMF07IF9f cHl4X3Jlc3VsdC50eXBlID0gX19weXhfc3RhdGVbMV0KKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0 YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKy0gKi8KKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9w ZXJ0eV9kYXRhKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKysgIHJldHVy biBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzFfX2dldF9f KG8pOworK30KKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IFB5 X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gIGdvdG8gX19weXhfTDA7CistICBfX3B5 eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfOCk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJz Lm1wdi5fX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUiLCBfX3B5eF9jbGlu ZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAwOworLSAg X19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworK3N0YXRpYyBpbnQgX19weXhf c2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X2RhdGEoUHlPYmplY3QgKm8s IFB5T2JqZWN0ICp2LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKysgIGlmICh2KSB7CisrICAg IHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzNf X3NldF9fKG8sIHYpOworKyAgfQorKyAgZWxzZSB7CisrICAgIHJldHVybiBfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzVfX2RlbF9fKG8pOworKyAgfQorIH0K KyAKKy0vKiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcHl4X3VucGlja2xlX0xvZ01l c3NhZ2UoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2ts ZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqLworK3N0YXRpYyBQ eU1ldGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eVtd ID0geworKyAgeyJfX3JlZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzFfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FS R1MsIDB9LAorKyAgeyJfX3NldHN0YXRlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfM19fc2V0c3RhdGVfY3l0aG9uX18sIE1F VEhfTywgMH0sCisrICB7MCwgMCwgMCwgMH0KKyt9OworIAorLS8qIFB5dGhvbiB3cmFwcGVyICov Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTFfX3B5 eF91bnBpY2tsZV9Mb2dNZXNzYWdlKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19w eXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlNZXRo b2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTFfX3B5eF91bnBpY2tsZV9M b2dNZXNzYWdlID0geyJfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlIiwgKFB5Q0Z1bmN0aW9uKSh2 b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzExX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09S RFMsIDB9OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzExX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZShQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CistICBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF90eXBlID0gMDsKKy0gIGxvbmcgX19weXhfdl9fX3B5eF9jaGVja3N1bTsKKy0g IFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlID0gMDsKKy0gIGludCBfX3B5eF9saW5lbm8g PSAwOworLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBp Y2tsZV9Mb2dNZXNzYWdlICh3cmFwcGVyKSIsIDApOworLSAgeworLSAgICBzdGF0aWMgUHlPYmpl Y3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19weXhfdHlwZSwmX19weXhfbl9z X3B5eF9jaGVja3N1bSwmX19weXhfbl9zX3B5eF9zdGF0ZSwwfTsKKy0gICAgUHlPYmplY3QqIHZh bHVlc1szXSA9IHswLDAsMH07CistICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworLSAg ICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKy0gICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdz ID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdz KSB7CistICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4 X2FyZ3MsIDIpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAg MjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAg IENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhf TDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQorLSAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6 ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNl ICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0 ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF90eXBlKSkgIT0gMCkpIGt3X2FyZ3MtLTsK Ky0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKy0gICAgICAgIENZ VEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6CistICAgICAgICBpZiAobGlrZWx5 KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9u X3NfcHl4X2NoZWNrc3VtKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVsc2UgeworLSAg ICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfTG9nTWVz c2FnZSIsIDEsIDMsIDMsIDEpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCistICAg ICAgICB9CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAyOgor LSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzJdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIo X19weXhfa3dkcywgX19weXhfbl9zX3B5eF9zdGF0ZSkpICE9IDApKSBrd19hcmdzLS07CistICAg ICAgICBlbHNlIHsKKy0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4 X3VucGlja2xlX0xvZ01lc3NhZ2UiLCAxLCAzLCAzLCAyKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4 X0wzX2Vycm9yKQorLSAgICAgICAgfQorLSAgICAgIH0KKy0gICAgICBpZiAodW5saWtlbHkoa3df YXJncyA+IDApKSB7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtl eXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3Ms ICJfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlIikgPCAwKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4 X0wzX2Vycm9yKQorLSAgICAgIH0KKy0gICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9f cHl4X2FyZ3MpICE9IDMpIHsKKy0gICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwor LSAgICB9IGVsc2UgeworLSAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhf YXJncywgMCk7CistICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdz LCAxKTsKKy0gICAgICB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIp OworLSAgICB9CistICAgIF9fcHl4X3ZfX19weXhfdHlwZSA9IHZhbHVlc1swXTsKKy0gICAgX19w eXhfdl9fX3B5eF9jaGVja3N1bSA9IF9fUHl4X1B5SW50X0FzX2xvbmcodmFsdWVzWzFdKTsgaWYg KHVubGlrZWx5KChfX3B5eF92X19fcHl4X2NoZWNrc3VtID09IChsb25nKS0xKSAmJiBQeUVycl9P Y2N1cnJlZCgpKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorLSAgICBfX3B5eF92 X19fcHl4X3N0YXRlID0gdmFsdWVzWzJdOworK3N0YXRpYyBzdHJ1Y3QgUHlHZXRTZXREZWYgX19w eXhfZ2V0c2V0c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHlbXSA9IHsKKysgIHsoY2hh ciAqKSJuYW1lIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5 X25hbWUsIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9uYW1l LCAoY2hhciAqKTAsIDB9LAorKyAgeyhjaGFyICopImRhdGEiLCBfX3B5eF9nZXRwcm9wXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfZGF0YSwgX19weXhfc2V0cHJvcF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfOFByb3BlcnR5X2RhdGEsIChjaGFyICopMCwgMH0sCisrICB7MCwgMCwgMCwg MCwgMH0KKyt9OworKworK3N0YXRpYyBQeVR5cGVPYmplY3QgX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUHJvcGVydHkgPSB7CisrICBQeVZhck9iamVjdF9IRUFEX0lOSVQoMCwgMCkK KysgICJ2aWRjdXR0ZXIubGlicy5tcHYuUHJvcGVydHkiLCAvKnRwX25hbWUqLworKyAgc2l6ZW9m KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSwgLyp0cF9i YXNpY3NpemUqLworKyAgMCwgLyp0cF9pdGVtc2l6ZSovCisrICBfX3B5eF90cF9kZWFsbG9jXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSwgLyp0cF9kZWFsbG9jKi8KKysgICNpZiBQWV9W RVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKysgIDAsIC8qdHBfcHJpbnQqLworKyAgI2VuZGlmCisr ICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorKyAgMCwgLyp0cF92ZWN0b3JjYWxs X29mZnNldCovCisrICAjZW5kaWYKKysgIDAsIC8qdHBfZ2V0YXR0ciovCisrICAwLCAvKnRwX3Nl dGF0dHIqLworKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAwLCAvKnRwX2NvbXBhcmUq LworKyAgI2VuZGlmCisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCisrICAwLCAvKnRwX2Fz X2FzeW5jKi8KKysgICNlbmRpZgorKyAgMCwgLyp0cF9yZXByKi8KKysgIDAsIC8qdHBfYXNfbnVt YmVyKi8KKysgIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworKyAgMCwgLyp0cF9hc19tYXBwaW5nKi8K KysgIDAsIC8qdHBfaGFzaCovCisrICAwLCAvKnRwX2NhbGwqLworKyAgMCwgLyp0cF9zdHIqLwor KyAgMCwgLyp0cF9nZXRhdHRybyovCisrICAwLCAvKnRwX3NldGF0dHJvKi8KKysgIDAsIC8qdHBf YXNfYnVmZmVyKi8KKysgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0hBVkVfVkVSU0lP Tl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVJ8UHlf VFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworKyAgIkRh dGEgZmllbGQgZm9yIE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0UgYW5kIE1QVl9FVkVOVF9HRVRf UFJPUEVSVFlfUkVQTFkuXG5cbiAgICBXcmFwczogbXB2X2V2ZW50X3Byb3BlcnR5XG4gICAgIiwg Lyp0cF9kb2MqLworKyAgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X1By b3BlcnR5LCAvKnRwX3RyYXZlcnNlKi8KKysgIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Qcm9wZXJ0eSwgLyp0cF9jbGVhciovCisrICAwLCAvKnRwX3JpY2hjb21wYXJlKi8K KysgIDAsIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworKyAgMCwgLyp0cF9pdGVyKi8KKysgIDAsIC8q dHBfaXRlcm5leHQqLworKyAgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJv cGVydHksIC8qdHBfbWV0aG9kcyovCisrICAwLCAvKnRwX21lbWJlcnMqLworKyAgX19weXhfZ2V0 c2V0c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHksIC8qdHBfZ2V0c2V0Ki8KKysgIDAs IC8qdHBfYmFzZSovCisrICAwLCAvKnRwX2RpY3QqLworKyAgMCwgLyp0cF9kZXNjcl9nZXQqLwor KyAgMCwgLyp0cF9kZXNjcl9zZXQqLworKyAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8KKysgIDAsIC8q dHBfaW5pdCovCisrICAwLCAvKnRwX2FsbG9jKi8KKysgIF9fcHl4X3RwX25ld185dmlkY3V0dGVy XzRsaWJzXzNtcHZfUHJvcGVydHksIC8qdHBfbmV3Ki8KKysgIDAsIC8qdHBfZnJlZSovCisrICAw LCAvKnRwX2lzX2djKi8KKysgIDAsIC8qdHBfYmFzZXMqLworKyAgMCwgLyp0cF9tcm8qLworKyAg MCwgLyp0cF9jYWNoZSovCisrICAwLCAvKnRwX3N1YmNsYXNzZXMqLworKyAgMCwgLyp0cF93ZWFr bGlzdCovCisrICAwLCAvKnRwX2RlbCovCisrICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KKysgICNp ZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCisrICAwLCAvKnRwX2ZpbmFsaXplKi8KKysg ICNlbmRpZgorKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEgJiYgKCFDWVRIT05f Q09NUElMSU5HX0lOX1BZUFkgfHwgUFlQWV9WRVJTSU9OX05VTSA+PSAweDA3MDMwODAwKQorKyAg MCwgLyp0cF92ZWN0b3JjYWxsKi8KKysgICNlbmRpZgorKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49 IDB4MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAwCisrICAwLCAvKnRwX3By aW50Ki8KKysgICNlbmRpZgorKyAgI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fUFlQWSAmJiBQWV9W RVJTSU9OX0hFWCA+PSAweDAzMDkwMDAwCisrICAwLCAvKnRwX3B5cHlfZmxhZ3MqLworKyAgI2Vu ZGlmCisrfTsKKytzdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGli c18zbXB2X0V2ZW50IF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQ7Cisr Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2 ZW50KFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqYSwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqaykgeworKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRXZlbnQgKnA7CisrICBQeU9iamVjdCAqbzsKKysgIGlmIChsaWtlbHkoKHQtPnRwX2Zs YWdzICYgUHlfVFBGTEFHU19JU19BQlNUUkFDVCkgPT0gMCkpIHsKKysgICAgbyA9ICgqdC0+dHBf YWxsb2MpKHQsIDApOworKyAgfSBlbHNlIHsKKysgICAgbyA9IChQeU9iamVjdCAqKSBQeUJhc2VP YmplY3RfVHlwZS50cF9uZXcodCwgX19weXhfZW1wdHlfdHVwbGUsIDApOworICAgfQorLSAgZ290 byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKy0gIF9fcHl4X0w1X2FyZ3R1cGxl X2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9M b2dNZXNzYWdlIiwgMSwgMywgMywgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlY X0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKy0gIF9fcHl4X0wzX2Vycm9yOjsKKy0gIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX0xvZ01lc3Nh Z2UiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIE5VTEw7CistICBfX3B5eF9M NF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEwX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZShfX3B5eF9zZWxmLCBf X3B5eF92X19fcHl4X3R5cGUsIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIF9fcHl4X3ZfX19weXhf c3RhdGUpOworKyAgaWYgKHVubGlrZWx5KCFvKSkgcmV0dXJuIDA7CisrICBwID0gKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKW8pOworKyAgcC0+X19weXhf dnRhYiA9IF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50OworKyAgcC0+ ZGF0YSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIHAtPnJlcGx5X3VzZXJkYXRh ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworKyAgcmV0dXJuIG87CisrfQorIAorLSAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKy0gIHJldHVybiBfX3B5eF9yOworK3N0YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxsb2NfOXZp ZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KFB5T2JqZWN0ICpvKSB7CisrICBzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKW87CisrICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5B TElaRQorKyAgaWYgKHVubGlrZWx5KFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQ RkxBR1NfSEFWRV9GSU5BTElaRSkgJiYgUHlfVFlQRShvKS0+dHBfZmluYWxpemUpICYmICFfUHlH Q19GSU5BTElaRUQobykpIHsKKysgICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVh bGxvYyhvKSkgcmV0dXJuOworKyAgfQorKyAgI2VuZGlmCisrICBQeU9iamVjdF9HQ19VblRyYWNr KG8pOworKyAgUHlfQ0xFQVIocC0+ZGF0YSk7CisrICBQeV9DTEVBUihwLT5yZXBseV91c2VyZGF0 YSk7CisrICAoKlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOworIH0KKyAKKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMF9fcHl4X3VucGlja2xlX0xvZ01l c3NhZ2UoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF9zdGF0ZSkgeworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfUGlja2xlRXJy b3IgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfcmVzdWx0ID0gMDsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBp bnQgX19weXhfdF8xOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVj dCAqX19weXhfdF8zID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAg UHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBpbnQgX19weXhfdF82OworLSAgaW50IF9f cHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Cist ICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSIsIDApOworK3N0YXRpYyBpbnQgX19weXhfdHBfdHJh dmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KFB5T2JqZWN0ICpvLCB2aXNpdHByb2Mg diwgdm9pZCAqYSkgeworKyAgaW50IGU7CisrICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FdmVudCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCAqKW87CisrICBpZiAocC0+ZGF0YSkgeworKyAgICBlID0gKCp2KShwLT5kYXRh LCBhKTsgaWYgKGUpIHJldHVybiBlOworKyAgfQorKyAgaWYgKHAtPnJlcGx5X3VzZXJkYXRhKSB7 CisrICAgIGUgPSAoKnYpKHAtPnJlcGx5X3VzZXJkYXRhLCBhKTsgaWYgKGUpIHJldHVybiBlOwor KyAgfQorKyAgcmV0dXJuIDA7CisrfQorIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6NAorLSAq ICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICBjZGVmIG9iamVjdCBf X3B5eF9yZXN1bHQKKy0gKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHg4Nzc0ZmFlOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQg UGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4 X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDg3NzRmYWUgPSAo bGV2ZWwsIGxvZ19sZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19weXhfY2hlY2tzdW0pCistICov CistICBfX3B5eF90XzEgPSAoKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gIT0gMHg4Nzc0ZmFlKSAh PSAwKTsKKy0gIGlmIChfX3B5eF90XzEpIHsKKytzdGF0aWMgaW50IF9fcHl4X3RwX2NsZWFyXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudChQeU9iamVjdCAqbykgeworKyAgUHlPYmplY3QqIHRt cDsKKysgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpwID0g KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopbzsKKysgIHRt cCA9ICgoUHlPYmplY3QqKXAtPmRhdGEpOworKyAgcC0+ZGF0YSA9IFB5X05vbmU7IFB5X0lOQ1JF RihQeV9Ob25lKTsKKysgIFB5X1hERUNSRUYodG1wKTsKKysgIHRtcCA9ICgoUHlPYmplY3QqKXAt PnJlcGx5X3VzZXJkYXRhKTsKKysgIHAtPnJlcGx5X3VzZXJkYXRhID0gUHlfTm9uZTsgUHlfSU5D UkVGKFB5X05vbmUpOworKyAgUHlfWERFQ1JFRih0bXApOworKyAgcmV0dXJuIDA7CisrfQorIAor LSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo1CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jl c3VsdAorLSAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweDg3NzRmYWU6CistICogICAgICAg ICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xl RXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ODc3NGZhZSA9IChsZXZlbCwg bG9nX2xldmVsLCBwcmVmaXgsIHRleHQpKSIgJSBfX3B5eF9jaGVja3N1bSkKKy0gKiAgICAgX19w eXhfcmVzdWx0ID0gTG9nTWVzc2FnZS5fX25ld19fKF9fcHl4X3R5cGUpCistICovCistICAgIF9f cHl4X3RfMiA9IFB5TGlzdF9OZXcoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK Ky0gICAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19QaWNrbGVFcnJvcik7CistICAgIF9fUHl4X0dJ VkVSRUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKy0gICAgUHlMaXN0X1NFVF9JVEVNKF9fcHl4 X3RfMiwgMCwgX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKy0gICAgX19weXhfdF8zID0gX19QeXhf SW1wb3J0KF9fcHl4X25fc19waWNrbGUsIF9fcHl4X3RfMiwgLTEpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIg PSAwOworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9JbXBvcnRGcm9tKF9fcHl4X3RfMywgX19weXhf bl9zX1BpY2tsZUVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwg NSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBf X1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvciA9 IF9fcHl4X3RfMjsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2Vycm9y X3N0cihQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CisrICByZXR1cm4gX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF85ZXJyb3Jfc3RyXzFfX2dldF9fKG8p OworK30KKyAKKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6NgorLSAqICAgICBpZiBfX3B5eF9j aGVja3N1bSAhPSAweDg3NzRmYWU6CistICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlj a2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1Bp Y2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDg3NzRmYWUgPSAobGV2 ZWwsIGxvZ19sZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19weXhfY2hlY2tzdW0pICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gTG9nTWVzc2FnZS5f X25ld19fKF9fcHl4X3R5cGUpCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgor LSAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2xvbmcoX19weXhfdl9fX3B5 eF9jaGVja3N1bSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDYsIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhf dF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0KF9fcHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNr c3Vtc19zX3ZzXzB4ODcsIF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9f UHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKy0gICAgX19weXhfdF8yID0g X19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcjsgX19weXhfdF81ID0gTlVMTDsKKy0gICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworLSAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Cist ICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzUpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAg ICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgICAgfQorLSAg ICB9CistICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfMiwgX19weXhfdF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfNCk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4 X3RfNCA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDYs IF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X1JhaXNlKF9f cHl4X3RfMywgMCwgMCwgMCk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworLSAgICBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfbmFtZShQ eU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CisrICByZXR1cm4gX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80bmFtZV8xX19nZXRfXyhvKTsKKyt9CisgCist ICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlj a2xlRXJyb3IKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9f cHl4X2NoZWNrc3VtICE9IDB4ODc3NGZhZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2ts ZUVycm9yCistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxl IGNoZWNrc3VtcyAoJXMgdnMgMHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZpeCwg dGV4dCkpIiAlIF9fcHl4X2NoZWNrc3VtKQorLSAqLworLSAgfQorK3N0YXRpYyBQeU9iamVjdCAq X19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2lkKFB5T2JqZWN0ICpv LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKysgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8xX19nZXRfXyhvKTsKKyt9CisgCistICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjo3CistICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3Ig YXMgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9y KCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDg3NzRmYWUgPSAobGV2ZWwsIGxvZ19s ZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19weXhfY2hlY2tzdW0pCistICogICAgIF9fcHl4X3Jl c3VsdCA9IExvZ01lc3NhZ2UuX19uZXdfXyhfX3B5eF90eXBlKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorLSAqICAgICAg ICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKDxMb2dNZXNzYWdlPiBfX3B5 eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2UpLCBfX3B5eF9uX3NfbmV3KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMSwgNywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhf dF8yKTsKKy0gIF9fcHl4X3RfNCA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RT ICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICBfX3B5eF90XzQg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3Rf NCkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04o X19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsKKy0gICAgICBfX1B5 eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBm dW5jdGlvbik7CistICAgIH0KKytzdGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80 bGlic18zbXB2XzVFdmVudF9pZChQeU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVT RUQgdm9pZCAqeCkgeworKyAgaWYgKHYpIHsKKysgICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl81RXZlbnRfMmlkXzNfX3NldF9fKG8sIHYpOworICAgfQorLSAgX19weXhf dF8zID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBf X3B5eF90XzQsIF9fcHl4X3ZfX19weXhfdHlwZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfMiwgX19weXhfdl9fX3B5eF90eXBlKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhf dF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Cist ICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIF9fcHl4X3ZfX19w eXhfcmVzdWx0ID0gX19weXhfdF8zOworLSAgX19weXhfdF8zID0gMDsKKy0KKy0gIC8qICIodHJl ZSBmcmFnbWVudCkiOjgKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNv bXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDg3NzRmYWUgPSAobGV2ZWwsIGxvZ19sZXZlbCwg cHJlZml4LCB0ZXh0KSkiICUgX19weXhfY2hlY2tzdW0pCistICogICAgIF9fcHl4X3Jlc3VsdCA9 IExvZ01lc3NhZ2UuX19uZXdfXyhfX3B5eF90eXBlKQorLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBp cyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgX19w eXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKDxMb2dNZXNzYWdlPiBfX3B5eF9yZXN1 bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CistICovCistICBf X3B5eF90XzEgPSAoX19weXhfdl9fX3B5eF9zdGF0ZSAhPSBQeV9Ob25lKTsKKy0gIF9fcHl4X3Rf NiA9IChfX3B5eF90XzEgIT0gMCk7CistICBpZiAoX19weXhfdF82KSB7CistCistICAgIC8qICIo dHJlZSBmcmFnbWVudCkiOjkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gTG9nTWVzc2FnZS5fX25l d19fKF9fcHl4X3R5cGUpCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorLSAq ICAgICAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKDxMb2dNZXNzYWdl PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0xv Z01lc3NhZ2VfX3NldF9zdGF0ZShMb2dNZXNzYWdlIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhf c3RhdGUpOgorLSAqLworLSAgICBpZiAoIShsaWtlbHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4 X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5eF92X19fcHl4X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5 RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJFeHBlY3RlZCAlLjE2cywgZ290ICUuMjAwcyIs ICJ0dXBsZSIsIFB5X1RZUEUoX19weXhfdl9fX3B5eF9zdGF0ZSktPnRwX25hbWUpLCAwKSkpIF9f UFlYX0VSUigxLCA5LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19weXhfdF8zID0gX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRl KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9f cHl4X3ZfX19weXhfcmVzdWx0KSwgKChQeU9iamVjdCopX19weXhfdl9fX3B5eF9zdGF0ZSkpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA5LCBfX3B5eF9MMV9lcnJvcikK Ky0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOworLQorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo4CistICog ICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAo JXMgdnMgMHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZpeCwgdGV4dCkpIiAlIF9f cHl4X2NoZWNrc3VtKQorLSAqICAgICBfX3B5eF9yZXN1bHQgPSBMb2dNZXNzYWdlLl9fbmV3X18o X19weXhfdHlwZSkKKy0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0xvZ01lc3Nh Z2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0g KiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorLSAqLworKyAgZWxzZSB7CisrICAgIFB5RXJyX1Nl dFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLCAiX19kZWxfXyIpOworKyAgICByZXR1 cm4gLTE7CisgICB9CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMAorLSAqICAgICBpZiBf X3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0xvZ01l c3NhZ2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkK Ky0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogY2RlZiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoTG9nTWVzc2Fn ZSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19weXhfcmVzdWx0 LmxldmVsID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5sb2dfbGV2ZWwgPSBfX3B5eF9z dGF0ZVsxXTsgX19weXhfcmVzdWx0LnByZWZpeCA9IF9fcHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1 bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNdCistICovCistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Ip OworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKy0gIF9fcHl4X3IgPSBf X3B5eF92X19fcHl4X3Jlc3VsdDsKKy0gIGdvdG8gX19weXhfTDA7CistCistICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxCistICogZGVmIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UoX19weXhfdHlw ZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCistICogICAg IGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqLworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf NCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsK Ky0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9QaWNrbGVFcnJv cik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKy0gIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICBy ZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogIih0cmVlIGZyYWdtZW50KSI6MTEKKy0gKiAgICAg ICAgIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19w eXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorLSAq IGNkZWYgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKExvZ01lc3NhZ2UgX19w eXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgX19weXhfcmVzdWx0LmxldmVsID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jl c3VsdC5sb2dfbGV2ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LnByZWZpeCA9IF9f cHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNdCistICogICAg IGlmIGxlbihfX3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGlj dF9fJyk6CistICovCistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9fX3B5eF9yZXN1 bHQsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CistICBQeU9iamVjdCAqX19weXhf ciA9IE5VTEw7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9f cHl4X3RfMSA9IE5VTEw7CistICBpbnQgX19weXhfdF8yOworLSAgUHlfc3NpemVfdCBfX3B5eF90 XzM7CistICBpbnQgX19weXhfdF80OworLSAgaW50IF9fcHl4X3RfNTsKKy0gIFB5T2JqZWN0ICpf X3B5eF90XzYgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CistICBQeU9i amVjdCAqX19weXhfdF84ID0gTlVMTDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29u c3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAw OworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX0xvZ01lc3Nh Z2VfX3NldF9zdGF0ZSIsIDApOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2Vycm9yKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VE IHZvaWQgKngpIHsKKysgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2 ZW50XzVlcnJvcl8xX19nZXRfXyhvKTsKKyt9CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox MgorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CistICogY2RlZiBfX3B5eF91bnBpY2tsZV9M b2dNZXNzYWdlX19zZXRfc3RhdGUoTG9nTWVzc2FnZSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4 X3N0YXRlKToKKy0gKiAgICAgX19weXhfcmVzdWx0LmxldmVsID0gX19weXhfc3RhdGVbMF07IF9f cHl4X3Jlc3VsdC5sb2dfbGV2ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LnByZWZp eCA9IF9fcHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNdICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+ IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKy0gKiAgICAgICAgIF9f cHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbNF0pCistICovCistICBpZiAo dW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAgICBQeUVycl9T ZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNj cmlwdGFibGUiKTsKKy0gICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKytzdGF0 aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9lcnJvcihQ eU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworKyAgaWYg KHYpIHsKKysgICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf NWVycm9yXzNfX3NldF9fKG8sIHYpOworICAgfQorLSAgX19weXhfdF8xID0gX19QeXhfR2V0SXRl bUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAwLCBsb25nLCAxLCBfX1B5eF9QeUludF9G cm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigx LCAxMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9f UHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X19fcHl4X3Jl c3VsdC0+bGV2ZWwpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5sZXZl bCk7CistICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+bGV2ZWwgPSBfX3B5eF90XzE7CistICBfX3B5 eF90XzEgPSAwOworLSAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9u ZSkpIHsKKy0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScg b2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CistICAgIF9fUFlYX0VSUigxLCAxMiwgX19w eXhfTDFfZXJyb3IpCisrICBlbHNlIHsKKysgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdElt cGxlbWVudGVkRXJyb3IsICJfX2RlbF9fIik7CisrICAgIHJldHVybiAtMTsKKyAgIH0KKy0gIF9f cHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMSwg bG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9H T1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPmxvZ19sZXZlbCk7CistICBfX1B5eF9ERUNSRUYo X19weXhfdl9fX3B5eF9yZXN1bHQtPmxvZ19sZXZlbCk7CistICBfX3B5eF92X19fcHl4X3Jlc3Vs dC0+bG9nX2xldmVsID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKy0gIGlmICh1bmxp a2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7CistICAgIFB5RXJyX1NldFN0 cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0 YWJsZSIpOworLSAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorK30KKysKKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF9kYXRhKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKysgIHJldHVybiBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzFfX2dldF9fKG8pOwor K30KKysKKytzdGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF9kYXRhKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9OX1VOVVNFRCB2b2lkICp4 KSB7CisrICBpZiAodikgeworKyAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF80ZGF0YV8zX19zZXRfXyhvLCB2KTsKKyAgIH0KKy0gIF9fcHl4X3RfMSA9IF9f UHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMiwgbG9uZywgMSwgX19Q eXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9HT1RSRUYoX19weXhf dl9fX3B5eF9yZXN1bHQtPnByZWZpeCk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdl9fX3B5eF9y ZXN1bHQtPnByZWZpeCk7CistICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+cHJlZml4ID0gX19weXhf dF8xOworLSAgX19weXhfdF8xID0gMDsKKy0gIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0 YXRlID09IFB5X05vbmUpKSB7CistICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3Is ICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOworLSAgICBfX1BZWF9F UlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgZWxzZSB7CisrICAgIHJldHVybiBfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzVfX2RlbF9fKG8pOworICAgfQor LSAgX19weXhfdF8xID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRl LCAzLCBsb25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+dGV4dCk7CistICBfX1B5eF9ERUNSRUYo X19weXhfdl9fX3B5eF9yZXN1bHQtPnRleHQpOworLSAgX19weXhfdl9fX3B5eF9yZXN1bHQtPnRl eHQgPSBfX3B5eF90XzE7CistICBfX3B5eF90XzEgPSAwOworK30KKyAKKy0gIC8qICIodHJlZSBm cmFnbWVudCkiOjEzCistICogY2RlZiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3Rh dGUoTG9nTWVzc2FnZSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAg X19weXhfcmVzdWx0LmxldmVsID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5sb2dfbGV2 ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LnByZWZpeCA9IF9fcHl4X3N0YXRlWzJd OyBfX3B5eF9yZXN1bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNdCistICogICAgIGlmIGxlbihfX3B5 eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3Rf Xy51cGRhdGUoX19weXhfc3RhdGVbNF0pCistICovCistICBpZiAodW5saWtlbHkoX19weXhfdl9f X3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlw ZUVycm9yLCAib2JqZWN0IG9mIHR5cGUgJ05vbmVUeXBlJyBoYXMgbm8gbGVuKCkiKTsKKy0gICAg X19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9yZXBseV91c2VyZGF0YShQeU9i amVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CisrICByZXR1cm4gX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzFfX2dldF9fKG8pOwor K30KKysKKytzdGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF9yZXBseV91c2VyZGF0YShQeU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVT RUQgdm9pZCAqeCkgeworKyAgaWYgKHYpIHsKKysgICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV8zX19zZXRfXyhvLCB2KTsKKyAg IH0KKy0gIF9fcHl4X3RfMyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdl9fX3B5eF9zdGF0ZSk7 IGlmICh1bmxpa2VseShfX3B5eF90XzMgPT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VSUigx LCAxMywgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90XzQgPSAoKF9fcHl4X3RfMyA+IDQpICE9 IDApOworLSAgaWYgKF9fcHl4X3RfNCkgeworLSAgfSBlbHNlIHsKKy0gICAgX19weXhfdF8yID0g X19weXhfdF80OworLSAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKKysgIGVsc2Ug eworKyAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJl cGx5X3VzZXJkYXRhXzVfX2RlbF9fKG8pOworICAgfQorLSAgX19weXhfdF80ID0gX19QeXhfSGFz QXR0cigoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7 IGlmICh1bmxpa2VseShfX3B5eF90XzQgPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDEsIDEzLCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfNSA9IChfX3B5eF90XzQgIT0gMCk7CistICBfX3B5 eF90XzIgPSBfX3B5eF90XzU7CistICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OworLSAgaWYg KF9fcHl4X3RfMikgeworK30KKyAKKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTQKKy0gKiAg ICAgX19weXhfcmVzdWx0LmxldmVsID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5sb2df bGV2ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LnByZWZpeCA9IF9fcHl4X3N0YXRl WzJdOyBfX3B5eF9yZXN1bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNdCistICogICAgIGlmIGxlbihf X3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6Cist ICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzRdKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICovCistICAgIF9fcHl4X3RfNiA9IF9fUHl4 X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfcmVzdWx0KSwg X19weXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAx NCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgICBf X3B5eF90XzcgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNiwgX19weXhfbl9z X3VwZGF0ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICBpZiAodW5saWtlbHkoX19weXhf dl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4 Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOwor LSAgICAgIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCistICAgIH0KKy0gICAgX19w eXhfdF82ID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCA0LCBs b25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzYpOworLSAgICBfX3B5eF90XzggPSBOVUxMOworLSAgICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzcpKSkgewor LSAgICAgIF9fcHl4X3RfOCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNyk7CistICAgICAg aWYgKGxpa2VseShfX3B5eF90XzgpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQ eU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF83KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihf X3B5eF90XzgpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9f UHl4X0RFQ1JFRl9TRVQoX19weXhfdF83LCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9Cist ICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzgpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfNywgX19weXhfdF84LCBfX3B5eF90XzYpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZyhfX3B5eF90XzcsIF9fcHl4X3RfNik7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsg X19weXhfdF84ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKytzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWV0aG9kc185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnRbXSA9IHsKKysgIHsiX19yZWR1Y2VfY3l0aG9uX18i LCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xX19y ZWR1Y2VfY3l0aG9uX18sIE1FVEhfTk9BUkdTLCAwfSwKKysgIHsiX19zZXRzdGF0ZV9jeXRob25f XyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzNf X3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAorKyAgezAsIDAsIDAsIDB9CisrfTsKKyAK Ky0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0xv Z01lc3NhZ2VfX3NldF9zdGF0ZShMb2dNZXNzYWdlIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhf c3RhdGUpOgorLSAqICAgICBfX3B5eF9yZXN1bHQubGV2ZWwgPSBfX3B5eF9zdGF0ZVswXTsgX19w eXhfcmVzdWx0LmxvZ19sZXZlbCA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQucHJlZml4 ID0gX19weXhfc3RhdGVbMl07IF9fcHl4X3Jlc3VsdC50ZXh0ID0gX19weXhfc3RhdGVbM10KKy0g KiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAn X19kaWN0X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgX19w eXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkKKy0gKi8KKy0gIH0KKytz dGF0aWMgc3RydWN0IFB5R2V0U2V0RGVmIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18z bXB2X0V2ZW50W10gPSB7CisrICB7KGNoYXIgKikiZXJyb3Jfc3RyIiwgX19weXhfZ2V0cHJvcF85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2Vycm9yX3N0ciwgMCwgKGNoYXIgKikibXB2X2Vy cm9yX3N0cmluZyBvZiB0aGUgZXJyb3IgcHJvZXBydHkiLCAwfSwKKysgIHsoY2hhciAqKSJuYW1l IiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X25hbWUsIDAsIChj aGFyICopIm1wdl9ldmVudF9uYW1lIG9mIHRoZSBldmVudCBpZCIsIDB9LAorKyAgeyhjaGFyICop ImlkIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2lkLCBfX3B5 eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfaWQsIChjaGFyICopMCwgMH0s CisrICB7KGNoYXIgKikiZXJyb3IiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfZXJyb3IsIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF9lcnJvciwgKGNoYXIgKikwLCAwfSwKKysgIHsoY2hhciAqKSJkYXRhIiwgX19weXhfZ2V0cHJv cF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2RhdGEsIF9fcHl4X3NldHByb3BfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF9kYXRhLCAoY2hhciAqKTAsIDB9LAorKyAgeyhjaGFyICop InJlcGx5X3VzZXJkYXRhIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2 ZW50X3JlcGx5X3VzZXJkYXRhLCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 RXZlbnRfcmVwbHlfdXNlcmRhdGEsIChjaGFyICopMCwgMH0sCisrICB7MCwgMCwgMCwgMCwgMH0K Kyt9OworIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKKy0gKiAgICAgICAgIF9fcHl4X3Vu cGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19weXhfcmVzdWx0LCBf X3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorLSAqIGNkZWYgX19weXhf dW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKExvZ01lc3NhZ2UgX19weXhfcmVzdWx0LCB0 dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg X19weXhfcmVzdWx0LmxldmVsID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5sb2dfbGV2 ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LnByZWZpeCA9IF9fcHl4X3N0YXRlWzJd OyBfX3B5eF9yZXN1bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNdCistICogICAgIGlmIGxlbihfX3B5 eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CistICov Cisrc3RhdGljIFB5VHlwZU9iamVjdCBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudCA9IHsKKysgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgwLCAwKQorKyAgInZpZGN1dHRlci5s aWJzLm1wdi5FdmVudCIsIC8qdHBfbmFtZSovCisrICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpLCAvKnRwX2Jhc2ljc2l6ZSovCisrICAwLCAvKnRw X2l0ZW1zaXplKi8KKysgIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2 ZW50LCAvKnRwX2RlYWxsb2MqLworKyAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBiNAor KyAgMCwgLyp0cF9wcmludCovCisrICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAw eDAzMDgwMGI0CisrICAwLCAvKnRwX3ZlY3RvcmNhbGxfb2Zmc2V0Ki8KKysgICNlbmRpZgorKyAg MCwgLyp0cF9nZXRhdHRyKi8KKysgIDAsIC8qdHBfc2V0YXR0ciovCisrICAjaWYgUFlfTUFKT1Jf VkVSU0lPTiA8IDMKKysgIDAsIC8qdHBfY29tcGFyZSovCisrICAjZW5kaWYKKysgICNpZiBQWV9N QUpPUl9WRVJTSU9OID49IDMKKysgIDAsIC8qdHBfYXNfYXN5bmMqLworKyAgI2VuZGlmCisrICAw LCAvKnRwX3JlcHIqLworKyAgMCwgLyp0cF9hc19udW1iZXIqLworKyAgMCwgLyp0cF9hc19zZXF1 ZW5jZSovCisrICAwLCAvKnRwX2FzX21hcHBpbmcqLworKyAgMCwgLyp0cF9oYXNoKi8KKysgIDAs IC8qdHBfY2FsbCovCisrICAwLCAvKnRwX3N0ciovCisrICAwLCAvKnRwX2dldGF0dHJvKi8KKysg IDAsIC8qdHBfc2V0YXR0cm8qLworKyAgMCwgLyp0cF9hc19idWZmZXIqLworKyAgUHlfVFBGTEFH U19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBR3xQeV9UUEZMQUdTX0NIRUNLVFlQ RVN8UHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUnxQeV9UUEZMQUdTX0JBU0VUWVBFfFB5X1RQRkxB R1NfSEFWRV9HQywgLyp0cF9mbGFncyovCisrICAiV3JhcHM6IG1wdl9ldmVudCIsIC8qdHBfZG9j Ki8KKysgIF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCwgLyp0 cF90cmF2ZXJzZSovCisrICBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZl bnQsIC8qdHBfY2xlYXIqLworKyAgMCwgLyp0cF9yaWNoY29tcGFyZSovCisrICAwLCAvKnRwX3dl YWtsaXN0b2Zmc2V0Ki8KKysgIDAsIC8qdHBfaXRlciovCisrICAwLCAvKnRwX2l0ZXJuZXh0Ki8K KysgIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50LCAvKnRwX21ldGhv ZHMqLworKyAgMCwgLyp0cF9tZW1iZXJzKi8KKysgIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80 bGlic18zbXB2X0V2ZW50LCAvKnRwX2dldHNldCovCisrICAwLCAvKnRwX2Jhc2UqLworKyAgMCwg Lyp0cF9kaWN0Ki8KKysgIDAsIC8qdHBfZGVzY3JfZ2V0Ki8KKysgIDAsIC8qdHBfZGVzY3Jfc2V0 Ki8KKysgIDAsIC8qdHBfZGljdG9mZnNldCovCisrICAwLCAvKnRwX2luaXQqLworKyAgMCwgLyp0 cF9hbGxvYyovCisrICBfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50LCAv KnRwX25ldyovCisrICAwLCAvKnRwX2ZyZWUqLworKyAgMCwgLyp0cF9pc19nYyovCisrICAwLCAv KnRwX2Jhc2VzKi8KKysgIDAsIC8qdHBfbXJvKi8KKysgIDAsIC8qdHBfY2FjaGUqLworKyAgMCwg Lyp0cF9zdWJjbGFzc2VzKi8KKysgIDAsIC8qdHBfd2Vha2xpc3QqLworKyAgMCwgLyp0cF9kZWwq LworKyAgMCwgLyp0cF92ZXJzaW9uX3RhZyovCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgw MzA0MDBhMQorKyAgMCwgLyp0cF9maW5hbGl6ZSovCisrICAjZW5kaWYKKysgICNpZiBQWV9WRVJT SU9OX0hFWCA+PSAweDAzMDgwMGIxICYmICghQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZIHx8IFBZ UFlfVkVSU0lPTl9OVU0gPj0gMHgwNzAzMDgwMCkKKysgIDAsIC8qdHBfdmVjdG9yY2FsbCovCisr ICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJ T05fSEVYIDwgMHgwMzA5MDAwMAorKyAgMCwgLyp0cF9wcmludCovCisrICAjZW5kaWYKKysgICNp ZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgJiYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA5MDAw MAorKyAgMCwgLyp0cF9weXB5X2ZsYWdzKi8KKysgICNlbmRpZgorK307Cisrc3RhdGljIHN0cnVj dCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0IF9fcHl4X3Z0 YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dDsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsK Ky0gIGdvdG8gX19weXhfTDA7CistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7CistICBfX1B5eF9B ZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdl X19zZXRfc3RhdGUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1l KTsKKy0gIF9fcHl4X3IgPSAwOworLSAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19w eXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5 eF9yOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0KFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqYSwgQ1lU SE9OX1VOVVNFRCBQeU9iamVjdCAqaykgeworKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCAqcDsKKysgIFB5T2JqZWN0ICpvOworKyAgaWYgKGxpa2VseSgo dC0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUKSA9PSAwKSkgeworKyAgICBvID0g KCp0LT50cF9hbGxvYykodCwgMCk7CisrICB9IGVsc2UgeworKyAgICBvID0gKFB5T2JqZWN0ICop IFB5QmFzZU9iamVjdF9UeXBlLnRwX25ldyh0LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7CisrICB9 CisrICBpZiAodW5saWtlbHkoIW8pKSByZXR1cm4gMDsKKysgIHAgPSAoKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilvKTsKKysgIHAtPl9fcHl4X3Z0YWIg PSBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0OworKyAgcC0+Y2Fs bGJhY2sgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CisrICBwLT5jYWxsYmFja3RocmVh ZCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIHAtPnJlcGx5X3VzZXJkYXRhID0g UHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworKyAgaWYgKHVubGlrZWx5KF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zM19fY2luaXRfXyhvLCBfX3B5eF9lbXB0eV90 dXBsZSwgTlVMTCkgPCAwKSkgZ290byBiYWQ7CisrICByZXR1cm4gbzsKKysgIGJhZDoKKysgIFB5 X0RFQ1JFRihvKTsgbyA9IDA7CisrICByZXR1cm4gTlVMTDsKKyB9CisgCistLyogIih0cmVlIGZy YWdtZW50KSI6MQorLSAqIGRlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eShfX3B5eF90eXBlLCBs b25nIF9fcHl4X2NoZWNrc3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgY2Rl ZiBvYmplY3QgX19weXhfcmVzdWx0CistICovCistCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19fcHl4X3Vu cGlja2xlX1Byb3BlcnR5KFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJn cywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlNZXRob2REZWYg X19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0 eSA9IHsiX19weXhfdW5waWNrbGVfUHJvcGVydHkiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNG dW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfX3B5 eF91bnBpY2tsZV9Qcm9wZXJ0eSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9OworLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX19weXhfdW5w aWNrbGVfUHJvcGVydHkoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdz LCBQeU9iamVjdCAqX19weXhfa3dkcykgeworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlw ZSA9IDA7CistICBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tzdW07CistICBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF9zdGF0ZSA9IDA7CistICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0 IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5vID0gMDsK Ky0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25z CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfUHJvcGVydHkg KHdyYXBwZXIpIiwgMCk7Cisrc3RhdGljIHZvaWQgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dChQeU9iamVjdCAqbykgeworKyAgc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopbzsKKysgICNpZiBDWVRIT05fVVNFX1RQX0ZJTkFM SVpFCisrICBpZiAodW5saWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUoUHlfVFlQRShvKSwgUHlfVFBG TEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9UWVBFKG8pLT50cF9maW5hbGl6ZSkgJiYgIV9QeUdD X0ZJTkFMSVpFRChvKSkgeworKyAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFs bG9jKG8pKSByZXR1cm47CisrICB9CisrICAjZW5kaWYKKysgIFB5T2JqZWN0X0dDX1VuVHJhY2so byk7CisgICB7CistICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsm X19weXhfbl9zX3B5eF90eXBlLCZfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCZfX3B5eF9uX3NfcHl4 X3N0YXRlLDB9OworLSAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCwwfTsKKy0gICAgaWYg KHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7CistICAgICAgUHlfc3NpemVfdCBrd19hcmdzOworLSAg ICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2Fy Z3MpOworLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKy0gICAgICAgIGNhc2UgIDM6IHZhbHVl c1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CistICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9J VEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAg ICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsK Ky0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDA6IGJyZWFrOwor LSAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKy0gICAgICB9 CistICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworLSAgICAgIHN3aXRj aCAocG9zX2FyZ3MpIHsKKy0gICAgICAgIGNhc2UgIDA6CistICAgICAgICBpZiAobGlrZWx5KCh2 YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nf cHl4X3R5cGUpKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1 X2FyZ3R1cGxlX2Vycm9yOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAg Y2FzZSAgMToKKy0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGljdF9H ZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhfY2hlY2tzdW0pKSAhPSAwKSkga3df YXJncy0tOworLSAgICAgICAgZWxzZSB7CistICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJ bnZhbGlkKCJfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSIsIDEsIDMsIDMsIDEpOyBfX1BZWF9FUlIo MSwgMSwgX19weXhfTDNfZXJyb3IpCistICAgICAgICB9CistICAgICAgICBDWVRIT05fRkFMTFRI Uk9VR0g7CistICAgICAgICBjYXNlICAyOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzJd ID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF9zdGF0 ZSkpICE9IDApKSBrd19hcmdzLS07CistICAgICAgICBlbHNlIHsKKy0gICAgICAgICAgX19QeXhf UmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3VucGlja2xlX1Byb3BlcnR5IiwgMSwgMywgMywg Mik7IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKy0gICAgICAgIH0KKy0gICAgICB9 CistICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAgaWYgKHVubGlr ZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25h bWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAiX19weXhfdW5waWNrbGVfUHJvcGVydHkiKSA8IDAp KSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCistICAgICAgfQorLSAgICB9IGVsc2Ug aWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0gMykgeworLSAgICAgIGdvdG8gX19w eXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgIH0gZWxzZSB7CistICAgICAgdmFsdWVzWzBdID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKy0gICAgICB2YWx1ZXNbMV0gPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAgIHZhbHVlc1syXSA9IFB5VHVwbGVf R0VUX0lURU0oX19weXhfYXJncywgMik7CistICAgIH0KKy0gICAgX19weXhfdl9fX3B5eF90eXBl ID0gdmFsdWVzWzBdOworLSAgICBfX3B5eF92X19fcHl4X2NoZWNrc3VtID0gX19QeXhfUHlJbnRf QXNfbG9uZyh2YWx1ZXNbMV0pOyBpZiAodW5saWtlbHkoKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0g PT0gKGxvbmcpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhf TDNfZXJyb3IpCistICAgIF9fcHl4X3ZfX19weXhfc3RhdGUgPSB2YWx1ZXNbMl07CisrICAgIFB5 T2JqZWN0ICpldHlwZSwgKmV2YWwsICpldGI7CisrICAgIFB5RXJyX0ZldGNoKCZldHlwZSwgJmV2 YWwsICZldGIpOworKyAgICBfX1B5eF9TRVRfUkVGQ05UKG8sIFB5X1JFRkNOVChvKSArIDEpOwor KyAgICBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDFfX2RlYWxsb2Nf XyhvKTsKKysgICAgX19QeXhfU0VUX1JFRkNOVChvLCBQeV9SRUZDTlQobykgLSAxKTsKKysgICAg UHlFcnJfUmVzdG9yZShldHlwZSwgZXZhbCwgZXRiKTsKKyAgIH0KKy0gIGdvdG8gX19weXhfTDRf YXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CistICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Cist ICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfUHJvcGVydHkiLCAx LCAzLCAzLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDEsIDEsIF9f cHl4X0wzX2Vycm9yKQorLSAgX19weXhfTDNfZXJyb3I6OworLSAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfUHJvcGVydHkiLCBfX3B5eF9jbGlu ZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworLSAgcmV0dXJuIE5VTEw7CistICBfX3B5eF9MNF9hcmd1bWVudF91bnBh Y2tpbmdfZG9uZTo7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEyX19weXhfdW5waWNrbGVfUHJvcGVydHkoX19weXhfc2VsZiwgX19weXhfdl9fX3B5eF90eXBl LCBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBfX3B5eF92X19fcHl4X3N0YXRlKTsKKysgIFB5X0NM RUFSKHAtPmNhbGxiYWNrKTsKKysgIFB5X0NMRUFSKHAtPmNhbGxiYWNrdGhyZWFkKTsKKysgIFB5 X0NMRUFSKHAtPnJlcGx5X3VzZXJkYXRhKTsKKysgICgqUHlfVFlQRShvKS0+dHBfZnJlZSkobyk7 CisrfQorIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworK3N0YXRpYyBpbnQgX19weXhfdHBf dHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQoUHlPYmplY3QgKm8sIHZpc2l0 cHJvYyB2LCB2b2lkICphKSB7CisrICBpbnQgZTsKKysgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCAqKW87CisrICBpZiAocC0+Y2FsbGJhY2spIHsKKysgICAgZSA9 ICgqdikocC0+Y2FsbGJhY2ssIGEpOyBpZiAoZSkgcmV0dXJuIGU7CisrICB9CisrICBpZiAocC0+ Y2FsbGJhY2t0aHJlYWQpIHsKKysgICAgZSA9ICgqdikocC0+Y2FsbGJhY2t0aHJlYWQsIGEpOyBp ZiAoZSkgcmV0dXJuIGU7CisrICB9CisrICBpZiAocC0+cmVwbHlfdXNlcmRhdGEpIHsKKysgICAg ZSA9ICgqdikocC0+cmVwbHlfdXNlcmRhdGEsIGEpOyBpZiAoZSkgcmV0dXJuIGU7CisrICB9Cisr ICByZXR1cm4gMDsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTJfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eShDWVRIT05fVU5VU0VEIFB5T2Jq ZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF90eXBlLCBsb25nIF9fcHl4 X3ZfX19weXhfY2hlY2tzdW0sIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CistICBQ eU9iamVjdCAqX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvciA9IDA7CistICBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF9yZXN1bHQgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAg X19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIGludCBfX3B5eF90XzE7CistICBQeU9iamVj dCAqX19weXhfdF8yID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAg UHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVM TDsKKy0gIGludCBfX3B5eF90XzY7CistICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0 IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5vID0gMDsK Ky0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSIs IDApOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6NAorLSAqICAgICBjZGVmIG9iamVjdCBf X3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKy0gKiAg ICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHgwNTcyZDExOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19w eXhfUGlja2xlRXJyb3IKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNv bXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDA1NzJkMTEgPSAoZGF0YSwgbmFtZSkpIiAlIF9f cHl4X2NoZWNrc3VtKQorLSAqLworLSAgX19weXhfdF8xID0gKChfX3B5eF92X19fcHl4X2NoZWNr c3VtICE9IDB4MDU3MmQxMSkgIT0gMCk7CistICBpZiAoX19weXhfdF8xKSB7Cisrc3RhdGljIGlu dCBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dChQeU9iamVjdCAq bykgeworKyAgUHlPYmplY3QqIHRtcDsKKysgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCAqKW87CisrICB0bXAgPSAoKFB5T2JqZWN0KilwLT5jYWxsYmFjayk7Cisr ICBwLT5jYWxsYmFjayA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIFB5X1hERUNS RUYodG1wKTsKKysgIHRtcCA9ICgoUHlPYmplY3QqKXAtPmNhbGxiYWNrdGhyZWFkKTsKKysgIHAt PmNhbGxiYWNrdGhyZWFkID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworKyAgUHlfWERF Q1JFRih0bXApOworKyAgdG1wID0gKChQeU9iamVjdCopcC0+cmVwbHlfdXNlcmRhdGEpOworKyAg cC0+cmVwbHlfdXNlcmRhdGEgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CisrICBQeV9Y REVDUkVGKHRtcCk7CisrICByZXR1cm4gMDsKKyt9CisgCistICAgIC8qICIodHJlZSBmcmFnbWVu dCkiOjUKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9fcHl4 X2NoZWNrc3VtICE9IDB4MDU3MmQxMToKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQ aWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNo ZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEsIG5hbWUpKSIgJSBfX3B5eF9jaGVja3N1 bSkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gUHJvcGVydHkuX19uZXdfXyhfX3B5eF90eXBlKQor LSAqLworLSAgICBfX3B5eF90XzIgPSBQeUxpc3RfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9uX3NfUGlja2xlRXJyb3IpOwor LSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X25fc19QaWNrbGVFcnJvcik7CistICAgIFB5TGlzdF9T RVRfSVRFTShfX3B5eF90XzIsIDAsIF9fcHl4X25fc19QaWNrbGVFcnJvcik7CistICAgIF9fcHl4 X3RfMyA9IF9fUHl4X0ltcG9ydChfX3B5eF9uX3NfcGlja2xlLCBfX3B5eF90XzIsIC0xKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCist ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKKy0gICAgX19weXhfdF8yID0gX19QeXhfSW1wb3J0RnJvbShfX3B5 eF90XzMsIF9fcHl4X25fc19QaWNrbGVFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8yKTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4X3ZfX19weXhf UGlja2xlRXJyb3IgPSBfX3B5eF90XzI7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0X2FwaV92ZXJzaW9uKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngp IHsKKysgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTFh cGlfdmVyc2lvbl8xX19nZXRfXyhvKTsKKyt9CisgCistICAgIC8qICIodHJlZSBmcmFnbWVudCki OjYKKy0gKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHgwNTcyZDExOgorLSAqICAgICAgICAg ZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCistICog ICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAo JXMgdnMgMHgwNTcyZDExID0gKGRhdGEsIG5hbWUpKSIgJSBfX3B5eF9jaGVja3N1bSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBfX3B5eF9yZXN1bHQgPSBQcm9wZXJ0eS5f X25ld19fKF9fcHl4X3R5cGUpCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgor LSAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2xvbmcoX19weXhfdl9fX3B5 eF9jaGVja3N1bSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDYsIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhf dF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0KF9fcHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNr c3Vtc19zX3ZzXzB4MDUsIF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9f UHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKy0gICAgX19weXhfdF8yID0g X19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcjsgX19weXhfdF81ID0gTlVMTDsKKy0gICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworLSAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Cist ICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzUpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAg ICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgICAgfQorLSAg ICB9CistICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfMiwgX19weXhfdF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfNCk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4 X3RfNCA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDYs IF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X1JhaXNlKF9f cHl4X3RfMywgMCwgMCwgMCk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworLSAgICBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9uYW1l KFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKysgIHJldHVybiBfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNG5hbWVfMV9fZ2V0X18obyk7CisrfQor IAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4 X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqICAgICBp ZiBfX3B5eF9jaGVja3N1bSAhPSAweDA1NzJkMTE6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9Q aWNrbGVFcnJvcgorLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0 aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4MDU3MmQxMSA9IChkYXRhLCBuYW1lKSkiICUgX19weXhf Y2hlY2tzdW0pCistICovCistICB9Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF90aW1lKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5V U0VEIHZvaWQgKngpIHsKKysgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfNHRpbWVfMV9fZ2V0X18obyk7CisrfQorIAorLSAgLyogIih0cmVlIGZyYWdtZW50 KSI6NworLSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4 X1BpY2tsZUVycm9yCistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21w YXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEsIG5hbWUpKSIgJSBfX3B5 eF9jaGVja3N1bSkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gUHJvcGVydHkuX19uZXdfXyhfX3B5 eF90eXBlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGlmIF9fcHl4X3N0 YXRlIGlzIG5vdCBOb25lOgorLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3Nl dF9zdGF0ZSg8UHJvcGVydHk+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCistICovCistICBf X3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF9w dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpLCBfX3B5eF9uX3NfbmV3KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNywgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfNCA9IE5VTEw7CistICBpZiAo Q1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworLSAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAg ICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQ eU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF80KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9fcHl4X3Rf MyA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19w eXhfdF80LCBfX3B5eF92X19fcHl4X3R5cGUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzIsIF9fcHl4X3ZfX19weXhfdHlwZSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf NCk7IF9fcHl4X3RfNCA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigxLCA3LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAg X19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBfX3B5eF92X19fcHl4 X3Jlc3VsdCA9IF9fcHl4X3RfMzsKKy0gIF9fcHl4X3RfMyA9IDA7Cisrc3RhdGljIFB5TWV0aG9k RGVmIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHRbXSA9IHsKKysg IHsicmVxdWVzdF9ldmVudCIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtl eXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xcmVxdWVzdF9l dmVudCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9fcHl4X2RvY185dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfcmVxdWVzdF9ldmVudH0sCisrICB7InNldF9sb2dfbGV2ZWwiLCAo UHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzNzZXRf bG9nX2xldmVsLCBNRVRIX08sIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMnNldF9sb2dfbGV2ZWx9LAorKyAgeyJsb2FkX2NvbmZpZyIsIChQeUNGdW5jdGlvbilfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNWxvYWRfY29uZmlnLCBNRVRIX08s IF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNGxvYWRfY29uZmlnfSwK KysgIHsiX2Zvcm1hdF9mb3IiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzdfZm9ybWF0X2ZvciwgTUVUSF9PLCAwfSwKKysgIHsiY29tbWFuZCIs IChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF85Y29tbWFuZCwgTUVUSF9WQVJBUkdTfE1FVEhf S0VZV09SRFMsIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1h bmR9LAorKyAgeyJnZXRfcHJvcGVydHlfYXN5bmMiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNG dW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMTFnZXRfcHJvcGVydHlfYXN5bmMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfX3B5 eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2FzeW5j fSwKKysgIHsidHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5 Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8xM3RyeV9nZXRfcHJvcGVydHlfYXN5bmMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRT LCAwfSwKKysgIHsidHJ5X2dldF9wcm9wZXJ0eSIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1 bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xNXRyeV9nZXRfcHJvcGVydHksIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfSwKKysg IHsiZ2V0X3Byb3BlcnR5IiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8xN2dldF9wcm9wZXJ0eSwgTUVUSF9PLCBfX3B5eF9kb2NfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5fSwKKysgIHsic2V0X3Byb3BlcnR5 IiwgKFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE5c2V0X3Byb3BlcnR5LCBNRVRIX1ZBUkFS R1N8TUVUSF9LRVlXT1JEUywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xOHNldF9wcm9wZXJ0eX0sCisrICB7InNldF9vcHRpb24iLCAoUHlDRnVuY3Rpb24pKHZvaWQq KShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMjFzZXRfb3B0aW9uLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX19weXhf ZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMHNldF9vcHRpb259LAorKyAgeyJp bml0aWFsaXplIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8yM2luaXRpYWxpemUsIE1FVEhfTk9BUkdTLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzIyaW5pdGlhbGl6ZX0sCisrICB7IndhaXRfZXZlbnQiLCAoUHlD RnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjV3YWl0X2V2ZW50LCBNRVRIX1ZBUkFSR1N8TUVUSF9L RVlXT1JEUywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNHdhaXRf ZXZlbnR9LAorKyAgeyJ3YWtldXAiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzI3d2FrZXVwLCBNRVRIX05PQVJHUywgX19weXhfZG9jXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNndha2V1cH0sCisrICB7InNldF93YWtldXBfY2Fs bGJhY2siLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzI5c2V0X3dha2V1cF9jYWxsYmFjaywgTUVUSF9PLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzI4c2V0X3dha2V1cF9jYWxsYmFja30sCisrICB7ImdldF93YWtl dXBfcGlwZSIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMzFnZXRfd2FrZXVwX3BpcGUsIE1FVEhfTk9BUkdTLCBfX3B5eF9kb2NfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzMwZ2V0X3dha2V1cF9waXBlfSwKKysgIHsib2JzZXJ2ZV9w cm9wZXJ0eSIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNW9ic2VydmVfcHJvcGVydHks IE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0eX0sCisrICB7InVub2JzZXJ2ZV9wcm9wZXJ0 eSIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf Mzd1bm9ic2VydmVfcHJvcGVydHksIE1FVEhfTywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0eX0sCisrICB7InNodXRkb3duIiwgKFB5 Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zOXNodXRk b3duLCBNRVRIX05PQVJHUywgMH0sCisrICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0 aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80M19fcmVkdWNlX2N5 dGhvbl9fLCBNRVRIX05PQVJHUywgMH0sCisrICB7Il9fc2V0c3RhdGVfY3l0aG9uX18iLCAoUHlD RnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ1X19zZXRz dGF0ZV9jeXRob25fXywgTUVUSF9PLCAwfSwKKysgIHswLCAwLCAwLCAwfQorK307CisgCistICAv KiAiKHRyZWUgZnJhZ21lbnQpIjo4CistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJv cigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEsIG5hbWUp KSIgJSBfX3B5eF9jaGVja3N1bSkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gUHJvcGVydHkuX19u ZXdfXyhfX3B5eF90eXBlKQorLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfUHJv cGVydHlfX3NldF9zdGF0ZSg8UHJvcGVydHk+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCist ICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKi8KKy0gIF9fcHl4X3RfMSA9IChfX3B5eF92 X19fcHl4X3N0YXRlICE9IFB5X05vbmUpOworLSAgX19weXhfdF82ID0gKF9fcHl4X3RfMSAhPSAw KTsKKy0gIGlmIChfX3B5eF90XzYpIHsKKytzdGF0aWMgc3RydWN0IFB5R2V0U2V0RGVmIF9fcHl4 X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHRbXSA9IHsKKysgIHsoY2hhciAq KSJhcGlfdmVyc2lvbiIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0X2FwaV92ZXJzaW9uLCAwLCAoY2hhciAqKTAsIDB9LAorKyAgeyhjaGFyICopIm5hbWUiLCBf X3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9uYW1lLCAwLCAoY2hh ciAqKSJVbmlxdWUgbmFtZSBmb3IgZXZlcnkgY29udGV4dCBjcmVhdGVkLlxuXG4gICAgICAgIFdy YXBzOiBtcHZfY2xpZW50X25hbWVcbiAgICAgICAgIiwgMH0sCisrICB7KGNoYXIgKikidGltZSIs IF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X3RpbWUsIDAsIChj aGFyICopIkludGVybmFsIG1wdiBjbGllbnQgdGltZS5cblxuICAgICAgICBIYXMgYW4gYXJiaXRy YXJ5IHN0YXJ0IG9mZnNldCwgYnV0IHdpbGwgbmV2ZXIgd3JhcCBvciBnbyBiYWNrd2FyZHMuXG5c biAgICAgICAgV3JhcHM6IG1wdl9nZXRfdGltZV91c1xuICAgICAgICAiLCAwfSwKKysgIHswLCAw LCAwLCAwLCAwfQorK307CisgCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjkKKy0gKiAgICAg X19weXhfcmVzdWx0ID0gUHJvcGVydHkuX19uZXdfXyhfX3B5eF90eXBlKQorLSAqICAgICBpZiBf X3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1Byb3Bl cnR5X19zZXRfc3RhdGUoPFByb3BlcnR5PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0g KiBjZGVmIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoUHJvcGVydHkgX19weXhf cmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CistICovCistICAgIGlmICghKGxpa2VseShQeVR1 cGxlX0NoZWNrRXhhY3QoX19weXhfdl9fX3B5eF9zdGF0ZSkpfHwoKF9fcHl4X3ZfX19weXhfc3Rh dGUpID09IFB5X05vbmUpfHwoUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkV4cGVjdGVk ICUuMTZzLCBnb3QgJS4yMDBzIiwgInR1cGxlIiwgUHlfVFlQRShfX3B5eF92X19fcHl4X3N0YXRl KS0+dHBfbmFtZSksIDApKSkgX19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQorLSAgICBf X3B5eF90XzMgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9Q cm9wZXJ0eV9fc2V0X3N0YXRlKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUHJvcGVydHkgKilfX3B5eF92X19fcHl4X3Jlc3VsdCksICgoUHlPYmplY3QqKV9fcHl4X3Zf X19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgOSwg X19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKytzdGF0aWMgUHlUeXBlT2JqZWN0 IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgPSB7CisrICBQeVZhck9i amVjdF9IRUFEX0lOSVQoMCwgMCkKKysgICJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dCIsIC8q dHBfbmFtZSovCisrICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dCksIC8qdHBfYmFzaWNzaXplKi8KKysgIDAsIC8qdHBfaXRlbXNpemUqLworKyAg X19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgLyp0cF9kZWFs bG9jKi8KKysgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKysgIDAsIC8qdHBfcHJp bnQqLworKyAgI2VuZGlmCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorKyAg MCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCisrICAjZW5kaWYKKysgIDAsIC8qdHBfZ2V0YXR0 ciovCisrICAwLCAvKnRwX3NldGF0dHIqLworKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisr ICAwLCAvKnRwX2NvbXBhcmUqLworKyAgI2VuZGlmCisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+ PSAzCisrICAwLCAvKnRwX2FzX2FzeW5jKi8KKysgICNlbmRpZgorKyAgMCwgLyp0cF9yZXByKi8K KysgIDAsIC8qdHBfYXNfbnVtYmVyKi8KKysgIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworKyAgMCwg Lyp0cF9hc19tYXBwaW5nKi8KKysgIDAsIC8qdHBfaGFzaCovCisrICAwLCAvKnRwX2NhbGwqLwor KyAgMCwgLyp0cF9zdHIqLworKyAgMCwgLyp0cF9nZXRhdHRybyovCisrICAwLCAvKnRwX3NldGF0 dHJvKi8KKysgIDAsIC8qdHBfYXNfYnVmZmVyKi8KKysgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9U UEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1Nf SEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8q dHBfZmxhZ3MqLworKyAgIkJhc2UgY2xhc3Mgd3JhcHBpbmcgYSBjb250ZXh0IHRvIGludGVyYWN0 IHdpdGggbXB2LlxuXG4gICAgQXNzdW1lIGFsbCBjYWxscyBjYW4gcmFpc2UgTVBWRXJyb3IuXG5c biAgICBXcmFwczogbXB2X2NyZWF0ZSwgbXB2X2Rlc3Ryb3kgYW5kIGFsbCBtcHZfaGFuZGxlIHJl bGF0ZWQgY2FsbHNcbiAgICAiLCAvKnRwX2RvYyovCisrICBfX3B5eF90cF90cmF2ZXJzZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgLyp0cF90cmF2ZXJzZSovCisrICBfX3B5eF90cF9j bGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgLyp0cF9jbGVhciovCisrICAwLCAv KnRwX3JpY2hjb21wYXJlKi8KKysgIDAsIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworKyAgMCwgLyp0 cF9pdGVyKi8KKysgIDAsIC8qdHBfaXRlcm5leHQqLworKyAgX19weXhfbWV0aG9kc185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgLyp0cF9tZXRob2RzKi8KKysgIDAsIC8qdHBfbWVtYmVy cyovCisrICBfX3B5eF9nZXRzZXRzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCAvKnRw X2dldHNldCovCisrICAwLCAvKnRwX2Jhc2UqLworKyAgMCwgLyp0cF9kaWN0Ki8KKysgIDAsIC8q dHBfZGVzY3JfZ2V0Ki8KKysgIDAsIC8qdHBfZGVzY3Jfc2V0Ki8KKysgIDAsIC8qdHBfZGljdG9m ZnNldCovCisrICAwLCAvKnRwX2luaXQqLworKyAgMCwgLyp0cF9hbGxvYyovCisrICBfX3B5eF90 cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIC8qdHBfbmV3Ki8KKysgIDAsIC8q dHBfZnJlZSovCisrICAwLCAvKnRwX2lzX2djKi8KKysgIDAsIC8qdHBfYmFzZXMqLworKyAgMCwg Lyp0cF9tcm8qLworKyAgMCwgLyp0cF9jYWNoZSovCisrICAwLCAvKnRwX3N1YmNsYXNzZXMqLwor KyAgMCwgLyp0cF93ZWFrbGlzdCovCisrICAwLCAvKnRwX2RlbCovCisrICAwLCAvKnRwX3ZlcnNp b25fdGFnKi8KKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCisrICAwLCAvKnRw X2ZpbmFsaXplKi8KKysgICNlbmRpZgorKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAw YjEgJiYgKCFDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgfHwgUFlQWV9WRVJTSU9OX05VTSA+PSAw eDA3MDMwODAwKQorKyAgMCwgLyp0cF92ZWN0b3JjYWxsKi8KKysgICNlbmRpZgorKyAgI2lmIFBZ X1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAw CisrICAwLCAvKnRwX3ByaW50Ki8KKysgICNlbmRpZgorKyAgI2lmIENZVEhPTl9DT01QSUxJTkdf SU5fUFlQWSAmJiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDkwMDAwCisrICAwLCAvKnRwX3B5cHlf ZmxhZ3MqLworKyAgI2VuZGlmCisrfTsKKytzdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3Rf OXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgX19weXhfdnRhYmxlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zOworIAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQp Ijo4CistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNo ZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEsIG5hbWUpKSIgJSBfX3B5eF9jaGVja3N1 bSkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gUHJvcGVydHkuX19uZXdfXyhfX3B5eF90eXBlKQor LSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZSg8 UHJvcGVydHk+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCistICogICAgIHJldHVybiBfX3B5 eF9yZXN1bHQKKy0gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyhQeVR5cGVPYmplY3QgKnQsIENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKmEsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKKysgIHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKnA7CisrICBQeU9iamVj dCAqbzsKKysgIGlmIChsaWtlbHkoKHQtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19JU19BQlNUUkFD VCkgPT0gMCkpIHsKKysgICAgbyA9ICgqdC0+dHBfYWxsb2MpKHQsIDApOworKyAgfSBlbHNlIHsK KysgICAgbyA9IChQeU9iamVjdCAqKSBQeUJhc2VPYmplY3RfVHlwZS50cF9uZXcodCwgX19weXhf ZW1wdHlfdHVwbGUsIDApOworICAgfQorKyAgaWYgKHVubGlrZWx5KCFvKSkgcmV0dXJuIDA7Cisr ICBwID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zICopbyk7CisrICBwLT5fX3B5eF92dGFiID0gX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX1JlbmRlclBhcmFtczsKKysgIHAtPm93bmVkID0gUHlfTm9uZTsgUHlfSU5DUkVG KFB5X05vbmUpOworKyAgcmV0dXJuIG87CisrfQorIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6 MTAKKy0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6CistICogICAgICAgICBfX3B5 eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKDxQcm9wZXJ0eT4gX19weXhfcmVzdWx0LCBf X3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdCAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogY2RlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRl KFByb3BlcnR5IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5 eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubmFtZSA9IF9fcHl4 X3N0YXRlWzFdCistICovCistICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19QeXhfSU5D UkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKy0gIF9fcHl4X3IgPSBfX3B5eF92X19fcHl4X3Jl c3VsdDsKKy0gIGdvdG8gX19weXhfTDA7Cisrc3RhdGljIHZvaWQgX19weXhfdHBfZGVhbGxvY185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyhQeU9iamVjdCAqbykgeworKyAgc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqcCA9IChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopbzsK KysgICNpZiBDWVRIT05fVVNFX1RQX0ZJTkFMSVpFCisrICBpZiAodW5saWtlbHkoUHlUeXBlX0hh c0ZlYXR1cmUoUHlfVFlQRShvKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9UWVBF KG8pLT50cF9maW5hbGl6ZSkgJiYgIV9QeUdDX0ZJTkFMSVpFRChvKSkgeworKyAgICBpZiAoUHlP YmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKG8pKSByZXR1cm47CisrICB9CisrICAjZW5k aWYKKysgIFB5T2JqZWN0X0dDX1VuVHJhY2sobyk7CisrICB7CisrICAgIFB5T2JqZWN0ICpldHlw ZSwgKmV2YWwsICpldGI7CisrICAgIFB5RXJyX0ZldGNoKCZldHlwZSwgJmV2YWwsICZldGIpOwor KyAgICBfX1B5eF9TRVRfUkVGQ05UKG8sIFB5X1JFRkNOVChvKSArIDEpOworKyAgICBfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzNfX2RlYWxsb2NfXyhvKTsK KysgICAgX19QeXhfU0VUX1JFRkNOVChvLCBQeV9SRUZDTlQobykgLSAxKTsKKysgICAgUHlFcnJf UmVzdG9yZShldHlwZSwgZXZhbCwgZXRiKTsKKysgIH0KKysgIFB5X0NMRUFSKHAtPm93bmVkKTsK KysgICgqUHlfVFlQRShvKS0+dHBfZnJlZSkobyk7CisrfQorIAorLSAgLyogIih0cmVlIGZyYWdt ZW50KSI6MQorLSAqIGRlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eShfX3B5eF90eXBlLCBsb25n IF9fcHl4X2NoZWNrc3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgY2RlZiBv YmplY3QgX19weXhfcmVzdWx0CistICovCisrc3RhdGljIGludCBfX3B5eF90cF90cmF2ZXJzZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyhQeU9iamVjdCAqbywgdmlzaXRwcm9j IHYsIHZvaWQgKmEpIHsKKysgIGludCBlOworKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopbzsKKysgIGlmIChwLT5vd25lZCkgeworKyAg ICBlID0gKCp2KShwLT5vd25lZCwgYSk7IGlmIChlKSByZXR1cm4gZTsKKysgIH0KKysgIHJldHVy biAwOworK30KKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfTDFfZXJy b3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworLSAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworLSAgX19QeXhfWERFQ1JFRihf X3B5eF90XzUpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19w eXhfdW5waWNrbGVfUHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworLSAgX19weXhfTDA6OworLSAgX19QeXhf WERFQ1JFRihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19w eXhfdl9fX3B5eF9yZXN1bHQpOworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworK3N0YXRpYyBp bnQgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMoUHlP YmplY3QgKm8pIHsKKysgIFB5T2JqZWN0KiB0bXA7CisrICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilvOworKyAgdG1wID0gKChQeU9iamVj dCopcC0+b3duZWQpOworKyAgcC0+b3duZWQgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7 CisrICBQeV9YREVDUkVGKHRtcCk7CisrICByZXR1cm4gMDsKKyB9CisgCistLyogIih0cmVlIGZy YWdtZW50KSI6MTEKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3Rh dGUoPFByb3BlcnR5PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4g X19weXhfcmVzdWx0CistICogY2RlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRl KFByb3BlcnR5IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVb MF07IF9fcHl4X3Jlc3VsdC5uYW1lID0gX19weXhfc3RhdGVbMV0KKy0gKiAgICAgaWYgbGVuKF9f cHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKy0g Ki8KKytzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNt cHZfX1JlbmRlclBhcmFtc1tdID0geworKyAgeyJfX3JlZHVjZV9jeXRob25fXyIsIChQeUNGdW5j dGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzVfX3Jl ZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9LAorKyAgeyJfX3NldHN0YXRlX2N5dGhvbl9f IiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQ YXJhbXNfN19fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhfTywgMH0sCisrICB7MCwgMCwgMCwgMH0K Kyt9OworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqX19weXhfdl9fX3B5eF9yZXN1bHQsIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Cist ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5V TEw7CistICBpbnQgX19weXhfdF8yOworLSAgUHlfc3NpemVfdCBfX3B5eF90XzM7CistICBpbnQg X19weXhfdF80OworLSAgaW50IF9fcHl4X3RfNTsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBO VUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhf dF84ID0gTlVMTDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19w eXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUi LCAwKTsKKytzdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X19SZW5kZXJQYXJhbXMgPSB7CisrICBQeVZhck9iamVjdF9IRUFEX0lOSVQoMCwgMCkKKysg ICJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlbmRlclBhcmFtcyIsIC8qdHBfbmFtZSovCisrICBzaXpl b2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyks IC8qdHBfYmFzaWNzaXplKi8KKysgIDAsIC8qdHBfaXRlbXNpemUqLworKyAgX19weXhfdHBfZGVh bGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcywgLyp0cF9kZWFsbG9jKi8K KysgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKysgIDAsIC8qdHBfcHJpbnQqLwor KyAgI2VuZGlmCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorKyAgMCwgLyp0 cF92ZWN0b3JjYWxsX29mZnNldCovCisrICAjZW5kaWYKKysgIDAsIC8qdHBfZ2V0YXR0ciovCisr ICAwLCAvKnRwX3NldGF0dHIqLworKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAwLCAv KnRwX2NvbXBhcmUqLworKyAgI2VuZGlmCisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCisr ICAwLCAvKnRwX2FzX2FzeW5jKi8KKysgICNlbmRpZgorKyAgMCwgLyp0cF9yZXByKi8KKysgIDAs IC8qdHBfYXNfbnVtYmVyKi8KKysgIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworKyAgMCwgLyp0cF9h c19tYXBwaW5nKi8KKysgIDAsIC8qdHBfaGFzaCovCisrICAwLCAvKnRwX2NhbGwqLworKyAgMCwg Lyp0cF9zdHIqLworKyAgMCwgLyp0cF9nZXRhdHRybyovCisrICAwLCAvKnRwX3NldGF0dHJvKi8K KysgIDAsIC8qdHBfYXNfYnVmZmVyKi8KKysgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdT X0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1NfSEFWRV9O RVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxh Z3MqLworKyAgMCwgLyp0cF9kb2MqLworKyAgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80 bGlic18zbXB2X19SZW5kZXJQYXJhbXMsIC8qdHBfdHJhdmVyc2UqLworKyAgX19weXhfdHBfY2xl YXJfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMsIC8qdHBfY2xlYXIqLworKyAg MCwgLyp0cF9yaWNoY29tcGFyZSovCisrICAwLCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKysgIDAs IC8qdHBfaXRlciovCisrICAwLCAvKnRwX2l0ZXJuZXh0Ki8KKysgIF9fcHl4X21ldGhvZHNfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMsIC8qdHBfbWV0aG9kcyovCisrICAwLCAv KnRwX21lbWJlcnMqLworKyAgMCwgLyp0cF9nZXRzZXQqLworKyAgMCwgLyp0cF9iYXNlKi8KKysg IDAsIC8qdHBfZGljdCovCisrICAwLCAvKnRwX2Rlc2NyX2dldCovCisrICAwLCAvKnRwX2Rlc2Ny X3NldCovCisrICAwLCAvKnRwX2RpY3RvZmZzZXQqLworKyAgX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc18xX19pbml0X18sIC8qdHBfaW5pdCovCisrICAwLCAv KnRwX2FsbG9jKi8KKysgIF9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRl clBhcmFtcywgLyp0cF9uZXcqLworKyAgMCwgLyp0cF9mcmVlKi8KKysgIDAsIC8qdHBfaXNfZ2Mq LworKyAgMCwgLyp0cF9iYXNlcyovCisrICAwLCAvKnRwX21ybyovCisrICAwLCAvKnRwX2NhY2hl Ki8KKysgIDAsIC8qdHBfc3ViY2xhc3NlcyovCisrICAwLCAvKnRwX3dlYWtsaXN0Ki8KKysgIDAs IC8qdHBfZGVsKi8KKysgIDAsIC8qdHBfdmVyc2lvbl90YWcqLworKyAgI2lmIFBZX1ZFUlNJT05f SEVYID49IDB4MDMwNDAwYTEKKysgIDAsIC8qdHBfZmluYWxpemUqLworKyAgI2VuZGlmCisrICAj aWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMSAmJiAoIUNZVEhPTl9DT01QSUxJTkdfSU5f UFlQWSB8fCBQWVBZX1ZFUlNJT05fTlVNID49IDB4MDcwMzA4MDApCisrICAwLCAvKnRwX3ZlY3Rv cmNhbGwqLworKyAgI2VuZGlmCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNCAm JiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwOTAwMDAKKysgIDAsIC8qdHBfcHJpbnQqLworKyAgI2Vu ZGlmCisrICAjaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZICYmIFBZX1ZFUlNJT05fSEVYID49 IDB4MDMwOTAwMDAKKysgIDAsIC8qdHBfcHlweV9mbGFncyovCisrICAjZW5kaWYKKyt9OworK3N0 YXRpYyBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy RnJhbWVJbmZvIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJ bmZvOworIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKKy0gKiAgICAgcmV0dXJuIF9fcHl4 X3Jlc3VsdAorLSAqIGNkZWYgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShQcm9w ZXJ0eSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19weXhfcmVz dWx0LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0Lm5hbWUgPSBfX3B5eF9zdGF0 ZVsxXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGlmIGxlbihfX3B5eF9z dGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CistICogICAg ICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzJdKQorLSAqLwor LSAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKy0gICAg UHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2JqZWN0IGlzIG5v dCBzdWJzY3JpcHRhYmxlIik7CistICAgIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3Ip CistICB9CistICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19w eXhfc3RhdGUsIDAsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEp OworLSAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5kYXRhKTsKKy0gIF9fUHl4 X0RFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+ZGF0YSk7CistICBfX3B5eF92X19fcHl4X3Jl c3VsdC0+ZGF0YSA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7CistICBpZiAodW5saWtl bHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAgICBQeUVycl9TZXRTdHJp bmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFi bGUiKTsKKy0gICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZv KFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqYSwgQ1lUSE9OX1VOVVNF RCBQeU9iamVjdCAqaykgeworKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyRnJhbWVJbmZvICpwOworKyAgUHlPYmplY3QgKm87CisrICBpZiAobGlrZWx5KCh0 LT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QpID09IDApKSB7CisrICAgIG8gPSAo KnQtPnRwX2FsbG9jKSh0LCAwKTsKKysgIH0gZWxzZSB7CisrICAgIG8gPSAoUHlPYmplY3QgKikg UHlCYXNlT2JqZWN0X1R5cGUudHBfbmV3KHQsIF9fcHl4X2VtcHR5X3R1cGxlLCAwKTsKKyAgIH0K Ky0gIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0 ZSwgMSwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CistICBf X1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPm5hbWUpOworLSAgX19QeXhfREVDUkVG KF9fcHl4X3ZfX19weXhfcmVzdWx0LT5uYW1lKTsKKy0gIF9fcHl4X3ZfX19weXhfcmVzdWx0LT5u YW1lID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKysgIGlmICh1bmxpa2VseSghbykp IHJldHVybiAwOworKyAgcCA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyRnJhbWVJbmZvICopbyk7CisrICBwLT5fX3B5eF92dGFiID0gX19weXhfdnRhYnB0 cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvOworKyAgcmV0dXJuIG87Cisr fQorIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xl X1Byb3BlcnR5X19zZXRfc3RhdGUoUHJvcGVydHkgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9z dGF0ZSk6CistICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4 X3Jlc3VsdC5uYW1lID0gX19weXhfc3RhdGVbMV0KKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRl KSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0 ZShfX3B5eF9zdGF0ZVsyXSkKKy0gKi8KKy0gIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0 YXRlID09IFB5X05vbmUpKSB7CistICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3Is ICJvYmplY3Qgb2YgdHlwZSAnTm9uZVR5cGUnIGhhcyBubyBsZW4oKSIpOworLSAgICBfX1BZWF9F UlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgfQorLSAgX19weXhfdF8zID0gUHlUdXBsZV9H RVRfU0laRShfX3B5eF92X19fcHl4X3N0YXRlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA9PSAo KFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f cHl4X3RfNCA9ICgoX19weXhfdF8zID4gMikgIT0gMCk7CistICBpZiAoX19weXhfdF80KSB7Cist ICB9IGVsc2UgeworLSAgICBfX3B5eF90XzIgPSBfX3B5eF90XzQ7CistICAgIGdvdG8gX19weXhf TDRfYm9vbF9iaW5vcF9kb25lOworK3N0YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1 dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyhQeU9iamVjdCAqbykgeworKyAgI2lmIENZ VEhPTl9VU0VfVFBfRklOQUxJWkUKKysgIGlmICh1bmxpa2VseShQeVR5cGVfSGFzRmVhdHVyZShQ eV9UWVBFKG8pLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmIFB5X1RZUEUobyktPnRwX2Zp bmFsaXplKSAmJiAoIVB5VHlwZV9JU19HQyhQeV9UWVBFKG8pKSB8fCAhX1B5R0NfRklOQUxJWkVE KG8pKSkgeworKyAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKG8pKSBy ZXR1cm47CisgICB9CistICBfX3B5eF90XzQgPSBfX1B5eF9IYXNBdHRyKCgoUHlPYmplY3QgKilf X3B5eF92X19fcHl4X3Jlc3VsdCksIF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KF9fcHl4 X3RfNCA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAg X19weXhfdF81ID0gKF9fcHl4X3RfNCAhPSAwKTsKKy0gIF9fcHl4X3RfMiA9IF9fcHl4X3RfNTsK Ky0gIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7CistICBpZiAoX19weXhfdF8yKSB7CisrICAj ZW5kaWYKKysgICgqUHlfVFlQRShvKS0+dHBfZnJlZSkobyk7CisrfQorIAorLSAgICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxNAorLSAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRl WzBdOyBfX3B5eF9yZXN1bHQubmFtZSA9IF9fcHl4X3N0YXRlWzFdCistICogICAgIGlmIGxlbihf X3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6Cist ICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzJdKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICovCistICAgIF9fcHl4X3RfNiA9IF9fUHl4 X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfcmVzdWx0KSwg X19weXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAx NCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgICBf X3B5eF90XzcgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNiwgX19weXhfbl9z X3VwZGF0ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICBpZiAodW5saWtlbHkoX19weXhf dl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4 Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOwor LSAgICAgIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCistICAgIH0KKy0gICAgX19w eXhfdF82ID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAyLCBs b25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzYpOworLSAgICBfX3B5eF90XzggPSBOVUxMOworLSAgICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzcpKSkgewor LSAgICAgIF9fcHl4X3RfOCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNyk7CistICAgICAg aWYgKGxpa2VseShfX3B5eF90XzgpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQ eU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF83KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihf X3B5eF90XzgpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9f UHl4X0RFQ1JFRl9TRVQoX19weXhfdF83LCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9Cist ICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzgpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfNywgX19weXhfdF84LCBfX3B5eF90XzYpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZyhfX3B5eF90XzcsIF9fcHl4X3RfNik7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsg X19weXhfdF84ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKytzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWV0aG9kc185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvW10gPSB7CisrICB7Il9fcmVkdWNl X2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NVJlbmRlckZyYW1lSW5mb18xX19yZWR1Y2VfY3l0aG9uX18sIE1FVEhfTk9BUkdTLCAwfSwKKysg IHsiX19zZXRzdGF0ZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fM19fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhf TywgMH0sCisrICB7MCwgMCwgMCwgMH0KKyt9OworIAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQp IjoxMworLSAqIGNkZWYgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShQcm9wZXJ0 eSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19weXhfcmVzdWx0 LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0Lm5hbWUgPSBfX3B5eF9zdGF0ZVsx XQorLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1 bHQsICdfX2RpY3RfXycpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzJdKQorLSAqLworLSAg fQorLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKKy0gKiAgICAgICAgIF9fcHl4X3VucGlj a2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoPFByb3BlcnR5PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0 YXRlKQorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CistICogY2RlZiBfX3B5eF91bnBpY2ts ZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKFByb3BlcnR5IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhf c3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIF9fcHl4X3Jlc3Vs dC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5uYW1lID0gX19weXhfc3RhdGVb MV0KKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVz dWx0LCAnX19kaWN0X18nKToKKy0gKi8KKytzdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyA9IHsKKysgIFB5VmFyT2JqZWN0 X0hFQURfSU5JVCgwLCAwKQorKyAgInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJGcmFtZUluZm8i LCAvKnRwX25hbWUqLworKyAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X1JlbmRlckZyYW1lSW5mbyksIC8qdHBfYmFzaWNzaXplKi8KKysgIDAsIC8qdHBfaXRl bXNpemUqLworKyAgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy RnJhbWVJbmZvLCAvKnRwX2RlYWxsb2MqLworKyAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4 MDBiNAorKyAgMCwgLyp0cF9wcmludCovCisrICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hF WCA+PSAweDAzMDgwMGI0CisrICAwLCAvKnRwX3ZlY3RvcmNhbGxfb2Zmc2V0Ki8KKysgICNlbmRp ZgorKyAgMCwgLyp0cF9nZXRhdHRyKi8KKysgIDAsIC8qdHBfc2V0YXR0ciovCisrICAjaWYgUFlf TUFKT1JfVkVSU0lPTiA8IDMKKysgIDAsIC8qdHBfY29tcGFyZSovCisrICAjZW5kaWYKKysgICNp ZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgIDAsIC8qdHBfYXNfYXN5bmMqLworKyAgI2VuZGlm CisrICAwLCAvKnRwX3JlcHIqLworKyAgMCwgLyp0cF9hc19udW1iZXIqLworKyAgMCwgLyp0cF9h c19zZXF1ZW5jZSovCisrICAwLCAvKnRwX2FzX21hcHBpbmcqLworKyAgMCwgLyp0cF9oYXNoKi8K KysgIDAsIC8qdHBfY2FsbCovCisrICAwLCAvKnRwX3N0ciovCisrICAwLCAvKnRwX2dldGF0dHJv Ki8KKysgIDAsIC8qdHBfc2V0YXR0cm8qLworKyAgMCwgLyp0cF9hc19idWZmZXIqLworKyAgUHlf VFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBR3xQeV9UUEZMQUdTX0NI RUNLVFlQRVN8UHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUnxQeV9UUEZMQUdTX0JBU0VUWVBFLCAv KnRwX2ZsYWdzKi8KKysgIDAsIC8qdHBfZG9jKi8KKysgIDAsIC8qdHBfdHJhdmVyc2UqLworKyAg MCwgLyp0cF9jbGVhciovCisrICAwLCAvKnRwX3JpY2hjb21wYXJlKi8KKysgIDAsIC8qdHBfd2Vh a2xpc3RvZmZzZXQqLworKyAgMCwgLyp0cF9pdGVyKi8KKysgIDAsIC8qdHBfaXRlcm5leHQqLwor KyAgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLCAv KnRwX21ldGhvZHMqLworKyAgMCwgLyp0cF9tZW1iZXJzKi8KKysgIDAsIC8qdHBfZ2V0c2V0Ki8K KysgIDAsIC8qdHBfYmFzZSovCisrICAwLCAvKnRwX2RpY3QqLworKyAgMCwgLyp0cF9kZXNjcl9n ZXQqLworKyAgMCwgLyp0cF9kZXNjcl9zZXQqLworKyAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8KKysg IDAsIC8qdHBfaW5pdCovCisrICAwLCAvKnRwX2FsbG9jKi8KKysgIF9fcHl4X3RwX25ld185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLCAvKnRwX25ldyovCisrICAwLCAvKnRw X2ZyZWUqLworKyAgMCwgLyp0cF9pc19nYyovCisrICAwLCAvKnRwX2Jhc2VzKi8KKysgIDAsIC8q dHBfbXJvKi8KKysgIDAsIC8qdHBfY2FjaGUqLworKyAgMCwgLyp0cF9zdWJjbGFzc2VzKi8KKysg IDAsIC8qdHBfd2Vha2xpc3QqLworKyAgMCwgLyp0cF9kZWwqLworKyAgMCwgLyp0cF92ZXJzaW9u X3RhZyovCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA0MDBhMQorKyAgMCwgLyp0cF9m aW5hbGl6ZSovCisrICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGIx ICYmICghQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZIHx8IFBZUFlfVkVSU0lPTl9OVU0gPj0gMHgw NzAzMDgwMCkKKysgIDAsIC8qdHBfdmVjdG9yY2FsbCovCisrICAjZW5kaWYKKysgICNpZiBQWV9W RVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAor KyAgMCwgLyp0cF9wcmludCovCisrICAjZW5kaWYKKysgICNpZiBDWVRIT05fQ09NUElMSU5HX0lO X1BZUFkgJiYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA5MDAwMAorKyAgMCwgLyp0cF9weXB5X2Zs YWdzKi8KKysgICNlbmRpZgorK307CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0g IF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4 X0wwOworLSAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwor LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90Xzcp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2 aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZSIsIF9f cHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9 IDA7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKy0gIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7Cisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQo UHlUeXBlT2JqZWN0ICp0LCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICphLCBDWVRIT05fVU5VU0VE IFB5T2JqZWN0ICprKSB7CisrICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9SZW5kZXJDb250ZXh0ICpwOworKyAgUHlPYmplY3QgKm87CisrICBpZiAobGlrZWx5KCh0LT50 cF9mbGFncyAmIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QpID09IDApKSB7CisrICAgIG8gPSAoKnQt PnRwX2FsbG9jKSh0LCAwKTsKKysgIH0gZWxzZSB7CisrICAgIG8gPSAoUHlPYmplY3QgKikgUHlC YXNlT2JqZWN0X1R5cGUudHBfbmV3KHQsIF9fcHl4X2VtcHR5X3R1cGxlLCAwKTsKKysgIH0KKysg IGlmICh1bmxpa2VseSghbykpIHJldHVybiAwOworKyAgcCA9ICgoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKW8pOworKyAgcC0+X21wdiA9ICgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKVB5X05vbmUp OyBQeV9JTkNSRUYoUHlfTm9uZSk7CisrICBwLT51cGRhdGVfY2IgPSBQeV9Ob25lOyBQeV9JTkNS RUYoUHlfTm9uZSk7CisrICBwLT5feDExX2Rpc3BsYXkgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlf Tm9uZSk7CisrICBwLT5fd2xfZGlzcGxheSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsK KysgIHAtPl9nZXRfcHJvY19hZGRyZXNzID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwor KyAgcmV0dXJuIG87CisgfQorIAorLS8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0gKiBkZWYgX19w eXhfdW5waWNrbGVfRXZlbnQoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhf c3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0 IF9fcHl4X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAq LworLQorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVfX3B5eF91bnBpY2tsZV9FdmVudChQeU9iamVjdCAqX19w eXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypw cm90byovCistc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18z bXB2XzE1X19weXhfdW5waWNrbGVfRXZlbnQgPSB7Il9fcHl4X3VucGlja2xlX0V2ZW50IiwgKFB5 Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzE1X19weXhfdW5waWNrbGVfRXZlbnQsIE1FVEhfVkFSQVJHU3xNRVRI X0tFWVdPUkRTLCAwfTsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNV9fcHl4X3VucGlja2xlX0V2ZW50KFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9i amVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKy0gIFB5T2JqZWN0ICpf X3B5eF92X19fcHl4X3R5cGUgPSAwOworLSAgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtOwor LSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUgPSAwOworLSAgaW50IF9fcHl4X2xpbmVu byA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3Vu cGlja2xlX0V2ZW50ICh3cmFwcGVyKSIsIDApOworK3N0YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxs b2NfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQoUHlPYmplY3QgKm8pIHsKKysg IHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKnAg PSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAq KW87CisrICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5BTElaRQorKyAgaWYgKHVubGlrZWx5KFB5VHlw ZV9IYXNGZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkgJiYgUHlf VFlQRShvKS0+dHBfZmluYWxpemUpICYmICFfUHlHQ19GSU5BTElaRUQobykpIHsKKysgICAgaWYg KFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhvKSkgcmV0dXJuOworKyAgfQorKyAg I2VuZGlmCisrICBQeU9iamVjdF9HQ19VblRyYWNrKG8pOworICAgeworLSAgICBzdGF0aWMgUHlP YmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19weXhfdHlwZSwmX19weXhf bl9zX3B5eF9jaGVja3N1bSwmX19weXhfbl9zX3B5eF9zdGF0ZSwwfTsKKy0gICAgUHlPYmplY3Qq IHZhbHVlc1szXSA9IHswLDAsMH07CistICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgewor LSAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKy0gICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19h cmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19h cmdzKSB7CistICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9f cHl4X2FyZ3MsIDIpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2Fz ZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAg ICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5 VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9V R0g7CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19w eXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQorLSAgICAgIGt3X2FyZ3MgPSBQeURpY3Rf U2l6ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBj YXNlICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dl dEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF90eXBlKSkgIT0gMCkpIGt3X2FyZ3Mt LTsKKy0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKy0gICAgICAg IENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6CistICAgICAgICBpZiAobGlr ZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5 eF9uX3NfcHl4X2NoZWNrc3VtKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVsc2Ugewor LSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfRXZl bnQiLCAxLCAzLCAzLCAxKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAg ICAgfQorLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMjoKKy0g ICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1syXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9f cHl4X2t3ZHMsIF9fcHl4X25fc19weXhfc3RhdGUpKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAg ICAgZWxzZSB7CistICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91 bnBpY2tsZV9FdmVudCIsIDEsIDMsIDMsIDIpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJy b3IpCistICAgICAgICB9CistICAgICAgfQorLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4g MCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMo X19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9fcHl4 X3VucGlja2xlX0V2ZW50IikgPCAwKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQor LSAgICAgIH0KKy0gICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9 IDMpIHsKKy0gICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICB9IGVsc2Ug eworLSAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Cist ICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAg ICB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOworLSAgICB9Cist ICAgIF9fcHl4X3ZfX19weXhfdHlwZSA9IHZhbHVlc1swXTsKKy0gICAgX19weXhfdl9fX3B5eF9j aGVja3N1bSA9IF9fUHl4X1B5SW50X0FzX2xvbmcodmFsdWVzWzFdKTsgaWYgKHVubGlrZWx5KChf X3B5eF92X19fcHl4X2NoZWNrc3VtID09IChsb25nKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorLSAgICBfX3B5eF92X19fcHl4X3N0YXRl ID0gdmFsdWVzWzJdOworKyAgICBQeU9iamVjdCAqZXR5cGUsICpldmFsLCAqZXRiOworKyAgICBQ eUVycl9GZXRjaCgmZXR5cGUsICZldmFsLCAmZXRiKTsKKysgICAgX19QeXhfU0VUX1JFRkNOVChv LCBQeV9SRUZDTlQobykgKyAxKTsKKysgICAgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF8yMV9fZGVhbGxvY19fKG8pOworKyAgICBfX1B5eF9TRVRfUkVGQ05U KG8sIFB5X1JFRkNOVChvKSAtIDEpOworKyAgICBQeUVycl9SZXN0b3JlKGV0eXBlLCBldmFsLCBl dGIpOworICAgfQorLSAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKy0g IF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlk KCJfX3B5eF91bnBpY2tsZV9FdmVudCIsIDEsIDMsIDMsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhf YXJncykpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCistICBfX3B5eF9MM19lcnJv cjo7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBp Y2tsZV9FdmVudCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gTlVMTDsKKy0g IF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3IgPSBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfX3B5eF91bnBpY2tsZV9FdmVudChfX3B5eF9zZWxm LCBfX3B5eF92X19fcHl4X3R5cGUsIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIF9fcHl4X3ZfX19w eXhfc3RhdGUpOworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworKyAgUHlfQ0xFQVIocC0+ X21wdik7CisrICBQeV9DTEVBUihwLT51cGRhdGVfY2IpOworKyAgUHlfQ0xFQVIocC0+X3gxMV9k aXNwbGF5KTsKKysgIFB5X0NMRUFSKHAtPl93bF9kaXNwbGF5KTsKKysgIFB5X0NMRUFSKHAtPl9n ZXRfcHJvY19hZGRyZXNzKTsKKysgICgqUHlfVFlQRShvKS0+dHBfZnJlZSkobyk7CisgfQorIAor LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X19weXhf dW5waWNrbGVfRXZlbnQoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9i amVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf UGlja2xlRXJyb3IgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfcmVzdWx0ID0gMDsK Ky0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCistICBpbnQgX19weXhfdF8xOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Cist ICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBO VUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBpbnQgX19weXhfdF82Owor LSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9 IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19weXhfdW5waWNrbGVfRXZlbnQiLCAwKTsKKy0KKy0gIC8qICIodHJlZSBmcmFn bWVudCkiOjQKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAg Y2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4 ZGEzOGMyNTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZnJvbSBw aWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCistICogICAgICAg ICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMg MHhkYTM4YzI1ID0gKGRhdGEsIGVycm9yLCBpZCwgcmVwbHlfdXNlcmRhdGEpKSIgJSBfX3B5eF9j aGVja3N1bSkKKy0gKi8KKy0gIF9fcHl4X3RfMSA9ICgoX19weXhfdl9fX3B5eF9jaGVja3N1bSAh PSAweGRhMzhjMjUpICE9IDApOworLSAgaWYgKF9fcHl4X3RfMSkgeworK3N0YXRpYyBpbnQgX19w eXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQoUHlPYmpl Y3QgKm8sIHZpc2l0cHJvYyB2LCB2b2lkICphKSB7CisrICBpbnQgZTsKKysgIHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKnAgPSAoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKW87CisrICBpZiAo cC0+X21wdikgeworKyAgICBlID0gKCp2KSgoKFB5T2JqZWN0ICopcC0+X21wdiksIGEpOyBpZiAo ZSkgcmV0dXJuIGU7CisrICB9CisrICBpZiAocC0+dXBkYXRlX2NiKSB7CisrICAgIGUgPSAoKnYp KHAtPnVwZGF0ZV9jYiwgYSk7IGlmIChlKSByZXR1cm4gZTsKKysgIH0KKysgIGlmIChwLT5feDEx X2Rpc3BsYXkpIHsKKysgICAgZSA9ICgqdikocC0+X3gxMV9kaXNwbGF5LCBhKTsgaWYgKGUpIHJl dHVybiBlOworKyAgfQorKyAgaWYgKHAtPl93bF9kaXNwbGF5KSB7CisrICAgIGUgPSAoKnYpKHAt Pl93bF9kaXNwbGF5LCBhKTsgaWYgKGUpIHJldHVybiBlOworKyAgfQorKyAgaWYgKHAtPl9nZXRf cHJvY19hZGRyZXNzKSB7CisrICAgIGUgPSAoKnYpKHAtPl9nZXRfcHJvY19hZGRyZXNzLCBhKTsg aWYgKGUpIHJldHVybiBlOworKyAgfQorKyAgcmV0dXJuIDA7CisrfQorIAorLSAgICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjo1CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqICAg ICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweGRhMzhjMjU6CistICogICAgICAgICBmcm9tIHBpY2ts ZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29t cGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJvciwgaWQsIHJl cGx5X3VzZXJkYXRhKSkiICUgX19weXhfY2hlY2tzdW0pCistICogICAgIF9fcHl4X3Jlc3VsdCA9 IEV2ZW50Ll9fbmV3X18oX19weXhfdHlwZSkKKy0gKi8KKy0gICAgX19weXhfdF8yID0gUHlMaXN0 X05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhf TDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9JTkNS RUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF9uX3Nf UGlja2xlRXJyb3IpOworLSAgICBQeUxpc3RfU0VUX0lURU0oX19weXhfdF8yLCAwLCBfX3B5eF9u X3NfUGlja2xlRXJyb3IpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9JbXBvcnQoX19weXhfbl9z X3BpY2tsZSwgX19weXhfdF8yLCAtMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsK Ky0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fcHl4 X3RfMiA9IF9fUHl4X0ltcG9ydEZyb20oX19weXhfdF8zLCBfX3B5eF9uX3NfUGlja2xlRXJyb3Ip OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJv cikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzIpOworLSAgICBfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yID0gX19weXhfdF8yOworLSAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistCistICAgIC8qICIodHJlZSBmcmFnbWVu dCkiOjYKKy0gKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHhkYTM4YzI1OgorLSAqICAgICAg ICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCist ICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3Vt cyAoJXMgdnMgMHhkYTM4YzI1ID0gKGRhdGEsIGVycm9yLCBpZCwgcmVwbHlfdXNlcmRhdGEpKSIg JSBfX3B5eF9jaGVja3N1bSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBf X3B5eF9yZXN1bHQgPSBFdmVudC5fX25ld19fKF9fcHl4X3R5cGUpCistICogICAgIGlmIF9fcHl4 X3N0YXRlIGlzIG5vdCBOb25lOgorLSAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9G cm9tX2xvbmcoX19weXhfdl9fX3B5eF9jaGVja3N1bSk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKy0gICAgX19weXhfdF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0KF9fcHl4X2tw X3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4ZGEsIF9fcHl4X3RfMik7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBf X1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9f cHl4X3RfMiA9IDA7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9y KTsKKy0gICAgX19weXhfdF8yID0gX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcjsgX19weXhfdF81 ID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dF VF9TRUxGKF9fcHl4X3RfMik7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CistICAg ICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8y KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworLSAgICAgICAgX19QeXhfSU5D UkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5j dGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8g X19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF81LCBfX3B5eF90XzQp IDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfNCk7CistICAg IF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8zKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 CistICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMywgMCwgMCwgMCk7CistICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICBfX1BZWF9FUlIoMSwgNiwgX19weXhf TDFfZXJyb3IpCistCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKy0gKiAgICAgY2RlZiBv YmplY3QgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0 CistICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4ZGEzOGMyNTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9y IGFzIF9fcHl4X1BpY2tsZUVycm9yCistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJv cigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhkYTM4YzI1ID0gKGRhdGEsIGVycm9y LCBpZCwgcmVwbHlfdXNlcmRhdGEpKSIgJSBfX3B5eF9jaGVja3N1bSkKKy0gKi8KKy0gIH0KKy0K Ky0gIC8qICIodHJlZSBmcmFnbWVudCkiOjcKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9y dCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICAgICAgcmFpc2UgX19w eXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9 IChkYXRhLCBlcnJvciwgaWQsIHJlcGx5X3VzZXJkYXRhKSkiICUgX19weXhfY2hlY2tzdW0pCist ICogICAgIF9fcHl4X3Jlc3VsdCA9IEV2ZW50Ll9fbmV3X18oX19weXhfdHlwZSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToK Ky0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5 eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0V2ZW50KSwgX19weXhfbl9zX25ldyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7 CistICBfX3B5eF90XzQgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBs aWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAgX19weXhfdF80ID0gUHlN ZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7 CistICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4 X3RfMik7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7CistICAgICAgX19QeXhfSU5D UkVGKGZ1bmN0aW9uKTsKKy0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rp b24pOworLSAgICB9CistICB9CistICBfX3B5eF90XzMgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5 T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdl9fX3B5eF90eXBl KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X19fcHl4X3R5 cGUpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgNywgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworLSAgX19weXhfdl9fX3B5eF9yZXN1bHQgPSBfX3B5eF90XzM7CistICBf X3B5eF90XzMgPSAwOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6OAorLSAqICAgICAgICAg cmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4 ZGEzOGMyNSA9IChkYXRhLCBlcnJvciwgaWQsIHJlcGx5X3VzZXJkYXRhKSkiICUgX19weXhfY2hl Y2tzdW0pCistICogICAgIF9fcHl4X3Jlc3VsdCA9IEV2ZW50Ll9fbmV3X18oX19weXhfdHlwZSkK Ky0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2 ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19weXhfcmVz dWx0CistICovCistICBfX3B5eF90XzEgPSAoX19weXhfdl9fX3B5eF9zdGF0ZSAhPSBQeV9Ob25l KTsKKy0gIF9fcHl4X3RfNiA9IChfX3B5eF90XzEgIT0gMCk7CistICBpZiAoX19weXhfdF82KSB7 CistCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0g RXZlbnQuX19uZXdfXyhfX3B5eF90eXBlKQorLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3Qg Tm9uZToKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2ZW50 PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2 ZW50X19zZXRfc3RhdGUoRXZlbnQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6Cist ICovCistICAgIGlmICghKGxpa2VseShQeVR1cGxlX0NoZWNrRXhhY3QoX19weXhfdl9fX3B5eF9z dGF0ZSkpfHwoKF9fcHl4X3ZfX19weXhfc3RhdGUpID09IFB5X05vbmUpfHwoUHlFcnJfRm9ybWF0 KFB5RXhjX1R5cGVFcnJvciwgIkV4cGVjdGVkICUuMTZzLCBnb3QgJS4yMDBzIiwgInR1cGxlIiwg UHlfVFlQRShfX3B5eF92X19fcHl4X3N0YXRlKS0+dHBfbmFtZSksIDApKSkgX19QWVhfRVJSKDEs IDksIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX3B5eF90XzMgPSBfX3B5eF9mXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKCgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X19fcHl4X3Jlc3VsdCks ICgoUHlPYmplY3QqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMSwgOSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsK Ky0KKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6OAorLSAqICAgICAgICAgcmFpc2UgX19weXhf UGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChk YXRhLCBlcnJvciwgaWQsIHJlcGx5X3VzZXJkYXRhKSkiICUgX19weXhfY2hlY2tzdW0pCistICog ICAgIF9fcHl4X3Jlc3VsdCA9IEV2ZW50Ll9fbmV3X18oX19weXhfdHlwZSkKKy0gKiAgICAgaWYg X19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9y ZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CistICovCist ICB9Cisrc3RhdGljIGludCBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVu ZGVyQ29udGV4dChQeU9iamVjdCAqbykgeworKyAgUHlPYmplY3QqIHRtcDsKKysgIHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKnAgPSAoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKW87CisrICB0 bXAgPSAoKFB5T2JqZWN0KilwLT5fbXB2KTsKKysgIHAtPl9tcHYgPSAoKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilQeV9Ob25lKTsgUHlfSU5DUkVGKFB5 X05vbmUpOworKyAgUHlfWERFQ1JFRih0bXApOworKyAgdG1wID0gKChQeU9iamVjdCopcC0+dXBk YXRlX2NiKTsKKysgIHAtPnVwZGF0ZV9jYiA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsK KysgIFB5X1hERUNSRUYodG1wKTsKKysgIHRtcCA9ICgoUHlPYmplY3QqKXAtPl94MTFfZGlzcGxh eSk7CisrICBwLT5feDExX2Rpc3BsYXkgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7Cisr ICBQeV9YREVDUkVGKHRtcCk7CisrICB0bXAgPSAoKFB5T2JqZWN0KilwLT5fd2xfZGlzcGxheSk7 CisrICBwLT5fd2xfZGlzcGxheSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIFB5 X1hERUNSRUYodG1wKTsKKysgIHRtcCA9ICgoUHlPYmplY3QqKXAtPl9nZXRfcHJvY19hZGRyZXNz KTsKKysgIHAtPl9nZXRfcHJvY19hZGRyZXNzID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUp OworKyAgUHlfWERFQ1JFRih0bXApOworKyAgcmV0dXJuIDA7CisrfQorIAorLSAgLyogIih0cmVl IGZyYWdtZW50KSI6MTAKKy0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6CistICog ICAgICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKDxFdmVudD4gX19weXhfcmVz dWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogY2RlZiBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0 YXRlKEV2ZW50IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5 eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5 eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LmlkID0gX19weXhfc3RhdGVbMl07IF9fcHl4X3Jlc3Vs dC5yZXBseV91c2VyZGF0YSA9IF9fcHl4X3N0YXRlWzNdCistICovCistICBfX1B5eF9YREVDUkVG KF9fcHl4X3IpOworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKy0gIF9f cHl4X3IgPSBfX3B5eF92X19fcHl4X3Jlc3VsdDsKKy0gIGdvdG8gX19weXhfTDA7Cisrc3RhdGlj IFB5TWV0aG9kRGVmIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNv bnRleHRbXSA9IHsKKysgIHsic2V0X2ljY19wcm9maWxlIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfM3NldF9pY2NfcHJvZmlsZSwg TUVUSF9PLCAwfSwKKysgIHsic2V0X2FtYmllbnRfbGlnaHQiLCAoUHlDRnVuY3Rpb24pX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF81c2V0X2FtYmllbnRfbGln aHQsIE1FVEhfTywgMH0sCisrICB7ImdldF9uZXh0X2ZyYW1lX2luZm8iLCAoUHlDRnVuY3Rpb24p X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF83Z2V0X25leHRf ZnJhbWVfaW5mbywgTUVUSF9OT0FSR1MsIDB9LAorKyAgeyJzZXRfdXBkYXRlX2NhbGxiYWNrIiwg KFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfOXNldF91cGRhdGVfY2FsbGJhY2ssIE1FVEhfTywgMH0sCisrICB7InVwZGF0ZSIsIChQeUNG dW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEx dXBkYXRlLCBNRVRIX05PQVJHUywgMH0sCisrICB7InJlbmRlciIsIChQeUNGdW5jdGlvbikodm9p ZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAw fSwKKysgIHsicmVwb3J0X3N3YXAiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNXJlcG9ydF9zd2FwLCBNRVRIX05PQVJHUywgMH0s CisrICB7ImZyZWUiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF8xN2ZyZWUsIE1FVEhfTk9BUkdTLCAwfSwKKysgIHsiY2xvc2UiLCAo UHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF8xOWNsb3NlLCBNRVRIX05PQVJHUywgMH0sCisrICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5 Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRf MjNfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9LAorKyAgeyJfX3NldHN0YXRlX2N5 dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfMjVfX3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAorKyAgezAsIDAs IDAsIDB9CisrfTsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0gKiBkZWYgX19weXhf dW5waWNrbGVfRXZlbnQoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3Rh dGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0IF9f cHl4X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqLwor K3N0YXRpYyBQeVR5cGVPYmplY3QgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVu ZGVyQ29udGV4dCA9IHsKKysgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgwLCAwKQorKyAgInZpZGN1 dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0IiwgLyp0cF9uYW1lKi8KKysgIHNpemVvZihzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSwgLyp0cF9i YXNpY3NpemUqLworKyAgMCwgLyp0cF9pdGVtc2l6ZSovCisrICBfX3B5eF90cF9kZWFsbG9jXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LCAvKnRwX2RlYWxsb2MqLworKyAgI2lm IFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBiNAorKyAgMCwgLyp0cF9wcmludCovCisrICAjZW5k aWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0CisrICAwLCAvKnRwX3ZlY3Rv cmNhbGxfb2Zmc2V0Ki8KKysgICNlbmRpZgorKyAgMCwgLyp0cF9nZXRhdHRyKi8KKysgIDAsIC8q dHBfc2V0YXR0ciovCisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKysgIDAsIC8qdHBfY29t cGFyZSovCisrICAjZW5kaWYKKysgICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgIDAsIC8q dHBfYXNfYXN5bmMqLworKyAgI2VuZGlmCisrICAwLCAvKnRwX3JlcHIqLworKyAgMCwgLyp0cF9h c19udW1iZXIqLworKyAgMCwgLyp0cF9hc19zZXF1ZW5jZSovCisrICAwLCAvKnRwX2FzX21hcHBp bmcqLworKyAgMCwgLyp0cF9oYXNoKi8KKysgIDAsIC8qdHBfY2FsbCovCisrICAwLCAvKnRwX3N0 ciovCisrICAwLCAvKnRwX2dldGF0dHJvKi8KKysgIDAsIC8qdHBfc2V0YXR0cm8qLworKyAgMCwg Lyp0cF9hc19idWZmZXIqLworKyAgUHlfVFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9W RVJTSU9OX1RBR3xQeV9UUEZMQUdTX0NIRUNLVFlQRVN8UHlfVFBGTEFHU19IQVZFX05FV0JVRkZF UnxQeV9UUEZMQUdTX0JBU0VUWVBFfFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCisr ICAwLCAvKnRwX2RvYyovCisrICBfX3B5eF90cF90cmF2ZXJzZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyQ29udGV4dCwgLyp0cF90cmF2ZXJzZSovCisrICBfX3B5eF90cF9jbGVhcl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgLyp0cF9jbGVhciovCisrICAwLCAvKnRw X3JpY2hjb21wYXJlKi8KKysgIDAsIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworKyAgMCwgLyp0cF9p dGVyKi8KKysgIDAsIC8qdHBfaXRlcm5leHQqLworKyAgX19weXhfbWV0aG9kc185dmlkY3V0dGVy XzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgLyp0cF9tZXRob2RzKi8KKysgIDAsIC8qdHBfbWVt YmVycyovCisrICAwLCAvKnRwX2dldHNldCovCisrICAwLCAvKnRwX2Jhc2UqLworKyAgMCwgLyp0 cF9kaWN0Ki8KKysgIDAsIC8qdHBfZGVzY3JfZ2V0Ki8KKysgIDAsIC8qdHBfZGVzY3Jfc2V0Ki8K KysgIDAsIC8qdHBfZGljdG9mZnNldCovCisrICBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNSZW5kZXJDb250ZXh0XzFfX2luaXRfXywgLyp0cF9pbml0Ki8KKysgIDAsIC8qdHBfYWxs b2MqLworKyAgX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0 LCAvKnRwX25ldyovCisrICAwLCAvKnRwX2ZyZWUqLworKyAgMCwgLyp0cF9pc19nYyovCisrICAw LCAvKnRwX2Jhc2VzKi8KKysgIDAsIC8qdHBfbXJvKi8KKysgIDAsIC8qdHBfY2FjaGUqLworKyAg MCwgLyp0cF9zdWJjbGFzc2VzKi8KKysgIDAsIC8qdHBfd2Vha2xpc3QqLworKyAgMCwgLyp0cF9k ZWwqLworKyAgMCwgLyp0cF92ZXJzaW9uX3RhZyovCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0g MHgwMzA0MDBhMQorKyAgMCwgLyp0cF9maW5hbGl6ZSovCisrICAjZW5kaWYKKysgICNpZiBQWV9W RVJTSU9OX0hFWCA+PSAweDAzMDgwMGIxICYmICghQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZIHx8 IFBZUFlfVkVSU0lPTl9OVU0gPj0gMHgwNzAzMDgwMCkKKysgIDAsIC8qdHBfdmVjdG9yY2FsbCov CisrICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZF UlNJT05fSEVYIDwgMHgwMzA5MDAwMAorKyAgMCwgLyp0cF9wcmludCovCisrICAjZW5kaWYKKysg ICNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgJiYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA5 MDAwMAorKyAgMCwgLyp0cF9weXB5X2ZsYWdzKi8KKysgICNlbmRpZgorK307CisgCistICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X1hE RUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKKy0gIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX0V2ZW50Iiwg X19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9y ID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9Q aWNrbGVFcnJvcik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKy0g IF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7CistICByZXR1cm4gX19weXhfcjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dChQeVR5cGVPYmplY3QgKnQs IFB5T2JqZWN0ICphLCBQeU9iamVjdCAqaykgeworKyAgUHlPYmplY3QgKm8gPSBfX3B5eF90cF9u ZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQodCwgYSwgayk7CisrICBpZiAo dW5saWtlbHkoIW8pKSByZXR1cm4gMDsKKysgIHJldHVybiBvOworIH0KKyAKKy0vKiAiKHRyZWUg ZnJhZ21lbnQpIjoxMQorLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0 ZSg8RXZlbnQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCistICogICAgIHJldHVybiBfX3B5 eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoRXZlbnQg X19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhf cmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMV07IF9fcHl4X3Jlc3VsdC5pZCA9IF9fcHl4X3N0 YXRlWzJdOyBfX3B5eF9yZXN1bHQucmVwbHlfdXNlcmRhdGEgPSBfX3B5eF9zdGF0ZVszXQorLSAq ICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdf X2RpY3RfXycpOgorLSAqLworK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0W10gPSB7CisrICB7Il9fcmVkdWNl X2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x OU9wZW5HTFJlbmRlckNvbnRleHRfM19fcmVkdWNlX2N5dGhvbl9fLCBNRVRIX05PQVJHUywgMH0s CisrICB7Il9fc2V0c3RhdGVfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF81X19zZXRzdGF0ZV9jeXRob25f XywgTUVUSF9PLCAwfSwKKysgIHswLCAwLCAwLCAwfQorK307CisgCistc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0 X3N0YXRlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5 eF92X19fcHl4X3Jlc3VsdCwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKy0gIFB5 T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIGludCBfX3B5eF90XzI7CistICBlbnVt IG1wdl9ldmVudF9pZCBfX3B5eF90XzM7CistICBpbnQgX19weXhfdF80OworLSAgUHlfc3NpemVf dCBfX3B5eF90XzU7CistICBpbnQgX19weXhfdF82OworLSAgaW50IF9fcHl4X3RfNzsKKy0gIFB5 T2JqZWN0ICpfX3B5eF90XzggPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfOSA9IE5VTEw7 CistICBQeU9iamVjdCAqX19weXhfdF8xMCA9IE5VTEw7CistICBpbnQgX19weXhfbGluZW5vID0g MDsKKy0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9j bGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBpY2ts ZV9FdmVudF9fc2V0X3N0YXRlIiwgMCk7Cisrc3RhdGljIFB5VHlwZU9iamVjdCBfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0ID0geworKyAgUHlWYXJP YmplY3RfSEVBRF9JTklUKDAsIDApCisrICAidmlkY3V0dGVyLmxpYnMubXB2Lk9wZW5HTFJlbmRl ckNvbnRleHQiLCAvKnRwX25hbWUqLworKyAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQpLCAvKnRwX2Jhc2ljc2l6ZSovCisr ICAwLCAvKnRwX2l0ZW1zaXplKi8KKysgIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGli c18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBfZGVhbGxvYyovCisrICAjaWYgUFlfVkVSU0lPTl9I RVggPCAweDAzMDgwMGI0CisrICAwLCAvKnRwX3ByaW50Ki8KKysgICNlbmRpZgorKyAgI2lmIFBZ X1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQKKysgIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQq LworKyAgI2VuZGlmCisrICAwLCAvKnRwX2dldGF0dHIqLworKyAgMCwgLyp0cF9zZXRhdHRyKi8K KysgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworKyAgMCwgLyp0cF9jb21wYXJlKi8KKysgICNl bmRpZgorKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMworKyAgMCwgLyp0cF9hc19hc3luYyov CisrICAjZW5kaWYKKysgIDAsIC8qdHBfcmVwciovCisrICAwLCAvKnRwX2FzX251bWJlciovCisr ICAwLCAvKnRwX2FzX3NlcXVlbmNlKi8KKysgIDAsIC8qdHBfYXNfbWFwcGluZyovCisrICAwLCAv KnRwX2hhc2gqLworKyAgMCwgLyp0cF9jYWxsKi8KKysgIDAsIC8qdHBfc3RyKi8KKysgIDAsIC8q dHBfZ2V0YXR0cm8qLworKyAgMCwgLyp0cF9zZXRhdHRybyovCisrICAwLCAvKnRwX2FzX2J1ZmZl ciovCisrICBQeV9UUEZMQUdTX0RFRkFVTFR8UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5 X1RQRkxBR1NfQ0hFQ0tUWVBFU3xQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1Nf QkFTRVRZUEV8UHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KKysgIDAsIC8qdHBfZG9j Ki8KKysgIF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250 ZXh0LCAvKnRwX3RyYXZlcnNlKi8KKysgIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9SZW5kZXJDb250ZXh0LCAvKnRwX2NsZWFyKi8KKysgIDAsIC8qdHBfcmljaGNvbXBhcmUq LworKyAgMCwgLyp0cF93ZWFrbGlzdG9mZnNldCovCisrICAwLCAvKnRwX2l0ZXIqLworKyAgMCwg Lyp0cF9pdGVybmV4dCovCisrICBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9P cGVuR0xSZW5kZXJDb250ZXh0LCAvKnRwX21ldGhvZHMqLworKyAgMCwgLyp0cF9tZW1iZXJzKi8K KysgIDAsIC8qdHBfZ2V0c2V0Ki8KKysgIDAsIC8qdHBfYmFzZSovCisrICAwLCAvKnRwX2RpY3Qq LworKyAgMCwgLyp0cF9kZXNjcl9nZXQqLworKyAgMCwgLyp0cF9kZXNjcl9zZXQqLworKyAgMCwg Lyp0cF9kaWN0b2Zmc2V0Ki8KKysgIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9w ZW5HTFJlbmRlckNvbnRleHRfMV9faW5pdF9fLCAvKnRwX2luaXQqLworKyAgMCwgLyp0cF9hbGxv YyovCisrICBfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNv bnRleHQsIC8qdHBfbmV3Ki8KKysgIDAsIC8qdHBfZnJlZSovCisrICAwLCAvKnRwX2lzX2djKi8K KysgIDAsIC8qdHBfYmFzZXMqLworKyAgMCwgLyp0cF9tcm8qLworKyAgMCwgLyp0cF9jYWNoZSov CisrICAwLCAvKnRwX3N1YmNsYXNzZXMqLworKyAgMCwgLyp0cF93ZWFrbGlzdCovCisrICAwLCAv KnRwX2RlbCovCisrICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KKysgICNpZiBQWV9WRVJTSU9OX0hF WCA+PSAweDAzMDQwMGExCisrICAwLCAvKnRwX2ZpbmFsaXplKi8KKysgICNlbmRpZgorKyAgI2lm IFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEgJiYgKCFDWVRIT05fQ09NUElMSU5HX0lOX1BZ UFkgfHwgUFlQWV9WRVJTSU9OX05VTSA+PSAweDA3MDMwODAwKQorKyAgMCwgLyp0cF92ZWN0b3Jj YWxsKi8KKysgICNlbmRpZgorKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQgJiYg UFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAwCisrICAwLCAvKnRwX3ByaW50Ki8KKysgICNlbmRp ZgorKyAgI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fUFlQWSAmJiBQWV9WRVJTSU9OX0hFWCA+PSAw eDAzMDkwMDAwCisrICAwLCAvKnRwX3B5cHlfZmxhZ3MqLworKyAgI2VuZGlmCisrfTsKKyAKKy0g IC8qICIodHJlZSBmcmFnbWVudCkiOjEyCistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0g KiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoRXZlbnQgX19weXhfcmVzdWx0 LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CistICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhf c3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1 bHQuaWQgPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnJlcGx5X3VzZXJkYXRhID0gX19w eXhfc3RhdGVbM10gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBpZiBsZW4o X19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgor LSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkK Ky0gKi8KKy0gIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7 CistICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVj dCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOworLSAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wx X2Vycm9yKQorLSAgfQorLSAgX19weXhfdF8xID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5 eF92X19fcHl4X3N0YXRlLCAwLCBsb25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAs IDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19w eXhfdF8xKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+ZGF0YSk7Cist ICBfX1B5eF9ERUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPmRhdGEpOworLSAgX19weXhfdl9f X3B5eF9yZXN1bHQtPmRhdGEgPSBfX3B5eF90XzE7CistICBfX3B5eF90XzEgPSAwOworLSAgaWYg KHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKy0gICAgUHlFcnJf U2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBzdWJz Y3JpcHRhYmxlIik7CistICAgIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCistICB9 CistICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhfc3Rh dGUsIDEsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfQXNfaW50 KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09IChpbnQpLTEpICYmIFB5RXJy X09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX3B5eF92X19fcHl4X3Jlc3Vs dC0+ZXJyb3IgPSBfX3B5eF90XzI7CistICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0 ZSA9PSBQeV9Ob25lKSkgeworLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAi J05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsKKy0gICAgX19QWVhfRVJS KDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKy0gIH0KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0 ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMiwgbG9uZywgMSwgX19QeXhfUHlJbnRf RnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBf X3B5eF90XzMgPSAoKGVudW0gbXB2X2V2ZW50X2lkKV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9l dmVudF9pZChfX3B5eF90XzEpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZ WF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+aWQgPSBfX3B5eF90XzM7 CistICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAg ICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMg bm90IHN1YnNjcmlwdGFibGUiKTsKKy0gICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJv cikKKy0gIH0KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9f X3B5eF9zdGF0ZSwgMywgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Rf MSk7CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnJlcGx5X3VzZXJkYXRh KTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+cmVwbHlfdXNlcmRhdGEp OworLSAgX19weXhfdl9fX3B5eF9yZXN1bHQtPnJlcGx5X3VzZXJkYXRhID0gX19weXhfdF8xOwor LSAgX19weXhfdF8xID0gMDsKKytzdGF0aWMgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICpfX3B5eF9mcmVlbGlzdF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzWzhdOworK3N0YXRp YyBpbnQgX19weXhfZnJlZWNvdW50Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9z dHJ1Y3RfX19lcnJvcnMgPSAwOworIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKKy0gKiBj ZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoRXZlbnQgX19weXhfcmVzdWx0LCB0 dXBsZSBfX3B5eF9zdGF0ZSk6CistICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3Rh dGVbMF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQu aWQgPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnJlcGx5X3VzZXJkYXRhID0gX19weXhf c3RhdGVbM10KKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19w eXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkKKy0g Ki8KKy0gIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7Cist ICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJvYmplY3Qgb2YgdHlwZSAnTm9u ZVR5cGUnIGhhcyBubyBsZW4oKSIpOworLSAgICBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vy cm9yKQorLSAgfQorLSAgX19weXhfdF81ID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF92X19fcHl4 X3N0YXRlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNSA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19Q WVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfNiA9ICgoX19weXhfdF81 ID4gNCkgIT0gMCk7CistICBpZiAoX19weXhfdF82KSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9y cyhQeVR5cGVPYmplY3QgKnQsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmEsIENZVEhPTl9VTlVT RUQgUHlPYmplY3QgKmspIHsKKysgIFB5T2JqZWN0ICpvOworKyAgaWYgKENZVEhPTl9DT01QSUxJ TkdfSU5fQ1BZVEhPTiAmJiBsaWtlbHkoKF9fcHl4X2ZyZWVjb3VudF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzID4gMCkgJiAodC0+dHBfYmFzaWNzaXpl ID09IHNpemVvZihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9z Y29wZV9zdHJ1Y3RfX19lcnJvcnMpKSkpIHsKKysgICAgbyA9IChQeU9iamVjdCopX19weXhfZnJl ZWxpc3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9yc1st LV9fcHl4X2ZyZWVjb3VudF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0 X19fZXJyb3JzXTsKKysgICAgbWVtc2V0KG8sIDAsIHNpemVvZihzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMpKTsKKysgICAg KHZvaWQpIFB5T2JqZWN0X0lOSVQobywgdCk7CisrICAgIFB5T2JqZWN0X0dDX1RyYWNrKG8pOwor ICAgfSBlbHNlIHsKKy0gICAgX19weXhfdF80ID0gX19weXhfdF82OworLSAgICBnb3RvIF9fcHl4 X0w0X2Jvb2xfYmlub3BfZG9uZTsKKysgICAgbyA9ICgqdC0+dHBfYWxsb2MpKHQsIDApOworKyAg ICBpZiAodW5saWtlbHkoIW8pKSByZXR1cm4gMDsKKyAgIH0KKy0gIF9fcHl4X3RfNiA9IF9fUHl4 X0hhc0F0dHIoKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfcmVzdWx0KSwgX19weXhfbl9zX2Rp Y3QpOyBpZiAodW5saWtlbHkoX19weXhfdF82ID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigxLCAx MywgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90XzcgPSAoX19weXhfdF82ICE9IDApOworLSAg X19weXhfdF80ID0gX19weXhfdF83OworLSAgX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKKy0g IGlmIChfX3B5eF90XzQpIHsKKy0KKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTQKKy0gKiAg ICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LmVycm9y ID0gX19weXhfc3RhdGVbMV07IF9fcHl4X3Jlc3VsdC5pZCA9IF9fcHl4X3N0YXRlWzJdOyBfX3B5 eF9yZXN1bHQucmVwbHlfdXNlcmRhdGEgPSBfX3B5eF9zdGF0ZVszXQorLSAqICAgICBpZiBsZW4o X19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgor LSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqLworLSAgICBfX3B5eF90XzggPSBfX1B5 eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4X3Jlc3VsdCks IF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBfX1BZWF9FUlIoMSwg MTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF84KTsKKy0gICAg X19weXhfdF85ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzgsIF9fcHl4X25f c191cGRhdGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlYX0VSUigxLCAxNCwgX19w eXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzkpOworLSAgICBfX1B5eF9E RUNSRUYoX19weXhfdF84KTsgX19weXhfdF84ID0gMDsKKy0gICAgaWYgKHVubGlrZWx5KF9fcHl4 X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKy0gICAgICBQeUVycl9TZXRTdHJpbmcoUHlF eGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsK Ky0gICAgICBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgICB9CistICAgIF9f cHl4X3RfOCA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgNCwg bG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzgpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF84KTsKKy0gICAgX19weXhfdF8xMCA9IE5VTEw7CistICAgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfOSkpKSB7 CistICAgICAgX19weXhfdF8xMCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfOSk7CistICAg ICAgaWYgKGxpa2VseShfX3B5eF90XzEwKSkgeworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9u ID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfOSk7CistICAgICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF8xMCk7CistICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAg ICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzksIGZ1bmN0aW9uKTsKKy0gICAgICB9CistICAg IH0KKy0gICAgX19weXhfdF8xID0gKF9fcHl4X3RfMTApID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfOSwgX19weXhfdF8xMCwgX19weXhfdF84KSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF85LCBfX3B5eF90XzgpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMTApOyBfX3B5eF90XzEwID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfOCk7IF9f cHl4X3RfOCA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEs IDE0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90XzkgPSAwOworLSAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIHJldHVybiBvOworK30KKyAKKy0gICAg LyogIih0cmVlIGZyYWdtZW50KSI6MTMKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19z ZXRfc3RhdGUoRXZlbnQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CistICogICAg IF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9 IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQuaWQgPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhf cmVzdWx0LnJlcGx5X3VzZXJkYXRhID0gX19weXhfc3RhdGVbM10KKy0gKiAgICAgaWYgbGVuKF9f cHl4X3N0YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGlj dF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkKKy0gKi8KKytzdGF0aWMgdm9pZCBfX3B5eF90cF9k ZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMo UHlPYmplY3QgKm8pIHsKKysgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKilvOworKyAgUHlP YmplY3RfR0NfVW5UcmFjayhvKTsKKysgIFB5X0NMRUFSKHAtPl9fcHl4X3ZfZm4pOworKyAgaWYg KENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTiAmJiAoKF9fcHl4X2ZyZWVjb3VudF85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzIDwgOCkgJiAoUHlfVFlQ RShvKS0+dHBfYmFzaWNzaXplID09IHNpemVvZihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMpKSkpIHsKKysgICAgX19weXhf ZnJlZWxpc3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9y c1tfX3B5eF9mcmVlY291bnRfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVj dF9fX2Vycm9ycysrXSA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICopbyk7CisrICB9IGVsc2UgeworKyAgICAoKlB5 X1RZUEUobyktPnRwX2ZyZWUpKG8pOworICAgfQorK30KKyAKKy0gIC8qICIodHJlZSBmcmFnbWVu dCkiOjExCistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKDxFdmVu dD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3Vs dAorLSAqIGNkZWYgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShFdmVudCBfX3B5eF9y ZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQu ZXJyb3IgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LmlkID0gX19weXhfc3RhdGVbMl07 IF9fcHl4X3Jlc3VsdC5yZXBseV91c2VyZGF0YSA9IF9fcHl4X3N0YXRlWzNdCistICogICAgIGlm IGxlbihfX3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9f Jyk6CistICovCistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQ eV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworLSAgX19w eXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19QeXhfWERF Q1JFRihfX3B5eF90XzgpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzkpOworLSAgX19QeXhf WERFQ1JFRihfX3B5eF90XzEwKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxp YnMubXB2Ll9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUiLCBfX3B5eF9jbGluZW5vLCBf X3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAwOworLSAgX19weXhf TDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworK3N0YXRpYyBpbnQgX19weXhfdHBfdHJh dmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyhQ eU9iamVjdCAqbywgdmlzaXRwcm9jIHYsIHZvaWQgKmEpIHsKKysgIGludCBlOworKyAgc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJy b3JzICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Nj b3BlX3N0cnVjdF9fX2Vycm9ycyAqKW87CisrICBpZiAocC0+X19weXhfdl9mbikgeworKyAgICBl ID0gKCp2KShwLT5fX3B5eF92X2ZuLCBhKTsgaWYgKGUpIHJldHVybiBlOworKyAgfQorKyAgcmV0 dXJuIDA7CisgfQorIAorLS8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0gKiBkZWYgX19weXhfdW5w aWNrbGVfUmVuZGVyRnJhbWVJbmZvKF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9f cHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBjZGVmIG9i amVjdCBfX3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQK Ky0gKi8KKy0KKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE3X19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZv KFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9f cHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTdfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8gPSB7Il9f cHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1 bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xN19fcHl4 X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9 OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE3X19w eXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVj dCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKy0gIFB5T2JqZWN0ICpfX3B5 eF92X19fcHl4X3R5cGUgPSAwOworLSAgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtOworLSAg UHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUgPSAwOworLSAgaW50IF9fcHl4X2xpbmVubyA9 IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhf Y2xpbmVubyA9IDA7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlj a2xlX1JlbmRlckZyYW1lSW5mbyAod3JhcHBlcikiLCAwKTsKKy0gIHsKKy0gICAgc3RhdGljIFB5 T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfcHl4X3R5cGUsJl9fcHl4 X25fc19weXhfY2hlY2tzdW0sJl9fcHl4X25fc19weXhfc3RhdGUsMH07CistICAgIFB5T2JqZWN0 KiB2YWx1ZXNbM10gPSB7MCwwLDB9OworLSAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsK Ky0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3Nf YXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CistICAgICAgc3dpdGNoIChwb3Nf YXJncykgeworLSAgICAgICAgY2FzZSAgMzogdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShf X3B5eF9hcmdzLCAyKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNh c2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CistICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQ eVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOworLSAgICAgICAgY2FzZSAgMDogYnJlYWs7CistICAgICAgICBkZWZhdWx0OiBnb3RvIF9f cHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICAgIH0KKy0gICAgICBrd19hcmdzID0gUHlEaWN0 X1NpemUoX19weXhfa3dkcyk7CistICAgICAgc3dpdGNoIChwb3NfYXJncykgeworLSAgICAgICAg Y2FzZSAgMDoKKy0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5RGljdF9H ZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhfdHlwZSkpICE9IDApKSBrd19hcmdz LS07CistICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAg ICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAxOgorLSAgICAgICAgaWYgKGxp a2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19w eXhfbl9zX3B5eF9jaGVja3N1bSkpICE9IDApKSBrd19hcmdzLS07CistICAgICAgICBlbHNlIHsK Ky0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3VucGlja2xlX1Jl bmRlckZyYW1lSW5mbyIsIDEsIDMsIDMsIDEpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJy b3IpCistICAgICAgICB9CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBj YXNlICAyOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzJdID0gX19QeXhfUHlEaWN0X0dl dEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF9zdGF0ZSkpICE9IDApKSBrd19hcmdz LS07CistICAgICAgICBlbHNlIHsKKy0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFs aWQoIl9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyIsIDEsIDMsIDMsIDIpOyBfX1BZWF9F UlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCistICAgICAgICB9CistICAgICAgfQorLSAgICAgIGlm ICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9Q YXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFs dWVzLCBwb3NfYXJncywgIl9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyIpIDwgMCkpIF9f UFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKy0gICAgICB9CistICAgIH0gZWxzZSBpZiAo UHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAzKSB7CistICAgICAgZ290byBfX3B5eF9M NV9hcmd0dXBsZV9lcnJvcjsKKy0gICAgfSBlbHNlIHsKKy0gICAgICB2YWx1ZXNbMF0gPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworLSAgICAgIHZhbHVlc1sxXSA9IFB5VHVwbGVf R0VUX0lURU0oX19weXhfYXJncywgMSk7CistICAgICAgdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRf SVRFTShfX3B5eF9hcmdzLCAyKTsKKy0gICAgfQorLSAgICBfX3B5eF92X19fcHl4X3R5cGUgPSB2 YWx1ZXNbMF07CistICAgIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gPSBfX1B5eF9QeUludF9Bc19s b25nKHZhbHVlc1sxXSk7IGlmICh1bmxpa2VseSgoX19weXhfdl9fX3B5eF9jaGVja3N1bSA9PSAo bG9uZyktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19l cnJvcikKKy0gICAgX19weXhfdl9fX3B5eF9zdGF0ZSA9IHZhbHVlc1syXTsKKy0gIH0KKy0gIGdv dG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CistICBfX3B5eF9MNV9hcmd0dXBs ZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVf UmVuZGVyRnJhbWVJbmZvIiwgMSwgMywgMywgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7 IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKy0gIF9fcHl4X0wzX2Vycm9yOjsKKy0g IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX1Jl bmRlckZyYW1lSW5mbyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gTlVMTDsK Ky0gIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3IgPSBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUlu Zm8oX19weXhfc2VsZiwgX19weXhfdl9fX3B5eF90eXBlLCBfX3B5eF92X19fcHl4X2NoZWNrc3Vt LCBfX3B5eF92X19fcHl4X3N0YXRlKTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor LSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKytz dGF0aWMgaW50IF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29w ZV9zdHJ1Y3RfX19lcnJvcnMoUHlPYmplY3QgKm8pIHsKKysgIFB5T2JqZWN0KiB0bXA7CisrICBz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3Rf X19lcnJvcnMgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19w eXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICopbzsKKysgIHRtcCA9ICgoUHlPYmplY3QqKXAtPl9f cHl4X3ZfZm4pOworKyAgcC0+X19weXhfdl9mbiA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25l KTsKKysgIFB5X1hERUNSRUYodG1wKTsKKysgIHJldHVybiAwOworIH0KKyAKKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNl9fcHl4X3VucGlja2xlX1Jl bmRlckZyYW1lSW5mbyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVj dCAqX19weXhfdl9fX3B5eF90eXBlLCBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIFB5T2Jq ZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CistICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9Q aWNrbGVFcnJvciA9IDA7CistICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9yZXN1bHQgPSAwOwor LSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlv bnMKKy0gIGludCBfX3B5eF90XzE7CistICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKy0g IFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5V TEw7CistICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKy0gIGludCBfX3B5eF90XzY7Cist ICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8iLCAwKTsKKy0KKy0gIC8qICIo dHJlZSBmcmFnbWVudCkiOjQKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IK Ky0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9fcHl4X2NoZWNr c3VtICE9IDB4ZDQxZDhjZDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCist ICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3Vt cyAoJXMgdnMgMHhkNDFkOGNkID0gKCkpIiAlIF9fcHl4X2NoZWNrc3VtKQorLSAqLworLSAgX19w eXhfdF8xID0gKChfX3B5eF92X19fcHl4X2NoZWNrc3VtICE9IDB4ZDQxZDhjZCkgIT0gMCk7Cist ICBpZiAoX19weXhfdF8xKSB7CistCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjUKKy0gKiAg ICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9 IDB4ZDQxZDhjZDoKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBh cyBfX3B5eF9QaWNrbGVFcnJvciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMg dnMgMHhkNDFkOGNkID0gKCkpIiAlIF9fcHl4X2NoZWNrc3VtKQorLSAqICAgICBfX3B5eF9yZXN1 bHQgPSBSZW5kZXJGcmFtZUluZm8uX19uZXdfXyhfX3B5eF90eXBlKQorLSAqLworLSAgICBfX3B5 eF90XzIgPSBQeUxpc3RfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VS UigxLCA1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Cist ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9uX3NfUGlja2xlRXJyb3IpOworLSAgICBfX1B5eF9HSVZF UkVGKF9fcHl4X25fc19QaWNrbGVFcnJvcik7CistICAgIFB5TGlzdF9TRVRfSVRFTShfX3B5eF90 XzIsIDAsIF9fcHl4X25fc19QaWNrbGVFcnJvcik7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X0lt cG9ydChfX3B5eF9uX3NfcGlja2xlLCBfX3B5eF90XzIsIC0xKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzMpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzMpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKKy0gICAgX19weXhfdF8yID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzMsIF9fcHl4X25f c19QaWNrbGVFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDUs IF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19Q eXhfSU5DUkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IgPSBf X3B5eF90XzI7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor LSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKytzdGF0aWMgUHlU eXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0 cnVjdF9fX2Vycm9ycyA9IHsKKysgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgwLCAwKQorKyAgInZp ZGN1dHRlci5saWJzLm1wdi5fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMiLCAvKnRwX25hbWUq LworKyAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4 X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyksIC8qdHBfYmFzaWNzaXplKi8KKysgIDAsIC8qdHBfaXRl bXNpemUqLworKyAgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhf c2NvcGVfc3RydWN0X19fZXJyb3JzLCAvKnRwX2RlYWxsb2MqLworKyAgI2lmIFBZX1ZFUlNJT05f SEVYIDwgMHgwMzA4MDBiNAorKyAgMCwgLyp0cF9wcmludCovCisrICAjZW5kaWYKKysgICNpZiBQ WV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0CisrICAwLCAvKnRwX3ZlY3RvcmNhbGxfb2Zmc2V0 Ki8KKysgICNlbmRpZgorKyAgMCwgLyp0cF9nZXRhdHRyKi8KKysgIDAsIC8qdHBfc2V0YXR0ciov CisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKysgIDAsIC8qdHBfY29tcGFyZSovCisrICAj ZW5kaWYKKysgICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgIDAsIC8qdHBfYXNfYXN5bmMq LworKyAgI2VuZGlmCisrICAwLCAvKnRwX3JlcHIqLworKyAgMCwgLyp0cF9hc19udW1iZXIqLwor KyAgMCwgLyp0cF9hc19zZXF1ZW5jZSovCisrICAwLCAvKnRwX2FzX21hcHBpbmcqLworKyAgMCwg Lyp0cF9oYXNoKi8KKysgIDAsIC8qdHBfY2FsbCovCisrICAwLCAvKnRwX3N0ciovCisrICAwLCAv KnRwX2dldGF0dHJvKi8KKysgIDAsIC8qdHBfc2V0YXR0cm8qLworKyAgMCwgLyp0cF9hc19idWZm ZXIqLworKyAgUHlfVFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBR3xQ eV9UUEZMQUdTX0NIRUNLVFlQRVN8UHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUnxQeV9UUEZMQUdT X0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworKyAgMCwgLyp0cF9kb2MqLworKyAgX19weXhfdHBfdHJh dmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycywg Lyp0cF90cmF2ZXJzZSovCisrICBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzLCAvKnRwX2NsZWFyKi8KKysgIDAsIC8qdHBfcmlj aGNvbXBhcmUqLworKyAgMCwgLyp0cF93ZWFrbGlzdG9mZnNldCovCisrICAwLCAvKnRwX2l0ZXIq LworKyAgMCwgLyp0cF9pdGVybmV4dCovCisrICAwLCAvKnRwX21ldGhvZHMqLworKyAgMCwgLyp0 cF9tZW1iZXJzKi8KKysgIDAsIC8qdHBfZ2V0c2V0Ki8KKysgIDAsIC8qdHBfYmFzZSovCisrICAw LCAvKnRwX2RpY3QqLworKyAgMCwgLyp0cF9kZXNjcl9nZXQqLworKyAgMCwgLyp0cF9kZXNjcl9z ZXQqLworKyAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8KKysgIDAsIC8qdHBfaW5pdCovCisrICAwLCAv KnRwX2FsbG9jKi8KKysgIF9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhf c2NvcGVfc3RydWN0X19fZXJyb3JzLCAvKnRwX25ldyovCisrICAwLCAvKnRwX2ZyZWUqLworKyAg MCwgLyp0cF9pc19nYyovCisrICAwLCAvKnRwX2Jhc2VzKi8KKysgIDAsIC8qdHBfbXJvKi8KKysg IDAsIC8qdHBfY2FjaGUqLworKyAgMCwgLyp0cF9zdWJjbGFzc2VzKi8KKysgIDAsIC8qdHBfd2Vh a2xpc3QqLworKyAgMCwgLyp0cF9kZWwqLworKyAgMCwgLyp0cF92ZXJzaW9uX3RhZyovCisrICAj aWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA0MDBhMQorKyAgMCwgLyp0cF9maW5hbGl6ZSovCisr ICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGIxICYmICghQ1lUSE9O X0NPTVBJTElOR19JTl9QWVBZIHx8IFBZUFlfVkVSU0lPTl9OVU0gPj0gMHgwNzAzMDgwMCkKKysg IDAsIC8qdHBfdmVjdG9yY2FsbCovCisrICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+ PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAorKyAgMCwgLyp0cF9w cmludCovCisrICAjZW5kaWYKKysgICNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgJiYgUFlf VkVSU0lPTl9IRVggPj0gMHgwMzA5MDAwMAorKyAgMCwgLyp0cF9weXB5X2ZsYWdzKi8KKysgICNl bmRpZgorK307CisgCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjYKKy0gKiAgICAgaWYgX19w eXhfY2hlY2tzdW0gIT0gMHhkNDFkOGNkOgorLSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0 IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCistICogICAgICAgICByYWlzZSBfX3B5 eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhkNDFkOGNkID0g KCkpIiAlIF9fcHl4X2NoZWNrc3VtKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgIF9fcHl4X3Jlc3VsdCA9IFJlbmRlckZyYW1lSW5mby5fX25ld19fKF9fcHl4X3R5cGUpCist ICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorLSAqLworLSAgICBfX3B5eF90XzIg PSBfX1B5eF9QeUludF9Gcm9tX2xvbmcoX19weXhfdl9fX3B5eF9jaGVja3N1bSk7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF80ID0gX19QeXhfUHlTdHJpbmdf Rm9ybWF0KF9fcHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4ZDQsIF9fcHl4 X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X19f cHl4X1BpY2tsZUVycm9yKTsKKy0gICAgX19weXhfdF8yID0gX19weXhfdl9fX3B5eF9QaWNrbGVF cnJvcjsgX19weXhfdF81ID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAm JiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICAgIF9fcHl4X3Rf NSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgICAgaWYgKGxpa2VseShfX3B5 eF90XzUpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVO Q1RJT04oX19weXhfdF8yKTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworLSAg ICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQo X19weXhfdF8yLCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4X3RfMyA9 IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhf dF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9f cHl4X3RfNCk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsK Ky0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAgIGlmICh1 bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMywgMCwgMCwgMCk7Cist ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICBfX1BZWF9F UlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21ldGhv ZHNbXSA9IHsKKysgIHswLCAwLCAwLCAwfQorK307CisgCistICAgIC8qICIodHJlZSBmcmFnbWVu dCkiOjQKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgY2Rl ZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4ZDQx ZDhjZDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZnJvbSBwaWNr bGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCistICogICAgICAgICBy YWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhk NDFkOGNkID0gKCkpIiAlIF9fcHl4X2NoZWNrc3VtKQorLSAqLworLSAgfQorKyNpZiBQWV9NQUpP Ul9WRVJTSU9OID49IDMKKysjaWYgQ1lUSE9OX1BFUDQ4OV9NVUxUSV9QSEFTRV9JTklUCisrc3Rh dGljIFB5T2JqZWN0KiBfX3B5eF9weW1vZF9jcmVhdGUoUHlPYmplY3QgKnNwZWMsIFB5TW9kdWxl RGVmICpkZWYpOyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9fcHl4X3B5bW9kX2V4ZWNfbXB2KFB5 T2JqZWN0KiBtb2R1bGUpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlNb2R1bGVEZWZfU2xvdCBfX3B5 eF9tb2R1bGVkZWZfc2xvdHNbXSA9IHsKKysgIHtQeV9tb2RfY3JlYXRlLCAodm9pZCopX19weXhf cHltb2RfY3JlYXRlfSwKKysgIHtQeV9tb2RfZXhlYywgKHZvaWQqKV9fcHl4X3B5bW9kX2V4ZWNf bXB2fSwKKysgIHswLCBOVUxMfQorK307CisrI2VuZGlmCisgCistICAvKiAiKHRyZWUgZnJhZ21l bnQpIjo3CistICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19w eXhfUGlja2xlRXJyb3IKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNv bXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGQ0MWQ4Y2QgPSAoKSkiICUgX19weXhfY2hlY2tz dW0pCistICogICAgIF9fcHl4X3Jlc3VsdCA9IFJlbmRlckZyYW1lSW5mby5fX25ld19fKF9fcHl4 X3R5cGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgaWYgX19weXhfc3Rh dGUgaXMgbm90IE5vbmU6CistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUlu Zm9fX3NldF9zdGF0ZSg8UmVuZGVyRnJhbWVJbmZvPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRl KQorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2Jq ZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyks IF9fcHl4X25fc19uZXcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA3 LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhf dF80ID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0 aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9T RUxGKF9fcHl4X3RfMik7CistICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgeworLSAgICAgIFB5 T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworLSAg ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlv bik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKy0gICAg fQorLSAgfQorLSAgX19weXhfdF8zID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3ZfX19weXhfdHlwZSkgOiBfX1B5eF9Q eU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9fX3B5eF90eXBlKTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKKy0gIF9fcHl4X3ZfX19weXhfcmVzdWx0ID0gX19weXhfdF8zOworLSAgX19weXhfdF8zID0g MDsKKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4 X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGQ0MWQ4Y2QgPSAo KSkiICUgX19weXhfY2hlY2tzdW0pCistICogICAgIF9fcHl4X3Jlc3VsdCA9IFJlbmRlckZyYW1l SW5mby5fX25ld19fKF9fcHl4X3R5cGUpCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBO b25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBfX3B5eF91bnBp Y2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZSg8UmVuZGVyRnJhbWVJbmZvPiBfX3B5eF9y ZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CistICovCist ICBfX3B5eF90XzEgPSAoX19weXhfdl9fX3B5eF9zdGF0ZSAhPSBQeV9Ob25lKTsKKy0gIF9fcHl4 X3RfNiA9IChfX3B5eF90XzEgIT0gMCk7CistICBpZiAoX19weXhfdF82KSB7CistCistICAgIC8q ICIodHJlZSBmcmFnbWVudCkiOjkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gUmVuZGVyRnJhbWVJ bmZvLl9fbmV3X18oX19weXhfdHlwZSkKKy0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5v bmU6CistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0 ZSg8UmVuZGVyRnJhbWVJbmZvPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVm IF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKFJlbmRlckZyYW1lSW5m byBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKi8KKy0gICAgaWYgKCEobGlr ZWx5KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X19fcHl4X3N0YXRlKSl8fCgoX19weXhfdl9f X3B5eF9zdGF0ZSkgPT0gUHlfTm9uZSl8fChQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAi RXhwZWN0ZWQgJS4xNnMsIGdvdCAlLjIwMHMiLCAidHVwbGUiLCBQeV9UWVBFKF9fcHl4X3ZfX19w eXhfc3RhdGUpLT50cF9uYW1lKSwgMCkpKSBfX1BZWF9FUlIoMSwgOSwgX19weXhfTDFfZXJyb3Ip CistICAgIF9fcHl4X3RfMyA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Vu cGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICopX19weXhfdl9fX3B5eF9yZXN1bHQp LCAoKFB5T2JqZWN0KilfX3B5eF92X19fcHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8zKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7 CistCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4 X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGQ0MWQ4Y2QgPSAo KSkiICUgX19weXhfY2hlY2tzdW0pCistICogICAgIF9fcHl4X3Jlc3VsdCA9IFJlbmRlckZyYW1l SW5mby5fX25ld19fKF9fcHl4X3R5cGUpCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBO b25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBfX3B5eF91bnBp Y2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZSg8UmVuZGVyRnJhbWVJbmZvPiBfX3B5eF9y ZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CistICovCist ICB9CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMAorLSAqICAgICBpZiBfX3B5eF9zdGF0 ZSBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5m b19fc2V0X3N0YXRlKDxSZW5kZXJGcmFtZUluZm8+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUp CistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqIGNkZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoUmVu ZGVyRnJhbWVJbmZvIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgorLSAqICAgICBp ZiBsZW4oX19weXhfc3RhdGUpID4gMCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3Rf XycpOgorLSAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4X0lOQ1JFRihf X3B5eF92X19fcHl4X3Jlc3VsdCk7CistICBfX3B5eF9yID0gX19weXhfdl9fX3B5eF9yZXN1bHQ7 CistICBnb3RvIF9fcHl4X0wwOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MQorLSAqIGRl ZiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8oX19weXhfdHlwZSwgbG9uZyBfX3B5eF9j aGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9f cHl4X3Jlc3VsdAorLSAqLworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5 eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CistICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJz Lm1wdi5fX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8iLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworLSAgX19weXhf TDA6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQpOworLSAgX19QeXhfWEdJVkVSRUYoX19w eXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5 eF9yOworLX0KKy0KKy0vKiAiKHRyZWUgZnJhZ21lbnQpIjoxMQorLSAqICAgICAgICAgX19weXhf dW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoPFJlbmRlckZyYW1lSW5mbz4gX19w eXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorLSAq IGNkZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoUmVuZGVyRnJh bWVJbmZvIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAwIGFuZCBoYXNhdHRy KF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CistICogICAgICAgICBfX3B5eF9yZXN1bHQuX19k aWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzBdKQorLSAqLworLQorLXN0YXRpYyBQeU9iamVjdCAq X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJ bmZvX19zZXRfc3RhdGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVu ZGVyRnJhbWVJbmZvICpfX3B5eF92X19fcHl4X3Jlc3VsdCwgUHlPYmplY3QgKl9fcHl4X3ZfX19w eXhfc3RhdGUpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCistICBpbnQgX19weXhfdF8xOworLSAgUHlfc3NpemVfdCBfX3B5eF90 XzI7CistICBpbnQgX19weXhfdF8zOworLSAgaW50IF9fcHl4X3RfNDsKKy0gIFB5T2JqZWN0ICpf X3B5eF90XzUgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7CistICBQeU9i amVjdCAqX19weXhfdF83ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzggPSBOVUxMOwor LSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9 IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUiLCAwKTsK Ky0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEyCistICogICAgIHJldHVybiBfX3B5eF9yZXN1 bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKFJl bmRlckZyYW1lSW5mbyBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAg aWYgbGVuKF9fcHl4X3N0YXRlKSA+IDAgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0 X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgX19weXhfcmVz dWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVswXSkKKy0gKi8KKy0gIGlmICh1bmxpa2Vs eShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7CistICAgIFB5RXJyX1NldFN0cmlu ZyhQeUV4Y19UeXBlRXJyb3IsICJvYmplY3Qgb2YgdHlwZSAnTm9uZVR5cGUnIGhhcyBubyBsZW4o KSIpOworLSAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgfQorLSAgX19w eXhfdF8yID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF92X19fcHl4X3N0YXRlKTsgaWYgKHVubGlr ZWx5KF9fcHl4X3RfMiA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfMyA9ICgoX19weXhfdF8yID4gMCkgIT0gMCk7CistICBp ZiAoX19weXhfdF8zKSB7CistICB9IGVsc2UgeworLSAgICBfX3B5eF90XzEgPSBfX3B5eF90XzM7 CistICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworLSAgfQorLSAgX19weXhfdF8z ID0gX19QeXhfSGFzQXR0cigoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5 eF9uX3NfZGljdCk7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPT0gKChpbnQpLTEpKSkgX19QWVhf RVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfNCA9IChfX3B5eF90XzMgIT0g MCk7CistICBfX3B5eF90XzEgPSBfX3B5eF90XzQ7CistICBfX3B5eF9MNF9ib29sX2Jpbm9wX2Rv bmU6OworLSAgaWYgKF9fcHl4X3RfMSkgeworLQorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox MworLSAqIGNkZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoUmVu ZGVyRnJhbWVJbmZvIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgorLSAqICAgICBp ZiBsZW4oX19weXhfc3RhdGUpID4gMCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3Rf XycpOgorLSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0 ZVswXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqLworLSAgICBfX3B5eF90XzYg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4X3Jl c3VsdCksIF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK Ky0gICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzYsIF9f cHl4X25fc191cGRhdGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigxLCAx MywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgICBf X1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gICAgaWYgKHVubGlrZWx5 KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKy0gICAgICBQeUVycl9TZXRTdHJp bmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFi bGUiKTsKKy0gICAgICBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICB9Cist ICAgIF9fcHl4X3RfNiA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0 ZSwgMCwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgX19weXhfdF84ID0gTlVMTDsKKy0gICAgaWYg KENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF83 KSkpIHsKKy0gICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzcpOwor LSAgICAgIGlmIChsaWtlbHkoX19weXhfdF84KSkgeworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0 aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNyk7CistICAgICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF84KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAg ICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNywgZnVuY3Rpb24pOworLSAgICAgIH0KKy0g ICAgfQorLSAgICBfX3B5eF90XzUgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwy QXJncyhfX3B5eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF83LCBfX3B5eF90XzYpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfOCk7IF9fcHl4X3RfOCA9IDA7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5 eF90XzYgPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigxLCAx MywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworLSAgICBf X1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CistCistICAgIC8qICIodHJlZSBmcmFnbWVudCki OjEyCistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xl X1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKFJlbmRlckZyYW1lSW5mbyBfX3B5eF9yZXN1bHQs IHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDAgYW5k IGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9z dGF0ZVswXSkKKy0gKi8KKy0gIH0KKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjExCistICog ICAgICAgICBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZSg8UmVuZGVy RnJhbWVJbmZvPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19w eXhfcmVzdWx0CistICogY2RlZiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9z dGF0ZShSZW5kZXJGcmFtZUluZm8gX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+ IDAgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKy0gKiAgICAgICAgIF9f cHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbMF0pCistICovCistCistICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNS RUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworLSAgX19weXhfTDFfZXJyb3I6OworLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOwor LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90Xzgp OworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNr bGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5l bm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAwOworLSAgX19weXhfTDA6OworLSAg X19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy1zdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1 Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgX19weXhfdnRhYmxlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkOworLQorLXN0YXRpYyBQeU9iamVj dCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKFB5 VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqYSwgQ1lUSE9OX1VOVVNFRCBQ eU9iamVjdCAqaykgeworLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RW5kT2ZGaWxlUmVhY2hlZCAqcDsKKy0gIFB5T2JqZWN0ICpvOworLSAgaWYgKGxpa2VseSgodC0+ dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUKSA9PSAwKSkgeworLSAgICBvID0gKCp0 LT50cF9hbGxvYykodCwgMCk7CistICB9IGVsc2UgeworLSAgICBvID0gKFB5T2JqZWN0ICopIFB5 QmFzZU9iamVjdF9UeXBlLnRwX25ldyh0LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7CistICB9Cist ICBpZiAodW5saWtlbHkoIW8pKSByZXR1cm4gMDsKKy0gIHAgPSAoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKilvKTsKKy0gIHAtPl9fcHl4 X3Z0YWIgPSBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFj aGVkOworLSAgcC0+cmVhc29uID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgcC0+ ZXJyb3IgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICByZXR1cm4gbzsKKy19Cist Cistc3RhdGljIHZvaWQgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5k T2ZGaWxlUmVhY2hlZChQeU9iamVjdCAqbykgeworLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICopbzsKKy0gICNpZiBDWVRIT05f VVNFX1RQX0ZJTkFMSVpFCistICBpZiAodW5saWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUoUHlfVFlQ RShvKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9UWVBFKG8pLT50cF9maW5hbGl6 ZSkgJiYgIV9QeUdDX0ZJTkFMSVpFRChvKSkgeworLSAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFs aXplckZyb21EZWFsbG9jKG8pKSByZXR1cm47CistICB9Cisrc3RhdGljIHN0cnVjdCBQeU1vZHVs ZURlZiBfX3B5eF9tb2R1bGVkZWYgPSB7CisrICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKysg ICAgIm1wdiIsCisrICAgIF9fcHl4X2tfcHltcHZfUHl0aG9uX3dyYXBwZXJfZm9yX2xpYm1wdiwg LyogbV9kb2MgKi8KKysgICNpZiBDWVRIT05fUEVQNDg5X01VTFRJX1BIQVNFX0lOSVQKKysgICAg MCwgLyogbV9zaXplICovCisrICAjZWxzZQorKyAgICAtMSwgLyogbV9zaXplICovCisgICAjZW5k aWYKKy0gIFB5T2JqZWN0X0dDX1VuVHJhY2sobyk7CistICBQeV9DTEVBUihwLT5yZWFzb24pOwor LSAgUHlfQ0xFQVIocC0+ZXJyb3IpOworLSAgKCpQeV9UWVBFKG8pLT50cF9mcmVlKShvKTsKKy19 CisrICAgIF9fcHl4X21ldGhvZHMgLyogbV9tZXRob2RzICovLAorKyAgI2lmIENZVEhPTl9QRVA0 ODlfTVVMVElfUEhBU0VfSU5JVAorKyAgICBfX3B5eF9tb2R1bGVkZWZfc2xvdHMsIC8qIG1fc2xv dHMgKi8KKysgICNlbHNlCisrICAgIE5VTEwsIC8qIG1fcmVsb2FkICovCisrICAjZW5kaWYKKysg ICAgTlVMTCwgLyogbV90cmF2ZXJzZSAqLworKyAgICBOVUxMLCAvKiBtX2NsZWFyICovCisrICAg IE5VTEwgLyogbV9mcmVlICovCisrfTsKKysjZW5kaWYKKysjaWZuZGVmIENZVEhPTl9TTUFMTF9D T0RFCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyAgICAjZGVmaW5lIENZVEhPTl9TTUFMTF9D T0RFCisrI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVD X18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSkKKysgICAgI2RlZmluZSBDWVRIT05fU01B TExfQ09ERSBfX2F0dHJpYnV0ZV9fKChjb2xkKSkKKysjZWxzZQorKyAgICAjZGVmaW5lIENZVEhP Tl9TTUFMTF9DT0RFCisrI2VuZGlmCisrI2VuZGlmCisgCistc3RhdGljIGludCBfX3B5eF90cF90 cmF2ZXJzZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZChQeU9iamVjdCAq bywgdmlzaXRwcm9jIHYsIHZvaWQgKmEpIHsKKy0gIGludCBlOworLSAgc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqcCA9IChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICopbzsKKy0gIGlm IChwLT5yZWFzb24pIHsKKy0gICAgZSA9ICgqdikocC0+cmVhc29uLCBhKTsgaWYgKGUpIHJldHVy biBlOworLSAgfQorLSAgaWYgKHAtPmVycm9yKSB7CistICAgIGUgPSAoKnYpKHAtPmVycm9yLCBh KTsgaWYgKGUpIHJldHVybiBlOworLSAgfQorLSAgcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBp bnQgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQo UHlPYmplY3QgKm8pIHsKKy0gIFB5T2JqZWN0KiB0bXA7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICpwID0gKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKilvOworLSAgdG1wID0g KChQeU9iamVjdCopcC0+cmVhc29uKTsKKy0gIHAtPnJlYXNvbiA9IFB5X05vbmU7IFB5X0lOQ1JF RihQeV9Ob25lKTsKKy0gIFB5X1hERUNSRUYodG1wKTsKKy0gIHRtcCA9ICgoUHlPYmplY3QqKXAt PmVycm9yKTsKKy0gIHAtPmVycm9yID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAg UHlfWERFQ1JFRih0bXApOworLSAgcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBQeU9iamVjdCAq X19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkX3Jl YXNvbihQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CistICByZXR1cm4gX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF82cmVhc29uXzFf X2dldF9fKG8pOworLX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80 bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9yZWFzb24oUHlPYmplY3QgKm8sIFB5T2JqZWN0 ICp2LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKy0gIGlmICh2KSB7CistICAgIHJldHVybiBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkXzZyZWFzb25f M19fc2V0X18obywgdik7CistICB9CistICBlbHNlIHsKKy0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfNnJlYXNvbl81X19kZWxfXyhv KTsKKy0gIH0KKy19CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfZXJyb3IoUHlPYmplY3QgKm8sIENZVEhP Tl9VTlVTRUQgdm9pZCAqeCkgeworLSAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfNWVycm9yXzFfX2dldF9fKG8pOworLX0KKy0KKy1zdGF0 aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVh Y2hlZF9lcnJvcihQeU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAq eCkgeworLSAgaWYgKHYpIHsKKy0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfNWVycm9yXzNfX3NldF9fKG8sIHYpOworLSAgfQorLSAg ZWxzZSB7CistICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRP ZkZpbGVSZWFjaGVkXzVlcnJvcl81X19kZWxfXyhvKTsKKy0gIH0KKy19CistCistc3RhdGljIFB5 TWV0aG9kRGVmIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJl YWNoZWRbXSA9IHsKKy0gIHsiX19yZWR1Y2VfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24pX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF8xX19yZWR1Y2VfY3l0 aG9uX18sIE1FVEhfTk9BUkdTLCAwfSwKKy0gIHsiX19zZXRzdGF0ZV9jeXRob25fXyIsIChQeUNG dW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVk XzNfX3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAorLSAgezAsIDAsIDAsIDB9CistfTsK Ky0KKy1zdGF0aWMgc3RydWN0IFB5R2V0U2V0RGVmIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80 bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWRbXSA9IHsKKy0gIHsoY2hhciAqKSJyZWFzb24iLCBf X3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfcmVh c29uLCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNo ZWRfcmVhc29uLCAoY2hhciAqKTAsIDB9LAorLSAgeyhjaGFyICopImVycm9yIiwgX19weXhfZ2V0 cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkX2Vycm9yLCBfX3B5 eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfZXJyb3Is IChjaGFyICopMCwgMH0sCistICB7MCwgMCwgMCwgMCwgMH0KKy19OworLQorLXN0YXRpYyBQeVR5 cGVPYmplY3QgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hl ZCA9IHsKKy0gIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgwLCAwKQorLSAgInZpZGN1dHRlci5saWJz Lm1wdi5FbmRPZkZpbGVSZWFjaGVkIiwgLyp0cF9uYW1lKi8KKy0gIHNpemVvZihzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSwgLyp0cF9iYXNp Y3NpemUqLworLSAgMCwgLyp0cF9pdGVtc2l6ZSovCistICBfX3B5eF90cF9kZWFsbG9jXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLCAvKnRwX2RlYWxsb2MqLworLSAgI2lm IFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBiNAorLSAgMCwgLyp0cF9wcmludCovCistICAjZW5k aWYKKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0CistICAwLCAvKnRwX3ZlY3Rv cmNhbGxfb2Zmc2V0Ki8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9nZXRhdHRyKi8KKy0gIDAsIC8q dHBfc2V0YXR0ciovCistICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKy0gIDAsIC8qdHBfY29t cGFyZSovCistICAjZW5kaWYKKy0gICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gIDAsIC8q dHBfYXNfYXN5bmMqLworLSAgI2VuZGlmCistICAwLCAvKnRwX3JlcHIqLworLSAgMCwgLyp0cF9h c19udW1iZXIqLworLSAgMCwgLyp0cF9hc19zZXF1ZW5jZSovCistICAwLCAvKnRwX2FzX21hcHBp bmcqLworLSAgMCwgLyp0cF9oYXNoKi8KKy0gIDAsIC8qdHBfY2FsbCovCistICAwLCAvKnRwX3N0 ciovCistICAwLCAvKnRwX2dldGF0dHJvKi8KKy0gIDAsIC8qdHBfc2V0YXR0cm8qLworLSAgMCwg Lyp0cF9hc19idWZmZXIqLworLSAgUHlfVFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9W RVJTSU9OX1RBR3xQeV9UUEZMQUdTX0NIRUNLVFlQRVN8UHlfVFBGTEFHU19IQVZFX05FV0JVRkZF UnxQeV9UUEZMQUdTX0JBU0VUWVBFfFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCist ICAiRGF0YSBmaWVsZCBmb3IgTVBWX0VWRU5UX0VORF9GSUxFIGV2ZW50c1xuXG4gICAgV3JhcHM6 IG1wdl9ldmVudF9lbmRfZmlsZVxuICAgICIsIC8qdHBfZG9jKi8KKy0gIF9fcHl4X3RwX3RyYXZl cnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLCAvKnRwX3RyYXZlcnNl Ki8KKy0gIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFj aGVkLCAvKnRwX2NsZWFyKi8KKy0gIDAsIC8qdHBfcmljaGNvbXBhcmUqLworLSAgMCwgLyp0cF93 ZWFrbGlzdG9mZnNldCovCistICAwLCAvKnRwX2l0ZXIqLworLSAgMCwgLyp0cF9pdGVybmV4dCov CistICBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVk LCAvKnRwX21ldGhvZHMqLworLSAgMCwgLyp0cF9tZW1iZXJzKi8KKy0gIF9fcHl4X2dldHNldHNf OXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQsIC8qdHBfZ2V0c2V0Ki8KKy0g IDAsIC8qdHBfYmFzZSovCistICAwLCAvKnRwX2RpY3QqLworLSAgMCwgLyp0cF9kZXNjcl9nZXQq LworLSAgMCwgLyp0cF9kZXNjcl9zZXQqLworLSAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8KKy0gIDAs IC8qdHBfaW5pdCovCistICAwLCAvKnRwX2FsbG9jKi8KKy0gIF9fcHl4X3RwX25ld185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCwgLyp0cF9uZXcqLworLSAgMCwgLyp0cF9m cmVlKi8KKy0gIDAsIC8qdHBfaXNfZ2MqLworLSAgMCwgLyp0cF9iYXNlcyovCistICAwLCAvKnRw X21ybyovCistICAwLCAvKnRwX2NhY2hlKi8KKy0gIDAsIC8qdHBfc3ViY2xhc3NlcyovCistICAw LCAvKnRwX3dlYWtsaXN0Ki8KKy0gIDAsIC8qdHBfZGVsKi8KKy0gIDAsIC8qdHBfdmVyc2lvbl90 YWcqLworLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEKKy0gIDAsIC8qdHBfZmlu YWxpemUqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMQor LSAgMCwgLyp0cF92ZWN0b3JjYWxsKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVY ID49IDB4MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAwCistICAwLCAvKnRw X3ByaW50Ki8KKy0gICNlbmRpZgorLX07Cistc3RhdGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoIF9fcHl4X3Z0YWJsZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaDsKKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaChQeVR5cGVPYmplY3Qg KnQsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmEsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmsp IHsKKy0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0 Y2ggKnA7CistICBQeU9iamVjdCAqbzsKKy0gIGlmIChsaWtlbHkoKHQtPnRwX2ZsYWdzICYgUHlf VFBGTEFHU19JU19BQlNUUkFDVCkgPT0gMCkpIHsKKy0gICAgbyA9ICgqdC0+dHBfYWxsb2MpKHQs IDApOworLSAgfSBlbHNlIHsKKy0gICAgbyA9IChQeU9iamVjdCAqKSBQeUJhc2VPYmplY3RfVHlw ZS50cF9uZXcodCwgX19weXhfZW1wdHlfdHVwbGUsIDApOworLSAgfQorLSAgaWYgKHVubGlrZWx5 KCFvKSkgcmV0dXJuIDA7CistICBwID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9JbnB1dERpc3BhdGNoICopbyk7CistICBwLT5fX3B5eF92dGFiID0gX19weXhfdnRh YnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaDsKKy0gIHAtPmFyZzAgPSBQ eV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBwLT50eXBlID0gUHlfTm9uZTsgUHlfSU5D UkVGKFB5X05vbmUpOworLSAgcmV0dXJuIG87CistfQorLQorLXN0YXRpYyB2b2lkIF9fcHl4X3Rw X2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2goUHlPYmplY3QgKm8p IHsKKy0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0 Y2ggKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNw YXRjaCAqKW87CistICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5BTElaRQorLSAgaWYgKHVubGlrZWx5 KFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkg JiYgUHlfVFlQRShvKS0+dHBfZmluYWxpemUpICYmICFfUHlHQ19GSU5BTElaRUQobykpIHsKKy0g ICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhvKSkgcmV0dXJuOworLSAg fQorLSAgI2VuZGlmCistICBQeU9iamVjdF9HQ19VblRyYWNrKG8pOworLSAgUHlfQ0xFQVIocC0+ YXJnMCk7CistICBQeV9DTEVBUihwLT50eXBlKTsKKy0gICgqUHlfVFlQRShvKS0+dHBfZnJlZSko byk7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGli c18zbXB2X0lucHV0RGlzcGF0Y2goUHlPYmplY3QgKm8sIHZpc2l0cHJvYyB2LCB2b2lkICphKSB7 CistICBpbnQgZTsKKy0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lu cHV0RGlzcGF0Y2ggKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf SW5wdXREaXNwYXRjaCAqKW87CistICBpZiAocC0+YXJnMCkgeworLSAgICBlID0gKCp2KShwLT5h cmcwLCBhKTsgaWYgKGUpIHJldHVybiBlOworLSAgfQorLSAgaWYgKHAtPnR5cGUpIHsKKy0gICAg ZSA9ICgqdikocC0+dHlwZSwgYSk7IGlmIChlKSByZXR1cm4gZTsKKy0gIH0KKy0gIHJldHVybiAw OworLX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9JbnB1dERpc3BhdGNoKFB5T2JqZWN0ICpvKSB7CistICBQeU9iamVjdCogdG1wOworLSAgc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqcCA9IChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICopbzsK Ky0gIHRtcCA9ICgoUHlPYmplY3QqKXAtPmFyZzApOworLSAgcC0+YXJnMCA9IFB5X05vbmU7IFB5 X0lOQ1JFRihQeV9Ob25lKTsKKy0gIFB5X1hERUNSRUYodG1wKTsKKy0gIHRtcCA9ICgoUHlPYmpl Y3QqKXAtPnR5cGUpOworLSAgcC0+dHlwZSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsK Ky0gIFB5X1hERUNSRUYodG1wKTsKKy0gIHJldHVybiAwOworLX0KKy0KKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9h cmcwKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKy0gIHJldHVybiBfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcwXzFfX2dldF9f KG8pOworLX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzSW5wdXREaXNwYXRjaF9hcmcwKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9O X1VOVVNFRCB2b2lkICp4KSB7CistICBpZiAodikgeworLSAgICByZXR1cm4gX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80YXJnMF8zX19zZXRfXyhvLCB2KTsK Ky0gIH0KKy0gIGVsc2UgeworLSAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzSW5wdXREaXNwYXRjaF80YXJnMF81X19kZWxfXyhvKTsKKy0gIH0KKy19CistCistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0 RGlzcGF0Y2hfdHlwZShQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CistICBy ZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80dHlw ZV8xX19nZXRfXyhvKTsKKy19CistCistc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfdHlwZShQeU9iamVjdCAqbywgUHlPYmplY3Qg KnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworLSAgaWYgKHYpIHsKKy0gICAgcmV0dXJuIF9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfM19fc2V0 X18obywgdik7CistICB9CistICBlbHNlIHsKKy0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfNV9fZGVsX18obyk7CistICB9Cist fQorLQorLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9JbnB1dERpc3BhdGNoW10gPSB7CistICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5Q0Z1 bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfMV9f cmVkdWNlX2N5dGhvbl9fLCBNRVRIX05PQVJHUywgMH0sCistICB7Il9fc2V0c3RhdGVfY3l0aG9u X18iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXRE aXNwYXRjaF8zX19zZXRzdGF0ZV9jeXRob25fXywgTUVUSF9PLCAwfSwKKy0gIHswLCAwLCAwLCAw fQorLX07CistCistc3RhdGljIHN0cnVjdCBQeUdldFNldERlZiBfX3B5eF9nZXRzZXRzXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoW10gPSB7CistICB7KGNoYXIgKikiYXJnMCIs IF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9hcmcw LCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfYXJn MCwgKGNoYXIgKikwLCAwfSwKKy0gIHsoY2hhciAqKSJ0eXBlIiwgX19weXhfZ2V0cHJvcF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoX3R5cGUsIF9fcHl4X3NldHByb3BfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF90eXBlLCAoY2hhciAqKTAsIDB9LAor LSAgezAsIDAsIDAsIDAsIDB9CistfTsKKy0KKy1zdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggPSB7CistICBQeVZhck9iamVj dF9IRUFEX0lOSVQoMCwgMCkKKy0gICJ2aWRjdXR0ZXIubGlicy5tcHYuSW5wdXREaXNwYXRjaCIs IC8qdHBfbmFtZSovCistICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfSW5wdXREaXNwYXRjaCksIC8qdHBfYmFzaWNzaXplKi8KKy0gIDAsIC8qdHBfaXRlbXNp emUqLworLSAgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNw YXRjaCwgLyp0cF9kZWFsbG9jKi8KKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQK Ky0gIDAsIC8qdHBfcHJpbnQqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0g MHgwMzA4MDBiNAorLSAgMCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCistICAjZW5kaWYKKy0g IDAsIC8qdHBfZ2V0YXR0ciovCistICAwLCAvKnRwX3NldGF0dHIqLworLSAgI2lmIFBZX01BSk9S X1ZFUlNJT04gPCAzCistICAwLCAvKnRwX2NvbXBhcmUqLworLSAgI2VuZGlmCistICAjaWYgUFlf TUFKT1JfVkVSU0lPTiA+PSAzCistICAwLCAvKnRwX2FzX2FzeW5jKi8KKy0gICNlbmRpZgorLSAg MCwgLyp0cF9yZXByKi8KKy0gIDAsIC8qdHBfYXNfbnVtYmVyKi8KKy0gIDAsIC8qdHBfYXNfc2Vx dWVuY2UqLworLSAgMCwgLyp0cF9hc19tYXBwaW5nKi8KKy0gIDAsIC8qdHBfaGFzaCovCistICAw LCAvKnRwX2NhbGwqLworLSAgMCwgLyp0cF9zdHIqLworLSAgMCwgLyp0cF9nZXRhdHRybyovCist ICAwLCAvKnRwX3NldGF0dHJvKi8KKy0gIDAsIC8qdHBfYXNfYnVmZmVyKi8KKy0gIFB5X1RQRkxB R1NfREVGQVVMVHxQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZ UEVTfFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZM QUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworLSAgIkRhdGEgZmllbGQgZm9yIE1QVl9FVkVOVF9T Q1JJUFRfSU5QVVRfRElTUEFUQ0ggZXZlbnRzLlxuXG4gICAgV3JhcHM6IG1wdl9ldmVudF9zY3Jp cHRfaW5wdXRfZGlzcGF0Y2hcbiAgICAiLCAvKnRwX2RvYyovCistICBfX3B5eF90cF90cmF2ZXJz ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCwgLyp0cF90cmF2ZXJzZSovCist ICBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCwgLyp0 cF9jbGVhciovCistICAwLCAvKnRwX3JpY2hjb21wYXJlKi8KKy0gIDAsIC8qdHBfd2Vha2xpc3Rv ZmZzZXQqLworLSAgMCwgLyp0cF9pdGVyKi8KKy0gIDAsIC8qdHBfaXRlcm5leHQqLworLSAgX19w eXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCwgLyp0cF9tZXRo b2RzKi8KKy0gIDAsIC8qdHBfbWVtYmVycyovCistICBfX3B5eF9nZXRzZXRzXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9JbnB1dERpc3BhdGNoLCAvKnRwX2dldHNldCovCistICAwLCAvKnRwX2Jhc2Uq LworLSAgMCwgLyp0cF9kaWN0Ki8KKy0gIDAsIC8qdHBfZGVzY3JfZ2V0Ki8KKy0gIDAsIC8qdHBf ZGVzY3Jfc2V0Ki8KKy0gIDAsIC8qdHBfZGljdG9mZnNldCovCistICAwLCAvKnRwX2luaXQqLwor LSAgMCwgLyp0cF9hbGxvYyovCistICBfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2 X0lucHV0RGlzcGF0Y2gsIC8qdHBfbmV3Ki8KKy0gIDAsIC8qdHBfZnJlZSovCistICAwLCAvKnRw X2lzX2djKi8KKy0gIDAsIC8qdHBfYmFzZXMqLworLSAgMCwgLyp0cF9tcm8qLworLSAgMCwgLyp0 cF9jYWNoZSovCistICAwLCAvKnRwX3N1YmNsYXNzZXMqLworLSAgMCwgLyp0cF93ZWFrbGlzdCov CistICAwLCAvKnRwX2RlbCovCistICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KKy0gICNpZiBQWV9W RVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCistICAwLCAvKnRwX2ZpbmFsaXplKi8KKy0gICNlbmRp ZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEKKy0gIDAsIC8qdHBfdmVjdG9y Y2FsbCovCistICAjZW5kaWYKKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYm IFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAorLSAgMCwgLyp0cF9wcmludCovCistICAjZW5k aWYKKy19OworLXN0YXRpYyBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfTG9nTWVzc2FnZSBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01l c3NhZ2U7CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGli c18zbXB2X0xvZ01lc3NhZ2UoUHlUeXBlT2JqZWN0ICp0LCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0 ICphLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICprKSB7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpwOworLSAgUHlPYmplY3QgKm87CistICBp ZiAobGlrZWx5KCh0LT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QpID09IDApKSB7 CistICAgIG8gPSAoKnQtPnRwX2FsbG9jKSh0LCAwKTsKKy0gIH0gZWxzZSB7CistICAgIG8gPSAo UHlPYmplY3QgKikgUHlCYXNlT2JqZWN0X1R5cGUudHBfbmV3KHQsIF9fcHl4X2VtcHR5X3R1cGxl LCAwKTsKKy0gIH0KKy0gIGlmICh1bmxpa2VseSghbykpIHJldHVybiAwOworLSAgcCA9ICgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKW8pOworLSAg cC0+X19weXhfdnRhYiA9IF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01l c3NhZ2U7CistICBwLT5wcmVmaXggPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBw LT5sZXZlbCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKy0gIHAtPnRleHQgPSBQeV9O b25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBwLT5sb2dfbGV2ZWwgPSBQeV9Ob25lOyBQeV9J TkNSRUYoUHlfTm9uZSk7CistICByZXR1cm4gbzsKKy19CistCistc3RhdGljIHZvaWQgX19weXhf dHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZShQeU9iamVjdCAqbykg eworLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAq cCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICop bzsKKy0gICNpZiBDWVRIT05fVVNFX1RQX0ZJTkFMSVpFCistICBpZiAodW5saWtlbHkoUHlUeXBl X0hhc0ZlYXR1cmUoUHlfVFlQRShvKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9U WVBFKG8pLT50cF9maW5hbGl6ZSkgJiYgIV9QeUdDX0ZJTkFMSVpFRChvKSkgeworLSAgICBpZiAo UHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKG8pKSByZXR1cm47CistICB9CistICAj ZW5kaWYKKy0gIFB5T2JqZWN0X0dDX1VuVHJhY2sobyk7CistICBQeV9DTEVBUihwLT5wcmVmaXgp OworLSAgUHlfQ0xFQVIocC0+bGV2ZWwpOworLSAgUHlfQ0xFQVIocC0+dGV4dCk7CistICBQeV9D TEVBUihwLT5sb2dfbGV2ZWwpOworLSAgKCpQeV9UWVBFKG8pLT50cF9mcmVlKShvKTsKKy19Cist Cistc3RhdGljIGludCBfX3B5eF90cF90cmF2ZXJzZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9n TWVzc2FnZShQeU9iamVjdCAqbywgdmlzaXRwcm9jIHYsIHZvaWQgKmEpIHsKKy0gIGludCBlOwor LSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqcCA9 IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopbzsK Ky0gIGlmIChwLT5wcmVmaXgpIHsKKy0gICAgZSA9ICgqdikocC0+cHJlZml4LCBhKTsgaWYgKGUp IHJldHVybiBlOworLSAgfQorLSAgaWYgKHAtPmxldmVsKSB7CistICAgIGUgPSAoKnYpKHAtPmxl dmVsLCBhKTsgaWYgKGUpIHJldHVybiBlOworLSAgfQorLSAgaWYgKHAtPnRleHQpIHsKKy0gICAg ZSA9ICgqdikocC0+dGV4dCwgYSk7IGlmIChlKSByZXR1cm4gZTsKKy0gIH0KKy0gIGlmIChwLT5s b2dfbGV2ZWwpIHsKKy0gICAgZSA9ICgqdikocC0+bG9nX2xldmVsLCBhKTsgaWYgKGUpIHJldHVy biBlOworLSAgfQorLSAgcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhfdHBfY2xl YXJfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UoUHlPYmplY3QgKm8pIHsKKy0gIFB5 T2JqZWN0KiB0bXA7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9M b2dNZXNzYWdlICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xv Z01lc3NhZ2UgKilvOworLSAgdG1wID0gKChQeU9iamVjdCopcC0+cHJlZml4KTsKKy0gIHAtPnBy ZWZpeCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKy0gIFB5X1hERUNSRUYodG1wKTsK Ky0gIHRtcCA9ICgoUHlPYmplY3QqKXAtPmxldmVsKTsKKy0gIHAtPmxldmVsID0gUHlfTm9uZTsg UHlfSU5DUkVGKFB5X05vbmUpOworLSAgUHlfWERFQ1JFRih0bXApOworLSAgdG1wID0gKChQeU9i amVjdCopcC0+dGV4dCk7CistICBwLT50ZXh0ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUp OworLSAgUHlfWERFQ1JFRih0bXApOworLSAgdG1wID0gKChQeU9iamVjdCopcC0+bG9nX2xldmVs KTsKKy0gIHAtPmxvZ19sZXZlbCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKy0gIFB5 X1hERUNSRUYodG1wKTsKKy0gIHJldHVybiAwOworLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9wcmVmaXgoUHlP YmplY3QgKm8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworLSAgcmV0dXJuIF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8xX19nZXRfXyhvKTsKKy19 CistCistc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExv Z01lc3NhZ2VfcHJlZml4KFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9OX1VOVVNFRCB2 b2lkICp4KSB7CistICBpZiAodikgeworLSAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzNfX3NldF9fKG8sIHYpOworLSAgfQorLSAg ZWxzZSB7CistICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dN ZXNzYWdlXzZwcmVmaXhfNV9fZGVsX18obyk7CistICB9CistfQorLQorLXN0YXRpYyBQeU9iamVj dCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX2xldmVs KFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKy0gIHJldHVybiBfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZlbF8xX19nZXRfXyhvKTsK Ky19CistCistc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x MExvZ01lc3NhZ2VfbGV2ZWwoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2LCBDWVRIT05fVU5VU0VE IHZvaWQgKngpIHsKKy0gIGlmICh2KSB7CistICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZlbF8zX19zZXRfXyhvLCB2KTsKKy0gIH0KKy0g IGVsc2UgeworLSAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9n TWVzc2FnZV81bGV2ZWxfNV9fZGVsX18obyk7CistICB9CistfQorLQorLXN0YXRpYyBQeU9iamVj dCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX3RleHQo UHlPYmplY3QgKm8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworLSAgcmV0dXJuIF9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNHRleHRfMV9fZ2V0X18obyk7Cist fQorLQorLXN0YXRpYyBpbnQgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBM b2dNZXNzYWdlX3RleHQoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2LCBDWVRIT05fVU5VU0VEIHZv aWQgKngpIHsKKy0gIGlmICh2KSB7CistICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0ZXh0XzNfX3NldF9fKG8sIHYpOworLSAgfQorLSAgZWxz ZSB7CistICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzR0ZXh0XzVfX2RlbF9fKG8pOworLSAgfQorLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9sb2dfbGV2ZWwo UHlPYmplY3QgKm8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworLSAgcmV0dXJuIF9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF8xX19nZXRfXyhv KTsKKy19CistCistc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfbG9nX2xldmVsKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9O X1VOVVNFRCB2b2lkICp4KSB7CistICBpZiAodikgeworLSAgICByZXR1cm4gX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsXzNfX3NldF9fKG8sIHYp OworLSAgfQorLSAgZWxzZSB7CistICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTBMb2dNZXNzYWdlXzlsb2dfbGV2ZWxfNV9fZGVsX18obyk7CistICB9CistfQorLQor LXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9M b2dNZXNzYWdlW10gPSB7CistICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfMV9fcmVkdWNlX2N5dGhv bl9fLCBNRVRIX05PQVJHUywgMH0sCistICB7Il9fc2V0c3RhdGVfY3l0aG9uX18iLCAoUHlDRnVu Y3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV8zX19zZXRz dGF0ZV9jeXRob25fXywgTUVUSF9PLCAwfSwKKy0gIHswLCAwLCAwLCAwfQorLX07CistCistc3Rh dGljIHN0cnVjdCBQeUdldFNldERlZiBfX3B5eF9nZXRzZXRzXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Mb2dNZXNzYWdlW10gPSB7CistICB7KGNoYXIgKikicHJlZml4IiwgX19weXhfZ2V0cHJvcF85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX3ByZWZpeCwgX19weXhfc2V0cHJvcF85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX3ByZWZpeCwgKGNoYXIgKikwLCAwfSwK Ky0gIHsoY2hhciAqKSJsZXZlbCIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEwTG9nTWVzc2FnZV9sZXZlbCwgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTBMb2dNZXNzYWdlX2xldmVsLCAoY2hhciAqKTAsIDB9LAorLSAgeyhjaGFyICopInRleHQiLCBf X3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfdGV4dCwgX19w eXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX3RleHQsIChjaGFy ICopMCwgMH0sCistICB7KGNoYXIgKikibG9nX2xldmVsIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX2xvZ19sZXZlbCwgX19weXhfc2V0cHJvcF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX2xvZ19sZXZlbCwgKGNoYXIgKikwLCAwfSwK Ky0gIHswLCAwLCAwLCAwLCAwfQorLX07CistCistc3RhdGljIFB5VHlwZU9iamVjdCBfX3B5eF90 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlID0geworLSAgUHlWYXJPYmplY3Rf SEVBRF9JTklUKDAsIDApCistICAidmlkY3V0dGVyLmxpYnMubXB2LkxvZ01lc3NhZ2UiLCAvKnRw X25hbWUqLworLSAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0xvZ01lc3NhZ2UpLCAvKnRwX2Jhc2ljc2l6ZSovCistICAwLCAvKnRwX2l0ZW1zaXplKi8KKy0g IF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UsIC8qdHBf ZGVhbGxvYyovCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMGI0CistICAwLCAvKnRw X3ByaW50Ki8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQK Ky0gIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQqLworLSAgI2VuZGlmCistICAwLCAvKnRwX2dl dGF0dHIqLworLSAgMCwgLyp0cF9zZXRhdHRyKi8KKy0gICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwg MworLSAgMCwgLyp0cF9jb21wYXJlKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZX01BSk9SX1ZFUlNJ T04gPj0gMworLSAgMCwgLyp0cF9hc19hc3luYyovCistICAjZW5kaWYKKy0gIDAsIC8qdHBfcmVw ciovCistICAwLCAvKnRwX2FzX251bWJlciovCistICAwLCAvKnRwX2FzX3NlcXVlbmNlKi8KKy0g IDAsIC8qdHBfYXNfbWFwcGluZyovCistICAwLCAvKnRwX2hhc2gqLworLSAgMCwgLyp0cF9jYWxs Ki8KKy0gIDAsIC8qdHBfc3RyKi8KKy0gIDAsIC8qdHBfZ2V0YXR0cm8qLworLSAgMCwgLyp0cF9z ZXRhdHRybyovCistICAwLCAvKnRwX2FzX2J1ZmZlciovCistICBQeV9UUEZMQUdTX0RFRkFVTFR8 UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5X1RQRkxBR1NfQ0hFQ0tUWVBFU3xQeV9UUEZM QUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1NfQkFTRVRZUEV8UHlfVFBGTEFHU19IQVZFX0dD LCAvKnRwX2ZsYWdzKi8KKy0gICJEYXRhIGZpZWxkIGZvciBNUFZfRVZFTlRfTE9HX01FU1NBR0Ug ZXZlbnRzLlxuXG4gICAgV3JhcHM6IG1wdl9ldmVudF9sb2dfbWVzc2FnZVxuICAgICIsIC8qdHBf ZG9jKi8KKy0gIF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlLCAvKnRwX3RyYXZlcnNlKi8KKy0gIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Mb2dNZXNzYWdlLCAvKnRwX2NsZWFyKi8KKy0gIDAsIC8qdHBfcmljaGNvbXBhcmUqLwor LSAgMCwgLyp0cF93ZWFrbGlzdG9mZnNldCovCistICAwLCAvKnRwX2l0ZXIqLworLSAgMCwgLyp0 cF9pdGVybmV4dCovCistICBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlLCAvKnRwX21ldGhvZHMqLworLSAgMCwgLyp0cF9tZW1iZXJzKi8KKy0gIF9fcHl4X2dl dHNldHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UsIC8qdHBfZ2V0c2V0Ki8KKy0g IDAsIC8qdHBfYmFzZSovCistICAwLCAvKnRwX2RpY3QqLworLSAgMCwgLyp0cF9kZXNjcl9nZXQq LworLSAgMCwgLyp0cF9kZXNjcl9zZXQqLworLSAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8KKy0gIDAs IC8qdHBfaW5pdCovCistICAwLCAvKnRwX2FsbG9jKi8KKy0gIF9fcHl4X3RwX25ld185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSwgLyp0cF9uZXcqLworLSAgMCwgLyp0cF9mcmVlKi8K Ky0gIDAsIC8qdHBfaXNfZ2MqLworLSAgMCwgLyp0cF9iYXNlcyovCistICAwLCAvKnRwX21ybyov CistICAwLCAvKnRwX2NhY2hlKi8KKy0gIDAsIC8qdHBfc3ViY2xhc3NlcyovCistICAwLCAvKnRw X3dlYWtsaXN0Ki8KKy0gIDAsIC8qdHBfZGVsKi8KKy0gIDAsIC8qdHBfdmVyc2lvbl90YWcqLwor LSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEKKy0gIDAsIC8qdHBfZmluYWxpemUq LworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMQorLSAgMCwg Lyp0cF92ZWN0b3JjYWxsKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4 MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAwCistICAwLCAvKnRwX3ByaW50 Ki8KKy0gICNlbmRpZgorLX07Cistc3RhdGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18z bXB2X1Byb3BlcnR5OworLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eShQeVR5cGVPYmplY3QgKnQsIENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKmEsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKKy0gIHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpwOworLSAgUHlPYmplY3QgKm87Cist ICBpZiAobGlrZWx5KCh0LT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QpID09IDAp KSB7CistICAgIG8gPSAoKnQtPnRwX2FsbG9jKSh0LCAwKTsKKy0gIH0gZWxzZSB7CistICAgIG8g PSAoUHlPYmplY3QgKikgUHlCYXNlT2JqZWN0X1R5cGUudHBfbmV3KHQsIF9fcHl4X2VtcHR5X3R1 cGxlLCAwKTsKKy0gIH0KKy0gIGlmICh1bmxpa2VseSghbykpIHJldHVybiAwOworLSAgcCA9ICgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilvKTsKKy0g IHAtPl9fcHl4X3Z0YWIgPSBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eTsKKy0gIHAtPm5hbWUgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBwLT5k YXRhID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgcmV0dXJuIG87CistfQorLQor LXN0YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3Bl cnR5KFB5T2JqZWN0ICpvKSB7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eSAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Qcm9wZXJ0eSAqKW87CistICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5BTElaRQorLSAgaWYgKHVu bGlrZWx5KFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQRkxBR1NfSEFWRV9GSU5B TElaRSkgJiYgUHlfVFlQRShvKS0+dHBfZmluYWxpemUpICYmICFfUHlHQ19GSU5BTElaRUQobykp IHsKKy0gICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhvKSkgcmV0dXJu OworLSAgfQorLSAgI2VuZGlmCistICBQeU9iamVjdF9HQ19VblRyYWNrKG8pOworLSAgUHlfQ0xF QVIocC0+bmFtZSk7CistICBQeV9DTEVBUihwLT5kYXRhKTsKKy0gICgqUHlfVFlQRShvKS0+dHBf ZnJlZSkobyk7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRl cl80bGlic18zbXB2X1Byb3BlcnR5KFB5T2JqZWN0ICpvLCB2aXNpdHByb2Mgdiwgdm9pZCAqYSkg eworLSAgaW50IGU7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Q cm9wZXJ0eSAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eSAqKW87CistICBpZiAocC0+bmFtZSkgeworLSAgICBlID0gKCp2KShwLT5uYW1lLCBhKTsg aWYgKGUpIHJldHVybiBlOworLSAgfQorLSAgaWYgKHAtPmRhdGEpIHsKKy0gICAgZSA9ICgqdiko cC0+ZGF0YSwgYSk7IGlmIChlKSByZXR1cm4gZTsKKy0gIH0KKy0gIHJldHVybiAwOworLX0KKy0K Ky1zdGF0aWMgaW50IF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eShQeU9iamVjdCAqbykgeworLSAgUHlPYmplY3QqIHRtcDsKKy0gIHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopbzsKKy0gIHRtcCA9ICgoUHlPYmplY3QqKXAt Pm5hbWUpOworLSAgcC0+bmFtZSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKy0gIFB5 X1hERUNSRUYodG1wKTsKKy0gIHRtcCA9ICgoUHlPYmplY3QqKXAtPmRhdGEpOworLSAgcC0+ZGF0 YSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKy0gIFB5X1hERUNSRUYodG1wKTsKKy0g IHJldHVybiAwOworLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1 dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9uYW1lKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VE IHZvaWQgKngpIHsKKy0gIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFBy b3BlcnR5XzRuYW1lXzFfX2dldF9fKG8pOworLX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3NldHBy b3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9uYW1lKFB5T2JqZWN0ICpvLCBQeU9i amVjdCAqdiwgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CistICBpZiAodikgeworLSAgICByZXR1 cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV8zX19zZXRf XyhvLCB2KTsKKy0gIH0KKy0gIGVsc2UgeworLSAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV81X19kZWxfXyhvKTsKKy0gIH0KKy19CistCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJv cGVydHlfZGF0YShQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CistICByZXR1 cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80ZGF0YV8xX19nZXRf XyhvKTsKKy19CistCistc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl84UHJvcGVydHlfZGF0YShQeU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVT RUQgdm9pZCAqeCkgeworLSAgaWYgKHYpIHsKKy0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfM19fc2V0X18obywgdik7CistICB9CistICBl bHNlIHsKKy0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVy dHlfNGRhdGFfNV9fZGVsX18obyk7CistICB9CistfQorLQorLXN0YXRpYyBQeU1ldGhvZERlZiBf X3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eVtdID0geworLSAgeyJf X3JlZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfOFByb3BlcnR5XzFfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9LAorLSAg eyJfX3NldHN0YXRlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl84UHJvcGVydHlfM19fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhfTywgMH0sCist ICB7MCwgMCwgMCwgMH0KKy19OworLQorLXN0YXRpYyBzdHJ1Y3QgUHlHZXRTZXREZWYgX19weXhf Z2V0c2V0c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHlbXSA9IHsKKy0gIHsoY2hhciAq KSJuYW1lIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X25h bWUsIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9uYW1lLCAo Y2hhciAqKTAsIDB9LAorLSAgeyhjaGFyICopImRhdGEiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfZGF0YSwgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfOFByb3BlcnR5X2RhdGEsIChjaGFyICopMCwgMH0sCistICB7MCwgMCwgMCwgMCwg MH0KKy19OworLQorLXN0YXRpYyBQeVR5cGVPYmplY3QgX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUHJvcGVydHkgPSB7CistICBQeVZhck9iamVjdF9IRUFEX0lOSVQoMCwgMCkKKy0g ICJ2aWRjdXR0ZXIubGlicy5tcHYuUHJvcGVydHkiLCAvKnRwX25hbWUqLworLSAgc2l6ZW9mKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSwgLyp0cF9iYXNp Y3NpemUqLworLSAgMCwgLyp0cF9pdGVtc2l6ZSovCistICBfX3B5eF90cF9kZWFsbG9jXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSwgLyp0cF9kZWFsbG9jKi8KKy0gICNpZiBQWV9WRVJT SU9OX0hFWCA8IDB4MDMwODAwYjQKKy0gIDAsIC8qdHBfcHJpbnQqLworLSAgI2VuZGlmCistICAj aWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorLSAgMCwgLyp0cF92ZWN0b3JjYWxsX29m ZnNldCovCistICAjZW5kaWYKKy0gIDAsIC8qdHBfZ2V0YXR0ciovCistICAwLCAvKnRwX3NldGF0 dHIqLworLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCistICAwLCAvKnRwX2NvbXBhcmUqLwor LSAgI2VuZGlmCistICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICAwLCAvKnRwX2FzX2Fz eW5jKi8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9yZXByKi8KKy0gIDAsIC8qdHBfYXNfbnVtYmVy Ki8KKy0gIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworLSAgMCwgLyp0cF9hc19tYXBwaW5nKi8KKy0g IDAsIC8qdHBfaGFzaCovCistICAwLCAvKnRwX2NhbGwqLworLSAgMCwgLyp0cF9zdHIqLworLSAg MCwgLyp0cF9nZXRhdHRybyovCistICAwLCAvKnRwX3NldGF0dHJvKi8KKy0gIDAsIC8qdHBfYXNf YnVmZmVyKi8KKy0gIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9U QUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVJ8UHlfVFBG TEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworLSAgIkRhdGEg ZmllbGQgZm9yIE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0UgYW5kIE1QVl9FVkVOVF9HRVRfUFJP UEVSVFlfUkVQTFkuXG5cbiAgICBXcmFwczogbXB2X2V2ZW50X3Byb3BlcnR5XG4gICAgIiwgLyp0 cF9kb2MqLworLSAgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3Bl cnR5LCAvKnRwX3RyYXZlcnNlKi8KKy0gIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eSwgLyp0cF9jbGVhciovCistICAwLCAvKnRwX3JpY2hjb21wYXJlKi8KKy0g IDAsIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworLSAgMCwgLyp0cF9pdGVyKi8KKy0gIDAsIC8qdHBf aXRlcm5leHQqLworLSAgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVy dHksIC8qdHBfbWV0aG9kcyovCistICAwLCAvKnRwX21lbWJlcnMqLworLSAgX19weXhfZ2V0c2V0 c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHksIC8qdHBfZ2V0c2V0Ki8KKy0gIDAsIC8q dHBfYmFzZSovCistICAwLCAvKnRwX2RpY3QqLworLSAgMCwgLyp0cF9kZXNjcl9nZXQqLworLSAg MCwgLyp0cF9kZXNjcl9zZXQqLworLSAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8KKy0gIDAsIC8qdHBf aW5pdCovCistICAwLCAvKnRwX2FsbG9jKi8KKy0gIF9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRs aWJzXzNtcHZfUHJvcGVydHksIC8qdHBfbmV3Ki8KKy0gIDAsIC8qdHBfZnJlZSovCistICAwLCAv KnRwX2lzX2djKi8KKy0gIDAsIC8qdHBfYmFzZXMqLworLSAgMCwgLyp0cF9tcm8qLworLSAgMCwg Lyp0cF9jYWNoZSovCistICAwLCAvKnRwX3N1YmNsYXNzZXMqLworLSAgMCwgLyp0cF93ZWFrbGlz dCovCistICAwLCAvKnRwX2RlbCovCistICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KKy0gICNpZiBQ WV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCistICAwLCAvKnRwX2ZpbmFsaXplKi8KKy0gICNl bmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEKKy0gIDAsIC8qdHBfdmVj dG9yY2FsbCovCistICAjZW5kaWYKKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0 ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAorLSAgMCwgLyp0cF9wcmludCovCistICAj ZW5kaWYKKy19OworLXN0YXRpYyBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRXZlbnQgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudDsK Ky0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZf RXZlbnQoUHlUeXBlT2JqZWN0ICp0LCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICphLCBDWVRIT05f VU5VU0VEIFB5T2JqZWN0ICprKSB7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FdmVudCAqcDsKKy0gIFB5T2JqZWN0ICpvOworLSAgaWYgKGxpa2VseSgodC0+dHBf ZmxhZ3MgJiBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUKSA9PSAwKSkgeworLSAgICBvID0gKCp0LT50 cF9hbGxvYykodCwgMCk7CistICB9IGVsc2UgeworLSAgICBvID0gKFB5T2JqZWN0ICopIFB5QmFz ZU9iamVjdF9UeXBlLnRwX25ldyh0LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7CistICB9CistICBp ZiAodW5saWtlbHkoIW8pKSByZXR1cm4gMDsKKy0gIHAgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopbyk7CistICBwLT5fX3B5eF92dGFiID0gX19weXhf dnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQ7CistICBwLT5kYXRhID0gUHlfTm9u ZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgcC0+cmVwbHlfdXNlcmRhdGEgPSBQeV9Ob25lOyBQ eV9JTkNSRUYoUHlfTm9uZSk7CistICByZXR1cm4gbzsKKy19CistCistc3RhdGljIHZvaWQgX19w eXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQoUHlPYmplY3QgKm8pIHsK Ky0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpwID0gKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopbzsKKy0gICNpZiBD WVRIT05fVVNFX1RQX0ZJTkFMSVpFCistICBpZiAodW5saWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUo UHlfVFlQRShvKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9UWVBFKG8pLT50cF9m aW5hbGl6ZSkgJiYgIV9QeUdDX0ZJTkFMSVpFRChvKSkgeworLSAgICBpZiAoUHlPYmplY3RfQ2Fs bEZpbmFsaXplckZyb21EZWFsbG9jKG8pKSByZXR1cm47CistICB9CistICAjZW5kaWYKKy0gIFB5 T2JqZWN0X0dDX1VuVHJhY2sobyk7CistICBQeV9DTEVBUihwLT5kYXRhKTsKKy0gIFB5X0NMRUFS KHAtPnJlcGx5X3VzZXJkYXRhKTsKKy0gICgqUHlfVFlQRShvKS0+dHBfZnJlZSkobyk7CistfQor LQorLXN0YXRpYyBpbnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2 ZW50KFB5T2JqZWN0ICpvLCB2aXNpdHByb2Mgdiwgdm9pZCAqYSkgeworLSAgaW50IGU7CistICBz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqcCA9IChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKW87CistICBpZiAocC0+ZGF0 YSkgeworLSAgICBlID0gKCp2KShwLT5kYXRhLCBhKTsgaWYgKGUpIHJldHVybiBlOworLSAgfQor LSAgaWYgKHAtPnJlcGx5X3VzZXJkYXRhKSB7CistICAgIGUgPSAoKnYpKHAtPnJlcGx5X3VzZXJk YXRhLCBhKTsgaWYgKGUpIHJldHVybiBlOworLSAgfQorLSAgcmV0dXJuIDA7CistfQorLQorLXN0 YXRpYyBpbnQgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KFB5T2Jq ZWN0ICpvKSB7CistICBQeU9iamVjdCogdG1wOworLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRXZlbnQgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRXZlbnQgKilvOworLSAgdG1wID0gKChQeU9iamVjdCopcC0+ZGF0YSk7CistICBw LT5kYXRhID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgUHlfWERFQ1JFRih0bXAp OworLSAgdG1wID0gKChQeU9iamVjdCopcC0+cmVwbHlfdXNlcmRhdGEpOworLSAgcC0+cmVwbHlf dXNlcmRhdGEgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBQeV9YREVDUkVGKHRt cCk7CistICByZXR1cm4gMDsKKy19CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9w Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfZXJyb3Jfc3RyKFB5T2JqZWN0ICpvLCBDWVRI T05fVU5VU0VEIHZvaWQgKngpIHsKKy0gIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50XzllcnJvcl9zdHJfMV9fZ2V0X18obyk7CistfQorLQorLXN0YXRpYyBQeU9i amVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X25hbWUoUHlP YmplY3QgKm8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworLSAgcmV0dXJuIF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfMV9fZ2V0X18obyk7CistfQorLQorLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 X2lkKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKy0gIHJldHVybiBfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8xX19nZXRfXyhvKTsKKy19Cist Cistc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf aWQoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKy0g IGlmICh2KSB7CistICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2 ZW50XzJpZF8zX19zZXRfXyhvLCB2KTsKKy0gIH0KKy0gIGVsc2UgeworLSAgICBQeUVycl9TZXRT dHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwgIl9fZGVsX18iKTsKKy0gICAgcmV0dXJu IC0xOworLSAgfQorLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF9lcnJvcihQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2 b2lkICp4KSB7CistICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF81ZXJyb3JfMV9fZ2V0X18obyk7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhfc2V0cHJvcF85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2Vycm9yKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAq diwgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CistICBpZiAodikgeworLSAgICByZXR1cm4gX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF81ZXJyb3JfM19fc2V0X18obywgdik7 CistICB9CistICBlbHNlIHsKKy0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVu dGVkRXJyb3IsICJfX2RlbF9fIik7CistICAgIHJldHVybiAtMTsKKy0gIH0KKy19CistCistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf ZGF0YShQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CistICByZXR1cm4gX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80ZGF0YV8xX19nZXRfXyhvKTsKKy19 CistCistc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZl bnRfZGF0YShQeU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkg eworLSAgaWYgKHYpIHsKKy0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfNGRhdGFfM19fc2V0X18obywgdik7CistICB9CistICBlbHNlIHsKKy0gICAgcmV0 dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfNV9fZGVsX18o byk7CistICB9CistfQorLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfNUV2ZW50X3JlcGx5X3VzZXJkYXRhKFB5T2JqZWN0ICpvLCBDWVRIT05f VU5VU0VEIHZvaWQgKngpIHsKKy0gIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50XzE0cmVwbHlfdXNlcmRhdGFfMV9fZ2V0X18obyk7CistfQorLQorLXN0YXRpYyBp bnQgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X3JlcGx5X3VzZXJk YXRhKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Cist ICBpZiAodikgeworLSAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF8xNHJlcGx5X3VzZXJkYXRhXzNfX3NldF9fKG8sIHYpOworLSAgfQorLSAgZWxzZSB7Cist ICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVwbHlf dXNlcmRhdGFfNV9fZGVsX18obyk7CistICB9CistfQorLQorLXN0YXRpYyBQeU1ldGhvZERlZiBf X3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudFtdID0geworLSAgeyJfX3Jl ZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50XzFfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9LAorLSAgeyJfX3Nl dHN0YXRlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl81RXZlbnRfM19fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhfTywgMH0sCistICB7MCwgMCwg MCwgMH0KKy19OworLQorLXN0YXRpYyBzdHJ1Y3QgUHlHZXRTZXREZWYgX19weXhfZ2V0c2V0c185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnRbXSA9IHsKKy0gIHsoY2hhciAqKSJlcnJvcl9zdHIi LCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfZXJyb3Jfc3RyLCAw LCAoY2hhciAqKSJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRoZSBlcnJvciBwcm9lcHJ0eSIsIDB9LAor LSAgeyhjaGFyICopIm5hbWUiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 RXZlbnRfbmFtZSwgMCwgKGNoYXIgKikibXB2X2V2ZW50X25hbWUgb2YgdGhlIGV2ZW50IGlkIiwg MH0sCistICB7KGNoYXIgKikiaWQiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfaWQsIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9p ZCwgKGNoYXIgKikwLCAwfSwKKy0gIHsoY2hhciAqKSJlcnJvciIsIF9fcHl4X2dldHByb3BfOXZp ZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9lcnJvciwgX19weXhfc2V0cHJvcF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50X2Vycm9yLCAoY2hhciAqKTAsIDB9LAorLSAgeyhjaGFyICopImRh dGEiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfZGF0YSwgX19w eXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2RhdGEsIChjaGFyICopMCwg MH0sCistICB7KGNoYXIgKikicmVwbHlfdXNlcmRhdGEiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl81RXZlbnRfcmVwbHlfdXNlcmRhdGEsIF9fcHl4X3NldHByb3BfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF9yZXBseV91c2VyZGF0YSwgKGNoYXIgKikwLCAwfSwKKy0g IHswLCAwLCAwLCAwLCAwfQorLX07CistCistc3RhdGljIFB5VHlwZU9iamVjdCBfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCA9IHsKKy0gIFB5VmFyT2JqZWN0X0hFQURfSU5J VCgwLCAwKQorLSAgInZpZGN1dHRlci5saWJzLm1wdi5FdmVudCIsIC8qdHBfbmFtZSovCistICBz aXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpLCAvKnRw X2Jhc2ljc2l6ZSovCistICAwLCAvKnRwX2l0ZW1zaXplKi8KKy0gIF9fcHl4X3RwX2RlYWxsb2Nf OXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50LCAvKnRwX2RlYWxsb2MqLworLSAgI2lmIFBZX1ZF UlNJT05fSEVYIDwgMHgwMzA4MDBiNAorLSAgMCwgLyp0cF9wcmludCovCistICAjZW5kaWYKKy0g ICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0CistICAwLCAvKnRwX3ZlY3RvcmNhbGxf b2Zmc2V0Ki8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9nZXRhdHRyKi8KKy0gIDAsIC8qdHBfc2V0 YXR0ciovCistICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKy0gIDAsIC8qdHBfY29tcGFyZSov CistICAjZW5kaWYKKy0gICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gIDAsIC8qdHBfYXNf YXN5bmMqLworLSAgI2VuZGlmCistICAwLCAvKnRwX3JlcHIqLworLSAgMCwgLyp0cF9hc19udW1i ZXIqLworLSAgMCwgLyp0cF9hc19zZXF1ZW5jZSovCistICAwLCAvKnRwX2FzX21hcHBpbmcqLwor LSAgMCwgLyp0cF9oYXNoKi8KKy0gIDAsIC8qdHBfY2FsbCovCistICAwLCAvKnRwX3N0ciovCist ICAwLCAvKnRwX2dldGF0dHJvKi8KKy0gIDAsIC8qdHBfc2V0YXR0cm8qLworLSAgMCwgLyp0cF9h c19idWZmZXIqLworLSAgUHlfVFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9O X1RBR3xQeV9UUEZMQUdTX0NIRUNLVFlQRVN8UHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUnxQeV9U UEZMQUdTX0JBU0VUWVBFfFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCistICAiV3Jh cHM6IG1wdl9ldmVudCIsIC8qdHBfZG9jKi8KKy0gIF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FdmVudCwgLyp0cF90cmF2ZXJzZSovCistICBfX3B5eF90cF9jbGVhcl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQsIC8qdHBfY2xlYXIqLworLSAgMCwgLyp0cF9yaWNo Y29tcGFyZSovCistICAwLCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKy0gIDAsIC8qdHBfaXRlciov CistICAwLCAvKnRwX2l0ZXJuZXh0Ki8KKy0gIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGli c18zbXB2X0V2ZW50LCAvKnRwX21ldGhvZHMqLworLSAgMCwgLyp0cF9tZW1iZXJzKi8KKy0gIF9f cHl4X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50LCAvKnRwX2dldHNldCovCist ICAwLCAvKnRwX2Jhc2UqLworLSAgMCwgLyp0cF9kaWN0Ki8KKy0gIDAsIC8qdHBfZGVzY3JfZ2V0 Ki8KKy0gIDAsIC8qdHBfZGVzY3Jfc2V0Ki8KKy0gIDAsIC8qdHBfZGljdG9mZnNldCovCistICAw LCAvKnRwX2luaXQqLworLSAgMCwgLyp0cF9hbGxvYyovCistICBfX3B5eF90cF9uZXdfOXZpZGN1 dHRlcl80bGlic18zbXB2X0V2ZW50LCAvKnRwX25ldyovCistICAwLCAvKnRwX2ZyZWUqLworLSAg MCwgLyp0cF9pc19nYyovCistICAwLCAvKnRwX2Jhc2VzKi8KKy0gIDAsIC8qdHBfbXJvKi8KKy0g IDAsIC8qdHBfY2FjaGUqLworLSAgMCwgLyp0cF9zdWJjbGFzc2VzKi8KKy0gIDAsIC8qdHBfd2Vh a2xpc3QqLworLSAgMCwgLyp0cF9kZWwqLworLSAgMCwgLyp0cF92ZXJzaW9uX3RhZyovCistICAj aWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA0MDBhMQorLSAgMCwgLyp0cF9maW5hbGl6ZSovCist ICAjZW5kaWYKKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGIxCistICAwLCAvKnRw X3ZlY3RvcmNhbGwqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4 MDBiNCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwOTAwMDAKKy0gIDAsIC8qdHBfcHJpbnQqLwor LSAgI2VuZGlmCistfTsKKy1zdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0OworLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0KFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAq YSwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqaykgeworLSAgc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqcDsKKy0gIFB5T2JqZWN0ICpvOworLSAgaWYgKGxp a2VseSgodC0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUKSA9PSAwKSkgeworLSAg ICBvID0gKCp0LT50cF9hbGxvYykodCwgMCk7CistICB9IGVsc2UgeworLSAgICBvID0gKFB5T2Jq ZWN0ICopIFB5QmFzZU9iamVjdF9UeXBlLnRwX25ldyh0LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7 CistICB9CistICBpZiAodW5saWtlbHkoIW8pKSByZXR1cm4gMDsKKy0gIHAgPSAoKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilvKTsKKy0gIHAtPl9fcHl4 X3Z0YWIgPSBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0OworLSAg cC0+Y2FsbGJhY2sgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBwLT5jYWxsYmFj a3RocmVhZCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKy0gIHAtPnJlcGx5X3VzZXJk YXRhID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgaWYgKHVubGlrZWx5KF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zN19fY2luaXRfXyhvLCBfX3B5eF9l bXB0eV90dXBsZSwgTlVMTCkgPCAwKSkgZ290byBiYWQ7CistICByZXR1cm4gbzsKKy0gIGJhZDoK Ky0gIFB5X0RFQ1JFRihvKTsgbyA9IDA7CistICByZXR1cm4gTlVMTDsKKy19CistCistc3RhdGlj IHZvaWQgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dChQeU9i amVjdCAqbykgeworLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICopbzsKKy0gICNpZiBDWVRIT05fVVNFX1RQX0ZJTkFMSVpFCistICBpZiAodW5saWtlbHkoUHlU eXBlX0hhc0ZlYXR1cmUoUHlfVFlQRShvKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQ eV9UWVBFKG8pLT50cF9maW5hbGl6ZSkgJiYgIV9QeUdDX0ZJTkFMSVpFRChvKSkgeworLSAgICBp ZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKG8pKSByZXR1cm47CistICB9Cist ICAjZW5kaWYKKy0gIFB5T2JqZWN0X0dDX1VuVHJhY2sobyk7CistICB7CistICAgIFB5T2JqZWN0 ICpldHlwZSwgKmV2YWwsICpldGI7CistICAgIFB5RXJyX0ZldGNoKCZldHlwZSwgJmV2YWwsICZl dGIpOworLSAgICBfX1B5eF9TRVRfUkVGQ05UKG8sIFB5X1JFRkNOVChvKSArIDEpOworLSAgICBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDdfX2RlYWxsb2NfXyhvKTsK Ky0gICAgX19QeXhfU0VUX1JFRkNOVChvLCBQeV9SRUZDTlQobykgLSAxKTsKKy0gICAgUHlFcnJf UmVzdG9yZShldHlwZSwgZXZhbCwgZXRiKTsKKy0gIH0KKy0gIFB5X0NMRUFSKHAtPmNhbGxiYWNr KTsKKy0gIFB5X0NMRUFSKHAtPmNhbGxiYWNrdGhyZWFkKTsKKy0gIFB5X0NMRUFSKHAtPnJlcGx5 X3VzZXJkYXRhKTsKKy0gICgqUHlfVFlQRShvKS0+dHBfZnJlZSkobyk7CistfQorLQorLXN0YXRp YyBpbnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQoUHlP YmplY3QgKm8sIHZpc2l0cHJvYyB2LCB2b2lkICphKSB7CistICBpbnQgZTsKKy0gIHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKnAgPSAoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKW87CistICBpZiAocC0+Y2FsbGJh Y2spIHsKKy0gICAgZSA9ICgqdikocC0+Y2FsbGJhY2ssIGEpOyBpZiAoZSkgcmV0dXJuIGU7Cist ICB9CistICBpZiAocC0+Y2FsbGJhY2t0aHJlYWQpIHsKKy0gICAgZSA9ICgqdikocC0+Y2FsbGJh Y2t0aHJlYWQsIGEpOyBpZiAoZSkgcmV0dXJuIGU7CistICB9CistICBpZiAocC0+cmVwbHlfdXNl cmRhdGEpIHsKKy0gICAgZSA9ICgqdikocC0+cmVwbHlfdXNlcmRhdGEsIGEpOyBpZiAoZSkgcmV0 dXJuIGU7CistICB9CistICByZXR1cm4gMDsKKy19CistCistc3RhdGljIGludCBfX3B5eF90cF9j bGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dChQeU9iamVjdCAqbykgeworLSAgUHlP YmplY3QqIHRtcDsKKy0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCAqKW87CistICB0bXAgPSAoKFB5T2JqZWN0KilwLT5jYWxsYmFjayk7CistICBwLT5jYWxsYmFj ayA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKy0gIFB5X1hERUNSRUYodG1wKTsKKy0g IHRtcCA9ICgoUHlPYmplY3QqKXAtPmNhbGxiYWNrdGhyZWFkKTsKKy0gIHAtPmNhbGxiYWNrdGhy ZWFkID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgUHlfWERFQ1JFRih0bXApOwor LSAgdG1wID0gKChQeU9iamVjdCopcC0+cmVwbHlfdXNlcmRhdGEpOworLSAgcC0+cmVwbHlfdXNl cmRhdGEgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBQeV9YREVDUkVGKHRtcCk7 CistICByZXR1cm4gMDsKKy19CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9hcGlfdmVyc2lvbihQeU9iamVjdCAqbywgQ1lU SE9OX1VOVVNFRCB2b2lkICp4KSB7CistICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzExYXBpX3ZlcnNpb25fMV9fZ2V0X18obyk7CistfQorLQorLXN0YXRp YyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf bmFtZShQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CistICByZXR1cm4gX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRuYW1lXzFfX2dldF9fKG8pOwor LX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0X3RpbWUoUHlPYmplY3QgKm8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgewor LSAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80dGltZV8x X19nZXRfXyhvKTsKKy19CistCistc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21ldGhvZHNfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHRbXSA9IHsKKy0gIHsic3VzcGVuZCIsIChQeUNGdW5j dGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMXN1c3BlbmQsIE1F VEhfTk9BUkdTLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X3N1c3Bl bmR9LAorLSAgeyJyZXN1bWUiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzNyZXN1bWUsIE1FVEhfTk9BUkdTLCBfX3B5eF9kb2NfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzJyZXN1bWV9LAorLSAgeyJyZXF1ZXN0X2V2ZW50IiwgKFB5 Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzVyZXF1ZXN0X2V2ZW50LCBNRVRIX1ZBUkFSR1N8TUVU SF9LRVlXT1JEUywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80cmVx dWVzdF9ldmVudH0sCistICB7InNldF9sb2dfbGV2ZWwiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzdzZXRfbG9nX2xldmVsLCBNRVRIX08sIF9f cHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNnNldF9sb2dfbGV2ZWx9LAor LSAgeyJsb2FkX2NvbmZpZyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfOWxvYWRfY29uZmlnLCBNRVRIX08sIF9fcHl4X2RvY185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfOGxvYWRfY29uZmlnfSwKKy0gIHsiX2Zvcm1hdF9mb3IiLCAo UHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExX2Zv cm1hdF9mb3IsIE1FVEhfTywgMH0sCistICB7ImNvbW1hbmQiLCAoUHlDRnVuY3Rpb24pKHZvaWQq KShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMTNjb21tYW5kLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX19weXhfZG9j Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMmNvbW1hbmR9LAorLSAgeyJnZXRfcHJv cGVydHlfYXN5bmMiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3Jk cylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTVnZXRfcHJvcGVydHlf YXN5bmMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzE0Z2V0X3Byb3BlcnR5X2FzeW5jfSwKKy0gIHsidHJ5X2dldF9w cm9wZXJ0eV9hc3luYyIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdv cmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xN3RyeV9nZXRfcHJv cGVydHlfYXN5bmMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfSwKKy0gIHsidHJ5X2dl dF9wcm9wZXJ0eSIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRz KV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOXRyeV9nZXRfcHJvcGVy dHksIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfSwKKy0gIHsiZ2V0X3Byb3BlcnR5Iiwg KFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMWdl dF9wcm9wZXJ0eSwgTUVUSF9PLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzIwZ2V0X3Byb3BlcnR5fSwKKy0gIHsic2V0X3Byb3BlcnR5IiwgKFB5Q0Z1bmN0aW9uKSh2 b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzIzc2V0X3Byb3BlcnR5LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywg X19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMnNldF9wcm9wZXJ0eX0s CistICB7InNldF9vcHRpb24iLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhL ZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjVzZXRfb3B0 aW9uLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8yNHNldF9vcHRpb259LAorLSAgeyJpbml0aWFsaXplIiwgKFB5Q0Z1 bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yN2luaXRpYWxp emUsIE1FVEhfTk9BUkdTLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzI2aW5pdGlhbGl6ZX0sCistICB7IndhaXRfZXZlbnQiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQ eUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMjl3YWl0X2V2ZW50LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX19weXhfZG9j Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yOHdhaXRfZXZlbnR9LAorLSAgeyJ3YWtl dXAiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzMxd2FrZXVwLCBNRVRIX05PQVJHUywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8zMHdha2V1cH0sCistICB7InNldF93YWtldXBfY2FsbGJhY2siLCAoUHlDRnVuY3Rp b24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMzc2V0X3dha2V1cF9j YWxsYmFjaywgTUVUSF9PLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzMyc2V0X3dha2V1cF9jYWxsYmFja30sCistICB7ImdldF93YWtldXBfcGlwZSIsIChQeUNGdW5j dGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzVnZXRfd2FrZXVw X3BpcGUsIE1FVEhfTk9BUkdTLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzM0Z2V0X3dha2V1cF9waXBlfSwKKy0gIHsib2JzZXJ2ZV9wcm9wZXJ0eSIsIChQeUNGdW5j dGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8zOW9ic2VydmVfcHJvcGVydHksIE1FVEhfVkFSQVJHU3xNRVRI X0tFWVdPUkRTLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4b2Jz ZXJ2ZV9wcm9wZXJ0eX0sCistICB7InVub2JzZXJ2ZV9wcm9wZXJ0eSIsIChQeUNGdW5jdGlvbilf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDF1bm9ic2VydmVfcHJvcGVy dHksIE1FVEhfTywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80MHVu b2JzZXJ2ZV9wcm9wZXJ0eX0sCistICB7InNodXRkb3duIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80M3NodXRkb3duLCBNRVRIX05PQVJHUywg MH0sCistICB7Im9wZW5nbF9jYl9hcGkiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzQ1b3BlbmdsX2NiX2FwaSwgTUVUSF9OT0FSR1MsIDB9LAor LSAgeyJfX3JlZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfNDlfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9 LAorLSAgeyJfX3NldHN0YXRlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF81MV9fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhfTywg MH0sCistICB7MCwgMCwgMCwgMH0KKy19OworLQorLXN0YXRpYyBzdHJ1Y3QgUHlHZXRTZXREZWYg X19weXhfZ2V0c2V0c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dFtdID0geworLSAgeyhj aGFyICopImFwaV92ZXJzaW9uIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfYXBpX3ZlcnNpb24sIDAsIChjaGFyICopMCwgMH0sCistICB7KGNoYXIgKikibmFt ZSIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X25hbWUsIDAs IChjaGFyICopIlVuaXF1ZSBuYW1lIGZvciBldmVyeSBjb250ZXh0IGNyZWF0ZWQuXG5cbiAgICAg ICAgV3JhcHM6IG1wdl9jbGllbnRfbmFtZVxuICAgICAgICAiLCAwfSwKKy0gIHsoY2hhciAqKSJ0 aW1lIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfdGltZSwg MCwgKGNoYXIgKikiSW50ZXJuYWwgbXB2IGNsaWVudCB0aW1lLlxuXG4gICAgICAgIEhhcyBhbiBh cmJpdHJhcnkgc3RhcnQgb2Zmc2V0LCBidXQgd2lsbCBuZXZlciB3cmFwIG9yIGdvIGJhY2t3YXJk cy5cblxuICAgICAgICBXcmFwczogbXB2X2dldF90aW1lX3VzXG4gICAgICAgICIsIDB9LAorLSAg ezAsIDAsIDAsIDAsIDB9CistfTsKKy0KKy1zdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgPSB7CistICBQeVZhck9iamVjdF9IRUFEX0lO SVQoMCwgMCkKKy0gICJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dCIsIC8qdHBfbmFtZSovCist ICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCks IC8qdHBfYmFzaWNzaXplKi8KKy0gIDAsIC8qdHBfaXRlbXNpemUqLworLSAgX19weXhfdHBfZGVh bGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgLyp0cF9kZWFsbG9jKi8KKy0gICNp ZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKy0gIDAsIC8qdHBfcHJpbnQqLworLSAgI2Vu ZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorLSAgMCwgLyp0cF92ZWN0 b3JjYWxsX29mZnNldCovCistICAjZW5kaWYKKy0gIDAsIC8qdHBfZ2V0YXR0ciovCistICAwLCAv KnRwX3NldGF0dHIqLworLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCistICAwLCAvKnRwX2Nv bXBhcmUqLworLSAgI2VuZGlmCistICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICAwLCAv KnRwX2FzX2FzeW5jKi8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9yZXByKi8KKy0gIDAsIC8qdHBf YXNfbnVtYmVyKi8KKy0gIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworLSAgMCwgLyp0cF9hc19tYXBw aW5nKi8KKy0gIDAsIC8qdHBfaGFzaCovCistICAwLCAvKnRwX2NhbGwqLworLSAgMCwgLyp0cF9z dHIqLworLSAgMCwgLyp0cF9nZXRhdHRybyovCistICAwLCAvKnRwX3NldGF0dHJvKi8KKy0gIDAs IC8qdHBfYXNfYnVmZmVyKi8KKy0gIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0hBVkVf VkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZG RVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLwor LSAgIkJhc2UgY2xhc3Mgd3JhcHBpbmcgYSBjb250ZXh0IHRvIGludGVyYWN0IHdpdGggbXB2Llxu XG4gICAgQXNzdW1lIGFsbCBjYWxscyBjYW4gcmFpc2UgTVBWRXJyb3IuXG5cbiAgICBXcmFwczog bXB2X2NyZWF0ZSwgbXB2X2Rlc3Ryb3kgYW5kIGFsbCBtcHZfaGFuZGxlIHJlbGF0ZWQgY2FsbHNc biAgICAiLCAvKnRwX2RvYyovCistICBfX3B5eF90cF90cmF2ZXJzZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCwgLyp0cF90cmF2ZXJzZSovCistICBfX3B5eF90cF9jbGVhcl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgLyp0cF9jbGVhciovCistICAwLCAvKnRwX3JpY2hjb21w YXJlKi8KKy0gIDAsIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworLSAgMCwgLyp0cF9pdGVyKi8KKy0g IDAsIC8qdHBfaXRlcm5leHQqLworLSAgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dCwgLyp0cF9tZXRob2RzKi8KKy0gIDAsIC8qdHBfbWVtYmVycyovCistICBfX3B5 eF9nZXRzZXRzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCAvKnRwX2dldHNldCovCist ICAwLCAvKnRwX2Jhc2UqLworLSAgMCwgLyp0cF9kaWN0Ki8KKy0gIDAsIC8qdHBfZGVzY3JfZ2V0 Ki8KKy0gIDAsIC8qdHBfZGVzY3Jfc2V0Ki8KKy0gIDAsIC8qdHBfZGljdG9mZnNldCovCistICAw LCAvKnRwX2luaXQqLworLSAgMCwgLyp0cF9hbGxvYyovCistICBfX3B5eF90cF9uZXdfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQsIC8qdHBfbmV3Ki8KKy0gIDAsIC8qdHBfZnJlZSovCist ICAwLCAvKnRwX2lzX2djKi8KKy0gIDAsIC8qdHBfYmFzZXMqLworLSAgMCwgLyp0cF9tcm8qLwor LSAgMCwgLyp0cF9jYWNoZSovCistICAwLCAvKnRwX3N1YmNsYXNzZXMqLworLSAgMCwgLyp0cF93 ZWFrbGlzdCovCistICAwLCAvKnRwX2RlbCovCistICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KKy0g ICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCistICAwLCAvKnRwX2ZpbmFsaXplKi8K Ky0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEKKy0gIDAsIC8q dHBfdmVjdG9yY2FsbCovCistICAjZW5kaWYKKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAz MDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAorLSAgMCwgLyp0cF9wcmludCov CistICAjZW5kaWYKKy19OworLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0KFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqYSwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqaykgeworLSAgc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqcDsKKy0gIFB5 T2JqZWN0ICpvOworLSAgaWYgKGxpa2VseSgodC0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0lTX0FC U1RSQUNUKSA9PSAwKSkgeworLSAgICBvID0gKCp0LT50cF9hbGxvYykodCwgMCk7CistICB9IGVs c2UgeworLSAgICBvID0gKFB5T2JqZWN0ICopIFB5QmFzZU9iamVjdF9UeXBlLnRwX25ldyh0LCBf X3B5eF9lbXB0eV90dXBsZSwgMCk7CistICB9CistICBpZiAodW5saWtlbHkoIW8pKSByZXR1cm4g MDsKKy0gIHAgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5H TENvbnRleHQgKilvKTsKKy0gIHAtPnVwZGF0ZV9jYiA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9O b25lKTsKKy0gIHJldHVybiBvOworLX0KKy0KKy1zdGF0aWMgdm9pZCBfX3B5eF90cF9kZWFsbG9j Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0KFB5T2JqZWN0ICpvKSB7CistICBz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpwID0g KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQgKilv OworLSAgI2lmIENZVEhPTl9VU0VfVFBfRklOQUxJWkUKKy0gIGlmICh1bmxpa2VseShQeVR5cGVf SGFzRmVhdHVyZShQeV9UWVBFKG8pLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmIFB5X1RZ UEUobyktPnRwX2ZpbmFsaXplKSAmJiAhX1B5R0NfRklOQUxJWkVEKG8pKSB7CistICAgIGlmIChQ eU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2MobykpIHJldHVybjsKKy0gIH0KKy0gICNl bmRpZgorLSAgUHlPYmplY3RfR0NfVW5UcmFjayhvKTsKKy0gIHsKKy0gICAgUHlPYmplY3QgKmV0 eXBlLCAqZXZhbCwgKmV0YjsKKy0gICAgUHlFcnJfRmV0Y2goJmV0eXBlLCAmZXZhbCwgJmV0Yik7 CistICAgIF9fUHl4X1NFVF9SRUZDTlQobywgUHlfUkVGQ05UKG8pICsgMSk7CistICAgIF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTNfX2RlYWxsb2NfXyhv KTsKKy0gICAgX19QeXhfU0VUX1JFRkNOVChvLCBQeV9SRUZDTlQobykgLSAxKTsKKy0gICAgUHlF cnJfUmVzdG9yZShldHlwZSwgZXZhbCwgZXRiKTsKKy0gIH0KKy0gIFB5X0NMRUFSKHAtPnVwZGF0 ZV9jYik7CistICAoKlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOworLX0KKy0KKy1zdGF0aWMgaW50 IF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0KFB5 T2JqZWN0ICpvLCB2aXNpdHByb2Mgdiwgdm9pZCAqYSkgeworLSAgaW50IGU7CistICBzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpwID0gKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQgKilvOworLSAg aWYgKHAtPnVwZGF0ZV9jYikgeworLSAgICBlID0gKCp2KShwLT51cGRhdGVfY2IsIGEpOyBpZiAo ZSkgcmV0dXJuIGU7CistICB9CistICByZXR1cm4gMDsKKy19CistCistc3RhdGljIGludCBfX3B5 eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dChQeU9iamVjdCAq bykgeworLSAgUHlPYmplY3QqIHRtcDsKKy0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X09wZW5HTENvbnRleHQgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqKW87CistICB0bXAgPSAoKFB5T2JqZWN0KilwLT51 cGRhdGVfY2IpOworLSAgcC0+dXBkYXRlX2NiID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUp OworLSAgUHlfWERFQ1JFRih0bXApOworLSAgcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBQeU1l dGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0 W10gPSB7CistICB7ImluaXRfZ2wiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldp dGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0 XzNpbml0X2dsLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgMH0sCistICB7InNldF91cGRh dGVfY2FsbGJhY2siLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzT3BlbkdMQ29udGV4dF81c2V0X3VwZGF0ZV9jYWxsYmFjaywgTUVUSF9PLCAwfSwKKy0gIHsi ZHJhdyIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfN2RyYXcsIE1FVEhfVkFS QVJHU3xNRVRIX0tFWVdPUkRTLCAwfSwKKy0gIHsicmVwb3J0X2ZsaXAiLCAoUHlDRnVuY3Rpb24p X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF85cmVwb3J0X2Zs aXAsIE1FVEhfTywgMH0sCistICB7InVuaW5pdF9nbCIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzExdW5pbml0X2dsLCBNRVRIX05P QVJHUywgMH0sCistICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTVfX3JlZHVjZV9jeXRob25f XywgTUVUSF9OT0FSR1MsIDB9LAorLSAgeyJfX3NldHN0YXRlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0 aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTdfX3Nl dHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAorLSAgezAsIDAsIDAsIDB9CistfTsKKy0KKy1z dGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5H TENvbnRleHQgPSB7CistICBQeVZhck9iamVjdF9IRUFEX0lOSVQoMCwgMCkKKy0gICJ2aWRjdXR0 ZXIubGlicy5tcHYuT3BlbkdMQ29udGV4dCIsIC8qdHBfbmFtZSovCistICBzaXplb2Yoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCksIC8qdHBfYmFz aWNzaXplKi8KKy0gIDAsIC8qdHBfaXRlbXNpemUqLworLSAgX19weXhfdHBfZGVhbGxvY185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCwgLyp0cF9kZWFsbG9jKi8KKy0gICNpZiBQ WV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKy0gIDAsIC8qdHBfcHJpbnQqLworLSAgI2VuZGlm CistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorLSAgMCwgLyp0cF92ZWN0b3Jj YWxsX29mZnNldCovCistICAjZW5kaWYKKy0gIDAsIC8qdHBfZ2V0YXR0ciovCistICAwLCAvKnRw X3NldGF0dHIqLworLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCistICAwLCAvKnRwX2NvbXBh cmUqLworLSAgI2VuZGlmCistICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICAwLCAvKnRw X2FzX2FzeW5jKi8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9yZXByKi8KKy0gIDAsIC8qdHBfYXNf bnVtYmVyKi8KKy0gIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworLSAgMCwgLyp0cF9hc19tYXBwaW5n Ki8KKy0gIDAsIC8qdHBfaGFzaCovCistICAwLCAvKnRwX2NhbGwqLworLSAgMCwgLyp0cF9zdHIq LworLSAgMCwgLyp0cF9nZXRhdHRybyovCistICAwLCAvKnRwX3NldGF0dHJvKi8KKy0gIDAsIC8q dHBfYXNfYnVmZmVyKi8KKy0gIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0hBVkVfVkVS U0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVJ8 UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworLSAg MCwgLyp0cF9kb2MqLworLSAgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2 X09wZW5HTENvbnRleHQsIC8qdHBfdHJhdmVyc2UqLworLSAgX19weXhfdHBfY2xlYXJfOXZpZGN1 dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQsIC8qdHBfY2xlYXIqLworLSAgMCwgLyp0cF9y aWNoY29tcGFyZSovCistICAwLCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKy0gIDAsIC8qdHBfaXRl ciovCistICAwLCAvKnRwX2l0ZXJuZXh0Ki8KKy0gIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80 bGlic18zbXB2X09wZW5HTENvbnRleHQsIC8qdHBfbWV0aG9kcyovCistICAwLCAvKnRwX21lbWJl cnMqLworLSAgMCwgLyp0cF9nZXRzZXQqLworLSAgMCwgLyp0cF9iYXNlKi8KKy0gIDAsIC8qdHBf ZGljdCovCistICAwLCAvKnRwX2Rlc2NyX2dldCovCistICAwLCAvKnRwX2Rlc2NyX3NldCovCist ICAwLCAvKnRwX2RpY3RvZmZzZXQqLworLSAgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzT3BlbkdMQ29udGV4dF8xX19pbml0X18sIC8qdHBfaW5pdCovCistICAwLCAvKnRwX2FsbG9j Ki8KKy0gIF9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCwg Lyp0cF9uZXcqLworLSAgMCwgLyp0cF9mcmVlKi8KKy0gIDAsIC8qdHBfaXNfZ2MqLworLSAgMCwg Lyp0cF9iYXNlcyovCistICAwLCAvKnRwX21ybyovCistICAwLCAvKnRwX2NhY2hlKi8KKy0gIDAs IC8qdHBfc3ViY2xhc3NlcyovCistICAwLCAvKnRwX3dlYWtsaXN0Ki8KKy0gIDAsIC8qdHBfZGVs Ki8KKy0gIDAsIC8qdHBfdmVyc2lvbl90YWcqLworLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4 MDMwNDAwYTEKKy0gIDAsIC8qdHBfZmluYWxpemUqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVS U0lPTl9IRVggPj0gMHgwMzA4MDBiMQorLSAgMCwgLyp0cF92ZWN0b3JjYWxsKi8KKy0gICNlbmRp ZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVgg PCAweDAzMDkwMDAwCistICAwLCAvKnRwX3ByaW50Ki8KKy0gICNlbmRpZgorLX07Cistc3RhdGlj IHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtczsKKy0K Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1Jl bmRlclBhcmFtcyhQeVR5cGVPYmplY3QgKnQsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmEsIENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKKy0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKnA7CistICBQeU9iamVjdCAqbzsKKy0gIGlmIChs aWtlbHkoKHQtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19JU19BQlNUUkFDVCkgPT0gMCkpIHsKKy0g ICAgbyA9ICgqdC0+dHBfYWxsb2MpKHQsIDApOworLSAgfSBlbHNlIHsKKy0gICAgbyA9IChQeU9i amVjdCAqKSBQeUJhc2VPYmplY3RfVHlwZS50cF9uZXcodCwgX19weXhfZW1wdHlfdHVwbGUsIDAp OworLSAgfQorLSAgaWYgKHVubGlrZWx5KCFvKSkgcmV0dXJuIDA7CistICBwID0gKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopbyk7CistICBw LT5fX3B5eF92dGFiID0gX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRl clBhcmFtczsKKy0gIHAtPm93bmVkID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAg cmV0dXJuIG87CistfQorLQorLXN0YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMoUHlPYmplY3QgKm8pIHsKKy0gIHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKnAgPSAoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKW87CistICAjaWYg Q1lUSE9OX1VTRV9UUF9GSU5BTElaRQorLSAgaWYgKHVubGlrZWx5KFB5VHlwZV9IYXNGZWF0dXJl KFB5X1RZUEUobyksIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkgJiYgUHlfVFlQRShvKS0+dHBf ZmluYWxpemUpICYmICFfUHlHQ19GSU5BTElaRUQobykpIHsKKy0gICAgaWYgKFB5T2JqZWN0X0Nh bGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhvKSkgcmV0dXJuOworLSAgfQorLSAgI2VuZGlmCistICBQ eU9iamVjdF9HQ19VblRyYWNrKG8pOworLSAgeworLSAgICBQeU9iamVjdCAqZXR5cGUsICpldmFs LCAqZXRiOworLSAgICBQeUVycl9GZXRjaCgmZXR5cGUsICZldmFsLCAmZXRiKTsKKy0gICAgX19Q eXhfU0VUX1JFRkNOVChvLCBQeV9SRUZDTlQobykgKyAxKTsKKy0gICAgX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc18zX19kZWFsbG9jX18obyk7CistICAgIF9f UHl4X1NFVF9SRUZDTlQobywgUHlfUkVGQ05UKG8pIC0gMSk7CistICAgIFB5RXJyX1Jlc3RvcmUo ZXR5cGUsIGV2YWwsIGV0Yik7CistICB9CistICBQeV9DTEVBUihwLT5vd25lZCk7CistICAoKlB5 X1RZUEUobyktPnRwX2ZyZWUpKG8pOworLX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3RwX3RyYXZl cnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKFB5T2JqZWN0ICpvLCB2aXNp dHByb2Mgdiwgdm9pZCAqYSkgeworLSAgaW50IGU7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilvOworLSAgaWYgKHAtPm93bmVkKSB7 CistICAgIGUgPSAoKnYpKHAtPm93bmVkLCBhKTsgaWYgKGUpIHJldHVybiBlOworLSAgfQorLSAg cmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80 bGlic18zbXB2X19SZW5kZXJQYXJhbXMoUHlPYmplY3QgKm8pIHsKKy0gIFB5T2JqZWN0KiB0bXA7 CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z ICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJh bXMgKilvOworLSAgdG1wID0gKChQeU9iamVjdCopcC0+b3duZWQpOworLSAgcC0+b3duZWQgPSBQ eV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBQeV9YREVDUkVGKHRtcCk7CistICByZXR1 cm4gMDsKKy19CistCistc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXNbXSA9IHsKKy0gIHsiX19yZWR1Y2VfY3l0aG9uX18i LCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBh cmFtc181X19yZWR1Y2VfY3l0aG9uX18sIE1FVEhfTk9BUkdTLCAwfSwKKy0gIHsiX19zZXRzdGF0 ZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNfUmVuZGVyUGFyYW1zXzdfX3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAorLSAgezAs IDAsIDAsIDB9CistfTsKKy0KKy1zdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgPSB7CistICBQeVZhck9iamVjdF9IRUFEX0lO SVQoMCwgMCkKKy0gICJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlbmRlclBhcmFtcyIsIC8qdHBfbmFt ZSovCistICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1Jl bmRlclBhcmFtcyksIC8qdHBfYmFzaWNzaXplKi8KKy0gIDAsIC8qdHBfaXRlbXNpemUqLworLSAg X19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcywgLyp0 cF9kZWFsbG9jKi8KKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKy0gIDAsIC8q dHBfcHJpbnQqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBi NAorLSAgMCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCistICAjZW5kaWYKKy0gIDAsIC8qdHBf Z2V0YXR0ciovCistICAwLCAvKnRwX3NldGF0dHIqLworLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04g PCAzCistICAwLCAvKnRwX2NvbXBhcmUqLworLSAgI2VuZGlmCistICAjaWYgUFlfTUFKT1JfVkVS U0lPTiA+PSAzCistICAwLCAvKnRwX2FzX2FzeW5jKi8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9y ZXByKi8KKy0gIDAsIC8qdHBfYXNfbnVtYmVyKi8KKy0gIDAsIC8qdHBfYXNfc2VxdWVuY2UqLwor LSAgMCwgLyp0cF9hc19tYXBwaW5nKi8KKy0gIDAsIC8qdHBfaGFzaCovCistICAwLCAvKnRwX2Nh bGwqLworLSAgMCwgLyp0cF9zdHIqLworLSAgMCwgLyp0cF9nZXRhdHRybyovCistICAwLCAvKnRw X3NldGF0dHJvKi8KKy0gIDAsIC8qdHBfYXNfYnVmZmVyKi8KKy0gIFB5X1RQRkxBR1NfREVGQVVM VHxQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQ RkxBR1NfSEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVf R0MsIC8qdHBfZmxhZ3MqLworLSAgMCwgLyp0cF9kb2MqLworLSAgX19weXhfdHBfdHJhdmVyc2Vf OXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMsIC8qdHBfdHJhdmVyc2UqLworLSAg X19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMsIC8qdHBf Y2xlYXIqLworLSAgMCwgLyp0cF9yaWNoY29tcGFyZSovCistICAwLCAvKnRwX3dlYWtsaXN0b2Zm c2V0Ki8KKy0gIDAsIC8qdHBfaXRlciovCistICAwLCAvKnRwX2l0ZXJuZXh0Ki8KKy0gIF9fcHl4 X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMsIC8qdHBfbWV0aG9k cyovCistICAwLCAvKnRwX21lbWJlcnMqLworLSAgMCwgLyp0cF9nZXRzZXQqLworLSAgMCwgLyp0 cF9iYXNlKi8KKy0gIDAsIC8qdHBfZGljdCovCistICAwLCAvKnRwX2Rlc2NyX2dldCovCistICAw LCAvKnRwX2Rlc2NyX3NldCovCistICAwLCAvKnRwX2RpY3RvZmZzZXQqLworLSAgX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc18xX19pbml0X18sIC8qdHBfaW5p dCovCistICAwLCAvKnRwX2FsbG9jKi8KKy0gIF9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJz XzNtcHZfX1JlbmRlclBhcmFtcywgLyp0cF9uZXcqLworLSAgMCwgLyp0cF9mcmVlKi8KKy0gIDAs IC8qdHBfaXNfZ2MqLworLSAgMCwgLyp0cF9iYXNlcyovCistICAwLCAvKnRwX21ybyovCistICAw LCAvKnRwX2NhY2hlKi8KKy0gIDAsIC8qdHBfc3ViY2xhc3NlcyovCistICAwLCAvKnRwX3dlYWts aXN0Ki8KKy0gIDAsIC8qdHBfZGVsKi8KKy0gIDAsIC8qdHBfdmVyc2lvbl90YWcqLworLSAgI2lm IFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEKKy0gIDAsIC8qdHBfZmluYWxpemUqLworLSAg I2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMQorLSAgMCwgLyp0cF92 ZWN0b3JjYWxsKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAw YjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAwCistICAwLCAvKnRwX3ByaW50Ki8KKy0g ICNlbmRpZgorLX07Cistc3RhdGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9SZW5kZXJGcmFtZUluZm87CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyhQeVR5cGVPYmplY3QgKnQsIENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKmEsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKKy0g IHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAq cDsKKy0gIFB5T2JqZWN0ICpvOworLSAgaWYgKGxpa2VseSgodC0+dHBfZmxhZ3MgJiBQeV9UUEZM QUdTX0lTX0FCU1RSQUNUKSA9PSAwKSkgeworLSAgICBvID0gKCp0LT50cF9hbGxvYykodCwgMCk7 CistICB9IGVsc2UgeworLSAgICBvID0gKFB5T2JqZWN0ICopIFB5QmFzZU9iamVjdF9UeXBlLnRw X25ldyh0LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7CistICB9CistICBpZiAodW5saWtlbHkoIW8p KSByZXR1cm4gMDsKKy0gIHAgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckZyYW1lSW5mbyAqKW8pOworLSAgcC0+X19weXhfdnRhYiA9IF9fcHl4X3Z0YWJw dHJfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbzsKKy0gIHJldHVybiBvOwor LX0KKy0KKy1zdGF0aWMgdm9pZCBfX3B5eF90cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9SZW5kZXJGcmFtZUluZm8oUHlPYmplY3QgKm8pIHsKKy0gICNpZiBDWVRIT05fVVNFX1RQX0ZJ TkFMSVpFCistICBpZiAodW5saWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUoUHlfVFlQRShvKSwgUHlf VFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9UWVBFKG8pLT50cF9maW5hbGl6ZSkgJiYgKCFQ eVR5cGVfSVNfR0MoUHlfVFlQRShvKSkgfHwgIV9QeUdDX0ZJTkFMSVpFRChvKSkpIHsKKy0gICAg aWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhvKSkgcmV0dXJuOworLSAgfQor LSAgI2VuZGlmCistICAoKlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOworLX0KKy0KKy1zdGF0aWMg UHlNZXRob2REZWYgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJh bWVJbmZvW10gPSB7CistICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNVJlbmRlckZyYW1lSW5mb18xX19yZWR1Y2VfY3l0 aG9uX18sIE1FVEhfTk9BUkdTLCAwfSwKKy0gIHsiX19zZXRzdGF0ZV9jeXRob25fXyIsIChQeUNG dW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9f M19fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhfTywgMH0sCistICB7MCwgMCwgMCwgMH0KKy19Owor LQorLXN0YXRpYyBQeVR5cGVPYmplY3QgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyRnJhbWVJbmZvID0geworLSAgUHlWYXJPYmplY3RfSEVBRF9JTklUKDAsIDApCistICAi dmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckZyYW1lSW5mbyIsIC8qdHBfbmFtZSovCistICBzaXpl b2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZv KSwgLyp0cF9iYXNpY3NpemUqLworLSAgMCwgLyp0cF9pdGVtc2l6ZSovCistICBfX3B5eF90cF9k ZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8sIC8qdHBfZGVhbGxv YyovCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMGI0CistICAwLCAvKnRwX3ByaW50 Ki8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQKKy0gIDAs IC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQqLworLSAgI2VuZGlmCistICAwLCAvKnRwX2dldGF0dHIq LworLSAgMCwgLyp0cF9zZXRhdHRyKi8KKy0gICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLSAg MCwgLyp0cF9jb21wYXJlKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0g MworLSAgMCwgLyp0cF9hc19hc3luYyovCistICAjZW5kaWYKKy0gIDAsIC8qdHBfcmVwciovCist ICAwLCAvKnRwX2FzX251bWJlciovCistICAwLCAvKnRwX2FzX3NlcXVlbmNlKi8KKy0gIDAsIC8q dHBfYXNfbWFwcGluZyovCistICAwLCAvKnRwX2hhc2gqLworLSAgMCwgLyp0cF9jYWxsKi8KKy0g IDAsIC8qdHBfc3RyKi8KKy0gIDAsIC8qdHBfZ2V0YXR0cm8qLworLSAgMCwgLyp0cF9zZXRhdHRy byovCistICAwLCAvKnRwX2FzX2J1ZmZlciovCistICBQeV9UUEZMQUdTX0RFRkFVTFR8UHlfVFBG TEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5X1RQRkxBR1NfQ0hFQ0tUWVBFU3xQeV9UUEZMQUdTX0hB VkVfTkVXQlVGRkVSfFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qdHBfZmxhZ3MqLworLSAgMCwgLyp0 cF9kb2MqLworLSAgMCwgLyp0cF90cmF2ZXJzZSovCistICAwLCAvKnRwX2NsZWFyKi8KKy0gIDAs IC8qdHBfcmljaGNvbXBhcmUqLworLSAgMCwgLyp0cF93ZWFrbGlzdG9mZnNldCovCistICAwLCAv KnRwX2l0ZXIqLworLSAgMCwgLyp0cF9pdGVybmV4dCovCistICBfX3B5eF9tZXRob2RzXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8sIC8qdHBfbWV0aG9kcyovCistICAwLCAv KnRwX21lbWJlcnMqLworLSAgMCwgLyp0cF9nZXRzZXQqLworLSAgMCwgLyp0cF9iYXNlKi8KKy0g IDAsIC8qdHBfZGljdCovCistICAwLCAvKnRwX2Rlc2NyX2dldCovCistICAwLCAvKnRwX2Rlc2Ny X3NldCovCistICAwLCAvKnRwX2RpY3RvZmZzZXQqLworLSAgMCwgLyp0cF9pbml0Ki8KKy0gIDAs IC8qdHBfYWxsb2MqLworLSAgX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJGcmFtZUluZm8sIC8qdHBfbmV3Ki8KKy0gIDAsIC8qdHBfZnJlZSovCistICAwLCAvKnRwX2lz X2djKi8KKy0gIDAsIC8qdHBfYmFzZXMqLworLSAgMCwgLyp0cF9tcm8qLworLSAgMCwgLyp0cF9j YWNoZSovCistICAwLCAvKnRwX3N1YmNsYXNzZXMqLworLSAgMCwgLyp0cF93ZWFrbGlzdCovCist ICAwLCAvKnRwX2RlbCovCistICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KKy0gICNpZiBQWV9WRVJT SU9OX0hFWCA+PSAweDAzMDQwMGExCistICAwLCAvKnRwX2ZpbmFsaXplKi8KKy0gICNlbmRpZgor LSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEKKy0gIDAsIC8qdHBfdmVjdG9yY2Fs bCovCistICAjZW5kaWYKKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZ X1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAorLSAgMCwgLyp0cF9wcmludCovCistICAjZW5kaWYK Ky19OworLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9SZW5kZXJDb250ZXh0KFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVj dCAqYSwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqaykgeworLSAgc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqcDsKKy0gIFB5T2JqZWN0ICpvOwor LSAgaWYgKGxpa2VseSgodC0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUKSA9PSAw KSkgeworLSAgICBvID0gKCp0LT50cF9hbGxvYykodCwgMCk7CistICB9IGVsc2UgeworLSAgICBv ID0gKFB5T2JqZWN0ICopIFB5QmFzZU9iamVjdF9UeXBlLnRwX25ldyh0LCBfX3B5eF9lbXB0eV90 dXBsZSwgMCk7CistICB9CistICBpZiAodW5saWtlbHkoIW8pKSByZXR1cm4gMDsKKy0gIHAgPSAo KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilv KTsKKy0gIHAtPl9tcHYgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKilQeV9Ob25lKTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgcC0+dXBkYXRlX2Ni ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgcC0+X3gxMV9kaXNwbGF5ID0gUHlf Tm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgcC0+X3dsX2Rpc3BsYXkgPSBQeV9Ob25lOyBQ eV9JTkNSRUYoUHlfTm9uZSk7CistICBwLT5fZ2V0X3Byb2NfYWRkcmVzcyA9IFB5X05vbmU7IFB5 X0lOQ1JFRihQeV9Ob25lKTsKKy0gIHJldHVybiBvOworLX0KKy0KKy1zdGF0aWMgdm9pZCBfX3B5 eF90cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KFB5T2JqZWN0 ICpvKSB7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJD b250ZXh0ICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckNvbnRleHQgKilvOworLSAgI2lmIENZVEhPTl9VU0VfVFBfRklOQUxJWkUKKy0gIGlmICh1bmxp a2VseShQeVR5cGVfSGFzRmVhdHVyZShQeV9UWVBFKG8pLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJ WkUpICYmIFB5X1RZUEUobyktPnRwX2ZpbmFsaXplKSAmJiAhX1B5R0NfRklOQUxJWkVEKG8pKSB7 CistICAgIGlmIChQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2MobykpIHJldHVybjsK Ky0gIH0KKy0gICNlbmRpZgorLSAgUHlPYmplY3RfR0NfVW5UcmFjayhvKTsKKy0gIHsKKy0gICAg UHlPYmplY3QgKmV0eXBlLCAqZXZhbCwgKmV0YjsKKy0gICAgUHlFcnJfRmV0Y2goJmV0eXBlLCAm ZXZhbCwgJmV0Yik7CistICAgIF9fUHl4X1NFVF9SRUZDTlQobywgUHlfUkVGQ05UKG8pICsgMSk7 CistICAgIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjFf X2RlYWxsb2NfXyhvKTsKKy0gICAgX19QeXhfU0VUX1JFRkNOVChvLCBQeV9SRUZDTlQobykgLSAx KTsKKy0gICAgUHlFcnJfUmVzdG9yZShldHlwZSwgZXZhbCwgZXRiKTsKKy0gIH0KKy0gIFB5X0NM RUFSKHAtPl9tcHYpOworLSAgUHlfQ0xFQVIocC0+dXBkYXRlX2NiKTsKKy0gIFB5X0NMRUFSKHAt Pl94MTFfZGlzcGxheSk7CistICBQeV9DTEVBUihwLT5fd2xfZGlzcGxheSk7CistICBQeV9DTEVB UihwLT5fZ2V0X3Byb2NfYWRkcmVzcyk7CistICAoKlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOwor LX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9SZW5kZXJDb250ZXh0KFB5T2JqZWN0ICpvLCB2aXNpdHByb2Mgdiwgdm9pZCAqYSkgeworLSAg aW50IGU7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJD b250ZXh0ICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckNvbnRleHQgKilvOworLSAgaWYgKHAtPl9tcHYpIHsKKy0gICAgZSA9ICgqdikoKChQeU9iamVj dCAqKXAtPl9tcHYpLCBhKTsgaWYgKGUpIHJldHVybiBlOworLSAgfQorLSAgaWYgKHAtPnVwZGF0 ZV9jYikgeworLSAgICBlID0gKCp2KShwLT51cGRhdGVfY2IsIGEpOyBpZiAoZSkgcmV0dXJuIGU7 CistICB9CistICBpZiAocC0+X3gxMV9kaXNwbGF5KSB7CistICAgIGUgPSAoKnYpKHAtPl94MTFf ZGlzcGxheSwgYSk7IGlmIChlKSByZXR1cm4gZTsKKy0gIH0KKy0gIGlmIChwLT5fd2xfZGlzcGxh eSkgeworLSAgICBlID0gKCp2KShwLT5fd2xfZGlzcGxheSwgYSk7IGlmIChlKSByZXR1cm4gZTsK Ky0gIH0KKy0gIGlmIChwLT5fZ2V0X3Byb2NfYWRkcmVzcykgeworLSAgICBlID0gKCp2KShwLT5f Z2V0X3Byb2NfYWRkcmVzcywgYSk7IGlmIChlKSByZXR1cm4gZTsKKy0gIH0KKy0gIHJldHVybiAw OworLX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9SZW5kZXJDb250ZXh0KFB5T2JqZWN0ICpvKSB7CistICBQeU9iamVjdCogdG1wOworLSAgc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqcCA9IChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopbzsK Ky0gIHRtcCA9ICgoUHlPYmplY3QqKXAtPl9tcHYpOworLSAgcC0+X21wdiA9ICgoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKVB5X05vbmUpOyBQeV9JTkNS RUYoUHlfTm9uZSk7CistICBQeV9YREVDUkVGKHRtcCk7CistICB0bXAgPSAoKFB5T2JqZWN0Kilw LT51cGRhdGVfY2IpOworLSAgcC0+dXBkYXRlX2NiID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05v bmUpOworLSAgUHlfWERFQ1JFRih0bXApOworLSAgdG1wID0gKChQeU9iamVjdCopcC0+X3gxMV9k aXNwbGF5KTsKKy0gIHAtPl94MTFfZGlzcGxheSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25l KTsKKy0gIFB5X1hERUNSRUYodG1wKTsKKy0gIHRtcCA9ICgoUHlPYmplY3QqKXAtPl93bF9kaXNw bGF5KTsKKy0gIHAtPl93bF9kaXNwbGF5ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwor LSAgUHlfWERFQ1JFRih0bXApOworLSAgdG1wID0gKChQeU9iamVjdCopcC0+X2dldF9wcm9jX2Fk ZHJlc3MpOworLSAgcC0+X2dldF9wcm9jX2FkZHJlc3MgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlf Tm9uZSk7CistICBQeV9YREVDUkVGKHRtcCk7CistICByZXR1cm4gMDsKKy19CistCistc3RhdGlj IFB5TWV0aG9kRGVmIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNv bnRleHRbXSA9IHsKKy0gIHsic2V0X2ljY19wcm9maWxlIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfM3NldF9pY2NfcHJvZmlsZSwg TUVUSF9PLCAwfSwKKy0gIHsic2V0X2FtYmllbnRfbGlnaHQiLCAoUHlDRnVuY3Rpb24pX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF81c2V0X2FtYmllbnRfbGln aHQsIE1FVEhfTywgMH0sCistICB7ImdldF9uZXh0X2ZyYW1lX2luZm8iLCAoUHlDRnVuY3Rpb24p X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF83Z2V0X25leHRf ZnJhbWVfaW5mbywgTUVUSF9OT0FSR1MsIDB9LAorLSAgeyJzZXRfdXBkYXRlX2NhbGxiYWNrIiwg KFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfOXNldF91cGRhdGVfY2FsbGJhY2ssIE1FVEhfTywgMH0sCistICB7InVwZGF0ZSIsIChQeUNG dW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEx dXBkYXRlLCBNRVRIX05PQVJHUywgMH0sCistICB7InJlbmRlciIsIChQeUNGdW5jdGlvbikodm9p ZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAw fSwKKy0gIHsicmVwb3J0X3N3YXAiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNXJlcG9ydF9zd2FwLCBNRVRIX05PQVJHUywgMH0s CistICB7ImZyZWUiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF8xN2ZyZWUsIE1FVEhfTk9BUkdTLCAwfSwKKy0gIHsiY2xvc2UiLCAo UHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF8xOWNsb3NlLCBNRVRIX05PQVJHUywgMH0sCistICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5 Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRf MjNfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9LAorLSAgeyJfX3NldHN0YXRlX2N5 dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfMjVfX3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAorLSAgezAsIDAs IDAsIDB9CistfTsKKy0KKy1zdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgPSB7CistICBQeVZhck9iamVjdF9IRUFEX0lOSVQo MCwgMCkKKy0gICJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dCIsIC8qdHBfbmFtZSov CistICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dCksIC8qdHBfYmFzaWNzaXplKi8KKy0gIDAsIC8qdHBfaXRlbXNpemUqLworLSAgX19w eXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgLyp0cF9k ZWFsbG9jKi8KKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKy0gIDAsIC8qdHBf cHJpbnQqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAor LSAgMCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCistICAjZW5kaWYKKy0gIDAsIC8qdHBfZ2V0 YXR0ciovCistICAwLCAvKnRwX3NldGF0dHIqLworLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAz CistICAwLCAvKnRwX2NvbXBhcmUqLworLSAgI2VuZGlmCistICAjaWYgUFlfTUFKT1JfVkVSU0lP TiA+PSAzCistICAwLCAvKnRwX2FzX2FzeW5jKi8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9yZXBy Ki8KKy0gIDAsIC8qdHBfYXNfbnVtYmVyKi8KKy0gIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworLSAg MCwgLyp0cF9hc19tYXBwaW5nKi8KKy0gIDAsIC8qdHBfaGFzaCovCistICAwLCAvKnRwX2NhbGwq LworLSAgMCwgLyp0cF9zdHIqLworLSAgMCwgLyp0cF9nZXRhdHRybyovCistICAwLCAvKnRwX3Nl dGF0dHJvKi8KKy0gIDAsIC8qdHBfYXNfYnVmZmVyKi8KKy0gIFB5X1RQRkxBR1NfREVGQVVMVHxQ eV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxB R1NfSEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0Ms IC8qdHBfZmxhZ3MqLworLSAgMCwgLyp0cF9kb2MqLworLSAgX19weXhfdHBfdHJhdmVyc2VfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBfdHJhdmVyc2UqLworLSAgX19w eXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBfY2xl YXIqLworLSAgMCwgLyp0cF9yaWNoY29tcGFyZSovCistICAwLCAvKnRwX3dlYWtsaXN0b2Zmc2V0 Ki8KKy0gIDAsIC8qdHBfaXRlciovCistICAwLCAvKnRwX2l0ZXJuZXh0Ki8KKy0gIF9fcHl4X21l dGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBfbWV0aG9kcyov CistICAwLCAvKnRwX21lbWJlcnMqLworLSAgMCwgLyp0cF9nZXRzZXQqLworLSAgMCwgLyp0cF9i YXNlKi8KKy0gIDAsIC8qdHBfZGljdCovCistICAwLCAvKnRwX2Rlc2NyX2dldCovCistICAwLCAv KnRwX2Rlc2NyX3NldCovCistICAwLCAvKnRwX2RpY3RvZmZzZXQqLworLSAgX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xX19pbml0X18sIC8qdHBfaW5pdCov CistICAwLCAvKnRwX2FsbG9jKi8KKy0gIF9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyQ29udGV4dCwgLyp0cF9uZXcqLworLSAgMCwgLyp0cF9mcmVlKi8KKy0gIDAsIC8q dHBfaXNfZ2MqLworLSAgMCwgLyp0cF9iYXNlcyovCistICAwLCAvKnRwX21ybyovCistICAwLCAv KnRwX2NhY2hlKi8KKy0gIDAsIC8qdHBfc3ViY2xhc3NlcyovCistICAwLCAvKnRwX3dlYWtsaXN0 Ki8KKy0gIDAsIC8qdHBfZGVsKi8KKy0gIDAsIC8qdHBfdmVyc2lvbl90YWcqLworLSAgI2lmIFBZ X1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEKKy0gIDAsIC8qdHBfZmluYWxpemUqLworLSAgI2Vu ZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMQorLSAgMCwgLyp0cF92ZWN0 b3JjYWxsKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQg JiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAwCistICAwLCAvKnRwX3ByaW50Ki8KKy0gICNl bmRpZgorLX07CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80 bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQoUHlUeXBlT2JqZWN0ICp0LCBQeU9iamVjdCAq YSwgUHlPYmplY3QgKmspIHsKKy0gIFB5T2JqZWN0ICpvID0gX19weXhfdHBfbmV3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KHQsIGEsIGspOworLSAgaWYgKHVubGlrZWx5KCFv KSkgcmV0dXJuIDA7CistICByZXR1cm4gbzsKKy19CistCistc3RhdGljIFB5TWV0aG9kRGVmIF9f cHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHRbXSA9 IHsKKy0gIHsiX19yZWR1Y2VfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF8zX19yZWR1Y2VfY3l0aG9uX18s IE1FVEhfTk9BUkdTLCAwfSwKKy0gIHsiX19zZXRzdGF0ZV9jeXRob25fXyIsIChQeUNGdW5jdGlv bilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0XzVf X3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAorLSAgezAsIDAsIDAsIDB9CistfTsKKy0K Ky1zdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09w ZW5HTFJlbmRlckNvbnRleHQgPSB7CistICBQeVZhck9iamVjdF9IRUFEX0lOSVQoMCwgMCkKKy0g ICJ2aWRjdXR0ZXIubGlicy5tcHYuT3BlbkdMUmVuZGVyQ29udGV4dCIsIC8qdHBfbmFtZSovCist ICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVu ZGVyQ29udGV4dCksIC8qdHBfYmFzaWNzaXplKi8KKy0gIDAsIC8qdHBfaXRlbXNpemUqLworLSAg X19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgLyp0 cF9kZWFsbG9jKi8KKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKy0gIDAsIC8q dHBfcHJpbnQqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBi NAorLSAgMCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCistICAjZW5kaWYKKy0gIDAsIC8qdHBf Z2V0YXR0ciovCistICAwLCAvKnRwX3NldGF0dHIqLworLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04g PCAzCistICAwLCAvKnRwX2NvbXBhcmUqLworLSAgI2VuZGlmCistICAjaWYgUFlfTUFKT1JfVkVS U0lPTiA+PSAzCistICAwLCAvKnRwX2FzX2FzeW5jKi8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9y ZXByKi8KKy0gIDAsIC8qdHBfYXNfbnVtYmVyKi8KKy0gIDAsIC8qdHBfYXNfc2VxdWVuY2UqLwor LSAgMCwgLyp0cF9hc19tYXBwaW5nKi8KKy0gIDAsIC8qdHBfaGFzaCovCistICAwLCAvKnRwX2Nh bGwqLworLSAgMCwgLyp0cF9zdHIqLworLSAgMCwgLyp0cF9nZXRhdHRybyovCistICAwLCAvKnRw X3NldGF0dHJvKi8KKy0gIDAsIC8qdHBfYXNfYnVmZmVyKi8KKy0gIFB5X1RQRkxBR1NfREVGQVVM VHxQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQ RkxBR1NfSEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVf R0MsIC8qdHBfZmxhZ3MqLworLSAgMCwgLyp0cF9kb2MqLworLSAgX19weXhfdHBfdHJhdmVyc2Vf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBfdHJhdmVyc2UqLworLSAg X19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBf Y2xlYXIqLworLSAgMCwgLyp0cF9yaWNoY29tcGFyZSovCistICAwLCAvKnRwX3dlYWtsaXN0b2Zm c2V0Ki8KKy0gIDAsIC8qdHBfaXRlciovCistICAwLCAvKnRwX2l0ZXJuZXh0Ki8KKy0gIF9fcHl4 X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQsIC8qdHBf bWV0aG9kcyovCistICAwLCAvKnRwX21lbWJlcnMqLworLSAgMCwgLyp0cF9nZXRzZXQqLworLSAg MCwgLyp0cF9iYXNlKi8KKy0gIDAsIC8qdHBfZGljdCovCistICAwLCAvKnRwX2Rlc2NyX2dldCov CistICAwLCAvKnRwX2Rlc2NyX3NldCovCistICAwLCAvKnRwX2RpY3RvZmZzZXQqLworLSAgX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF8xX19pbml0 X18sIC8qdHBfaW5pdCovCistICAwLCAvKnRwX2FsbG9jKi8KKy0gIF9fcHl4X3RwX25ld185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCwgLyp0cF9uZXcqLworLSAgMCwg Lyp0cF9mcmVlKi8KKy0gIDAsIC8qdHBfaXNfZ2MqLworLSAgMCwgLyp0cF9iYXNlcyovCistICAw LCAvKnRwX21ybyovCistICAwLCAvKnRwX2NhY2hlKi8KKy0gIDAsIC8qdHBfc3ViY2xhc3Nlcyov CistICAwLCAvKnRwX3dlYWtsaXN0Ki8KKy0gIDAsIC8qdHBfZGVsKi8KKy0gIDAsIC8qdHBfdmVy c2lvbl90YWcqLworLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEKKy0gIDAsIC8q dHBfZmluYWxpemUqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4 MDBiMQorLSAgMCwgLyp0cF92ZWN0b3JjYWxsKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJ T05fSEVYID49IDB4MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAwCistICAw LCAvKnRwX3ByaW50Ki8KKy0gICNlbmRpZgorLX07CistCistc3RhdGljIHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqX19w eXhfZnJlZWxpc3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vy cm9yc1s4XTsKKy1zdGF0aWMgaW50IF9fcHl4X2ZyZWVjb3VudF85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzID0gMDsKKy0KKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19f ZXJyb3JzKFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqYSwgQ1lUSE9O X1VOVVNFRCBQeU9iamVjdCAqaykgeworLSAgUHlPYmplY3QgKm87CistICBpZiAoQ1lUSE9OX0NP TVBJTElOR19JTl9DUFlUSE9OICYmIGxpa2VseSgoX19weXhfZnJlZWNvdW50Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgPiAwKSAmICh0LT50cF9iYXNp Y3NpemUgPT0gc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19f cHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycykpKSkgeworLSAgICBvID0gKFB5T2JqZWN0KilfX3B5 eF9mcmVlbGlzdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJy b3JzWy0tX19weXhfZnJlZWNvdW50Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9z dHJ1Y3RfX19lcnJvcnNdOworLSAgICBtZW1zZXQobywgMCwgc2l6ZW9mKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycykpOwor LSAgICAodm9pZCkgUHlPYmplY3RfSU5JVChvLCB0KTsKKy0gICAgUHlPYmplY3RfR0NfVHJhY2so byk7CistICB9IGVsc2UgeworLSAgICBvID0gKCp0LT50cF9hbGxvYykodCwgMCk7CistICAgIGlm ICh1bmxpa2VseSghbykpIHJldHVybiAwOworLSAgfQorLSAgcmV0dXJuIG87CistfQorLQorLXN0 YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Nj b3BlX3N0cnVjdF9fX2Vycm9ycyhQeU9iamVjdCAqbykgeworLSAgc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICpwID0gKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9f X2Vycm9ycyAqKW87CistICBQeU9iamVjdF9HQ19VblRyYWNrKG8pOworLSAgUHlfQ0xFQVIocC0+ X19weXhfdl9mbik7CistICBpZiAoQ1lUSE9OX0NPTVBJTElOR19JTl9DUFlUSE9OICYmICgoX19w eXhfZnJlZWNvdW50Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19l cnJvcnMgPCA4KSAmIChQeV9UWVBFKG8pLT50cF9iYXNpY3NpemUgPT0gc2l6ZW9mKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9y cykpKSkgeworLSAgICBfX3B5eF9mcmVlbGlzdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhf c2NvcGVfc3RydWN0X19fZXJyb3JzW19fcHl4X2ZyZWVjb3VudF85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzKytdID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKilvKTsKKy0g IH0gZWxzZSB7CistICAgICgqUHlfVFlQRShvKS0+dHBfZnJlZSkobyk7CistICB9CistfQorLQor LXN0YXRpYyBpbnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4 X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyhQeU9iamVjdCAqbywgdmlzaXRwcm9jIHYsIHZvaWQgKmEp IHsKKy0gIGludCBlOworLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqKW87CistICBpZiAo cC0+X19weXhfdl9mbikgeworLSAgICBlID0gKCp2KShwLT5fX3B5eF92X2ZuLCBhKTsgaWYgKGUp IHJldHVybiBlOworLSAgfQorLSAgcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhf dHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9y cyhQeU9iamVjdCAqbykgeworLSAgUHlPYmplY3QqIHRtcDsKKy0gIHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqcCA9IChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3Rf X19lcnJvcnMgKilvOworLSAgdG1wID0gKChQeU9iamVjdCopcC0+X19weXhfdl9mbik7CistICBw LT5fX3B5eF92X2ZuID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgUHlfWERFQ1JF Rih0bXApOworLSAgcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBQeVR5cGVPYmplY3QgX19weXhf dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzID0g eworLSAgUHlWYXJPYmplY3RfSEVBRF9JTklUKDAsIDApCistICAidmlkY3V0dGVyLmxpYnMubXB2 Ll9fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyIsIC8qdHBfbmFtZSovCistICBzaXplb2Yoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19f ZXJyb3JzKSwgLyp0cF9iYXNpY3NpemUqLworLSAgMCwgLyp0cF9pdGVtc2l6ZSovCistICBfX3B5 eF90cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19l cnJvcnMsIC8qdHBfZGVhbGxvYyovCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMGI0 CistICAwLCAvKnRwX3ByaW50Ki8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49 IDB4MDMwODAwYjQKKy0gIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQqLworLSAgI2VuZGlmCist ICAwLCAvKnRwX2dldGF0dHIqLworLSAgMCwgLyp0cF9zZXRhdHRyKi8KKy0gICNpZiBQWV9NQUpP Ul9WRVJTSU9OIDwgMworLSAgMCwgLyp0cF9jb21wYXJlKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZ X01BSk9SX1ZFUlNJT04gPj0gMworLSAgMCwgLyp0cF9hc19hc3luYyovCistICAjZW5kaWYKKy0g IDAsIC8qdHBfcmVwciovCistICAwLCAvKnRwX2FzX251bWJlciovCistICAwLCAvKnRwX2FzX3Nl cXVlbmNlKi8KKy0gIDAsIC8qdHBfYXNfbWFwcGluZyovCistICAwLCAvKnRwX2hhc2gqLworLSAg MCwgLyp0cF9jYWxsKi8KKy0gIDAsIC8qdHBfc3RyKi8KKy0gIDAsIC8qdHBfZ2V0YXR0cm8qLwor LSAgMCwgLyp0cF9zZXRhdHRybyovCistICAwLCAvKnRwX2FzX2J1ZmZlciovCistICBQeV9UUEZM QUdTX0RFRkFVTFR8UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5X1RQRkxBR1NfQ0hFQ0tU WVBFU3xQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9m bGFncyovCistICAwLCAvKnRwX2RvYyovCistICBfX3B5eF90cF90cmF2ZXJzZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzLCAvKnRwX3RyYXZlcnNlKi8K Ky0gIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1 Y3RfX19lcnJvcnMsIC8qdHBfY2xlYXIqLworLSAgMCwgLyp0cF9yaWNoY29tcGFyZSovCistICAw LCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKy0gIDAsIC8qdHBfaXRlciovCistICAwLCAvKnRwX2l0 ZXJuZXh0Ki8KKy0gIDAsIC8qdHBfbWV0aG9kcyovCistICAwLCAvKnRwX21lbWJlcnMqLworLSAg MCwgLyp0cF9nZXRzZXQqLworLSAgMCwgLyp0cF9iYXNlKi8KKy0gIDAsIC8qdHBfZGljdCovCist ICAwLCAvKnRwX2Rlc2NyX2dldCovCistICAwLCAvKnRwX2Rlc2NyX3NldCovCistICAwLCAvKnRw X2RpY3RvZmZzZXQqLworLSAgMCwgLyp0cF9pbml0Ki8KKy0gIDAsIC8qdHBfYWxsb2MqLworLSAg X19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19l cnJvcnMsIC8qdHBfbmV3Ki8KKy0gIDAsIC8qdHBfZnJlZSovCistICAwLCAvKnRwX2lzX2djKi8K Ky0gIDAsIC8qdHBfYmFzZXMqLworLSAgMCwgLyp0cF9tcm8qLworLSAgMCwgLyp0cF9jYWNoZSov CistICAwLCAvKnRwX3N1YmNsYXNzZXMqLworLSAgMCwgLyp0cF93ZWFrbGlzdCovCistICAwLCAv KnRwX2RlbCovCistICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KKy0gICNpZiBQWV9WRVJTSU9OX0hF WCA+PSAweDAzMDQwMGExCistICAwLCAvKnRwX2ZpbmFsaXplKi8KKy0gICNlbmRpZgorLSAgI2lm IFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEKKy0gIDAsIC8qdHBfdmVjdG9yY2FsbCovCist ICAjZW5kaWYKKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJ T05fSEVYIDwgMHgwMzA5MDAwMAorLSAgMCwgLyp0cF9wcmludCovCistICAjZW5kaWYKKy19Owor LQorLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZXRob2RzW10gPSB7CistICB7MCwgMCwgMCwg MH0KKy19OworLQorLSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0jaWYgQ1lUSE9OX1BFUDQ4 OV9NVUxUSV9QSEFTRV9JTklUCistc3RhdGljIFB5T2JqZWN0KiBfX3B5eF9weW1vZF9jcmVhdGUo UHlPYmplY3QgKnNwZWMsIFB5TW9kdWxlRGVmICpkZWYpOyAvKnByb3RvKi8KKy1zdGF0aWMgaW50 IF9fcHl4X3B5bW9kX2V4ZWNfbXB2KFB5T2JqZWN0KiBtb2R1bGUpOyAvKnByb3RvKi8KKy1zdGF0 aWMgUHlNb2R1bGVEZWZfU2xvdCBfX3B5eF9tb2R1bGVkZWZfc2xvdHNbXSA9IHsKKy0gIHtQeV9t b2RfY3JlYXRlLCAodm9pZCopX19weXhfcHltb2RfY3JlYXRlfSwKKy0gIHtQeV9tb2RfZXhlYywg KHZvaWQqKV9fcHl4X3B5bW9kX2V4ZWNfbXB2fSwKKy0gIHswLCBOVUxMfQorLX07CistI2VuZGlm CistCistc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfX3B5eF9tb2R1bGVkZWYgPSB7CistICAg IFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKy0gICAgIm1wdiIsCistICAgIF9fcHl4X2tfcHltcHZf UHl0aG9uX3dyYXBwZXJfZm9yX2xpYm1wdiwgLyogbV9kb2MgKi8KKy0gICNpZiBDWVRIT05fUEVQ NDg5X01VTFRJX1BIQVNFX0lOSVQKKy0gICAgMCwgLyogbV9zaXplICovCistICAjZWxzZQorLSAg ICAtMSwgLyogbV9zaXplICovCistICAjZW5kaWYKKy0gICAgX19weXhfbWV0aG9kcyAvKiBtX21l dGhvZHMgKi8sCistICAjaWYgQ1lUSE9OX1BFUDQ4OV9NVUxUSV9QSEFTRV9JTklUCistICAgIF9f cHl4X21vZHVsZWRlZl9zbG90cywgLyogbV9zbG90cyAqLworLSAgI2Vsc2UKKy0gICAgTlVMTCwg LyogbV9yZWxvYWQgKi8KKy0gICNlbmRpZgorLSAgICBOVUxMLCAvKiBtX3RyYXZlcnNlICovCist ICAgIE5VTEwsIC8qIG1fY2xlYXIgKi8KKy0gICAgTlVMTCAvKiBtX2ZyZWUgKi8KKy19OworLSNl bmRpZgorLSNpZm5kZWYgQ1lUSE9OX1NNQUxMX0NPREUKKy0jaWYgZGVmaW5lZChfX2NsYW5nX18p CistICAgICNkZWZpbmUgQ1lUSE9OX1NNQUxMX0NPREUKKy0jZWxpZiBkZWZpbmVkKF9fR05VQ19f KSAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49 IDMpKQorLSAgICAjZGVmaW5lIENZVEhPTl9TTUFMTF9DT0RFIF9fYXR0cmlidXRlX18oKGNvbGQp KQorLSNlbHNlCistICAgICNkZWZpbmUgQ1lUSE9OX1NNQUxMX0NPREUKKy0jZW5kaWYKKy0jZW5k aWYKKy0KKy1zdGF0aWMgX19QeXhfU3RyaW5nVGFiRW50cnkgX19weXhfc3RyaW5nX3RhYltdID0g eworLSAgeyZfX3B5eF9rcF9zXzBfM18wLCBfX3B5eF9rXzBfM18wLCBzaXplb2YoX19weXhfa18w XzNfMCksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9uX3NfQVBJX09QRU5HTCwgX19weXhfa19B UElfT1BFTkdMLCBzaXplb2YoX19weXhfa19BUElfT1BFTkdMKSwgMCwgMCwgMSwgMX0sCistICB7 Jl9fcHl4X2twX3NfQW5kcmVfRCwgX19weXhfa19BbmRyZV9ELCBzaXplb2YoX19weXhfa19BbmRy ZV9EKSwgMCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X25fc19DQVBJX01BSk9SLCBfX3B5eF9rX0NB UElfTUFKT1IsIHNpemVvZihfX3B5eF9rX0NBUElfTUFKT1IpLCAwLCAwLCAxLCAxfSwKKy0gIHsm X19weXhfbl9zX0NBUElfTUlOT1IsIF9fcHl4X2tfQ0FQSV9NSU5PUiwgc2l6ZW9mKF9fcHl4X2tf Q0FQSV9NSU5PUiksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQs IF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWQsIHNpemVvZihfX3B5eF9rX0NhbGxiYWNrVGhyZWFkKSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19DYWxsYmFja1RocmVhZF9fX2luaXQsIF9fcHl4 X2tfQ2FsbGJhY2tUaHJlYWRfX19pbml0LCBzaXplb2YoX19weXhfa19DYWxsYmFja1RocmVhZF9f X2luaXQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX2NhbGws IF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfY2FsbCwgc2l6ZW9mKF9fcHl4X2tfQ2FsbGJhY2tUaHJl YWRfY2FsbCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWRfbXB2 X2NhbGxiYWNrLCBfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX21wdl9jYWxsYmFjaywgc2l6ZW9mKF9f cHl4X2tfQ2FsbGJhY2tUaHJlYWRfbXB2X2NhbGxiYWNrKSwgMCwgMCwgMSwgMX0sCistICB7Jl9f cHl4X25fc19DYWxsYmFja1RocmVhZF9ydW4sIF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfcnVuLCBz aXplb2YoX19weXhfa19DYWxsYmFja1RocmVhZF9ydW4pLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19w eXhfbl9zX0NhbGxiYWNrVGhyZWFkX3NldCwgX19weXhfa19DYWxsYmFja1RocmVhZF9zZXQsIHNp emVvZihfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX3NldCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5 eF9uX3NfQ2FsbGJhY2tUaHJlYWRfc2h1dGRvd24sIF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfc2h1 dGRvd24sIHNpemVvZihfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX3NodXRkb3duKSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X25fc19Db250ZXh0LCBfX3B5eF9rX0NvbnRleHQsIHNpemVvZihfX3B5 eF9rX0NvbnRleHQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfa3Bfc19Db250ZXh0X2NyZWF0 aW9uX2Vycm9yLCBfX3B5eF9rX0NvbnRleHRfY3JlYXRpb25fZXJyb3IsIHNpemVvZihfX3B5eF9r X0NvbnRleHRfY3JlYXRpb25fZXJyb3IpLCAwLCAwLCAxLCAwfSwKKy0gIHsmX19weXhfbl9zX0Rl cHJlY2F0aW9uV2FybmluZywgX19weXhfa19EZXByZWNhdGlvbldhcm5pbmcsIHNpemVvZihfX3B5 eF9rX0RlcHJlY2F0aW9uV2FybmluZyksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfRU9G UmVhc29ucywgX19weXhfa19FT0ZSZWFzb25zLCBzaXplb2YoX19weXhfa19FT0ZSZWFzb25zKSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19FbmRPZkZpbGVSZWFjaGVkLCBfX3B5eF9rX0Vu ZE9mRmlsZVJlYWNoZWQsIHNpemVvZihfX3B5eF9rX0VuZE9mRmlsZVJlYWNoZWQpLCAwLCAwLCAx LCAxfSwKKy0gIHsmX19weXhfbl9zX0Vycm9ycywgX19weXhfa19FcnJvcnMsIHNpemVvZihfX3B5 eF9rX0Vycm9ycyksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfRXZlbnQsIF9fcHl4X2tf RXZlbnQsIHNpemVvZihfX3B5eF9rX0V2ZW50KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25f c19FdmVudHMsIF9fcHl4X2tfRXZlbnRzLCBzaXplb2YoX19weXhfa19FdmVudHMpLCAwLCAwLCAx LCAxfSwKKy0gIHsmX19weXhfbl9zX0ltcG9ydEVycm9yLCBfX3B5eF9rX0ltcG9ydEVycm9yLCBz aXplb2YoX19weXhfa19JbXBvcnRFcnJvciksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9rcF9z X0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDA1LCBfX3B5eF9rX0luY29tcGF0aWJsZV9j aGVja3N1bXNfc192c18weDA1LCBzaXplb2YoX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1z X3NfdnNfMHgwNSksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9j aGVja3N1bXNfc192c18weDU2LCBfX3B5eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18w eDU2LCBzaXplb2YoX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHg1NiksIDAs IDAsIDEsIDB9LAorLSAgeyZfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18w eDg3LCBfX3B5eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDg3LCBzaXplb2YoX19w eXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHg4NyksIDAsIDAsIDEsIDB9LAorLSAg eyZfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGJmLCBfX3B5eF9rX0lu Y29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGJmLCBzaXplb2YoX19weXhfa19JbmNvbXBhdGli bGVfY2hlY2tzdW1zX3NfdnNfMHhiZiksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9rcF9zX0lu Y29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGQ0LCBfX3B5eF9rX0luY29tcGF0aWJsZV9jaGVj a3N1bXNfc192c18weGQ0LCBzaXplb2YoX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3Nf dnNfMHhkNCksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVj a3N1bXNfc192c18weGRhLCBfX3B5eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGRh LCBzaXplb2YoX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHhkYSksIDAsIDAs IDEsIDB9LAorLSAgeyZfX3B5eF9uX3NfSW5wdXREaXNwYXRjaCwgX19weXhfa19JbnB1dERpc3Bh dGNoLCBzaXplb2YoX19weXhfa19JbnB1dERpc3BhdGNoKSwgMCwgMCwgMSwgMX0sCistICB7Jl9f cHl4X2twX3NfS25vd25fcG9zc2libGVfdmFsdWVzX2Zvcl9FbmRPZkYsIF9fcHl4X2tfS25vd25f cG9zc2libGVfdmFsdWVzX2Zvcl9FbmRPZkYsIHNpemVvZihfX3B5eF9rX0tub3duX3Bvc3NpYmxl X3ZhbHVlc19mb3JfRW5kT2ZGKSwgMCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X25fc19Mb2dMZXZl bHMsIF9fcHl4X2tfTG9nTGV2ZWxzLCBzaXplb2YoX19weXhfa19Mb2dMZXZlbHMpLCAwLCAwLCAx LCAxfSwKKy0gIHsmX19weXhfbl9zX0xvZ01lc3NhZ2UsIF9fcHl4X2tfTG9nTWVzc2FnZSwgc2l6 ZW9mKF9fcHl4X2tfTG9nTWVzc2FnZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfTUlO X0NBUElfTUlOT1IsIF9fcHl4X2tfTUlOX0NBUElfTUlOT1IsIHNpemVvZihfX3B5eF9rX01JTl9D QVBJX01JTk9SKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19NUFZFcnJvciwgX19weXhf a19NUFZFcnJvciwgc2l6ZW9mKF9fcHl4X2tfTVBWRXJyb3IpLCAwLCAwLCAxLCAxfSwKKy0gIHsm X19weXhfbl9zX01QVkVycm9yX19faW5pdCwgX19weXhfa19NUFZFcnJvcl9fX2luaXQsIHNpemVv ZihfX3B5eF9rX01QVkVycm9yX19faW5pdCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nf T3BlbkdMQ29udGV4dCwgX19weXhfa19PcGVuR0xDb250ZXh0LCBzaXplb2YoX19weXhfa19PcGVu R0xDb250ZXh0KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X2twX3NfT3BlbkdMQ29udGV4dF9p c19kZXByZWNhdGVkX3BsZWEsIF9fcHl4X2tfT3BlbkdMQ29udGV4dF9pc19kZXByZWNhdGVkX3Bs ZWEsIHNpemVvZihfX3B5eF9rX09wZW5HTENvbnRleHRfaXNfZGVwcmVjYXRlZF9wbGVhKSwgMCwg MCwgMSwgMH0sCistICB7Jl9fcHl4X25fc19PcGVuR0xSZW5kZXJDb250ZXh0LCBfX3B5eF9rX09w ZW5HTFJlbmRlckNvbnRleHQsIHNpemVvZihfX3B5eF9rX09wZW5HTFJlbmRlckNvbnRleHQpLCAw LCAwLCAxLCAxfSwKKy0gIHsmX19weXhfa3Bfc19PcGVuR0xfQVBJX25vdF9hdmFpbGFibGUsIF9f cHl4X2tfT3BlbkdMX0FQSV9ub3RfYXZhaWxhYmxlLCBzaXplb2YoX19weXhfa19PcGVuR0xfQVBJ X25vdF9hdmFpbGFibGUpLCAwLCAwLCAxLCAwfSwKKy0gIHsmX19weXhfbl9zX1BpY2tsZUVycm9y LCBfX3B5eF9rX1BpY2tsZUVycm9yLCBzaXplb2YoX19weXhfa19QaWNrbGVFcnJvciksIDAsIDAs IDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfUHJvcGVydHksIF9fcHl4X2tfUHJvcGVydHksIHNpemVv ZihfX3B5eF9rX1Byb3BlcnR5KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19QeU1QVkVy cm9yLCBfX3B5eF9rX1B5TVBWRXJyb3IsIHNpemVvZihfX3B5eF9rX1B5TVBWRXJyb3IpLCAwLCAw LCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX1JFUVVJUkVEX0NBUElfTUFKT1IsIF9fcHl4X2tfUkVR VUlSRURfQ0FQSV9NQUpPUiwgc2l6ZW9mKF9fcHl4X2tfUkVRVUlSRURfQ0FQSV9NQUpPUiksIDAs IDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfUmVuZGVyQ29udGV4dCwgX19weXhfa19SZW5kZXJD b250ZXh0LCBzaXplb2YoX19weXhfa19SZW5kZXJDb250ZXh0KSwgMCwgMCwgMSwgMX0sCistICB7 Jl9fcHl4X25fc19SZW5kZXJQYXJhbXMsIF9fcHl4X2tfUmVuZGVyUGFyYW1zLCBzaXplb2YoX19w eXhfa19SZW5kZXJQYXJhbXMpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfa3Bfc19SZW5kZXJQ YXJhbXNfb3ZlcmZsb3csIF9fcHl4X2tfUmVuZGVyUGFyYW1zX292ZXJmbG93LCBzaXplb2YoX19w eXhfa19SZW5kZXJQYXJhbXNfb3ZlcmZsb3cpLCAwLCAwLCAxLCAwfSwKKy0gIHsmX19weXhfbl9z X1JlcGx5VXNlckRhdGEsIF9fcHl4X2tfUmVwbHlVc2VyRGF0YSwgc2l6ZW9mKF9fcHl4X2tfUmVw bHlVc2VyRGF0YSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YV9f X2luaXQsIF9fcHl4X2tfUmVwbHlVc2VyRGF0YV9fX2luaXQsIHNpemVvZihfX3B5eF9rX1JlcGx5 VXNlckRhdGFfX19pbml0KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19SZXBseVVzZXJE YXRhX2FkZCwgX19weXhfa19SZXBseVVzZXJEYXRhX2FkZCwgc2l6ZW9mKF9fcHl4X2tfUmVwbHlV c2VyRGF0YV9hZGQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX1JlcGx5VXNlckRhdGFf cmVtb3ZlLCBfX3B5eF9rX1JlcGx5VXNlckRhdGFfcmVtb3ZlLCBzaXplb2YoX19weXhfa19SZXBs eVVzZXJEYXRhX3JlbW92ZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfU2VtYXBob3Jl LCBfX3B5eF9rX1NlbWFwaG9yZSwgc2l6ZW9mKF9fcHl4X2tfU2VtYXBob3JlKSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X2twX3NfU2V0X29mX2tub3duX2Vycm9yX2NvZGVzX2Zyb21fTXAsIF9f cHl4X2tfU2V0X29mX2tub3duX2Vycm9yX2NvZGVzX2Zyb21fTXAsIHNpemVvZihfX3B5eF9rX1Nl dF9vZl9rbm93bl9lcnJvcl9jb2Rlc19mcm9tX01wKSwgMCwgMCwgMSwgMH0sCistICB7Jl9fcHl4 X2twX3NfU2V0X29mX2tub3duX3ZhbHVlc19mb3JfRXZlbnRfaWQsIF9fcHl4X2tfU2V0X29mX2tu b3duX3ZhbHVlc19mb3JfRXZlbnRfaWQsIHNpemVvZihfX3B5eF9rX1NldF9vZl9rbm93bl92YWx1 ZXNfZm9yX0V2ZW50X2lkKSwgMCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X25fc19UaHJlYWQsIF9f cHl4X2tfVGhyZWFkLCBzaXplb2YoX19weXhfa19UaHJlYWQpLCAwLCAwLCAxLCAxfSwKKy0gIHsm X19weXhfbl9zX1R5cGVFcnJvciwgX19weXhfa19UeXBlRXJyb3IsIHNpemVvZihfX3B5eF9rX1R5 cGVFcnJvciksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfVVBEQVRFX0ZSQU1FLCBfX3B5 eF9rX1VQREFURV9GUkFNRSwgc2l6ZW9mKF9fcHl4X2tfVVBEQVRFX0ZSQU1FKSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X25fc19Vbmljb2RlRGVjb2RlRXJyb3IsIF9fcHl4X2tfVW5pY29kZURl Y29kZUVycm9yLCBzaXplb2YoX19weXhfa19Vbmljb2RlRGVjb2RlRXJyb3IpLCAwLCAwLCAxLCAx fSwKKy0gIHsmX19weXhfbl9zX1VuaWNvZGVFbmNvZGVFcnJvciwgX19weXhfa19Vbmljb2RlRW5j b2RlRXJyb3IsIHNpemVvZihfX3B5eF9rX1VuaWNvZGVFbmNvZGVFcnJvciksIDAsIDAsIDEsIDF9 LAorLSAgeyZfX3B5eF9rcF9zX1Vua25vd25fYXBpX3R5cGVfciwgX19weXhfa19Vbmtub3duX2Fw aV90eXBlX3IsIHNpemVvZihfX3B5eF9rX1Vua25vd25fYXBpX3R5cGVfciksIDAsIDAsIDEsIDB9 LAorLSAgeyZfX3B5eF9rcF9zX1Vua25vd25fb3JfaW52YWxpZF9wb2ludGVyX29iamVjLCBfX3B5 eF9rX1Vua25vd25fb3JfaW52YWxpZF9wb2ludGVyX29iamVjLCBzaXplb2YoX19weXhfa19Vbmtu b3duX29yX2ludmFsaWRfcG9pbnRlcl9vYmplYyksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9u X3NfYWJvcnRlZCwgX19weXhfa19hYm9ydGVkLCBzaXplb2YoX19weXhfa19hYm9ydGVkKSwgMCwg MCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19hY3F1aXJlLCBfX3B5eF9rX2FjcXVpcmUsIHNpemVv ZihfX3B5eF9rX2FjcXVpcmUpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2FkZCwgX19w eXhfa19hZGQsIHNpemVvZihfX3B5eF9rX2FkZCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9u X3NfYWR2YW5jZWRfY29udHJvbCwgX19weXhfa19hZHZhbmNlZF9jb250cm9sLCBzaXplb2YoX19w eXhfa19hZHZhbmNlZF9jb250cm9sKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19hb19p bml0X2ZhaWxlZCwgX19weXhfa19hb19pbml0X2ZhaWxlZCwgc2l6ZW9mKF9fcHl4X2tfYW9faW5p dF9mYWlsZWQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2FwaV90eXBlLCBfX3B5eF9r X2FwaV90eXBlLCBzaXplb2YoX19weXhfa19hcGlfdHlwZSksIDAsIDAsIDEsIDF9LAorLSAgeyZf X3B5eF9uX3NfYXBwZW5kLCBfX3B5eF9rX2FwcGVuZCwgc2l6ZW9mKF9fcHl4X2tfYXBwZW5kKSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19hc3luY2hyb25vdXMsIF9fcHl4X2tfYXN5bmNo cm9ub3VzLCBzaXplb2YoX19weXhfa19hc3luY2hyb25vdXMpLCAwLCAwLCAxLCAxfSwKKy0gIHsm X19weXhfbl9zX2F0b21pY19yZXF1ZXN0X3B0ciwgX19weXhfa19hdG9taWNfcmVxdWVzdF9wdHIs IHNpemVvZihfX3B5eF9rX2F0b21pY19yZXF1ZXN0X3B0ciksIDAsIDAsIDEsIDF9LAorLSAgeyZf X3B5eF9uX3NfYXVkaW9fcmVjb25maWcsIF9fcHl4X2tfYXVkaW9fcmVjb25maWcsIHNpemVvZihf X3B5eF9rX2F1ZGlvX3JlY29uZmlnKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19hdXRo b3IsIF9fcHl4X2tfYXV0aG9yLCBzaXplb2YoX19weXhfa19hdXRob3IpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX2Jsb2NrX2Zvcl90YXJnZXRfdGltZSwgX19weXhfa19ibG9ja19mb3Jf dGFyZ2V0X3RpbWUsIHNpemVvZihfX3B5eF9rX2Jsb2NrX2Zvcl90YXJnZXRfdGltZSksIDAsIDAs IDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfYmxvY2tfdnN5bmMsIF9fcHl4X2tfYmxvY2tfdnN5bmMs IHNpemVvZihfX3B5eF9rX2Jsb2NrX3ZzeW5jKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25f c19jYWxsLCBfX3B5eF9rX2NhbGwsIHNpemVvZihfX3B5eF9rX2NhbGwpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX2NhbGxiYWNrLCBfX3B5eF9rX2NhbGxiYWNrLCBzaXplb2YoX19weXhf a19jYWxsYmFjayksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfY2hhcHRlcl9jaGFuZ2Us IF9fcHl4X2tfY2hhcHRlcl9jaGFuZ2UsIHNpemVvZihfX3B5eF9rX2NoYXB0ZXJfY2hhbmdlKSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19jbGllbnRfbWVzc2FnZSwgX19weXhfa19jbGll bnRfbWVzc2FnZSwgc2l6ZW9mKF9fcHl4X2tfY2xpZW50X21lc3NhZ2UpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX2NsaW5lX2luX3RyYWNlYmFjaywgX19weXhfa19jbGluZV9pbl90cmFj ZWJhY2ssIHNpemVvZihfX3B5eF9rX2NsaW5lX2luX3RyYWNlYmFjayksIDAsIDAsIDEsIDF9LAor LSAgeyZfX3B5eF9uX3NfY2xvc2UsIF9fcHl4X2tfY2xvc2UsIHNpemVvZihfX3B5eF9rX2Nsb3Nl KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19jb2RlLCBfX3B5eF9rX2NvZGUsIHNpemVv ZihfX3B5eF9rX2NvZGUpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2NvbW1hbmRfZXJy b3IsIF9fcHl4X2tfY29tbWFuZF9lcnJvciwgc2l6ZW9mKF9fcHl4X2tfY29tbWFuZF9lcnJvciks IDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfY29tbWFuZF9yZXBseSwgX19weXhfa19jb21t YW5kX3JlcGx5LCBzaXplb2YoX19weXhfa19jb21tYW5kX3JlcGx5KSwgMCwgMCwgMSwgMX0sCist ICB7Jl9fcHl4X25fc19jb25uZWN0b3JfaWQsIF9fcHl4X2tfY29ubmVjdG9yX2lkLCBzaXplb2Yo X19weXhfa19jb25uZWN0b3JfaWQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2NvdW50 ZXIsIF9fcHl4X2tfY291bnRlciwgc2l6ZW9mKF9fcHl4X2tfY291bnRlciksIDAsIDAsIDEsIDF9 LAorLSAgeyZfX3B5eF9uX3NfY3J0Y19pZCwgX19weXhfa19jcnRjX2lkLCBzaXplb2YoX19weXhf a19jcnRjX2lkKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19kYWVtb24sIF9fcHl4X2tf ZGFlbW9uLCBzaXplb2YoX19weXhfa19kYWVtb24pLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhf bl9zX2RhdGEsIF9fcHl4X2tfZGF0YSwgc2l6ZW9mKF9fcHl4X2tfZGF0YSksIDAsIDAsIDEsIDF9 LAorLSAgeyZfX3B5eF9uX3NfZGVidWcsIF9fcHl4X2tfZGVidWcsIHNpemVvZihfX3B5eF9rX2Rl YnVnKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19kZWNvZGUsIF9fcHl4X2tfZGVjb2Rl LCBzaXplb2YoX19weXhfa19kZWNvZGUpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2Rl ZmF1bHQsIF9fcHl4X2tfZGVmYXVsdCwgc2l6ZW9mKF9fcHl4X2tfZGVmYXVsdCksIDAsIDAsIDEs IDF9LAorLSAgeyZfX3B5eF9uX3NfZGVwdGgsIF9fcHl4X2tfZGVwdGgsIHNpemVvZihfX3B5eF9r X2RlcHRoKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19kaWN0LCBfX3B5eF9rX2RpY3Qs IHNpemVvZihfX3B5eF9rX2RpY3QpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2RvYywg X19weXhfa19kb2MsIHNpemVvZihfX3B5eF9rX2RvYyksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5 eF9rcF9zX2RybU1vZGVBdG9taWNSZXEsIF9fcHl4X2tfZHJtTW9kZUF0b21pY1JlcSwgc2l6ZW9m KF9fcHl4X2tfZHJtTW9kZUF0b21pY1JlcSksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9uX3Nf ZHJtX2Rpc3BsYXksIF9fcHl4X2tfZHJtX2Rpc3BsYXksIHNpemVvZihfX3B5eF9rX2RybV9kaXNw bGF5KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19kcm1fb3NkX3NpemUsIF9fcHl4X2tf ZHJtX29zZF9zaXplLCBzaXplb2YoX19weXhfa19kcm1fb3NkX3NpemUpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX2UsIF9fcHl4X2tfZSwgc2l6ZW9mKF9fcHl4X2tfZSksIDAsIDAsIDEs IDF9LAorLSAgeyZfX3B5eF9uX3NfZV9pLCBfX3B5eF9rX2VfaSwgc2l6ZW9mKF9fcHl4X2tfZV9p KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19lbmFibGUsIF9fcHl4X2tfZW5hYmxlLCBz aXplb2YoX19weXhfa19lbmFibGUpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2VuY29k ZSwgX19weXhfa19lbmNvZGUsIHNpemVvZihfX3B5eF9rX2VuY29kZSksIDAsIDAsIDEsIDF9LAor LSAgeyZfX3B5eF9uX3NfZW5kX2ZpbGUsIF9fcHl4X2tfZW5kX2ZpbGUsIHNpemVvZihfX3B5eF9r X2VuZF9maWxlKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19lbnVtZXJhdGUsIF9fcHl4 X2tfZW51bWVyYXRlLCBzaXplb2YoX19weXhfa19lbnVtZXJhdGUpLCAwLCAwLCAxLCAxfSwKKy0g IHsmX19weXhfbl9zX2VvZiwgX19weXhfa19lb2YsIHNpemVvZihfX3B5eF9rX2VvZiksIDAsIDAs IDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfZXJyX2MsIF9fcHl4X2tfZXJyX2MsIHNpemVvZihfX3B5 eF9rX2Vycl9jKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19lcnJvciwgX19weXhfa19l cnJvciwgc2l6ZW9mKF9fcHl4X2tfZXJyb3IpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9z X2Vycm9ycywgX19weXhfa19lcnJvcnMsIHNpemVvZihfX3B5eF9rX2Vycm9ycyksIDAsIDAsIDEs IDF9LAorLSAgeyZfX3B5eF9uX3NfZXJyb3JzX2xvY2Fsc193cmFwcGVkLCBfX3B5eF9rX2Vycm9y c19sb2NhbHNfd3JhcHBlZCwgc2l6ZW9mKF9fcHl4X2tfZXJyb3JzX2xvY2Fsc193cmFwcGVkKSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19ldmVudCwgX19weXhfa19ldmVudCwgc2l6ZW9m KF9fcHl4X2tfZXZlbnQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2V4dHMsIF9fcHl4 X2tfZXh0cywgc2l6ZW9mKF9fcHl4X2tfZXh0cyksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9u X3NfZmF0YWwsIF9fcHl4X2tfZmF0YWwsIHNpemVvZihfX3B5eF9rX2ZhdGFsKSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X25fc19mYm8sIF9fcHl4X2tfZmJvLCBzaXplb2YoX19weXhfa19mYm8p LCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2ZkLCBfX3B5eF9rX2ZkLCBzaXplb2YoX19w eXhfa19mZCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfZmlsZV9sb2FkZWQsIF9fcHl4 X2tfZmlsZV9sb2FkZWQsIHNpemVvZihfX3B5eF9rX2ZpbGVfbG9hZGVkKSwgMCwgMCwgMSwgMX0s CistICB7Jl9fcHl4X25fc19mbGlwX3ksIF9fcHl4X2tfZmxpcF95LCBzaXplb2YoX19weXhfa19m bGlwX3kpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2ZuLCBfX3B5eF9rX2ZuLCBzaXpl b2YoX19weXhfa19mbiksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfZm9ybWF0X2Zvciwg X19weXhfa19mb3JtYXRfZm9yLCBzaXplb2YoX19weXhfa19mb3JtYXRfZm9yKSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X25fc19nZXQsIF9fcHl4X2tfZ2V0LCBzaXplb2YoX19weXhfa19nZXQp LCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2dldF9wcm9jX2FkZHJlc3MsIF9fcHl4X2tf Z2V0X3Byb2NfYWRkcmVzcywgc2l6ZW9mKF9fcHl4X2tfZ2V0X3Byb2NfYWRkcmVzcyksIDAsIDAs IDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5LCBfX3B5eF9rX2dldF9wcm9wZXJ0 eSwgc2l6ZW9mKF9fcHl4X2tfZ2V0X3Byb3BlcnR5KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4 X25fc19nZXRfcHJvcGVydHlfYXN5bmMsIF9fcHl4X2tfZ2V0X3Byb3BlcnR5X2FzeW5jLCBzaXpl b2YoX19weXhfa19nZXRfcHJvcGVydHlfYXN5bmMpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhf bl9zX2dldF9wcm9wZXJ0eV9yZXBseSwgX19weXhfa19nZXRfcHJvcGVydHlfcmVwbHksIHNpemVv ZihfX3B5eF9rX2dldF9wcm9wZXJ0eV9yZXBseSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9u X3NfZ2V0c3RhdGUsIF9fcHl4X2tfZ2V0c3RhdGUsIHNpemVvZihfX3B5eF9rX2dldHN0YXRlKSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19oLCBfX3B5eF9rX2gsIHNpemVvZihfX3B5eF9r X2gpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfa3Bfc19pY2NfYmxvYl9zaG91bGRfYmVfYV9i eXRlc19pbnN0YSwgX19weXhfa19pY2NfYmxvYl9zaG91bGRfYmVfYV9ieXRlc19pbnN0YSwgc2l6 ZW9mKF9fcHl4X2tfaWNjX2Jsb2Jfc2hvdWxkX2JlX2FfYnl0ZXNfaW5zdGEpLCAwLCAwLCAxLCAw fSwKKy0gIHsmX19weXhfbl9zX2lkLCBfX3B5eF9rX2lkLCBzaXplb2YoX19weXhfa19pZCksIDAs IDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfaWRsZSwgX19weXhfa19pZGxlLCBzaXplb2YoX19w eXhfa19pZGxlKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19pbXBvcnQsIF9fcHl4X2tf aW1wb3J0LCBzaXplb2YoX19weXhfa19pbXBvcnQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhf bl9zX2luZm8sIF9fcHl4X2tfaW5mbywgc2l6ZW9mKF9fcHl4X2tfaW5mbyksIDAsIDAsIDEsIDF9 LAorLSAgeyZfX3B5eF9uX3NfaW5pdCwgX19weXhfa19pbml0LCBzaXplb2YoX19weXhfa19pbml0 KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19pbml0aWFsaXplLCBfX3B5eF9rX2luaXRp YWxpemUsIHNpemVvZihfX3B5eF9rX2luaXRpYWxpemUpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19w eXhfbl9zX2ludGVybmFsX2Zvcm1hdCwgX19weXhfa19pbnRlcm5hbF9mb3JtYXQsIHNpemVvZihf X3B5eF9rX2ludGVybmFsX2Zvcm1hdCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfaW52 YWxpZF9wYXJhbWV0ZXIsIF9fcHl4X2tfaW52YWxpZF9wYXJhbWV0ZXIsIHNpemVvZihfX3B5eF9r X2ludmFsaWRfcGFyYW1ldGVyKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19pc19weTMs IF9fcHl4X2tfaXNfcHkzLCBzaXplb2YoX19weXhfa19pc19weTMpLCAwLCAwLCAxLCAxfSwKKy0g IHsmX19weXhfbl9zX2lzc2h1dGRvd24sIF9fcHl4X2tfaXNzaHV0ZG93biwgc2l6ZW9mKF9fcHl4 X2tfaXNzaHV0ZG93biksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfaywgX19weXhfa19r LCBzaXplb2YoX19weXhfa19rKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19rZXlzLCBf X3B5eF9rX2tleXMsIHNpemVvZihfX3B5eF9rX2tleXMpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19w eXhfbl9zX2t3LCBfX3B5eF9rX2t3LCBzaXplb2YoX19weXhfa19rdyksIDAsIDAsIDEsIDF9LAor LSAgeyZfX3B5eF9rcF9zX2xpYm1wdl92ZXJzaW9uX2lzX2luY29ycmVjdF9SZXF1LCBfX3B5eF9r X2xpYm1wdl92ZXJzaW9uX2lzX2luY29ycmVjdF9SZXF1LCBzaXplb2YoX19weXhfa19saWJtcHZf dmVyc2lvbl9pc19pbmNvcnJlY3RfUmVxdSksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9uX3Nf bG9hZF9jb25maWcsIF9fcHl4X2tfbG9hZF9jb25maWcsIHNpemVvZihfX3B5eF9rX2xvYWRfY29u ZmlnKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19sb2FkaW5nX2ZhaWxlZCwgX19weXhf a19sb2FkaW5nX2ZhaWxlZCwgc2l6ZW9mKF9fcHl4X2tfbG9hZGluZ19mYWlsZWQpLCAwLCAwLCAx LCAxfSwKKy0gIHsmX19weXhfbl9zX2xvY2ssIF9fcHl4X2tfbG9jaywgc2l6ZW9mKF9fcHl4X2tf bG9jayksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfbG9nX21lc3NhZ2UsIF9fcHl4X2tf bG9nX21lc3NhZ2UsIHNpemVvZihfX3B5eF9rX2xvZ19tZXNzYWdlKSwgMCwgMCwgMSwgMX0sCist ICB7Jl9fcHl4X25fc19tYWluLCBfX3B5eF9rX21haW4sIHNpemVvZihfX3B5eF9rX21haW4pLCAw LCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX21ldGFjbGFzcywgX19weXhfa19tZXRhY2xhc3Ms IHNpemVvZihfX3B5eF9rX21ldGFjbGFzcyksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nf bWV0YWRhdGFfdXBkYXRlLCBfX3B5eF9rX21ldGFkYXRhX3VwZGF0ZSwgc2l6ZW9mKF9fcHl4X2tf bWV0YWRhdGFfdXBkYXRlKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19tb2R1bGUsIF9f cHl4X2tfbW9kdWxlLCBzaXplb2YoX19weXhfa19tb2R1bGUpLCAwLCAwLCAxLCAxfSwKKy0gIHsm X19weXhfbl9zX21wdiwgX19weXhfa19tcHYsIHNpemVvZihfX3B5eF9rX21wdiksIDAsIDAsIDEs IDF9LAorLSAgeyZfX3B5eF9uX3NfbXB2X2NhbGxiYWNrLCBfX3B5eF9rX21wdl9jYWxsYmFjaywg c2l6ZW9mKF9fcHl4X2tfbXB2X2NhbGxiYWNrKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25f c19uYW1lLCBfX3B5eF9rX25hbWUsIHNpemVvZihfX3B5eF9rX25hbWUpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX25ldywgX19weXhfa19uZXcsIHNpemVvZihfX3B5eF9rX25ldyksIDAs IDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfbm8sIF9fcHl4X2tfbm8sIHNpemVvZihfX3B5eF9r X25vKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X2twX3Nfbm9fZGVmYXVsdF9fX3JlZHVjZV9f X2R1ZV90b19ub24sIF9fcHl4X2tfbm9fZGVmYXVsdF9fX3JlZHVjZV9fX2R1ZV90b19ub24sIHNp emVvZihfX3B5eF9rX25vX2RlZmF1bHRfX19yZWR1Y2VfX19kdWVfdG9fbm9uKSwgMCwgMCwgMSwg MH0sCistICB7Jl9fcHl4X25fc19ub21lbSwgX19weXhfa19ub21lbSwgc2l6ZW9mKF9fcHl4X2tf bm9tZW0pLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX25vbmUsIF9fcHl4X2tfbm9uZSwg c2l6ZW9mKF9fcHl4X2tfbm9uZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfbm90X2Zv dW5kLCBfX3B5eF9rX25vdF9mb3VuZCwgc2l6ZW9mKF9fcHl4X2tfbm90X2ZvdW5kKSwgMCwgMCwg MSwgMX0sCistICB7Jl9fcHl4X25fc19ub3RfaW1wbGVtZW50ZWQsIF9fcHl4X2tfbm90X2ltcGxl bWVudGVkLCBzaXplb2YoX19weXhfa19ub3RfaW1wbGVtZW50ZWQpLCAwLCAwLCAxLCAxfSwKKy0g IHsmX19weXhfbl9zX25vdGhpbmdfdG9fcGxheSwgX19weXhfa19ub3RoaW5nX3RvX3BsYXksIHNp emVvZihfX3B5eF9rX25vdGhpbmdfdG9fcGxheSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9u X3Nfb2JqZWN0LCBfX3B5eF9rX29iamVjdCwgc2l6ZW9mKF9fcHl4X2tfb2JqZWN0KSwgMCwgMCwg MSwgMX0sCistICB7Jl9fcHl4X25fc19vYnNlcnZlX3Byb3BlcnR5LCBfX3B5eF9rX29ic2VydmVf cHJvcGVydHksIHNpemVvZihfX3B5eF9rX29ic2VydmVfcHJvcGVydHkpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX29ic2VydmVkLCBfX3B5eF9rX29ic2VydmVkLCBzaXplb2YoX19weXhf a19vYnNlcnZlZCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfb3BlbmdsLCBfX3B5eF9r X29wZW5nbCwgc2l6ZW9mKF9fcHl4X2tfb3BlbmdsKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4 X25fc19vcGVuZ2xfZmJvLCBfX3B5eF9rX29wZW5nbF9mYm8sIHNpemVvZihfX3B5eF9rX29wZW5n bF9mYm8pLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX29wZW5nbF9pbml0X3BhcmFtcywg X19weXhfa19vcGVuZ2xfaW5pdF9wYXJhbXMsIHNpemVvZihfX3B5eF9rX29wZW5nbF9pbml0X3Bh cmFtcyksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfb3B0aW9uX2Vycm9yLCBfX3B5eF9r X29wdGlvbl9lcnJvciwgc2l6ZW9mKF9fcHl4X2tfb3B0aW9uX2Vycm9yKSwgMCwgMCwgMSwgMX0s CistICB7Jl9fcHl4X25fc19vcHRpb25fZm9ybWF0LCBfX3B5eF9rX29wdGlvbl9mb3JtYXQsIHNp emVvZihfX3B5eF9rX29wdGlvbl9mb3JtYXQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9z X3BhdXNlLCBfX3B5eF9rX3BhdXNlLCBzaXplb2YoX19weXhfa19wYXVzZSksIDAsIDAsIDEsIDF9 LAorLSAgeyZfX3B5eF9uX3NfcGlja2xlLCBfX3B5eF9rX3BpY2tsZSwgc2l6ZW9mKF9fcHl4X2tf cGlja2xlKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19wbGF5YmFja19yZXN0YXJ0LCBf X3B5eF9rX3BsYXliYWNrX3Jlc3RhcnQsIHNpemVvZihfX3B5eF9rX3BsYXliYWNrX3Jlc3RhcnQp LCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3ByZXBhcmUsIF9fcHl4X2tfcHJlcGFyZSwg c2l6ZW9mKF9fcHl4X2tfcHJlcGFyZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfcHJl c2VudCwgX19weXhfa19wcmVzZW50LCBzaXplb2YoX19weXhfa19wcmVzZW50KSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X25fc19wcm9wLCBfX3B5eF9rX3Byb3AsIHNpemVvZihfX3B5eF9rX3By b3ApLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3Byb3BlcnR5X2NoYW5nZSwgX19weXhf a19wcm9wZXJ0eV9jaGFuZ2UsIHNpemVvZihfX3B5eF9rX3Byb3BlcnR5X2NoYW5nZSksIDAsIDAs IDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfcHJvcGVydHlfZXJyb3IsIF9fcHl4X2tfcHJvcGVydHlf ZXJyb3IsIHNpemVvZihfX3B5eF9rX3Byb3BlcnR5X2Vycm9yKSwgMCwgMCwgMSwgMX0sCistICB7 Jl9fcHl4X25fc19wcm9wZXJ0eV9mb3JtYXQsIF9fcHl4X2tfcHJvcGVydHlfZm9ybWF0LCBzaXpl b2YoX19weXhfa19wcm9wZXJ0eV9mb3JtYXQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9z X3Byb3BlcnR5X3VuYXZhaWxhYmxlLCBfX3B5eF9rX3Byb3BlcnR5X3VuYXZhaWxhYmxlLCBzaXpl b2YoX19weXhfa19wcm9wZXJ0eV91bmF2YWlsYWJsZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5 eF9rcF9zX3B5bXB2X2Vycm9yX2R1cmluZ19jYWxsYmFja19zLCBfX3B5eF9rX3B5bXB2X2Vycm9y X2R1cmluZ19jYWxsYmFja19zLCBzaXplb2YoX19weXhfa19weW1wdl9lcnJvcl9kdXJpbmdfY2Fs bGJhY2tfcyksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9uX3NfcHl4X1BpY2tsZUVycm9yLCBf X3B5eF9rX3B5eF9QaWNrbGVFcnJvciwgc2l6ZW9mKF9fcHl4X2tfcHl4X1BpY2tsZUVycm9yKSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19weXhfY2hlY2tzdW0sIF9fcHl4X2tfcHl4X2No ZWNrc3VtLCBzaXplb2YoX19weXhfa19weXhfY2hlY2tzdW0pLCAwLCAwLCAxLCAxfSwKKy0gIHsm X19weXhfbl9zX3B5eF9yZXN1bHQsIF9fcHl4X2tfcHl4X3Jlc3VsdCwgc2l6ZW9mKF9fcHl4X2tf cHl4X3Jlc3VsdCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfcHl4X3N0YXRlLCBfX3B5 eF9rX3B5eF9zdGF0ZSwgc2l6ZW9mKF9fcHl4X2tfcHl4X3N0YXRlKSwgMCwgMCwgMSwgMX0sCist ICB7Jl9fcHl4X25fc19weXhfdHlwZSwgX19weXhfa19weXhfdHlwZSwgc2l6ZW9mKF9fcHl4X2tf cHl4X3R5cGUpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3B5eF91bnBpY2tsZV9FbmRP ZkZpbGVSZWFjaGVkLCBfX3B5eF9rX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkLCBzaXpl b2YoX19weXhfa19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCksIDAsIDAsIDEsIDF9LAor LSAgeyZfX3B5eF9uX3NfcHl4X3VucGlja2xlX0V2ZW50LCBfX3B5eF9rX3B5eF91bnBpY2tsZV9F dmVudCwgc2l6ZW9mKF9fcHl4X2tfcHl4X3VucGlja2xlX0V2ZW50KSwgMCwgMCwgMSwgMX0sCist ICB7Jl9fcHl4X25fc19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCwgX19weXhfa19weXhfdW5w aWNrbGVfSW5wdXREaXNwYXRjaCwgc2l6ZW9mKF9fcHl4X2tfcHl4X3VucGlja2xlX0lucHV0RGlz cGF0Y2gpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3B5eF91bnBpY2tsZV9Mb2dNZXNz YWdlLCBfX3B5eF9rX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCBzaXplb2YoX19weXhfa19weXhf dW5waWNrbGVfTG9nTWVzc2FnZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfcHl4X3Vu cGlja2xlX1Byb3BlcnR5LCBfX3B5eF9rX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgc2l6ZW9mKF9f cHl4X2tfcHl4X3VucGlja2xlX1Byb3BlcnR5KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25f c19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCBfX3B5eF9rX3B5eF91bnBpY2tsZV9SZW5k ZXJGcmFtZUluZm8sIHNpemVvZihfX3B5eF9rX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8p LCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3B5eF92dGFibGUsIF9fcHl4X2tfcHl4X3Z0 YWJsZSwgc2l6ZW9mKF9fcHl4X2tfcHl4X3Z0YWJsZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5 eF9uX3NfcXVhbG5hbWUsIF9fcHl4X2tfcXVhbG5hbWUsIHNpemVvZihfX3B5eF9rX3F1YWxuYW1l KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19xdWV1ZV9mdWxsLCBfX3B5eF9rX3F1ZXVl X2Z1bGwsIHNpemVvZihfX3B5eF9rX3F1ZXVlX2Z1bGwpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19w eXhfbl9zX3F1aXQsIF9fcHl4X2tfcXVpdCwgc2l6ZW9mKF9fcHl4X2tfcXVpdCksIDAsIDAsIDEs IDF9LAorLSAgeyZfX3B5eF9uX3NfcmFuZ2UsIF9fcHl4X2tfcmFuZ2UsIHNpemVvZihfX3B5eF9r X3JhbmdlKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19yZWRyYXcsIF9fcHl4X2tfcmVk cmF3LCBzaXplb2YoX19weXhfa19yZWRyYXcpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9z X3JlZHVjZSwgX19weXhfa19yZWR1Y2UsIHNpemVvZihfX3B5eF9rX3JlZHVjZSksIDAsIDAsIDEs IDF9LAorLSAgeyZfX3B5eF9uX3NfcmVkdWNlX2N5dGhvbiwgX19weXhfa19yZWR1Y2VfY3l0aG9u LCBzaXplb2YoX19weXhfa19yZWR1Y2VfY3l0aG9uKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4 X25fc19yZWR1Y2VfZXgsIF9fcHl4X2tfcmVkdWNlX2V4LCBzaXplb2YoX19weXhfa19yZWR1Y2Vf ZXgpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3JlbGVhc2UsIF9fcHl4X2tfcmVsZWFz ZSwgc2l6ZW9mKF9fcHl4X2tfcmVsZWFzZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nf cmVtb3ZlLCBfX3B5eF9rX3JlbW92ZSwgc2l6ZW9mKF9fcHl4X2tfcmVtb3ZlKSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X25fc19yZW5kZXIsIF9fcHl4X2tfcmVuZGVyLCBzaXplb2YoX19weXhf a19yZW5kZXIpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3JlbmRlcl9mZCwgX19weXhf a19yZW5kZXJfZmQsIHNpemVvZihfX3B5eF9rX3JlbmRlcl9mZCksIDAsIDAsIDEsIDF9LAorLSAg eyZfX3B5eF9uX3NfcmVwZWF0LCBfX3B5eF9rX3JlcGVhdCwgc2l6ZW9mKF9fcHl4X2tfcmVwZWF0 KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19yZXF1ZXN0X2V2ZW50LCBfX3B5eF9rX3Jl cXVlc3RfZXZlbnQsIHNpemVvZihfX3B5eF9rX3JlcXVlc3RfZXZlbnQpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX3J1biwgX19weXhfa19ydW4sIHNpemVvZihfX3B5eF9rX3J1biksIDAs IDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfcywgX19weXhfa19zLCBzaXplb2YoX19weXhfa19z KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19zY3JpcHRfaW5wdXRfZGlzcGF0Y2gsIF9f cHl4X2tfc2NyaXB0X2lucHV0X2Rpc3BhdGNoLCBzaXplb2YoX19weXhfa19zY3JpcHRfaW5wdXRf ZGlzcGF0Y2gpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3NlZWssIF9fcHl4X2tfc2Vl aywgc2l6ZW9mKF9fcHl4X2tfc2VlayksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfc2Vs ZiwgX19weXhfa19zZWxmLCBzaXplb2YoX19weXhfa19zZWxmKSwgMCwgMCwgMSwgMX0sCistICB7 Jl9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5vdF9iZV9jb252ZXJ0ZWRfdG8sIF9fcHl4X2tfc2Vs Zl9fY3R4X2Nhbm5vdF9iZV9jb252ZXJ0ZWRfdG8sIHNpemVvZihfX3B5eF9rX3NlbGZfX2N0eF9j YW5ub3RfYmVfY29udmVydGVkX3RvKSwgMCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X2twX3Nfc2Vs Zl9wYXJhbXNfY2Fubm90X2JlX2NvbnZlcnRlZCwgX19weXhfa19zZWxmX3BhcmFtc19jYW5ub3Rf YmVfY29udmVydGVkLCBzaXplb2YoX19weXhfa19zZWxmX3BhcmFtc19jYW5ub3RfYmVfY29udmVy dGVkKSwgMCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X25fc19zZXQsIF9fcHl4X2tfc2V0LCBzaXpl b2YoX19weXhfa19zZXQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3NldF9hbWJpZW50 X2xpZ2h0LCBfX3B5eF9rX3NldF9hbWJpZW50X2xpZ2h0LCBzaXplb2YoX19weXhfa19zZXRfYW1i aWVudF9saWdodCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfc2V0X2ljY19wcm9maWxl LCBfX3B5eF9rX3NldF9pY2NfcHJvZmlsZSwgc2l6ZW9mKF9fcHl4X2tfc2V0X2ljY19wcm9maWxl KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19zZXRfbG9nX2xldmVsLCBfX3B5eF9rX3Nl dF9sb2dfbGV2ZWwsIHNpemVvZihfX3B5eF9rX3NldF9sb2dfbGV2ZWwpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX3NldF9vcHRpb24sIF9fcHl4X2tfc2V0X29wdGlvbiwgc2l6ZW9mKF9f cHl4X2tfc2V0X29wdGlvbiksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfc2V0X3Byb3Bl cnR5LCBfX3B5eF9rX3NldF9wcm9wZXJ0eSwgc2l6ZW9mKF9fcHl4X2tfc2V0X3Byb3BlcnR5KSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19zZXRfcHJvcGVydHlfcmVwbHksIF9fcHl4X2tf c2V0X3Byb3BlcnR5X3JlcGx5LCBzaXplb2YoX19weXhfa19zZXRfcHJvcGVydHlfcmVwbHkpLCAw LCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3NldHN0YXRlLCBfX3B5eF9rX3NldHN0YXRlLCBz aXplb2YoX19weXhfa19zZXRzdGF0ZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfc2V0 c3RhdGVfY3l0aG9uLCBfX3B5eF9rX3NldHN0YXRlX2N5dGhvbiwgc2l6ZW9mKF9fcHl4X2tfc2V0 c3RhdGVfY3l0aG9uKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19zaHV0ZG93biwgX19w eXhfa19zaHV0ZG93biwgc2l6ZW9mKF9fcHl4X2tfc2h1dGRvd24pLCAwLCAwLCAxLCAxfSwKKy0g IHsmX19weXhfbl9zX3NraXBfcmVuZGVyaW5nLCBfX3B5eF9rX3NraXBfcmVuZGVyaW5nLCBzaXpl b2YoX19weXhfa19za2lwX3JlbmRlcmluZyksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nf c3RhcnQsIF9fcHl4X2tfc3RhcnQsIHNpemVvZihfX3B5eF9rX3N0YXJ0KSwgMCwgMCwgMSwgMX0s CistICB7Jl9fcHl4X25fc19zdGFydF9maWxlLCBfX3B5eF9rX3N0YXJ0X2ZpbGUsIHNpemVvZihf X3B5eF9rX3N0YXJ0X2ZpbGUpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3N0ZGVyciwg X19weXhfa19zdGRlcnIsIHNpemVvZihfX3B5eF9rX3N0ZGVyciksIDAsIDAsIDEsIDF9LAorLSAg eyZfX3B5eF9uX3Nfc3RyZGVjLCBfX3B5eF9rX3N0cmRlYywgc2l6ZW9mKF9fcHl4X2tfc3RyZGVj KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19zdHJkZWNfZXJyLCBfX3B5eF9rX3N0cmRl Y19lcnIsIHNpemVvZihfX3B5eF9rX3N0cmRlY19lcnIpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19w eXhfbl9zX3N0cmVuYywgX19weXhfa19zdHJlbmMsIHNpemVvZihfX3B5eF9rX3N0cmVuYyksIDAs IDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfc3RyaWN0LCBfX3B5eF9rX3N0cmljdCwgc2l6ZW9m KF9fcHl4X2tfc3RyaWN0KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X2twX3Nfc3RyaW5nc291 cmNlLCBfX3B5eF9rX3N0cmluZ3NvdXJjZSwgc2l6ZW9mKF9fcHl4X2tfc3RyaW5nc291cmNlKSwg MCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X25fc19zdWNjZXNzLCBfX3B5eF9rX3N1Y2Nlc3MsIHNp emVvZihfX3B5eF9rX3N1Y2Nlc3MpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3N1cnJv Z2F0ZWVzY2FwZSwgX19weXhfa19zdXJyb2dhdGVlc2NhcGUsIHNpemVvZihfX3B5eF9rX3N1cnJv Z2F0ZWVzY2FwZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfc3lzLCBfX3B5eF9rX3N5 cywgc2l6ZW9mKF9fcHl4X2tfc3lzKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc190YXJn ZXRfdGltZSwgX19weXhfa190YXJnZXRfdGltZSwgc2l6ZW9mKF9fcHl4X2tfdGFyZ2V0X3RpbWUp LCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3Rlc3QsIF9fcHl4X2tfdGVzdCwgc2l6ZW9m KF9fcHl4X2tfdGVzdCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfdGhyZWFkaW5nLCBf X3B5eF9rX3RocmVhZGluZywgc2l6ZW9mKF9fcHl4X2tfdGhyZWFkaW5nKSwgMCwgMCwgMSwgMX0s CistICB7Jl9fcHl4X25fc190aWNrLCBfX3B5eF9rX3RpY2ssIHNpemVvZihfX3B5eF9rX3RpY2sp LCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3RpbWVvdXQsIF9fcHl4X2tfdGltZW91dCwg c2l6ZW9mKF9fcHl4X2tfdGltZW91dCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfdHJh Y2UsIF9fcHl4X2tfdHJhY2UsIHNpemVvZihfX3B5eF9rX3RyYWNlKSwgMCwgMCwgMSwgMX0sCist ICB7Jl9fcHl4X25fc190cmFja3NfY2hhbmdlZCwgX19weXhfa190cmFja3NfY2hhbmdlZCwgc2l6 ZW9mKF9fcHl4X2tfdHJhY2tzX2NoYW5nZWQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9z X3RyYWNrc19zd2l0Y2hlZCwgX19weXhfa190cmFja3Nfc3dpdGNoZWQsIHNpemVvZihfX3B5eF9r X3RyYWNrc19zd2l0Y2hlZCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfdW5pbml0X2ds LCBfX3B5eF9rX3VuaW5pdF9nbCwgc2l6ZW9mKF9fcHl4X2tfdW5pbml0X2dsKSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X25fc191bmluaXRpYWxpemVkLCBfX3B5eF9rX3VuaW5pdGlhbGl6ZWQs IHNpemVvZihfX3B5eF9rX3VuaW5pdGlhbGl6ZWQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhf bl9zX3Vua25vd25fZm9ybWF0LCBfX3B5eF9rX3Vua25vd25fZm9ybWF0LCBzaXplb2YoX19weXhf a191bmtub3duX2Zvcm1hdCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfdW5vYnNlcnZl X3Byb3BlcnR5LCBfX3B5eF9rX3Vub2JzZXJ2ZV9wcm9wZXJ0eSwgc2l6ZW9mKF9fcHl4X2tfdW5v YnNlcnZlX3Byb3BlcnR5KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc191bnBhdXNlLCBf X3B5eF9rX3VucGF1c2UsIHNpemVvZihfX3B5eF9rX3VucGF1c2UpLCAwLCAwLCAxLCAxfSwKKy0g IHsmX19weXhfbl9zX3Vuc3VwcG9ydGVkLCBfX3B5eF9rX3Vuc3VwcG9ydGVkLCBzaXplb2YoX19w eXhfa191bnN1cHBvcnRlZCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfdXBkYXRlLCBf X3B5eF9rX3VwZGF0ZSwgc2l6ZW9mKF9fcHl4X2tfdXBkYXRlKSwgMCwgMCwgMSwgMX0sCistICB7 Jl9fcHl4X2twX3NfdXRmXzgsIF9fcHl4X2tfdXRmXzgsIHNpemVvZihfX3B5eF9rX3V0Zl84KSwg MCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X25fc192LCBfX3B5eF9rX3YsIHNpemVvZihfX3B5eF9r X3YpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3ZhbHVlLCBfX3B5eF9rX3ZhbHVlLCBz aXplb2YoX19weXhfa192YWx1ZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfdmFsdWVz LCBfX3B5eF9rX3ZhbHVlcywgc2l6ZW9mKF9fcHl4X2tfdmFsdWVzKSwgMCwgMCwgMSwgMX0sCist ICB7Jl9fcHl4X25fc192ZXJzaW9uLCBfX3B5eF9rX3ZlcnNpb24sIHNpemVvZihfX3B5eF9rX3Zl cnNpb24pLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3ZlcnNpb25faW5mbywgX19weXhf a192ZXJzaW9uX2luZm8sIHNpemVvZihfX3B5eF9rX3ZlcnNpb25faW5mbyksIDAsIDAsIDEsIDF9 LAorLSAgeyZfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9rX3ZpZGN1dHRlcl9s aWJzX21wdiwgc2l6ZW9mKF9fcHl4X2tfdmlkY3V0dGVyX2xpYnNfbXB2KSwgMCwgMCwgMSwgMX0s CistICB7Jl9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfa192 aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBzaXplb2YoX19weXhfa192aWRjdXR0ZXJfbGli c19weW1wdl9tcHZfcHl4KSwgMCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X25fc192aWRlb19yZWNv bmZpZywgX19weXhfa192aWRlb19yZWNvbmZpZywgc2l6ZW9mKF9fcHl4X2tfdmlkZW9fcmVjb25m aWcpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3ZvX2luaXRfZmFpbGVkLCBfX3B5eF9r X3ZvX2luaXRfZmFpbGVkLCBzaXplb2YoX19weXhfa192b19pbml0X2ZhaWxlZCksIDAsIDAsIDEs IDF9LAorLSAgeyZfX3B5eF9uX3NfdywgX19weXhfa193LCBzaXplb2YoX19weXhfa193KSwgMCwg MCwgMSwgMX0sCistICB7Jl9fcHl4X25fc193YXJuLCBfX3B5eF9rX3dhcm4sIHNpemVvZihfX3B5 eF9rX3dhcm4pLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3dhcm5pbmdzLCBfX3B5eF9r X3dhcm5pbmdzLCBzaXplb2YoX19weXhfa193YXJuaW5ncyksIDAsIDAsIDEsIDF9LAorLSAgeyZf X3B5eF9uX3Nfd2xfZGlzcGxheSwgX19weXhfa193bF9kaXNwbGF5LCBzaXplb2YoX19weXhfa193 bF9kaXNwbGF5KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc193cmFwcGVkLCBfX3B5eF9r X3dyYXBwZWQsIHNpemVvZihfX3B5eF9rX3dyYXBwZWQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19w eXhfbl9zX3dyaXRlLCBfX3B5eF9rX3dyaXRlLCBzaXplb2YoX19weXhfa193cml0ZSksIDAsIDAs IDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfeDExX2Rpc3BsYXksIF9fcHl4X2tfeDExX2Rpc3BsYXks IHNpemVvZihfX3B5eF9rX3gxMV9kaXNwbGF5KSwgMCwgMCwgMSwgMX0sCistICB7MCwgMCwgMCwg MCwgMCwgMCwgMH0KKy19OworLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfSW5p dENhY2hlZEJ1aWx0aW5zKHZvaWQpIHsKKy0gIF9fcHl4X2J1aWx0aW5fSW1wb3J0RXJyb3IgPSBf X1B5eF9HZXRCdWlsdGluTmFtZShfX3B5eF9uX3NfSW1wb3J0RXJyb3IpOyBpZiAoIV9fcHl4X2J1 aWx0aW5fSW1wb3J0RXJyb3IpIF9fUFlYX0VSUigwLCA0NCwgX19weXhfTDFfZXJyb3IpCistICBf X3B5eF9idWlsdGluX29iamVjdCA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19vYmpl Y3QpOyBpZiAoIV9fcHl4X2J1aWx0aW5fb2JqZWN0KSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fcHl4X2J1aWx0aW5fVW5pY29kZURlY29kZUVycm9yID0gX19QeXhfR2V0 QnVpbHRpbk5hbWUoX19weXhfbl9zX1VuaWNvZGVEZWNvZGVFcnJvcik7IGlmICghX19weXhfYnVp bHRpbl9Vbmljb2RlRGVjb2RlRXJyb3IpIF9fUFlYX0VSUigwLCA1OCwgX19weXhfTDFfZXJyb3Ip CistICBfX3B5eF9idWlsdGluX1VuaWNvZGVFbmNvZGVFcnJvciA9IF9fUHl4X0dldEJ1aWx0aW5O YW1lKF9fcHl4X25fc19Vbmljb2RlRW5jb2RlRXJyb3IpOyBpZiAoIV9fcHl4X2J1aWx0aW5fVW5p Y29kZUVuY29kZUVycm9yKSBfX1BZWF9FUlIoMCwgNjYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19w eXhfYnVpbHRpbl9yYW5nZSA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19yYW5nZSk7 IGlmICghX19weXhfYnVpbHRpbl9yYW5nZSkgX19QWVhfRVJSKDAsIDIyMiwgX19weXhfTDFfZXJy b3IpCistICBfX3B5eF9idWlsdGluX2lkID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9z X2lkKTsgaWYgKCFfX3B5eF9idWlsdGluX2lkKSBfX1BZWF9FUlIoMCwgMzAzLCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fcHl4X2J1aWx0aW5fZW51bWVyYXRlID0gX19QeXhfR2V0QnVpbHRpbk5hbWUo X19weXhfbl9zX2VudW1lcmF0ZSk7IGlmICghX19weXhfYnVpbHRpbl9lbnVtZXJhdGUpIF9fUFlY X0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfYnVpbHRpbl9UeXBlRXJyb3Ig PSBfX1B5eF9HZXRCdWlsdGluTmFtZShfX3B5eF9uX3NfVHlwZUVycm9yKTsgaWYgKCFfX3B5eF9i dWlsdGluX1R5cGVFcnJvcikgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19w eXhfYnVpbHRpbl9EZXByZWNhdGlvbldhcm5pbmcgPSBfX1B5eF9HZXRCdWlsdGluTmFtZShfX3B5 eF9uX3NfRGVwcmVjYXRpb25XYXJuaW5nKTsgaWYgKCFfX3B5eF9idWlsdGluX0RlcHJlY2F0aW9u V2FybmluZykgX19QWVhfRVJSKDAsIDgzMCwgX19weXhfTDFfZXJyb3IpCistICByZXR1cm4gMDsK Ky0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIHJldHVybiAtMTsKKy19CistCistc3RhdGljIENZVEhP Tl9TTUFMTF9DT0RFIGludCBfX1B5eF9Jbml0Q2FjaGVkQ29uc3RhbnRzKHZvaWQpIHsKKy0gIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19QeXhfSW5pdENhY2hlZENvbnN0YW50cyIsIDApOworLQorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjMxOQorLSAqIAorLSAqIGRlZiBfZXJyb3JzKGZuKToKKy0gKiAgICAg ZGVmIHdyYXBwZWQoKmssICoqa3cpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICB2ID0gZm4oKmssICoqa3cpCistICogICAgICAgICBpZiB2IDwgMDoKKy0gKi8KKy0g IF9fcHl4X3R1cGxlXyA9IFB5VHVwbGVfUGFjaygzLCBfX3B5eF9uX3NfaywgX19weXhfbl9zX2t3 LCBfX3B5eF9uX3Nfdik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfKSkgX19QWVhfRVJSKDAs IDMxOSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfKTsKKy0g IF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfKTsKKy0gIF9fcHl4X2NvZGVvYmpfXzIgPSAoUHlP YmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMCwgMCwgMywgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xP Q0FMU3xDT19WQVJBUkdTfENPX1ZBUktFWVdPUkRTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhf ZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV8sIF9fcHl4X2VtcHR5 X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1w dl9tcHZfcHl4LCBfX3B5eF9uX3Nfd3JhcHBlZCwgMzE5LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlm ICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMikpIF9fUFlYX0VSUigwLCAzMTksIF9fcHl4X0wx X2Vycm9yKQorLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MgorLSAqIGRlZiBfX3JlZHVjZV9j eXRob25fXyhzZWxmKToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVk dWNlX18gZHVlIHRvIG5vbi10cml2aWFsIF9fY2luaXRfXyIpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6 CistICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBu b24tdHJpdmlhbCBfX2Npbml0X18iKQorLSAqLworLSAgX19weXhfdHVwbGVfXzMgPSBQeVR1cGxl X1BhY2soMSwgX19weXhfa3Bfc19ub19kZWZhdWx0X19fcmVkdWNlX19fZHVlX3RvX25vbik7IGlm ICh1bmxpa2VseSghX19weXhfdHVwbGVfXzMpKSBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzMpOworLSAgX19QeXhfR0lWRVJFRihf X3B5eF90dXBsZV9fMyk7CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0CistICogICAgIHJh aXNlIFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBf X2Npbml0X18iKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRl KToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRv IG5vbi10cml2aWFsIF9fY2luaXRfXyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g Ki8KKy0gIF9fcHl4X3R1cGxlX180ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2twX3Nfbm9fZGVm YXVsdF9fX3JlZHVjZV9fX2R1ZV90b19ub24pOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX180 KSkgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4 X3R1cGxlX180KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzQpOworLQorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgzMAorLSAqICAgICBkZWYgX19pbml0X18o c2VsZik6CistICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCistICogICAgICAgICB3YXJu aW5ncy53YXJuKCJPcGVuR0xDb250ZXh0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBzd2l0Y2ggdG8g UmVuZGVyQ29udGV4dCIsIERlcHJlY2F0aW9uV2FybmluZykgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqIAorLSAqICAgICBkZWYgaW5pdF9nbChzZWxmLCBleHRzLCBnZXRfcHJvY19h ZGRyZXNzKToKKy0gKi8KKy0gIF9fcHl4X3R1cGxlX181ID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4 X2twX3NfT3BlbkdMQ29udGV4dF9pc19kZXByZWNhdGVkX3BsZWEsIF9fcHl4X2J1aWx0aW5fRGVw cmVjYXRpb25XYXJuaW5nKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNSkpIF9fUFlYX0VS UigwLCA4MzAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX181 KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzUpOworLQorLSAgLyogIih0cmVlIGZy YWdtZW50KSI6MgorLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKy0gKiAgICAgcmFp c2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBv YmplY3QgZm9yIHBpY2tsaW5nIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIGRl ZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgcmFpc2Ug VHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmpl Y3QgZm9yIHBpY2tsaW5nIikKKy0gKi8KKy0gIF9fcHl4X3R1cGxlX182ID0gUHlUdXBsZV9QYWNr KDEsIF9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5vdF9iZV9jb252ZXJ0ZWRfdG8pOyBpZiAodW5s aWtlbHkoIV9fcHl4X3R1cGxlX182KSkgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX182KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhf dHVwbGVfXzYpOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6NAorLSAqICAgICByYWlzZSBU eXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVj dCBmb3IgcGlja2xpbmciKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4 X3N0YXRlKToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNv bnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqLworLSAgX19weXhfdHVwbGVfXzcgPSBQeVR1cGxlX1BhY2soMSwg X19weXhfa3Bfc19zZWxmX19jdHhfY2Fubm90X2JlX2NvbnZlcnRlZF90byk7IGlmICh1bmxpa2Vs eSghX19weXhfdHVwbGVfXzcpKSBfX1BZWF9FUlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzcpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBs ZV9fNyk7CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoyCistICogZGVmIF9fcmVkdWNlX2N5 dGhvbl9fKHNlbGYpOgorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5v dCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBf X3B5eF9zdGF0ZSk6CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90 IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKi8KKy0g IF9fcHl4X3R1cGxlX184ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2twX3Nfc2VsZl9wYXJhbXNf Y2Fubm90X2JlX2NvbnZlcnRlZCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzgpKSBfX1BZ WF9FUlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVf XzgpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fOCk7CistCistICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjo0CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90 IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYg X19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CistICogICAgIHJhaXNlIFR5 cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmpl Y3QgZm9yIHBpY2tsaW5nIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqLworLSAg X19weXhfdHVwbGVfXzkgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfa3Bfc19zZWxmX3BhcmFtc19j YW5ub3RfYmVfY29udmVydGVkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fOSkpIF9fUFlY X0VSUigxLCA0LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9f OSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX185KTsKKy0KKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTIKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3Zv aWRwKE1QVl9SRU5ERVJfUEFSQU1fV0xfRElTUExBWSwgZ2V0X3BvaW50ZXIoIndsX2Rpc3BsYXki LCB3bF9kaXNwbGF5KSkKKy0gKiAgICAgICAgIGlmIGRybV9kaXNwbGF5OgorLSAqICAgICAgICAg ICAgIGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBk cm1fZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1z LmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpCistICov CistICBfX3B5eF90dXBsZV9fMTAgPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9zX2ZkLCBfX3B5 eF9pbnRfbmVnXzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMCkpIF9fUFlYX0VSUigw LCA5OTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18xMCk7 CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18xMCk7CistCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTkzCistICogICAgICAgICBpZiBkcm1fZGlzcGxheToKKy0g KiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIsIC0xKQor LSAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5LmdldCgiY3J0 Y19pZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg ZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNvbm5lY3Rvcl9pZCIs IC0xKQorLSAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVl c3RfcHRyIiwgTm9uZSkKKy0gKi8KKy0gIF9fcHl4X3R1cGxlX18xMSA9IFB5VHVwbGVfUGFjaygy LCBfX3B5eF9uX3NfY3J0Y19pZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90dXBsZV9fMTEpKSBfX1BZWF9FUlIoMCwgOTkzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4 X0dPVFJFRihfX3B5eF90dXBsZV9fMTEpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9f MTEpOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5NAorLSAqICAg ICAgICAgICAgIGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpCistICog ICAgICAgICAgICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lk IiwgLTEpCistICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlz cGxheS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVxdWVzdF9w dHIiLCBOb25lKQorLSAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKKy0gKi8KKy0g IF9fcHl4X3R1cGxlX18xMiA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfY29ubmVjdG9yX2lk LCBfX3B5eF9pbnRfbmVnXzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMikpIF9fUFlY X0VSUigwLCA5OTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxl X18xMik7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18xMik7CistCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk1CistICogICAgICAgICAgICAgZHJtX3BhcmFt cy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpCistICogICAgICAgICAg ICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNvbm5lY3Rvcl9p ZCIsIC0xKQorLSAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3Jl cXVlc3RfcHRyIiwgTm9uZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgICAgICAgICAgZHJtX3BhcmFt cy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIo YXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQorLSAqLworLSAgX19weXhfdHVwbGVfXzEzID0gUHlU dXBsZV9QYWNrKDIsIF9fcHl4X25fc19hdG9taWNfcmVxdWVzdF9wdHIsIFB5X05vbmUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMykpIF9fUFlYX0VSUigwLCA5OTUsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18xMyk7CistICBfX1B5eF9HSVZFUkVG KF9fcHl4X3R1cGxlX18xMyk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTk4CistICogICAgICAgICAgICAgaWYgYXJwIGlzIG5vdCBOb25lOgorLSAqICAgICAgICAg ICAgICAgICBkcm1fcGFyYW1zLmF0b21pY19yZXF1ZXN0X3B0ciA9IDxfZHJtTW9kZUF0b21pY1Jl cSAqKj5nZXRfcG9pbnRlcihhcnAsICJkcm1Nb2RlQXRvbWljUmVxKiIpCistICogICAgICAgICAg ICAgZHJtX3BhcmFtcy5yZW5kZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJlbmRlcl9mZCIsIC0x KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcGFyYW1zLmFk ZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAmZHJtX3BhcmFtcykKKy0gKiAg ICAgICAgIGlmIGRybV9vc2Rfc2l6ZToKKy0gKi8KKy0gIF9fcHl4X3R1cGxlX18xNCA9IFB5VHVw bGVfUGFjaygyLCBfX3B5eF9uX3NfcmVuZGVyX2ZkLCBfX3B5eF9pbnRfbmVnXzEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3R1cGxlX18xNCkpIF9fUFlYX0VSUigwLCA5OTgsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18xNCk7CistICBfX1B5eF9HSVZFUkVGKF9f cHl4X3R1cGxlX18xNCk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA4MworLSAqICAgICAgICAgaWYgb3BlbmdsX2ZibzoKKy0gKiAgICAgICAgICAgICBtZW1zZXQo JmZibywgMCwgc2l6ZW9mKGZibykpCistICogICAgICAgICAgICAgZmJvLmZibyA9IG9wZW5nbF9m Ym8uZ2V0KCJmYm8iLCAwKSBvciAwICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgICAgICBmYm8udyA9IG9wZW5nbF9mYm9bInciXQorLSAqICAgICAgICAgICAgIGZiby5o ID0gb3BlbmdsX2Zib1siaCJdCistICovCistICBfX3B5eF90dXBsZV9fMTUgPSBQeVR1cGxlX1Bh Y2soMiwgX19weXhfbl9zX2ZibywgX19weXhfaW50XzApOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1 cGxlX18xNSkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90dXBsZV9fMTUpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTUp OworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODYKKy0gKiAgICAg ICAgICAgICBmYm8udyA9IG9wZW5nbF9mYm9bInciXQorLSAqICAgICAgICAgICAgIGZiby5oID0g b3BlbmdsX2Zib1siaCJdCistICogICAgICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9w ZW5nbF9mYm8uZ2V0KCJpbnRlcm5hbF9mb3JtYXQiLCAwKSBvciAwICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJf UEFSQU1fT1BFTkdMX0ZCTywgJmZibykKKy0gKiAgICAgICAgIGlmIGZsaXBfeToKKy0gKi8KKy0g IF9fcHl4X3R1cGxlX18xNiA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfaW50ZXJuYWxfZm9y bWF0LCBfX3B5eF9pbnRfMCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE2KSkgX19QWVhf RVJSKDAsIDEwODYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxl X18xNik7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18xNik7CistCistICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoyCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorLSAqICAg ICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0 aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorLSAqICAgICBy YWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9u IG9iamVjdCBmb3IgcGlja2xpbmciKQorLSAqLworLSAgX19weXhfdHVwbGVfXzE3ID0gUHlUdXBs ZV9QYWNrKDEsIF9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5vdF9iZV9jb252ZXJ0ZWRfdG8pOyBp ZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xNykpIF9fUFlYX0VSUigxLCAyLCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTcpOworLSAgX19QeXhfR0lWRVJF RihfX3B5eF90dXBsZV9fMTcpOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6NAorLSAqICAg ICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0 aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNl bGYsIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fu bm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqLworLSAgX19weXhfdHVwbGVfXzE4ID0gUHlUdXBs ZV9QYWNrKDEsIF9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5vdF9iZV9jb252ZXJ0ZWRfdG8pOyBp ZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xOCkpIF9fUFlYX0VSUigxLCA0LCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTgpOworLSAgX19QeXhfR0lWRVJF RihfX3B5eF90dXBsZV9fMTgpOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MgorLSAqIGRl ZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxm Ll9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5n IikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhv bl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9j dHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikK Ky0gKi8KKy0gIF9fcHl4X3R1cGxlX18xOSA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9rcF9zX3Nl bGZfX2N0eF9jYW5ub3RfYmVfY29udmVydGVkX3RvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBs ZV9fMTkpKSBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYo X19weXhfdHVwbGVfXzE5KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzE5KTsKKy0K Ky0gIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxm Ll9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5n IikKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CistICog ICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQ eXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKi8KKy0gIF9fcHl4X3R1cGxlX18yMCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9rcF9zX3Nl bGZfX2N0eF9jYW5ub3RfYmVfY29udmVydGVkX3RvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBs ZV9fMjApKSBfX1BZWF9FUlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYo X19weXhfdHVwbGVfXzIwKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzIwKTsKKy0K Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MgorLSAqICAgICB2b2lkIFB5 RXZhbF9Jbml0VGhyZWFkcygpCistICogCistICogX2lzX3B5MyA9IHN5cy52ZXJzaW9uX2luZm8g Pj0gKDMsKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogX3N0cmRlY19lcnIgPSAi c3Vycm9nYXRlZXNjYXBlIiBpZiBfaXNfcHkzIGVsc2UgInN0cmljdCIKKy0gKiAjIG1wdiAtPiBQ eXRob24KKy0gKi8KKy0gIF9fcHl4X3R1cGxlX18yMSA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9p bnRfMyk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzIxKSkgX19QWVhfRVJSKDAsIDUyLCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMjEpOworLSAgX19Q eXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMjEpOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjU1CistICogX3N0cmRlY19lcnIgPSAic3Vycm9nYXRlZXNjYXBlIiBpZiBf aXNfcHkzIGVsc2UgInN0cmljdCIKKy0gKiAjIG1wdiAtPiBQeXRob24KKy0gKiBkZWYgX3N0cmRl YyhzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICB0cnk6CistICogICAg ICAgICByZXR1cm4gcy5kZWNvZGUoInV0Zi04IiwgX3N0cmRlY19lcnIpCistICovCistICBfX3B5 eF90dXBsZV9fMjIgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3MpOyBpZiAodW5saWtlbHko IV9fcHl4X3R1cGxlX18yMikpIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzIyKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVw bGVfXzIyKTsKKy0gIF9fcHl4X2NvZGVvYmpfXzIzID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVf TmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5 dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18y MiwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1 dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19zdHJkZWMsIDU1LCBfX3B5eF9lbXB0 eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMjMpKSBfX1BZWF9FUlIoMCwg NTUsIF9fcHl4X0wxX2Vycm9yKQorLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjYzCistICogCistICogIyBQeXRob24gLT4gbXB2CistICogZGVmIF9zdHJlbmMocyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgdHJ5OgorLSAqICAgICAgICAgcmV0 dXJuIHMuZW5jb2RlKCJ1dGYtOCIsIF9zdHJkZWNfZXJyKQorLSAqLworLSAgX19weXhfdHVwbGVf XzI0ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25fc19zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 dXBsZV9fMjQpKSBfX1BZWF9FUlIoMCwgNjMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09U UkVGKF9fcHl4X3R1cGxlX18yNCk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18yNCk7 CistICBfX3B5eF9jb2Rlb2JqX18yNSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAw LCAxLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMjQsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGli c19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3Nfc3RyZW5jLCA2MywgX19weXhfZW1wdHlfYnl0ZXMp OyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzI1KSkgX19QWVhfRVJSKDAsIDYzLCBfX3B5 eF9MMV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTgK Ky0gKiAKKy0gKiAKKy0gKiBkZWYgX2Vycm9ycyhmbik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgorLSAqICAgICAgICAgdiA9IGZu KCprLCAqKmt3KQorLSAqLworLSAgX19weXhfdHVwbGVfXzI2ID0gUHlUdXBsZV9QYWNrKDMsIF9f cHl4X25fc19mbiwgX19weXhfbl9zX3dyYXBwZWQsIF9fcHl4X25fc193cmFwcGVkKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90dXBsZV9fMjYpKSBfX1BZWF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMjYpOworLSAgX19QeXhfR0lWRVJFRihf X3B5eF90dXBsZV9fMjYpOworLSAgX19weXhfY29kZW9ial9fMjcgPSAoUHlPYmplY3QqKV9fUHl4 X1B5Q29kZV9OZXcoMSwgMCwgMywgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhf ZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhf dHVwbGVfXzI2LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2tw X3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX2Vycm9ycywgMzE4LCBf X3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMjcpKSBfX1BZ WF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozMjkKKy0gKiAgICAgY29kZSA9IE5vbmUKKy0gKiAKKy0gKiAgICAgZGVm IF9faW5pdF9fKHNlbGYsIGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBzZWxmLmNvZGUgPSBlCistICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVycl9jCist ICovCistICBfX3B5eF90dXBsZV9fMjggPSBQeVR1cGxlX1BhY2soNCwgX19weXhfbl9zX3NlbGYs IF9fcHl4X25fc19lLCBfX3B5eF9uX3NfZXJyX2MsIF9fcHl4X25fc19lX2kpOyBpZiAodW5saWtl bHkoIV9fcHl4X3R1cGxlX18yOCkpIF9fUFlYX0VSUigwLCAzMjksIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18yOCk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4 X3R1cGxlX18yOCk7CistICBfX3B5eF9jb2Rlb2JqX18yOSA9IChQeU9iamVjdCopX19QeXhfUHlD b2RlX05ldygyLCAwLCA0LCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0 eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBs ZV9fMjgsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192 aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfaW5pdCwgMzI5LCBfX3B5eF9l bXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMjkpKSBfX1BZWF9FUlIo MCwgMzI5LCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNDYKKy0gKiBjZGVmIF9yZXBseV91c2VyZGF0YXMgPSBkaWN0KCkKKy0gKiAKKy0g KiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKKy0gKiAgICAgICAgIHNlbGYu Y291bnRlciA9IDAKKy0gKi8KKy0gIF9fcHl4X3R1cGxlX18zMCA9IFB5VHVwbGVfUGFjaygxLCBf X3B5eF9idWlsdGluX29iamVjdCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzMwKSkgX19Q WVhfRVJSKDAsIDM0NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdHVw bGVfXzMwKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzMwKTsKKy0KKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDcKKy0gKiAKKy0gKiBjbGFzcyBfUmVwbHlV c2VyRGF0YShvYmplY3QpOgorLSAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKy0g KiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKy0gKi8KKy0gIF9fcHl4X3R1cGxlX18zMSA9IFB5 VHVwbGVfUGFjaygyLCBfX3B5eF9uX3Nfc2VsZiwgX19weXhfbl9zX2RhdGEpOyBpZiAodW5saWtl bHkoIV9fcHl4X3R1cGxlX18zMSkpIF9fUFlYX0VSUigwLCAzNDcsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18zMSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4 X3R1cGxlX18zMSk7CistICBfX3B5eF9jb2Rlb2JqX18zMiA9IChQeU9iamVjdCopX19QeXhfUHlD b2RlX05ldygyLCAwLCAyLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0 eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBs ZV9fMzEsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192 aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfaW5pdCwgMzQ3LCBfX3B5eF9l bXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMzIpKSBfX1BZWF9FUlIo MCwgMzQ3LCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNTIKKy0gKiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBGYWxzZQorLSAqIAorLSAq ICAgICBkZWYgYWRkKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBzZWxmLmNvdW50ZXIgKz0gMQorLSAqIAorLSAqLworLSAgX19weXhfdHVwbGVfXzMzID0g UHlUdXBsZV9QYWNrKDEsIF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBs ZV9fMzMpKSBfX1BZWF9FUlIoMCwgMzUyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJF RihfX3B5eF90dXBsZV9fMzMpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMzMpOwor LSAgX19weXhfY29kZW9ial9fMzQgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwg MSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzMzLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNf cHltcHZfbXB2X3B5eCwgX19weXhfbl9zX2FkZCwgMzUyLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlm ICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMzQpKSBfX1BZWF9FUlIoMCwgMzUyLCBfX3B5eF9M MV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTUKKy0g KiAgICAgICAgIHNlbGYuY291bnRlciArPSAxCistICogCistICogICAgIGRlZiByZW1vdmUoc2Vs Zik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuY291bnRl ciAtPSAxCistICogCistICovCistICBfX3B5eF90dXBsZV9fMzUgPSBQeVR1cGxlX1BhY2soMSwg X19weXhfbl9zX3NlbGYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18zNSkpIF9fUFlYX0VS UigwLCAzNTUsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18z NSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18zNSk7CistICBfX3B5eF9jb2Rlb2Jq X18zNiA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUla RUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMzUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBf X3B5eF9uX3NfcmVtb3ZlLCAzNTUsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFf X3B5eF9jb2Rlb2JqX18zNikpIF9fUFlYX0VSUigwLCAzNTUsIF9fcHl4X0wxX2Vycm9yKQorLQor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzMKKy0gKiAKKy0gKiBjbGFz cyBDYWxsYmFja1RocmVhZChUaHJlYWQpOgorLSAqICAgICBkZWYgX19pbml0X18oc2VsZik6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhz ZWxmKQorLSAqICAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCistICovCistICBfX3B5eF90dXBs ZV9fMzcgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYpOyBpZiAodW5saWtlbHkoIV9f cHl4X3R1cGxlX18zNykpIF9fUFlYX0VSUigwLCAxMTMzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMzcpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBs ZV9fMzcpOworLSAgX19weXhfY29kZW9ial9fMzggPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9O ZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0 ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzM3 LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0 dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX2luaXQsIDExMzMsIF9fcHl4X2VtcHR5 X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18zOCkpIF9fUFlYX0VSUigwLCAx MTMzLCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTQxCistICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZQorLSAqIAorLSAq ICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IFRydWUKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJh Y2sgPSBOb25lCistICovCistICBfX3B5eF90dXBsZV9fMzkgPSBQeVR1cGxlX1BhY2soMSwgX19w eXhfbl9zX3NlbGYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18zOSkpIF9fUFlYX0VSUigw LCAxMTQxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMzkp OworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMzkpOworLSAgX19weXhfY29kZW9ial9f NDAgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVE fENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzM5LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhf ZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19w eXhfbl9zX3NodXRkb3duLCAxMTQxLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSgh X19weXhfY29kZW9ial9fNDApKSBfX1BZWF9FUlIoMCwgMTE0MSwgX19weXhfTDFfZXJyb3IpCist CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0NgorLSAqICAgICAgICAg c2VsZi5sb2NrLnJlbGVhc2UoKQorLSAqIAorLSAqICAgICBkZWYgY2FsbChzZWxmKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQor LSAqIAorLSAqLworLSAgX19weXhfdHVwbGVfXzQxID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25f c19zZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNDEpKSBfX1BZWF9FUlIoMCwgMTE0 NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzQxKTsKKy0g IF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzQxKTsKKy0gIF9fcHl4X2NvZGVvYmpfXzQyID0g KFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxDT19O RVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X3R1cGxlX180MSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5 X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25f c19jYWxsLCAxMTQ2LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29k ZW9ial9fNDIpKSBfX1BZWF9FUlIoMCwgMTE0NiwgX19weXhfTDFfZXJyb3IpCistCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0OQorLSAqICAgICAgICAgc2VsZi5sb2Nr LnJlbGVhc2UoKQorLSAqIAorLSAqICAgICBkZWYgc2V0KHNlbGYsIGNhbGxiYWNrKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxi YWNrCistICogCistICovCistICBfX3B5eF90dXBsZV9fNDMgPSBQeVR1cGxlX1BhY2soMiwgX19w eXhfbl9zX3NlbGYsIF9fcHl4X25fc19jYWxsYmFjayk7IGlmICh1bmxpa2VseSghX19weXhfdHVw bGVfXzQzKSkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09U UkVGKF9fcHl4X3R1cGxlX180Myk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX180Myk7 CistICBfX3B5eF9jb2Rlb2JqX180NCA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygyLCAw LCAyLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDMsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGli c19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3Nfc2V0LCAxMTQ5LCBfX3B5eF9lbXB0eV9ieXRlcyk7 IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fNDQpKSBfX1BZWF9FUlIoMCwgMTE0OSwgX19w eXhfTDFfZXJyb3IpCistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1 MgorLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCistICogCistICogICAgIGRl ZiBydW4oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHdo aWxlIG5vdCBzZWxmLmlzc2h1dGRvd246CistICogICAgICAgICAgICAgc2VsZi5sb2NrLmFjcXVp cmUoVHJ1ZSkKKy0gKi8KKy0gIF9fcHl4X3R1cGxlX180NSA9IFB5VHVwbGVfUGFjaygxLCBfX3B5 eF9uX3Nfc2VsZik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzQ1KSkgX19QWVhfRVJSKDAs IDExNTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX180NSk7 CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX180NSk7CistICBfX3B5eF9jb2Rlb2JqX180 NiA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8 Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5 eF9uX3NfcnVuLCAxMTUyLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhf Y29kZW9ial9fNDYpKSBfX1BZWF9FUlIoMCwgMTE1MiwgX19weXhfTDFfZXJyb3IpCistCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1NworLSAqICAgICAgICAgICAgIHNl bGYubXB2X2NhbGxiYWNrKHNlbGYuY2FsbGJhY2spIGlmIHNlbGYuY2FsbGJhY2sgZWxzZSBOb25l CistICogCistICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB0cnk6CistICogICAgICAgICAgICAg Y2FsbGJhY2soKQorLSAqLworLSAgX19weXhfdHVwbGVfXzQ3ID0gUHlUdXBsZV9QYWNrKDMsIF9f cHl4X25fc19zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2ssIF9fcHl4X25fc19lKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90dXBsZV9fNDcpKSBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzQ3KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19w eXhfdHVwbGVfXzQ3KTsKKy0gIF9fcHl4X2NvZGVvYmpfXzQ4ID0gKFB5T2JqZWN0KilfX1B5eF9Q eUNvZGVfTmV3KDIsIDAsIDMsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2Vt cHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1 cGxlX180NywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9z X3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19tcHZfY2FsbGJhY2ssIDEx NTcsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX180OCkp IF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gIC8qICIodHJlZSBmcmFn bWVudCkiOjEKKy0gKiBkZWYgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZChfX3B5eF90 eXBlLCBsb25nIF9fcHl4X2NoZWNrc3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKy0gKiAg ICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICovCistICBfX3B5eF90dXBsZV9fNDkgPSBQ eVR1cGxlX1BhY2soNSwgX19weXhfbl9zX3B5eF90eXBlLCBfX3B5eF9uX3NfcHl4X2NoZWNrc3Vt LCBfX3B5eF9uX3NfcHl4X3N0YXRlLCBfX3B5eF9uX3NfcHl4X1BpY2tsZUVycm9yLCBfX3B5eF9u X3NfcHl4X3Jlc3VsdCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzQ5KSkgX19QWVhfRVJS KDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX180OSk7 CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX180OSk7CistICBfX3B5eF9jb2Rlb2JqX181 MCA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygzLCAwLCA1LCAwLCBDT19PUFRJTUlaRUR8 Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDksIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfa3Bfc19zdHJpbmdzb3VyY2UsIF9fcHl4X25fc19weXhfdW5waWNr bGVfRW5kT2ZGaWxlUmVhY2hlZCwgMSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHko IV9fcHl4X2NvZGVvYmpfXzUwKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAg X19weXhfdHVwbGVfXzUxID0gUHlUdXBsZV9QYWNrKDUsIF9fcHl4X25fc19weXhfdHlwZSwgX19w eXhfbl9zX3B5eF9jaGVja3N1bSwgX19weXhfbl9zX3B5eF9zdGF0ZSwgX19weXhfbl9zX3B5eF9Q aWNrbGVFcnJvciwgX19weXhfbl9zX3B5eF9yZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1 cGxlX181MSkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJF RihfX3B5eF90dXBsZV9fNTEpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fNTEpOwor LSAgX19weXhfY29kZW9ial9fNTIgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMywgMCwg NSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzUxLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3Nfc3RyaW5nc291cmNlLCBf X3B5eF9uX3NfcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2gsIDEsIF9fcHl4X2VtcHR5X2J5dGVz KTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX181MikpIF9fUFlYX0VSUigxLCAxLCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fcHl4X3R1cGxlX181MyA9IFB5VHVwbGVfUGFjayg1LCBfX3B5eF9u X3NfcHl4X3R5cGUsIF9fcHl4X25fc19weXhfY2hlY2tzdW0sIF9fcHl4X25fc19weXhfc3RhdGUs IF9fcHl4X25fc19weXhfUGlja2xlRXJyb3IsIF9fcHl4X25fc19weXhfcmVzdWx0KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90dXBsZV9fNTMpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzUzKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19w eXhfdHVwbGVfXzUzKTsKKy0gIF9fcHl4X2NvZGVvYmpfXzU0ID0gKFB5T2JqZWN0KilfX1B5eF9Q eUNvZGVfTmV3KDMsIDAsIDUsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2Vt cHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1 cGxlX181MywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9z X3N0cmluZ3NvdXJjZSwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAxLCBfX3B5 eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fNTQpKSBfX1BZWF9F UlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90dXBsZV9fNTUgPSBQeVR1cGxlX1Bh Y2soNSwgX19weXhfbl9zX3B5eF90eXBlLCBfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCBfX3B5eF9u X3NfcHl4X3N0YXRlLCBfX3B5eF9uX3NfcHl4X1BpY2tsZUVycm9yLCBfX3B5eF9uX3NfcHl4X3Jl c3VsdCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzU1KSkgX19QWVhfRVJSKDEsIDEsIF9f cHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX181NSk7CistICBfX1B5 eF9HSVZFUkVGKF9fcHl4X3R1cGxlX181NSk7CistICBfX3B5eF9jb2Rlb2JqX181NiA9IChQeU9i amVjdCopX19QeXhfUHlDb2RlX05ldygzLCAwLCA1LCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9D QUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF90dXBsZV9fNTUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfa3Bfc19zdHJpbmdzb3VyY2UsIF9fcHl4X25fc19weXhfdW5waWNrbGVfUHJvcGVy dHksIDEsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX181 NikpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3R1cGxlX181NyA9 IFB5VHVwbGVfUGFjayg1LCBfX3B5eF9uX3NfcHl4X3R5cGUsIF9fcHl4X25fc19weXhfY2hlY2tz dW0sIF9fcHl4X25fc19weXhfc3RhdGUsIF9fcHl4X25fc19weXhfUGlja2xlRXJyb3IsIF9fcHl4 X25fc19weXhfcmVzdWx0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNTcpKSBfX1BZWF9F UlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzU3 KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzU3KTsKKy0gIF9fcHl4X2NvZGVvYmpf XzU4ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDMsIDAsIDUsIDAsIENPX09QVElNSVpF RHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX181NywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3N0cmluZ3NvdXJjZSwgX19weXhfbl9zX3B5eF91bnBp Y2tsZV9FdmVudCwgMSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2Nv ZGVvYmpfXzU4KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdHVw bGVfXzU5ID0gUHlUdXBsZV9QYWNrKDUsIF9fcHl4X25fc19weXhfdHlwZSwgX19weXhfbl9zX3B5 eF9jaGVja3N1bSwgX19weXhfbl9zX3B5eF9zdGF0ZSwgX19weXhfbl9zX3B5eF9QaWNrbGVFcnJv ciwgX19weXhfbl9zX3B5eF9yZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX181OSkp IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90 dXBsZV9fNTkpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fNTkpOworLSAgX19weXhf Y29kZW9ial9fNjAgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMywgMCwgNSwgMCwgQ09f T1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzU5LCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3Nfc3RyaW5nc291cmNlLCBfX3B5eF9uX3Nf cHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgMSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzYwKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gMDsKKy0g IF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAg cmV0dXJuIC0xOworLX0KKy0KKy1zdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X0lu aXRHbG9iYWxzKHZvaWQpIHsKKy0gIGlmIChfX1B5eF9Jbml0U3RyaW5ncyhfX3B5eF9zdHJpbmdf dGFiKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcik7CistICBfX3B5eF9pbnRf MCA9IFB5SW50X0Zyb21Mb25nKDApOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8wKSkgX19QWVhf RVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfaW50XzEgPSBQeUludF9Gcm9tTG9u ZygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfMSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fcHl4X2ludF8zID0gUHlJbnRfRnJvbUxvbmcoMyk7IGlmICh1bmxpa2Vs eSghX19weXhfaW50XzMpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICBfX3B5 eF9pbnRfOSA9IFB5SW50X0Zyb21Mb25nKDkpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF85KSkg X19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfaW50XzMyID0gUHlJbnRf RnJvbUxvbmcoMzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8zMikpIF9fUFlYX0VSUigwLCAx LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X2ludF81NzEzMTY5ID0gUHlJbnRfRnJvbUxvbmco NTcxMzE2OUwpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF81NzEzMTY5KSkgX19QWVhfRVJSKDAs IDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfaW50XzkwOTU4MjYyID0gUHlJbnRfRnJvbUxv bmcoOTA5NTgyNjJMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfOTA5NTgyNjIpKSBfX1BZWF9F UlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF9pbnRfMTQyMDM2OTEwID0gUHlJbnRf RnJvbUxvbmcoMTQyMDM2OTEwTCk7IGlmICh1bmxpa2VseSghX19weXhfaW50XzE0MjAzNjkxMCkp IF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X2ludF8yMDA2ODgwNDEg PSBQeUludF9Gcm9tTG9uZygyMDA2ODgwNDFMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfMjAw Njg4MDQxKSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfaW50XzIy MjQxOTE0OSA9IFB5SW50X0Zyb21Mb25nKDIyMjQxOTE0OUwpOyBpZiAodW5saWtlbHkoIV9fcHl4 X2ludF8yMjI0MTkxNDkpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICBfX3B5 eF9pbnRfMjI4ODIyMDUzID0gUHlJbnRfRnJvbUxvbmcoMjI4ODIyMDUzTCk7IGlmICh1bmxpa2Vs eSghX19weXhfaW50XzIyODgyMjA1MykpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fcHl4X2ludF9uZWdfMSA9IFB5SW50X0Zyb21Mb25nKC0xKTsgaWYgKHVubGlrZWx5KCFf X3B5eF9pbnRfbmVnXzEpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICByZXR1 cm4gMDsKKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIHJldHVybiAtMTsKKy19CistCistc3RhdGlj IENZVEhPTl9TTUFMTF9DT0RFIGludCBfX1B5eF9tb2Rpbml0X2dsb2JhbF9pbml0X2NvZGUodm9p ZCk7IC8qcHJvdG8qLworLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfbW9kaW5p dF92YXJpYWJsZV9leHBvcnRfY29kZSh2b2lkKTsgLypwcm90byovCistc3RhdGljIENZVEhPTl9T TUFMTF9DT0RFIGludCBfX1B5eF9tb2Rpbml0X2Z1bmN0aW9uX2V4cG9ydF9jb2RlKHZvaWQpOyAv KnByb3RvKi8KKy1zdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X21vZGluaXRfdHlw ZV9pbml0X2NvZGUodm9pZCk7IC8qcHJvdG8qLworLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBp bnQgX19QeXhfbW9kaW5pdF90eXBlX2ltcG9ydF9jb2RlKHZvaWQpOyAvKnByb3RvKi8KKy1zdGF0 aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X21vZGluaXRfdmFyaWFibGVfaW1wb3J0X2Nv ZGUodm9pZCk7IC8qcHJvdG8qLworLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhf bW9kaW5pdF9mdW5jdGlvbl9pbXBvcnRfY29kZSh2b2lkKTsgLypwcm90byovCistCistc3RhdGlj IGludCBfX1B5eF9tb2Rpbml0X2dsb2JhbF9pbml0X2NvZGUodm9pZCkgeworLSAgX19QeXhfUmVm TmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX1B5eF9t b2Rpbml0X2dsb2JhbF9pbml0X2NvZGUiLCAwKTsKKy0gIC8qLS0tIEdsb2JhbCBpbml0IGNvZGUg LS0tKi8KKy0gIF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MgPSBQeV9O b25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fcmVwbHlfdXNlcmRhdGFzID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gMDsKKy19CistCistc3RhdGlj IGludCBfX1B5eF9tb2Rpbml0X3ZhcmlhYmxlX2V4cG9ydF9jb2RlKHZvaWQpIHsKKy0gIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19Q eXhfbW9kaW5pdF92YXJpYWJsZV9leHBvcnRfY29kZSIsIDApOworLSAgLyotLS0gVmFyaWFibGUg ZXhwb3J0IGNvZGUgLS0tKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAg cmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBpbnQgX19QeXhfbW9kaW5pdF9mdW5jdGlvbl9leHBv cnRfY29kZSh2b2lkKSB7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fUHl4X21vZGluaXRfZnVuY3Rpb25fZXhwb3J0X2NvZGUi LCAwKTsKKy0gIC8qLS0tIEZ1bmN0aW9uIGV4cG9ydCBjb2RlIC0tLSovCistICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiAwOworLX0KKy0KKy1zdGF0aWMgaW50IF9f UHl4X21vZGluaXRfdHlwZV9pbml0X2NvZGUodm9pZCkgeworLSAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9fUHl4X21vZGluaXRfdHlwZV9pbml0X2NvZGUiLCAwKTsKKy0g IC8qLS0tIFR5cGUgaW5pdCBjb2RlIC0tLSovCistICBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkID0gJl9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZDsKKy0gIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZC5faW5pdCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKiwgc3RydWN0 IG1wdl9ldmVudF9lbmRfZmlsZSAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVu ZE9mRmlsZVJlYWNoZWRfX2luaXQ7CistICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAx NTYsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQor LSAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZC50cF9w cmludCA9IDA7CistICAjZW5kaWYKKy0gIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZ VEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZC50cF9nZXRhdHRybyA9PSBQeU9i amVjdF9HZW5lcmljR2V0QXR0cikpIHsKKy0gICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRW5kT2ZGaWxlUmVhY2hlZC50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVy aWNHZXRBdHRyOworLSAgfQorLSAgaWYgKF9fUHl4X1NldFZ0YWJsZShfX3B5eF90eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJf OXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwgMCkgX19QWVhfRVJSKDAs IDE1NiwgX19weXhfTDFfZXJyb3IpCistICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBf X3B5eF9uX3NfRW5kT2ZGaWxlUmVhY2hlZCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwgMCkgX19QWVhfRVJSKDAsIDE1Niwg X19weXhfTDFfZXJyb3IpCistICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9f cHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwgMCkgX19Q WVhfRVJSKDAsIDE1NiwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkOworLSAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfSW5wdXREaXNwYXRjaCA9ICZfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0lucHV0RGlzcGF0Y2g7CistICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0lucHV0RGlzcGF0Y2guX2luaXQgPSAoUHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICosIHN0cnVjdCBtcHZfZXZlbnRfc2Ny aXB0X2lucHV0X2Rpc3BhdGNoICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5w dXREaXNwYXRjaF9faW5pdDsKKy0gIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2gpIDwgMCkgX19QWVhfRVJSKDAsIDE2OSwgX19w eXhfTDFfZXJyb3IpCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCistICBfX3B5 eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoLnRwX3ByaW50ID0gMDsK Ky0gICNlbmRpZgorLSAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9Q WVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0lucHV0RGlzcGF0Y2gudHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9JbnB1dERpc3BhdGNoLnRwX2dldGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNHZXRB dHRyKSkgeworLSAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3Bh dGNoLnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7CistICB9Cist ICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0lu cHV0RGlzcGF0Y2gudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf SW5wdXREaXNwYXRjaCkgPCAwKSBfX1BZWF9FUlIoMCwgMTY5LCBfX3B5eF9MMV9lcnJvcikKKy0g IGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19JbnB1dERpc3BhdGNoLCAo UHlPYmplY3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRj aCkgPCAwKSBfX1BZWF9FUlIoMCwgMTY5LCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChfX1B5eF9z ZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf SW5wdXREaXNwYXRjaCkgPCAwKSBfX1BZWF9FUlIoMCwgMTY5LCBfX3B5eF9MMV9lcnJvcikKKy0g IF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoID0gJl9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2g7CistICBfX3B5eF92dGFi cHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlID0gJl9fcHl4X3Z0YWJsZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZTsKKy0gIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZS5faW5pdCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKiwgc3RydWN0IG1wdl9ldmVu dF9sb2dfbWVzc2FnZSAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfX2luaXQ7CistICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Mb2dNZXNzYWdlKSA8IDApIF9fUFlYX0VSUigwLCAxODIsIF9fcHl4X0wxX2Vycm9y KQorLSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQorLSAgX19weXhfdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZS50cF9wcmludCA9IDA7CistICAjZW5kaWYKKy0g IGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkg JiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLnRw X2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2Fn ZS50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKy0gICAgX19weXhf dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZS50cF9nZXRhdHRybyA9IF9fUHl4 X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOworLSAgfQorLSAgaWYgKF9fUHl4X1NldFZ0YWJsZShf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLnRwX2RpY3QsIF9fcHl4 X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UpIDwgMCkgX19QWVhfRVJS KDAsIDE4MiwgX19weXhfTDFfZXJyb3IpCistICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9t LCBfX3B5eF9uX3NfTG9nTWVzc2FnZSwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0xvZ01lc3NhZ2UpIDwgMCkgX19QWVhfRVJSKDAsIDE4MiwgX19weXhfTDFf ZXJyb3IpCistICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UpIDwgMCkgX19QWVhfRVJSKDAsIDE4Miwg X19weXhfTDFfZXJyb3IpCistICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9n TWVzc2FnZSA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlOwor LSAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgPSAmX19weXhf dnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eTsKKy0gIF9fcHl4X3Z0YWJsZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkuX2luaXQgPSAoUHlPYmplY3QgKigqKShzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqLCBzdHJ1Y3QgbXB2 X2V2ZW50X3Byb3BlcnR5ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0 eV9faW5pdDsKKy0gIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X1Byb3BlcnR5KSA8IDApIF9fUFlYX0VSUigwLCAyNDMsIF9fcHl4X0wxX2Vycm9yKQor LSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQorLSAgX19weXhfdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfcHJpbnQgPSAwOworLSAgI2VuZGlmCistICBpZiAo KENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYmIGxp a2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZGljdG9m ZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eS50cF9nZXRh dHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKy0gICAgX19weXhfdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9H ZW5lcmljR2V0QXR0cjsKKy0gIH0KKy0gIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpIDwgMCkgX19QWVhfRVJSKDAsIDI0MywgX19weXhf TDFfZXJyb3IpCistICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfUHJv cGVydHksIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eSkgPCAwKSBfX1BZWF9FUlIoMCwgMjQzLCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChfX1B5 eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUHJvcGVydHkpIDwgMCkgX19QWVhfRVJSKDAsIDI0MywgX19weXhfTDFfZXJyb3IpCistICBf X3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgPSAmX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHk7CistICBfX3B5eF92dGFicHRyXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FdmVudCA9ICZfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50OworLSAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC5fZGF0 YSA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50ICosIHN0cnVjdCBtcHZfZXZlbnQgKikpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50X19kYXRhOworLSAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudC5faW5pdCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0V2ZW50ICosIHN0cnVjdCBtcHZfZXZlbnQgKiwgUHlPYmplY3QgKikpX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19pbml0OworLSAgaWYgKFB5VHlwZV9SZWFk eSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpIDwgMCkgX19QWVhfRVJS KDAsIDI1NiwgX19weXhfTDFfZXJyb3IpCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgw MEIxCistICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC50cF9wcmludCA9 IDA7CistICAjZW5kaWYKKy0gIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9V U0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0V2ZW50LnRwX2dldGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworLSAg ICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC50cF9nZXRhdHRybyA9IF9f UHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOworLSAgfQorLSAgaWYgKF9fUHl4X1NldFZ0YWJs ZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC50cF9kaWN0LCBfX3B5eF92 dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCkgPCAwKSBfX1BZWF9FUlIoMCwgMjU2 LCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4 X25fc19FdmVudCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50KSA8IDApIF9fUFlYX0VSUigwLCAyNTYsIF9fcHl4X0wxX2Vycm9yKQorLSAgaWYgKF9f UHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCkgPCAwKSBfX1BZWF9FUlIoMCwgMjU2LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f cHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCA9ICZfX3B5eF90eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9FdmVudDsKKy0gIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgPSAmX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0OworLSAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0Ll9wcmVw X25vZGVfbGlzdCA9IChzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKiwgUHlPYmplY3QgKikpX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9saXN0OworLSAgX19weXhfdnRh YmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0Ll9wcmVwX25vZGVfbWFwID0gKHN0cnVj dCBtcHZfbm9kZV9saXN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dCAqLCBQeU9iamVjdCAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF9fcHJlcF9ub2RlX21hcDsKKy0gIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dC5fcHJlcF9uYXRpdmVfdmFsdWUgPSAoc3RydWN0IG1wdl9ub2RlICgqKShz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICosIFB5T2JqZWN0 ICosIFB5T2JqZWN0ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19w cmVwX25hdGl2ZV92YWx1ZTsKKy0gIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dC5fZnJlZV9uYXRpdmVfdmFsdWUgPSAoUHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICosIHN0cnVjdCBtcHZfbm9kZSkpX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX2ZyZWVfbmF0aXZlX3ZhbHVlOwor LSAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMzU5LCBfX3B5eF9MMV9lcnJvcikKKy0gICNpZiBQWV9W RVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKKy0gIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQudHBfcHJpbnQgPSAwOworLSAgI2VuZGlmCistICBpZiAoKENZVEhPTl9VU0Vf VFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYmIGxpa2VseSghX19weXhf dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQudHBfZ2V0YXR0cm8gPT0gUHlPYmpl Y3RfR2VuZXJpY0dldEF0dHIpKSB7CistICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0cjsK Ky0gIH0KKy0gIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dC50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCAzNTksIF9fcHl4X0wxX2Vycm9yKQorLSAgaWYg KFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX0NvbnRleHQsIChQeU9iamVjdCAq KSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KSA8IDApIF9fUFlYX0VS UigwLCAzNTksIF9fcHl4X0wxX2Vycm9yKQorLSAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlP YmplY3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KSA8IDApIF9f UFlYX0VSUigwLCAzNTksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dDsKKy0gIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X09wZW5HTENvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDgyMiwgX19weXhfTDFfZXJy b3IpCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCistICBfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0LnRwX3ByaW50ID0gMDsKKy0gICNlbmRp ZgorLSAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9P S1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENv bnRleHQudHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9P cGVuR0xDb250ZXh0LnRwX2dldGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgewor LSAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0LnRwX2dl dGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7CistICB9CistICBpZiAoUHlP YmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfT3BlbkdMQ29udGV4dCwgKFB5T2JqZWN0 ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQpIDwgMCkg X19QWVhfRVJSKDAsIDgyMiwgX19weXhfTDFfZXJyb3IpCistICBpZiAoX19QeXhfc2V0dXBfcmVk dWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENv bnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDgyMiwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF9w dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCA9ICZfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0OworLSAgX19weXhfdnRhYnB0cl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyA9ICZfX3B5eF92dGFibGVfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXM7CistICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X19SZW5kZXJQYXJhbXMuYWRkX3ZvaWRwID0gKFB5T2JqZWN0ICooKikoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqLCBlbnVtIG1w dl9yZW5kZXJfcGFyYW1fdHlwZSwgdm9pZCAqLCBzdHJ1Y3QgX19weXhfb3B0X2FyZ3NfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfdm9pZHAgKl9fcHl4X29wdGlvbmFs X2FyZ3MpKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRf dm9pZHA7CistICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJh bXMuYWRkX2ludCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKiwgZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5cGUsIGlu dCkpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF9pbnQ7 CistICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMuYWRk X3N0cmluZyA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X19SZW5kZXJQYXJhbXMgKiwgZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5cGUsIGNoYXIg KikpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF9zdHJp bmc7CistICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fUmVuZGVyUGFyYW1zKSA8IDApIF9fUFlYX0VSUigwLCA4ODEsIF9fcHl4X0wxX2Vycm9yKQor LSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQorLSAgX19weXhfdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9wcmludCA9IDA7CistICAjZW5kaWYKKy0g IGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkg JiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z LnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRl clBhcmFtcy50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKy0gICAg X19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9nZXRhdHRy byA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOworLSAgfQorLSAgaWYgKF9fUHl4X1Nl dFZ0YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zLnRw X2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMp IDwgMCkgX19QWVhfRVJSKDAsIDg4MSwgX19weXhfTDFfZXJyb3IpCistICBpZiAoUHlPYmplY3Rf U2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfUmVuZGVyUGFyYW1zLCAoUHlPYmplY3QgKikmX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcykgPCAwKSBfX1BZWF9F UlIoMCwgODgxLCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5 T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcykg PCAwKSBfX1BZWF9FUlIoMCwgODgxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zID0gJl9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXM7CistICBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gPSAmX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJGcmFtZUluZm87CistICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGli c18zbXB2X1JlbmRlckZyYW1lSW5mby5fZnJvbV9zdHJ1Y3QgPSAoUHlPYmplY3QgKigqKShzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKiwgc3Ry dWN0IG1wdl9yZW5kZXJfZnJhbWVfaW5mbyAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xNVJlbmRlckZyYW1lSW5mb19fZnJvbV9zdHJ1Y3Q7CistICBpZiAoUHlUeXBlX1JlYWR5KCZf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8pIDwgMCkgX19Q WVhfRVJSKDAsIDkyOCwgX19weXhfTDFfZXJyb3IpCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAw eDAzMDgwMEIxCistICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFt ZUluZm8udHBfcHJpbnQgPSAwOworLSAgI2VuZGlmCistICBpZiAoKENZVEhPTl9VU0VfVFlQRV9T TE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYmIGxpa2VseSghX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2RpY3RvZmZzZXQgJiYgX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2dldGF0dHJv ID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworLSAgICBfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8udHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVj dF9HZW5lcmljR2V0QXR0cjsKKy0gIH0KKy0gIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2RpY3QsIF9fcHl4X3Z0 YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbykgPCAwKSBfX1BZWF9F UlIoMCwgOTI4LCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5 T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZv KSA8IDApIF9fUFlYX0VSUigwLCA5MjgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfcHR5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyA9ICZfX3B5eF90eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm87CistICBpZiAoUHlUeXBlX1JlYWR5KCZf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSA8IDApIF9fUFlY X0VSUigwLCA5MzcsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgw MzA4MDBCMQorLSAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dC50cF9wcmludCA9IDA7CistICAjZW5kaWYKKy0gIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RT ICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dC50cF9nZXRhdHRybyA9PSBQeU9i amVjdF9HZW5lcmljR2V0QXR0cikpIHsKKy0gICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfUmVuZGVyQ29udGV4dC50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNH ZXRBdHRyOworLSAgfQorLSAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9z X1JlbmRlckNvbnRleHQsIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9SZW5kZXJDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCA5MzcsIF9fcHl4X0wxX2Vycm9y KQorLSAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCA5MzcsIF9f cHl4X0wxX2Vycm9yKQorLSAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckNvbnRleHQgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dDsKKy0gIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRl eHQudHBfYmFzZSA9IF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250 ZXh0OworLSAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfT3BlbkdMUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMTEyMiwgX19weXhfTDFf ZXJyb3IpCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCistICBfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX3ByaW50ID0gMDsK Ky0gICNlbmRpZgorLSAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9Q WVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X09wZW5HTFJlbmRlckNvbnRleHQudHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2dldGF0dHJvID09IFB5T2JqZWN0 X0dlbmVyaWNHZXRBdHRyKSkgeworLSAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJp Y0dldEF0dHI7CistICB9CistICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9u X3NfT3BlbkdMUmVuZGVyQ29udGV4dCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDExMjIs IF9fcHl4X0wxX2Vycm9yKQorLSAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0KSA8IDAp IF9fUFlYX0VSUigwLCAxMTIyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3B0eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0ID0gJl9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQ7CistICBpZiAoUHlUeXBlX1JlYWR5 KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19l cnJvcnMpIDwgMCkgX19QWVhfRVJSKDAsIDMxOCwgX19weXhfTDFfZXJyb3IpCistICAjaWYgUFlf VkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCistICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMudHBfcHJpbnQgPSAwOworLSAgI2VuZGlm CistICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09L VVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2Nv cGVfc3RydWN0X19fZXJyb3JzLnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzLnRwX2dldGF0dHJvID09IFB5 T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworLSAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMudHBfZ2V0YXR0cm8gPSBfX1B5eF9Q eU9iamVjdF9HZW5lcmljR2V0QXR0ck5vRGljdDsKKy0gIH0KKy0gIF9fcHl4X3B0eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgPSAmX19weXhfdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzOworLSAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gMDsKKy0gIF9fcHl4X0wx X2Vycm9yOjsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIC0x OworLX0KKy0KKy1zdGF0aWMgaW50IF9fUHl4X21vZGluaXRfdHlwZV9pbXBvcnRfY29kZSh2b2lk KSB7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fUHl4X21vZGluaXRfdHlwZV9pbXBvcnRfY29kZSIsIDApOworLSAgLyotLS0g VHlwZSBpbXBvcnQgY29kZSAtLS0qLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 CistICByZXR1cm4gMDsKKy19CistCistc3RhdGljIGludCBfX1B5eF9tb2Rpbml0X3ZhcmlhYmxl X2ltcG9ydF9jb2RlKHZvaWQpIHsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19QeXhfbW9kaW5pdF92YXJpYWJsZV9pbXBvcnRf Y29kZSIsIDApOworLSAgLyotLS0gVmFyaWFibGUgaW1wb3J0IGNvZGUgLS0tKi8KKy0gIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBp bnQgX19QeXhfbW9kaW5pdF9mdW5jdGlvbl9pbXBvcnRfY29kZSh2b2lkKSB7CistICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fUHl4 X21vZGluaXRfZnVuY3Rpb25faW1wb3J0X2NvZGUiLCAwKTsKKy0gIC8qLS0tIEZ1bmN0aW9uIGlt cG9ydCBjb2RlIC0tLSovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJl dHVybiAwOworLX0KKy0KKy0KKy0jaWZuZGVmIENZVEhPTl9OT19QWUlOSVRfRVhQT1JUCistI2Rl ZmluZSBfX1B5eF9QeU1PRElOSVRfRlVOQyBQeU1PRElOSVRfRlVOQworLSNlbGlmIFBZX01BSk9S X1ZFUlNJT04gPCAzCistI2lmZGVmIF9fY3BsdXNwbHVzCistI2RlZmluZSBfX1B5eF9QeU1PRElO SVRfRlVOQyBleHRlcm4gIkMiIHZvaWQKKy0jZWxzZQorLSNkZWZpbmUgX19QeXhfUHlNT0RJTklU X0ZVTkMgdm9pZAorLSNlbmRpZgorLSNlbHNlCistI2lmZGVmIF9fY3BsdXNwbHVzCistI2RlZmlu ZSBfX1B5eF9QeU1PRElOSVRfRlVOQyBleHRlcm4gIkMiIFB5T2JqZWN0ICoKKy0jZWxzZQorLSNk ZWZpbmUgX19QeXhfUHlNT0RJTklUX0ZVTkMgUHlPYmplY3QgKgorLSNlbmRpZgorLSNlbmRpZgor LQorLQorLSNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLV9fUHl4X1B5TU9ESU5JVF9GVU5DIGlu aXRtcHYodm9pZCkgQ1lUSE9OX1NNQUxMX0NPREU7IC8qcHJvdG8qLworLV9fUHl4X1B5TU9ESU5J VF9GVU5DIGluaXRtcHYodm9pZCkKKy0jZWxzZQorLV9fUHl4X1B5TU9ESU5JVF9GVU5DIFB5SW5p dF9tcHYodm9pZCkgQ1lUSE9OX1NNQUxMX0NPREU7IC8qcHJvdG8qLworLV9fUHl4X1B5TU9ESU5J VF9GVU5DIFB5SW5pdF9tcHYodm9pZCkKKy0jaWYgQ1lUSE9OX1BFUDQ4OV9NVUxUSV9QSEFTRV9J TklUCisteworLSAgcmV0dXJuIFB5TW9kdWxlRGVmX0luaXQoJl9fcHl4X21vZHVsZWRlZik7Cist fQorLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfY2hlY2tfc2luZ2xlX2ludGVy cHJldGVyKHZvaWQpIHsKKy0gICAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNzAwQTEKKy0g ICAgc3RhdGljIFBZX0lOVDY0X1QgbWFpbl9pbnRlcnByZXRlcl9pZCA9IC0xOworLSAgICBQWV9J TlQ2NF9UIGN1cnJlbnRfaWQgPSBQeUludGVycHJldGVyU3RhdGVfR2V0SUQoUHlUaHJlYWRTdGF0 ZV9HZXQoKS0+aW50ZXJwKTsKKy0gICAgaWYgKG1haW5faW50ZXJwcmV0ZXJfaWQgPT0gLTEpIHsK Ky0gICAgICAgIG1haW5faW50ZXJwcmV0ZXJfaWQgPSBjdXJyZW50X2lkOworLSAgICAgICAgcmV0 dXJuICh1bmxpa2VseShjdXJyZW50X2lkID09IC0xKSkgPyAtMSA6IDA7CistICAgIH0gZWxzZSBp ZiAodW5saWtlbHkobWFpbl9pbnRlcnByZXRlcl9pZCAhPSBjdXJyZW50X2lkKSkKKy0gICAgI2Vs c2UKKy0gICAgc3RhdGljIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqbWFpbl9pbnRlcnByZXRlciA9IE5V TEw7CistICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqY3VycmVudF9pbnRlcnByZXRlciA9IFB5VGhy ZWFkU3RhdGVfR2V0KCktPmludGVycDsKKy0gICAgaWYgKCFtYWluX2ludGVycHJldGVyKSB7Cist ICAgICAgICBtYWluX2ludGVycHJldGVyID0gY3VycmVudF9pbnRlcnByZXRlcjsKKy0gICAgfSBl bHNlIGlmICh1bmxpa2VseShtYWluX2ludGVycHJldGVyICE9IGN1cnJlbnRfaW50ZXJwcmV0ZXIp KQorLSAgICAjZW5kaWYKKy0gICAgeworLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorLSAgICAg ICAgICAgIFB5RXhjX0ltcG9ydEVycm9yLAorLSAgICAgICAgICAgICJJbnRlcnByZXRlciBjaGFu Z2UgZGV0ZWN0ZWQgLSB0aGlzIG1vZHVsZSBjYW4gb25seSBiZSBsb2FkZWQgaW50byBvbmUgaW50 ZXJwcmV0ZXIgcGVyIHByb2Nlc3MuIik7CistICAgICAgICByZXR1cm4gLTE7CistICAgIH0KKy0g ICAgcmV0dXJuIDA7CistfQorLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfY29w eV9zcGVjX3RvX21vZHVsZShQeU9iamVjdCAqc3BlYywgUHlPYmplY3QgKm1vZGRpY3QsIGNvbnN0 IGNoYXIqIGZyb21fbmFtZSwgY29uc3QgY2hhciogdG9fbmFtZSwgaW50IGFsbG93X25vbmUpIHsK Ky0gICAgUHlPYmplY3QgKnZhbHVlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzcGVjLCBmcm9t X25hbWUpOworLSAgICBpbnQgcmVzdWx0ID0gMDsKKy0gICAgaWYgKGxpa2VseSh2YWx1ZSkpIHsK Ky0gICAgICAgIGlmIChhbGxvd19ub25lIHx8IHZhbHVlICE9IFB5X05vbmUpIHsKKy0gICAgICAg ICAgICByZXN1bHQgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhtb2RkaWN0LCB0b19uYW1lLCB2YWx1 ZSk7CistICAgICAgICB9CistICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworLSAgICB9IGVsc2Ug aWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CistICAg ICAgICBQeUVycl9DbGVhcigpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgcmVzdWx0ID0gLTE7 CistICAgIH0KKy0gICAgcmV0dXJuIHJlc3VsdDsKKy19Cistc3RhdGljIENZVEhPTl9TTUFMTF9D T0RFIFB5T2JqZWN0KiBfX3B5eF9weW1vZF9jcmVhdGUoUHlPYmplY3QgKnNwZWMsIENZVEhPTl9V TlVTRUQgUHlNb2R1bGVEZWYgKmRlZikgeworLSAgICBQeU9iamVjdCAqbW9kdWxlID0gTlVMTCwg Km1vZGRpY3QsICptb2RuYW1lOworLSAgICBpZiAoX19QeXhfY2hlY2tfc2luZ2xlX2ludGVycHJl dGVyKCkpCistICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAgaWYgKF9fcHl4X20pCistICAgICAg ICByZXR1cm4gX19QeXhfTmV3UmVmKF9fcHl4X20pOworLSAgICBtb2RuYW1lID0gUHlPYmplY3Rf R2V0QXR0clN0cmluZyhzcGVjLCAibmFtZSIpOworLSAgICBpZiAodW5saWtlbHkoIW1vZG5hbWUp KSBnb3RvIGJhZDsKKy0gICAgbW9kdWxlID0gUHlNb2R1bGVfTmV3T2JqZWN0KG1vZG5hbWUpOwor LSAgICBQeV9ERUNSRUYobW9kbmFtZSk7CistICAgIGlmICh1bmxpa2VseSghbW9kdWxlKSkgZ290 byBiYWQ7CistICAgIG1vZGRpY3QgPSBQeU1vZHVsZV9HZXREaWN0KG1vZHVsZSk7CistICAgIGlm ICh1bmxpa2VseSghbW9kZGljdCkpIGdvdG8gYmFkOworLSAgICBpZiAodW5saWtlbHkoX19QeXhf Y29weV9zcGVjX3RvX21vZHVsZShzcGVjLCBtb2RkaWN0LCAibG9hZGVyIiwgIl9fbG9hZGVyX18i LCAxKSA8IDApKSBnb3RvIGJhZDsKKy0gICAgaWYgKHVubGlrZWx5KF9fUHl4X2NvcHlfc3BlY190 b19tb2R1bGUoc3BlYywgbW9kZGljdCwgIm9yaWdpbiIsICJfX2ZpbGVfXyIsIDEpIDwgMCkpIGdv dG8gYmFkOworLSAgICBpZiAodW5saWtlbHkoX19QeXhfY29weV9zcGVjX3RvX21vZHVsZShzcGVj LCBtb2RkaWN0LCAicGFyZW50IiwgIl9fcGFja2FnZV9fIiwgMSkgPCAwKSkgZ290byBiYWQ7Cist ICAgIGlmICh1bmxpa2VseShfX1B5eF9jb3B5X3NwZWNfdG9fbW9kdWxlKHNwZWMsIG1vZGRpY3Qs ICJzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyIsICJfX3BhdGhfXyIsIDApIDwgMCkpIGdvdG8g YmFkOworLSAgICByZXR1cm4gbW9kdWxlOworLWJhZDoKKy0gICAgUHlfWERFQ1JFRihtb2R1bGUp OworLSAgICByZXR1cm4gTlVMTDsKKy19CistCistCistc3RhdGljIENZVEhPTl9TTUFMTF9DT0RF IGludCBfX3B5eF9weW1vZF9leGVjX21wdihQeU9iamVjdCAqX19weXhfcHlpbml0X21vZHVsZSkK Ky0jZW5kaWYKKy0jZW5kaWYKKy17CistICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0g IFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfMzsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfNTsKKy0gIFB5T2JqZWN0ICpf X3B5eF90XzYgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CistICBpbnQg X19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsK Ky0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25z CistICAjaWYgQ1lUSE9OX1BFUDQ4OV9NVUxUSV9QSEFTRV9JTklUCistICBpZiAoX19weXhfbSkg eworLSAgICBpZiAoX19weXhfbSA9PSBfX3B5eF9weWluaXRfbW9kdWxlKSByZXR1cm4gMDsKKy0g ICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgIk1vZHVsZSAnbXB2JyBoYXMg YWxyZWFkeSBiZWVuIGltcG9ydGVkLiBSZS1pbml0aWFsaXNhdGlvbiBpcyBub3Qgc3VwcG9ydGVk LiIpOworLSAgICByZXR1cm4gLTE7CistICB9CistICAjZWxpZiBQWV9NQUpPUl9WRVJTSU9OID49 IDMKKy0gIGlmIChfX3B5eF9tKSByZXR1cm4gX19QeXhfTmV3UmVmKF9fcHl4X20pOworLSAgI2Vu ZGlmCistICAjaWYgQ1lUSE9OX1JFRk5BTk5ZCistX19QeXhfUmVmTmFubnkgPSBfX1B5eF9SZWZO YW5ueUltcG9ydEFQSSgicmVmbmFubnkiKTsKKy1pZiAoIV9fUHl4X1JlZk5hbm55KSB7CistICBQ eUVycl9DbGVhcigpOworLSAgX19QeXhfUmVmTmFubnkgPSBfX1B5eF9SZWZOYW5ueUltcG9ydEFQ SSgiQ3l0aG9uLlJ1bnRpbWUucmVmbmFubnkiKTsKKy0gIGlmICghX19QeXhfUmVmTmFubnkpCist ICAgICAgUHlfRmF0YWxFcnJvcigiZmFpbGVkIHRvIGltcG9ydCAncmVmbmFubnknIG1vZHVsZSIp OworLX0KKy0jZW5kaWYKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX1B5eF9QeU1P RElOSVRfRlVOQyBQeUluaXRfbXB2KHZvaWQpIiwgMCk7CistICBpZiAoX19QeXhfY2hlY2tfYmlu YXJ5X3ZlcnNpb24oKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKy0gICNp ZmRlZiBfX1B4eV9QeUZyYW1lX0luaXRpYWxpemVfT2Zmc2V0cworLSAgX19QeHlfUHlGcmFtZV9J bml0aWFsaXplX09mZnNldHMoKTsKKy0gICNlbmRpZgorLSAgX19weXhfZW1wdHlfdHVwbGUgPSBQ eVR1cGxlX05ldygwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9lbXB0eV90dXBsZSkpIF9fUFlYX0VS UigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X2VtcHR5X2J5dGVzID0gUHlCeXRlc19G cm9tU3RyaW5nQW5kU2l6ZSgiIiwgMCk7IGlmICh1bmxpa2VseSghX19weXhfZW1wdHlfYnl0ZXMp KSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF9lbXB0eV91bmljb2Rl ID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCIiLCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF9lbXB0eV91bmljb2RlKSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2lm ZGVmIF9fUHl4X0N5RnVuY3Rpb25fVVNFRAorLSAgaWYgKF9fcHl4X0N5RnVuY3Rpb25faW5pdCgp IDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2VuZGlmCistICAjaWZk ZWYgX19QeXhfRnVzZWRGdW5jdGlvbl9VU0VECistICBpZiAoX19weXhfRnVzZWRGdW5jdGlvbl9p bml0KCkgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICAjZW5kaWYKKy0g ICNpZmRlZiBfX1B5eF9Db3JvdXRpbmVfVVNFRAorLSAgaWYgKF9fcHl4X0Nvcm91dGluZV9pbml0 KCkgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICAjZW5kaWYKKy0gICNp ZmRlZiBfX1B5eF9HZW5lcmF0b3JfVVNFRAorLSAgaWYgKF9fcHl4X0dlbmVyYXRvcl9pbml0KCkg PCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICAjZW5kaWYKKy0gICNpZmRl ZiBfX1B5eF9Bc3luY0dlbl9VU0VECistICBpZiAoX19weXhfQXN5bmNHZW5faW5pdCgpIDwgMCkg X19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2VuZGlmCistICAjaWZkZWYgX19Q eXhfU3RvcEFzeW5jSXRlcmF0aW9uX1VTRUQKKy0gIGlmIChfX3B5eF9TdG9wQXN5bmNJdGVyYXRp b25faW5pdCgpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2VuZGlm CistICAvKi0tLSBMaWJyYXJ5IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAtLS0qLworLSAgLyotLS0g VGhyZWFkcyBpbml0aWFsaXphdGlvbiBjb2RlIC0tLSovCistICAjaWYgZGVmaW5lZChfX1BZWF9G T1JDRV9JTklUX1RIUkVBRFMpICYmIF9fUFlYX0ZPUkNFX0lOSVRfVEhSRUFEUworLSAgI2lmZGVm IFdJVEhfVEhSRUFEIC8qIFB5dGhvbiBidWlsZCB3aXRoIHRocmVhZGluZyBzdXBwb3J0PyAqLwor LSAgUHlFdmFsX0luaXRUaHJlYWRzKCk7CistICAjZW5kaWYKKy0gICNlbmRpZgorLSAgLyotLS0g TW9kdWxlIGNyZWF0aW9uIGNvZGUgLS0tKi8KKy0gICNpZiBDWVRIT05fUEVQNDg5X01VTFRJX1BI QVNFX0lOSVQKKy0gIF9fcHl4X20gPSBfX3B5eF9weWluaXRfbW9kdWxlOworLSAgUHlfSU5DUkVG KF9fcHl4X20pOworLSAgI2Vsc2UKKy0gICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLSAgX19w eXhfbSA9IFB5X0luaXRNb2R1bGU0KCJtcHYiLCBfX3B5eF9tZXRob2RzLCBfX3B5eF9rX3B5bXB2 X1B5dGhvbl93cmFwcGVyX2Zvcl9saWJtcHYsIDAsIFBZVEhPTl9BUElfVkVSU0lPTik7IFB5X1hJ TkNSRUYoX19weXhfbSk7CistICAjZWxzZQorLSAgX19weXhfbSA9IFB5TW9kdWxlX0NyZWF0ZSgm X19weXhfbW9kdWxlZGVmKTsKKy0gICNlbmRpZgorLSAgaWYgKHVubGlrZWx5KCFfX3B5eF9tKSkg X19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2VuZGlmCistICBfX3B5eF9kID0g UHlNb2R1bGVfR2V0RGljdChfX3B5eF9tKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9kKSkgX19QWVhf RVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgUHlfSU5DUkVGKF9fcHl4X2QpOworLSAgX19w eXhfYiA9IFB5SW1wb3J0X0FkZE1vZHVsZShfX1B5eF9CVUlMVElOX01PRFVMRV9OQU1FKTsgaWYg KHVubGlrZWx5KCFfX3B5eF9iKSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAg UHlfSU5DUkVGKF9fcHl4X2IpOworLSAgX19weXhfY3l0aG9uX3J1bnRpbWUgPSBQeUltcG9ydF9B ZGRNb2R1bGUoKGNoYXIgKikgImN5dGhvbl9ydW50aW1lIik7IGlmICh1bmxpa2VseSghX19weXhf Y3l0aG9uX3J1bnRpbWUpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICBQeV9J TkNSRUYoX19weXhfY3l0aG9uX3J1bnRpbWUpOworLSAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJp bmcoX19weXhfbSwgIl9fYnVpbHRpbnNfXyIsIF9fcHl4X2IpIDwgMCkgX19QWVhfRVJSKDAsIDEs IF9fcHl4X0wxX2Vycm9yKTsKKy0gIC8qLS0tIEluaXRpYWxpemUgdmFyaW91cyBnbG9iYWwgY29u c3RhbnRzIGV0Yy4gLS0tKi8KKy0gIGlmIChfX1B5eF9Jbml0R2xvYmFscygpIDwgMCkgX19QWVhf RVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzICYm IChfX1BZWF9ERUZBVUxUX1NUUklOR19FTkNPRElOR19JU19BU0NJSSB8fCBfX1BZWF9ERUZBVUxU X1NUUklOR19FTkNPRElOR19JU19ERUZBVUxUKQorLSAgaWYgKF9fUHl4X2luaXRfc3lzX2dldGRl ZmF1bHRlbmNvZGluZ19wYXJhbXMoKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJv cikKKy0gICNlbmRpZgorLSAgaWYgKF9fcHl4X21vZHVsZV9pc19tYWluX3ZpZGN1dHRlcl9fbGli c19fbXB2KSB7CistICAgIGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19u YW1lLCBfX3B5eF9uX3NfbWFpbikgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3Ip CistICB9CistICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICB7CistICAgIFB5T2JqZWN0 ICptb2R1bGVzID0gUHlJbXBvcnRfR2V0TW9kdWxlRGljdCgpOyBpZiAodW5saWtlbHkoIW1vZHVs ZXMpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICAgIGlmICghUHlEaWN0X0dl dEl0ZW1TdHJpbmcobW9kdWxlcywgInZpZGN1dHRlci5saWJzLm1wdiIpKSB7CistICAgICAgaWYg KHVubGlrZWx5KFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJ2aWRjdXR0ZXIubGlicy5t cHYiLCBfX3B5eF9tKSA8IDApKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICAg IH0KKy0gIH0KKy0gICNlbmRpZgorLSAgLyotLS0gQnVpbHRpbiBpbml0IGNvZGUgLS0tKi8KKy0g IGlmIChfX1B5eF9Jbml0Q2FjaGVkQnVpbHRpbnMoKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5 eF9MMV9lcnJvcikKKy0gIC8qLS0tIENvbnN0YW50cyBpbml0IGNvZGUgLS0tKi8KKy0gIGlmIChf X1B5eF9Jbml0Q2FjaGVkQ29uc3RhbnRzKCkgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFf ZXJyb3IpCistICAvKi0tLSBHbG9iYWwgdHlwZS9mdW5jdGlvbiBpbml0IGNvZGUgLS0tKi8KKy0g ICh2b2lkKV9fUHl4X21vZGluaXRfZ2xvYmFsX2luaXRfY29kZSgpOworLSAgKHZvaWQpX19QeXhf bW9kaW5pdF92YXJpYWJsZV9leHBvcnRfY29kZSgpOworLSAgKHZvaWQpX19QeXhfbW9kaW5pdF9m dW5jdGlvbl9leHBvcnRfY29kZSgpOworLSAgaWYgKHVubGlrZWx5KF9fUHl4X21vZGluaXRfdHlw ZV9pbml0X2NvZGUoKSA8IDApKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICAo dm9pZClfX1B5eF9tb2Rpbml0X3R5cGVfaW1wb3J0X2NvZGUoKTsKKy0gICh2b2lkKV9fUHl4X21v ZGluaXRfdmFyaWFibGVfaW1wb3J0X2NvZGUoKTsKKy0gICh2b2lkKV9fUHl4X21vZGluaXRfZnVu Y3Rpb25faW1wb3J0X2NvZGUoKTsKKy0gIC8qLS0tIEV4ZWN1dGlvbiBjb2RlIC0tLSovCistICAj aWYgZGVmaW5lZChfX1B5eF9HZW5lcmF0b3JfVVNFRCkgfHwgZGVmaW5lZChfX1B5eF9Db3JvdXRp bmVfVVNFRCkKKy0gIGlmIChfX1B5eF9wYXRjaF9hYmMoKSA8IDApIF9fUFlYX0VSUigwLCAxLCBf X3B5eF9MMV9lcnJvcikKKy0gICNlbmRpZgorK3N0YXRpYyBfX1B5eF9TdHJpbmdUYWJFbnRyeSBf X3B5eF9zdHJpbmdfdGFiW10gPSB7CisrICB7Jl9fcHl4X2twX3NfMF8zXzAsIF9fcHl4X2tfMF8z XzAsIHNpemVvZihfX3B5eF9rXzBfM18wKSwgMCwgMCwgMSwgMH0sCisrICB7Jl9fcHl4X25fc19B UElfT1BFTkdMLCBfX3B5eF9rX0FQSV9PUEVOR0wsIHNpemVvZihfX3B5eF9rX0FQSV9PUEVOR0wp LCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfa3Bfc19BbmRyZV9ELCBfX3B5eF9rX0FuZHJlX0Qs IHNpemVvZihfX3B5eF9rX0FuZHJlX0QpLCAwLCAwLCAxLCAwfSwKKysgIHsmX19weXhfbl9zX0NB UElfTUFKT1IsIF9fcHl4X2tfQ0FQSV9NQUpPUiwgc2l6ZW9mKF9fcHl4X2tfQ0FQSV9NQUpPUiks IDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfQ0FQSV9NSU5PUiwgX19weXhfa19DQVBJX01J Tk9SLCBzaXplb2YoX19weXhfa19DQVBJX01JTk9SKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4 X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfa19DYWxsYmFja1RocmVhZCwgc2l6ZW9mKF9fcHl4 X2tfQ2FsbGJhY2tUaHJlYWQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX0NhbGxiYWNr VGhyZWFkX19faW5pdCwgX19weXhfa19DYWxsYmFja1RocmVhZF9fX2luaXQsIHNpemVvZihfX3B5 eF9rX0NhbGxiYWNrVGhyZWFkX19faW5pdCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nf Q2FsbGJhY2tUaHJlYWRfY2FsbCwgX19weXhfa19DYWxsYmFja1RocmVhZF9jYWxsLCBzaXplb2Yo X19weXhfa19DYWxsYmFja1RocmVhZF9jYWxsKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25f c19DYWxsYmFja1RocmVhZF9tcHZfY2FsbGJhY2ssIF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfbXB2 X2NhbGxiYWNrLCBzaXplb2YoX19weXhfa19DYWxsYmFja1RocmVhZF9tcHZfY2FsbGJhY2spLCAw LCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX3J1biwgX19weXhfa19D YWxsYmFja1RocmVhZF9ydW4sIHNpemVvZihfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX3J1biksIDAs IDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWRfc2V0LCBfX3B5eF9rX0Nh bGxiYWNrVGhyZWFkX3NldCwgc2l6ZW9mKF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfc2V0KSwgMCwg MCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19DYWxsYmFja1RocmVhZF9zaHV0ZG93biwgX19weXhf a19DYWxsYmFja1RocmVhZF9zaHV0ZG93biwgc2l6ZW9mKF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRf c2h1dGRvd24pLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX0NvbnRleHQsIF9fcHl4X2tf Q29udGV4dCwgc2l6ZW9mKF9fcHl4X2tfQ29udGV4dCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5 eF9rcF9zX0NvbnRleHRfY3JlYXRpb25fZXJyb3IsIF9fcHl4X2tfQ29udGV4dF9jcmVhdGlvbl9l cnJvciwgc2l6ZW9mKF9fcHl4X2tfQ29udGV4dF9jcmVhdGlvbl9lcnJvciksIDAsIDAsIDEsIDB9 LAorKyAgeyZfX3B5eF9uX3NfRU9GUmVhc29ucywgX19weXhfa19FT0ZSZWFzb25zLCBzaXplb2Yo X19weXhfa19FT0ZSZWFzb25zKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19FbmRPZkZp bGVSZWFjaGVkLCBfX3B5eF9rX0VuZE9mRmlsZVJlYWNoZWQsIHNpemVvZihfX3B5eF9rX0VuZE9m RmlsZVJlYWNoZWQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX0Vycm9ycywgX19weXhf a19FcnJvcnMsIHNpemVvZihfX3B5eF9rX0Vycm9ycyksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5 eF9uX3NfRXZlbnQsIF9fcHl4X2tfRXZlbnQsIHNpemVvZihfX3B5eF9rX0V2ZW50KSwgMCwgMCwg MSwgMX0sCisrICB7Jl9fcHl4X25fc19FdmVudHMsIF9fcHl4X2tfRXZlbnRzLCBzaXplb2YoX19w eXhfa19FdmVudHMpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX0ltcG9ydEVycm9yLCBf X3B5eF9rX0ltcG9ydEVycm9yLCBzaXplb2YoX19weXhfa19JbXBvcnRFcnJvciksIDAsIDAsIDEs IDF9LAorKyAgeyZfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDA1LCBf X3B5eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDA1LCBzaXplb2YoX19weXhfa19J bmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHgwNSksIDAsIDAsIDEsIDB9LAorKyAgeyZfX3B5 eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDU2LCBfX3B5eF9rX0luY29tcGF0 aWJsZV9jaGVja3N1bXNfc192c18weDU2LCBzaXplb2YoX19weXhfa19JbmNvbXBhdGlibGVfY2hl Y2tzdW1zX3NfdnNfMHg1NiksIDAsIDAsIDEsIDB9LAorKyAgeyZfX3B5eF9rcF9zX0luY29tcGF0 aWJsZV9jaGVja3N1bXNfc192c18weDg3LCBfX3B5eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNf c192c18weDg3LCBzaXplb2YoX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHg4 NyksIDAsIDAsIDEsIDB9LAorKyAgeyZfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNf c192c18weGQ0LCBfX3B5eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGQ0LCBzaXpl b2YoX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHhkNCksIDAsIDAsIDEsIDB9 LAorKyAgeyZfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGRhLCBfX3B5 eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGRhLCBzaXplb2YoX19weXhfa19JbmNv bXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHhkYSksIDAsIDAsIDEsIDB9LAorKyAgeyZfX3B5eF9r cF9zX0tub3duX3Bvc3NpYmxlX3ZhbHVlc19mb3JfRW5kT2ZGLCBfX3B5eF9rX0tub3duX3Bvc3Np YmxlX3ZhbHVlc19mb3JfRW5kT2ZGLCBzaXplb2YoX19weXhfa19Lbm93bl9wb3NzaWJsZV92YWx1 ZXNfZm9yX0VuZE9mRiksIDAsIDAsIDEsIDB9LAorKyAgeyZfX3B5eF9uX3NfTG9nTGV2ZWxzLCBf X3B5eF9rX0xvZ0xldmVscywgc2l6ZW9mKF9fcHl4X2tfTG9nTGV2ZWxzKSwgMCwgMCwgMSwgMX0s CisrICB7Jl9fcHl4X25fc19Mb2dNZXNzYWdlLCBfX3B5eF9rX0xvZ01lc3NhZ2UsIHNpemVvZihf X3B5eF9rX0xvZ01lc3NhZ2UpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX01JTl9DQVBJ X01JTk9SLCBfX3B5eF9rX01JTl9DQVBJX01JTk9SLCBzaXplb2YoX19weXhfa19NSU5fQ0FQSV9N SU5PUiksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfTVBWRXJyb3IsIF9fcHl4X2tfTVBW RXJyb3IsIHNpemVvZihfX3B5eF9rX01QVkVycm9yKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4 X25fc19NUFZFcnJvcl9fX2luaXQsIF9fcHl4X2tfTVBWRXJyb3JfX19pbml0LCBzaXplb2YoX19w eXhfa19NUFZFcnJvcl9fX2luaXQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX09wZW5H TFJlbmRlckNvbnRleHQsIF9fcHl4X2tfT3BlbkdMUmVuZGVyQ29udGV4dCwgc2l6ZW9mKF9fcHl4 X2tfT3BlbkdMUmVuZGVyQ29udGV4dCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfUGlj a2xlRXJyb3IsIF9fcHl4X2tfUGlja2xlRXJyb3IsIHNpemVvZihfX3B5eF9rX1BpY2tsZUVycm9y KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19Qcm9wZXJ0eSwgX19weXhfa19Qcm9wZXJ0 eSwgc2l6ZW9mKF9fcHl4X2tfUHJvcGVydHkpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9z X1B5TVBWRXJyb3IsIF9fcHl4X2tfUHlNUFZFcnJvciwgc2l6ZW9mKF9fcHl4X2tfUHlNUFZFcnJv ciksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfUkVRVUlSRURfQ0FQSV9NQUpPUiwgX19w eXhfa19SRVFVSVJFRF9DQVBJX01BSk9SLCBzaXplb2YoX19weXhfa19SRVFVSVJFRF9DQVBJX01B Sk9SKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19SZW5kZXJDb250ZXh0LCBfX3B5eF9r X1JlbmRlckNvbnRleHQsIHNpemVvZihfX3B5eF9rX1JlbmRlckNvbnRleHQpLCAwLCAwLCAxLCAx fSwKKysgIHsmX19weXhfbl9zX1JlbmRlclBhcmFtcywgX19weXhfa19SZW5kZXJQYXJhbXMsIHNp emVvZihfX3B5eF9rX1JlbmRlclBhcmFtcyksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9rcF9z X1JlbmRlclBhcmFtc19vdmVyZmxvdywgX19weXhfa19SZW5kZXJQYXJhbXNfb3ZlcmZsb3csIHNp emVvZihfX3B5eF9rX1JlbmRlclBhcmFtc19vdmVyZmxvdyksIDAsIDAsIDEsIDB9LAorKyAgeyZf X3B5eF9uX3NfUmVwbHlVc2VyRGF0YSwgX19weXhfa19SZXBseVVzZXJEYXRhLCBzaXplb2YoX19w eXhfa19SZXBseVVzZXJEYXRhKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19SZXBseVVz ZXJEYXRhX19faW5pdCwgX19weXhfa19SZXBseVVzZXJEYXRhX19faW5pdCwgc2l6ZW9mKF9fcHl4 X2tfUmVwbHlVc2VyRGF0YV9fX2luaXQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX1Jl cGx5VXNlckRhdGFfYWRkLCBfX3B5eF9rX1JlcGx5VXNlckRhdGFfYWRkLCBzaXplb2YoX19weXhf a19SZXBseVVzZXJEYXRhX2FkZCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfUmVwbHlV c2VyRGF0YV9yZW1vdmUsIF9fcHl4X2tfUmVwbHlVc2VyRGF0YV9yZW1vdmUsIHNpemVvZihfX3B5 eF9rX1JlcGx5VXNlckRhdGFfcmVtb3ZlKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19T ZW1hcGhvcmUsIF9fcHl4X2tfU2VtYXBob3JlLCBzaXplb2YoX19weXhfa19TZW1hcGhvcmUpLCAw LCAwLCAxLCAxfSwKKysgIHsmX19weXhfa3Bfc19TZXRfb2Zfa25vd25fZXJyb3JfY29kZXNfZnJv bV9NcCwgX19weXhfa19TZXRfb2Zfa25vd25fZXJyb3JfY29kZXNfZnJvbV9NcCwgc2l6ZW9mKF9f cHl4X2tfU2V0X29mX2tub3duX2Vycm9yX2NvZGVzX2Zyb21fTXApLCAwLCAwLCAxLCAwfSwKKysg IHsmX19weXhfa3Bfc19TZXRfb2Zfa25vd25fdmFsdWVzX2Zvcl9FdmVudF9pZCwgX19weXhfa19T ZXRfb2Zfa25vd25fdmFsdWVzX2Zvcl9FdmVudF9pZCwgc2l6ZW9mKF9fcHl4X2tfU2V0X29mX2tu b3duX3ZhbHVlc19mb3JfRXZlbnRfaWQpLCAwLCAwLCAxLCAwfSwKKysgIHsmX19weXhfbl9zX1Ro cmVhZCwgX19weXhfa19UaHJlYWQsIHNpemVvZihfX3B5eF9rX1RocmVhZCksIDAsIDAsIDEsIDF9 LAorKyAgeyZfX3B5eF9uX3NfVHlwZUVycm9yLCBfX3B5eF9rX1R5cGVFcnJvciwgc2l6ZW9mKF9f cHl4X2tfVHlwZUVycm9yKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19VUERBVEVfRlJB TUUsIF9fcHl4X2tfVVBEQVRFX0ZSQU1FLCBzaXplb2YoX19weXhfa19VUERBVEVfRlJBTUUpLCAw LCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX1VuaWNvZGVEZWNvZGVFcnJvciwgX19weXhfa19V bmljb2RlRGVjb2RlRXJyb3IsIHNpemVvZihfX3B5eF9rX1VuaWNvZGVEZWNvZGVFcnJvciksIDAs IDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfVW5pY29kZUVuY29kZUVycm9yLCBfX3B5eF9rX1Vu aWNvZGVFbmNvZGVFcnJvciwgc2l6ZW9mKF9fcHl4X2tfVW5pY29kZUVuY29kZUVycm9yKSwgMCwg MCwgMSwgMX0sCisrICB7Jl9fcHl4X2twX3NfVW5rbm93bl9hcGlfdHlwZV9yLCBfX3B5eF9rX1Vu a25vd25fYXBpX3R5cGVfciwgc2l6ZW9mKF9fcHl4X2tfVW5rbm93bl9hcGlfdHlwZV9yKSwgMCwg MCwgMSwgMH0sCisrICB7Jl9fcHl4X2twX3NfVW5rbm93bl9vcl9pbnZhbGlkX3BvaW50ZXJfb2Jq ZWMsIF9fcHl4X2tfVW5rbm93bl9vcl9pbnZhbGlkX3BvaW50ZXJfb2JqZWMsIHNpemVvZihfX3B5 eF9rX1Vua25vd25fb3JfaW52YWxpZF9wb2ludGVyX29iamVjKSwgMCwgMCwgMSwgMH0sCisrICB7 Jl9fcHl4X25fc19hYm9ydGVkLCBfX3B5eF9rX2Fib3J0ZWQsIHNpemVvZihfX3B5eF9rX2Fib3J0 ZWQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2FjcXVpcmUsIF9fcHl4X2tfYWNxdWly ZSwgc2l6ZW9mKF9fcHl4X2tfYWNxdWlyZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nf YWRkLCBfX3B5eF9rX2FkZCwgc2l6ZW9mKF9fcHl4X2tfYWRkKSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19hZHZhbmNlZF9jb250cm9sLCBfX3B5eF9rX2FkdmFuY2VkX2NvbnRyb2wsIHNp emVvZihfX3B5eF9rX2FkdmFuY2VkX2NvbnRyb2wpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhf bl9zX2FvX2luaXRfZmFpbGVkLCBfX3B5eF9rX2FvX2luaXRfZmFpbGVkLCBzaXplb2YoX19weXhf a19hb19pbml0X2ZhaWxlZCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfYXBpX3R5cGUs IF9fcHl4X2tfYXBpX3R5cGUsIHNpemVvZihfX3B5eF9rX2FwaV90eXBlKSwgMCwgMCwgMSwgMX0s CisrICB7Jl9fcHl4X25fc19hcHBlbmQsIF9fcHl4X2tfYXBwZW5kLCBzaXplb2YoX19weXhfa19h cHBlbmQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2FzeW5jaHJvbm91cywgX19weXhf a19hc3luY2hyb25vdXMsIHNpemVvZihfX3B5eF9rX2FzeW5jaHJvbm91cyksIDAsIDAsIDEsIDF9 LAorKyAgeyZfX3B5eF9uX3NfYXRvbWljX3JlcXVlc3RfcHRyLCBfX3B5eF9rX2F0b21pY19yZXF1 ZXN0X3B0ciwgc2l6ZW9mKF9fcHl4X2tfYXRvbWljX3JlcXVlc3RfcHRyKSwgMCwgMCwgMSwgMX0s CisrICB7Jl9fcHl4X25fc19hdWRpb19yZWNvbmZpZywgX19weXhfa19hdWRpb19yZWNvbmZpZywg c2l6ZW9mKF9fcHl4X2tfYXVkaW9fcmVjb25maWcpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhf bl9zX2F1dGhvciwgX19weXhfa19hdXRob3IsIHNpemVvZihfX3B5eF9rX2F1dGhvciksIDAsIDAs IDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfYmxvY2tfZm9yX3RhcmdldF90aW1lLCBfX3B5eF9rX2Js b2NrX2Zvcl90YXJnZXRfdGltZSwgc2l6ZW9mKF9fcHl4X2tfYmxvY2tfZm9yX3RhcmdldF90aW1l KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19ibG9ja192c3luYywgX19weXhfa19ibG9j a192c3luYywgc2l6ZW9mKF9fcHl4X2tfYmxvY2tfdnN5bmMpLCAwLCAwLCAxLCAxfSwKKysgIHsm X19weXhfbl9zX2NhbGwsIF9fcHl4X2tfY2FsbCwgc2l6ZW9mKF9fcHl4X2tfY2FsbCksIDAsIDAs IDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfY2FsbGJhY2ssIF9fcHl4X2tfY2FsbGJhY2ssIHNpemVv ZihfX3B5eF9rX2NhbGxiYWNrKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19jbGllbnRf bWVzc2FnZSwgX19weXhfa19jbGllbnRfbWVzc2FnZSwgc2l6ZW9mKF9fcHl4X2tfY2xpZW50X21l c3NhZ2UpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2NsaW5lX2luX3RyYWNlYmFjaywg X19weXhfa19jbGluZV9pbl90cmFjZWJhY2ssIHNpemVvZihfX3B5eF9rX2NsaW5lX2luX3RyYWNl YmFjayksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfY2xvc2UsIF9fcHl4X2tfY2xvc2Us IHNpemVvZihfX3B5eF9rX2Nsb3NlKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19jb2Rl LCBfX3B5eF9rX2NvZGUsIHNpemVvZihfX3B5eF9rX2NvZGUpLCAwLCAwLCAxLCAxfSwKKysgIHsm X19weXhfbl9zX2NvbW1hbmRfZXJyb3IsIF9fcHl4X2tfY29tbWFuZF9lcnJvciwgc2l6ZW9mKF9f cHl4X2tfY29tbWFuZF9lcnJvciksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfY29tbWFu ZF9yZXBseSwgX19weXhfa19jb21tYW5kX3JlcGx5LCBzaXplb2YoX19weXhfa19jb21tYW5kX3Jl cGx5KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19jb25uZWN0b3JfaWQsIF9fcHl4X2tf Y29ubmVjdG9yX2lkLCBzaXplb2YoX19weXhfa19jb25uZWN0b3JfaWQpLCAwLCAwLCAxLCAxfSwK KysgIHsmX19weXhfbl9zX2NvdW50ZXIsIF9fcHl4X2tfY291bnRlciwgc2l6ZW9mKF9fcHl4X2tf Y291bnRlciksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfY3J0Y19pZCwgX19weXhfa19j cnRjX2lkLCBzaXplb2YoX19weXhfa19jcnRjX2lkKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4 X25fc19kYWVtb24sIF9fcHl4X2tfZGFlbW9uLCBzaXplb2YoX19weXhfa19kYWVtb24pLCAwLCAw LCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2RhdGEsIF9fcHl4X2tfZGF0YSwgc2l6ZW9mKF9fcHl4 X2tfZGF0YSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZGVidWcsIF9fcHl4X2tfZGVi dWcsIHNpemVvZihfX3B5eF9rX2RlYnVnKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19k ZWNvZGUsIF9fcHl4X2tfZGVjb2RlLCBzaXplb2YoX19weXhfa19kZWNvZGUpLCAwLCAwLCAxLCAx fSwKKysgIHsmX19weXhfbl9zX2RlZmF1bHQsIF9fcHl4X2tfZGVmYXVsdCwgc2l6ZW9mKF9fcHl4 X2tfZGVmYXVsdCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZGVwdGgsIF9fcHl4X2tf ZGVwdGgsIHNpemVvZihfX3B5eF9rX2RlcHRoKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25f c19kaWN0LCBfX3B5eF9rX2RpY3QsIHNpemVvZihfX3B5eF9rX2RpY3QpLCAwLCAwLCAxLCAxfSwK KysgIHsmX19weXhfbl9zX2RvYywgX19weXhfa19kb2MsIHNpemVvZihfX3B5eF9rX2RvYyksIDAs IDAsIDEsIDF9LAorKyAgeyZfX3B5eF9rcF9zX2RybU1vZGVBdG9taWNSZXEsIF9fcHl4X2tfZHJt TW9kZUF0b21pY1JlcSwgc2l6ZW9mKF9fcHl4X2tfZHJtTW9kZUF0b21pY1JlcSksIDAsIDAsIDEs IDB9LAorKyAgeyZfX3B5eF9uX3NfZHJtX2Rpc3BsYXksIF9fcHl4X2tfZHJtX2Rpc3BsYXksIHNp emVvZihfX3B5eF9rX2RybV9kaXNwbGF5KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19k cm1fb3NkX3NpemUsIF9fcHl4X2tfZHJtX29zZF9zaXplLCBzaXplb2YoX19weXhfa19kcm1fb3Nk X3NpemUpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2UsIF9fcHl4X2tfZSwgc2l6ZW9m KF9fcHl4X2tfZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZV9pLCBfX3B5eF9rX2Vf aSwgc2l6ZW9mKF9fcHl4X2tfZV9pKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19lbmFi bGUsIF9fcHl4X2tfZW5hYmxlLCBzaXplb2YoX19weXhfa19lbmFibGUpLCAwLCAwLCAxLCAxfSwK KysgIHsmX19weXhfbl9zX2VuY29kZSwgX19weXhfa19lbmNvZGUsIHNpemVvZihfX3B5eF9rX2Vu Y29kZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZW5kX2ZpbGUsIF9fcHl4X2tfZW5k X2ZpbGUsIHNpemVvZihfX3B5eF9rX2VuZF9maWxlKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4 X25fc19lbnVtZXJhdGUsIF9fcHl4X2tfZW51bWVyYXRlLCBzaXplb2YoX19weXhfa19lbnVtZXJh dGUpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2VvZiwgX19weXhfa19lb2YsIHNpemVv ZihfX3B5eF9rX2VvZiksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZXJyX2MsIF9fcHl4 X2tfZXJyX2MsIHNpemVvZihfX3B5eF9rX2Vycl9jKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4 X25fc19lcnJvciwgX19weXhfa19lcnJvciwgc2l6ZW9mKF9fcHl4X2tfZXJyb3IpLCAwLCAwLCAx LCAxfSwKKysgIHsmX19weXhfbl9zX2Vycm9ycywgX19weXhfa19lcnJvcnMsIHNpemVvZihfX3B5 eF9rX2Vycm9ycyksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZXJyb3JzX2xvY2Fsc193 cmFwcGVkLCBfX3B5eF9rX2Vycm9yc19sb2NhbHNfd3JhcHBlZCwgc2l6ZW9mKF9fcHl4X2tfZXJy b3JzX2xvY2Fsc193cmFwcGVkKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19ldmVudCwg X19weXhfa19ldmVudCwgc2l6ZW9mKF9fcHl4X2tfZXZlbnQpLCAwLCAwLCAxLCAxfSwKKysgIHsm X19weXhfbl9zX2ZhdGFsLCBfX3B5eF9rX2ZhdGFsLCBzaXplb2YoX19weXhfa19mYXRhbCksIDAs IDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZmJvLCBfX3B5eF9rX2Zibywgc2l6ZW9mKF9fcHl4 X2tfZmJvKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19mZCwgX19weXhfa19mZCwgc2l6 ZW9mKF9fcHl4X2tfZmQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2ZpbGVfbG9hZGVk LCBfX3B5eF9rX2ZpbGVfbG9hZGVkLCBzaXplb2YoX19weXhfa19maWxlX2xvYWRlZCksIDAsIDAs IDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZmxpcF95LCBfX3B5eF9rX2ZsaXBfeSwgc2l6ZW9mKF9f cHl4X2tfZmxpcF95KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19mbiwgX19weXhfa19m biwgc2l6ZW9mKF9fcHl4X2tfZm4pLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2Zvcm1h dF9mb3IsIF9fcHl4X2tfZm9ybWF0X2Zvciwgc2l6ZW9mKF9fcHl4X2tfZm9ybWF0X2ZvciksIDAs IDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZ2V0LCBfX3B5eF9rX2dldCwgc2l6ZW9mKF9fcHl4 X2tfZ2V0KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19nZXRfcHJvY19hZGRyZXNzLCBf X3B5eF9rX2dldF9wcm9jX2FkZHJlc3MsIHNpemVvZihfX3B5eF9rX2dldF9wcm9jX2FkZHJlc3Mp LCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2dldF9wcm9wZXJ0eSwgX19weXhfa19nZXRf cHJvcGVydHksIHNpemVvZihfX3B5eF9rX2dldF9wcm9wZXJ0eSksIDAsIDAsIDEsIDF9LAorKyAg eyZfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5X2FzeW5jLCBfX3B5eF9rX2dldF9wcm9wZXJ0eV9hc3lu Yywgc2l6ZW9mKF9fcHl4X2tfZ2V0X3Byb3BlcnR5X2FzeW5jKSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19nZXRfcHJvcGVydHlfcmVwbHksIF9fcHl4X2tfZ2V0X3Byb3BlcnR5X3JlcGx5 LCBzaXplb2YoX19weXhfa19nZXRfcHJvcGVydHlfcmVwbHkpLCAwLCAwLCAxLCAxfSwKKysgIHsm X19weXhfbl9zX2dldHN0YXRlLCBfX3B5eF9rX2dldHN0YXRlLCBzaXplb2YoX19weXhfa19nZXRz dGF0ZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfaCwgX19weXhfa19oLCBzaXplb2Yo X19weXhfa19oKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X2twX3NfaWNjX2Jsb2Jfc2hvdWxk X2JlX2FfYnl0ZXNfaW5zdGEsIF9fcHl4X2tfaWNjX2Jsb2Jfc2hvdWxkX2JlX2FfYnl0ZXNfaW5z dGEsIHNpemVvZihfX3B5eF9rX2ljY19ibG9iX3Nob3VsZF9iZV9hX2J5dGVzX2luc3RhKSwgMCwg MCwgMSwgMH0sCisrICB7Jl9fcHl4X25fc19pZCwgX19weXhfa19pZCwgc2l6ZW9mKF9fcHl4X2tf aWQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2lkbGUsIF9fcHl4X2tfaWRsZSwgc2l6 ZW9mKF9fcHl4X2tfaWRsZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfaW1wb3J0LCBf X3B5eF9rX2ltcG9ydCwgc2l6ZW9mKF9fcHl4X2tfaW1wb3J0KSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19pbmZvLCBfX3B5eF9rX2luZm8sIHNpemVvZihfX3B5eF9rX2luZm8pLCAwLCAw LCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2luaXQsIF9fcHl4X2tfaW5pdCwgc2l6ZW9mKF9fcHl4 X2tfaW5pdCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfaW5pdGlhbGl6ZSwgX19weXhf a19pbml0aWFsaXplLCBzaXplb2YoX19weXhfa19pbml0aWFsaXplKSwgMCwgMCwgMSwgMX0sCisr ICB7Jl9fcHl4X25fc19pbnRlcm5hbF9mb3JtYXQsIF9fcHl4X2tfaW50ZXJuYWxfZm9ybWF0LCBz aXplb2YoX19weXhfa19pbnRlcm5hbF9mb3JtYXQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhf bl9zX2ludmFsaWRfcGFyYW1ldGVyLCBfX3B5eF9rX2ludmFsaWRfcGFyYW1ldGVyLCBzaXplb2Yo X19weXhfa19pbnZhbGlkX3BhcmFtZXRlciksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nf aXNfcHkzLCBfX3B5eF9rX2lzX3B5Mywgc2l6ZW9mKF9fcHl4X2tfaXNfcHkzKSwgMCwgMCwgMSwg MX0sCisrICB7Jl9fcHl4X25fc19pc3NodXRkb3duLCBfX3B5eF9rX2lzc2h1dGRvd24sIHNpemVv ZihfX3B5eF9rX2lzc2h1dGRvd24pLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2ssIF9f cHl4X2tfaywgc2l6ZW9mKF9fcHl4X2tfayksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nf a2V5cywgX19weXhfa19rZXlzLCBzaXplb2YoX19weXhfa19rZXlzKSwgMCwgMCwgMSwgMX0sCisr ICB7Jl9fcHl4X25fc19rdywgX19weXhfa19rdywgc2l6ZW9mKF9fcHl4X2tfa3cpLCAwLCAwLCAx LCAxfSwKKysgIHsmX19weXhfa3Bfc19saWJtcHZfdmVyc2lvbl9pc19pbmNvcnJlY3RfUmVxdSwg X19weXhfa19saWJtcHZfdmVyc2lvbl9pc19pbmNvcnJlY3RfUmVxdSwgc2l6ZW9mKF9fcHl4X2tf bGlibXB2X3ZlcnNpb25faXNfaW5jb3JyZWN0X1JlcXUpLCAwLCAwLCAxLCAwfSwKKysgIHsmX19w eXhfbl9zX2xvYWRfY29uZmlnLCBfX3B5eF9rX2xvYWRfY29uZmlnLCBzaXplb2YoX19weXhfa19s b2FkX2NvbmZpZyksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfbG9hZGluZ19mYWlsZWQs IF9fcHl4X2tfbG9hZGluZ19mYWlsZWQsIHNpemVvZihfX3B5eF9rX2xvYWRpbmdfZmFpbGVkKSwg MCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19sb2NrLCBfX3B5eF9rX2xvY2ssIHNpemVvZihf X3B5eF9rX2xvY2spLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2xvZ19tZXNzYWdlLCBf X3B5eF9rX2xvZ19tZXNzYWdlLCBzaXplb2YoX19weXhfa19sb2dfbWVzc2FnZSksIDAsIDAsIDEs IDF9LAorKyAgeyZfX3B5eF9uX3NfbWFpbiwgX19weXhfa19tYWluLCBzaXplb2YoX19weXhfa19t YWluKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19tZXRhY2xhc3MsIF9fcHl4X2tfbWV0 YWNsYXNzLCBzaXplb2YoX19weXhfa19tZXRhY2xhc3MpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19w eXhfbl9zX21vZHVsZSwgX19weXhfa19tb2R1bGUsIHNpemVvZihfX3B5eF9rX21vZHVsZSksIDAs IDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfbXB2LCBfX3B5eF9rX21wdiwgc2l6ZW9mKF9fcHl4 X2tfbXB2KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19tcHZfY2FsbGJhY2ssIF9fcHl4 X2tfbXB2X2NhbGxiYWNrLCBzaXplb2YoX19weXhfa19tcHZfY2FsbGJhY2spLCAwLCAwLCAxLCAx fSwKKysgIHsmX19weXhfbl9zX25hbWUsIF9fcHl4X2tfbmFtZSwgc2l6ZW9mKF9fcHl4X2tfbmFt ZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfbmV3LCBfX3B5eF9rX25ldywgc2l6ZW9m KF9fcHl4X2tfbmV3KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19ubywgX19weXhfa19u bywgc2l6ZW9mKF9fcHl4X2tfbm8pLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfa3Bfc19ub19k ZWZhdWx0X19fcmVkdWNlX19fZHVlX3RvX25vbiwgX19weXhfa19ub19kZWZhdWx0X19fcmVkdWNl X19fZHVlX3RvX25vbiwgc2l6ZW9mKF9fcHl4X2tfbm9fZGVmYXVsdF9fX3JlZHVjZV9fX2R1ZV90 b19ub24pLCAwLCAwLCAxLCAwfSwKKysgIHsmX19weXhfbl9zX25vbWVtLCBfX3B5eF9rX25vbWVt LCBzaXplb2YoX19weXhfa19ub21lbSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfbm9u ZSwgX19weXhfa19ub25lLCBzaXplb2YoX19weXhfa19ub25lKSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19ub3RfZm91bmQsIF9fcHl4X2tfbm90X2ZvdW5kLCBzaXplb2YoX19weXhfa19u b3RfZm91bmQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX25vdF9pbXBsZW1lbnRlZCwg X19weXhfa19ub3RfaW1wbGVtZW50ZWQsIHNpemVvZihfX3B5eF9rX25vdF9pbXBsZW1lbnRlZCks IDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfbm90aGluZ190b19wbGF5LCBfX3B5eF9rX25v dGhpbmdfdG9fcGxheSwgc2l6ZW9mKF9fcHl4X2tfbm90aGluZ190b19wbGF5KSwgMCwgMCwgMSwg MX0sCisrICB7Jl9fcHl4X25fc19vYmplY3QsIF9fcHl4X2tfb2JqZWN0LCBzaXplb2YoX19weXhf a19vYmplY3QpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX29ic2VydmVfcHJvcGVydHks IF9fcHl4X2tfb2JzZXJ2ZV9wcm9wZXJ0eSwgc2l6ZW9mKF9fcHl4X2tfb2JzZXJ2ZV9wcm9wZXJ0 eSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfb2JzZXJ2ZWQsIF9fcHl4X2tfb2JzZXJ2 ZWQsIHNpemVvZihfX3B5eF9rX29ic2VydmVkKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25f c19vcGVuZ2wsIF9fcHl4X2tfb3BlbmdsLCBzaXplb2YoX19weXhfa19vcGVuZ2wpLCAwLCAwLCAx LCAxfSwKKysgIHsmX19weXhfbl9zX29wZW5nbF9mYm8sIF9fcHl4X2tfb3BlbmdsX2Zibywgc2l6 ZW9mKF9fcHl4X2tfb3BlbmdsX2ZibyksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfb3Bl bmdsX2luaXRfcGFyYW1zLCBfX3B5eF9rX29wZW5nbF9pbml0X3BhcmFtcywgc2l6ZW9mKF9fcHl4 X2tfb3BlbmdsX2luaXRfcGFyYW1zKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19vcHRp b25fZXJyb3IsIF9fcHl4X2tfb3B0aW9uX2Vycm9yLCBzaXplb2YoX19weXhfa19vcHRpb25fZXJy b3IpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX29wdGlvbl9mb3JtYXQsIF9fcHl4X2tf b3B0aW9uX2Zvcm1hdCwgc2l6ZW9mKF9fcHl4X2tfb3B0aW9uX2Zvcm1hdCksIDAsIDAsIDEsIDF9 LAorKyAgeyZfX3B5eF9uX3NfcGlja2xlLCBfX3B5eF9rX3BpY2tsZSwgc2l6ZW9mKF9fcHl4X2tf cGlja2xlKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19wbGF5YmFja19yZXN0YXJ0LCBf X3B5eF9rX3BsYXliYWNrX3Jlc3RhcnQsIHNpemVvZihfX3B5eF9rX3BsYXliYWNrX3Jlc3RhcnQp LCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3ByZXBhcmUsIF9fcHl4X2tfcHJlcGFyZSwg c2l6ZW9mKF9fcHl4X2tfcHJlcGFyZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfcHJl c2VudCwgX19weXhfa19wcmVzZW50LCBzaXplb2YoX19weXhfa19wcmVzZW50KSwgMCwgMCwgMSwg MX0sCisrICB7Jl9fcHl4X25fc19wcm9wLCBfX3B5eF9rX3Byb3AsIHNpemVvZihfX3B5eF9rX3By b3ApLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3Byb3BlcnR5X2NoYW5nZSwgX19weXhf a19wcm9wZXJ0eV9jaGFuZ2UsIHNpemVvZihfX3B5eF9rX3Byb3BlcnR5X2NoYW5nZSksIDAsIDAs IDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfcHJvcGVydHlfZXJyb3IsIF9fcHl4X2tfcHJvcGVydHlf ZXJyb3IsIHNpemVvZihfX3B5eF9rX3Byb3BlcnR5X2Vycm9yKSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19wcm9wZXJ0eV9mb3JtYXQsIF9fcHl4X2tfcHJvcGVydHlfZm9ybWF0LCBzaXpl b2YoX19weXhfa19wcm9wZXJ0eV9mb3JtYXQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9z X3Byb3BlcnR5X3VuYXZhaWxhYmxlLCBfX3B5eF9rX3Byb3BlcnR5X3VuYXZhaWxhYmxlLCBzaXpl b2YoX19weXhfa19wcm9wZXJ0eV91bmF2YWlsYWJsZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5 eF9rcF9zX3B5bXB2X2Vycm9yX2R1cmluZ19jYWxsYmFja19zLCBfX3B5eF9rX3B5bXB2X2Vycm9y X2R1cmluZ19jYWxsYmFja19zLCBzaXplb2YoX19weXhfa19weW1wdl9lcnJvcl9kdXJpbmdfY2Fs bGJhY2tfcyksIDAsIDAsIDEsIDB9LAorKyAgeyZfX3B5eF9uX3NfcHl4X1BpY2tsZUVycm9yLCBf X3B5eF9rX3B5eF9QaWNrbGVFcnJvciwgc2l6ZW9mKF9fcHl4X2tfcHl4X1BpY2tsZUVycm9yKSwg MCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19weXhfY2hlY2tzdW0sIF9fcHl4X2tfcHl4X2No ZWNrc3VtLCBzaXplb2YoX19weXhfa19weXhfY2hlY2tzdW0pLCAwLCAwLCAxLCAxfSwKKysgIHsm X19weXhfbl9zX3B5eF9yZXN1bHQsIF9fcHl4X2tfcHl4X3Jlc3VsdCwgc2l6ZW9mKF9fcHl4X2tf cHl4X3Jlc3VsdCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfcHl4X3N0YXRlLCBfX3B5 eF9rX3B5eF9zdGF0ZSwgc2l6ZW9mKF9fcHl4X2tfcHl4X3N0YXRlKSwgMCwgMCwgMSwgMX0sCisr ICB7Jl9fcHl4X25fc19weXhfdHlwZSwgX19weXhfa19weXhfdHlwZSwgc2l6ZW9mKF9fcHl4X2tf cHl4X3R5cGUpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3B5eF91bnBpY2tsZV9FbmRP ZkZpbGVSZWFjaGVkLCBfX3B5eF9rX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkLCBzaXpl b2YoX19weXhfa19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCksIDAsIDAsIDEsIDF9LAor KyAgeyZfX3B5eF9uX3NfcHl4X3VucGlja2xlX0V2ZW50LCBfX3B5eF9rX3B5eF91bnBpY2tsZV9F dmVudCwgc2l6ZW9mKF9fcHl4X2tfcHl4X3VucGlja2xlX0V2ZW50KSwgMCwgMCwgMSwgMX0sCisr ICB7Jl9fcHl4X25fc19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgX19weXhfa19weXhfdW5waWNr bGVfTG9nTWVzc2FnZSwgc2l6ZW9mKF9fcHl4X2tfcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UpLCAw LCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgX19weXhf a19weXhfdW5waWNrbGVfUHJvcGVydHksIHNpemVvZihfX3B5eF9rX3B5eF91bnBpY2tsZV9Qcm9w ZXJ0eSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfcHl4X3VucGlja2xlX1JlbmRlckZy YW1lSW5mbywgX19weXhfa19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCBzaXplb2YoX19w eXhfa19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9f cHl4X25fc19weXhfdnRhYmxlLCBfX3B5eF9rX3B5eF92dGFibGUsIHNpemVvZihfX3B5eF9rX3B5 eF92dGFibGUpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3F1YWxuYW1lLCBfX3B5eF9r X3F1YWxuYW1lLCBzaXplb2YoX19weXhfa19xdWFsbmFtZSksIDAsIDAsIDEsIDF9LAorKyAgeyZf X3B5eF9uX3NfcXVldWVfZnVsbCwgX19weXhfa19xdWV1ZV9mdWxsLCBzaXplb2YoX19weXhfa19x dWV1ZV9mdWxsKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19xdWl0LCBfX3B5eF9rX3F1 aXQsIHNpemVvZihfX3B5eF9rX3F1aXQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3Jh bmdlLCBfX3B5eF9rX3JhbmdlLCBzaXplb2YoX19weXhfa19yYW5nZSksIDAsIDAsIDEsIDF9LAor KyAgeyZfX3B5eF9uX3NfcmVkcmF3LCBfX3B5eF9rX3JlZHJhdywgc2l6ZW9mKF9fcHl4X2tfcmVk cmF3KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19yZWR1Y2UsIF9fcHl4X2tfcmVkdWNl LCBzaXplb2YoX19weXhfa19yZWR1Y2UpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3Jl ZHVjZV9jeXRob24sIF9fcHl4X2tfcmVkdWNlX2N5dGhvbiwgc2l6ZW9mKF9fcHl4X2tfcmVkdWNl X2N5dGhvbiksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfcmVkdWNlX2V4LCBfX3B5eF9r X3JlZHVjZV9leCwgc2l6ZW9mKF9fcHl4X2tfcmVkdWNlX2V4KSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19yZWxlYXNlLCBfX3B5eF9rX3JlbGVhc2UsIHNpemVvZihfX3B5eF9rX3JlbGVh c2UpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3JlbW92ZSwgX19weXhfa19yZW1vdmUs IHNpemVvZihfX3B5eF9rX3JlbW92ZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfcmVu ZGVyLCBfX3B5eF9rX3JlbmRlciwgc2l6ZW9mKF9fcHl4X2tfcmVuZGVyKSwgMCwgMCwgMSwgMX0s CisrICB7Jl9fcHl4X25fc19yZW5kZXJfZmQsIF9fcHl4X2tfcmVuZGVyX2ZkLCBzaXplb2YoX19w eXhfa19yZW5kZXJfZmQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3JlcGVhdCwgX19w eXhfa19yZXBlYXQsIHNpemVvZihfX3B5eF9rX3JlcGVhdCksIDAsIDAsIDEsIDF9LAorKyAgeyZf X3B5eF9uX3NfcmVxdWVzdF9ldmVudCwgX19weXhfa19yZXF1ZXN0X2V2ZW50LCBzaXplb2YoX19w eXhfa19yZXF1ZXN0X2V2ZW50KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19ydW4sIF9f cHl4X2tfcnVuLCBzaXplb2YoX19weXhfa19ydW4pLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhf bl9zX3MsIF9fcHl4X2tfcywgc2l6ZW9mKF9fcHl4X2tfcyksIDAsIDAsIDEsIDF9LAorKyAgeyZf X3B5eF9uX3Nfc2VlaywgX19weXhfa19zZWVrLCBzaXplb2YoX19weXhfa19zZWVrKSwgMCwgMCwg MSwgMX0sCisrICB7Jl9fcHl4X25fc19zZWxmLCBfX3B5eF9rX3NlbGYsIHNpemVvZihfX3B5eF9r X3NlbGYpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfa3Bfc19zZWxmX19jdHhfY2Fubm90X2Jl X2NvbnZlcnRlZF90bywgX19weXhfa19zZWxmX19jdHhfY2Fubm90X2JlX2NvbnZlcnRlZF90bywg c2l6ZW9mKF9fcHl4X2tfc2VsZl9fY3R4X2Nhbm5vdF9iZV9jb252ZXJ0ZWRfdG8pLCAwLCAwLCAx LCAwfSwKKysgIHsmX19weXhfa3Bfc19zZWxmX3BhcmFtc19jYW5ub3RfYmVfY29udmVydGVkLCBf X3B5eF9rX3NlbGZfcGFyYW1zX2Nhbm5vdF9iZV9jb252ZXJ0ZWQsIHNpemVvZihfX3B5eF9rX3Nl bGZfcGFyYW1zX2Nhbm5vdF9iZV9jb252ZXJ0ZWQpLCAwLCAwLCAxLCAwfSwKKysgIHsmX19weXhf bl9zX3NldCwgX19weXhfa19zZXQsIHNpemVvZihfX3B5eF9rX3NldCksIDAsIDAsIDEsIDF9LAor KyAgeyZfX3B5eF9uX3Nfc2V0X2FtYmllbnRfbGlnaHQsIF9fcHl4X2tfc2V0X2FtYmllbnRfbGln aHQsIHNpemVvZihfX3B5eF9rX3NldF9hbWJpZW50X2xpZ2h0KSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19zZXRfaWNjX3Byb2ZpbGUsIF9fcHl4X2tfc2V0X2ljY19wcm9maWxlLCBzaXpl b2YoX19weXhfa19zZXRfaWNjX3Byb2ZpbGUpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9z X3NldF9sb2dfbGV2ZWwsIF9fcHl4X2tfc2V0X2xvZ19sZXZlbCwgc2l6ZW9mKF9fcHl4X2tfc2V0 X2xvZ19sZXZlbCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfc2V0X29wdGlvbiwgX19w eXhfa19zZXRfb3B0aW9uLCBzaXplb2YoX19weXhfa19zZXRfb3B0aW9uKSwgMCwgMCwgMSwgMX0s CisrICB7Jl9fcHl4X25fc19zZXRfcHJvcGVydHksIF9fcHl4X2tfc2V0X3Byb3BlcnR5LCBzaXpl b2YoX19weXhfa19zZXRfcHJvcGVydHkpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3Nl dF9wcm9wZXJ0eV9yZXBseSwgX19weXhfa19zZXRfcHJvcGVydHlfcmVwbHksIHNpemVvZihfX3B5 eF9rX3NldF9wcm9wZXJ0eV9yZXBseSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfc2V0 c3RhdGUsIF9fcHl4X2tfc2V0c3RhdGUsIHNpemVvZihfX3B5eF9rX3NldHN0YXRlKSwgMCwgMCwg MSwgMX0sCisrICB7Jl9fcHl4X25fc19zZXRzdGF0ZV9jeXRob24sIF9fcHl4X2tfc2V0c3RhdGVf Y3l0aG9uLCBzaXplb2YoX19weXhfa19zZXRzdGF0ZV9jeXRob24pLCAwLCAwLCAxLCAxfSwKKysg IHsmX19weXhfbl9zX3NodXRkb3duLCBfX3B5eF9rX3NodXRkb3duLCBzaXplb2YoX19weXhfa19z aHV0ZG93biksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfc2tpcF9yZW5kZXJpbmcsIF9f cHl4X2tfc2tpcF9yZW5kZXJpbmcsIHNpemVvZihfX3B5eF9rX3NraXBfcmVuZGVyaW5nKSwgMCwg MCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19zdGFydCwgX19weXhfa19zdGFydCwgc2l6ZW9mKF9f cHl4X2tfc3RhcnQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3N0YXJ0X2ZpbGUsIF9f cHl4X2tfc3RhcnRfZmlsZSwgc2l6ZW9mKF9fcHl4X2tfc3RhcnRfZmlsZSksIDAsIDAsIDEsIDF9 LAorKyAgeyZfX3B5eF9uX3Nfc3RkZXJyLCBfX3B5eF9rX3N0ZGVyciwgc2l6ZW9mKF9fcHl4X2tf c3RkZXJyKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19zdHJkZWMsIF9fcHl4X2tfc3Ry ZGVjLCBzaXplb2YoX19weXhfa19zdHJkZWMpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9z X3N0cmRlY19lcnIsIF9fcHl4X2tfc3RyZGVjX2Vyciwgc2l6ZW9mKF9fcHl4X2tfc3RyZGVjX2Vy ciksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfc3RyZW5jLCBfX3B5eF9rX3N0cmVuYywg c2l6ZW9mKF9fcHl4X2tfc3RyZW5jKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19zdHJp Y3QsIF9fcHl4X2tfc3RyaWN0LCBzaXplb2YoX19weXhfa19zdHJpY3QpLCAwLCAwLCAxLCAxfSwK KysgIHsmX19weXhfa3Bfc19zdHJpbmdzb3VyY2UsIF9fcHl4X2tfc3RyaW5nc291cmNlLCBzaXpl b2YoX19weXhfa19zdHJpbmdzb3VyY2UpLCAwLCAwLCAxLCAwfSwKKysgIHsmX19weXhfbl9zX3N1 Y2Nlc3MsIF9fcHl4X2tfc3VjY2Vzcywgc2l6ZW9mKF9fcHl4X2tfc3VjY2VzcyksIDAsIDAsIDEs IDF9LAorKyAgeyZfX3B5eF9uX3Nfc3Vycm9nYXRlZXNjYXBlLCBfX3B5eF9rX3N1cnJvZ2F0ZWVz Y2FwZSwgc2l6ZW9mKF9fcHl4X2tfc3Vycm9nYXRlZXNjYXBlKSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19zeXMsIF9fcHl4X2tfc3lzLCBzaXplb2YoX19weXhfa19zeXMpLCAwLCAwLCAx LCAxfSwKKysgIHsmX19weXhfbl9zX3RhcmdldF90aW1lLCBfX3B5eF9rX3RhcmdldF90aW1lLCBz aXplb2YoX19weXhfa190YXJnZXRfdGltZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nf dGVzdCwgX19weXhfa190ZXN0LCBzaXplb2YoX19weXhfa190ZXN0KSwgMCwgMCwgMSwgMX0sCisr ICB7Jl9fcHl4X25fc190aHJlYWRpbmcsIF9fcHl4X2tfdGhyZWFkaW5nLCBzaXplb2YoX19weXhf a190aHJlYWRpbmcpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3RpY2ssIF9fcHl4X2tf dGljaywgc2l6ZW9mKF9fcHl4X2tfdGljayksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nf dGltZW91dCwgX19weXhfa190aW1lb3V0LCBzaXplb2YoX19weXhfa190aW1lb3V0KSwgMCwgMCwg MSwgMX0sCisrICB7Jl9fcHl4X25fc190cmFjZSwgX19weXhfa190cmFjZSwgc2l6ZW9mKF9fcHl4 X2tfdHJhY2UpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3VuaW5pdGlhbGl6ZWQsIF9f cHl4X2tfdW5pbml0aWFsaXplZCwgc2l6ZW9mKF9fcHl4X2tfdW5pbml0aWFsaXplZCksIDAsIDAs IDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfdW5rbm93bl9mb3JtYXQsIF9fcHl4X2tfdW5rbm93bl9m b3JtYXQsIHNpemVvZihfX3B5eF9rX3Vua25vd25fZm9ybWF0KSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc191bm9ic2VydmVfcHJvcGVydHksIF9fcHl4X2tfdW5vYnNlcnZlX3Byb3BlcnR5 LCBzaXplb2YoX19weXhfa191bm9ic2VydmVfcHJvcGVydHkpLCAwLCAwLCAxLCAxfSwKKysgIHsm X19weXhfbl9zX3Vuc3VwcG9ydGVkLCBfX3B5eF9rX3Vuc3VwcG9ydGVkLCBzaXplb2YoX19weXhf a191bnN1cHBvcnRlZCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfdXBkYXRlLCBfX3B5 eF9rX3VwZGF0ZSwgc2l6ZW9mKF9fcHl4X2tfdXBkYXRlKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9f cHl4X2twX3NfdXRmXzgsIF9fcHl4X2tfdXRmXzgsIHNpemVvZihfX3B5eF9rX3V0Zl84KSwgMCwg MCwgMSwgMH0sCisrICB7Jl9fcHl4X25fc192LCBfX3B5eF9rX3YsIHNpemVvZihfX3B5eF9rX3Yp LCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3ZhbHVlLCBfX3B5eF9rX3ZhbHVlLCBzaXpl b2YoX19weXhfa192YWx1ZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfdmFsdWVzLCBf X3B5eF9rX3ZhbHVlcywgc2l6ZW9mKF9fcHl4X2tfdmFsdWVzKSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc192ZXJzaW9uLCBfX3B5eF9rX3ZlcnNpb24sIHNpemVvZihfX3B5eF9rX3ZlcnNp b24pLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3ZlcnNpb25faW5mbywgX19weXhfa192 ZXJzaW9uX2luZm8sIHNpemVvZihfX3B5eF9rX3ZlcnNpb25faW5mbyksIDAsIDAsIDEsIDF9LAor KyAgeyZfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9rX3ZpZGN1dHRlcl9saWJz X21wdiwgc2l6ZW9mKF9fcHl4X2tfdmlkY3V0dGVyX2xpYnNfbXB2KSwgMCwgMCwgMSwgMX0sCisr ICB7Jl9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfa192aWRj dXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBzaXplb2YoX19weXhfa192aWRjdXR0ZXJfbGlic19w eW1wdl9tcHZfcHl4KSwgMCwgMCwgMSwgMH0sCisrICB7Jl9fcHl4X25fc192aWRlb19yZWNvbmZp ZywgX19weXhfa192aWRlb19yZWNvbmZpZywgc2l6ZW9mKF9fcHl4X2tfdmlkZW9fcmVjb25maWcp LCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3ZvX2luaXRfZmFpbGVkLCBfX3B5eF9rX3Zv X2luaXRfZmFpbGVkLCBzaXplb2YoX19weXhfa192b19pbml0X2ZhaWxlZCksIDAsIDAsIDEsIDF9 LAorKyAgeyZfX3B5eF9uX3NfdywgX19weXhfa193LCBzaXplb2YoX19weXhfa193KSwgMCwgMCwg MSwgMX0sCisrICB7Jl9fcHl4X25fc193YXJuLCBfX3B5eF9rX3dhcm4sIHNpemVvZihfX3B5eF9r X3dhcm4pLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3dhcm5pbmdzLCBfX3B5eF9rX3dh cm5pbmdzLCBzaXplb2YoX19weXhfa193YXJuaW5ncyksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5 eF9uX3Nfd2xfZGlzcGxheSwgX19weXhfa193bF9kaXNwbGF5LCBzaXplb2YoX19weXhfa193bF9k aXNwbGF5KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc193cmFwcGVkLCBfX3B5eF9rX3dy YXBwZWQsIHNpemVvZihfX3B5eF9rX3dyYXBwZWQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhf bl9zX3dyaXRlLCBfX3B5eF9rX3dyaXRlLCBzaXplb2YoX19weXhfa193cml0ZSksIDAsIDAsIDEs IDF9LAorKyAgeyZfX3B5eF9uX3NfeDExX2Rpc3BsYXksIF9fcHl4X2tfeDExX2Rpc3BsYXksIHNp emVvZihfX3B5eF9rX3gxMV9kaXNwbGF5KSwgMCwgMCwgMSwgMX0sCisrICB7MCwgMCwgMCwgMCwg MCwgMCwgMH0KKyt9OworK3N0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfSW5pdENh Y2hlZEJ1aWx0aW5zKHZvaWQpIHsKKysgIF9fcHl4X2J1aWx0aW5fSW1wb3J0RXJyb3IgPSBfX1B5 eF9HZXRCdWlsdGluTmFtZShfX3B5eF9uX3NfSW1wb3J0RXJyb3IpOyBpZiAoIV9fcHl4X2J1aWx0 aW5fSW1wb3J0RXJyb3IpIF9fUFlYX0VSUigwLCA0NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF9idWlsdGluX29iamVjdCA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19vYmplY3Qp OyBpZiAoIV9fcHl4X2J1aWx0aW5fb2JqZWN0KSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X2J1aWx0aW5fVW5pY29kZURlY29kZUVycm9yID0gX19QeXhfR2V0QnVp bHRpbk5hbWUoX19weXhfbl9zX1VuaWNvZGVEZWNvZGVFcnJvcik7IGlmICghX19weXhfYnVpbHRp bl9Vbmljb2RlRGVjb2RlRXJyb3IpIF9fUFlYX0VSUigwLCA1OCwgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF9idWlsdGluX1VuaWNvZGVFbmNvZGVFcnJvciA9IF9fUHl4X0dldEJ1aWx0aW5OYW1l KF9fcHl4X25fc19Vbmljb2RlRW5jb2RlRXJyb3IpOyBpZiAoIV9fcHl4X2J1aWx0aW5fVW5pY29k ZUVuY29kZUVycm9yKSBfX1BZWF9FUlIoMCwgNjYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf YnVpbHRpbl9yYW5nZSA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19yYW5nZSk7IGlm ICghX19weXhfYnVpbHRpbl9yYW5nZSkgX19QWVhfRVJSKDAsIDIyMiwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF9idWlsdGluX2lkID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX2lk KTsgaWYgKCFfX3B5eF9idWlsdGluX2lkKSBfX1BZWF9FUlIoMCwgMzAzLCBfX3B5eF9MMV9lcnJv cikKKysgIF9fcHl4X2J1aWx0aW5fZW51bWVyYXRlID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19w eXhfbl9zX2VudW1lcmF0ZSk7IGlmICghX19weXhfYnVpbHRpbl9lbnVtZXJhdGUpIF9fUFlYX0VS UigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfYnVpbHRpbl9UeXBlRXJyb3IgPSBf X1B5eF9HZXRCdWlsdGluTmFtZShfX3B5eF9uX3NfVHlwZUVycm9yKTsgaWYgKCFfX3B5eF9idWls dGluX1R5cGVFcnJvcikgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgcmV0dXJu IDA7CisrICBfX3B5eF9MMV9lcnJvcjo7CisrICByZXR1cm4gLTE7CisrfQorIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyCisrc3RhdGljIENZVEhPTl9TTUFMTF9DT0RF IGludCBfX1B5eF9Jbml0Q2FjaGVkQ29uc3RhbnRzKHZvaWQpIHsKKysgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19QeXhfSW5pdENh Y2hlZENvbnN0YW50cyIsIDApOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMxOQorICAqIAorLSAqIGltcG9ydCBjeXRob24KKy0gKiBpbXBvcnQgc3lzLCB3YXJuaW5n cyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogZnJvbSB0aHJlYWRpbmcgaW1wb3J0 IFRocmVhZCwgU2VtYXBob3JlCistICogZnJvbSBsaWJjLnN0ZGxpYiBjaW1wb3J0IG1hbGxvYywg ZnJlZQorKyAqIGRlZiBfZXJyb3JzKGZuKToKKysgKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB2ID0gZm4oKmssICoq a3cpCisrICogICAgICAgICBpZiB2IDwgMDoKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0lt cG9ydChfX3B5eF9uX3Nfc3lzLCAwLCAtMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDIyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19zeXMsIF9fcHl4X3Rf MSkgPCAwKSBfX1BZWF9FUlIoMCwgMjIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX3B5eF90XzEgPSBfX1B5eF9JbXBvcnQo X19weXhfbl9zX3dhcm5pbmdzLCAwLCAtMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDIyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc193YXJuaW5ncywgX19w eXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAyMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9fcHl4X3R1cGxlXyA9IFB5VHVw bGVfUGFjaygzLCBfX3B5eF9uX3NfaywgX19weXhfbl9zX2t3LCBfX3B5eF9uX3Nfdik7IGlmICh1 bmxpa2VseSghX19weXhfdHVwbGVfKSkgX19QWVhfRVJSKDAsIDMxOSwgX19weXhfTDFfZXJyb3Ip CisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfKTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhf dHVwbGVfKTsKKysgIF9fcHl4X2NvZGVvYmpfXzIgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9O ZXcoMCwgMCwgMywgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMU3xDT19WQVJBUkdTfENPX1ZB UktFWVdPUkRTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF90dXBsZV8sIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3Nf d3JhcHBlZCwgMzE5LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29k ZW9ial9fMikpIF9fUFlYX0VSUigwLCAzMTksIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzCistICogaW1wb3J0IGN5dGhvbgorLSAqIGlt cG9ydCBzeXMsIHdhcm5pbmdzCistICogZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZCwgU2Vt YXBob3JlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiBmcm9tIGxpYmMuc3RkbGli IGNpbXBvcnQgbWFsbG9jLCBmcmVlCistICogZnJvbSBsaWJjLnN0cmluZyBjaW1wb3J0IHN0cmNw eSwgc3RybGVuLCBtZW1zZXQKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjIKKysgKiBkZWYgX19y ZWR1Y2VfY3l0aG9uX18oc2VsZik6CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVs dCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhf c3RhdGUpOgorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2VfXyBk dWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IFB5TGlz dF9OZXcoMik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIzLCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfSU5DUkVG KF9fcHl4X25fc19UaHJlYWQpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF9uX3NfVGhyZWFkKTsK Ky0gIFB5TGlzdF9TRVRfSVRFTShfX3B5eF90XzEsIDAsIF9fcHl4X25fc19UaHJlYWQpOworLSAg X19QeXhfSU5DUkVGKF9fcHl4X25fc19TZW1hcGhvcmUpOworLSAgX19QeXhfR0lWRVJFRihfX3B5 eF9uX3NfU2VtYXBob3JlKTsKKy0gIFB5TGlzdF9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4 X25fc19TZW1hcGhvcmUpOworLSAgX19weXhfdF8yID0gX19QeXhfSW1wb3J0KF9fcHl4X25fc190 aHJlYWRpbmcsIF9fcHl4X3RfMSwgLTEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlY X0VSUigwLCAyMywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgX19weXhfdF8x ID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzIsIF9fcHl4X25fc19UaHJlYWQpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMywgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBf X3B5eF9uX3NfVGhyZWFkLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDIzLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAg X19weXhfdF8xID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzIsIF9fcHl4X25fc19TZW1hcGhv cmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMywgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIGlmIChQeURpY3RfU2V0SXRl bShfX3B5eF9kLCBfX3B5eF9uX3NfU2VtYXBob3JlLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJS KDAsIDIzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisr ICBfX3B5eF90dXBsZV9fMyA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9rcF9zX25vX2RlZmF1bHRf X19yZWR1Y2VfX19kdWVfdG9fbm9uKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMykpIF9f UFlYX0VSUigxLCAyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBs ZV9fMyk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18zKTsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMAorLSAqIGZyb20gY2xpZW50IGNpbXBvcnQgKgor LSAqIAorLSAqIF9fdmVyc2lvbl9fID0gIjAuMy4wIiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogX19hdXRob3JfXyA9ICJBbmRyZSBEIgorLSAqIAorKyAgLyogIih0cmVlIGZyYWdt ZW50KSI6NAorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2VfXyBk dWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25f XyhzZWxmLCBfX3B5eF9zdGF0ZSk6CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVs dCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisgICovCistICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19w eXhfbl9zX3ZlcnNpb24sIF9fcHl4X2twX3NfMF8zXzApIDwgMCkgX19QWVhfRVJSKDAsIDMwLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX180ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4 X2twX3Nfbm9fZGVmYXVsdF9fX3JlZHVjZV9fX2R1ZV90b19ub24pOyBpZiAodW5saWtlbHkoIV9f cHl4X3R1cGxlX180KSkgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf R09UUkVGKF9fcHl4X3R1cGxlX180KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzQp OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxCistICogCistICog X192ZXJzaW9uX18gPSAiMC4zLjAiCistICogX19hdXRob3JfXyA9ICJBbmRyZSBEIiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogX1JFUVVJUkVEX0NBUElfTUFKT1IgPSAx CisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoyCisrICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNl bGYpOgorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252 ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0 ZSk6CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZl cnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKyAgKi8KKy0gIGlmIChQeURp Y3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfYXV0aG9yLCBfX3B5eF9rcF9zX0FuZHJlX0Qp IDwgMCkgX19QWVhfRVJSKDAsIDMxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX181 ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2twX3Nfc2VsZl9wYXJhbXNfY2Fubm90X2JlX2NvbnZl cnRlZCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzUpKSBfX1BZWF9FUlIoMSwgMiwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzUpOworKyAgX19QeXhf R0lWRVJFRihfX3B5eF90dXBsZV9fNSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzMKKy0gKiBfX2F1dGhvcl9fID0gIkFuZHJlIEQiCistICogCistICogX1JFUVVJ UkVEX0NBUElfTUFKT1IgPSAxICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiBfTUlO X0NBUElfTUlOT1IgPSA5CistICogCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0CisrICogICAg IHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5 dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhz ZWxmLCBfX3B5eF9zdGF0ZSk6CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMg Y2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqLworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9f cHl4X2QsIF9fcHl4X25fc19SRVFVSVJFRF9DQVBJX01BSk9SLCBfX3B5eF9pbnRfMSkgPCAwKSBf X1BZWF9FUlIoMCwgMzMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVwbGVfXzYgPSBQeVR1 cGxlX1BhY2soMSwgX19weXhfa3Bfc19zZWxmX3BhcmFtc19jYW5ub3RfYmVfY29udmVydGVkKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNikpIF9fUFlYX0VSUigxLCA0LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNik7CisrICBfX1B5eF9HSVZFUkVG KF9fcHl4X3R1cGxlX182KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozNAorLSAqIAorLSAqIF9SRVFVSVJFRF9DQVBJX01BSk9SID0gMQorLSAqIF9NSU5fQ0FQSV9N SU5PUiA9IDkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqIGNkZWYgdW5z aWduZWQgbG9uZyBfQ0FQSV9WRVJTSU9OCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTkyCisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BB UkFNX1dMX0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCisr ICogICAgICAgICBpZiBkcm1fZGlzcGxheToKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZk ID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJj cnRjX2lkIiwgLTEpCisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBk cm1fZGlzcGxheS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0xKQorICAqLworLSAgaWYgKFB5RGljdF9T ZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUiwgX19weXhfaW50XzkpIDwg MCkgX19QWVhfRVJSKDAsIDM0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX183ID0g UHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19mZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90dXBsZV9fNykpIF9fUFlYX0VSUigwLCA5OTIsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX183KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhf dHVwbGVfXzcpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3Cist ICogCistICogY2RlZiB1bnNpZ25lZCBsb25nIF9DQVBJX1ZFUlNJT04KKy0gKiB3aXRoIG5vZ2ls OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIF9DQVBJX1ZFUlNJT04gPSBt cHZfY2xpZW50X2FwaV92ZXJzaW9uKCkKKy0gKiAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5OTMKKysgKiAgICAgICAgIGlmIGRybV9kaXNwbGF5OgorKyAqICAgICAgICAg ICAgIGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpCisrICogICAgICAg ICAgICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1z LmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpCisrICog ICAgICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVxdWVzdF9wdHIiLCBO b25lKQorICAqLworLSAgeworLSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgIFB5VGhy ZWFkU3RhdGUgKl9zYXZlOworLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgIF9fUHl4 X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKy0gICAgICAjZW5kaWYKKy0gICAgICAvKnRyeToqLyB7Cisr ICBfX3B5eF90dXBsZV9fOCA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfY3J0Y19pZCwgX19w eXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fOCkpIF9fUFlYX0VSUigw LCA5OTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX184KTsK KysgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzgpOworIAorLSAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM4CistICogY2RlZiB1bnNpZ25lZCBsb25nIF9DQVBJ X1ZFUlNJT04KKy0gKiB3aXRoIG5vZ2lsOgorLSAqICAgICBfQ0FQSV9WRVJTSU9OID0gbXB2X2Ns aWVudF9hcGlfdmVyc2lvbigpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0g KiBfQ0FQSV9NQUpPUiA9IF9DQVBJX1ZFUlNJT04gPj4gMTYKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5OTQKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJt X2Rpc3BsYXkuZ2V0KCJmZCIsIC0xKQorKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19p ZCA9IGRybV9kaXNwbGF5LmdldCgiY3J0Y19pZCIsIC0xKQorKyAqICAgICAgICAgICAgIGRybV9w YXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGFycCA9IGRybV9k aXNwbGF5LmdldCgiYXRvbWljX3JlcXVlc3RfcHRyIiwgTm9uZSkKKysgKiAgICAgICAgICAgICBp ZiBhcnAgaXMgbm90IE5vbmU6CisgICovCistICAgICAgICBfX3B5eF92Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fQ0FQSV9WRVJTSU9OID0gbXB2X2NsaWVudF9hcGlfdmVyc2lvbigpOworLSAgICAg IH0KKysgIF9fcHl4X3R1cGxlX185ID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19jb25uZWN0 b3JfaWQsIF9fcHl4X2ludF9uZWdfMSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzkpKSBf X1BZWF9FUlIoMCwgOTk0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 dXBsZV9fOSk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX185KTsKKyAKKy0gICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzcKKy0gKiAKKy0gKiBjZGVmIHVuc2ln bmVkIGxvbmcgX0NBUElfVkVSU0lPTgorLSAqIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgX0NBUElfVkVSU0lPTiA9IG1wdl9jbGllbnRfYXBpX3ZlcnNp b24oKQorLSAqIAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5NQorKyAq ICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5LmdldCgiY3J0Y19p ZCIsIC0xKQorKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rp c3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkKKysgKiAgICAgICAgICAgICBhcnAgPSBkcm1f ZGlzcGxheS5nZXQoImF0b21pY19yZXF1ZXN0X3B0ciIsIE5vbmUpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6CisrICogICAg ICAgICAgICAgICAgIGRybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gPF9kcm1Nb2RlQXRv bWljUmVxICoqPmdldF9wb2ludGVyKGFycCwgImRybU1vZGVBdG9taWNSZXEqIikKKyAgKi8KKy0g ICAgICAvKmZpbmFsbHk6Ki8geworLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAg ICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7 CistICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgI2VuZGlmCistICAgICAg ICAgIGdvdG8gX19weXhfTDQ7CistICAgICAgICB9CistICAgICAgICBfX3B5eF9MNDo7CistICAg ICAgfQorLSAgfQorKyAgX19weXhfdHVwbGVfXzEwID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25f c19hdG9taWNfcmVxdWVzdF9wdHIsIFB5X05vbmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxl X18xMCkpIF9fUFlYX0VSUigwLCA5OTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVG KF9fcHl4X3R1cGxlX18xMCk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18xMCk7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDAKKy0gKiAgICAgX0NBUElf VkVSU0lPTiA9IG1wdl9jbGllbnRfYXBpX3ZlcnNpb24oKQorLSAqIAorLSAqIF9DQVBJX01BSk9S ID0gX0NBUElfVkVSU0lPTiA+PiAxNiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog X0NBUElfTUlOT1IgPSBfQ0FQSV9WRVJTSU9OICYgMHhGRkZGCistICogCisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk4CisrICogICAgICAgICAgICAgaWYgYXJwIGlzIG5v dCBOb25lOgorKyAqICAgICAgICAgICAgICAgICBkcm1fcGFyYW1zLmF0b21pY19yZXF1ZXN0X3B0 ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5nZXRfcG9pbnRlcihhcnAsICJkcm1Nb2RlQXRvbWlj UmVxKiIpCisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5yZW5kZXJfZmQgPSBkcm1fZGlzcGxh eS5nZXQoInJlbmRlcl9mZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZ LCAmZHJtX3BhcmFtcykKKysgKiAgICAgICAgIGlmIGRybV9vc2Rfc2l6ZToKKyAgKi8KKy0gIF9f cHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZygoX19weXhfdl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX0NBUElfVkVSU0lPTiA+PiAxNikpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA0MCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYo X19weXhfdF8yKTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfQ0FQ SV9NQUpPUiwgX19weXhfdF8yKSA8IDApIF9fUFlYX0VSUigwLCA0MCwgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fcHl4X3R1 cGxlX18xMSA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfcmVuZGVyX2ZkLCBfX3B5eF9pbnRf bmVnXzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMSkpIF9fUFlYX0VSUigwLCA5OTgs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18xMSk7CisrICBf X1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18xMSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDEKKy0gKiAKKy0gKiBfQ0FQSV9NQUpPUiA9IF9DQVBJX1ZFUlNJT04g Pj4gMTYKKy0gKiBfQ0FQSV9NSU5PUiA9IF9DQVBJX1ZFUlNJT04gJiAweEZGRkYgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJF RF9DQVBJX01BSk9SIG9yIF9DQVBJX01JTk9SIDwgX01JTl9DQVBJX01JTk9SOgorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODMKKysgKiAgICAgICAgIGlmIG9wZW5nbF9m Ym86CisrICogICAgICAgICAgICAgbWVtc2V0KCZmYm8sIDAsIHNpemVvZihmYm8pKQorKyAqICAg ICAgICAgICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJvLmdldCgiZmJvIiwgMCkgb3IgMCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgZmJvLncgPSBvcGVuZ2xfZmJv WyJ3Il0KKysgKiAgICAgICAgICAgICBmYm8uaCA9IG9wZW5nbF9mYm9bImgiXQorICAqLworLSAg X19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV91bnNpZ25lZF9sb25nKChfX3B5eF92Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fQ0FQSV9WRVJTSU9OICYgMHhGRkZGKSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzIpOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25f c19DQVBJX01JTk9SLCBfX3B5eF90XzIpIDwgMCkgX19QWVhfRVJSKDAsIDQxLCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19w eXhfdHVwbGVfXzEyID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19mYm8sIF9fcHl4X2ludF8w KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMTIpKSBfX1BZWF9FUlIoMCwgMTA4MywgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzEyKTsKKysgIF9fUHl4 X0dJVkVSRUYoX19weXhfdHVwbGVfXzEyKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0MworLSAqIF9DQVBJX01JTk9SID0gX0NBUElfVkVSU0lPTiAmIDB4RkZGRgor LSAqIAorLSAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01BSk9SIG9yIF9DQVBJ X01JTk9SIDwgX01JTl9DQVBJX01JTk9SOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIHJhaXNlIEltcG9ydEVycm9yKAorLSAqICAgICAgICAgImxpYm1wdiB2ZXJzaW9uIGlz IGluY29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJQorLSAqLworLSAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19DQVBJX01BSk9SKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1l KF9fcHl4X3RfMSwgX19weXhfbl9zX1JFUVVJUkVEX0NBUElfTUFKT1IpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0MywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfNCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9f cHl4X3RfMiwgX19weXhfdF8xLCBQeV9ORSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF80KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2Jq ZWN0X0lzVHJ1ZShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoX19weXhfdF81IDwgMCkpIF9fUFlY X0VSUigwLCA0MywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKy0gIGlmICghX19weXhfdF81KSB7CistICB9IGVsc2UgeworLSAgICBf X3B5eF90XzMgPSBfX3B5eF90XzU7CistICAgIGdvdG8gX19weXhfTDZfYm9vbF9iaW5vcF9kb25l OworLSAgfQorLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25f c19DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDMs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9H ZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhfbl9zX01JTl9DQVBJX01JTk9SKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX3B5eF90XzIgPSBQeU9iamVjdF9S aWNoQ29tcGFyZShfX3B5eF90XzQsIF9fcHl4X3RfMSwgUHlfTFQpOyBfX1B5eF9YR09UUkVGKF9f cHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwor LSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX3B5eF90XzUg PSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3Rf NSA8IDApKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBfX3B5eF90XzMgPSBfX3B5eF90XzU7Cist ICBfX3B5eF9MNl9ib29sX2Jpbm9wX2RvbmU6OworLSAgaWYgKHVubGlrZWx5KF9fcHl4X3RfMykp IHsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg2CisrICogICAgICAg ICAgICAgZmJvLncgPSBvcGVuZ2xfZmJvWyJ3Il0KKysgKiAgICAgICAgICAgICBmYm8uaCA9IG9w ZW5nbF9mYm9bImgiXQorKyAqICAgICAgICAgICAgIGZiby5pbnRlcm5hbF9mb3JtYXQgPSBvcGVu Z2xfZmJvLmdldCgiaW50ZXJuYWxfZm9ybWF0IiwgMCkgb3IgMCAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BB UkFNX09QRU5HTF9GQk8sICZmYm8pCisrICogICAgICAgICBpZiBmbGlwX3k6CisrICovCisrICBf X3B5eF90dXBsZV9fMTMgPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9zX2ludGVybmFsX2Zvcm1h dCwgX19weXhfaW50XzApOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMykpIF9fUFlYX0VS UigwLCAxMDg2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9f MTMpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTMpOworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYKKy0gKiAgICAgcmFpc2UgSW1wb3J0RXJyb3Io CistICogICAgICAgICAibGlibXB2IHZlcnNpb24gaXMgaW5jb3JyZWN0LiBSZXF1aXJlZCAlZC4l ZCBnb3QgJWQuJWQuIiAlCistICogICAgICAgICAgICAgKF9SRVFVSVJFRF9DQVBJX01BSk9SLCBf TUlOX0NBUElfTUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQSV9NSU5PUikgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICApCistICogCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoy CisrICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorKyAqICAgICByYWlzZSBUeXBlRXJy b3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3Ig cGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogZGVmIF9fc2V0c3Rh dGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorKyAqICAgICByYWlzZSBUeXBlRXJyb3Io InNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlj a2xpbmciKQorICAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwg X19weXhfbl9zX1JFUVVJUkVEX0NBUElfTUFKT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCA0NiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhf bl9zX01JTl9DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgNDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0g ICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19DQVBJX01B Sk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDYsIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19DQVBJX01JTk9SKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgX19weXhfdF83ID0gUHlUdXBsZV9OZXcoNCk7 IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJv cikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICAgIF9fUHl4X0dJVkVSRUYoX19w eXhfdF8yKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDAsIF9fcHl4X3RfMik7 CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShf X3B5eF90XzcsIDEsIF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF80KTsK Ky0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDIsIF9fcHl4X3RfNCk7CistICAgIF9f UHl4X0dJVkVSRUYoX19weXhfdF82KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90Xzcs IDMsIF9fcHl4X3RfNik7CistICAgIF9fcHl4X3RfMiA9IDA7CistICAgIF9fcHl4X3RfMSA9IDA7 CistICAgIF9fcHl4X3RfNCA9IDA7CistICAgIF9fcHl4X3RfNiA9IDA7CisrICBfX3B5eF90dXBs ZV9fMTQgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfa3Bfc19zZWxmX19jdHhfY2Fubm90X2JlX2Nv bnZlcnRlZF90byk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE0KSkgX19QWVhfRVJSKDEs IDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18xNCk7Cisr ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18xNCk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NQorLSAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9D QVBJX01BSk9SIG9yIF9DQVBJX01JTk9SIDwgX01JTl9DQVBJX01JTk9SOgorLSAqICAgICByYWlz ZSBJbXBvcnRFcnJvcigKKy0gKiAgICAgICAgICJsaWJtcHYgdmVyc2lvbiBpcyBpbmNvcnJlY3Qu IFJlcXVpcmVkICVkLiVkIGdvdCAlZC4lZC4iICUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgICAgIChfUkVRVUlSRURfQ0FQSV9NQUpPUiwgX01JTl9DQVBJX01JTk9S LCBfQ0FQSV9NQUpPUiwgX0NBUElfTUlOT1IpCistICogICAgICkKKysgIC8qICIodHJlZSBmcmFn bWVudCkiOjQKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNv bnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKysgKiBkZWYgX19zZXRz dGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CisrICogICAgIHJhaXNlIFR5cGVFcnJv cigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBw aWNrbGluZyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKi8KKy0gICAgX19weXhf dF82ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0KF9fcHl4X2twX3NfbGlibXB2X3ZlcnNpb25faXNf aW5jb3JyZWN0X1JlcXUsIF9fcHl4X3RfNyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDQ1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nik7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgX19w eXhfdHVwbGVfXzE1ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5v dF9iZV9jb252ZXJ0ZWRfdG8pOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xNSkpIF9fUFlY X0VSUigxLCA0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9f MTUpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTUpOworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQKKy0gKiAKKy0gKiBpZiBfQ0FQSV9NQUpPUiAh PSBfUkVRVUlSRURfQ0FQSV9NQUpPUiBvciBfQ0FQSV9NSU5PUiA8IF9NSU5fQ0FQSV9NSU5PUjoK Ky0gKiAgICAgcmFpc2UgSW1wb3J0RXJyb3IoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgICJsaWJtcHYgdmVyc2lvbiBpcyBpbmNvcnJlY3QuIFJlcXVpcmVkICVkLiVk IGdvdCAlZC4lZC4iICUKKy0gKiAgICAgICAgICAgICAoX1JFUVVJUkVEX0NBUElfTUFKT1IsIF9N SU5fQ0FQSV9NSU5PUiwgX0NBUElfTUFKT1IsIF9DQVBJX01JTk9SKQorKyAgLyogIih0cmVlIGZy YWdtZW50KSI6MgorKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKysgKiAgICAgcmFp c2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBv YmplY3QgZm9yIHBpY2tsaW5nIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIGRl ZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgcmFpc2Ug VHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmpl Y3QgZm9yIHBpY2tsaW5nIikKKyAgKi8KKy0gICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF9idWlsdGluX0ltcG9ydEVycm9yLCBfX3B5eF90XzYpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA0NCwgX19weXhfTDFfZXJyb3IpCistICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsg X19weXhfdF82ID0gMDsKKy0gICAgX19QeXhfUmFpc2UoX19weXhfdF83LCAwLCAwLCAwKTsKKy0g ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICAgIF9fUFlYX0VS UigwLCA0NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90dXBsZV9fMTYgPSBQeVR1cGxlX1Bh Y2soMSwgX19weXhfa3Bfc19zZWxmX19jdHhfY2Fubm90X2JlX2NvbnZlcnRlZF90byk7IGlmICh1 bmxpa2VseSghX19weXhfdHVwbGVfXzE2KSkgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18xNik7CisrICBfX1B5eF9HSVZFUkVGKF9f cHl4X3R1cGxlX18xNik7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo0MworLSAqIF9DQVBJX01JTk9SID0gX0NBUElfVkVSU0lPTiAmIDB4RkZGRgorLSAqIAorLSAq IGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01BSk9SIG9yIF9DQVBJX01JTk9SIDwg X01JTl9DQVBJX01JTk9SOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJh aXNlIEltcG9ydEVycm9yKAorLSAqICAgICAgICAgImxpYm1wdiB2ZXJzaW9uIGlzIGluY29ycmVj dC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJQorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6 NAorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVk IHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorKyAqIGRlZiBfX3NldHN0YXRlX2N5 dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxm Ll9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5n IikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqLworLSAgfQorKyAgX19weXhfdHVw bGVfXzE3ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5vdF9iZV9j b252ZXJ0ZWRfdG8pOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xNykpIF9fUFlYX0VSUigx LCA0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTcpOwor KyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTcpOworIAorICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjUyCistICogICAgIHZvaWQgUHlFdmFsX0luaXRUaHJlYWRzKCkK KysgKiAgICAgdm9pZCBQeV9Jbml0aWFsaXplKCkKKyAgKiAKKyAgKiBfaXNfcHkzID0gc3lzLnZl cnNpb25faW5mbyA+PSAoMywpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiBfc3Ry ZGVjX2VyciA9ICJzdXJyb2dhdGVlc2NhcGUiIGlmIF9pc19weTMgZWxzZSAic3RyaWN0IgorICAq ICMgbXB2IC0+IFB5dGhvbgorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5 eF90XzcsIF9fcHl4X25fc19zeXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VS UigwLCA1MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKy0g IF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF83LCBfX3B5eF9u X3NfdmVyc2lvbl9pbmZvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg NTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBfX1B5 eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gIF9fcHl4X3RfNyA9IFB5T2Jq ZWN0X1JpY2hDb21wYXJlKF9fcHl4X3RfNiwgX19weXhfdHVwbGVfXzIxLCBQeV9HRSk7IF9fUHl4 X1hHT1RSRUYoX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIo MCwgNTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4 X3RfNiA9IDA7CistICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX2lzX3B5 MywgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA1MiwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0KKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MworLSAqIAorLSAqIF9pc19weTMgPSBzeXMudmVyc2lv bl9pbmZvID49ICgzLCkKKy0gKiBfc3RyZGVjX2VyciA9ICJzdXJyb2dhdGVlc2NhcGUiIGlmIF9p c19weTMgZWxzZSAic3RyaWN0IiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogIyBt cHYgLT4gUHl0aG9uCistICogZGVmIF9zdHJkZWMocyk6CistICovCistICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2lzX3B5Myk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDUzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzYpOworLSAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9f cHl4X3RfNik7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDUzLCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OworLSAgaWYgKF9fcHl4X3RfMykgeworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfbl9zX3N1cnJv Z2F0ZWVzY2FwZSk7CistICAgIF9fcHl4X3RfNyA9IF9fcHl4X25fc19zdXJyb2dhdGVlc2NhcGU7 CistICB9IGVsc2UgeworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfbl9zX3N0cmljdCk7CistICAg IF9fcHl4X3RfNyA9IF9fcHl4X25fc19zdHJpY3Q7CistICB9CistICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmRlY19lcnIsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9F UlIoMCwgNTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9f cHl4X3RfNyA9IDA7CisrICBfX3B5eF90dXBsZV9fMTggPSBQeVR1cGxlX1BhY2soMSwgX19weXhf aW50XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xOCkpIF9fUFlYX0VSUigwLCA1Miwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzE4KTsKKysgIF9f UHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzE4KTsKKyAKKyAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1NQorICAqIF9zdHJkZWNfZXJyID0gInN1cnJvZ2F0ZWVzY2FwZSIgaWYg X2lzX3B5MyBlbHNlICJzdHJpY3QiCitAQCAtMjg1NjQsMTAgKzI0NjQ0LDEwIEBAIGlmICghX19Q eXhfUmVmTmFubnkpIHsKKyAgKiAgICAgdHJ5OgorICAqICAgICAgICAgcmV0dXJuIHMuZGVjb2Rl KCJ1dGYtOCIsIF9zdHJkZWNfZXJyKQorICAqLworLSAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25f TmV3RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzFfc3RyZGVjLCBOVUxMLCBf X3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBf X1BZWF9FUlIoMCwgNTUsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nyk7CistICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmRlYywgX19w eXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9E RUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgIF9fcHl4X3R1cGxlX18xOSA9IFB5 VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nfcyk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE5 KSkgX19QWVhfRVJSKDAsIDU1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5 eF90dXBsZV9fMTkpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTkpOworKyAgX19w eXhfY29kZW9ial9fMjAgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwg Q09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5 X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzE5LCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZf bXB2X3B5eCwgX19weXhfbl9zX3N0cmRlYywgNTUsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18yMCkpIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFfZXJy b3IpCisgCisgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMKKyAgKiAKK0BA IC0yODU3Niw1MDQwICsyNDY1Niw1NTU1IEBAIGlmICghX19QeXhfUmVmTmFubnkpIHsKKyAgKiAg ICAgdHJ5OgorICAqICAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCJ1dGYtOCIsIF9zdHJkZWNfZXJy KQorICAqLworLSAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25fTmV3RXgoJl9fcHl4X21kZWZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzNfc3RyZW5jLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xp YnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNjMsIF9fcHl4 X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICBpZiAoUHlEaWN0X1Nl dEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmVuYywgX19weXhfdF83KSA8IDApIF9fUFlYX0VS UigwLCA2MywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19w eXhfdF83ID0gMDsKKysgIF9fcHl4X3R1cGxlX18yMSA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9u X3Nfcyk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzIxKSkgX19QWVhfRVJSKDAsIDYzLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMjEpOworKyAgX19Q eXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMjEpOworKyAgX19weXhfY29kZW9ial9fMjIgPSAoUHlP YmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xP Q0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfdHVwbGVfXzIxLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3N0 cmVuYywgNjMsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2Jq X18yMikpIF9fUFlYX0VSUigwLCA2MywgX19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAKKy0gKiAgICAgICAgIHJldHVybiBzCisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE4CisgICogCistICogUHlFdmFsX0luaXRU aHJlYWRzKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorLSAqIGNsYXNzIEVy cm9yczoKKysgKiBkZWYgX2Vycm9ycyhmbik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgorKyAqICAgICAgICAgdiA9IGZuKCprLCAq Kmt3KQorICAqLworLSAgUHlFdmFsX0luaXRUaHJlYWRzKCk7CisrICBfX3B5eF90dXBsZV9fMjMg PSBQeVR1cGxlX1BhY2soMywgX19weXhfbl9zX2ZuLCBfX3B5eF9uX3Nfd3JhcHBlZCwgX19weXhf bl9zX3dyYXBwZWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18yMykpIF9fUFlYX0VSUigw LCAzMTgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18yMyk7 CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18yMyk7CisrICBfX3B5eF9jb2Rlb2JqX18y NCA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAzLCAwLCBDT19PUFRJTUlaRUR8 Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMjMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5 eF9uX3NfZXJyb3JzLCAzMTgsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF9jb2Rlb2JqX18yNCkpIF9fUFlYX0VSUigwLCAzMTgsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyCistICogUHlFdmFsX0luaXRUaHJl YWRzKCkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjkKKysgKiAgICAg Y29kZSA9IE5vbmUKKyAgKiAKKy0gKiBjbGFzcyBFcnJvcnM6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgIiIiU2V0IG9mIGtub3duIGVycm9yIGNvZGVzIGZyb20gTXB2RXJy b3IgYW5kIEV2ZW50IHJlc3BvbnNlcy4KKysgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmNvZGUgPSBlCisr ICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVycl9jCisrICovCisrICBfX3B5eF90dXBsZV9f MjUgPSBQeVR1cGxlX1BhY2soNCwgX19weXhfbl9zX3NlbGYsIF9fcHl4X25fc19lLCBfX3B5eF9u X3NfZXJyX2MsIF9fcHl4X25fc19lX2kpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18yNSkp IF9fUFlYX0VSUigwLCAzMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4 X3R1cGxlX18yNSk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18yNSk7CisrICBfX3B5 eF9jb2Rlb2JqX18yNiA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygyLCAwLCA0LCAwLCBD T19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlf dHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMjUsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9t cHZfcHl4LCBfX3B5eF9uX3NfaW5pdCwgMzI5LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxp a2VseSghX19weXhfY29kZW9ial9fMjYpKSBfX1BZWF9FUlIoMCwgMzI5LCBfX3B5eF9MMV9lcnJv cikKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDYKKysgKiBjZGVm IF9yZXBseV91c2VyZGF0YXMgPSBkaWN0KCkKKyAgKiAKKysgKiBjbGFzcyBfUmVwbHlVc2VyRGF0 YShvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGRlZiBfX2lu aXRfXyhzZWxmLCBkYXRhKToKKysgKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKyAgKi8KKy0g IF9fcHl4X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEws IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfRXJyb3JzLCBfX3B5eF9uX3NfRXJyb3JzLCAo UHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfa3Bf c19TZXRfb2Zfa25vd25fZXJyb3JfY29kZXNfZnJvbV9NcCk7IGlmICh1bmxpa2VseSghX19weXhf dF83KSkgX19QWVhfRVJSKDAsIDcyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOworKyAgX19weXhfdHVwbGVfXzI3ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2J1 aWx0aW5fb2JqZWN0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjcpKSBfX1BZWF9FUlIo MCwgMzQ2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMjcp OworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMjcpOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjc5CistICogICAgIFlvdSBzaG91bGQgaGFuZGxlIHRoZSBw b3NzaWJpbGl0eSB0aGF0IGVycm9yIGNvZGVzIG1heSBub3QgYmUgYW55IG9mIHRoZXNlIHZhbHVl cy4KKy0gKiAgICAgIiIiCistICogICAgIHN1Y2Nlc3MgPSBNUFZfRVJST1JfU1VDQ0VTUyAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHF1ZXVlX2Z1bGwgPSBNUFZfRVJST1Jf RVZFTlRfUVVFVUVfRlVMTAorLSAqICAgICBub21lbSA9IE1QVl9FUlJPUl9OT01FTQorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NworKyAqIAorKyAqIGNsYXNzIF9SZXBs eVVzZXJEYXRhKG9iamVjdCk6CisrICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5jb3VudGVyID0gMAor KyAqICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorICAqLworLSAgX19weXhfdF82ID0gX19QeXhf UHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1NVQ0NFU1MpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA3OSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90 XzcsIF9fcHl4X25fc19zdWNjZXNzLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDc5LCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OworKyAgX19weXhfdHVwbGVfXzI4ID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19zZWxmLCBf X3B5eF9uX3NfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzI4KSkgX19QWVhfRVJS KDAsIDM0NywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzI4 KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzI4KTsKKysgIF9fcHl4X2NvZGVvYmpf XzI5ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDIsIDAsIDIsIDAsIENPX09QVElNSVpF RHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18yOCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9f cHl4X25fc19pbml0LCAzNDcsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF9jb2Rlb2JqX18yOSkpIF9fUFlYX0VSUigwLCAzNDcsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgwCistICogICAgICIiIgorLSAqICAg ICBzdWNjZXNzID0gTVBWX0VSUk9SX1NVQ0NFU1MKKy0gKiAgICAgcXVldWVfZnVsbCA9IE1QVl9F UlJPUl9FVkVOVF9RVUVVRV9GVUxMICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgbm9tZW0gPSBNUFZfRVJST1JfTk9NRU0KKy0gKiAgICAgdW5pbml0aWFsaXplZCA9IE1QVl9F UlJPUl9VTklOSVRJQUxJWkVECisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzUyCisrICogICAgICAgICBzZWxmLm9ic2VydmVkID0gRmFsc2UKKysgKiAKKysgKiAgICAgZGVm IGFkZChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2Vs Zi5jb3VudGVyICs9IDEKKysgKiAKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9FVkVOVF9RVUVVRV9GVUxMKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF83LCBfX3B5eF9uX3NfcXVldWVfZnVsbCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4 MCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKysgIF9fcHl4X3R1cGxlX18zMCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nfc2Vs Zik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzMwKSkgX19QWVhfRVJSKDAsIDM1MiwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzMwKTsKKysgIF9fUHl4 X0dJVkVSRUYoX19weXhfdHVwbGVfXzMwKTsKKysgIF9fcHl4X2NvZGVvYmpfXzMxID0gKFB5T2Jq ZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NB TFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X3R1cGxlX18zMCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxl LCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19hZGQs IDM1MiwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzMx KSkgX19QWVhfRVJSKDAsIDM1MiwgX19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6ODEKKy0gKiAgICAgc3VjY2VzcyA9IE1QVl9FUlJPUl9TVUND RVNTCistICogICAgIHF1ZXVlX2Z1bGwgPSBNUFZfRVJST1JfRVZFTlRfUVVFVUVfRlVMTAorLSAq ICAgICBub21lbSA9IE1QVl9FUlJPUl9OT01FTSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgIHVuaW5pdGlhbGl6ZWQgPSBNUFZfRVJST1JfVU5JTklUSUFMSVpFRAorLSAqICAg ICBpbnZhbGlkX3BhcmFtZXRlciA9IE1QVl9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUgorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NQorKyAqICAgICAgICAgc2VsZi5jb3Vu dGVyICs9IDEKKysgKiAKKysgKiAgICAgZGVmIHJlbW92ZShzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5jb3VudGVyIC09IDEKKysgKiAKKyAgKi8K Ky0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJP Ul9OT01FTSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgxLCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1Nl dE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX25vbWVtLCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDgxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19weXhfdHVwbGVfXzMyID0gUHlUdXBsZV9QYWNrKDEs IF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMzIpKSBfX1BZWF9F UlIoMCwgMzU1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9f MzIpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMzIpOworKyAgX19weXhfY29kZW9i al9fMzMgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1J WkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzMyLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwg X19weXhfbl9zX3JlbW92ZSwgMzU1LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSgh X19weXhfY29kZW9ial9fMzMpKSBfX1BZWF9FUlIoMCwgMzU1LCBfX3B5eF9MMV9lcnJvcikKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MgorLSAqICAgICBxdWV1ZV9m dWxsID0gTVBWX0VSUk9SX0VWRU5UX1FVRVVFX0ZVTEwKKy0gKiAgICAgbm9tZW0gPSBNUFZfRVJS T1JfTk9NRU0KKy0gKiAgICAgdW5pbml0aWFsaXplZCA9IE1QVl9FUlJPUl9VTklOSVRJQUxJWkVE ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgaW52YWxpZF9wYXJhbWV0ZXIg PSBNUFZfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIKKy0gKiAgICAgbm90X2ZvdW5kID0gTVBWX0VS Uk9SX09QVElPTl9OT1RfRk9VTkQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMTMzCisrICogCisrICogY2xhc3MgQ2FsbGJhY2tUaHJlYWQoVGhyZWFkKToKKysgKiAgICAg ZGVmIF9faW5pdF9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKKysgKiAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1 ZQorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3Io TVBWX0VSUk9SX1VOSU5JVElBTElaRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCA4MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK Ky0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc191bmluaXRp YWxpemVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDgyLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19weXhfdHVw bGVfXzM0ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90dXBsZV9fMzQpKSBfX1BZWF9FUlIoMCwgMTEzMywgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzM0KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVw bGVfXzM0KTsKKysgIF9fcHl4X2NvZGVvYmpfXzM1ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVf TmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5 dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18z NCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1 dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19pbml0LCAxMTMzLCBfX3B5eF9lbXB0 eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMzUpKSBfX1BZWF9FUlIoMCwg MTEzMywgX19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6ODMKKy0gKiAgICAgbm9tZW0gPSBNUFZfRVJST1JfTk9NRU0KKy0gKiAgICAgdW5pbml0 aWFsaXplZCA9IE1QVl9FUlJPUl9VTklOSVRJQUxJWkVECistICogICAgIGludmFsaWRfcGFyYW1l dGVyID0gTVBWX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX09QVElPTl9OT1RfRk9VTkQKKy0g KiAgICAgb3B0aW9uX2Zvcm1hdCA9IE1QVl9FUlJPUl9PUFRJT05fRk9STUFUCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQorKyAqICAgICAgICAgc2VsZi5pc3NodXRk b3duID0gRmFsc2UKKysgKiAKKysgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVlCisr ICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorICAqLworLSAgX19weXhfdF82ID0gX19Q eXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVS KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODMsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfaW52YWxpZF9wYXJhbWV0ZXIsIF9fcHl4X3RfNikg PCAwKSBfX1BZWF9FUlIoMCwgODMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9f cHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICBfX3B5eF90dXBsZV9fMzYgPSBQeVR1cGxlX1Bh Y2soMSwgX19weXhfbl9zX3NlbGYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18zNikpIF9f UFlYX0VSUigwLCAxMTQxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 dXBsZV9fMzYpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMzYpOworKyAgX19weXhf Y29kZW9ial9fMzcgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09f T1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzM2LCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2 X3B5eCwgX19weXhfbl9zX3NodXRkb3duLCAxMTQxLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1 bmxpa2VseSghX19weXhfY29kZW9ial9fMzcpKSBfX1BZWF9FUlIoMCwgMTE0MSwgX19weXhfTDFf ZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODQKKy0gKiAg ICAgdW5pbml0aWFsaXplZCA9IE1QVl9FUlJPUl9VTklOSVRJQUxJWkVECistICogICAgIGludmFs aWRfcGFyYW1ldGVyID0gTVBWX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSCistICogICAgIG5vdF9m b3VuZCA9IE1QVl9FUlJPUl9PUFRJT05fTk9UX0ZPVU5EICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgb3B0aW9uX2Zvcm1hdCA9IE1QVl9FUlJPUl9PUFRJT05fRk9STUFUCist ICogICAgIG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJT05fRVJST1IKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ2CisrICogICAgICAgICBzZWxmLmxvY2sucmVs ZWFzZSgpCisrICogCisrICogICAgIGRlZiBjYWxsKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisrICogCisrICovCisr ICBfX3B5eF90dXBsZV9fMzggPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3R1cGxlX18zOCkpIF9fUFlYX0VSUigwLCAxMTQ2LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMzgpOworKyAgX19QeXhfR0lWRVJF RihfX3B5eF90dXBsZV9fMzgpOworKyAgX19weXhfY29kZW9ial9fMzkgPSAoUHlPYmplY3QqKV9f UHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19w eXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfdHVwbGVfXzM4LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX2NhbGwsIDExNDYs IF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18zOSkpIF9f UFlYX0VSUigwLCAxMTQ2LCBfX3B5eF9MMV9lcnJvcikKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTQ5CisrICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisr ICogCisrICogICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKysgKiAKKyAg Ki8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9F UlJPUl9PUFRJT05fTk9UX0ZPVU5EKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgODQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cist ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm90X2ZvdW5k LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg0LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19weXhfdHVwbGVfXzQw ID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2spOyBp ZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX180MCkpIF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNDApOworKyAgX19QeXhfR0lW RVJFRihfX3B5eF90dXBsZV9fNDApOworKyAgX19weXhfY29kZW9ial9fNDEgPSAoUHlPYmplY3Qq KV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgMiwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywg X19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwg X19weXhfdHVwbGVfXzQwLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9f cHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3NldCwgMTE0 OSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzQxKSkg X19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjg1CistICogICAgIGludmFsaWRfcGFyYW1ldGVyID0gTVBWX0VS Uk9SX0lOVkFMSURfUEFSQU1FVEVSCistICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9PUFRJ T05fTk9UX0ZPVU5ECistICogICAgIG9wdGlvbl9mb3JtYXQgPSBNUFZfRVJST1JfT1BUSU9OX0ZP Uk1BVCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIG9wdGlvbl9lcnJvciA9 IE1QVl9FUlJPUl9PUFRJT05fRVJST1IKKy0gKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX1BS T1BFUlRZX05PVF9GT1VORAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx NTIKKysgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjaworKyAqIAorKyAqICAgICBk ZWYgcnVuKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB3 aGlsZSBub3Qgc2VsZi5pc3NodXRkb3duOgorKyAqICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1 aXJlKFRydWUpCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21w dl9lcnJvcihNUFZfRVJST1JfT1BUSU9OX0ZPUk1BVCk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDg1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9z X29wdGlvbl9mb3JtYXQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODUsIF9fcHl4X0wx X2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICBf X3B5eF90dXBsZV9fNDIgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3R1cGxlX180MikpIF9fUFlYX0VSUigwLCAxMTUyLCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNDIpOworKyAgX19QeXhfR0lWRVJFRihf X3B5eF90dXBsZV9fNDIpOworKyAgX19weXhfY29kZW9ial9fNDMgPSAoUHlPYmplY3QqKV9fUHl4 X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhf ZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhf dHVwbGVfXzQyLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2tw X3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3J1biwgMTE1MiwgX19w eXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzQzKSkgX19QWVhf RVJSKDAsIDExNTIsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjg2CistICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9PUFRJT05fTk9U X0ZPVU5ECistICogICAgIG9wdGlvbl9mb3JtYXQgPSBNUFZfRVJST1JfT1BUSU9OX0ZPUk1BVAor LSAqICAgICBvcHRpb25fZXJyb3IgPSBNUFZfRVJST1JfT1BUSU9OX0VSUk9SICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX1BST1BFUlRZ X05PVF9GT1VORAorLSAqICAgICBwcm9wZXJ0eV9mb3JtYXQgPSBNUFZfRVJST1JfUFJPUEVSVFlf Rk9STUFUCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1NworKyAqICAg ICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNrKHNlbGYuY2FsbGJhY2spIGlmIHNlbGYuY2FsbGJh Y2sgZWxzZSBOb25lCisrICogCisrICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJh Y2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB0cnk6CisrICog ICAgICAgICAgICAgY2FsbGJhY2soKQorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX09QVElPTl9FUlJPUik7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg2LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX29wdGlvbl9lcnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4 NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKysgIF9fcHl4X3R1cGxlX180NCA9IFB5VHVwbGVfUGFjaygzLCBfX3B5eF9uX3Nfc2Vs ZiwgX19weXhfbl9zX2NhbGxiYWNrLCBfX3B5eF9uX3NfZSk7IGlmICh1bmxpa2VseSghX19weXhf dHVwbGVfXzQ0KSkgX19QWVhfRVJSKDAsIDExNTcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf R09UUkVGKF9fcHl4X3R1cGxlX180NCk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX180 NCk7CisrICBfX3B5eF9jb2Rlb2JqX180NSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygy LCAwLCAzLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywg X19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDQsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJf bGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfbXB2X2NhbGxiYWNrLCAxMTU3LCBfX3B5eF9l bXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fNDUpKSBfX1BZWF9FUlIo MCwgMTE1NywgX19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODcKKy0gKiAgICAgb3B0aW9uX2Zvcm1hdCA9IE1QVl9FUlJPUl9PUFRJT05fRk9S TUFUCistICogICAgIG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJT05fRVJST1IKKy0gKiAg ICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX1BST1BFUlRZX05PVF9GT1VORCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9QUk9Q RVJUWV9GT1JNQVQKKy0gKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1JfUFJP UEVSVFlfVU5BVkFJTEFCTEUKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjEKKysgKiBkZWYgX19w eXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZChfX3B5eF90eXBlLCBsb25nIF9fcHl4X2NoZWNr c3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg Y2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhf cmVzdWx0CisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l cnJvcihNUFZfRVJST1JfUFJPUEVSVFlfTk9UX0ZPVU5EKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzYpKSBfX1BZWF9FUlIoMCwgODcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9u X3Nfbm90X2ZvdW5kLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg3LCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19w eXhfdHVwbGVfXzQ2ID0gUHlUdXBsZV9QYWNrKDUsIF9fcHl4X25fc19weXhfdHlwZSwgX19weXhf bl9zX3B5eF9jaGVja3N1bSwgX19weXhfbl9zX3B5eF9zdGF0ZSwgX19weXhfbl9zX3B5eF9QaWNr bGVFcnJvciwgX19weXhfbl9zX3B5eF9yZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxl X180NikpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90dXBsZV9fNDYpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fNDYpOworKyAg X19weXhfY29kZW9ial9fNDcgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMywgMCwgNSwg MCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzQ2LCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3Nfc3RyaW5nc291cmNlLCBfX3B5 eF9uX3NfcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQsIDEsIF9fcHl4X2VtcHR5X2J5dGVz KTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX180NykpIF9fUFlYX0VSUigxLCAxLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX180OCA9IFB5VHVwbGVfUGFjayg1LCBfX3B5eF9u X3NfcHl4X3R5cGUsIF9fcHl4X25fc19weXhfY2hlY2tzdW0sIF9fcHl4X25fc19weXhfc3RhdGUs IF9fcHl4X25fc19weXhfUGlja2xlRXJyb3IsIF9fcHl4X25fc19weXhfcmVzdWx0KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90dXBsZV9fNDgpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3Ip CisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzQ4KTsKKysgIF9fUHl4X0dJVkVSRUYoX19w eXhfdHVwbGVfXzQ4KTsKKysgIF9fcHl4X2NvZGVvYmpfXzQ5ID0gKFB5T2JqZWN0KilfX1B5eF9Q eUNvZGVfTmV3KDMsIDAsIDUsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2Vt cHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1 cGxlX180OCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9z X3N0cmluZ3NvdXJjZSwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAxLCBfX3B5 eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fNDkpKSBfX1BZWF9F UlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90dXBsZV9fNTAgPSBQeVR1cGxlX1Bh Y2soNSwgX19weXhfbl9zX3B5eF90eXBlLCBfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCBfX3B5eF9u X3NfcHl4X3N0YXRlLCBfX3B5eF9uX3NfcHl4X1BpY2tsZUVycm9yLCBfX3B5eF9uX3NfcHl4X3Jl c3VsdCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzUwKSkgX19QWVhfRVJSKDEsIDEsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX181MCk7CisrICBfX1B5 eF9HSVZFUkVGKF9fcHl4X3R1cGxlX181MCk7CisrICBfX3B5eF9jb2Rlb2JqX181MSA9IChQeU9i amVjdCopX19QeXhfUHlDb2RlX05ldygzLCAwLCA1LCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9D QUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF90dXBsZV9fNTAsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfa3Bfc19zdHJpbmdzb3VyY2UsIF9fcHl4X25fc19weXhfdW5waWNrbGVfUHJvcGVy dHksIDEsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX181 MSkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX181MiA9 IFB5VHVwbGVfUGFjayg1LCBfX3B5eF9uX3NfcHl4X3R5cGUsIF9fcHl4X25fc19weXhfY2hlY2tz dW0sIF9fcHl4X25fc19weXhfc3RhdGUsIF9fcHl4X25fc19weXhfUGlja2xlRXJyb3IsIF9fcHl4 X25fc19weXhfcmVzdWx0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNTIpKSBfX1BZWF9F UlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzUy KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzUyKTsKKysgIF9fcHl4X2NvZGVvYmpf XzUzID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDMsIDAsIDUsIDAsIENPX09QVElNSVpF RHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX181MiwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3N0cmluZ3NvdXJjZSwgX19weXhfbl9zX3B5eF91bnBp Y2tsZV9FdmVudCwgMSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2Nv ZGVvYmpfXzUzKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVw bGVfXzU0ID0gUHlUdXBsZV9QYWNrKDUsIF9fcHl4X25fc19weXhfdHlwZSwgX19weXhfbl9zX3B5 eF9jaGVja3N1bSwgX19weXhfbl9zX3B5eF9zdGF0ZSwgX19weXhfbl9zX3B5eF9QaWNrbGVFcnJv ciwgX19weXhfbl9zX3B5eF9yZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX181NCkp IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 dXBsZV9fNTQpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fNTQpOworKyAgX19weXhf Y29kZW9ial9fNTUgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMywgMCwgNSwgMCwgQ09f T1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzU0LCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3Nfc3RyaW5nc291cmNlLCBfX3B5eF9uX3Nf cHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgMSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzU1KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gMDsKKysg IF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAg cmV0dXJuIC0xOworK30KKysKKytzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X0lu aXRHbG9iYWxzKHZvaWQpIHsKKysgIGlmIChfX1B5eF9Jbml0U3RyaW5ncyhfX3B5eF9zdHJpbmdf dGFiKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcik7CisrICBfX3B5eF9pbnRf MCA9IFB5SW50X0Zyb21Mb25nKDApOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8wKSkgX19QWVhf RVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfaW50XzEgPSBQeUludF9Gcm9tTG9u ZygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfMSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X2ludF8yID0gUHlJbnRfRnJvbUxvbmcoMik7IGlmICh1bmxpa2Vs eSghX19weXhfaW50XzIpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF9pbnRfMyA9IFB5SW50X0Zyb21Mb25nKDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8zKSkg X19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfaW50XzMyID0gUHlJbnRf RnJvbUxvbmcoMzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8zMikpIF9fUFlYX0VSUigwLCAx LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X2ludF81NzEzMTY5ID0gUHlJbnRfRnJvbUxvbmco NTcxMzE2OUwpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF81NzEzMTY5KSkgX19QWVhfRVJSKDAs IDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfaW50XzkwOTU4MjYyID0gUHlJbnRfRnJvbUxv bmcoOTA5NTgyNjJMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfOTA5NTgyNjIpKSBfX1BZWF9F UlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF9pbnRfMTQyMDM2OTEwID0gUHlJbnRf RnJvbUxvbmcoMTQyMDM2OTEwTCk7IGlmICh1bmxpa2VseSghX19weXhfaW50XzE0MjAzNjkxMCkp IF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X2ludF8yMjI0MTkxNDkg PSBQeUludF9Gcm9tTG9uZygyMjI0MTkxNDlMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfMjIy NDE5MTQ5KSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfaW50XzIy ODgyMjA1MyA9IFB5SW50X0Zyb21Mb25nKDIyODgyMjA1M0wpOyBpZiAodW5saWtlbHkoIV9fcHl4 X2ludF8yMjg4MjIwNTMpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF9pbnRfbmVnXzEgPSBQeUludF9Gcm9tTG9uZygtMSk7IGlmICh1bmxpa2VseSghX19weXhfaW50 X25lZ18xKSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgcmV0dXJuIDA7Cisr ICBfX3B5eF9MMV9lcnJvcjo7CisrICByZXR1cm4gLTE7CisrfQorKworK3N0YXRpYyBDWVRIT05f U01BTExfQ09ERSBpbnQgX19QeXhfbW9kaW5pdF9nbG9iYWxfaW5pdF9jb2RlKHZvaWQpOyAvKnBy b3RvKi8KKytzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X21vZGluaXRfdmFyaWFi bGVfZXhwb3J0X2NvZGUodm9pZCk7IC8qcHJvdG8qLworK3N0YXRpYyBDWVRIT05fU01BTExfQ09E RSBpbnQgX19QeXhfbW9kaW5pdF9mdW5jdGlvbl9leHBvcnRfY29kZSh2b2lkKTsgLypwcm90byov Cisrc3RhdGljIENZVEhPTl9TTUFMTF9DT0RFIGludCBfX1B5eF9tb2Rpbml0X3R5cGVfaW5pdF9j b2RlKHZvaWQpOyAvKnByb3RvKi8KKytzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4 X21vZGluaXRfdHlwZV9pbXBvcnRfY29kZSh2b2lkKTsgLypwcm90byovCisrc3RhdGljIENZVEhP Tl9TTUFMTF9DT0RFIGludCBfX1B5eF9tb2Rpbml0X3ZhcmlhYmxlX2ltcG9ydF9jb2RlKHZvaWQp OyAvKnByb3RvKi8KKytzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X21vZGluaXRf ZnVuY3Rpb25faW1wb3J0X2NvZGUodm9pZCk7IC8qcHJvdG8qLworKworK3N0YXRpYyBpbnQgX19Q eXhfbW9kaW5pdF9nbG9iYWxfaW5pdF9jb2RlKHZvaWQpIHsKKysgIF9fUHl4X1JlZk5hbm55RGVj bGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19QeXhfbW9kaW5pdF9n bG9iYWxfaW5pdF9jb2RlIiwgMCk7CisrICAvKi0tLSBHbG9iYWwgaW5pdCBjb2RlIC0tLSovCisr ICBfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY2FsbGJhY2tzID0gUHlfTm9uZTsgUHlf SU5DUkVGKFB5X05vbmUpOworKyAgX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5 X3VzZXJkYXRhcyA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgX19Q eXhfbW9kaW5pdF92YXJpYWJsZV9leHBvcnRfY29kZSh2b2lkKSB7CisrICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fUHl4X21vZGlu aXRfdmFyaWFibGVfZXhwb3J0X2NvZGUiLCAwKTsKKysgIC8qLS0tIFZhcmlhYmxlIGV4cG9ydCBj b2RlIC0tLSovCisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiAw OworK30KKysKKytzdGF0aWMgaW50IF9fUHl4X21vZGluaXRfZnVuY3Rpb25fZXhwb3J0X2NvZGUo dm9pZCkgeworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX1B5eF9tb2Rpbml0X2Z1bmN0aW9uX2V4cG9ydF9jb2RlIiwgMCk7Cisr ICAvKi0tLSBGdW5jdGlvbiBleHBvcnQgY29kZSAtLS0qLworKyAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBfX1B5eF9tb2Rp bml0X3R5cGVfaW5pdF9jb2RlKHZvaWQpIHsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25z CisrICBpbnQgX19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1l ID0gTlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfX1B5eF9tb2Rpbml0X3R5cGVfaW5pdF9jb2RlIiwgMCk7CisrICAvKi0tLSBU eXBlIGluaXQgY29kZSAtLS0qLworKyAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRW5kT2ZGaWxlUmVhY2hlZCA9ICZfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0VuZE9mRmlsZVJlYWNoZWQ7CisrICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0VuZE9mRmlsZVJlYWNoZWQuX2luaXQgPSAoUHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICosIHN0cnVjdCBtcHZfZXZl bnRfZW5kX2ZpbGUgKikpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVS ZWFjaGVkX19pbml0OworKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCkgPCAwKSBfX1BZWF9FUlIoMCwgMTU2LCBfX3B5 eF9MMV9lcnJvcikKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKKysgIF9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQudHBfcHJpbnQgPSAw OworKyAgI2VuZGlmCisrICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNF X1BZVFlQRV9MT09LVVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRW5kT2ZGaWxlUmVhY2hlZC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQudHBfZ2V0YXR0cm8gPT0gUHlPYmplY3RfR2Vu ZXJpY0dldEF0dHIpKSB7CisrICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0Vu ZE9mRmlsZVJlYWNoZWQudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0 cjsKKysgIH0KKysgIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZC50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9f cHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9z X0VuZE9mRmlsZVJlYWNoZWQsIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9fcHl4X0wx X2Vycm9yKQorKyAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigw LCAxNTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0VuZE9mRmlsZVJlYWNoZWQgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RW5kT2ZGaWxlUmVhY2hlZDsKKysgIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2 X0xvZ01lc3NhZ2UgPSAmX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlOworKyAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLl9p bml0ID0gKFB5T2JqZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfTG9nTWVzc2FnZSAqLCBzdHJ1Y3QgbXB2X2V2ZW50X2xvZ19tZXNzYWdlICopKV9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9faW5pdDsKKysgIGlmIChQeVR5cGVf UmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UpIDwgMCkg X19QWVhfRVJSKDAsIDE4MiwgX19weXhfTDFfZXJyb3IpCisrICAjaWYgUFlfVkVSU0lPTl9IRVgg PCAweDAzMDgwMEIxCisrICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlLnRwX3ByaW50ID0gMDsKKysgICNlbmRpZgorKyAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xP VFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UudHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLnRwX2dldGF0dHJvID09IFB5T2JqZWN0 X0dlbmVyaWNHZXRBdHRyKSkgeworKyAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Mb2dNZXNzYWdlLnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7 CisrICB9CisrICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X0xvZ01lc3NhZ2UudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfTG9nTWVzc2FnZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikK KysgIGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19Mb2dNZXNzYWdlLCAo UHlPYmplY3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSkg PCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9zZXR1 cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9n TWVzc2FnZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlID0gJl9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2U7CisrICBfX3B5eF92dGFicHRyXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSA9ICZfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18z bXB2X1Byb3BlcnR5OworKyAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eS5faW5pdCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X1Byb3BlcnR5ICosIHN0cnVjdCBtcHZfZXZlbnRfcHJvcGVydHkgKikpX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X19pbml0OworKyAgaWYgKFB5VHlwZV9S ZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpIDwgMCkgX19Q WVhfRVJSKDAsIDI0MywgX19weXhfTDFfZXJyb3IpCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPCAw eDAzMDgwMEIxCisrICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eS50 cF9wcmludCA9IDA7CisrICAjZW5kaWYKKysgIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYm IENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eS50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X1Byb3BlcnR5LnRwX2dldGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNH ZXRBdHRyKSkgeworKyAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eS50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOworKyAgfQorKyAg aWYgKF9fUHl4X1NldFZ0YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eS50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eSkgPCAwKSBfX1BZWF9FUlIoMCwgMjQzLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeU9iamVj dF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19Qcm9wZXJ0eSwgKFB5T2JqZWN0ICopJl9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSA8IDApIF9fUFlYX0VSUigwLCAy NDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3Qq KSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSkgPCAwKSBfX1BZWF9F UlIoMCwgMjQzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Qcm9wZXJ0eSA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eTsKKysgIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ID0gJl9f cHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQ7CisrICBfX3B5eF92dGFibGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50Ll9kYXRhID0gKFB5T2JqZWN0ICooKikoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKiwgc3RydWN0IG1wdl9ldmVu dCAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGE7CisrICBfX3B5 eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50Ll9pbml0ID0gKFB5T2JqZWN0ICoo Kikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKiwgc3RydWN0 IG1wdl9ldmVudCAqLCBQeU9iamVjdCAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 RXZlbnRfX2luaXQ7CisrICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FdmVudCkgPCAwKSBfX1BZWF9FUlIoMCwgMjU2LCBfX3B5eF9MMV9lcnJvcikK KysgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKKysgIF9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0V2ZW50LnRwX3ByaW50ID0gMDsKKysgICNlbmRpZgorKyAgaWYgKChD WVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtl bHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50LnRwX2RpY3RvZmZzZXQg JiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQudHBfZ2V0YXR0cm8gPT0g UHlPYmplY3RfR2VuZXJpY0dldEF0dHIpKSB7CisrICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0V2ZW50LnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0 dHI7CisrICB9CisrICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0V2ZW50LnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18z bXB2X0V2ZW50KSA8IDApIF9fUFlYX0VSUigwLCAyNTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX0V2ZW50LCAoUHlPYmplY3QgKikm X19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpIDwgMCkgX19QWVhfRVJSKDAs IDI1NiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVj dCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KSA8IDApIF9fUFlYX0VS UigwLCAyNTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X0V2ZW50ID0gJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50Owor KyAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCA9ICZfX3B5eF92 dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQ7CisrICBfX3B5eF92dGFibGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQuX3ByZXBfbm9kZV9saXN0ID0gKHN0cnVjdCBtcHZf bm9kZV9saXN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCAqLCBQeU9iamVjdCAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF9fcHJlcF9ub2RlX2xpc3Q7CisrICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQuX3ByZXBfbm9kZV9tYXAgPSAoc3RydWN0IG1wdl9ub2RlX2xpc3QgKigqKShzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICosIFB5T2JqZWN0ICop KV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25vZGVfbWFwOwor KyAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0Ll9wcmVwX25hdGl2 ZV92YWx1ZSA9IChzdHJ1Y3QgbXB2X25vZGUgKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKikpX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVlOworKyAgX19w eXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0Ll9mcmVlX25hdGl2ZV92YWx1 ZSA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKiwgc3RydWN0IG1wdl9ub2RlKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWU7CisrICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5 eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCAz NTksIF9fcHl4X0wxX2Vycm9yKQorKyAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQor KyAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC50cF9wcmludCA9IDA7 CisrICAjZW5kaWYKKysgIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0Vf UFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0LnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dC50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKysg ICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC50cF9nZXRhdHRybyA9 IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOworKyAgfQorKyAgaWYgKF9fUHl4X1NldFZ0 YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LnRwX2RpY3QsIF9f cHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJS KDAsIDM1OSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9t LCBfX3B5eF9uX3NfQ29udGV4dCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDM1OSwgX19weXhfTDFfZXJyb3Ip CisrICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDM1OSwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCA9ICZf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0OworKyAgX19weXhfdnRhYnB0 cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyA9ICZfX3B5eF92dGFibGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXM7CisrICBfX3B5eF92dGFibGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMuYWRkX3ZvaWRwID0gKFB5T2JqZWN0ICooKiko c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqLCBl bnVtIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSwgdm9pZCAqLCBzdHJ1Y3QgX19weXhfb3B0X2FyZ3Nf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfdm9pZHAgKl9fcHl4X29w dGlvbmFsX2FyZ3MpKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFt c19hZGRfdm9pZHA7CisrICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5k ZXJQYXJhbXMuYWRkX2ludCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKiwgZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5 cGUsIGludCkpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2Fk ZF9pbnQ7CisrICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJh bXMuYWRkX3N0cmluZyA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKiwgZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5cGUs IGNoYXIgKikpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2Fk ZF9zdHJpbmc7CisrICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fUmVuZGVyUGFyYW1zKSA8IDApIF9fUFlYX0VSUigwLCA4ODEsIF9fcHl4X0wxX2Vy cm9yKQorKyAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQorKyAgX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9wcmludCA9IDA7CisrICAjZW5k aWYKKysgIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xP T0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zLnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X1JlbmRlclBhcmFtcy50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsK KysgICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9n ZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOworKyAgfQorKyAgaWYgKF9f UHl4X1NldFZ0YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zLnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQ YXJhbXMpIDwgMCkgX19QWVhfRVJSKDAsIDg4MSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlP YmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfUmVuZGVyUGFyYW1zLCAoUHlPYmplY3Qg KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcykgPCAwKSBf X1BZWF9FUlIoMCwgODgxLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9zZXR1cF9yZWR1 Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBh cmFtcykgPCAwKSBfX1BZWF9FUlIoMCwgODgxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zID0gJl9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXM7CisrICBfX3B5eF92dGFicHRyXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gPSAmX19weXhfdnRhYmxlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm87CisrICBfX3B5eF92dGFibGVfOXZpZGN1dHRl cl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mby5fZnJvbV9zdHJ1Y3QgPSAoUHlPYmplY3QgKigq KShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8g Kiwgc3RydWN0IG1wdl9yZW5kZXJfZnJhbWVfaW5mbyAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNVJlbmRlckZyYW1lSW5mb19fZnJvbV9zdHJ1Y3Q7CisrICBpZiAoUHlUeXBlX1Jl YWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8pIDwg MCkgX19QWVhfRVJSKDAsIDkyOCwgX19weXhfTDFfZXJyb3IpCisrICAjaWYgUFlfVkVSU0lPTl9I RVggPCAweDAzMDgwMEIxCisrICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJGcmFtZUluZm8udHBfcHJpbnQgPSAwOworKyAgI2VuZGlmCisrICBpZiAoKENZVEhPTl9VU0Vf VFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYmIGxpa2VseSghX19weXhf dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2RpY3RvZmZzZXQg JiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2dl dGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworKyAgICBfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8udHBfZ2V0YXR0cm8gPSBfX1B5eF9Q eU9iamVjdF9HZW5lcmljR2V0QXR0cjsKKysgIH0KKysgIGlmIChfX1B5eF9TZXRWdGFibGUoX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2RpY3QsIF9f cHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbykgPCAwKSBf X1BZWF9FUlIoMCwgOTI4LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9zZXR1cF9yZWR1 Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJh bWVJbmZvKSA8IDApIF9fUFlYX0VSUigwLCA5MjgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf cHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyA9ICZfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm87CisrICBpZiAoUHlUeXBlX1Jl YWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSA8IDAp IF9fUFlYX0VSUigwLCA5MzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgI2lmIFBZX1ZFUlNJT05fSEVY IDwgMHgwMzA4MDBCMQorKyAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dC50cF9wcmludCA9IDA7CisrICAjZW5kaWYKKysgIGlmICgoQ1lUSE9OX1VTRV9UWVBF X1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LnRwX2RpY3RvZmZzZXQgJiYgX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dC50cF9nZXRhdHRybyA9 PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKysgICAgX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dC50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dl bmVyaWNHZXRBdHRyOworKyAgfQorKyAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19w eXhfbl9zX1JlbmRlckNvbnRleHQsIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCA5MzcsIF9fcHl4X0wx X2Vycm9yKQorKyAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCA5 MzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X1JlbmRlckNvbnRleHQgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dDsKKysgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRl ckNvbnRleHQudHBfYmFzZSA9IF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJDb250ZXh0OworKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMTEyMiwgX19w eXhfTDFfZXJyb3IpCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCisrICBfX3B5 eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX3ByaW50 ID0gMDsKKysgICNlbmRpZgorKyAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9O X1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQudHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2dldGF0dHJvID09IFB5 T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworKyAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3Rf R2VuZXJpY0dldEF0dHI7CisrICB9CisrICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBf X3B5eF9uX3NfT3BlbkdMUmVuZGVyQ29udGV4dCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAs IDExMjIsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmpl Y3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0 KSA8IDApIF9fUFlYX0VSUigwLCAxMTIyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3B0eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0ID0gJl9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQ7CisrICBpZiAoUHlUeXBl X1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1 Y3RfX19lcnJvcnMpIDwgMCkgX19QWVhfRVJSKDAsIDMxOCwgX19weXhfTDFfZXJyb3IpCisrICAj aWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCisrICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMudHBfcHJpbnQgPSAwOworKyAg I2VuZGlmCisrICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQ RV9MT09LVVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19w eXhfc2NvcGVfc3RydWN0X19fZXJyb3JzLnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzLnRwX2dldGF0dHJv ID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworKyAgICBfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMudHBfZ2V0YXR0cm8gPSBf X1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0ck5vRGljdDsKKysgIH0KKysgIF9fcHl4X3B0eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgPSAmX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3Jz OworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gMDsKKysgIF9f cHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0 dXJuIC0xOworK30KKysKKytzdGF0aWMgaW50IF9fUHl4X21vZGluaXRfdHlwZV9pbXBvcnRfY29k ZSh2b2lkKSB7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fUHl4X21vZGluaXRfdHlwZV9pbXBvcnRfY29kZSIsIDApOworKyAg LyotLS0gVHlwZSBpbXBvcnQgY29kZSAtLS0qLworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250 ZXh0KCk7CisrICByZXR1cm4gMDsKKyt9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODgKKy0gKiAgICAgb3B0aW9uX2Vycm9yID0gTVBWX0VSUk9SX09QVElPTl9FUlJP UgorLSAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfUFJPUEVSVFlfTk9UX0ZPVU5ECistICog ICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9GT1JNQVQgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBwcm9wZXJ0eV91bmF2YWlsYWJsZSA9IE1QVl9F UlJPUl9QUk9QRVJUWV9VTkFWQUlMQUJMRQorLSAqICAgICBwcm9wZXJ0eV9lcnJvciA9IE1QVl9F UlJPUl9QUk9QRVJUWV9FUlJPUgorLSAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1BST1BFUlRZX0ZPUk1BVCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg4LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX3Byb3BlcnR5X2Zvcm1hdCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigw LCA4OCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKKytzdGF0aWMgaW50IF9fUHl4X21vZGluaXRfdmFyaWFibGVfaW1wb3J0X2NvZGUo dm9pZCkgeworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX1B5eF9tb2Rpbml0X3ZhcmlhYmxlX2ltcG9ydF9jb2RlIiwgMCk7Cisr ICAvKi0tLSBWYXJpYWJsZSBpbXBvcnQgY29kZSAtLS0qLworKyAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CisrICByZXR1cm4gMDsKKyt9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODkKKy0gKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX1BST1BFUlRZ X05PVF9GT1VORAorLSAqICAgICBwcm9wZXJ0eV9mb3JtYXQgPSBNUFZfRVJST1JfUFJPUEVSVFlf Rk9STUFUCistICogICAgIHByb3BlcnR5X3VuYXZhaWxhYmxlID0gTVBWX0VSUk9SX1BST1BFUlRZ X1VOQVZBSUxBQkxFICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcHJvcGVy dHlfZXJyb3IgPSBNUFZfRVJST1JfUFJPUEVSVFlfRVJST1IKKy0gKiAgICAgY29tbWFuZF9lcnJv ciA9IE1QVl9FUlJPUl9DT01NQU5ECistICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9G cm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfUFJPUEVSVFlfVU5BVkFJTEFCTEUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4OSwgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV91bmF2YWlsYWJsZSwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCA4OSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhf dF82KTsgX19weXhfdF82ID0gMDsKKytzdGF0aWMgaW50IF9fUHl4X21vZGluaXRfZnVuY3Rpb25f aW1wb3J0X2NvZGUodm9pZCkgeworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX1B5eF9tb2Rpbml0X2Z1bmN0aW9uX2ltcG9ydF9j b2RlIiwgMCk7CisrICAvKi0tLSBGdW5jdGlvbiBpbXBvcnQgY29kZSAtLS0qLworKyAgX19QeXhf UmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gMDsKKyt9CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTAKKy0gKiAgICAgcHJvcGVydHlfZm9ybWF0ID0g TVBWX0VSUk9SX1BST1BFUlRZX0ZPUk1BVAorLSAqICAgICBwcm9wZXJ0eV91bmF2YWlsYWJsZSA9 IE1QVl9FUlJPUl9QUk9QRVJUWV9VTkFWQUlMQUJMRQorLSAqICAgICBwcm9wZXJ0eV9lcnJvciA9 IE1QVl9FUlJPUl9QUk9QRVJUWV9FUlJPUiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIGNvbW1hbmRfZXJyb3IgPSBNUFZfRVJST1JfQ09NTUFORAorLSAqICAgICBsb2FkaW5n X2ZhaWxlZCA9IE1QVl9FUlJPUl9MT0FESU5HX0ZBSUxFRAorLSAqLworLSAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1BST1BFUlRZX0VSUk9S KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTAsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcHJvcGVydHlfZXJyb3IsIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgOTAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTEKKy0gKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1JfUFJPUEVS VFlfVU5BVkFJTEFCTEUKKy0gKiAgICAgcHJvcGVydHlfZXJyb3IgPSBNUFZfRVJST1JfUFJPUEVS VFlfRVJST1IKKy0gKiAgICAgY29tbWFuZF9lcnJvciA9IE1QVl9FUlJPUl9DT01NQU5EICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgbG9hZGluZ19mYWlsZWQgPSBNUFZfRVJS T1JfTE9BRElOR19GQUlMRUQKKy0gKiAgICAgYW9faW5pdF9mYWlsZWQgPSBNUFZfRVJST1JfQU9f SU5JVF9GQUlMRUQKKy0gKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9f bXB2X2Vycm9yKE1QVl9FUlJPUl9DT01NQU5EKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgOTEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfY29t bWFuZF9lcnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MSwgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysjaWZuZGVm IENZVEhPTl9OT19QWUlOSVRfRVhQT1JUCisrI2RlZmluZSBfX1B5eF9QeU1PRElOSVRfRlVOQyBQ eU1PRElOSVRfRlVOQworKyNlbGlmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrI2lmZGVmIF9fY3Bs dXNwbHVzCisrI2RlZmluZSBfX1B5eF9QeU1PRElOSVRfRlVOQyBleHRlcm4gIkMiIHZvaWQKKysj ZWxzZQorKyNkZWZpbmUgX19QeXhfUHlNT0RJTklUX0ZVTkMgdm9pZAorKyNlbmRpZgorKyNlbHNl CisrI2lmZGVmIF9fY3BsdXNwbHVzCisrI2RlZmluZSBfX1B5eF9QeU1PRElOSVRfRlVOQyBleHRl cm4gIkMiIFB5T2JqZWN0ICoKKysjZWxzZQorKyNkZWZpbmUgX19QeXhfUHlNT0RJTklUX0ZVTkMg UHlPYmplY3QgKgorKyNlbmRpZgorKyNlbmRpZgorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjkyCistICogICAgIHByb3BlcnR5X2Vycm9yID0gTVBWX0VSUk9SX1BST1BF UlRZX0VSUk9SCistICogICAgIGNvbW1hbmRfZXJyb3IgPSBNUFZfRVJST1JfQ09NTUFORAorLSAq ICAgICBsb2FkaW5nX2ZhaWxlZCA9IE1QVl9FUlJPUl9MT0FESU5HX0ZBSUxFRCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX0FP X0lOSVRfRkFJTEVECistICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lOSVRf RkFJTEVECistICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l cnJvcihNUFZfRVJST1JfTE9BRElOR19GQUlMRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA5MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19s b2FkaW5nX2ZhaWxlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MiwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MworLSAqICAgICBjb21tYW5kX2Vy cm9yID0gTVBWX0VSUk9SX0NPTU1BTkQKKy0gKiAgICAgbG9hZGluZ19mYWlsZWQgPSBNUFZfRVJS T1JfTE9BRElOR19GQUlMRUQKKy0gKiAgICAgYW9faW5pdF9mYWlsZWQgPSBNUFZfRVJST1JfQU9f SU5JVF9GQUlMRUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICB2b19pbml0 X2ZhaWxlZCA9IE1QVl9FUlJPUl9WT19JTklUX0ZBSUxFRAorLSAqICAgICBub3RoaW5nX3RvX3Bs YXkgPSBNUFZfRVJST1JfTk9USElOR19UT19QTEFZCistICovCistICBfX3B5eF90XzYgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfQU9fSU5JVF9GQUlMRUQpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5MywgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFz cyhfX3B5eF90XzcsIF9fcHl4X25fc19hb19pbml0X2ZhaWxlZCwgX19weXhfdF82KSA8IDApIF9f UFlYX0VSUigwLCA5MywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKKysjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKytfX1B5eF9QeU1P RElOSVRfRlVOQyBpbml0bXB2KHZvaWQpIENZVEhPTl9TTUFMTF9DT0RFOyAvKnByb3RvKi8KKytf X1B5eF9QeU1PRElOSVRfRlVOQyBpbml0bXB2KHZvaWQpCisrI2Vsc2UKKytfX1B5eF9QeU1PRElO SVRfRlVOQyBQeUluaXRfbXB2KHZvaWQpIENZVEhPTl9TTUFMTF9DT0RFOyAvKnByb3RvKi8KKytf X1B5eF9QeU1PRElOSVRfRlVOQyBQeUluaXRfbXB2KHZvaWQpCisrI2lmIENZVEhPTl9QRVA0ODlf TVVMVElfUEhBU0VfSU5JVAorK3sKKysgIHJldHVybiBQeU1vZHVsZURlZl9Jbml0KCZfX3B5eF9t b2R1bGVkZWYpOworK30KKytzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X2NoZWNr X3NpbmdsZV9pbnRlcnByZXRlcih2b2lkKSB7CisrICAgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAw eDAzMDcwMEExCisrICAgIHN0YXRpYyBQWV9JTlQ2NF9UIG1haW5faW50ZXJwcmV0ZXJfaWQgPSAt MTsKKysgICAgUFlfSU5UNjRfVCBjdXJyZW50X2lkID0gUHlJbnRlcnByZXRlclN0YXRlX0dldElE KFB5VGhyZWFkU3RhdGVfR2V0KCktPmludGVycCk7CisrICAgIGlmIChtYWluX2ludGVycHJldGVy X2lkID09IC0xKSB7CisrICAgICAgICBtYWluX2ludGVycHJldGVyX2lkID0gY3VycmVudF9pZDsK KysgICAgICAgIHJldHVybiAodW5saWtlbHkoY3VycmVudF9pZCA9PSAtMSkpID8gLTEgOiAwOwor KyAgICB9IGVsc2UgaWYgKHVubGlrZWx5KG1haW5faW50ZXJwcmV0ZXJfaWQgIT0gY3VycmVudF9p ZCkpCisrICAgICNlbHNlCisrICAgIHN0YXRpYyBQeUludGVycHJldGVyU3RhdGUgKm1haW5faW50 ZXJwcmV0ZXIgPSBOVUxMOworKyAgICBQeUludGVycHJldGVyU3RhdGUgKmN1cnJlbnRfaW50ZXJw cmV0ZXIgPSBQeVRocmVhZFN0YXRlX0dldCgpLT5pbnRlcnA7CisrICAgIGlmICghbWFpbl9pbnRl cnByZXRlcikgeworKyAgICAgICAgbWFpbl9pbnRlcnByZXRlciA9IGN1cnJlbnRfaW50ZXJwcmV0 ZXI7CisrICAgIH0gZWxzZSBpZiAodW5saWtlbHkobWFpbl9pbnRlcnByZXRlciAhPSBjdXJyZW50 X2ludGVycHJldGVyKSkKKysgICAgI2VuZGlmCisrICAgIHsKKysgICAgICAgIFB5RXJyX1NldFN0 cmluZygKKysgICAgICAgICAgICBQeUV4Y19JbXBvcnRFcnJvciwKKysgICAgICAgICAgICAiSW50 ZXJwcmV0ZXIgY2hhbmdlIGRldGVjdGVkIC0gdGhpcyBtb2R1bGUgY2FuIG9ubHkgYmUgbG9hZGVk IGludG8gb25lIGludGVycHJldGVyIHBlciBwcm9jZXNzLiIpOworKyAgICAgICAgcmV0dXJuIC0x OworKyAgICB9CisrICAgIHJldHVybiAwOworK30KKytzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUg aW50IF9fUHl4X2NvcHlfc3BlY190b19tb2R1bGUoUHlPYmplY3QgKnNwZWMsIFB5T2JqZWN0ICpt b2RkaWN0LCBjb25zdCBjaGFyKiBmcm9tX25hbWUsIGNvbnN0IGNoYXIqIHRvX25hbWUsIGludCBh bGxvd19ub25lKSB7CisrICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJp bmcoc3BlYywgZnJvbV9uYW1lKTsKKysgICAgaW50IHJlc3VsdCA9IDA7CisrICAgIGlmIChsaWtl bHkodmFsdWUpKSB7CisrICAgICAgICBpZiAoYWxsb3dfbm9uZSB8fCB2YWx1ZSAhPSBQeV9Ob25l KSB7CisrICAgICAgICAgICAgcmVzdWx0ID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcobW9kZGljdCwg dG9fbmFtZSwgdmFsdWUpOworKyAgICAgICAgfQorKyAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsK KysgICAgfSBlbHNlIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVy cm9yKSkgeworKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKysgICAgfSBlbHNlIHsKKysgICAgICAg IHJlc3VsdCA9IC0xOworKyAgICB9CisrICAgIHJldHVybiByZXN1bHQ7CisrfQorK3N0YXRpYyBD WVRIT05fU01BTExfQ09ERSBQeU9iamVjdCogX19weXhfcHltb2RfY3JlYXRlKFB5T2JqZWN0ICpz cGVjLCBDWVRIT05fVU5VU0VEIFB5TW9kdWxlRGVmICpkZWYpIHsKKysgICAgUHlPYmplY3QgKm1v ZHVsZSA9IE5VTEwsICptb2RkaWN0LCAqbW9kbmFtZTsKKysgICAgaWYgKF9fUHl4X2NoZWNrX3Np bmdsZV9pbnRlcnByZXRlcigpKQorKyAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgIGlmIChfX3B5 eF9tKQorKyAgICAgICAgcmV0dXJuIF9fUHl4X05ld1JlZihfX3B5eF9tKTsKKysgICAgbW9kbmFt ZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoc3BlYywgIm5hbWUiKTsKKysgICAgaWYgKHVubGlr ZWx5KCFtb2RuYW1lKSkgZ290byBiYWQ7CisrICAgIG1vZHVsZSA9IFB5TW9kdWxlX05ld09iamVj dChtb2RuYW1lKTsKKysgICAgUHlfREVDUkVGKG1vZG5hbWUpOworKyAgICBpZiAodW5saWtlbHko IW1vZHVsZSkpIGdvdG8gYmFkOworKyAgICBtb2RkaWN0ID0gUHlNb2R1bGVfR2V0RGljdChtb2R1 bGUpOworKyAgICBpZiAodW5saWtlbHkoIW1vZGRpY3QpKSBnb3RvIGJhZDsKKysgICAgaWYgKHVu bGlrZWx5KF9fUHl4X2NvcHlfc3BlY190b19tb2R1bGUoc3BlYywgbW9kZGljdCwgImxvYWRlciIs ICJfX2xvYWRlcl9fIiwgMSkgPCAwKSkgZ290byBiYWQ7CisrICAgIGlmICh1bmxpa2VseShfX1B5 eF9jb3B5X3NwZWNfdG9fbW9kdWxlKHNwZWMsIG1vZGRpY3QsICJvcmlnaW4iLCAiX19maWxlX18i LCAxKSA8IDApKSBnb3RvIGJhZDsKKysgICAgaWYgKHVubGlrZWx5KF9fUHl4X2NvcHlfc3BlY190 b19tb2R1bGUoc3BlYywgbW9kZGljdCwgInBhcmVudCIsICJfX3BhY2thZ2VfXyIsIDEpIDwgMCkp IGdvdG8gYmFkOworKyAgICBpZiAodW5saWtlbHkoX19QeXhfY29weV9zcGVjX3RvX21vZHVsZShz cGVjLCBtb2RkaWN0LCAic3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMiLCAiX19wYXRoX18iLCAw KSA8IDApKSBnb3RvIGJhZDsKKysgICAgcmV0dXJuIG1vZHVsZTsKKytiYWQ6CisrICAgIFB5X1hE RUNSRUYobW9kdWxlKTsKKysgICAgcmV0dXJuIE5VTEw7CisrfQorIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk0CistICogICAgIGxvYWRpbmdfZmFpbGVkID0gTVBWX0VS Uk9SX0xPQURJTkdfRkFJTEVECistICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX0FP X0lOSVRfRkFJTEVECistICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lOSVRf RkFJTEVEICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgbm90aGluZ190b19w bGF5ID0gTVBWX0VSUk9SX05PVEhJTkdfVE9fUExBWQorLSAqICAgICB1bmtub3duX2Zvcm1hdCA9 IE1QVl9FUlJPUl9VTktOT1dOX0ZPUk1BVAorLSAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJ bnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1ZPX0lOSVRfRkFJTEVEKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTQsIF9fcHl4X0wxX2Vycm9yKQorLSAg X19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19w eXhfdF83LCBfX3B5eF9uX3Nfdm9faW5pdF9mYWlsZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9F UlIoMCwgOTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9f cHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTUK Ky0gKiAgICAgYW9faW5pdF9mYWlsZWQgPSBNUFZfRVJST1JfQU9fSU5JVF9GQUlMRUQKKy0gKiAg ICAgdm9faW5pdF9mYWlsZWQgPSBNUFZfRVJST1JfVk9fSU5JVF9GQUlMRUQKKy0gKiAgICAgbm90 aGluZ190b19wbGF5ID0gTVBWX0VSUk9SX05PVEhJTkdfVE9fUExBWSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgIHVua25vd25fZm9ybWF0ID0gTVBWX0VSUk9SX1VOS05PV05f Rk9STUFUCistICogICAgIHVuc3VwcG9ydGVkID0gTVBWX0VSUk9SX1VOU1VQUE9SVEVECisrc3Rh dGljIENZVEhPTl9TTUFMTF9DT0RFIGludCBfX3B5eF9weW1vZF9leGVjX21wdihQeU9iamVjdCAq X19weXhfcHlpbml0X21vZHVsZSkKKysjZW5kaWYKKysjZW5kaWYKKyt7CisrICBQeU9iamVjdCAq X19weXhfdF8xID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworKyAgaW50 IF9fcHl4X3RfMzsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAgaW50IF9fcHl4 X3RfNTsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4 X3RfNyA9IE5VTEw7CisrICBpbnQgX19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9f cHl4X2ZpbGVuYW1lID0gTlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKysgIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICAjaWYgQ1lUSE9OX1BFUDQ4OV9NVUxUSV9QSEFTRV9J TklUCisrICBpZiAoX19weXhfbSkgeworKyAgICBpZiAoX19weXhfbSA9PSBfX3B5eF9weWluaXRf bW9kdWxlKSByZXR1cm4gMDsKKysgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJv ciwgIk1vZHVsZSAnbXB2JyBoYXMgYWxyZWFkeSBiZWVuIGltcG9ydGVkLiBSZS1pbml0aWFsaXNh dGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIpOworKyAgICByZXR1cm4gLTE7CisrICB9CisrICAjZWxp ZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgIGlmIChfX3B5eF9tKSByZXR1cm4gX19QeXhfTmV3 UmVmKF9fcHl4X20pOworKyAgI2VuZGlmCisrICAjaWYgQ1lUSE9OX1JFRk5BTk5ZCisrX19QeXhf UmVmTmFubnkgPSBfX1B5eF9SZWZOYW5ueUltcG9ydEFQSSgicmVmbmFubnkiKTsKKytpZiAoIV9f UHl4X1JlZk5hbm55KSB7CisrICBQeUVycl9DbGVhcigpOworKyAgX19QeXhfUmVmTmFubnkgPSBf X1B5eF9SZWZOYW5ueUltcG9ydEFQSSgiQ3l0aG9uLlJ1bnRpbWUucmVmbmFubnkiKTsKKysgIGlm ICghX19QeXhfUmVmTmFubnkpCisrICAgICAgUHlfRmF0YWxFcnJvcigiZmFpbGVkIHRvIGltcG9y dCAncmVmbmFubnknIG1vZHVsZSIpOworK30KKysjZW5kaWYKKysgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfX1B5eF9QeU1PRElOSVRfRlVOQyBQeUluaXRfbXB2KHZvaWQpIiwgMCk7Cisr ICBpZiAoX19QeXhfY2hlY2tfYmluYXJ5X3ZlcnNpb24oKSA8IDApIF9fUFlYX0VSUigwLCAxLCBf X3B5eF9MMV9lcnJvcikKKysgICNpZmRlZiBfX1B4eV9QeUZyYW1lX0luaXRpYWxpemVfT2Zmc2V0 cworKyAgX19QeHlfUHlGcmFtZV9Jbml0aWFsaXplX09mZnNldHMoKTsKKysgICNlbmRpZgorKyAg X19weXhfZW1wdHlfdHVwbGUgPSBQeVR1cGxlX05ldygwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9l bXB0eV90dXBsZSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X2Vt cHR5X2J5dGVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgiIiwgMCk7IGlmICh1bmxpa2Vs eSghX19weXhfZW1wdHlfYnl0ZXMpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF9lbXB0eV91bmljb2RlID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCIiLCAw KTsgaWYgKHVubGlrZWx5KCFfX3B5eF9lbXB0eV91bmljb2RlKSkgX19QWVhfRVJSKDAsIDEsIF9f cHl4X0wxX2Vycm9yKQorKyAgI2lmZGVmIF9fUHl4X0N5RnVuY3Rpb25fVVNFRAorKyAgaWYgKF9f cHl4X0N5RnVuY3Rpb25faW5pdCgpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9y KQorKyAgI2VuZGlmCisrICAjaWZkZWYgX19QeXhfRnVzZWRGdW5jdGlvbl9VU0VECisrICBpZiAo X19weXhfRnVzZWRGdW5jdGlvbl9pbml0KCkgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFf ZXJyb3IpCisrICAjZW5kaWYKKysgICNpZmRlZiBfX1B5eF9Db3JvdXRpbmVfVVNFRAorKyAgaWYg KF9fcHl4X0Nvcm91dGluZV9pbml0KCkgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJy b3IpCisrICAjZW5kaWYKKysgICNpZmRlZiBfX1B5eF9HZW5lcmF0b3JfVVNFRAorKyAgaWYgKF9f cHl4X0dlbmVyYXRvcl9pbml0KCkgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3Ip CisrICAjZW5kaWYKKysgICNpZmRlZiBfX1B5eF9Bc3luY0dlbl9VU0VECisrICBpZiAoX19weXhf QXN5bmNHZW5faW5pdCgpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAg I2VuZGlmCisrICAjaWZkZWYgX19QeXhfU3RvcEFzeW5jSXRlcmF0aW9uX1VTRUQKKysgIGlmIChf X3B5eF9TdG9wQXN5bmNJdGVyYXRpb25faW5pdCgpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgI2VuZGlmCisrICAvKi0tLSBMaWJyYXJ5IGZ1bmN0aW9uIGRlY2xhcmF0 aW9ucyAtLS0qLworKyAgLyotLS0gVGhyZWFkcyBpbml0aWFsaXphdGlvbiBjb2RlIC0tLSovCisr ICAjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDcwMEYw ICYmIGRlZmluZWQoX19QWVhfRk9SQ0VfSU5JVF9USFJFQURTKSAmJiBfX1BZWF9GT1JDRV9JTklU X1RIUkVBRFMKKysgIFB5RXZhbF9Jbml0VGhyZWFkcygpOworKyAgI2VuZGlmCisrICAvKi0tLSBN b2R1bGUgY3JlYXRpb24gY29kZSAtLS0qLworKyAgI2lmIENZVEhPTl9QRVA0ODlfTVVMVElfUEhB U0VfSU5JVAorKyAgX19weXhfbSA9IF9fcHl4X3B5aW5pdF9tb2R1bGU7CisrICBQeV9JTkNSRUYo X19weXhfbSk7CisrICAjZWxzZQorKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICBfX3B5 eF9tID0gUHlfSW5pdE1vZHVsZTQoIm1wdiIsIF9fcHl4X21ldGhvZHMsIF9fcHl4X2tfcHltcHZf UHl0aG9uX3dyYXBwZXJfZm9yX2xpYm1wdiwgMCwgUFlUSE9OX0FQSV9WRVJTSU9OKTsgUHlfWElO Q1JFRihfX3B5eF9tKTsKKysgICNlbHNlCisrICBfX3B5eF9tID0gUHlNb2R1bGVfQ3JlYXRlKCZf X3B5eF9tb2R1bGVkZWYpOworKyAgI2VuZGlmCisrICBpZiAodW5saWtlbHkoIV9fcHl4X20pKSBf X1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICAjZW5kaWYKKysgIF9fcHl4X2QgPSBQ eU1vZHVsZV9HZXREaWN0KF9fcHl4X20pOyBpZiAodW5saWtlbHkoIV9fcHl4X2QpKSBfX1BZWF9F UlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICBQeV9JTkNSRUYoX19weXhfZCk7CisrICBfX3B5 eF9iID0gUHlJbXBvcnRfQWRkTW9kdWxlKF9fUHl4X0JVSUxUSU5fTU9EVUxFX05BTUUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X2IpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICBQ eV9JTkNSRUYoX19weXhfYik7CisrICBfX3B5eF9jeXRob25fcnVudGltZSA9IFB5SW1wb3J0X0Fk ZE1vZHVsZSgoY2hhciAqKSAiY3l0aG9uX3J1bnRpbWUiKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9j eXRob25fcnVudGltZSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIFB5X0lO Q1JFRihfX3B5eF9jeXRob25fcnVudGltZSk7CisrICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmlu ZyhfX3B5eF9tLCAiX19idWlsdGluc19fIiwgX19weXhfYikgPCAwKSBfX1BZWF9FUlIoMCwgMSwg X19weXhfTDFfZXJyb3IpOworKyAgLyotLS0gSW5pdGlhbGl6ZSB2YXJpb3VzIGdsb2JhbCBjb25z dGFudHMgZXRjLiAtLS0qLworKyAgaWYgKF9fUHl4X0luaXRHbG9iYWxzKCkgPCAwKSBfX1BZWF9F UlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMgJiYg KF9fUFlYX0RFRkFVTFRfU1RSSU5HX0VOQ09ESU5HX0lTX0FTQ0lJIHx8IF9fUFlYX0RFRkFVTFRf U1RSSU5HX0VOQ09ESU5HX0lTX0RFRkFVTFQpCisrICBpZiAoX19QeXhfaW5pdF9zeXNfZ2V0ZGVm YXVsdGVuY29kaW5nX3BhcmFtcygpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9y KQorKyAgI2VuZGlmCisrICBpZiAoX19weXhfbW9kdWxlX2lzX21haW5fdmlkY3V0dGVyX19saWJz X19tcHYpIHsKKysgICAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX25h bWUsIF9fcHl4X25fc19tYWluKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikK KysgIH0KKysgICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgIHsKKysgICAgUHlPYmplY3Qg Km1vZHVsZXMgPSBQeUltcG9ydF9HZXRNb2R1bGVEaWN0KCk7IGlmICh1bmxpa2VseSghbW9kdWxl cykpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgaWYgKCFQeURpY3RfR2V0 SXRlbVN0cmluZyhtb2R1bGVzLCAidmlkY3V0dGVyLmxpYnMubXB2IikpIHsKKysgICAgICBpZiAo dW5saWtlbHkoUHlEaWN0X1NldEl0ZW1TdHJpbmcobW9kdWxlcywgInZpZGN1dHRlci5saWJzLm1w diIsIF9fcHl4X20pIDwgMCkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAg fQorKyAgfQorKyAgI2VuZGlmCisrICAvKi0tLSBCdWlsdGluIGluaXQgY29kZSAtLS0qLworKyAg aWYgKF9fUHl4X0luaXRDYWNoZWRCdWlsdGlucygpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgLyotLS0gQ29uc3RhbnRzIGluaXQgY29kZSAtLS0qLworKyAgaWYgKF9f UHl4X0luaXRDYWNoZWRDb25zdGFudHMoKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9l cnJvcikKKysgIC8qLS0tIEdsb2JhbCB0eXBlL2Z1bmN0aW9uIGluaXQgY29kZSAtLS0qLworKyAg KHZvaWQpX19QeXhfbW9kaW5pdF9nbG9iYWxfaW5pdF9jb2RlKCk7CisrICAodm9pZClfX1B5eF9t b2Rpbml0X3ZhcmlhYmxlX2V4cG9ydF9jb2RlKCk7CisrICAodm9pZClfX1B5eF9tb2Rpbml0X2Z1 bmN0aW9uX2V4cG9ydF9jb2RlKCk7CisrICBpZiAodW5saWtlbHkoX19QeXhfbW9kaW5pdF90eXBl X2luaXRfY29kZSgpIDwgMCkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgICh2 b2lkKV9fUHl4X21vZGluaXRfdHlwZV9pbXBvcnRfY29kZSgpOworKyAgKHZvaWQpX19QeXhfbW9k aW5pdF92YXJpYWJsZV9pbXBvcnRfY29kZSgpOworKyAgKHZvaWQpX19QeXhfbW9kaW5pdF9mdW5j dGlvbl9pbXBvcnRfY29kZSgpOworKyAgLyotLS0gRXhlY3V0aW9uIGNvZGUgLS0tKi8KKysgICNp ZiBkZWZpbmVkKF9fUHl4X0dlbmVyYXRvcl9VU0VEKSB8fCBkZWZpbmVkKF9fUHl4X0Nvcm91dGlu ZV9VU0VEKQorKyAgaWYgKF9fUHl4X3BhdGNoX2FiYygpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9f cHl4X0wxX2Vycm9yKQorKyAgI2VuZGlmCisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjIKKysgKiAKKysgKiBpbXBvcnQgY3l0aG9uCisrICogaW1wb3J0IHN5cywgd2Fy bmluZ3MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIGZyb20gdGhyZWFkaW5nIGlt cG9ydCBUaHJlYWQsIFNlbWFwaG9yZQorKyAqIGZyb20gbGliYy5zdGRsaWIgY2ltcG9ydCBtYWxs b2MsIGZyZWUKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2 X2Vycm9yKE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NikpIF9fUFlYX0VSUigwLCA5NSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25f c19ub3RoaW5nX3RvX3BsYXksIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTUsIF9fcHl4 X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cisr ICBfX3B5eF90XzEgPSBfX1B5eF9JbXBvcnQoX19weXhfbl9zX3N5cywgMCwgLTEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMiwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBf X3B5eF9uX3Nfc3lzLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDIyLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19w eXhfdF8xID0gX19QeXhfSW1wb3J0KF9fcHl4X25fc193YXJuaW5ncywgMCwgLTEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMiwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBf X3B5eF9uX3Nfd2FybmluZ3MsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMjIsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTYKKy0gKiAgICAgdm9faW5p dF9mYWlsZWQgPSBNUFZfRVJST1JfVk9fSU5JVF9GQUlMRUQKKy0gKiAgICAgbm90aGluZ190b19w bGF5ID0gTVBWX0VSUk9SX05PVEhJTkdfVE9fUExBWQorLSAqICAgICB1bmtub3duX2Zvcm1hdCA9 IE1QVl9FUlJPUl9VTktOT1dOX0ZPUk1BVCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIHVuc3VwcG9ydGVkID0gTVBWX0VSUk9SX1VOU1VQUE9SVEVECistICogICAgIG5vdF9p bXBsZW1lbnRlZCA9IE1QVl9FUlJPUl9OT1RfSU1QTEVNRU5URUQKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyMworKyAqIGltcG9ydCBjeXRob24KKysgKiBpbXBvcnQgc3lz LCB3YXJuaW5ncworKyAqIGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQsIFNlbWFwaG9yZSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogZnJvbSBsaWJjLnN0ZGxpYiBjaW1wb3J0 IG1hbGxvYywgZnJlZQorKyAqIGZyb20gbGliYy5zdHJpbmcgY2ltcG9ydCBzdHJjcHksIHN0cmxl biwgbWVtc2V0CisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21w dl9lcnJvcihNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NikpIF9fUFlYX0VSUigwLCA5NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25f c191bmtub3duX2Zvcm1hdCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5NiwgX19weXhf TDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysg IF9fcHl4X3RfMSA9IFB5TGlzdF9OZXcoMik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDIzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworKyAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19UaHJlYWQpOworKyAgX19QeXhfR0lWRVJFRihf X3B5eF9uX3NfVGhyZWFkKTsKKysgIFB5TGlzdF9TRVRfSVRFTShfX3B5eF90XzEsIDAsIF9fcHl4 X25fc19UaHJlYWQpOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19TZW1hcGhvcmUpOworKyAg X19QeXhfR0lWRVJFRihfX3B5eF9uX3NfU2VtYXBob3JlKTsKKysgIFB5TGlzdF9TRVRfSVRFTShf X3B5eF90XzEsIDEsIF9fcHl4X25fc19TZW1hcGhvcmUpOworKyAgX19weXhfdF8yID0gX19QeXhf SW1wb3J0KF9fcHl4X25fc190aHJlYWRpbmcsIF9fcHl4X3RfMSwgLTEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyMywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworKyAgX19weXhfdF8xID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzIsIF9fcHl4X25f c19UaHJlYWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMywgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIGlmIChQeURpY3Rf U2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfVGhyZWFkLCBfX3B5eF90XzEpIDwgMCkgX19QWVhf RVJSKDAsIDIzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworKyAgX19weXhfdF8xID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzIs IF9fcHl4X25fc19TZW1hcGhvcmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAyMywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysg IGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfU2VtYXBob3JlLCBfX3B5eF90 XzEpIDwgMCkgX19QWVhfRVJSKDAsIDIzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTcKKy0gKiAgICAgbm90aGluZ190b19wbGF5ID0gTVBWX0VSUk9SX05PVEhJTkdfVE9fUExBWQor LSAqICAgICB1bmtub3duX2Zvcm1hdCA9IE1QVl9FUlJPUl9VTktOT1dOX0ZPUk1BVAorLSAqICAg ICB1bnN1cHBvcnRlZCA9IE1QVl9FUlJPUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIG5vdF9pbXBsZW1lbnRlZCA9IE1QVl9FUlJPUl9OT1RfSU1QTEVN RU5URUQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMAorKyAqIGZyb20g Y2xpZW50IGNpbXBvcnQgKgorKyAqIAorKyAqIF9fdmVyc2lvbl9fID0gIjAuMy4wIiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogX19hdXRob3JfXyA9ICJBbmRyZSBEIgorICAqIAor ICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBW X0VSUk9SX1VOU1VQUE9SVEVEKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgOTcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdW5zdXBwb3J0ZWQs IF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfZCwgX19weXhfbl9zX3ZlcnNpb24sIF9fcHl4X2twX3NfMF8zXzApIDwgMCkgX19Q WVhfRVJSKDAsIDMwLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5OAorLSAqICAgICB1bmtub3duX2Zvcm1hdCA9IE1QVl9FUlJPUl9VTktO T1dOX0ZPUk1BVAorLSAqICAgICB1bnN1cHBvcnRlZCA9IE1QVl9FUlJPUl9VTlNVUFBPUlRFRAor LSAqICAgICBub3RfaW1wbGVtZW50ZWQgPSBNUFZfRVJST1JfTk9UX0lNUExFTUVOVEVEICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMQorICAqIAorKyAqIF9fdmVyc2lvbl9fID0gIjAuMy4wIgorKyAqIF9fYXV0aG9yX18g PSAiQW5kcmUgRCIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorKyAqIF9SRVFV SVJFRF9DQVBJX01BSk9SID0gMgorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX05PVF9JTVBMRU1FTlRFRCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDk4LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX25vdF9pbXBsZW1lbnRlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigw LCA5OCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfYXV0aG9y LCBfX3B5eF9rcF9zX0FuZHJlX0QpIDwgMCkgX19QWVhfRVJSKDAsIDMxLCBfX3B5eF9MMV9lcnJv cikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MgorLSAqIFB5RXZh bF9Jbml0VGhyZWFkcygpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMK KysgKiBfX2F1dGhvcl9fID0gIkFuZHJlIEQiCisgICogCistICogY2xhc3MgRXJyb3JzOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICIiIlNldCBvZiBrbm93biBlcnJvciBj b2RlcyBmcm9tIE1wdkVycm9yIGFuZCBFdmVudCByZXNwb25zZXMuCisrICogX1JFUVVJUkVEX0NB UElfTUFKT1IgPSAyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiBfTUlOX0NBUElf TUlOT1IgPSAwCisgICogCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0 ZSgoKFB5T2JqZWN0KikmX19QeXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19FcnJvcnMs IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90XzcsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA3MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9H T1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9u X3NfRXJyb3JzLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDcyLCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisrICBpZiAoUHlEaWN0X1NldEl0ZW0o X19weXhfZCwgX19weXhfbl9zX1JFUVVJUkVEX0NBUElfTUFKT1IsIF9fcHl4X2ludF8yKSA8IDAp IF9fUFlYX0VSUigwLCAzMywgX19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTAxCistICogCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzQKKyAgKiAKKy0gKiBjbGFzcyBFdmVudHM6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgIiIiU2V0IG9mIGtub3duIHZhbHVlcyBmb3IgRXZlbnQgaWRzLgor KyAqIF9SRVFVSVJFRF9DQVBJX01BSk9SID0gMgorKyAqIF9NSU5fQ0FQSV9NSU5PUiA9IDAgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorKyAqIGNkZWYgdW5zaWduZWQgbG9uZyBf Q0FQSV9WRVJTSU9OCisgICovCistICBfX3B5eF90XzcgPSBfX1B5eF9QeTNNZXRhY2xhc3NQcmVw YXJlKChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfbl9zX0V2ZW50 cywgX19weXhfbl9zX0V2ZW50cywgKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X25fc192aWRjdXR0 ZXJfbGlic19tcHYsIF9fcHl4X2twX3NfU2V0X29mX2tub3duX3ZhbHVlc19mb3JfRXZlbnRfaWQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMDEsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA4CistICogICAgIFlvdSBzaG91bGQgaGFuZGxlIHRoZSBwb3Nz aWJpbGl0eSB0aGF0IGV2ZW50IGlkcyBtYXkgbm90IGJlIGFueSBvZiB0aGVzZSB2YWx1ZXMuCist ICogICAgICIiIgorLSAqICAgICBub25lID0gTVBWX0VWRU5UX05PTkUgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICBzaHV0ZG93biA9IE1QVl9FVkVOVF9TSFVURE9XTgorLSAq ICAgICBsb2dfbWVzc2FnZSA9IE1QVl9FVkVOVF9MT0dfTUVTU0FHRQorLSAqLworLSAgX19weXhf dF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX05PTkUp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDgsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm9uZSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VS UigwLCAxMDgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9f cHl4X3RfNiA9IDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5 CistICogICAgICIiIgorLSAqICAgICBub25lID0gTVBWX0VWRU5UX05PTkUKKy0gKiAgICAgc2h1 dGRvd24gPSBNUFZfRVZFTlRfU0hVVERPV04gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICBsb2dfbWVzc2FnZSA9IE1QVl9FVkVOVF9MT0dfTUVTU0FHRQorLSAqICAgICBnZXRf cHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCistICovCistICBf X3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRf U0hVVERPV04pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDksIF9f cHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9fcHl4X3RfNikg PCAwKSBfX1BZWF9FUlIoMCwgMTA5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihf X3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExMAorLSAqICAgICBub25lID0gTVBWX0VWRU5UX05PTkUKKy0gKiAgICAgc2h1 dGRvd24gPSBNUFZfRVZFTlRfU0hVVERPV04KKy0gKiAgICAgbG9nX21lc3NhZ2UgPSBNUFZfRVZF TlRfTE9HX01FU1NBR0UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBnZXRf cHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCistICogICAgIHNl dF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkKKy0gKi8KKy0g IF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVO VF9MT0dfTUVTU0FHRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEx MCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChf X1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19sb2dfbWVzc2FnZSwgX19w eXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CistCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTExCistICogICAgIHNodXRkb3duID0gTVBWX0VWRU5UX1NIVVRE T1dOCistICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5UX0xPR19NRVNTQUdFCistICogICAg IGdldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBzZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZf RVZFTlRfU0VUX1BST1BFUlRZX1JFUExZCistICogICAgIGNvbW1hbmRfcmVwbHkgPSBNUFZfRVZF TlRfQ09NTUFORF9SRVBMWQorLSAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWSk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExMSwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5 eF90XzcsIF9fcHl4X25fc19nZXRfcHJvcGVydHlfcmVwbHksIF9fcHl4X3RfNikgPCAwKSBfX1BZ WF9FUlIoMCwgMTExLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYp OyBfX3B5eF90XzYgPSAwOworKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25f c19NSU5fQ0FQSV9NSU5PUiwgX19weXhfaW50XzApIDwgMCkgX19QWVhfRVJSKDAsIDM0LCBfX3B5 eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTIK Ky0gKiAgICAgbG9nX21lc3NhZ2UgPSBNUFZfRVZFTlRfTE9HX01FU1NBR0UKKy0gKiAgICAgZ2V0 X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWQorLSAqICAgICBz ZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRfU0VUX1BST1BFUlRZX1JFUExZICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgY29tbWFuZF9yZXBseSA9IE1QVl9FVkVOVF9D T01NQU5EX1JFUExZCistICogICAgIHN0YXJ0X2ZpbGUgPSBNUFZfRVZFTlRfU1RBUlRfRklMRQor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3CisrICogCisrICogY2RlZiB1 bnNpZ25lZCBsb25nIF9DQVBJX1ZFUlNJT04KKysgKiB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgIF9DQVBJX1ZFUlNJT04gPSBtcHZfY2xpZW50X2FwaV92 ZXJzaW9uKCkKKysgKiAKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51 bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF83LCBfX3B5eF9uX3Nfc2V0X3Byb3BlcnR5X3JlcGx5LCBfX3B5eF90XzYpIDwgMCkgX19QWVhf RVJSKDAsIDExMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsg X19weXhfdF82ID0gMDsKKysgIHsKKysgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAgICBQ eVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKysgICAgICBf X1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CisrICAgICAgI2VuZGlmCisrICAgICAgLyp0cnk6Ki8g eworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMworLSAqICAgICBn ZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCistICogICAg IHNldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkKKy0gKiAg ICAgY29tbWFuZF9yZXBseSA9IE1QVl9FVkVOVF9DT01NQU5EX1JFUExZICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgc3RhcnRfZmlsZSA9IE1QVl9FVkVOVF9TVEFSVF9GSUxF CistICogICAgIGVuZF9maWxlID0gTVBWX0VWRU5UX0VORF9GSUxFCisrICAgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzgKKysgKiBjZGVmIHVuc2lnbmVkIGxvbmcgX0NB UElfVkVSU0lPTgorKyAqIHdpdGggbm9naWw6CisrICogICAgIF9DQVBJX1ZFUlNJT04gPSBtcHZf Y2xpZW50X2FwaV92ZXJzaW9uKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAor KyAqIF9DQVBJX01BSk9SID0gX0NBUElfVkVSU0lPTiA+PiAxNgorICAqLworLSAgX19weXhfdF82 ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0NPTU1BTkRf UkVQTFkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTMsIF9fcHl4 X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfY29tbWFuZF9yZXBseSwgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCAxMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICAgICAgICBfX3B5eF92Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fQ0FQSV9WRVJTSU9OID0gbXB2X2NsaWVudF9hcGlfdmVyc2lvbigpOworKyAg ICAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQKKy0gKiAg ICAgc2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX1NFVF9QUk9QRVJUWV9SRVBMWQorLSAq ICAgICBjb21tYW5kX3JlcGx5ID0gTVBWX0VWRU5UX0NPTU1BTkRfUkVQTFkKKy0gKiAgICAgc3Rh cnRfZmlsZSA9IE1QVl9FVkVOVF9TVEFSVF9GSUxFICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgZW5kX2ZpbGUgPSBNUFZfRVZFTlRfRU5EX0ZJTEUKKy0gKiAgICAgZmlsZV9s b2FkZWQgPSBNUFZfRVZFTlRfRklMRV9MT0FERUQKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzcKKysgKiAKKysgKiBjZGVmIHVuc2lnbmVkIGxvbmcgX0NBUElfVkVS U0lPTgorKyAqIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgX0NBUElfVkVSU0lPTiA9IG1wdl9jbGllbnRfYXBpX3ZlcnNpb24oKQorKyAqIAorICAqLwor LSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VW RU5UX1NUQVJUX0ZJTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAx MTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc3RhcnRfZmlsZSwgX19w eXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICAgICAgLypmaW5hbGx5OiovIHsK KysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVB RAorKyAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAgICAgICBQeV9CTE9D S19USFJFQURTCisrICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICBnb3RvIF9fcHl4X0w0Owor KyAgICAgICAgfQorKyAgICAgICAgX19weXhfTDQ6OworKyAgICAgIH0KKysgIH0KKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTUKKy0gKiAgICAgY29tbWFuZF9yZXBs eSA9IE1QVl9FVkVOVF9DT01NQU5EX1JFUExZCistICogICAgIHN0YXJ0X2ZpbGUgPSBNUFZfRVZF TlRfU1RBUlRfRklMRQorLSAqICAgICBlbmRfZmlsZSA9IE1QVl9FVkVOVF9FTkRfRklMRSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGZpbGVfbG9hZGVkID0gTVBWX0VWRU5U X0ZJTEVfTE9BREVECistICogICAgIHRyYWNrc19jaGFuZ2VkID0gTVBWX0VWRU5UX1RSQUNLU19D SEFOR0VECisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDAKKysgKiAgICAg X0NBUElfVkVSU0lPTiA9IG1wdl9jbGllbnRfYXBpX3ZlcnNpb24oKQorKyAqIAorKyAqIF9DQVBJ X01BSk9SID0gX0NBUElfVkVSU0lPTiA+PiAxNiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogX0NBUElfTUlOT1IgPSBfQ0FQSV9WRVJTSU9OICYgMHhGRkZGCisrICogCisgICovCist ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZF TlRfRU5EX0ZJTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTUs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19Q eXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZW5kX2ZpbGUsIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgMTE1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRf RnJvbV91bnNpZ25lZF9sb25nKChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fQ0FQSV9W RVJTSU9OID4+IDE2KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQw LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgaWYgKFB5 RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19DQVBJX01BSk9SLCBfX3B5eF90XzIpIDwg MCkgX19QWVhfRVJSKDAsIDQwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExNgorLSAqICAgICBzdGFydF9maWxlID0gTVBWX0VWRU5UX1NUQVJUX0ZJTEUKKy0g KiAgICAgZW5kX2ZpbGUgPSBNUFZfRVZFTlRfRU5EX0ZJTEUKKy0gKiAgICAgZmlsZV9sb2FkZWQg PSBNUFZfRVZFTlRfRklMRV9MT0FERUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICB0cmFja3NfY2hhbmdlZCA9IE1QVl9FVkVOVF9UUkFDS1NfQ0hBTkdFRAorLSAqICAgICB0 cmFja3Nfc3dpdGNoZWQgPSBNUFZfRVZFTlRfVFJBQ0tfU1dJVENIRUQKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MQorKyAqIAorKyAqIF9DQVBJX01BSk9SID0gX0NBUElf VkVSU0lPTiA+PiAxNgorKyAqIF9DQVBJX01JTk9SID0gX0NBUElfVkVSU0lPTiAmIDB4RkZGRiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogaWYgX0NBUElfTUFKT1IgIT0g X1JFUVVJUkVEX0NBUElfTUFKT1Igb3IgX0NBUElfTUlOT1IgPCBfTUlOX0NBUElfTUlOT1I6Cisg ICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChN UFZfRVZFTlRfRklMRV9MT0FERUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigwLCAxMTYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cist ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZmlsZV9sb2Fk ZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE2LCBfX3B5eF9MMV9lcnJvcikKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19weXhfdF8yID0g X19QeXhfUHlJbnRfRnJvbV91bnNpZ25lZF9sb25nKChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fQ0FQSV9WRVJTSU9OICYgMHhGRkZGKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDQxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzIpOworKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19DQVBJX01JTk9S LCBfX3B5eF90XzIpIDwgMCkgX19QWVhfRVJSKDAsIDQxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNworLSAqICAgICBlbmRfZmlsZSA9IE1QVl9FVkVOVF9F TkRfRklMRQorLSAqICAgICBmaWxlX2xvYWRlZCA9IE1QVl9FVkVOVF9GSUxFX0xPQURFRAorLSAq ICAgICB0cmFja3NfY2hhbmdlZCA9IE1QVl9FVkVOVF9UUkFDS1NfQ0hBTkdFRCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHRyYWNrc19zd2l0Y2hlZCA9IE1QVl9FVkVOVF9U UkFDS19TV0lUQ0hFRAorLSAqICAgICBpZGxlID0gTVBWX0VWRU5UX0lETEUKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MworKyAqIF9DQVBJX01JTk9SID0gX0NBUElfVkVS U0lPTiAmIDB4RkZGRgorKyAqIAorKyAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJ X01BSk9SIG9yIF9DQVBJX01JTk9SIDwgX01JTl9DQVBJX01JTk9SOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgIHJhaXNlIEltcG9ydEVycm9yKAorKyAqICAgICAgICAgImxp Ym1wdiB2ZXJzaW9uIGlzIGluY29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJQor ICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQo TVBWX0VWRU5UX1RSQUNLU19DSEFOR0VEKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgMTE3LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3RyYWNr c19jaGFuZ2VkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNywgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfQ0FQSV9NQUpPUik7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzEsIF9fcHl4X25fc19SRVFVSVJFRF9DQVBJX01BSk9SKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF90XzQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShf X3B5eF90XzIsIF9fcHl4X3RfMSwgUHlfTkUpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfNCk7IGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX3B5eF90XzUgPSBfX1B5eF9QeU9i amVjdF9Jc1RydWUoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNSA8IDApKSBfX1BZ WF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7 IF9fcHl4X3RfNCA9IDA7CisrICBpZiAoIV9fcHl4X3RfNSkgeworKyAgfSBlbHNlIHsKKysgICAg X19weXhfdF8zID0gX19weXhfdF81OworKyAgICBnb3RvIF9fcHl4X0w2X2Jvb2xfYmlub3BfZG9u ZTsKKysgIH0KKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9u X3NfQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDQz LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzEsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUik7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19weXhfdF8yID0gUHlPYmplY3Rf UmljaENvbXBhcmUoX19weXhfdF80LCBfX3B5eF90XzEsIFB5X0xUKTsgX19QeXhfWEdPVFJFRihf X3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0MywgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsK KysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19weXhfdF81 ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseShfX3B5eF90 XzUgPCAwKSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhfdF8zID0gX19weXhfdF81Owor KyAgX19weXhfTDZfYm9vbF9iaW5vcF9kb25lOjsKKysgIGlmICh1bmxpa2VseShfX3B5eF90XzMp KSB7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE4CistICogICAg IGZpbGVfbG9hZGVkID0gTVBWX0VWRU5UX0ZJTEVfTE9BREVECistICogICAgIHRyYWNrc19jaGFu Z2VkID0gTVBWX0VWRU5UX1RSQUNLU19DSEFOR0VECistICogICAgIHRyYWNrc19zd2l0Y2hlZCA9 IE1QVl9FVkVOVF9UUkFDS19TV0lUQ0hFRCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIGlkbGUgPSBNUFZfRVZFTlRfSURMRQorLSAqICAgICBwYXVzZSA9IE1QVl9FVkVOVF9Q QVVTRQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYKKysgKiAgICAg cmFpc2UgSW1wb3J0RXJyb3IoCisrICogICAgICAgICAibGlibXB2IHZlcnNpb24gaXMgaW5jb3Jy ZWN0LiBSZXF1aXJlZCAlZC4lZCBnb3QgJWQuJWQuIiAlCisrICogICAgICAgICAgICAgKF9SRVFV SVJFRF9DQVBJX01BSk9SLCBfTUlOX0NBUElfTUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQSV9NSU5P UikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICApCisrICogCisgICovCist ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZF TlRfVFJBQ0tfU1dJVENIRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCAxMTgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdHJhY2tzX3N3aXRj aGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExOCwgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgICAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19SRVFVSVJFRF9DQVBJX01BSk9S KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDYsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzEsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUik7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF80LCBfX3B5eF9uX3NfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF80 KSkgX19QWVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNCk7CisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5 eF9uX3NfQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDQ2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAg IF9fcHl4X3RfNyA9IFB5VHVwbGVfTmV3KDQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9f UFlYX0VSUigwLCA0NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzcpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMik7CisrICAgIFB5VHVwbGVfU0VUX0lU RU0oX19weXhfdF83LCAwLCBfX3B5eF90XzIpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Rf MSk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxLCBfX3B5eF90XzEpOworKyAg ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNCk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF83LCAyLCBfX3B5eF90XzQpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNik7CisrICAg IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAzLCBfX3B5eF90XzYpOworKyAgICBfX3B5eF90 XzIgPSAwOworKyAgICBfX3B5eF90XzEgPSAwOworKyAgICBfX3B5eF90XzQgPSAwOworKyAgICBf X3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx OQorLSAqICAgICB0cmFja3NfY2hhbmdlZCA9IE1QVl9FVkVOVF9UUkFDS1NfQ0hBTkdFRAorLSAq ICAgICB0cmFja3Nfc3dpdGNoZWQgPSBNUFZfRVZFTlRfVFJBQ0tfU1dJVENIRUQKKy0gKiAgICAg aWRsZSA9IE1QVl9FVkVOVF9JRExFICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgcGF1c2UgPSBNUFZfRVZFTlRfUEFVU0UKKy0gKiAgICAgdW5wYXVzZSA9IE1QVl9FVkVOVF9V TlBBVVNFCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NQorKyAqIGlm IF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01BSk9SIG9yIF9DQVBJX01JTk9SIDwgX01J Tl9DQVBJX01JTk9SOgorKyAqICAgICByYWlzZSBJbXBvcnRFcnJvcigKKysgKiAgICAgICAgICJs aWJtcHYgdmVyc2lvbiBpcyBpbmNvcnJlY3QuIFJlcXVpcmVkICVkLiVkIGdvdCAlZC4lZC4iICUg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIChfUkVRVUlSRURf Q0FQSV9NQUpPUiwgX01JTl9DQVBJX01JTk9SLCBfQ0FQSV9NQUpPUiwgX0NBUElfTUlOT1IpCisr ICogICAgICkKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2 X2V2ZW50X2lkKE1QVl9FVkVOVF9JRExFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgMTE5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2lkbGUs IF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICBfX3B5eF90XzYgPSBf X1B5eF9QeVN0cmluZ19Gb3JtYXQoX19weXhfa3Bfc19saWJtcHZfdmVyc2lvbl9pc19pbmNvcnJl Y3RfUmVxdSwgX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgNDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTIwCistICogICAgIHRyYWNrc19zd2l0Y2hlZCA9 IE1QVl9FVkVOVF9UUkFDS19TV0lUQ0hFRAorLSAqICAgICBpZGxlID0gTVBWX0VWRU5UX0lETEUK Ky0gKiAgICAgcGF1c2UgPSBNUFZfRVZFTlRfUEFVU0UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICB1bnBhdXNlID0gTVBWX0VWRU5UX1VOUEFVU0UKKy0gKiAgICAgdGljayA9 IE1QVl9FVkVOVF9USUNLCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 NAorKyAqIAorKyAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01BSk9SIG9yIF9D QVBJX01JTk9SIDwgX01JTl9DQVBJX01JTk9SOgorKyAqICAgICByYWlzZSBJbXBvcnRFcnJvcigg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgImxpYm1wdiB2ZXJzaW9u IGlzIGluY29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJQorKyAqICAgICAgICAg ICAgIChfUkVRVUlSRURfQ0FQSV9NQUpPUiwgX01JTl9DQVBJX01JTk9SLCBfQ0FQSV9NQUpPUiwg X0NBUElfTUlOT1IpCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9ldmVudF9pZChNUFZfRVZFTlRfUEFVU0UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCAxMjAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nf cGF1c2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTIwLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICBfX3B5eF90 XzcgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5fSW1wb3J0RXJyb3Is IF9fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ0LCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICBfX1B5eF9SYWlzZShfX3B5 eF90XzcsIDAsIDAsIDApOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83 ID0gMDsKKysgICAgX19QWVhfRVJSKDAsIDQ0LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjEKKy0gKiAgICAgaWRsZSA9IE1QVl9FVkVO VF9JRExFCistICogICAgIHBhdXNlID0gTVBWX0VWRU5UX1BBVVNFCistICogICAgIHVucGF1c2Ug PSBNUFZfRVZFTlRfVU5QQVVTRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg IHRpY2sgPSBNUFZfRVZFTlRfVElDSworLSAqICAgICBzY3JpcHRfaW5wdXRfZGlzcGF0Y2ggPSBN UFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENICisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0MworKyAqIF9DQVBJX01JTk9SID0gX0NBUElfVkVSU0lPTiAmIDB4RkZG RgorKyAqIAorKyAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01BSk9SIG9yIF9D QVBJX01JTk9SIDwgX01JTl9DQVBJX01JTk9SOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgIHJhaXNlIEltcG9ydEVycm9yKAorKyAqICAgICAgICAgImxpYm1wdiB2ZXJzaW9u IGlzIGluY29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJQorICAqLworLSAgX19w eXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1VO UEFVU0UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMjEsIF9fcHl4 X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdW5wYXVzZSwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCAxMjEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTIyCistICogICAgIHBhdXNlID0gTVBWX0VWRU5UX1BBVVNFCistICogICAg IHVucGF1c2UgPSBNUFZfRVZFTlRfVU5QQVVTRQorLSAqICAgICB0aWNrID0gTVBWX0VWRU5UX1RJ Q0sgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBzY3JpcHRfaW5wdXRfZGlz cGF0Y2ggPSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENICistICogICAgIGNsaWVudF9t ZXNzYWdlID0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFCisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTIKKysgKiAgICAgdm9pZCBQeV9Jbml0aWFsaXplKCkKKysgKiAKKysg KiBfaXNfcHkzID0gc3lzLnZlcnNpb25faW5mbyA+PSAoMywpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiBfc3RyZGVjX2VyciA9ICJzdXJyb2dhdGVlc2NhcGUiIGlmIF9pc19weTMg ZWxzZSAic3RyaWN0IgorKyAqICMgbXB2IC0+IFB5dGhvbgorICAqLworLSAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1RJQ0spOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMjIsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzcsIF9fcHl4X25fc19zeXMpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA1MiwgX19weXhfTDFfZXJyb3Ip CisrICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2Jq ZWN0X0dldEF0dHJTdHIoX19weXhfdF83LCBfX3B5eF9uX3NfdmVyc2lvbl9pbmZvKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNTIsIF9fcHl4X0wxX2Vycm9yKQorICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19w eXhfdF83LCBfX3B5eF9uX3NfdGljaywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMjIs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9 IDA7CisrICBfX3B5eF90XzcgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF90XzYsIF9fcHl4 X3R1cGxlX18xOCwgUHlfR0UpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfNyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDUyLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgaWYgKFB5RGljdF9TZXRJdGVt KF9fcHl4X2QsIF9fcHl4X25fc19pc19weTMsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwg NTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3Rf NyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTIzCistICog ICAgIHVucGF1c2UgPSBNUFZfRVZFTlRfVU5QQVVTRQorLSAqICAgICB0aWNrID0gTVBWX0VWRU5U X1RJQ0sKKy0gKiAgICAgc2NyaXB0X2lucHV0X2Rpc3BhdGNoID0gTVBWX0VWRU5UX1NDUklQVF9J TlBVVF9ESVNQQVRDSCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNsaWVu dF9tZXNzYWdlID0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFCistICogICAgIHZpZGVvX3JlY29u ZmlnID0gTVBWX0VWRU5UX1ZJREVPX1JFQ09ORklHCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTMKKysgKiAKKysgKiBfaXNfcHkzID0gc3lzLnZlcnNpb25faW5mbyA+PSAo MywpCisrICogX3N0cmRlY19lcnIgPSAic3Vycm9nYXRlZXNjYXBlIiBpZiBfaXNfcHkzIGVsc2Ug InN0cmljdCIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICMgbXB2IC0+IFB5dGhv bgorKyAqIGRlZiBfc3RyZGVjKHMpOgorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1NDUklQVF9JTlBVVF9ESVNQQVRDSCk7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEyMywgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2lz X3B5Myk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDUzLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5h bWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3NjcmlwdF9pbnB1dF9kaXNwYXRjaCwgX19w eXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMjMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf dF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNik7IGlmICh1bmxpa2VseShfX3B5 eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDUzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgaWYgKF9fcHl4X3RfMykgeworKyAg ICBfX1B5eF9JTkNSRUYoX19weXhfbl9zX3N1cnJvZ2F0ZWVzY2FwZSk7CisrICAgIF9fcHl4X3Rf NyA9IF9fcHl4X25fc19zdXJyb2dhdGVlc2NhcGU7CisrICB9IGVsc2UgeworKyAgICBfX1B5eF9J TkNSRUYoX19weXhfbl9zX3N0cmljdCk7CisrICAgIF9fcHl4X3RfNyA9IF9fcHl4X25fc19zdHJp Y3Q7CisrICB9CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmRl Y19lcnIsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNTMsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTI0CistICogICAgIHRpY2sgPSBNUFZfRVZFTlRf VElDSworLSAqICAgICBzY3JpcHRfaW5wdXRfZGlzcGF0Y2ggPSBNUFZfRVZFTlRfU0NSSVBUX0lO UFVUX0RJU1BBVENICistICogICAgIGNsaWVudF9tZXNzYWdlID0gTVBWX0VWRU5UX0NMSUVOVF9N RVNTQUdFICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgdmlkZW9fcmVjb25m aWcgPSBNUFZfRVZFTlRfVklERU9fUkVDT05GSUcKKy0gKiAgICAgYXVkaW9fcmVjb25maWcgPSBN UFZfRVZFTlRfQVVESU9fUkVDT05GSUcKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1NQorKyAqIF9zdHJkZWNfZXJyID0gInN1cnJvZ2F0ZWVzY2FwZSIgaWYgX2lzX3B5MyBl bHNlICJzdHJpY3QiCisrICogIyBtcHYgLT4gUHl0aG9uCisrICogZGVmIF9zdHJkZWMocyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgdHJ5OgorKyAqICAgICAgICAgcmV0 dXJuIHMuZGVjb2RlKCJ1dGYtOCIsIF9zdHJkZWNfZXJyKQorICAqLworLSAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0NMSUVOVF9NRVNT QUdFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTI0LCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5h bWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2NsaWVudF9tZXNzYWdlLCBfX3B5eF90XzYp IDwgMCkgX19QWVhfRVJSKDAsIDEyNCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYo X19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgIF9fcHl4X3RfNyA9IFB5Q0Z1bmN0aW9uX05l d0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xX3N0cmRlYywgTlVMTCwgX19w eXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19Q WVhfRVJSKDAsIDU1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90Xzcp OworKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19zdHJkZWMsIF9fcHl4 X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVD UkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTI1CistICogICAgIHNjcmlwdF9pbnB1dF9kaXNwYXRjaCA9IE1QVl9F VkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0gKKy0gKiAgICAgY2xpZW50X21lc3NhZ2UgPSBNUFZf RVZFTlRfQ0xJRU5UX01FU1NBR0UKKy0gKiAgICAgdmlkZW9fcmVjb25maWcgPSBNUFZfRVZFTlRf VklERU9fUkVDT05GSUcgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBhdWRp b19yZWNvbmZpZyA9IE1QVl9FVkVOVF9BVURJT19SRUNPTkZJRworLSAqICAgICBtZXRhZGF0YV91 cGRhdGUgPSBNUFZfRVZFTlRfTUVUQURBVEFfVVBEQVRFCisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjMKKysgKiAKKysgKiAjIFB5dGhvbiAtPiBtcHYKKysgKiBkZWYgX3N0 cmVuYyhzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICB0cnk6CisrICog ICAgICAgICByZXR1cm4gcy5lbmNvZGUoInV0Zi04IiwgX3N0cmRlY19lcnIpCisgICovCistICBf X3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRf VklERU9fUkVDT05GSUcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAx MjUsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdmlkZW9fcmVjb25maWcs IF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTI1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19weXhfdF83ID0gUHlD RnVuY3Rpb25fTmV3RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzNfc3RyZW5j LCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMCwgNjMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfNyk7CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0 cmVuYywgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2MywgX19weXhfTDFfZXJyb3IpCisr ICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjYKKy0gKiAgICAgY2xpZW50X21lc3NhZ2UgPSBN UFZfRVZFTlRfQ0xJRU5UX01FU1NBR0UKKy0gKiAgICAgdmlkZW9fcmVjb25maWcgPSBNUFZfRVZF TlRfVklERU9fUkVDT05GSUcKKy0gKiAgICAgYXVkaW9fcmVjb25maWcgPSBNUFZfRVZFTlRfQVVE SU9fUkVDT05GSUcgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBtZXRhZGF0 YV91cGRhdGUgPSBNUFZfRVZFTlRfTUVUQURBVEFfVVBEQVRFCistICogICAgIHNlZWsgPSBNUFZf RVZFTlRfU0VFSworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwCisrICog ICAgICAgICByZXR1cm4gcworKyAqIAorKyAqIFB5X0luaXRpYWxpemUoKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogCisrICogY2xhc3MgRXJyb3JzOgorICAqLworLSAgX19weXhf dF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0FVRElP X1JFQ09ORklHKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTI2LCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2F1ZGlvX3JlY29uZmlnLCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyNiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgIFB5X0luaXRpYWxpemUoKTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjcKKy0gKiAgICAgdmlkZW9f cmVjb25maWcgPSBNUFZfRVZFTlRfVklERU9fUkVDT05GSUcKKy0gKiAgICAgYXVkaW9fcmVjb25m aWcgPSBNUFZfRVZFTlRfQVVESU9fUkVDT05GSUcKKy0gKiAgICAgbWV0YWRhdGFfdXBkYXRlID0g TVBWX0VWRU5UX01FVEFEQVRBX1VQREFURSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIHNlZWsgPSBNUFZfRVZFTlRfU0VFSworLSAqICAgICBwbGF5YmFja19yZXN0YXJ0ID0g TVBWX0VWRU5UX1BMQVlCQUNLX1JFU1RBUlQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo3MgorKyAqIFB5X0luaXRpYWxpemUoKQorKyAqIAorKyAqIGNsYXNzIEVycm9yczog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAiIiJTZXQgb2Yga25vd24gZXJy b3IgY29kZXMgZnJvbSBNcHZFcnJvciBhbmQgRXZlbnQgcmVzcG9uc2VzLgorKyAqIAorICAqLwor LSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VW RU5UX01FVEFEQVRBX1VQREFURSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDEyNywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0g IGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19tZXRhZGF0YV91 cGRhdGUsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTI3LCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19weXhfdF83 ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZSgoUHlPYmplY3QgKikgTlVMTCwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X25fc19FcnJvcnMsIF9fcHl4X25fc19FcnJvcnMsIChQeU9iamVjdCAq KSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9rcF9zX1NldF9vZl9r bm93bl9lcnJvcl9jb2Rlc19mcm9tX01wKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZ WF9FUlIoMCwgNzIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTI4CistICogICAgIGF1 ZGlvX3JlY29uZmlnID0gTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHCistICogICAgIG1ldGFkYXRh X3VwZGF0ZSA9IE1QVl9FVkVOVF9NRVRBREFUQV9VUERBVEUKKy0gKiAgICAgc2VlayA9IE1QVl9F VkVOVF9TRUVLICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcGxheWJhY2tf cmVzdGFydCA9IE1QVl9FVkVOVF9QTEFZQkFDS19SRVNUQVJUCistICogICAgIHByb3BlcnR5X2No YW5nZSA9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0UKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3OQorKyAqICAgICBZb3Ugc2hvdWxkIGhhbmRsZSB0aGUgcG9zc2liaWxp dHkgdGhhdCBlcnJvciBjb2RlcyBtYXkgbm90IGJlIGFueSBvZiB0aGVzZSB2YWx1ZXMuCisrICog ICAgICIiIgorKyAqICAgICBzdWNjZXNzID0gTVBWX0VSUk9SX1NVQ0NFU1MgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBxdWV1ZV9mdWxsID0gTVBWX0VSUk9SX0VWRU5UX1FV RVVFX0ZVTEwKKysgKiAgICAgbm9tZW0gPSBNUFZfRVJST1JfTk9NRU0KKyAgKi8KKy0gIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9TRUVL KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTI4LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1Q Vl9FUlJPUl9TVUNDRVNTKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg NzksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2VlaywgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCAxMjgsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1Nl dE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3N1Y2Nlc3MsIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgNzksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTI5CistICogICAgIG1ldGFkYXRhX3VwZGF0ZSA9IE1QVl9FVkVOVF9NRVRBREFUQV9V UERBVEUKKy0gKiAgICAgc2VlayA9IE1QVl9FVkVOVF9TRUVLCistICogICAgIHBsYXliYWNrX3Jl c3RhcnQgPSBNUFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFSVCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgIHByb3BlcnR5X2NoYW5nZSA9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFO R0UKKy0gKiAgICAgY2hhcHRlcl9jaGFuZ2UgPSBNUFZfRVZFTlRfQ0hBUFRFUl9DSEFOR0UKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MAorKyAqICAgICAiIiIKKysgKiAg ICAgc3VjY2VzcyA9IE1QVl9FUlJPUl9TVUNDRVNTCisrICogICAgIHF1ZXVlX2Z1bGwgPSBNUFZf RVJST1JfRVZFTlRfUVVFVUVfRlVMTCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgIG5vbWVtID0gTVBWX0VSUk9SX05PTUVNCisrICogICAgIHVuaW5pdGlhbGl6ZWQgPSBNUFZf RVJST1JfVU5JTklUSUFMSVpFRAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1BMQVlCQUNLX1JFU1RBUlQpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMjksIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX0VW RU5UX1FVRVVFX0ZVTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4 MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChf X1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19wbGF5YmFja19yZXN0YXJ0 LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyOSwgX19weXhfTDFfZXJyb3IpCisrICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcXVldWVfZnVsbCwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMzAKKy0gKiAgICAgc2VlayA9IE1QVl9FVkVOVF9TRUVLCist ICogICAgIHBsYXliYWNrX3Jlc3RhcnQgPSBNUFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFSVAorLSAq ICAgICBwcm9wZXJ0eV9jaGFuZ2UgPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgY2hhcHRlcl9jaGFuZ2UgPSBNUFZfRVZFTlRf Q0hBUFRFUl9DSEFOR0UKKy0gKiAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo4MQorKyAqICAgICBzdWNjZXNzID0gTVBWX0VSUk9SX1NVQ0NFU1MKKysgKiAgICAgcXVldWVf ZnVsbCA9IE1QVl9FUlJPUl9FVkVOVF9RVUVVRV9GVUxMCisrICogICAgIG5vbWVtID0gTVBWX0VS Uk9SX05PTUVNICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgdW5pbml0aWFs aXplZCA9IE1QVl9FUlJPUl9VTklOSVRJQUxJWkVECisrICogICAgIGludmFsaWRfcGFyYW1ldGVy ID0gTVBWX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSCisgICovCistICBfX3B5eF90XzYgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdF KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTMwLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1Q Vl9FUlJPUl9OT01FTSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgx LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3Byb3BlcnR5X2NoYW5nZSwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX25vbWVtLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDgxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEzMQorLSAqICAgICBwbGF5YmFja19yZXN0YXJ0ID0gTVBWX0VWRU5UX1BM QVlCQUNLX1JFU1RBUlQKKy0gKiAgICAgcHJvcGVydHlfY2hhbmdlID0gTVBWX0VWRU5UX1BST1BF UlRZX0NIQU5HRQorLSAqICAgICBjaGFwdGVyX2NoYW5nZSA9IE1QVl9FVkVOVF9DSEFQVEVSX0NI QU5HRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODIKKysgKiAgICAgcXVldWVfZnVsbCA9IE1QVl9F UlJPUl9FVkVOVF9RVUVVRV9GVUxMCisrICogICAgIG5vbWVtID0gTVBWX0VSUk9SX05PTUVNCisr ICogICAgIHVuaW5pdGlhbGl6ZWQgPSBNUFZfRVJST1JfVU5JTklUSUFMSVpFRCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGludmFsaWRfcGFyYW1ldGVyID0gTVBWX0VSUk9S X0lOVkFMSURfUEFSQU1FVEVSCisrICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9PUFRJT05f Tk9UX0ZPVU5ECisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21w dl9ldmVudF9pZChNUFZfRVZFTlRfQ0hBUFRFUl9DSEFOR0UpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCAxMzEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1VOSU5JVElBTElaRUQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4MiwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5D bGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19jaGFwdGVyX2NoYW5nZSwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCAxMzEsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3VuaW5pdGlhbGl6ZWQsIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgODIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTAxCistICogCistICogCistICogY2xhc3MgRXZlbnRzOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICIiIlNldCBvZiBrbm93biB2YWx1ZXMgZm9yIEV2ZW50IGlk cy4KKy0gKiAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MworKyAqICAg ICBub21lbSA9IE1QVl9FUlJPUl9OT01FTQorKyAqICAgICB1bmluaXRpYWxpemVkID0gTVBWX0VS Uk9SX1VOSU5JVElBTElaRUQKKysgKiAgICAgaW52YWxpZF9wYXJhbWV0ZXIgPSBNUFZfRVJST1Jf SU5WQUxJRF9QQVJBTUVURVIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBu b3RfZm91bmQgPSBNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORAorKyAqICAgICBvcHRpb25fZm9y bWF0ID0gTVBWX0VSUk9SX09QVElPTl9GT1JNQVQKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4 X1B5M0NsYXNzQ3JlYXRlKCgoUHlPYmplY3QqKSZfX1B5eF9EZWZhdWx0Q2xhc3NUeXBlKSwgX19w eXhfbl9zX0V2ZW50cywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3RfNywgTlVMTCwgMCwgMSk7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEwMSwgX19weXhfTDFfZXJy b3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZf RVJST1JfSU5WQUxJRF9QQVJBTUVURVIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCA4MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK Ky0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfRXZlbnRzLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEwMSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfaW52YWxpZF9wYXJhbWV0ZXIsIF9f cHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhf dF83KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMzQKKy0gKiAKKy0gKiAKKy0gKiBjbGFzcyBMb2dMZXZlbHM6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgbm8gPSBNUFZfTE9HX0xFVkVMX05PTkUKKy0gKiAgICAg ZmF0YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODQKKysgKiAgICAgdW5pbml0aWFsaXplZCA9IE1QVl9FUlJPUl9VTklOSVRJQUxJ WkVECisrICogICAgIGludmFsaWRfcGFyYW1ldGVyID0gTVBWX0VSUk9SX0lOVkFMSURfUEFSQU1F VEVSCisrICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9PUFRJT05fTk9UX0ZPVU5EICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgb3B0aW9uX2Zvcm1hdCA9IE1QVl9FUlJP Ul9PUFRJT05fRk9STUFUCisrICogICAgIG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJT05f RVJST1IKKyAgKi8KKy0gIF9fcHl4X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5 T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCBf X3B5eF9uX3NfTG9nTGV2ZWxzLCAoUHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRl cl9saWJzX21wdiwgKFB5T2JqZWN0ICopIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykp IF9fUFlYX0VSUigwLCAxMzQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNyk7CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihN UFZfRVJST1JfT1BUSU9OX05PVF9GT1VORCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDg0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX25vdF9m b3VuZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4NCwgX19weXhfTDFfZXJyb3IpCisr ICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzUKKy0gKiAKKy0gKiBjbGFzcyBMb2dMZXZlbHM6 CistICogICAgIG5vID0gTVBWX0xPR19MRVZFTF9OT05FICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgZmF0YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMCistICogICAgIGVycm9y ID0gTVBWX0xPR19MRVZFTF9FUlJPUgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjg1CisrICogICAgIGludmFsaWRfcGFyYW1ldGVyID0gTVBWX0VSUk9SX0lOVkFMSURfUEFS QU1FVEVSCisrICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9PUFRJT05fTk9UX0ZPVU5ECisr ICogICAgIG9wdGlvbl9mb3JtYXQgPSBNUFZfRVJST1JfT1BUSU9OX0ZPUk1BVCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJ T05fRVJST1IKKysgKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX1BST1BFUlRZX05PVF9GT1VO RAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xl dmVsKE1QVl9MT0dfTEVWRUxfTk9ORSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDEzNSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9G cm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfT1BUSU9OX0ZPUk1BVCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX25vLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEzNSwgX19weXhf TDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9u X3Nfb3B0aW9uX2Zvcm1hdCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4NSwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzYKKy0gKiBjbGFzcyBMb2dM ZXZlbHM6CistICogICAgIG5vID0gTVBWX0xPR19MRVZFTF9OT05FCistICogICAgIGZhdGFsID0g TVBWX0xPR19MRVZFTF9GQVRBTCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg IGVycm9yID0gTVBWX0xPR19MRVZFTF9FUlJPUgorLSAqICAgICB3YXJuID0gTVBWX0xPR19MRVZF TF9XQVJOCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODYKKysgKiAgICAg bm90X2ZvdW5kID0gTVBWX0VSUk9SX09QVElPTl9OT1RfRk9VTkQKKysgKiAgICAgb3B0aW9uX2Zv cm1hdCA9IE1QVl9FUlJPUl9PUFRJT05fRk9STUFUCisrICogICAgIG9wdGlvbl9lcnJvciA9IE1Q Vl9FUlJPUl9PUFRJT05fRVJST1IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICBub3RfZm91bmQgPSBNUFZfRVJST1JfUFJPUEVSVFlfTk9UX0ZPVU5ECisrICogICAgIHByb3Bl cnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9GT1JNQVQKKyAgKi8KKy0gIF9fcHl4X3Rf NiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX0ZB VEFMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM2LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9y KE1QVl9FUlJPUl9PUFRJT05fRVJST1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCA4NiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK Ky0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19mYXRhbCwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX29wdGlvbl9lcnJvciwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4NiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMzcKKy0gKiAgICAgbm8gPSBNUFZfTE9HX0xFVkVMX05PTkUK Ky0gKiAgICAgZmF0YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMCistICogICAgIGVycm9yID0gTVBW X0xPR19MRVZFTF9FUlJPUiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHdh cm4gPSBNUFZfTE9HX0xFVkVMX1dBUk4KKy0gKiAgICAgaW5mbyA9IE1QVl9MT0dfTEVWRUxfSU5G TworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg3CisrICogICAgIG9wdGlv bl9mb3JtYXQgPSBNUFZfRVJST1JfT1BUSU9OX0ZPUk1BVAorKyAqICAgICBvcHRpb25fZXJyb3Ig PSBNUFZfRVJST1JfT1BUSU9OX0VSUk9SCisrICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9Q Uk9QRVJUWV9OT1RfRk9VTkQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBw cm9wZXJ0eV9mb3JtYXQgPSBNUFZfRVJST1JfUFJPUEVSVFlfRk9STUFUCisrICogICAgIHByb3Bl cnR5X3VuYXZhaWxhYmxlID0gTVBWX0VSUk9SX1BST1BFUlRZX1VOQVZBSUxBQkxFCisgICovCist ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xP R19MRVZFTF9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEz NywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9lcnJvcihNUFZfRVJST1JfUFJPUEVSVFlfTk9UX0ZPVU5EKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBf X3B5eF9uX3NfZXJyb3IsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTM3LCBfX3B5eF9M MV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25f c19ub3RfZm91bmQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODcsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTM4CistICogICAgIGZhdGFsID0gTVBW X0xPR19MRVZFTF9GQVRBTAorLSAqICAgICBlcnJvciA9IE1QVl9MT0dfTEVWRUxfRVJST1IKKy0g KiAgICAgd2FybiA9IE1QVl9MT0dfTEVWRUxfV0FSTiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgIGluZm8gPSBNUFZfTE9HX0xFVkVMX0lORk8KKy0gKiAgICAgdiA9IE1QVl9M T0dfTEVWRUxfVgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4CisrICog ICAgIG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJT05fRVJST1IKKysgKiAgICAgbm90X2Zv dW5kID0gTVBWX0VSUk9SX1BST1BFUlRZX05PVF9GT1VORAorKyAqICAgICBwcm9wZXJ0eV9mb3Jt YXQgPSBNUFZfRVJST1JfUFJPUEVSVFlfRk9STUFUICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1JfUFJPUEVSVFlfVU5B VkFJTEFCTEUKKysgKiAgICAgcHJvcGVydHlfZXJyb3IgPSBNUFZfRVJST1JfUFJPUEVSVFlfRVJS T1IKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19s ZXZlbChNUFZfTE9HX0xFVkVMX1dBUk4pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCAxMzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1BST1BFUlRZX0ZPUk1BVCk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNywgX19weXhfbl9zX3dhcm4sIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTM4LCBf X3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9f cHl4X25fc19wcm9wZXJ0eV9mb3JtYXQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODgs IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTM5CistICogICAg IGVycm9yID0gTVBWX0xPR19MRVZFTF9FUlJPUgorLSAqICAgICB3YXJuID0gTVBWX0xPR19MRVZF TF9XQVJOCistICogICAgIGluZm8gPSBNUFZfTE9HX0xFVkVMX0lORk8gICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WCistICogICAgIGRlYnVn ID0gTVBWX0xPR19MRVZFTF9ERUJVRworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjg5CisrICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9OT1RfRk9VTkQK KysgKiAgICAgcHJvcGVydHlfZm9ybWF0ID0gTVBWX0VSUk9SX1BST1BFUlRZX0ZPUk1BVAorKyAq ICAgICBwcm9wZXJ0eV91bmF2YWlsYWJsZSA9IE1QVl9FUlJPUl9QUk9QRVJUWV9VTkFWQUlMQUJM RSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHByb3BlcnR5X2Vycm9yID0g TVBWX0VSUk9SX1BST1BFUlRZX0VSUk9SCisrICogICAgIGNvbW1hbmRfZXJyb3IgPSBNUFZfRVJS T1JfQ09NTUFORAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfbG9nX2xldmVsKE1QVl9MT0dfTEVWRUxfSU5GTyk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDEzOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfUFJPUEVSVFlfVU5BVkFJTEFC TEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4OSwgX19weXhfTDFf ZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1l SW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19pbmZvLCBfX3B5eF90XzYpIDwgMCkgX19QWVhf RVJSKDAsIDEzOSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3Mo X19weXhfdF83LCBfX3B5eF9uX3NfcHJvcGVydHlfdW5hdmFpbGFibGUsIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgODksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTQwCistICogICAgIHdhcm4gPSBNUFZfTE9HX0xFVkVMX1dBUk4KKy0gKiAgICAgaW5m byA9IE1QVl9MT0dfTEVWRUxfSU5GTworLSAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgZGVidWcgPSBNUFZfTE9HX0xFVkVMX0RF QlVHCistICogICAgIHRyYWNlID0gTVBWX0xPR19MRVZFTF9UUkFDRQorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjkwCisrICogICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9F UlJPUl9QUk9QRVJUWV9GT1JNQVQKKysgKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZf RVJST1JfUFJPUEVSVFlfVU5BVkFJTEFCTEUKKysgKiAgICAgcHJvcGVydHlfZXJyb3IgPSBNUFZf RVJST1JfUFJPUEVSVFlfRVJST1IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICBjb21tYW5kX2Vycm9yID0gTVBWX0VSUk9SX0NPTU1BTkQKKysgKiAgICAgbG9hZGluZ19mYWls ZWQgPSBNUFZfRVJST1JfTE9BRElOR19GQUlMRUQKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4 X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX1YpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNDAsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1BS T1BFUlRZX0VSUk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTAs IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19Q eXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdiwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCAxNDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3Byb3BlcnR5X2Vycm9yLCBfX3B5eF90XzYpIDwg MCkgX19QWVhfRVJSKDAsIDkwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjE0MQorLSAqICAgICBpbmZvID0gTVBWX0xPR19MRVZFTF9JTkZPCistICogICAgIHYg PSBNUFZfTE9HX0xFVkVMX1YKKy0gKiAgICAgZGVidWcgPSBNUFZfTE9HX0xFVkVMX0RFQlVHICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgdHJhY2UgPSBNUFZfTE9HX0xFVkVM X1RSQUNFCistICogCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTEKKysg KiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1JfUFJPUEVSVFlfVU5BVkFJTEFC TEUKKysgKiAgICAgcHJvcGVydHlfZXJyb3IgPSBNUFZfRVJST1JfUFJPUEVSVFlfRVJST1IKKysg KiAgICAgY29tbWFuZF9lcnJvciA9IE1QVl9FUlJPUl9DT01NQU5EICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgbG9hZGluZ19mYWlsZWQgPSBNUFZfRVJST1JfTE9BRElOR19G QUlMRUQKKysgKiAgICAgYW9faW5pdF9mYWlsZWQgPSBNUFZfRVJST1JfQU9fSU5JVF9GQUlMRUQK KyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZl bChNUFZfTE9HX0xFVkVMX0RFQlVHKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgMTQxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9DT01NQU5EKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgOTEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfZGVidWcsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTQxLCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19j b21tYW5kX2Vycm9yLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDkxLCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE0MgorLSAqICAgICB2ID0gTVBWX0xP R19MRVZFTF9WCistICogICAgIGRlYnVnID0gTVBWX0xPR19MRVZFTF9ERUJVRworLSAqICAgICB0 cmFjZSA9IE1QVl9MT0dfTEVWRUxfVFJBQ0UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqIAorLSAqIAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkyCisrICog ICAgIHByb3BlcnR5X2Vycm9yID0gTVBWX0VSUk9SX1BST1BFUlRZX0VSUk9SCisrICogICAgIGNv bW1hbmRfZXJyb3IgPSBNUFZfRVJST1JfQ09NTUFORAorKyAqICAgICBsb2FkaW5nX2ZhaWxlZCA9 IE1QVl9FUlJPUl9MT0FESU5HX0ZBSUxFRCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX0FPX0lOSVRfRkFJTEVECisrICogICAg IHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lOSVRfRkFJTEVECisgICovCistICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZF TF9UUkFDRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE0MiwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l cnJvcihNUFZfRVJST1JfTE9BRElOR19GQUlMRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA5MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc190 cmFjZSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxNDIsIF9fcHl4X0wxX2Vycm9yKQor KyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2xvYWRpbmdf ZmFpbGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDkyLCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEzNAorLSAqIAorLSAqIAorLSAqIGNsYXNzIExv Z0xldmVsczogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBubyA9IE1QVl9M T0dfTEVWRUxfTk9ORQorLSAqICAgICBmYXRhbCA9IE1QVl9MT0dfTEVWRUxfRkFUQUwKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MworKyAqICAgICBjb21tYW5kX2Vycm9y ID0gTVBWX0VSUk9SX0NPTU1BTkQKKysgKiAgICAgbG9hZGluZ19mYWlsZWQgPSBNUFZfRVJST1Jf TE9BRElOR19GQUlMRUQKKysgKiAgICAgYW9faW5pdF9mYWlsZWQgPSBNUFZfRVJST1JfQU9fSU5J VF9GQUlMRUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICB2b19pbml0X2Zh aWxlZCA9IE1QVl9FUlJPUl9WT19JTklUX0ZBSUxFRAorKyAqICAgICBub3RoaW5nX3RvX3BsYXkg PSBNUFZfRVJST1JfTk9USElOR19UT19QTEFZCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9Q eTNDbGFzc0NyZWF0ZSgoKFB5T2JqZWN0KikmX19QeXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4 X25fc19Mb2dMZXZlbHMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90XzcsIE5VTEwsIDAsIDEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzQsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBW X0VSUk9SX0FPX0lOSVRfRkFJTEVEKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgOTMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cist ICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX0xvZ0xldmVscywgX19weXhf dF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2FvX2luaXRfZmFpbGVkLCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDkzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Nyk7IF9fcHl4X3RfNyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTQ1CistICogCistICogCistICogY2xhc3MgRU9GUmVhc29uczogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAiIiJLbm93biBwb3NzaWJsZSB2YWx1ZXMgZm9yIEVuZE9m RmlsZVJlYWNoZWQgcmVhc29uLgorLSAqIAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk0CisrICogICAgIGxvYWRpbmdfZmFpbGVkID0gTVBWX0VSUk9SX0xPQURJTkdfRkFJ TEVECisrICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX0FPX0lOSVRfRkFJTEVECisr ICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lOSVRfRkFJTEVEICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgbm90aGluZ190b19wbGF5ID0gTVBWX0VSUk9S X05PVEhJTkdfVE9fUExBWQorKyAqICAgICB1bmtub3duX2Zvcm1hdCA9IE1QVl9FUlJPUl9VTktO T1dOX0ZPUk1BVAorICAqLworLSAgX19weXhfdF83ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFy ZSgoUHlPYmplY3QgKikgTlVMTCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X25fc19FT0ZSZWFz b25zLCBfX3B5eF9uX3NfRU9GUmVhc29ucywgKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X25fc192 aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2twX3NfS25vd25fcG9zc2libGVfdmFsdWVzX2Zvcl9F bmRPZkYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxNDUsIF9fcHl4 X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICBfX3B5eF90XzYgPSBf X1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfVk9fSU5JVF9GQUlMRUQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5NCwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5D bGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc192b19pbml0X2ZhaWxlZCwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCA5NCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhf dF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxNTAKKy0gKiAgICAgWW91IHNob3VsZCBoYW5kbGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQg dGhlIHJlYXNvbiBtYXkgbm90IGJlIGFueSBvZiB0aGVzZSB2YWx1ZXMuCistICogICAgICIiIgor LSAqICAgICBlb2YgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX0VPRiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIGFib3J0ZWQgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX1NUT1AKKy0g KiAgICAgcXVpdCA9IE1QVl9FTkRfRklMRV9SRUFTT05fUVVJVAorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjk1CisrICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9S X0FPX0lOSVRfRkFJTEVECisrICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lO SVRfRkFJTEVECisrICogICAgIG5vdGhpbmdfdG9fcGxheSA9IE1QVl9FUlJPUl9OT1RISU5HX1RP X1BMQVkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICB1bmtub3duX2Zvcm1h dCA9IE1QVl9FUlJPUl9VTktOT1dOX0ZPUk1BVAorKyAqICAgICB1bnN1cHBvcnRlZCA9IE1QVl9F UlJPUl9VTlNVUFBPUlRFRAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfZW5kX2ZpbGVfcmVhc29uKE1QVl9FTkRfRklMRV9SRUFTT05fRU9GKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTUwLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9O T1RISU5HX1RPX1BMQVkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5 NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChf X1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19lb2YsIF9fcHl4X3RfNikg PCAwKSBfX1BZWF9FUlIoMCwgMTUwLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXRO YW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19ub3RoaW5nX3RvX3BsYXksIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgOTUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTUxCistICogICAgICIiIgorLSAqICAgICBlb2YgPSBNUFZfRU5EX0ZJTEVf UkVBU09OX0VPRgorLSAqICAgICBhYm9ydGVkID0gTVBWX0VORF9GSUxFX1JFQVNPTl9TVE9QICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcXVpdCA9IE1QVl9FTkRfRklMRV9S RUFTT05fUVVJVAorLSAqICAgICBlcnJvciA9IE1QVl9FTkRfRklMRV9SRUFTT05fRVJST1IKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NgorKyAqICAgICB2b19pbml0X2Zh aWxlZCA9IE1QVl9FUlJPUl9WT19JTklUX0ZBSUxFRAorKyAqICAgICBub3RoaW5nX3RvX3BsYXkg PSBNUFZfRVJST1JfTk9USElOR19UT19QTEFZCisrICogICAgIHVua25vd25fZm9ybWF0ID0gTVBW X0VSUk9SX1VOS05PV05fRk9STUFUICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgdW5zdXBwb3J0ZWQgPSBNUFZfRVJST1JfVU5TVVBQT1JURUQKKysgKiAgICAgbm90X2ltcGxl bWVudGVkID0gTVBWX0VSUk9SX05PVF9JTVBMRU1FTlRFRAorICAqLworLSAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5kX2ZpbGVfcmVhc29uKE1QVl9FTkRfRklMRV9S RUFTT05fU1RPUCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE1MSwg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21w dl9lcnJvcihNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NikpIF9fUFlYX0VSUigwLCA5NiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25f c19hYm9ydGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE1MSwgX19weXhfTDFfZXJy b3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdW5r bm93bl9mb3JtYXQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTYsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTUyCistICogICAgIGVvZiA9IE1QVl9F TkRfRklMRV9SRUFTT05fRU9GCistICogICAgIGFib3J0ZWQgPSBNUFZfRU5EX0ZJTEVfUkVBU09O X1NUT1AKKy0gKiAgICAgcXVpdCA9IE1QVl9FTkRfRklMRV9SRUFTT05fUVVJVCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGVycm9yID0gTVBWX0VORF9GSUxFX1JFQVNPTl9F UlJPUgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3CisrICogICAgIG5v dGhpbmdfdG9fcGxheSA9IE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkKKysgKiAgICAgdW5rbm93 bl9mb3JtYXQgPSBNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQKKysgKiAgICAgdW5zdXBwb3J0ZWQg PSBNUFZfRVJST1JfVU5TVVBQT1JURUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICBub3RfaW1wbGVtZW50ZWQgPSBNUFZfRVJST1JfTk9UX0lNUExFTUVOVEVECisgICogCisg ICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lbmRfZmlsZV9y ZWFzb24oTVBWX0VORF9GSUxFX1JFQVNPTl9RVUlUKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgMTUyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4 X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9VTlNVUFBPUlRFRCk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDk3LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9f cHl4X3RfNywgX19weXhfbl9zX3F1aXQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTUy LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90Xzcs IF9fcHl4X25fc191bnN1cHBvcnRlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5Nywg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNTMKKy0gKiAgICAg YWJvcnRlZCA9IE1QVl9FTkRfRklMRV9SRUFTT05fU1RPUAorLSAqICAgICBxdWl0ID0gTVBWX0VO RF9GSUxFX1JFQVNPTl9RVUlUCistICogICAgIGVycm9yID0gTVBWX0VORF9GSUxFX1JFQVNPTl9F UlJPUiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTgKKysgKiAgICAgdW5rbm93bl9mb3JtYXQgPSBNUFZfRVJST1JfVU5L Tk9XTl9GT1JNQVQKKysgKiAgICAgdW5zdXBwb3J0ZWQgPSBNUFZfRVJST1JfVU5TVVBQT1JURUQK KysgKiAgICAgbm90X2ltcGxlbWVudGVkID0gTVBWX0VSUk9SX05PVF9JTVBMRU1FTlRFRCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogCisgICovCistICBfX3B5eF90XzYg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lbmRfZmlsZV9yZWFzb24oTVBWX0VORF9GSUxF X1JFQVNPTl9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE1 MywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9lcnJvcihNUFZfRVJST1JfTk9UX0lNUExFTUVOVEVEKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgOTgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfZXJyb3IsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTUzLCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19u b3RfaW1wbGVtZW50ZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTgsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTQ1CistICogCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzIKKysgKiBQeV9Jbml0aWFsaXplKCkKKyAgKiAK Ky0gKiBjbGFzcyBFT0ZSZWFzb25zOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICIiIktub3duIHBvc3NpYmxlIHZhbHVlcyBmb3IgRW5kT2ZGaWxlUmVhY2hlZCByZWFzb24u CisrICogY2xhc3MgRXJyb3JzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICIiIlNldCBvZiBrbm93biBlcnJvciBjb2RlcyBmcm9tIE1wdkVycm9yIGFuZCBFdmVudCByZXNw b25zZXMuCisgICogCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZSgo KFB5T2JqZWN0KikmX19QeXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19FT0ZSZWFzb25z LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdF83LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNiA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKCgoUHlPYmplY3QqKSZfX1B5eF9EZWZhdWx0Q2xh c3NUeXBlKSwgX19weXhfbl9zX0Vycm9ycywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3RfNywg TlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDcyLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKFB5RGlj dF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19FT0ZSZWFzb25zLCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDE0NSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlEaWN0X1NldEl0ZW0o X19weXhfZCwgX19weXhfbl9zX0Vycm9ycywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA3 MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOAorLSAqIAorLSAqIAorLSAqIGRl ZiBfZXJyb3JzKGZuKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBkZWYg d3JhcHBlZCgqaywgKiprdyk6CistICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCistICovCist ICBfX3B5eF90XzcgPSBQeUNGdW5jdGlvbl9OZXdFeCgmX19weXhfbWRlZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfNV9lcnJvcnMsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAzMTgsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICBpZiAoUHlEaWN0X1NldEl0ZW0oX19w eXhfZCwgX19weXhfbl9zX2Vycm9ycywgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCAzMTgs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9 IDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI2CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAxCisgICogCisgICogCistICogY2xhc3Mg TVBWRXJyb3IoRXhjZXB0aW9uKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICBjb2RlID0gTm9uZQorKyAqIGNsYXNzIEV2ZW50czogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAiIiJTZXQgb2Yga25vd24gdmFsdWVzIGZvciBFdmVudCBpZHMuCisgICog CisgICovCistICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMCwgMzI2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNyA9 IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5 X3R1cGxlLCBfX3B5eF9uX3NfRXZlbnRzLCBfX3B5eF9uX3NfRXZlbnRzLCAoUHlPYmplY3QgKikg TlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfa3Bfc19TZXRfb2Zfa25v d25fdmFsdWVzX2Zvcl9FdmVudF9pZCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhf RVJSKDAsIDEwMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsK Ky0gIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhj ZXB0aW9uKVswXSkpKTsKKy0gIF9fUHl4X0dJVkVSRUYoKChQeU9iamVjdCAqKSgmKChQeVR5cGVP YmplY3QqKVB5RXhjX0V4Y2VwdGlvbilbMF0pKSk7CistICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfNywgMCwgKChQeU9iamVjdCAqKSgmKChQeVR5cGVPYmplY3QqKVB5RXhjX0V4Y2VwdGlvbilb MF0pKSk7CistICBfX3B5eF90XzYgPSBfX1B5eF9DYWxjdWxhdGVNZXRhY2xhc3MoTlVMTCwgX19w eXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMzI2LCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgX19weXhfdF80ID0g X19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzYsIF9fcHl4X3RfNywgX19weXhfbl9z X01QVkVycm9yLCBfX3B5eF9uX3NfTVBWRXJyb3IsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9u X3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2VseSgh X19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMyNiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9H T1RSRUYoX19weXhfdF80KTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozMjcKKy0gKiAKKy0gKiBjbGFzcyBNUFZFcnJvcihFeGNlcHRpb24pOgorLSAqICAgICBjb2Rl ID0gTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGRlZiBf X2luaXRfXyhzZWxmLCBlKToKKy0gKi8KKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5 eF90XzQsIF9fcHl4X25fc19jb2RlLCBQeV9Ob25lKSA8IDApIF9fUFlYX0VSUigwLCAzMjcsIF9f cHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMy OQorLSAqICAgICBjb2RlID0gTm9uZQorLSAqIAorLSAqICAgICBkZWYgX19pbml0X18oc2VsZiwg ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuY29kZSA9 IGUKKy0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogZXJyX2MKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDgKKysgKiAgICAgWW91IHNob3VsZCBoYW5kbGUgdGhlIHBv c3NpYmlsaXR5IHRoYXQgZXZlbnQgaWRzIG1heSBub3QgYmUgYW55IG9mIHRoZXNlIHZhbHVlcy4K KysgKiAgICAgIiIiCisrICogICAgIG5vbmUgPSBNUFZfRVZFTlRfTk9ORSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgIHNodXRkb3duID0gTVBWX0VWRU5UX1NIVVRET1dOCisr ICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5UX0xPR19NRVNTQUdFCisgICovCistICBfX3B5 eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfOE1QVkVycm9yXzFfX2luaXRfXywgMCwgX19weXhfbl9zX01QVkVycm9yX19faW5pdCwg TlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAq KV9fcHl4X2NvZGVvYmpfXzI5KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDMyOSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0g IGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19pbml0LCBfX3B5 eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9OT05FKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTA4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX25vbmUsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTA4LCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyNgorLSAqIAorLSAqIAor LSAqIGNsYXNzIE1QVkVycm9yKEV4Y2VwdGlvbik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgY29kZSA9IE5vbmUKKy0gKiAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDkKKysgKiAgICAgIiIiCisrICogICAgIG5vbmUgPSBNUFZfRVZFTlRfTk9O RQorKyAqICAgICBzaHV0ZG93biA9IE1QVl9FVkVOVF9TSFVURE9XTiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5UX0xPR19NRVNTQUdF CisrICogICAgIGdldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQ TFkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKF9fcHl4X3RfNiwg X19weXhfbl9zX01QVkVycm9yLCBfX3B5eF90XzcsIF9fcHl4X3RfNCwgTlVMTCwgMCwgMSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMyNiwgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5 eF9kLCBfX3B5eF9uX3NfTVBWRXJyb3IsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMzI2 LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfU0hV VERPV04pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDksIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgMTA5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4 X3RfNyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQwCist ICogICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgZSkKKy0gKiAKKy0gKiBjbGFzcyBQ eU1QVkVycm9yKEV4Y2VwdGlvbik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgcGFzcworLSAqIAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMAor KyAqICAgICBub25lID0gTVBWX0VWRU5UX05PTkUKKysgKiAgICAgc2h1dGRvd24gPSBNUFZfRVZF TlRfU0hVVERPV04KKysgKiAgICAgbG9nX21lc3NhZ2UgPSBNUFZfRVZFTlRfTE9HX01FU1NBR0Ug ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBnZXRfcHJvcGVydHlfcmVwbHkg PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCisrICogICAgIHNldF9wcm9wZXJ0eV9yZXBs eSA9IE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkKKyAgKi8KKy0gIF9fcHl4X3RfNyA9IFB5 VHVwbGVfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAzNDAs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9J TkNSRUYoKChQeU9iamVjdCAqKSgmKChQeVR5cGVPYmplY3QqKVB5RXhjX0V4Y2VwdGlvbilbMF0p KSk7CistICBfX1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4 Y19FeGNlcHRpb24pWzBdKSkpOworLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDAsICgo UHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOworLSAg X19weXhfdF82ID0gX19QeXhfQ2FsY3VsYXRlTWV0YWNsYXNzKE5VTEwsIF9fcHl4X3RfNyk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZf RVZFTlRfTE9HX01FU1NBR0UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCAxMTAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBf X3B5eF90XzQgPSBfX1B5eF9QeTNNZXRhY2xhc3NQcmVwYXJlKF9fcHl4X3RfNiwgX19weXhfdF83 LCBfX3B5eF9uX3NfUHlNUFZFcnJvciwgX19weXhfbl9zX1B5TVBWRXJyb3IsIChQeU9iamVjdCAq KSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7 IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5 M0NsYXNzQ3JlYXRlKF9fcHl4X3RfNiwgX19weXhfbl9zX1B5TVBWRXJyb3IsIF9fcHl4X3RfNywg X19weXhfdF80LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMzQwLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19QeU1QVkVycm9yLCBfX3B5 eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX2xvZ19tZXNzYWdlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEx MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0MworLSAqICAgICBwYXNzCistICog CistICogY2RlZiBfY2FsbGJhY2tzID0gZGljdCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiBjZGVmIF9yZXBseV91c2VyZGF0YXMgPSBkaWN0KCkKKy0gKiAKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTEKKysgKiAgICAgc2h1dGRvd24gPSBNUFZfRVZF TlRfU0hVVERPV04KKysgKiAgICAgbG9nX21lc3NhZ2UgPSBNUFZfRVZFTlRfTE9HX01FU1NBR0UK KysgKiAgICAgZ2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBM WSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHNldF9wcm9wZXJ0eV9yZXBs eSA9IE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkKKysgKiAgICAgY29tbWFuZF9yZXBseSA9 IE1QVl9FVkVOVF9DT01NQU5EX1JFUExZCisgICovCistICBfX3B5eF90XzcgPSBfX1B5eF9QeURp Y3RfTmV3UHJlc2l6ZWQoMCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAs IDM0MywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKy0gIF9f UHl4X1hHT1RSRUYoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NhbGxiYWNrcyk7Cist ICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFj a3MsIF9fcHl4X3RfNyk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNyk7CistICBfX3B5eF90 XzcgPSAwOworKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRf aWQoTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWSk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDExMSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25f c19nZXRfcHJvcGVydHlfcmVwbHksIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTExLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NAorLSAqIAorLSAq IGNkZWYgX2NhbGxiYWNrcyA9IGRpY3QoKQorLSAqIGNkZWYgX3JlcGx5X3VzZXJkYXRhcyA9IGRp Y3QoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogY2xhc3MgX1JlcGx5 VXNlckRhdGEob2JqZWN0KToKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTIKKysgKiAgICAgbG9nX21lc3NhZ2UgPSBNUFZfRVZFTlRfTE9HX01FU1NBR0UKKysgKiAgICAg Z2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWQorKyAqICAg ICBzZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRfU0VUX1BST1BFUlRZX1JFUExZICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgY29tbWFuZF9yZXBseSA9IE1QVl9FVkVO VF9DT01NQU5EX1JFUExZCisrICogICAgIHN0YXJ0X2ZpbGUgPSBNUFZfRVZFTlRfU1RBUlRfRklM RQorICAqLworLSAgX19weXhfdF83ID0gX19QeXhfUHlEaWN0X05ld1ByZXNpemVkKDApOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAzNDQsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9YR09UUkVGKF9fcHl4X3ZfOXZp ZGN1dHRlcl80bGlic18zbXB2X19yZXBseV91c2VyZGF0YXMpOworLSAgX19QeXhfREVDUkVGX1NF VChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF90 XzcpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzcpOworLSAgX19weXhfdF83ID0gMDsKKysg IF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVO VF9TRVRfUFJPUEVSVFlfUkVQTFkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigwLCAxMTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cisr ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2V0X3Byb3Bl cnR5X3JlcGx5LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExMiwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDYKKy0gKiBjZGVmIF9yZXBseV91c2Vy ZGF0YXMgPSBkaWN0KCkKKy0gKiAKKy0gKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBk YXRhKToKKy0gKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTMKKysgKiAgICAgZ2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VW RU5UX0dFVF9QUk9QRVJUWV9SRVBMWQorKyAqICAgICBzZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZf RVZFTlRfU0VUX1BST1BFUlRZX1JFUExZCisrICogICAgIGNvbW1hbmRfcmVwbHkgPSBNUFZfRVZF TlRfQ09NTUFORF9SRVBMWSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHN0 YXJ0X2ZpbGUgPSBNUFZfRVZFTlRfU1RBUlRfRklMRQorKyAqICAgICBlbmRfZmlsZSA9IE1QVl9F VkVOVF9FTkRfRklMRQorICAqLworLSAgX19weXhfdF83ID0gX19QeXhfQ2FsY3VsYXRlTWV0YWNs YXNzKE5VTEwsIF9fcHl4X3R1cGxlX18zMCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19Q WVhfRVJSKDAsIDM0NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF83 KTsKKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoX19weXhfdF83LCBf X3B5eF90dXBsZV9fMzAsIF9fcHl4X25fc19SZXBseVVzZXJEYXRhLCBfX3B5eF9uX3NfUmVwbHlV c2VyRGF0YSwgKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYs IChQeU9iamVjdCAqKSBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgMzQ2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21f ZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9DT01NQU5EX1JFUExZKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTEzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX2NvbW1hbmRfcmVwbHksIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwg MTEzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NworLSAq IAorLSAqIGNsYXNzIF9SZXBseVVzZXJEYXRhKG9iamVjdCk6CistICogICAgIGRlZiBfX2luaXRf XyhzZWxmLCBkYXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg c2VsZi5jb3VudGVyID0gMAorLSAqICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNAorKyAqICAgICBzZXRfcHJvcGVydHlfcmVw bHkgPSBNUFZfRVZFTlRfU0VUX1BST1BFUlRZX1JFUExZCisrICogICAgIGNvbW1hbmRfcmVwbHkg PSBNUFZfRVZFTlRfQ09NTUFORF9SRVBMWQorKyAqICAgICBzdGFydF9maWxlID0gTVBWX0VWRU5U X1NUQVJUX0ZJTEUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBlbmRfZmls ZSA9IE1QVl9FVkVOVF9FTkRfRklMRQorKyAqICAgICBmaWxlX2xvYWRlZCA9IE1QVl9FVkVOVF9G SUxFX0xPQURFRAorICAqLworLSAgX19weXhfdF80ID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9f cHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfMV9faW5pdF9f LCAwLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YV9fX2luaXQsIE5VTEwsIF9fcHl4X25fc192aWRj dXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18zMikp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNDcsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF82LCBfX3B5eF9uX3NfaW5pdCwgX19weXhfdF80KSA8IDApIF9fUFlYX0VS UigwLCAzNDcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9f cHl4X3RfNCA9IDA7CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l dmVudF9pZChNUFZfRVZFTlRfU1RBUlRfRklMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDExNCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19z dGFydF9maWxlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNCwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTIKKy0gKiAgICAgICAgIHNlbGYub2Jz ZXJ2ZWQgPSBGYWxzZQorLSAqIAorLSAqICAgICBkZWYgYWRkKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMQorLSAqIAorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNQorKyAqICAgICBjb21tYW5kX3Jl cGx5ID0gTVBWX0VWRU5UX0NPTU1BTkRfUkVQTFkKKysgKiAgICAgc3RhcnRfZmlsZSA9IE1QVl9F VkVOVF9TVEFSVF9GSUxFCisrICogICAgIGVuZF9maWxlID0gTVBWX0VWRU5UX0VORF9GSUxFICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZmlsZV9sb2FkZWQgPSBNUFZfRVZF TlRfRklMRV9MT0FERUQKKysgKiAgICAgIyB0cmFja3NfY2hhbmdlZCA9IE1QVl9FVkVOVF9UUkFD S1NfQ0hBTkdFRAorICAqLworLSAgX19weXhfdF80ID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9f cHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfM2FkZCwgMCwg X19weXhfbl9zX1JlcGx5VXNlckRhdGFfYWRkLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xp YnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMzQpKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzUyLCBfX3B5eF9MMV9lcnJvcikKKy0g IF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9f cHl4X3RfNiwgX19weXhfbl9zX2FkZCwgX19weXhfdF80KSA8IDApIF9fUFlYX0VSUigwLCAzNTIs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9 IDA7CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChN UFZfRVZFTlRfRU5EX0ZJTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCAxMTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZW5kX2ZpbGUsIF9f cHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjM1NQorLSAqICAgICAgICAgc2VsZi5jb3VudGVyICs9IDEKKy0g KiAKKy0gKiAgICAgZGVmIHJlbW92ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgc2VsZi5jb3VudGVyIC09IDEKKy0gKiAKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTYKKysgKiAgICAgc3RhcnRfZmlsZSA9IE1QVl9FVkVOVF9T VEFSVF9GSUxFCisrICogICAgIGVuZF9maWxlID0gTVBWX0VWRU5UX0VORF9GSUxFCisrICogICAg IGZpbGVfbG9hZGVkID0gTVBWX0VWRU5UX0ZJTEVfTE9BREVEICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgIyB0cmFja3NfY2hhbmdlZCA9IE1QVl9FVkVOVF9UUkFDS1NfQ0hB TkdFRAorKyAqICAgICAjIHRyYWNrc19zd2l0Y2hlZCA9IE1QVl9FVkVOVF9UUkFDS19TV0lUQ0hF RAorICAqLworLSAgX19weXhfdF80ID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZf OXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNXJlbW92ZSwgMCwgX19weXhf bl9zX1JlcGx5VXNlckRhdGFfcmVtb3ZlLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNf bXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMzYpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzU1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNiwgX19weXhfbl9zX3JlbW92ZSwgX19weXhfdF80KSA8IDApIF9fUFlYX0VSUigwLCAzNTUs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9 IDA7CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChN UFZfRVZFTlRfRklMRV9MT0FERUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigwLCAxMTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cisr ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZmlsZV9sb2Fk ZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE2LCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NgorLSAqIGNkZWYgX3JlcGx5X3VzZXJkYXRhcyA9 IGRpY3QoKQorLSAqIAorLSAqIGNsYXNzIF9SZXBseVVzZXJEYXRhKG9iamVjdCk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgor LSAqICAgICAgICAgc2VsZi5jb3VudGVyID0gMAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExOQorKyAqICAgICAjIHRyYWNrc19jaGFuZ2VkID0gTVBWX0VWRU5UX1RSQUNL U19DSEFOR0VECisrICogICAgICMgdHJhY2tzX3N3aXRjaGVkID0gTVBWX0VWRU5UX1RSQUNLX1NX SVRDSEVECisrICogICAgIGlkbGUgPSBNUFZfRVZFTlRfSURMRSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICMgcGF1c2UgPSBNUFZfRVZFTlRfUEFVU0UKKysgKiAgICAgIyB1 bnBhdXNlID0gTVBWX0VWRU5UX1VOUEFVU0UKKyAgKi8KKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5 M0NsYXNzQ3JlYXRlKF9fcHl4X3RfNywgX19weXhfbl9zX1JlcGx5VXNlckRhdGEsIF9fcHl4X3R1 cGxlX18zMCwgX19weXhfdF82LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzQpOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19SZXBseVVz ZXJEYXRhLCBfX3B5eF90XzQpIDwgMCkgX19QWVhfRVJSKDAsIDM0NiwgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgIF9fcHl4X3Rf NiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9JRExFKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE5LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNs YXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2lkbGUsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIo MCwgMTE5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5 eF90XzYgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDExCistICogICAgICAgICAg ICAgbXB2X3Jlc3VtZShzZWxmLl9jdHgpCistICogCistICogICAgIEBfZXJyb3JzICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgZGVmIHJlcXVlc3RfZXZlbnQoc2VsZiwgZXZl bnQsIGVuYWJsZSk6CistICogICAgICAgICAiIiJFbmFibGUgb3IgZGlzYWJsZSBhIGdpdmVuIGV2 ZW50LgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEyMgorKyAqICAgICAj IHBhdXNlID0gTVBWX0VWRU5UX1BBVVNFCisrICogICAgICMgdW5wYXVzZSA9IE1QVl9FVkVOVF9V TlBBVVNFCisrICogICAgIHRpY2sgPSBNUFZfRVZFTlRfVElDSyAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICMgc2NyaXB0X2lucHV0X2Rpc3BhdGNoID0gTVBWX0VWRU5UX1ND UklQVF9JTlBVVF9ESVNQQVRDSAorKyAqICAgICBjbGllbnRfbWVzc2FnZSA9IE1QVl9FVkVOVF9D TElFTlRfTUVTU0FHRQorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigwLCA0MTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1RJQ0spOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCAxMjIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfdGljaywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMjIsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDEyCistICogCistICogICAgIEBfZXJy b3JzCistICogICAgIGRlZiByZXF1ZXN0X2V2ZW50KHNlbGYsIGV2ZW50LCBlbmFibGUpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJFbmFibGUgb3IgZGlzYWJs ZSBhIGdpdmVuIGV2ZW50LgorLSAqIAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEyNAorKyAqICAgICB0aWNrID0gTVBWX0VWRU5UX1RJQ0sKKysgKiAgICAgIyBzY3JpcHRf aW5wdXRfZGlzcGF0Y2ggPSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENICisrICogICAg IGNsaWVudF9tZXNzYWdlID0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgdmlkZW9fcmVjb25maWcgPSBNUFZfRVZFTlRfVklERU9f UkVDT05GSUcKKysgKiAgICAgYXVkaW9fcmVjb25maWcgPSBNUFZfRVZFTlRfQVVESU9fUkVDT05G SUcKKyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICop X19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19yZXF1 ZXN0X2V2ZW50KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDEyLCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgX19weXhfdF8x ID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRo b2RfQ2hlY2soX19weXhfdF82KSkpIHsKKy0gICAgX19weXhfdF8xID0gUHlNZXRob2RfR0VUX1NF TEYoX19weXhfdF82KTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90XzEpKSB7CistICAgICAgUHlP YmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7CistICAg ICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7CistICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKKy0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOworLSAgICB9 CistICB9CistICBfX3B5eF90XzcgPSAoX19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwy QXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3Rf NCA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA0MTEsIF9f cHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICBfX3B5eF90XzYg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfQ0xJRU5UX01F U1NBR0UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMjQsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfY2xpZW50X21lc3NhZ2UsIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgMTI0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9i amVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0 LCBfX3B5eF9uX3NfcmVxdWVzdF9ldmVudCwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA0 MTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3Rf NyA9IDA7CistICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQy OQorLSAqICAgICAgICAgcmV0dXJuIGVycgorLSAqIAorLSAqICAgICBAX2Vycm9ycyAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGRlZiBzZXRfbG9nX2xldmVsKHNlbGYsIGxv Z2xldmVsKToKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMi IiIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjUKKysgKiAgICAgIyBz Y3JpcHRfaW5wdXRfZGlzcGF0Y2ggPSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENICisr ICogICAgIGNsaWVudF9tZXNzYWdlID0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFCisrICogICAg IHZpZGVvX3JlY29uZmlnID0gTVBWX0VWRU5UX1ZJREVPX1JFQ09ORklHICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgYXVkaW9fcmVjb25maWcgPSBNUFZfRVZFTlRfQVVESU9f UkVDT05GSUcKKysgKiAgICAgIyBtZXRhZGF0YV91cGRhdGUgPSBNUFZfRVZFTlRfTUVUQURBVEFf VVBEQVRFCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19w eXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQy OSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9ldmVudF9pZChNUFZfRVZFTlRfVklERU9fUkVDT05GSUcpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMjUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBf X3B5eF9uX3NfdmlkZW9fcmVjb25maWcsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTI1 LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYg PSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzMAorLSAqIAor LSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgc2V0X2xvZ19sZXZlbChzZWxmLCBsb2dsZXZl bCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICIiIldyYXBzOiBt cHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjYKKysgKiAgICAgY2xpZW50 X21lc3NhZ2UgPSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0UKKysgKiAgICAgdmlkZW9fcmVjb25m aWcgPSBNUFZfRVZFTlRfVklERU9fUkVDT05GSUcKKysgKiAgICAgYXVkaW9fcmVjb25maWcgPSBN UFZfRVZFTlRfQVVESU9fUkVDT05GSUcgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAjIG1ldGFkYXRhX3VwZGF0ZSA9IE1QVl9FVkVOVF9NRVRBREFUQV9VUERBVEUKKysgKiAg ICAgc2VlayA9IE1QVl9FVkVOVF9TRUVLCisgICovCistICBfX1B5eF9HZXROYW1lSW5DbGFzcyhf X3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0LCBfX3B5eF9uX3Nfc2V0X2xvZ19sZXZlbCk7IGlmICh1bmxpa2VseSghX19weXhfdF80 KSkgX19QWVhfRVJSKDAsIDQzMCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19w eXhfdF80KTsKKy0gIF9fcHl4X3RfMSA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRI T0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CistICAgIF9fcHl4 X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CistICAgIGlmIChsaWtlbHkoX19w eXhfdF8xKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzYpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworLSAgICAg IF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90 XzYsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkg PyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3Rf NCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80KTsKKy0g IF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90Xzcp KSBfX1BZWF9FUlIoMCwgNDI5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzcpOworKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRf aWQoTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgMTI2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzYpOworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2F1 ZGlvX3JlY29uZmlnLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyNiwgX19weXhfTDFf ZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlm IChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3NldF9sb2dfbGV2ZWwsIF9fcHl4X3Rf NykgPCAwKSBfX1BZWF9FUlIoMCwgNDMwLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NDAKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKy0gKiAKKy0g KiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBkZWYg bG9hZF9jb25maWcoc2VsZiwgZmlsZW5hbWUpOgorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9s b2FkX2NvbmZpZ19maWxlIiIiCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTI4CisrICogICAgIGF1ZGlvX3JlY29uZmlnID0gTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHCisr ICogICAgICMgbWV0YWRhdGFfdXBkYXRlID0gTVBWX0VWRU5UX01FVEFEQVRBX1VQREFURQorKyAq ICAgICBzZWVrID0gTVBWX0VWRU5UX1NFRUsgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICBwbGF5YmFja19yZXN0YXJ0ID0gTVBWX0VWRU5UX1BMQVlCQUNLX1JFU1RBUlQKKysg KiAgICAgcHJvcGVydHlfY2hhbmdlID0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRQorICAqLwor LSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NDAsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQo TVBWX0VWRU5UX1NFRUspOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAx MjgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2VlaywgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCAxMjgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDQxCistICogCistICogICAgIEBfZXJyb3JzCistICogICAgIGRlZiBsb2Fk X2NvbmZpZyhzZWxmLCBmaWxlbmFtZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICIiIldyYXBzOiBtcHZfbG9hZF9jb25maWdfZmlsZSIiIgorLSAqICAgICAgICAg YXNzZXJ0IHNlbGYuX2N0eAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEy OQorKyAqICAgICAjIG1ldGFkYXRhX3VwZGF0ZSA9IE1QVl9FVkVOVF9NRVRBREFUQV9VUERBVEUK KysgKiAgICAgc2VlayA9IE1QVl9FVkVOVF9TRUVLCisrICogICAgIHBsYXliYWNrX3Jlc3RhcnQg PSBNUFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFSVCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgIHByb3BlcnR5X2NoYW5nZSA9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0UKKysg KiAgICAgIyBjaGFwdGVyX2NoYW5nZSA9IE1QVl9FVkVOVF9DSEFQVEVSX0NIQU5HRQorICAqLwor LSAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX2xvYWRfY29uZmlnKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDQxLCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgX19weXhfdF8xID0gTlVMTDsKKy0g IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19w eXhfdF82KSkpIHsKKy0gICAgX19weXhfdF8xID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82 KTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90XzEpKSB7CistICAgICAgUHlPYmplY3QqIGZ1bmN0 aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7CistICAgICAgX19QeXhfSU5D UkVGKF9fcHl4X3RfMSk7CistICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICBf X1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOworLSAgICB9CistICB9CistICBf X3B5eF90XzcgPSAoX19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzYsIF9fcHl4X3RfMSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfdF82LCBfX3B5eF90XzQpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA0NDAsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFSVCk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEyOSwgX19weXhfTDFfZXJyb3Ip CisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFz cyhfX3B5eF90XzcsIF9fcHl4X25fc19wbGF5YmFja19yZXN0YXJ0LCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDEyOSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhf dF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilf X3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhf bl9zX2xvYWRfY29uZmlnLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDQ0MSwgX19weXhf TDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0g IFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTczCistICogICAg ICAgICByZXR1cm4gcmVzdWx0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTMwCisrICogICAgIHNlZWsgPSBNUFZfRVZFTlRfU0VFSworKyAqICAgICBwbGF5YmFja19yZXN0 YXJ0ID0gTVBWX0VWRU5UX1BMQVlCQUNLX1JFU1RBUlQKKysgKiAgICAgcHJvcGVydHlfY2hhbmdl ID0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICMgY2hhcHRlcl9jaGFuZ2UgPSBNUFZfRVZFTlRfQ0hBUFRFUl9DSEFOR0UKKyAg KiAKKy0gKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICBkZWYgZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6CistICogICAg ICAgICAiIiJHZXRzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGFzeW5jaHJvbm91c2x5LgorICAq LworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJv cnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA1NzMsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRf aWQoTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDEzMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19w cm9wZXJ0eV9jaGFuZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTMwLCBfX3B5eF9M MV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU3NAorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwMQorICAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAg ICBkZWYgZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICIiIkdldHMgdGhlIHZhbHVlIG9mIGEg cHJvcGVydHkgYXN5bmNocm9ub3VzbHkuCisrICogCisrICogY2xhc3MgRXZlbnRzOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICIiIlNldCBvZiBrbm93biB2YWx1ZXMgZm9y IEV2ZW50IGlkcy4KKyAgKiAKKyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQs IF9fcHl4X25fc19nZXRfcHJvcGVydHlfYXN5bmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNCk7CistICBfX3B5eF90XzEgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9E UyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgeworLSAgICBfX3B5eF90 XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOworLSAgICBpZiAobGlrZWx5KF9fcHl4 X3RfMSkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJ T04oX19weXhfdF82KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKy0gICAgICBf X1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82 LCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8g X19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQp IDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX1B5eF9ERUNSRUYo X19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkg X19QWVhfRVJSKDAsIDU3MywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhf dF83KTsKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKCgoUHlPYmplY3QqKSZf X1B5eF9EZWZhdWx0Q2xhc3NUeXBlKSwgX19weXhfbl9zX0V2ZW50cywgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X3RfNywgTlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDEwMSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82 KTsKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfRXZlbnRzLCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEwMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbSgo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBf ZGljdCwgX19weXhfbl9zX2dldF9wcm9wZXJ0eV9hc3luYywgX19weXhfdF83KSA8IDApIF9fUFlY X0VSUigwLCA1NzQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7 IF9fcHl4X3RfNyA9IDA7CistICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYzNQorLSAqICAgICAgICAgcmV0dXJuIHYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMzQKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICBkZWYgc2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIHZhbHVl PVRydWUsIGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKToKKy0gKiAgICAgICAgICIiIldy YXBzOiBtcHZfc2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIiCistICov CistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9y cyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDYzNSwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MzYKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMKKy0gKiAgICAg ZGVmIHNldF9wcm9wZXJ0eShzZWxmLCBwcm9wLCB2YWx1ZT1UcnVlLCBhc3luY2hyb25vdXM9RmFs c2UsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICIiIldyYXBzOiBtcHZfc2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIi CistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICogY2xhc3MgTG9nTGV2ZWxzOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIG5vID0gTVBWX0xPR19MRVZFTF9OT05F CisrICogICAgIGZhdGFsID0gTVBWX0xPR19MRVZFTF9GQVRBTAorICAqLworLSAgX19QeXhfR2V0 TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3NldF9wcm9wZXJ0eSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDYzNiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9HT1RSRUYoX19weXhfdF80KTsKKy0gIF9fcHl4X3RfMSA9IE5VTEw7CistICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7 CistICAgIF9fcHl4X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CistICAgIGlm IChsaWtlbHkoX19weXhfdF8xKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0 aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzYpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzEpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzYsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAgX19weXhfdF83ID0g KF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90 XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19w eXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNjM1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCAo UHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0 ICopIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMzQsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9ERUNS RUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbSgoUHlP YmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGlj dCwgX19weXhfbl9zX3NldF9wcm9wZXJ0eSwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2 MzYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3Rf NyA9IDA7CistICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3 MworLSAqICAgICAgICAgcmV0dXJuIGVycgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEzNQorICAqIAorLSAqICAgICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgIGRlZiBzZXRfb3B0aW9uKHNlbGYsIHByb3AsIHZhbHVlPVRydWUpOgor LSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCisrICogY2xhc3MgTG9nTGV2 ZWxzOgorKyAqICAgICBubyA9IE1QVl9MT0dfTEVWRUxfTk9ORSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgIGZhdGFsID0gTVBWX0xPR19MRVZFTF9GQVRBTAorKyAqICAgICBl cnJvciA9IE1QVl9MT0dfTEVWRUxfRVJST1IKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2Jh bE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzYpKSBfX1BZWF9FUlIoMCwgNjczLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9f UHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX05PTkUpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzUsIF9fcHl4X0wxX2Vycm9y KQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xh c3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm8sIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwg MTM1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3NAorLSAq IAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgc2V0X29wdGlvbihzZWxmLCBwcm9wLCB2 YWx1ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIi V3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTM2CisrICogY2xhc3MgTG9nTGV2 ZWxzOgorKyAqICAgICBubyA9IE1QVl9MT0dfTEVWRUxfTk9ORQorKyAqICAgICBmYXRhbCA9IE1Q Vl9MT0dfTEVWRUxfRkFUQUwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBl cnJvciA9IE1QVl9MT0dfTEVWRUxfRVJST1IKKysgKiAgICAgd2FybiA9IE1QVl9MT0dfTEVWRUxf V0FSTgorICAqLworLSAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3Qg KilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3Nl dF9vcHRpb24pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2NzQsIF9f cHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBfX3B5eF90XzEg PSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhv ZF9DaGVjayhfX3B5eF90XzYpKSkgeworLSAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VM RihfX3B5eF90XzYpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsKKy0gICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKKy0gICAg ICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24p OworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7CistICAgIH0K Ky0gIH0KKy0gIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80 ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDY3MywgX19w eXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKysgIF9fcHl4X3RfNiA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX0ZBVEFM KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM2LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKyAgaWYgKF9fUHl4X1NldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2ZhdGFsLCBfX3B5eF90XzYpIDwgMCkgX19QWVhf RVJSKDAsIDEzNiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsg X19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9w dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3Nl dF9vcHRpb24sIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNjc0LCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgUHlUeXBl X01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2OTUKKy0gKiAgICAgICAgIHJl dHVybiBlcnIKKy0gKiAKKy0gKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKToKKy0gKiAgICAgICAgICIiIldyYXBz OiBtcHZfaW5pdGlhbGl6ZSIiIgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEzNworKyAqICAgICBubyA9IE1QVl9MT0dfTEVWRUxfTk9ORQorKyAqICAgICBmYXRhbCA9IE1Q Vl9MT0dfTEVWRUxfRkFUQUwKKysgKiAgICAgZXJyb3IgPSBNUFZfTE9HX0xFVkVMX0VSUk9SICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgd2FybiA9IE1QVl9MT0dfTEVWRUxf V0FSTgorKyAqICAgICBpbmZvID0gTVBWX0xPR19MRVZFTF9JTkZPCisgICovCistICBfX1B5eF9H ZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDY5NSwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19M RVZFTF9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEzNywg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19lcnJvciwgX19weXhfdF82KSA8 IDApIF9fUFlYX0VSUigwLCAxMzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Njk2CistICogCistICogICAgIEBfZXJyb3JzCistICogICAgIGRlZiBpbml0aWFs aXplKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJX cmFwczogbXB2X2luaXRpYWxpemUiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzgKKysgKiAgICAgZmF0YWwgPSBN UFZfTE9HX0xFVkVMX0ZBVEFMCisrICogICAgIGVycm9yID0gTVBWX0xPR19MRVZFTF9FUlJPUgor KyAqICAgICB3YXJuID0gTVBWX0xPR19MRVZFTF9XQVJOICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgaW5mbyA9IE1QVl9MT0dfTEVWRUxfSU5GTworKyAqICAgICB2ID0gTVBW X0xPR19MRVZFTF9WCisgICovCistICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQ eU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCBfX3B5 eF9uX3NfaW5pdGlhbGl6ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAs IDY5NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gIF9f cHl4X3RfMSA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5 KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CistICAgIF9fcHl4X3RfMSA9IFB5TWV0aG9k X0dFVF9TRUxGKF9fcHl4X3RfNik7CistICAgIGlmIChsaWtlbHkoX19weXhfdF8xKSkgeworLSAg ICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzYp OworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworLSAgICAgIF9fUHl4X0lOQ1JFRihm dW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1bmN0aW9uKTsK Ky0gICAgfQorLSAgfQorLSAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVj dF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9i amVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYo X19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBf X3B5eF90XzQgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwg Njk1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgX19w eXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xldmVsKE1QVl9MT0dfTEVW RUxfV0FSTik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEzOCwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgIGlmIChfX1B5eF9T ZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc193YXJuLCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDEzOCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhf dF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilf X3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhf bl9zX2luaXRpYWxpemUsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNjk2LCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAg UHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDgKKy0gKiAgICAg ICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc3RhcnQoKQorLSAqIAorLSAqICAgICBAX2Vycm9ycyAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGRlZiBvYnNlcnZlX3Byb3BlcnR5 KHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6CistICogICAgICAgICAiIiJXcmFwczogbXB2X29ic2Vy dmVfcHJvcGVydHkiIiIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzkK KysgKiAgICAgZXJyb3IgPSBNUFZfTE9HX0xFVkVMX0VSUk9SCisrICogICAgIHdhcm4gPSBNUFZf TE9HX0xFVkVMX1dBUk4KKysgKiAgICAgaW5mbyA9IE1QVl9MT0dfTEVWRUxfSU5GTyAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHYgPSBNUFZfTE9HX0xFVkVMX1YKKysgKiAg ICAgZGVidWcgPSBNUFZfTE9HX0xFVkVMX0RFQlVHCisgICovCistICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDc0OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9JTkZP KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM5LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKyAgaWYgKF9fUHl4X1NldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2luZm8sIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9F UlIoMCwgMTM5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBf X3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0 OQorLSAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgb2JzZXJ2ZV9wcm9wZXJ0eShz ZWxmLCBwcm9wLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVfcHJvcGVydHkiIiIKKy0gKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDAK KysgKiAgICAgd2FybiA9IE1QVl9MT0dfTEVWRUxfV0FSTgorKyAqICAgICBpbmZvID0gTVBWX0xP R19MRVZFTF9JTkZPCisrICogICAgIHYgPSBNUFZfTE9HX0xFVkVMX1YgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICBkZWJ1ZyA9IE1QVl9MT0dfTEVWRUxfREVCVUcKKysgKiAg ICAgdHJhY2UgPSBNUFZfTE9HX0xFVkVMX1RSQUNFCisgICovCistICBfX1B5eF9HZXROYW1lSW5D bGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0LCBfX3B5eF9uX3Nfb2JzZXJ2ZV9wcm9wZXJ0eSk7IGlmICh1bmxpa2VseSgh X19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc0OSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9H T1RSRUYoX19weXhfdF80KTsKKy0gIF9fcHl4X3RfMSA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VO UEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7Cist ICAgIF9fcHl4X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CistICAgIGlmIChs aWtlbHkoX19weXhfdF8xKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9k X0dFVF9GVU5DVElPTihfX3B5eF90XzYpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEp OworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF90XzYsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAgX19weXhfdF83ID0gKF9f cHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEs IF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhf dF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNzQ4LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzcpOworKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfbG9nX2xldmVsKE1QVl9MT0dfTEVWRUxfVik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDE0MCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc192 LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE0MCwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0 SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dC0+dHBfZGljdCwgX19weXhfbl9zX29ic2VydmVfcHJvcGVydHksIF9fcHl4X3RfNykgPCAwKSBf X1BZWF9FUlIoMCwgNzQ5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzcpOyBfX3B5eF90XzcgPSAwOworLSAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3NzAKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxNDEKKysgKiAgICAgaW5mbyA9IE1QVl9MT0dfTEVWRUxfSU5G TworKyAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WCisrICogICAgIGRlYnVnID0gTVBWX0xPR19M RVZFTF9ERUJVRyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHRyYWNlID0g TVBWX0xPR19MRVZFTF9UUkFDRQorICAqIAorLSAqICAgICBAX2Vycm9ycyAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgIGRlZiB1bm9ic2VydmVfcHJvcGVydHkoc2VsZiwgZGF0 YSk6CistICogICAgICAgICAiIiJXcmFwczogbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSIiIgorICAq LworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJv cnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA3NzAsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xl dmVsKE1QVl9MT0dfTEVWRUxfREVCVUcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCAxNDEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7 CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZGVidWcs IF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTQxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjc3MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjE0MgorKyAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WCisrICogICAgIGRlYnVnID0g TVBWX0xPR19MRVZFTF9ERUJVRworKyAqICAgICB0cmFjZSA9IE1QVl9MT0dfTEVWRUxfVFJBQ0Ug ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorICAqIAorLSAqICAgICBAX2Vycm9y cworLSAqICAgICBkZWYgdW5vYnNlcnZlX3Byb3BlcnR5KHNlbGYsIGRhdGEpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFwczogbXB2X3Vub2JzZXJ2ZV9w cm9wZXJ0eSIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqLworLSAgX19QeXhf R2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3Vub2JzZXJ2ZV9wcm9wZXJ0eSk7IGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc3MSwgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gIF9fcHl4X3RfMSA9IE5VTEw7CistICBp ZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfNikpKSB7CistICAgIF9fcHl4X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7 CistICAgIGlmIChsaWtlbHkoX19weXhfdF8xKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlv biA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzYpOworLSAgICAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzEpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAgX19w eXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82 LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfNiwgX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYg KHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNzcwLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfbG9nX2xldmVsKE1QVl9MT0dfTEVWRUxfVFJBQ0UpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF83LCBfX3B5eF9uX3NfdHJhY2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTQyLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OworLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfdW5vYnNlcnZlX3Byb3Bl cnR5LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDc3MSwgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gIFB5VHlwZV9Nb2Rp ZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTM4CisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTM0CisgICogCistICogY2RlZiBjbGFzcyBSZW5kZXJDb250ZXh0 KG9iamVjdCk6CistICogICAgIEFQSV9PUEVOR0wgPSAib3BlbmdsIiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgIFVQREFURV9GUkFNRSA9IE1QVl9SRU5ERVJfVVBEQVRFX0ZS QU1FCisgICogCisrICogY2xhc3MgTG9nTGV2ZWxzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgIG5vID0gTVBWX0xPR19MRVZFTF9OT05FCisrICogICAgIGZhdGFsID0gTVBW X0xPR19MRVZFTF9GQVRBTAorICAqLworLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAq KV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0 LCBfX3B5eF9uX3NfQVBJX09QRU5HTCwgX19weXhfbl9zX29wZW5nbCkgPCAwKSBfX1BZWF9FUlIo MCwgOTM4LCBfX3B5eF9MMV9lcnJvcikKKy0gIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCk7CisrICBfX3B5eF90XzYgPSBfX1B5 eF9QeTNDbGFzc0NyZWF0ZSgoKFB5T2JqZWN0KikmX19QeXhfRGVmYXVsdENsYXNzVHlwZSksIF9f cHl4X25fc19Mb2dMZXZlbHMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90XzcsIE5VTEwsIDAs IDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzQsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfZCwgX19weXhfbl9zX0xvZ0xldmVscywgX19weXhfdF82KSA8IDApIF9fUFlYX0VS UigwLCAxMzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9f cHl4X3RfNiA9IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzkKKy0gKiBjZGVmIGNs YXNzIFJlbmRlckNvbnRleHQob2JqZWN0KToKKy0gKiAgICAgQVBJX09QRU5HTCA9ICJvcGVuZ2wi CistICogICAgIFVQREFURV9GUkFNRSA9IE1QVl9SRU5ERVJfVVBEQVRFX0ZSQU1FICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxNDUKKysgKiAKKysgKiAKKysgKiBjbGFzcyBFT0ZSZWFzb25zOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICIiIktub3duIHBvc3NpYmxlIHZhbHVlcyBmb3IgRW5kT2ZG aWxlUmVhY2hlZCByZWFzb24uCisgICogCistICogICAgIGNkZWY6CisgICovCistICBfX3B5eF90 XzcgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9yZW5kZXJfdXBkYXRlX2ZsYWcoTVBWX1JF TkRFUl9VUERBVEVfRlJBTUUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigw LCA5MzksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF83ID0gX19QeXhfUHkzTWV0YWNsYXNz UHJlcGFyZSgoUHlPYmplY3QgKikgTlVMTCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X25fc19F T0ZSZWFzb25zLCBfX3B5eF9uX3NfRU9GUmVhc29ucywgKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4 X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2twX3NfS25vd25fcG9zc2libGVfdmFsdWVz X2Zvcl9FbmRPZkYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxNDUs IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICBpZiAoUHlE aWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X1JlbmRlckNvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19VUERBVEVfRlJBTUUsIF9fcHl4X3Rf NykgPCAwKSBfX1BZWF9FUlIoMCwgOTM5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KTsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDA5CistICogICAgICAgICBzZWxmLmluaXRlZCA9 IFRydWUKKy0gKiAKKy0gKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICBkZWYgc2V0X2ljY19wcm9maWxlKHNlbGYsIGljY19ibG9iKToKKy0gKiAgICAg ICAgIGNkZWY6CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTUwCisrICog ICAgIFlvdSBzaG91bGQgaGFuZGxlIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSByZWFzb24gbWF5 IG5vdCBiZSBhbnkgb2YgdGhlc2UgdmFsdWVzLgorKyAqICAgICAiIiIKKysgKiAgICAgZW9mID0g TVBWX0VORF9GSUxFX1JFQVNPTl9FT0YgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICBhYm9ydGVkID0gTVBWX0VORF9GSUxFX1JFQVNPTl9TVE9QCisrICogICAgIHF1aXQgPSBN UFZfRU5EX0ZJTEVfUkVBU09OX1FVSVQKKysgKi8KKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50 X0Zyb21fZW51bV9fbXB2X2VuZF9maWxlX3JlYXNvbihNUFZfRU5EX0ZJTEVfUkVBU09OX0VPRik7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE1MCwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5D bGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19lb2YsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIo MCwgMTUwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5 eF90XzYgPSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE1MQor KyAqICAgICAiIiIKKysgKiAgICAgZW9mID0gTVBWX0VORF9GSUxFX1JFQVNPTl9FT0YKKysgKiAg ICAgYWJvcnRlZCA9IE1QVl9FTkRfRklMRV9SRUFTT05fU1RPUCAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgIHF1aXQgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX1FVSVQKKysgKiAg ICAgZXJyb3IgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX0VSUk9SCisgICovCistICBfX1B5eF9HZXRN b2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEwMDksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5kX2ZpbGVfcmVhc29uKE1QVl9F TkRfRklMRV9SRUFTT05fU1RPUCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDE1MSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysg IGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19hYm9ydGVkLCBf X3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE1MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDEwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTUyCisrICogICAgIGVvZiA9IE1QVl9FTkRfRklMRV9SRUFTT05fRU9GCisrICogICAg IGFib3J0ZWQgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX1NUT1AKKysgKiAgICAgcXVpdCA9IE1QVl9F TkRfRklMRV9SRUFTT05fUVVJVCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg IGVycm9yID0gTVBWX0VORF9GSUxFX1JFQVNPTl9FUlJPUgorICAqIAorLSAqICAgICBAX2Vycm9y cworLSAqICAgICBkZWYgc2V0X2ljY19wcm9maWxlKHNlbGYsIGljY19ibG9iKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZjoKKy0gKiAgICAgICAgICAgICBt cHZfcmVuZGVyX3BhcmFtIHBhcmFtCisgICovCistICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5 eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJDb250ZXh0LCBfX3B5eF9uX3Nfc2V0X2ljY19wcm9maWxlKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAxMCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RS RUYoX19weXhfdF80KTsKKy0gIF9fcHl4X3RfMSA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFD S19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CistICAg IF9fcHl4X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CistICAgIGlmIChsaWtl bHkoX19weXhfdF8xKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dF VF9GVU5DVElPTihfX3B5eF90XzYpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOwor LSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChf X3B5eF90XzYsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAgX19weXhfdF83ID0gKF9fcHl4 X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9f cHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80 KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMCwgMTAwOSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RS RUYoX19weXhfdF83KTsKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2 X2VuZF9maWxlX3JlYXNvbihNUFZfRU5EX0ZJTEVfUkVBU09OX1FVSVQpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf R09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83 LCBfX3B5eF9uX3NfcXVpdCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxNTIsIF9fcHl4 X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cist ICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X1JlbmRlckNvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19zZXRfaWNjX3Byb2Zp bGUsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgMTAxMCwgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gIFB5VHlwZV9Nb2Rp ZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCk7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyOAorLSAqICAgICAgICAg cmV0dXJuIGVycgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE1MworKyAq ICAgICBhYm9ydGVkID0gTVBWX0VORF9GSUxFX1JFQVNPTl9TVE9QCisrICogICAgIHF1aXQgPSBN UFZfRU5EX0ZJTEVfUkVBU09OX1FVSVQKKysgKiAgICAgZXJyb3IgPSBNUFZfRU5EX0ZJTEVfUkVB U09OX0VSUk9SICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKyAgKiAKKy0gKiAg ICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBkZWYgc2V0 X2FtYmllbnRfbGlnaHQoc2VsZiwgbHV4KToKKy0gKiAgICAgICAgIGNkZWY6CisgICovCistICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEwMjgsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5kX2ZpbGVfcmVh c29uKE1QVl9FTkRfRklMRV9SRUFTT05fRVJST1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCAxNTMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNik7CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nf ZXJyb3IsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTUzLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxNDUKKysgKiAKKysgKiAKKysgKiBjbGFzcyBFT0ZSZWFzb25zOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICIiIktub3duIHBvc3NpYmxlIHZhbHVl cyBmb3IgRW5kT2ZGaWxlUmVhY2hlZCByZWFzb24uCisgICogCistICogICAgIEBfZXJyb3JzCist ICogICAgIGRlZiBzZXRfYW1iaWVudF9saWdodChzZWxmLCBsdXgpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmOgorLSAqICAgICAgICAgICAgIG1wdl9yZW5k ZXJfcGFyYW0gcGFyYW0KKyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwg KFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRl eHQsIF9fcHl4X25fc19zZXRfYW1iaWVudF9saWdodCk7IGlmICh1bmxpa2VseSghX19weXhfdF80 KSkgX19QWVhfRVJSKDAsIDEwMjksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfNCk7CistICBfX3B5eF90XzEgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgeworLSAgICBfX3B5 eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOworLSAgICBpZiAobGlrZWx5KF9f cHl4X3RfMSkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVO Q1RJT04oX19weXhfdF82KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKy0gICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhf dF82LCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfNyA9IChfX3B5eF90XzEp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90 XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX1B5eF9ERUNS RUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83 KSkgX19QWVhfRVJSKDAsIDEwMjgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfNyk7CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZSgoKFB5T2JqZWN0 KikmX19QeXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19FT0ZSZWFzb25zLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfdF83LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzYpKSBfX1BZWF9FUlIoMCwgMTQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzYpOworKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19FT0ZS ZWFzb25zLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE0NSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURp Y3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3NldF9hbWJpZW50X2xpZ2h0LCBfX3B5 eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDEwMjksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICBQeVR5cGVfTW9kaWZpZWQoX19w eXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQpOworIAorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjgKKy0gKiAgICAgICAgIHJldHVybiBy ZXQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTgKKyAgKiAKKy0gKiAg ICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBkZWYgcmVu ZGVyKHNlbGYsCistICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLAorLSAqLworLSAg X19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDY4LCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLQorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwNjkKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMKKy0gKiAgICAgZGVm IHJlbmRlcihzZWxmLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAg ICAgICAgb3BlbmdsX2Zibz1Ob25lLAorLSAqICAgICAgICAgICAgICAgIGZsaXBfeT1GYWxzZSwK KysgKiBkZWYgX2Vycm9ycyhmbik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgorKyAqICAgICAgICAgdiA9IGZuKCprLCAqKmt3KQor ICAqLworLSAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5 eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgX19weXhfbl9zX3Jl bmRlcik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwNjksIF9fcHl4 X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBfX3B5eF90XzEgPSBO VUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9D aGVjayhfX3B5eF90XzYpKSkgeworLSAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzYpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsKKy0gICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKKy0gICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwor LSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7CistICAgIH0KKy0g IH0KKy0gIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdz KF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEwNjgsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25fTmV3RXgoJl9fcHl4X21kZWZf OXZpZGN1dHRlcl80bGlic18zbXB2XzVfZXJyb3JzLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVy X2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMzE4LCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CistICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5 T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQt PnRwX2RpY3QsIF9fcHl4X25fc19yZW5kZXIsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwg MTA2OSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19w eXhfbl9zX2Vycm9ycywgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCAzMTgsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICBQ eVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNv bnRleHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzIKKy0g KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXJhbXMsICphcmdzLCAqKmt3 YXJncykKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjYKKysgKiAKKysg KiAKKysgKiBjbGFzcyBNUFZFcnJvcihFeGNlcHRpb24pOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgIGNvZGUgPSBOb25lCisgICogCistICogY2xhc3MgQ2FsbGJhY2tUaHJl YWQoVGhyZWFkKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBkZWYgX19p bml0X18oc2VsZik6CistICogICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKKyAgKi8KKy0g IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5eF9uX3NfVGhyZWFkKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJy b3IpCisrICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzcpKSBfX1BZWF9FUlIoMCwgMzI2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOworLSAgX19weXhfdF82ID0gUHlUdXBsZV9OZXcoMSk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExMzIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf SU5DUkVGKCgoUHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBd KSkpOworKyAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlF eGNfRXhjZXB0aW9uKVswXSkpKTsKKysgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCAo KFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0aW9uKVswXSkpKTsKKysg IF9fcHl4X3RfNiA9IF9fUHl4X0NhbGN1bGF0ZU1ldGFjbGFzcyhOVUxMLCBfX3B5eF90XzcpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAzMjYsIF9fcHl4X0wxX2Vycm9y KQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Rf Nyk7CistICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNiwgMCwgX19weXhfdF83KTsKKy0gIF9f cHl4X3RfNyA9IDA7CistICBfX3B5eF90XzcgPSBfX1B5eF9DYWxjdWxhdGVNZXRhY2xhc3MoTlVM TCwgX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMTEz MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKy0gIF9fcHl4 X3RfNCA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoX19weXhfdF83LCBfX3B5eF90XzYsIF9f cHl4X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkLCAoUHlPYmpl Y3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0ICopIE5V TEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMTMyLCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoX19weXhf dF82LCBfX3B5eF90XzcsIF9fcHl4X25fc19NUFZFcnJvciwgX19weXhfbl9zX01QVkVycm9yLCAo UHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0 ICopIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzMjYsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMworKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjMyNworICAqIAorLSAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6 CistICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCistICogICAgICAgICBzZWxmLmRh ZW1vbiA9IFRydWUKKysgKiBjbGFzcyBNUFZFcnJvcihFeGNlcHRpb24pOgorKyAqICAgICBjb2Rl ID0gTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiBf X2luaXRfXyhzZWxmLCBlKToKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25f TmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzFf X2luaXRfXywgMCwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX19faW5pdCwgTlVMTCwgX19weXhf bl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVv YmpfXzM4KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMzMsIF9f cHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3NfaW5pdCwgX19weXhfdF8xKSA8IDAp IF9fUFlYX0VSUigwLCAxMTMzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNCwgX19weXhfbl9zX2NvZGUsIFB5X05vbmUpIDwgMCkgX19QWVhfRVJSKDAsIDMyNywgX19w eXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0 MQorLSAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gRmFsc2UKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjozMjkKKysgKiAgICAgY29kZSA9IE5vbmUKKyAgKiAKKy0gKiAg ICAgZGVmIHNodXRkb3duKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVlCistICogICAgICAgICBzZWxmLmNhbGxiYWNr ID0gTm9uZQorKyAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuY29kZSA9IGUKKysgKiAgICAgICAgIGNkZWYg Y29uc3QgY2hhciogZXJyX2MKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25f TmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzNz aHV0ZG93biwgMCwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX3NodXRkb3duLCBOVUxMLCBfX3B5 eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29k ZW9ial9fNDApKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE0MSwg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19w eXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yXzFfX2luaXRfXywgMCwgX19w eXhfbl9zX01QVkVycm9yX19faW5pdCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21w diwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzI2KSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90 XzQsIF9fcHl4X25fc19zaHV0ZG93biwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTQx LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQs IF9fcHl4X25fc19pbml0LCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDMyOSwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ2CistICogICAgICAgICBz ZWxmLmxvY2sucmVsZWFzZSgpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzI2CisgICogCistICogICAgIGRlZiBjYWxsKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisrICogCisrICogY2xhc3Mg TVBWRXJyb3IoRXhjZXB0aW9uKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICBjb2RlID0gTm9uZQorICAqIAorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfQ3lGdW5jdGlv bl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRf NWNhbGwsIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9jYWxsLCBOVUxMLCBfX3B5eF9uX3Nf dmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9f NDIpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE0NiwgX19weXhf TDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZShfX3B5eF90XzYs IF9fcHl4X25fc19NUFZFcnJvciwgX19weXhfdF83LCBfX3B5eF90XzQsIE5VTEwsIDAsIDEpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMjYsIF9fcHl4X0wxX2Vycm9y KQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xh c3MoX19weXhfdF80LCBfX3B5eF9uX3NfY2FsbCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigw LCAxMTQ2LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBf X3B5eF9uX3NfTVBWRXJyb3IsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMzI2LCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwor KyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBfX1B5eF9ERUNS RUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90Xzcp OyBfX3B5eF90XzcgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExNDkKKy0gKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjozNDAKKysgKiAgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhz ZWxmLCBlKQorICAqIAorLSAqICAgICBkZWYgc2V0KHNlbGYsIGNhbGxiYWNrKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNr CisrICogY2xhc3MgUHlNUFZFcnJvcihFeGNlcHRpb24pOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgIHBhc3MKKyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0N5 RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNr VGhyZWFkXzdzZXQsIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9zZXQsIE5VTEwsIF9fcHl4 X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rl b2JqX180NCkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTQ5LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNyA9IFB5VHVwbGVfTmV3KDEpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAzNDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKSgmKChQ eVR5cGVPYmplY3QqKVB5RXhjX0V4Y2VwdGlvbilbMF0pKSk7CisrICBfX1B5eF9HSVZFUkVGKCgo UHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOworKyAg UHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDAsICgoUHlPYmplY3QgKikoJigoUHlUeXBlT2Jq ZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOworKyAgX19weXhfdF82ID0gX19QeXhfQ2FsY3Vs YXRlTWV0YWNsYXNzKE5VTEwsIF9fcHl4X3RfNyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoX19weXhfdF82 LCBfX3B5eF90XzcsIF9fcHl4X25fc19QeU1QVkVycm9yLCBfX3B5eF9uX3NfUHlNUFZFcnJvciwg KFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIChQeU9iamVj dCAqKSBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzQwLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgX19weXhfdF8x ID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUoX19weXhfdF82LCBfX3B5eF9uX3NfUHlNUFZFcnJvciwg X19weXhfdF83LCBfX3B5eF90XzQsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAzNDAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9u X3Nfc2V0LCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9y KQorKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19QeU1QVkVycm9yLCBf X3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4 X3RfNiA9IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTUyCistICogICAgICAgICBz ZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozNDMKKysgKiAgICAgcGFzcworICAqIAorLSAqICAgICBkZWYgcnVuKHNlbGYpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3No dXRkb3duOgorLSAqICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCisrICogY2Rl ZiBfY2FsbGJhY2tzID0gZGljdCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiBj ZGVmIF9yZXBseV91c2VyZGF0YXMgPSBkaWN0KCkKKysgKiAKKysgKi8KKysgIF9fcHl4X3RfNyA9 IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBf X1BZWF9FUlIoMCwgMzQzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzcpOworKyAgX19QeXhfWEdPVFJFRihfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY2Fs bGJhY2tzKTsKKysgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX2NhbGxiYWNrcywgX19weXhfdF83KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdF83KTsK KysgIF9fcHl4X3RfNyA9IDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzQ0CisrICogCisrICogY2RlZiBfY2FsbGJhY2tzID0gZGljdCgpCisrICogY2RlZiBfcmVw bHlfdXNlcmRhdGFzID0gZGljdCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAK KysgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOgorKyAqLworKyAgX19weXhfdF83ID0g X19QeXhfUHlEaWN0X05ld1ByZXNpemVkKDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9f UFlYX0VSUigwLCAzNDQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nyk7CisrICBfX1B5eF9YR09UUkVGKF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19yZXBs eV91c2VyZGF0YXMpOworKyAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF90XzcpOworKyAgX19QeXhfR0lWRVJFRihf X3B5eF90XzcpOworKyAgX19weXhfdF83ID0gMDsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozNDYKKysgKiBjZGVmIF9yZXBseV91c2VyZGF0YXMgPSBkaWN0KCkKKysg KiAKKysgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKKysgKiAgICAgICAg IHNlbGYuY291bnRlciA9IDAKKysgKi8KKysgIF9fcHl4X3RfNyA9IF9fUHl4X0NhbGN1bGF0ZU1l dGFjbGFzcyhOVUxMLCBfX3B5eF90dXBsZV9fMjcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykp IF9fUFlYX0VSUigwLCAzNDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNyk7CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeTNNZXRhY2xhc3NQcmVwYXJlKF9fcHl4X3Rf NywgX19weXhfdHVwbGVfXzI3LCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSwgX19weXhfbl9zX1Jl cGx5VXNlckRhdGEsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNf bXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDM0NiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK KysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDcKKysgKiAKKysgKiBj bGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOgorKyAqICAgICBkZWYgX19pbml0X18oc2VsZiwg ZGF0YSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuY291 bnRlciA9IDAKKysgKiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKyAgKi8KKy0gIF9fcHl4X3Rf MSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xNENhbGxiYWNrVGhyZWFkXzlydW4sIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9ydW4s IE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3Qg KilfX3B5eF9jb2Rlb2JqX180NikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAxMTUyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX3J1biwgX19w eXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTUyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19weXhfdF80ID0gX19QeXhf Q3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5 VXNlckRhdGFfMV9faW5pdF9fLCAwLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YV9fX2luaXQsIE5V TEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilf X3B5eF9jb2Rlb2JqX18yOSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigw LCAzNDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF82LCBfX3B5eF9uX3NfaW5pdCwgX19weXhf dF80KSA8IDApIF9fUFlYX0VSUigwLCAzNDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTE1NworLSAqICAgICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNrKHNl bGYuY2FsbGJhY2spIGlmIHNlbGYuY2FsbGJhY2sgZWxzZSBOb25lCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzUyCisrICogICAgICAgICBzZWxmLm9ic2VydmVkID0gRmFs c2UKKysgKiAKKysgKiAgICAgZGVmIGFkZChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgc2VsZi5jb3VudGVyICs9IDEKKyAgKiAKKy0gKiAgICAgZGVmIG1w dl9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgIHRyeToKKy0gKiAgICAgICAgICAgICBjYWxsYmFjaygpCisgICovCistICBf X3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8xMW1wdl9jYWxsYmFjaywgMCwgX19weXhfbl9zX0Nh bGxiYWNrVGhyZWFkX21wdl9jYWxsYmFjaywgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJz X21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzQ4KSk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNTcsIF9fcHl4X0wxX2Vycm9yKQorLSAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19w eXhfdF80LCBfX3B5eF9uX3NfbXB2X2NhbGxiYWNrLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJS KDAsIDExNTcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7CisrICBfX3B5eF90XzQgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhf bWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV8zYWRkLCAwLCBfX3B5 eF9uX3NfUmVwbHlVc2VyRGF0YV9hZGQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19t cHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18zMSkpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF82LCBfX3B5eF9uX3NfYWRkLCBfX3B5eF90XzQpIDwgMCkgX19QWVhfRVJSKDAsIDM1MiwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTMyCistICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfcGFyYW1zLCAqYXJncywgKiprd2FyZ3MpCisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzU1CisrICogICAgICAgICBzZWxm LmNvdW50ZXIgKz0gMQorKyAqIAorKyAqICAgICBkZWYgcmVtb3ZlKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmNvdW50ZXIgLT0gMQorICAqIAor LSAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorLSAqICAgICAgICAgVGhyZWFkLl9f aW5pdF9fKHNlbGYpCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZShf X3B5eF90XzcsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfdF82LCBfX3B5eF90XzQs IE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTMy LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgaWYgKFB5 RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfdF8x KSA8IDApIF9fUFlYX0VSUigwLCAxMTMyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19weXhfdF80ID0gX19QeXhfQ3lGdW5j dGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRh dGFfNXJlbW92ZSwgMCwgX19weXhfbl9zX1JlcGx5VXNlckRhdGFfcmVtb3ZlLCBOVUxMLCBfX3B5 eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29k ZW9ial9fMzMpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzU1LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNiwgX19weXhfbl9zX3JlbW92ZSwgX19weXhfdF80KSA8 IDApIF9fUFlYX0VSUigwLCAzNTUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9f cHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19w eXhfdF83ID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwor IAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MQorLSAqIGRlZiBfX3B5eF91bnBpY2tsZV9FbmRP ZkZpbGVSZWFjaGVkKF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRl KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5 eF9QaWNrbGVFcnJvcgorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDYKKysgKiBjZGVmIF9yZXBseV91c2VyZGF0 YXMgPSBkaWN0KCkKKysgKiAKKysgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRh KToKKysgKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IFB5 Q0Z1bmN0aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X19weXhf dW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJz X21wdik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wx X2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfZCwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkLCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF80 ID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUoX19weXhfdF83LCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0 YSwgX19weXhfdHVwbGVfXzI3LCBfX3B5eF90XzYsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf R09UUkVGKF9fcHl4X3RfNCk7CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhf bl9zX1JlcGx5VXNlckRhdGEsIF9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwor ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICBfX1B5eF9ERUNS RUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCki OjExCistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3Rh dGUoPEVuZE9mRmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCistICogICAg IHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJl YWNoZWRfX3NldF9zdGF0ZShFbmRPZkZpbGVSZWFjaGVkIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19w eXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIF9fcHl4X3Jl c3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQucmVhc29uID0gX19weXhf c3RhdGVbMV0KKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19w eXhfcmVzdWx0LCAnX19kaWN0X18nKToKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0MTEKKysgKiAgICAgIyAgICAgICAgIG1wdl9yZXN1bWUoc2VsZi5fY3R4KQorKyAqIAor KyAqICAgICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGRl ZiByZXF1ZXN0X2V2ZW50KHNlbGYsIGV2ZW50LCBlbmFibGUpOgorKyAqICAgICAgICAgIiIiRW5h YmxlIG9yIGRpc2FibGUgYSBnaXZlbiBldmVudC4KKyAgKi8KKy0gIF9fcHl4X3RfNiA9IFB5Q0Z1 bmN0aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl85X19weXhfdW5w aWNrbGVfSW5wdXREaXNwYXRjaCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJv cnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0MTEsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfZCwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox CistICogZGVmIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UoX19weXhfdHlwZSwgbG9uZyBfX3B5 eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0 IF9fcHl4X3Jlc3VsdAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQxMgor KyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgcmVxdWVzdF9ldmVudChzZWxmLCBl dmVudCwgZW5hYmxlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg IiIiRW5hYmxlIG9yIGRpc2FibGUgYSBnaXZlbiBldmVudC4KKysgKiAKKyAgKi8KKy0gIF9fcHl4 X3RfNiA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMV9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJf bGlic19tcHYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxLCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKFB5RGljdF9T ZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgX19weXhf dF82KSA8IDApIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE5h bWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19yZXF1ZXN0X2V2ZW50KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzQpOworKyAgX19weXhfdF8xID0gTlVMTDsKKysgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsK KysgICAgX19weXhfdF8xID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82KTsKKysgICAgaWYg KGxpa2VseShfX3B5eF90XzEpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Rf MSk7CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOworKyAgICB9CisrICB9CisrICBfX3B5eF90XzcgPSAo X19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3Rf MSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5 eF90XzQpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAg X19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBpZiAodW5saWtlbHko IV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA0MTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf R09UUkVGKF9fcHl4X3RfNyk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKysgIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3JlcXVlc3RfZXZl bnQsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgUHlUeXBlX01vZGlm aWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKyAKKy0gIC8q ICIodHJlZSBmcmFnbWVudCkiOjExCistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNz YWdlX19zZXRfc3RhdGUoPExvZ01lc3NhZ2U+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCist ICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0xvZ01l c3NhZ2VfX3NldF9zdGF0ZShMb2dNZXNzYWdlIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3Rh dGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIF9fcHl4X3Jlc3VsdC5s ZXZlbCA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubG9nX2xldmVsID0gX19weXhfc3Rh dGVbMV07IF9fcHl4X3Jlc3VsdC5wcmVmaXggPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0 LnRleHQgPSBfX3B5eF9zdGF0ZVszXQorLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBh bmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQyOQorKyAqICAgICAgICAgcmV0dXJuIGVycgorKyAqIAorKyAq ICAgICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGRlZiBz ZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xldmVsKToKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZf cmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IFB5Q0Z1bmN0aW9u X05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19fcHl4X3VucGlja2xl X1Byb3BlcnR5LCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5 eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQyOSwgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9k LCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX1Byb3BlcnR5LCBfX3B5eF90XzYpIDwgMCkgX19QWVhf RVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9f cHl4X3RfNiA9IDA7CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcHl4 X3VucGlja2xlX0V2ZW50KF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0 YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBjZGVmIG9iamVjdCBf X3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzAKKysgKiAKKysgKiAgICAgQF9lcnJv cnMKKysgKiAgICAgZGVmIHNldF9sb2dfbGV2ZWwoc2VsZiwgbG9nbGV2ZWwpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJXcmFwczogbXB2X3JlcXVlc3RfbG9n X21lc3NhZ2VzIiIiCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICovCistICBfX3B5 eF90XzYgPSBQeUNGdW5jdGlvbl9OZXdFeCgmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTVfX3B5eF91bnBpY2tsZV9FdmVudCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJz X21wdik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wx X2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfZCwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9FdmVudCwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE5hbWVJbkNsYXNz KF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQsIF9fcHl4X25fc19zZXRfbG9nX2xldmVsKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzQpKSBfX1BZWF9FUlIoMCwgNDMwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOworKyAgX19weXhfdF8xID0gTlVMTDsKKysgIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsKKysgICAgX19w eXhfdF8xID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82KTsKKysgICAgaWYgKGxpa2VseShf X3B5eF90XzEpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZV TkNUSU9OKF9fcHl4X3RfNik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7CisrICAg ICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4 X3RfNiwgZnVuY3Rpb24pOworKyAgICB9CisrICB9CisrICBfX3B5eF90XzcgPSAoX19weXhfdF8x KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhf dF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQpOwor KyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19QeXhfREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NykpIF9fUFlYX0VSUigwLCA0MjksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9f cHl4X3RfNyk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysg IGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3NldF9sb2dfbGV2ZWwsIF9fcHl4 X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNDMwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgUHlUeXBlX01vZGlmaWVkKF9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKyAKKy0gIC8qICIodHJlZSBm cmFnbWVudCkiOjExCistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRl KDxFdmVudD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4 X3Jlc3VsdAorLSAqIGNkZWYgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShFdmVudCBf X3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9y ZXN1bHQuZXJyb3IgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LmlkID0gX19weXhfc3Rh dGVbMl07IF9fcHl4X3Jlc3VsdC5yZXBseV91c2VyZGF0YSA9IF9fcHl4X3N0YXRlWzNdCistICog ICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19f ZGljdF9fJyk6CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQwCisrICog ICAgICAgICByZXR1cm4gZXJyCisrICogCisrICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZGVmIGxvYWRfY29uZmlnKHNlbGYsIGZpbGVuYW1lKToK KysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfbG9hZF9jb25maWdfZmlsZSIiIgorICAqLworLSAg X19weXhfdF82ID0gUHlDRnVuY3Rpb25fTmV3RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGli c18zbXB2XzE3X19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCBOVUxMLCBfX3B5eF9uX3Nf dmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MSwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4 X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDQ0MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK Ky0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX1Jl bmRlckZyYW1lSW5mbywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEKKy0gKiAjIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICogIyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0MQorKyAqIAorKyAq ICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgbG9hZF9jb25maWcoc2VsZiwgZmlsZW5hbWUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJXcmFwczogbXB2X2xv YWRfY29uZmlnX2ZpbGUiIiIKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKi8KKy0g IF9fcHl4X3RfNiA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RS RUYoX19weXhfdF82KTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3Nf dGVzdCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLQorLSAgLyotLS0gV3Jh cHBlZCB2YXJzIGNvZGUgLS0tKi8KKy0KKy0gIGdvdG8gX19weXhfTDA7CistICBfX3B5eF9MMV9l cnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfNik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CistICBpZiAoX19weXhf bSkgeworLSAgICBpZiAoX19weXhfZCkgeworLSAgICAgIF9fUHl4X0FkZFRyYWNlYmFjaygiaW5p dCB2aWRjdXR0ZXIubGlicy5tcHYiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lKTsKKy0gICAgfQorLSAgICBQeV9DTEVBUihfX3B5eF9tKTsKKy0gIH0gZWxzZSBp ZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKKy0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9y dEVycm9yLCAiaW5pdCB2aWRjdXR0ZXIubGlicy5tcHYiKTsKKy0gIH0KKy0gIF9fcHl4X0wwOjsK Ky0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgI2lmIENZVEhPTl9QRVA0ODlf TVVMVElfUEhBU0VfSU5JVAorLSAgcmV0dXJuIChfX3B5eF9tICE9IE5VTEwpID8gMCA6IC0xOwor LSAgI2VsaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICByZXR1cm4gX19weXhfbTsKKy0gICNl bHNlCistICByZXR1cm47CistICAjZW5kaWYKKy19CistCistLyogLS0tIFJ1bnRpbWUgc3VwcG9y dCBjb2RlIC0tLSAqLworLS8qIFJlZm5hbm55ICovCistI2lmIENZVEhPTl9SRUZOQU5OWQorLXN0 YXRpYyBfX1B5eF9SZWZOYW5ueUFQSVN0cnVjdCAqX19QeXhfUmVmTmFubnlJbXBvcnRBUEkoY29u c3QgY2hhciAqbW9kbmFtZSkgeworLSAgICBQeU9iamVjdCAqbSA9IE5VTEwsICpwID0gTlVMTDsK Ky0gICAgdm9pZCAqciA9IE5VTEw7CistICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUobW9k bmFtZSk7CistICAgIGlmICghbSkgZ290byBlbmQ7CistICAgIHAgPSBQeU9iamVjdF9HZXRBdHRy U3RyaW5nKG0sICJSZWZOYW5ueUFQSSIpOworLSAgICBpZiAoIXApIGdvdG8gZW5kOworLSAgICBy ID0gUHlMb25nX0FzVm9pZFB0cihwKTsKKy1lbmQ6CistICAgIFB5X1hERUNSRUYocCk7CistICAg IFB5X1hERUNSRUYobSk7CistICAgIHJldHVybiAoX19QeXhfUmVmTmFubnlBUElTdHJ1Y3QgKily OworLX0KKy0jZW5kaWYKKy0KKy0vKiBQeU9iamVjdEdldEF0dHJTdHIgKi8KKy0jaWYgQ1lUSE9O X1VTRV9UWVBFX1NMT1RTCistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5 T2JqZWN0X0dldEF0dHJTdHIoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqIGF0dHJfbmFtZSkgewor LSAgICBQeVR5cGVPYmplY3QqIHRwID0gUHlfVFlQRShvYmopOworLSAgICBpZiAobGlrZWx5KHRw LT50cF9nZXRhdHRybykpCistICAgICAgICByZXR1cm4gdHAtPnRwX2dldGF0dHJvKG9iaiwgYXR0 cl9uYW1lKTsKKy0jaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKy0gICAgaWYgKGxpa2VseSh0cC0+ dHBfZ2V0YXR0cikpCistICAgICAgICByZXR1cm4gdHAtPnRwX2dldGF0dHIob2JqLCBQeVN0cmlu Z19BU19TVFJJTkcoYXR0cl9uYW1lKSk7CistI2VuZGlmCistICAgIHJldHVybiBQeU9iamVjdF9H ZXRBdHRyKG9iaiwgYXR0cl9uYW1lKTsKKy19CistI2VuZGlmCistCistLyogR2V0QnVpbHRpbk5h bWUgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fUHl4X0dldEJ1aWx0aW5OYW1lKFB5T2JqZWN0ICpu YW1lKSB7CistICAgIFB5T2JqZWN0KiByZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KF9fcHl4X2IsIG5hbWUpOworLSAgICBpZiAodW5saWtlbHkoIXJlc3VsdCkpIHsKKy0gICAgICAg IFB5RXJyX0Zvcm1hdChQeUV4Y19OYW1lRXJyb3IsCistI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0g MworLSAgICAgICAgICAgICJuYW1lICclVScgaXMgbm90IGRlZmluZWQiLCBuYW1lKTsKKy0jZWxz ZQorLSAgICAgICAgICAgICJuYW1lICclLjIwMHMnIGlzIG5vdCBkZWZpbmVkIiwgUHlTdHJpbmdf QVNfU1RSSU5HKG5hbWUpKTsKKy0jZW5kaWYKKysgIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQsIF9fcHl4X25fc19sb2FkX2NvbmZpZyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDAsIDQ0MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKysgIF9fcHl4X3RfMSA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CisrICAgIF9fcHl4X3RfMSA9 IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CisrICAgIGlmIChsaWtlbHkoX19weXhfdF8x KSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihf X3B5eF90XzYpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAgICAgIF9fUHl4 X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1 bmN0aW9uKTsKKyAgICAgfQorLSAgICByZXR1cm4gcmVzdWx0OworLX0KKysgIH0KKysgIF9fcHl4 X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwg X19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90 XzYsIF9fcHl4X3RfNCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9 IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgIGlmICh1 bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ0MCwgX19weXhfTDFfZXJyb3IpCisr ICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBf X3B5eF90XzYgPSAwOworKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfbG9h ZF9jb25maWcsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNDQxLCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgUHlUeXBl X01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKyAK Ky0vKiBQeURpY3RWZXJzaW9uaW5nICovCistI2lmIENZVEhPTl9VU0VfRElDVF9WRVJTSU9OUyAm JiBDWVRIT05fVVNFX1RZUEVfU0xPVFMKKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQWV9VSU5UNjRf VCBfX1B5eF9nZXRfdHBfZGljdF92ZXJzaW9uKFB5T2JqZWN0ICpvYmopIHsKKy0gICAgUHlPYmpl Y3QgKmRpY3QgPSBQeV9UWVBFKG9iaiktPnRwX2RpY3Q7CistICAgIHJldHVybiBsaWtlbHkoZGlj dCkgPyBfX1BZWF9HRVRfRElDVF9WRVJTSU9OKGRpY3QpIDogMDsKKy19Cistc3RhdGljIENZVEhP Tl9JTkxJTkUgUFlfVUlOVDY0X1QgX19QeXhfZ2V0X29iamVjdF9kaWN0X3ZlcnNpb24oUHlPYmpl Y3QgKm9iaikgeworLSAgICBQeU9iamVjdCAqKmRpY3RwdHIgPSBOVUxMOworLSAgICBQeV9zc2l6 ZV90IG9mZnNldCA9IFB5X1RZUEUob2JqKS0+dHBfZGljdG9mZnNldDsKKy0gICAgaWYgKG9mZnNl dCkgeworLSNpZiBDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRIT04KKy0gICAgICAgIGRpY3RwdHIg PSAobGlrZWx5KG9mZnNldCA+IDApKSA/IChQeU9iamVjdCAqKikgKChjaGFyICopb2JqICsgb2Zm c2V0KSA6IF9QeU9iamVjdF9HZXREaWN0UHRyKG9iaik7CistI2Vsc2UKKy0gICAgICAgIGRpY3Rw dHIgPSBfUHlPYmplY3RfR2V0RGljdFB0cihvYmopOworLSNlbmRpZgorLSAgICB9CistICAgIHJl dHVybiAoZGljdHB0ciAmJiAqZGljdHB0cikgPyBfX1BZWF9HRVRfRElDVF9WRVJTSU9OKCpkaWN0 cHRyKSA6IDA7CistfQorLXN0YXRpYyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9vYmplY3RfZGlj dF92ZXJzaW9uX21hdGNoZXMoUHlPYmplY3QqIG9iaiwgUFlfVUlOVDY0X1QgdHBfZGljdF92ZXJz aW9uLCBQWV9VSU5UNjRfVCBvYmpfZGljdF92ZXJzaW9uKSB7CistICAgIFB5T2JqZWN0ICpkaWN0 ID0gUHlfVFlQRShvYmopLT50cF9kaWN0OworLSAgICBpZiAodW5saWtlbHkoIWRpY3QpIHx8IHVu bGlrZWx5KHRwX2RpY3RfdmVyc2lvbiAhPSBfX1BZWF9HRVRfRElDVF9WRVJTSU9OKGRpY3QpKSkK Ky0gICAgICAgIHJldHVybiAwOworLSAgICByZXR1cm4gb2JqX2RpY3RfdmVyc2lvbiA9PSBfX1B5 eF9nZXRfb2JqZWN0X2RpY3RfdmVyc2lvbihvYmopOworLX0KKy0jZW5kaWYKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzMKKysgKiAgICAgICAgIHJldHVybiByZXN1bHQK KysgKiAKKysgKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICBkZWYgZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6CisrICog ICAgICAgICAiIiJHZXRzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGFzeW5jaHJvbm91c2x5Lgor KyAqLworKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19l cnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA1NzMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisgCistLyogR2V0TW9kdWxl R2xvYmFsTmFtZSAqLworLSNpZiBDWVRIT05fVVNFX0RJQ1RfVkVSU0lPTlMKKy1zdGF0aWMgUHlP YmplY3QgKl9fUHl4X19HZXRNb2R1bGVHbG9iYWxOYW1lKFB5T2JqZWN0ICpuYW1lLCBQWV9VSU5U NjRfVCAqZGljdF92ZXJzaW9uLCBQeU9iamVjdCAqKmRpY3RfY2FjaGVkX3ZhbHVlKQorLSNlbHNl Cistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QgKl9fUHl4X19HZXRNb2R1bGVHbG9iYWxO YW1lKFB5T2JqZWN0ICpuYW1lKQorLSNlbmRpZgorLXsKKy0gICAgUHlPYmplY3QgKnJlc3VsdDsK Ky0jaWYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCistI2lmIENZVEhPTl9DT01QSUxJTkdf SU5fQ1BZVEhPTiAmJiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDUwMEExCistICAgIHJlc3VsdCA9 IF9QeURpY3RfR2V0SXRlbV9Lbm93bkhhc2goX19weXhfZCwgbmFtZSwgKChQeUFTQ0lJT2JqZWN0 ICopIG5hbWUpLT5oYXNoKTsKKy0gICAgX19QWVhfVVBEQVRFX0RJQ1RfQ0FDSEUoX19weXhfZCwg cmVzdWx0LCAqZGljdF9jYWNoZWRfdmFsdWUsICpkaWN0X3ZlcnNpb24pCistICAgIGlmIChsaWtl bHkocmVzdWx0KSkgeworLSAgICAgICAgcmV0dXJuIF9fUHl4X05ld1JlZihyZXN1bHQpOworLSAg ICB9IGVsc2UgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSB7CistICAgICAgICByZXR1 cm4gTlVMTDsKKy0gICAgfQorLSNlbHNlCistICAgIHJlc3VsdCA9IFB5RGljdF9HZXRJdGVtKF9f cHl4X2QsIG5hbWUpOworLSAgICBfX1BZWF9VUERBVEVfRElDVF9DQUNIRShfX3B5eF9kLCByZXN1 bHQsICpkaWN0X2NhY2hlZF92YWx1ZSwgKmRpY3RfdmVyc2lvbikKKy0gICAgaWYgKGxpa2VseShy ZXN1bHQpKSB7CistICAgICAgICByZXR1cm4gX19QeXhfTmV3UmVmKHJlc3VsdCk7CistICAgIH0K Ky0jZW5kaWYKKy0jZWxzZQorLSAgICByZXN1bHQgPSBQeU9iamVjdF9HZXRJdGVtKF9fcHl4X2Qs IG5hbWUpOworLSAgICBfX1BZWF9VUERBVEVfRElDVF9DQUNIRShfX3B5eF9kLCByZXN1bHQsICpk aWN0X2NhY2hlZF92YWx1ZSwgKmRpY3RfdmVyc2lvbikKKy0gICAgaWYgKGxpa2VseShyZXN1bHQp KSB7CistICAgICAgICByZXR1cm4gX19QeXhfTmV3UmVmKHJlc3VsdCk7CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTc0CisrICogCisrICogICAgIEBfZXJyb3JzCisrICog ICAgIGRlZiBnZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIiR2V0cyB0aGUgdmFsdWUgb2Yg YSBwcm9wZXJ0eSBhc3luY2hyb25vdXNseS4KKysgKiAKKysgKi8KKysgIF9fUHl4X0dldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19nZXRfcHJvcGVydHlfYXN5bmMpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICBfX3B5eF90XzEgPSBOVUxMOworKyAgaWYgKENZVEhP Tl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkg eworKyAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOworKyAgICBp ZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1l dGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhf dF8xKTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JF Rl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7CisgICAgIH0KKy0gICAgUHlFcnJfQ2xlYXIoKTsK Ky0jZW5kaWYKKy0gICAgcmV0dXJuIF9fUHl4X0dldEJ1aWx0aW5OYW1lKG5hbWUpOworLX0KKysg IH0KKysgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdz KF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDU3MywgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKysgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVj dCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBf X3B5eF9uX3NfZ2V0X3Byb3BlcnR5X2FzeW5jLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAs IDU3NCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhf dF83ID0gMDsKKysgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCk7CisgCistLyogUHlGdW5jdGlvbkZhc3RDYWxsICovCistI2lmIENZVEhP Tl9GQVNUX1BZQ0FMTAorLXN0YXRpYyBQeU9iamVjdCogX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2Fs bE5vS3coUHlDb2RlT2JqZWN0ICpjbywgUHlPYmplY3QgKiphcmdzLCBQeV9zc2l6ZV90IG5hLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3Qg Kmdsb2JhbHMpIHsKKy0gICAgUHlGcmFtZU9iamVjdCAqZjsKKy0gICAgUHlUaHJlYWRTdGF0ZSAq dHN0YXRlID0gX19QeXhfUHlUaHJlYWRTdGF0ZV9DdXJyZW50OworLSAgICBQeU9iamVjdCAqKmZh c3Rsb2NhbHM7CistICAgIFB5X3NzaXplX3QgaTsKKy0gICAgUHlPYmplY3QgKnJlc3VsdDsKKy0g ICAgYXNzZXJ0KGdsb2JhbHMgIT0gTlVMTCk7CistICAgIC8qIFhYWCBQZXJoYXBzIHdlIHNob3Vs ZCBjcmVhdGUgYSBzcGVjaWFsaXplZAorLSAgICAgICBQeUZyYW1lX05ldygpIHRoYXQgZG9lc24n dCB0YWtlIGxvY2FscywgYnV0IGRvZXMKKy0gICAgICAgdGFrZSBidWlsdGlucyB3aXRob3V0IHNh bml0eSBjaGVja2luZyB0aGVtLgorLSAgICAgICAqLworLSAgICBhc3NlcnQodHN0YXRlICE9IE5V TEwpOworLSAgICBmID0gUHlGcmFtZV9OZXcodHN0YXRlLCBjbywgZ2xvYmFscywgTlVMTCk7Cist ICAgIGlmIChmID09IE5VTEwpIHsKKy0gICAgICAgIHJldHVybiBOVUxMOworLSAgICB9CistICAg IGZhc3Rsb2NhbHMgPSBfX1B5eF9QeUZyYW1lX0dldExvY2Fsc3BsdXMoZik7CistICAgIGZvciAo aSA9IDA7IGkgPCBuYTsgaSsrKSB7CistICAgICAgICBQeV9JTkNSRUYoKmFyZ3MpOworLSAgICAg ICAgZmFzdGxvY2Fsc1tpXSA9ICphcmdzKys7CistICAgIH0KKy0gICAgcmVzdWx0ID0gUHlFdmFs X0V2YWxGcmFtZUV4KGYsMCk7CistICAgICsrdHN0YXRlLT5yZWN1cnNpb25fZGVwdGg7CistICAg IFB5X0RFQ1JFRihmKTsKKy0gICAgLS10c3RhdGUtPnJlY3Vyc2lvbl9kZXB0aDsKKy0gICAgcmV0 dXJuIHJlc3VsdDsKKy19CistI2lmIDEgfHwgUFlfVkVSU0lPTl9IRVggPCAweDAzMDYwMEIxCist c3RhdGljIFB5T2JqZWN0ICpfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsRGljdChQeU9iamVjdCAq ZnVuYywgUHlPYmplY3QgKiphcmdzLCBQeV9zc2l6ZV90IG5hcmdzLCBQeU9iamVjdCAqa3dhcmdz KSB7CistICAgIFB5Q29kZU9iamVjdCAqY28gPSAoUHlDb2RlT2JqZWN0ICopUHlGdW5jdGlvbl9H RVRfQ09ERShmdW5jKTsKKy0gICAgUHlPYmplY3QgKmdsb2JhbHMgPSBQeUZ1bmN0aW9uX0dFVF9H TE9CQUxTKGZ1bmMpOworLSAgICBQeU9iamVjdCAqYXJnZGVmcyA9IFB5RnVuY3Rpb25fR0VUX0RF RkFVTFRTKGZ1bmMpOworLSAgICBQeU9iamVjdCAqY2xvc3VyZTsKKy0jaWYgUFlfTUFKT1JfVkVS U0lPTiA+PSAzCistICAgIFB5T2JqZWN0ICprd2RlZnM7CistI2VuZGlmCistICAgIFB5T2JqZWN0 ICprd3R1cGxlLCAqKms7CistICAgIFB5T2JqZWN0ICoqZDsKKy0gICAgUHlfc3NpemVfdCBuZDsK Ky0gICAgUHlfc3NpemVfdCBuazsKKy0gICAgUHlPYmplY3QgKnJlc3VsdDsKKy0gICAgYXNzZXJ0 KGt3YXJncyA9PSBOVUxMIHx8IFB5RGljdF9DaGVjayhrd2FyZ3MpKTsKKy0gICAgbmsgPSBrd2Fy Z3MgPyBQeURpY3RfU2l6ZShrd2FyZ3MpIDogMDsKKy0gICAgaWYgKFB5X0VudGVyUmVjdXJzaXZl Q2FsbCgoY2hhciopIiB3aGlsZSBjYWxsaW5nIGEgUHl0aG9uIG9iamVjdCIpKSB7CistICAgICAg ICByZXR1cm4gTlVMTDsKKy0gICAgfQorLSAgICBpZiAoCistI2lmIFBZX01BSk9SX1ZFUlNJT04g Pj0gMworLSAgICAgICAgICAgIGNvLT5jb19rd29ubHlhcmdjb3VudCA9PSAwICYmCistI2VuZGlm CistICAgICAgICAgICAgbGlrZWx5KGt3YXJncyA9PSBOVUxMIHx8IG5rID09IDApICYmCistICAg ICAgICAgICAgY28tPmNvX2ZsYWdzID09IChDT19PUFRJTUlaRUQgfCBDT19ORVdMT0NBTFMgfCBD T19OT0ZSRUUpKSB7CistICAgICAgICBpZiAoYXJnZGVmcyA9PSBOVUxMICYmIGNvLT5jb19hcmdj b3VudCA9PSBuYXJncykgeworLSAgICAgICAgICAgIHJlc3VsdCA9IF9fUHl4X1B5RnVuY3Rpb25f RmFzdENhbGxOb0t3KGNvLCBhcmdzLCBuYXJncywgZ2xvYmFscyk7CistICAgICAgICAgICAgZ290 byBkb25lOworLSAgICAgICAgfQorLSAgICAgICAgZWxzZSBpZiAobmFyZ3MgPT0gMCAmJiBhcmdk ZWZzICE9IE5VTEwKKy0gICAgICAgICAgICAgICAgICYmIGNvLT5jb19hcmdjb3VudCA9PSBQeV9T SVpFKGFyZ2RlZnMpKSB7CistICAgICAgICAgICAgLyogZnVuY3Rpb24gY2FsbGVkIHdpdGggbm8g YXJndW1lbnRzLCBidXQgYWxsIHBhcmFtZXRlcnMgaGF2ZQorLSAgICAgICAgICAgICAgIGEgZGVm YXVsdCB2YWx1ZTogdXNlIGRlZmF1bHQgdmFsdWVzIGFzIGFyZ3VtZW50cyAuKi8KKy0gICAgICAg ICAgICBhcmdzID0gJlB5VHVwbGVfR0VUX0lURU0oYXJnZGVmcywgMCk7CistICAgICAgICAgICAg cmVzdWx0ID1fX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsTm9LdyhjbywgYXJncywgUHlfU0laRShh cmdkZWZzKSwgZ2xvYmFscyk7CistICAgICAgICAgICAgZ290byBkb25lOworLSAgICAgICAgfQor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzNQorKyAqICAgICAgICAgcmV0 dXJuIHYKKysgKiAKKysgKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICBkZWYgc2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIHZhbHVlPVRydWUsIGFzeW5j aHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKToKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0 X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIiCisrICovCisrICBfX1B5eF9H ZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDYzNSwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo2MzYKKysgKiAKKysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIHNldF9wcm9w ZXJ0eShzZWxmLCBwcm9wLCB2YWx1ZT1UcnVlLCBhc3luY2hyb25vdXM9RmFsc2UsIGRhdGE9Tm9u ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIldyYXBzOiBt cHZfc2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIiCisrICogICAgICAg ICBhc3NlcnQgc2VsZi5fY3R4CisrICovCisrICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90 XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 LCBfX3B5eF9uX3Nfc2V0X3Byb3BlcnR5KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgNjM2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQp OworKyAgX19weXhfdF8xID0gTlVMTDsKKysgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg dW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsKKysgICAgX19weXhfdF8xID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82KTsKKysgICAgaWYgKGxpa2VseShfX3B5eF90XzEp KSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9f cHl4X3RfNik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7CisrICAgICAgX19QeXhf SU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNiwgZnVu Y3Rpb24pOworICAgICB9CistICAgIGlmIChrd2FyZ3MgIT0gTlVMTCkgeworLSAgICAgICAgUHlf c3NpemVfdCBwb3MsIGk7CistICAgICAgICBrd3R1cGxlID0gUHlUdXBsZV9OZXcoMiAqIG5rKTsK Ky0gICAgICAgIGlmIChrd3R1cGxlID09IE5VTEwpIHsKKy0gICAgICAgICAgICByZXN1bHQgPSBO VUxMOworLSAgICAgICAgICAgIGdvdG8gZG9uZTsKKy0gICAgICAgIH0KKy0gICAgICAgIGsgPSAm UHlUdXBsZV9HRVRfSVRFTShrd3R1cGxlLCAwKTsKKy0gICAgICAgIHBvcyA9IGkgPSAwOworLSAg ICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KGt3YXJncywgJnBvcywgJmtbaV0sICZrW2krMV0pKSB7 CistICAgICAgICAgICAgUHlfSU5DUkVGKGtbaV0pOworLSAgICAgICAgICAgIFB5X0lOQ1JFRihr W2krMV0pOworLSAgICAgICAgICAgIGkgKz0gMjsKKy0gICAgICAgIH0KKy0gICAgICAgIG5rID0g aSAvIDI7CisrICB9CisrICBfX3B5eF90XzcgPSAoX19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2Jq ZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQpOworKyAgX19QeXhfWERFQ1JFRihf X3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9f cHl4X3RfNCA9IDA7CisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA2 MzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgIGlmIChQeURpY3RfU2V0SXRl bSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+ dHBfZGljdCwgX19weXhfbl9zX3NldF9wcm9wZXJ0eSwgX19weXhfdF83KSA8IDApIF9fUFlYX0VS UigwLCA2MzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9f cHl4X3RfNyA9IDA7CisrICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQpOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjY3MworKyAqICAgICAgICAgcmV0dXJuIGVycgorKyAqIAorKyAqICAgICBAX2Vycm9ycyAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGRlZiBzZXRfb3B0aW9uKHNlbGYs IHByb3AsIHZhbHVlPVRydWUpOgorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfb3B0aW9u IiIiCisrICovCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhf bl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDY3Mywg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzQKKysgKiAKKysgKiAgICAgQF9lcnJvcnMK KysgKiAgICAgZGVmIHNldF9vcHRpb24oc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X29wdGlv biIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAqLworKyAgX19QeXhfR2V0TmFt ZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3NldF9vcHRpb24pOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2NzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09U UkVGKF9fcHl4X3RfNCk7CisrICBfX3B5eF90XzEgPSBOVUxMOworKyAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgeworKyAg ICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOworKyAgICBpZiAobGlr ZWx5KF9fcHl4X3RfMSkpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9H RVRfRlVOQ1RJT04oX19weXhfdF82KTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsK KysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQo X19weXhfdF82LCBmdW5jdGlvbik7CisgICAgIH0KKy0gICAgZWxzZSB7CistICAgICAgICBrd3R1 cGxlID0gTlVMTDsKKy0gICAgICAgIGsgPSBOVUxMOworKyAgfQorKyAgX19weXhfdF83ID0gKF9f cHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEs IF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhf dF80KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNjczLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dP VFJFRihfX3B5eF90XzcpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19zZXRfb3B0aW9uLCBf X3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDY3NCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgIFB5VHlwZV9Nb2RpZmllZChf X3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7CisrCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njk1CisrICogICAgICAgICByZXR1cm4gZXJyCisr ICogCisrICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgZGVmIGluaXRpYWxpemUoc2VsZik6CisrICogICAgICAgICAiIiJXcmFwczogbXB2X2luaXRp YWxpemUiIiIKKysgKi8KKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBf X3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg Njk1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5NgorKyAqIAorKyAqICAgICBAX2Vy cm9ycworKyAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9pbml0aWFsaXplIiIiCisrICogICAg ICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICovCisrICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5 eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0LCBfX3B5eF9uX3NfaW5pdGlhbGl6ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDAsIDY5NiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKysgIF9fcHl4X3RfMSA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CisrICAgIF9fcHl4X3RfMSA9 IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CisrICAgIGlmIChsaWtlbHkoX19weXhfdF8x KSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihf X3B5eF90XzYpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAgICAgIF9fUHl4 X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1 bmN0aW9uKTsKKyAgICAgfQorLSAgICBjbG9zdXJlID0gUHlGdW5jdGlvbl9HRVRfQ0xPU1VSRShm dW5jKTsKKy0jaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICAgIGt3ZGVmcyA9IFB5RnVuY3Rp b25fR0VUX0tXX0RFRkFVTFRTKGZ1bmMpOworLSNlbmRpZgorLSAgICBpZiAoYXJnZGVmcyAhPSBO VUxMKSB7CistICAgICAgICBkID0gJlB5VHVwbGVfR0VUX0lURU0oYXJnZGVmcywgMCk7CistICAg ICAgICBuZCA9IFB5X1NJWkUoYXJnZGVmcyk7CisrICB9CisrICBfX3B5eF90XzcgPSAoX19weXhf dF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19w eXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQp OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19QeXhf REVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNykpIF9fUFlYX0VSUigwLCA2OTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfNyk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsK KysgIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX2luaXRpYWxpemUsIF9fcHl4 X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNjk2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgUHlUeXBlX01vZGlmaWVkKF9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKysKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDgKKysgKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJl YWQuc3RhcnQoKQorKyAqIAorKyAqICAgICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgIGRlZiBvYnNlcnZlX3Byb3BlcnR5KHNlbGYsIHByb3AsIGRhdGE9Tm9u ZSk6CisrICogICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVfcHJvcGVydHkiIiIKKysgKi8K KysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3Jz KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNzQ4LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKworKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjc0OQorKyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBk ZWYgb2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVfcHJvcGVy dHkiIiIKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKi8KKysgIF9fUHl4X0dldE5h bWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19vYnNlcnZlX3Byb3BlcnR5KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNzQ5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgX19weXhfdF8xID0gTlVMTDsKKysgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkp IHsKKysgICAgX19weXhfdF8xID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82KTsKKysgICAg aWYgKGxpa2VseShfX3B5eF90XzEpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3RfMSk7CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOworICAgICB9CistICAgIGVsc2UgeworLSAgICAg ICAgZCA9IE5VTEw7CistICAgICAgICBuZCA9IDA7CisrICB9CisrICBfX3B5eF90XzcgPSAoX19w eXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwg X19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90 XzQpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19Q eXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBpZiAodW5saWtlbHkoIV9f cHl4X3RfNykpIF9fUFlYX0VSUigwLCA3NDgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09U UkVGKF9fcHl4X3RfNyk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKKysgIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX29ic2VydmVfcHJvcGVy dHksIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNzQ5LCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgUHlUeXBlX01vZGlm aWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKysKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzAKKysgKiAgICAgICAgIHJldHVybiBl cnIKKysgKiAKKysgKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICBkZWYgdW5vYnNlcnZlX3Byb3BlcnR5KHNlbGYsIGRhdGEpOgorKyAqICAgICAgICAg IiIiV3JhcHM6IG1wdl91bm9ic2VydmVfcHJvcGVydHkiIiIKKysgKi8KKysgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNzcwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjc3MQorKyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgdW5vYnNlcnZlX3By b3BlcnR5KHNlbGYsIGRhdGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICAiIiJXcmFwczogbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSIiIgorKyAqICAgICAgICAgYXNz ZXJ0IHNlbGYuX2N0eAorKyAqLworKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19w eXhfbl9zX3Vub2JzZXJ2ZV9wcm9wZXJ0eSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDAsIDc3MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKysgIF9fcHl4X3RfMSA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CisrICAgIF9fcHl4X3RfMSA9 IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CisrICAgIGlmIChsaWtlbHkoX19weXhfdF8x KSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihf X3B5eF90XzYpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAgICAgIF9fUHl4 X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1 bmN0aW9uKTsKKyAgICAgfQorLSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgcmVzdWx0 ID0gUHlFdmFsX0V2YWxDb2RlRXgoKFB5T2JqZWN0KiljbywgZ2xvYmFscywgKFB5T2JqZWN0ICop TlVMTCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncywgKGludCluYXJncywK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaywgKGludCluaywKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZCwgKGludCluZCwga3dkZWZzLCBjbG9zdXJlKTsKKy0jZWxz ZQorLSAgICByZXN1bHQgPSBQeUV2YWxfRXZhbENvZGVFeChjbywgZ2xvYmFscywgKFB5T2JqZWN0 ICopTlVMTCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncywgKGludCluYXJn cywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaywgKGludCluaywKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZCwgKGludCluZCwgY2xvc3VyZSk7CistI2VuZGlmCist ICAgIFB5X1hERUNSRUYoa3d0dXBsZSk7CistZG9uZToKKy0gICAgUHlfTGVhdmVSZWN1cnNpdmVD YWxsKCk7CistICAgIHJldHVybiByZXN1bHQ7CistfQorLSNlbmRpZgorLSNlbmRpZgorKyAgfQor KyAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19w eXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfNiwgX19weXhfdF80KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwor KyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNzcwLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICop X19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4 X25fc191bm9ic2VydmVfcHJvcGVydHksIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNzcx LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90Xzcg PSAwOworKyAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0KTsKKyAKKy0vKiBQeUNGdW5jdGlvbkZhc3RDYWxsICovCistI2lmIENZVEhPTl9G QVNUX1BZQ0NBTEwKKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCAqIF9fUHl4X1B5Q0Z1 bmN0aW9uX0Zhc3RDYWxsKFB5T2JqZWN0ICpmdW5jX29iaiwgUHlPYmplY3QgKiphcmdzLCBQeV9z c2l6ZV90IG5hcmdzKSB7CistICAgIFB5Q0Z1bmN0aW9uT2JqZWN0ICpmdW5jID0gKFB5Q0Z1bmN0 aW9uT2JqZWN0KilmdW5jX29iajsKKy0gICAgUHlDRnVuY3Rpb24gbWV0aCA9IFB5Q0Z1bmN0aW9u X0dFVF9GVU5DVElPTihmdW5jKTsKKy0gICAgUHlPYmplY3QgKnNlbGYgPSBQeUNGdW5jdGlvbl9H RVRfU0VMRihmdW5jKTsKKy0gICAgaW50IGZsYWdzID0gUHlDRnVuY3Rpb25fR0VUX0ZMQUdTKGZ1 bmMpOworLSAgICBhc3NlcnQoUHlDRnVuY3Rpb25fQ2hlY2soZnVuYykpOworLSAgICBhc3NlcnQo TUVUSF9GQVNUQ0FMTCA9PSAoZmxhZ3MgJiB+KE1FVEhfQ0xBU1MgfCBNRVRIX1NUQVRJQyB8IE1F VEhfQ09FWElTVCB8IE1FVEhfS0VZV09SRFMgfCBNRVRIX1NUQUNLTEVTUykpKTsKKy0gICAgYXNz ZXJ0KG5hcmdzID49IDApOworLSAgICBhc3NlcnQobmFyZ3MgPT0gMCB8fCBhcmdzICE9IE5VTEwp OworLSAgICAvKiBfUHlDRnVuY3Rpb25fRmFzdENhbGxEaWN0KCkgbXVzdCBub3QgYmUgY2FsbGVk IHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKy0gICAgICAgYmVjYXVzZSBpdCBtYXkgY2xlYXIgaXQg KGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGFuZCBzbyB0aGUKKy0gICAgICAgY2FsbGVyIGxvc2Vz IGl0cyBleGNlcHRpb24gKi8KKy0gICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKy0gICAg aWYgKChQWV9WRVJTSU9OX0hFWCA8IDB4MDMwNzAwQTApIHx8IHVubGlrZWx5KGZsYWdzICYgTUVU SF9LRVlXT1JEUykpIHsKKy0gICAgICAgIHJldHVybiAoKigoX19QeXhfUHlDRnVuY3Rpb25GYXN0 V2l0aEtleXdvcmRzKSh2b2lkKiltZXRoKSkgKHNlbGYsIGFyZ3MsIG5hcmdzLCBOVUxMKTsKKy0g ICAgfSBlbHNlIHsKKy0gICAgICAgIHJldHVybiAoKigoX19QeXhfUHlDRnVuY3Rpb25GYXN0KSh2 b2lkKiltZXRoKSkgKHNlbGYsIGFyZ3MsIG5hcmdzKTsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5MzgKKysgKiAKKysgKiBjZGVmIGNsYXNzIFJlbmRlckNvbnRleHQob2Jq ZWN0KToKKysgKiAgICAgQVBJX09QRU5HTCA9ICJvcGVuZ2wiICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgVVBEQVRFX0ZSQU1FID0gTVBWX1JFTkRFUl9VUERBVEVfRlJBTUUK KysgKiAKKysgKi8KKysgIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9z X0FQSV9PUEVOR0wsIF9fcHl4X25fc19vcGVuZ2wpIDwgMCkgX19QWVhfRVJSKDAsIDkzOCwgX19w eXhfTDFfZXJyb3IpCisrICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X1JlbmRlckNvbnRleHQpOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjkzOQorKyAqIGNkZWYgY2xhc3MgUmVuZGVyQ29udGV4dChvYmplY3QpOgorKyAq ICAgICBBUElfT1BFTkdMID0gIm9wZW5nbCIKKysgKiAgICAgVVBEQVRFX0ZSQU1FID0gTVBWX1JF TkRFUl9VUERBVEVfRlJBTUUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAq ICAgICBjZGVmOgorKyAqLworKyAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfcmVuZGVyX3VwZGF0ZV9mbGFnKE1QVl9SRU5ERVJfVVBEQVRFX0ZSQU1FKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgOTM5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAq KV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0 LCBfX3B5eF9uX3NfVVBEQVRFX0ZSQU1FLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDkz OSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83 ID0gMDsKKysgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyQ29udGV4dCk7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTAwOQorKyAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCisrICogCisrICogICAgIEBf ZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZGVmIHNldF9pY2Nf cHJvZmlsZShzZWxmLCBpY2NfYmxvYik6CisrICogICAgICAgICBjZGVmOgorKyAqLworKyAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDA5LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwMTAKKysgKiAKKysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIHNl dF9pY2NfcHJvZmlsZShzZWxmLCBpY2NfYmxvYik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgIGNkZWY6CisrICogICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJhbSBw YXJhbQorKyAqLworKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3Qg KilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgX19weXhf bl9zX3NldF9pY2NfcHJvZmlsZSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDAsIDEwMTAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Cisr ICBfX3B5eF90XzEgPSBOVUxMOworKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgeworKyAgICBfX3B5eF90XzEgPSBQeU1l dGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsK KysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhf dF82KTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKysgICAgICBfX1B5eF9JTkNS RUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlv bik7CisrICAgIH0KKysgIH0KKysgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlP YmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJS KDAsIDEwMDksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Cisr ICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgIGlmIChQeURpY3Rf U2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVu ZGVyQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3NldF9pY2NfcHJvZmlsZSwgX19weXhfdF83 KSA8IDApIF9fUFlYX0VSUigwLCAxMDEwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KTsKKysKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI4CisrICogICAgICAgICByZXR1cm4gZXJyCisr ICogCisrICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgZGVmIHNldF9hbWJpZW50X2xpZ2h0KHNlbGYsIGx1eCk6CisrICogICAgICAgICBjZGVmOgor KyAqLworKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19l cnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDI4LCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKworKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjkKKysgKiAKKysgKiAgICAgQF9lcnJvcnMKKysg KiAgICAgZGVmIHNldF9hbWJpZW50X2xpZ2h0KHNlbGYsIGx1eCk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWY6CisrICogICAgICAgICAgICAgbXB2X3JlbmRl cl9wYXJhbSBwYXJhbQorKyAqLworKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dCwgX19weXhfbl9zX3NldF9hbWJpZW50X2xpZ2h0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgMTAyOSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19w eXhfdF80KTsKKysgIF9fcHl4X3RfMSA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRI T0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CisrICAgIF9fcHl4 X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CisrICAgIGlmIChsaWtlbHkoX19w eXhfdF8xKSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzYpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAgICAg IF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90 XzYsIGZ1bmN0aW9uKTsKKyAgICAgfQorLX0KKy0jZW5kaWYKKysgIH0KKysgIF9fcHl4X3RfNyA9 IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhf dF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9f cHl4X3RfNCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Cisr ICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgIGlmICh1bmxpa2Vs eSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEwMjgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKKysgIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3Nl dF9hbWJpZW50X2xpZ2h0LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDEwMjksIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Cisr ICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckNvbnRleHQpOworIAorLS8qIFB5T2JqZWN0Q2FsbCAqLworLSNpZiBDWVRIT05fQ09NUElMSU5H X0lOX0NQWVRIT04KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlPYmpl Y3RfQ2FsbChQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZywgUHlPYmplY3QgKmt3KSB7Cist ICAgIFB5T2JqZWN0ICpyZXN1bHQ7CistICAgIHRlcm5hcnlmdW5jIGNhbGwgPSBmdW5jLT5vYl90 eXBlLT50cF9jYWxsOworLSAgICBpZiAodW5saWtlbHkoIWNhbGwpKQorLSAgICAgICAgcmV0dXJu IFB5T2JqZWN0X0NhbGwoZnVuYywgYXJnLCBrdyk7CistICAgIGlmICh1bmxpa2VseShQeV9FbnRl clJlY3Vyc2l2ZUNhbGwoKGNoYXIqKSIgd2hpbGUgY2FsbGluZyBhIFB5dGhvbiBvYmplY3QiKSkp CistICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAgcmVzdWx0ID0gKCpjYWxsKShmdW5jLCBhcmcs IGt3KTsKKy0gICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CistICAgIGlmICh1bmxpa2VseSgh cmVzdWx0KSAmJiB1bmxpa2VseSghUHlFcnJfT2NjdXJyZWQoKSkpIHsKKy0gICAgICAgIFB5RXJy X1NldFN0cmluZygKKy0gICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKKy0gICAgICAgICAg ICAiTlVMTCByZXN1bHQgd2l0aG91dCBlcnJvciBpbiBQeU9iamVjdF9DYWxsIik7CistICAgIH0K Ky0gICAgcmV0dXJuIHJlc3VsdDsKKy19CistI2VuZGlmCisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTA2OAorKyAqICAgICAgICAgcmV0dXJuIHJldAorKyAqIAorKyAqICAg ICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGRlZiByZW5k ZXIoc2VsZiwKKysgKiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUsCisrICovCisrICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEwNjgsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisgCistLyogR2V0VG9wbW9zdEV4Y2VwdGlv biAqLworLSNpZiBDWVRIT05fVVNFX0VYQ19JTkZPX1NUQUNLCistc3RhdGljIF9QeUVycl9TdGFj a0l0ZW0gKgorLV9fUHl4X1B5RXJyX0dldFRvcG1vc3RFeGNlcHRpb24oUHlUaHJlYWRTdGF0ZSAq dHN0YXRlKQorLXsKKy0gICAgX1B5RXJyX1N0YWNrSXRlbSAqZXhjX2luZm8gPSB0c3RhdGUtPmV4 Y19pbmZvOworLSAgICB3aGlsZSAoKGV4Y19pbmZvLT5leGNfdHlwZSA9PSBOVUxMIHx8IGV4Y19p bmZvLT5leGNfdHlwZSA9PSBQeV9Ob25lKSAmJgorLSAgICAgICAgICAgZXhjX2luZm8tPnByZXZp b3VzX2l0ZW0gIT0gTlVMTCkKKy0gICAgeworLSAgICAgICAgZXhjX2luZm8gPSBleGNfaW5mby0+ cHJldmlvdXNfaXRlbTsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY5 CisrICogCisrICogICAgIEBfZXJyb3JzCisrICogICAgIGRlZiByZW5kZXIoc2VsZiwgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgIG9wZW5nbF9mYm89Tm9u ZSwKKysgKiAgICAgICAgICAgICAgICBmbGlwX3k9RmFsc2UsCisrICovCisrICBfX1B5eF9HZXRO YW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LCBfX3B5eF9uX3NfcmVuZGVyKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTA2OSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5 eF9HT1RSRUYoX19weXhfdF80KTsKKysgIF9fcHl4X3RfMSA9IE5VTEw7CisrICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7 CisrICAgIF9fcHl4X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CisrICAgIGlm IChsaWtlbHkoX19weXhfdF8xKSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0 aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzYpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzEpOworKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzYsIGZ1bmN0aW9uKTsKKyAgICAgfQorLSAgICByZXR1cm4gZXhjX2luZm87 CistfQorLSNlbmRpZgorKyAgfQorKyAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9Q eU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80KTsKKysgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9F UlIoMCwgMTA2OCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsK KysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgaWYgKFB5RGlj dF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9S ZW5kZXJDb250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfcmVuZGVyLCBfX3B5eF90XzcpIDwgMCkg X19QWVhfRVJSKDAsIDEwNjksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisrICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQpOworIAorLS8qIFNhdmVSZXNldEV4Y2Vw dGlvbiAqLworLSNpZiBDWVRIT05fRkFTVF9USFJFQURfU1RBVEUKKy1zdGF0aWMgQ1lUSE9OX0lO TElORSB2b2lkIF9fUHl4X19FeGNlcHRpb25TYXZlKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlP YmplY3QgKip0eXBlLCBQeU9iamVjdCAqKnZhbHVlLCBQeU9iamVjdCAqKnRiKSB7CistICAgICNp ZiBDWVRIT05fVVNFX0VYQ19JTkZPX1NUQUNLCistICAgIF9QeUVycl9TdGFja0l0ZW0gKmV4Y19p bmZvID0gX19QeXhfUHlFcnJfR2V0VG9wbW9zdEV4Y2VwdGlvbih0c3RhdGUpOworLSAgICAqdHlw ZSA9IGV4Y19pbmZvLT5leGNfdHlwZTsKKy0gICAgKnZhbHVlID0gZXhjX2luZm8tPmV4Y192YWx1 ZTsKKy0gICAgKnRiID0gZXhjX2luZm8tPmV4Y190cmFjZWJhY2s7CistICAgICNlbHNlCistICAg ICp0eXBlID0gdHN0YXRlLT5leGNfdHlwZTsKKy0gICAgKnZhbHVlID0gdHN0YXRlLT5leGNfdmFs dWU7CistICAgICp0YiA9IHRzdGF0ZS0+ZXhjX3RyYWNlYmFjazsKKy0gICAgI2VuZGlmCistICAg IFB5X1hJTkNSRUYoKnR5cGUpOworLSAgICBQeV9YSU5DUkVGKCp2YWx1ZSk7CistICAgIFB5X1hJ TkNSRUYoKnRiKTsKKy19Cistc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9fRXhjZXB0 aW9uUmVzZXQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeU9iamVjdCAqdHlwZSwgUHlPYmplY3Qg KnZhbHVlLCBQeU9iamVjdCAqdGIpIHsKKy0gICAgUHlPYmplY3QgKnRtcF90eXBlLCAqdG1wX3Zh bHVlLCAqdG1wX3RiOworLSAgICAjaWYgQ1lUSE9OX1VTRV9FWENfSU5GT19TVEFDSworLSAgICBf UHlFcnJfU3RhY2tJdGVtICpleGNfaW5mbyA9IHRzdGF0ZS0+ZXhjX2luZm87CistICAgIHRtcF90 eXBlID0gZXhjX2luZm8tPmV4Y190eXBlOworLSAgICB0bXBfdmFsdWUgPSBleGNfaW5mby0+ZXhj X3ZhbHVlOworLSAgICB0bXBfdGIgPSBleGNfaW5mby0+ZXhjX3RyYWNlYmFjazsKKy0gICAgZXhj X2luZm8tPmV4Y190eXBlID0gdHlwZTsKKy0gICAgZXhjX2luZm8tPmV4Y192YWx1ZSA9IHZhbHVl OworLSAgICBleGNfaW5mby0+ZXhjX3RyYWNlYmFjayA9IHRiOworLSAgICAjZWxzZQorLSAgICB0 bXBfdHlwZSA9IHRzdGF0ZS0+ZXhjX3R5cGU7CistICAgIHRtcF92YWx1ZSA9IHRzdGF0ZS0+ZXhj X3ZhbHVlOworLSAgICB0bXBfdGIgPSB0c3RhdGUtPmV4Y190cmFjZWJhY2s7CistICAgIHRzdGF0 ZS0+ZXhjX3R5cGUgPSB0eXBlOworLSAgICB0c3RhdGUtPmV4Y192YWx1ZSA9IHZhbHVlOworLSAg ICB0c3RhdGUtPmV4Y190cmFjZWJhY2sgPSB0YjsKKy0gICAgI2VuZGlmCistICAgIFB5X1hERUNS RUYodG1wX3R5cGUpOworLSAgICBQeV9YREVDUkVGKHRtcF92YWx1ZSk7CistICAgIFB5X1hERUNS RUYodG1wX3RiKTsKKy19CistI2VuZGlmCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTEzMgorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BhcmFt cywgKmFyZ3MsICoqa3dhcmdzKQorKyAqIAorKyAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVh ZCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZGVmIF9faW5pdF9fKHNl bGYpOgorKyAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCisrICovCisrICBfX1B5eF9H ZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNywgX19weXhfbl9zX1RocmVhZCk7IGlmICh1bmxp a2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDExMzIsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICBfX3B5eF90XzYgPSBQeVR1cGxlX05ldygxKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhf dF83KTsKKysgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF82LCAwLCBfX3B5eF90XzcpOworKyAg X19weXhfdF83ID0gMDsKKysgIF9fcHl4X3RfNyA9IF9fUHl4X0NhbGN1bGF0ZU1ldGFjbGFzcyhO VUxMLCBfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAx MTMyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgX19w eXhfdF80ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzcsIF9fcHl4X3RfNiwg X19weXhfbl9zX0NhbGxiYWNrVGhyZWFkLCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIChQeU9i amVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikg TlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDExMzIsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgCistLyogUHlFcnJFeGNl cHRpb25NYXRjaGVzICovCistI2lmIENZVEhPTl9GQVNUX1RIUkVBRF9TVEFURQorLXN0YXRpYyBp bnQgX19QeXhfUHlFcnJfRXhjZXB0aW9uTWF0Y2hlc1R1cGxlKFB5T2JqZWN0ICpleGNfdHlwZSwg UHlPYmplY3QgKnR1cGxlKSB7CistICAgIFB5X3NzaXplX3QgaSwgbjsKKy0gICAgbiA9IFB5VHVw bGVfR0VUX1NJWkUodHVwbGUpOworLSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgZm9y IChpPTA7IGk8bjsgaSsrKSB7CistICAgICAgICBpZiAoZXhjX3R5cGUgPT0gUHlUdXBsZV9HRVRf SVRFTSh0dXBsZSwgaSkpIHJldHVybiAxOworLSAgICB9CistI2VuZGlmCistICAgIGZvciAoaT0w OyBpPG47IGkrKykgeworLSAgICAgICAgaWYgKF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0 Y2hlcyhleGNfdHlwZSwgUHlUdXBsZV9HRVRfSVRFTSh0dXBsZSwgaSkpKSByZXR1cm4gMTsKKy0g ICAgfQorLSAgICByZXR1cm4gMDsKKy19Cistc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4 X1B5RXJyX0V4Y2VwdGlvbk1hdGNoZXNJblN0YXRlKFB5VGhyZWFkU3RhdGUqIHRzdGF0ZSwgUHlP YmplY3QqIGVycikgeworLSAgICBQeU9iamVjdCAqZXhjX3R5cGUgPSB0c3RhdGUtPmN1cmV4Y190 eXBlOworLSAgICBpZiAoZXhjX3R5cGUgPT0gZXJyKSByZXR1cm4gMTsKKy0gICAgaWYgKHVubGlr ZWx5KCFleGNfdHlwZSkpIHJldHVybiAwOworLSAgICBpZiAodW5saWtlbHkoUHlUdXBsZV9DaGVj ayhlcnIpKSkKKy0gICAgICAgIHJldHVybiBfX1B5eF9QeUVycl9FeGNlcHRpb25NYXRjaGVzVHVw bGUoZXhjX3R5cGUsIGVycik7CistICAgIHJldHVybiBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlv bk1hdGNoZXMoZXhjX3R5cGUsIGVycik7CistfQorLSNlbmRpZgorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExMzMKKysgKiAKKysgKiBjbGFzcyBDYWxsYmFja1RocmVhZChU aHJlYWQpOgorKyAqICAgICBkZWYgX19pbml0X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQorKyAqICAgICAgICAg c2VsZi5kYWVtb24gPSBUcnVlCisrICovCisrICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9u X05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8x X19pbml0X18sIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9fX2luaXQsIE5VTEwsIF9fcHl4 X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rl b2JqX18zNSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTMzLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX2luaXQsIF9fcHl4X3RfMSkgPCAw KSBfX1BZWF9FUlIoMCwgMTEzMywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTQxCisrICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZQorKyAqIAor KyAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IFRydWUKKysgKiAgICAgICAgIHNlbGYuY2Fs bGJhY2sgPSBOb25lCisrICovCisrICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygm X19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8zc2h1dGRv d24sIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9zaHV0ZG93biwgTlVMTCwgX19weXhfbl9z X3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpf XzM3KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNDEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9fcHl4X3RfMSkgPCAw KSBfX1BZWF9FUlIoMCwgMTE0MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTQ2CisrICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisrICogCisrICog ICAgIGRlZiBjYWxsKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisrICogCisrICovCisrICBfX3B5eF90XzEgPSBfX1B5 eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxs YmFja1RocmVhZF81Y2FsbCwgMCwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX2NhbGwsIE5VTEws IF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5 eF9jb2Rlb2JqX18zOSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAx MTQ2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX2NhbGwsIF9fcHl4X3Rf MSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE0NiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTQ5CisrICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisrICog CisrICogICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKysgKiAKKysgKi8K KysgIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzdzZXQsIDAsIF9fcHl4X25fc19DYWxsYmFj a1RocmVhZF9zZXQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2Qs ICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX180MSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhf bl9zX3NldCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKworKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTIKKysgKiAgICAgICAgIHNlbGYuY2Fs bGJhY2sgPSBjYWxsYmFjaworKyAqIAorKyAqICAgICBkZWYgcnVuKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3NodXRkb3du OgorKyAqICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCisrICovCisrICBfX3B5 eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTRDYWxsYmFja1RocmVhZF85cnVuLCAwLCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWRf cnVuLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2Jq ZWN0ICopX19weXhfY29kZW9ial9fNDMpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgMTE1MiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19ydW4s IF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE1MiwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU3CisrICogICAgICAgICAgICAgc2VsZi5tcHZfY2Fs bGJhY2soc2VsZi5jYWxsYmFjaykgaWYgc2VsZi5jYWxsYmFjayBlbHNlIE5vbmUKKysgKiAKKysg KiAgICAgZGVmIG1wdl9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHRyeToKKysgKiAgICAgICAgICAgICBjYWxsYmFjaygp CisrICovCisrICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8xMW1wdl9jYWxsYmFjaywgMCwg X19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX21wdl9jYWxsYmFjaywgTlVMTCwgX19weXhfbl9zX3Zp ZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzQ1 KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNTcsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBpZiAoX19QeXhfU2V0TmFt ZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3NfbXB2X2NhbGxiYWNrLCBfX3B5eF90XzEpIDwg MCkgX19QWVhfRVJSKDAsIDExNTcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEzMgorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3Bh cmFtcywgKmFyZ3MsICoqa3dhcmdzKQorKyAqIAorKyAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRo cmVhZCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZGVmIF9faW5pdF9f KHNlbGYpOgorKyAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCisrICovCisrICBfX3B5 eF90XzEgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZShfX3B5eF90XzcsIF9fcHl4X25fc19DYWxsYmFj a1RocmVhZCwgX19weXhfdF82LCBfX3B5eF90XzQsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTMyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4 X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTMyLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBfX1B5eF9E RUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSAwOworKworKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MQorKyAqIGRl ZiBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkKF9fcHl4X3R5cGUsIGxvbmcgX19weXhf Y2hlY2tzdW0sIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgorKyAqICAgICBjZGVmIG9iamVjdCBf X3B5eF9yZXN1bHQKKysgKi8KKysgIF9fcHl4X3RfNiA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZfX3B5 eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVh Y2hlZCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9z X3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJS KDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4 X3RfNiA9IDA7CisgCistLyogR2V0RXhjZXB0aW9uICovCistI2lmIENZVEhPTl9GQVNUX1RIUkVB RF9TVEFURQorLXN0YXRpYyBpbnQgX19QeXhfX0dldEV4Y2VwdGlvbihQeVRocmVhZFN0YXRlICp0 c3RhdGUsIFB5T2JqZWN0ICoqdHlwZSwgUHlPYmplY3QgKip2YWx1ZSwgUHlPYmplY3QgKip0YikK Ky0jZWxzZQorLXN0YXRpYyBpbnQgX19QeXhfR2V0RXhjZXB0aW9uKFB5T2JqZWN0ICoqdHlwZSwg UHlPYmplY3QgKip2YWx1ZSwgUHlPYmplY3QgKip0YikKKy0jZW5kaWYKKy17CistICAgIFB5T2Jq ZWN0ICpsb2NhbF90eXBlLCAqbG9jYWxfdmFsdWUsICpsb2NhbF90YjsKKy0jaWYgQ1lUSE9OX0ZB U1RfVEhSRUFEX1NUQVRFCistICAgIFB5T2JqZWN0ICp0bXBfdHlwZSwgKnRtcF92YWx1ZSwgKnRt cF90YjsKKy0gICAgbG9jYWxfdHlwZSA9IHRzdGF0ZS0+Y3VyZXhjX3R5cGU7CistICAgIGxvY2Fs X3ZhbHVlID0gdHN0YXRlLT5jdXJleGNfdmFsdWU7CistICAgIGxvY2FsX3RiID0gdHN0YXRlLT5j dXJleGNfdHJhY2ViYWNrOworLSAgICB0c3RhdGUtPmN1cmV4Y190eXBlID0gMDsKKy0gICAgdHN0 YXRlLT5jdXJleGNfdmFsdWUgPSAwOworLSAgICB0c3RhdGUtPmN1cmV4Y190cmFjZWJhY2sgPSAw OworLSNlbHNlCistICAgIFB5RXJyX0ZldGNoKCZsb2NhbF90eXBlLCAmbG9jYWxfdmFsdWUsICZs b2NhbF90Yik7CistI2VuZGlmCistICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmbG9jYWxf dHlwZSwgJmxvY2FsX3ZhbHVlLCAmbG9jYWxfdGIpOworLSNpZiBDWVRIT05fRkFTVF9USFJFQURf U1RBVEUKKy0gICAgaWYgKHVubGlrZWx5KHRzdGF0ZS0+Y3VyZXhjX3R5cGUpKQorLSNlbHNlCist ICAgIGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkKKy0jZW5kaWYKKy0gICAgICAgIGdv dG8gYmFkOworLSAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICAgIGlmIChsb2NhbF90 YikgeworLSAgICAgICAgaWYgKHVubGlrZWx5KFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjayhsb2Nh bF92YWx1ZSwgbG9jYWxfdGIpIDwgMCkpCistICAgICAgICAgICAgZ290byBiYWQ7CistICAgIH0K Ky0gICAgI2VuZGlmCistICAgIFB5X1hJTkNSRUYobG9jYWxfdGIpOworLSAgICBQeV9YSU5DUkVG KGxvY2FsX3R5cGUpOworLSAgICBQeV9YSU5DUkVGKGxvY2FsX3ZhbHVlKTsKKy0gICAgKnR5cGUg PSBsb2NhbF90eXBlOworLSAgICAqdmFsdWUgPSBsb2NhbF92YWx1ZTsKKy0gICAgKnRiID0gbG9j YWxfdGI7CistI2lmIENZVEhPTl9GQVNUX1RIUkVBRF9TVEFURQorLSAgICAjaWYgQ1lUSE9OX1VT RV9FWENfSU5GT19TVEFDSworLSAgICB7CistICAgICAgICBfUHlFcnJfU3RhY2tJdGVtICpleGNf aW5mbyA9IHRzdGF0ZS0+ZXhjX2luZm87CistICAgICAgICB0bXBfdHlwZSA9IGV4Y19pbmZvLT5l eGNfdHlwZTsKKy0gICAgICAgIHRtcF92YWx1ZSA9IGV4Y19pbmZvLT5leGNfdmFsdWU7CistICAg ICAgICB0bXBfdGIgPSBleGNfaW5mby0+ZXhjX3RyYWNlYmFjazsKKy0gICAgICAgIGV4Y19pbmZv LT5leGNfdHlwZSA9IGxvY2FsX3R5cGU7CistICAgICAgICBleGNfaW5mby0+ZXhjX3ZhbHVlID0g bG9jYWxfdmFsdWU7CistICAgICAgICBleGNfaW5mby0+ZXhjX3RyYWNlYmFjayA9IGxvY2FsX3Ri OworLSAgICB9CistICAgICNlbHNlCistICAgIHRtcF90eXBlID0gdHN0YXRlLT5leGNfdHlwZTsK Ky0gICAgdG1wX3ZhbHVlID0gdHN0YXRlLT5leGNfdmFsdWU7CistICAgIHRtcF90YiA9IHRzdGF0 ZS0+ZXhjX3RyYWNlYmFjazsKKy0gICAgdHN0YXRlLT5leGNfdHlwZSA9IGxvY2FsX3R5cGU7Cist ICAgIHRzdGF0ZS0+ZXhjX3ZhbHVlID0gbG9jYWxfdmFsdWU7CistICAgIHRzdGF0ZS0+ZXhjX3Ry YWNlYmFjayA9IGxvY2FsX3RiOworLSAgICAjZW5kaWYKKy0gICAgUHlfWERFQ1JFRih0bXBfdHlw ZSk7CistICAgIFB5X1hERUNSRUYodG1wX3ZhbHVlKTsKKy0gICAgUHlfWERFQ1JFRih0bXBfdGIp OworLSNlbHNlCistICAgIFB5RXJyX1NldEV4Y0luZm8obG9jYWxfdHlwZSwgbG9jYWxfdmFsdWUs IGxvY2FsX3RiKTsKKy0jZW5kaWYKKy0gICAgcmV0dXJuIDA7CistYmFkOgorLSAgICAqdHlwZSA9 IDA7CistICAgICp2YWx1ZSA9IDA7CistICAgICp0YiA9IDA7CistICAgIFB5X1hERUNSRUYobG9j YWxfdHlwZSk7CistICAgIFB5X1hERUNSRUYobG9jYWxfdmFsdWUpOworLSAgICBQeV9YREVDUkVG KGxvY2FsX3RiKTsKKy0gICAgcmV0dXJuIC0xOworLX0KKysgIC8qICIodHJlZSBmcmFnbWVudCki OjExCisrICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3Rh dGUoPEVuZE9mRmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICogICAg IHJldHVybiBfX3B5eF9yZXN1bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJl YWNoZWRfX3NldF9zdGF0ZShFbmRPZkZpbGVSZWFjaGVkIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19w eXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIF9fcHl4X3Jl c3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQucmVhc29uID0gX19weXhf c3RhdGVbMV0KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19w eXhfcmVzdWx0LCAnX19kaWN0X18nKToKKysgKi8KKysgIF9fcHl4X3RfNiA9IFB5Q0Z1bmN0aW9u X05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl85X19weXhfdW5waWNrbGVf TG9nTWVzc2FnZSwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19w eXhfbl9zX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJS KDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4 X3RfNiA9IDA7CisgCistLyogUHlPYmplY3RDYWxsTWV0aE8gKi8KKy0jaWYgQ1lUSE9OX0NPTVBJ TElOR19JTl9DUFlUSE9OCistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5 T2JqZWN0X0NhbGxNZXRoTyhQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZykgeworLSAgICBQ eU9iamVjdCAqc2VsZiwgKnJlc3VsdDsKKy0gICAgUHlDRnVuY3Rpb24gY2Z1bmM7CistICAgIGNm dW5jID0gUHlDRnVuY3Rpb25fR0VUX0ZVTkNUSU9OKGZ1bmMpOworLSAgICBzZWxmID0gUHlDRnVu Y3Rpb25fR0VUX1NFTEYoZnVuYyk7CistICAgIGlmICh1bmxpa2VseShQeV9FbnRlclJlY3Vyc2l2 ZUNhbGwoKGNoYXIqKSIgd2hpbGUgY2FsbGluZyBhIFB5dGhvbiBvYmplY3QiKSkpCistICAgICAg ICByZXR1cm4gTlVMTDsKKy0gICAgcmVzdWx0ID0gY2Z1bmMoc2VsZiwgYXJnKTsKKy0gICAgUHlf TGVhdmVSZWN1cnNpdmVDYWxsKCk7CistICAgIGlmICh1bmxpa2VseSghcmVzdWx0KSAmJiB1bmxp a2VseSghUHlFcnJfT2NjdXJyZWQoKSkpIHsKKy0gICAgICAgIFB5RXJyX1NldFN0cmluZygKKy0g ICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKKy0gICAgICAgICAgICAiTlVMTCByZXN1bHQg d2l0aG91dCBlcnJvciBpbiBQeU9iamVjdF9DYWxsIik7CistICAgIH0KKy0gICAgcmV0dXJuIHJl c3VsdDsKKy19CistI2VuZGlmCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisrICogZGVmIF9f cHl4X3VucGlja2xlX1Byb3BlcnR5KF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9f cHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBjZGVmIG9i amVjdCBfX3B5eF9QaWNrbGVFcnJvcgorKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQK KysgKi8KKysgIF9fcHl4X3RfNiA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xMV9fcHl4X3VucGlja2xlX1Byb3BlcnR5LCBOVUxMLCBfX3B5eF9u X3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysg IGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX1Byb3Bl cnR5LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistLyogUHlPYmplY3RD YWxsT25lQXJnICovCistI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTgorLXN0YXRpYyBQ eU9iamVjdCogX19QeXhfX1B5T2JqZWN0X0NhbGxPbmVBcmcoUHlPYmplY3QgKmZ1bmMsIFB5T2Jq ZWN0ICphcmcpIHsKKy0gICAgUHlPYmplY3QgKnJlc3VsdDsKKy0gICAgUHlPYmplY3QgKmFyZ3Mg PSBQeVR1cGxlX05ldygxKTsKKy0gICAgaWYgKHVubGlrZWx5KCFhcmdzKSkgcmV0dXJuIE5VTEw7 CistICAgIFB5X0lOQ1JFRihhcmcpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDAsIGFy Zyk7CistICAgIHJlc3VsdCA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoZnVuYywgYXJncywgTlVMTCk7 CistICAgIFB5X0RFQ1JFRihhcmdzKTsKKy0gICAgcmV0dXJuIHJlc3VsdDsKKy19Cistc3RhdGlj IENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoUHlPYmpl Y3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcpIHsKKy0jaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCistICAg IGlmIChQeUZ1bmN0aW9uX0NoZWNrKGZ1bmMpKSB7CistICAgICAgICByZXR1cm4gX19QeXhfUHlG dW5jdGlvbl9GYXN0Q2FsbChmdW5jLCAmYXJnLCAxKTsKKy0gICAgfQorLSNlbmRpZgorLSAgICBp ZiAobGlrZWx5KFB5Q0Z1bmN0aW9uX0NoZWNrKGZ1bmMpKSkgeworLSAgICAgICAgaWYgKGxpa2Vs eShQeUNGdW5jdGlvbl9HRVRfRkxBR1MoZnVuYykgJiBNRVRIX08pKSB7CistICAgICAgICAgICAg cmV0dXJuIF9fUHl4X1B5T2JqZWN0X0NhbGxNZXRoTyhmdW5jLCBhcmcpOworLSNpZiBDWVRIT05f RkFTVF9QWUNDQUxMCistICAgICAgICB9IGVsc2UgaWYgKFB5Q0Z1bmN0aW9uX0dFVF9GTEFHUyhm dW5jKSAmIE1FVEhfRkFTVENBTEwpIHsKKy0gICAgICAgICAgICByZXR1cm4gX19QeXhfUHlDRnVu Y3Rpb25fRmFzdENhbGwoZnVuYywgJmFyZywgMSk7CistI2VuZGlmCistICAgICAgICB9CistICAg IH0KKy0gICAgcmV0dXJuIF9fUHl4X19QeU9iamVjdF9DYWxsT25lQXJnKGZ1bmMsIGFyZyk7Cist fQorLSNlbHNlCistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcpIHsKKy0gICAgUHlPYmpl Y3QgKnJlc3VsdDsKKy0gICAgUHlPYmplY3QgKmFyZ3MgPSBQeVR1cGxlX1BhY2soMSwgYXJnKTsK Ky0gICAgaWYgKHVubGlrZWx5KCFhcmdzKSkgcmV0dXJuIE5VTEw7CistICAgIHJlc3VsdCA9IF9f UHl4X1B5T2JqZWN0X0NhbGwoZnVuYywgYXJncywgTlVMTCk7CistICAgIFB5X0RFQ1JFRihhcmdz KTsKKy0gICAgcmV0dXJuIHJlc3VsdDsKKy19CistI2VuZGlmCisrICAvKiAiKHRyZWUgZnJhZ21l bnQpIjoxMQorKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZSg8 UHJvcGVydHk+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICogICAgIHJldHVybiBfX3B5 eF9yZXN1bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoUHJv cGVydHkgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsg X19weXhfcmVzdWx0Lm5hbWUgPSBfX3B5eF9zdGF0ZVsxXQorKyAqICAgICBpZiBsZW4oX19weXhf c3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgorKyAqLwor KyAgX19weXhfdF82ID0gUHlDRnVuY3Rpb25fTmV3RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzX19weXhfdW5waWNrbGVfRXZlbnQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0 ZXJfbGlic19tcHYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKyAgaWYgKFB5RGlj dF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19weXhfdW5waWNrbGVfRXZlbnQsIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYo X19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0vKiBQeUVyckZldGNoUmVzdG9yZSAqLwor LSNpZiBDWVRIT05fRkFTVF9USFJFQURfU1RBVEUKKy1zdGF0aWMgQ1lUSE9OX0lOTElORSB2b2lk IF9fUHl4X0VyclJlc3RvcmVJblN0YXRlKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlPYmplY3Qg KnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRiKSB7CistICAgIFB5T2JqZWN0ICp0 bXBfdHlwZSwgKnRtcF92YWx1ZSwgKnRtcF90YjsKKy0gICAgdG1wX3R5cGUgPSB0c3RhdGUtPmN1 cmV4Y190eXBlOworLSAgICB0bXBfdmFsdWUgPSB0c3RhdGUtPmN1cmV4Y192YWx1ZTsKKy0gICAg dG1wX3RiID0gdHN0YXRlLT5jdXJleGNfdHJhY2ViYWNrOworLSAgICB0c3RhdGUtPmN1cmV4Y190 eXBlID0gdHlwZTsKKy0gICAgdHN0YXRlLT5jdXJleGNfdmFsdWUgPSB2YWx1ZTsKKy0gICAgdHN0 YXRlLT5jdXJleGNfdHJhY2ViYWNrID0gdGI7CistICAgIFB5X1hERUNSRUYodG1wX3R5cGUpOwor LSAgICBQeV9YREVDUkVGKHRtcF92YWx1ZSk7CistICAgIFB5X1hERUNSRUYodG1wX3RiKTsKKy19 Cistc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9FcnJGZXRjaEluU3RhdGUoUHlUaHJl YWRTdGF0ZSAqdHN0YXRlLCBQeU9iamVjdCAqKnR5cGUsIFB5T2JqZWN0ICoqdmFsdWUsIFB5T2Jq ZWN0ICoqdGIpIHsKKy0gICAgKnR5cGUgPSB0c3RhdGUtPmN1cmV4Y190eXBlOworLSAgICAqdmFs dWUgPSB0c3RhdGUtPmN1cmV4Y192YWx1ZTsKKy0gICAgKnRiID0gdHN0YXRlLT5jdXJleGNfdHJh Y2ViYWNrOworLSAgICB0c3RhdGUtPmN1cmV4Y190eXBlID0gMDsKKy0gICAgdHN0YXRlLT5jdXJl eGNfdmFsdWUgPSAwOworLSAgICB0c3RhdGUtPmN1cmV4Y190cmFjZWJhY2sgPSAwOworLX0KKy0j ZW5kaWYKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjEKKysgKiBkZWYgX19weXhfdW5waWNrbGVf UmVuZGVyRnJhbWVJbmZvKF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0 YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBjZGVmIG9iamVjdCBf X3B5eF9QaWNrbGVFcnJvcgorKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKysgKi8K KysgIF9fcHl4X3RfNiA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xNV9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgTlVMTCwgX19weXhf bl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cisr ICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9SZW5k ZXJGcmFtZUluZm8sIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0vKiBH ZXRBdHRyICovCistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QgKl9fUHl4X0dldEF0dHIo UHlPYmplY3QgKm8sIFB5T2JqZWN0ICpuKSB7CistI2lmIENZVEhPTl9VU0VfVFlQRV9TTE9UUwor LSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgaWYgKGxpa2VseShQeVVuaWNvZGVfQ2hl Y2sobikpKQorLSNlbHNlCistICAgIGlmIChsaWtlbHkoUHlTdHJpbmdfQ2hlY2sobikpKQorLSNl bmRpZgorLSAgICAgICAgcmV0dXJuIF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIobywgbik7Cist I2VuZGlmCistICAgIHJldHVybiBQeU9iamVjdF9HZXRBdHRyKG8sIG4pOworLX0KKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxCisrICogIyBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAqICMgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KysgKi8KKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBf X3B5eF9uX3NfdGVzdCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLS8q IEdldEF0dHIzICovCistc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9HZXRBdHRyM0RlZmF1bHQoUHlP YmplY3QgKmQpIHsKKy0gICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9kZWNsYXJlCistICAgIF9fUHl4 X1B5VGhyZWFkU3RhdGVfYXNzaWduCistICAgIGlmICh1bmxpa2VseSghX19QeXhfUHlFcnJfRXhj ZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpKQorLSAgICAgICAgcmV0dXJuIE5V TEw7CistICAgIF9fUHl4X1B5RXJyX0NsZWFyKCk7CistICAgIFB5X0lOQ1JFRihkKTsKKy0gICAg cmV0dXJuIGQ7CisrICAvKi0tLSBXcmFwcGVkIHZhcnMgY29kZSAtLS0qLworKworKyAgZ290byBf X3B5eF9MMDsKKysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8x KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dF80KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKKysgIF9fUHl4X1hERUNSRUYoX19w eXhfdF83KTsKKysgIGlmIChfX3B5eF9tKSB7CisrICAgIGlmIChfX3B5eF9kKSB7CisrICAgICAg X19QeXhfQWRkVHJhY2ViYWNrKCJpbml0IHZpZGN1dHRlci5saWJzLm1wdiIsIF9fcHl4X2NsaW5l bm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgICB9CisrICAgIFB5X0NMRUFS KF9fcHl4X20pOworKyAgfSBlbHNlIGlmICghUHlFcnJfT2NjdXJyZWQoKSkgeworKyAgICBQeUVy cl9TZXRTdHJpbmcoUHlFeGNfSW1wb3J0RXJyb3IsICJpbml0IHZpZGN1dHRlci5saWJzLm1wdiIp OworKyAgfQorKyAgX19weXhfTDA6OworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 CisrICAjaWYgQ1lUSE9OX1BFUDQ4OV9NVUxUSV9QSEFTRV9JTklUCisrICByZXR1cm4gKF9fcHl4 X20gIT0gTlVMTCkgPyAwIDogLTE7CisrICAjZWxpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysg IHJldHVybiBfX3B5eF9tOworKyAgI2Vsc2UKKysgIHJldHVybjsKKysgICNlbmRpZgorIH0KKy1z dGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCAqX19QeXhfR2V0QXR0cjMoUHlPYmplY3QgKm8s IFB5T2JqZWN0ICpuLCBQeU9iamVjdCAqZCkgeworLSAgICBQeU9iamVjdCAqciA9IF9fUHl4X0dl dEF0dHIobywgbik7CistICAgIHJldHVybiAobGlrZWx5KHIpKSA/IHIgOiBfX1B5eF9HZXRBdHRy M0RlZmF1bHQoZCk7CisrCisrLyogLS0tIFJ1bnRpbWUgc3VwcG9ydCBjb2RlIC0tLSAqLworKy8q IFJlZm5hbm55ICovCisrI2lmIENZVEhPTl9SRUZOQU5OWQorK3N0YXRpYyBfX1B5eF9SZWZOYW5u eUFQSVN0cnVjdCAqX19QeXhfUmVmTmFubnlJbXBvcnRBUEkoY29uc3QgY2hhciAqbW9kbmFtZSkg eworKyAgICBQeU9iamVjdCAqbSA9IE5VTEwsICpwID0gTlVMTDsKKysgICAgdm9pZCAqciA9IE5V TEw7CisrICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUobW9kbmFtZSk7CisrICAgIGlmICgh bSkgZ290byBlbmQ7CisrICAgIHAgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG0sICJSZWZOYW5u eUFQSSIpOworKyAgICBpZiAoIXApIGdvdG8gZW5kOworKyAgICByID0gUHlMb25nX0FzVm9pZFB0 cihwKTsKKytlbmQ6CisrICAgIFB5X1hERUNSRUYocCk7CisrICAgIFB5X1hERUNSRUYobSk7Cisr ICAgIHJldHVybiAoX19QeXhfUmVmTmFubnlBUElTdHJ1Y3QgKilyOworIH0KKysjZW5kaWYKKyAK Ky0vKiBQeU9iamVjdENhbGwyQXJncyAqLworLXN0YXRpYyBDWVRIT05fVU5VU0VEIFB5T2JqZWN0 KiBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoUHlPYmplY3QqIGZ1bmN0aW9uLCBQeU9iamVjdCog YXJnMSwgUHlPYmplY3QqIGFyZzIpIHsKKy0gICAgUHlPYmplY3QgKmFyZ3MsICpyZXN1bHQgPSBO VUxMOworLSAgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCistICAgIGlmIChQeUZ1bmN0aW9uX0No ZWNrKGZ1bmN0aW9uKSkgeworLSAgICAgICAgUHlPYmplY3QgKmFyZ3NbMl0gPSB7YXJnMSwgYXJn Mn07CistICAgICAgICByZXR1cm4gX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChmdW5jdGlvbiwg YXJncywgMik7CistICAgIH0KKy0gICAgI2VuZGlmCistICAgICNpZiBDWVRIT05fRkFTVF9QWUND QUxMCistICAgIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2soZnVuY3Rpb24pKSB7Cist ICAgICAgICBQeU9iamVjdCAqYXJnc1syXSA9IHthcmcxLCBhcmcyfTsKKy0gICAgICAgIHJldHVy biBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChmdW5jdGlvbiwgYXJncywgMik7CistICAgIH0K Ky0gICAgI2VuZGlmCistICAgIGFyZ3MgPSBQeVR1cGxlX05ldygyKTsKKy0gICAgaWYgKHVubGlr ZWx5KCFhcmdzKSkgZ290byBkb25lOworLSAgICBQeV9JTkNSRUYoYXJnMSk7CistICAgIFB5VHVw bGVfU0VUX0lURU0oYXJncywgMCwgYXJnMSk7CistICAgIFB5X0lOQ1JFRihhcmcyKTsKKy0gICAg UHlUdXBsZV9TRVRfSVRFTShhcmdzLCAxLCBhcmcyKTsKKy0gICAgUHlfSU5DUkVGKGZ1bmN0aW9u KTsKKy0gICAgcmVzdWx0ID0gX19QeXhfUHlPYmplY3RfQ2FsbChmdW5jdGlvbiwgYXJncywgTlVM TCk7CistICAgIFB5X0RFQ1JFRihhcmdzKTsKKy0gICAgUHlfREVDUkVGKGZ1bmN0aW9uKTsKKy1k b25lOgorLSAgICByZXR1cm4gcmVzdWx0OworKy8qIFB5T2JqZWN0R2V0QXR0clN0ciAqLworKyNp ZiBDWVRIT05fVVNFX1RZUEVfU0xPVFMKKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCog X19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihQeU9iamVjdCogb2JqLCBQeU9iamVjdCogYXR0cl9u YW1lKSB7CisrICAgIFB5VHlwZU9iamVjdCogdHAgPSBQeV9UWVBFKG9iaik7CisrICAgIGlmIChs aWtlbHkodHAtPnRwX2dldGF0dHJvKSkKKysgICAgICAgIHJldHVybiB0cC0+dHBfZ2V0YXR0cm8o b2JqLCBhdHRyX25hbWUpOworKyNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworKyAgICBpZiAobGlr ZWx5KHRwLT50cF9nZXRhdHRyKSkKKysgICAgICAgIHJldHVybiB0cC0+dHBfZ2V0YXR0cihvYmos IFB5U3RyaW5nX0FTX1NUUklORyhhdHRyX25hbWUpKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIFB5 T2JqZWN0X0dldEF0dHIob2JqLCBhdHRyX25hbWUpOworIH0KKy0KKy0vKiBQeU9iamVjdEdldE1l dGhvZCAqLworLXN0YXRpYyBpbnQgX19QeXhfUHlPYmplY3RfR2V0TWV0aG9kKFB5T2JqZWN0ICpv YmosIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqKm1ldGhvZCkgeworLSAgICBQeU9iamVjdCAq YXR0cjsKKy0jaWYgQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIENZVEhPTl9DT01QSUxJTkdfSU5f Q1BZVEhPTiAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVAKKy0gICAgUHlUeXBlT2JqZWN0ICp0 cCA9IFB5X1RZUEUob2JqKTsKKy0gICAgUHlPYmplY3QgKmRlc2NyOworLSAgICBkZXNjcmdldGZ1 bmMgZiA9IE5VTEw7CistICAgIFB5T2JqZWN0ICoqZGljdHB0ciwgKmRpY3Q7CistICAgIGludCBt ZXRoX2ZvdW5kID0gMDsKKy0gICAgYXNzZXJ0ICgqbWV0aG9kID09IE5VTEwpOworLSAgICBpZiAo dW5saWtlbHkodHAtPnRwX2dldGF0dHJvICE9IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgewor LSAgICAgICAgYXR0ciA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIob2JqLCBuYW1lKTsKKy0g ICAgICAgIGdvdG8gdHJ5X3VucGFjazsKKy0gICAgfQorLSAgICBpZiAodW5saWtlbHkodHAtPnRw X2RpY3QgPT0gTlVMTCkgJiYgdW5saWtlbHkoUHlUeXBlX1JlYWR5KHRwKSA8IDApKSB7CistICAg ICAgICByZXR1cm4gMDsKKy0gICAgfQorLSAgICBkZXNjciA9IF9QeVR5cGVfTG9va3VwKHRwLCBu YW1lKTsKKy0gICAgaWYgKGxpa2VseShkZXNjciAhPSBOVUxMKSkgeworLSAgICAgICAgUHlfSU5D UkVGKGRlc2NyKTsKKy0jaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICAgICAgICAjaWZkZWYg X19QeXhfQ3lGdW5jdGlvbl9VU0VECistICAgICAgICBpZiAobGlrZWx5KFB5RnVuY3Rpb25fQ2hl Y2soZGVzY3IpIHx8IChQeV9UWVBFKGRlc2NyKSA9PSAmUHlNZXRob2REZXNjcl9UeXBlKSB8fCBf X1B5eF9DeUZ1bmN0aW9uX0NoZWNrKGRlc2NyKSkpCistICAgICAgICAjZWxzZQorLSAgICAgICAg aWYgKGxpa2VseShQeUZ1bmN0aW9uX0NoZWNrKGRlc2NyKSB8fCAoUHlfVFlQRShkZXNjcikgPT0g JlB5TWV0aG9kRGVzY3JfVHlwZSkpKQorLSAgICAgICAgI2VuZGlmCistI2Vsc2UKKy0gICAgICAg ICNpZmRlZiBfX1B5eF9DeUZ1bmN0aW9uX1VTRUQKKy0gICAgICAgIGlmIChsaWtlbHkoUHlGdW5j dGlvbl9DaGVjayhkZXNjcikgfHwgX19QeXhfQ3lGdW5jdGlvbl9DaGVjayhkZXNjcikpKQorLSAg ICAgICAgI2Vsc2UKKy0gICAgICAgIGlmIChsaWtlbHkoUHlGdW5jdGlvbl9DaGVjayhkZXNjcikp KQorLSAgICAgICAgI2VuZGlmCisgI2VuZGlmCistICAgICAgICB7CistICAgICAgICAgICAgbWV0 aF9mb3VuZCA9IDE7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIGYgPSBQeV9UWVBF KGRlc2NyKS0+dHBfZGVzY3JfZ2V0OworLSAgICAgICAgICAgIGlmIChmICE9IE5VTEwgJiYgUHlE ZXNjcl9Jc0RhdGEoZGVzY3IpKSB7CistICAgICAgICAgICAgICAgIGF0dHIgPSBmKGRlc2NyLCBv YmosIChQeU9iamVjdCAqKVB5X1RZUEUob2JqKSk7CistICAgICAgICAgICAgICAgIFB5X0RFQ1JF RihkZXNjcik7CistICAgICAgICAgICAgICAgIGdvdG8gdHJ5X3VucGFjazsKKy0gICAgICAgICAg ICB9CistICAgICAgICB9CistICAgIH0KKy0gICAgZGljdHB0ciA9IF9QeU9iamVjdF9HZXREaWN0 UHRyKG9iaik7CistICAgIGlmIChkaWN0cHRyICE9IE5VTEwgJiYgKGRpY3QgPSAqZGljdHB0cikg IT0gTlVMTCkgeworLSAgICAgICAgUHlfSU5DUkVGKGRpY3QpOworLSAgICAgICAgYXR0ciA9IF9f UHl4X1B5RGljdF9HZXRJdGVtU3RyKGRpY3QsIG5hbWUpOworLSAgICAgICAgaWYgKGF0dHIgIT0g TlVMTCkgeworLSAgICAgICAgICAgIFB5X0lOQ1JFRihhdHRyKTsKKy0gICAgICAgICAgICBQeV9E RUNSRUYoZGljdCk7CistICAgICAgICAgICAgUHlfWERFQ1JFRihkZXNjcik7CistICAgICAgICAg ICAgZ290byB0cnlfdW5wYWNrOworLSAgICAgICAgfQorLSAgICAgICAgUHlfREVDUkVGKGRpY3Qp OworLSAgICB9CistICAgIGlmIChtZXRoX2ZvdW5kKSB7CistICAgICAgICAqbWV0aG9kID0gZGVz Y3I7CistICAgICAgICByZXR1cm4gMTsKKy0gICAgfQorLSAgICBpZiAoZiAhPSBOVUxMKSB7Cist ICAgICAgICBhdHRyID0gZihkZXNjciwgb2JqLCAoUHlPYmplY3QgKilQeV9UWVBFKG9iaikpOwor LSAgICAgICAgUHlfREVDUkVGKGRlc2NyKTsKKy0gICAgICAgIGdvdG8gdHJ5X3VucGFjazsKKy0g ICAgfQorLSAgICBpZiAoZGVzY3IgIT0gTlVMTCkgeworLSAgICAgICAgKm1ldGhvZCA9IGRlc2Ny OworLSAgICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0 dHJpYnV0ZUVycm9yLAorKworKy8qIEdldEJ1aWx0aW5OYW1lICovCisrc3RhdGljIFB5T2JqZWN0 ICpfX1B5eF9HZXRCdWlsdGluTmFtZShQeU9iamVjdCAqbmFtZSkgeworKyAgICBQeU9iamVjdCog cmVzdWx0ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF9iLCBuYW1lKTsKKysgICAg aWYgKHVubGlrZWx5KCFyZXN1bHQpKSB7CisrICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTmFt ZUVycm9yLAorICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgICAgICAgICAgICAgICIn JS41MHMnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICclVSciLAorLSAgICAgICAgICAgICAgICAg dHAtPnRwX25hbWUsIG5hbWUpOworLSNlbHNlCistICAgICAgICAgICAgICAgICAiJyUuNTBzJyBv YmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnJS40MDBzJyIsCistICAgICAgICAgICAgICAgICB0cC0+ dHBfbmFtZSwgUHlTdHJpbmdfQVNfU1RSSU5HKG5hbWUpKTsKKy0jZW5kaWYKKy0gICAgcmV0dXJu IDA7CisrICAgICAgICAgICAgIm5hbWUgJyVVJyBpcyBub3QgZGVmaW5lZCIsIG5hbWUpOworICNl bHNlCistICAgIGF0dHIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG9iaiwgbmFtZSk7Cist ICAgIGdvdG8gdHJ5X3VucGFjazsKKysgICAgICAgICAgICAibmFtZSAnJS4yMDBzJyBpcyBub3Qg ZGVmaW5lZCIsIFB5U3RyaW5nX0FTX1NUUklORyhuYW1lKSk7CisgI2VuZGlmCistdHJ5X3VucGFj azoKKy0jaWYgQ1lUSE9OX1VOUEFDS19NRVRIT0RTCistICAgIGlmIChsaWtlbHkoYXR0cikgJiYg UHlNZXRob2RfQ2hlY2soYXR0cikgJiYgbGlrZWx5KFB5TWV0aG9kX0dFVF9TRUxGKGF0dHIpID09 IG9iaikpIHsKKy0gICAgICAgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihhdHRyKTsKKy0gICAgICAgIFB5X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBQeV9E RUNSRUYoYXR0cik7CistICAgICAgICAqbWV0aG9kID0gZnVuY3Rpb247CistICAgICAgICByZXR1 cm4gMTsKKyAgICAgfQorLSNlbmRpZgorLSAgICAqbWV0aG9kID0gYXR0cjsKKy0gICAgcmV0dXJu IDA7CistfQorLQorLS8qIFB5T2JqZWN0Q2FsbE1ldGhvZDEgKi8KKy1zdGF0aWMgUHlPYmplY3Qq IF9fUHl4X19QeU9iamVjdF9DYWxsTWV0aG9kMShQeU9iamVjdCogbWV0aG9kLCBQeU9iamVjdCog YXJnKSB7CistICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KG1ldGhvZCwgYXJnKTsKKy0gICAgUHlfREVDUkVGKG1ldGhvZCk7CisgICAgIHJldHVybiByZXN1 bHQ7CisgfQorLXN0YXRpYyBQeU9iamVjdCogX19QeXhfUHlPYmplY3RfQ2FsbE1ldGhvZDEoUHlP YmplY3QqIG9iaiwgUHlPYmplY3QqIG1ldGhvZF9uYW1lLCBQeU9iamVjdCogYXJnKSB7CistICAg IFB5T2JqZWN0ICptZXRob2QgPSBOVUxMLCAqcmVzdWx0OworLSAgICBpbnQgaXNfbWV0aG9kID0g X19QeXhfUHlPYmplY3RfR2V0TWV0aG9kKG9iaiwgbWV0aG9kX25hbWUsICZtZXRob2QpOworLSAg ICBpZiAobGlrZWx5KGlzX21ldGhvZCkpIHsKKy0gICAgICAgIHJlc3VsdCA9IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhtZXRob2QsIG9iaiwgYXJnKTsKKy0gICAgICAgIFB5X0RFQ1JFRihtZXRo b2QpOworLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKy0gICAgfQorLSAgICBpZiAodW5saWtlbHko IW1ldGhvZCkpIHJldHVybiBOVUxMOworLSAgICByZXR1cm4gX19QeXhfX1B5T2JqZWN0X0NhbGxN ZXRob2QxKG1ldGhvZCwgYXJnKTsKKy19CisgCistLyogYXBwZW5kICovCistc3RhdGljIENZVEhP Tl9JTkxJTkUgaW50IF9fUHl4X1B5T2JqZWN0X0FwcGVuZChQeU9iamVjdCogTCwgUHlPYmplY3Qq IHgpIHsKKy0gICAgaWYgKGxpa2VseShQeUxpc3RfQ2hlY2tFeGFjdChMKSkpIHsKKy0gICAgICAg IGlmICh1bmxpa2VseShfX1B5eF9QeUxpc3RfQXBwZW5kKEwsIHgpIDwgMCkpIHJldHVybiAtMTsK Ky0gICAgfSBlbHNlIHsKKy0gICAgICAgIFB5T2JqZWN0KiByZXR2YWwgPSBfX1B5eF9QeU9iamVj dF9DYWxsTWV0aG9kMShMLCBfX3B5eF9uX3NfYXBwZW5kLCB4KTsKKy0gICAgICAgIGlmICh1bmxp a2VseSghcmV0dmFsKSkKKy0gICAgICAgICAgICByZXR1cm4gLTE7CistICAgICAgICBQeV9ERUNS RUYocmV0dmFsKTsKKy0gICAgfQorLSAgICByZXR1cm4gMDsKKysvKiBQeURpY3RWZXJzaW9uaW5n ICovCisrI2lmIENZVEhPTl9VU0VfRElDVF9WRVJTSU9OUyAmJiBDWVRIT05fVVNFX1RZUEVfU0xP VFMKKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQWV9VSU5UNjRfVCBfX1B5eF9nZXRfdHBfZGljdF92 ZXJzaW9uKFB5T2JqZWN0ICpvYmopIHsKKysgICAgUHlPYmplY3QgKmRpY3QgPSBQeV9UWVBFKG9i aiktPnRwX2RpY3Q7CisrICAgIHJldHVybiBsaWtlbHkoZGljdCkgPyBfX1BZWF9HRVRfRElDVF9W RVJTSU9OKGRpY3QpIDogMDsKKyB9CistCistLyogUHlPYmplY3RDYWxsTm9BcmcgKi8KKytzdGF0 aWMgQ1lUSE9OX0lOTElORSBQWV9VSU5UNjRfVCBfX1B5eF9nZXRfb2JqZWN0X2RpY3RfdmVyc2lv bihQeU9iamVjdCAqb2JqKSB7CisrICAgIFB5T2JqZWN0ICoqZGljdHB0ciA9IE5VTEw7CisrICAg IFB5X3NzaXplX3Qgb2Zmc2V0ID0gUHlfVFlQRShvYmopLT50cF9kaWN0b2Zmc2V0OworKyAgICBp ZiAob2Zmc2V0KSB7CisgI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTgorLXN0YXRpYyBD WVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoUHlPYmplY3Qg KmZ1bmMpIHsKKy0jaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCistICAgIGlmIChQeUZ1bmN0aW9uX0No ZWNrKGZ1bmMpKSB7CistICAgICAgICByZXR1cm4gX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChm dW5jLCBOVUxMLCAwKTsKKy0gICAgfQorLSNlbmRpZgorLSNpZmRlZiBfX1B5eF9DeUZ1bmN0aW9u X1VTRUQKKy0gICAgaWYgKGxpa2VseShQeUNGdW5jdGlvbl9DaGVjayhmdW5jKSB8fCBfX1B5eF9D eUZ1bmN0aW9uX0NoZWNrKGZ1bmMpKSkKKysgICAgICAgIGRpY3RwdHIgPSAobGlrZWx5KG9mZnNl dCA+IDApKSA/IChQeU9iamVjdCAqKikgKChjaGFyICopb2JqICsgb2Zmc2V0KSA6IF9QeU9iamVj dF9HZXREaWN0UHRyKG9iaik7CisgI2Vsc2UKKy0gICAgaWYgKGxpa2VseShQeUNGdW5jdGlvbl9D aGVjayhmdW5jKSkpCisrICAgICAgICBkaWN0cHRyID0gX1B5T2JqZWN0X0dldERpY3RQdHIob2Jq KTsKKyAjZW5kaWYKKy0gICAgeworLSAgICAgICAgaWYgKGxpa2VseShQeUNGdW5jdGlvbl9HRVRf RkxBR1MoZnVuYykgJiBNRVRIX05PQVJHUykpIHsKKy0gICAgICAgICAgICByZXR1cm4gX19QeXhf UHlPYmplY3RfQ2FsbE1ldGhPKGZ1bmMsIE5VTEwpOworLSAgICAgICAgfQorICAgICB9CistICAg IHJldHVybiBfX1B5eF9QeU9iamVjdF9DYWxsKGZ1bmMsIF9fcHl4X2VtcHR5X3R1cGxlLCBOVUxM KTsKKysgICAgcmV0dXJuIChkaWN0cHRyICYmICpkaWN0cHRyKSA/IF9fUFlYX0dFVF9ESUNUX1ZF UlNJT04oKmRpY3RwdHIpIDogMDsKKyt9Cisrc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4 X29iamVjdF9kaWN0X3ZlcnNpb25fbWF0Y2hlcyhQeU9iamVjdCogb2JqLCBQWV9VSU5UNjRfVCB0 cF9kaWN0X3ZlcnNpb24sIFBZX1VJTlQ2NF9UIG9ial9kaWN0X3ZlcnNpb24pIHsKKysgICAgUHlP YmplY3QgKmRpY3QgPSBQeV9UWVBFKG9iaiktPnRwX2RpY3Q7CisrICAgIGlmICh1bmxpa2VseSgh ZGljdCkgfHwgdW5saWtlbHkodHBfZGljdF92ZXJzaW9uICE9IF9fUFlYX0dFVF9ESUNUX1ZFUlNJ T04oZGljdCkpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiBvYmpfZGljdF92ZXJz aW9uID09IF9fUHl4X2dldF9vYmplY3RfZGljdF92ZXJzaW9uKG9iaik7CisgfQorICNlbmRpZgor IAorLS8qIEdldEl0ZW1JbnQgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fUHl4X0dldEl0ZW1JbnRf R2VuZXJpYyhQeU9iamVjdCAqbywgUHlPYmplY3QqIGopIHsKKy0gICAgUHlPYmplY3QgKnI7Cist ICAgIGlmICghaikgcmV0dXJuIE5VTEw7CistICAgIHIgPSBQeU9iamVjdF9HZXRJdGVtKG8sIGop OworLSAgICBQeV9ERUNSRUYoaik7CistICAgIHJldHVybiByOworLX0KKy1zdGF0aWMgQ1lUSE9O X0lOTElORSBQeU9iamVjdCAqX19QeXhfR2V0SXRlbUludF9MaXN0X0Zhc3QoUHlPYmplY3QgKm8s IFB5X3NzaXplX3QgaSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIENZVEhPTl9OQ1BfVU5VU0VEIGludCB3cmFwYXJvdW5kLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ1lUSE9OX05DUF9VTlVTRUQgaW50IGJvdW5kc2NoZWNrKSB7CistI2lmIENZVEhPTl9B U1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCistICAgIFB5 X3NzaXplX3Qgd3JhcHBlZF9pID0gaTsKKy0gICAgaWYgKHdyYXBhcm91bmQgJiB1bmxpa2VseShp IDwgMCkpIHsKKy0gICAgICAgIHdyYXBwZWRfaSArPSBQeUxpc3RfR0VUX1NJWkUobyk7CisrLyog R2V0TW9kdWxlR2xvYmFsTmFtZSAqLworKyNpZiBDWVRIT05fVVNFX0RJQ1RfVkVSU0lPTlMKKytz dGF0aWMgUHlPYmplY3QgKl9fUHl4X19HZXRNb2R1bGVHbG9iYWxOYW1lKFB5T2JqZWN0ICpuYW1l LCBQWV9VSU5UNjRfVCAqZGljdF92ZXJzaW9uLCBQeU9iamVjdCAqKmRpY3RfY2FjaGVkX3ZhbHVl KQorKyNlbHNlCisrc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QgKl9fUHl4X19HZXRNb2R1 bGVHbG9iYWxOYW1lKFB5T2JqZWN0ICpuYW1lKQorKyNlbmRpZgorK3sKKysgICAgUHlPYmplY3Qg KnJlc3VsdDsKKysjaWYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCisrI2lmIENZVEhPTl9D T01QSUxJTkdfSU5fQ1BZVEhPTiAmJiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDUwMEExCisrICAg IHJlc3VsdCA9IF9QeURpY3RfR2V0SXRlbV9Lbm93bkhhc2goX19weXhfZCwgbmFtZSwgKChQeUFT Q0lJT2JqZWN0ICopIG5hbWUpLT5oYXNoKTsKKysgICAgX19QWVhfVVBEQVRFX0RJQ1RfQ0FDSEUo X19weXhfZCwgcmVzdWx0LCAqZGljdF9jYWNoZWRfdmFsdWUsICpkaWN0X3ZlcnNpb24pCisrICAg IGlmIChsaWtlbHkocmVzdWx0KSkgeworKyAgICAgICAgcmV0dXJuIF9fUHl4X05ld1JlZihyZXN1 bHQpOworKyAgICB9IGVsc2UgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSB7CisrICAg ICAgICByZXR1cm4gTlVMTDsKKyAgICAgfQorLSAgICBpZiAoKCFib3VuZHNjaGVjaykgfHwgbGlr ZWx5KF9fUHl4X2lzX3ZhbGlkX2luZGV4KHdyYXBwZWRfaSwgUHlMaXN0X0dFVF9TSVpFKG8pKSkp IHsKKy0gICAgICAgIFB5T2JqZWN0ICpyID0gUHlMaXN0X0dFVF9JVEVNKG8sIHdyYXBwZWRfaSk7 CistICAgICAgICBQeV9JTkNSRUYocik7CistICAgICAgICByZXR1cm4gcjsKKysjZWxzZQorKyAg ICByZXN1bHQgPSBQeURpY3RfR2V0SXRlbShfX3B5eF9kLCBuYW1lKTsKKysgICAgX19QWVhfVVBE QVRFX0RJQ1RfQ0FDSEUoX19weXhfZCwgcmVzdWx0LCAqZGljdF9jYWNoZWRfdmFsdWUsICpkaWN0 X3ZlcnNpb24pCisrICAgIGlmIChsaWtlbHkocmVzdWx0KSkgeworKyAgICAgICAgcmV0dXJuIF9f UHl4X05ld1JlZihyZXN1bHQpOworKyAgICB9CisrI2VuZGlmCisrI2Vsc2UKKysgICAgcmVzdWx0 ID0gUHlPYmplY3RfR2V0SXRlbShfX3B5eF9kLCBuYW1lKTsKKysgICAgX19QWVhfVVBEQVRFX0RJ Q1RfQ0FDSEUoX19weXhfZCwgcmVzdWx0LCAqZGljdF9jYWNoZWRfdmFsdWUsICpkaWN0X3ZlcnNp b24pCisrICAgIGlmIChsaWtlbHkocmVzdWx0KSkgeworKyAgICAgICAgcmV0dXJuIF9fUHl4X05l d1JlZihyZXN1bHQpOworICAgICB9CistICAgIHJldHVybiBfX1B5eF9HZXRJdGVtSW50X0dlbmVy aWMobywgUHlJbnRfRnJvbVNzaXplX3QoaSkpOworLSNlbHNlCistICAgIHJldHVybiBQeVNlcXVl bmNlX0dldEl0ZW0obywgaSk7CisrICAgIFB5RXJyX0NsZWFyKCk7CisgI2VuZGlmCisrICAgIHJl dHVybiBfX1B5eF9HZXRCdWlsdGluTmFtZShuYW1lKTsKKyB9Cistc3RhdGljIENZVEhPTl9JTkxJ TkUgUHlPYmplY3QgKl9fUHl4X0dldEl0ZW1JbnRfVHVwbGVfRmFzdChQeU9iamVjdCAqbywgUHlf c3NpemVfdCBpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ1lUSE9OX05DUF9VTlVTRUQgaW50IHdyYXBhcm91bmQsCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDWVRIT05fTkNQX1VOVVNFRCBpbnQgYm91bmRzY2hlY2spIHsKKy0jaWYgQ1lUSE9OX0FTU1VN RV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMKKy0gICAgUHlfc3Np emVfdCB3cmFwcGVkX2kgPSBpOworLSAgICBpZiAod3JhcGFyb3VuZCAmIHVubGlrZWx5KGkgPCAw KSkgeworLSAgICAgICAgd3JhcHBlZF9pICs9IFB5VHVwbGVfR0VUX1NJWkUobyk7CisrCisrLyog UHlGdW5jdGlvbkZhc3RDYWxsICovCisrI2lmIENZVEhPTl9GQVNUX1BZQ0FMTAorK3N0YXRpYyBQ eU9iamVjdCogX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbE5vS3coUHlDb2RlT2JqZWN0ICpjbywg UHlPYmplY3QgKiphcmdzLCBQeV9zc2l6ZV90IG5hLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmdsb2JhbHMpIHsKKysgICAgUHlGcmFt ZU9iamVjdCAqZjsKKysgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gX19QeXhfUHlUaHJlYWRT dGF0ZV9DdXJyZW50OworKyAgICBQeU9iamVjdCAqKmZhc3Rsb2NhbHM7CisrICAgIFB5X3NzaXpl X3QgaTsKKysgICAgUHlPYmplY3QgKnJlc3VsdDsKKysgICAgYXNzZXJ0KGdsb2JhbHMgIT0gTlVM TCk7CisrICAgIC8qIFhYWCBQZXJoYXBzIHdlIHNob3VsZCBjcmVhdGUgYSBzcGVjaWFsaXplZAor KyAgICAgICBQeUZyYW1lX05ldygpIHRoYXQgZG9lc24ndCB0YWtlIGxvY2FscywgYnV0IGRvZXMK KysgICAgICAgdGFrZSBidWlsdGlucyB3aXRob3V0IHNhbml0eSBjaGVja2luZyB0aGVtLgorKyAg ICAgICAqLworKyAgICBhc3NlcnQodHN0YXRlICE9IE5VTEwpOworKyAgICBmID0gUHlGcmFtZV9O ZXcodHN0YXRlLCBjbywgZ2xvYmFscywgTlVMTCk7CisrICAgIGlmIChmID09IE5VTEwpIHsKKysg ICAgICAgIHJldHVybiBOVUxMOworICAgICB9CistICAgIGlmICgoIWJvdW5kc2NoZWNrKSB8fCBs aWtlbHkoX19QeXhfaXNfdmFsaWRfaW5kZXgod3JhcHBlZF9pLCBQeVR1cGxlX0dFVF9TSVpFKG8p KSkpIHsKKy0gICAgICAgIFB5T2JqZWN0ICpyID0gUHlUdXBsZV9HRVRfSVRFTShvLCB3cmFwcGVk X2kpOworLSAgICAgICAgUHlfSU5DUkVGKHIpOworLSAgICAgICAgcmV0dXJuIHI7CisrICAgIGZh c3Rsb2NhbHMgPSBfX1B5eF9QeUZyYW1lX0dldExvY2Fsc3BsdXMoZik7CisrICAgIGZvciAoaSA9 IDA7IGkgPCBuYTsgaSsrKSB7CisrICAgICAgICBQeV9JTkNSRUYoKmFyZ3MpOworKyAgICAgICAg ZmFzdGxvY2Fsc1tpXSA9ICphcmdzKys7CisgICAgIH0KKy0gICAgcmV0dXJuIF9fUHl4X0dldEl0 ZW1JbnRfR2VuZXJpYyhvLCBQeUludF9Gcm9tU3NpemVfdChpKSk7CistI2Vsc2UKKy0gICAgcmV0 dXJuIFB5U2VxdWVuY2VfR2V0SXRlbShvLCBpKTsKKy0jZW5kaWYKKysgICAgcmVzdWx0ID0gUHlF dmFsX0V2YWxGcmFtZUV4KGYsMCk7CisrICAgICsrdHN0YXRlLT5yZWN1cnNpb25fZGVwdGg7Cisr ICAgIFB5X0RFQ1JFRihmKTsKKysgICAgLS10c3RhdGUtPnJlY3Vyc2lvbl9kZXB0aDsKKysgICAg cmV0dXJuIHJlc3VsdDsKKyB9Cistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QgKl9fUHl4 X0dldEl0ZW1JbnRfRmFzdChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBpLCBpbnQgaXNfbGlzdCwK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENZ VEhPTl9OQ1BfVU5VU0VEIGludCB3cmFwYXJvdW5kLAorLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX05DUF9VTlVTRUQgaW50IGJvdW5k c2NoZWNrKSB7CistI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9J RF9CT1JST1dFRF9SRUZTICYmIENZVEhPTl9VU0VfVFlQRV9TTE9UUworLSAgICBpZiAoaXNfbGlz dCB8fCBQeUxpc3RfQ2hlY2tFeGFjdChvKSkgeworLSAgICAgICAgUHlfc3NpemVfdCBuID0gKCgh d3JhcGFyb3VuZCkgfCBsaWtlbHkoaSA+PSAwKSkgPyBpIDogaSArIFB5TGlzdF9HRVRfU0laRShv KTsKKy0gICAgICAgIGlmICgoIWJvdW5kc2NoZWNrKSB8fCAobGlrZWx5KF9fUHl4X2lzX3ZhbGlk X2luZGV4KG4sIFB5TGlzdF9HRVRfU0laRShvKSkpKSkgeworLSAgICAgICAgICAgIFB5T2JqZWN0 ICpyID0gUHlMaXN0X0dFVF9JVEVNKG8sIG4pOworLSAgICAgICAgICAgIFB5X0lOQ1JFRihyKTsK Ky0gICAgICAgICAgICByZXR1cm4gcjsKKysjaWYgMSB8fCBQWV9WRVJTSU9OX0hFWCA8IDB4MDMw NjAwQjEKKytzdGF0aWMgUHlPYmplY3QgKl9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGxEaWN0KFB5 T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqKmFyZ3MsIFB5X3NzaXplX3QgbmFyZ3MsIFB5T2JqZWN0 ICprd2FyZ3MpIHsKKysgICAgUHlDb2RlT2JqZWN0ICpjbyA9IChQeUNvZGVPYmplY3QgKilQeUZ1 bmN0aW9uX0dFVF9DT0RFKGZ1bmMpOworKyAgICBQeU9iamVjdCAqZ2xvYmFscyA9IFB5RnVuY3Rp b25fR0VUX0dMT0JBTFMoZnVuYyk7CisrICAgIFB5T2JqZWN0ICphcmdkZWZzID0gUHlGdW5jdGlv bl9HRVRfREVGQVVMVFMoZnVuYyk7CisrICAgIFB5T2JqZWN0ICpjbG9zdXJlOworKyNpZiBQWV9N QUpPUl9WRVJTSU9OID49IDMKKysgICAgUHlPYmplY3QgKmt3ZGVmczsKKysjZW5kaWYKKysgICAg UHlPYmplY3QgKmt3dHVwbGUsICoqazsKKysgICAgUHlPYmplY3QgKipkOworKyAgICBQeV9zc2l6 ZV90IG5kOworKyAgICBQeV9zc2l6ZV90IG5rOworKyAgICBQeU9iamVjdCAqcmVzdWx0OworKyAg ICBhc3NlcnQoa3dhcmdzID09IE5VTEwgfHwgUHlEaWN0X0NoZWNrKGt3YXJncykpOworKyAgICBu ayA9IGt3YXJncyA/IFB5RGljdF9TaXplKGt3YXJncykgOiAwOworKyAgICBpZiAoUHlfRW50ZXJS ZWN1cnNpdmVDYWxsKChjaGFyKikiIHdoaWxlIGNhbGxpbmcgYSBQeXRob24gb2JqZWN0IikpIHsK KysgICAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrICAgIGlmICgKKysjaWYgUFlfTUFKT1Jf VkVSU0lPTiA+PSAzCisrICAgICAgICAgICAgY28tPmNvX2t3b25seWFyZ2NvdW50ID09IDAgJiYK KysjZW5kaWYKKysgICAgICAgICAgICBsaWtlbHkoa3dhcmdzID09IE5VTEwgfHwgbmsgPT0gMCkg JiYKKysgICAgICAgICAgICBjby0+Y29fZmxhZ3MgPT0gKENPX09QVElNSVpFRCB8IENPX05FV0xP Q0FMUyB8IENPX05PRlJFRSkpIHsKKysgICAgICAgIGlmIChhcmdkZWZzID09IE5VTEwgJiYgY28t PmNvX2FyZ2NvdW50ID09IG5hcmdzKSB7CisrICAgICAgICAgICAgcmVzdWx0ID0gX19QeXhfUHlG dW5jdGlvbl9GYXN0Q2FsbE5vS3coY28sIGFyZ3MsIG5hcmdzLCBnbG9iYWxzKTsKKysgICAgICAg ICAgICBnb3RvIGRvbmU7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIGlmIChuYXJncyA9PSAw ICYmIGFyZ2RlZnMgIT0gTlVMTAorKyAgICAgICAgICAgICAgICAgJiYgY28tPmNvX2FyZ2NvdW50 ID09IFB5X1NJWkUoYXJnZGVmcykpIHsKKysgICAgICAgICAgICAvKiBmdW5jdGlvbiBjYWxsZWQg d2l0aCBubyBhcmd1bWVudHMsIGJ1dCBhbGwgcGFyYW1ldGVycyBoYXZlCisrICAgICAgICAgICAg ICAgYSBkZWZhdWx0IHZhbHVlOiB1c2UgZGVmYXVsdCB2YWx1ZXMgYXMgYXJndW1lbnRzIC4qLwor KyAgICAgICAgICAgIGFyZ3MgPSAmUHlUdXBsZV9HRVRfSVRFTShhcmdkZWZzLCAwKTsKKysgICAg ICAgICAgICByZXN1bHQgPV9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGxOb0t3KGNvLCBhcmdzLCBQ eV9TSVpFKGFyZ2RlZnMpLCBnbG9iYWxzKTsKKysgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAg ICAgICB9CisgICAgIH0KKy0gICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVja0V4YWN0KG8pKSB7Cist ICAgICAgICBQeV9zc2l6ZV90IG4gPSAoKCF3cmFwYXJvdW5kKSB8IGxpa2VseShpID49IDApKSA/ IGkgOiBpICsgUHlUdXBsZV9HRVRfU0laRShvKTsKKy0gICAgICAgIGlmICgoIWJvdW5kc2NoZWNr KSB8fCBsaWtlbHkoX19QeXhfaXNfdmFsaWRfaW5kZXgobiwgUHlUdXBsZV9HRVRfU0laRShvKSkp KSB7CistICAgICAgICAgICAgUHlPYmplY3QgKnIgPSBQeVR1cGxlX0dFVF9JVEVNKG8sIG4pOwor LSAgICAgICAgICAgIFB5X0lOQ1JFRihyKTsKKy0gICAgICAgICAgICByZXR1cm4gcjsKKysgICAg aWYgKGt3YXJncyAhPSBOVUxMKSB7CisrICAgICAgICBQeV9zc2l6ZV90IHBvcywgaTsKKysgICAg ICAgIGt3dHVwbGUgPSBQeVR1cGxlX05ldygyICogbmspOworKyAgICAgICAgaWYgKGt3dHVwbGUg PT0gTlVMTCkgeworKyAgICAgICAgICAgIHJlc3VsdCA9IE5VTEw7CisrICAgICAgICAgICAgZ290 byBkb25lOworICAgICAgICAgfQorLSAgICB9IGVsc2UgeworLSAgICAgICAgUHlTZXF1ZW5jZU1l dGhvZHMgKm0gPSBQeV9UWVBFKG8pLT50cF9hc19zZXF1ZW5jZTsKKy0gICAgICAgIGlmIChsaWtl bHkobSAmJiBtLT5zcV9pdGVtKSkgeworLSAgICAgICAgICAgIGlmICh3cmFwYXJvdW5kICYmIHVu bGlrZWx5KGkgPCAwKSAmJiBsaWtlbHkobS0+c3FfbGVuZ3RoKSkgeworLSAgICAgICAgICAgICAg ICBQeV9zc2l6ZV90IGwgPSBtLT5zcV9sZW5ndGgobyk7CistICAgICAgICAgICAgICAgIGlmIChs aWtlbHkobCA+PSAwKSkgeworLSAgICAgICAgICAgICAgICAgICAgaSArPSBsOworLSAgICAgICAg ICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRp b25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorLSAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBOVUxMOworLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKy0gICAg ICAgICAgICAgICAgfQorLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICByZXR1cm4gbS0+c3Ff aXRlbShvLCBpKTsKKysgICAgICAgIGsgPSAmUHlUdXBsZV9HRVRfSVRFTShrd3R1cGxlLCAwKTsK KysgICAgICAgIHBvcyA9IGkgPSAwOworKyAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KGt3YXJn cywgJnBvcywgJmtbaV0sICZrW2krMV0pKSB7CisrICAgICAgICAgICAgUHlfSU5DUkVGKGtbaV0p OworKyAgICAgICAgICAgIFB5X0lOQ1JFRihrW2krMV0pOworKyAgICAgICAgICAgIGkgKz0gMjsK KyAgICAgICAgIH0KKysgICAgICAgIG5rID0gaSAvIDI7CisgICAgIH0KKy0jZWxzZQorLSAgICBp ZiAoaXNfbGlzdCB8fCBQeVNlcXVlbmNlX0NoZWNrKG8pKSB7CistICAgICAgICByZXR1cm4gUHlT ZXF1ZW5jZV9HZXRJdGVtKG8sIGkpOworKyAgICBlbHNlIHsKKysgICAgICAgIGt3dHVwbGUgPSBO VUxMOworKyAgICAgICAgayA9IE5VTEw7CisgICAgIH0KKysgICAgY2xvc3VyZSA9IFB5RnVuY3Rp b25fR0VUX0NMT1NVUkUoZnVuYyk7CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMworKyAgICBr d2RlZnMgPSBQeUZ1bmN0aW9uX0dFVF9LV19ERUZBVUxUUyhmdW5jKTsKKyAjZW5kaWYKKy0gICAg cmV0dXJuIF9fUHl4X0dldEl0ZW1JbnRfR2VuZXJpYyhvLCBQeUludF9Gcm9tU3NpemVfdChpKSk7 CistfQorLQorLS8qIERlbEl0ZW1JbnQgKi8KKy1zdGF0aWMgaW50IF9fUHl4X0RlbEl0ZW1fR2Vu ZXJpYyhQeU9iamVjdCAqbywgUHlPYmplY3QgKmopIHsKKy0gICAgaW50IHI7CistICAgIGlmICgh aikgcmV0dXJuIC0xOworLSAgICByID0gUHlPYmplY3RfRGVsSXRlbShvLCBqKTsKKy0gICAgUHlf REVDUkVGKGopOworLSAgICByZXR1cm4gcjsKKy19Cistc3RhdGljIENZVEhPTl9JTkxJTkUgaW50 IF9fUHl4X0RlbEl0ZW1JbnRfRmFzdChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBpLAorLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX1VOVVNFRCBp bnQgaXNfbGlzdCwgQ1lUSE9OX05DUF9VTlVTRUQgaW50IHdyYXBhcm91bmQpIHsKKy0jaWYgIUNZ VEhPTl9VU0VfVFlQRV9TTE9UUworLSAgICBpZiAoaXNfbGlzdCB8fCBQeVNlcXVlbmNlX0NoZWNr KG8pKSB7CistICAgICAgICByZXR1cm4gUHlTZXF1ZW5jZV9EZWxJdGVtKG8sIGkpOworKyAgICBp ZiAoYXJnZGVmcyAhPSBOVUxMKSB7CisrICAgICAgICBkID0gJlB5VHVwbGVfR0VUX0lURU0oYXJn ZGVmcywgMCk7CisrICAgICAgICBuZCA9IFB5X1NJWkUoYXJnZGVmcyk7CisrICAgIH0KKysgICAg ZWxzZSB7CisrICAgICAgICBkID0gTlVMTDsKKysgICAgICAgIG5kID0gMDsKKyAgICAgfQorKyNp ZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgICAgcmVzdWx0ID0gUHlFdmFsX0V2YWxDb2RlRXgo KFB5T2JqZWN0KiljbywgZ2xvYmFscywgKFB5T2JqZWN0ICopTlVMTCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXJncywgKGludCluYXJncywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaywgKGludCluaywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZCwgKGludCluZCwga3dkZWZzLCBjbG9zdXJlKTsKKyAjZWxzZQorLSAgICBQeVNlcXVlbmNlTWV0 aG9kcyAqbSA9IFB5X1RZUEUobyktPnRwX2FzX3NlcXVlbmNlOworLSAgICBpZiAobGlrZWx5KG0g JiYgbS0+c3FfYXNzX2l0ZW0pKSB7CistICAgICAgICBpZiAod3JhcGFyb3VuZCAmJiB1bmxpa2Vs eShpIDwgMCkgJiYgbGlrZWx5KG0tPnNxX2xlbmd0aCkpIHsKKy0gICAgICAgICAgICBQeV9zc2l6 ZV90IGwgPSBtLT5zcV9sZW5ndGgobyk7CistICAgICAgICAgICAgaWYgKGxpa2VseShsID49IDAp KSB7CistICAgICAgICAgICAgICAgIGkgKz0gbDsKKy0gICAgICAgICAgICB9IGVsc2UgeworLSAg ICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dF cnJvcikpCistICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CistICAgICAgICAgICAgICAg IFB5RXJyX0NsZWFyKCk7CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLSAgICAgICAgcmV0 dXJuIG0tPnNxX2Fzc19pdGVtKG8sIGksIChQeU9iamVjdCAqKU5VTEwpOworKyAgICByZXN1bHQg PSBQeUV2YWxfRXZhbENvZGVFeChjbywgZ2xvYmFscywgKFB5T2JqZWN0ICopTlVMTCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncywgKGludCluYXJncywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaywgKGludCluaywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZCwgKGludCluZCwgY2xvc3VyZSk7CisrI2VuZGlmCisrICAgIFB5X1hERUNSRUYo a3d0dXBsZSk7CisrZG9uZToKKysgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CisrICAgIHJl dHVybiByZXN1bHQ7CisrfQorKyNlbmRpZgorKyNlbmRpZgorKworKy8qIFB5Q0Z1bmN0aW9uRmFz dENhbGwgKi8KKysjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAorK3N0YXRpYyBDWVRIT05fSU5MSU5F IFB5T2JqZWN0ICogX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoUHlPYmplY3QgKmZ1bmNfb2Jq LCBQeU9iamVjdCAqKmFyZ3MsIFB5X3NzaXplX3QgbmFyZ3MpIHsKKysgICAgUHlDRnVuY3Rpb25P YmplY3QgKmZ1bmMgPSAoUHlDRnVuY3Rpb25PYmplY3QqKWZ1bmNfb2JqOworKyAgICBQeUNGdW5j dGlvbiBtZXRoID0gUHlDRnVuY3Rpb25fR0VUX0ZVTkNUSU9OKGZ1bmMpOworKyAgICBQeU9iamVj dCAqc2VsZiA9IFB5Q0Z1bmN0aW9uX0dFVF9TRUxGKGZ1bmMpOworKyAgICBpbnQgZmxhZ3MgPSBQ eUNGdW5jdGlvbl9HRVRfRkxBR1MoZnVuYyk7CisrICAgIGFzc2VydChQeUNGdW5jdGlvbl9DaGVj ayhmdW5jKSk7CisrICAgIGFzc2VydChNRVRIX0ZBU1RDQUxMID09IChmbGFncyAmIH4oTUVUSF9D TEFTUyB8IE1FVEhfU1RBVElDIHwgTUVUSF9DT0VYSVNUIHwgTUVUSF9LRVlXT1JEUyB8IE1FVEhf U1RBQ0tMRVNTKSkpOworKyAgICBhc3NlcnQobmFyZ3MgPj0gMCk7CisrICAgIGFzc2VydChuYXJn cyA9PSAwIHx8IGFyZ3MgIT0gTlVMTCk7CisrICAgIC8qIF9QeUNGdW5jdGlvbl9GYXN0Q2FsbERp Y3QoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LAorKyAgICAgICBi ZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRo ZQorKyAgICAgICBjYWxsZXIgbG9zZXMgaXRzIGV4Y2VwdGlvbiAqLworKyAgICBhc3NlcnQoIVB5 RXJyX09jY3VycmVkKCkpOworKyAgICBpZiAoKFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA3MDBBMCkg fHwgdW5saWtlbHkoZmxhZ3MgJiBNRVRIX0tFWVdPUkRTKSkgeworKyAgICAgICAgcmV0dXJuICgq KChfX1B5eF9QeUNGdW5jdGlvbkZhc3RXaXRoS2V5d29yZHMpKHZvaWQqKW1ldGgpKSAoc2VsZiwg YXJncywgbmFyZ3MsIE5VTEwpOworKyAgICB9IGVsc2UgeworKyAgICAgICAgcmV0dXJuICgqKChf X1B5eF9QeUNGdW5jdGlvbkZhc3QpKHZvaWQqKW1ldGgpKSAoc2VsZiwgYXJncywgbmFyZ3MpOwor ICAgICB9CisrfQorICNlbmRpZgorLSAgICByZXR1cm4gX19QeXhfRGVsSXRlbV9HZW5lcmljKG8s IFB5SW50X0Zyb21Tc2l6ZV90KGkpKTsKKysKKysvKiBQeU9iamVjdENhbGwgKi8KKysjaWYgQ1lU SE9OX0NPTVBJTElOR19JTl9DUFlUSE9OCisrc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3Qq IF9fUHl4X1B5T2JqZWN0X0NhbGwoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcsIFB5T2Jq ZWN0ICprdykgeworKyAgICBQeU9iamVjdCAqcmVzdWx0OworKyAgICB0ZXJuYXJ5ZnVuYyBjYWxs ID0gUHlfVFlQRShmdW5jKS0+dHBfY2FsbDsKKysgICAgaWYgKHVubGlrZWx5KCFjYWxsKSkKKysg ICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsKGZ1bmMsIGFyZywga3cpOworKyAgICBpZiAodW5s aWtlbHkoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKChjaGFyKikiIHdoaWxlIGNhbGxpbmcgYSBQeXRo b24gb2JqZWN0IikpKQorKyAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgIHJlc3VsdCA9ICgqY2Fs bCkoZnVuYywgYXJnLCBrdyk7CisrICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOworKyAgICBp ZiAodW5saWtlbHkoIXJlc3VsdCkgJiYgdW5saWtlbHkoIVB5RXJyX09jY3VycmVkKCkpKSB7Cisr ICAgICAgICBQeUVycl9TZXRTdHJpbmcoCisrICAgICAgICAgICAgUHlFeGNfU3lzdGVtRXJyb3Is CisrICAgICAgICAgICAgIk5VTEwgcmVzdWx0IHdpdGhvdXQgZXJyb3IgaW4gUHlPYmplY3RfQ2Fs bCIpOworKyAgICB9CisrICAgIHJldHVybiByZXN1bHQ7CisgfQorKyNlbmRpZgorIAorLS8qIEtl eXdvcmRTdHJpbmdDaGVjayAqLworLXN0YXRpYyBpbnQgX19QeXhfQ2hlY2tLZXl3b3JkU3RyaW5n cygKKy0gICAgUHlPYmplY3QgKmt3ZGljdCwKKy0gICAgY29uc3QgY2hhciogZnVuY3Rpb25fbmFt ZSwKKy0gICAgaW50IGt3X2FsbG93ZWQpCisrLyogR2V0VG9wbW9zdEV4Y2VwdGlvbiAqLworKyNp ZiBDWVRIT05fVVNFX0VYQ19JTkZPX1NUQUNLCisrc3RhdGljIF9QeUVycl9TdGFja0l0ZW0gKgor K19fUHl4X1B5RXJyX0dldFRvcG1vc3RFeGNlcHRpb24oUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQor IHsKKy0gICAgUHlPYmplY3QqIGtleSA9IDA7CistICAgIFB5X3NzaXplX3QgcG9zID0gMDsKKy0j aWYgQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZCistICAgIGlmICgha3dfYWxsb3dlZCAmJiBQeURp Y3RfTmV4dChrd2RpY3QsICZwb3MsICZrZXksIDApKQorLSAgICAgICAgZ290byBpbnZhbGlkX2tl eXdvcmQ7CistICAgIHJldHVybiAxOworLSNlbHNlCistICAgIHdoaWxlIChQeURpY3RfTmV4dChr d2RpY3QsICZwb3MsICZrZXksIDApKSB7CistICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8 IDMKKy0gICAgICAgIGlmICh1bmxpa2VseSghUHlTdHJpbmdfQ2hlY2soa2V5KSkpCistICAgICAg ICAjZW5kaWYKKy0gICAgICAgICAgICBpZiAodW5saWtlbHkoIVB5VW5pY29kZV9DaGVjayhrZXkp KSkKKy0gICAgICAgICAgICAgICAgZ290byBpbnZhbGlkX2tleXdvcmRfdHlwZTsKKysgICAgX1B5 RXJyX1N0YWNrSXRlbSAqZXhjX2luZm8gPSB0c3RhdGUtPmV4Y19pbmZvOworKyAgICB3aGlsZSAo KGV4Y19pbmZvLT5leGNfdHlwZSA9PSBOVUxMIHx8IGV4Y19pbmZvLT5leGNfdHlwZSA9PSBQeV9O b25lKSAmJgorKyAgICAgICAgICAgZXhjX2luZm8tPnByZXZpb3VzX2l0ZW0gIT0gTlVMTCkKKysg ICAgeworKyAgICAgICAgZXhjX2luZm8gPSBleGNfaW5mby0+cHJldmlvdXNfaXRlbTsKKyAgICAg fQorLSAgICBpZiAoKCFrd19hbGxvd2VkKSAmJiB1bmxpa2VseShrZXkpKQorLSAgICAgICAgZ290 byBpbnZhbGlkX2tleXdvcmQ7CistICAgIHJldHVybiAxOworLWludmFsaWRfa2V5d29yZF90eXBl OgorLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorLSAgICAgICAgIiUuMjAwcygp IGtleXdvcmRzIG11c3QgYmUgc3RyaW5ncyIsIGZ1bmN0aW9uX25hbWUpOworLSAgICByZXR1cm4g MDsKKysgICAgcmV0dXJuIGV4Y19pbmZvOworK30KKyAjZW5kaWYKKy1pbnZhbGlkX2tleXdvcmQ6 CistICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCistICAgICNpZiBQWV9NQUpPUl9W RVJTSU9OIDwgMworLSAgICAgICAgIiUuMjAwcygpIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQg YXJndW1lbnQgJyUuMjAwcyciLAorLSAgICAgICAgZnVuY3Rpb25fbmFtZSwgUHlTdHJpbmdfQXNT dHJpbmcoa2V5KSk7CisrCisrLyogU2F2ZVJlc2V0RXhjZXB0aW9uICovCisrI2lmIENZVEhPTl9G QVNUX1RIUkVBRF9TVEFURQorK3N0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgX19QeXhfX0V4Y2Vw dGlvblNhdmUoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeU9iamVjdCAqKnR5cGUsIFB5T2JqZWN0 ICoqdmFsdWUsIFB5T2JqZWN0ICoqdGIpIHsKKysgICAgI2lmIENZVEhPTl9VU0VfRVhDX0lORk9f U1RBQ0sKKysgICAgX1B5RXJyX1N0YWNrSXRlbSAqZXhjX2luZm8gPSBfX1B5eF9QeUVycl9HZXRU b3Btb3N0RXhjZXB0aW9uKHRzdGF0ZSk7CisrICAgICp0eXBlID0gZXhjX2luZm8tPmV4Y190eXBl OworKyAgICAqdmFsdWUgPSBleGNfaW5mby0+ZXhjX3ZhbHVlOworKyAgICAqdGIgPSBleGNfaW5m by0+ZXhjX3RyYWNlYmFjazsKKyAgICAgI2Vsc2UKKy0gICAgICAgICIlcygpIGdvdCBhbiB1bmV4 cGVjdGVkIGtleXdvcmQgYXJndW1lbnQgJyVVJyIsCistICAgICAgICBmdW5jdGlvbl9uYW1lLCBr ZXkpOworKyAgICAqdHlwZSA9IHRzdGF0ZS0+ZXhjX3R5cGU7CisrICAgICp2YWx1ZSA9IHRzdGF0 ZS0+ZXhjX3ZhbHVlOworKyAgICAqdGIgPSB0c3RhdGUtPmV4Y190cmFjZWJhY2s7CisgICAgICNl bmRpZgorLSAgICByZXR1cm4gMDsKKysgICAgUHlfWElOQ1JFRigqdHlwZSk7CisrICAgIFB5X1hJ TkNSRUYoKnZhbHVlKTsKKysgICAgUHlfWElOQ1JFRigqdGIpOworIH0KKy0KKy0vKiBOb25lICov Cistc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9SYWlzZUNsb3N1cmVOYW1lRXJyb3Io Y29uc3QgY2hhciAqdmFybmFtZSkgeworLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTmFtZUVycm9y LCAiZnJlZSB2YXJpYWJsZSAnJXMnIHJlZmVyZW5jZWQgYmVmb3JlIGFzc2lnbm1lbnQgaW4gZW5j bG9zaW5nIHNjb3BlIiwgdmFybmFtZSk7Cisrc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5 eF9fRXhjZXB0aW9uUmVzZXQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeU9iamVjdCAqdHlwZSwg UHlPYmplY3QgKnZhbHVlLCBQeU9iamVjdCAqdGIpIHsKKysgICAgUHlPYmplY3QgKnRtcF90eXBl LCAqdG1wX3ZhbHVlLCAqdG1wX3RiOworKyAgICAjaWYgQ1lUSE9OX1VTRV9FWENfSU5GT19TVEFD SworKyAgICBfUHlFcnJfU3RhY2tJdGVtICpleGNfaW5mbyA9IHRzdGF0ZS0+ZXhjX2luZm87Cisr ICAgIHRtcF90eXBlID0gZXhjX2luZm8tPmV4Y190eXBlOworKyAgICB0bXBfdmFsdWUgPSBleGNf aW5mby0+ZXhjX3ZhbHVlOworKyAgICB0bXBfdGIgPSBleGNfaW5mby0+ZXhjX3RyYWNlYmFjazsK KysgICAgZXhjX2luZm8tPmV4Y190eXBlID0gdHlwZTsKKysgICAgZXhjX2luZm8tPmV4Y192YWx1 ZSA9IHZhbHVlOworKyAgICBleGNfaW5mby0+ZXhjX3RyYWNlYmFjayA9IHRiOworKyAgICAjZWxz ZQorKyAgICB0bXBfdHlwZSA9IHRzdGF0ZS0+ZXhjX3R5cGU7CisrICAgIHRtcF92YWx1ZSA9IHRz dGF0ZS0+ZXhjX3ZhbHVlOworKyAgICB0bXBfdGIgPSB0c3RhdGUtPmV4Y190cmFjZWJhY2s7Cisr ICAgIHRzdGF0ZS0+ZXhjX3R5cGUgPSB0eXBlOworKyAgICB0c3RhdGUtPmV4Y192YWx1ZSA9IHZh bHVlOworKyAgICB0c3RhdGUtPmV4Y190cmFjZWJhY2sgPSB0YjsKKysgICAgI2VuZGlmCisrICAg IFB5X1hERUNSRUYodG1wX3R5cGUpOworKyAgICBQeV9YREVDUkVGKHRtcF92YWx1ZSk7CisrICAg IFB5X1hERUNSRUYodG1wX3RiKTsKKyB9CisrI2VuZGlmCisgCistLyogUmFpc2VFeGNlcHRpb24g Ki8KKy0jaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKy1zdGF0aWMgdm9pZCBfX1B5eF9SYWlzZShQ eU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZhbHVlLCBQeU9iamVjdCAqdGIsCistICAgICAgICAg ICAgICAgICAgICAgICAgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqY2F1c2UpIHsKKy0gICAgX19Q eXhfUHlUaHJlYWRTdGF0ZV9kZWNsYXJlCistICAgIFB5X1hJTkNSRUYodHlwZSk7CistICAgIGlm ICghdmFsdWUgfHwgdmFsdWUgPT0gUHlfTm9uZSkKKy0gICAgICAgIHZhbHVlID0gTlVMTDsKKy0g ICAgZWxzZQorLSAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKy0gICAgaWYgKCF0YiB8fCB0YiA9 PSBQeV9Ob25lKQorLSAgICAgICAgdGIgPSBOVUxMOworLSAgICBlbHNlIHsKKy0gICAgICAgIFB5 X0lOQ1JFRih0Yik7CistICAgICAgICBpZiAoIVB5VHJhY2VCYWNrX0NoZWNrKHRiKSkgeworLSAg ICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCistICAgICAgICAgICAg ICAgICJyYWlzZTogYXJnIDMgbXVzdCBiZSBhIHRyYWNlYmFjayBvciBOb25lIik7CistICAgICAg ICAgICAgZ290byByYWlzZV9lcnJvcjsKKy0gICAgICAgIH0KKysvKiBQeUVyckV4Y2VwdGlvbk1h dGNoZXMgKi8KKysjaWYgQ1lUSE9OX0ZBU1RfVEhSRUFEX1NUQVRFCisrc3RhdGljIGludCBfX1B5 eF9QeUVycl9FeGNlcHRpb25NYXRjaGVzVHVwbGUoUHlPYmplY3QgKmV4Y190eXBlLCBQeU9iamVj dCAqdHVwbGUpIHsKKysgICAgUHlfc3NpemVfdCBpLCBuOworKyAgICBuID0gUHlUdXBsZV9HRVRf U0laRSh0dXBsZSk7CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMworKyAgICBmb3IgKGk9MDsg aTxuOyBpKyspIHsKKysgICAgICAgIGlmIChleGNfdHlwZSA9PSBQeVR1cGxlX0dFVF9JVEVNKHR1 cGxlLCBpKSkgcmV0dXJuIDE7CisgICAgIH0KKy0gICAgaWYgKFB5VHlwZV9DaGVjayh0eXBlKSkg eworLSNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkKKy0gICAgICAgIGlmICghdmFsdWUpIHsK Ky0gICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CistICAgICAgICAgICAgdmFsdWUgPSBQ eV9Ob25lOworLSAgICAgICAgfQorICNlbmRpZgorLSAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhj ZXB0aW9uKCZ0eXBlLCAmdmFsdWUsICZ0Yik7CistICAgIH0gZWxzZSB7CistICAgICAgICBpZiAo dmFsdWUpIHsKKy0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAor LSAgICAgICAgICAgICAgICAiaW5zdGFuY2UgZXhjZXB0aW9uIG1heSBub3QgaGF2ZSBhIHNlcGFy YXRlIHZhbHVlIik7CistICAgICAgICAgICAgZ290byByYWlzZV9lcnJvcjsKKy0gICAgICAgIH0K Ky0gICAgICAgIHZhbHVlID0gdHlwZTsKKy0gICAgICAgIHR5cGUgPSAoUHlPYmplY3QqKSBQeV9U WVBFKHR5cGUpOworLSAgICAgICAgUHlfSU5DUkVGKHR5cGUpOworLSAgICAgICAgaWYgKCFQeVR5 cGVfSXNTdWJ0eXBlKChQeVR5cGVPYmplY3QgKil0eXBlLCAoUHlUeXBlT2JqZWN0ICopUHlFeGNf QmFzZUV4Y2VwdGlvbikpIHsKKy0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlw ZUVycm9yLAorLSAgICAgICAgICAgICAgICAicmFpc2U6IGV4Y2VwdGlvbiBjbGFzcyBtdXN0IGJl IGEgc3ViY2xhc3Mgb2YgQmFzZUV4Y2VwdGlvbiIpOworLSAgICAgICAgICAgIGdvdG8gcmFpc2Vf ZXJyb3I7CistICAgICAgICB9CisrICAgIGZvciAoaT0wOyBpPG47IGkrKykgeworKyAgICAgICAg aWYgKF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyhleGNfdHlwZSwgUHlUdXBsZV9H RVRfSVRFTSh0dXBsZSwgaSkpKSByZXR1cm4gMTsKKyAgICAgfQorLSAgICBfX1B5eF9QeVRocmVh ZFN0YXRlX2Fzc2lnbgorLSAgICBfX1B5eF9FcnJSZXN0b3JlKHR5cGUsIHZhbHVlLCB0Yik7Cist ICAgIHJldHVybjsKKy1yYWlzZV9lcnJvcjoKKy0gICAgUHlfWERFQ1JFRih2YWx1ZSk7CistICAg IFB5X1hERUNSRUYodHlwZSk7CistICAgIFB5X1hERUNSRUYodGIpOworLSAgICByZXR1cm47Cisr ICAgIHJldHVybiAwOworK30KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQgX19QeXhfUHlFcnJf RXhjZXB0aW9uTWF0Y2hlc0luU3RhdGUoUHlUaHJlYWRTdGF0ZSogdHN0YXRlLCBQeU9iamVjdCog ZXJyKSB7CisrICAgIFB5T2JqZWN0ICpleGNfdHlwZSA9IHRzdGF0ZS0+Y3VyZXhjX3R5cGU7Cisr ICAgIGlmIChleGNfdHlwZSA9PSBlcnIpIHJldHVybiAxOworKyAgICBpZiAodW5saWtlbHkoIWV4 Y190eXBlKSkgcmV0dXJuIDA7CisrICAgIGlmICh1bmxpa2VseShQeVR1cGxlX0NoZWNrKGVycikp KQorKyAgICAgICAgcmV0dXJuIF9fUHl4X1B5RXJyX0V4Y2VwdGlvbk1hdGNoZXNUdXBsZShleGNf dHlwZSwgZXJyKTsKKysgICAgcmV0dXJuIF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hl cyhleGNfdHlwZSwgZXJyKTsKKyB9CisrI2VuZGlmCisrCisrLyogR2V0RXhjZXB0aW9uICovCisr I2lmIENZVEhPTl9GQVNUX1RIUkVBRF9TVEFURQorK3N0YXRpYyBpbnQgX19QeXhfX0dldEV4Y2Vw dGlvbihQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5T2JqZWN0ICoqdHlwZSwgUHlPYmplY3QgKip2 YWx1ZSwgUHlPYmplY3QgKip0YikKKyAjZWxzZQorLXN0YXRpYyB2b2lkIF9fUHl4X1JhaXNlKFB5 T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0ICp0YiwgUHlPYmplY3QgKmNh dXNlKSB7CistICAgIFB5T2JqZWN0KiBvd25lZF9pbnN0YW5jZSA9IE5VTEw7CistICAgIGlmICh0 YiA9PSBQeV9Ob25lKSB7CistICAgICAgICB0YiA9IDA7CistICAgIH0gZWxzZSBpZiAodGIgJiYg IVB5VHJhY2VCYWNrX0NoZWNrKHRiKSkgeworLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhj X1R5cGVFcnJvciwKKy0gICAgICAgICAgICAicmFpc2U6IGFyZyAzIG11c3QgYmUgYSB0cmFjZWJh Y2sgb3IgTm9uZSIpOworK3N0YXRpYyBpbnQgX19QeXhfR2V0RXhjZXB0aW9uKFB5T2JqZWN0ICoq dHlwZSwgUHlPYmplY3QgKip2YWx1ZSwgUHlPYmplY3QgKip0YikKKysjZW5kaWYKKyt7CisrICAg IFB5T2JqZWN0ICpsb2NhbF90eXBlLCAqbG9jYWxfdmFsdWUsICpsb2NhbF90YjsKKysjaWYgQ1lU SE9OX0ZBU1RfVEhSRUFEX1NUQVRFCisrICAgIFB5T2JqZWN0ICp0bXBfdHlwZSwgKnRtcF92YWx1 ZSwgKnRtcF90YjsKKysgICAgbG9jYWxfdHlwZSA9IHRzdGF0ZS0+Y3VyZXhjX3R5cGU7CisrICAg IGxvY2FsX3ZhbHVlID0gdHN0YXRlLT5jdXJleGNfdmFsdWU7CisrICAgIGxvY2FsX3RiID0gdHN0 YXRlLT5jdXJleGNfdHJhY2ViYWNrOworKyAgICB0c3RhdGUtPmN1cmV4Y190eXBlID0gMDsKKysg ICAgdHN0YXRlLT5jdXJleGNfdmFsdWUgPSAwOworKyAgICB0c3RhdGUtPmN1cmV4Y190cmFjZWJh Y2sgPSAwOworKyNlbHNlCisrICAgIFB5RXJyX0ZldGNoKCZsb2NhbF90eXBlLCAmbG9jYWxfdmFs dWUsICZsb2NhbF90Yik7CisrI2VuZGlmCisrICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigm bG9jYWxfdHlwZSwgJmxvY2FsX3ZhbHVlLCAmbG9jYWxfdGIpOworKyNpZiBDWVRIT05fRkFTVF9U SFJFQURfU1RBVEUKKysgICAgaWYgKHVubGlrZWx5KHRzdGF0ZS0+Y3VyZXhjX3R5cGUpKQorKyNl bHNlCisrICAgIGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkKKysjZW5kaWYKKyAgICAg ICAgIGdvdG8gYmFkOworLSAgICB9CistICAgIGlmICh2YWx1ZSA9PSBQeV9Ob25lKQorLSAgICAg ICAgdmFsdWUgPSAwOworLSAgICBpZiAoUHlFeGNlcHRpb25JbnN0YW5jZV9DaGVjayh0eXBlKSkg eworLSAgICAgICAgaWYgKHZhbHVlKSB7CistICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5 RXhjX1R5cGVFcnJvciwKKy0gICAgICAgICAgICAgICAgImluc3RhbmNlIGV4Y2VwdGlvbiBtYXkg bm90IGhhdmUgYSBzZXBhcmF0ZSB2YWx1ZSIpOworKyAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+ PSAzCisrICAgIGlmIChsb2NhbF90YikgeworKyAgICAgICAgaWYgKHVubGlrZWx5KFB5RXhjZXB0 aW9uX1NldFRyYWNlYmFjayhsb2NhbF92YWx1ZSwgbG9jYWxfdGIpIDwgMCkpCisgICAgICAgICAg ICAgZ290byBiYWQ7CistICAgICAgICB9CistICAgICAgICB2YWx1ZSA9IHR5cGU7CistICAgICAg ICB0eXBlID0gKFB5T2JqZWN0KikgUHlfVFlQRSh2YWx1ZSk7CistICAgIH0gZWxzZSBpZiAoUHlF eGNlcHRpb25DbGFzc19DaGVjayh0eXBlKSkgeworLSAgICAgICAgUHlPYmplY3QgKmluc3RhbmNl X2NsYXNzID0gTlVMTDsKKy0gICAgICAgIGlmICh2YWx1ZSAmJiBQeUV4Y2VwdGlvbkluc3RhbmNl X0NoZWNrKHZhbHVlKSkgeworLSAgICAgICAgICAgIGluc3RhbmNlX2NsYXNzID0gKFB5T2JqZWN0 KikgUHlfVFlQRSh2YWx1ZSk7CistICAgICAgICAgICAgaWYgKGluc3RhbmNlX2NsYXNzICE9IHR5 cGUpIHsKKy0gICAgICAgICAgICAgICAgaW50IGlzX3N1YmNsYXNzID0gUHlPYmplY3RfSXNTdWJj bGFzcyhpbnN0YW5jZV9jbGFzcywgdHlwZSk7CistICAgICAgICAgICAgICAgIGlmICghaXNfc3Vi Y2xhc3MpIHsKKy0gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlX2NsYXNzID0gTlVMTDsKKy0g ICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1bmxpa2VseShpc19zdWJjbGFzcyA9PSAtMSkpIHsK Ky0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFkOworLSAgICAgICAgICAgICAgICB9IGVsc2Ug eworLSAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGluc3RhbmNlX2NsYXNzOworLSAgICAgICAg ICAgICAgICB9CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLSAgICAgICAgaWYgKCFpbnN0 YW5jZV9jbGFzcykgeworLSAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzOworLSAgICAgICAgICAg IGlmICghdmFsdWUpCistICAgICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKKy0g ICAgICAgICAgICBlbHNlIGlmIChQeVR1cGxlX0NoZWNrKHZhbHVlKSkgeworLSAgICAgICAgICAg ICAgICBQeV9JTkNSRUYodmFsdWUpOworLSAgICAgICAgICAgICAgICBhcmdzID0gdmFsdWU7Cist ICAgICAgICAgICAgfSBlbHNlCistICAgICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX1BhY2so MSwgdmFsdWUpOworLSAgICAgICAgICAgIGlmICghYXJncykKKy0gICAgICAgICAgICAgICAgZ290 byBiYWQ7CistICAgICAgICAgICAgb3duZWRfaW5zdGFuY2UgPSBQeU9iamVjdF9DYWxsKHR5cGUs IGFyZ3MsIE5VTEwpOworLSAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKy0gICAgICAgICAg ICBpZiAoIW93bmVkX2luc3RhbmNlKQorLSAgICAgICAgICAgICAgICBnb3RvIGJhZDsKKy0gICAg ICAgICAgICB2YWx1ZSA9IG93bmVkX2luc3RhbmNlOworLSAgICAgICAgICAgIGlmICghUHlFeGNl cHRpb25JbnN0YW5jZV9DaGVjayh2YWx1ZSkpIHsKKy0gICAgICAgICAgICAgICAgUHlFcnJfRm9y bWF0KFB5RXhjX1R5cGVFcnJvciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYWxs aW5nICVSIHNob3VsZCBoYXZlIHJldHVybmVkIGFuIGluc3RhbmNlIG9mICIKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJCYXNlRXhjZXB0aW9uLCBub3QgJVIiLAorLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdHlwZSwgUHlfVFlQRSh2YWx1ZSkpOworLSAgICAgICAgICAgICAg ICBnb3RvIGJhZDsKKy0gICAgICAgICAgICB9CistICAgICAgICB9CistICAgIH0gZWxzZSB7Cist ICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorLSAgICAgICAgICAgICJy YWlzZTogZXhjZXB0aW9uIGNsYXNzIG11c3QgYmUgYSBzdWJjbGFzcyBvZiBCYXNlRXhjZXB0aW9u Iik7CistICAgICAgICBnb3RvIGJhZDsKKyAgICAgfQorLSAgICBpZiAoY2F1c2UpIHsKKy0gICAg ICAgIFB5T2JqZWN0ICpmaXhlZF9jYXVzZTsKKy0gICAgICAgIGlmIChjYXVzZSA9PSBQeV9Ob25l KSB7CistICAgICAgICAgICAgZml4ZWRfY2F1c2UgPSBOVUxMOworLSAgICAgICAgfSBlbHNlIGlm IChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKGNhdXNlKSkgeworLSAgICAgICAgICAgIGZpeGVkX2Nh dXNlID0gUHlPYmplY3RfQ2FsbE9iamVjdChjYXVzZSwgTlVMTCk7CistICAgICAgICAgICAgaWYg KGZpeGVkX2NhdXNlID09IE5VTEwpCistICAgICAgICAgICAgICAgIGdvdG8gYmFkOworLSAgICAg ICAgfSBlbHNlIGlmIChQeUV4Y2VwdGlvbkluc3RhbmNlX0NoZWNrKGNhdXNlKSkgeworLSAgICAg ICAgICAgIGZpeGVkX2NhdXNlID0gY2F1c2U7CistICAgICAgICAgICAgUHlfSU5DUkVGKGZpeGVk X2NhdXNlKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5n KFB5RXhjX1R5cGVFcnJvciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlv biBjYXVzZXMgbXVzdCBkZXJpdmUgZnJvbSAiCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJCYXNlRXhjZXB0aW9uIik7CistICAgICAgICAgICAgZ290byBiYWQ7CisrICAgICNlbmRpZgor KyAgICBQeV9YSU5DUkVGKGxvY2FsX3RiKTsKKysgICAgUHlfWElOQ1JFRihsb2NhbF90eXBlKTsK KysgICAgUHlfWElOQ1JFRihsb2NhbF92YWx1ZSk7CisrICAgICp0eXBlID0gbG9jYWxfdHlwZTsK KysgICAgKnZhbHVlID0gbG9jYWxfdmFsdWU7CisrICAgICp0YiA9IGxvY2FsX3RiOworKyNpZiBD WVRIT05fRkFTVF9USFJFQURfU1RBVEUKKysgICAgI2lmIENZVEhPTl9VU0VfRVhDX0lORk9fU1RB Q0sKKysgICAgeworKyAgICAgICAgX1B5RXJyX1N0YWNrSXRlbSAqZXhjX2luZm8gPSB0c3RhdGUt PmV4Y19pbmZvOworKyAgICAgICAgdG1wX3R5cGUgPSBleGNfaW5mby0+ZXhjX3R5cGU7CisrICAg ICAgICB0bXBfdmFsdWUgPSBleGNfaW5mby0+ZXhjX3ZhbHVlOworKyAgICAgICAgdG1wX3RiID0g ZXhjX2luZm8tPmV4Y190cmFjZWJhY2s7CisrICAgICAgICBleGNfaW5mby0+ZXhjX3R5cGUgPSBs b2NhbF90eXBlOworKyAgICAgICAgZXhjX2luZm8tPmV4Y192YWx1ZSA9IGxvY2FsX3ZhbHVlOwor KyAgICAgICAgZXhjX2luZm8tPmV4Y190cmFjZWJhY2sgPSBsb2NhbF90YjsKKysgICAgfQorKyAg ICAjZWxzZQorKyAgICB0bXBfdHlwZSA9IHRzdGF0ZS0+ZXhjX3R5cGU7CisrICAgIHRtcF92YWx1 ZSA9IHRzdGF0ZS0+ZXhjX3ZhbHVlOworKyAgICB0bXBfdGIgPSB0c3RhdGUtPmV4Y190cmFjZWJh Y2s7CisrICAgIHRzdGF0ZS0+ZXhjX3R5cGUgPSBsb2NhbF90eXBlOworKyAgICB0c3RhdGUtPmV4 Y192YWx1ZSA9IGxvY2FsX3ZhbHVlOworKyAgICB0c3RhdGUtPmV4Y190cmFjZWJhY2sgPSBsb2Nh bF90YjsKKysgICAgI2VuZGlmCisrICAgIFB5X1hERUNSRUYodG1wX3R5cGUpOworKyAgICBQeV9Y REVDUkVGKHRtcF92YWx1ZSk7CisrICAgIFB5X1hERUNSRUYodG1wX3RiKTsKKysjZWxzZQorKyAg ICBQeUVycl9TZXRFeGNJbmZvKGxvY2FsX3R5cGUsIGxvY2FsX3ZhbHVlLCBsb2NhbF90Yik7Cisr I2VuZGlmCisrICAgIHJldHVybiAwOworK2JhZDoKKysgICAgKnR5cGUgPSAwOworKyAgICAqdmFs dWUgPSAwOworKyAgICAqdGIgPSAwOworKyAgICBQeV9YREVDUkVGKGxvY2FsX3R5cGUpOworKyAg ICBQeV9YREVDUkVGKGxvY2FsX3ZhbHVlKTsKKysgICAgUHlfWERFQ1JFRihsb2NhbF90Yik7Cisr ICAgIHJldHVybiAtMTsKKyt9CisrCisrLyogUHlPYmplY3RDYWxsTWV0aE8gKi8KKysjaWYgQ1lU SE9OX0NPTVBJTElOR19JTl9DUFlUSE9OCisrc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3Qq IF9fUHl4X1B5T2JqZWN0X0NhbGxNZXRoTyhQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZykg eworKyAgICBQeU9iamVjdCAqc2VsZiwgKnJlc3VsdDsKKysgICAgUHlDRnVuY3Rpb24gY2Z1bmM7 CisrICAgIGNmdW5jID0gUHlDRnVuY3Rpb25fR0VUX0ZVTkNUSU9OKGZ1bmMpOworKyAgICBzZWxm ID0gUHlDRnVuY3Rpb25fR0VUX1NFTEYoZnVuYyk7CisrICAgIGlmICh1bmxpa2VseShQeV9FbnRl clJlY3Vyc2l2ZUNhbGwoKGNoYXIqKSIgd2hpbGUgY2FsbGluZyBhIFB5dGhvbiBvYmplY3QiKSkp CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgcmVzdWx0ID0gY2Z1bmMoc2VsZiwgYXJnKTsK KysgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CisrICAgIGlmICh1bmxpa2VseSghcmVzdWx0 KSAmJiB1bmxpa2VseSghUHlFcnJfT2NjdXJyZWQoKSkpIHsKKysgICAgICAgIFB5RXJyX1NldFN0 cmluZygKKysgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKKysgICAgICAgICAgICAiTlVM TCByZXN1bHQgd2l0aG91dCBlcnJvciBpbiBQeU9iamVjdF9DYWxsIik7CisrICAgIH0KKysgICAg cmV0dXJuIHJlc3VsdDsKKyt9CisrI2VuZGlmCisrCisrLyogUHlPYmplY3RDYWxsT25lQXJnICov CisrI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTgorK3N0YXRpYyBQeU9iamVjdCogX19Q eXhfX1B5T2JqZWN0X0NhbGxPbmVBcmcoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcpIHsK KysgICAgUHlPYmplY3QgKnJlc3VsdDsKKysgICAgUHlPYmplY3QgKmFyZ3MgPSBQeVR1cGxlX05l dygxKTsKKysgICAgaWYgKHVubGlrZWx5KCFhcmdzKSkgcmV0dXJuIE5VTEw7CisrICAgIFB5X0lO Q1JFRihhcmcpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDAsIGFyZyk7CisrICAgIHJl c3VsdCA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoZnVuYywgYXJncywgTlVMTCk7CisrICAgIFB5X0RF Q1JFRihhcmdzKTsKKysgICAgcmV0dXJuIHJlc3VsdDsKKyt9Cisrc3RhdGljIENZVEhPTl9JTkxJ TkUgUHlPYmplY3QqIF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoUHlPYmplY3QgKmZ1bmMsIFB5 T2JqZWN0ICphcmcpIHsKKysjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCisrICAgIGlmIChQeUZ1bmN0 aW9uX0NoZWNrKGZ1bmMpKSB7CisrICAgICAgICByZXR1cm4gX19QeXhfUHlGdW5jdGlvbl9GYXN0 Q2FsbChmdW5jLCAmYXJnLCAxKTsKKysgICAgfQorKyNlbmRpZgorKyAgICBpZiAobGlrZWx5KFB5 Q0Z1bmN0aW9uX0NoZWNrKGZ1bmMpKSkgeworKyAgICAgICAgaWYgKGxpa2VseShQeUNGdW5jdGlv bl9HRVRfRkxBR1MoZnVuYykgJiBNRVRIX08pKSB7CisrICAgICAgICAgICAgcmV0dXJuIF9fUHl4 X1B5T2JqZWN0X0NhbGxNZXRoTyhmdW5jLCBhcmcpOworKyNpZiBDWVRIT05fRkFTVF9QWUNDQUxM CisrICAgICAgICB9IGVsc2UgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhmdW5jKSkg eworKyAgICAgICAgICAgIHJldHVybiBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChmdW5jLCAm YXJnLCAxKTsKKysjZW5kaWYKKyAgICAgICAgIH0KKy0gICAgICAgIFB5RXhjZXB0aW9uX1NldENh dXNlKHZhbHVlLCBmaXhlZF9jYXVzZSk7CisgICAgIH0KKy0gICAgUHlFcnJfU2V0T2JqZWN0KHR5 cGUsIHZhbHVlKTsKKy0gICAgaWYgKHRiKSB7CistI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fUFlQ WQorLSAgICAgICAgUHlPYmplY3QgKnRtcF90eXBlLCAqdG1wX3ZhbHVlLCAqdG1wX3RiOworLSAg ICAgICAgUHlFcnJfRmV0Y2goJnRtcF90eXBlLCAmdG1wX3ZhbHVlLCAmdG1wX3RiKTsKKy0gICAg ICAgIFB5X0lOQ1JFRih0Yik7CistICAgICAgICBQeUVycl9SZXN0b3JlKHRtcF90eXBlLCB0bXBf dmFsdWUsIHRiKTsKKy0gICAgICAgIFB5X1hERUNSRUYodG1wX3RiKTsKKysgICAgcmV0dXJuIF9f UHl4X19QeU9iamVjdF9DYWxsT25lQXJnKGZ1bmMsIGFyZyk7CisrfQorICNlbHNlCistICAgICAg ICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBfX1B5eF9QeVRocmVhZFN0YXRlX0N1cnJlbnQ7Cist ICAgICAgICBQeU9iamVjdCogdG1wX3RiID0gdHN0YXRlLT5jdXJleGNfdHJhY2ViYWNrOworLSAg ICAgICAgaWYgKHRiICE9IHRtcF90YikgeworLSAgICAgICAgICAgIFB5X0lOQ1JFRih0Yik7Cist ICAgICAgICAgICAgdHN0YXRlLT5jdXJleGNfdHJhY2ViYWNrID0gdGI7CistICAgICAgICAgICAg UHlfWERFQ1JFRih0bXBfdGIpOworLSAgICAgICAgfQorK3N0YXRpYyBDWVRIT05fSU5MSU5FIFB5 T2JqZWN0KiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVj dCAqYXJnKSB7CisrICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisrICAgIFB5T2JqZWN0ICphcmdzID0g UHlUdXBsZV9QYWNrKDEsIGFyZyk7CisrICAgIGlmICh1bmxpa2VseSghYXJncykpIHJldHVybiBO VUxMOworKyAgICByZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9DYWxsKGZ1bmMsIGFyZ3MsIE5VTEwp OworKyAgICBQeV9ERUNSRUYoYXJncyk7CisrICAgIHJldHVybiByZXN1bHQ7CisrfQorICNlbmRp ZgorLSAgICB9CistYmFkOgorLSAgICBQeV9YREVDUkVGKG93bmVkX2luc3RhbmNlKTsKKy0gICAg cmV0dXJuOworKworKy8qIFB5RXJyRmV0Y2hSZXN0b3JlICovCisrI2lmIENZVEhPTl9GQVNUX1RI UkVBRF9TVEFURQorK3N0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgX19QeXhfRXJyUmVzdG9yZUlu U3RhdGUoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZh bHVlLCBQeU9iamVjdCAqdGIpIHsKKysgICAgUHlPYmplY3QgKnRtcF90eXBlLCAqdG1wX3ZhbHVl LCAqdG1wX3RiOworKyAgICB0bXBfdHlwZSA9IHRzdGF0ZS0+Y3VyZXhjX3R5cGU7CisrICAgIHRt cF92YWx1ZSA9IHRzdGF0ZS0+Y3VyZXhjX3ZhbHVlOworKyAgICB0bXBfdGIgPSB0c3RhdGUtPmN1 cmV4Y190cmFjZWJhY2s7CisrICAgIHRzdGF0ZS0+Y3VyZXhjX3R5cGUgPSB0eXBlOworKyAgICB0 c3RhdGUtPmN1cmV4Y192YWx1ZSA9IHZhbHVlOworKyAgICB0c3RhdGUtPmN1cmV4Y190cmFjZWJh Y2sgPSB0YjsKKysgICAgUHlfWERFQ1JFRih0bXBfdHlwZSk7CisrICAgIFB5X1hERUNSRUYodG1w X3ZhbHVlKTsKKysgICAgUHlfWERFQ1JFRih0bXBfdGIpOworK30KKytzdGF0aWMgQ1lUSE9OX0lO TElORSB2b2lkIF9fUHl4X0VyckZldGNoSW5TdGF0ZShQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5 T2JqZWN0ICoqdHlwZSwgUHlPYmplY3QgKip2YWx1ZSwgUHlPYmplY3QgKip0YikgeworKyAgICAq dHlwZSA9IHRzdGF0ZS0+Y3VyZXhjX3R5cGU7CisrICAgICp2YWx1ZSA9IHRzdGF0ZS0+Y3VyZXhj X3ZhbHVlOworKyAgICAqdGIgPSB0c3RhdGUtPmN1cmV4Y190cmFjZWJhY2s7CisrICAgIHRzdGF0 ZS0+Y3VyZXhjX3R5cGUgPSAwOworKyAgICB0c3RhdGUtPmN1cmV4Y192YWx1ZSA9IDA7CisrICAg IHRzdGF0ZS0+Y3VyZXhjX3RyYWNlYmFjayA9IDA7CisgfQorICNlbmRpZgorIAorLS8qIEZldGNo Q29tbW9uVHlwZSAqLworLXN0YXRpYyBQeVR5cGVPYmplY3QqIF9fUHl4X0ZldGNoQ29tbW9uVHlw ZShQeVR5cGVPYmplY3QqIHR5cGUpIHsKKy0gICAgUHlPYmplY3QqIGZha2VfbW9kdWxlOworLSAg ICBQeVR5cGVPYmplY3QqIGNhY2hlZF90eXBlID0gTlVMTDsKKy0gICAgZmFrZV9tb2R1bGUgPSBQ eUltcG9ydF9BZGRNb2R1bGUoKGNoYXIqKSAiX2N5dGhvbl8iIENZVEhPTl9BQkkpOworLSAgICBp ZiAoIWZha2VfbW9kdWxlKSByZXR1cm4gTlVMTDsKKy0gICAgUHlfSU5DUkVGKGZha2VfbW9kdWxl KTsKKy0gICAgY2FjaGVkX3R5cGUgPSAoUHlUeXBlT2JqZWN0KikgUHlPYmplY3RfR2V0QXR0clN0 cmluZyhmYWtlX21vZHVsZSwgdHlwZS0+dHBfbmFtZSk7CistICAgIGlmIChjYWNoZWRfdHlwZSkg eworLSAgICAgICAgaWYgKCFQeVR5cGVfQ2hlY2soKFB5T2JqZWN0KiljYWNoZWRfdHlwZSkpIHsK Ky0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorLSAgICAgICAgICAg ICAgICAiU2hhcmVkIEN5dGhvbiB0eXBlICUuMjAwcyBpcyBub3QgYSB0eXBlIG9iamVjdCIsCist ICAgICAgICAgICAgICAgIHR5cGUtPnRwX25hbWUpOworLSAgICAgICAgICAgIGdvdG8gYmFkOwor LSAgICAgICAgfQorLSAgICAgICAgaWYgKGNhY2hlZF90eXBlLT50cF9iYXNpY3NpemUgIT0gdHlw ZS0+dHBfYmFzaWNzaXplKSB7CistICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVF cnJvciwKKy0gICAgICAgICAgICAgICAgIlNoYXJlZCBDeXRob24gdHlwZSAlLjIwMHMgaGFzIHRo ZSB3cm9uZyBzaXplLCB0cnkgcmVjb21waWxpbmciLAorLSAgICAgICAgICAgICAgICB0eXBlLT50 cF9uYW1lKTsKKy0gICAgICAgICAgICBnb3RvIGJhZDsKKy0gICAgICAgIH0KKy0gICAgfSBlbHNl IHsKKy0gICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVF cnJvcikpIGdvdG8gYmFkOworLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKy0gICAgICAgIGlmIChQ eVR5cGVfUmVhZHkodHlwZSkgPCAwKSBnb3RvIGJhZDsKKy0gICAgICAgIGlmIChQeU9iamVjdF9T ZXRBdHRyU3RyaW5nKGZha2VfbW9kdWxlLCB0eXBlLT50cF9uYW1lLCAoUHlPYmplY3QqKSB0eXBl KSA8IDApCistICAgICAgICAgICAgZ290byBiYWQ7CistICAgICAgICBQeV9JTkNSRUYodHlwZSk7 CistICAgICAgICBjYWNoZWRfdHlwZSA9IHR5cGU7CisrLyogR2V0QXR0ciAqLworK3N0YXRpYyBD WVRIT05fSU5MSU5FIFB5T2JqZWN0ICpfX1B5eF9HZXRBdHRyKFB5T2JqZWN0ICpvLCBQeU9iamVj dCAqbikgeworKyNpZiBDWVRIT05fVVNFX1RZUEVfU0xPVFMKKysjaWYgUFlfTUFKT1JfVkVSU0lP TiA+PSAzCisrICAgIGlmIChsaWtlbHkoUHlVbmljb2RlX0NoZWNrKG4pKSkKKysjZWxzZQorKyAg ICBpZiAobGlrZWx5KFB5U3RyaW5nX0NoZWNrKG4pKSkKKysjZW5kaWYKKysgICAgICAgIHJldHVy biBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG8sIG4pOworKyNlbmRpZgorKyAgICByZXR1cm4g UHlPYmplY3RfR2V0QXR0cihvLCBuKTsKKyt9CisrCisrLyogR2V0QXR0cjMgKi8KKytzdGF0aWMg UHlPYmplY3QgKl9fUHl4X0dldEF0dHIzRGVmYXVsdChQeU9iamVjdCAqZCkgeworKyAgICBfX1B5 eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKKysgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24K KysgICAgaWYgKHVubGlrZWx5KCFfX1B5eF9QeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0 dHJpYnV0ZUVycm9yKSkpCisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgX19QeXhfUHlFcnJf Q2xlYXIoKTsKKysgICAgUHlfSU5DUkVGKGQpOworKyAgICByZXR1cm4gZDsKKyt9Cisrc3RhdGlj IENZVEhPTl9JTkxJTkUgUHlPYmplY3QgKl9fUHl4X0dldEF0dHIzKFB5T2JqZWN0ICpvLCBQeU9i amVjdCAqbiwgUHlPYmplY3QgKmQpIHsKKysgICAgUHlPYmplY3QgKnIgPSBfX1B5eF9HZXRBdHRy KG8sIG4pOworKyAgICByZXR1cm4gKGxpa2VseShyKSkgPyByIDogX19QeXhfR2V0QXR0cjNEZWZh dWx0KGQpOworK30KKysKKysvKiBQeU9iamVjdENhbGwyQXJncyAqLworK3N0YXRpYyBDWVRIT05f VU5VU0VEIFB5T2JqZWN0KiBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoUHlPYmplY3QqIGZ1bmN0 aW9uLCBQeU9iamVjdCogYXJnMSwgUHlPYmplY3QqIGFyZzIpIHsKKysgICAgUHlPYmplY3QgKmFy Z3MsICpyZXN1bHQgPSBOVUxMOworKyAgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCisrICAgIGlm IChQeUZ1bmN0aW9uX0NoZWNrKGZ1bmN0aW9uKSkgeworKyAgICAgICAgUHlPYmplY3QgKmFyZ3Nb Ml0gPSB7YXJnMSwgYXJnMn07CisrICAgICAgICByZXR1cm4gX19QeXhfUHlGdW5jdGlvbl9GYXN0 Q2FsbChmdW5jdGlvbiwgYXJncywgMik7CisrICAgIH0KKysgICAgI2VuZGlmCisrICAgICNpZiBD WVRIT05fRkFTVF9QWUNDQUxMCisrICAgIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2so ZnVuY3Rpb24pKSB7CisrICAgICAgICBQeU9iamVjdCAqYXJnc1syXSA9IHthcmcxLCBhcmcyfTsK KysgICAgICAgIHJldHVybiBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChmdW5jdGlvbiwgYXJn cywgMik7CisgICAgIH0KKysgICAgI2VuZGlmCisrICAgIGFyZ3MgPSBQeVR1cGxlX05ldygyKTsK KysgICAgaWYgKHVubGlrZWx5KCFhcmdzKSkgZ290byBkb25lOworKyAgICBQeV9JTkNSRUYoYXJn MSk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMCwgYXJnMSk7CisrICAgIFB5X0lOQ1JF RihhcmcyKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAxLCBhcmcyKTsKKysgICAgUHlf SU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgcmVzdWx0ID0gX19QeXhfUHlPYmplY3RfQ2FsbChmdW5j dGlvbiwgYXJncywgTlVMTCk7CisrICAgIFB5X0RFQ1JFRihhcmdzKTsKKysgICAgUHlfREVDUkVG KGZ1bmN0aW9uKTsKKyBkb25lOgorLSAgICBQeV9ERUNSRUYoZmFrZV9tb2R1bGUpOworLSAgICBy ZXR1cm4gY2FjaGVkX3R5cGU7CistYmFkOgorLSAgICBQeV9YREVDUkVGKGNhY2hlZF90eXBlKTsK Ky0gICAgY2FjaGVkX3R5cGUgPSBOVUxMOworLSAgICBnb3RvIGRvbmU7CisrICAgIHJldHVybiBy ZXN1bHQ7CisgfQorIAorLS8qIEN5dGhvbkZ1bmN0aW9uU2hhcmVkICovCistI2luY2x1ZGUgPHN0 cnVjdG1lbWJlci5oPgorLXN0YXRpYyBQeU9iamVjdCAqCistX19QeXhfQ3lGdW5jdGlvbl9nZXRf ZG9jKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNsb3N1 cmUpCisteworLSAgICBpZiAodW5saWtlbHkob3AtPmZ1bmNfZG9jID09IE5VTEwpKSB7CistICAg ICAgICBpZiAob3AtPmZ1bmMubV9tbC0+bWxfZG9jKSB7CisrLyogUHlPYmplY3RHZXRNZXRob2Qg Ki8KKytzdGF0aWMgaW50IF9fUHl4X1B5T2JqZWN0X0dldE1ldGhvZChQeU9iamVjdCAqb2JqLCBQ eU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKiptZXRob2QpIHsKKysgICAgUHlPYmplY3QgKmF0dHI7 CisrI2lmIENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRI T04gJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQCisrICAgIFB5VHlwZU9iamVjdCAqdHAgPSBQ eV9UWVBFKG9iaik7CisrICAgIFB5T2JqZWN0ICpkZXNjcjsKKysgICAgZGVzY3JnZXRmdW5jIGYg PSBOVUxMOworKyAgICBQeU9iamVjdCAqKmRpY3RwdHIsICpkaWN0OworKyAgICBpbnQgbWV0aF9m b3VuZCA9IDA7CisrICAgIGFzc2VydCAoKm1ldGhvZCA9PSBOVUxMKTsKKysgICAgaWYgKHVubGlr ZWx5KHRwLT50cF9nZXRhdHRybyAhPSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKysgICAg ICAgIGF0dHIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG9iaiwgbmFtZSk7CisrICAgICAg ICBnb3RvIHRyeV91bnBhY2s7CisrICAgIH0KKysgICAgaWYgKHVubGlrZWx5KHRwLT50cF9kaWN0 ID09IE5VTEwpICYmIHVubGlrZWx5KFB5VHlwZV9SZWFkeSh0cCkgPCAwKSkgeworKyAgICAgICAg cmV0dXJuIDA7CisrICAgIH0KKysgICAgZGVzY3IgPSBfUHlUeXBlX0xvb2t1cCh0cCwgbmFtZSk7 CisrICAgIGlmIChsaWtlbHkoZGVzY3IgIT0gTlVMTCkpIHsKKysgICAgICAgIFB5X0lOQ1JFRihk ZXNjcik7CisgI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMworLSAgICAgICAgICAgIG9wLT5mdW5j X2RvYyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG9wLT5mdW5jLm1fbWwtPm1sX2RvYyk7CisrICAg ICAgICAjaWZkZWYgX19QeXhfQ3lGdW5jdGlvbl9VU0VECisrICAgICAgICBpZiAobGlrZWx5KFB5 RnVuY3Rpb25fQ2hlY2soZGVzY3IpIHx8IChQeV9UWVBFKGRlc2NyKSA9PSAmUHlNZXRob2REZXNj cl9UeXBlKSB8fCBfX1B5eF9DeUZ1bmN0aW9uX0NoZWNrKGRlc2NyKSkpCisrICAgICAgICAjZWxz ZQorKyAgICAgICAgaWYgKGxpa2VseShQeUZ1bmN0aW9uX0NoZWNrKGRlc2NyKSB8fCAoUHlfVFlQ RShkZXNjcikgPT0gJlB5TWV0aG9kRGVzY3JfVHlwZSkpKQorKyAgICAgICAgI2VuZGlmCisgI2Vs c2UKKy0gICAgICAgICAgICBvcC0+ZnVuY19kb2MgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKG9wLT5m dW5jLm1fbWwtPm1sX2RvYyk7CisrICAgICAgICAjaWZkZWYgX19QeXhfQ3lGdW5jdGlvbl9VU0VE CisrICAgICAgICBpZiAobGlrZWx5KFB5RnVuY3Rpb25fQ2hlY2soZGVzY3IpIHx8IF9fUHl4X0N5 RnVuY3Rpb25fQ2hlY2soZGVzY3IpKSkKKysgICAgICAgICNlbHNlCisrICAgICAgICBpZiAobGlr ZWx5KFB5RnVuY3Rpb25fQ2hlY2soZGVzY3IpKSkKKysgICAgICAgICNlbmRpZgorICNlbmRpZgor LSAgICAgICAgICAgIGlmICh1bmxpa2VseShvcC0+ZnVuY19kb2MgPT0gTlVMTCkpCistICAgICAg ICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgeworKyAgICAgICAgICAgIG1ldGhfZm91 bmQgPSAxOworICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9u ZSk7CistICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7CisrICAgICAgICAgICAgZiA9IFB5X1RZ UEUoZGVzY3IpLT50cF9kZXNjcl9nZXQ7CisrICAgICAgICAgICAgaWYgKGYgIT0gTlVMTCAmJiBQ eURlc2NyX0lzRGF0YShkZXNjcikpIHsKKysgICAgICAgICAgICAgICAgYXR0ciA9IGYoZGVzY3Is IG9iaiwgKFB5T2JqZWN0ICopUHlfVFlQRShvYmopKTsKKysgICAgICAgICAgICAgICAgUHlfREVD UkVGKGRlc2NyKTsKKysgICAgICAgICAgICAgICAgZ290byB0cnlfdW5wYWNrOworKyAgICAgICAg ICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKyAgICBkaWN0cHRyID0gX1B5T2JqZWN0X0dldERp Y3RQdHIob2JqKTsKKysgICAgaWYgKGRpY3RwdHIgIT0gTlVMTCAmJiAoZGljdCA9ICpkaWN0cHRy KSAhPSBOVUxMKSB7CisrICAgICAgICBQeV9JTkNSRUYoZGljdCk7CisrICAgICAgICBhdHRyID0g X19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoZGljdCwgbmFtZSk7CisrICAgICAgICBpZiAoYXR0ciAh PSBOVUxMKSB7CisrICAgICAgICAgICAgUHlfSU5DUkVGKGF0dHIpOworKyAgICAgICAgICAgIFB5 X0RFQ1JFRihkaWN0KTsKKysgICAgICAgICAgICBQeV9YREVDUkVGKGRlc2NyKTsKKysgICAgICAg ICAgICBnb3RvIHRyeV91bnBhY2s7CisgICAgICAgICB9CisrICAgICAgICBQeV9ERUNSRUYoZGlj dCk7CisgICAgIH0KKy0gICAgUHlfSU5DUkVGKG9wLT5mdW5jX2RvYyk7CistICAgIHJldHVybiBv cC0+ZnVuY19kb2M7CistfQorLXN0YXRpYyBpbnQKKy1fX1B5eF9DeUZ1bmN0aW9uX3NldF9kb2Mo X19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIFB5T2JqZWN0ICp2YWx1ZSwgQ1lUSE9OX1VOVVNF RCB2b2lkICpjb250ZXh0KQorLXsKKy0gICAgUHlPYmplY3QgKnRtcCA9IG9wLT5mdW5jX2RvYzsK Ky0gICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKy0gICAgICAgIHZhbHVlID0gUHlfTm9uZTsKKysg ICAgaWYgKG1ldGhfZm91bmQpIHsKKysgICAgICAgICptZXRob2QgPSBkZXNjcjsKKysgICAgICAg IHJldHVybiAxOworICAgICB9CistICAgIFB5X0lOQ1JFRih2YWx1ZSk7CistICAgIG9wLT5mdW5j X2RvYyA9IHZhbHVlOworLSAgICBQeV9YREVDUkVGKHRtcCk7CistICAgIHJldHVybiAwOworLX0K Ky1zdGF0aWMgUHlPYmplY3QgKgorLV9fUHl4X0N5RnVuY3Rpb25fZ2V0X25hbWUoX19weXhfQ3lG dW5jdGlvbk9iamVjdCAqb3AsIENZVEhPTl9VTlVTRUQgdm9pZCAqY29udGV4dCkKKy17CistICAg IGlmICh1bmxpa2VseShvcC0+ZnVuY19uYW1lID09IE5VTEwpKSB7CistI2lmIFBZX01BSk9SX1ZF UlNJT04gPj0gMworLSAgICAgICAgb3AtPmZ1bmNfbmFtZSA9IFB5VW5pY29kZV9JbnRlcm5Gcm9t U3RyaW5nKG9wLT5mdW5jLm1fbWwtPm1sX25hbWUpOworLSNlbHNlCistICAgICAgICBvcC0+ZnVu Y19uYW1lID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZyhvcC0+ZnVuYy5tX21sLT5tbF9uYW1l KTsKKy0jZW5kaWYKKy0gICAgICAgIGlmICh1bmxpa2VseShvcC0+ZnVuY19uYW1lID09IE5VTEwp KQorLSAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICBpZiAoZiAhPSBOVUxMKSB7CisrICAg ICAgICBhdHRyID0gZihkZXNjciwgb2JqLCAoUHlPYmplY3QgKilQeV9UWVBFKG9iaikpOworKyAg ICAgICAgUHlfREVDUkVGKGRlc2NyKTsKKysgICAgICAgIGdvdG8gdHJ5X3VucGFjazsKKyAgICAg fQorLSAgICBQeV9JTkNSRUYob3AtPmZ1bmNfbmFtZSk7CistICAgIHJldHVybiBvcC0+ZnVuY19u YW1lOworLX0KKy1zdGF0aWMgaW50CistX19QeXhfQ3lGdW5jdGlvbl9zZXRfbmFtZShfX3B5eF9D eUZ1bmN0aW9uT2JqZWN0ICpvcCwgUHlPYmplY3QgKnZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQg KmNvbnRleHQpCisteworLSAgICBQeU9iamVjdCAqdG1wOworKyAgICBpZiAoZGVzY3IgIT0gTlVM TCkgeworKyAgICAgICAgKm1ldGhvZCA9IGRlc2NyOworKyAgICAgICAgcmV0dXJuIDA7CisrICAg IH0KKysgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLAorICNpZiBQWV9NQUpP Ul9WRVJTSU9OID49IDMKKy0gICAgaWYgKHVubGlrZWx5KHZhbHVlID09IE5VTEwgfHwgIVB5VW5p Y29kZV9DaGVjayh2YWx1ZSkpKQorKyAgICAgICAgICAgICAgICAgIiclLjUwcycgb2JqZWN0IGhh cyBubyBhdHRyaWJ1dGUgJyVVJyIsCisrICAgICAgICAgICAgICAgICB0cC0+dHBfbmFtZSwgbmFt ZSk7CisgI2Vsc2UKKy0gICAgaWYgKHVubGlrZWx5KHZhbHVlID09IE5VTEwgfHwgIVB5U3RyaW5n X0NoZWNrKHZhbHVlKSkpCisrICAgICAgICAgICAgICAgICAiJyUuNTBzJyBvYmplY3QgaGFzIG5v IGF0dHJpYnV0ZSAnJS40MDBzJyIsCisrICAgICAgICAgICAgICAgICB0cC0+dHBfbmFtZSwgUHlT dHJpbmdfQVNfU1RSSU5HKG5hbWUpKTsKKyAjZW5kaWYKKy0gICAgeworLSAgICAgICAgUHlFcnJf U2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAiX19u YW1lX18gbXVzdCBiZSBzZXQgdG8gYSBzdHJpbmcgb2JqZWN0Iik7CistICAgICAgICByZXR1cm4g LTE7CistICAgIH0KKy0gICAgdG1wID0gb3AtPmZ1bmNfbmFtZTsKKy0gICAgUHlfSU5DUkVGKHZh bHVlKTsKKy0gICAgb3AtPmZ1bmNfbmFtZSA9IHZhbHVlOworLSAgICBQeV9YREVDUkVGKHRtcCk7 CisgICAgIHJldHVybiAwOworLX0KKy1zdGF0aWMgUHlPYmplY3QgKgorLV9fUHl4X0N5RnVuY3Rp b25fZ2V0X3F1YWxuYW1lKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VE IHZvaWQgKmNvbnRleHQpCisteworLSAgICBQeV9JTkNSRUYob3AtPmZ1bmNfcXVhbG5hbWUpOwor LSAgICByZXR1cm4gb3AtPmZ1bmNfcXVhbG5hbWU7CistfQorLXN0YXRpYyBpbnQKKy1fX1B5eF9D eUZ1bmN0aW9uX3NldF9xdWFsbmFtZShfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgUHlPYmpl Y3QgKnZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCisteworLSAgICBQeU9iamVj dCAqdG1wOworLSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgaWYgKHVubGlrZWx5KHZh bHVlID09IE5VTEwgfHwgIVB5VW5pY29kZV9DaGVjayh2YWx1ZSkpKQorICNlbHNlCistICAgIGlm ICh1bmxpa2VseSh2YWx1ZSA9PSBOVUxMIHx8ICFQeVN0cmluZ19DaGVjayh2YWx1ZSkpKQorKyAg ICBhdHRyID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihvYmosIG5hbWUpOworKyAgICBnb3Rv IHRyeV91bnBhY2s7CisgI2VuZGlmCistICAgIHsKKy0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQ eUV4Y19UeXBlRXJyb3IsCistICAgICAgICAgICAgICAgICAgICAgICAgIl9fcXVhbG5hbWVfXyBt dXN0IGJlIHNldCB0byBhIHN0cmluZyBvYmplY3QiKTsKKy0gICAgICAgIHJldHVybiAtMTsKKy0g ICAgfQorLSAgICB0bXAgPSBvcC0+ZnVuY19xdWFsbmFtZTsKKy0gICAgUHlfSU5DUkVGKHZhbHVl KTsKKy0gICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSB2YWx1ZTsKKy0gICAgUHlfWERFQ1JFRih0bXAp OworLSAgICByZXR1cm4gMDsKKy19Cistc3RhdGljIFB5T2JqZWN0ICoKKy1fX1B5eF9DeUZ1bmN0 aW9uX2dldF9zZWxmKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm0sIENZVEhPTl9VTlVTRUQgdm9p ZCAqY2xvc3VyZSkKKy17CistICAgIFB5T2JqZWN0ICpzZWxmOworLSAgICBzZWxmID0gbS0+ZnVu Y19jbG9zdXJlOworLSAgICBpZiAoc2VsZiA9PSBOVUxMKQorLSAgICAgICAgc2VsZiA9IFB5X05v bmU7CistICAgIFB5X0lOQ1JFRihzZWxmKTsKKy0gICAgcmV0dXJuIHNlbGY7CistfQorLXN0YXRp YyBQeU9iamVjdCAqCistX19QeXhfQ3lGdW5jdGlvbl9nZXRfZGljdChfX3B5eF9DeUZ1bmN0aW9u T2JqZWN0ICpvcCwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KQorLXsKKy0gICAgaWYgKHVu bGlrZWx5KG9wLT5mdW5jX2RpY3QgPT0gTlVMTCkpIHsKKy0gICAgICAgIG9wLT5mdW5jX2RpY3Qg PSBQeURpY3RfTmV3KCk7CistICAgICAgICBpZiAodW5saWtlbHkob3AtPmZ1bmNfZGljdCA9PSBO VUxMKSkKKy0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAgfQorLSAgICBQeV9JTkNSRUYo b3AtPmZ1bmNfZGljdCk7CistICAgIHJldHVybiBvcC0+ZnVuY19kaWN0OworLX0KKy1zdGF0aWMg aW50CistX19QeXhfQ3lGdW5jdGlvbl9zZXRfZGljdChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpv cCwgUHlPYmplY3QgKnZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCisteworLSAg ICBQeU9iamVjdCAqdG1wOworLSAgICBpZiAodW5saWtlbHkodmFsdWUgPT0gTlVMTCkpIHsKKy0g ICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCistICAgICAgICAgICAgICAg ImZ1bmN0aW9uJ3MgZGljdGlvbmFyeSBtYXkgbm90IGJlIGRlbGV0ZWQiKTsKKy0gICAgICAgIHJl dHVybiAtMTsKKy0gICAgfQorLSAgICBpZiAodW5saWtlbHkoIVB5RGljdF9DaGVjayh2YWx1ZSkp KSB7CistICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorLSAgICAgICAg ICAgICAgICJzZXR0aW5nIGZ1bmN0aW9uJ3MgZGljdGlvbmFyeSB0byBhIG5vbi1kaWN0Iik7Cist ICAgICAgICByZXR1cm4gLTE7CisrdHJ5X3VucGFjazoKKysjaWYgQ1lUSE9OX1VOUEFDS19NRVRI T0RTCisrICAgIGlmIChsaWtlbHkoYXR0cikgJiYgUHlNZXRob2RfQ2hlY2soYXR0cikgJiYgbGlr ZWx5KFB5TWV0aG9kX0dFVF9TRUxGKGF0dHIpID09IG9iaikpIHsKKysgICAgICAgIFB5T2JqZWN0 ICpmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihhdHRyKTsKKysgICAgICAgIFB5X0lO Q1JFRihmdW5jdGlvbik7CisrICAgICAgICBQeV9ERUNSRUYoYXR0cik7CisrICAgICAgICAqbWV0 aG9kID0gZnVuY3Rpb247CisrICAgICAgICByZXR1cm4gMTsKKyAgICAgfQorLSAgICB0bXAgPSBv cC0+ZnVuY19kaWN0OworLSAgICBQeV9JTkNSRUYodmFsdWUpOworLSAgICBvcC0+ZnVuY19kaWN0 ID0gdmFsdWU7CistICAgIFB5X1hERUNSRUYodG1wKTsKKysjZW5kaWYKKysgICAgKm1ldGhvZCA9 IGF0dHI7CisgICAgIHJldHVybiAwOworIH0KKy1zdGF0aWMgUHlPYmplY3QgKgorLV9fUHl4X0N5 RnVuY3Rpb25fZ2V0X2dsb2JhbHMoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIENZVEhPTl9V TlVTRUQgdm9pZCAqY29udGV4dCkKKy17CistICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19nbG9iYWxz KTsKKy0gICAgcmV0dXJuIG9wLT5mdW5jX2dsb2JhbHM7CistfQorLXN0YXRpYyBQeU9iamVjdCAq CistX19QeXhfQ3lGdW5jdGlvbl9nZXRfY2xvc3VyZShDWVRIT05fVU5VU0VEIF9fcHl4X0N5RnVu Y3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCisteworLSAgICBQ eV9JTkNSRUYoUHlfTm9uZSk7CistICAgIHJldHVybiBQeV9Ob25lOworLX0KKy1zdGF0aWMgUHlP YmplY3QgKgorLV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2NvZGUoX19weXhfQ3lGdW5jdGlvbk9iamVj dCAqb3AsIENZVEhPTl9VTlVTRUQgdm9pZCAqY29udGV4dCkKKy17CistICAgIFB5T2JqZWN0KiBy ZXN1bHQgPSAob3AtPmZ1bmNfY29kZSkgPyBvcC0+ZnVuY19jb2RlIDogUHlfTm9uZTsKKy0gICAg UHlfSU5DUkVGKHJlc3VsdCk7CistICAgIHJldHVybiByZXN1bHQ7CistfQorLXN0YXRpYyBpbnQK Ky1fX1B5eF9DeUZ1bmN0aW9uX2luaXRfZGVmYXVsdHMoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAq b3ApIHsKKy0gICAgaW50IHJlc3VsdCA9IDA7CistICAgIFB5T2JqZWN0ICpyZXMgPSBvcC0+ZGVm YXVsdHNfZ2V0dGVyKChQeU9iamVjdCAqKSBvcCk7CistICAgIGlmICh1bmxpa2VseSghcmVzKSkK Ky0gICAgICAgIHJldHVybiAtMTsKKy0gICAgI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1Mg JiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCistICAgIG9wLT5kZWZhdWx0c190dXBsZSA9 IFB5VHVwbGVfR0VUX0lURU0ocmVzLCAwKTsKKy0gICAgUHlfSU5DUkVGKG9wLT5kZWZhdWx0c190 dXBsZSk7CistICAgIG9wLT5kZWZhdWx0c19rd2RpY3QgPSBQeVR1cGxlX0dFVF9JVEVNKHJlcywg MSk7CistICAgIFB5X0lOQ1JFRihvcC0+ZGVmYXVsdHNfa3dkaWN0KTsKKy0gICAgI2Vsc2UKKy0g ICAgb3AtPmRlZmF1bHRzX3R1cGxlID0gUHlTZXF1ZW5jZV9JVEVNKHJlcywgMCk7CistICAgIGlm ICh1bmxpa2VseSghb3AtPmRlZmF1bHRzX3R1cGxlKSkgcmVzdWx0ID0gLTE7CistICAgIGVsc2Ug eworLSAgICAgICAgb3AtPmRlZmF1bHRzX2t3ZGljdCA9IFB5U2VxdWVuY2VfSVRFTShyZXMsIDEp OworLSAgICAgICAgaWYgKHVubGlrZWx5KCFvcC0+ZGVmYXVsdHNfa3dkaWN0KSkgcmVzdWx0ID0g LTE7CistICAgIH0KKy0gICAgI2VuZGlmCistICAgIFB5X0RFQ1JFRihyZXMpOworKworKy8qIFB5 T2JqZWN0Q2FsbE1ldGhvZDEgKi8KKytzdGF0aWMgUHlPYmplY3QqIF9fUHl4X19QeU9iamVjdF9D YWxsTWV0aG9kMShQeU9iamVjdCogbWV0aG9kLCBQeU9iamVjdCogYXJnKSB7CisrICAgIFB5T2Jq ZWN0ICpyZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKG1ldGhvZCwgYXJnKTsKKysg ICAgUHlfREVDUkVGKG1ldGhvZCk7CisgICAgIHJldHVybiByZXN1bHQ7CisgfQorLXN0YXRpYyBp bnQKKy1fX1B5eF9DeUZ1bmN0aW9uX3NldF9kZWZhdWx0cyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0 ICpvcCwgUHlPYmplY3QqIHZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpIHsKKy0g ICAgUHlPYmplY3QqIHRtcDsKKy0gICAgaWYgKCF2YWx1ZSkgeworLSAgICAgICAgdmFsdWUgPSBQ eV9Ob25lOworLSAgICB9IGVsc2UgaWYgKHZhbHVlICE9IFB5X05vbmUgJiYgIVB5VHVwbGVfQ2hl Y2sodmFsdWUpKSB7CistICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAor LSAgICAgICAgICAgICAgICAgICAgICAgICJfX2RlZmF1bHRzX18gbXVzdCBiZSBzZXQgdG8gYSB0 dXBsZSBvYmplY3QiKTsKKy0gICAgICAgIHJldHVybiAtMTsKKy0gICAgfQorLSAgICBQeV9JTkNS RUYodmFsdWUpOworLSAgICB0bXAgPSBvcC0+ZGVmYXVsdHNfdHVwbGU7CistICAgIG9wLT5kZWZh dWx0c190dXBsZSA9IHZhbHVlOworLSAgICBQeV9YREVDUkVGKHRtcCk7CistICAgIHJldHVybiAw OworLX0KKy1zdGF0aWMgUHlPYmplY3QgKgorLV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2RlZmF1bHRz KF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQp IHsKKy0gICAgUHlPYmplY3QqIHJlc3VsdCA9IG9wLT5kZWZhdWx0c190dXBsZTsKKy0gICAgaWYg KHVubGlrZWx5KCFyZXN1bHQpKSB7CistICAgICAgICBpZiAob3AtPmRlZmF1bHRzX2dldHRlcikg eworLSAgICAgICAgICAgIGlmIChfX1B5eF9DeUZ1bmN0aW9uX2luaXRfZGVmYXVsdHMob3ApIDwg MCkgcmV0dXJuIE5VTEw7CistICAgICAgICAgICAgcmVzdWx0ID0gb3AtPmRlZmF1bHRzX3R1cGxl OworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICByZXN1bHQgPSBQeV9Ob25lOworLSAg ICAgICAgfQorK3N0YXRpYyBQeU9iamVjdCogX19QeXhfUHlPYmplY3RfQ2FsbE1ldGhvZDEoUHlP YmplY3QqIG9iaiwgUHlPYmplY3QqIG1ldGhvZF9uYW1lLCBQeU9iamVjdCogYXJnKSB7CisrICAg IFB5T2JqZWN0ICptZXRob2QgPSBOVUxMLCAqcmVzdWx0OworKyAgICBpbnQgaXNfbWV0aG9kID0g X19QeXhfUHlPYmplY3RfR2V0TWV0aG9kKG9iaiwgbWV0aG9kX25hbWUsICZtZXRob2QpOworKyAg ICBpZiAobGlrZWx5KGlzX21ldGhvZCkpIHsKKysgICAgICAgIHJlc3VsdCA9IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhtZXRob2QsIG9iaiwgYXJnKTsKKysgICAgICAgIFB5X0RFQ1JFRihtZXRo b2QpOworKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgfQorLSAgICBQeV9JTkNSRUYocmVz dWx0KTsKKy0gICAgcmV0dXJuIHJlc3VsdDsKKysgICAgaWYgKHVubGlrZWx5KCFtZXRob2QpKSBy ZXR1cm4gTlVMTDsKKysgICAgcmV0dXJuIF9fUHl4X19QeU9iamVjdF9DYWxsTWV0aG9kMShtZXRo b2QsIGFyZyk7CisgfQorLXN0YXRpYyBpbnQKKy1fX1B5eF9DeUZ1bmN0aW9uX3NldF9rd2RlZmF1 bHRzKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBQeU9iamVjdCogdmFsdWUsIENZVEhPTl9V TlVTRUQgdm9pZCAqY29udGV4dCkgeworLSAgICBQeU9iamVjdCogdG1wOworLSAgICBpZiAoIXZh bHVlKSB7CistICAgICAgICB2YWx1ZSA9IFB5X05vbmU7CistICAgIH0gZWxzZSBpZiAodmFsdWUg IT0gUHlfTm9uZSAmJiAhUHlEaWN0X0NoZWNrKHZhbHVlKSkgeworLSAgICAgICAgUHlFcnJfU2V0 U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAiX19rd2Rl ZmF1bHRzX18gbXVzdCBiZSBzZXQgdG8gYSBkaWN0IG9iamVjdCIpOworLSAgICAgICAgcmV0dXJu IC0xOworKworKy8qIGFwcGVuZCAqLworK3N0YXRpYyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9Q eU9iamVjdF9BcHBlbmQoUHlPYmplY3QqIEwsIFB5T2JqZWN0KiB4KSB7CisrICAgIGlmIChsaWtl bHkoUHlMaXN0X0NoZWNrRXhhY3QoTCkpKSB7CisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhf UHlMaXN0X0FwcGVuZChMLCB4KSA8IDApKSByZXR1cm4gLTE7CisrICAgIH0gZWxzZSB7CisrICAg ICAgICBQeU9iamVjdCogcmV0dmFsID0gX19QeXhfUHlPYmplY3RfQ2FsbE1ldGhvZDEoTCwgX19w eXhfbl9zX2FwcGVuZCwgeCk7CisrICAgICAgICBpZiAodW5saWtlbHkoIXJldHZhbCkpCisrICAg ICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7CisgICAgIH0K Ky0gICAgUHlfSU5DUkVGKHZhbHVlKTsKKy0gICAgdG1wID0gb3AtPmRlZmF1bHRzX2t3ZGljdDsK Ky0gICAgb3AtPmRlZmF1bHRzX2t3ZGljdCA9IHZhbHVlOworLSAgICBQeV9YREVDUkVGKHRtcCk7 CisgICAgIHJldHVybiAwOworIH0KKy1zdGF0aWMgUHlPYmplY3QgKgorLV9fUHl4X0N5RnVuY3Rp b25fZ2V0X2t3ZGVmYXVsdHMoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIENZVEhPTl9VTlVT RUQgdm9pZCAqY29udGV4dCkgeworLSAgICBQeU9iamVjdCogcmVzdWx0ID0gb3AtPmRlZmF1bHRz X2t3ZGljdDsKKy0gICAgaWYgKHVubGlrZWx5KCFyZXN1bHQpKSB7CistICAgICAgICBpZiAob3At PmRlZmF1bHRzX2dldHRlcikgeworLSAgICAgICAgICAgIGlmIChfX1B5eF9DeUZ1bmN0aW9uX2lu aXRfZGVmYXVsdHMob3ApIDwgMCkgcmV0dXJuIE5VTEw7CistICAgICAgICAgICAgcmVzdWx0ID0g b3AtPmRlZmF1bHRzX2t3ZGljdDsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgcmVz dWx0ID0gUHlfTm9uZTsKKysKKysvKiBQeU9iamVjdENhbGxOb0FyZyAqLworKyNpZiBDWVRIT05f Q09NUElMSU5HX0lOX0NQWVRIT04KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19Q eXhfUHlPYmplY3RfQ2FsbE5vQXJnKFB5T2JqZWN0ICpmdW5jKSB7CisrI2lmIENZVEhPTl9GQVNU X1BZQ0FMTAorKyAgICBpZiAoUHlGdW5jdGlvbl9DaGVjayhmdW5jKSkgeworKyAgICAgICAgcmV0 dXJuIF9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGwoZnVuYywgTlVMTCwgMCk7CisrICAgIH0KKysj ZW5kaWYKKysjaWZkZWYgX19QeXhfQ3lGdW5jdGlvbl9VU0VECisrICAgIGlmIChsaWtlbHkoUHlD RnVuY3Rpb25fQ2hlY2soZnVuYykgfHwgX19QeXhfQ3lGdW5jdGlvbl9DaGVjayhmdW5jKSkpCisr I2Vsc2UKKysgICAgaWYgKGxpa2VseShQeUNGdW5jdGlvbl9DaGVjayhmdW5jKSkpCisrI2VuZGlm CisrICAgIHsKKysgICAgICAgIGlmIChsaWtlbHkoUHlDRnVuY3Rpb25fR0VUX0ZMQUdTKGZ1bmMp ICYgTUVUSF9OT0FSR1MpKSB7CisrICAgICAgICAgICAgcmV0dXJuIF9fUHl4X1B5T2JqZWN0X0Nh bGxNZXRoTyhmdW5jLCBOVUxMKTsKKyAgICAgICAgIH0KKyAgICAgfQorLSAgICBQeV9JTkNSRUYo cmVzdWx0KTsKKy0gICAgcmV0dXJuIHJlc3VsdDsKKysgICAgcmV0dXJuIF9fUHl4X1B5T2JqZWN0 X0NhbGwoZnVuYywgX19weXhfZW1wdHlfdHVwbGUsIE5VTEwpOworIH0KKy1zdGF0aWMgaW50Cist X19QeXhfQ3lGdW5jdGlvbl9zZXRfYW5ub3RhdGlvbnMoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAq b3AsIFB5T2JqZWN0KiB2YWx1ZSwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KSB7CistICAg IFB5T2JqZWN0KiB0bXA7CistICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPT0gUHlfTm9uZSkgewor LSAgICAgICAgdmFsdWUgPSBOVUxMOworLSAgICB9IGVsc2UgaWYgKCFQeURpY3RfQ2hlY2sodmFs dWUpKSB7CistICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorLSAgICAg ICAgICAgICAgICAgICAgICAgICJfX2Fubm90YXRpb25zX18gbXVzdCBiZSBzZXQgdG8gYSBkaWN0 IG9iamVjdCIpOworLSAgICAgICAgcmV0dXJuIC0xOworKyNlbmRpZgorKworKy8qIEdldEl0ZW1J bnQgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fUHl4X0dldEl0ZW1JbnRfR2VuZXJpYyhQeU9iamVj dCAqbywgUHlPYmplY3QqIGopIHsKKysgICAgUHlPYmplY3QgKnI7CisrICAgIGlmICghaikgcmV0 dXJuIE5VTEw7CisrICAgIHIgPSBQeU9iamVjdF9HZXRJdGVtKG8sIGopOworKyAgICBQeV9ERUNS RUYoaik7CisrICAgIHJldHVybiByOworK30KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVj dCAqX19QeXhfR2V0SXRlbUludF9MaXN0X0Zhc3QoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgaSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENZVEhPTl9OQ1BfVU5VU0VEIGludCB3cmFwYXJvdW5kLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX05D UF9VTlVTRUQgaW50IGJvdW5kc2NoZWNrKSB7CisrI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNS T1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCisrICAgIFB5X3NzaXplX3Qgd3JhcHBl ZF9pID0gaTsKKysgICAgaWYgKHdyYXBhcm91bmQgJiB1bmxpa2VseShpIDwgMCkpIHsKKysgICAg ICAgIHdyYXBwZWRfaSArPSBQeUxpc3RfR0VUX1NJWkUobyk7CisgICAgIH0KKy0gICAgUHlfWElO Q1JFRih2YWx1ZSk7CistICAgIHRtcCA9IG9wLT5mdW5jX2Fubm90YXRpb25zOworLSAgICBvcC0+ ZnVuY19hbm5vdGF0aW9ucyA9IHZhbHVlOworLSAgICBQeV9YREVDUkVGKHRtcCk7CistICAgIHJl dHVybiAwOworKyAgICBpZiAoKCFib3VuZHNjaGVjaykgfHwgbGlrZWx5KF9fUHl4X2lzX3ZhbGlk X2luZGV4KHdyYXBwZWRfaSwgUHlMaXN0X0dFVF9TSVpFKG8pKSkpIHsKKysgICAgICAgIFB5T2Jq ZWN0ICpyID0gUHlMaXN0X0dFVF9JVEVNKG8sIHdyYXBwZWRfaSk7CisrICAgICAgICBQeV9JTkNS RUYocik7CisrICAgICAgICByZXR1cm4gcjsKKysgICAgfQorKyAgICByZXR1cm4gX19QeXhfR2V0 SXRlbUludF9HZW5lcmljKG8sIFB5SW50X0Zyb21Tc2l6ZV90KGkpKTsKKysjZWxzZQorKyAgICBy ZXR1cm4gUHlTZXF1ZW5jZV9HZXRJdGVtKG8sIGkpOworKyNlbmRpZgorIH0KKy1zdGF0aWMgUHlP YmplY3QgKgorLV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2Fubm90YXRpb25zKF9fcHl4X0N5RnVuY3Rp b25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpIHsKKy0gICAgUHlPYmpl Y3QqIHJlc3VsdCA9IG9wLT5mdW5jX2Fubm90YXRpb25zOworLSAgICBpZiAodW5saWtlbHkoIXJl c3VsdCkpIHsKKy0gICAgICAgIHJlc3VsdCA9IFB5RGljdF9OZXcoKTsKKy0gICAgICAgIGlmICh1 bmxpa2VseSghcmVzdWx0KSkgcmV0dXJuIE5VTEw7CistICAgICAgICBvcC0+ZnVuY19hbm5vdGF0 aW9ucyA9IHJlc3VsdDsKKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCAqX19QeXhfR2V0 SXRlbUludF9UdXBsZV9GYXN0KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGksCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDWVRI T05fTkNQX1VOVVNFRCBpbnQgd3JhcGFyb3VuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENZVEhPTl9OQ1BfVU5VU0VEIGlu dCBib3VuZHNjaGVjaykgeworKyNpZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRI T05fQVZPSURfQk9SUk9XRURfUkVGUworKyAgICBQeV9zc2l6ZV90IHdyYXBwZWRfaSA9IGk7Cisr ICAgIGlmICh3cmFwYXJvdW5kICYgdW5saWtlbHkoaSA8IDApKSB7CisrICAgICAgICB3cmFwcGVk X2kgKz0gUHlUdXBsZV9HRVRfU0laRShvKTsKKyAgICAgfQorLSAgICBQeV9JTkNSRUYocmVzdWx0 KTsKKy0gICAgcmV0dXJuIHJlc3VsdDsKKysgICAgaWYgKCghYm91bmRzY2hlY2spIHx8IGxpa2Vs eShfX1B5eF9pc192YWxpZF9pbmRleCh3cmFwcGVkX2ksIFB5VHVwbGVfR0VUX1NJWkUobykpKSkg eworKyAgICAgICAgUHlPYmplY3QgKnIgPSBQeVR1cGxlX0dFVF9JVEVNKG8sIHdyYXBwZWRfaSk7 CisrICAgICAgICBQeV9JTkNSRUYocik7CisrICAgICAgICByZXR1cm4gcjsKKysgICAgfQorKyAg ICByZXR1cm4gX19QeXhfR2V0SXRlbUludF9HZW5lcmljKG8sIFB5SW50X0Zyb21Tc2l6ZV90KGkp KTsKKysjZWxzZQorKyAgICByZXR1cm4gUHlTZXF1ZW5jZV9HZXRJdGVtKG8sIGkpOworKyNlbmRp ZgorIH0KKy1zdGF0aWMgUHlHZXRTZXREZWYgX19weXhfQ3lGdW5jdGlvbl9nZXRzZXRzW10gPSB7 CistICAgIHsoY2hhciAqKSAiZnVuY19kb2MiLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0 X2RvYywgKHNldHRlcilfX1B5eF9DeUZ1bmN0aW9uX3NldF9kb2MsIDAsIDB9LAorLSAgICB7KGNo YXIgKikgIl9fZG9jX18iLCAgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9kb2MsIChzZXR0 ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfZG9jLCAwLCAwfSwKKy0gICAgeyhjaGFyICopICJmdW5j X25hbWUiLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X25hbWUsIChzZXR0ZXIpX19QeXhf Q3lGdW5jdGlvbl9zZXRfbmFtZSwgMCwgMH0sCistICAgIHsoY2hhciAqKSAiX19uYW1lX18iLCAo Z2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X25hbWUsIChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlv bl9zZXRfbmFtZSwgMCwgMH0sCistICAgIHsoY2hhciAqKSAiX19xdWFsbmFtZV9fIiwgKGdldHRl cilfX1B5eF9DeUZ1bmN0aW9uX2dldF9xdWFsbmFtZSwgKHNldHRlcilfX1B5eF9DeUZ1bmN0aW9u X3NldF9xdWFsbmFtZSwgMCwgMH0sCistICAgIHsoY2hhciAqKSAiX19zZWxmX18iLCAoZ2V0dGVy KV9fUHl4X0N5RnVuY3Rpb25fZ2V0X3NlbGYsIDAsIDAsIDB9LAorLSAgICB7KGNoYXIgKikgImZ1 bmNfZGljdCIsIChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9nZXRfZGljdCwgKHNldHRlcilfX1B5 eF9DeUZ1bmN0aW9uX3NldF9kaWN0LCAwLCAwfSwKKy0gICAgeyhjaGFyICopICJfX2RpY3RfXyIs IChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9nZXRfZGljdCwgKHNldHRlcilfX1B5eF9DeUZ1bmN0 aW9uX3NldF9kaWN0LCAwLCAwfSwKKy0gICAgeyhjaGFyICopICJmdW5jX2dsb2JhbHMiLCAoZ2V0 dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2dsb2JhbHMsIDAsIDAsIDB9LAorLSAgICB7KGNoYXIg KikgIl9fZ2xvYmFsc19fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9nbG9iYWxzLCAw LCAwLCAwfSwKKy0gICAgeyhjaGFyICopICJmdW5jX2Nsb3N1cmUiLCAoZ2V0dGVyKV9fUHl4X0N5 RnVuY3Rpb25fZ2V0X2Nsb3N1cmUsIDAsIDAsIDB9LAorLSAgICB7KGNoYXIgKikgIl9fY2xvc3Vy ZV9fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9jbG9zdXJlLCAwLCAwLCAwfSwKKy0g ICAgeyhjaGFyICopICJmdW5jX2NvZGUiLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2Nv ZGUsIDAsIDAsIDB9LAorLSAgICB7KGNoYXIgKikgIl9fY29kZV9fIiwgKGdldHRlcilfX1B5eF9D eUZ1bmN0aW9uX2dldF9jb2RlLCAwLCAwLCAwfSwKKy0gICAgeyhjaGFyICopICJmdW5jX2RlZmF1 bHRzIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9kZWZhdWx0cywgKHNldHRlcilfX1B5 eF9DeUZ1bmN0aW9uX3NldF9kZWZhdWx0cywgMCwgMH0sCistICAgIHsoY2hhciAqKSAiX19kZWZh dWx0c19fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9kZWZhdWx0cywgKHNldHRlcilf X1B5eF9DeUZ1bmN0aW9uX3NldF9kZWZhdWx0cywgMCwgMH0sCistICAgIHsoY2hhciAqKSAiX19r d2RlZmF1bHRzX18iLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2t3ZGVmYXVsdHMsIChz ZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfa3dkZWZhdWx0cywgMCwgMH0sCistICAgIHsoY2hh ciAqKSAiX19hbm5vdGF0aW9uc19fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9hbm5v dGF0aW9ucywgKHNldHRlcilfX1B5eF9DeUZ1bmN0aW9uX3NldF9hbm5vdGF0aW9ucywgMCwgMH0s CistICAgIHswLCAwLCAwLCAwLCAwfQorLX07Cistc3RhdGljIFB5TWVtYmVyRGVmIF9fcHl4X0N5 RnVuY3Rpb25fbWVtYmVyc1tdID0geworLSAgICB7KGNoYXIgKikgIl9fbW9kdWxlX18iLCBUX09C SkVDVCwgb2Zmc2V0b2YoUHlDRnVuY3Rpb25PYmplY3QsIG1fbW9kdWxlKSwgUFlfV1JJVEVfUkVT VFJJQ1RFRCwgMH0sCistICAgIHswLCAwLCAwLCAgMCwgMH0KKy19OworLXN0YXRpYyBQeU9iamVj dCAqCistX19QeXhfQ3lGdW5jdGlvbl9yZWR1Y2UoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSwg Q1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqYXJncykKKy17CistI2lmIFBZX01BSk9SX1ZFUlNJT04g Pj0gMworLSAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcobS0+ZnVuYy5tX21sLT5tbF9u YW1lKTsKKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCAqX19QeXhfR2V0SXRlbUludF9G YXN0KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGksIGludCBpc19saXN0LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX05DUF9VTlVT RUQgaW50IHdyYXBhcm91bmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDWVRIT05fTkNQX1VOVVNFRCBpbnQgYm91bmRzY2hlY2spIHsKKysj aWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JF RlMgJiYgQ1lUSE9OX1VTRV9UWVBFX1NMT1RTCisrICAgIGlmIChpc19saXN0IHx8IFB5TGlzdF9D aGVja0V4YWN0KG8pKSB7CisrICAgICAgICBQeV9zc2l6ZV90IG4gPSAoKCF3cmFwYXJvdW5kKSB8 IGxpa2VseShpID49IDApKSA/IGkgOiBpICsgUHlMaXN0X0dFVF9TSVpFKG8pOworKyAgICAgICAg aWYgKCghYm91bmRzY2hlY2spIHx8IChsaWtlbHkoX19QeXhfaXNfdmFsaWRfaW5kZXgobiwgUHlM aXN0X0dFVF9TSVpFKG8pKSkpKSB7CisrICAgICAgICAgICAgUHlPYmplY3QgKnIgPSBQeUxpc3Rf R0VUX0lURU0obywgbik7CisrICAgICAgICAgICAgUHlfSU5DUkVGKHIpOworKyAgICAgICAgICAg IHJldHVybiByOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hl Y2tFeGFjdChvKSkgeworKyAgICAgICAgUHlfc3NpemVfdCBuID0gKCghd3JhcGFyb3VuZCkgfCBs aWtlbHkoaSA+PSAwKSkgPyBpIDogaSArIFB5VHVwbGVfR0VUX1NJWkUobyk7CisrICAgICAgICBp ZiAoKCFib3VuZHNjaGVjaykgfHwgbGlrZWx5KF9fUHl4X2lzX3ZhbGlkX2luZGV4KG4sIFB5VHVw bGVfR0VUX1NJWkUobykpKSkgeworKyAgICAgICAgICAgIFB5T2JqZWN0ICpyID0gUHlUdXBsZV9H RVRfSVRFTShvLCBuKTsKKysgICAgICAgICAgICBQeV9JTkNSRUYocik7CisrICAgICAgICAgICAg cmV0dXJuIHI7CisrICAgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgICBQeVNlcXVlbmNl TWV0aG9kcyAqbSA9IFB5X1RZUEUobyktPnRwX2FzX3NlcXVlbmNlOworKyAgICAgICAgaWYgKGxp a2VseShtICYmIG0tPnNxX2l0ZW0pKSB7CisrICAgICAgICAgICAgaWYgKHdyYXBhcm91bmQgJiYg dW5saWtlbHkoaSA8IDApICYmIGxpa2VseShtLT5zcV9sZW5ndGgpKSB7CisrICAgICAgICAgICAg ICAgIFB5X3NzaXplX3QgbCA9IG0tPnNxX2xlbmd0aChvKTsKKysgICAgICAgICAgICAgICAgaWYg KGxpa2VseShsID49IDApKSB7CisrICAgICAgICAgICAgICAgICAgICBpICs9IGw7CisrICAgICAg ICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2Vw dGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisrICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworKyAg ICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHJldHVybiBtLT5z cV9pdGVtKG8sIGkpOworKyAgICAgICAgfQorKyAgICB9CisgI2Vsc2UKKy0gICAgcmV0dXJuIFB5 U3RyaW5nX0Zyb21TdHJpbmcobS0+ZnVuYy5tX21sLT5tbF9uYW1lKTsKKysgICAgaWYgKGlzX2xp c3QgfHwgUHlTZXF1ZW5jZV9DaGVjayhvKSkgeworKyAgICAgICAgcmV0dXJuIFB5U2VxdWVuY2Vf R2V0SXRlbShvLCBpKTsKKysgICAgfQorICNlbmRpZgorKyAgICByZXR1cm4gX19QeXhfR2V0SXRl bUludF9HZW5lcmljKG8sIFB5SW50X0Zyb21Tc2l6ZV90KGkpKTsKKyB9Cistc3RhdGljIFB5TWV0 aG9kRGVmIF9fcHl4X0N5RnVuY3Rpb25fbWV0aG9kc1tdID0geworLSAgICB7Il9fcmVkdWNlX18i LCAoUHlDRnVuY3Rpb24pX19QeXhfQ3lGdW5jdGlvbl9yZWR1Y2UsIE1FVEhfVkFSQVJHUywgMH0s CistICAgIHswLCAwLCAwLCAwfQorLX07CistI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA1MDBB MAorLSNkZWZpbmUgX19QeXhfQ3lGdW5jdGlvbl93ZWFrcmVmbGlzdChjeWZ1bmMpICgoY3lmdW5j KS0+ZnVuY193ZWFrcmVmbGlzdCkKKysKKysvKiBEZWxJdGVtSW50ICovCisrc3RhdGljIGludCBf X1B5eF9EZWxJdGVtX0dlbmVyaWMoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpqKSB7CisrICAgIGlu dCByOworKyAgICBpZiAoIWopIHJldHVybiAtMTsKKysgICAgciA9IFB5T2JqZWN0X0RlbEl0ZW0o bywgaik7CisrICAgIFB5X0RFQ1JFRihqKTsKKysgICAgcmV0dXJuIHI7CisrfQorK3N0YXRpYyBD WVRIT05fSU5MSU5FIGludCBfX1B5eF9EZWxJdGVtSW50X0Zhc3QoUHlPYmplY3QgKm8sIFB5X3Nz aXplX3QgaSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IENZVEhPTl9VTlVTRUQgaW50IGlzX2xpc3QsIENZVEhPTl9OQ1BfVU5VU0VEIGludCB3cmFwYXJv dW5kKSB7CisrI2lmICFDWVRIT05fVVNFX1RZUEVfU0xPVFMKKysgICAgaWYgKGlzX2xpc3QgfHwg UHlTZXF1ZW5jZV9DaGVjayhvKSkgeworKyAgICAgICAgcmV0dXJuIFB5U2VxdWVuY2VfRGVsSXRl bShvLCBpKTsKKysgICAgfQorICNlbHNlCistI2RlZmluZSBfX1B5eF9DeUZ1bmN0aW9uX3dlYWty ZWZsaXN0KGN5ZnVuYykgKChjeWZ1bmMpLT5mdW5jLm1fd2Vha3JlZmxpc3QpCisrICAgIFB5U2Vx dWVuY2VNZXRob2RzICptID0gUHlfVFlQRShvKS0+dHBfYXNfc2VxdWVuY2U7CisrICAgIGlmIChs aWtlbHkobSAmJiBtLT5zcV9hc3NfaXRlbSkpIHsKKysgICAgICAgIGlmICh3cmFwYXJvdW5kICYm IHVubGlrZWx5KGkgPCAwKSAmJiBsaWtlbHkobS0+c3FfbGVuZ3RoKSkgeworKyAgICAgICAgICAg IFB5X3NzaXplX3QgbCA9IG0tPnNxX2xlbmd0aChvKTsKKysgICAgICAgICAgICBpZiAobGlrZWx5 KGwgPj0gMCkpIHsKKysgICAgICAgICAgICAgICAgaSArPSBsOworKyAgICAgICAgICAgIH0gZWxz ZSB7CisrICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19P dmVyZmxvd0Vycm9yKSkKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAg ICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAg ICAgICByZXR1cm4gbS0+c3FfYXNzX2l0ZW0obywgaSwgKFB5T2JqZWN0ICopTlVMTCk7CisrICAg IH0KKyAjZW5kaWYKKy1zdGF0aWMgUHlPYmplY3QgKl9fUHl4X0N5RnVuY3Rpb25fSW5pdChfX3B5 eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgUHlNZXRob2REZWYgKm1sLCBpbnQgZmxhZ3MsIFB5T2Jq ZWN0KiBxdWFsbmFtZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ eU9iamVjdCAqY2xvc3VyZSwgUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QqIGdsb2JhbHMsIFB5 T2JqZWN0KiBjb2RlKSB7CistICAgIGlmICh1bmxpa2VseShvcCA9PSBOVUxMKSkKKy0gICAgICAg IHJldHVybiBOVUxMOworLSAgICBvcC0+ZmxhZ3MgPSBmbGFnczsKKy0gICAgX19QeXhfQ3lGdW5j dGlvbl93ZWFrcmVmbGlzdChvcCkgPSBOVUxMOworLSAgICBvcC0+ZnVuYy5tX21sID0gbWw7Cist ICAgIG9wLT5mdW5jLm1fc2VsZiA9IChQeU9iamVjdCAqKSBvcDsKKy0gICAgUHlfWElOQ1JFRihj bG9zdXJlKTsKKy0gICAgb3AtPmZ1bmNfY2xvc3VyZSA9IGNsb3N1cmU7CistICAgIFB5X1hJTkNS RUYobW9kdWxlKTsKKy0gICAgb3AtPmZ1bmMubV9tb2R1bGUgPSBtb2R1bGU7CistICAgIG9wLT5m dW5jX2RpY3QgPSBOVUxMOworLSAgICBvcC0+ZnVuY19uYW1lID0gTlVMTDsKKy0gICAgUHlfSU5D UkVGKHF1YWxuYW1lKTsKKy0gICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSBxdWFsbmFtZTsKKy0gICAg b3AtPmZ1bmNfZG9jID0gTlVMTDsKKy0gICAgb3AtPmZ1bmNfY2xhc3NvYmogPSBOVUxMOworLSAg ICBvcC0+ZnVuY19nbG9iYWxzID0gZ2xvYmFsczsKKy0gICAgUHlfSU5DUkVGKG9wLT5mdW5jX2ds b2JhbHMpOworLSAgICBQeV9YSU5DUkVGKGNvZGUpOworLSAgICBvcC0+ZnVuY19jb2RlID0gY29k ZTsKKy0gICAgb3AtPmRlZmF1bHRzX3B5b2JqZWN0cyA9IDA7CistICAgIG9wLT5kZWZhdWx0c19z aXplID0gMDsKKy0gICAgb3AtPmRlZmF1bHRzID0gTlVMTDsKKy0gICAgb3AtPmRlZmF1bHRzX3R1 cGxlID0gTlVMTDsKKy0gICAgb3AtPmRlZmF1bHRzX2t3ZGljdCA9IE5VTEw7CistICAgIG9wLT5k ZWZhdWx0c19nZXR0ZXIgPSBOVUxMOworLSAgICBvcC0+ZnVuY19hbm5vdGF0aW9ucyA9IE5VTEw7 CistICAgIHJldHVybiAoUHlPYmplY3QgKikgb3A7CisrICAgIHJldHVybiBfX1B5eF9EZWxJdGVt X0dlbmVyaWMobywgUHlJbnRfRnJvbVNzaXplX3QoaSkpOworIH0KKy1zdGF0aWMgaW50CistX19Q eXhfQ3lGdW5jdGlvbl9jbGVhcihfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICptKQorKworKy8qIEtl eXdvcmRTdHJpbmdDaGVjayAqLworK3N0YXRpYyBpbnQgX19QeXhfQ2hlY2tLZXl3b3JkU3RyaW5n cygKKysgICAgUHlPYmplY3QgKmt3ZGljdCwKKysgICAgY29uc3QgY2hhciogZnVuY3Rpb25fbmFt ZSwKKysgICAgaW50IGt3X2FsbG93ZWQpCisgeworLSAgICBQeV9DTEVBUihtLT5mdW5jX2Nsb3N1 cmUpOworLSAgICBQeV9DTEVBUihtLT5mdW5jLm1fbW9kdWxlKTsKKy0gICAgUHlfQ0xFQVIobS0+ ZnVuY19kaWN0KTsKKy0gICAgUHlfQ0xFQVIobS0+ZnVuY19uYW1lKTsKKy0gICAgUHlfQ0xFQVIo bS0+ZnVuY19xdWFsbmFtZSk7CistICAgIFB5X0NMRUFSKG0tPmZ1bmNfZG9jKTsKKy0gICAgUHlf Q0xFQVIobS0+ZnVuY19nbG9iYWxzKTsKKy0gICAgUHlfQ0xFQVIobS0+ZnVuY19jb2RlKTsKKy0g ICAgUHlfQ0xFQVIobS0+ZnVuY19jbGFzc29iaik7CistICAgIFB5X0NMRUFSKG0tPmRlZmF1bHRz X3R1cGxlKTsKKy0gICAgUHlfQ0xFQVIobS0+ZGVmYXVsdHNfa3dkaWN0KTsKKy0gICAgUHlfQ0xF QVIobS0+ZnVuY19hbm5vdGF0aW9ucyk7CistICAgIGlmIChtLT5kZWZhdWx0cykgeworLSAgICAg ICAgUHlPYmplY3QgKipweWRlZmF1bHRzID0gX19QeXhfQ3lGdW5jdGlvbl9EZWZhdWx0cyhQeU9i amVjdCAqLCBtKTsKKy0gICAgICAgIGludCBpOworLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG0t PmRlZmF1bHRzX3B5b2JqZWN0czsgaSsrKQorLSAgICAgICAgICAgIFB5X1hERUNSRUYocHlkZWZh dWx0c1tpXSk7CistICAgICAgICBQeU9iamVjdF9GcmVlKG0tPmRlZmF1bHRzKTsKKy0gICAgICAg IG0tPmRlZmF1bHRzID0gTlVMTDsKKysgICAgUHlPYmplY3QqIGtleSA9IDA7CisrICAgIFB5X3Nz aXplX3QgcG9zID0gMDsKKysjaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZCisrICAgIGlmICgh a3dfYWxsb3dlZCAmJiBQeURpY3RfTmV4dChrd2RpY3QsICZwb3MsICZrZXksIDApKQorKyAgICAg ICAgZ290byBpbnZhbGlkX2tleXdvcmQ7CisrICAgIHJldHVybiAxOworKyNlbHNlCisrICAgIHdo aWxlIChQeURpY3RfTmV4dChrd2RpY3QsICZwb3MsICZrZXksIDApKSB7CisrICAgICAgICAjaWYg UFlfTUFKT1JfVkVSU0lPTiA8IDMKKysgICAgICAgIGlmICh1bmxpa2VseSghUHlTdHJpbmdfQ2hl Y2soa2V5KSkpCisrICAgICAgICAjZW5kaWYKKysgICAgICAgICAgICBpZiAodW5saWtlbHkoIVB5 VW5pY29kZV9DaGVjayhrZXkpKSkKKysgICAgICAgICAgICAgICAgZ290byBpbnZhbGlkX2tleXdv cmRfdHlwZTsKKyAgICAgfQorKyAgICBpZiAoKCFrd19hbGxvd2VkKSAmJiB1bmxpa2VseShrZXkp KQorKyAgICAgICAgZ290byBpbnZhbGlkX2tleXdvcmQ7CisrICAgIHJldHVybiAxOworK2ludmFs aWRfa2V5d29yZF90eXBlOgorKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorKyAg ICAgICAgIiUuMjAwcygpIGtleXdvcmRzIG11c3QgYmUgc3RyaW5ncyIsIGZ1bmN0aW9uX25hbWUp OworKyAgICByZXR1cm4gMDsKKysjZW5kaWYKKytpbnZhbGlkX2tleXdvcmQ6CisrICAgIFB5RXJy X0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisrICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwor KyAgICAgICAgIiUuMjAwcygpIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnQgJyUu MjAwcyciLAorKyAgICAgICAgZnVuY3Rpb25fbmFtZSwgUHlTdHJpbmdfQXNTdHJpbmcoa2V5KSk7 CisrICAgICNlbHNlCisrICAgICAgICAiJXMoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFy Z3VtZW50ICclVSciLAorKyAgICAgICAgZnVuY3Rpb25fbmFtZSwga2V5KTsKKysgICAgI2VuZGlm CisgICAgIHJldHVybiAwOworIH0KKy1zdGF0aWMgdm9pZCBfX1B5eF9fQ3lGdW5jdGlvbl9kZWFs bG9jKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm0pCisteworLSAgICBpZiAoX19QeXhfQ3lGdW5j dGlvbl93ZWFrcmVmbGlzdChtKSAhPSBOVUxMKQorLSAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFr UmVmcygoUHlPYmplY3QgKikgbSk7CistICAgIF9fUHl4X0N5RnVuY3Rpb25fY2xlYXIobSk7Cist ICAgIFB5T2JqZWN0X0dDX0RlbChtKTsKKy19Cistc3RhdGljIHZvaWQgX19QeXhfQ3lGdW5jdGlv bl9kZWFsbG9jKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm0pCisteworLSAgICBQeU9iamVjdF9H Q19VblRyYWNrKG0pOworLSAgICBfX1B5eF9fQ3lGdW5jdGlvbl9kZWFsbG9jKG0pOworKworKy8q IE5vbmUgKi8KKytzdGF0aWMgQ1lUSE9OX0lOTElORSB2b2lkIF9fUHl4X1JhaXNlQ2xvc3VyZU5h bWVFcnJvcihjb25zdCBjaGFyICp2YXJuYW1lKSB7CisrICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19O YW1lRXJyb3IsICJmcmVlIHZhcmlhYmxlICclcycgcmVmZXJlbmNlZCBiZWZvcmUgYXNzaWdubWVu dCBpbiBlbmNsb3Npbmcgc2NvcGUiLCB2YXJuYW1lKTsKKyB9Cistc3RhdGljIGludCBfX1B5eF9D eUZ1bmN0aW9uX3RyYXZlcnNlKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm0sIHZpc2l0cHJvYyB2 aXNpdCwgdm9pZCAqYXJnKQorLXsKKy0gICAgUHlfVklTSVQobS0+ZnVuY19jbG9zdXJlKTsKKy0g ICAgUHlfVklTSVQobS0+ZnVuYy5tX21vZHVsZSk7CistICAgIFB5X1ZJU0lUKG0tPmZ1bmNfZGlj dCk7CistICAgIFB5X1ZJU0lUKG0tPmZ1bmNfbmFtZSk7CistICAgIFB5X1ZJU0lUKG0tPmZ1bmNf cXVhbG5hbWUpOworLSAgICBQeV9WSVNJVChtLT5mdW5jX2RvYyk7CistICAgIFB5X1ZJU0lUKG0t PmZ1bmNfZ2xvYmFscyk7CistICAgIFB5X1ZJU0lUKG0tPmZ1bmNfY29kZSk7CistICAgIFB5X1ZJ U0lUKG0tPmZ1bmNfY2xhc3NvYmopOworLSAgICBQeV9WSVNJVChtLT5kZWZhdWx0c190dXBsZSk7 CistICAgIFB5X1ZJU0lUKG0tPmRlZmF1bHRzX2t3ZGljdCk7CistICAgIGlmIChtLT5kZWZhdWx0 cykgeworLSAgICAgICAgUHlPYmplY3QgKipweWRlZmF1bHRzID0gX19QeXhfQ3lGdW5jdGlvbl9E ZWZhdWx0cyhQeU9iamVjdCAqLCBtKTsKKy0gICAgICAgIGludCBpOworLSAgICAgICAgZm9yIChp ID0gMDsgaSA8IG0tPmRlZmF1bHRzX3B5b2JqZWN0czsgaSsrKQorLSAgICAgICAgICAgIFB5X1ZJ U0lUKHB5ZGVmYXVsdHNbaV0pOworKworKy8qIFJhaXNlRXhjZXB0aW9uICovCisrI2lmIFBZX01B Sk9SX1ZFUlNJT04gPCAzCisrc3RhdGljIHZvaWQgX19QeXhfUmFpc2UoUHlPYmplY3QgKnR5cGUs IFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRiLAorKyAgICAgICAgICAgICAgICAgICAgICAg IENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmNhdXNlKSB7CisrICAgIF9fUHl4X1B5VGhyZWFkU3Rh dGVfZGVjbGFyZQorKyAgICBQeV9YSU5DUkVGKHR5cGUpOworKyAgICBpZiAoIXZhbHVlIHx8IHZh bHVlID09IFB5X05vbmUpCisrICAgICAgICB2YWx1ZSA9IE5VTEw7CisrICAgIGVsc2UKKysgICAg ICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisrICAgIGlmICghdGIgfHwgdGIgPT0gUHlfTm9uZSkKKysg ICAgICAgIHRiID0gTlVMTDsKKysgICAgZWxzZSB7CisrICAgICAgICBQeV9JTkNSRUYodGIpOwor KyAgICAgICAgaWYgKCFQeVRyYWNlQmFja19DaGVjayh0YikpIHsKKysgICAgICAgICAgICBQeUVy cl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorKyAgICAgICAgICAgICAgICAicmFpc2U6IGFy ZyAzIG11c3QgYmUgYSB0cmFjZWJhY2sgb3IgTm9uZSIpOworKyAgICAgICAgICAgIGdvdG8gcmFp c2VfZXJyb3I7CisrICAgICAgICB9CisgICAgIH0KKy0gICAgcmV0dXJuIDA7CisrICAgIGlmIChQ eVR5cGVfQ2hlY2sodHlwZSkpIHsKKysjaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZCisrICAg ICAgICBpZiAoIXZhbHVlKSB7CisrICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworKyAg ICAgICAgICAgIHZhbHVlID0gUHlfTm9uZTsKKysgICAgICAgIH0KKysjZW5kaWYKKysgICAgICAg IFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmdHlwZSwgJnZhbHVlLCAmdGIpOworKyAgICB9IGVs c2UgeworKyAgICAgICAgaWYgKHZhbHVlKSB7CisrICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5n KFB5RXhjX1R5cGVFcnJvciwKKysgICAgICAgICAgICAgICAgImluc3RhbmNlIGV4Y2VwdGlvbiBt YXkgbm90IGhhdmUgYSBzZXBhcmF0ZSB2YWx1ZSIpOworKyAgICAgICAgICAgIGdvdG8gcmFpc2Vf ZXJyb3I7CisrICAgICAgICB9CisrICAgICAgICB2YWx1ZSA9IHR5cGU7CisrICAgICAgICB0eXBl ID0gKFB5T2JqZWN0KikgUHlfVFlQRSh0eXBlKTsKKysgICAgICAgIFB5X0lOQ1JFRih0eXBlKTsK KysgICAgICAgIGlmICghUHlUeXBlX0lzU3VidHlwZSgoUHlUeXBlT2JqZWN0ICopdHlwZSwgKFB5 VHlwZU9iamVjdCAqKVB5RXhjX0Jhc2VFeGNlcHRpb24pKSB7CisrICAgICAgICAgICAgUHlFcnJf U2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKysgICAgICAgICAgICAgICAgInJhaXNlOiBleGNl cHRpb24gY2xhc3MgbXVzdCBiZSBhIHN1YmNsYXNzIG9mIEJhc2VFeGNlcHRpb24iKTsKKysgICAg ICAgICAgICBnb3RvIHJhaXNlX2Vycm9yOworKyAgICAgICAgfQorKyAgICB9CisrICAgIF9fUHl4 X1B5VGhyZWFkU3RhdGVfYXNzaWduCisrICAgIF9fUHl4X0VyclJlc3RvcmUodHlwZSwgdmFsdWUs IHRiKTsKKysgICAgcmV0dXJuOworK3JhaXNlX2Vycm9yOgorKyAgICBQeV9YREVDUkVGKHZhbHVl KTsKKysgICAgUHlfWERFQ1JFRih0eXBlKTsKKysgICAgUHlfWERFQ1JFRih0Yik7CisrICAgIHJl dHVybjsKKyB9Cistc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9DeUZ1bmN0aW9uX2Rlc2NyX2dldChQ eU9iamVjdCAqZnVuYywgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKnR5cGUpCisteworLSNpZiBQ WV9NQUpPUl9WRVJTSU9OIDwgMworLSAgICBfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICptID0gKF9f cHl4X0N5RnVuY3Rpb25PYmplY3QgKikgZnVuYzsKKy0gICAgaWYgKG0tPmZsYWdzICYgX19QeXhf Q1lGVU5DVElPTl9TVEFUSUNNRVRIT0QpIHsKKy0gICAgICAgIFB5X0lOQ1JFRihmdW5jKTsKKy0g ICAgICAgIHJldHVybiBmdW5jOworKyNlbHNlCisrc3RhdGljIHZvaWQgX19QeXhfUmFpc2UoUHlP YmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRiLCBQeU9iamVjdCAqY2F1 c2UpIHsKKysgICAgUHlPYmplY3QqIG93bmVkX2luc3RhbmNlID0gTlVMTDsKKysgICAgaWYgKHRi ID09IFB5X05vbmUpIHsKKysgICAgICAgIHRiID0gMDsKKysgICAgfSBlbHNlIGlmICh0YiAmJiAh UHlUcmFjZUJhY2tfQ2hlY2sodGIpKSB7CisrICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNf VHlwZUVycm9yLAorKyAgICAgICAgICAgICJyYWlzZTogYXJnIDMgbXVzdCBiZSBhIHRyYWNlYmFj ayBvciBOb25lIik7CisrICAgICAgICBnb3RvIGJhZDsKKyAgICAgfQorLSAgICBpZiAobS0+Zmxh Z3MgJiBfX1B5eF9DWUZVTkNUSU9OX0NMQVNTTUVUSE9EKSB7CistICAgICAgICBpZiAodHlwZSA9 PSBOVUxMKQorLSAgICAgICAgICAgIHR5cGUgPSAoUHlPYmplY3QgKikoUHlfVFlQRShvYmopKTsK Ky0gICAgICAgIHJldHVybiBfX1B5eF9QeU1ldGhvZF9OZXcoZnVuYywgdHlwZSwgKFB5T2JqZWN0 ICopKFB5X1RZUEUodHlwZSkpKTsKKysgICAgaWYgKHZhbHVlID09IFB5X05vbmUpCisrICAgICAg ICB2YWx1ZSA9IDA7CisrICAgIGlmIChQeUV4Y2VwdGlvbkluc3RhbmNlX0NoZWNrKHR5cGUpKSB7 CisrICAgICAgICBpZiAodmFsdWUpIHsKKysgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlF eGNfVHlwZUVycm9yLAorKyAgICAgICAgICAgICAgICAiaW5zdGFuY2UgZXhjZXB0aW9uIG1heSBu b3QgaGF2ZSBhIHNlcGFyYXRlIHZhbHVlIik7CisrICAgICAgICAgICAgZ290byBiYWQ7CisrICAg ICAgICB9CisrICAgICAgICB2YWx1ZSA9IHR5cGU7CisrICAgICAgICB0eXBlID0gKFB5T2JqZWN0 KikgUHlfVFlQRSh2YWx1ZSk7CisrICAgIH0gZWxzZSBpZiAoUHlFeGNlcHRpb25DbGFzc19DaGVj ayh0eXBlKSkgeworKyAgICAgICAgUHlPYmplY3QgKmluc3RhbmNlX2NsYXNzID0gTlVMTDsKKysg ICAgICAgIGlmICh2YWx1ZSAmJiBQeUV4Y2VwdGlvbkluc3RhbmNlX0NoZWNrKHZhbHVlKSkgewor KyAgICAgICAgICAgIGluc3RhbmNlX2NsYXNzID0gKFB5T2JqZWN0KikgUHlfVFlQRSh2YWx1ZSk7 CisrICAgICAgICAgICAgaWYgKGluc3RhbmNlX2NsYXNzICE9IHR5cGUpIHsKKysgICAgICAgICAg ICAgICAgaW50IGlzX3N1YmNsYXNzID0gUHlPYmplY3RfSXNTdWJjbGFzcyhpbnN0YW5jZV9jbGFz cywgdHlwZSk7CisrICAgICAgICAgICAgICAgIGlmICghaXNfc3ViY2xhc3MpIHsKKysgICAgICAg ICAgICAgICAgICAgIGluc3RhbmNlX2NsYXNzID0gTlVMTDsKKysgICAgICAgICAgICAgICAgfSBl bHNlIGlmICh1bmxpa2VseShpc19zdWJjbGFzcyA9PSAtMSkpIHsKKysgICAgICAgICAgICAgICAg ICAgIGdvdG8gYmFkOworKyAgICAgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAg ICAgICAgdHlwZSA9IGluc3RhbmNlX2NsYXNzOworKyAgICAgICAgICAgICAgICB9CisrICAgICAg ICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKCFpbnN0YW5jZV9jbGFzcykgeworKyAg ICAgICAgICAgIFB5T2JqZWN0ICphcmdzOworKyAgICAgICAgICAgIGlmICghdmFsdWUpCisrICAg ICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKKysgICAgICAgICAgICBlbHNlIGlm IChQeVR1cGxlX0NoZWNrKHZhbHVlKSkgeworKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYodmFs dWUpOworKyAgICAgICAgICAgICAgICBhcmdzID0gdmFsdWU7CisrICAgICAgICAgICAgfSBlbHNl CisrICAgICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX1BhY2soMSwgdmFsdWUpOworKyAgICAg ICAgICAgIGlmICghYXJncykKKysgICAgICAgICAgICAgICAgZ290byBiYWQ7CisrICAgICAgICAg ICAgb3duZWRfaW5zdGFuY2UgPSBQeU9iamVjdF9DYWxsKHR5cGUsIGFyZ3MsIE5VTEwpOworKyAg ICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKysgICAgICAgICAgICBpZiAoIW93bmVkX2luc3Rh bmNlKQorKyAgICAgICAgICAgICAgICBnb3RvIGJhZDsKKysgICAgICAgICAgICB2YWx1ZSA9IG93 bmVkX2luc3RhbmNlOworKyAgICAgICAgICAgIGlmICghUHlFeGNlcHRpb25JbnN0YW5jZV9DaGVj ayh2YWx1ZSkpIHsKKysgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJv ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYWxsaW5nICVSIHNob3VsZCBoYXZl IHJldHVybmVkIGFuIGluc3RhbmNlIG9mICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJCYXNlRXhjZXB0aW9uLCBub3QgJVIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dHlwZSwgUHlfVFlQRSh2YWx1ZSkpOworKyAgICAgICAgICAgICAgICBnb3RvIGJhZDsKKysgICAg ICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgICBQeUVycl9TZXRT dHJpbmcoUHlFeGNfVHlwZUVycm9yLAorKyAgICAgICAgICAgICJyYWlzZTogZXhjZXB0aW9uIGNs YXNzIG11c3QgYmUgYSBzdWJjbGFzcyBvZiBCYXNlRXhjZXB0aW9uIik7CisrICAgICAgICBnb3Rv IGJhZDsKKyAgICAgfQorLSAgICBpZiAob2JqID09IFB5X05vbmUpCistICAgICAgICBvYmogPSBO VUxMOworKyAgICBpZiAoY2F1c2UpIHsKKysgICAgICAgIFB5T2JqZWN0ICpmaXhlZF9jYXVzZTsK KysgICAgICAgIGlmIChjYXVzZSA9PSBQeV9Ob25lKSB7CisrICAgICAgICAgICAgZml4ZWRfY2F1 c2UgPSBOVUxMOworKyAgICAgICAgfSBlbHNlIGlmIChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKGNh dXNlKSkgeworKyAgICAgICAgICAgIGZpeGVkX2NhdXNlID0gUHlPYmplY3RfQ2FsbE9iamVjdChj YXVzZSwgTlVMTCk7CisrICAgICAgICAgICAgaWYgKGZpeGVkX2NhdXNlID09IE5VTEwpCisrICAg ICAgICAgICAgICAgIGdvdG8gYmFkOworKyAgICAgICAgfSBlbHNlIGlmIChQeUV4Y2VwdGlvbklu c3RhbmNlX0NoZWNrKGNhdXNlKSkgeworKyAgICAgICAgICAgIGZpeGVkX2NhdXNlID0gY2F1c2U7 CisrICAgICAgICAgICAgUHlfSU5DUkVGKGZpeGVkX2NhdXNlKTsKKysgICAgICAgIH0gZWxzZSB7 CisrICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbiBjYXVzZXMgbXVzdCBkZXJpdmUgZnJvbSAi CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCYXNlRXhjZXB0aW9uIik7CisrICAgICAg ICAgICAgZ290byBiYWQ7CisrICAgICAgICB9CisrICAgICAgICBQeUV4Y2VwdGlvbl9TZXRDYXVz ZSh2YWx1ZSwgZml4ZWRfY2F1c2UpOworKyAgICB9CisrICAgIFB5RXJyX1NldE9iamVjdCh0eXBl LCB2YWx1ZSk7CisrICAgIGlmICh0YikgeworKyNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkK KysgICAgICAgIFB5T2JqZWN0ICp0bXBfdHlwZSwgKnRtcF92YWx1ZSwgKnRtcF90YjsKKysgICAg ICAgIFB5RXJyX0ZldGNoKCZ0bXBfdHlwZSwgJnRtcF92YWx1ZSwgJnRtcF90Yik7CisrICAgICAg ICBQeV9JTkNSRUYodGIpOworKyAgICAgICAgUHlFcnJfUmVzdG9yZSh0bXBfdHlwZSwgdG1wX3Zh bHVlLCB0Yik7CisrICAgICAgICBQeV9YREVDUkVGKHRtcF90Yik7CisrI2Vsc2UKKysgICAgICAg IFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IF9fUHl4X1B5VGhyZWFkU3RhdGVfQ3VycmVudDsKKysg ICAgICAgIFB5T2JqZWN0KiB0bXBfdGIgPSB0c3RhdGUtPmN1cmV4Y190cmFjZWJhY2s7CisrICAg ICAgICBpZiAodGIgIT0gdG1wX3RiKSB7CisrICAgICAgICAgICAgUHlfSU5DUkVGKHRiKTsKKysg ICAgICAgICAgICB0c3RhdGUtPmN1cmV4Y190cmFjZWJhY2sgPSB0YjsKKysgICAgICAgICAgICBQ eV9YREVDUkVGKHRtcF90Yik7CisrICAgICAgICB9CisgI2VuZGlmCistICAgIHJldHVybiBfX1B5 eF9QeU1ldGhvZF9OZXcoZnVuYywgb2JqLCB0eXBlKTsKKysgICAgfQorK2JhZDoKKysgICAgUHlf WERFQ1JFRihvd25lZF9pbnN0YW5jZSk7CisrICAgIHJldHVybjsKKyt9CisrI2VuZGlmCisrCisr LyogRmV0Y2hDb21tb25UeXBlICovCisrc3RhdGljIFB5VHlwZU9iamVjdCogX19QeXhfRmV0Y2hD b21tb25UeXBlKFB5VHlwZU9iamVjdCogdHlwZSkgeworKyAgICBQeU9iamVjdCogZmFrZV9tb2R1 bGU7CisrICAgIFB5VHlwZU9iamVjdCogY2FjaGVkX3R5cGUgPSBOVUxMOworKyAgICBmYWtlX21v ZHVsZSA9IFB5SW1wb3J0X0FkZE1vZHVsZSgoY2hhciopICJfY3l0aG9uXyIgQ1lUSE9OX0FCSSk7 CisrICAgIGlmICghZmFrZV9tb2R1bGUpIHJldHVybiBOVUxMOworKyAgICBQeV9JTkNSRUYoZmFr ZV9tb2R1bGUpOworKyAgICBjYWNoZWRfdHlwZSA9IChQeVR5cGVPYmplY3QqKSBQeU9iamVjdF9H ZXRBdHRyU3RyaW5nKGZha2VfbW9kdWxlLCB0eXBlLT50cF9uYW1lKTsKKysgICAgaWYgKGNhY2hl ZF90eXBlKSB7CisrICAgICAgICBpZiAoIVB5VHlwZV9DaGVjaygoUHlPYmplY3QqKWNhY2hlZF90 eXBlKSkgeworKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisrICAg ICAgICAgICAgICAgICJTaGFyZWQgQ3l0aG9uIHR5cGUgJS4yMDBzIGlzIG5vdCBhIHR5cGUgb2Jq ZWN0IiwKKysgICAgICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSk7CisrICAgICAgICAgICAgZ290 byBiYWQ7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY2FjaGVkX3R5cGUtPnRwX2Jhc2ljc2l6 ZSAhPSB0eXBlLT50cF9iYXNpY3NpemUpIHsKKysgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlF eGNfVHlwZUVycm9yLAorKyAgICAgICAgICAgICAgICAiU2hhcmVkIEN5dGhvbiB0eXBlICUuMjAw cyBoYXMgdGhlIHdyb25nIHNpemUsIHRyeSByZWNvbXBpbGluZyIsCisrICAgICAgICAgICAgICAg IHR5cGUtPnRwX25hbWUpOworKyAgICAgICAgICAgIGdvdG8gYmFkOworKyAgICAgICAgfQorKyAg ICB9IGVsc2UgeworKyAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0 dHJpYnV0ZUVycm9yKSkgZ290byBiYWQ7CisrICAgICAgICBQeUVycl9DbGVhcigpOworKyAgICAg ICAgaWYgKFB5VHlwZV9SZWFkeSh0eXBlKSA8IDApIGdvdG8gYmFkOworKyAgICAgICAgaWYgKFB5 T2JqZWN0X1NldEF0dHJTdHJpbmcoZmFrZV9tb2R1bGUsIHR5cGUtPnRwX25hbWUsIChQeU9iamVj dCopIHR5cGUpIDwgMCkKKysgICAgICAgICAgICBnb3RvIGJhZDsKKysgICAgICAgIFB5X0lOQ1JF Rih0eXBlKTsKKysgICAgICAgIGNhY2hlZF90eXBlID0gdHlwZTsKKysgICAgfQorK2RvbmU6Cisr ICAgIFB5X0RFQ1JFRihmYWtlX21vZHVsZSk7CisrICAgIHJldHVybiBjYWNoZWRfdHlwZTsKKyti YWQ6CisrICAgIFB5X1hERUNSRUYoY2FjaGVkX3R5cGUpOworKyAgICBjYWNoZWRfdHlwZSA9IE5V TEw7CisrICAgIGdvdG8gZG9uZTsKKyB9Cistc3RhdGljIFB5T2JqZWN0KgorLV9fUHl4X0N5RnVu Y3Rpb25fcmVwcihfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCkKKysKKysvKiBDeXRob25GdW5j dGlvblNoYXJlZCAqLworKyNpbmNsdWRlIDxzdHJ1Y3RtZW1iZXIuaD4KKytzdGF0aWMgUHlPYmpl Y3QgKgorK19fUHl4X0N5RnVuY3Rpb25fZ2V0X2RvYyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpv cCwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjbG9zdXJlKQorIHsKKysgICAgaWYgKHVubGlrZWx5KG9w LT5mdW5jX2RvYyA9PSBOVUxMKSkgeworKyAgICAgICAgaWYgKG9wLT5mdW5jLm1fbWwtPm1sX2Rv YykgeworICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgcmV0dXJuIFB5VW5pY29kZV9G cm9tRm9ybWF0KCI8Y3lmdW5jdGlvbiAlVSBhdCAlcD4iLAorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb3AtPmZ1bmNfcXVhbG5hbWUsICh2b2lkICopb3ApOworKyAgICAgICAgICAg IG9wLT5mdW5jX2RvYyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG9wLT5mdW5jLm1fbWwtPm1sX2Rv Yyk7CisgI2Vsc2UKKy0gICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21Gb3JtYXQoIjxjeWZ1bmN0aW9u ICVzIGF0ICVwPiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Fz U3RyaW5nKG9wLT5mdW5jX3F1YWxuYW1lKSwgKHZvaWQgKilvcCk7CisrICAgICAgICAgICAgb3At PmZ1bmNfZG9jID0gUHlTdHJpbmdfRnJvbVN0cmluZyhvcC0+ZnVuYy5tX21sLT5tbF9kb2MpOwor ICNlbmRpZgorLX0KKy1zdGF0aWMgUHlPYmplY3QgKiBfX1B5eF9DeUZ1bmN0aW9uX0NhbGxNZXRo b2QoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnLCBQeU9iamVj dCAqa3cpIHsKKy0gICAgUHlDRnVuY3Rpb25PYmplY3QqIGYgPSAoUHlDRnVuY3Rpb25PYmplY3Qq KWZ1bmM7CistICAgIFB5Q0Z1bmN0aW9uIG1ldGggPSBmLT5tX21sLT5tbF9tZXRoOworLSAgICBQ eV9zc2l6ZV90IHNpemU7CistICAgIHN3aXRjaCAoZi0+bV9tbC0+bWxfZmxhZ3MgJiAoTUVUSF9W QVJBUkdTIHwgTUVUSF9LRVlXT1JEUyB8IE1FVEhfTk9BUkdTIHwgTUVUSF9PKSkgeworLSAgICBj YXNlIE1FVEhfVkFSQVJHUzoKKy0gICAgICAgIGlmIChsaWtlbHkoa3cgPT0gTlVMTCB8fCBQeURp Y3RfU2l6ZShrdykgPT0gMCkpCistICAgICAgICAgICAgcmV0dXJuICgqbWV0aCkoc2VsZiwgYXJn KTsKKy0gICAgICAgIGJyZWFrOworLSAgICBjYXNlIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09S RFM6CistICAgICAgICByZXR1cm4gKCooUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpKHZvaWQqKW1l dGgpKHNlbGYsIGFyZywga3cpOworLSAgICBjYXNlIE1FVEhfTk9BUkdTOgorLSAgICAgICAgaWYg KGxpa2VseShrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKSkgeworLSAgICAgICAg ICAgIHNpemUgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZyk7CistICAgICAgICAgICAgaWYgKGxpa2Vs eShzaXplID09IDApKQorLSAgICAgICAgICAgICAgICByZXR1cm4gKCptZXRoKShzZWxmLCBOVUxM KTsKKy0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorLSAgICAgICAg ICAgICAgICAiJS4yMDBzKCkgdGFrZXMgbm8gYXJndW1lbnRzICglIiBDWVRIT05fRk9STUFUX1NT SVpFX1QgImQgZ2l2ZW4pIiwKKy0gICAgICAgICAgICAgICAgZi0+bV9tbC0+bWxfbmFtZSwgc2l6 ZSk7CistICAgICAgICAgICAgcmV0dXJuIE5VTEw7CistICAgICAgICB9CistICAgICAgICBicmVh azsKKy0gICAgY2FzZSBNRVRIX086CistICAgICAgICBpZiAobGlrZWx5KGt3ID09IE5VTEwgfHwg UHlEaWN0X1NpemUoa3cpID09IDApKSB7CistICAgICAgICAgICAgc2l6ZSA9IFB5VHVwbGVfR0VU X1NJWkUoYXJnKTsKKy0gICAgICAgICAgICBpZiAobGlrZWx5KHNpemUgPT0gMSkpIHsKKy0gICAg ICAgICAgICAgICAgUHlPYmplY3QgKnJlc3VsdCwgKmFyZzA7CistICAgICAgICAgICAgICAgICNp ZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVG UworLSAgICAgICAgICAgICAgICBhcmcwID0gUHlUdXBsZV9HRVRfSVRFTShhcmcsIDApOworLSAg ICAgICAgICAgICAgICAjZWxzZQorLSAgICAgICAgICAgICAgICBhcmcwID0gUHlTZXF1ZW5jZV9J VEVNKGFyZywgMCk7IGlmICh1bmxpa2VseSghYXJnMCkpIHJldHVybiBOVUxMOworLSAgICAgICAg ICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgICAgICAgcmVzdWx0ID0gKCptZXRoKShzZWxmLCBh cmcwKTsKKy0gICAgICAgICAgICAgICAgI2lmICEoQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAm JiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMpCistICAgICAgICAgICAgICAgIFB5X0RFQ1JF RihhcmcwKTsKKy0gICAgICAgICAgICAgICAgI2VuZGlmCistICAgICAgICAgICAgICAgIHJldHVy biByZXN1bHQ7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4 Y19UeXBlRXJyb3IsCistICAgICAgICAgICAgICAgICIlLjIwMHMoKSB0YWtlcyBleGFjdGx5IG9u ZSBhcmd1bWVudCAoJSIgQ1lUSE9OX0ZPUk1BVF9TU0laRV9UICJkIGdpdmVuKSIsCistICAgICAg ICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUsIHNpemUpOworLSAgICAgICAgICAgIHJldHVybiBO VUxMOworKyAgICAgICAgICAgIGlmICh1bmxpa2VseShvcC0+ZnVuY19kb2MgPT0gTlVMTCkpCisr ICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAg ICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisrICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7Cisg ICAgICAgICB9CistICAgICAgICBicmVhazsKKy0gICAgZGVmYXVsdDoKKy0gICAgICAgIFB5RXJy X1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgIkJhZCBjYWxsIGZsYWdzIGluICIKKy0gICAg ICAgICAgICAgICAgICAgICAgICAiX19QeXhfQ3lGdW5jdGlvbl9DYWxsLiBNRVRIX09MREFSR1Mg aXMgbm8gIgorLSAgICAgICAgICAgICAgICAgICAgICAgICJsb25nZXIgc3VwcG9ydGVkISIpOwor LSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgIH0KKy0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5 cGVFcnJvciwgIiUuMjAwcygpIHRha2VzIG5vIGtleXdvcmQgYXJndW1lbnRzIiwKKy0gICAgICAg ICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUpOworLSAgICByZXR1cm4gTlVMTDsKKy19Cistc3Rh dGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QgKl9fUHl4X0N5RnVuY3Rpb25fQ2FsbChQeU9iamVj dCAqZnVuYywgUHlPYmplY3QgKmFyZywgUHlPYmplY3QgKmt3KSB7CistICAgIHJldHVybiBfX1B5 eF9DeUZ1bmN0aW9uX0NhbGxNZXRob2QoZnVuYywgKChQeUNGdW5jdGlvbk9iamVjdCopZnVuYykt Pm1fc2VsZiwgYXJnLCBrdyk7CisrICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19kb2MpOworKyAgICBy ZXR1cm4gb3AtPmZ1bmNfZG9jOworIH0KKy1zdGF0aWMgUHlPYmplY3QgKl9fUHl4X0N5RnVuY3Rp b25fQ2FsbEFzTWV0aG9kKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3Qg Kmt3KSB7CistICAgIFB5T2JqZWN0ICpyZXN1bHQ7CistICAgIF9fcHl4X0N5RnVuY3Rpb25PYmpl Y3QgKmN5ZnVuYyA9IChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICopIGZ1bmM7CistICAgIGlmICgo Y3lmdW5jLT5mbGFncyAmIF9fUHl4X0NZRlVOQ1RJT05fQ0NMQVNTKSAmJiAhKGN5ZnVuYy0+Zmxh Z3MgJiBfX1B5eF9DWUZVTkNUSU9OX1NUQVRJQ01FVEhPRCkpIHsKKy0gICAgICAgIFB5X3NzaXpl X3QgYXJnYzsKKy0gICAgICAgIFB5T2JqZWN0ICpuZXdfYXJnczsKKy0gICAgICAgIFB5T2JqZWN0 ICpzZWxmOworLSAgICAgICAgYXJnYyA9IFB5VHVwbGVfR0VUX1NJWkUoYXJncyk7CistICAgICAg ICBuZXdfYXJncyA9IFB5VHVwbGVfR2V0U2xpY2UoYXJncywgMSwgYXJnYyk7CistICAgICAgICBp ZiAodW5saWtlbHkoIW5ld19hcmdzKSkKKy0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAg ICAgIHNlbGYgPSBQeVR1cGxlX0dldEl0ZW0oYXJncywgMCk7CistICAgICAgICBpZiAodW5saWtl bHkoIXNlbGYpKSB7CistICAgICAgICAgICAgUHlfREVDUkVGKG5ld19hcmdzKTsKKy0gICAgICAg ICAgICByZXR1cm4gTlVMTDsKKy0gICAgICAgIH0KKy0gICAgICAgIHJlc3VsdCA9IF9fUHl4X0N5 RnVuY3Rpb25fQ2FsbE1ldGhvZChmdW5jLCBzZWxmLCBuZXdfYXJncywga3cpOworLSAgICAgICAg UHlfREVDUkVGKG5ld19hcmdzKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIHJlc3VsdCA9IF9f UHl4X0N5RnVuY3Rpb25fQ2FsbChmdW5jLCBhcmdzLCBrdyk7Cisrc3RhdGljIGludAorK19fUHl4 X0N5RnVuY3Rpb25fc2V0X2RvYyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgUHlPYmplY3Qg KnZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCisreworKyAgICBQeU9iamVjdCAq dG1wID0gb3AtPmZ1bmNfZG9jOworKyAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworKyAgICAgICAg dmFsdWUgPSBQeV9Ob25lOworICAgICB9CistICAgIHJldHVybiByZXN1bHQ7CisrICAgIFB5X0lO Q1JFRih2YWx1ZSk7CisrICAgIG9wLT5mdW5jX2RvYyA9IHZhbHVlOworKyAgICBQeV9YREVDUkVG KHRtcCk7CisrICAgIHJldHVybiAwOworIH0KKy1zdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X0N5 RnVuY3Rpb25UeXBlX3R5cGUgPSB7CistICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgwLCAwKQor LSAgICAiY3l0aG9uX2Z1bmN0aW9uX29yX21ldGhvZCIsCistICAgIHNpemVvZihfX3B5eF9DeUZ1 bmN0aW9uT2JqZWN0KSwKKy0gICAgMCwKKy0gICAgKGRlc3RydWN0b3IpIF9fUHl4X0N5RnVuY3Rp b25fZGVhbGxvYywKKy0gICAgMCwKKy0gICAgMCwKKy0gICAgMCwKKy0jaWYgUFlfTUFKT1JfVkVS U0lPTiA8IDMKKy0gICAgMCwKKytzdGF0aWMgUHlPYmplY3QgKgorK19fUHl4X0N5RnVuY3Rpb25f Z2V0X25hbWUoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIENZVEhPTl9VTlVTRUQgdm9pZCAq Y29udGV4dCkKKyt7CisrICAgIGlmICh1bmxpa2VseShvcC0+ZnVuY19uYW1lID09IE5VTEwpKSB7 CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMworKyAgICAgICAgb3AtPmZ1bmNfbmFtZSA9IFB5 VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKG9wLT5mdW5jLm1fbWwtPm1sX25hbWUpOworICNlbHNl CistICAgIDAsCisrICAgICAgICBvcC0+ZnVuY19uYW1lID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0 cmluZyhvcC0+ZnVuYy5tX21sLT5tbF9uYW1lKTsKKyAjZW5kaWYKKy0gICAgKHJlcHJmdW5jKSBf X1B5eF9DeUZ1bmN0aW9uX3JlcHIsCistICAgIDAsCistICAgIDAsCistICAgIDAsCistICAgIDAs CistICAgIF9fUHl4X0N5RnVuY3Rpb25fQ2FsbEFzTWV0aG9kLAorLSAgICAwLAorLSAgICAwLAor LSAgICAwLAorLSAgICAwLAorLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hB VkVfR0MsCistICAgIDAsCistICAgICh0cmF2ZXJzZXByb2MpIF9fUHl4X0N5RnVuY3Rpb25fdHJh dmVyc2UsCistICAgIChpbnF1aXJ5KSBfX1B5eF9DeUZ1bmN0aW9uX2NsZWFyLAorLSAgICAwLAor LSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwNTAwQTAKKy0gICAgb2Zmc2V0b2YoX19weXhfQ3lG dW5jdGlvbk9iamVjdCwgZnVuY193ZWFrcmVmbGlzdCksCisrICAgICAgICBpZiAodW5saWtlbHko b3AtPmZ1bmNfbmFtZSA9PSBOVUxMKSkKKysgICAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAg fQorKyAgICBQeV9JTkNSRUYob3AtPmZ1bmNfbmFtZSk7CisrICAgIHJldHVybiBvcC0+ZnVuY19u YW1lOworK30KKytzdGF0aWMgaW50CisrX19QeXhfQ3lGdW5jdGlvbl9zZXRfbmFtZShfX3B5eF9D eUZ1bmN0aW9uT2JqZWN0ICpvcCwgUHlPYmplY3QgKnZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQg KmNvbnRleHQpCisreworKyAgICBQeU9iamVjdCAqdG1wOworKyNpZiBQWV9NQUpPUl9WRVJTSU9O ID49IDMKKysgICAgaWYgKHVubGlrZWx5KHZhbHVlID09IE5VTEwgfHwgIVB5VW5pY29kZV9DaGVj ayh2YWx1ZSkpKQorICNlbHNlCistICAgIG9mZnNldG9mKFB5Q0Z1bmN0aW9uT2JqZWN0LCBtX3dl YWtyZWZsaXN0KSwKKy0jZW5kaWYKKy0gICAgMCwKKy0gICAgMCwKKy0gICAgX19weXhfQ3lGdW5j dGlvbl9tZXRob2RzLAorLSAgICBfX3B5eF9DeUZ1bmN0aW9uX21lbWJlcnMsCistICAgIF9fcHl4 X0N5RnVuY3Rpb25fZ2V0c2V0cywKKy0gICAgMCwKKy0gICAgMCwKKy0gICAgX19QeXhfQ3lGdW5j dGlvbl9kZXNjcl9nZXQsCistICAgIDAsCistICAgIG9mZnNldG9mKF9fcHl4X0N5RnVuY3Rpb25P YmplY3QsIGZ1bmNfZGljdCksCistICAgIDAsCistICAgIDAsCistICAgIDAsCistICAgIDAsCist ICAgIDAsCistICAgIDAsCistICAgIDAsCistICAgIDAsCistICAgIDAsCistICAgIDAsCistICAg IDAsCistICAgIDAsCistI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEKKy0gICAgMCwK Ky0jZW5kaWYKKy0jaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMQorLSAgICAwLAorLSNl bmRpZgorLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVY IDwgMHgwMzA5MDAwMAorLSAgICAwLAorKyAgICBpZiAodW5saWtlbHkodmFsdWUgPT0gTlVMTCB8 fCAhUHlTdHJpbmdfQ2hlY2sodmFsdWUpKSkKKyAjZW5kaWYKKy19OworLXN0YXRpYyBpbnQgX19w eXhfQ3lGdW5jdGlvbl9pbml0KHZvaWQpIHsKKy0gICAgX19weXhfQ3lGdW5jdGlvblR5cGUgPSBf X1B5eF9GZXRjaENvbW1vblR5cGUoJl9fcHl4X0N5RnVuY3Rpb25UeXBlX3R5cGUpOworLSAgICBp ZiAodW5saWtlbHkoX19weXhfQ3lGdW5jdGlvblR5cGUgPT0gTlVMTCkpIHsKKysgICAgeworKyAg ICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKysgICAgICAgICAgICAgICAg ICAgICAgICAiX19uYW1lX18gbXVzdCBiZSBzZXQgdG8gYSBzdHJpbmcgb2JqZWN0Iik7CisgICAg ICAgICByZXR1cm4gLTE7CisgICAgIH0KKysgICAgdG1wID0gb3AtPmZ1bmNfbmFtZTsKKysgICAg UHlfSU5DUkVGKHZhbHVlKTsKKysgICAgb3AtPmZ1bmNfbmFtZSA9IHZhbHVlOworKyAgICBQeV9Y REVDUkVGKHRtcCk7CisgICAgIHJldHVybiAwOworIH0KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSB2 b2lkICpfX1B5eF9DeUZ1bmN0aW9uX0luaXREZWZhdWx0cyhQeU9iamVjdCAqZnVuYywgc2l6ZV90 IHNpemUsIGludCBweW9iamVjdHMpIHsKKy0gICAgX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSA9 IChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICopIGZ1bmM7CistICAgIG0tPmRlZmF1bHRzID0gUHlP YmplY3RfTWFsbG9jKHNpemUpOworLSAgICBpZiAodW5saWtlbHkoIW0tPmRlZmF1bHRzKSkKKy0g ICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworLSAgICBtZW1zZXQobS0+ZGVmYXVsdHMs IDAsIHNpemUpOworLSAgICBtLT5kZWZhdWx0c19weW9iamVjdHMgPSBweW9iamVjdHM7CistICAg IG0tPmRlZmF1bHRzX3NpemUgPSBzaXplOworLSAgICByZXR1cm4gbS0+ZGVmYXVsdHM7CistfQor LXN0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgX19QeXhfQ3lGdW5jdGlvbl9TZXREZWZhdWx0c1R1 cGxlKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqdHVwbGUpIHsKKy0gICAgX19weXhfQ3lGdW5j dGlvbk9iamVjdCAqbSA9IChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICopIGZ1bmM7CistICAgIG0t PmRlZmF1bHRzX3R1cGxlID0gdHVwbGU7CistICAgIFB5X0lOQ1JFRih0dXBsZSk7Cisrc3RhdGlj IFB5T2JqZWN0ICoKKytfX1B5eF9DeUZ1bmN0aW9uX2dldF9xdWFsbmFtZShfX3B5eF9DeUZ1bmN0 aW9uT2JqZWN0ICpvcCwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KQorK3sKKysgICAgUHlf SU5DUkVGKG9wLT5mdW5jX3F1YWxuYW1lKTsKKysgICAgcmV0dXJuIG9wLT5mdW5jX3F1YWxuYW1l OworIH0KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSB2b2lkIF9fUHl4X0N5RnVuY3Rpb25fU2V0RGVm YXVsdHNLd0RpY3QoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpkaWN0KSB7CistICAgIF9fcHl4 X0N5RnVuY3Rpb25PYmplY3QgKm0gPSAoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqKSBmdW5jOwor LSAgICBtLT5kZWZhdWx0c19rd2RpY3QgPSBkaWN0OworLSAgICBQeV9JTkNSRUYoZGljdCk7Cisr c3RhdGljIGludAorK19fUHl4X0N5RnVuY3Rpb25fc2V0X3F1YWxuYW1lKF9fcHl4X0N5RnVuY3Rp b25PYmplY3QgKm9wLCBQeU9iamVjdCAqdmFsdWUsIENZVEhPTl9VTlVTRUQgdm9pZCAqY29udGV4 dCkKKyt7CisrICAgIFB5T2JqZWN0ICp0bXA7CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwor KyAgICBpZiAodW5saWtlbHkodmFsdWUgPT0gTlVMTCB8fCAhUHlVbmljb2RlX0NoZWNrKHZhbHVl KSkpCisrI2Vsc2UKKysgICAgaWYgKHVubGlrZWx5KHZhbHVlID09IE5VTEwgfHwgIVB5U3RyaW5n X0NoZWNrKHZhbHVlKSkpCisrI2VuZGlmCisrICAgIHsKKysgICAgICAgIFB5RXJyX1NldFN0cmlu ZyhQeUV4Y19UeXBlRXJyb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgIl9fcXVhbG5hbWVf XyBtdXN0IGJlIHNldCB0byBhIHN0cmluZyBvYmplY3QiKTsKKysgICAgICAgIHJldHVybiAtMTsK KysgICAgfQorKyAgICB0bXAgPSBvcC0+ZnVuY19xdWFsbmFtZTsKKysgICAgUHlfSU5DUkVGKHZh bHVlKTsKKysgICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSB2YWx1ZTsKKysgICAgUHlfWERFQ1JFRih0 bXApOworKyAgICByZXR1cm4gMDsKKyB9Cistc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5 eF9DeUZ1bmN0aW9uX1NldEFubm90YXRpb25zRGljdChQeU9iamVjdCAqZnVuYywgUHlPYmplY3Qg KmRpY3QpIHsKKy0gICAgX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSA9IChfX3B5eF9DeUZ1bmN0 aW9uT2JqZWN0ICopIGZ1bmM7CistICAgIG0tPmZ1bmNfYW5ub3RhdGlvbnMgPSBkaWN0OworLSAg ICBQeV9JTkNSRUYoZGljdCk7Cisrc3RhdGljIFB5T2JqZWN0ICoKKytfX1B5eF9DeUZ1bmN0aW9u X2dldF9zZWxmKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm0sIENZVEhPTl9VTlVTRUQgdm9pZCAq Y2xvc3VyZSkKKyt7CisrICAgIFB5T2JqZWN0ICpzZWxmOworKyAgICBzZWxmID0gbS0+ZnVuY19j bG9zdXJlOworKyAgICBpZiAoc2VsZiA9PSBOVUxMKQorKyAgICAgICAgc2VsZiA9IFB5X05vbmU7 CisrICAgIFB5X0lOQ1JFRihzZWxmKTsKKysgICAgcmV0dXJuIHNlbGY7CisgfQorLQorLS8qIEN5 dGhvbkZ1bmN0aW9uICovCistc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9DeUZ1bmN0aW9uX05ldyhQ eU1ldGhvZERlZiAqbWwsIGludCBmbGFncywgUHlPYmplY3QqIHF1YWxuYW1lLAorLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNsb3N1cmUsIFB5T2JqZWN0 ICptb2R1bGUsIFB5T2JqZWN0KiBnbG9iYWxzLCBQeU9iamVjdCogY29kZSkgeworLSAgICBQeU9i amVjdCAqb3AgPSBfX1B5eF9DeUZ1bmN0aW9uX0luaXQoCistICAgICAgICBQeU9iamVjdF9HQ19O ZXcoX19weXhfQ3lGdW5jdGlvbk9iamVjdCwgX19weXhfQ3lGdW5jdGlvblR5cGUpLAorLSAgICAg ICAgbWwsIGZsYWdzLCBxdWFsbmFtZSwgY2xvc3VyZSwgbW9kdWxlLCBnbG9iYWxzLCBjb2RlCist ICAgICk7CistICAgIGlmIChsaWtlbHkob3ApKSB7CistICAgICAgICBQeU9iamVjdF9HQ19UcmFj ayhvcCk7Cisrc3RhdGljIFB5T2JqZWN0ICoKKytfX1B5eF9DeUZ1bmN0aW9uX2dldF9kaWN0KF9f cHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCisr eworKyAgICBpZiAodW5saWtlbHkob3AtPmZ1bmNfZGljdCA9PSBOVUxMKSkgeworKyAgICAgICAg b3AtPmZ1bmNfZGljdCA9IFB5RGljdF9OZXcoKTsKKysgICAgICAgIGlmICh1bmxpa2VseShvcC0+ ZnVuY19kaWN0ID09IE5VTEwpKQorKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICB9Cist ICAgIHJldHVybiBvcDsKKysgICAgUHlfSU5DUkVGKG9wLT5mdW5jX2RpY3QpOworKyAgICByZXR1 cm4gb3AtPmZ1bmNfZGljdDsKKyB9CistCistLyogUmFpc2VBcmdUdXBsZUludmFsaWQgKi8KKy1z dGF0aWMgdm9pZCBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgKKy0gICAgY29uc3QgY2hhciog ZnVuY19uYW1lLAorLSAgICBpbnQgZXhhY3QsCistICAgIFB5X3NzaXplX3QgbnVtX21pbiwKKy0g ICAgUHlfc3NpemVfdCBudW1fbWF4LAorLSAgICBQeV9zc2l6ZV90IG51bV9mb3VuZCkKKytzdGF0 aWMgaW50CisrX19QeXhfQ3lGdW5jdGlvbl9zZXRfZGljdChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0 ICpvcCwgUHlPYmplY3QgKnZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCisgewor LSAgICBQeV9zc2l6ZV90IG51bV9leHBlY3RlZDsKKy0gICAgY29uc3QgY2hhciAqbW9yZV9vcl9s ZXNzOworLSAgICBpZiAobnVtX2ZvdW5kIDwgbnVtX21pbikgeworLSAgICAgICAgbnVtX2V4cGVj dGVkID0gbnVtX21pbjsKKy0gICAgICAgIG1vcmVfb3JfbGVzcyA9ICJhdCBsZWFzdCI7CistICAg IH0gZWxzZSB7CistICAgICAgICBudW1fZXhwZWN0ZWQgPSBudW1fbWF4OworLSAgICAgICAgbW9y ZV9vcl9sZXNzID0gImF0IG1vc3QiOworKyAgICBQeU9iamVjdCAqdG1wOworKyAgICBpZiAodW5s aWtlbHkodmFsdWUgPT0gTlVMTCkpIHsKKysgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U eXBlRXJyb3IsCisrICAgICAgICAgICAgICAgImZ1bmN0aW9uJ3MgZGljdGlvbmFyeSBtYXkgbm90 IGJlIGRlbGV0ZWQiKTsKKysgICAgICAgIHJldHVybiAtMTsKKyAgICAgfQorLSAgICBpZiAoZXhh Y3QpIHsKKy0gICAgICAgIG1vcmVfb3JfbGVzcyA9ICJleGFjdGx5IjsKKysgICAgaWYgKHVubGlr ZWx5KCFQeURpY3RfQ2hlY2sodmFsdWUpKSkgeworKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5 RXhjX1R5cGVFcnJvciwKKysgICAgICAgICAgICAgICAic2V0dGluZyBmdW5jdGlvbidzIGRpY3Rp b25hcnkgdG8gYSBub24tZGljdCIpOworKyAgICAgICAgcmV0dXJuIC0xOworICAgICB9CistICAg IFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCistICAgICAgICAgICAgICAgICAiJS4yMDBz KCkgdGFrZXMgJS44cyAlIiBDWVRIT05fRk9STUFUX1NTSVpFX1QgImQgcG9zaXRpb25hbCBhcmd1 bWVudCUuMXMgKCUiIENZVEhPTl9GT1JNQVRfU1NJWkVfVCAiZCBnaXZlbikiLAorLSAgICAgICAg ICAgICAgICAgZnVuY19uYW1lLCBtb3JlX29yX2xlc3MsIG51bV9leHBlY3RlZCwKKy0gICAgICAg ICAgICAgICAgIChudW1fZXhwZWN0ZWQgPT0gMSkgPyAiIiA6ICJzIiwgbnVtX2ZvdW5kKTsKKysg ICAgdG1wID0gb3AtPmZ1bmNfZGljdDsKKysgICAgUHlfSU5DUkVGKHZhbHVlKTsKKysgICAgb3At PmZ1bmNfZGljdCA9IHZhbHVlOworKyAgICBQeV9YREVDUkVGKHRtcCk7CisrICAgIHJldHVybiAw OworIH0KKy0KKy0vKiBSYWlzZURvdWJsZUtleXdvcmRzICovCistc3RhdGljIHZvaWQgX19QeXhf UmFpc2VEb3VibGVLZXl3b3Jkc0Vycm9yKAorLSAgICBjb25zdCBjaGFyKiBmdW5jX25hbWUsCist ICAgIFB5T2JqZWN0KiBrd19uYW1lKQorK3N0YXRpYyBQeU9iamVjdCAqCisrX19QeXhfQ3lGdW5j dGlvbl9nZXRfZ2xvYmFscyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgQ1lUSE9OX1VOVVNF RCB2b2lkICpjb250ZXh0KQorIHsKKy0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwK Ky0gICAgICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgICAgICIlcygpIGdvdCBt dWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgJyVVJyIsIGZ1bmNfbmFtZSwga3df bmFtZSk7CistICAgICAgICAjZWxzZQorLSAgICAgICAgIiVzKCkgZ290IG11bHRpcGxlIHZhbHVl cyBmb3Iga2V5d29yZCBhcmd1bWVudCAnJXMnIiwgZnVuY19uYW1lLAorLSAgICAgICAgUHlTdHJp bmdfQXNTdHJpbmcoa3dfbmFtZSkpOworLSAgICAgICAgI2VuZGlmCisrICAgIFB5X0lOQ1JFRihv cC0+ZnVuY19nbG9iYWxzKTsKKysgICAgcmV0dXJuIG9wLT5mdW5jX2dsb2JhbHM7CisgfQorLQor LS8qIFBhcnNlS2V5d29yZHMgKi8KKy1zdGF0aWMgaW50IF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3 b3JkcygKKy0gICAgUHlPYmplY3QgKmt3ZHMsCistICAgIFB5T2JqZWN0ICoqYXJnbmFtZXNbXSwK Ky0gICAgUHlPYmplY3QgKmt3ZHMyLAorLSAgICBQeU9iamVjdCAqdmFsdWVzW10sCistICAgIFB5 X3NzaXplX3QgbnVtX3Bvc19hcmdzLAorLSAgICBjb25zdCBjaGFyKiBmdW5jdGlvbl9uYW1lKQor K3N0YXRpYyBQeU9iamVjdCAqCisrX19QeXhfQ3lGdW5jdGlvbl9nZXRfY2xvc3VyZShDWVRIT05f VU5VU0VEIF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNv bnRleHQpCisgeworLSAgICBQeU9iamVjdCAqa2V5ID0gMCwgKnZhbHVlID0gMDsKKy0gICAgUHlf c3NpemVfdCBwb3MgPSAwOworLSAgICBQeU9iamVjdCoqKiBuYW1lOworLSAgICBQeU9iamVjdCoq KiBmaXJzdF9rd19hcmcgPSBhcmduYW1lcyArIG51bV9wb3NfYXJnczsKKy0gICAgd2hpbGUgKFB5 RGljdF9OZXh0KGt3ZHMsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKKy0gICAgICAgIG5hbWUgPSBm aXJzdF9rd19hcmc7CistICAgICAgICB3aGlsZSAoKm5hbWUgJiYgKCoqbmFtZSAhPSBrZXkpKSBu YW1lKys7CistICAgICAgICBpZiAoKm5hbWUpIHsKKy0gICAgICAgICAgICB2YWx1ZXNbbmFtZS1h cmduYW1lc10gPSB2YWx1ZTsKKy0gICAgICAgICAgICBjb250aW51ZTsKKy0gICAgICAgIH0KKy0g ICAgICAgIG5hbWUgPSBmaXJzdF9rd19hcmc7CistICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lP TiA8IDMKKy0gICAgICAgIGlmIChsaWtlbHkoUHlTdHJpbmdfQ2hlY2soa2V5KSkpIHsKKy0gICAg ICAgICAgICB3aGlsZSAoKm5hbWUpIHsKKy0gICAgICAgICAgICAgICAgaWYgKChDWVRIT05fQ09N UElMSU5HX0lOX1BZUFkgfHwgUHlTdHJpbmdfR0VUX1NJWkUoKipuYW1lKSA9PSBQeVN0cmluZ19H RVRfU0laRShrZXkpKQorLSAgICAgICAgICAgICAgICAgICAgICAgICYmIF9QeVN0cmluZ19FcSgq Km5hbWUsIGtleSkpIHsKKy0gICAgICAgICAgICAgICAgICAgIHZhbHVlc1tuYW1lLWFyZ25hbWVz XSA9IHZhbHVlOworLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAg IH0KKy0gICAgICAgICAgICAgICAgbmFtZSsrOworLSAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICBpZiAoKm5hbWUpIGNvbnRpbnVlOworLSAgICAgICAgICAgIGVsc2UgeworLSAgICAgICAgICAg ICAgICBQeU9iamVjdCoqKiBhcmduYW1lID0gYXJnbmFtZXM7CistICAgICAgICAgICAgICAgIHdo aWxlIChhcmduYW1lICE9IGZpcnN0X2t3X2FyZykgeworLSAgICAgICAgICAgICAgICAgICAgaWYg KCgqKmFyZ25hbWUgPT0ga2V5KSB8fCAoCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIChD WVRIT05fQ09NUElMSU5HX0lOX1BZUFkgfHwgUHlTdHJpbmdfR0VUX1NJWkUoKiphcmduYW1lKSA9 PSBQeVN0cmluZ19HRVRfU0laRShrZXkpKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgX1B5U3RyaW5nX0VxKCoqYXJnbmFtZSwga2V5KSkpIHsKKy0gICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIGFyZ19wYXNzZWRfdHdpY2U7CistICAgICAgICAgICAgICAgICAgICB9CistICAg ICAgICAgICAgICAgICAgICBhcmduYW1lKys7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAg ICAgICB9CistICAgICAgICB9IGVsc2UKKy0gICAgICAgICNlbmRpZgorLSAgICAgICAgaWYgKGxp a2VseShQeVVuaWNvZGVfQ2hlY2soa2V5KSkpIHsKKy0gICAgICAgICAgICB3aGlsZSAoKm5hbWUp IHsKKy0gICAgICAgICAgICAgICAgaW50IGNtcCA9ICgqKm5hbWUgPT0ga2V5KSA/IDAgOgorLSAg ICAgICAgICAgICAgICAjaWYgIUNZVEhPTl9DT01QSUxJTkdfSU5fUFlQWSAmJiBQWV9NQUpPUl9W RVJTSU9OID49IDMKKy0gICAgICAgICAgICAgICAgICAgIChfX1B5eF9QeVVuaWNvZGVfR0VUX0xF TkdUSCgqKm5hbWUpICE9IF9fUHl4X1B5VW5pY29kZV9HRVRfTEVOR1RIKGtleSkpID8gMSA6Cist ICAgICAgICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Nv bXBhcmUoKipuYW1lLCBrZXkpOworLSAgICAgICAgICAgICAgICBpZiAoY21wIDwgMCAmJiB1bmxp a2VseShQeUVycl9PY2N1cnJlZCgpKSkgZ290byBiYWQ7CistICAgICAgICAgICAgICAgIGlmIChj bXAgPT0gMCkgeworLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzW25hbWUtYXJnbmFtZXNdID0g dmFsdWU7CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAgfQor LSAgICAgICAgICAgICAgICBuYW1lKys7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGlm ICgqbmFtZSkgY29udGludWU7CistICAgICAgICAgICAgZWxzZSB7CistICAgICAgICAgICAgICAg IFB5T2JqZWN0KioqIGFyZ25hbWUgPSBhcmduYW1lczsKKy0gICAgICAgICAgICAgICAgd2hpbGUg KGFyZ25hbWUgIT0gZmlyc3Rfa3dfYXJnKSB7CistICAgICAgICAgICAgICAgICAgICBpbnQgY21w ID0gKCoqYXJnbmFtZSA9PSBrZXkpID8gMCA6CistICAgICAgICAgICAgICAgICAgICAjaWYgIUNZ VEhPTl9DT01QSUxJTkdfSU5fUFlQWSAmJiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgICAg ICAgICAgICAgICAgICAgICAoX19QeXhfUHlVbmljb2RlX0dFVF9MRU5HVEgoKiphcmduYW1lKSAh PSBfX1B5eF9QeVVuaWNvZGVfR0VUX0xFTkdUSChrZXkpKSA/IDEgOgorLSAgICAgICAgICAgICAg ICAgICAgI2VuZGlmCistICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmUo KiphcmduYW1lLCBrZXkpOworLSAgICAgICAgICAgICAgICAgICAgaWYgKGNtcCA8IDAgJiYgdW5s aWtlbHkoUHlFcnJfT2NjdXJyZWQoKSkpIGdvdG8gYmFkOworLSAgICAgICAgICAgICAgICAgICAg aWYgKGNtcCA9PSAwKSBnb3RvIGFyZ19wYXNzZWRfdHdpY2U7CistICAgICAgICAgICAgICAgICAg ICBhcmduYW1lKys7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICB9CistICAgICAg ICB9IGVsc2UKKy0gICAgICAgICAgICBnb3RvIGludmFsaWRfa2V5d29yZF90eXBlOworLSAgICAg ICAgaWYgKGt3ZHMyKSB7CistICAgICAgICAgICAgaWYgKHVubGlrZWx5KFB5RGljdF9TZXRJdGVt KGt3ZHMyLCBrZXksIHZhbHVlKSkpIGdvdG8gYmFkOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAg ICAgICAgICBnb3RvIGludmFsaWRfa2V5d29yZDsKKy0gICAgICAgIH0KKy0gICAgfQorLSAgICBy ZXR1cm4gMDsKKy1hcmdfcGFzc2VkX3R3aWNlOgorLSAgICBfX1B5eF9SYWlzZURvdWJsZUtleXdv cmRzRXJyb3IoZnVuY3Rpb25fbmFtZSwga2V5KTsKKy0gICAgZ290byBiYWQ7CistaW52YWxpZF9r ZXl3b3JkX3R5cGU6CistICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCistICAgICAg ICAiJS4yMDBzKCkga2V5d29yZHMgbXVzdCBiZSBzdHJpbmdzIiwgZnVuY3Rpb25fbmFtZSk7Cist ICAgIGdvdG8gYmFkOworLWludmFsaWRfa2V5d29yZDoKKy0gICAgUHlFcnJfRm9ybWF0KFB5RXhj X1R5cGVFcnJvciwKKy0gICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCistICAgICAgICAiJS4y MDBzKCkgZ290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudCAnJS4yMDBzJyIsCistICAg ICAgICBmdW5jdGlvbl9uYW1lLCBQeVN0cmluZ19Bc1N0cmluZyhrZXkpKTsKKysgICAgUHlfSU5D UkVGKFB5X05vbmUpOworKyAgICByZXR1cm4gUHlfTm9uZTsKKyt9Cisrc3RhdGljIFB5T2JqZWN0 ICoKKytfX1B5eF9DeUZ1bmN0aW9uX2dldF9jb2RlKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9w LCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCisreworKyAgICBQeU9iamVjdCogcmVzdWx0 ID0gKG9wLT5mdW5jX2NvZGUpID8gb3AtPmZ1bmNfY29kZSA6IFB5X05vbmU7CisrICAgIFB5X0lO Q1JFRihyZXN1bHQpOworKyAgICByZXR1cm4gcmVzdWx0OworK30KKytzdGF0aWMgaW50CisrX19Q eXhfQ3lGdW5jdGlvbl9pbml0X2RlZmF1bHRzKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wKSB7 CisrICAgIGludCByZXN1bHQgPSAwOworKyAgICBQeU9iamVjdCAqcmVzID0gb3AtPmRlZmF1bHRz X2dldHRlcigoUHlPYmplY3QgKikgb3ApOworKyAgICBpZiAodW5saWtlbHkoIXJlcykpCisrICAg ICAgICByZXR1cm4gLTE7CisrICAgICNpZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFD WVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworKyAgICBvcC0+ZGVmYXVsdHNfdHVwbGUgPSBQeVR1 cGxlX0dFVF9JVEVNKHJlcywgMCk7CisrICAgIFB5X0lOQ1JFRihvcC0+ZGVmYXVsdHNfdHVwbGUp OworKyAgICBvcC0+ZGVmYXVsdHNfa3dkaWN0ID0gUHlUdXBsZV9HRVRfSVRFTShyZXMsIDEpOwor KyAgICBQeV9JTkNSRUYob3AtPmRlZmF1bHRzX2t3ZGljdCk7CisgICAgICNlbHNlCistICAgICAg ICAiJXMoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50ICclVSciLAorLSAgICAg ICAgZnVuY3Rpb25fbmFtZSwga2V5KTsKKysgICAgb3AtPmRlZmF1bHRzX3R1cGxlID0gUHlTZXF1 ZW5jZV9JVEVNKHJlcywgMCk7CisrICAgIGlmICh1bmxpa2VseSghb3AtPmRlZmF1bHRzX3R1cGxl KSkgcmVzdWx0ID0gLTE7CisrICAgIGVsc2UgeworKyAgICAgICAgb3AtPmRlZmF1bHRzX2t3ZGlj dCA9IFB5U2VxdWVuY2VfSVRFTShyZXMsIDEpOworKyAgICAgICAgaWYgKHVubGlrZWx5KCFvcC0+ ZGVmYXVsdHNfa3dkaWN0KSkgcmVzdWx0ID0gLTE7CisrICAgIH0KKyAgICAgI2VuZGlmCistYmFk OgorLSAgICByZXR1cm4gLTE7CisrICAgIFB5X0RFQ1JFRihyZXMpOworKyAgICByZXR1cm4gcmVz dWx0OworIH0KKy0KKy0vKiBQeU9iamVjdFNldEF0dHJTdHIgKi8KKy0jaWYgQ1lUSE9OX1VTRV9U WVBFX1NMT1RTCistc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4X1B5T2JqZWN0X1NldEF0 dHJTdHIoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqIGF0dHJfbmFtZSwgUHlPYmplY3QqIHZhbHVl KSB7CistICAgIFB5VHlwZU9iamVjdCogdHAgPSBQeV9UWVBFKG9iaik7CistICAgIGlmIChsaWtl bHkodHAtPnRwX3NldGF0dHJvKSkKKy0gICAgICAgIHJldHVybiB0cC0+dHBfc2V0YXR0cm8ob2Jq LCBhdHRyX25hbWUsIHZhbHVlKTsKKy0jaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKy0gICAgaWYg KGxpa2VseSh0cC0+dHBfc2V0YXR0cikpCistICAgICAgICByZXR1cm4gdHAtPnRwX3NldGF0dHIo b2JqLCBQeVN0cmluZ19BU19TVFJJTkcoYXR0cl9uYW1lKSwgdmFsdWUpOworLSNlbmRpZgorLSAg ICByZXR1cm4gUHlPYmplY3RfU2V0QXR0cihvYmosIGF0dHJfbmFtZSwgdmFsdWUpOworK3N0YXRp YyBpbnQKKytfX1B5eF9DeUZ1bmN0aW9uX3NldF9kZWZhdWx0cyhfX3B5eF9DeUZ1bmN0aW9uT2Jq ZWN0ICpvcCwgUHlPYmplY3QqIHZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpIHsK KysgICAgUHlPYmplY3QqIHRtcDsKKysgICAgaWYgKCF2YWx1ZSkgeworKyAgICAgICAgdmFsdWUg PSBQeV9Ob25lOworKyAgICB9IGVsc2UgaWYgKHZhbHVlICE9IFB5X05vbmUgJiYgIVB5VHVwbGVf Q2hlY2sodmFsdWUpKSB7CisrICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9y LAorKyAgICAgICAgICAgICAgICAgICAgICAgICJfX2RlZmF1bHRzX18gbXVzdCBiZSBzZXQgdG8g YSB0dXBsZSBvYmplY3QiKTsKKysgICAgICAgIHJldHVybiAtMTsKKysgICAgfQorKyAgICBQeV9J TkNSRUYodmFsdWUpOworKyAgICB0bXAgPSBvcC0+ZGVmYXVsdHNfdHVwbGU7CisrICAgIG9wLT5k ZWZhdWx0c190dXBsZSA9IHZhbHVlOworKyAgICBQeV9YREVDUkVGKHRtcCk7CisrICAgIHJldHVy biAwOworIH0KKy0jZW5kaWYKKy0KKy0vKiBQeUludEJpbm9wICovCistI2lmICFDWVRIT05fQ09N UElMSU5HX0lOX1BZUFkKKy1zdGF0aWMgUHlPYmplY3QqIF9fUHl4X1B5SW50X0FkZE9iakMoUHlP YmplY3QgKm9wMSwgUHlPYmplY3QgKm9wMiwgQ1lUSE9OX1VOVVNFRCBsb25nIGludHZhbCwgaW50 IGlucGxhY2UsIGludCB6ZXJvZGl2aXNpb25fY2hlY2spIHsKKy0gICAgKHZvaWQpaW5wbGFjZTsK Ky0gICAgKHZvaWQpemVyb2RpdmlzaW9uX2NoZWNrOworLSAgICAjaWYgUFlfTUFKT1JfVkVSU0lP TiA8IDMKKy0gICAgaWYgKGxpa2VseShQeUludF9DaGVja0V4YWN0KG9wMSkpKSB7CistICAgICAg ICBjb25zdCBsb25nIGIgPSBpbnR2YWw7CistICAgICAgICBsb25nIHg7CistICAgICAgICBsb25n IGEgPSBQeUludF9BU19MT05HKG9wMSk7CistICAgICAgICAgICAgeCA9IChsb25nKSgodW5zaWdu ZWQgbG9uZylhICsgYik7CistICAgICAgICAgICAgaWYgKGxpa2VseSgoeF5hKSA+PSAwIHx8ICh4 XmIpID49IDApKQorLSAgICAgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoeCk7Cist ICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19UeXBlLnRwX2FzX251bWJlci0+bmJfYWRkKG9wMSwg b3AyKTsKKytzdGF0aWMgUHlPYmplY3QgKgorK19fUHl4X0N5RnVuY3Rpb25fZ2V0X2RlZmF1bHRz KF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQp IHsKKysgICAgUHlPYmplY3QqIHJlc3VsdCA9IG9wLT5kZWZhdWx0c190dXBsZTsKKysgICAgaWYg KHVubGlrZWx5KCFyZXN1bHQpKSB7CisrICAgICAgICBpZiAob3AtPmRlZmF1bHRzX2dldHRlcikg eworKyAgICAgICAgICAgIGlmIChfX1B5eF9DeUZ1bmN0aW9uX2luaXRfZGVmYXVsdHMob3ApIDwg MCkgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgcmVzdWx0ID0gb3AtPmRlZmF1bHRzX3R1cGxl OworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICByZXN1bHQgPSBQeV9Ob25lOworKyAg ICAgICAgfQorICAgICB9CistICAgICNlbmRpZgorLSAgICAjaWYgQ1lUSE9OX1VTRV9QWUxPTkdf SU5URVJOQUxTCistICAgIGlmIChsaWtlbHkoUHlMb25nX0NoZWNrRXhhY3Qob3AxKSkpIHsKKy0g ICAgICAgIGNvbnN0IGxvbmcgYiA9IGludHZhbDsKKy0gICAgICAgIGxvbmcgYSwgeDsKKy0jaWZk ZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgIGNvbnN0IFBZX0xPTkdfTE9ORyBsbGIgPSBpbnR2 YWw7CistICAgICAgICBQWV9MT05HX0xPTkcgbGxhLCBsbHg7CistI2VuZGlmCistICAgICAgICBj b25zdCBkaWdpdCogZGlnaXRzID0gKChQeUxvbmdPYmplY3QqKW9wMSktPm9iX2RpZ2l0OworLSAg ICAgICAgY29uc3QgUHlfc3NpemVfdCBzaXplID0gUHlfU0laRShvcDEpOworLSAgICAgICAgaWYg KGxpa2VseShfX1B5eF9zc3RfYWJzKHNpemUpIDw9IDEpKSB7CistICAgICAgICAgICAgYSA9IGxp a2VseShzaXplKSA/IGRpZ2l0c1swXSA6IDA7CistICAgICAgICAgICAgaWYgKHNpemUgPT0gLTEp IGEgPSAtYTsKKysgICAgUHlfSU5DUkVGKHJlc3VsdCk7CisrICAgIHJldHVybiByZXN1bHQ7Cisr fQorK3N0YXRpYyBpbnQKKytfX1B5eF9DeUZ1bmN0aW9uX3NldF9rd2RlZmF1bHRzKF9fcHl4X0N5 RnVuY3Rpb25PYmplY3QgKm9wLCBQeU9iamVjdCogdmFsdWUsIENZVEhPTl9VTlVTRUQgdm9pZCAq Y29udGV4dCkgeworKyAgICBQeU9iamVjdCogdG1wOworKyAgICBpZiAoIXZhbHVlKSB7CisrICAg ICAgICB2YWx1ZSA9IFB5X05vbmU7CisrICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gUHlfTm9uZSAm JiAhUHlEaWN0X0NoZWNrKHZhbHVlKSkgeworKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhj X1R5cGVFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAiX19rd2RlZmF1bHRzX18gbXVz dCBiZSBzZXQgdG8gYSBkaWN0IG9iamVjdCIpOworKyAgICAgICAgcmV0dXJuIC0xOworKyAgICB9 CisrICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisrICAgIHRtcCA9IG9wLT5kZWZhdWx0c19rd2RpY3Q7 CisrICAgIG9wLT5kZWZhdWx0c19rd2RpY3QgPSB2YWx1ZTsKKysgICAgUHlfWERFQ1JFRih0bXAp OworKyAgICByZXR1cm4gMDsKKyt9Cisrc3RhdGljIFB5T2JqZWN0ICoKKytfX1B5eF9DeUZ1bmN0 aW9uX2dldF9rd2RlZmF1bHRzKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5V U0VEIHZvaWQgKmNvbnRleHQpIHsKKysgICAgUHlPYmplY3QqIHJlc3VsdCA9IG9wLT5kZWZhdWx0 c19rd2RpY3Q7CisrICAgIGlmICh1bmxpa2VseSghcmVzdWx0KSkgeworKyAgICAgICAgaWYgKG9w LT5kZWZhdWx0c19nZXR0ZXIpIHsKKysgICAgICAgICAgICBpZiAoX19QeXhfQ3lGdW5jdGlvbl9p bml0X2RlZmF1bHRzKG9wKSA8IDApIHJldHVybiBOVUxMOworKyAgICAgICAgICAgIHJlc3VsdCA9 IG9wLT5kZWZhdWx0c19rd2RpY3Q7CisgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHN3 aXRjaCAoc2l6ZSkgeworLSAgICAgICAgICAgICAgICBjYXNlIC0yOgorLSAgICAgICAgICAgICAg ICAgICAgaWYgKDggKiBzaXplb2YobG9uZykgLSAxID4gMiAqIFB5TG9uZ19TSElGVCkgeworLSAg ICAgICAgICAgICAgICAgICAgICAgIGEgPSAtKGxvbmcpICgoKCgodW5zaWduZWQgbG9uZylkaWdp dHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKKy0g ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0g ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0g MSA+IDIgKiBQeUxvbmdfU0hJRlQpIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAt KFBZX0xPTkdfTE9ORykgKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8PCBQ eUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsKKy0gICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIGxvbmdfbG9uZzsKKy0jZW5kaWYKKy0gICAgICAgICAg ICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0g ICAgICAgICAgICAgICAgY2FzZSAyOgorLSAgICAgICAgICAgICAgICAgICAgaWYgKDggKiBzaXpl b2YobG9uZykgLSAxID4gMiAqIFB5TG9uZ19TSElGVCkgeworLSAgICAgICAgICAgICAgICAgICAg ICAgIGEgPSAobG9uZykgKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NI SUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkpOworLSAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworLSNpZmRlZiBIQVZFX0xPTkdfTE9ORworLSAgICAgICAgICAgICAgICAgICAg fSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gMiAqIFB5TG9uZ19TSElG VCkgeworLSAgICAgICAgICAgICAgICAgICAgICAgIGxsYSA9IChQWV9MT05HX0xPTkcpICgoKCgo dW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNp Z25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7CistICAgICAgICAgICAgICAgICAgICAgICAg Z290byBsb25nX2xvbmc7CistI2VuZGlmCistICAgICAgICAgICAgICAgICAgICB9CistICAgICAg ICAgICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICAgICAgICAgIGNhc2Ug LTM6CistICAgICAgICAgICAgICAgICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAtIDEgPiAzICog UHlMb25nX1NISUZUKSB7CistICAgICAgICAgICAgICAgICAgICAgICAgYSA9IC0obG9uZykgKCgo KCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVk IGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRz WzBdKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistI2lmZGVmIEhBVkVfTE9O R19MT05HCistICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBzaXplb2YoUFlfTE9O R19MT05HKSAtIDEgPiAzICogUHlMb25nX1NISUZUKSB7CistICAgICAgICAgICAgICAgICAgICAg ICAgbGxhID0gLShQWV9MT05HX0xPTkcpICgoKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGln aXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNb MV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1swXSkp OworLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOworLSNlbmRpZgorLSAg ICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOworLSAgICAgICAgICAgICAgICBjYXNlIDM6CistICAgICAgICAgICAgICAgICAgICBpZiAo OCAqIHNpemVvZihsb25nKSAtIDEgPiAzICogUHlMb25nX1NISUZUKSB7CistICAgICAgICAgICAg ICAgICAgICAgICAgYSA9IChsb25nKSAoKCgoKCgodW5zaWduZWQgbG9uZylkaWdpdHNbMl0pIDw8 IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElG VCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKKy0gICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0gMSA+IDMgKiBQeUxvbmdfU0hJRlQp IHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAoUFlfTE9OR19MT05HKSAoKCgoKCgo dW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNp Z25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVk IFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IGxvbmdfbG9uZzsKKy0jZW5kaWYKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgICAgICAgICAgY2FzZSAtNDoK Ky0gICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+IDQgKiBQeUxv bmdfU0hJRlQpIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBhID0gLShsb25nKSAoKCgoKCgo KCh1bnNpZ25lZCBsb25nKWRpZ2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBs b25nKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1sx XSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkpOworLSAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSNpZmRlZiBIQVZFX0xPTkdfTE9ORworLSAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4g NCAqIFB5TG9uZ19TSElGVCkgeworLSAgICAgICAgICAgICAgICAgICAgICAgIGxsYSA9IC0oUFlf TE9OR19MT05HKSAoKCgoKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzNdKSA8PCBQ eUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMl0pIDw8IFB5TG9u Z19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NI SUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7CistICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBsb25nX2xvbmc7CistI2VuZGlmCistICAgICAgICAgICAgICAgICAg ICB9CistICAgICAgICAgICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICAg ICAgICAgIGNhc2UgNDoKKy0gICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcp IC0gMSA+IDQgKiBQeUxvbmdfU0hJRlQpIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBhID0g KGxvbmcpICgoKCgoKCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzNdKSA8PCBQeUxvbmdfU0hJRlQp IHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVk IGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRz WzBdKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistI2lmZGVmIEhBVkVfTE9O R19MT05HCistICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBzaXplb2YoUFlfTE9O R19MT05HKSAtIDEgPiA0ICogUHlMb25nX1NISUZUKSB7CistICAgICAgICAgICAgICAgICAgICAg ICAgbGxhID0gKFBZX0xPTkdfTE9ORykgKCgoKCgoKCgodW5zaWduZWQgUFlfTE9OR19MT05HKWRp Z2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRz WzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMV0p IDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1swXSkpOwor LSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOworLSNlbmRpZgorLSAgICAg ICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OworLSAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gUHlMb25nX1R5cGUudHBfYXNfbnVt YmVyLT5uYl9hZGQob3AxLCBvcDIpOworLSAgICAgICAgICAgIH0KKysgICAgICAgICAgICByZXN1 bHQgPSBQeV9Ob25lOworICAgICAgICAgfQorLSAgICAgICAgICAgICAgICB4ID0gYSArIGI7Cist ICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh4KTsKKy0jaWZkZWYgSEFWRV9MT05H X0xPTkcKKy0gICAgICAgIGxvbmdfbG9uZzoKKy0gICAgICAgICAgICAgICAgbGx4ID0gbGxhICsg bGxiOworLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKGxseCk7CistI2Vu ZGlmCistICAgICAgICAKKy0gICAgICAgIAorICAgICB9CistICAgICNlbmRpZgorLSAgICBpZiAo UHlGbG9hdF9DaGVja0V4YWN0KG9wMSkpIHsKKy0gICAgICAgIGNvbnN0IGxvbmcgYiA9IGludHZh bDsKKy0gICAgICAgIGRvdWJsZSBhID0gUHlGbG9hdF9BU19ET1VCTEUob3AxKTsKKy0gICAgICAg ICAgICBkb3VibGUgcmVzdWx0OworLSAgICAgICAgICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImFk ZCIsIHJldHVybiBOVUxMKQorLSAgICAgICAgICAgIHJlc3VsdCA9ICgoZG91YmxlKWEpICsgKGRv dWJsZSliOworLSAgICAgICAgICAgIFB5RlBFX0VORF9QUk9URUNUKHJlc3VsdCkKKy0gICAgICAg ICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHJlc3VsdCk7CisrICAgIFB5X0lOQ1JFRihy ZXN1bHQpOworKyAgICByZXR1cm4gcmVzdWx0OworK30KKytzdGF0aWMgaW50CisrX19QeXhfQ3lG dW5jdGlvbl9zZXRfYW5ub3RhdGlvbnMoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIFB5T2Jq ZWN0KiB2YWx1ZSwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KSB7CisrICAgIFB5T2JqZWN0 KiB0bXA7CisrICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPT0gUHlfTm9uZSkgeworKyAgICAgICAg dmFsdWUgPSBOVUxMOworKyAgICB9IGVsc2UgaWYgKCFQeURpY3RfQ2hlY2sodmFsdWUpKSB7Cisr ICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICJfX2Fubm90YXRpb25zX18gbXVzdCBiZSBzZXQgdG8gYSBkaWN0IG9iamVjdCIp OworKyAgICAgICAgcmV0dXJuIC0xOworICAgICB9CistICAgIHJldHVybiAoaW5wbGFjZSA/IFB5 TnVtYmVyX0luUGxhY2VBZGQgOiBQeU51bWJlcl9BZGQpKG9wMSwgb3AyKTsKKysgICAgUHlfWElO Q1JFRih2YWx1ZSk7CisrICAgIHRtcCA9IG9wLT5mdW5jX2Fubm90YXRpb25zOworKyAgICBvcC0+ ZnVuY19hbm5vdGF0aW9ucyA9IHZhbHVlOworKyAgICBQeV9YREVDUkVGKHRtcCk7CisrICAgIHJl dHVybiAwOworIH0KKy0jZW5kaWYKKy0KKy0vKiBQeUludEJpbm9wICovCistI2lmICFDWVRIT05f Q09NUElMSU5HX0lOX1BZUFkKKy1zdGF0aWMgUHlPYmplY3QqIF9fUHl4X1B5SW50X1N1YnRyYWN0 T2JqQyhQeU9iamVjdCAqb3AxLCBQeU9iamVjdCAqb3AyLCBDWVRIT05fVU5VU0VEIGxvbmcgaW50 dmFsLCBpbnQgaW5wbGFjZSwgaW50IHplcm9kaXZpc2lvbl9jaGVjaykgeworLSAgICAodm9pZClp bnBsYWNlOworLSAgICAodm9pZCl6ZXJvZGl2aXNpb25fY2hlY2s7CistICAgICNpZiBQWV9NQUpP Ul9WRVJTSU9OIDwgMworLSAgICBpZiAobGlrZWx5KFB5SW50X0NoZWNrRXhhY3Qob3AxKSkpIHsK Ky0gICAgICAgIGNvbnN0IGxvbmcgYiA9IGludHZhbDsKKy0gICAgICAgIGxvbmcgeDsKKy0gICAg ICAgIGxvbmcgYSA9IFB5SW50X0FTX0xPTkcob3AxKTsKKy0gICAgICAgICAgICB4ID0gKGxvbmcp KCh1bnNpZ25lZCBsb25nKWEgLSBiKTsKKy0gICAgICAgICAgICBpZiAobGlrZWx5KCh4XmEpID49 IDAgfHwgKHhefmIpID49IDApKQorLSAgICAgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxv bmcoeCk7CistICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19UeXBlLnRwX2FzX251bWJlci0+bmJf c3VidHJhY3Qob3AxLCBvcDIpOworK3N0YXRpYyBQeU9iamVjdCAqCisrX19QeXhfQ3lGdW5jdGlv bl9nZXRfYW5ub3RhdGlvbnMoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIENZVEhPTl9VTlVT RUQgdm9pZCAqY29udGV4dCkgeworKyAgICBQeU9iamVjdCogcmVzdWx0ID0gb3AtPmZ1bmNfYW5u b3RhdGlvbnM7CisrICAgIGlmICh1bmxpa2VseSghcmVzdWx0KSkgeworKyAgICAgICAgcmVzdWx0 ID0gUHlEaWN0X05ldygpOworKyAgICAgICAgaWYgKHVubGlrZWx5KCFyZXN1bHQpKSByZXR1cm4g TlVMTDsKKysgICAgICAgIG9wLT5mdW5jX2Fubm90YXRpb25zID0gcmVzdWx0OworICAgICB9Cist ICAgICNlbmRpZgorLSAgICAjaWYgQ1lUSE9OX1VTRV9QWUxPTkdfSU5URVJOQUxTCistICAgIGlm IChsaWtlbHkoUHlMb25nX0NoZWNrRXhhY3Qob3AxKSkpIHsKKy0gICAgICAgIGNvbnN0IGxvbmcg YiA9IGludHZhbDsKKy0gICAgICAgIGxvbmcgYSwgeDsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcK Ky0gICAgICAgIGNvbnN0IFBZX0xPTkdfTE9ORyBsbGIgPSBpbnR2YWw7CistICAgICAgICBQWV9M T05HX0xPTkcgbGxhLCBsbHg7CistI2VuZGlmCistICAgICAgICBjb25zdCBkaWdpdCogZGlnaXRz ID0gKChQeUxvbmdPYmplY3QqKW9wMSktPm9iX2RpZ2l0OworLSAgICAgICAgY29uc3QgUHlfc3Np emVfdCBzaXplID0gUHlfU0laRShvcDEpOworLSAgICAgICAgaWYgKGxpa2VseShfX1B5eF9zc3Rf YWJzKHNpemUpIDw9IDEpKSB7CistICAgICAgICAgICAgYSA9IGxpa2VseShzaXplKSA/IGRpZ2l0 c1swXSA6IDA7CistICAgICAgICAgICAgaWYgKHNpemUgPT0gLTEpIGEgPSAtYTsKKy0gICAgICAg IH0gZWxzZSB7CistICAgICAgICAgICAgc3dpdGNoIChzaXplKSB7CistICAgICAgICAgICAgICAg IGNhc2UgLTI6CistICAgICAgICAgICAgICAgICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAtIDEg PiAyICogUHlMb25nX1NISUZUKSB7CistICAgICAgICAgICAgICAgICAgICAgICAgYSA9IC0obG9u ZykgKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNp Z25lZCBsb25nKWRpZ2l0c1swXSkpOworLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor LSNpZmRlZiBIQVZFX0xPTkdfTE9ORworLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICg4 ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gMiAqIFB5TG9uZ19TSElGVCkgeworLSAgICAg ICAgICAgICAgICAgICAgICAgIGxsYSA9IC0oUFlfTE9OR19MT05HKSAoKCgoKHVuc2lnbmVkIFBZ X0xPTkdfTE9ORylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9O R19MT05HKWRpZ2l0c1swXSkpOworLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19s b25nOworLSNlbmRpZgorLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAg ICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgICAgICAgICBjYXNlIDI6CistICAgICAg ICAgICAgICAgICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAtIDEgPiAyICogUHlMb25nX1NISUZU KSB7CistICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChsb25nKSAoKCgoKHVuc2lnbmVkIGxv bmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzBd KSk7CistICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistI2lmZGVmIEhBVkVfTE9OR19M T05HCistICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBzaXplb2YoUFlfTE9OR19M T05HKSAtIDEgPiAyICogUHlMb25nX1NISUZUKSB7CistICAgICAgICAgICAgICAgICAgICAgICAg bGxhID0gKFBZX0xPTkdfTE9ORykgKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFd KSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsK Ky0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGxvbmdfbG9uZzsKKy0jZW5kaWYKKy0gICAg ICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIENZVEhPTl9GQUxMVEhST1VH SDsKKy0gICAgICAgICAgICAgICAgY2FzZSAtMzoKKy0gICAgICAgICAgICAgICAgICAgIGlmICg4 ICogc2l6ZW9mKGxvbmcpIC0gMSA+IDMgKiBQeUxvbmdfU0hJRlQpIHsKKy0gICAgICAgICAgICAg ICAgICAgICAgICBhID0gLShsb25nKSAoKCgoKCgodW5zaWduZWQgbG9uZylkaWdpdHNbMl0pIDw8 IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElG VCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKKy0gICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0gMSA+IDMgKiBQeUxvbmdfU0hJRlQp IHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAtKFBZX0xPTkdfTE9ORykgKCgoKCgo KHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMl0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5z aWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25l ZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgZ290 byBsb25nX2xvbmc7CistI2VuZGlmCistICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAg ICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICAgICAgICAgIGNhc2UgMzoK Ky0gICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+IDMgKiBQeUxv bmdfU0hJRlQpIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBhID0gKGxvbmcpICgoKCgoKCh1 bnNpZ25lZCBsb25nKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25n KWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkp OworLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSNpZmRlZiBIQVZFX0xPTkdfTE9O RworLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9O RykgLSAxID4gMyAqIFB5TG9uZ19TSElGVCkgeworLSAgICAgICAgICAgICAgICAgICAgICAgIGxs YSA9IChQWV9MT05HX0xPTkcpICgoKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzJd KSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMV0pIDw8 IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1swXSkpOworLSAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOworLSNlbmRpZgorLSAgICAgICAg ICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwor LSAgICAgICAgICAgICAgICBjYXNlIC00OgorLSAgICAgICAgICAgICAgICAgICAgaWYgKDggKiBz aXplb2YobG9uZykgLSAxID4gNCAqIFB5TG9uZ19TSElGVCkgeworLSAgICAgICAgICAgICAgICAg ICAgICAgIGEgPSAtKGxvbmcpICgoKCgoKCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzNdKSA8PCBQ eUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQp IHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVk IGxvbmcpZGlnaXRzWzBdKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistI2lm ZGVmIEhBVkVfTE9OR19MT05HCistICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBz aXplb2YoUFlfTE9OR19MT05HKSAtIDEgPiA0ICogUHlMb25nX1NISUZUKSB7CistICAgICAgICAg ICAgICAgICAgICAgICAgbGxhID0gLShQWV9MT05HX0xPTkcpICgoKCgoKCgoKHVuc2lnbmVkIFBZ X0xPTkdfTE9ORylkaWdpdHNbM10pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9O R19MT05HKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xP TkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylk aWdpdHNbMF0pKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGxvbmdfbG9uZzsKKy0j ZW5kaWYKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIENZVEhP Tl9GQUxMVEhST1VHSDsKKy0gICAgICAgICAgICAgICAgY2FzZSA0OgorLSAgICAgICAgICAgICAg ICAgICAgaWYgKDggKiBzaXplb2YobG9uZykgLSAxID4gNCAqIFB5TG9uZ19TSElGVCkgeworLSAg ICAgICAgICAgICAgICAgICAgICAgIGEgPSAobG9uZykgKCgoKCgoKCgodW5zaWduZWQgbG9uZylk aWdpdHNbM10pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMl0pIDw8 IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElG VCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKKy0gICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0gMSA+IDQgKiBQeUxvbmdfU0hJRlQp IHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAoUFlfTE9OR19MT05HKSAoKCgoKCgo KCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzNdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVu c2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMl0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWdu ZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQ WV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgZ290byBs b25nX2xvbmc7CisrICAgIFB5X0lOQ1JFRihyZXN1bHQpOworKyAgICByZXR1cm4gcmVzdWx0Owor K30KKytzdGF0aWMgUHlHZXRTZXREZWYgX19weXhfQ3lGdW5jdGlvbl9nZXRzZXRzW10gPSB7Cisr ICAgIHsoY2hhciAqKSAiZnVuY19kb2MiLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2Rv YywgKHNldHRlcilfX1B5eF9DeUZ1bmN0aW9uX3NldF9kb2MsIDAsIDB9LAorKyAgICB7KGNoYXIg KikgIl9fZG9jX18iLCAgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9kb2MsIChzZXR0ZXIp X19QeXhfQ3lGdW5jdGlvbl9zZXRfZG9jLCAwLCAwfSwKKysgICAgeyhjaGFyICopICJmdW5jX25h bWUiLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X25hbWUsIChzZXR0ZXIpX19QeXhfQ3lG dW5jdGlvbl9zZXRfbmFtZSwgMCwgMH0sCisrICAgIHsoY2hhciAqKSAiX19uYW1lX18iLCAoZ2V0 dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X25hbWUsIChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9z ZXRfbmFtZSwgMCwgMH0sCisrICAgIHsoY2hhciAqKSAiX19xdWFsbmFtZV9fIiwgKGdldHRlcilf X1B5eF9DeUZ1bmN0aW9uX2dldF9xdWFsbmFtZSwgKHNldHRlcilfX1B5eF9DeUZ1bmN0aW9uX3Nl dF9xdWFsbmFtZSwgMCwgMH0sCisrICAgIHsoY2hhciAqKSAiX19zZWxmX18iLCAoZ2V0dGVyKV9f UHl4X0N5RnVuY3Rpb25fZ2V0X3NlbGYsIDAsIDAsIDB9LAorKyAgICB7KGNoYXIgKikgImZ1bmNf ZGljdCIsIChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9nZXRfZGljdCwgKHNldHRlcilfX1B5eF9D eUZ1bmN0aW9uX3NldF9kaWN0LCAwLCAwfSwKKysgICAgeyhjaGFyICopICJfX2RpY3RfXyIsIChn ZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9nZXRfZGljdCwgKHNldHRlcilfX1B5eF9DeUZ1bmN0aW9u X3NldF9kaWN0LCAwLCAwfSwKKysgICAgeyhjaGFyICopICJmdW5jX2dsb2JhbHMiLCAoZ2V0dGVy KV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2dsb2JhbHMsIDAsIDAsIDB9LAorKyAgICB7KGNoYXIgKikg Il9fZ2xvYmFsc19fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9nbG9iYWxzLCAwLCAw LCAwfSwKKysgICAgeyhjaGFyICopICJmdW5jX2Nsb3N1cmUiLCAoZ2V0dGVyKV9fUHl4X0N5RnVu Y3Rpb25fZ2V0X2Nsb3N1cmUsIDAsIDAsIDB9LAorKyAgICB7KGNoYXIgKikgIl9fY2xvc3VyZV9f IiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9jbG9zdXJlLCAwLCAwLCAwfSwKKysgICAg eyhjaGFyICopICJmdW5jX2NvZGUiLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2NvZGUs IDAsIDAsIDB9LAorKyAgICB7KGNoYXIgKikgIl9fY29kZV9fIiwgKGdldHRlcilfX1B5eF9DeUZ1 bmN0aW9uX2dldF9jb2RlLCAwLCAwLCAwfSwKKysgICAgeyhjaGFyICopICJmdW5jX2RlZmF1bHRz IiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9kZWZhdWx0cywgKHNldHRlcilfX1B5eF9D eUZ1bmN0aW9uX3NldF9kZWZhdWx0cywgMCwgMH0sCisrICAgIHsoY2hhciAqKSAiX19kZWZhdWx0 c19fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9kZWZhdWx0cywgKHNldHRlcilfX1B5 eF9DeUZ1bmN0aW9uX3NldF9kZWZhdWx0cywgMCwgMH0sCisrICAgIHsoY2hhciAqKSAiX19rd2Rl ZmF1bHRzX18iLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2t3ZGVmYXVsdHMsIChzZXR0 ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfa3dkZWZhdWx0cywgMCwgMH0sCisrICAgIHsoY2hhciAq KSAiX19hbm5vdGF0aW9uc19fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9hbm5vdGF0 aW9ucywgKHNldHRlcilfX1B5eF9DeUZ1bmN0aW9uX3NldF9hbm5vdGF0aW9ucywgMCwgMH0sCisr ICAgIHswLCAwLCAwLCAwLCAwfQorK307Cisrc3RhdGljIFB5TWVtYmVyRGVmIF9fcHl4X0N5RnVu Y3Rpb25fbWVtYmVyc1tdID0geworKyAgICB7KGNoYXIgKikgIl9fbW9kdWxlX18iLCBUX09CSkVD VCwgb2Zmc2V0b2YoUHlDRnVuY3Rpb25PYmplY3QsIG1fbW9kdWxlKSwgUFlfV1JJVEVfUkVTVFJJ Q1RFRCwgMH0sCisrICAgIHswLCAwLCAwLCAgMCwgMH0KKyt9OworK3N0YXRpYyBQeU9iamVjdCAq CisrX19QeXhfQ3lGdW5jdGlvbl9yZWR1Y2UoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSwgQ1lU SE9OX1VOVVNFRCBQeU9iamVjdCAqYXJncykKKyt7CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0g MworKyAgICBQeV9JTkNSRUYobS0+ZnVuY19xdWFsbmFtZSk7CisrICAgIHJldHVybiBtLT5mdW5j X3F1YWxuYW1lOworKyNlbHNlCisrICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKG0tPmZ1 bmMubV9tbC0+bWxfbmFtZSk7CisgI2VuZGlmCistICAgICAgICAgICAgICAgICAgICB9CistICAg ICAgICAgICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICAgICAgICAgIGRl ZmF1bHQ6IHJldHVybiBQeUxvbmdfVHlwZS50cF9hc19udW1iZXItPm5iX3N1YnRyYWN0KG9wMSwg b3AyKTsKKy0gICAgICAgICAgICB9CistICAgICAgICB9CistICAgICAgICAgICAgICAgIHggPSBh IC0gYjsKKy0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHgpOworLSNpZmRlZiBI QVZFX0xPTkdfTE9ORworLSAgICAgICAgbG9uZ19sb25nOgorLSAgICAgICAgICAgICAgICBsbHgg PSBsbGEgLSBsbGI7CistICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZ0xvbmcobGx4 KTsKKyt9Cisrc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X0N5RnVuY3Rpb25fbWV0aG9kc1tdID0g eworKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pX19QeXhfQ3lGdW5jdGlvbl9yZWR1 Y2UsIE1FVEhfVkFSQVJHUywgMH0sCisrICAgIHswLCAwLCAwLCAwfQorK307CisrI2lmIFBZX1ZF UlNJT05fSEVYIDwgMHgwMzA1MDBBMAorKyNkZWZpbmUgX19QeXhfQ3lGdW5jdGlvbl93ZWFrcmVm bGlzdChjeWZ1bmMpICgoY3lmdW5jKS0+ZnVuY193ZWFrcmVmbGlzdCkKKysjZWxzZQorKyNkZWZp bmUgX19QeXhfQ3lGdW5jdGlvbl93ZWFrcmVmbGlzdChjeWZ1bmMpICgoY3lmdW5jKS0+ZnVuYy5t X3dlYWtyZWZsaXN0KQorICNlbmRpZgorLSAgICAgICAgCistICAgICAgICAKKytzdGF0aWMgUHlP YmplY3QgKl9fUHl4X0N5RnVuY3Rpb25fSW5pdChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwg UHlNZXRob2REZWYgKm1sLCBpbnQgZmxhZ3MsIFB5T2JqZWN0KiBxdWFsbmFtZSwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqY2xvc3VyZSwgUHlPYmpl Y3QgKm1vZHVsZSwgUHlPYmplY3QqIGdsb2JhbHMsIFB5T2JqZWN0KiBjb2RlKSB7CisrICAgIGlm ICh1bmxpa2VseShvcCA9PSBOVUxMKSkKKysgICAgICAgIHJldHVybiBOVUxMOworKyAgICBvcC0+ ZmxhZ3MgPSBmbGFnczsKKysgICAgX19QeXhfQ3lGdW5jdGlvbl93ZWFrcmVmbGlzdChvcCkgPSBO VUxMOworKyAgICBvcC0+ZnVuYy5tX21sID0gbWw7CisrICAgIG9wLT5mdW5jLm1fc2VsZiA9IChQ eU9iamVjdCAqKSBvcDsKKysgICAgUHlfWElOQ1JFRihjbG9zdXJlKTsKKysgICAgb3AtPmZ1bmNf Y2xvc3VyZSA9IGNsb3N1cmU7CisrICAgIFB5X1hJTkNSRUYobW9kdWxlKTsKKysgICAgb3AtPmZ1 bmMubV9tb2R1bGUgPSBtb2R1bGU7CisrICAgIG9wLT5mdW5jX2RpY3QgPSBOVUxMOworKyAgICBv cC0+ZnVuY19uYW1lID0gTlVMTDsKKysgICAgUHlfSU5DUkVGKHF1YWxuYW1lKTsKKysgICAgb3At PmZ1bmNfcXVhbG5hbWUgPSBxdWFsbmFtZTsKKysgICAgb3AtPmZ1bmNfZG9jID0gTlVMTDsKKysg ICAgb3AtPmZ1bmNfY2xhc3NvYmogPSBOVUxMOworKyAgICBvcC0+ZnVuY19nbG9iYWxzID0gZ2xv YmFsczsKKysgICAgUHlfSU5DUkVGKG9wLT5mdW5jX2dsb2JhbHMpOworKyAgICBQeV9YSU5DUkVG KGNvZGUpOworKyAgICBvcC0+ZnVuY19jb2RlID0gY29kZTsKKysgICAgb3AtPmRlZmF1bHRzX3B5 b2JqZWN0cyA9IDA7CisrICAgIG9wLT5kZWZhdWx0c19zaXplID0gMDsKKysgICAgb3AtPmRlZmF1 bHRzID0gTlVMTDsKKysgICAgb3AtPmRlZmF1bHRzX3R1cGxlID0gTlVMTDsKKysgICAgb3AtPmRl ZmF1bHRzX2t3ZGljdCA9IE5VTEw7CisrICAgIG9wLT5kZWZhdWx0c19nZXR0ZXIgPSBOVUxMOwor KyAgICBvcC0+ZnVuY19hbm5vdGF0aW9ucyA9IE5VTEw7CisrICAgIHJldHVybiAoUHlPYmplY3Qg Kikgb3A7CisrfQorK3N0YXRpYyBpbnQKKytfX1B5eF9DeUZ1bmN0aW9uX2NsZWFyKF9fcHl4X0N5 RnVuY3Rpb25PYmplY3QgKm0pCisreworKyAgICBQeV9DTEVBUihtLT5mdW5jX2Nsb3N1cmUpOwor KyAgICBQeV9DTEVBUihtLT5mdW5jLm1fbW9kdWxlKTsKKysgICAgUHlfQ0xFQVIobS0+ZnVuY19k aWN0KTsKKysgICAgUHlfQ0xFQVIobS0+ZnVuY19uYW1lKTsKKysgICAgUHlfQ0xFQVIobS0+ZnVu Y19xdWFsbmFtZSk7CisrICAgIFB5X0NMRUFSKG0tPmZ1bmNfZG9jKTsKKysgICAgUHlfQ0xFQVIo bS0+ZnVuY19nbG9iYWxzKTsKKysgICAgUHlfQ0xFQVIobS0+ZnVuY19jb2RlKTsKKysgICAgUHlf Q0xFQVIobS0+ZnVuY19jbGFzc29iaik7CisrICAgIFB5X0NMRUFSKG0tPmRlZmF1bHRzX3R1cGxl KTsKKysgICAgUHlfQ0xFQVIobS0+ZGVmYXVsdHNfa3dkaWN0KTsKKysgICAgUHlfQ0xFQVIobS0+ ZnVuY19hbm5vdGF0aW9ucyk7CisrICAgIGlmIChtLT5kZWZhdWx0cykgeworKyAgICAgICAgUHlP YmplY3QgKipweWRlZmF1bHRzID0gX19QeXhfQ3lGdW5jdGlvbl9EZWZhdWx0cyhQeU9iamVjdCAq LCBtKTsKKysgICAgICAgIGludCBpOworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG0tPmRlZmF1 bHRzX3B5b2JqZWN0czsgaSsrKQorKyAgICAgICAgICAgIFB5X1hERUNSRUYocHlkZWZhdWx0c1tp XSk7CisrICAgICAgICBQeU9iamVjdF9GcmVlKG0tPmRlZmF1bHRzKTsKKysgICAgICAgIG0tPmRl ZmF1bHRzID0gTlVMTDsKKyAgICAgfQorLSAgICAjZW5kaWYKKy0gICAgaWYgKFB5RmxvYXRfQ2hl Y2tFeGFjdChvcDEpKSB7CistICAgICAgICBjb25zdCBsb25nIGIgPSBpbnR2YWw7CistICAgICAg ICBkb3VibGUgYSA9IFB5RmxvYXRfQVNfRE9VQkxFKG9wMSk7CistICAgICAgICAgICAgZG91Ymxl IHJlc3VsdDsKKy0gICAgICAgICAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJzdWJ0cmFjdCIsIHJl dHVybiBOVUxMKQorLSAgICAgICAgICAgIHJlc3VsdCA9ICgoZG91YmxlKWEpIC0gKGRvdWJsZSli OworLSAgICAgICAgICAgIFB5RlBFX0VORF9QUk9URUNUKHJlc3VsdCkKKy0gICAgICAgICAgICBy ZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHJlc3VsdCk7CisrICAgIHJldHVybiAwOworK30KKytz dGF0aWMgdm9pZCBfX1B5eF9fQ3lGdW5jdGlvbl9kZWFsbG9jKF9fcHl4X0N5RnVuY3Rpb25PYmpl Y3QgKm0pCisreworKyAgICBpZiAoX19QeXhfQ3lGdW5jdGlvbl93ZWFrcmVmbGlzdChtKSAhPSBO VUxMKQorKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgbSk7Cisr ICAgIF9fUHl4X0N5RnVuY3Rpb25fY2xlYXIobSk7CisrICAgIFB5T2JqZWN0X0dDX0RlbChtKTsK Kyt9Cisrc3RhdGljIHZvaWQgX19QeXhfQ3lGdW5jdGlvbl9kZWFsbG9jKF9fcHl4X0N5RnVuY3Rp b25PYmplY3QgKm0pCisreworKyAgICBQeU9iamVjdF9HQ19VblRyYWNrKG0pOworKyAgICBfX1B5 eF9fQ3lGdW5jdGlvbl9kZWFsbG9jKG0pOworK30KKytzdGF0aWMgaW50IF9fUHl4X0N5RnVuY3Rp b25fdHJhdmVyc2UoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSwgdmlzaXRwcm9jIHZpc2l0LCB2 b2lkICphcmcpCisreworKyAgICBQeV9WSVNJVChtLT5mdW5jX2Nsb3N1cmUpOworKyAgICBQeV9W SVNJVChtLT5mdW5jLm1fbW9kdWxlKTsKKysgICAgUHlfVklTSVQobS0+ZnVuY19kaWN0KTsKKysg ICAgUHlfVklTSVQobS0+ZnVuY19uYW1lKTsKKysgICAgUHlfVklTSVQobS0+ZnVuY19xdWFsbmFt ZSk7CisrICAgIFB5X1ZJU0lUKG0tPmZ1bmNfZG9jKTsKKysgICAgUHlfVklTSVQobS0+ZnVuY19n bG9iYWxzKTsKKysgICAgUHlfVklTSVQobS0+ZnVuY19jb2RlKTsKKysgICAgUHlfVklTSVQobS0+ ZnVuY19jbGFzc29iaik7CisrICAgIFB5X1ZJU0lUKG0tPmRlZmF1bHRzX3R1cGxlKTsKKysgICAg UHlfVklTSVQobS0+ZGVmYXVsdHNfa3dkaWN0KTsKKysgICAgaWYgKG0tPmRlZmF1bHRzKSB7Cisr ICAgICAgICBQeU9iamVjdCAqKnB5ZGVmYXVsdHMgPSBfX1B5eF9DeUZ1bmN0aW9uX0RlZmF1bHRz KFB5T2JqZWN0ICosIG0pOworKyAgICAgICAgaW50IGk7CisrICAgICAgICBmb3IgKGkgPSAwOyBp IDwgbS0+ZGVmYXVsdHNfcHlvYmplY3RzOyBpKyspCisrICAgICAgICAgICAgUHlfVklTSVQocHlk ZWZhdWx0c1tpXSk7CisgICAgIH0KKy0gICAgcmV0dXJuIChpbnBsYWNlID8gUHlOdW1iZXJfSW5Q bGFjZVN1YnRyYWN0IDogUHlOdW1iZXJfU3VidHJhY3QpKG9wMSwgb3AyKTsKKysgICAgcmV0dXJu IDA7CisgfQorK3N0YXRpYyBQeU9iamVjdCAqX19QeXhfQ3lGdW5jdGlvbl9kZXNjcl9nZXQoUHlP YmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICp0eXBlKQorK3sKKysjaWYgUFlf TUFKT1JfVkVSU0lPTiA8IDMKKysgICAgX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSA9IChfX3B5 eF9DeUZ1bmN0aW9uT2JqZWN0ICopIGZ1bmM7CisrICAgIGlmIChtLT5mbGFncyAmIF9fUHl4X0NZ RlVOQ1RJT05fU1RBVElDTUVUSE9EKSB7CisrICAgICAgICBQeV9JTkNSRUYoZnVuYyk7CisrICAg ICAgICByZXR1cm4gZnVuYzsKKysgICAgfQorKyAgICBpZiAobS0+ZmxhZ3MgJiBfX1B5eF9DWUZV TkNUSU9OX0NMQVNTTUVUSE9EKSB7CisrICAgICAgICBpZiAodHlwZSA9PSBOVUxMKQorKyAgICAg ICAgICAgIHR5cGUgPSAoUHlPYmplY3QgKikoUHlfVFlQRShvYmopKTsKKysgICAgICAgIHJldHVy biBfX1B5eF9QeU1ldGhvZF9OZXcoZnVuYywgdHlwZSwgKFB5T2JqZWN0ICopKFB5X1RZUEUodHlw ZSkpKTsKKysgICAgfQorKyAgICBpZiAob2JqID09IFB5X05vbmUpCisrICAgICAgICBvYmogPSBO VUxMOworICNlbmRpZgorLQorLS8qIFdyaXRlVW5yYWlzYWJsZUV4Y2VwdGlvbiAqLworLXN0YXRp YyB2b2lkIF9fUHl4X1dyaXRlVW5yYWlzYWJsZShjb25zdCBjaGFyICpuYW1lLCBDWVRIT05fVU5V U0VEIGludCBjbGluZW5vLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDWVRI T05fVU5VU0VEIGludCBsaW5lbm8sIENZVEhPTl9VTlVTRUQgY29uc3QgY2hhciAqZmlsZW5hbWUs CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmdWxsX3RyYWNlYmFjaywg Q1lUSE9OX1VOVVNFRCBpbnQgbm9naWwpIHsKKy0gICAgUHlPYmplY3QgKm9sZF9leGMsICpvbGRf dmFsLCAqb2xkX3RiOworLSAgICBQeU9iamVjdCAqY3R4OworLSAgICBfX1B5eF9QeVRocmVhZFN0 YXRlX2RlY2xhcmUKKy0jaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgUHlHSUxTdGF0ZV9TVEFURSBz dGF0ZTsKKy0gICAgaWYgKG5vZ2lsKQorLSAgICAgICAgc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3Vy ZSgpOworLSNpZmRlZiBfTVNDX1ZFUgorLSAgICBlbHNlIHN0YXRlID0gKFB5R0lMU3RhdGVfU1RB VEUpLTE7CistI2VuZGlmCisrICAgIHJldHVybiBfX1B5eF9QeU1ldGhvZF9OZXcoZnVuYywgb2Jq LCB0eXBlKTsKKyt9Cisrc3RhdGljIFB5T2JqZWN0KgorK19fUHl4X0N5RnVuY3Rpb25fcmVwcihf X3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCkKKyt7CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0g MworKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxjeWZ1bmN0aW9uICVVIGF0ICVw PiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC0+ZnVuY19xdWFsbmFtZSwg KHZvaWQgKilvcCk7CisrI2Vsc2UKKysgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21Gb3JtYXQoIjxj eWZ1bmN0aW9uICVzIGF0ICVwPiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5 U3RyaW5nX0FzU3RyaW5nKG9wLT5mdW5jX3F1YWxuYW1lKSwgKHZvaWQgKilvcCk7CisgI2VuZGlm CistICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfYXNzaWduCistICAgIF9fUHl4X0VyckZldGNoKCZv bGRfZXhjLCAmb2xkX3ZhbCwgJm9sZF90Yik7CistICAgIGlmIChmdWxsX3RyYWNlYmFjaykgewor LSAgICAgICAgUHlfWElOQ1JFRihvbGRfZXhjKTsKKy0gICAgICAgIFB5X1hJTkNSRUYob2xkX3Zh bCk7CistICAgICAgICBQeV9YSU5DUkVGKG9sZF90Yik7CistICAgICAgICBfX1B5eF9FcnJSZXN0 b3JlKG9sZF9leGMsIG9sZF92YWwsIG9sZF90Yik7CistICAgICAgICBQeUVycl9QcmludEV4KDEp OworLSAgICB9CistICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLSAgICBjdHggPSBQeVN0 cmluZ19Gcm9tU3RyaW5nKG5hbWUpOworLSAgICAjZWxzZQorLSAgICBjdHggPSBQeVVuaWNvZGVf RnJvbVN0cmluZyhuYW1lKTsKKy0gICAgI2VuZGlmCistICAgIF9fUHl4X0VyclJlc3RvcmUob2xk X2V4Yywgb2xkX3ZhbCwgb2xkX3RiKTsKKy0gICAgaWYgKCFjdHgpIHsKKy0gICAgICAgIFB5RXJy X1dyaXRlVW5yYWlzYWJsZShQeV9Ob25lKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIFB5RXJy X1dyaXRlVW5yYWlzYWJsZShjdHgpOworLSAgICAgICAgUHlfREVDUkVGKGN0eCk7CisrfQorK3N0 YXRpYyBQeU9iamVjdCAqIF9fUHl4X0N5RnVuY3Rpb25fQ2FsbE1ldGhvZChQeU9iamVjdCAqZnVu YywgUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcsIFB5T2JqZWN0ICprdykgeworKyAgICBQ eUNGdW5jdGlvbk9iamVjdCogZiA9IChQeUNGdW5jdGlvbk9iamVjdCopZnVuYzsKKysgICAgUHlD RnVuY3Rpb24gbWV0aCA9IGYtPm1fbWwtPm1sX21ldGg7CisrICAgIFB5X3NzaXplX3Qgc2l6ZTsK KysgICAgc3dpdGNoIChmLT5tX21sLT5tbF9mbGFncyAmIChNRVRIX1ZBUkFSR1MgfCBNRVRIX0tF WVdPUkRTIHwgTUVUSF9OT0FSR1MgfCBNRVRIX08pKSB7CisrICAgIGNhc2UgTUVUSF9WQVJBUkdT OgorKyAgICAgICAgaWYgKGxpa2VseShrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAw KSkKKysgICAgICAgICAgICByZXR1cm4gKCptZXRoKShzZWxmLCBhcmcpOworKyAgICAgICAgYnJl YWs7CisrICAgIGNhc2UgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUzoKKysgICAgICAgIHJl dHVybiAoKihQeUNGdW5jdGlvbldpdGhLZXl3b3Jkcykodm9pZCopbWV0aCkoc2VsZiwgYXJnLCBr dyk7CisrICAgIGNhc2UgTUVUSF9OT0FSR1M6CisrICAgICAgICBpZiAobGlrZWx5KGt3ID09IE5V TEwgfHwgUHlEaWN0X1NpemUoa3cpID09IDApKSB7CisrICAgICAgICAgICAgc2l6ZSA9IFB5VHVw bGVfR0VUX1NJWkUoYXJnKTsKKysgICAgICAgICAgICBpZiAobGlrZWx5KHNpemUgPT0gMCkpCisr ICAgICAgICAgICAgICAgIHJldHVybiAoKm1ldGgpKHNlbGYsIE5VTEwpOworKyAgICAgICAgICAg IFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisrICAgICAgICAgICAgICAgICIlLjIwMHMo KSB0YWtlcyBubyBhcmd1bWVudHMgKCUiIENZVEhPTl9GT1JNQVRfU1NJWkVfVCAiZCBnaXZlbiki LAorKyAgICAgICAgICAgICAgICBmLT5tX21sLT5tbF9uYW1lLCBzaXplKTsKKysgICAgICAgICAg ICByZXR1cm4gTlVMTDsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIE1F VEhfTzoKKysgICAgICAgIGlmIChsaWtlbHkoa3cgPT0gTlVMTCB8fCBQeURpY3RfU2l6ZShrdykg PT0gMCkpIHsKKysgICAgICAgICAgICBzaXplID0gUHlUdXBsZV9HRVRfU0laRShhcmcpOworKyAg ICAgICAgICAgIGlmIChsaWtlbHkoc2l6ZSA9PSAxKSkgeworKyAgICAgICAgICAgICAgICBQeU9i amVjdCAqcmVzdWx0LCAqYXJnMDsKKysgICAgICAgICAgICAgICAgI2lmIENZVEhPTl9BU1NVTUVf U0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCisrICAgICAgICAgICAg ICAgIGFyZzAgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZywgMCk7CisrICAgICAgICAgICAgICAgICNl bHNlCisrICAgICAgICAgICAgICAgIGFyZzAgPSBQeVNlcXVlbmNlX0lURU0oYXJnLCAwKTsgaWYg KHVubGlrZWx5KCFhcmcwKSkgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgICNlbmRpZgor KyAgICAgICAgICAgICAgICByZXN1bHQgPSAoKm1ldGgpKHNlbGYsIGFyZzApOworKyAgICAgICAg ICAgICAgICAjaWYgIShDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURf Qk9SUk9XRURfUkVGUykKKysgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFyZzApOworKyAgICAg ICAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKysgICAg ICAgICAgICB9CisrICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKysg ICAgICAgICAgICAgICAgIiUuMjAwcygpIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50ICglIiBD WVRIT05fRk9STUFUX1NTSVpFX1QgImQgZ2l2ZW4pIiwKKysgICAgICAgICAgICAgICAgZi0+bV9t bC0+bWxfbmFtZSwgc2l6ZSk7CisrICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICB9 CisrICAgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICAgIFB5RXJyX1NldFN0cmlu ZyhQeUV4Y19TeXN0ZW1FcnJvciwgIkJhZCBjYWxsIGZsYWdzIGluICIKKysgICAgICAgICAgICAg ICAgICAgICAgICAiX19QeXhfQ3lGdW5jdGlvbl9DYWxsLiBNRVRIX09MREFSR1MgaXMgbm8gIgor KyAgICAgICAgICAgICAgICAgICAgICAgICJsb25nZXIgc3VwcG9ydGVkISIpOworKyAgICAgICAg cmV0dXJuIE5VTEw7CisgICAgIH0KKy0jaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgaWYgKG5vZ2ls KQorLSAgICAgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKHN0YXRlKTsKKy0jZW5kaWYKKy19CistCist LyogU3dhcEV4Y2VwdGlvbiAqLworLSNpZiBDWVRIT05fRkFTVF9USFJFQURfU1RBVEUKKy1zdGF0 aWMgQ1lUSE9OX0lOTElORSB2b2lkIF9fUHl4X19FeGNlcHRpb25Td2FwKFB5VGhyZWFkU3RhdGUg KnRzdGF0ZSwgUHlPYmplY3QgKip0eXBlLCBQeU9iamVjdCAqKnZhbHVlLCBQeU9iamVjdCAqKnRi KSB7CistICAgIFB5T2JqZWN0ICp0bXBfdHlwZSwgKnRtcF92YWx1ZSwgKnRtcF90YjsKKy0gICAg I2lmIENZVEhPTl9VU0VfRVhDX0lORk9fU1RBQ0sKKy0gICAgX1B5RXJyX1N0YWNrSXRlbSAqZXhj X2luZm8gPSB0c3RhdGUtPmV4Y19pbmZvOworLSAgICB0bXBfdHlwZSA9IGV4Y19pbmZvLT5leGNf dHlwZTsKKy0gICAgdG1wX3ZhbHVlID0gZXhjX2luZm8tPmV4Y192YWx1ZTsKKy0gICAgdG1wX3Ri ID0gZXhjX2luZm8tPmV4Y190cmFjZWJhY2s7CistICAgIGV4Y19pbmZvLT5leGNfdHlwZSA9ICp0 eXBlOworLSAgICBleGNfaW5mby0+ZXhjX3ZhbHVlID0gKnZhbHVlOworLSAgICBleGNfaW5mby0+ ZXhjX3RyYWNlYmFjayA9ICp0YjsKKy0gICAgI2Vsc2UKKy0gICAgdG1wX3R5cGUgPSB0c3RhdGUt PmV4Y190eXBlOworLSAgICB0bXBfdmFsdWUgPSB0c3RhdGUtPmV4Y192YWx1ZTsKKy0gICAgdG1w X3RiID0gdHN0YXRlLT5leGNfdHJhY2ViYWNrOworLSAgICB0c3RhdGUtPmV4Y190eXBlID0gKnR5 cGU7CistICAgIHRzdGF0ZS0+ZXhjX3ZhbHVlID0gKnZhbHVlOworLSAgICB0c3RhdGUtPmV4Y190 cmFjZWJhY2sgPSAqdGI7CistICAgICNlbmRpZgorLSAgICAqdHlwZSA9IHRtcF90eXBlOworLSAg ICAqdmFsdWUgPSB0bXBfdmFsdWU7CistICAgICp0YiA9IHRtcF90YjsKKy19CistI2Vsc2UKKy1z dGF0aWMgQ1lUSE9OX0lOTElORSB2b2lkIF9fUHl4X0V4Y2VwdGlvblN3YXAoUHlPYmplY3QgKip0 eXBlLCBQeU9iamVjdCAqKnZhbHVlLCBQeU9iamVjdCAqKnRiKSB7CistICAgIFB5T2JqZWN0ICp0 bXBfdHlwZSwgKnRtcF92YWx1ZSwgKnRtcF90YjsKKy0gICAgUHlFcnJfR2V0RXhjSW5mbygmdG1w X3R5cGUsICZ0bXBfdmFsdWUsICZ0bXBfdGIpOworLSAgICBQeUVycl9TZXRFeGNJbmZvKCp0eXBl LCAqdmFsdWUsICp0Yik7CistICAgICp0eXBlID0gdG1wX3R5cGU7CistICAgICp2YWx1ZSA9IHRt cF92YWx1ZTsKKy0gICAgKnRiID0gdG1wX3RiOworKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlw ZUVycm9yLCAiJS4yMDBzKCkgdGFrZXMgbm8ga2V5d29yZCBhcmd1bWVudHMiLAorKyAgICAgICAg ICAgICAgICAgZi0+bV9tbC0+bWxfbmFtZSk7CisrICAgIHJldHVybiBOVUxMOworIH0KKy0jZW5k aWYKKy0KKy0vKiBTZXRJdGVtSW50ICovCistc3RhdGljIGludCBfX1B5eF9TZXRJdGVtSW50X0dl bmVyaWMoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpqLCBQeU9iamVjdCAqdikgeworLSAgICBpbnQg cjsKKy0gICAgaWYgKCFqKSByZXR1cm4gLTE7CistICAgIHIgPSBQeU9iamVjdF9TZXRJdGVtKG8s IGosIHYpOworLSAgICBQeV9ERUNSRUYoaik7CistICAgIHJldHVybiByOworK3N0YXRpYyBDWVRI T05fSU5MSU5FIFB5T2JqZWN0ICpfX1B5eF9DeUZ1bmN0aW9uX0NhbGwoUHlPYmplY3QgKmZ1bmMs IFB5T2JqZWN0ICphcmcsIFB5T2JqZWN0ICprdykgeworKyAgICByZXR1cm4gX19QeXhfQ3lGdW5j dGlvbl9DYWxsTWV0aG9kKGZ1bmMsICgoUHlDRnVuY3Rpb25PYmplY3QqKWZ1bmMpLT5tX3NlbGYs IGFyZywga3cpOworIH0KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQgX19QeXhfU2V0SXRlbUlu dF9GYXN0KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGksIFB5T2JqZWN0ICp2LCBpbnQgaXNfbGlz dCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENZVEhP Tl9OQ1BfVU5VU0VEIGludCB3cmFwYXJvdW5kLCBDWVRIT05fTkNQX1VOVVNFRCBpbnQgYm91bmRz Y2hlY2spIHsKKy0jaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lE X0JPUlJPV0VEX1JFRlMgJiYgQ1lUSE9OX1VTRV9UWVBFX1NMT1RTCistICAgIGlmIChpc19saXN0 IHx8IFB5TGlzdF9DaGVja0V4YWN0KG8pKSB7CistICAgICAgICBQeV9zc2l6ZV90IG4gPSAoIXdy YXBhcm91bmQpID8gaSA6ICgobGlrZWx5KGkgPj0gMCkpID8gaSA6IGkgKyBQeUxpc3RfR0VUX1NJ WkUobykpOworLSAgICAgICAgaWYgKCghYm91bmRzY2hlY2spIHx8IGxpa2VseShfX1B5eF9pc192 YWxpZF9pbmRleChuLCBQeUxpc3RfR0VUX1NJWkUobykpKSkgeworLSAgICAgICAgICAgIFB5T2Jq ZWN0KiBvbGQgPSBQeUxpc3RfR0VUX0lURU0obywgbik7CistICAgICAgICAgICAgUHlfSU5DUkVG KHYpOworLSAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShvLCBuLCB2KTsKKy0gICAgICAgICAg ICBQeV9ERUNSRUYob2xkKTsKKy0gICAgICAgICAgICByZXR1cm4gMTsKKytzdGF0aWMgUHlPYmpl Y3QgKl9fUHl4X0N5RnVuY3Rpb25fQ2FsbEFzTWV0aG9kKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVj dCAqYXJncywgUHlPYmplY3QgKmt3KSB7CisrICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisrICAgIF9f cHl4X0N5RnVuY3Rpb25PYmplY3QgKmN5ZnVuYyA9IChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICop IGZ1bmM7CisrICAgIGlmICgoY3lmdW5jLT5mbGFncyAmIF9fUHl4X0NZRlVOQ1RJT05fQ0NMQVNT KSAmJiAhKGN5ZnVuYy0+ZmxhZ3MgJiBfX1B5eF9DWUZVTkNUSU9OX1NUQVRJQ01FVEhPRCkpIHsK KysgICAgICAgIFB5X3NzaXplX3QgYXJnYzsKKysgICAgICAgIFB5T2JqZWN0ICpuZXdfYXJnczsK KysgICAgICAgIFB5T2JqZWN0ICpzZWxmOworKyAgICAgICAgYXJnYyA9IFB5VHVwbGVfR0VUX1NJ WkUoYXJncyk7CisrICAgICAgICBuZXdfYXJncyA9IFB5VHVwbGVfR2V0U2xpY2UoYXJncywgMSwg YXJnYyk7CisrICAgICAgICBpZiAodW5saWtlbHkoIW5ld19hcmdzKSkKKysgICAgICAgICAgICBy ZXR1cm4gTlVMTDsKKysgICAgICAgIHNlbGYgPSBQeVR1cGxlX0dldEl0ZW0oYXJncywgMCk7Cisr ICAgICAgICBpZiAodW5saWtlbHkoIXNlbGYpKSB7CisrICAgICAgICAgICAgUHlfREVDUkVGKG5l d19hcmdzKTsKKysgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgIH0KKysgICAgICAg IHJlc3VsdCA9IF9fUHl4X0N5RnVuY3Rpb25fQ2FsbE1ldGhvZChmdW5jLCBzZWxmLCBuZXdfYXJn cywga3cpOworKyAgICAgICAgUHlfREVDUkVGKG5ld19hcmdzKTsKKyAgICAgfSBlbHNlIHsKKy0g ICAgICAgIFB5U2VxdWVuY2VNZXRob2RzICptID0gUHlfVFlQRShvKS0+dHBfYXNfc2VxdWVuY2U7 CistICAgICAgICBpZiAobGlrZWx5KG0gJiYgbS0+c3FfYXNzX2l0ZW0pKSB7CistICAgICAgICAg ICAgaWYgKHdyYXBhcm91bmQgJiYgdW5saWtlbHkoaSA8IDApICYmIGxpa2VseShtLT5zcV9sZW5n dGgpKSB7CistICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbCA9IG0tPnNxX2xlbmd0aChvKTsK Ky0gICAgICAgICAgICAgICAgaWYgKGxpa2VseShsID49IDApKSB7CistICAgICAgICAgICAgICAg ICAgICBpICs9IGw7CistICAgICAgICAgICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgICAg ICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCist ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworLSAgICAgICAgICAgICAgICAgICAg UHlFcnJfQ2xlYXIoKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgIH0KKy0gICAg ICAgICAgICByZXR1cm4gbS0+c3FfYXNzX2l0ZW0obywgaSwgdik7CistICAgICAgICB9CisrICAg ICAgICByZXN1bHQgPSBfX1B5eF9DeUZ1bmN0aW9uX0NhbGwoZnVuYywgYXJncywga3cpOworICAg ICB9CisrICAgIHJldHVybiByZXN1bHQ7CisrfQorK3N0YXRpYyBQeVR5cGVPYmplY3QgX19weXhf Q3lGdW5jdGlvblR5cGVfdHlwZSA9IHsKKysgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKDAsIDAp CisrICAgICJjeXRob25fZnVuY3Rpb25fb3JfbWV0aG9kIiwKKysgICAgc2l6ZW9mKF9fcHl4X0N5 RnVuY3Rpb25PYmplY3QpLAorKyAgICAwLAorKyAgICAoZGVzdHJ1Y3RvcikgX19QeXhfQ3lGdW5j dGlvbl9kZWFsbG9jLAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyNpZiBQWV9NQUpPUl9W RVJTSU9OIDwgMworKyAgICAwLAorICNlbHNlCistI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fUFlQ WQorLSAgICBpZiAoaXNfbGlzdCB8fCAoUHlTZXF1ZW5jZV9DaGVjayhvKSAmJiAhUHlEaWN0X0No ZWNrKG8pKSkKKysgICAgMCwKKysjZW5kaWYKKysgICAgKHJlcHJmdW5jKSBfX1B5eF9DeUZ1bmN0 aW9uX3JlcHIsCisrICAgIDAsCisrICAgIDAsCisrICAgIDAsCisrICAgIDAsCisrICAgIF9fUHl4 X0N5RnVuY3Rpb25fQ2FsbEFzTWV0aG9kLAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAg ICAwLAorKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MsCisrICAg IDAsCisrICAgICh0cmF2ZXJzZXByb2MpIF9fUHl4X0N5RnVuY3Rpb25fdHJhdmVyc2UsCisrICAg IChpbnF1aXJ5KSBfX1B5eF9DeUZ1bmN0aW9uX2NsZWFyLAorKyAgICAwLAorKyNpZiBQWV9WRVJT SU9OX0hFWCA8IDB4MDMwNTAwQTAKKysgICAgb2Zmc2V0b2YoX19weXhfQ3lGdW5jdGlvbk9iamVj dCwgZnVuY193ZWFrcmVmbGlzdCksCisgI2Vsc2UKKy0gICAgaWYgKGlzX2xpc3QgfHwgUHlTZXF1 ZW5jZV9DaGVjayhvKSkKKysgICAgb2Zmc2V0b2YoUHlDRnVuY3Rpb25PYmplY3QsIG1fd2Vha3Jl Zmxpc3QpLAorICNlbmRpZgorLSAgICB7CistICAgICAgICByZXR1cm4gUHlTZXF1ZW5jZV9TZXRJ dGVtKG8sIGksIHYpOworLSAgICB9CisrICAgIDAsCisrICAgIDAsCisrICAgIF9fcHl4X0N5RnVu Y3Rpb25fbWV0aG9kcywKKysgICAgX19weXhfQ3lGdW5jdGlvbl9tZW1iZXJzLAorKyAgICBfX3B5 eF9DeUZ1bmN0aW9uX2dldHNldHMsCisrICAgIDAsCisrICAgIDAsCisrICAgIF9fUHl4X0N5RnVu Y3Rpb25fZGVzY3JfZ2V0LAorKyAgICAwLAorKyAgICBvZmZzZXRvZihfX3B5eF9DeUZ1bmN0aW9u T2JqZWN0LCBmdW5jX2RpY3QpLAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAor KyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAg ICAwLAorKyAgICAwLAorKyNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCisrICAgIDAs CisgI2VuZGlmCistICAgIHJldHVybiBfX1B5eF9TZXRJdGVtSW50X0dlbmVyaWMobywgUHlJbnRf RnJvbVNzaXplX3QoaSksIHYpOworLX0KKy0KKy0vKiBGYXN0VHlwZUNoZWNrcyAqLworLSNpZiBD WVRIT05fQ09NUElMSU5HX0lOX0NQWVRIT04KKy1zdGF0aWMgaW50IF9fUHl4X0luQmFzZXMoUHlU eXBlT2JqZWN0ICphLCBQeVR5cGVPYmplY3QgKmIpIHsKKy0gICAgd2hpbGUgKGEpIHsKKy0gICAg ICAgIGEgPSBhLT50cF9iYXNlOworLSAgICAgICAgaWYgKGEgPT0gYikKKy0gICAgICAgICAgICBy ZXR1cm4gMTsKKysjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMSAmJiAoIUNZVEhPTl9D T01QSUxJTkdfSU5fUFlQWSB8fCBQWVBZX1ZFUlNJT05fTlVNID49IDB4MDcwMzA4MDApCisrICAg IDAsCisrI2VuZGlmCisrI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQgJiYgUFlfVkVS U0lPTl9IRVggPCAweDAzMDkwMDAwCisrICAgIDAsCisrI2VuZGlmCisrI2lmIENZVEhPTl9DT01Q SUxJTkdfSU5fUFlQWSAmJiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDkwMDAwCisrICAgIDAsCisr I2VuZGlmCisrfTsKKytzdGF0aWMgaW50IF9fcHl4X0N5RnVuY3Rpb25faW5pdCh2b2lkKSB7Cisr ICAgIF9fcHl4X0N5RnVuY3Rpb25UeXBlID0gX19QeXhfRmV0Y2hDb21tb25UeXBlKCZfX3B5eF9D eUZ1bmN0aW9uVHlwZV90eXBlKTsKKysgICAgaWYgKHVubGlrZWx5KF9fcHl4X0N5RnVuY3Rpb25U eXBlID09IE5VTEwpKSB7CisrICAgICAgICByZXR1cm4gLTE7CisgICAgIH0KKy0gICAgcmV0dXJu IGIgPT0gJlB5QmFzZU9iamVjdF9UeXBlOworKyAgICByZXR1cm4gMDsKKyB9Cistc3RhdGljIENZ VEhPTl9JTkxJTkUgaW50IF9fUHl4X0lzU3VidHlwZShQeVR5cGVPYmplY3QgKmEsIFB5VHlwZU9i amVjdCAqYikgeworLSAgICBQeU9iamVjdCAqbXJvOworLSAgICBpZiAoYSA9PSBiKSByZXR1cm4g MTsKKy0gICAgbXJvID0gYS0+dHBfbXJvOworLSAgICBpZiAobGlrZWx5KG1ybykpIHsKKy0gICAg ICAgIFB5X3NzaXplX3QgaSwgbjsKKy0gICAgICAgIG4gPSBQeVR1cGxlX0dFVF9TSVpFKG1ybyk7 CistICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CistICAgICAgICAgICAgaWYgKFB5 VHVwbGVfR0VUX0lURU0obXJvLCBpKSA9PSAoUHlPYmplY3QgKiliKQorLSAgICAgICAgICAgICAg ICByZXR1cm4gMTsKKy0gICAgICAgIH0KKy0gICAgICAgIHJldHVybiAwOworK3N0YXRpYyBDWVRI T05fSU5MSU5FIHZvaWQgKl9fUHl4X0N5RnVuY3Rpb25fSW5pdERlZmF1bHRzKFB5T2JqZWN0ICpm dW5jLCBzaXplX3Qgc2l6ZSwgaW50IHB5b2JqZWN0cykgeworKyAgICBfX3B5eF9DeUZ1bmN0aW9u T2JqZWN0ICptID0gKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKikgZnVuYzsKKysgICAgbS0+ZGVm YXVsdHMgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZSk7CisrICAgIGlmICh1bmxpa2VseSghbS0+ZGVm YXVsdHMpKQorKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisrICAgIG1lbXNldCht LT5kZWZhdWx0cywgMCwgc2l6ZSk7CisrICAgIG0tPmRlZmF1bHRzX3B5b2JqZWN0cyA9IHB5b2Jq ZWN0czsKKysgICAgbS0+ZGVmYXVsdHNfc2l6ZSA9IHNpemU7CisrICAgIHJldHVybiBtLT5kZWZh dWx0czsKKyt9Cisrc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9DeUZ1bmN0aW9uX1Nl dERlZmF1bHRzVHVwbGUoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICp0dXBsZSkgeworKyAgICBf X3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICptID0gKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKikgZnVu YzsKKysgICAgbS0+ZGVmYXVsdHNfdHVwbGUgPSB0dXBsZTsKKysgICAgUHlfSU5DUkVGKHR1cGxl KTsKKyt9Cisrc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9DeUZ1bmN0aW9uX1NldERl ZmF1bHRzS3dEaWN0KFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqZGljdCkgeworKyAgICBfX3B5 eF9DeUZ1bmN0aW9uT2JqZWN0ICptID0gKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKikgZnVuYzsK KysgICAgbS0+ZGVmYXVsdHNfa3dkaWN0ID0gZGljdDsKKysgICAgUHlfSU5DUkVGKGRpY3QpOwor K30KKytzdGF0aWMgQ1lUSE9OX0lOTElORSB2b2lkIF9fUHl4X0N5RnVuY3Rpb25fU2V0QW5ub3Rh dGlvbnNEaWN0KFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqZGljdCkgeworKyAgICBfX3B5eF9D eUZ1bmN0aW9uT2JqZWN0ICptID0gKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKikgZnVuYzsKKysg ICAgbS0+ZnVuY19hbm5vdGF0aW9ucyA9IGRpY3Q7CisrICAgIFB5X0lOQ1JFRihkaWN0KTsKKyt9 CisrCisrLyogQ3l0aG9uRnVuY3Rpb24gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fUHl4X0N5RnVu Y3Rpb25fTmV3KFB5TWV0aG9kRGVmICptbCwgaW50IGZsYWdzLCBQeU9iamVjdCogcXVhbG5hbWUs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqY2xvc3Vy ZSwgUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QqIGdsb2JhbHMsIFB5T2JqZWN0KiBjb2RlKSB7 CisrICAgIFB5T2JqZWN0ICpvcCA9IF9fUHl4X0N5RnVuY3Rpb25fSW5pdCgKKysgICAgICAgIFB5 T2JqZWN0X0dDX05ldyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0LCBfX3B5eF9DeUZ1bmN0aW9uVHlw ZSksCisrICAgICAgICBtbCwgZmxhZ3MsIHF1YWxuYW1lLCBjbG9zdXJlLCBtb2R1bGUsIGdsb2Jh bHMsIGNvZGUKKysgICAgKTsKKysgICAgaWYgKGxpa2VseShvcCkpIHsKKysgICAgICAgIFB5T2Jq ZWN0X0dDX1RyYWNrKG9wKTsKKyAgICAgfQorLSAgICByZXR1cm4gX19QeXhfSW5CYXNlcyhhLCBi KTsKKysgICAgcmV0dXJuIG9wOworIH0KKy0jaWYgUFlfTUFKT1JfVkVSU0lPTiA9PSAyCistc3Rh dGljIGludCBfX1B5eF9pbm5lcl9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMyKFB5T2JqZWN0 ICplcnIsIFB5T2JqZWN0KiBleGNfdHlwZTEsIFB5T2JqZWN0KiBleGNfdHlwZTIpIHsKKy0gICAg UHlPYmplY3QgKmV4Y2VwdGlvbiwgKnZhbHVlLCAqdGI7CistICAgIGludCByZXM7CistICAgIF9f UHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQorLSAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2ln bgorLSAgICBfX1B5eF9FcnJGZXRjaCgmZXhjZXB0aW9uLCAmdmFsdWUsICZ0Yik7CistICAgIHJl cyA9IGV4Y190eXBlMSA/IFB5T2JqZWN0X0lzU3ViY2xhc3MoZXJyLCBleGNfdHlwZTEpIDogMDsK Ky0gICAgaWYgKHVubGlrZWx5KHJlcyA9PSAtMSkpIHsKKy0gICAgICAgIFB5RXJyX1dyaXRlVW5y YWlzYWJsZShlcnIpOworLSAgICAgICAgcmVzID0gMDsKKysKKysvKiBSYWlzZUFyZ1R1cGxlSW52 YWxpZCAqLworK3N0YXRpYyB2b2lkIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKAorKyAgICBj b25zdCBjaGFyKiBmdW5jX25hbWUsCisrICAgIGludCBleGFjdCwKKysgICAgUHlfc3NpemVfdCBu dW1fbWluLAorKyAgICBQeV9zc2l6ZV90IG51bV9tYXgsCisrICAgIFB5X3NzaXplX3QgbnVtX2Zv dW5kKQorK3sKKysgICAgUHlfc3NpemVfdCBudW1fZXhwZWN0ZWQ7CisrICAgIGNvbnN0IGNoYXIg Km1vcmVfb3JfbGVzczsKKysgICAgaWYgKG51bV9mb3VuZCA8IG51bV9taW4pIHsKKysgICAgICAg IG51bV9leHBlY3RlZCA9IG51bV9taW47CisrICAgICAgICBtb3JlX29yX2xlc3MgPSAiYXQgbGVh c3QiOworKyAgICB9IGVsc2UgeworKyAgICAgICAgbnVtX2V4cGVjdGVkID0gbnVtX21heDsKKysg ICAgICAgIG1vcmVfb3JfbGVzcyA9ICJhdCBtb3N0IjsKKyAgICAgfQorLSAgICBpZiAoIXJlcykg eworLSAgICAgICAgcmVzID0gUHlPYmplY3RfSXNTdWJjbGFzcyhlcnIsIGV4Y190eXBlMik7Cist ICAgICAgICBpZiAodW5saWtlbHkocmVzID09IC0xKSkgeworLSAgICAgICAgICAgIFB5RXJyX1dy aXRlVW5yYWlzYWJsZShlcnIpOworLSAgICAgICAgICAgIHJlcyA9IDA7CistICAgICAgICB9Cisr ICAgIGlmIChleGFjdCkgeworKyAgICAgICAgbW9yZV9vcl9sZXNzID0gImV4YWN0bHkiOworICAg ICB9CistICAgIF9fUHl4X0VyclJlc3RvcmUoZXhjZXB0aW9uLCB2YWx1ZSwgdGIpOworLSAgICBy ZXR1cm4gcmVzOworKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorKyAgICAgICAg ICAgICAgICAgIiUuMjAwcygpIHRha2VzICUuOHMgJSIgQ1lUSE9OX0ZPUk1BVF9TU0laRV9UICJk IHBvc2l0aW9uYWwgYXJndW1lbnQlLjFzICglIiBDWVRIT05fRk9STUFUX1NTSVpFX1QgImQgZ2l2 ZW4pIiwKKysgICAgICAgICAgICAgICAgIGZ1bmNfbmFtZSwgbW9yZV9vcl9sZXNzLCBudW1fZXhw ZWN0ZWQsCisrICAgICAgICAgICAgICAgICAobnVtX2V4cGVjdGVkID09IDEpID8gIiIgOiAicyIs IG51bV9mb3VuZCk7CisgfQorLSNlbHNlCistc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4 X2lubmVyX1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlczIoUHlPYmplY3QgKmVyciwgUHlPYmpl Y3QqIGV4Y190eXBlMSwgUHlPYmplY3QgKmV4Y190eXBlMikgeworLSAgICBpbnQgcmVzID0gZXhj X3R5cGUxID8gX19QeXhfSXNTdWJ0eXBlKChQeVR5cGVPYmplY3QqKWVyciwgKFB5VHlwZU9iamVj dCopZXhjX3R5cGUxKSA6IDA7CistICAgIGlmICghcmVzKSB7CistICAgICAgICByZXMgPSBfX1B5 eF9Jc1N1YnR5cGUoKFB5VHlwZU9iamVjdCopZXJyLCAoUHlUeXBlT2JqZWN0KilleGNfdHlwZTIp OworLSAgICB9CistICAgIHJldHVybiByZXM7CisrCisrLyogUmFpc2VEb3VibGVLZXl3b3JkcyAq LworK3N0YXRpYyB2b2lkIF9fUHl4X1JhaXNlRG91YmxlS2V5d29yZHNFcnJvcigKKysgICAgY29u c3QgY2hhciogZnVuY19uYW1lLAorKyAgICBQeU9iamVjdCoga3dfbmFtZSkKKyt7CisrICAgIFB5 RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisrICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lP TiA+PSAzCisrICAgICAgICAiJXMoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFy Z3VtZW50ICclVSciLCBmdW5jX25hbWUsIGt3X25hbWUpOworKyAgICAgICAgI2Vsc2UKKysgICAg ICAgICIlcygpIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgJyVzJyIs IGZ1bmNfbmFtZSwKKysgICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nKGt3X25hbWUpKTsKKysgICAg ICAgICNlbmRpZgorIH0KKy0jZW5kaWYKKy1zdGF0aWMgaW50IF9fUHl4X1B5RXJyX0dpdmVuRXhj ZXB0aW9uTWF0Y2hlc1R1cGxlKFB5T2JqZWN0ICpleGNfdHlwZSwgUHlPYmplY3QgKnR1cGxlKSB7 CistICAgIFB5X3NzaXplX3QgaSwgbjsKKy0gICAgYXNzZXJ0KFB5RXhjZXB0aW9uQ2xhc3NfQ2hl Y2soZXhjX3R5cGUpKTsKKy0gICAgbiA9IFB5VHVwbGVfR0VUX1NJWkUodHVwbGUpOworLSNpZiBQ WV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgZm9yIChpPTA7IGk8bjsgaSsrKSB7CistICAgICAg ICBpZiAoZXhjX3R5cGUgPT0gUHlUdXBsZV9HRVRfSVRFTSh0dXBsZSwgaSkpIHJldHVybiAxOwor LSAgICB9CistI2VuZGlmCistICAgIGZvciAoaT0wOyBpPG47IGkrKykgeworLSAgICAgICAgUHlP YmplY3QgKnQgPSBQeVR1cGxlX0dFVF9JVEVNKHR1cGxlLCBpKTsKKysKKysvKiBQYXJzZUtleXdv cmRzICovCisrc3RhdGljIGludCBfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoCisrICAgIFB5 T2JqZWN0ICprd2RzLAorKyAgICBQeU9iamVjdCAqKmFyZ25hbWVzW10sCisrICAgIFB5T2JqZWN0 ICprd2RzMiwKKysgICAgUHlPYmplY3QgKnZhbHVlc1tdLAorKyAgICBQeV9zc2l6ZV90IG51bV9w b3NfYXJncywKKysgICAgY29uc3QgY2hhciogZnVuY3Rpb25fbmFtZSkKKyt7CisrICAgIFB5T2Jq ZWN0ICprZXkgPSAwLCAqdmFsdWUgPSAwOworKyAgICBQeV9zc2l6ZV90IHBvcyA9IDA7CisrICAg IFB5T2JqZWN0KioqIG5hbWU7CisrICAgIFB5T2JqZWN0KioqIGZpcnN0X2t3X2FyZyA9IGFyZ25h bWVzICsgbnVtX3Bvc19hcmdzOworKyAgICB3aGlsZSAoUHlEaWN0X05leHQoa3dkcywgJnBvcywg JmtleSwgJnZhbHVlKSkgeworKyAgICAgICAgbmFtZSA9IGZpcnN0X2t3X2FyZzsKKysgICAgICAg IHdoaWxlICgqbmFtZSAmJiAoKipuYW1lICE9IGtleSkpIG5hbWUrKzsKKysgICAgICAgIGlmICgq bmFtZSkgeworKyAgICAgICAgICAgIHZhbHVlc1tuYW1lLWFyZ25hbWVzXSA9IHZhbHVlOworKyAg ICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAgICAgICAgbmFtZSA9IGZpcnN0X2t3 X2FyZzsKKyAgICAgICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLSAgICAgICAgaWYgKGxp a2VseShleGNfdHlwZSA9PSB0KSkgcmV0dXJuIDE7CisrICAgICAgICBpZiAobGlrZWx5KFB5U3Ry aW5nX0NoZWNrKGtleSkpKSB7CisrICAgICAgICAgICAgd2hpbGUgKCpuYW1lKSB7CisrICAgICAg ICAgICAgICAgIGlmICgoQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZIHx8IFB5U3RyaW5nX0dFVF9T SVpFKCoqbmFtZSkgPT0gUHlTdHJpbmdfR0VUX1NJWkUoa2V5KSkKKysgICAgICAgICAgICAgICAg ICAgICAgICAmJiBfUHlTdHJpbmdfRXEoKipuYW1lLCBrZXkpKSB7CisrICAgICAgICAgICAgICAg ICAgICB2YWx1ZXNbbmFtZS1hcmduYW1lc10gPSB2YWx1ZTsKKysgICAgICAgICAgICAgICAgICAg IGJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIG5hbWUrKzsKKysg ICAgICAgICAgICB9CisrICAgICAgICAgICAgaWYgKCpuYW1lKSBjb250aW51ZTsKKysgICAgICAg ICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgUHlPYmplY3QqKiogYXJnbmFtZSA9IGFyZ25h bWVzOworKyAgICAgICAgICAgICAgICB3aGlsZSAoYXJnbmFtZSAhPSBmaXJzdF9rd19hcmcpIHsK KysgICAgICAgICAgICAgICAgICAgIGlmICgoKiphcmduYW1lID09IGtleSkgfHwgKAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZIHx8IFB5U3Ry aW5nX0dFVF9TSVpFKCoqYXJnbmFtZSkgPT0gUHlTdHJpbmdfR0VUX1NJWkUoa2V5KSkKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9QeVN0cmluZ19FcSgqKmFyZ25hbWUsIGtleSkp KSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgZ290byBhcmdfcGFzc2VkX3R3aWNlOworKyAg ICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgYXJnbmFtZSsrOworKyAg ICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgfSBlbHNlCisgICAgICAg ICAjZW5kaWYKKy0gICAgICAgIGlmIChsaWtlbHkoUHlFeGNlcHRpb25DbGFzc19DaGVjayh0KSkp IHsKKy0gICAgICAgICAgICBpZiAoX19QeXhfaW5uZXJfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRj aGVzMihleGNfdHlwZSwgTlVMTCwgdCkpIHJldHVybiAxOworKyAgICAgICAgaWYgKGxpa2VseShQ eVVuaWNvZGVfQ2hlY2soa2V5KSkpIHsKKysgICAgICAgICAgICB3aGlsZSAoKm5hbWUpIHsKKysg ICAgICAgICAgICAgICAgaW50IGNtcCA9ICgqKm5hbWUgPT0ga2V5KSA/IDAgOgorKyAgICAgICAg ICAgICAgICAjaWYgIUNZVEhPTl9DT01QSUxJTkdfSU5fUFlQWSAmJiBQWV9NQUpPUl9WRVJTSU9O ID49IDMKKysgICAgICAgICAgICAgICAgICAgIChfX1B5eF9QeVVuaWNvZGVfR0VUX0xFTkdUSCgq Km5hbWUpICE9IF9fUHl4X1B5VW5pY29kZV9HRVRfTEVOR1RIKGtleSkpID8gMSA6CisrICAgICAg ICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmUo KipuYW1lLCBrZXkpOworKyAgICAgICAgICAgICAgICBpZiAoY21wIDwgMCAmJiB1bmxpa2VseShQ eUVycl9PY2N1cnJlZCgpKSkgZ290byBiYWQ7CisrICAgICAgICAgICAgICAgIGlmIChjbXAgPT0g MCkgeworKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzW25hbWUtYXJnbmFtZXNdID0gdmFsdWU7 CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgfQorKyAgICAg ICAgICAgICAgICBuYW1lKys7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGlmICgqbmFt ZSkgY29udGludWU7CisrICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgIFB5T2Jq ZWN0KioqIGFyZ25hbWUgPSBhcmduYW1lczsKKysgICAgICAgICAgICAgICAgd2hpbGUgKGFyZ25h bWUgIT0gZmlyc3Rfa3dfYXJnKSB7CisrICAgICAgICAgICAgICAgICAgICBpbnQgY21wID0gKCoq YXJnbmFtZSA9PSBrZXkpID8gMCA6CisrICAgICAgICAgICAgICAgICAgICAjaWYgIUNZVEhPTl9D T01QSUxJTkdfSU5fUFlQWSAmJiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgICAgICAgICAgICAg ICAgICAgICAgICAoX19QeXhfUHlVbmljb2RlX0dFVF9MRU5HVEgoKiphcmduYW1lKSAhPSBfX1B5 eF9QeVVuaWNvZGVfR0VUX0xFTkdUSChrZXkpKSA/IDEgOgorKyAgICAgICAgICAgICAgICAgICAg I2VuZGlmCisrICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmUoKiphcmdu YW1lLCBrZXkpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKGNtcCA8IDAgJiYgdW5saWtlbHko UHlFcnJfT2NjdXJyZWQoKSkpIGdvdG8gYmFkOworKyAgICAgICAgICAgICAgICAgICAgaWYgKGNt cCA9PSAwKSBnb3RvIGFyZ19wYXNzZWRfdHdpY2U7CisrICAgICAgICAgICAgICAgICAgICBhcmdu YW1lKys7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICB9IGVs c2UKKysgICAgICAgICAgICBnb3RvIGludmFsaWRfa2V5d29yZF90eXBlOworKyAgICAgICAgaWYg KGt3ZHMyKSB7CisrICAgICAgICAgICAgaWYgKHVubGlrZWx5KFB5RGljdF9TZXRJdGVtKGt3ZHMy LCBrZXksIHZhbHVlKSkpIGdvdG8gYmFkOworICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAg ICBnb3RvIGludmFsaWRfa2V5d29yZDsKKyAgICAgICAgIH0KKyAgICAgfQorICAgICByZXR1cm4g MDsKKythcmdfcGFzc2VkX3R3aWNlOgorKyAgICBfX1B5eF9SYWlzZURvdWJsZUtleXdvcmRzRXJy b3IoZnVuY3Rpb25fbmFtZSwga2V5KTsKKysgICAgZ290byBiYWQ7CisraW52YWxpZF9rZXl3b3Jk X3R5cGU6CisrICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisrICAgICAgICAiJS4y MDBzKCkga2V5d29yZHMgbXVzdCBiZSBzdHJpbmdzIiwgZnVuY3Rpb25fbmFtZSk7CisrICAgIGdv dG8gYmFkOworK2ludmFsaWRfa2V5d29yZDoKKysgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVF cnJvciwKKysgICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAgICAgICAiJS4yMDBzKCkg Z290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudCAnJS4yMDBzJyIsCisrICAgICAgICBm dW5jdGlvbl9uYW1lLCBQeVN0cmluZ19Bc1N0cmluZyhrZXkpKTsKKysgICAgI2Vsc2UKKysgICAg ICAgICIlcygpIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnQgJyVVJyIsCisrICAg ICAgICBmdW5jdGlvbl9uYW1lLCBrZXkpOworKyAgICAjZW5kaWYKKytiYWQ6CisrICAgIHJldHVy biAtMTsKKyB9Cistc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4X1B5RXJyX0dpdmVuRXhj ZXB0aW9uTWF0Y2hlcyhQeU9iamVjdCAqZXJyLCBQeU9iamVjdCogZXhjX3R5cGUpIHsKKy0gICAg aWYgKGxpa2VseShlcnIgPT0gZXhjX3R5cGUpKSByZXR1cm4gMTsKKy0gICAgaWYgKGxpa2VseShQ eUV4Y2VwdGlvbkNsYXNzX0NoZWNrKGVycikpKSB7CistICAgICAgICBpZiAobGlrZWx5KFB5RXhj ZXB0aW9uQ2xhc3NfQ2hlY2soZXhjX3R5cGUpKSkgeworLSAgICAgICAgICAgIHJldHVybiBfX1B5 eF9pbm5lcl9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMyKGVyciwgTlVMTCwgZXhjX3R5cGUp OworLSAgICAgICAgfSBlbHNlIGlmIChsaWtlbHkoUHlUdXBsZV9DaGVjayhleGNfdHlwZSkpKSB7 CistICAgICAgICAgICAgcmV0dXJuIF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlc1R1 cGxlKGVyciwgZXhjX3R5cGUpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgIH0KKy0gICAg fQorLSAgICByZXR1cm4gUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGVyciwgZXhjX3R5cGUp OworKworKy8qIFB5T2JqZWN0U2V0QXR0clN0ciAqLworKyNpZiBDWVRIT05fVVNFX1RZUEVfU0xP VFMKKytzdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQgX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihQ eU9iamVjdCogb2JqLCBQeU9iamVjdCogYXR0cl9uYW1lLCBQeU9iamVjdCogdmFsdWUpIHsKKysg ICAgUHlUeXBlT2JqZWN0KiB0cCA9IFB5X1RZUEUob2JqKTsKKysgICAgaWYgKGxpa2VseSh0cC0+ dHBfc2V0YXR0cm8pKQorKyAgICAgICAgcmV0dXJuIHRwLT50cF9zZXRhdHRybyhvYmosIGF0dHJf bmFtZSwgdmFsdWUpOworKyNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworKyAgICBpZiAobGlrZWx5 KHRwLT50cF9zZXRhdHRyKSkKKysgICAgICAgIHJldHVybiB0cC0+dHBfc2V0YXR0cihvYmosIFB5 U3RyaW5nX0FTX1NUUklORyhhdHRyX25hbWUpLCB2YWx1ZSk7CisrI2VuZGlmCisrICAgIHJldHVy biBQeU9iamVjdF9TZXRBdHRyKG9iaiwgYXR0cl9uYW1lLCB2YWx1ZSk7CisgfQorLXN0YXRpYyBD WVRIT05fSU5MSU5FIGludCBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMyKFB5T2Jq ZWN0ICplcnIsIFB5T2JqZWN0ICpleGNfdHlwZTEsIFB5T2JqZWN0ICpleGNfdHlwZTIpIHsKKy0g ICAgYXNzZXJ0KFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2soZXhjX3R5cGUxKSk7CistICAgIGFzc2Vy dChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKGV4Y190eXBlMikpOworLSAgICBpZiAobGlrZWx5KGVy ciA9PSBleGNfdHlwZTEgfHwgZXJyID09IGV4Y190eXBlMikpIHJldHVybiAxOworLSAgICBpZiAo bGlrZWx5KFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2soZXJyKSkpIHsKKy0gICAgICAgIHJldHVybiBf X1B5eF9pbm5lcl9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMyKGVyciwgZXhjX3R5cGUxLCBl eGNfdHlwZTIpOworKyNlbmRpZgorKworKy8qIFB5SW50Qmlub3AgKi8KKysjaWYgIUNZVEhPTl9D T01QSUxJTkdfSU5fUFlQWQorK3N0YXRpYyBQeU9iamVjdCogX19QeXhfUHlJbnRfQWRkT2JqQyhQ eU9iamVjdCAqb3AxLCBQeU9iamVjdCAqb3AyLCBDWVRIT05fVU5VU0VEIGxvbmcgaW50dmFsLCBp bnQgaW5wbGFjZSwgaW50IHplcm9kaXZpc2lvbl9jaGVjaykgeworKyAgICAodm9pZClpbnBsYWNl OworKyAgICAodm9pZCl6ZXJvZGl2aXNpb25fY2hlY2s7CisrICAgICNpZiBQWV9NQUpPUl9WRVJT SU9OIDwgMworKyAgICBpZiAobGlrZWx5KFB5SW50X0NoZWNrRXhhY3Qob3AxKSkpIHsKKysgICAg ICAgIGNvbnN0IGxvbmcgYiA9IGludHZhbDsKKysgICAgICAgIGxvbmcgeDsKKysgICAgICAgIGxv bmcgYSA9IFB5SW50X0FTX0xPTkcob3AxKTsKKysgICAgICAgICAgICB4ID0gKGxvbmcpKCh1bnNp Z25lZCBsb25nKWEgKyBiKTsKKysgICAgICAgICAgICBpZiAobGlrZWx5KCh4XmEpID49IDAgfHwg KHheYikgPj0gMCkpCisrICAgICAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyh4KTsK KysgICAgICAgICAgICByZXR1cm4gUHlMb25nX1R5cGUudHBfYXNfbnVtYmVyLT5uYl9hZGQob3Ax LCBvcDIpOworICAgICB9CistICAgIHJldHVybiAoUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVz KGVyciwgZXhjX3R5cGUxKSB8fCBQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoZXJyLCBleGNf dHlwZTIpKTsKKy19CisrICAgICNlbmRpZgorKyAgICAjaWYgQ1lUSE9OX1VTRV9QWUxPTkdfSU5U RVJOQUxTCisrICAgIGlmIChsaWtlbHkoUHlMb25nX0NoZWNrRXhhY3Qob3AxKSkpIHsKKysgICAg ICAgIGNvbnN0IGxvbmcgYiA9IGludHZhbDsKKysgICAgICAgIGxvbmcgYSwgeDsKKysjaWZkZWYg SEFWRV9MT05HX0xPTkcKKysgICAgICAgIGNvbnN0IFBZX0xPTkdfTE9ORyBsbGIgPSBpbnR2YWw7 CisrICAgICAgICBQWV9MT05HX0xPTkcgbGxhLCBsbHg7CisrI2VuZGlmCisrICAgICAgICBjb25z dCBkaWdpdCogZGlnaXRzID0gKChQeUxvbmdPYmplY3QqKW9wMSktPm9iX2RpZ2l0OworKyAgICAg ICAgY29uc3QgUHlfc3NpemVfdCBzaXplID0gUHlfU0laRShvcDEpOworKyAgICAgICAgaWYgKGxp a2VseShfX1B5eF9zc3RfYWJzKHNpemUpIDw9IDEpKSB7CisrICAgICAgICAgICAgYSA9IGxpa2Vs eShzaXplKSA/IGRpZ2l0c1swXSA6IDA7CisrICAgICAgICAgICAgaWYgKHNpemUgPT0gLTEpIGEg PSAtYTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgc3dpdGNoIChzaXplKSB7Cisr ICAgICAgICAgICAgICAgIGNhc2UgLTI6CisrICAgICAgICAgICAgICAgICAgICBpZiAoOCAqIHNp emVvZihsb25nKSAtIDEgPiAyICogUHlMb25nX1NISUZUKSB7CisrICAgICAgICAgICAgICAgICAg ICAgICAgYSA9IC0obG9uZykgKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwgUHlMb25n X1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkpOworKyAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gMiAqIFB5TG9uZ19T SElGVCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGxsYSA9IC0oUFlfTE9OR19MT05HKSAo KCgoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAo dW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1swXSkpOworKyAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gbG9uZ19sb25nOworKyNlbmRpZgorKyAgICAgICAgICAgICAgICAgICAgfQorKyAg ICAgICAgICAgICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgICAgICAgICBj YXNlIDI6CisrICAgICAgICAgICAgICAgICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAtIDEgPiAy ICogUHlMb25nX1NISUZUKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChsb25nKSAo KCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVk IGxvbmcpZGlnaXRzWzBdKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrI2lm ZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBz aXplb2YoUFlfTE9OR19MT05HKSAtIDEgPiAyICogUHlMb25nX1NISUZUKSB7CisrICAgICAgICAg ICAgICAgICAgICAgICAgbGxhID0gKFBZX0xPTkdfTE9ORykgKCgoKCh1bnNpZ25lZCBQWV9MT05H X0xPTkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9O RylkaWdpdHNbMF0pKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGxvbmdfbG9uZzsK KysjZW5kaWYKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIENZ VEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgICAgICAgICAgY2FzZSAtMzoKKysgICAgICAgICAg ICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+IDMgKiBQeUxvbmdfU0hJRlQpIHsK KysgICAgICAgICAgICAgICAgICAgICAgICBhID0gLShsb25nKSAoKCgoKCgodW5zaWduZWQgbG9u ZylkaWdpdHNbMl0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMV0p IDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKKysgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0gMSA+IDMg KiBQeUxvbmdfU0hJRlQpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAtKFBZX0xP TkdfTE9ORykgKCgoKCgoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMl0pIDw8IFB5TG9u Z19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NI SUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7CisrICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBsb25nX2xvbmc7CisrI2VuZGlmCisrICAgICAgICAgICAgICAgICAg ICB9CisrICAgICAgICAgICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICAg ICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcp IC0gMSA+IDMgKiBQeUxvbmdfU0hJRlQpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBhID0g KGxvbmcpICgoKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8 ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBs b25nKWRpZ2l0c1swXSkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyNpZmRl ZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICg4ICogc2l6 ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gMyAqIFB5TG9uZ19TSElGVCkgeworKyAgICAgICAgICAg ICAgICAgICAgICAgIGxsYSA9IChQWV9MT05HX0xPTkcpICgoKCgoKCh1bnNpZ25lZCBQWV9MT05H X0xPTkcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9O RylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRp Z2l0c1swXSkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOworKyNl bmRpZgorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOworKyAgICAgICAgICAgICAgICBjYXNlIC00OgorKyAgICAgICAgICAgICAg ICAgICAgaWYgKDggKiBzaXplb2YobG9uZykgLSAxID4gNCAqIFB5TG9uZ19TSElGVCkgeworKyAg ICAgICAgICAgICAgICAgICAgICAgIGEgPSAtKGxvbmcpICgoKCgoKCgoKHVuc2lnbmVkIGxvbmcp ZGlnaXRzWzNdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8 PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJ RlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzBdKSk7CisrICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKDggKiBzaXplb2YoUFlfTE9OR19MT05HKSAtIDEgPiA0ICogUHlMb25nX1NISUZU KSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgbGxhID0gLShQWV9MT05HX0xPTkcpICgoKCgo KCgoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbM10pIDw8IFB5TG9uZ19TSElGVCkgfCAo dW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNp Z25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVk IFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IGxvbmdfbG9uZzsKKyAjZW5kaWYKKy0KKy0vKiBFeHRUeXBlVGVzdCAqLworLXN0YXRpYyBDWVRI T05fSU5MSU5FIGludCBfX1B5eF9UeXBlVGVzdChQeU9iamVjdCAqb2JqLCBQeVR5cGVPYmplY3Qg KnR5cGUpIHsKKy0gICAgaWYgKHVubGlrZWx5KCF0eXBlKSkgeworLSAgICAgICAgUHlFcnJfU2V0 U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiTWlzc2luZyB0eXBlIG9iamVjdCIpOworLSAgICAg ICAgcmV0dXJuIDA7CistICAgIH0KKy0gICAgaWYgKGxpa2VseShfX1B5eF9UeXBlQ2hlY2sob2Jq LCB0eXBlKSkpCistICAgICAgICByZXR1cm4gMTsKKy0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5 cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0ICUuMjAwcyB0byAlLjIwMHMiLAorLSAgICAgICAgICAg ICAgICAgUHlfVFlQRShvYmopLT50cF9uYW1lLCB0eXBlLT50cF9uYW1lKTsKKy0gICAgcmV0dXJu IDA7CistfQorLQorLS8qIERpY3RHZXRJdGVtICovCistI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0g MyAmJiAhQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZCistc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9Q eURpY3RfR2V0SXRlbShQeU9iamVjdCAqZCwgUHlPYmplY3QqIGtleSkgeworLSAgICBQeU9iamVj dCAqdmFsdWU7CistICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoZCwga2V5KTsK Ky0gICAgaWYgKHVubGlrZWx5KCF2YWx1ZSkpIHsKKy0gICAgICAgIGlmICghUHlFcnJfT2NjdXJy ZWQoKSkgeworLSAgICAgICAgICAgIGlmICh1bmxpa2VseShQeVR1cGxlX0NoZWNrKGtleSkpKSB7 CistICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBhcmdzID0gUHlUdXBsZV9QYWNrKDEsIGtleSk7 CistICAgICAgICAgICAgICAgIGlmIChsaWtlbHkoYXJncykpIHsKKy0gICAgICAgICAgICAgICAg ICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwgYXJncyk7CistICAgICAgICAgICAg ICAgICAgICBQeV9ERUNSRUYoYXJncyk7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICB9IGVsc2UgeworLSAgICAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJy b3IsIGtleSk7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAg ICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+IDQgKiBQeUxvbmdfU0hJRlQpIHsK KysgICAgICAgICAgICAgICAgICAgICAgICBhID0gKGxvbmcpICgoKCgoKCgoKHVuc2lnbmVkIGxv bmcpZGlnaXRzWzNdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJd KSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdf U0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzBdKSk7CisrICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKDggKiBzaXplb2YoUFlfTE9OR19MT05HKSAtIDEgPiA0ICogUHlMb25nX1NI SUZUKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgbGxhID0gKFBZX0xPTkdfTE9ORykgKCgo KCgoKCgodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8 ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVu c2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWdu ZWQgUFlfTE9OR19MT05HKWRpZ2l0c1swXSkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gbG9uZ19sb25nOworKyNlbmRpZgorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAg ICAgICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgICAgICAgICBkZWZhdWx0 OiByZXR1cm4gUHlMb25nX1R5cGUudHBfYXNfbnVtYmVyLT5uYl9hZGQob3AxLCBvcDIpOworICAg ICAgICAgICAgIH0KKyAgICAgICAgIH0KKy0gICAgICAgIHJldHVybiBOVUxMOworLSAgICB9Cist ICAgIFB5X0lOQ1JFRih2YWx1ZSk7CistICAgIHJldHVybiB2YWx1ZTsKKy19CisrICAgICAgICAg ICAgICAgIHggPSBhICsgYjsKKysgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHgp OworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgbG9uZ19sb25nOgorKyAgICAgICAg ICAgICAgICBsbHggPSBsbGEgKyBsbGI7CisrICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9t TG9uZ0xvbmcobGx4KTsKKyAjZW5kaWYKKy0KKy0vKiBSYWlzZVRvb01hbnlWYWx1ZXNUb1VucGFj ayAqLworLXN0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgX19QeXhfUmFpc2VUb29NYW55VmFsdWVz RXJyb3IoUHlfc3NpemVfdCBleHBlY3RlZCkgeworLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFs dWVFcnJvciwKKy0gICAgICAgICAgICAgICAgICJ0b28gbWFueSB2YWx1ZXMgdG8gdW5wYWNrIChl eHBlY3RlZCAlIiBDWVRIT05fRk9STUFUX1NTSVpFX1QgImQpIiwgZXhwZWN0ZWQpOworLX0KKy0K Ky0vKiBSYWlzZU5lZWRNb3JlVmFsdWVzVG9VbnBhY2sgKi8KKy1zdGF0aWMgQ1lUSE9OX0lOTElO RSB2b2lkIF9fUHl4X1JhaXNlTmVlZE1vcmVWYWx1ZXNFcnJvcihQeV9zc2l6ZV90IGluZGV4KSB7 CistICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorLSAgICAgICAgICAgICAgICAg Im5lZWQgbW9yZSB0aGFuICUiIENZVEhPTl9GT1JNQVRfU1NJWkVfVCAiZCB2YWx1ZSUuMXMgdG8g dW5wYWNrIiwKKy0gICAgICAgICAgICAgICAgIGluZGV4LCAoaW5kZXggPT0gMSkgPyAiIiA6ICJz Iik7CistfQorLQorLS8qIEl0ZXJGaW5pc2ggKi8KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQg X19QeXhfSXRlckZpbmlzaCh2b2lkKSB7CistI2lmIENZVEhPTl9GQVNUX1RIUkVBRF9TVEFURQor LSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBfX1B5eF9QeVRocmVhZFN0YXRlX0N1cnJlbnQ7 CistICAgIFB5T2JqZWN0KiBleGNfdHlwZSA9IHRzdGF0ZS0+Y3VyZXhjX3R5cGU7CistICAgIGlm ICh1bmxpa2VseShleGNfdHlwZSkpIHsKKy0gICAgICAgIGlmIChsaWtlbHkoX19QeXhfUHlFcnJf R2l2ZW5FeGNlcHRpb25NYXRjaGVzKGV4Y190eXBlLCBQeUV4Y19TdG9wSXRlcmF0aW9uKSkpIHsK Ky0gICAgICAgICAgICBQeU9iamVjdCAqZXhjX3ZhbHVlLCAqZXhjX3RiOworLSAgICAgICAgICAg IGV4Y192YWx1ZSA9IHRzdGF0ZS0+Y3VyZXhjX3ZhbHVlOworLSAgICAgICAgICAgIGV4Y190YiA9 IHRzdGF0ZS0+Y3VyZXhjX3RyYWNlYmFjazsKKy0gICAgICAgICAgICB0c3RhdGUtPmN1cmV4Y190 eXBlID0gMDsKKy0gICAgICAgICAgICB0c3RhdGUtPmN1cmV4Y192YWx1ZSA9IDA7CistICAgICAg ICAgICAgdHN0YXRlLT5jdXJleGNfdHJhY2ViYWNrID0gMDsKKy0gICAgICAgICAgICBQeV9ERUNS RUYoZXhjX3R5cGUpOworLSAgICAgICAgICAgIFB5X1hERUNSRUYoZXhjX3ZhbHVlKTsKKy0gICAg ICAgICAgICBQeV9YREVDUkVGKGV4Y190Yik7CistICAgICAgICAgICAgcmV0dXJuIDA7CistICAg ICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHJldHVybiAtMTsKKy0gICAgICAgIH0KKy0gICAg fQorLSAgICByZXR1cm4gMDsKKy0jZWxzZQorLSAgICBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJy ZWQoKSkpIHsKKy0gICAgICAgIGlmIChsaWtlbHkoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4 Y19TdG9wSXRlcmF0aW9uKSkpIHsKKy0gICAgICAgICAgICBQeUVycl9DbGVhcigpOworLSAgICAg ICAgICAgIHJldHVybiAwOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICByZXR1cm4g LTE7CistICAgICAgICB9CisrICAgICAgICAKKysgICAgICAgIAorICAgICB9CistICAgIHJldHVy biAwOworLSNlbmRpZgorLX0KKy0KKy0vKiBVbnBhY2tJdGVtRW5kQ2hlY2sgKi8KKy1zdGF0aWMg aW50IF9fUHl4X0l0ZXJuZXh0VW5wYWNrRW5kQ2hlY2soUHlPYmplY3QgKnJldHZhbCwgUHlfc3Np emVfdCBleHBlY3RlZCkgeworLSAgICBpZiAodW5saWtlbHkocmV0dmFsKSkgeworLSAgICAgICAg UHlfREVDUkVGKHJldHZhbCk7CistICAgICAgICBfX1B5eF9SYWlzZVRvb01hbnlWYWx1ZXNFcnJv cihleHBlY3RlZCk7CistICAgICAgICByZXR1cm4gLTE7CistICAgIH0gZWxzZSB7CistICAgICAg ICByZXR1cm4gX19QeXhfSXRlckZpbmlzaCgpOworKyAgICAjZW5kaWYKKysgICAgaWYgKFB5Rmxv YXRfQ2hlY2tFeGFjdChvcDEpKSB7CisrICAgICAgICBjb25zdCBsb25nIGIgPSBpbnR2YWw7Cisr ICAgICAgICBkb3VibGUgYSA9IFB5RmxvYXRfQVNfRE9VQkxFKG9wMSk7CisrICAgICAgICAgICAg ZG91YmxlIHJlc3VsdDsKKysgICAgICAgICAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJhZGQiLCBy ZXR1cm4gTlVMTCkKKysgICAgICAgICAgICByZXN1bHQgPSAoKGRvdWJsZSlhKSArIChkb3VibGUp YjsKKysgICAgICAgICAgICBQeUZQRV9FTkRfUFJPVEVDVChyZXN1bHQpCisrICAgICAgICAgICAg cmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShyZXN1bHQpOworICAgICB9CistICAgIHJldHVybiAw OworKyAgICByZXR1cm4gKGlucGxhY2UgPyBQeU51bWJlcl9JblBsYWNlQWRkIDogUHlOdW1iZXJf QWRkKShvcDEsIG9wMik7CisgfQorKyNlbmRpZgorIAorLS8qIEltcG9ydCAqLworLXN0YXRpYyBQ eU9iamVjdCAqX19QeXhfSW1wb3J0KFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqZnJvbV9saXN0 LCBpbnQgbGV2ZWwpIHsKKy0gICAgUHlPYmplY3QgKmVtcHR5X2xpc3QgPSAwOworLSAgICBQeU9i amVjdCAqbW9kdWxlID0gMDsKKy0gICAgUHlPYmplY3QgKmdsb2JhbF9kaWN0ID0gMDsKKy0gICAg UHlPYmplY3QgKmVtcHR5X2RpY3QgPSAwOworLSAgICBQeU9iamVjdCAqbGlzdDsKKysvKiBQeUlu dEJpbm9wICovCisrI2lmICFDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkKKytzdGF0aWMgUHlPYmpl Y3QqIF9fUHl4X1B5SW50X1N1YnRyYWN0T2JqQyhQeU9iamVjdCAqb3AxLCBQeU9iamVjdCAqb3Ay LCBDWVRIT05fVU5VU0VEIGxvbmcgaW50dmFsLCBpbnQgaW5wbGFjZSwgaW50IHplcm9kaXZpc2lv bl9jaGVjaykgeworKyAgICAodm9pZClpbnBsYWNlOworKyAgICAodm9pZCl6ZXJvZGl2aXNpb25f Y2hlY2s7CisgICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLSAgICBQeU9iamVjdCAqcHlf aW1wb3J0OworLSAgICBweV9pbXBvcnQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4 X2IsIF9fcHl4X25fc19pbXBvcnQpOworLSAgICBpZiAoIXB5X2ltcG9ydCkKKy0gICAgICAgIGdv dG8gYmFkOworLSAgICAjZW5kaWYKKy0gICAgaWYgKGZyb21fbGlzdCkKKy0gICAgICAgIGxpc3Qg PSBmcm9tX2xpc3Q7CistICAgIGVsc2UgeworLSAgICAgICAgZW1wdHlfbGlzdCA9IFB5TGlzdF9O ZXcoMCk7CistICAgICAgICBpZiAoIWVtcHR5X2xpc3QpCistICAgICAgICAgICAgZ290byBiYWQ7 CistICAgICAgICBsaXN0ID0gZW1wdHlfbGlzdDsKKysgICAgaWYgKGxpa2VseShQeUludF9DaGVj a0V4YWN0KG9wMSkpKSB7CisrICAgICAgICBjb25zdCBsb25nIGIgPSBpbnR2YWw7CisrICAgICAg ICBsb25nIHg7CisrICAgICAgICBsb25nIGEgPSBQeUludF9BU19MT05HKG9wMSk7CisrICAgICAg ICAgICAgeCA9IChsb25nKSgodW5zaWduZWQgbG9uZylhIC0gYik7CisrICAgICAgICAgICAgaWYg KGxpa2VseSgoeF5hKSA+PSAwIHx8ICh4Xn5iKSA+PSAwKSkKKysgICAgICAgICAgICAgICAgcmV0 dXJuIFB5SW50X0Zyb21Mb25nKHgpOworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfVHlwZS50 cF9hc19udW1iZXItPm5iX3N1YnRyYWN0KG9wMSwgb3AyKTsKKyAgICAgfQorLSAgICBnbG9iYWxf ZGljdCA9IFB5TW9kdWxlX0dldERpY3QoX19weXhfbSk7CistICAgIGlmICghZ2xvYmFsX2RpY3Qp CistICAgICAgICBnb3RvIGJhZDsKKy0gICAgZW1wdHlfZGljdCA9IFB5RGljdF9OZXcoKTsKKy0g ICAgaWYgKCFlbXB0eV9kaWN0KQorLSAgICAgICAgZ290byBiYWQ7CistICAgIHsKKy0gICAgICAg ICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgICAgIGlmIChsZXZlbCA9PSAtMSkgewor LSAgICAgICAgICAgIGlmICgoMSkgJiYgKHN0cmNocihfX1B5eF9NT0RVTEVfTkFNRSwgJy4nKSkp IHsKKy0gICAgICAgICAgICAgICAgbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWxP YmplY3QoCistICAgICAgICAgICAgICAgICAgICBuYW1lLCBnbG9iYWxfZGljdCwgZW1wdHlfZGlj dCwgbGlzdCwgMSk7CistICAgICAgICAgICAgICAgIGlmICghbW9kdWxlKSB7CistICAgICAgICAg ICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfSW1wb3J0RXJyb3Ip KQorLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFkOworLSAgICAgICAgICAgICAgICAg ICAgUHlFcnJfQ2xlYXIoKTsKKy0gICAgICAgICAgICAgICAgfQorKyAgICAjZW5kaWYKKysgICAg I2lmIENZVEhPTl9VU0VfUFlMT05HX0lOVEVSTkFMUworKyAgICBpZiAobGlrZWx5KFB5TG9uZ19D aGVja0V4YWN0KG9wMSkpKSB7CisrICAgICAgICBjb25zdCBsb25nIGIgPSBpbnR2YWw7CisrICAg ICAgICBsb25nIGEsIHg7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgICBjb25zdCBQ WV9MT05HX0xPTkcgbGxiID0gaW50dmFsOworKyAgICAgICAgUFlfTE9OR19MT05HIGxsYSwgbGx4 OworKyNlbmRpZgorKyAgICAgICAgY29uc3QgZGlnaXQqIGRpZ2l0cyA9ICgoUHlMb25nT2JqZWN0 KilvcDEpLT5vYl9kaWdpdDsKKysgICAgICAgIGNvbnN0IFB5X3NzaXplX3Qgc2l6ZSA9IFB5X1NJ WkUob3AxKTsKKysgICAgICAgIGlmIChsaWtlbHkoX19QeXhfc3N0X2FicyhzaXplKSA8PSAxKSkg eworKyAgICAgICAgICAgIGEgPSBsaWtlbHkoc2l6ZSkgPyBkaWdpdHNbMF0gOiAwOworKyAgICAg ICAgICAgIGlmIChzaXplID09IC0xKSBhID0gLWE7CisrICAgICAgICB9IGVsc2UgeworKyAgICAg ICAgICAgIHN3aXRjaCAoc2l6ZSkgeworKyAgICAgICAgICAgICAgICBjYXNlIC0yOgorKyAgICAg ICAgICAgICAgICAgICAgaWYgKDggKiBzaXplb2YobG9uZykgLSAxID4gMiAqIFB5TG9uZ19TSElG VCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAtKGxvbmcpICgoKCgodW5zaWduZWQg bG9uZylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNb MF0pKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysjaWZkZWYgSEFWRV9MT05H X0xPTkcKKysgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05H X0xPTkcpIC0gMSA+IDIgKiBQeUxvbmdfU0hJRlQpIHsKKysgICAgICAgICAgICAgICAgICAgICAg ICBsbGEgPSAtKFBZX0xPTkdfTE9ORykgKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRz WzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMF0p KTsKKysgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGxvbmdfbG9uZzsKKysjZW5kaWYKKysg ICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKKysgICAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgICAgICAgICAgaWYg KDggKiBzaXplb2YobG9uZykgLSAxID4gMiAqIFB5TG9uZ19TSElGVCkgeworKyAgICAgICAgICAg ICAgICAgICAgICAgIGEgPSAobG9uZykgKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwg UHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkpOworKyAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gMiAqIFB5 TG9uZ19TSElGVCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGxsYSA9IChQWV9MT05HX0xP TkcpICgoKCgodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZU KSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7CisrICAgICAgICAgICAgICAg ICAgICAgICAgZ290byBsb25nX2xvbmc7CisrI2VuZGlmCisrICAgICAgICAgICAgICAgICAgICB9 CisrICAgICAgICAgICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICAgICAg ICAgIGNhc2UgLTM6CisrICAgICAgICAgICAgICAgICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAt IDEgPiAzICogUHlMb25nX1NISUZUKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYSA9IC0o bG9uZykgKCgoKCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwg KHVuc2lnbmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxv bmcpZGlnaXRzWzBdKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrI2lmZGVm IEhBVkVfTE9OR19MT05HCisrICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBzaXpl b2YoUFlfTE9OR19MT05HKSAtIDEgPiAzICogUHlMb25nX1NISUZUKSB7CisrICAgICAgICAgICAg ICAgICAgICAgICAgbGxhID0gLShQWV9MT05HX0xPTkcpICgoKCgoKCh1bnNpZ25lZCBQWV9MT05H X0xPTkcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9O RylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRp Z2l0c1swXSkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOworKyNl bmRpZgorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOworKyAgICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgICAg ICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAtIDEgPiAzICogUHlMb25nX1NISUZUKSB7CisrICAg ICAgICAgICAgICAgICAgICAgICAgYSA9IChsb25nKSAoKCgoKCgodW5zaWduZWQgbG9uZylkaWdp dHNbMl0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMV0pIDw8IFB5 TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKKysgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0gMSA+IDMgKiBQeUxv bmdfU0hJRlQpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAoUFlfTE9OR19MT05H KSAoKCgoKCgodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZU KSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwg KHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsKKysgICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIGxvbmdfbG9uZzsKKysjZW5kaWYKKysgICAgICAgICAgICAgICAgICAgIH0KKysg ICAgICAgICAgICAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgICAgICAgICAg Y2FzZSAtNDoKKysgICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+ IDQgKiBQeUxvbmdfU0hJRlQpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBhID0gLShsb25n KSAoKCgoKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1 bnNpZ25lZCBsb25nKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25n KWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkp OworKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9O RworKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9O RykgLSAxID4gNCAqIFB5TG9uZ19TSElGVCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGxs YSA9IC0oUFlfTE9OR19MT05HKSAoKCgoKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRz WzNdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMl0p IDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwg UHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7CisrICAg ICAgICAgICAgICAgICAgICAgICAgZ290byBsb25nX2xvbmc7CisrI2VuZGlmCisrICAgICAgICAg ICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Cisr ICAgICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6 ZW9mKGxvbmcpIC0gMSA+IDQgKiBQeUxvbmdfU0hJRlQpIHsKKysgICAgICAgICAgICAgICAgICAg ICAgICBhID0gKGxvbmcpICgoKCgoKCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzNdKSA8PCBQeUxv bmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwg KHVuc2lnbmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxv bmcpZGlnaXRzWzBdKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrI2lmZGVm IEhBVkVfTE9OR19MT05HCisrICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBzaXpl b2YoUFlfTE9OR19MT05HKSAtIDEgPiA0ICogUHlMb25nX1NISUZUKSB7CisrICAgICAgICAgICAg ICAgICAgICAgICAgbGxhID0gKFBZX0xPTkdfTE9ORykgKCgoKCgoKCgodW5zaWduZWQgUFlfTE9O R19MT05HKWRpZ2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xP TkcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylk aWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0 c1swXSkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOworKyNlbmRp ZgorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOworKyAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gUHlMb25nX1R5cGUu dHBfYXNfbnVtYmVyLT5uYl9zdWJ0cmFjdChvcDEsIG9wMik7CisgICAgICAgICAgICAgfQorLSAg ICAgICAgICAgIGxldmVsID0gMDsKKy0gICAgICAgIH0KKy0gICAgICAgICNlbmRpZgorLSAgICAg ICAgaWYgKCFtb2R1bGUpIHsKKy0gICAgICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMK Ky0gICAgICAgICAgICBQeU9iamVjdCAqcHlfbGV2ZWwgPSBQeUludF9Gcm9tTG9uZyhsZXZlbCk7 CistICAgICAgICAgICAgaWYgKCFweV9sZXZlbCkKKy0gICAgICAgICAgICAgICAgZ290byBiYWQ7 CistICAgICAgICAgICAgbW9kdWxlID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhweV9p bXBvcnQsCistICAgICAgICAgICAgICAgIG5hbWUsIGdsb2JhbF9kaWN0LCBlbXB0eV9kaWN0LCBs aXN0LCBweV9sZXZlbCwgKFB5T2JqZWN0ICopTlVMTCk7CistICAgICAgICAgICAgUHlfREVDUkVG KHB5X2xldmVsKTsKKy0gICAgICAgICAgICAjZWxzZQorLSAgICAgICAgICAgIG1vZHVsZSA9IFB5 SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsT2JqZWN0KAorLSAgICAgICAgICAgICAgICBuYW1lLCBn bG9iYWxfZGljdCwgZW1wdHlfZGljdCwgbGlzdCwgbGV2ZWwpOworLSAgICAgICAgICAgICNlbmRp ZgorICAgICAgICAgfQorLSAgICB9CistYmFkOgorLSAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8 IDMKKy0gICAgUHlfWERFQ1JFRihweV9pbXBvcnQpOworLSAgICAjZW5kaWYKKy0gICAgUHlfWERF Q1JFRihlbXB0eV9saXN0KTsKKy0gICAgUHlfWERFQ1JFRihlbXB0eV9kaWN0KTsKKy0gICAgcmV0 dXJuIG1vZHVsZTsKKy19CistCistLyogSW1wb3J0RnJvbSAqLworLXN0YXRpYyBQeU9iamVjdCog X19QeXhfSW1wb3J0RnJvbShQeU9iamVjdCogbW9kdWxlLCBQeU9iamVjdCogbmFtZSkgeworLSAg ICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG1vZHVsZSwgbmFt ZSk7CistICAgIGlmICh1bmxpa2VseSghdmFsdWUpICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMo UHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CistICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW1w b3J0RXJyb3IsCistICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKy0gICAgICAgICAg ICAiY2Fubm90IGltcG9ydCBuYW1lICUuMjMwcyIsIFB5U3RyaW5nX0FTX1NUUklORyhuYW1lKSk7 CistICAgICAgICAjZWxzZQorLSAgICAgICAgICAgICJjYW5ub3QgaW1wb3J0IG5hbWUgJVMiLCBu YW1lKTsKKy0gICAgICAgICNlbmRpZgorLSAgICB9CistICAgIHJldHVybiB2YWx1ZTsKKy19Cist CistLyogSGFzQXR0ciAqLworLXN0YXRpYyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9IYXNBdHRy KFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqbikgeworLSAgICBQeU9iamVjdCAqcjsKKy0gICAgaWYg KHVubGlrZWx5KCFfX1B5eF9QeUJhc2VTdHJpbmdfQ2hlY2sobikpKSB7CistICAgICAgICBQeUVy cl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorLSAgICAgICAgICAgICAgICAgICAgICAgICJo YXNhdHRyKCk6IGF0dHJpYnV0ZSBuYW1lIG11c3QgYmUgc3RyaW5nIik7CistICAgICAgICByZXR1 cm4gLTE7CistICAgIH0KKy0gICAgciA9IF9fUHl4X0dldEF0dHIobywgbik7CistICAgIGlmICh1 bmxpa2VseSghcikpIHsKKy0gICAgICAgIFB5RXJyX0NsZWFyKCk7CistICAgICAgICByZXR1cm4g MDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIFB5X0RFQ1JFRihyKTsKKy0gICAgICAgIHJldHVy biAxOworLSAgICB9CistfQorLQorLS8qIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyTm9EaWN0ICov CistI2lmIENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVAg JiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDcwMDAwCistc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9S YWlzZUdlbmVyaWNHZXRBdHRyaWJ1dGVFcnJvcihQeVR5cGVPYmplY3QgKnRwLCBQeU9iamVjdCAq YXR0cl9uYW1lKSB7CistICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKKy0j aWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICAgICAgICAgICAgICAgICAiJyUuNTBzJyBvYmpl Y3QgaGFzIG5vIGF0dHJpYnV0ZSAnJVUnIiwKKy0gICAgICAgICAgICAgICAgIHRwLT50cF9uYW1l LCBhdHRyX25hbWUpOworLSNlbHNlCistICAgICAgICAgICAgICAgICAiJyUuNTBzJyBvYmplY3Qg aGFzIG5vIGF0dHJpYnV0ZSAnJS40MDBzJyIsCistICAgICAgICAgICAgICAgICB0cC0+dHBfbmFt ZSwgUHlTdHJpbmdfQVNfU1RSSU5HKGF0dHJfbmFtZSkpOworKyAgICAgICAgICAgICAgICB4ID0g YSAtIGI7CisrICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh4KTsKKysjaWZkZWYg SEFWRV9MT05HX0xPTkcKKysgICAgICAgIGxvbmdfbG9uZzoKKysgICAgICAgICAgICAgICAgbGx4 ID0gbGxhIC0gbGxiOworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKGxs eCk7CisgI2VuZGlmCistICAgIHJldHVybiBOVUxMOworLX0KKy1zdGF0aWMgQ1lUSE9OX0lOTElO RSBQeU9iamVjdCogX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHJOb0RpY3QoUHlPYmplY3Qq IG9iaiwgUHlPYmplY3QqIGF0dHJfbmFtZSkgeworLSAgICBQeU9iamVjdCAqZGVzY3I7CistICAg IFB5VHlwZU9iamVjdCAqdHAgPSBQeV9UWVBFKG9iaik7CistICAgIGlmICh1bmxpa2VseSghUHlT dHJpbmdfQ2hlY2soYXR0cl9uYW1lKSkpIHsKKy0gICAgICAgIHJldHVybiBQeU9iamVjdF9HZW5l cmljR2V0QXR0cihvYmosIGF0dHJfbmFtZSk7CistICAgIH0KKy0gICAgYXNzZXJ0KCF0cC0+dHBf ZGljdG9mZnNldCk7CistICAgIGRlc2NyID0gX1B5VHlwZV9Mb29rdXAodHAsIGF0dHJfbmFtZSk7 CistICAgIGlmICh1bmxpa2VseSghZGVzY3IpKSB7CistICAgICAgICByZXR1cm4gX19QeXhfUmFp c2VHZW5lcmljR2V0QXR0cmlidXRlRXJyb3IodHAsIGF0dHJfbmFtZSk7CisrICAgICAgICAKKysg ICAgICAgIAorICAgICB9CistICAgIFB5X0lOQ1JFRihkZXNjcik7CistICAgICNpZiBQWV9NQUpP Ul9WRVJTSU9OIDwgMworLSAgICBpZiAobGlrZWx5KFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUo ZGVzY3IpLCBQeV9UUEZMQUdTX0hBVkVfQ0xBU1MpKSkKKyAgICAgI2VuZGlmCistICAgIHsKKy0g ICAgICAgIGRlc2NyZ2V0ZnVuYyBmID0gUHlfVFlQRShkZXNjciktPnRwX2Rlc2NyX2dldDsKKy0g ICAgICAgIGlmICh1bmxpa2VseShmKSkgeworLSAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBm KGRlc2NyLCBvYmosIChQeU9iamVjdCAqKXRwKTsKKy0gICAgICAgICAgICBQeV9ERUNSRUYoZGVz Y3IpOworLSAgICAgICAgICAgIHJldHVybiByZXM7CistICAgICAgICB9CisrICAgIGlmIChQeUZs b2F0X0NoZWNrRXhhY3Qob3AxKSkgeworKyAgICAgICAgY29uc3QgbG9uZyBiID0gaW50dmFsOwor KyAgICAgICAgZG91YmxlIGEgPSBQeUZsb2F0X0FTX0RPVUJMRShvcDEpOworKyAgICAgICAgICAg IGRvdWJsZSByZXN1bHQ7CisrICAgICAgICAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgic3VidHJh Y3QiLCByZXR1cm4gTlVMTCkKKysgICAgICAgICAgICByZXN1bHQgPSAoKGRvdWJsZSlhKSAtIChk b3VibGUpYjsKKysgICAgICAgICAgICBQeUZQRV9FTkRfUFJPVEVDVChyZXN1bHQpCisrICAgICAg ICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShyZXN1bHQpOworICAgICB9CistICAgIHJl dHVybiBkZXNjcjsKKysgICAgcmV0dXJuIChpbnBsYWNlID8gUHlOdW1iZXJfSW5QbGFjZVN1YnRy YWN0IDogUHlOdW1iZXJfU3VidHJhY3QpKG9wMSwgb3AyKTsKKyB9CisgI2VuZGlmCisgCistLyog UHlPYmplY3RfR2VuZXJpY0dldEF0dHIgKi8KKy0jaWYgQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYm IENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwNzAwMDAK Ky1zdGF0aWMgUHlPYmplY3QqIF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKFB5T2JqZWN0 KiBvYmosIFB5T2JqZWN0KiBhdHRyX25hbWUpIHsKKy0gICAgaWYgKHVubGlrZWx5KFB5X1RZUEUo b2JqKS0+dHBfZGljdG9mZnNldCkpIHsKKy0gICAgICAgIHJldHVybiBQeU9iamVjdF9HZW5lcmlj R2V0QXR0cihvYmosIGF0dHJfbmFtZSk7CistICAgIH0KKy0gICAgcmV0dXJuIF9fUHl4X1B5T2Jq ZWN0X0dlbmVyaWNHZXRBdHRyTm9EaWN0KG9iaiwgYXR0cl9uYW1lKTsKKy19CisrLyogV3JpdGVV bnJhaXNhYmxlRXhjZXB0aW9uICovCisrc3RhdGljIHZvaWQgX19QeXhfV3JpdGVVbnJhaXNhYmxl KGNvbnN0IGNoYXIgKm5hbWUsIENZVEhPTl9VTlVTRUQgaW50IGNsaW5lbm8sCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENZVEhPTl9VTlVTRUQgaW50IGxpbmVubywgQ1lUSE9O X1VOVVNFRCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGZ1bGxfdHJhY2ViYWNrLCBDWVRIT05fVU5VU0VEIGludCBub2dpbCkgewor KyAgICBQeU9iamVjdCAqb2xkX2V4YywgKm9sZF92YWwsICpvbGRfdGI7CisrICAgIFB5T2JqZWN0 ICpjdHg7CisrICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQorKyNpZmRlZiBXSVRIX1RI UkVBRAorKyAgICBQeUdJTFN0YXRlX1NUQVRFIHN0YXRlOworKyAgICBpZiAobm9naWwpCisrICAg ICAgICBzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisrI2lmZGVmIF9NU0NfVkVSCisrICAg IGVsc2Ugc3RhdGUgPSAoUHlHSUxTdGF0ZV9TVEFURSktMTsKKyAjZW5kaWYKKy0KKy0vKiBTZXRW VGFibGUgKi8KKy1zdGF0aWMgaW50IF9fUHl4X1NldFZ0YWJsZShQeU9iamVjdCAqZGljdCwgdm9p ZCAqdnRhYmxlKSB7CistI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDIwNzAwMDAKKy0gICAgUHlP YmplY3QgKm9iID0gUHlDYXBzdWxlX05ldyh2dGFibGUsIDAsIDApOworLSNlbHNlCistICAgIFB5 T2JqZWN0ICpvYiA9IFB5Q09iamVjdF9Gcm9tVm9pZFB0cih2dGFibGUsIDApOworICNlbmRpZgor LSAgICBpZiAoIW9iKQorLSAgICAgICAgZ290byBiYWQ7CistICAgIGlmIChQeURpY3RfU2V0SXRl bShkaWN0LCBfX3B5eF9uX3NfcHl4X3Z0YWJsZSwgb2IpIDwgMCkKKy0gICAgICAgIGdvdG8gYmFk OworLSAgICBQeV9ERUNSRUYob2IpOworLSAgICByZXR1cm4gMDsKKy1iYWQ6CistICAgIFB5X1hE RUNSRUYob2IpOworLSAgICByZXR1cm4gLTE7CistfQorLQorLS8qIFB5T2JqZWN0R2V0QXR0clN0 ck5vRXJyb3IgKi8KKy1zdGF0aWMgdm9pZCBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyX0NsZWFy QXR0cmlidXRlRXJyb3Iodm9pZCkgeworLSAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUK KyAgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24KKy0gICAgaWYgKGxpa2VseShfX1B5eF9Q eUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkpCistICAgICAgICBf X1B5eF9QeUVycl9DbGVhcigpOworLX0KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCog X19QeXhfUHlPYmplY3RfR2V0QXR0clN0ck5vRXJyb3IoUHlPYmplY3QqIG9iaiwgUHlPYmplY3Qq IGF0dHJfbmFtZSkgeworLSAgICBQeU9iamVjdCAqcmVzdWx0OworLSNpZiBDWVRIT05fQ09NUElM SU5HX0lOX0NQWVRIT04gJiYgQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIFBZX1ZFUlNJT05fSEVY ID49IDB4MDMwNzAwQjEKKy0gICAgUHlUeXBlT2JqZWN0KiB0cCA9IFB5X1RZUEUob2JqKTsKKy0g ICAgaWYgKGxpa2VseSh0cC0+dHBfZ2V0YXR0cm8gPT0gUHlPYmplY3RfR2VuZXJpY0dldEF0dHIp KSB7CistICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyV2l0aERpY3Qob2Jq LCBhdHRyX25hbWUsIE5VTEwsIDEpOworKyAgICBfX1B5eF9FcnJGZXRjaCgmb2xkX2V4YywgJm9s ZF92YWwsICZvbGRfdGIpOworKyAgICBpZiAoZnVsbF90cmFjZWJhY2spIHsKKysgICAgICAgIFB5 X1hJTkNSRUYob2xkX2V4Yyk7CisrICAgICAgICBQeV9YSU5DUkVGKG9sZF92YWwpOworKyAgICAg ICAgUHlfWElOQ1JFRihvbGRfdGIpOworKyAgICAgICAgX19QeXhfRXJyUmVzdG9yZShvbGRfZXhj LCBvbGRfdmFsLCBvbGRfdGIpOworKyAgICAgICAgUHlFcnJfUHJpbnRFeCgxKTsKKyAgICAgfQor LSNlbmRpZgorLSAgICByZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG9iaiwgYXR0 cl9uYW1lKTsKKy0gICAgaWYgKHVubGlrZWx5KCFyZXN1bHQpKSB7CistICAgICAgICBfX1B5eF9Q eU9iamVjdF9HZXRBdHRyU3RyX0NsZWFyQXR0cmlidXRlRXJyb3IoKTsKKysgICAgI2lmIFBZX01B Sk9SX1ZFUlNJT04gPCAzCisrICAgIGN0eCA9IFB5U3RyaW5nX0Zyb21TdHJpbmcobmFtZSk7Cisr ICAgICNlbHNlCisrICAgIGN0eCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG5hbWUpOworKyAgICAj ZW5kaWYKKysgICAgX19QeXhfRXJyUmVzdG9yZShvbGRfZXhjLCBvbGRfdmFsLCBvbGRfdGIpOwor KyAgICBpZiAoIWN0eCkgeworKyAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKFB5X05vbmUp OworKyAgICB9IGVsc2UgeworKyAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGN0eCk7Cisr ICAgICAgICBQeV9ERUNSRUYoY3R4KTsKKyAgICAgfQorLSAgICByZXR1cm4gcmVzdWx0OworKyNp ZmRlZiBXSVRIX1RIUkVBRAorKyAgICBpZiAobm9naWwpCisrICAgICAgICBQeUdJTFN0YXRlX1Jl bGVhc2Uoc3RhdGUpOworKyNlbmRpZgorIH0KKyAKKy0vKiBTZXR1cFJlZHVjZSAqLworLXN0YXRp YyBpbnQgX19QeXhfc2V0dXBfcmVkdWNlX2lzX25hbWVkKFB5T2JqZWN0KiBtZXRoLCBQeU9iamVj dCogbmFtZSkgeworLSAgaW50IHJldDsKKy0gIFB5T2JqZWN0ICpuYW1lX2F0dHI7CistICBuYW1l X2F0dHIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG1ldGgsIF9fcHl4X25fc19uYW1lKTsK Ky0gIGlmIChsaWtlbHkobmFtZV9hdHRyKSkgeworLSAgICAgIHJldCA9IFB5T2JqZWN0X1JpY2hD b21wYXJlQm9vbChuYW1lX2F0dHIsIG5hbWUsIFB5X0VRKTsKKy0gIH0gZWxzZSB7CistICAgICAg cmV0ID0gLTE7CistICB9CistICBpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKy0gICAgICBQeUVy cl9DbGVhcigpOworLSAgICAgIHJldCA9IDA7CistICB9CistICBQeV9YREVDUkVGKG5hbWVfYXR0 cik7CistICByZXR1cm4gcmV0OworKy8qIFN3YXBFeGNlcHRpb24gKi8KKysjaWYgQ1lUSE9OX0ZB U1RfVEhSRUFEX1NUQVRFCisrc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9fRXhjZXB0 aW9uU3dhcChQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5T2JqZWN0ICoqdHlwZSwgUHlPYmplY3Qg Kip2YWx1ZSwgUHlPYmplY3QgKip0YikgeworKyAgICBQeU9iamVjdCAqdG1wX3R5cGUsICp0bXBf dmFsdWUsICp0bXBfdGI7CisrICAgICNpZiBDWVRIT05fVVNFX0VYQ19JTkZPX1NUQUNLCisrICAg IF9QeUVycl9TdGFja0l0ZW0gKmV4Y19pbmZvID0gdHN0YXRlLT5leGNfaW5mbzsKKysgICAgdG1w X3R5cGUgPSBleGNfaW5mby0+ZXhjX3R5cGU7CisrICAgIHRtcF92YWx1ZSA9IGV4Y19pbmZvLT5l eGNfdmFsdWU7CisrICAgIHRtcF90YiA9IGV4Y19pbmZvLT5leGNfdHJhY2ViYWNrOworKyAgICBl eGNfaW5mby0+ZXhjX3R5cGUgPSAqdHlwZTsKKysgICAgZXhjX2luZm8tPmV4Y192YWx1ZSA9ICp2 YWx1ZTsKKysgICAgZXhjX2luZm8tPmV4Y190cmFjZWJhY2sgPSAqdGI7CisrICAgICNlbHNlCisr ICAgIHRtcF90eXBlID0gdHN0YXRlLT5leGNfdHlwZTsKKysgICAgdG1wX3ZhbHVlID0gdHN0YXRl LT5leGNfdmFsdWU7CisrICAgIHRtcF90YiA9IHRzdGF0ZS0+ZXhjX3RyYWNlYmFjazsKKysgICAg dHN0YXRlLT5leGNfdHlwZSA9ICp0eXBlOworKyAgICB0c3RhdGUtPmV4Y192YWx1ZSA9ICp2YWx1 ZTsKKysgICAgdHN0YXRlLT5leGNfdHJhY2ViYWNrID0gKnRiOworKyAgICAjZW5kaWYKKysgICAg KnR5cGUgPSB0bXBfdHlwZTsKKysgICAgKnZhbHVlID0gdG1wX3ZhbHVlOworKyAgICAqdGIgPSB0 bXBfdGI7CisgfQorLXN0YXRpYyBpbnQgX19QeXhfc2V0dXBfcmVkdWNlKFB5T2JqZWN0KiB0eXBl X29iaikgeworLSAgICBpbnQgcmV0ID0gMDsKKy0gICAgUHlPYmplY3QgKm9iamVjdF9yZWR1Y2Ug PSBOVUxMOworLSAgICBQeU9iamVjdCAqb2JqZWN0X3JlZHVjZV9leCA9IE5VTEw7CistICAgIFB5 T2JqZWN0ICpyZWR1Y2UgPSBOVUxMOworLSAgICBQeU9iamVjdCAqcmVkdWNlX2V4ID0gTlVMTDsK Ky0gICAgUHlPYmplY3QgKnJlZHVjZV9jeXRob24gPSBOVUxMOworLSAgICBQeU9iamVjdCAqc2V0 c3RhdGUgPSBOVUxMOworLSAgICBQeU9iamVjdCAqc2V0c3RhdGVfY3l0aG9uID0gTlVMTDsKKy0j aWYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQCistICAgIGlmIChfUHlUeXBlX0xvb2t1cCgoUHlU eXBlT2JqZWN0Kil0eXBlX29iaiwgX19weXhfbl9zX2dldHN0YXRlKSkgZ290byBfX1BZWF9HT09E OworLSNlbHNlCistICAgIGlmIChQeU9iamVjdF9IYXNBdHRyKHR5cGVfb2JqLCBfX3B5eF9uX3Nf Z2V0c3RhdGUpKSBnb3RvIF9fUFlYX0dPT0Q7CistI2VuZGlmCistI2lmIENZVEhPTl9VU0VfUFlU WVBFX0xPT0tVUAorLSAgICBvYmplY3RfcmVkdWNlX2V4ID0gX1B5VHlwZV9Mb29rdXAoJlB5QmFz ZU9iamVjdF9UeXBlLCBfX3B5eF9uX3NfcmVkdWNlX2V4KTsgaWYgKCFvYmplY3RfcmVkdWNlX2V4 KSBnb3RvIF9fUFlYX0JBRDsKKy0jZWxzZQorLSAgICBvYmplY3RfcmVkdWNlX2V4ID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cigoUHlPYmplY3QqKSZQeUJhc2VPYmplY3RfVHlwZSwgX19weXhf bl9zX3JlZHVjZV9leCk7IGlmICghb2JqZWN0X3JlZHVjZV9leCkgZ290byBfX1BZWF9CQUQ7Cist I2VuZGlmCistICAgIHJlZHVjZV9leCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIodHlwZV9v YmosIF9fcHl4X25fc19yZWR1Y2VfZXgpOyBpZiAodW5saWtlbHkoIXJlZHVjZV9leCkpIGdvdG8g X19QWVhfQkFEOworLSAgICBpZiAocmVkdWNlX2V4ID09IG9iamVjdF9yZWR1Y2VfZXgpIHsKKy0j aWYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQCistICAgICAgICBvYmplY3RfcmVkdWNlID0gX1B5 VHlwZV9Mb29rdXAoJlB5QmFzZU9iamVjdF9UeXBlLCBfX3B5eF9uX3NfcmVkdWNlKTsgaWYgKCFv YmplY3RfcmVkdWNlKSBnb3RvIF9fUFlYX0JBRDsKKyAjZWxzZQorLSAgICAgICAgb2JqZWN0X3Jl ZHVjZSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKFB5T2JqZWN0KikmUHlCYXNlT2JqZWN0 X1R5cGUsIF9fcHl4X25fc19yZWR1Y2UpOyBpZiAoIW9iamVjdF9yZWR1Y2UpIGdvdG8gX19QWVhf QkFEOworK3N0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgX19QeXhfRXhjZXB0aW9uU3dhcChQeU9i amVjdCAqKnR5cGUsIFB5T2JqZWN0ICoqdmFsdWUsIFB5T2JqZWN0ICoqdGIpIHsKKysgICAgUHlP YmplY3QgKnRtcF90eXBlLCAqdG1wX3ZhbHVlLCAqdG1wX3RiOworKyAgICBQeUVycl9HZXRFeGNJ bmZvKCZ0bXBfdHlwZSwgJnRtcF92YWx1ZSwgJnRtcF90Yik7CisrICAgIFB5RXJyX1NldEV4Y0lu Zm8oKnR5cGUsICp2YWx1ZSwgKnRiKTsKKysgICAgKnR5cGUgPSB0bXBfdHlwZTsKKysgICAgKnZh bHVlID0gdG1wX3ZhbHVlOworKyAgICAqdGIgPSB0bXBfdGI7CisrfQorICNlbmRpZgorLSAgICAg ICAgcmVkdWNlID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cih0eXBlX29iaiwgX19weXhfbl9z X3JlZHVjZSk7IGlmICh1bmxpa2VseSghcmVkdWNlKSkgZ290byBfX1BZWF9CQUQ7CistICAgICAg ICBpZiAocmVkdWNlID09IG9iamVjdF9yZWR1Y2UgfHwgX19QeXhfc2V0dXBfcmVkdWNlX2lzX25h bWVkKHJlZHVjZSwgX19weXhfbl9zX3JlZHVjZV9jeXRob24pKSB7CistICAgICAgICAgICAgcmVk dWNlX2N5dGhvbiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHJOb0Vycm9yKHR5cGVfb2JqLCBf X3B5eF9uX3NfcmVkdWNlX2N5dGhvbik7CistICAgICAgICAgICAgaWYgKGxpa2VseShyZWR1Y2Vf Y3l0aG9uKSkgeworLSAgICAgICAgICAgICAgICByZXQgPSBQeURpY3RfU2V0SXRlbSgoKFB5VHlw ZU9iamVjdCopdHlwZV9vYmopLT50cF9kaWN0LCBfX3B5eF9uX3NfcmVkdWNlLCByZWR1Y2VfY3l0 aG9uKTsgaWYgKHVubGlrZWx5KHJldCA8IDApKSBnb3RvIF9fUFlYX0JBRDsKKy0gICAgICAgICAg ICAgICAgcmV0ID0gUHlEaWN0X0RlbEl0ZW0oKChQeVR5cGVPYmplY3QqKXR5cGVfb2JqKS0+dHBf ZGljdCwgX19weXhfbl9zX3JlZHVjZV9jeXRob24pOyBpZiAodW5saWtlbHkocmV0IDwgMCkpIGdv dG8gX19QWVhfQkFEOworLSAgICAgICAgICAgIH0gZWxzZSBpZiAocmVkdWNlID09IG9iamVjdF9y ZWR1Y2UgfHwgUHlFcnJfT2NjdXJyZWQoKSkgeworLSAgICAgICAgICAgICAgICBnb3RvIF9fUFlY X0JBRDsKKy0gICAgICAgICAgICB9CistICAgICAgICAgICAgc2V0c3RhdGUgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKHR5cGVfb2JqLCBfX3B5eF9uX3Nfc2V0c3RhdGUpOworLSAgICAgICAg ICAgIGlmICghc2V0c3RhdGUpIFB5RXJyX0NsZWFyKCk7CistICAgICAgICAgICAgaWYgKCFzZXRz dGF0ZSB8fCBfX1B5eF9zZXR1cF9yZWR1Y2VfaXNfbmFtZWQoc2V0c3RhdGUsIF9fcHl4X25fc19z ZXRzdGF0ZV9jeXRob24pKSB7CistICAgICAgICAgICAgICAgIHNldHN0YXRlX2N5dGhvbiA9IF9f UHl4X1B5T2JqZWN0X0dldEF0dHJTdHJOb0Vycm9yKHR5cGVfb2JqLCBfX3B5eF9uX3Nfc2V0c3Rh dGVfY3l0aG9uKTsKKy0gICAgICAgICAgICAgICAgaWYgKGxpa2VseShzZXRzdGF0ZV9jeXRob24p KSB7CistICAgICAgICAgICAgICAgICAgICByZXQgPSBQeURpY3RfU2V0SXRlbSgoKFB5VHlwZU9i amVjdCopdHlwZV9vYmopLT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0c3RhdGUsIHNldHN0YXRlX2N5 dGhvbik7IGlmICh1bmxpa2VseShyZXQgPCAwKSkgZ290byBfX1BZWF9CQUQ7CistICAgICAgICAg ICAgICAgICAgICByZXQgPSBQeURpY3RfRGVsSXRlbSgoKFB5VHlwZU9iamVjdCopdHlwZV9vYmop LT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0c3RhdGVfY3l0aG9uKTsgaWYgKHVubGlrZWx5KHJldCA8 IDApKSBnb3RvIF9fUFlYX0JBRDsKKy0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2V0c3Rh dGUgfHwgUHlFcnJfT2NjdXJyZWQoKSkgeworLSAgICAgICAgICAgICAgICAgICAgZ290byBfX1BZ WF9CQUQ7CisrCisrLyogU2V0SXRlbUludCAqLworK3N0YXRpYyBpbnQgX19QeXhfU2V0SXRlbUlu dF9HZW5lcmljKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqaiwgUHlPYmplY3QgKnYpIHsKKysgICAg aW50IHI7CisrICAgIGlmICghaikgcmV0dXJuIC0xOworKyAgICByID0gUHlPYmplY3RfU2V0SXRl bShvLCBqLCB2KTsKKysgICAgUHlfREVDUkVGKGopOworKyAgICByZXR1cm4gcjsKKyt9Cisrc3Rh dGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4X1NldEl0ZW1JbnRfRmFzdChQeU9iamVjdCAqbywg UHlfc3NpemVfdCBpLCBQeU9iamVjdCAqdiwgaW50IGlzX2xpc3QsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDWVRIT05fTkNQX1VOVVNFRCBpbnQgd3Jh cGFyb3VuZCwgQ1lUSE9OX05DUF9VTlVTRUQgaW50IGJvdW5kc2NoZWNrKSB7CisrI2lmIENZVEhP Tl9BU1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTICYmIENZ VEhPTl9VU0VfVFlQRV9TTE9UUworKyAgICBpZiAoaXNfbGlzdCB8fCBQeUxpc3RfQ2hlY2tFeGFj dChvKSkgeworKyAgICAgICAgUHlfc3NpemVfdCBuID0gKCF3cmFwYXJvdW5kKSA/IGkgOiAoKGxp a2VseShpID49IDApKSA/IGkgOiBpICsgUHlMaXN0X0dFVF9TSVpFKG8pKTsKKysgICAgICAgIGlm ICgoIWJvdW5kc2NoZWNrKSB8fCBsaWtlbHkoX19QeXhfaXNfdmFsaWRfaW5kZXgobiwgUHlMaXN0 X0dFVF9TSVpFKG8pKSkpIHsKKysgICAgICAgICAgICBQeU9iamVjdCogb2xkID0gUHlMaXN0X0dF VF9JVEVNKG8sIG4pOworKyAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKKysgICAgICAgICAgICBQ eUxpc3RfU0VUX0lURU0obywgbiwgdik7CisrICAgICAgICAgICAgUHlfREVDUkVGKG9sZCk7Cisr ICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAg ICBQeVNlcXVlbmNlTWV0aG9kcyAqbSA9IFB5X1RZUEUobyktPnRwX2FzX3NlcXVlbmNlOworKyAg ICAgICAgaWYgKGxpa2VseShtICYmIG0tPnNxX2Fzc19pdGVtKSkgeworKyAgICAgICAgICAgIGlm ICh3cmFwYXJvdW5kICYmIHVubGlrZWx5KGkgPCAwKSAmJiBsaWtlbHkobS0+c3FfbGVuZ3RoKSkg eworKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGwgPSBtLT5zcV9sZW5ndGgobyk7CisrICAg ICAgICAgICAgICAgIGlmIChsaWtlbHkobCA+PSAwKSkgeworKyAgICAgICAgICAgICAgICAgICAg aSArPSBsOworKyAgICAgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAgICAgICAg aWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorKyAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgICAgICAgICAgICAgIFB5RXJy X0NsZWFyKCk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CistICAgICAgICAg ICAgUHlUeXBlX01vZGlmaWVkKChQeVR5cGVPYmplY3QqKXR5cGVfb2JqKTsKKysgICAgICAgICAg ICByZXR1cm4gbS0+c3FfYXNzX2l0ZW0obywgaSwgdik7CisgICAgICAgICB9CisgICAgIH0KKy0g ICAgZ290byBfX1BZWF9HT09EOworLV9fUFlYX0JBRDoKKy0gICAgaWYgKCFQeUVycl9PY2N1cnJl ZCgpKQorLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwgIlVuYWJsZSB0 byBpbml0aWFsaXplIHBpY2tsaW5nIGZvciAlcyIsICgoUHlUeXBlT2JqZWN0Kil0eXBlX29iaikt PnRwX25hbWUpOworLSAgICByZXQgPSAtMTsKKy1fX1BZWF9HT09EOgorLSNpZiAhQ1lUSE9OX1VT RV9QWVRZUEVfTE9PS1VQCistICAgIFB5X1hERUNSRUYob2JqZWN0X3JlZHVjZSk7CistICAgIFB5 X1hERUNSRUYob2JqZWN0X3JlZHVjZV9leCk7CisrI2Vsc2UKKysjaWYgQ1lUSE9OX0NPTVBJTElO R19JTl9QWVBZCisrICAgIGlmIChpc19saXN0IHx8IChQeVNlcXVlbmNlX0NoZWNrKG8pICYmICFQ eURpY3RfQ2hlY2sobykpKQorKyNlbHNlCisrICAgIGlmIChpc19saXN0IHx8IFB5U2VxdWVuY2Vf Q2hlY2sobykpCisgI2VuZGlmCistICAgIFB5X1hERUNSRUYocmVkdWNlKTsKKy0gICAgUHlfWERF Q1JFRihyZWR1Y2VfZXgpOworLSAgICBQeV9YREVDUkVGKHJlZHVjZV9jeXRob24pOworLSAgICBQ eV9YREVDUkVGKHNldHN0YXRlKTsKKy0gICAgUHlfWERFQ1JFRihzZXRzdGF0ZV9jeXRob24pOwor LSAgICByZXR1cm4gcmV0OworKyAgICB7CisrICAgICAgICByZXR1cm4gUHlTZXF1ZW5jZV9TZXRJ dGVtKG8sIGksIHYpOworKyAgICB9CisrI2VuZGlmCisrICAgIHJldHVybiBfX1B5eF9TZXRJdGVt SW50X0dlbmVyaWMobywgUHlJbnRfRnJvbVNzaXplX3QoaSksIHYpOworIH0KKyAKKy0vKiBDYWxj dWxhdGVNZXRhY2xhc3MgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fUHl4X0NhbGN1bGF0ZU1ldGFj bGFzcyhQeVR5cGVPYmplY3QgKm1ldGFjbGFzcywgUHlPYmplY3QgKmJhc2VzKSB7CistICAgIFB5 X3NzaXplX3QgaSwgbmJhc2VzID0gUHlUdXBsZV9HRVRfU0laRShiYXNlcyk7CistICAgIGZvciAo aT0wOyBpIDwgbmJhc2VzOyBpKyspIHsKKy0gICAgICAgIFB5VHlwZU9iamVjdCAqdG1wdHlwZTsK Ky0gICAgICAgIFB5T2JqZWN0ICp0bXAgPSBQeVR1cGxlX0dFVF9JVEVNKGJhc2VzLCBpKTsKKy0g ICAgICAgIHRtcHR5cGUgPSBQeV9UWVBFKHRtcCk7CistI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAz CistICAgICAgICBpZiAodG1wdHlwZSA9PSAmUHlDbGFzc19UeXBlKQorLSAgICAgICAgICAgIGNv bnRpbnVlOworLSNlbmRpZgorLSAgICAgICAgaWYgKCFtZXRhY2xhc3MpIHsKKy0gICAgICAgICAg ICBtZXRhY2xhc3MgPSB0bXB0eXBlOworLSAgICAgICAgICAgIGNvbnRpbnVlOworKy8qIEZhc3RU eXBlQ2hlY2tzICovCisrI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTgorK3N0YXRpYyBp bnQgX19QeXhfSW5CYXNlcyhQeVR5cGVPYmplY3QgKmEsIFB5VHlwZU9iamVjdCAqYikgeworKyAg ICB3aGlsZSAoYSkgeworKyAgICAgICAgYSA9IGEtPnRwX2Jhc2U7CisrICAgICAgICBpZiAoYSA9 PSBiKQorKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICB9CisrICAgIHJldHVybiBiID09ICZQ eUJhc2VPYmplY3RfVHlwZTsKKyt9Cisrc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4X0lz U3VidHlwZShQeVR5cGVPYmplY3QgKmEsIFB5VHlwZU9iamVjdCAqYikgeworKyAgICBQeU9iamVj dCAqbXJvOworKyAgICBpZiAoYSA9PSBiKSByZXR1cm4gMTsKKysgICAgbXJvID0gYS0+dHBfbXJv OworKyAgICBpZiAobGlrZWx5KG1ybykpIHsKKysgICAgICAgIFB5X3NzaXplX3QgaSwgbjsKKysg ICAgICAgIG4gPSBQeVR1cGxlX0dFVF9TSVpFKG1ybyk7CisrICAgICAgICBmb3IgKGkgPSAwOyBp IDwgbjsgaSsrKSB7CisrICAgICAgICAgICAgaWYgKFB5VHVwbGVfR0VUX0lURU0obXJvLCBpKSA9 PSAoUHlPYmplY3QgKiliKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgIH0K Ky0gICAgICAgIGlmIChQeVR5cGVfSXNTdWJ0eXBlKG1ldGFjbGFzcywgdG1wdHlwZSkpCistICAg ICAgICAgICAgY29udGludWU7CistICAgICAgICBpZiAoUHlUeXBlX0lzU3VidHlwZSh0bXB0eXBl LCBtZXRhY2xhc3MpKSB7CistICAgICAgICAgICAgbWV0YWNsYXNzID0gdG1wdHlwZTsKKy0gICAg ICAgICAgICBjb250aW51ZTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIHJldHVy biBfX1B5eF9JbkJhc2VzKGEsIGIpOworK30KKysjaWYgUFlfTUFKT1JfVkVSU0lPTiA9PSAyCisr c3RhdGljIGludCBfX1B5eF9pbm5lcl9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMyKFB5T2Jq ZWN0ICplcnIsIFB5T2JqZWN0KiBleGNfdHlwZTEsIFB5T2JqZWN0KiBleGNfdHlwZTIpIHsKKysg ICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwgKnZhbHVlLCAqdGI7CisrICAgIGludCByZXM7CisrICAg IF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQorKyAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fz c2lnbgorKyAgICBfX1B5eF9FcnJGZXRjaCgmZXhjZXB0aW9uLCAmdmFsdWUsICZ0Yik7CisrICAg IHJlcyA9IGV4Y190eXBlMSA/IFB5T2JqZWN0X0lzU3ViY2xhc3MoZXJyLCBleGNfdHlwZTEpIDog MDsKKysgICAgaWYgKHVubGlrZWx5KHJlcyA9PSAtMSkpIHsKKysgICAgICAgIFB5RXJyX1dyaXRl VW5yYWlzYWJsZShlcnIpOworKyAgICAgICAgcmVzID0gMDsKKysgICAgfQorKyAgICBpZiAoIXJl cykgeworKyAgICAgICAgcmVzID0gUHlPYmplY3RfSXNTdWJjbGFzcyhlcnIsIGV4Y190eXBlMik7 CisrICAgICAgICBpZiAodW5saWtlbHkocmVzID09IC0xKSkgeworKyAgICAgICAgICAgIFB5RXJy X1dyaXRlVW5yYWlzYWJsZShlcnIpOworKyAgICAgICAgICAgIHJlcyA9IDA7CisgICAgICAgICB9 CistICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorLSAgICAgICAgICAg ICAgICAgICAgICAgICJtZXRhY2xhc3MgY29uZmxpY3Q6ICIKKy0gICAgICAgICAgICAgICAgICAg ICAgICAidGhlIG1ldGFjbGFzcyBvZiBhIGRlcml2ZWQgY2xhc3MgIgorLSAgICAgICAgICAgICAg ICAgICAgICAgICJtdXN0IGJlIGEgKG5vbi1zdHJpY3QpIHN1YmNsYXNzICIKKy0gICAgICAgICAg ICAgICAgICAgICAgICAib2YgdGhlIG1ldGFjbGFzc2VzIG9mIGFsbCBpdHMgYmFzZXMiKTsKKy0g ICAgICAgIHJldHVybiBOVUxMOworICAgICB9CistICAgIGlmICghbWV0YWNsYXNzKSB7CistI2lm IFBZX01BSk9SX1ZFUlNJT04gPCAzCistICAgICAgICBtZXRhY2xhc3MgPSAmUHlDbGFzc19UeXBl OworKyAgICBfX1B5eF9FcnJSZXN0b3JlKGV4Y2VwdGlvbiwgdmFsdWUsIHRiKTsKKysgICAgcmV0 dXJuIHJlczsKKyt9CisgI2Vsc2UKKy0gICAgICAgIG1ldGFjbGFzcyA9ICZQeVR5cGVfVHlwZTsK Ky0jZW5kaWYKKytzdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQgX19QeXhfaW5uZXJfUHlFcnJfR2l2 ZW5FeGNlcHRpb25NYXRjaGVzMihQeU9iamVjdCAqZXJyLCBQeU9iamVjdCogZXhjX3R5cGUxLCBQ eU9iamVjdCAqZXhjX3R5cGUyKSB7CisrICAgIGludCByZXMgPSBleGNfdHlwZTEgPyBfX1B5eF9J c1N1YnR5cGUoKFB5VHlwZU9iamVjdCopZXJyLCAoUHlUeXBlT2JqZWN0KilleGNfdHlwZTEpIDog MDsKKysgICAgaWYgKCFyZXMpIHsKKysgICAgICAgIHJlcyA9IF9fUHl4X0lzU3VidHlwZSgoUHlU eXBlT2JqZWN0KillcnIsIChQeVR5cGVPYmplY3QqKWV4Y190eXBlMik7CisgICAgIH0KKy0gICAg UHlfSU5DUkVGKChQeU9iamVjdCopIG1ldGFjbGFzcyk7CistICAgIHJldHVybiAoUHlPYmplY3Qq KSBtZXRhY2xhc3M7CisrICAgIHJldHVybiByZXM7CisgfQorLQorLS8qIFB5M0NsYXNzQ3JlYXRl ICovCistc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9QeTNNZXRhY2xhc3NQcmVwYXJlKFB5T2JqZWN0 ICptZXRhY2xhc3MsIFB5T2JqZWN0ICpiYXNlcywgUHlPYmplY3QgKm5hbWUsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpxdWFsbmFtZSwgUHlP YmplY3QgKm1rdywgUHlPYmplY3QgKm1vZG5hbWUsIFB5T2JqZWN0ICpkb2MpIHsKKy0gICAgUHlP YmplY3QgKm5zOworLSAgICBpZiAobWV0YWNsYXNzKSB7CistICAgICAgICBQeU9iamVjdCAqcHJl cCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIobWV0YWNsYXNzLCBfX3B5eF9uX3NfcHJlcGFy ZSk7CistICAgICAgICBpZiAocHJlcCkgeworLSAgICAgICAgICAgIFB5T2JqZWN0ICpwYXJncyA9 IFB5VHVwbGVfUGFjaygyLCBuYW1lLCBiYXNlcyk7CistICAgICAgICAgICAgaWYgKHVubGlrZWx5 KCFwYXJncykpIHsKKy0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHByZXApOworLSAgICAgICAg ICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAgICAgICAgICB9CistICAgICAgICAgICAgbnMgPSBQ eU9iamVjdF9DYWxsKHByZXAsIHBhcmdzLCBta3cpOworLSAgICAgICAgICAgIFB5X0RFQ1JFRihw cmVwKTsKKy0gICAgICAgICAgICBQeV9ERUNSRUYocGFyZ3MpOworKyNlbmRpZgorK3N0YXRpYyBp bnQgX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzVHVwbGUoUHlPYmplY3QgKmV4Y190 eXBlLCBQeU9iamVjdCAqdHVwbGUpIHsKKysgICAgUHlfc3NpemVfdCBpLCBuOworKyAgICBhc3Nl cnQoUHlFeGNlcHRpb25DbGFzc19DaGVjayhleGNfdHlwZSkpOworKyAgICBuID0gUHlUdXBsZV9H RVRfU0laRSh0dXBsZSk7CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMworKyAgICBmb3IgKGk9 MDsgaTxuOyBpKyspIHsKKysgICAgICAgIGlmIChleGNfdHlwZSA9PSBQeVR1cGxlX0dFVF9JVEVN KHR1cGxlLCBpKSkgcmV0dXJuIDE7CisrICAgIH0KKysjZW5kaWYKKysgICAgZm9yIChpPTA7IGk8 bjsgaSsrKSB7CisrICAgICAgICBQeU9iamVjdCAqdCA9IFB5VHVwbGVfR0VUX0lURU0odHVwbGUs IGkpOworKyAgICAgICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAgICAgICBpZiAobGlr ZWx5KGV4Y190eXBlID09IHQpKSByZXR1cm4gMTsKKysgICAgICAgICNlbmRpZgorKyAgICAgICAg aWYgKGxpa2VseShQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKHQpKSkgeworKyAgICAgICAgICAgIGlm IChfX1B5eF9pbm5lcl9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMyKGV4Y190eXBlLCBOVUxM LCB0KSkgcmV0dXJuIDE7CisgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIGlmICh1bmxp a2VseSghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpKQorLSAg ICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwor LSAgICAgICAgICAgIG5zID0gUHlEaWN0X05ldygpOworICAgICAgICAgfQorLSAgICB9IGVsc2Ug eworLSAgICAgICAgbnMgPSBQeURpY3RfTmV3KCk7CisgICAgIH0KKy0gICAgaWYgKHVubGlrZWx5 KCFucykpCistICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAgaWYgKHVubGlrZWx5KFB5T2JqZWN0 X1NldEl0ZW0obnMsIF9fcHl4X25fc19tb2R1bGUsIG1vZG5hbWUpIDwgMCkpIGdvdG8gYmFkOwor LSAgICBpZiAodW5saWtlbHkoUHlPYmplY3RfU2V0SXRlbShucywgX19weXhfbl9zX3F1YWxuYW1l LCBxdWFsbmFtZSkgPCAwKSkgZ290byBiYWQ7CistICAgIGlmICh1bmxpa2VseShkb2MgJiYgUHlP YmplY3RfU2V0SXRlbShucywgX19weXhfbl9zX2RvYywgZG9jKSA8IDApKSBnb3RvIGJhZDsKKy0g ICAgcmV0dXJuIG5zOworLWJhZDoKKy0gICAgUHlfREVDUkVGKG5zKTsKKy0gICAgcmV0dXJuIE5V TEw7CisrICAgIHJldHVybiAwOworIH0KKy1zdGF0aWMgUHlPYmplY3QgKl9fUHl4X1B5M0NsYXNz Q3JlYXRlKFB5T2JqZWN0ICptZXRhY2xhc3MsIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqYmFz ZXMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGlj dCwgUHlPYmplY3QgKm1rdywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBjYWxjdWxhdGVfbWV0YWNsYXNzLCBpbnQgYWxsb3dfcHkyX21ldGFjbGFzcykgeworLSAg ICBQeU9iamVjdCAqcmVzdWx0LCAqbWFyZ3M7CistICAgIFB5T2JqZWN0ICpvd25lZF9tZXRhY2xh c3MgPSBOVUxMOworLSAgICBpZiAoYWxsb3dfcHkyX21ldGFjbGFzcykgeworLSAgICAgICAgb3du ZWRfbWV0YWNsYXNzID0gUHlPYmplY3RfR2V0SXRlbShkaWN0LCBfX3B5eF9uX3NfbWV0YWNsYXNz KTsKKy0gICAgICAgIGlmIChvd25lZF9tZXRhY2xhc3MpIHsKKy0gICAgICAgICAgICBtZXRhY2xh c3MgPSBvd25lZF9tZXRhY2xhc3M7CistICAgICAgICB9IGVsc2UgaWYgKGxpa2VseShQeUVycl9F eGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkpIHsKKy0gICAgICAgICAgICBQeUVycl9D bGVhcigpOworK3N0YXRpYyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9QeUVycl9HaXZlbkV4Y2Vw dGlvbk1hdGNoZXMoUHlPYmplY3QgKmVyciwgUHlPYmplY3QqIGV4Y190eXBlKSB7CisrICAgIGlm IChsaWtlbHkoZXJyID09IGV4Y190eXBlKSkgcmV0dXJuIDE7CisrICAgIGlmIChsaWtlbHkoUHlF eGNlcHRpb25DbGFzc19DaGVjayhlcnIpKSkgeworKyAgICAgICAgaWYgKGxpa2VseShQeUV4Y2Vw dGlvbkNsYXNzX0NoZWNrKGV4Y190eXBlKSkpIHsKKysgICAgICAgICAgICByZXR1cm4gX19QeXhf aW5uZXJfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzMihlcnIsIE5VTEwsIGV4Y190eXBlKTsK KysgICAgICAgIH0gZWxzZSBpZiAobGlrZWx5KFB5VHVwbGVfQ2hlY2soZXhjX3R5cGUpKSkgewor KyAgICAgICAgICAgIHJldHVybiBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXNUdXBs ZShlcnIsIGV4Y190eXBlKTsKKyAgICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgcmV0dXJu IE5VTEw7CisgICAgICAgICB9CisgICAgIH0KKy0gICAgaWYgKGNhbGN1bGF0ZV9tZXRhY2xhc3Mg JiYgKCFtZXRhY2xhc3MgfHwgUHlUeXBlX0NoZWNrKG1ldGFjbGFzcykpKSB7CistICAgICAgICBt ZXRhY2xhc3MgPSBfX1B5eF9DYWxjdWxhdGVNZXRhY2xhc3MoKFB5VHlwZU9iamVjdCopIG1ldGFj bGFzcywgYmFzZXMpOworLSAgICAgICAgUHlfWERFQ1JFRihvd25lZF9tZXRhY2xhc3MpOworLSAg ICAgICAgaWYgKHVubGlrZWx5KCFtZXRhY2xhc3MpKQorLSAgICAgICAgICAgIHJldHVybiBOVUxM OworLSAgICAgICAgb3duZWRfbWV0YWNsYXNzID0gbWV0YWNsYXNzOworLSAgICB9CistICAgIG1h cmdzID0gUHlUdXBsZV9QYWNrKDMsIG5hbWUsIGJhc2VzLCBkaWN0KTsKKy0gICAgaWYgKHVubGlr ZWx5KCFtYXJncykpIHsKKy0gICAgICAgIHJlc3VsdCA9IE5VTEw7CistICAgIH0gZWxzZSB7Cist ICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsKG1ldGFjbGFzcywgbWFyZ3MsIG1rdyk7Cist ICAgICAgICBQeV9ERUNSRUYobWFyZ3MpOworKyAgICByZXR1cm4gUHlFcnJfR2l2ZW5FeGNlcHRp b25NYXRjaGVzKGVyciwgZXhjX3R5cGUpOworK30KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQg X19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzMihQeU9iamVjdCAqZXJyLCBQeU9iamVj dCAqZXhjX3R5cGUxLCBQeU9iamVjdCAqZXhjX3R5cGUyKSB7CisrICAgIGFzc2VydChQeUV4Y2Vw dGlvbkNsYXNzX0NoZWNrKGV4Y190eXBlMSkpOworKyAgICBhc3NlcnQoUHlFeGNlcHRpb25DbGFz c19DaGVjayhleGNfdHlwZTIpKTsKKysgICAgaWYgKGxpa2VseShlcnIgPT0gZXhjX3R5cGUxIHx8 IGVyciA9PSBleGNfdHlwZTIpKSByZXR1cm4gMTsKKysgICAgaWYgKGxpa2VseShQeUV4Y2VwdGlv bkNsYXNzX0NoZWNrKGVycikpKSB7CisrICAgICAgICByZXR1cm4gX19QeXhfaW5uZXJfUHlFcnJf R2l2ZW5FeGNlcHRpb25NYXRjaGVzMihlcnIsIGV4Y190eXBlMSwgZXhjX3R5cGUyKTsKKyAgICAg fQorLSAgICBQeV9YREVDUkVGKG93bmVkX21ldGFjbGFzcyk7CistICAgIHJldHVybiByZXN1bHQ7 CisrICAgIHJldHVybiAoUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGVyciwgZXhjX3R5cGUx KSB8fCBQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoZXJyLCBleGNfdHlwZTIpKTsKKyB9Cisr I2VuZGlmCisgCistLyogR2V0TmFtZUluQ2xhc3MgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fUHl4 X0dldEdsb2JhbE5hbWVBZnRlckF0dHJpYnV0ZUxvb2t1cChQeU9iamVjdCAqbmFtZSkgeworLSAg ICBQeU9iamVjdCAqcmVzdWx0OworLSAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKKy0g ICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24KKy0gICAgaWYgKHVubGlrZWx5KCFfX1B5eF9Q eUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkpCistICAgICAgICBy ZXR1cm4gTlVMTDsKKy0gICAgX19QeXhfUHlFcnJfQ2xlYXIoKTsKKy0gICAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZVVuY2FjaGVkKHJlc3VsdCwgbmFtZSk7CistICAgIHJldHVybiByZXN1bHQ7 CistfQorLXN0YXRpYyBQeU9iamVjdCAqX19QeXhfX0dldE5hbWVJbkNsYXNzKFB5T2JqZWN0ICpu bXNwYWNlLCBQeU9iamVjdCAqbmFtZSkgeworLSAgICBQeU9iamVjdCAqcmVzdWx0OworLSAgICBy ZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG5tc3BhY2UsIG5hbWUpOworLSAgICBp ZiAoIXJlc3VsdCkgeworLSAgICAgICAgcmVzdWx0ID0gX19QeXhfR2V0R2xvYmFsTmFtZUFmdGVy QXR0cmlidXRlTG9va3VwKG5hbWUpOworKy8qIEV4dFR5cGVUZXN0ICovCisrc3RhdGljIENZVEhP Tl9JTkxJTkUgaW50IF9fUHl4X1R5cGVUZXN0KFB5T2JqZWN0ICpvYmosIFB5VHlwZU9iamVjdCAq dHlwZSkgeworKyAgICBpZiAodW5saWtlbHkoIXR5cGUpKSB7CisrICAgICAgICBQeUVycl9TZXRT dHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJNaXNzaW5nIHR5cGUgb2JqZWN0Iik7CisrICAgICAg ICByZXR1cm4gMDsKKyAgICAgfQorLSAgICByZXR1cm4gcmVzdWx0OworKyAgICBpZiAobGlrZWx5 KF9fUHl4X1R5cGVDaGVjayhvYmosIHR5cGUpKSkKKysgICAgICAgIHJldHVybiAxOworKyAgICBQ eUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgJS4yMDBzIHRvICUu MjAwcyIsCisrICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUsIHR5cGUtPnRw X25hbWUpOworKyAgICByZXR1cm4gMDsKKyB9CisgCistLyogQ0xpbmVJblRyYWNlYmFjayAqLwor LSNpZm5kZWYgQ1lUSE9OX0NMSU5FX0lOX1RSQUNFQkFDSworLXN0YXRpYyBpbnQgX19QeXhfQ0xp bmVGb3JUcmFjZWJhY2soQ1lUSE9OX05DUF9VTlVTRUQgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBp bnQgY19saW5lKSB7CistICAgIFB5T2JqZWN0ICp1c2VfY2xpbmU7CistICAgIFB5T2JqZWN0ICpw dHlwZSwgKnB2YWx1ZSwgKnB0cmFjZWJhY2s7CistI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZ VEhPTgorLSAgICBQeU9iamVjdCAqKmN5dGhvbl9ydW50aW1lX2RpY3Q7CistI2VuZGlmCistICAg IGlmICh1bmxpa2VseSghX19weXhfY3l0aG9uX3J1bnRpbWUpKSB7CistICAgICAgICByZXR1cm4g Y19saW5lOworLSAgICB9CistICAgIF9fUHl4X0VyckZldGNoSW5TdGF0ZSh0c3RhdGUsICZwdHlw ZSwgJnB2YWx1ZSwgJnB0cmFjZWJhY2spOworLSNpZiBDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRI T04KKy0gICAgY3l0aG9uX3J1bnRpbWVfZGljdCA9IF9QeU9iamVjdF9HZXREaWN0UHRyKF9fcHl4 X2N5dGhvbl9ydW50aW1lKTsKKy0gICAgaWYgKGxpa2VseShjeXRob25fcnVudGltZV9kaWN0KSkg eworLSAgICAgICAgX19QWVhfUFlfRElDVF9MT09LVVBfSUZfTU9ESUZJRUQoCistICAgICAgICAg ICAgdXNlX2NsaW5lLCAqY3l0aG9uX3J1bnRpbWVfZGljdCwKKy0gICAgICAgICAgICBfX1B5eF9Q eURpY3RfR2V0SXRlbVN0cigqY3l0aG9uX3J1bnRpbWVfZGljdCwgX19weXhfbl9zX2NsaW5lX2lu X3RyYWNlYmFjaykpCistICAgIH0gZWxzZQorLSNlbmRpZgorLSAgICB7CistICAgICAgUHlPYmpl Y3QgKnVzZV9jbGluZV9vYmogPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X2N5dGhv bl9ydW50aW1lLCBfX3B5eF9uX3NfY2xpbmVfaW5fdHJhY2ViYWNrKTsKKy0gICAgICBpZiAodXNl X2NsaW5lX29iaikgeworLSAgICAgICAgdXNlX2NsaW5lID0gUHlPYmplY3RfTm90KHVzZV9jbGlu ZV9vYmopID8gUHlfRmFsc2UgOiBQeV9UcnVlOworLSAgICAgICAgUHlfREVDUkVGKHVzZV9jbGlu ZV9vYmopOworLSAgICAgIH0gZWxzZSB7CistICAgICAgICBQeUVycl9DbGVhcigpOworLSAgICAg ICAgdXNlX2NsaW5lID0gTlVMTDsKKy0gICAgICB9CistICAgIH0KKy0gICAgaWYgKCF1c2VfY2xp bmUpIHsKKy0gICAgICAgIGNfbGluZSA9IDA7CistICAgICAgICBQeU9iamVjdF9TZXRBdHRyKF9f cHl4X2N5dGhvbl9ydW50aW1lLCBfX3B5eF9uX3NfY2xpbmVfaW5fdHJhY2ViYWNrLCBQeV9GYWxz ZSk7CistICAgIH0KKy0gICAgZWxzZSBpZiAodXNlX2NsaW5lID09IFB5X0ZhbHNlIHx8ICh1c2Vf Y2xpbmUgIT0gUHlfVHJ1ZSAmJiBQeU9iamVjdF9Ob3QodXNlX2NsaW5lKSAhPSAwKSkgeworLSAg ICAgICAgY19saW5lID0gMDsKKysvKiBEaWN0R2V0SXRlbSAqLworKyNpZiBQWV9NQUpPUl9WRVJT SU9OID49IDMgJiYgIUNZVEhPTl9DT01QSUxJTkdfSU5fUFlQWQorK3N0YXRpYyBQeU9iamVjdCAq X19QeXhfUHlEaWN0X0dldEl0ZW0oUHlPYmplY3QgKmQsIFB5T2JqZWN0KiBrZXkpIHsKKysgICAg UHlPYmplY3QgKnZhbHVlOworKyAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKGQs IGtleSk7CisrICAgIGlmICh1bmxpa2VseSghdmFsdWUpKSB7CisrICAgICAgICBpZiAoIVB5RXJy X09jY3VycmVkKCkpIHsKKysgICAgICAgICAgICBpZiAodW5saWtlbHkoUHlUdXBsZV9DaGVjayhr ZXkpKSkgeworKyAgICAgICAgICAgICAgICBQeU9iamVjdCogYXJncyA9IFB5VHVwbGVfUGFjaygx LCBrZXkpOworKyAgICAgICAgICAgICAgICBpZiAobGlrZWx5KGFyZ3MpKSB7CisrICAgICAgICAg ICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIGFyZ3MpOworKyAgICAg ICAgICAgICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworKyAgICAgICAgICAgICAgICB9CisrICAg ICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhj X0tleUVycm9yLCBrZXkpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIHJl dHVybiBOVUxMOworICAgICB9CistICAgIF9fUHl4X0VyclJlc3RvcmVJblN0YXRlKHRzdGF0ZSwg cHR5cGUsIHB2YWx1ZSwgcHRyYWNlYmFjayk7CistICAgIHJldHVybiBjX2xpbmU7CisrICAgIFB5 X0lOQ1JFRih2YWx1ZSk7CisrICAgIHJldHVybiB2YWx1ZTsKKyB9CisgI2VuZGlmCisgCistLyog Q29kZU9iamVjdENhY2hlICovCistc3RhdGljIGludCBfX3B5eF9iaXNlY3RfY29kZV9vYmplY3Rz KF9fUHl4X0NvZGVPYmplY3RDYWNoZUVudHJ5KiBlbnRyaWVzLCBpbnQgY291bnQsIGludCBjb2Rl X2xpbmUpIHsKKy0gICAgaW50IHN0YXJ0ID0gMCwgbWlkID0gMCwgZW5kID0gY291bnQgLSAxOwor LSAgICBpZiAoZW5kID49IDAgJiYgY29kZV9saW5lID4gZW50cmllc1tlbmRdLmNvZGVfbGluZSkg eworLSAgICAgICAgcmV0dXJuIGNvdW50OworLSAgICB9CistICAgIHdoaWxlIChzdGFydCA8IGVu ZCkgeworLSAgICAgICAgbWlkID0gc3RhcnQgKyAoZW5kIC0gc3RhcnQpIC8gMjsKKy0gICAgICAg IGlmIChjb2RlX2xpbmUgPCBlbnRyaWVzW21pZF0uY29kZV9saW5lKSB7CistICAgICAgICAgICAg ZW5kID0gbWlkOworLSAgICAgICAgfSBlbHNlIGlmIChjb2RlX2xpbmUgPiBlbnRyaWVzW21pZF0u Y29kZV9saW5lKSB7CistICAgICAgICAgICAgIHN0YXJ0ID0gbWlkICsgMTsKKysvKiBSYWlzZVRv b01hbnlWYWx1ZXNUb1VucGFjayAqLworK3N0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgX19QeXhf UmFpc2VUb29NYW55VmFsdWVzRXJyb3IoUHlfc3NpemVfdCBleHBlY3RlZCkgeworKyAgICBQeUVy cl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKysgICAgICAgICAgICAgICAgICJ0b28gbWFueSB2 YWx1ZXMgdG8gdW5wYWNrIChleHBlY3RlZCAlIiBDWVRIT05fRk9STUFUX1NTSVpFX1QgImQpIiwg ZXhwZWN0ZWQpOworK30KKysKKysvKiBSYWlzZU5lZWRNb3JlVmFsdWVzVG9VbnBhY2sgKi8KKytz dGF0aWMgQ1lUSE9OX0lOTElORSB2b2lkIF9fUHl4X1JhaXNlTmVlZE1vcmVWYWx1ZXNFcnJvcihQ eV9zc2l6ZV90IGluZGV4KSB7CisrICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAor KyAgICAgICAgICAgICAgICAgIm5lZWQgbW9yZSB0aGFuICUiIENZVEhPTl9GT1JNQVRfU1NJWkVf VCAiZCB2YWx1ZSUuMXMgdG8gdW5wYWNrIiwKKysgICAgICAgICAgICAgICAgIGluZGV4LCAoaW5k ZXggPT0gMSkgPyAiIiA6ICJzIik7CisrfQorKworKy8qIEl0ZXJGaW5pc2ggKi8KKytzdGF0aWMg Q1lUSE9OX0lOTElORSBpbnQgX19QeXhfSXRlckZpbmlzaCh2b2lkKSB7CisrI2lmIENZVEhPTl9G QVNUX1RIUkVBRF9TVEFURQorKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBfX1B5eF9QeVRo cmVhZFN0YXRlX0N1cnJlbnQ7CisrICAgIFB5T2JqZWN0KiBleGNfdHlwZSA9IHRzdGF0ZS0+Y3Vy ZXhjX3R5cGU7CisrICAgIGlmICh1bmxpa2VseShleGNfdHlwZSkpIHsKKysgICAgICAgIGlmIChs aWtlbHkoX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGV4Y190eXBlLCBQeUV4Y19T dG9wSXRlcmF0aW9uKSkpIHsKKysgICAgICAgICAgICBQeU9iamVjdCAqZXhjX3ZhbHVlLCAqZXhj X3RiOworKyAgICAgICAgICAgIGV4Y192YWx1ZSA9IHRzdGF0ZS0+Y3VyZXhjX3ZhbHVlOworKyAg ICAgICAgICAgIGV4Y190YiA9IHRzdGF0ZS0+Y3VyZXhjX3RyYWNlYmFjazsKKysgICAgICAgICAg ICB0c3RhdGUtPmN1cmV4Y190eXBlID0gMDsKKysgICAgICAgICAgICB0c3RhdGUtPmN1cmV4Y192 YWx1ZSA9IDA7CisrICAgICAgICAgICAgdHN0YXRlLT5jdXJleGNfdHJhY2ViYWNrID0gMDsKKysg ICAgICAgICAgICBQeV9ERUNSRUYoZXhjX3R5cGUpOworKyAgICAgICAgICAgIFB5X1hERUNSRUYo ZXhjX3ZhbHVlKTsKKysgICAgICAgICAgICBQeV9YREVDUkVGKGV4Y190Yik7CisrICAgICAgICAg ICAgcmV0dXJuIDA7CisgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHJldHVybiBtaWQ7 CisrICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgfQorICAgICB9CistICAgIGlmIChj b2RlX2xpbmUgPD0gZW50cmllc1ttaWRdLmNvZGVfbGluZSkgeworLSAgICAgICAgcmV0dXJuIG1p ZDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIHJldHVybiBtaWQgKyAxOworKyAgICByZXR1cm4g MDsKKysjZWxzZQorKyAgICBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJyZWQoKSkpIHsKKysgICAg ICAgIGlmIChsaWtlbHkoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19TdG9wSXRlcmF0aW9u KSkpIHsKKysgICAgICAgICAgICBQeUVycl9DbGVhcigpOworKyAgICAgICAgICAgIHJldHVybiAw OworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9 CisgICAgIH0KKysgICAgcmV0dXJuIDA7CisrI2VuZGlmCisgfQorLXN0YXRpYyBQeUNvZGVPYmpl Y3QgKl9fcHl4X2ZpbmRfY29kZV9vYmplY3QoaW50IGNvZGVfbGluZSkgeworLSAgICBQeUNvZGVP YmplY3QqIGNvZGVfb2JqZWN0OworLSAgICBpbnQgcG9zOworLSAgICBpZiAodW5saWtlbHkoIWNv ZGVfbGluZSkgfHwgdW5saWtlbHkoIV9fcHl4X2NvZGVfY2FjaGUuZW50cmllcykpIHsKKy0gICAg ICAgIHJldHVybiBOVUxMOworLSAgICB9CistICAgIHBvcyA9IF9fcHl4X2Jpc2VjdF9jb2RlX29i amVjdHMoX19weXhfY29kZV9jYWNoZS5lbnRyaWVzLCBfX3B5eF9jb2RlX2NhY2hlLmNvdW50LCBj b2RlX2xpbmUpOworLSAgICBpZiAodW5saWtlbHkocG9zID49IF9fcHl4X2NvZGVfY2FjaGUuY291 bnQpIHx8IHVubGlrZWx5KF9fcHl4X2NvZGVfY2FjaGUuZW50cmllc1twb3NdLmNvZGVfbGluZSAh PSBjb2RlX2xpbmUpKSB7CistICAgICAgICByZXR1cm4gTlVMTDsKKysKKysvKiBVbnBhY2tJdGVt RW5kQ2hlY2sgKi8KKytzdGF0aWMgaW50IF9fUHl4X0l0ZXJuZXh0VW5wYWNrRW5kQ2hlY2soUHlP YmplY3QgKnJldHZhbCwgUHlfc3NpemVfdCBleHBlY3RlZCkgeworKyAgICBpZiAodW5saWtlbHko cmV0dmFsKSkgeworKyAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7CisrICAgICAgICBfX1B5eF9S YWlzZVRvb01hbnlWYWx1ZXNFcnJvcihleHBlY3RlZCk7CisrICAgICAgICByZXR1cm4gLTE7Cisr ICAgIH0gZWxzZSB7CisrICAgICAgICByZXR1cm4gX19QeXhfSXRlckZpbmlzaCgpOworICAgICB9 CistICAgIGNvZGVfb2JqZWN0ID0gX19weXhfY29kZV9jYWNoZS5lbnRyaWVzW3Bvc10uY29kZV9v YmplY3Q7CistICAgIFB5X0lOQ1JFRihjb2RlX29iamVjdCk7CistICAgIHJldHVybiBjb2RlX29i amVjdDsKKysgICAgcmV0dXJuIDA7CisgfQorLXN0YXRpYyB2b2lkIF9fcHl4X2luc2VydF9jb2Rl X29iamVjdChpbnQgY29kZV9saW5lLCBQeUNvZGVPYmplY3QqIGNvZGVfb2JqZWN0KSB7CistICAg IGludCBwb3MsIGk7CistICAgIF9fUHl4X0NvZGVPYmplY3RDYWNoZUVudHJ5KiBlbnRyaWVzID0g X19weXhfY29kZV9jYWNoZS5lbnRyaWVzOworLSAgICBpZiAodW5saWtlbHkoIWNvZGVfbGluZSkp IHsKKy0gICAgICAgIHJldHVybjsKKysKKysvKiBJbXBvcnQgKi8KKytzdGF0aWMgUHlPYmplY3Qg Kl9fUHl4X0ltcG9ydChQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKmZyb21fbGlzdCwgaW50IGxl dmVsKSB7CisrICAgIFB5T2JqZWN0ICplbXB0eV9saXN0ID0gMDsKKysgICAgUHlPYmplY3QgKm1v ZHVsZSA9IDA7CisrICAgIFB5T2JqZWN0ICpnbG9iYWxfZGljdCA9IDA7CisrICAgIFB5T2JqZWN0 ICplbXB0eV9kaWN0ID0gMDsKKysgICAgUHlPYmplY3QgKmxpc3Q7CisrICAgICNpZiBQWV9NQUpP Ul9WRVJTSU9OIDwgMworKyAgICBQeU9iamVjdCAqcHlfaW1wb3J0OworKyAgICBweV9pbXBvcnQg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X2IsIF9fcHl4X25fc19pbXBvcnQpOwor KyAgICBpZiAoIXB5X2ltcG9ydCkKKysgICAgICAgIGdvdG8gYmFkOworKyAgICAjZW5kaWYKKysg ICAgaWYgKGZyb21fbGlzdCkKKysgICAgICAgIGxpc3QgPSBmcm9tX2xpc3Q7CisrICAgIGVsc2Ug eworKyAgICAgICAgZW1wdHlfbGlzdCA9IFB5TGlzdF9OZXcoMCk7CisrICAgICAgICBpZiAoIWVt cHR5X2xpc3QpCisrICAgICAgICAgICAgZ290byBiYWQ7CisrICAgICAgICBsaXN0ID0gZW1wdHlf bGlzdDsKKyAgICAgfQorLSAgICBpZiAodW5saWtlbHkoIWVudHJpZXMpKSB7CistICAgICAgICBl bnRyaWVzID0gKF9fUHl4X0NvZGVPYmplY3RDYWNoZUVudHJ5KilQeU1lbV9NYWxsb2MoNjQqc2l6 ZW9mKF9fUHl4X0NvZGVPYmplY3RDYWNoZUVudHJ5KSk7CistICAgICAgICBpZiAobGlrZWx5KGVu dHJpZXMpKSB7CistICAgICAgICAgICAgX19weXhfY29kZV9jYWNoZS5lbnRyaWVzID0gZW50cmll czsKKy0gICAgICAgICAgICBfX3B5eF9jb2RlX2NhY2hlLm1heF9jb3VudCA9IDY0OworLSAgICAg ICAgICAgIF9fcHl4X2NvZGVfY2FjaGUuY291bnQgPSAxOworLSAgICAgICAgICAgIGVudHJpZXNb MF0uY29kZV9saW5lID0gY29kZV9saW5lOworLSAgICAgICAgICAgIGVudHJpZXNbMF0uY29kZV9v YmplY3QgPSBjb2RlX29iamVjdDsKKy0gICAgICAgICAgICBQeV9JTkNSRUYoY29kZV9vYmplY3Qp OworKyAgICBnbG9iYWxfZGljdCA9IFB5TW9kdWxlX0dldERpY3QoX19weXhfbSk7CisrICAgIGlm ICghZ2xvYmFsX2RpY3QpCisrICAgICAgICBnb3RvIGJhZDsKKysgICAgZW1wdHlfZGljdCA9IFB5 RGljdF9OZXcoKTsKKysgICAgaWYgKCFlbXB0eV9kaWN0KQorKyAgICAgICAgZ290byBiYWQ7Cisr ICAgIHsKKysgICAgICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgICAgICAgIGlmIChs ZXZlbCA9PSAtMSkgeworKyAgICAgICAgICAgIGlmICgoMSkgJiYgKHN0cmNocihfX1B5eF9NT0RV TEVfTkFNRSwgJy4nKSkpIHsKKysgICAgICAgICAgICAgICAgbW9kdWxlID0gUHlJbXBvcnRfSW1w b3J0TW9kdWxlTGV2ZWxPYmplY3QoCisrICAgICAgICAgICAgICAgICAgICBuYW1lLCBnbG9iYWxf ZGljdCwgZW1wdHlfZGljdCwgbGlzdCwgMSk7CisrICAgICAgICAgICAgICAgIGlmICghbW9kdWxl KSB7CisrICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlF eGNfSW1wb3J0RXJyb3IpKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFkOworKyAg ICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKysgICAgICAgICAgICAgICAgfQorKyAg ICAgICAgICAgIH0KKysgICAgICAgICAgICBsZXZlbCA9IDA7CisgICAgICAgICB9CistICAgICAg ICByZXR1cm47CistICAgIH0KKy0gICAgcG9zID0gX19weXhfYmlzZWN0X2NvZGVfb2JqZWN0cyhf X3B5eF9jb2RlX2NhY2hlLmVudHJpZXMsIF9fcHl4X2NvZGVfY2FjaGUuY291bnQsIGNvZGVfbGlu ZSk7CistICAgIGlmICgocG9zIDwgX19weXhfY29kZV9jYWNoZS5jb3VudCkgJiYgdW5saWtlbHko X19weXhfY29kZV9jYWNoZS5lbnRyaWVzW3Bvc10uY29kZV9saW5lID09IGNvZGVfbGluZSkpIHsK Ky0gICAgICAgIFB5Q29kZU9iamVjdCogdG1wID0gZW50cmllc1twb3NdLmNvZGVfb2JqZWN0Owor LSAgICAgICAgZW50cmllc1twb3NdLmNvZGVfb2JqZWN0ID0gY29kZV9vYmplY3Q7CistICAgICAg ICBQeV9ERUNSRUYodG1wKTsKKy0gICAgICAgIHJldHVybjsKKy0gICAgfQorLSAgICBpZiAoX19w eXhfY29kZV9jYWNoZS5jb3VudCA9PSBfX3B5eF9jb2RlX2NhY2hlLm1heF9jb3VudCkgeworLSAg ICAgICAgaW50IG5ld19tYXggPSBfX3B5eF9jb2RlX2NhY2hlLm1heF9jb3VudCArIDY0OworLSAg ICAgICAgZW50cmllcyA9IChfX1B5eF9Db2RlT2JqZWN0Q2FjaGVFbnRyeSopUHlNZW1fUmVhbGxv YygKKy0gICAgICAgICAgICBfX3B5eF9jb2RlX2NhY2hlLmVudHJpZXMsICgoc2l6ZV90KW5ld19t YXgpICogc2l6ZW9mKF9fUHl4X0NvZGVPYmplY3RDYWNoZUVudHJ5KSk7CistICAgICAgICBpZiAo dW5saWtlbHkoIWVudHJpZXMpKSB7CistICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgI2Vu ZGlmCisrICAgICAgICBpZiAoIW1vZHVsZSkgeworKyAgICAgICAgICAgICNpZiBQWV9NQUpPUl9W RVJTSU9OIDwgMworKyAgICAgICAgICAgIFB5T2JqZWN0ICpweV9sZXZlbCA9IFB5SW50X0Zyb21M b25nKGxldmVsKTsKKysgICAgICAgICAgICBpZiAoIXB5X2xldmVsKQorKyAgICAgICAgICAgICAg ICBnb3RvIGJhZDsKKysgICAgICAgICAgICBtb2R1bGUgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25P YmpBcmdzKHB5X2ltcG9ydCwKKysgICAgICAgICAgICAgICAgbmFtZSwgZ2xvYmFsX2RpY3QsIGVt cHR5X2RpY3QsIGxpc3QsIHB5X2xldmVsLCAoUHlPYmplY3QgKilOVUxMKTsKKysgICAgICAgICAg ICBQeV9ERUNSRUYocHlfbGV2ZWwpOworKyAgICAgICAgICAgICNlbHNlCisrICAgICAgICAgICAg bW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWxPYmplY3QoCisrICAgICAgICAgICAg ICAgIG5hbWUsIGdsb2JhbF9kaWN0LCBlbXB0eV9kaWN0LCBsaXN0LCBsZXZlbCk7CisrICAgICAg ICAgICAgI2VuZGlmCisgICAgICAgICB9CistICAgICAgICBfX3B5eF9jb2RlX2NhY2hlLmVudHJp ZXMgPSBlbnRyaWVzOworLSAgICAgICAgX19weXhfY29kZV9jYWNoZS5tYXhfY291bnQgPSBuZXdf bWF4OworLSAgICB9CistICAgIGZvciAoaT1fX3B5eF9jb2RlX2NhY2hlLmNvdW50OyBpPnBvczsg aS0tKSB7CistICAgICAgICBlbnRyaWVzW2ldID0gZW50cmllc1tpLTFdOworICAgICB9CistICAg IGVudHJpZXNbcG9zXS5jb2RlX2xpbmUgPSBjb2RlX2xpbmU7CistICAgIGVudHJpZXNbcG9zXS5j b2RlX29iamVjdCA9IGNvZGVfb2JqZWN0OworLSAgICBfX3B5eF9jb2RlX2NhY2hlLmNvdW50Kys7 CistICAgIFB5X0lOQ1JFRihjb2RlX29iamVjdCk7CistfQorLQorLS8qIEFkZFRyYWNlYmFjayAq LworLSNpbmNsdWRlICJjb21waWxlLmgiCistI2luY2x1ZGUgImZyYW1lb2JqZWN0LmgiCistI2lu Y2x1ZGUgInRyYWNlYmFjay5oIgorLXN0YXRpYyBQeUNvZGVPYmplY3QqIF9fUHl4X0NyZWF0ZUNv ZGVPYmplY3RGb3JUcmFjZWJhY2soCistICAgICAgICAgICAgY29uc3QgY2hhciAqZnVuY25hbWUs IGludCBjX2xpbmUsCistICAgICAgICAgICAgaW50IHB5X2xpbmUsIGNvbnN0IGNoYXIgKmZpbGVu YW1lKSB7CistICAgIFB5Q29kZU9iamVjdCAqcHlfY29kZSA9IDA7CistICAgIFB5T2JqZWN0ICpw eV9zcmNmaWxlID0gMDsKKy0gICAgUHlPYmplY3QgKnB5X2Z1bmNuYW1lID0gMDsKKytiYWQ6Cisg ICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLSAgICBweV9zcmNmaWxlID0gUHlTdHJpbmdf RnJvbVN0cmluZyhmaWxlbmFtZSk7CistICAgICNlbHNlCistICAgIHB5X3NyY2ZpbGUgPSBQeVVu aWNvZGVfRnJvbVN0cmluZyhmaWxlbmFtZSk7CisrICAgIFB5X1hERUNSRUYocHlfaW1wb3J0KTsK KyAgICAgI2VuZGlmCistICAgIGlmICghcHlfc3JjZmlsZSkgZ290byBiYWQ7CistICAgIGlmIChj X2xpbmUpIHsKKy0gICAgICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLSAgICAgICAgcHlf ZnVuY25hbWUgPSBQeVN0cmluZ19Gcm9tRm9ybWF0KCAiJXMgKCVzOiVkKSIsIGZ1bmNuYW1lLCBf X3B5eF9jZmlsZW5tLCBjX2xpbmUpOworLSAgICAgICAgI2Vsc2UKKy0gICAgICAgIHB5X2Z1bmNu YW1lID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoICIlcyAoJXM6JWQpIiwgZnVuY25hbWUsIF9fcHl4 X2NmaWxlbm0sIGNfbGluZSk7CistICAgICAgICAjZW5kaWYKKy0gICAgfQorLSAgICBlbHNlIHsK KysgICAgUHlfWERFQ1JFRihlbXB0eV9saXN0KTsKKysgICAgUHlfWERFQ1JFRihlbXB0eV9kaWN0 KTsKKysgICAgcmV0dXJuIG1vZHVsZTsKKyt9CisrCisrLyogSW1wb3J0RnJvbSAqLworK3N0YXRp YyBQeU9iamVjdCogX19QeXhfSW1wb3J0RnJvbShQeU9iamVjdCogbW9kdWxlLCBQeU9iamVjdCog bmFtZSkgeworKyAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KG1vZHVsZSwgbmFtZSk7CisrICAgIGlmICh1bmxpa2VseSghdmFsdWUpICYmIFB5RXJyX0V4Y2Vw dGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CisrICAgICAgICBQeUVycl9Gb3Jt YXQoUHlFeGNfSW1wb3J0RXJyb3IsCisgICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMK Ky0gICAgICAgIHB5X2Z1bmNuYW1lID0gUHlTdHJpbmdfRnJvbVN0cmluZyhmdW5jbmFtZSk7Cisr ICAgICAgICAgICAgImNhbm5vdCBpbXBvcnQgbmFtZSAlLjIzMHMiLCBQeVN0cmluZ19BU19TVFJJ TkcobmFtZSkpOworICAgICAgICAgI2Vsc2UKKy0gICAgICAgIHB5X2Z1bmNuYW1lID0gUHlVbmlj b2RlX0Zyb21TdHJpbmcoZnVuY25hbWUpOworKyAgICAgICAgICAgICJjYW5ub3QgaW1wb3J0IG5h bWUgJVMiLCBuYW1lKTsKKyAgICAgICAgICNlbmRpZgorICAgICB9CistICAgIGlmICghcHlfZnVu Y25hbWUpIGdvdG8gYmFkOworLSAgICBweV9jb2RlID0gX19QeXhfUHlDb2RlX05ldygKKy0gICAg ICAgIDAsCistICAgICAgICAwLAorLSAgICAgICAgMCwKKy0gICAgICAgIDAsCistICAgICAgICAw LAorLSAgICAgICAgX19weXhfZW1wdHlfYnl0ZXMsIC8qUHlPYmplY3QgKmNvZGUsKi8KKy0gICAg ICAgIF9fcHl4X2VtcHR5X3R1cGxlLCAvKlB5T2JqZWN0ICpjb25zdHMsKi8KKy0gICAgICAgIF9f cHl4X2VtcHR5X3R1cGxlLCAvKlB5T2JqZWN0ICpuYW1lcywqLworLSAgICAgICAgX19weXhfZW1w dHlfdHVwbGUsIC8qUHlPYmplY3QgKnZhcm5hbWVzLCovCistICAgICAgICBfX3B5eF9lbXB0eV90 dXBsZSwgLypQeU9iamVjdCAqZnJlZXZhcnMsKi8KKy0gICAgICAgIF9fcHl4X2VtcHR5X3R1cGxl LCAvKlB5T2JqZWN0ICpjZWxsdmFycywqLworLSAgICAgICAgcHlfc3JjZmlsZSwgICAvKlB5T2Jq ZWN0ICpmaWxlbmFtZSwqLworLSAgICAgICAgcHlfZnVuY25hbWUsICAvKlB5T2JqZWN0ICpuYW1l LCovCistICAgICAgICBweV9saW5lLAorLSAgICAgICAgX19weXhfZW1wdHlfYnl0ZXMgIC8qUHlP YmplY3QgKmxub3RhYiovCistICAgICk7CistICAgIFB5X0RFQ1JFRihweV9zcmNmaWxlKTsKKy0g ICAgUHlfREVDUkVGKHB5X2Z1bmNuYW1lKTsKKy0gICAgcmV0dXJuIHB5X2NvZGU7CistYmFkOgor LSAgICBQeV9YREVDUkVGKHB5X3NyY2ZpbGUpOworLSAgICBQeV9YREVDUkVGKHB5X2Z1bmNuYW1l KTsKKy0gICAgcmV0dXJuIE5VTEw7CisrICAgIHJldHVybiB2YWx1ZTsKKyB9Cistc3RhdGljIHZv aWQgX19QeXhfQWRkVHJhY2ViYWNrKGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCBpbnQgY19saW5lLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHlfbGluZSwgY29uc3QgY2hhciAq ZmlsZW5hbWUpIHsKKy0gICAgUHlDb2RlT2JqZWN0ICpweV9jb2RlID0gMDsKKy0gICAgUHlGcmFt ZU9iamVjdCAqcHlfZnJhbWUgPSAwOworLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBfX1B5 eF9QeVRocmVhZFN0YXRlX0N1cnJlbnQ7CistICAgIGlmIChjX2xpbmUpIHsKKy0gICAgICAgIGNf bGluZSA9IF9fUHl4X0NMaW5lRm9yVHJhY2ViYWNrKHRzdGF0ZSwgY19saW5lKTsKKysKKysvKiBI YXNBdHRyICovCisrc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4X0hhc0F0dHIoUHlPYmpl Y3QgKm8sIFB5T2JqZWN0ICpuKSB7CisrICAgIFB5T2JqZWN0ICpyOworKyAgICBpZiAodW5saWtl bHkoIV9fUHl4X1B5QmFzZVN0cmluZ19DaGVjayhuKSkpIHsKKysgICAgICAgIFB5RXJyX1NldFN0 cmluZyhQeUV4Y19UeXBlRXJyb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgImhhc2F0dHIo KTogYXR0cmlidXRlIG5hbWUgbXVzdCBiZSBzdHJpbmciKTsKKysgICAgICAgIHJldHVybiAtMTsK KyAgICAgfQorLSAgICBweV9jb2RlID0gX19weXhfZmluZF9jb2RlX29iamVjdChjX2xpbmUgPyAt Y19saW5lIDogcHlfbGluZSk7CistICAgIGlmICghcHlfY29kZSkgeworLSAgICAgICAgcHlfY29k ZSA9IF9fUHl4X0NyZWF0ZUNvZGVPYmplY3RGb3JUcmFjZWJhY2soCistICAgICAgICAgICAgZnVu Y25hbWUsIGNfbGluZSwgcHlfbGluZSwgZmlsZW5hbWUpOworLSAgICAgICAgaWYgKCFweV9jb2Rl KSBnb3RvIGJhZDsKKy0gICAgICAgIF9fcHl4X2luc2VydF9jb2RlX29iamVjdChjX2xpbmUgPyAt Y19saW5lIDogcHlfbGluZSwgcHlfY29kZSk7CisrICAgIHIgPSBfX1B5eF9HZXRBdHRyKG8sIG4p OworKyAgICBpZiAodW5saWtlbHkoIXIpKSB7CisrICAgICAgICBQeUVycl9DbGVhcigpOworKyAg ICAgICAgcmV0dXJuIDA7CisrICAgIH0gZWxzZSB7CisrICAgICAgICBQeV9ERUNSRUYocik7Cisr ICAgICAgICByZXR1cm4gMTsKKyAgICAgfQorLSAgICBweV9mcmFtZSA9IFB5RnJhbWVfTmV3KAor LSAgICAgICAgdHN0YXRlLCAgICAgICAgICAgIC8qUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCovCist ICAgICAgICBweV9jb2RlLCAgICAgICAgICAgLypQeUNvZGVPYmplY3QgKmNvZGUsKi8KKy0gICAg ICAgIF9fcHl4X2QsICAgIC8qUHlPYmplY3QgKmdsb2JhbHMsKi8KKy0gICAgICAgIDAgICAgICAg ICAgICAgICAgICAvKlB5T2JqZWN0ICpsb2NhbHMqLworLSAgICApOworLSAgICBpZiAoIXB5X2Zy YW1lKSBnb3RvIGJhZDsKKy0gICAgX19QeXhfUHlGcmFtZV9TZXRMaW5lTnVtYmVyKHB5X2ZyYW1l LCBweV9saW5lKTsKKy0gICAgUHlUcmFjZUJhY2tfSGVyZShweV9mcmFtZSk7CistYmFkOgorLSAg ICBQeV9YREVDUkVGKHB5X2NvZGUpOworLSAgICBQeV9YREVDUkVGKHB5X2ZyYW1lKTsKKyB9Cisg CistLyogQ0ludFRvUHkgKi8KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhf UHlJbnRfRnJvbV9pbnQoaW50IHZhbHVlKSB7CistICAgIGNvbnN0IGludCBuZWdfb25lID0gKGlu dCkgKChpbnQpIDAgLSAoaW50KSAxKSwgY29uc3RfemVybyA9IChpbnQpIDA7CistICAgIGNvbnN0 IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOworLSAgICBpZiAoaXNfdW5z aWduZWQpIHsKKy0gICAgICAgIGlmIChzaXplb2YoaW50KSA8IHNpemVvZihsb25nKSkgeworLSAg ICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworLSAgICAgICAg fSBlbHNlIGlmIChzaXplb2YoaW50KSA8PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKKy0gICAg ICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZh bHVlKTsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9m KGludCkgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKKy0gICAgICAgICAgICBy ZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcp IHZhbHVlKTsKKy0jZW5kaWYKKy0gICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIGlm IChzaXplb2YoaW50KSA8PSBzaXplb2YobG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlJ bnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAg ICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGludCkgPD0gc2l6ZW9mKFBZX0xPTkdfTE9ORykpIHsKKy0g ICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZygoUFlfTE9OR19MT05HKSB2YWx1 ZSk7CisrLyogUHlPYmplY3RfR2VuZXJpY0dldEF0dHJOb0RpY3QgKi8KKysjaWYgQ1lUSE9OX1VT RV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCAmJiBQWV9WRVJTSU9OX0hF WCA8IDB4MDMwNzAwMDAKKytzdGF0aWMgUHlPYmplY3QgKl9fUHl4X1JhaXNlR2VuZXJpY0dldEF0 dHJpYnV0ZUVycm9yKFB5VHlwZU9iamVjdCAqdHAsIFB5T2JqZWN0ICphdHRyX25hbWUpIHsKKysg ICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLAorKyNpZiBQWV9NQUpPUl9WRVJT SU9OID49IDMKKysgICAgICAgICAgICAgICAgICInJS41MHMnIG9iamVjdCBoYXMgbm8gYXR0cmli dXRlICclVSciLAorKyAgICAgICAgICAgICAgICAgdHAtPnRwX25hbWUsIGF0dHJfbmFtZSk7Cisr I2Vsc2UKKysgICAgICAgICAgICAgICAgICInJS41MHMnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRl ICclLjQwMHMnIiwKKysgICAgICAgICAgICAgICAgIHRwLT50cF9uYW1lLCBQeVN0cmluZ19BU19T VFJJTkcoYXR0cl9uYW1lKSk7CisgI2VuZGlmCistICAgICAgICB9CisrICAgIHJldHVybiBOVUxM OworK30KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlPYmplY3RfR2Vu ZXJpY0dldEF0dHJOb0RpY3QoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqIGF0dHJfbmFtZSkgewor KyAgICBQeU9iamVjdCAqZGVzY3I7CisrICAgIFB5VHlwZU9iamVjdCAqdHAgPSBQeV9UWVBFKG9i aik7CisrICAgIGlmICh1bmxpa2VseSghUHlTdHJpbmdfQ2hlY2soYXR0cl9uYW1lKSkpIHsKKysg ICAgICAgIHJldHVybiBQeU9iamVjdF9HZW5lcmljR2V0QXR0cihvYmosIGF0dHJfbmFtZSk7Cisr ICAgIH0KKysgICAgYXNzZXJ0KCF0cC0+dHBfZGljdG9mZnNldCk7CisrICAgIGRlc2NyID0gX1B5 VHlwZV9Mb29rdXAodHAsIGF0dHJfbmFtZSk7CisrICAgIGlmICh1bmxpa2VseSghZGVzY3IpKSB7 CisrICAgICAgICByZXR1cm4gX19QeXhfUmFpc2VHZW5lcmljR2V0QXR0cmlidXRlRXJyb3IodHAs IGF0dHJfbmFtZSk7CisgICAgIH0KKysgICAgUHlfSU5DUkVGKGRlc2NyKTsKKysgICAgI2lmIFBZ X01BSk9SX1ZFUlNJT04gPCAzCisrICAgIGlmIChsaWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUoUHlf VFlQRShkZXNjciksIFB5X1RQRkxBR1NfSEFWRV9DTEFTUykpKQorKyAgICAjZW5kaWYKKyAgICAg eworLSAgICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0bGUgPSAoaW50KSoodW5zaWduZWQgY2hh ciAqKSZvbmU7CistICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRlcyA9ICh1bnNpZ25lZCBjaGFy ICopJnZhbHVlOworLSAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShieXRlcywg c2l6ZW9mKGludCksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRs ZSwgIWlzX3Vuc2lnbmVkKTsKKysgICAgICAgIGRlc2NyZ2V0ZnVuYyBmID0gUHlfVFlQRShkZXNj ciktPnRwX2Rlc2NyX2dldDsKKysgICAgICAgIGlmICh1bmxpa2VseShmKSkgeworKyAgICAgICAg ICAgIFB5T2JqZWN0ICpyZXMgPSBmKGRlc2NyLCBvYmosIChQeU9iamVjdCAqKXRwKTsKKysgICAg ICAgICAgICBQeV9ERUNSRUYoZGVzY3IpOworKyAgICAgICAgICAgIHJldHVybiByZXM7CisrICAg ICAgICB9CisgICAgIH0KKysgICAgcmV0dXJuIGRlc2NyOworIH0KKysjZW5kaWYKKyAKKy0vKiBD SW50RnJvbVB5VmVyaWZ5ICovCistI2RlZmluZSBfX1BZWF9WRVJJRllfUkVUVVJOX0lOVCh0YXJn ZXRfdHlwZSwgZnVuY190eXBlLCBmdW5jX3ZhbHVlKVwKKy0gICAgX19QWVhfX1ZFUklGWV9SRVRV Uk5fSU5UKHRhcmdldF90eXBlLCBmdW5jX3R5cGUsIGZ1bmNfdmFsdWUsIDApCistI2RlZmluZSBf X1BZWF9WRVJJRllfUkVUVVJOX0lOVF9FWEModGFyZ2V0X3R5cGUsIGZ1bmNfdHlwZSwgZnVuY192 YWx1ZSlcCistICAgIF9fUFlYX19WRVJJRllfUkVUVVJOX0lOVCh0YXJnZXRfdHlwZSwgZnVuY190 eXBlLCBmdW5jX3ZhbHVlLCAxKQorLSNkZWZpbmUgX19QWVhfX1ZFUklGWV9SRVRVUk5fSU5UKHRh cmdldF90eXBlLCBmdW5jX3R5cGUsIGZ1bmNfdmFsdWUsIGV4YylcCistICAgIHtcCistICAgICAg ICBmdW5jX3R5cGUgdmFsdWUgPSBmdW5jX3ZhbHVlO1wKKy0gICAgICAgIGlmIChzaXplb2YodGFy Z2V0X3R5cGUpIDwgc2l6ZW9mKGZ1bmNfdHlwZSkpIHtcCistICAgICAgICAgICAgaWYgKHVubGlr ZWx5KHZhbHVlICE9IChmdW5jX3R5cGUpICh0YXJnZXRfdHlwZSkgdmFsdWUpKSB7XAorLSAgICAg ICAgICAgICAgICBmdW5jX3R5cGUgemVybyA9IDA7XAorLSAgICAgICAgICAgICAgICBpZiAoZXhj ICYmIHVubGlrZWx5KHZhbHVlID09IChmdW5jX3R5cGUpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkp XAorLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0YXJnZXRfdHlwZSkgLTE7XAorLSAgICAg ICAgICAgICAgICBpZiAoaXNfdW5zaWduZWQgJiYgdW5saWtlbHkodmFsdWUgPCB6ZXJvKSlcCist ICAgICAgICAgICAgICAgICAgICBnb3RvIHJhaXNlX25lZ19vdmVyZmxvdztcCistICAgICAgICAg ICAgICAgIGVsc2VcCistICAgICAgICAgICAgICAgICAgICBnb3RvIHJhaXNlX292ZXJmbG93O1wK Ky0gICAgICAgICAgICB9XAorLSAgICAgICAgfVwKKy0gICAgICAgIHJldHVybiAodGFyZ2V0X3R5 cGUpIHZhbHVlO1wKKysvKiBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciAqLworKyNpZiBDWVRIT05f VVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQICYmIFBZX1ZFUlNJT05f SEVYIDwgMHgwMzA3MDAwMAorK3N0YXRpYyBQeU9iamVjdCogX19QeXhfUHlPYmplY3RfR2VuZXJp Y0dldEF0dHIoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqIGF0dHJfbmFtZSkgeworKyAgICBpZiAo dW5saWtlbHkoUHlfVFlQRShvYmopLT50cF9kaWN0b2Zmc2V0KSkgeworKyAgICAgICAgcmV0dXJu IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKG9iaiwgYXR0cl9uYW1lKTsKKyAgICAgfQorKyAgICBy ZXR1cm4gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHJOb0RpY3Qob2JqLCBhdHRyX25hbWUp OworK30KKysjZW5kaWYKKyAKKy0vKiBDSW50VG9QeSAqLworLXN0YXRpYyBDWVRIT05fSU5MSU5F IFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChlbnVtIG1wdl9l dmVudF9pZCB2YWx1ZSkgeworLSAgICBjb25zdCBlbnVtIG1wdl9ldmVudF9pZCBuZWdfb25lID0g KGVudW0gbXB2X2V2ZW50X2lkKSAoKGVudW0gbXB2X2V2ZW50X2lkKSAwIC0gKGVudW0gbXB2X2V2 ZW50X2lkKSAxKSwgY29uc3RfemVybyA9IChlbnVtIG1wdl9ldmVudF9pZCkgMDsKKy0gICAgY29u c3QgaW50IGlzX3Vuc2lnbmVkID0gbmVnX29uZSA+IGNvbnN0X3plcm87CistICAgIGlmIChpc191 bnNpZ25lZCkgeworLSAgICAgICAgaWYgKHNpemVvZihlbnVtIG1wdl9ldmVudF9pZCkgPCBzaXpl b2YobG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZh bHVlKTsKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2V2ZW50X2lkKSA8PSBz aXplb2YodW5zaWduZWQgbG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21V bnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZhbHVlKTsKKy0jaWZkZWYgSEFWRV9MT05HX0xP TkcKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2V2ZW50X2lkKSA8PSBzaXpl b2YodW5zaWduZWQgUFlfTE9OR19MT05HKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdf RnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykgdmFsdWUpOworKy8q IFNldFZUYWJsZSAqLworK3N0YXRpYyBpbnQgX19QeXhfU2V0VnRhYmxlKFB5T2JqZWN0ICpkaWN0 LCB2b2lkICp2dGFibGUpIHsKKysjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMjA3MDAwMAorKyAg ICBQeU9iamVjdCAqb2IgPSBQeUNhcHN1bGVfTmV3KHZ0YWJsZSwgMCwgMCk7CisrI2Vsc2UKKysg ICAgUHlPYmplY3QgKm9iID0gUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKHZ0YWJsZSwgMCk7CisrI2Vu ZGlmCisrICAgIGlmICghb2IpCisrICAgICAgICBnb3RvIGJhZDsKKysgICAgaWYgKFB5RGljdF9T ZXRJdGVtKGRpY3QsIF9fcHl4X25fc19weXhfdnRhYmxlLCBvYikgPCAwKQorKyAgICAgICAgZ290 byBiYWQ7CisrICAgIFB5X0RFQ1JFRihvYik7CisrICAgIHJldHVybiAwOworK2JhZDoKKysgICAg UHlfWERFQ1JFRihvYik7CisrICAgIHJldHVybiAtMTsKKyt9CisrCisrLyogUHlPYmplY3RHZXRB dHRyU3RyTm9FcnJvciAqLworK3N0YXRpYyB2b2lkIF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHJf Q2xlYXJBdHRyaWJ1dGVFcnJvcih2b2lkKSB7CisrICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVj bGFyZQorKyAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorKyAgICBpZiAobGlrZWx5KF9f UHl4X1B5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSkKKysgICAg ICAgIF9fUHl4X1B5RXJyX0NsZWFyKCk7CisrfQorK3N0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2Jq ZWN0KiBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyTm9FcnJvcihQeU9iamVjdCogb2JqLCBQeU9i amVjdCogYXR0cl9uYW1lKSB7CisrICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisrI2lmIENZVEhPTl9D T01QSUxJTkdfSU5fQ1BZVEhPTiAmJiBDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgUFlfVkVSU0lP Tl9IRVggPj0gMHgwMzA3MDBCMQorKyAgICBQeVR5cGVPYmplY3QqIHRwID0gUHlfVFlQRShvYmop OworKyAgICBpZiAobGlrZWx5KHRwLT50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0 QXR0cikpIHsKKysgICAgICAgIHJldHVybiBfUHlPYmplY3RfR2VuZXJpY0dldEF0dHJXaXRoRGlj dChvYmosIGF0dHJfbmFtZSwgTlVMTCwgMSk7CisrICAgIH0KKysjZW5kaWYKKysgICAgcmVzdWx0 ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihvYmosIGF0dHJfbmFtZSk7CisrICAgIGlmICh1 bmxpa2VseSghcmVzdWx0KSkgeworKyAgICAgICAgX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cl9D bGVhckF0dHJpYnV0ZUVycm9yKCk7CisrICAgIH0KKysgICAgcmV0dXJuIHJlc3VsdDsKKyt9Cisr CisrLyogU2V0dXBSZWR1Y2UgKi8KKytzdGF0aWMgaW50IF9fUHl4X3NldHVwX3JlZHVjZV9pc19u YW1lZChQeU9iamVjdCogbWV0aCwgUHlPYmplY3QqIG5hbWUpIHsKKysgIGludCByZXQ7CisrICBQ eU9iamVjdCAqbmFtZV9hdHRyOworKyAgbmFtZV9hdHRyID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihtZXRoLCBfX3B5eF9uX3NfbmFtZSk7CisrICBpZiAobGlrZWx5KG5hbWVfYXR0cikpIHsK KysgICAgICByZXQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wobmFtZV9hdHRyLCBuYW1lLCBQ eV9FUSk7CisrICB9IGVsc2UgeworKyAgICAgIHJldCA9IC0xOworKyAgfQorKyAgaWYgKHVubGlr ZWx5KHJldCA8IDApKSB7CisrICAgICAgUHlFcnJfQ2xlYXIoKTsKKysgICAgICByZXQgPSAwOwor KyAgfQorKyAgUHlfWERFQ1JFRihuYW1lX2F0dHIpOworKyAgcmV0dXJuIHJldDsKKyt9Cisrc3Rh dGljIGludCBfX1B5eF9zZXR1cF9yZWR1Y2UoUHlPYmplY3QqIHR5cGVfb2JqKSB7CisrICAgIGlu dCByZXQgPSAwOworKyAgICBQeU9iamVjdCAqb2JqZWN0X3JlZHVjZSA9IE5VTEw7CisrICAgIFB5 T2JqZWN0ICpvYmplY3RfcmVkdWNlX2V4ID0gTlVMTDsKKysgICAgUHlPYmplY3QgKnJlZHVjZSA9 IE5VTEw7CisrICAgIFB5T2JqZWN0ICpyZWR1Y2VfZXggPSBOVUxMOworKyAgICBQeU9iamVjdCAq cmVkdWNlX2N5dGhvbiA9IE5VTEw7CisrICAgIFB5T2JqZWN0ICpzZXRzdGF0ZSA9IE5VTEw7Cisr ICAgIFB5T2JqZWN0ICpzZXRzdGF0ZV9jeXRob24gPSBOVUxMOworKyNpZiBDWVRIT05fVVNFX1BZ VFlQRV9MT09LVVAKKysgICAgaWYgKF9QeVR5cGVfTG9va3VwKChQeVR5cGVPYmplY3QqKXR5cGVf b2JqLCBfX3B5eF9uX3NfZ2V0c3RhdGUpKSBnb3RvIF9fUFlYX0dPT0Q7CisrI2Vsc2UKKysgICAg aWYgKFB5T2JqZWN0X0hhc0F0dHIodHlwZV9vYmosIF9fcHl4X25fc19nZXRzdGF0ZSkpIGdvdG8g X19QWVhfR09PRDsKKyAjZW5kaWYKKy0gICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKy0gICAgICAg IGlmIChzaXplb2YoZW51bSBtcHZfZXZlbnRfaWQpIDw9IHNpemVvZihsb25nKSkgeworLSAgICAg ICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworLSNpZmRlZiBIQVZF X0xPTkdfTE9ORworLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZXZlbnRfaWQp IDw9IHNpemVvZihQWV9MT05HX0xPTkcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19G cm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9ORykgdmFsdWUpOworKyNpZiBDWVRIT05fVVNFX1BZVFlQ RV9MT09LVVAKKysgICAgb2JqZWN0X3JlZHVjZV9leCA9IF9QeVR5cGVfTG9va3VwKCZQeUJhc2VP YmplY3RfVHlwZSwgX19weXhfbl9zX3JlZHVjZV9leCk7IGlmICghb2JqZWN0X3JlZHVjZV9leCkg Z290byBfX1BZWF9CQUQ7CisrI2Vsc2UKKysgICAgb2JqZWN0X3JlZHVjZV9leCA9IF9fUHl4X1B5 T2JqZWN0X0dldEF0dHJTdHIoKFB5T2JqZWN0KikmUHlCYXNlT2JqZWN0X1R5cGUsIF9fcHl4X25f c19yZWR1Y2VfZXgpOyBpZiAoIW9iamVjdF9yZWR1Y2VfZXgpIGdvdG8gX19QWVhfQkFEOworKyNl bmRpZgorKyAgICByZWR1Y2VfZXggPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKHR5cGVfb2Jq LCBfX3B5eF9uX3NfcmVkdWNlX2V4KTsgaWYgKHVubGlrZWx5KCFyZWR1Y2VfZXgpKSBnb3RvIF9f UFlYX0JBRDsKKysgICAgaWYgKHJlZHVjZV9leCA9PSBvYmplY3RfcmVkdWNlX2V4KSB7CisrI2lm IENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUAorKyAgICAgICAgb2JqZWN0X3JlZHVjZSA9IF9QeVR5 cGVfTG9va3VwKCZQeUJhc2VPYmplY3RfVHlwZSwgX19weXhfbl9zX3JlZHVjZSk7IGlmICghb2Jq ZWN0X3JlZHVjZSkgZ290byBfX1BZWF9CQUQ7CisrI2Vsc2UKKysgICAgICAgIG9iamVjdF9yZWR1 Y2UgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKChQeU9iamVjdCopJlB5QmFzZU9iamVjdF9U eXBlLCBfX3B5eF9uX3NfcmVkdWNlKTsgaWYgKCFvYmplY3RfcmVkdWNlKSBnb3RvIF9fUFlYX0JB RDsKKyAjZW5kaWYKKysgICAgICAgIHJlZHVjZSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIo dHlwZV9vYmosIF9fcHl4X25fc19yZWR1Y2UpOyBpZiAodW5saWtlbHkoIXJlZHVjZSkpIGdvdG8g X19QWVhfQkFEOworKyAgICAgICAgaWYgKHJlZHVjZSA9PSBvYmplY3RfcmVkdWNlIHx8IF9fUHl4 X3NldHVwX3JlZHVjZV9pc19uYW1lZChyZWR1Y2UsIF9fcHl4X25fc19yZWR1Y2VfY3l0aG9uKSkg eworKyAgICAgICAgICAgIHJlZHVjZV9jeXRob24gPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry Tm9FcnJvcih0eXBlX29iaiwgX19weXhfbl9zX3JlZHVjZV9jeXRob24pOworKyAgICAgICAgICAg IGlmIChsaWtlbHkocmVkdWNlX2N5dGhvbikpIHsKKysgICAgICAgICAgICAgICAgcmV0ID0gUHlE aWN0X1NldEl0ZW0oKChQeVR5cGVPYmplY3QqKXR5cGVfb2JqKS0+dHBfZGljdCwgX19weXhfbl9z X3JlZHVjZSwgcmVkdWNlX2N5dGhvbik7IGlmICh1bmxpa2VseShyZXQgPCAwKSkgZ290byBfX1BZ WF9CQUQ7CisrICAgICAgICAgICAgICAgIHJldCA9IFB5RGljdF9EZWxJdGVtKCgoUHlUeXBlT2Jq ZWN0Kil0eXBlX29iaiktPnRwX2RpY3QsIF9fcHl4X25fc19yZWR1Y2VfY3l0aG9uKTsgaWYgKHVu bGlrZWx5KHJldCA8IDApKSBnb3RvIF9fUFlYX0JBRDsKKysgICAgICAgICAgICB9IGVsc2UgaWYg KHJlZHVjZSA9PSBvYmplY3RfcmVkdWNlIHx8IFB5RXJyX09jY3VycmVkKCkpIHsKKysgICAgICAg ICAgICAgICAgZ290byBfX1BZWF9CQUQ7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHNl dHN0YXRlID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cih0eXBlX29iaiwgX19weXhfbl9zX3Nl dHN0YXRlKTsKKysgICAgICAgICAgICBpZiAoIXNldHN0YXRlKSBQeUVycl9DbGVhcigpOworKyAg ICAgICAgICAgIGlmICghc2V0c3RhdGUgfHwgX19QeXhfc2V0dXBfcmVkdWNlX2lzX25hbWVkKHNl dHN0YXRlLCBfX3B5eF9uX3Nfc2V0c3RhdGVfY3l0aG9uKSkgeworKyAgICAgICAgICAgICAgICBz ZXRzdGF0ZV9jeXRob24gPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyTm9FcnJvcih0eXBlX29i aiwgX19weXhfbl9zX3NldHN0YXRlX2N5dGhvbik7CisrICAgICAgICAgICAgICAgIGlmIChsaWtl bHkoc2V0c3RhdGVfY3l0aG9uKSkgeworKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gUHlEaWN0 X1NldEl0ZW0oKChQeVR5cGVPYmplY3QqKXR5cGVfb2JqKS0+dHBfZGljdCwgX19weXhfbl9zX3Nl dHN0YXRlLCBzZXRzdGF0ZV9jeXRob24pOyBpZiAodW5saWtlbHkocmV0IDwgMCkpIGdvdG8gX19Q WVhfQkFEOworKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gUHlEaWN0X0RlbEl0ZW0oKChQeVR5 cGVPYmplY3QqKXR5cGVfb2JqKS0+dHBfZGljdCwgX19weXhfbl9zX3NldHN0YXRlX2N5dGhvbik7 IGlmICh1bmxpa2VseShyZXQgPCAwKSkgZ290byBfX1BZWF9CQUQ7CisrICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoIXNldHN0YXRlIHx8IFB5RXJyX09jY3VycmVkKCkpIHsKKysgICAgICAgICAg ICAgICAgICAgIGdvdG8gX19QWVhfQkFEOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAg ICAgfQorKyAgICAgICAgICAgIFB5VHlwZV9Nb2RpZmllZCgoUHlUeXBlT2JqZWN0Kil0eXBlX29i aik7CisgICAgICAgICB9CisgICAgIH0KKy0gICAgeworLSAgICAgICAgaW50IG9uZSA9IDE7IGlu dCBsaXR0bGUgPSAoaW50KSoodW5zaWduZWQgY2hhciAqKSZvbmU7CistICAgICAgICB1bnNpZ25l ZCBjaGFyICpieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlOworLSAgICAgICAgcmV0dXJu IF9QeUxvbmdfRnJvbUJ5dGVBcnJheShieXRlcywgc2l6ZW9mKGVudW0gbXB2X2V2ZW50X2lkKSwK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0dGxlLCAhaXNfdW5zaWdu ZWQpOworLSAgICB9CisrICAgIGdvdG8gX19QWVhfR09PRDsKKytfX1BZWF9CQUQ6CisrICAgIGlm ICghUHlFcnJfT2NjdXJyZWQoKSkKKysgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1l RXJyb3IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBwaWNrbGluZyBmb3IgJXMiLCAoKFB5VHlwZU9i amVjdCopdHlwZV9vYmopLT50cF9uYW1lKTsKKysgICAgcmV0ID0gLTE7CisrX19QWVhfR09PRDoK KysjaWYgIUNZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUAorKyAgICBQeV9YREVDUkVGKG9iamVjdF9y ZWR1Y2UpOworKyAgICBQeV9YREVDUkVGKG9iamVjdF9yZWR1Y2VfZXgpOworKyNlbmRpZgorKyAg ICBQeV9YREVDUkVGKHJlZHVjZSk7CisrICAgIFB5X1hERUNSRUYocmVkdWNlX2V4KTsKKysgICAg UHlfWERFQ1JFRihyZWR1Y2VfY3l0aG9uKTsKKysgICAgUHlfWERFQ1JFRihzZXRzdGF0ZSk7Cisr ICAgIFB5X1hERUNSRUYoc2V0c3RhdGVfY3l0aG9uKTsKKysgICAgcmV0dXJuIHJldDsKKyB9Cisg CistLyogQ0ludFRvUHkgKi8KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhf UHlJbnRfRnJvbV91bnNpZ25lZF9sb25nKHVuc2lnbmVkIGxvbmcgdmFsdWUpIHsKKy0gICAgY29u c3QgdW5zaWduZWQgbG9uZyBuZWdfb25lID0gKHVuc2lnbmVkIGxvbmcpICgodW5zaWduZWQgbG9u ZykgMCAtICh1bnNpZ25lZCBsb25nKSAxKSwgY29uc3RfemVybyA9ICh1bnNpZ25lZCBsb25nKSAw OworLSAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsKKy0g ICAgaWYgKGlzX3Vuc2lnbmVkKSB7CistICAgICAgICBpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcp IDwgc2l6ZW9mKGxvbmcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChs b25nKSB2YWx1ZSk7CistICAgICAgICB9IGVsc2UgaWYgKHNpemVvZih1bnNpZ25lZCBsb25nKSA8 PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zy b21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZhbHVlKTsKKy0jaWZkZWYgSEFWRV9MT05H X0xPTkcKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIDw9IHNpemVv Zih1bnNpZ25lZCBQWV9MT05HX0xPTkcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19G cm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKSB2YWx1ZSk7CisrLyog Q2FsY3VsYXRlTWV0YWNsYXNzICovCisrc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9DYWxjdWxhdGVN ZXRhY2xhc3MoUHlUeXBlT2JqZWN0ICptZXRhY2xhc3MsIFB5T2JqZWN0ICpiYXNlcykgeworKyAg ICBQeV9zc2l6ZV90IGksIG5iYXNlcyA9IFB5VHVwbGVfR0VUX1NJWkUoYmFzZXMpOworKyAgICBm b3IgKGk9MDsgaSA8IG5iYXNlczsgaSsrKSB7CisrICAgICAgICBQeVR5cGVPYmplY3QgKnRtcHR5 cGU7CisrICAgICAgICBQeU9iamVjdCAqdG1wID0gUHlUdXBsZV9HRVRfSVRFTShiYXNlcywgaSk7 CisrICAgICAgICB0bXB0eXBlID0gUHlfVFlQRSh0bXApOworKyNpZiBQWV9NQUpPUl9WRVJTSU9O IDwgMworKyAgICAgICAgaWYgKHRtcHR5cGUgPT0gJlB5Q2xhc3NfVHlwZSkKKysgICAgICAgICAg ICBjb250aW51ZTsKKyAjZW5kaWYKKysgICAgICAgIGlmICghbWV0YWNsYXNzKSB7CisrICAgICAg ICAgICAgbWV0YWNsYXNzID0gdG1wdHlwZTsKKysgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg ICAgIH0KKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIGlmIChzaXplb2YodW5zaWduZWQgbG9uZykg PD0gc2l6ZW9mKGxvbmcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChs b25nKSB2YWx1ZSk7CistI2lmZGVmIEhBVkVfTE9OR19MT05HCistICAgICAgICB9IGVsc2UgaWYg KHNpemVvZih1bnNpZ25lZCBsb25nKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworLSAgICAg ICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsK Ky0jZW5kaWYKKysgICAgICAgIGlmIChQeVR5cGVfSXNTdWJ0eXBlKG1ldGFjbGFzcywgdG1wdHlw ZSkpCisrICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICBpZiAoUHlUeXBlX0lzU3VidHlw ZSh0bXB0eXBlLCBtZXRhY2xhc3MpKSB7CisrICAgICAgICAgICAgbWV0YWNsYXNzID0gdG1wdHlw ZTsKKysgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgIH0KKysgICAgICAgIFB5RXJyX1Nl dFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFj bGFzcyBjb25mbGljdDogIgorKyAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgbWV0YWNsYXNz IG9mIGEgZGVyaXZlZCBjbGFzcyAiCisrICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUg YSAobm9uLXN0cmljdCkgc3ViY2xhc3MgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICJvZiB0 aGUgbWV0YWNsYXNzZXMgb2YgYWxsIGl0cyBiYXNlcyIpOworKyAgICAgICAgcmV0dXJuIE5VTEw7 CisgICAgIH0KKy0gICAgeworLSAgICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0bGUgPSAoaW50 KSoodW5zaWduZWQgY2hhciAqKSZvbmU7CistICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRlcyA9 ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlOworLSAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5 dGVBcnJheShieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7CisrICAgIGlmICghbWV0 YWNsYXNzKSB7CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAgICAgICBtZXRhY2xhc3Mg PSAmUHlDbGFzc19UeXBlOworKyNlbHNlCisrICAgICAgICBtZXRhY2xhc3MgPSAmUHlUeXBlX1R5 cGU7CisrI2VuZGlmCisgICAgIH0KKysgICAgUHlfSU5DUkVGKChQeU9iamVjdCopIG1ldGFjbGFz cyk7CisrICAgIHJldHVybiAoUHlPYmplY3QqKSBtZXRhY2xhc3M7CisgfQorIAorLS8qIENJbnRU b1B5ICovCistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21f ZW51bV9fbXB2X2Vycm9yKGVudW0gbXB2X2Vycm9yIHZhbHVlKSB7CistICAgIGNvbnN0IGVudW0g bXB2X2Vycm9yIG5lZ19vbmUgPSAoZW51bSBtcHZfZXJyb3IpICgoZW51bSBtcHZfZXJyb3IpIDAg LSAoZW51bSBtcHZfZXJyb3IpIDEpLCBjb25zdF96ZXJvID0gKGVudW0gbXB2X2Vycm9yKSAwOwor LSAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsKKy0gICAg aWYgKGlzX3Vuc2lnbmVkKSB7CistICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X2Vycm9yKSA8 IHNpemVvZihsb25nKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9u ZykgdmFsdWUpOworLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZXJyb3IpIDw9 IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJv bVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUpOworLSNpZmRlZiBIQVZFX0xPTkdf TE9ORworLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZXJyb3IpIDw9IHNpemVv Zih1bnNpZ25lZCBQWV9MT05HX0xPTkcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19G cm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKSB2YWx1ZSk7CistI2Vu ZGlmCisrLyogUHkzQ2xhc3NDcmVhdGUgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fUHl4X1B5M01l dGFjbGFzc1ByZXBhcmUoUHlPYmplY3QgKm1ldGFjbGFzcywgUHlPYmplY3QgKmJhc2VzLCBQeU9i amVjdCAqbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHlPYmplY3QgKnF1YWxuYW1lLCBQeU9iamVjdCAqbWt3LCBQeU9iamVjdCAqbW9kbmFtZSwgUHlP YmplY3QgKmRvYykgeworKyAgICBQeU9iamVjdCAqbnM7CisrICAgIGlmIChtZXRhY2xhc3MpIHsK KysgICAgICAgIFB5T2JqZWN0ICpwcmVwID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihtZXRh Y2xhc3MsIF9fcHl4X25fc19wcmVwYXJlKTsKKysgICAgICAgIGlmIChwcmVwKSB7CisrICAgICAg ICAgICAgUHlPYmplY3QgKnBhcmdzID0gUHlUdXBsZV9QYWNrKDIsIG5hbWUsIGJhc2VzKTsKKysg ICAgICAgICAgICBpZiAodW5saWtlbHkoIXBhcmdzKSkgeworKyAgICAgICAgICAgICAgICBQeV9E RUNSRUYocHJlcCk7CisrICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgICAg IH0KKysgICAgICAgICAgICBucyA9IFB5T2JqZWN0X0NhbGwocHJlcCwgcGFyZ3MsIG1rdyk7Cisr ICAgICAgICAgICAgUHlfREVDUkVGKHByZXApOworKyAgICAgICAgICAgIFB5X0RFQ1JFRihwYXJn cyk7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGlmICh1bmxpa2VseSghUHlFcnJf RXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpKQorKyAgICAgICAgICAgICAg ICByZXR1cm4gTlVMTDsKKysgICAgICAgICAgICBQeUVycl9DbGVhcigpOworKyAgICAgICAgICAg IG5zID0gUHlEaWN0X05ldygpOworICAgICAgICAgfQorICAgICB9IGVsc2UgeworLSAgICAgICAg aWYgKHNpemVvZihlbnVtIG1wdl9lcnJvcikgPD0gc2l6ZW9mKGxvbmcpKSB7CistICAgICAgICAg ICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CistI2lmZGVmIEhBVkVfTE9O R19MT05HCistICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihlbnVtIG1wdl9lcnJvcikgPD0gc2l6 ZW9mKFBZX0xPTkdfTE9ORykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25n TG9uZygoUFlfTE9OR19MT05HKSB2YWx1ZSk7CistI2VuZGlmCistICAgICAgICB9CistICAgIH0K Ky0gICAgeworLSAgICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0bGUgPSAoaW50KSoodW5zaWdu ZWQgY2hhciAqKSZvbmU7CistICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRlcyA9ICh1bnNpZ25l ZCBjaGFyICopJnZhbHVlOworLSAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShi eXRlcywgc2l6ZW9mKGVudW0gbXB2X2Vycm9yKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGl0dGxlLCAhaXNfdW5zaWduZWQpOworKyAgICAgICAgbnMgPSBQeURpY3Rf TmV3KCk7CisgICAgIH0KKysgICAgaWYgKHVubGlrZWx5KCFucykpCisrICAgICAgICByZXR1cm4g TlVMTDsKKysgICAgaWYgKHVubGlrZWx5KFB5T2JqZWN0X1NldEl0ZW0obnMsIF9fcHl4X25fc19t b2R1bGUsIG1vZG5hbWUpIDwgMCkpIGdvdG8gYmFkOworKyAgICBpZiAodW5saWtlbHkoUHlPYmpl Y3RfU2V0SXRlbShucywgX19weXhfbl9zX3F1YWxuYW1lLCBxdWFsbmFtZSkgPCAwKSkgZ290byBi YWQ7CisrICAgIGlmICh1bmxpa2VseShkb2MgJiYgUHlPYmplY3RfU2V0SXRlbShucywgX19weXhf bl9zX2RvYywgZG9jKSA8IDApKSBnb3RvIGJhZDsKKysgICAgcmV0dXJuIG5zOworK2JhZDoKKysg ICAgUHlfREVDUkVGKG5zKTsKKysgICAgcmV0dXJuIE5VTEw7CisgfQorLQorLS8qIENJbnRUb1B5 ICovCistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21fZW51 bV9fbXB2X2xvZ19sZXZlbChlbnVtIG1wdl9sb2dfbGV2ZWwgdmFsdWUpIHsKKy0gICAgY29uc3Qg ZW51bSBtcHZfbG9nX2xldmVsIG5lZ19vbmUgPSAoZW51bSBtcHZfbG9nX2xldmVsKSAoKGVudW0g bXB2X2xvZ19sZXZlbCkgMCAtIChlbnVtIG1wdl9sb2dfbGV2ZWwpIDEpLCBjb25zdF96ZXJvID0g KGVudW0gbXB2X2xvZ19sZXZlbCkgMDsKKy0gICAgY29uc3QgaW50IGlzX3Vuc2lnbmVkID0gbmVn X29uZSA+IGNvbnN0X3plcm87CistICAgIGlmIChpc191bnNpZ25lZCkgeworLSAgICAgICAgaWYg KHNpemVvZihlbnVtIG1wdl9sb2dfbGV2ZWwpIDwgc2l6ZW9mKGxvbmcpKSB7CistICAgICAgICAg ICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CistICAgICAgICB9IGVsc2Ug aWYgKHNpemVvZihlbnVtIG1wdl9sb2dfbGV2ZWwpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkg eworLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQg bG9uZykgdmFsdWUpOworLSNpZmRlZiBIQVZFX0xPTkdfTE9ORworLSAgICAgICAgfSBlbHNlIGlm IChzaXplb2YoZW51bSBtcHZfbG9nX2xldmVsKSA8PSBzaXplb2YodW5zaWduZWQgUFlfTE9OR19M T05HKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmco KHVuc2lnbmVkIFBZX0xPTkdfTE9ORykgdmFsdWUpOworLSNlbmRpZgorK3N0YXRpYyBQeU9iamVj dCAqX19QeXhfUHkzQ2xhc3NDcmVhdGUoUHlPYmplY3QgKm1ldGFjbGFzcywgUHlPYmplY3QgKm5h bWUsIFB5T2JqZWN0ICpiYXNlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB5T2JqZWN0ICpkaWN0LCBQeU9iamVjdCAqbWt3LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGNhbGN1bGF0ZV9tZXRhY2xhc3MsIGludCBhbGxvd19weTJf bWV0YWNsYXNzKSB7CisrICAgIFB5T2JqZWN0ICpyZXN1bHQsICptYXJnczsKKysgICAgUHlPYmpl Y3QgKm93bmVkX21ldGFjbGFzcyA9IE5VTEw7CisrICAgIGlmIChhbGxvd19weTJfbWV0YWNsYXNz KSB7CisrICAgICAgICBvd25lZF9tZXRhY2xhc3MgPSBQeU9iamVjdF9HZXRJdGVtKGRpY3QsIF9f cHl4X25fc19tZXRhY2xhc3MpOworKyAgICAgICAgaWYgKG93bmVkX21ldGFjbGFzcykgeworKyAg ICAgICAgICAgIG1ldGFjbGFzcyA9IG93bmVkX21ldGFjbGFzczsKKysgICAgICAgIH0gZWxzZSBp ZiAobGlrZWx5KFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKSkgeworKyAg ICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAg IHJldHVybiBOVUxMOworICAgICAgICAgfQorKyAgICB9CisrICAgIGlmIChjYWxjdWxhdGVfbWV0 YWNsYXNzICYmICghbWV0YWNsYXNzIHx8IFB5VHlwZV9DaGVjayhtZXRhY2xhc3MpKSkgeworKyAg ICAgICAgbWV0YWNsYXNzID0gX19QeXhfQ2FsY3VsYXRlTWV0YWNsYXNzKChQeVR5cGVPYmplY3Qq KSBtZXRhY2xhc3MsIGJhc2VzKTsKKysgICAgICAgIFB5X1hERUNSRUYob3duZWRfbWV0YWNsYXNz KTsKKysgICAgICAgIGlmICh1bmxpa2VseSghbWV0YWNsYXNzKSkKKysgICAgICAgICAgICByZXR1 cm4gTlVMTDsKKysgICAgICAgIG93bmVkX21ldGFjbGFzcyA9IG1ldGFjbGFzczsKKysgICAgfQor KyAgICBtYXJncyA9IFB5VHVwbGVfUGFjaygzLCBuYW1lLCBiYXNlcywgZGljdCk7CisrICAgIGlm ICh1bmxpa2VseSghbWFyZ3MpKSB7CisrICAgICAgICByZXN1bHQgPSBOVUxMOworICAgICB9IGVs c2UgeworLSAgICAgICAgaWYgKHNpemVvZihlbnVtIG1wdl9sb2dfbGV2ZWwpIDw9IHNpemVvZihs b25nKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUp OworLSNpZmRlZiBIQVZFX0xPTkdfTE9ORworLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51 bSBtcHZfbG9nX2xldmVsKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworLSAgICAgICAgICAg IHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsKKy0jZW5k aWYKKy0gICAgICAgIH0KKysgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGwobWV0YWNsYXNz LCBtYXJncywgbWt3KTsKKysgICAgICAgIFB5X0RFQ1JFRihtYXJncyk7CisgICAgIH0KKy0gICAg eworLSAgICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0bGUgPSAoaW50KSoodW5zaWduZWQgY2hh ciAqKSZvbmU7CistICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRlcyA9ICh1bnNpZ25lZCBjaGFy ICopJnZhbHVlOworLSAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShieXRlcywg c2l6ZW9mKGVudW0gbXB2X2xvZ19sZXZlbCksCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpdHRsZSwgIWlzX3Vuc2lnbmVkKTsKKysgICAgUHlfWERFQ1JFRihvd25lZF9t ZXRhY2xhc3MpOworKyAgICByZXR1cm4gcmVzdWx0OworK30KKysKKysvKiBHZXROYW1lSW5DbGFz cyAqLworK3N0YXRpYyBQeU9iamVjdCAqX19QeXhfR2V0R2xvYmFsTmFtZUFmdGVyQXR0cmlidXRl TG9va3VwKFB5T2JqZWN0ICpuYW1lKSB7CisrICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisrICAgIF9f UHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQorKyAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2ln bgorKyAgICBpZiAodW5saWtlbHkoIV9fUHl4X1B5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNf QXR0cmlidXRlRXJyb3IpKSkKKysgICAgICAgIHJldHVybiBOVUxMOworKyAgICBfX1B5eF9QeUVy cl9DbGVhcigpOworKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lVW5jYWNoZWQocmVzdWx0 LCBuYW1lKTsKKysgICAgcmV0dXJuIHJlc3VsdDsKKyt9Cisrc3RhdGljIFB5T2JqZWN0ICpfX1B5 eF9fR2V0TmFtZUluQ2xhc3MoUHlPYmplY3QgKm5tc3BhY2UsIFB5T2JqZWN0ICpuYW1lKSB7Cisr ICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisrICAgIHJlc3VsdCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0 dHJTdHIobm1zcGFjZSwgbmFtZSk7CisrICAgIGlmICghcmVzdWx0KSB7CisrICAgICAgICByZXN1 bHQgPSBfX1B5eF9HZXRHbG9iYWxOYW1lQWZ0ZXJBdHRyaWJ1dGVMb29rdXAobmFtZSk7CisgICAg IH0KKysgICAgcmV0dXJuIHJlc3VsdDsKKyB9CisgCistLyogQ0ludFRvUHkgKi8KKy1zdGF0aWMg Q1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5kX2Zp bGVfcmVhc29uKGVudW0gbXB2X2VuZF9maWxlX3JlYXNvbiB2YWx1ZSkgeworLSAgICBjb25zdCBl bnVtIG1wdl9lbmRfZmlsZV9yZWFzb24gbmVnX29uZSA9IChlbnVtIG1wdl9lbmRfZmlsZV9yZWFz b24pICgoZW51bSBtcHZfZW5kX2ZpbGVfcmVhc29uKSAwIC0gKGVudW0gbXB2X2VuZF9maWxlX3Jl YXNvbikgMSksIGNvbnN0X3plcm8gPSAoZW51bSBtcHZfZW5kX2ZpbGVfcmVhc29uKSAwOworLSAg ICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsKKy0gICAgaWYg KGlzX3Vuc2lnbmVkKSB7CistICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X2VuZF9maWxlX3Jl YXNvbikgPCBzaXplb2YobG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxv bmcoKGxvbmcpIHZhbHVlKTsKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2Vu ZF9maWxlX3JlYXNvbikgPD0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7CistICAgICAgICAgICAg cmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKSB2YWx1ZSk7Cist I2lmZGVmIEhBVkVfTE9OR19MT05HCistICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihlbnVtIG1w dl9lbmRfZmlsZV9yZWFzb24pIDw9IHNpemVvZih1bnNpZ25lZCBQWV9MT05HX0xPTkcpKSB7Cist ICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQg UFlfTE9OR19MT05HKSB2YWx1ZSk7CistI2VuZGlmCistICAgICAgICB9CistICAgIH0gZWxzZSB7 CistICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X2VuZF9maWxlX3JlYXNvbikgPD0gc2l6ZW9m KGxvbmcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1 ZSk7CistI2lmZGVmIEhBVkVfTE9OR19MT05HCistICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihl bnVtIG1wdl9lbmRfZmlsZV9yZWFzb24pIDw9IHNpemVvZihQWV9MT05HX0xPTkcpKSB7CistICAg ICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9ORykgdmFsdWUp OworKy8qIENMaW5lSW5UcmFjZWJhY2sgKi8KKysjaWZuZGVmIENZVEhPTl9DTElORV9JTl9UUkFD RUJBQ0sKKytzdGF0aWMgaW50IF9fUHl4X0NMaW5lRm9yVHJhY2ViYWNrKENZVEhPTl9OQ1BfVU5V U0VEIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgaW50IGNfbGluZSkgeworKyAgICBQeU9iamVjdCAq dXNlX2NsaW5lOworKyAgICBQeU9iamVjdCAqcHR5cGUsICpwdmFsdWUsICpwdHJhY2ViYWNrOwor KyNpZiBDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRIT04KKysgICAgUHlPYmplY3QgKipjeXRob25f cnVudGltZV9kaWN0OworICNlbmRpZgorLSAgICAgICAgfQorKyAgICBpZiAodW5saWtlbHkoIV9f cHl4X2N5dGhvbl9ydW50aW1lKSkgeworKyAgICAgICAgcmV0dXJuIGNfbGluZTsKKyAgICAgfQor KyAgICBfX1B5eF9FcnJGZXRjaEluU3RhdGUodHN0YXRlLCAmcHR5cGUsICZwdmFsdWUsICZwdHJh Y2ViYWNrKTsKKysjaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9DUFlUSE9OCisrICAgIGN5dGhvbl9y dW50aW1lX2RpY3QgPSBfUHlPYmplY3RfR2V0RGljdFB0cihfX3B5eF9jeXRob25fcnVudGltZSk7 CisrICAgIGlmIChsaWtlbHkoY3l0aG9uX3J1bnRpbWVfZGljdCkpIHsKKysgICAgICAgIF9fUFlY X1BZX0RJQ1RfTE9PS1VQX0lGX01PRElGSUVEKAorKyAgICAgICAgICAgIHVzZV9jbGluZSwgKmN5 dGhvbl9ydW50aW1lX2RpY3QsCisrICAgICAgICAgICAgX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIo KmN5dGhvbl9ydW50aW1lX2RpY3QsIF9fcHl4X25fc19jbGluZV9pbl90cmFjZWJhY2spKQorKyAg ICB9IGVsc2UKKysjZW5kaWYKKyAgICAgeworLSAgICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0 bGUgPSAoaW50KSoodW5zaWduZWQgY2hhciAqKSZvbmU7CistICAgICAgICB1bnNpZ25lZCBjaGFy ICpieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlOworLSAgICAgICAgcmV0dXJuIF9QeUxv bmdfRnJvbUJ5dGVBcnJheShieXRlcywgc2l6ZW9mKGVudW0gbXB2X2VuZF9maWxlX3JlYXNvbiks CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZSwgIWlzX3Vuc2ln bmVkKTsKKysgICAgICBQeU9iamVjdCAqdXNlX2NsaW5lX29iaiA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoX19weXhfY3l0aG9uX3J1bnRpbWUsIF9fcHl4X25fc19jbGluZV9pbl90cmFjZWJh Y2spOworKyAgICAgIGlmICh1c2VfY2xpbmVfb2JqKSB7CisrICAgICAgICB1c2VfY2xpbmUgPSBQ eU9iamVjdF9Ob3QodXNlX2NsaW5lX29iaikgPyBQeV9GYWxzZSA6IFB5X1RydWU7CisrICAgICAg ICBQeV9ERUNSRUYodXNlX2NsaW5lX29iaik7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIFB5 RXJyX0NsZWFyKCk7CisrICAgICAgICB1c2VfY2xpbmUgPSBOVUxMOworKyAgICAgIH0KKysgICAg fQorKyAgICBpZiAoIXVzZV9jbGluZSkgeworKyAgICAgICAgY19saW5lID0gMDsKKysgICAgICAg ICh2b2lkKSBQeU9iamVjdF9TZXRBdHRyKF9fcHl4X2N5dGhvbl9ydW50aW1lLCBfX3B5eF9uX3Nf Y2xpbmVfaW5fdHJhY2ViYWNrLCBQeV9GYWxzZSk7CisrICAgIH0KKysgICAgZWxzZSBpZiAodXNl X2NsaW5lID09IFB5X0ZhbHNlIHx8ICh1c2VfY2xpbmUgIT0gUHlfVHJ1ZSAmJiBQeU9iamVjdF9O b3QodXNlX2NsaW5lKSAhPSAwKSkgeworKyAgICAgICAgY19saW5lID0gMDsKKyAgICAgfQorKyAg ICBfX1B5eF9FcnJSZXN0b3JlSW5TdGF0ZSh0c3RhdGUsIHB0eXBlLCBwdmFsdWUsIHB0cmFjZWJh Y2spOworKyAgICByZXR1cm4gY19saW5lOworIH0KKy0KKy0vKiBDSW50VG9QeSAqLworLXN0YXRp YyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9yZW5k ZXJfdXBkYXRlX2ZsYWcoZW51bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnIHZhbHVlKSB7CistICAg IGNvbnN0IGVudW0gbXB2X3JlbmRlcl91cGRhdGVfZmxhZyBuZWdfb25lID0gKGVudW0gbXB2X3Jl bmRlcl91cGRhdGVfZmxhZykgKChlbnVtIG1wdl9yZW5kZXJfdXBkYXRlX2ZsYWcpIDAgLSAoZW51 bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKSAxKSwgY29uc3RfemVybyA9IChlbnVtIG1wdl9yZW5k ZXJfdXBkYXRlX2ZsYWcpIDA7CistICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUg PiBjb25zdF96ZXJvOworLSAgICBpZiAoaXNfdW5zaWduZWQpIHsKKy0gICAgICAgIGlmIChzaXpl b2YoZW51bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKSA8IHNpemVvZihsb25nKSkgeworLSAgICAg ICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworLSAgICAgICAgfSBl bHNlIGlmIChzaXplb2YoZW51bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKSA8PSBzaXplb2YodW5z aWduZWQgbG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExv bmcoKHVuc2lnbmVkIGxvbmcpIHZhbHVlKTsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAg ICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X3JlbmRlcl91cGRhdGVfZmxhZykgPD0gc2l6 ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlMb25n X0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKKyAj ZW5kaWYKKysKKysvKiBDb2RlT2JqZWN0Q2FjaGUgKi8KKytzdGF0aWMgaW50IF9fcHl4X2Jpc2Vj dF9jb2RlX29iamVjdHMoX19QeXhfQ29kZU9iamVjdENhY2hlRW50cnkqIGVudHJpZXMsIGludCBj b3VudCwgaW50IGNvZGVfbGluZSkgeworKyAgICBpbnQgc3RhcnQgPSAwLCBtaWQgPSAwLCBlbmQg PSBjb3VudCAtIDE7CisrICAgIGlmIChlbmQgPj0gMCAmJiBjb2RlX2xpbmUgPiBlbnRyaWVzW2Vu ZF0uY29kZV9saW5lKSB7CisrICAgICAgICByZXR1cm4gY291bnQ7CisrICAgIH0KKysgICAgd2hp bGUgKHN0YXJ0IDwgZW5kKSB7CisrICAgICAgICBtaWQgPSBzdGFydCArIChlbmQgLSBzdGFydCkg LyAyOworKyAgICAgICAgaWYgKGNvZGVfbGluZSA8IGVudHJpZXNbbWlkXS5jb2RlX2xpbmUpIHsK KysgICAgICAgICAgICBlbmQgPSBtaWQ7CisrICAgICAgICB9IGVsc2UgaWYgKGNvZGVfbGluZSA+ IGVudHJpZXNbbWlkXS5jb2RlX2xpbmUpIHsKKysgICAgICAgICAgICAgc3RhcnQgPSBtaWQgKyAx OworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICByZXR1cm4gbWlkOworICAgICAgICAg fQorKyAgICB9CisrICAgIGlmIChjb2RlX2xpbmUgPD0gZW50cmllc1ttaWRdLmNvZGVfbGluZSkg eworKyAgICAgICAgcmV0dXJuIG1pZDsKKyAgICAgfSBlbHNlIHsKKy0gICAgICAgIGlmIChzaXpl b2YoZW51bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKSA8PSBzaXplb2YobG9uZykpIHsKKy0gICAg ICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKKy0jaWZkZWYgSEFW RV9MT05HX0xPTkcKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X3JlbmRlcl91 cGRhdGVfZmxhZykgPD0gc2l6ZW9mKFBZX0xPTkdfTE9ORykpIHsKKy0gICAgICAgICAgICByZXR1 cm4gUHlMb25nX0Zyb21Mb25nTG9uZygoUFlfTE9OR19MT05HKSB2YWx1ZSk7CistI2VuZGlmCist ICAgICAgICB9CisrICAgICAgICByZXR1cm4gbWlkICsgMTsKKyAgICAgfQorLSAgICB7CistICAg ICAgICBpbnQgb25lID0gMTsgaW50IGxpdHRsZSA9IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9u ZTsKKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVuc2lnbmVkIGNoYXIgKikmdmFs dWU7CistICAgICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2Yo ZW51bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGl0dGxlLCAhaXNfdW5zaWduZWQpOworK30KKytzdGF0aWMgUHlDb2RlT2Jq ZWN0ICpfX3B5eF9maW5kX2NvZGVfb2JqZWN0KGludCBjb2RlX2xpbmUpIHsKKysgICAgUHlDb2Rl T2JqZWN0KiBjb2RlX29iamVjdDsKKysgICAgaW50IHBvczsKKysgICAgaWYgKHVubGlrZWx5KCFj b2RlX2xpbmUpIHx8IHVubGlrZWx5KCFfX3B5eF9jb2RlX2NhY2hlLmVudHJpZXMpKSB7CisrICAg ICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKyAgICBwb3MgPSBfX3B5eF9iaXNlY3RfY29kZV9v YmplY3RzKF9fcHl4X2NvZGVfY2FjaGUuZW50cmllcywgX19weXhfY29kZV9jYWNoZS5jb3VudCwg Y29kZV9saW5lKTsKKysgICAgaWYgKHVubGlrZWx5KHBvcyA+PSBfX3B5eF9jb2RlX2NhY2hlLmNv dW50KSB8fCB1bmxpa2VseShfX3B5eF9jb2RlX2NhY2hlLmVudHJpZXNbcG9zXS5jb2RlX2xpbmUg IT0gY29kZV9saW5lKSkgeworKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgIH0KKysgICAgY29k ZV9vYmplY3QgPSBfX3B5eF9jb2RlX2NhY2hlLmVudHJpZXNbcG9zXS5jb2RlX29iamVjdDsKKysg ICAgUHlfSU5DUkVGKGNvZGVfb2JqZWN0KTsKKysgICAgcmV0dXJuIGNvZGVfb2JqZWN0OworIH0K Ky0KKy0vKiBDSW50VG9QeSAqLworLXN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5 eF9QeUludF9Gcm9tX2ludDY0X3QoaW50NjRfdCB2YWx1ZSkgeworLSAgICBjb25zdCBpbnQ2NF90 IG5lZ19vbmUgPSAoaW50NjRfdCkgKChpbnQ2NF90KSAwIC0gKGludDY0X3QpIDEpLCBjb25zdF96 ZXJvID0gKGludDY0X3QpIDA7CistICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUg PiBjb25zdF96ZXJvOworLSAgICBpZiAoaXNfdW5zaWduZWQpIHsKKy0gICAgICAgIGlmIChzaXpl b2YoaW50NjRfdCkgPCBzaXplb2YobG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlJbnRf RnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGludDY0 X3QpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUxv bmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUpOworLSNpZmRlZiBIQVZF X0xPTkdfTE9ORworLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoaW50NjRfdCkgPD0gc2l6ZW9m KHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zy b21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKKy0jZW5k aWYKKytzdGF0aWMgdm9pZCBfX3B5eF9pbnNlcnRfY29kZV9vYmplY3QoaW50IGNvZGVfbGluZSwg UHlDb2RlT2JqZWN0KiBjb2RlX29iamVjdCkgeworKyAgICBpbnQgcG9zLCBpOworKyAgICBfX1B5 eF9Db2RlT2JqZWN0Q2FjaGVFbnRyeSogZW50cmllcyA9IF9fcHl4X2NvZGVfY2FjaGUuZW50cmll czsKKysgICAgaWYgKHVubGlrZWx5KCFjb2RlX2xpbmUpKSB7CisrICAgICAgICByZXR1cm47Cisr ICAgIH0KKysgICAgaWYgKHVubGlrZWx5KCFlbnRyaWVzKSkgeworKyAgICAgICAgZW50cmllcyA9 IChfX1B5eF9Db2RlT2JqZWN0Q2FjaGVFbnRyeSopUHlNZW1fTWFsbG9jKDY0KnNpemVvZihfX1B5 eF9Db2RlT2JqZWN0Q2FjaGVFbnRyeSkpOworKyAgICAgICAgaWYgKGxpa2VseShlbnRyaWVzKSkg eworKyAgICAgICAgICAgIF9fcHl4X2NvZGVfY2FjaGUuZW50cmllcyA9IGVudHJpZXM7CisrICAg ICAgICAgICAgX19weXhfY29kZV9jYWNoZS5tYXhfY291bnQgPSA2NDsKKysgICAgICAgICAgICBf X3B5eF9jb2RlX2NhY2hlLmNvdW50ID0gMTsKKysgICAgICAgICAgICBlbnRyaWVzWzBdLmNvZGVf bGluZSA9IGNvZGVfbGluZTsKKysgICAgICAgICAgICBlbnRyaWVzWzBdLmNvZGVfb2JqZWN0ID0g Y29kZV9vYmplY3Q7CisrICAgICAgICAgICAgUHlfSU5DUkVGKGNvZGVfb2JqZWN0KTsKKyAgICAg ICAgIH0KKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIGlmIChzaXplb2YoaW50NjRfdCkgPD0gc2l6 ZW9mKGxvbmcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2 YWx1ZSk7CistI2lmZGVmIEhBVkVfTE9OR19MT05HCistICAgICAgICB9IGVsc2UgaWYgKHNpemVv ZihpbnQ2NF90KSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworLSAgICAgICAgICAgIHJldHVy biBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsKKy0jZW5kaWYKKysg ICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBwb3MgPSBfX3B5eF9iaXNlY3RfY29kZV9vYmpl Y3RzKF9fcHl4X2NvZGVfY2FjaGUuZW50cmllcywgX19weXhfY29kZV9jYWNoZS5jb3VudCwgY29k ZV9saW5lKTsKKysgICAgaWYgKChwb3MgPCBfX3B5eF9jb2RlX2NhY2hlLmNvdW50KSAmJiB1bmxp a2VseShfX3B5eF9jb2RlX2NhY2hlLmVudHJpZXNbcG9zXS5jb2RlX2xpbmUgPT0gY29kZV9saW5l KSkgeworKyAgICAgICAgUHlDb2RlT2JqZWN0KiB0bXAgPSBlbnRyaWVzW3Bvc10uY29kZV9vYmpl Y3Q7CisrICAgICAgICBlbnRyaWVzW3Bvc10uY29kZV9vYmplY3QgPSBjb2RlX29iamVjdDsKKysg ICAgICAgIFB5X0RFQ1JFRih0bXApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGlm IChfX3B5eF9jb2RlX2NhY2hlLmNvdW50ID09IF9fcHl4X2NvZGVfY2FjaGUubWF4X2NvdW50KSB7 CisrICAgICAgICBpbnQgbmV3X21heCA9IF9fcHl4X2NvZGVfY2FjaGUubWF4X2NvdW50ICsgNjQ7 CisrICAgICAgICBlbnRyaWVzID0gKF9fUHl4X0NvZGVPYmplY3RDYWNoZUVudHJ5KilQeU1lbV9S ZWFsbG9jKAorKyAgICAgICAgICAgIF9fcHl4X2NvZGVfY2FjaGUuZW50cmllcywgKChzaXplX3Qp bmV3X21heCkgKiBzaXplb2YoX19QeXhfQ29kZU9iamVjdENhY2hlRW50cnkpKTsKKysgICAgICAg IGlmICh1bmxpa2VseSghZW50cmllcykpIHsKKysgICAgICAgICAgICByZXR1cm47CisgICAgICAg ICB9CisrICAgICAgICBfX3B5eF9jb2RlX2NhY2hlLmVudHJpZXMgPSBlbnRyaWVzOworKyAgICAg ICAgX19weXhfY29kZV9jYWNoZS5tYXhfY291bnQgPSBuZXdfbWF4OworICAgICB9CistICAgIHsK Ky0gICAgICAgIGludCBvbmUgPSAxOyBpbnQgbGl0dGxlID0gKGludCkqKHVuc2lnbmVkIGNoYXIg Kikmb25lOworLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSAodW5zaWduZWQgY2hhciAq KSZ2YWx1ZTsKKy0gICAgICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnl0ZXMsIHNp emVvZihpbnQ2NF90KSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0 dGxlLCAhaXNfdW5zaWduZWQpOworKyAgICBmb3IgKGk9X19weXhfY29kZV9jYWNoZS5jb3VudDsg aT5wb3M7IGktLSkgeworKyAgICAgICAgZW50cmllc1tpXSA9IGVudHJpZXNbaS0xXTsKKyAgICAg fQorKyAgICBlbnRyaWVzW3Bvc10uY29kZV9saW5lID0gY29kZV9saW5lOworKyAgICBlbnRyaWVz W3Bvc10uY29kZV9vYmplY3QgPSBjb2RlX29iamVjdDsKKysgICAgX19weXhfY29kZV9jYWNoZS5j b3VudCsrOworKyAgICBQeV9JTkNSRUYoY29kZV9vYmplY3QpOworIH0KKyAKKy0vKiBDSW50VG9Q eSAqLworLXN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX3Vp bnQ2NF90KHVpbnQ2NF90IHZhbHVlKSB7CistICAgIGNvbnN0IHVpbnQ2NF90IG5lZ19vbmUgPSAo dWludDY0X3QpICgodWludDY0X3QpIDAgLSAodWludDY0X3QpIDEpLCBjb25zdF96ZXJvID0gKHVp bnQ2NF90KSAwOworLSAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3Rf emVybzsKKy0gICAgaWYgKGlzX3Vuc2lnbmVkKSB7CistICAgICAgICBpZiAoc2l6ZW9mKHVpbnQ2 NF90KSA8IHNpemVvZihsb25nKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9u ZygobG9uZykgdmFsdWUpOworLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YodWludDY0X3QpIDw9 IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJv bVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUpOworLSNpZmRlZiBIQVZFX0xPTkdf TE9ORworLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YodWludDY0X3QpIDw9IHNpemVvZih1bnNp Z25lZCBQWV9MT05HX0xPTkcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5z aWduZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKSB2YWx1ZSk7CistI2VuZGlmCist ICAgICAgICB9CistICAgIH0gZWxzZSB7CistICAgICAgICBpZiAoc2l6ZW9mKHVpbnQ2NF90KSA8 PSBzaXplb2YobG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxv bmcpIHZhbHVlKTsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgIH0gZWxzZSBpZiAo c2l6ZW9mKHVpbnQ2NF90KSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworLSAgICAgICAgICAg IHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsKKy0jZW5k aWYKKy0gICAgICAgIH0KKysvKiBBZGRUcmFjZWJhY2sgKi8KKysjaW5jbHVkZSAiY29tcGlsZS5o IgorKyNpbmNsdWRlICJmcmFtZW9iamVjdC5oIgorKyNpbmNsdWRlICJ0cmFjZWJhY2suaCIKKytz dGF0aWMgUHlDb2RlT2JqZWN0KiBfX1B5eF9DcmVhdGVDb2RlT2JqZWN0Rm9yVHJhY2ViYWNrKAor KyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCBpbnQgY19saW5lLAorKyAgICAgICAg ICAgIGludCBweV9saW5lLCBjb25zdCBjaGFyICpmaWxlbmFtZSkgeworKyAgICBQeUNvZGVPYmpl Y3QgKnB5X2NvZGUgPSBOVUxMOworKyAgICBQeU9iamVjdCAqcHlfZnVuY25hbWUgPSBOVUxMOwor KyAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKysgICAgUHlPYmplY3QgKnB5X3NyY2ZpbGUg PSBOVUxMOworKyAgICBweV9zcmNmaWxlID0gUHlTdHJpbmdfRnJvbVN0cmluZyhmaWxlbmFtZSk7 CisrICAgIGlmICghcHlfc3JjZmlsZSkgZ290byBiYWQ7CisrICAgICNlbmRpZgorKyAgICBpZiAo Y19saW5lKSB7CisrICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKysgICAgICAgIHB5 X2Z1bmNuYW1lID0gUHlTdHJpbmdfRnJvbUZvcm1hdCggIiVzICglczolZCkiLCBmdW5jbmFtZSwg X19weXhfY2ZpbGVubSwgY19saW5lKTsKKysgICAgICAgIGlmICghcHlfZnVuY25hbWUpIGdvdG8g YmFkOworKyAgICAgICAgI2Vsc2UKKysgICAgICAgIHB5X2Z1bmNuYW1lID0gUHlVbmljb2RlX0Zy b21Gb3JtYXQoICIlcyAoJXM6JWQpIiwgZnVuY25hbWUsIF9fcHl4X2NmaWxlbm0sIGNfbGluZSk7 CisrICAgICAgICBpZiAoIXB5X2Z1bmNuYW1lKSBnb3RvIGJhZDsKKysgICAgICAgIGZ1bmNuYW1l ID0gUHlVbmljb2RlX0FzVVRGOChweV9mdW5jbmFtZSk7CisrICAgICAgICBpZiAoIWZ1bmNuYW1l KSBnb3RvIGJhZDsKKysgICAgICAgICNlbmRpZgorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAg ICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAgICAgICBweV9mdW5jbmFtZSA9IFB5U3Ry aW5nX0Zyb21TdHJpbmcoZnVuY25hbWUpOworKyAgICAgICAgaWYgKCFweV9mdW5jbmFtZSkgZ290 byBiYWQ7CisrICAgICAgICAjZW5kaWYKKysgICAgfQorKyAgICAjaWYgUFlfTUFKT1JfVkVSU0lP TiA8IDMKKysgICAgcHlfY29kZSA9IF9fUHl4X1B5Q29kZV9OZXcoCisrICAgICAgICAwLAorKyAg ICAgICAgMCwKKysgICAgICAgIDAsCisrICAgICAgICAwLAorKyAgICAgICAgMCwKKysgICAgICAg IF9fcHl4X2VtcHR5X2J5dGVzLCAvKlB5T2JqZWN0ICpjb2RlLCovCisrICAgICAgICBfX3B5eF9l bXB0eV90dXBsZSwgLypQeU9iamVjdCAqY29uc3RzLCovCisrICAgICAgICBfX3B5eF9lbXB0eV90 dXBsZSwgLypQeU9iamVjdCAqbmFtZXMsKi8KKysgICAgICAgIF9fcHl4X2VtcHR5X3R1cGxlLCAv KlB5T2JqZWN0ICp2YXJuYW1lcywqLworKyAgICAgICAgX19weXhfZW1wdHlfdHVwbGUsIC8qUHlP YmplY3QgKmZyZWV2YXJzLCovCisrICAgICAgICBfX3B5eF9lbXB0eV90dXBsZSwgLypQeU9iamVj dCAqY2VsbHZhcnMsKi8KKysgICAgICAgIHB5X3NyY2ZpbGUsICAgLypQeU9iamVjdCAqZmlsZW5h bWUsKi8KKysgICAgICAgIHB5X2Z1bmNuYW1lLCAgLypQeU9iamVjdCAqbmFtZSwqLworKyAgICAg ICAgcHlfbGluZSwKKysgICAgICAgIF9fcHl4X2VtcHR5X2J5dGVzICAvKlB5T2JqZWN0ICpsbm90 YWIqLworKyAgICApOworKyAgICBQeV9ERUNSRUYocHlfc3JjZmlsZSk7CisrICAgICNlbHNlCisr ICAgIHB5X2NvZGUgPSBQeUNvZGVfTmV3RW1wdHkoZmlsZW5hbWUsIGZ1bmNuYW1lLCBweV9saW5l KTsKKysgICAgI2VuZGlmCisrICAgIFB5X1hERUNSRUYocHlfZnVuY25hbWUpOyAgLy8gWERFQ1JF RiBzaW5jZSBpdCdzIG9ubHkgc2V0IG9uIFB5MyBpZiBjbGluZQorKyAgICByZXR1cm4gcHlfY29k ZTsKKytiYWQ6CisrICAgIFB5X1hERUNSRUYocHlfZnVuY25hbWUpOworKyAgICAjaWYgUFlfTUFK T1JfVkVSU0lPTiA8IDMKKysgICAgUHlfWERFQ1JFRihweV9zcmNmaWxlKTsKKysgICAgI2VuZGlm CisrICAgIHJldHVybiBOVUxMOworK30KKytzdGF0aWMgdm9pZCBfX1B5eF9BZGRUcmFjZWJhY2so Y29uc3QgY2hhciAqZnVuY25hbWUsIGludCBjX2xpbmUsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBweV9saW5lLCBjb25zdCBjaGFyICpmaWxlbmFtZSkgeworKyAgICBQeUNv ZGVPYmplY3QgKnB5X2NvZGUgPSAwOworKyAgICBQeUZyYW1lT2JqZWN0ICpweV9mcmFtZSA9IDA7 CisrICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IF9fUHl4X1B5VGhyZWFkU3RhdGVfQ3VycmVu dDsKKysgICAgaWYgKGNfbGluZSkgeworKyAgICAgICAgY19saW5lID0gX19QeXhfQ0xpbmVGb3JU cmFjZWJhY2sodHN0YXRlLCBjX2xpbmUpOworICAgICB9CistICAgIHsKKy0gICAgICAgIGludCBv bmUgPSAxOyBpbnQgbGl0dGxlID0gKGludCkqKHVuc2lnbmVkIGNoYXIgKikmb25lOworLSAgICAg ICAgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSAodW5zaWduZWQgY2hhciAqKSZ2YWx1ZTsKKy0gICAg ICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnl0ZXMsIHNpemVvZih1aW50NjRfdCks CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZSwgIWlzX3Vuc2ln bmVkKTsKKysgICAgcHlfY29kZSA9IF9fcHl4X2ZpbmRfY29kZV9vYmplY3QoY19saW5lID8gLWNf bGluZSA6IHB5X2xpbmUpOworKyAgICBpZiAoIXB5X2NvZGUpIHsKKysgICAgICAgIHB5X2NvZGUg PSBfX1B5eF9DcmVhdGVDb2RlT2JqZWN0Rm9yVHJhY2ViYWNrKAorKyAgICAgICAgICAgIGZ1bmNu YW1lLCBjX2xpbmUsIHB5X2xpbmUsIGZpbGVuYW1lKTsKKysgICAgICAgIGlmICghcHlfY29kZSkg Z290byBiYWQ7CisrICAgICAgICBfX3B5eF9pbnNlcnRfY29kZV9vYmplY3QoY19saW5lID8gLWNf bGluZSA6IHB5X2xpbmUsIHB5X2NvZGUpOworICAgICB9CisrICAgIHB5X2ZyYW1lID0gUHlGcmFt ZV9OZXcoCisrICAgICAgICB0c3RhdGUsICAgICAgICAgICAgLypQeVRocmVhZFN0YXRlICp0c3Rh dGUsKi8KKysgICAgICAgIHB5X2NvZGUsICAgICAgICAgICAvKlB5Q29kZU9iamVjdCAqY29kZSwq LworKyAgICAgICAgX19weXhfZCwgICAgLypQeU9iamVjdCAqZ2xvYmFscywqLworKyAgICAgICAg MCAgICAgICAgICAgICAgICAgIC8qUHlPYmplY3QgKmxvY2FscyovCisrICAgICk7CisrICAgIGlm ICghcHlfZnJhbWUpIGdvdG8gYmFkOworKyAgICBfX1B5eF9QeUZyYW1lX1NldExpbmVOdW1iZXIo cHlfZnJhbWUsIHB5X2xpbmUpOworKyAgICBQeVRyYWNlQmFja19IZXJlKHB5X2ZyYW1lKTsKKyti YWQ6CisrICAgIFB5X1hERUNSRUYocHlfY29kZSk7CisrICAgIFB5X1hERUNSRUYocHlfZnJhbWUp OworIH0KKyAKKy0vKiBDSW50VG9QeSAqLworLXN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0 KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoZW51bSBtcHZfZm9ybWF0IHZhbHVl KSB7CistICAgIGNvbnN0IGVudW0gbXB2X2Zvcm1hdCBuZWdfb25lID0gKGVudW0gbXB2X2Zvcm1h dCkgKChlbnVtIG1wdl9mb3JtYXQpIDAgLSAoZW51bSBtcHZfZm9ybWF0KSAxKSwgY29uc3RfemVy byA9IChlbnVtIG1wdl9mb3JtYXQpIDA7CistICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5l Z19vbmUgPiBjb25zdF96ZXJvOworLSAgICBpZiAoaXNfdW5zaWduZWQpIHsKKy0gICAgICAgIGlm IChzaXplb2YoZW51bSBtcHZfZm9ybWF0KSA8IHNpemVvZihsb25nKSkgeworLSAgICAgICAgICAg IHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworLSAgICAgICAgfSBlbHNlIGlm IChzaXplb2YoZW51bSBtcHZfZm9ybWF0KSA8PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKKy0g ICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcp IHZhbHVlKTsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6 ZW9mKGVudW0gbXB2X2Zvcm1hdCkgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsK Ky0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25l ZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKKy0jZW5kaWYKKy0gICAgICAgIH0KKy0gICAgfSBlbHNl IHsKKy0gICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfZm9ybWF0KSA8PSBzaXplb2YobG9uZykp IHsKKy0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKKy0j aWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2 X2Zvcm1hdCkgPD0gc2l6ZW9mKFBZX0xPTkdfTE9ORykpIHsKKy0gICAgICAgICAgICByZXR1cm4g UHlMb25nX0Zyb21Mb25nTG9uZygoUFlfTE9OR19MT05HKSB2YWx1ZSk7CistI2VuZGlmCistICAg ICAgICB9CistICAgIH0KKy0gICAgeworLSAgICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0bGUg PSAoaW50KSoodW5zaWduZWQgY2hhciAqKSZvbmU7CistICAgICAgICB1bnNpZ25lZCBjaGFyICpi eXRlcyA9ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlOworLSAgICAgICAgcmV0dXJuIF9QeUxvbmdf RnJvbUJ5dGVBcnJheShieXRlcywgc2l6ZW9mKGVudW0gbXB2X2Zvcm1hdCksCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZSwgIWlzX3Vuc2lnbmVkKTsKKysvKiBD SW50RnJvbVB5VmVyaWZ5ICovCisrI2RlZmluZSBfX1BZWF9WRVJJRllfUkVUVVJOX0lOVCh0YXJn ZXRfdHlwZSwgZnVuY190eXBlLCBmdW5jX3ZhbHVlKVwKKysgICAgX19QWVhfX1ZFUklGWV9SRVRV Uk5fSU5UKHRhcmdldF90eXBlLCBmdW5jX3R5cGUsIGZ1bmNfdmFsdWUsIDApCisrI2RlZmluZSBf X1BZWF9WRVJJRllfUkVUVVJOX0lOVF9FWEModGFyZ2V0X3R5cGUsIGZ1bmNfdHlwZSwgZnVuY192 YWx1ZSlcCisrICAgIF9fUFlYX19WRVJJRllfUkVUVVJOX0lOVCh0YXJnZXRfdHlwZSwgZnVuY190 eXBlLCBmdW5jX3ZhbHVlLCAxKQorKyNkZWZpbmUgX19QWVhfX1ZFUklGWV9SRVRVUk5fSU5UKHRh cmdldF90eXBlLCBmdW5jX3R5cGUsIGZ1bmNfdmFsdWUsIGV4YylcCisrICAgIHtcCisrICAgICAg ICBmdW5jX3R5cGUgdmFsdWUgPSBmdW5jX3ZhbHVlO1wKKysgICAgICAgIGlmIChzaXplb2YodGFy Z2V0X3R5cGUpIDwgc2l6ZW9mKGZ1bmNfdHlwZSkpIHtcCisrICAgICAgICAgICAgaWYgKHVubGlr ZWx5KHZhbHVlICE9IChmdW5jX3R5cGUpICh0YXJnZXRfdHlwZSkgdmFsdWUpKSB7XAorKyAgICAg ICAgICAgICAgICBmdW5jX3R5cGUgemVybyA9IDA7XAorKyAgICAgICAgICAgICAgICBpZiAoZXhj ICYmIHVubGlrZWx5KHZhbHVlID09IChmdW5jX3R5cGUpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkp XAorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0YXJnZXRfdHlwZSkgLTE7XAorKyAgICAg ICAgICAgICAgICBpZiAoaXNfdW5zaWduZWQgJiYgdW5saWtlbHkodmFsdWUgPCB6ZXJvKSlcCisr ICAgICAgICAgICAgICAgICAgICBnb3RvIHJhaXNlX25lZ19vdmVyZmxvdztcCisrICAgICAgICAg ICAgICAgIGVsc2VcCisrICAgICAgICAgICAgICAgICAgICBnb3RvIHJhaXNlX292ZXJmbG93O1wK KysgICAgICAgICAgICB9XAorKyAgICAgICAgfVwKKysgICAgICAgIHJldHVybiAodGFyZ2V0X3R5 cGUpIHZhbHVlO1wKKyAgICAgfQorLX0KKyAKKyAvKiBDSW50VG9QeSAqLworLXN0YXRpYyBDWVRI T05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2xvbmcobG9uZyB2YWx1ZSkgewor LSAgICBjb25zdCBsb25nIG5lZ19vbmUgPSAobG9uZykgKChsb25nKSAwIC0gKGxvbmcpIDEpLCBj b25zdF96ZXJvID0gKGxvbmcpIDA7Cisrc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9f UHl4X1B5SW50X0Zyb21faW50KGludCB2YWx1ZSkgeworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJ QUdOT1NUSUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFn bm9zdGljIGlnbm9yZWQgIi1XY29udmVyc2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgaW50IG5l Z19vbmUgPSAoaW50KSAtMSwgY29uc3RfemVybyA9IChpbnQpIDA7CisrI2lmZGVmIF9fUHl4X0hB U19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisrI2VuZGlmCisg ICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOworICAgICBp ZiAoaXNfdW5zaWduZWQpIHsKKy0gICAgICAgIGlmIChzaXplb2YobG9uZykgPCBzaXplb2YobG9u ZykpIHsKKysgICAgICAgIGlmIChzaXplb2YoaW50KSA8IHNpemVvZihsb25nKSkgeworICAgICAg ICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworLSAgICAgICAgfSBl bHNlIGlmIChzaXplb2YobG9uZykgPD0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7CisrICAgICAg ICB9IGVsc2UgaWYgKHNpemVvZihpbnQpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworICAg ICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykg dmFsdWUpOworICNpZmRlZiBIQVZFX0xPTkdfTE9ORworLSAgICAgICAgfSBlbHNlIGlmIChzaXpl b2YobG9uZykgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKKysgICAgICAgIH0g ZWxzZSBpZiAoc2l6ZW9mKGludCkgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsK KyAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25l ZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKKyAjZW5kaWYKKyAgICAgICAgIH0KKyAgICAgfSBlbHNl IHsKKy0gICAgICAgIGlmIChzaXplb2YobG9uZykgPD0gc2l6ZW9mKGxvbmcpKSB7CisrICAgICAg ICBpZiAoc2l6ZW9mKGludCkgPD0gc2l6ZW9mKGxvbmcpKSB7CisgICAgICAgICAgICAgcmV0dXJu IFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CisgI2lmZGVmIEhBVkVfTE9OR19MT05HCist ICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihsb25nKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkg eworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoaW50KSA8PSBzaXplb2YoUFlfTE9OR19MT05H KSkgeworICAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xP TkcpIHZhbHVlKTsKKyAjZW5kaWYKKyAgICAgICAgIH0KK0BAIC0zMzYxNywxNCArMzAyMTIsMjEg QEAgc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21fbG9uZyhs b25nIHZhbHVlKSB7CisgICAgIHsKKyAgICAgICAgIGludCBvbmUgPSAxOyBpbnQgbGl0dGxlID0g KGludCkqKHVuc2lnbmVkIGNoYXIgKikmb25lOworICAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0 ZXMgPSAodW5zaWduZWQgY2hhciAqKSZ2YWx1ZTsKKy0gICAgICAgIHJldHVybiBfUHlMb25nX0Zy b21CeXRlQXJyYXkoYnl0ZXMsIHNpemVvZihsb25nKSwKKysgICAgICAgIHJldHVybiBfUHlMb25n X0Zyb21CeXRlQXJyYXkoYnl0ZXMsIHNpemVvZihpbnQpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7CisgICAgIH0KKyB9CisgCisg LyogQ0ludEZyb21QeSAqLworIHN0YXRpYyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9QeUludF9B c19pbnQoUHlPYmplY3QgKngpIHsKKy0gICAgY29uc3QgaW50IG5lZ19vbmUgPSAoaW50KSAoKGlu dCkgMCAtIChpbnQpIDEpLCBjb25zdF96ZXJvID0gKGludCkgMDsKKysjaWZkZWYgX19QeXhfSEFT X0dDQ19ESUFHTk9TVElDCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBH Q0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCisrI2VuZGlmCisrICAgIGNvbnN0 IGludCBuZWdfb25lID0gKGludCkgLTEsIGNvbnN0X3plcm8gPSAoaW50KSAwOworKyNpZmRlZiBf X1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorKyNl bmRpZgorICAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsK KyAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKyAgICAgaWYgKGxpa2VseShQeUludF9DaGVjayh4 KSkpIHsKK0BAIC0zMzgxMSw5ICszMDQxMyw1NCBAQCBzdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQg X19QeXhfUHlJbnRfQXNfaW50KFB5T2JqZWN0ICp4KSB7CisgICAgIHJldHVybiAoaW50KSAtMTsK KyB9CisgCisrLyogQ0ludFRvUHkgKi8KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCog X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoZW51bSBtcHZfZXZlbnRfaWQgdmFs dWUpIHsKKysjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCisrI3ByYWdtYSBHQ0MgZGlh Z25vc3RpYyBwdXNoCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNp b24iCisrI2VuZGlmCisrICAgIGNvbnN0IGVudW0gbXB2X2V2ZW50X2lkIG5lZ19vbmUgPSAoZW51 bSBtcHZfZXZlbnRfaWQpIC0xLCBjb25zdF96ZXJvID0gKGVudW0gbXB2X2V2ZW50X2lkKSAwOwor KyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGlj IHBvcAorKyNlbmRpZgorKyAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29u c3RfemVybzsKKysgICAgaWYgKGlzX3Vuc2lnbmVkKSB7CisrICAgICAgICBpZiAoc2l6ZW9mKGVu dW0gbXB2X2V2ZW50X2lkKSA8IHNpemVvZihsb25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQ eUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2Yo ZW51bSBtcHZfZXZlbnRfaWQpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworKyAgICAgICAg ICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUp OworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51 bSBtcHZfZXZlbnRfaWQpIDw9IHNpemVvZih1bnNpZ25lZCBQWV9MT05HX0xPTkcpKSB7CisrICAg ICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgUFlf TE9OR19MT05HKSB2YWx1ZSk7CisrI2VuZGlmCisrICAgICAgICB9CisrICAgIH0gZWxzZSB7Cisr ICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X2V2ZW50X2lkKSA8PSBzaXplb2YobG9uZykpIHsK KysgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKKysjaWZk ZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2V2 ZW50X2lkKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworKyAgICAgICAgICAgIHJldHVybiBQ eUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsKKysjZW5kaWYKKysgICAg ICAgIH0KKysgICAgfQorKyAgICB7CisrICAgICAgICBpbnQgb25lID0gMTsgaW50IGxpdHRsZSA9 IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsKKysgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5 dGVzID0gKHVuc2lnbmVkIGNoYXIgKikmdmFsdWU7CisrICAgICAgICByZXR1cm4gX1B5TG9uZ19G cm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YoZW51bSBtcHZfZXZlbnRfaWQpLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7CisrICAg IH0KKyt9CisrCisgLyogQ0ludEZyb21QeSAqLworIHN0YXRpYyBDWVRIT05fSU5MSU5FIGVudW0g bXB2X2V2ZW50X2lkIF9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9ldmVudF9pZChQeU9iamVjdCAq eCkgeworLSAgICBjb25zdCBlbnVtIG1wdl9ldmVudF9pZCBuZWdfb25lID0gKGVudW0gbXB2X2V2 ZW50X2lkKSAoKGVudW0gbXB2X2V2ZW50X2lkKSAwIC0gKGVudW0gbXB2X2V2ZW50X2lkKSAxKSwg Y29uc3RfemVybyA9IChlbnVtIG1wdl9ldmVudF9pZCkgMDsKKysjaWZkZWYgX19QeXhfSEFTX0dD Q19ESUFHTk9TVElDCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBHQ0Mg ZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCisrI2VuZGlmCisrICAgIGNvbnN0IGVu dW0gbXB2X2V2ZW50X2lkIG5lZ19vbmUgPSAoZW51bSBtcHZfZXZlbnRfaWQpIC0xLCBjb25zdF96 ZXJvID0gKGVudW0gbXB2X2V2ZW50X2lkKSAwOworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdO T1NUSUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgorICAgICBjb25zdCBp bnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsKKyAjaWYgUFlfTUFKT1JfVkVS U0lPTiA8IDMKKyAgICAgaWYgKGxpa2VseShQeUludF9DaGVjayh4KSkpIHsKK0BAIC0zMzk0Nyw2 MiArMzA1OTQsMjU5IEBAIHN0YXRpYyBDWVRIT05fSU5MSU5FIGVudW0gbXB2X2V2ZW50X2lkIF9f UHl4X1B5SW50X0FzX2VudW1fX21wdl9ldmVudF9pZChQeU9iamVjCisgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgI2VuZGlmCistICAgICAgICAgICAgaWYgKHNp emVvZihlbnVtIG1wdl9ldmVudF9pZCkgPD0gc2l6ZW9mKGxvbmcpKSB7CistICAgICAgICAgICAg ICAgIF9fUFlYX1ZFUklGWV9SRVRVUk5fSU5UX0VYQyhlbnVtIG1wdl9ldmVudF9pZCwgbG9uZywg UHlMb25nX0FzTG9uZyh4KSkKKysgICAgICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X2V2ZW50 X2lkKSA8PSBzaXplb2YobG9uZykpIHsKKysgICAgICAgICAgICAgICAgX19QWVhfVkVSSUZZX1JF VFVSTl9JTlRfRVhDKGVudW0gbXB2X2V2ZW50X2lkLCBsb25nLCBQeUxvbmdfQXNMb25nKHgpKQor KyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVu dW0gbXB2X2V2ZW50X2lkKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworKyAgICAgICAgICAg ICAgICBfX1BZWF9WRVJJRllfUkVUVVJOX0lOVF9FWEMoZW51bSBtcHZfZXZlbnRfaWQsIFBZX0xP TkdfTE9ORywgUHlMb25nX0FzTG9uZ0xvbmcoeCkpCisrI2VuZGlmCisrICAgICAgICAgICAgfQor KyAgICAgICAgfQorKyAgICAgICAgeworKyNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgJiYg IWRlZmluZWQoX1B5TG9uZ19Bc0J5dGVBcnJheSkKKysgICAgICAgICAgICBQeUVycl9TZXRTdHJp bmcoUHlFeGNfUnVudGltZUVycm9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1B5 TG9uZ19Bc0J5dGVBcnJheSgpIG5vdCBhdmFpbGFibGUgaW4gUHlQeSwgY2Fubm90IGNvbnZlcnQg bGFyZ2UgbnVtYmVycyIpOworKyNlbHNlCisrICAgICAgICAgICAgZW51bSBtcHZfZXZlbnRfaWQg dmFsOworKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gX19QeXhfUHlOdW1iZXJfSW50T3JMb25n KHgpOworKyAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKysgICAgICAgICAgICBpZiAobGlrZWx5 KHYpICYmICFQeUxvbmdfQ2hlY2sodikpIHsKKysgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRt cCA9IHY7CisrICAgICAgICAgICAgICAgIHYgPSBQeU51bWJlcl9Mb25nKHRtcCk7CisrICAgICAg ICAgICAgICAgIFB5X0RFQ1JFRih0bXApOworKyAgICAgICAgICAgIH0KKysgI2VuZGlmCisrICAg ICAgICAgICAgaWYgKGxpa2VseSh2KSkgeworKyAgICAgICAgICAgICAgICBpbnQgb25lID0gMTsg aW50IGlzX2xpdHRsZSA9IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsKKysgICAgICAgICAg ICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSAodW5zaWduZWQgY2hhciAqKSZ2YWw7CisrICAg ICAgICAgICAgICAgIGludCByZXQgPSBfUHlMb25nX0FzQnl0ZUFycmF5KChQeUxvbmdPYmplY3Qg Kil2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRl cywgc2l6ZW9mKHZhbCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlzX2xpdHRsZSwgIWlzX3Vuc2lnbmVkKTsKKysgICAgICAgICAgICAgICAgUHlfREVD UkVGKHYpOworKyAgICAgICAgICAgICAgICBpZiAobGlrZWx5KCFyZXQpKQorKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHZhbDsKKysgICAgICAgICAgICB9CisrI2VuZGlmCisrICAgICAgICAg ICAgcmV0dXJuIChlbnVtIG1wdl9ldmVudF9pZCkgLTE7CisrICAgICAgICB9CisrICAgIH0gZWxz ZSB7CisrICAgICAgICBlbnVtIG1wdl9ldmVudF9pZCB2YWw7CisrICAgICAgICBQeU9iamVjdCAq dG1wID0gX19QeXhfUHlOdW1iZXJfSW50T3JMb25nKHgpOworKyAgICAgICAgaWYgKCF0bXApIHJl dHVybiAoZW51bSBtcHZfZXZlbnRfaWQpIC0xOworKyAgICAgICAgdmFsID0gX19QeXhfUHlJbnRf QXNfZW51bV9fbXB2X2V2ZW50X2lkKHRtcCk7CisrICAgICAgICBQeV9ERUNSRUYodG1wKTsKKysg ICAgICAgIHJldHVybiB2YWw7CisrICAgIH0KKytyYWlzZV9vdmVyZmxvdzoKKysgICAgUHlFcnJf U2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisrICAgICAgICAidmFsdWUgdG9vIGxhcmdl IHRvIGNvbnZlcnQgdG8gZW51bSBtcHZfZXZlbnRfaWQiKTsKKysgICAgcmV0dXJuIChlbnVtIG1w dl9ldmVudF9pZCkgLTE7CisrcmFpc2VfbmVnX292ZXJmbG93OgorKyAgICBQeUVycl9TZXRTdHJp bmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKysgICAgICAgICJjYW4ndCBjb252ZXJ0IG5lZ2F0aXZl IHZhbHVlIHRvIGVudW0gbXB2X2V2ZW50X2lkIik7CisrICAgIHJldHVybiAoZW51bSBtcHZfZXZl bnRfaWQpIC0xOworK30KKysKKysvKiBDSW50VG9QeSAqLworK3N0YXRpYyBDWVRIT05fSU5MSU5F IFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX3Vuc2lnbmVkX2xvbmcodW5zaWduZWQgbG9uZyB2 YWx1ZSkgeworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKKysjcHJhZ21hIEdDQyBk aWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XY29udmVy c2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgdW5zaWduZWQgbG9uZyBuZWdfb25lID0gKHVuc2ln bmVkIGxvbmcpIC0xLCBjb25zdF96ZXJvID0gKHVuc2lnbmVkIGxvbmcpIDA7CisrI2lmZGVmIF9f UHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisrI2Vu ZGlmCisrICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOwor KyAgICBpZiAoaXNfdW5zaWduZWQpIHsKKysgICAgICAgIGlmIChzaXplb2YodW5zaWduZWQgbG9u ZykgPCBzaXplb2YobG9uZykpIHsKKysgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmco KGxvbmcpIHZhbHVlKTsKKysgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcp IDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdf RnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUpOworKyNpZmRlZiBIQVZFX0xP TkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YodW5zaWduZWQgbG9uZykgPD0gc2l6 ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKKysgICAgICAgICAgICByZXR1cm4gUHlMb25n X0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKKysj ZW5kaWYKKysgICAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICAgIGlmIChzaXplb2YodW5z aWduZWQgbG9uZykgPD0gc2l6ZW9mKGxvbmcpKSB7CisrICAgICAgICAgICAgcmV0dXJuIFB5SW50 X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAg ICB9IGVsc2UgaWYgKHNpemVvZih1bnNpZ25lZCBsb25nKSA8PSBzaXplb2YoUFlfTE9OR19MT05H KSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xP TkcpIHZhbHVlKTsKKysjZW5kaWYKKysgICAgICAgIH0KKysgICAgfQorKyAgICB7CisrICAgICAg ICBpbnQgb25lID0gMTsgaW50IGxpdHRsZSA9IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsK KysgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVuc2lnbmVkIGNoYXIgKikmdmFsdWU7 CisrICAgICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YodW5z aWduZWQgbG9uZyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRs ZSwgIWlzX3Vuc2lnbmVkKTsKKysgICAgfQorK30KKysKKysvKiBDSW50VG9QeSAqLworK3N0YXRp YyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJv cihlbnVtIG1wdl9lcnJvciB2YWx1ZSkgeworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NU SUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGlj IGlnbm9yZWQgIi1XY29udmVyc2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgZW51bSBtcHZfZXJy b3IgbmVnX29uZSA9IChlbnVtIG1wdl9lcnJvcikgLTEsIGNvbnN0X3plcm8gPSAoZW51bSBtcHZf ZXJyb3IpIDA7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0ND IGRpYWdub3N0aWMgcG9wCisrI2VuZGlmCisrICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5l Z19vbmUgPiBjb25zdF96ZXJvOworKyAgICBpZiAoaXNfdW5zaWduZWQpIHsKKysgICAgICAgIGlm IChzaXplb2YoZW51bSBtcHZfZXJyb3IpIDwgc2l6ZW9mKGxvbmcpKSB7CisrICAgICAgICAgICAg cmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CisrICAgICAgICB9IGVsc2UgaWYg KHNpemVvZihlbnVtIG1wdl9lcnJvcikgPD0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7CisrICAg ICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKSB2 YWx1ZSk7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgICB9IGVsc2UgaWYgKHNpemVv ZihlbnVtIG1wdl9lcnJvcikgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKKysg ICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQ WV9MT05HX0xPTkcpIHZhbHVlKTsKKysjZW5kaWYKKysgICAgICAgIH0KKysgICAgfSBlbHNlIHsK KysgICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfZXJyb3IpIDw9IHNpemVvZihsb25nKSkgewor KyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworKyNpZmRl ZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZXJy b3IpIDw9IHNpemVvZihQWV9MT05HX0xPTkcpKSB7CisrICAgICAgICAgICAgcmV0dXJuIFB5TG9u Z19Gcm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9ORykgdmFsdWUpOworKyNlbmRpZgorKyAgICAgICAg fQorKyAgICB9CisrICAgIHsKKysgICAgICAgIGludCBvbmUgPSAxOyBpbnQgbGl0dGxlID0gKGlu dCkqKHVuc2lnbmVkIGNoYXIgKikmb25lOworKyAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMg PSAodW5zaWduZWQgY2hhciAqKSZ2YWx1ZTsKKysgICAgICAgIHJldHVybiBfUHlMb25nX0Zyb21C eXRlQXJyYXkoYnl0ZXMsIHNpemVvZihlbnVtIG1wdl9lcnJvciksCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZSwgIWlzX3Vuc2lnbmVkKTsKKysgICAgfQorK30K KysKKysvKiBDSW50VG9QeSAqLworK3N0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoZW51bSBtcHZfbG9nX2xldmVsIHZhbHVl KSB7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdu b3N0aWMgcHVzaAorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9u IgorKyNlbmRpZgorKyAgICBjb25zdCBlbnVtIG1wdl9sb2dfbGV2ZWwgbmVnX29uZSA9IChlbnVt IG1wdl9sb2dfbGV2ZWwpIC0xLCBjb25zdF96ZXJvID0gKGVudW0gbXB2X2xvZ19sZXZlbCkgMDsK KysjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3Rp YyBwb3AKKysjZW5kaWYKKysgICAgY29uc3QgaW50IGlzX3Vuc2lnbmVkID0gbmVnX29uZSA+IGNv bnN0X3plcm87CisrICAgIGlmIChpc191bnNpZ25lZCkgeworKyAgICAgICAgaWYgKHNpemVvZihl bnVtIG1wdl9sb2dfbGV2ZWwpIDwgc2l6ZW9mKGxvbmcpKSB7CisrICAgICAgICAgICAgcmV0dXJu IFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CisrICAgICAgICB9IGVsc2UgaWYgKHNpemVv ZihlbnVtIG1wdl9sb2dfbGV2ZWwpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworKyAgICAg ICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFs dWUpOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2Yo ZW51bSBtcHZfbG9nX2xldmVsKSA8PSBzaXplb2YodW5zaWduZWQgUFlfTE9OR19MT05HKSkgewor KyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVk IFBZX0xPTkdfTE9ORykgdmFsdWUpOworKyNlbmRpZgorKyAgICAgICAgfQorKyAgICB9IGVsc2Ug eworKyAgICAgICAgaWYgKHNpemVvZihlbnVtIG1wdl9sb2dfbGV2ZWwpIDw9IHNpemVvZihsb25n KSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOwor ICNpZmRlZiBIQVZFX0xPTkdfTE9ORworLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVu dW0gbXB2X2V2ZW50X2lkKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworLSAgICAgICAgICAg ICAgICBfX1BZWF9WRVJJRllfUkVUVVJOX0lOVF9FWEMoZW51bSBtcHZfZXZlbnRfaWQsIFBZX0xP TkdfTE9ORywgUHlMb25nX0FzTG9uZ0xvbmcoeCkpCisrICAgICAgICB9IGVsc2UgaWYgKHNpemVv ZihlbnVtIG1wdl9sb2dfbGV2ZWwpIDw9IHNpemVvZihQWV9MT05HX0xPTkcpKSB7CisrICAgICAg ICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9ORykgdmFsdWUpOwor ICNlbmRpZgorLSAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKy0gICAgICAgIHsKKy0jaWYgQ1lU SE9OX0NPTVBJTElOR19JTl9QWVBZICYmICFkZWZpbmVkKF9QeUxvbmdfQXNCeXRlQXJyYXkpCist ICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIl9QeUxvbmdfQXNCeXRlQXJyYXkoKSBub3QgYXZhaWxhYmxl IGluIFB5UHksIGNhbm5vdCBjb252ZXJ0IGxhcmdlIG51bWJlcnMiKTsKKy0jZWxzZQorLSAgICAg ICAgICAgIGVudW0gbXB2X2V2ZW50X2lkIHZhbDsKKy0gICAgICAgICAgICBQeU9iamVjdCAqdiA9 IF9fUHl4X1B5TnVtYmVyX0ludE9yTG9uZyh4KTsKKy0gI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAz CistICAgICAgICAgICAgaWYgKGxpa2VseSh2KSAmJiAhUHlMb25nX0NoZWNrKHYpKSB7CistICAg ICAgICAgICAgICAgIFB5T2JqZWN0ICp0bXAgPSB2OworLSAgICAgICAgICAgICAgICB2ID0gUHlO dW1iZXJfTG9uZyh0bXApOworLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsKKy0gICAg ICAgICAgICB9CistICNlbmRpZgorLSAgICAgICAgICAgIGlmIChsaWtlbHkodikpIHsKKy0gICAg ICAgICAgICAgICAgaW50IG9uZSA9IDE7IGludCBpc19saXR0bGUgPSAoaW50KSoodW5zaWduZWQg Y2hhciAqKSZvbmU7CistICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVu c2lnbmVkIGNoYXIgKikmdmFsOworLSAgICAgICAgICAgICAgICBpbnQgcmV0ID0gX1B5TG9uZ19B c0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnl0ZXMsIHNpemVvZih2YWwpLAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19saXR0bGUsICFpc191bnNpZ25lZCk7 CistICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKy0gICAgICAgICAgICAgICAgaWYgKGxp a2VseSghcmV0KSkKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7CistICAgICAgICAg ICAgfQorKyAgICB9CisrICAgIHsKKysgICAgICAgIGludCBvbmUgPSAxOyBpbnQgbGl0dGxlID0g KGludCkqKHVuc2lnbmVkIGNoYXIgKikmb25lOworKyAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0 ZXMgPSAodW5zaWduZWQgY2hhciAqKSZ2YWx1ZTsKKysgICAgICAgIHJldHVybiBfUHlMb25nX0Zy b21CeXRlQXJyYXkoYnl0ZXMsIHNpemVvZihlbnVtIG1wdl9sb2dfbGV2ZWwpLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7CisrICAg IH0KKyt9CisrCisrLyogQ0ludFRvUHkgKi8KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVj dCogX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5kX2ZpbGVfcmVhc29uKGVudW0gbXB2X2Vu ZF9maWxlX3JlYXNvbiB2YWx1ZSkgeworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMK KysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGln bm9yZWQgIi1XY29udmVyc2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgZW51bSBtcHZfZW5kX2Zp bGVfcmVhc29uIG5lZ19vbmUgPSAoZW51bSBtcHZfZW5kX2ZpbGVfcmVhc29uKSAtMSwgY29uc3Rf emVybyA9IChlbnVtIG1wdl9lbmRfZmlsZV9yZWFzb24pIDA7CisrI2lmZGVmIF9fUHl4X0hBU19H Q0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisrI2VuZGlmCisrICAg IGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOworKyAgICBpZiAo aXNfdW5zaWduZWQpIHsKKysgICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfZW5kX2ZpbGVfcmVh c29uKSA8IHNpemVvZihsb25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9u ZygobG9uZykgdmFsdWUpOworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZW5k X2ZpbGVfcmVhc29uKSA8PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKKysgICAgICAgICAgICBy ZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZhbHVlKTsKKysj aWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2 X2VuZF9maWxlX3JlYXNvbikgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKKysg ICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQ WV9MT05HX0xPTkcpIHZhbHVlKTsKKyAjZW5kaWYKKy0gICAgICAgICAgICByZXR1cm4gKGVudW0g bXB2X2V2ZW50X2lkKSAtMTsKKyAgICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKy0gICAgICAgIGVu dW0gbXB2X2V2ZW50X2lkIHZhbDsKKy0gICAgICAgIFB5T2JqZWN0ICp0bXAgPSBfX1B5eF9QeU51 bWJlcl9JbnRPckxvbmcoeCk7CistICAgICAgICBpZiAoIXRtcCkgcmV0dXJuIChlbnVtIG1wdl9l dmVudF9pZCkgLTE7CistICAgICAgICB2YWwgPSBfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZXZl bnRfaWQodG1wKTsKKy0gICAgICAgIFB5X0RFQ1JFRih0bXApOworLSAgICAgICAgcmV0dXJuIHZh bDsKKysgICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfZW5kX2ZpbGVfcmVhc29uKSA8PSBzaXpl b2YobG9uZykpIHsKKysgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZh bHVlKTsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9m KGVudW0gbXB2X2VuZF9maWxlX3JlYXNvbikgPD0gc2l6ZW9mKFBZX0xPTkdfTE9ORykpIHsKKysg ICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZygoUFlfTE9OR19MT05HKSB2YWx1 ZSk7CisrI2VuZGlmCisrICAgICAgICB9CisrICAgIH0KKysgICAgeworKyAgICAgICAgaW50IG9u ZSA9IDE7IGludCBsaXR0bGUgPSAoaW50KSoodW5zaWduZWQgY2hhciAqKSZvbmU7CisrICAgICAg ICB1bnNpZ25lZCBjaGFyICpieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlOworKyAgICAg ICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShieXRlcywgc2l6ZW9mKGVudW0gbXB2X2Vu ZF9maWxlX3JlYXNvbiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp dHRsZSwgIWlzX3Vuc2lnbmVkKTsKKysgICAgfQorK30KKysKKysvKiBDSW50VG9QeSAqLworK3N0 YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9y ZW5kZXJfdXBkYXRlX2ZsYWcoZW51bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnIHZhbHVlKSB7Cisr I2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMg cHVzaAorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIgorKyNl bmRpZgorKyAgICBjb25zdCBlbnVtIG1wdl9yZW5kZXJfdXBkYXRlX2ZsYWcgbmVnX29uZSA9IChl bnVtIG1wdl9yZW5kZXJfdXBkYXRlX2ZsYWcpIC0xLCBjb25zdF96ZXJvID0gKGVudW0gbXB2X3Jl bmRlcl91cGRhdGVfZmxhZykgMDsKKysjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCisr I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKysjZW5kaWYKKysgICAgY29uc3QgaW50IGlzX3Vu c2lnbmVkID0gbmVnX29uZSA+IGNvbnN0X3plcm87CisrICAgIGlmIChpc191bnNpZ25lZCkgewor KyAgICAgICAgaWYgKHNpemVvZihlbnVtIG1wdl9yZW5kZXJfdXBkYXRlX2ZsYWcpIDwgc2l6ZW9m KGxvbmcpKSB7CisrICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1 ZSk7CisrICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihlbnVtIG1wdl9yZW5kZXJfdXBkYXRlX2Zs YWcpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxv bmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUpOworKyNpZmRlZiBIQVZF X0xPTkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfcmVuZGVyX3Vw ZGF0ZV9mbGFnKSA8PSBzaXplb2YodW5zaWduZWQgUFlfTE9OR19MT05HKSkgeworKyAgICAgICAg ICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIFBZX0xPTkdf TE9ORykgdmFsdWUpOworKyNlbmRpZgorKyAgICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAg ICAgaWYgKHNpemVvZihlbnVtIG1wdl9yZW5kZXJfdXBkYXRlX2ZsYWcpIDw9IHNpemVvZihsb25n KSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOwor KyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBt cHZfcmVuZGVyX3VwZGF0ZV9mbGFnKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworKyAgICAg ICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsK KysjZW5kaWYKKysgICAgICAgIH0KKysgICAgfQorKyAgICB7CisrICAgICAgICBpbnQgb25lID0g MTsgaW50IGxpdHRsZSA9IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsKKysgICAgICAgIHVu c2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVuc2lnbmVkIGNoYXIgKikmdmFsdWU7CisrICAgICAgICBy ZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YoZW51bSBtcHZfcmVuZGVy X3VwZGF0ZV9mbGFnKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0 dGxlLCAhaXNfdW5zaWduZWQpOworICAgICB9CistcmFpc2Vfb3ZlcmZsb3c6CistICAgIFB5RXJy X1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorLSAgICAgICAgInZhbHVlIHRvbyBsYXJn ZSB0byBjb252ZXJ0IHRvIGVudW0gbXB2X2V2ZW50X2lkIik7CistICAgIHJldHVybiAoZW51bSBt cHZfZXZlbnRfaWQpIC0xOworLXJhaXNlX25lZ19vdmVyZmxvdzoKKy0gICAgUHlFcnJfU2V0U3Ry aW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCistICAgICAgICAiY2FuJ3QgY29udmVydCBuZWdhdGl2 ZSB2YWx1ZSB0byBlbnVtIG1wdl9ldmVudF9pZCIpOworLSAgICByZXR1cm4gKGVudW0gbXB2X2V2 ZW50X2lkKSAtMTsKKyB9CisgCisgLyogQ0ludEZyb21QeSAqLworIHN0YXRpYyBDWVRIT05fSU5M SU5FIGxvbmcgX19QeXhfUHlJbnRfQXNfbG9uZyhQeU9iamVjdCAqeCkgeworLSAgICBjb25zdCBs b25nIG5lZ19vbmUgPSAobG9uZykgKChsb25nKSAwIC0gKGxvbmcpIDEpLCBjb25zdF96ZXJvID0g KGxvbmcpIDA7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0ND IGRpYWdub3N0aWMgcHVzaAorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252 ZXJzaW9uIgorKyNlbmRpZgorKyAgICBjb25zdCBsb25nIG5lZ19vbmUgPSAobG9uZykgLTEsIGNv bnN0X3plcm8gPSAobG9uZykgMDsKKysjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCisr I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKysjZW5kaWYKKyAgICAgY29uc3QgaW50IGlzX3Vu c2lnbmVkID0gbmVnX29uZSA+IGNvbnN0X3plcm87CisgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAz CisgICAgIGlmIChsaWtlbHkoUHlJbnRfQ2hlY2soeCkpKSB7CitAQCAtMzQxODksOSArMzEwMzMs OTIgQEAgc3RhdGljIENZVEhPTl9JTkxJTkUgbG9uZyBfX1B5eF9QeUludF9Bc19sb25nKFB5T2Jq ZWN0ICp4KSB7CisgICAgIHJldHVybiAobG9uZykgLTE7CisgfQorIAorKy8qIENJbnRUb1B5ICov Cisrc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21faW50NjRf dChpbnQ2NF90IHZhbHVlKSB7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNw cmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3Jl ZCAiLVdjb252ZXJzaW9uIgorKyNlbmRpZgorKyAgICBjb25zdCBpbnQ2NF90IG5lZ19vbmUgPSAo aW50NjRfdCkgLTEsIGNvbnN0X3plcm8gPSAoaW50NjRfdCkgMDsKKysjaWZkZWYgX19QeXhfSEFT X0dDQ19ESUFHTk9TVElDCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKysjZW5kaWYKKysg ICAgY29uc3QgaW50IGlzX3Vuc2lnbmVkID0gbmVnX29uZSA+IGNvbnN0X3plcm87CisrICAgIGlm IChpc191bnNpZ25lZCkgeworKyAgICAgICAgaWYgKHNpemVvZihpbnQ2NF90KSA8IHNpemVvZihs b25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUp OworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoaW50NjRfdCkgPD0gc2l6ZW9mKHVuc2lnbmVk IGxvbmcpKSB7CisrICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1 bnNpZ25lZCBsb25nKSB2YWx1ZSk7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgICB9 IGVsc2UgaWYgKHNpemVvZihpbnQ2NF90KSA8PSBzaXplb2YodW5zaWduZWQgUFlfTE9OR19MT05H KSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVu c2lnbmVkIFBZX0xPTkdfTE9ORykgdmFsdWUpOworKyNlbmRpZgorKyAgICAgICAgfQorKyAgICB9 IGVsc2UgeworKyAgICAgICAgaWYgKHNpemVvZihpbnQ2NF90KSA8PSBzaXplb2YobG9uZykpIHsK KysgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKKysjaWZk ZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGludDY0X3QpIDw9 IHNpemVvZihQWV9MT05HX0xPTkcpKSB7CisrICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9t TG9uZ0xvbmcoKFBZX0xPTkdfTE9ORykgdmFsdWUpOworKyNlbmRpZgorKyAgICAgICAgfQorKyAg ICB9CisrICAgIHsKKysgICAgICAgIGludCBvbmUgPSAxOyBpbnQgbGl0dGxlID0gKGludCkqKHVu c2lnbmVkIGNoYXIgKikmb25lOworKyAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSAodW5z aWduZWQgY2hhciAqKSZ2YWx1ZTsKKysgICAgICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJy YXkoYnl0ZXMsIHNpemVvZihpbnQ2NF90KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGl0dGxlLCAhaXNfdW5zaWduZWQpOworKyAgICB9CisrfQorKworKy8qIENJbnRU b1B5ICovCisrc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21f dWludDY0X3QodWludDY0X3QgdmFsdWUpIHsKKysjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9T VElDCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3Rp YyBpZ25vcmVkICItV2NvbnZlcnNpb24iCisrI2VuZGlmCisrICAgIGNvbnN0IHVpbnQ2NF90IG5l Z19vbmUgPSAodWludDY0X3QpIC0xLCBjb25zdF96ZXJvID0gKHVpbnQ2NF90KSAwOworKyNpZmRl ZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAor KyNlbmRpZgorKyAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVy bzsKKysgICAgaWYgKGlzX3Vuc2lnbmVkKSB7CisrICAgICAgICBpZiAoc2l6ZW9mKHVpbnQ2NF90 KSA8IHNpemVvZihsb25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygo bG9uZykgdmFsdWUpOworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YodWludDY0X3QpIDw9IHNp emVvZih1bnNpZ25lZCBsb25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVu c2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUpOworKyNpZmRlZiBIQVZFX0xPTkdfTE9O RworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YodWludDY0X3QpIDw9IHNpemVvZih1bnNpZ25l ZCBQWV9MT05HX0xPTkcpKSB7CisrICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWdu ZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKSB2YWx1ZSk7CisrI2VuZGlmCisrICAg ICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgICBpZiAoc2l6ZW9mKHVpbnQ2NF90KSA8PSBz aXplb2YobG9uZykpIHsKKysgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcp IHZhbHVlKTsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICAgIH0gZWxzZSBpZiAoc2l6 ZW9mKHVpbnQ2NF90KSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworKyAgICAgICAgICAgIHJl dHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsKKysjZW5kaWYK KysgICAgICAgIH0KKysgICAgfQorKyAgICB7CisrICAgICAgICBpbnQgb25lID0gMTsgaW50IGxp dHRsZSA9IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsKKysgICAgICAgIHVuc2lnbmVkIGNo YXIgKmJ5dGVzID0gKHVuc2lnbmVkIGNoYXIgKikmdmFsdWU7CisrICAgICAgICByZXR1cm4gX1B5 TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YodWludDY0X3QpLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7CisrICAgIH0K Kyt9CisrCisgLyogQ0ludEZyb21QeSAqLworIHN0YXRpYyBDWVRIT05fSU5MSU5FIHVpbnQ2NF90 IF9fUHl4X1B5SW50X0FzX3VpbnQ2NF90KFB5T2JqZWN0ICp4KSB7CistICAgIGNvbnN0IHVpbnQ2 NF90IG5lZ19vbmUgPSAodWludDY0X3QpICgodWludDY0X3QpIDAgLSAodWludDY0X3QpIDEpLCBj b25zdF96ZXJvID0gKHVpbnQ2NF90KSAwOworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NU SUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGlj IGlnbm9yZWQgIi1XY29udmVyc2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgdWludDY0X3QgbmVn X29uZSA9ICh1aW50NjRfdCkgLTEsIGNvbnN0X3plcm8gPSAodWludDY0X3QpIDA7CisrI2lmZGVm IF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisr I2VuZGlmCisgICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJv OworICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworICAgICBpZiAobGlrZWx5KFB5SW50X0NoZWNr KHgpKSkgeworQEAgLTM0Mzc4LDkgKzMxMzA1LDU0IEBAIHN0YXRpYyBDWVRIT05fSU5MSU5FIHVp bnQ2NF90IF9fUHl4X1B5SW50X0FzX3VpbnQ2NF90KFB5T2JqZWN0ICp4KSB7CisgICAgIHJldHVy biAodWludDY0X3QpIC0xOworIH0KKyAKKysvKiBDSW50VG9QeSAqLworK3N0YXRpYyBDWVRIT05f SU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoZW51bSBt cHZfZm9ybWF0IHZhbHVlKSB7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNw cmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3Jl ZCAiLVdjb252ZXJzaW9uIgorKyNlbmRpZgorKyAgICBjb25zdCBlbnVtIG1wdl9mb3JtYXQgbmVn X29uZSA9IChlbnVtIG1wdl9mb3JtYXQpIC0xLCBjb25zdF96ZXJvID0gKGVudW0gbXB2X2Zvcm1h dCkgMDsKKysjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCisrI3ByYWdtYSBHQ0MgZGlh Z25vc3RpYyBwb3AKKysjZW5kaWYKKysgICAgY29uc3QgaW50IGlzX3Vuc2lnbmVkID0gbmVnX29u ZSA+IGNvbnN0X3plcm87CisrICAgIGlmIChpc191bnNpZ25lZCkgeworKyAgICAgICAgaWYgKHNp emVvZihlbnVtIG1wdl9mb3JtYXQpIDwgc2l6ZW9mKGxvbmcpKSB7CisrICAgICAgICAgICAgcmV0 dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CisrICAgICAgICB9IGVsc2UgaWYgKHNp emVvZihlbnVtIG1wdl9mb3JtYXQpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworKyAgICAg ICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFs dWUpOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2Yo ZW51bSBtcHZfZm9ybWF0KSA8PSBzaXplb2YodW5zaWduZWQgUFlfTE9OR19MT05HKSkgeworKyAg ICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIFBZ X0xPTkdfTE9ORykgdmFsdWUpOworKyNlbmRpZgorKyAgICAgICAgfQorKyAgICB9IGVsc2Ugewor KyAgICAgICAgaWYgKHNpemVvZihlbnVtIG1wdl9mb3JtYXQpIDw9IHNpemVvZihsb25nKSkgewor KyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworKyNpZmRl ZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZm9y bWF0KSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxv bmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsKKysjZW5kaWYKKysgICAgICAg IH0KKysgICAgfQorKyAgICB7CisrICAgICAgICBpbnQgb25lID0gMTsgaW50IGxpdHRsZSA9IChp bnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsKKysgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVz ID0gKHVuc2lnbmVkIGNoYXIgKikmdmFsdWU7CisrICAgICAgICByZXR1cm4gX1B5TG9uZ19Gcm9t Qnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YoZW51bSBtcHZfZm9ybWF0KSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGl0dGxlLCAhaXNfdW5zaWduZWQpOworKyAgICB9Cisr fQorKworIC8qIENJbnRGcm9tUHkgKi8KKyBzdGF0aWMgQ1lUSE9OX0lOTElORSBlbnVtIG1wdl9m b3JtYXQgX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2Zvcm1hdChQeU9iamVjdCAqeCkgeworLSAg ICBjb25zdCBlbnVtIG1wdl9mb3JtYXQgbmVnX29uZSA9IChlbnVtIG1wdl9mb3JtYXQpICgoZW51 bSBtcHZfZm9ybWF0KSAwIC0gKGVudW0gbXB2X2Zvcm1hdCkgMSksIGNvbnN0X3plcm8gPSAoZW51 bSBtcHZfZm9ybWF0KSAwOworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKKysjcHJh Z21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQg Ii1XY29udmVyc2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgZW51bSBtcHZfZm9ybWF0IG5lZ19v bmUgPSAoZW51bSBtcHZfZm9ybWF0KSAtMSwgY29uc3RfemVybyA9IChlbnVtIG1wdl9mb3JtYXQp IDA7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdu b3N0aWMgcG9wCisrI2VuZGlmCisgICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUg PiBjb25zdF96ZXJvOworICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworICAgICBpZiAobGlrZWx5 KFB5SW50X0NoZWNrKHgpKSkgeworQEAgLTM0NTY5LDcgKzMxNTQxLDE0IEBAIHN0YXRpYyBDWVRI T05fSU5MSU5FIGVudW0gbXB2X2Zvcm1hdCBfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZm9ybWF0 KFB5T2JqZWN0ICp4CisgCisgLyogQ0ludEZyb21QeSAqLworIHN0YXRpYyBDWVRIT05fSU5MSU5F IGludDY0X3QgX19QeXhfUHlJbnRfQXNfaW50NjRfdChQeU9iamVjdCAqeCkgeworLSAgICBjb25z dCBpbnQ2NF90IG5lZ19vbmUgPSAoaW50NjRfdCkgKChpbnQ2NF90KSAwIC0gKGludDY0X3QpIDEp LCBjb25zdF96ZXJvID0gKGludDY0X3QpIDA7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05P U1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorKyNwcmFnbWEgR0NDIGRpYWdub3N0 aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIgorKyNlbmRpZgorKyAgICBjb25zdCBpbnQ2NF90IG5l Z19vbmUgPSAoaW50NjRfdCkgLTEsIGNvbnN0X3plcm8gPSAoaW50NjRfdCkgMDsKKysjaWZkZWYg X19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKysj ZW5kaWYKKyAgICAgY29uc3QgaW50IGlzX3Vuc2lnbmVkID0gbmVnX29uZSA+IGNvbnN0X3plcm87 CisgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisgICAgIGlmIChsaWtlbHkoUHlJbnRfQ2hlY2so eCkpKSB7CitAQCAtMzQ3NTgsNyArMzE3MzcsMTQgQEAgc3RhdGljIENZVEhPTl9JTkxJTkUgaW50 NjRfdCBfX1B5eF9QeUludF9Bc19pbnQ2NF90KFB5T2JqZWN0ICp4KSB7CisgCisgLyogQ0ludEZy b21QeSAqLworIHN0YXRpYyBDWVRIT05fSU5MSU5FIGludHB0cl90IF9fUHl4X1B5SW50X0FzX2lu dHB0cl90KFB5T2JqZWN0ICp4KSB7CistICAgIGNvbnN0IGludHB0cl90IG5lZ19vbmUgPSAoaW50 cHRyX3QpICgoaW50cHRyX3QpIDAgLSAoaW50cHRyX3QpIDEpLCBjb25zdF96ZXJvID0gKGludHB0 cl90KSAwOworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKKysjcHJhZ21hIEdDQyBk aWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XY29udmVy c2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgaW50cHRyX3QgbmVnX29uZSA9IChpbnRwdHJfdCkg LTEsIGNvbnN0X3plcm8gPSAoaW50cHRyX3QpIDA7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElB R05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisrI2VuZGlmCisgICAgIGNvbnN0 IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOworICNpZiBQWV9NQUpPUl9W RVJTSU9OIDwgMworICAgICBpZiAobGlrZWx5KFB5SW50X0NoZWNrKHgpKSkgeworQEAgLTM0OTQ1 LDYgKzMxOTMxLDQ0IEBAIHN0YXRpYyBDWVRIT05fSU5MSU5FIGludHB0cl90IF9fUHl4X1B5SW50 X0FzX2ludHB0cl90KFB5T2JqZWN0ICp4KSB7CisgICAgIHJldHVybiAoaW50cHRyX3QpIC0xOwor IH0KKyAKKysvKiBDSW50VG9QeSAqLworK3N0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBf X1B5eF9QeUludF9Gcm9tX2xvbmcobG9uZyB2YWx1ZSkgeworKyNpZmRlZiBfX1B5eF9IQVNfR0ND X0RJQUdOT1NUSUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBk aWFnbm9zdGljIGlnbm9yZWQgIi1XY29udmVyc2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgbG9u ZyBuZWdfb25lID0gKGxvbmcpIC0xLCBjb25zdF96ZXJvID0gKGxvbmcpIDA7CisrI2lmZGVmIF9f UHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisrI2Vu ZGlmCisrICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOwor KyAgICBpZiAoaXNfdW5zaWduZWQpIHsKKysgICAgICAgIGlmIChzaXplb2YobG9uZykgPCBzaXpl b2YobG9uZykpIHsKKysgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZh bHVlKTsKKysgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGxvbmcpIDw9IHNpemVvZih1bnNpZ25l ZCBsb25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygo dW5zaWduZWQgbG9uZykgdmFsdWUpOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAg fSBlbHNlIGlmIChzaXplb2YobG9uZykgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykp IHsKKysgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNp Z25lZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKKysjZW5kaWYKKysgICAgICAgIH0KKysgICAgfSBl bHNlIHsKKysgICAgICAgIGlmIChzaXplb2YobG9uZykgPD0gc2l6ZW9mKGxvbmcpKSB7CisrICAg ICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CisrI2lmZGVmIEhB VkVfTE9OR19MT05HCisrICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihsb25nKSA8PSBzaXplb2Yo UFlfTE9OR19MT05HKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25n KChQWV9MT05HX0xPTkcpIHZhbHVlKTsKKysjZW5kaWYKKysgICAgICAgIH0KKysgICAgfQorKyAg ICB7CisrICAgICAgICBpbnQgb25lID0gMTsgaW50IGxpdHRsZSA9IChpbnQpKih1bnNpZ25lZCBj aGFyICopJm9uZTsKKysgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVuc2lnbmVkIGNo YXIgKikmdmFsdWU7CisrICAgICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVz LCBzaXplb2YobG9uZyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp dHRsZSwgIWlzX3Vuc2lnbmVkKTsKKysgICAgfQorK30KKysKKyAvKiBDaGVja0JpbmFyeVZlcnNp b24gKi8KKyBzdGF0aWMgaW50IF9fUHl4X2NoZWNrX2JpbmFyeV92ZXJzaW9uKHZvaWQpIHsKKyAg ICAgY2hhciBjdHZlcnNpb25bNF0sIHJ0dmVyc2lvbls0XTsKK0BAIC0zNTIxMSw3ICszMjIzNSw3 IEBAIHN0YXRpYyBDWVRIT05fSU5MSU5FIFB5X3NzaXplX3QgX19QeXhfUHlJbmRleF9Bc1NzaXpl X3QoUHlPYmplY3QqIGIpIHsKKyB9Cisgc3RhdGljIENZVEhPTl9JTkxJTkUgUHlfaGFzaF90IF9f UHl4X1B5SW5kZXhfQXNIYXNoX3QoUHlPYmplY3QqIG8pIHsKKyAgIGlmIChzaXplb2YoUHlfaGFz aF90KSA9PSBzaXplb2YoUHlfc3NpemVfdCkpIHsKKy0gICAgcmV0dXJuIF9fUHl4X1B5SW5kZXhf QXNTc2l6ZV90KG8pOworKyAgICByZXR1cm4gKFB5X2hhc2hfdCkgX19QeXhfUHlJbmRleF9Bc1Nz aXplX3Qobyk7CisgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisgICB9IGVsc2UgaWYgKGxpa2Vs eShQeUludF9DaGVja0V4YWN0KG8pKSkgeworICAgICByZXR1cm4gUHlJbnRfQVNfTE9ORyhvKTsK K2RpZmYgLS1naXQgYS92aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IGIvdmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eAoraW5kZXggNTQwZWE2NDkuLjhhZjJkY2M3IDEwMDY0NAorLS0tIGEv dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eAorKysrIGIvdmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eAorQEAgLTMwLDggKzMwLDggQEAgZnJvbSBjbGllbnQgY2ltcG9ydCAqCisgX192ZXJz aW9uX18gPSAiMC4zLjAiCisgX19hdXRob3JfXyA9ICJBbmRyZSBEIgorIAorLV9SRVFVSVJFRF9D QVBJX01BSk9SID0gMQorLV9NSU5fQ0FQSV9NSU5PUiA9IDkKKytfUkVRVUlSRURfQ0FQSV9NQUpP UiA9IDIKKytfTUlOX0NBUElfTUlOT1IgPSAwCisgCisgY2RlZiB1bnNpZ25lZCBsb25nIF9DQVBJ X1ZFUlNJT04KKyB3aXRoIG5vZ2lsOgorQEAgLTQ3LDcgKzQ3LDcgQEAgaWYgX0NBUElfTUFKT1Ig IT0gX1JFUVVJUkVEX0NBUElfTUFKT1Igb3IgX0NBUElfTUlOT1IgPCBfTUlOX0NBUElfTUlOT1I6 CisgICAgICkKKyAKKyBjZGVmIGV4dGVybiBmcm9tICJQeXRob24uaCI6CistICAgIHZvaWQgUHlF dmFsX0luaXRUaHJlYWRzKCkKKysgICAgdm9pZCBQeV9Jbml0aWFsaXplKCkKKyAKKyBfaXNfcHkz ID0gc3lzLnZlcnNpb25faW5mbyA+PSAoMywpCisgX3N0cmRlY19lcnIgPSAic3Vycm9nYXRlZXNj YXBlIiBpZiBfaXNfcHkzIGVsc2UgInN0cmljdCIKK0BAIC02Nyw3ICs2Nyw3IEBAIGRlZiBfc3Ry ZW5jKHMpOgorICAgICAgICAgIyBJbiBweXRob24yLCBhc3N1bWUgYnl0ZXMgYW5kIHdhbGsgcmln aHQgdGhyb3VnaAorICAgICAgICAgcmV0dXJuIHMKKyAKKy1QeUV2YWxfSW5pdFRocmVhZHMoKQor K1B5X0luaXRpYWxpemUoKQorIAorIGNsYXNzIEVycm9yczoKKyAgICAgIiIiU2V0IG9mIGtub3du IGVycm9yIGNvZGVzIGZyb20gTXB2RXJyb3IgYW5kIEV2ZW50IHJlc3BvbnNlcy4KK0BAIC0xMTQs MjEgKzExNCwyMSBAQCBjbGFzcyBFdmVudHM6CisgICAgIHN0YXJ0X2ZpbGUgPSBNUFZfRVZFTlRf U1RBUlRfRklMRQorICAgICBlbmRfZmlsZSA9IE1QVl9FVkVOVF9FTkRfRklMRQorICAgICBmaWxl X2xvYWRlZCA9IE1QVl9FVkVOVF9GSUxFX0xPQURFRAorLSAgICB0cmFja3NfY2hhbmdlZCA9IE1Q Vl9FVkVOVF9UUkFDS1NfQ0hBTkdFRAorLSAgICB0cmFja3Nfc3dpdGNoZWQgPSBNUFZfRVZFTlRf VFJBQ0tfU1dJVENIRUQKKysgICAgIyB0cmFja3NfY2hhbmdlZCA9IE1QVl9FVkVOVF9UUkFDS1Nf Q0hBTkdFRAorKyAgICAjIHRyYWNrc19zd2l0Y2hlZCA9IE1QVl9FVkVOVF9UUkFDS19TV0lUQ0hF RAorICAgICBpZGxlID0gTVBWX0VWRU5UX0lETEUKKy0gICAgcGF1c2UgPSBNUFZfRVZFTlRfUEFV U0UKKy0gICAgdW5wYXVzZSA9IE1QVl9FVkVOVF9VTlBBVVNFCisrICAgICMgcGF1c2UgPSBNUFZf RVZFTlRfUEFVU0UKKysgICAgIyB1bnBhdXNlID0gTVBWX0VWRU5UX1VOUEFVU0UKKyAgICAgdGlj ayA9IE1QVl9FVkVOVF9USUNLCistICAgIHNjcmlwdF9pbnB1dF9kaXNwYXRjaCA9IE1QVl9FVkVO VF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0gKKysgICAgIyBzY3JpcHRfaW5wdXRfZGlzcGF0Y2ggPSBN UFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENICisgICAgIGNsaWVudF9tZXNzYWdlID0gTVBW X0VWRU5UX0NMSUVOVF9NRVNTQUdFCisgICAgIHZpZGVvX3JlY29uZmlnID0gTVBWX0VWRU5UX1ZJ REVPX1JFQ09ORklHCisgICAgIGF1ZGlvX3JlY29uZmlnID0gTVBWX0VWRU5UX0FVRElPX1JFQ09O RklHCistICAgIG1ldGFkYXRhX3VwZGF0ZSA9IE1QVl9FVkVOVF9NRVRBREFUQV9VUERBVEUKKysg ICAgIyBtZXRhZGF0YV91cGRhdGUgPSBNUFZfRVZFTlRfTUVUQURBVEFfVVBEQVRFCisgICAgIHNl ZWsgPSBNUFZfRVZFTlRfU0VFSworICAgICBwbGF5YmFja19yZXN0YXJ0ID0gTVBWX0VWRU5UX1BM QVlCQUNLX1JFU1RBUlQKKyAgICAgcHJvcGVydHlfY2hhbmdlID0gTVBWX0VWRU5UX1BST1BFUlRZ X0NIQU5HRQorLSAgICBjaGFwdGVyX2NoYW5nZSA9IE1QVl9FVkVOVF9DSEFQVEVSX0NIQU5HRQor KyAgICAjIGNoYXB0ZXJfY2hhbmdlID0gTVBWX0VWRU5UX0NIQVBURVJfQ0hBTkdFCisgCisgCisg Y2xhc3MgTG9nTGV2ZWxzOgorQEAgLTE2NiwxNyArMTY2LDE3IEBAIGNkZWYgY2xhc3MgRW5kT2ZG aWxlUmVhY2hlZChvYmplY3QpOgorICAgICAgICAgcmV0dXJuIHNlbGYKKyAKKyAKKy1jZGVmIGNs YXNzIElucHV0RGlzcGF0Y2gob2JqZWN0KToKKy0gICAgIiIiRGF0YSBmaWVsZCBmb3IgTVBWX0VW RU5UX1NDUklQVF9JTlBVVF9ESVNQQVRDSCBldmVudHMuCisrIyBjZGVmIGNsYXNzIElucHV0RGlz cGF0Y2gob2JqZWN0KToKKysjICAgICAiIiJEYXRhIGZpZWxkIGZvciBNUFZfRVZFTlRfU0NSSVBU X0lOUFVUX0RJU1BBVENIIGV2ZW50cy4KKyAKKy0gICAgV3JhcHM6IG1wdl9ldmVudF9zY3JpcHRf aW5wdXRfZGlzcGF0Y2gKKy0gICAgIiIiCistICAgIGNkZWYgcHVibGljIG9iamVjdCBhcmcwLCB0 eXBlCisrIyAgICAgV3JhcHM6IG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2gKKysjICAg ICAiIiIKKysjICAgICBjZGVmIHB1YmxpYyBvYmplY3QgYXJnMCwgdHlwZQorIAorLSAgICBjZGVm IF9pbml0KHNlbGYsIG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2gqIGlucHV0KToKKy0g ICAgICAgIHNlbGYuYXJnMCA9IGlucHV0LmFyZzAKKy0gICAgICAgIHNlbGYudHlwZSA9IF9zdHJk ZWMoaW5wdXQudHlwZSkKKy0gICAgICAgIHJldHVybiBzZWxmCisrIyAgICAgY2RlZiBfaW5pdChz ZWxmLCBtcHZfZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3BhdGNoKiBpbnB1dCk6CisrIyAgICAgICAg IHNlbGYuYXJnMCA9IGlucHV0LmFyZzAKKysjICAgICAgICAgc2VsZi50eXBlID0gX3N0cmRlYyhp bnB1dC50eXBlKQorKyMgICAgICAgICByZXR1cm4gc2VsZgorIAorIAorIGNkZWYgY2xhc3MgTG9n TWVzc2FnZShvYmplY3QpOgorQEAgLTI3Niw4ICsyNzYsOCBAQCBjZGVmIGNsYXNzIEV2ZW50KG9i amVjdCk6CisgICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9w cm9wZXJ0eSo+ZGF0YSkKKyAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfTE9HX01F U1NBR0U6CisgICAgICAgICAgICAgcmV0dXJuIExvZ01lc3NhZ2UoKS5faW5pdCg8bXB2X2V2ZW50 X2xvZ19tZXNzYWdlKj5kYXRhKQorLSAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9T Q1JJUFRfSU5QVVRfRElTUEFUQ0g6CistICAgICAgICAgICAgcmV0dXJuIElucHV0RGlzcGF0Y2go KS5faW5pdCg8bXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0YSkKKysgICAgICAg ICMgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0g6CisrICAg ICAgICAjICAgICByZXR1cm4gSW5wdXREaXNwYXRjaCgpLl9pbml0KDxtcHZfZXZlbnRfc2NyaXB0 X2lucHV0X2Rpc3BhdGNoKj5kYXRhKQorICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVO VF9DTElFTlRfTUVTU0FHRToKKyAgICAgICAgICAgICBjbGltc2cgPSA8bXB2X2V2ZW50X2NsaWVu dF9tZXNzYWdlKj5kYXRhCisgICAgICAgICAgICAgYXJncyA9IFtdCitAQCAtMzk2LDE3ICszOTYs MTcgQEAgY2RlZiBjbGFzcyBDb250ZXh0KG9iamVjdCk6CisgICAgICAgICAgICAgdGltZSA9IG1w dl9nZXRfdGltZV91cyhzZWxmLl9jdHgpCisgICAgICAgICByZXR1cm4gdGltZQorIAorLSAgICBk ZWYgc3VzcGVuZChzZWxmKToKKy0gICAgICAgICIiIldyYXBzOiBtcHZfc3VzcGVuZCIiIgorLSAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorLSAgICAgICAgd2l0aCBub2dpbDoKKy0gICAgICAgICAg ICBtcHZfc3VzcGVuZChzZWxmLl9jdHgpCisrICAgICMgZGVmIHN1c3BlbmQoc2VsZik6CisrICAg ICMgICAgICIiIldyYXBzOiBtcHZfc3VzcGVuZCIiIgorKyAgICAjICAgICBhc3NlcnQgc2VsZi5f Y3R4CisrICAgICMgICAgIHdpdGggbm9naWw6CisrICAgICMgICAgICAgICBtcHZfc3VzcGVuZChz ZWxmLl9jdHgpCisgCistICAgIGRlZiByZXN1bWUoc2VsZik6CistICAgICAgICAiIiJXcmFwczog bXB2X3Jlc3VtZSIiIgorLSAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorLSAgICAgICAgd2l0aCBu b2dpbDoKKy0gICAgICAgICAgICBtcHZfcmVzdW1lKHNlbGYuX2N0eCkKKysgICAgIyBkZWYgcmVz dW1lKHNlbGYpOgorKyAgICAjICAgICAiIiJXcmFwczogbXB2X3Jlc3VtZSIiIgorKyAgICAjICAg ICBhc3NlcnQgc2VsZi5fY3R4CisrICAgICMgICAgIHdpdGggbm9naWw6CisrICAgICMgICAgICAg ICBtcHZfcmVzdW1lKHNlbGYuX2N0eCkKKyAKKyAgICAgQF9lcnJvcnMKKyAgICAgZGVmIHJlcXVl c3RfZXZlbnQoc2VsZiwgZXZlbnQsIGVuYWJsZSk6CitAQCAtNzk4LDE3ICs3OTgsMTcgQEAgY2Rl ZiBjbGFzcyBDb250ZXh0KG9iamVjdCk6CisgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0g Tm9uZQorICAgICAgICAgc2VsZi5fY3R4ID0gTlVMTAorIAorLSAgICBkZWYgb3BlbmdsX2NiX2Fw aShzZWxmKToKKy0gICAgICAgIGNkZWYgdm9pZCAqY2IKKysgICAgIyBkZWYgb3BlbmdsX2NiX2Fw aShzZWxmKToKKysgICAgIyAgICAgY2RlZiB2b2lkICpjYgorIAorLSAgICAgICAgX2N0eCA9IG1w dl9nZXRfc3ViX2FwaShzZWxmLl9jdHgsIE1QVl9TVUJfQVBJX09QRU5HTF9DQikKKy0gICAgICAg IGlmIG5vdCBfY3R4OgorLSAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKCJPcGVuR0wgQVBJIG5v dCBhdmFpbGFibGUiKQorKyAgICAjICAgICBfY3R4ID0gbXB2X2dldF9zdWJfYXBpKHNlbGYuX2N0 eCwgTVBWX1NVQl9BUElfT1BFTkdMX0NCKQorKyAgICAjICAgICBpZiBub3QgX2N0eDoKKysgICAg IyAgICAgICAgIHJhaXNlIE1QVkVycm9yKCJPcGVuR0wgQVBJIG5vdCBhdmFpbGFibGUiKQorIAor LSAgICAgICAgY3R4ID0gT3BlbkdMQ29udGV4dCgpCistICAgICAgICBjdHguX2N0eCA9IDxtcHZf b3BlbmdsX2NiX2NvbnRleHQqPl9jdHgKKysgICAgIyAgICAgY3R4ID0gT3BlbkdMQ29udGV4dCgp CisrICAgICMgICAgIGN0eC5fY3R4ID0gPG1wdl9vcGVuZ2xfY2JfY29udGV4dCo+X2N0eAorIAor LSAgICAgICAgcmV0dXJuIGN0eAorKyAgICAjICAgICByZXR1cm4gY3R4CisgCisgICAgIGRlZiBf X2RlYWxsb2NfXyhzZWxmKToKKyAgICAgICAgIHNlbGYuc2h1dGRvd24oKQorQEAgLTgxOSw2MiAr ODE5LDYyIEBAIGNkZWYgdm9pZCAqX2NfZ2V0cHJvY2FkZHJlc3Modm9pZCAqY3R4LCBjb25zdCBj aGFyICpuYW1lKSB3aXRoIGdpbDoKKyBjZGVmIHZvaWQgX2NfdXBkYXRlY2Iodm9pZCAqY3R4KSB3 aXRoIGdpbDoKKyAgICAgKDxvYmplY3Q+Y3R4KSgpCisgCistY2RlZiBjbGFzcyBPcGVuR0xDb250 ZXh0KG9iamVjdCk6CistICAgIGNkZWY6CistICAgICAgICBtcHZfb3BlbmdsX2NiX2NvbnRleHQg Kl9jdHgKKy0gICAgICAgIGJpbnQgaW5pdGVkCistICAgICAgICBvYmplY3QgdXBkYXRlX2NiCist CistICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKy0gICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UK Ky0gICAgICAgIHdhcm5pbmdzLndhcm4oIk9wZW5HTENvbnRleHQgaXMgZGVwcmVjYXRlZCwgcGxl YXNlIHN3aXRjaCB0byBSZW5kZXJDb250ZXh0IiwgRGVwcmVjYXRpb25XYXJuaW5nKQorLQorLSAg ICBkZWYgaW5pdF9nbChzZWxmLCBleHRzLCBnZXRfcHJvY19hZGRyZXNzKToKKy0gICAgICAgIGV4 dHMgPSBfc3RyZW5jKGV4dHMpIGlmIGV4dHMgaXMgbm90IE5vbmUgZWxzZSBOb25lCistICAgICAg ICBjZGVmIGNoYXIqIGV4dHNjID0gTlVMTAorLSAgICAgICAgaWYgZXh0cyBpcyBub3QgTm9uZToK Ky0gICAgICAgICAgICBleHRzYyA9IGV4dHMKKy0gICAgICAgIHdpdGggbm9naWw6CistICAgICAg ICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9pbml0X2dsKHNlbGYuX2N0eCwgZXh0c2MsICZfY19n ZXRwcm9jYWRkcmVzcywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PHZvaWQgKj5nZXRfcHJvY19hZGRyZXNzKQorLSAgICAgICAgaWYgZXJyIDwgMDoKKy0gICAgICAg ICAgICByYWlzZSBNUFZFcnJvcihlcnIpCistCistICAgICAgICBzZWxmLmluaXRlZCA9IFRydWUK Ky0KKy0gICAgZGVmIHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOgorLSAgICAgICAgc2Vs Zi51cGRhdGVfY2IgPSBjYgorLSAgICAgICAgd2l0aCBub2dpbDoKKy0gICAgICAgICAgICBtcHZf b3BlbmdsX2NiX3NldF91cGRhdGVfY2FsbGJhY2soc2VsZi5fY3R4LCAmX2NfdXBkYXRlY2IsIDx2 b2lkICo+Y2IpCistCistICAgIGRlZiBkcmF3KHNlbGYsIGZibywgdywgaCk6CistICAgICAgICBj ZGVmOgorLSAgICAgICAgICAgIGludCBmYm9jID0gZmJvCistICAgICAgICAgICAgaW50IHdjID0g dworLSAgICAgICAgICAgIGludCBoYyA9IGgKKy0gICAgICAgIHdpdGggbm9naWw6CistICAgICAg ICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9kcmF3KHNlbGYuX2N0eCwgZmJvYywgd2MsIGhjKQor LSAgICAgICAgaWYgZXJyIDwgMDoKKy0gICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCist CistICAgIGRlZiByZXBvcnRfZmxpcChzZWxmLCB0aW1lKToKKy0gICAgICAgIGNkZWYgaW50NjRf dCBjdGltZSA9IHRpbWUKKy0gICAgICAgIHdpdGggbm9naWw6CistICAgICAgICAgICAgZXJyID0g bXB2X29wZW5nbF9jYl9yZXBvcnRfZmxpcChzZWxmLl9jdHgsIGN0aW1lKQorLSAgICAgICAgaWYg ZXJyIDwgMDoKKy0gICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCistCistICAgIGRlZiB1 bmluaXRfZ2woc2VsZik6CistICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6CistICAgICAgICAg ICAgcmV0dXJuCistICAgICAgICB3aXRoIG5vZ2lsOgorLSAgICAgICAgICAgIGVyciA9IG1wdl9v cGVuZ2xfY2JfdW5pbml0X2dsKHNlbGYuX2N0eCkKKy0gICAgICAgIGlmIGVyciA8IDA6CistICAg ICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorLSAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxz ZQorLQorLSAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6CistICAgICAgICBzZWxmLnVuaW5pdF9n bCgpCisrIyBjZGVmIGNsYXNzIE9wZW5HTENvbnRleHQob2JqZWN0KToKKysjICAgICBjZGVmOgor KyMgICAgICAgICBtcHZfb3BlbmdsX2NiX2NvbnRleHQgKl9jdHgKKysjICAgICAgICAgYmludCBp bml0ZWQKKysjICAgICAgICAgb2JqZWN0IHVwZGF0ZV9jYgorKworKyMgICAgIGRlZiBfX2luaXRf XyhzZWxmKToKKysjICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQorKyMgICAgICAgICB3YXJu aW5ncy53YXJuKCJPcGVuR0xDb250ZXh0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBzd2l0Y2ggdG8g UmVuZGVyQ29udGV4dCIsIERlcHJlY2F0aW9uV2FybmluZykKKysKKysjICAgICBkZWYgaW5pdF9n bChzZWxmLCBleHRzLCBnZXRfcHJvY19hZGRyZXNzKToKKysjICAgICAgICAgZXh0cyA9IF9zdHJl bmMoZXh0cykgaWYgZXh0cyBpcyBub3QgTm9uZSBlbHNlIE5vbmUKKysjICAgICAgICAgY2RlZiBj aGFyKiBleHRzYyA9IE5VTEwKKysjICAgICAgICAgaWYgZXh0cyBpcyBub3QgTm9uZToKKysjICAg ICAgICAgICAgIGV4dHNjID0gZXh0cworKyMgICAgICAgICB3aXRoIG5vZ2lsOgorKyMgICAgICAg ICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9pbml0X2dsKHNlbGYuX2N0eCwgZXh0c2MsICZfY19n ZXRwcm9jYWRkcmVzcywKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA8dm9pZCAqPmdldF9wcm9jX2FkZHJlc3MpCisrIyAgICAgICAgIGlmIGVyciA8IDA6CisrIyAg ICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCisrCisrIyAgICAgICAgIHNlbGYuaW5pdGVk ID0gVHJ1ZQorKworKyMgICAgIGRlZiBzZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKToKKysj ICAgICAgICAgc2VsZi51cGRhdGVfY2IgPSBjYgorKyMgICAgICAgICB3aXRoIG5vZ2lsOgorKyMg ICAgICAgICAgICAgbXB2X29wZW5nbF9jYl9zZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYuX2N0eCwg Jl9jX3VwZGF0ZWNiLCA8dm9pZCAqPmNiKQorKworKyMgICAgIGRlZiBkcmF3KHNlbGYsIGZibywg dywgaCk6CisrIyAgICAgICAgIGNkZWY6CisrIyAgICAgICAgICAgICBpbnQgZmJvYyA9IGZibwor KyMgICAgICAgICAgICAgaW50IHdjID0gdworKyMgICAgICAgICAgICAgaW50IGhjID0gaAorKyMg ICAgICAgICB3aXRoIG5vZ2lsOgorKyMgICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9k cmF3KHNlbGYuX2N0eCwgZmJvYywgd2MsIGhjKQorKyMgICAgICAgICBpZiBlcnIgPCAwOgorKyMg ICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorKworKyMgICAgIGRlZiByZXBvcnRfZmxp cChzZWxmLCB0aW1lKToKKysjICAgICAgICAgY2RlZiBpbnQ2NF90IGN0aW1lID0gdGltZQorKyMg ICAgICAgICB3aXRoIG5vZ2lsOgorKyMgICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9y ZXBvcnRfZmxpcChzZWxmLl9jdHgsIGN0aW1lKQorKyMgICAgICAgICBpZiBlcnIgPCAwOgorKyMg ICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorKworKyMgICAgIGRlZiB1bmluaXRfZ2wo c2VsZik6CisrIyAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKysjICAgICAgICAgICAgIHJl dHVybgorKyMgICAgICAgICB3aXRoIG5vZ2lsOgorKyMgICAgICAgICAgICAgZXJyID0gbXB2X29w ZW5nbF9jYl91bmluaXRfZ2woc2VsZi5fY3R4KQorKyMgICAgICAgICBpZiBlcnIgPCAwOgorKyMg ICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorKyMgICAgICAgICBzZWxmLmluaXRlZCA9 IEZhbHNlCisrCisrIyAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOgorKyMgICAgICAgICBzZWxm LnVuaW5pdF9nbCgpCisgCisgREVGIE1BWF9SRU5ERVJfUEFSQU1TID0gMzIKKyAKZGlmZiAtLWdp dCBhL3NyY3BrZ3MvdmlkY3V0dGVyL3BhdGNoZXMvbXB2LTAuMzUtMi5wYXRjaCBiL3NyY3BrZ3Mv dmlkY3V0dGVyL3BhdGNoZXMvbXB2LTAuMzUtMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmM5ODJkZWQ4NDc1YQotLS0gL2Rldi9udWxsCisrKyBiL3NyY3Br Z3MvdmlkY3V0dGVyL3BhdGNoZXMvbXB2LTAuMzUtMi5wYXRjaApAQCAtMCwwICsxLDI0IEBACito dHRwczovL2dpdGh1Yi5jb20vb3ptYXJ0aWFuL3ZpZGN1dHRlci9jb21taXQvODAxMGY1YzY0ZWZl NjhkODEzMGEwMzZmOTc2ZDJkMmZmMWM4NjhhZC5wYXRjaAorCitGcm9tIDgwMTBmNWM2NGVmZTY4 ZDgxMzBhMDM2Zjk3NmQyZDJmZjFjODY4YWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9t OiBQZXRlIEFsZXhhbmRyb3UgPHBldGVAb3ptYXJ0aWFucy5jb20+CitEYXRlOiBUdWUsIDIyIEZl YiAyMDIyIDE2OjA4OjI0ICsxMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBsaWJtcHYgdmVyc2lv biBudW1iZXIgZm9ybWF0CisKKy0tLQorIHZpZGN1dHRlci9saWJzL21wdndpZGdldC5weSB8IDIg Ky0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlm ZiAtLWdpdCBhL3ZpZGN1dHRlci9saWJzL21wdndpZGdldC5weSBiL3ZpZGN1dHRlci9saWJzL21w dndpZGdldC5weQoraW5kZXggMjM5YjZjOWMuLjY2NjFhZDg1IDEwMDY0NAorLS0tIGEvdmlkY3V0 dGVyL2xpYnMvbXB2d2lkZ2V0LnB5CisrKysgYi92aWRjdXR0ZXIvbGlicy9tcHZ3aWRnZXQucHkK K0BAIC0yNDcsNyArMjQ3LDcgQEAgZGVmIGZvcm1hdChzZWxmLCBzdHJlYW06IHN0cj0ndmlkZW8n KSAtPiBzdHI6CisgCisgICAgIGRlZiB2ZXJzaW9uKHNlbGYpIC0+IHN0cjoKKyAgICAgICAgIHZl ciA9IHNlbGYubXB2LmFwaV92ZXJzaW9uCistICAgICAgICByZXR1cm4gJ3swfS57MX0nLmZvcm1h dCh2ZXJbMF0sIHZlclsxXSkKKysgICAgICAgIHJldHVybiAnezB9LnsxfScuZm9ybWF0KHZlclsx XSwgdmVyWzBdKQorIAorICAgICBkZWYgb3B0aW9uKHNlbGYsIG9wdGlvbjogc3RyLCB2YWwpOgor ICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWwsIGJvb2wpOgpkaWZmIC0tZ2l0IGEvc3JjcGtncy92 aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0zLnBhdGNoIGIvc3JjcGtncy92aWRjdXR0ZXIvcGF0 Y2hlcy9tcHYtMC4zNS0zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uN2ExYjI5MDliNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjcGtncy92aWRjdXR0ZXIv cGF0Y2hlcy9tcHYtMC4zNS0zLnBhdGNoCkBAIC0wLDAgKzEsMTMyODkgQEAKK2h0dHBzOi8vZ2l0 aHViLmNvbS9vem1hcnRpYW4vdmlkY3V0dGVyL2NvbW1pdC80Y2YxNDU4ZDgzMmU2YWM3YTgyNGQ3 OTYzYzZkYzNhMGU1YzE3NTc0LnBhdGNoCisKK0Zyb20gNGNmMTQ1OGQ4MzJlNmFjN2E4MjRkNzk2 M2M2ZGMzYTBlNWMxNzU3NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBldGUgQWxl eGFuZHJvdSA8cGV0ZUBvem1hcnRpYW5zLmNvbT4KK0RhdGU6IFNhdCwgMzAgQXByIDIwMjIgMTU6 NDk6MTcgKzEwMDAKK1N1YmplY3Q6IFtQQVRDSF0gcHltcHYgdXBkYXRlcworCistLS0KKyB2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYuYyAgIHwgMzc5MiArKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0tLS0tLS0tCisgdmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCB8ICAgIDYgKy0KKyAyIGZp bGVzIGNoYW5nZWQsIDE5MDAgaW5zZXJ0aW9ucygrKSwgMTg5OCBkZWxldGlvbnMoLSkKKworZGlm ZiAtLWdpdCBhL3ZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5jIGIvdmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LmMKK2luZGV4IGEzNTIyZWY1Li4yNjgzOGEwMyAxMDA2NDQKKy0tLSBhL3ZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5jCisrKysgYi92aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYuYworQEAg LTk0NCw3ICs5NDQsNyBAQCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9P cGVuR0xSZW5kZXJDb250ZXh0OworIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9yczsKKyBzdHJ1Y3QgX19weXhfb3B0X2FyZ3Nf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfdm9pZHA7CisgCistLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5MAorKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4OTIKKyAgKiAgICAgICAgIHNlbGYucGFyYW1zWzBdLnR5cGUgPSBNUFZf UkVOREVSX1BBUkFNX0lOVkFMSUQKKyAgKiAKKyAgKiAgICAgY2RlZiBhZGRfdm9pZHAoc2VsZiwg bXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFsc2UpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTU2LDcgKzk1Niw3IEBAIHN0cnVjdCBfX3B5 eF9vcHRfYXJnc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF92b2lk cCB7CisgICBpbnQgb3duZWQ7CisgfTsKKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTU2CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE1OAorICAqIAor ICAqIAorICAqIGNkZWYgY2xhc3MgRW5kT2ZGaWxlUmVhY2hlZChvYmplY3QpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTcxLDcgKzk3MSw3IEBAIHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgeworIH07CisgCisgCistLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE4MgorKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxODQKKyAgKiAKKyAgKiAKKyAgKiBjZGVmIGNsYXNzIExvZ01lc3NhZ2Uo b2JqZWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTk4OCw3ICs5ODgsNyBA QCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlIHsKKyB9 OworIAorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDMKKysvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjQ1CisgICogCisgICogCisgICogY2RlZiBjbGFz cyBQcm9wZXJ0eShvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTAw Myw3ICsxMDAzLDcgQEAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJv cGVydHkgeworIH07CisgCisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1 NgorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTgKKyAgKiAKKyAgKiAKKyAg KiBjZGVmIGNsYXNzIEV2ZW50KG9iamVjdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK K0BAIC0xMDIwLDcgKzEwMjAsNyBAQCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCB7CisgfTsKKyAKKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzU5CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM2MQorICAqIAorICAq IAorICAqIGNkZWYgY2xhc3MgQ29udGV4dChvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTAzNyw3ICsxMDM3LDcgQEAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCB7CisgfTsKKyAKKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6ODgxCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4Mwor ICAqIERFRiBNQVhfUkVOREVSX1BBUkFNUyA9IDMyCisgICogCisgICogY2RlZiBjbGFzcyBfUmVu ZGVyUGFyYW1zKG9iamVjdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMDUy LDcgKzEwNTIsNyBAQCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVu ZGVyUGFyYW1zIHsKKyB9OworIAorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5MjgKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTMwCisgICogCisgICog QGN5dGhvbi5pbnRlcm5hbAorICAqIGNkZWYgY2xhc3MgUmVuZGVyRnJhbWVJbmZvKG9iamVjdCk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMDY1LDcgKzEwNjUsNyBAQCBzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8geworIH07 CisgCisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzNworKy8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzkKKyAgKiAgICAgICAgIHJldHVybiBzZWxmCisg ICogCisgICogY2RlZiBjbGFzcyBSZW5kZXJDb250ZXh0KG9iamVjdCk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xMDg0LDcgKzEwODQsNyBAQCBzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0IHsKKyB9OworIAorIAorLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTIyCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExMjQKKyAgKiAgICAgICAgIHNlbGYuY2xvc2UoKQorICAqIAorICAqIGNkZWYg Y2xhc3MgT3BlbkdMUmVuZGVyQ29udGV4dChSZW5kZXJDb250ZXh0KTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTEwOTYsNyArMTA5Niw3IEBAIHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQgeworIH07CisgCisgCistLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOAorKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozMjAKKyAgKiAKKyAgKiAKKyAgKiBkZWYgX2Vycm9ycyhmbik6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTEwLDcgKzExMTAsNyBAQCBzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMg eworIAorIAorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNTYKKysvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTU4CisgICogCisgICogCisgICogY2RlZiBj bGFzcyBFbmRPZkZpbGVSZWFjaGVkKG9iamVjdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xMTI0LDcgKzExMjQsNyBAQCBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCB7Cisgc3RhdGljIHN0cnVjdCBfX3B5eF92 dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICpfX3B5eF92 dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkOworIAorIAorLS8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxODIKKysvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTg0CisgICogCisgICogCisgICogY2RlZiBjbGFzcyBMb2dNZXNzYWdl KG9iamVjdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTM4LDcgKzExMzgs NyBAQCBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVz c2FnZSB7Cisgc3RhdGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Mb2dNZXNzYWdlICpfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlOworIAorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDMKKysv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjQ1CisgICogCisgICogCisgICogY2Rl ZiBjbGFzcyBQcm9wZXJ0eShvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMTE1Miw3ICsxMTUyLDcgQEAgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80 bGlic18zbXB2X1Byb3BlcnR5IHsKKyBzdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZp ZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Qcm9wZXJ0eTsKKyAKKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjU2CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1OAorICAqIAorICAq IAorICAqIGNkZWYgY2xhc3MgRXZlbnQob2JqZWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTExNjcsNyArMTE2Nyw3IEBAIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9FdmVudCB7Cisgc3RhdGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRXZlbnQ7CisgCisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjM1OQorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNjEKKyAgKiAKKyAgKiAK KyAgKiBjZGVmIGNsYXNzIENvbnRleHQob2JqZWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTExODQsNyArMTE4NCw3IEBAIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0IHsKKyBzdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1 Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQ7CisgCisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjg4MQorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4ODMKKyAgKiBE RUYgTUFYX1JFTkRFUl9QQVJBTVMgPSAzMgorICAqIAorICAqIGNkZWYgY2xhc3MgX1JlbmRlclBh cmFtcyhvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTIwMCw3ICsx MjAwLDcgQEAgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19S ZW5kZXJQYXJhbXMgeworIHN0YXRpYyBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX1JlbmRlclBhcmFtczsKKyAKKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTI4CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMAorICAqIAor ICAqIEBjeXRob24uaW50ZXJuYWwKKyAgKiBjZGVmIGNsYXNzIFJlbmRlckZyYW1lSW5mbyhvYmpl Y3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjUyMiw5ICsyNTIyLDkgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5H TFJlbmRlckNvbnRleHQoUHlUeXBlT2IKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzKFB5VHlwZU9i amVjdCAqdCwgUHlPYmplY3QgKmEsIFB5T2JqZWN0ICprKTsgLypwcm90byovCisgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9pbnRfMDsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8xOworLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfaW50XzI7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9pbnRf MzsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8zMjsKKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X2ludF8xMDk7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9pbnRfNTcxMzE2OTsKKyBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X2ludF85MDk1ODI2MjsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2ludF8xNDIwMzY5MTA7CitAQCAtMjU4OCw3ICsyNTg4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9jb2Rlb2JqX181MzsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzU1Owor IC8qIExhdGUgaW5jbHVkZXMgKi8KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTUKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcKKyAgKiBfc3RyZGVj X2VyciA9ICJzdXJyb2dhdGVlc2NhcGUiIGlmIF9pc19weTMgZWxzZSAic3RyaWN0IgorICAqICMg bXB2IC0+IFB5dGhvbgorICAqIGRlZiBfc3RyZGVjKHMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMjYyNyw3ICsyNjI3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICoKKyAg IGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf c3RyZGVjIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTYK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OAorICAqICMgbXB2IC0+IFB5 dGhvbgorICAqIGRlZiBfc3RyZGVjKHMpOgorICAqICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC0yNjQzLDcgKzI2NDMsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fc3RyZGVjKENZVEhPTl9VTlVTRUQgUHlPYmplY3Qg KgorICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7CisgICAgIC8qdHJ5OiovIHsKKyAKKy0g ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcKKysgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTkKKyAgKiBkZWYgX3N0cmRlYyhzKToKKyAgKiAg ICAgdHJ5OgorICAqICAgICAgICAgcmV0dXJuIHMuZGVjb2RlKCJ1dGYtOCIsIF9zdHJkZWNfZXJy KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjY1MSw5ICsyNjUxLDkgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICoKKyAgKiAgICAgICAgICMgSW4gcHl0aG9uMiwgYmFpbCB0byBi eXRlcyBvbiBmYWlsdXJlCisgICovCisgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0g ICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfcywgX19w eXhfbl9zX2RlY29kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDU3 LCBfX3B5eF9MM19lcnJvcikKKysgICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3ZfcywgX19weXhfbl9zX2RlY29kZSk7IGlmICh1bmxpa2VseSghX19weXhf dF81KSkgX19QWVhfRVJSKDAsIDU5LCBfX3B5eF9MM19lcnJvcikKKyAgICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF81KTsKKy0gICAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf NiwgX19weXhfbl9zX3N0cmRlY19lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCA1NywgX19weXhfTDNfZXJyb3IpCisrICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFs TmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19zdHJkZWNfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgNTksIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzYpOworICAgICAgIF9fcHl4X3RfNyA9IE5VTEw7CisgICAgICAgX19weXhf dF84ID0gMDsKK0BAIC0yNjcwLDcgKzI2NzAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fc3RyZGVjKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKgor ICAgICAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKyAgICAgICBpZiAoUHlGdW5jdGlvbl9DaGVj ayhfX3B5eF90XzUpKSB7CisgICAgICAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5 eF90XzcsIF9fcHl4X2twX3NfdXRmXzgsIF9fcHl4X3RfNn07CistICAgICAgICBfX3B5eF90XzQg PSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsxLV9fcHl4 X3RfOCwgMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigw LCA1NywgX19weXhfTDNfZXJyb3IpCisrICAgICAgICBfX3B5eF90XzQgPSBfX1B5eF9QeUZ1bmN0 aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsxLV9fcHl4X3RfOCwgMitfX3B5eF90 XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA1OSwgX19weXhfTDNf ZXJyb3IpCisgICAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7 CisgICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgICAgICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworQEAgLTI2NzksMTQgKzI2NzksMTQgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICoKKyAgICAgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAorICAg ICAgIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2soX19weXhfdF81KSkgeworICAgICAg ICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF83LCBfX3B5eF9rcF9zX3V0Zl84 LCBfX3B5eF90XzZ9OworLSAgICAgICAgX19weXhfdF80ID0gX19QeXhfUHlDRnVuY3Rpb25fRmFz dENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF84LCAyK19fcHl4X3RfOCk7IGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDU3LCBfX3B5eF9MM19lcnJvcikK KysgICAgICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3Rf NSwgX19weXhfdGVtcCsxLV9fcHl4X3RfOCwgMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNCkpIF9fUFlYX0VSUigwLCA1OSwgX19weXhfTDNfZXJyb3IpCisgICAgICAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgICAgICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF80KTsKKyAgICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOworICAgICAgIH0gZWxzZQorICAgICAgICNlbmRpZgorICAgICAgIHsKKy0gICAgICAg IF9fcHl4X3RfOSA9IFB5VHVwbGVfTmV3KDIrX19weXhfdF84KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzkpKSBfX1BZWF9FUlIoMCwgNTcsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgX19weXhf dF85ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOSkp IF9fUFlYX0VSUigwLCA1OSwgX19weXhfTDNfZXJyb3IpCisgICAgICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF85KTsKKyAgICAgICAgIGlmIChfX3B5eF90XzcpIHsKKyAgICAgICAgICAgX19QeXhf R0lWRVJFRihfX3B5eF90XzcpOyBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfOSwgMCwgX19weXhf dF83KTsgX19weXhfdF83ID0gTlVMTDsKK0BAIC0yNjk3LDcgKzI2OTcsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fc3RyZGVjKENZVEhPTl9VTlVT RUQgUHlPYmplY3QgKgorICAgICAgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzYpOworICAgICAg ICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzksIDErX19weXhfdF84LCBfX3B5eF90XzYpOwor ICAgICAgICAgX19weXhfdF82ID0gMDsKKy0gICAgICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2Jq ZWN0X0NhbGwoX19weXhfdF81LCBfX3B5eF90XzksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNCkpIF9fUFlYX0VSUigwLCA1NywgX19weXhfTDNfZXJyb3IpCisrICAgICAgICBfX3B5eF90 XzQgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfNSwgX19weXhfdF85LCBOVUxMKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNTksIF9fcHl4X0wzX2Vycm9yKQor ICAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICAgICAgICBfX1B5eF9ERUNSRUYo X19weXhfdF85KTsgX19weXhfdF85ID0gMDsKKyAgICAgICB9CitAQCAtMjcwNiw3ICsyNzA2LDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRl YyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICoKKyAgICAgICBfX3B5eF90XzQgPSAwOworICAgICAg IGdvdG8gX19weXhfTDdfdHJ5X3JldHVybjsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTYKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTgKKyAgKiAjIG1wdiAtPiBQeXRob24KKyAgKiBkZWYgX3N0cmRlYyhzKToKKyAgKiAgICAg dHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjcyMSw3ICsyNzIxLDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhD WVRIT05fVU5VU0VEIFB5T2JqZWN0ICoKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBf X3B5eF90XzcgPSAwOworICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9 IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OAorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjAKKyAgKiAgICAgdHJ5OgorICAqICAg ICAgICAgcmV0dXJuIHMuZGVjb2RlKCJ1dGYtOCIsIF9zdHJkZWNfZXJyKQorICAqICAgICBleGNl cHQgVW5pY29kZURlY29kZUVycm9yOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MjczMSwxMiArMjczMSwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fc3RyZGVjKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKgorICAgICBfX3B5eF90 XzggPSBfX1B5eF9QeUVycl9FeGNlcHRpb25NYXRjaGVzKF9fcHl4X2J1aWx0aW5fVW5pY29kZURl Y29kZUVycm9yKTsKKyAgICAgaWYgKF9fcHl4X3RfOCkgeworICAgICAgIF9fUHl4X0FkZFRyYWNl YmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9zdHJkZWMiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gICAgICBpZiAoX19QeXhfR2V0RXhjZXB0aW9uKCZf X3B5eF90XzQsICZfX3B5eF90XzUsICZfX3B5eF90XzkpIDwgMCkgX19QWVhfRVJSKDAsIDU4LCBf X3B5eF9MNV9leGNlcHRfZXJyb3IpCisrICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlvbigmX19w eXhfdF80LCAmX19weXhfdF81LCAmX19weXhfdF85KSA8IDApIF9fUFlYX0VSUigwLCA2MCwgX19w eXhfTDVfZXhjZXB0X2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzkpOworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MAorKyAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MgorICAqICAgICBleGNlcHQg VW5pY29kZURlY29kZUVycm9yOgorICAqICAgICAgICAgIyBJbiBweXRob24yLCBiYWlsIHRvIGJ5 dGVzIG9uIGZhaWx1cmUKKyAgKiAgICAgICAgIHJldHVybiBieXRlcyhzKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMjc0NCw3ICsyNzQ0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRIT05fVU5VU0VEIFB5T2Jq ZWN0ICoKKyAgKiAjIFB5dGhvbiAtPiBtcHYKKyAgKi8KKyAgICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOworLSAgICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoKChQ eU9iamVjdCAqKSgmUHlCeXRlc19UeXBlKSksIF9fcHl4X3Zfcyk7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDYwLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCisrICAgICAg X19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZygoKFB5T2JqZWN0ICopKCZQeUJ5 dGVzX1R5cGUpKSwgX19weXhfdl9zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgNjIsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKKyAgICAgICBfX3B5eF9yID0gX19weXhfdF82OworICAgICAgIF9fcHl4X3RfNiA9 IDA7CitAQCAtMjc1Niw3ICsyNzU2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICoKKyAgICAg Z290byBfX3B5eF9MNV9leGNlcHRfZXJyb3I7CisgICAgIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcjo7 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NgorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTgKKyAgKiAjIG1wdiAtPiBQeXRob24KKyAg KiBkZWYgX3N0cmRlYyhzKToKKyAgKiAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtMjc4Miw3ICsyNzgyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICoKKyAgICAg Z290byBfX3B5eF9MMDsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1NQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU3CisgICogX3N0 cmRlY19lcnIgPSAic3Vycm9nYXRlZXNjYXBlIiBpZiBfaXNfcHkzIGVsc2UgInN0cmljdCIKKyAg KiAjIG1wdiAtPiBQeXRob24KKyAgKiBkZWYgX3N0cmRlYyhzKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTI4MDUsNyArMjgwNSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2X19zdHJkZWMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAq CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYzCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1CisgICogCisg ICogIyBQeXRob24gLT4gbXB2CisgICogZGVmIF9zdHJlbmMocyk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC0yODQ0LDcgKzI4NDQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8yX3N0cmVuYyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0 CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgiX3N0cmVuYyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjY0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYKKyAgKiAjIFB5dGhv biAtPiBtcHYKKyAgKiBkZWYgX3N0cmVuYyhzKToKKyAgKiAgICAgdHJ5OiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMjg2MCw3ICsyODYwLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMl9zdHJlbmMoQ1lUSE9OX1VOVVNFRCBQeU9i amVjdAorICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7CisgICAgIC8qdHJ5OiovIHsKKyAK Ky0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjUKKysgICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjcKKyAgKiBkZWYgX3N0cmVuYyhzKToKKyAg KiAgICAgdHJ5OgorICAqICAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCJ1dGYtOCIsIF9zdHJkZWNf ZXJyKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjg2OCw5ICsyODY4LDkgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMl9zdHJlbmMo Q1lUSE9OX1VOVVNFRCBQeU9iamVjdAorICAqICAgICAgICAgIyBJbiBweXRob24yLCBhc3N1bWUg Ynl0ZXMgYW5kIHdhbGsgcmlnaHQgdGhyb3VnaAorICAqLworICAgICAgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CistICAgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92X3MsIF9fcHl4X25fc19lbmNvZGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9f UFlYX0VSUigwLCA2NSwgX19weXhfTDNfZXJyb3IpCisrICAgICAgX19weXhfdF81ID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3MsIF9fcHl4X25fc19lbmNvZGUpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA2NywgX19weXhfTDNfZXJyb3IpCisgICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CistICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFs TmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19zdHJkZWNfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgNjUsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgIF9fUHl4X0dl dE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3Nfc3RyZGVjX2Vycik7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDY3LCBfX3B5eF9MM19lcnJvcikKKyAg ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAgICAgICBfX3B5eF90XzcgPSBOVUxMOwor ICAgICAgIF9fcHl4X3RfOCA9IDA7CitAQCAtMjg4Nyw3ICsyODg3LDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMl9zdHJlbmMoQ1lUSE9OX1VOVVNF RCBQeU9iamVjdAorICAgICAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKyAgICAgICBpZiAoUHlG dW5jdGlvbl9DaGVjayhfX3B5eF90XzUpKSB7CisgICAgICAgICBQeU9iamVjdCAqX19weXhfdGVt cFszXSA9IHtfX3B5eF90XzcsIF9fcHl4X2twX3NfdXRmXzgsIF9fcHl4X3RfNn07CistICAgICAg ICBfX3B5eF90XzQgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhf dGVtcCsxLV9fcHl4X3RfOCwgMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCA2NSwgX19weXhfTDNfZXJyb3IpCisrICAgICAgICBfX3B5eF90XzQgPSBf X1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsxLV9fcHl4X3Rf OCwgMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2 NywgX19weXhfTDNfZXJyb3IpCisgICAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9f cHl4X3RfNyA9IDA7CisgICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgICAgICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworQEAgLTI4OTYsMTQgKzI4 OTYsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Ml9zdHJlbmMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAorICAgICAgICNpZiBDWVRIT05fRkFTVF9Q WUNDQUxMCisgICAgICAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzUp KSB7CisgICAgICAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzcsIF9fcHl4 X2twX3NfdXRmXzgsIF9fcHl4X3RfNn07CistICAgICAgICBfX3B5eF90XzQgPSBfX1B5eF9QeUNG dW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzUsIF9fcHl4X3RlbXArMS1fX3B5eF90XzgsIDIrX19w eXhfdF84KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNjUsIF9fcHl4 X0wzX2Vycm9yKQorKyAgICAgICAgX19weXhfdF80ID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENh bGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF84LCAyK19fcHl4X3RfOCk7IGlmICh1 bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDY3LCBfX3B5eF9MM19lcnJvcikKKyAg ICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAgICAgICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Nik7IF9fcHl4X3RfNiA9IDA7CisgICAgICAgfSBlbHNlCisgICAgICAgI2VuZGlmCisgICAgICAg eworLSAgICAgICAgX19weXhfdF85ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzgpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlYX0VSUigwLCA2NSwgX19weXhfTDNfZXJyb3IpCisrICAg ICAgICBfX3B5eF90XzkgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfOCk7IGlmICh1bmxpa2VseSgh X19weXhfdF85KSkgX19QWVhfRVJSKDAsIDY3LCBfX3B5eF9MM19lcnJvcikKKyAgICAgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzkpOworICAgICAgICAgaWYgKF9fcHl4X3RfNykgeworICAgICAg ICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNyk7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF85 LCAwLCBfX3B5eF90XzcpOyBfX3B5eF90XzcgPSBOVUxMOworQEAgLTI5MTQsNyArMjkxNCw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzJfc3RyZW5j KENZVEhPTl9VTlVTRUQgUHlPYmplY3QKKyAgICAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF82 KTsKKyAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF85LCAxK19fcHl4X3RfOCwgX19w eXhfdF82KTsKKyAgICAgICAgIF9fcHl4X3RfNiA9IDA7CistICAgICAgICBfX3B5eF90XzQgPSBf X1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfNSwgX19weXhfdF85LCBOVUxMKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNjUsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAg ICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzUsIF9fcHl4X3RfOSwg TlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDY3LCBfX3B5eF9M M19lcnJvcikKKyAgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgICAgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7CisgICAgICAgfQorQEAgLTI5MjMs NyArMjkyMyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzJfc3RyZW5jKENZVEhPTl9VTlVTRUQgUHlPYmplY3QKKyAgICAgICBfX3B5eF90XzQgPSAw OworICAgICAgIGdvdG8gX19weXhfTDdfdHJ5X3JldHVybjsKKyAKKy0gICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjQKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NjYKKyAgKiAjIFB5dGhvbiAtPiBtcHYKKyAgKiBkZWYgX3N0cmVuYyhzKToK KyAgKiAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjkzOCw3ICsy OTM4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Ml9zdHJlbmMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAorICAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsgX19w eXhfdF85ID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2 CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2OAorICAqICAgICB0cnk6 CisgICogICAgICAgICByZXR1cm4gcy5lbmNvZGUoInV0Zi04IiwgX3N0cmRlY19lcnIpCisgICog ICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0yOTQ4LDEyICsyOTQ4LDEyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzJfc3RyZW5jKENZVEhPTl9VTlVTRUQgUHlPYmplY3QKKyAgICAg X19weXhfdF84ID0gX19QeXhfUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhfX3B5eF9idWlsdGluX1Vu aWNvZGVFbmNvZGVFcnJvcik7CisgICAgIGlmIChfX3B5eF90XzgpIHsKKyAgICAgICBfX1B5eF9B ZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fc3RyZW5jIiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICAgICAgaWYgKF9fUHl4X0dldEV4Y2Vw dGlvbigmX19weXhfdF80LCAmX19weXhfdF81LCAmX19weXhfdF85KSA8IDApIF9fUFlYX0VSUigw LCA2NiwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorKyAgICAgIGlmIChfX1B5eF9HZXRFeGNlcHRp b24oJl9fcHl4X3RfNCwgJl9fcHl4X3RfNSwgJl9fcHl4X3RfOSkgPCAwKSBfX1BZWF9FUlIoMCwg NjgsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKyAgICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF85KTsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NjgKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAKKyAgKiAgICAg ZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgKiAgICAgICAgICMgSW4gcHl0aG9uMiwgYXNz dW1lIGJ5dGVzIGFuZCB3YWxrIHJpZ2h0IHRocm91Z2gKKyAgKiAgICAgICAgIHJldHVybiBzICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0yOTcxLDcgKzI5NzEsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8yX3N0cmVuYyhDWVRIT05f VU5VU0VEIFB5T2JqZWN0CisgICAgIGdvdG8gX19weXhfTDVfZXhjZXB0X2Vycm9yOworICAgICBf X3B5eF9MNV9leGNlcHRfZXJyb3I6OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjQKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2Cisg ICogIyBQeXRob24gLT4gbXB2CisgICogZGVmIF9zdHJlbmMocyk6CisgICogICAgIHRyeTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTI5OTcsNyArMjk5Nyw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzJfc3RyZW5jKENZVEhPTl9V TlVTRUQgUHlPYmplY3QKKyAgICAgZ290byBfX3B5eF9MMDsKKyAgIH0KKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjY1CisgICogCisgICogIyBQeXRob24gLT4gbXB2CisgICogZGVmIF9zdHJlbmMo cyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0zMDIwLDcgKzMwMjAsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8yX3N0cmVuYyhD WVRIT05fVU5VU0VEIFB5T2JqZWN0CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE2MworKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxNjUKKyAgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHJlYXNvbiwgZXJyb3IK KyAgKiAKKyAgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfZW5kX2ZpbGUqIGVvZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0zMDM3LDE0ICszMDM3LDE0IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVS ZWFjaGVkX19pbml0KHN0cnVjdCBfCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2luaXQiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxNjQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxNjYKKyAgKiAKKyAgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfZW5kX2Zp bGUqIGVvZik6CisgICogICAgICAgICBzZWxmLnJlYXNvbiA9IGVvZi5yZWFzb24gICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5lcnJvciA9IGVvZi5lcnJvcgor ICAqICAgICAgICAgcmV0dXJuIHNlbGYKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50 X0Zyb21faW50KF9fcHl4X3ZfZW9mLT5yZWFzb24pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxNjQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhf UHlJbnRfRnJvbV9pbnQoX19weXhfdl9lb2YtPnJlYXNvbik7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDE2NiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKyAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0dPVFJF RihfX3B5eF92X3NlbGYtPnJlYXNvbik7CitAQCAtMzA1MiwxNCArMzA1MiwxNCBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hl ZF9faW5pdChzdHJ1Y3QgXworICAgX19weXhfdl9zZWxmLT5yZWFzb24gPSBfX3B5eF90XzE7Cisg ICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjE2NQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE2NworICAqICAgICBj ZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9lbmRfZmlsZSogZW9mKToKKyAgKiAgICAgICAgIHNl bGYucmVhc29uID0gZW9mLnJlYXNvbgorICAqICAgICAgICAgc2VsZi5lcnJvciA9IGVvZi5lcnJv ciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICByZXR1cm4gc2VsZgor ICAqIAorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9l b2YtPmVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTY1LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4 X3ZfZW9mLT5lcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE2 NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4 X0dJVkVSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmVycm9y KTsKK0BAIC0zMDY3LDcgKzMwNjcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9faW5pdChzdHJ1Y3QgXworICAgX19w eXhfdl9zZWxmLT5lcnJvciA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTY2CisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTY4CisgICogICAgICAgICBzZWxmLnJlYXNvbiA9IGVvZi5yZWFz b24KKyAgKiAgICAgICAgIHNlbGYuZXJyb3IgPSBlb2YuZXJyb3IKKyAgKiAgICAgICAgIHJldHVy biBzZWxmICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0zMDc5LDcgKzMwNzksNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZG aWxlUmVhY2hlZF9faW5pdChzdHJ1Y3QgXworICAgX19weXhfciA9ICgoUHlPYmplY3QgKilfX3B5 eF92X3NlbGYpOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxNjMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox NjUKKyAgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHJlYXNvbiwgZXJyb3IKKyAgKiAKKyAgKiAg ICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfZW5kX2ZpbGUqIGVvZik6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0zMDk4LDcgKzMwOTgsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9faW5pdChz dHJ1Y3QgXworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxNjEKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTYz CisgICogICAgIFdyYXBzOiBtcHZfZXZlbnRfZW5kX2ZpbGUKKyAgKiAgICAgIiIiCisgICogICAg IGNkZWYgcHVibGljIG9iamVjdCByZWFzb24sIGVycm9yICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0zNTg3LDcgKzM1ODcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfMl9fc2V0c3RhdGVfYworICAg cmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxODkKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTkxCisgICogICAgIGNk ZWYgcHVibGljIG9iamVjdCBwcmVmaXgsIGxldmVsLCB0ZXh0LCBsb2dfbGV2ZWwKKyAgKiAKKyAg KiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfbG9nX21lc3NhZ2UqIG1zZyk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0zNjA3LDE2ICszNjA3LDE2IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX19pbml0 KHN0cnVjdCBfX3B5eF9vCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX2luaXQiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxOTAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox OTIKKyAgKiAKKyAgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfbG9nX21lc3NhZ2Uq IG1zZyk6CisgICogICAgICAgICBzZWxmLmxldmVsID0gX3N0cmRlYyhtc2cubGV2ZWwpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0cmRl Yyhtc2cucHJlZml4KQorICAqICAgICAgICAgc2VsZi50ZXh0ID0gX3N0cmRlYyhtc2cudGV4dCkK KyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nf c3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTkwLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5 eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTky LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhf dF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbXNnLT5sZXZlbCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDE5MCwgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9tc2ctPmxldmVs KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTkyLCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgX19weXhfdF80ID0gTlVMTDsK KyAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF8yKSkpIHsKK0BAIC0zNjMxLDcgKzM2MzEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9faW5pdChzdHJ1Y3QgX19w eXhfbworICAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFy Z3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMg PSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTkwLCBfX3B5 eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5 MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfR0lWRVJFRihfX3B5 eF90XzEpOworQEAgLTM2NDAsMTYgKzM2NDAsMTYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfX2luaXQoc3RydWN0IF9fcHl4X28K KyAgIF9fcHl4X3Zfc2VsZi0+bGV2ZWwgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5MQorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5MworICAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1w dl9ldmVudF9sb2dfbWVzc2FnZSogbXNnKToKKyAgKiAgICAgICAgIHNlbGYubGV2ZWwgPSBfc3Ry ZGVjKG1zZy5sZXZlbCkKKyAgKiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0cmRlYyhtc2cucHJl Zml4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBzZWxmLnRleHQg PSBfc3RyZGVjKG1zZy50ZXh0KQorICAqICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBtc2cubG9n X2xldmVsCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19w eXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDE5 MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf MiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDE5MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0g IF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X21zZy0+cHJlZml4 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTkxLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X21z Zy0+cHJlZml4KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTkzLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgX19weXhfdF80 ID0gTlVMTDsKKyAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRo b2RfQ2hlY2soX19weXhfdF8yKSkpIHsKK0BAIC0zNjY0LDcgKzM2NjQsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9faW5pdChz dHJ1Y3QgX19weXhfbworICAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVj dF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9i amVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNSRUYo X19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBf X3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MTkxLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDE5MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK KyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfR0lW RVJFRihfX3B5eF90XzEpOworQEAgLTM2NzMsMTYgKzM2NzMsMTYgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfX2luaXQoc3RydWN0 IF9fcHl4X28KKyAgIF9fcHl4X3Zfc2VsZi0+cHJlZml4ID0gX19weXhfdF8xOworICAgX19weXhf dF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTIKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTQKKyAgKiAgICAgICAgIHNlbGYu bGV2ZWwgPSBfc3RyZGVjKG1zZy5sZXZlbCkKKyAgKiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0 cmRlYyhtc2cucHJlZml4KQorICAqICAgICAgICAgc2VsZi50ZXh0ID0gX3N0cmRlYyhtc2cudGV4 dCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5sb2dfbGV2 ZWwgPSBtc2cubG9nX2xldmVsCisgICogICAgICAgICByZXR1cm4gc2VsZgorICAqLworLSAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxOTIsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxOTQsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX3B5eF90XzMgPSBfX1B5eF9Q eUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9tc2ctPnRleHQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCAxOTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8zID0g X19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbXNnLT50ZXh0KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTk0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzMpOworICAgX19weXhfdF80ID0gTlVMTDsKKyAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsK K0BAIC0zNjk3LDcgKzM2OTcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9faW5pdChzdHJ1Y3QgX19weXhfbworICAgX19weXhf dF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBf X3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3Rf MiwgX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTkyLCBfX3B5eF9MMV9lcnJvcikKKysg IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5NCwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworQEAgLTM3 MDYsMTQgKzM3MDYsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xMExvZ01lc3NhZ2VfX2luaXQoc3RydWN0IF9fcHl4X28KKyAgIF9fcHl4X3Zfc2Vs Zi0+dGV4dCA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTkzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTk1CisgICogICAgICAgICBzZWxmLnByZWZpeCA9IF9zdHJkZWMobXNnLnByZWZp eCkKKyAgKiAgICAgICAgIHNlbGYudGV4dCA9IF9zdHJkZWMobXNnLnRleHQpCisgICogICAgICAg ICBzZWxmLmxvZ19sZXZlbCA9IG1zZy5sb2dfbGV2ZWwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorICAqICAgICAgICAgcmV0dXJuIHNlbGYKKyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfMSA9 IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfbXNnLT5sb2dfbGV2ZWwpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxOTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9tc2ctPmxvZ19sZXZlbCk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5NSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8x KTsKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCk7CitAQCAtMzcyMSw3 ICszNzIxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfX2luaXQoc3RydWN0IF9fcHl4X28KKyAgIF9fcHl4X3Zfc2VsZi0+bG9n X2xldmVsID0gX19weXhfdF8xOworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxOTYKKyAgKiAgICAgICAgIHNlbGYudGV4dCA9IF9zdHJkZWMobXNnLnRleHQpCisg ICogICAgICAgICBzZWxmLmxvZ19sZXZlbCA9IG1zZy5sb2dfbGV2ZWwKKyAgKiAgICAgICAgIHJl dHVybiBzZWxmICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0zNzMzLDcgKzM3MzMs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9n TWVzc2FnZV9faW5pdChzdHJ1Y3QgX19weXhfbworICAgX19weXhfciA9ICgoUHlPYmplY3QgKilf X3B5eF92X3NlbGYpOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxODkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxOTEKKyAgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHByZWZpeCwgbGV2ZWwsIHRleHQsIGxv Z19sZXZlbAorICAqIAorICAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9sb2dfbWVz c2FnZSogbXNnKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTM3NTUsNyArMzc1 NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBM b2dNZXNzYWdlX19pbml0KHN0cnVjdCBfX3B5eF9vCisgICByZXR1cm4gX19weXhfcjsKKyB9Cisg CistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE4NworKy8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxODkKKyAgKiAgICAgV3JhcHM6IG1wdl9ldmVudF9sb2dfbWVz c2FnZQorICAqICAgICAiIiIKKyAgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHByZWZpeCwgbGV2 ZWwsIHRleHQsIGxvZ19sZXZlbCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNDQz OCw3ICs0NDM4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTBMb2dNZXNzYWdlXzJfX3NldHN0YXRlX2N5dGhvbl8KKyAgIHJldHVybiBfX3B5eF9y OworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTk3CisrLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5OQorICAqIAorICAqIAorICAqIGNkZWYgX2Nv bnZlcnRfbm9kZV92YWx1ZShtcHZfbm9kZSBub2RlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTQ0NTksNyArNDQ1OSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShzdHJ1Y3QgbXB2X25vCisgICBp bnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2Nv bnZlcnRfbm9kZV92YWx1ZSIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjE5OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwMAorICAq IAorICAqIGNkZWYgX2NvbnZlcnRfbm9kZV92YWx1ZShtcHZfbm9kZSBub2RlKToKKyAgKiAgICAg aWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC00NDY5LDcgKzQ0NjksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9ubwor ICAgc3dpdGNoIChfX3B5eF92X25vZGUuZm9ybWF0KSB7CisgICAgIGNhc2UgTVBWX0ZPUk1BVF9T VFJJTkc6CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTkKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwMQorICAqIGNkZWYgX2NvbnZl cnRfbm9kZV92YWx1ZShtcHZfbm9kZSBub2RlKToKKyAgKiAgICAgaWYgbm9kZS5mb3JtYXQgPT0g TVBWX0ZPUk1BVF9TVFJJTkc6CisgICogICAgICAgICByZXR1cm4gX3N0cmRlYyhub2RlLnUuc3Ry aW5nKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNDQ3Nyw5ICs0NDc3LDkgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9u b2RlX3ZhbHVlKHN0cnVjdCBtcHZfbm8KKyAgKiAgICAgICAgIHJldHVybiBub3Qgbm90IGludChu b2RlLnUuZmxhZykKKyAgKi8KKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxOTksIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRl Yyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDIwMSwgX19weXhfTDFf ZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX3B5eF90XzMgPSBf X1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9ub2RlLnUuc3RyaW5nKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTk5LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19weXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3Zfbm9kZS51LnN0cmlu Zyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDIwMSwgX19weXhfTDFf ZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgICBfX3B5eF90XzQgPSBO VUxMOworICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9k X0NoZWNrKF9fcHl4X3RfMikpKSB7CitAQCAtNDQ5NCwxNCArNDQ5NCwxNCBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUo c3RydWN0IG1wdl9ubworICAgICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdF8zKSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOworICAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAxOTksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAyMDEsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 CisgICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisgICAgIF9fcHl4X3RfMSA9IDA7CisgICAgIGdv dG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox OTgKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwMAorICAqIAorICAq IGNkZWYgX2NvbnZlcnRfbm9kZV92YWx1ZShtcHZfbm9kZSBub2RlKToKKyAgKiAgICAgaWYgbm9k ZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC00NTExLDcgKzQ1MTEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9ubworICAgICBi cmVhazsKKyAgICAgY2FzZSBNUFZfRk9STUFUX0ZMQUc6CisgCistICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyMDEKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjIwMworICAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobm9kZS51LnN0cmluZykKKyAg KiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CisgICogICAgICAgICBy ZXR1cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC00NTE5LDIwICs0NTE5LDIwIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShzdHJ1Y3QgbXB2X25vCisgICog ICAgICAgICByZXR1cm4gaW50KG5vZGUudS5pbnQ2NCkKKyAgKi8KKyAgICAgX19QeXhfWERFQ1JF RihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhf dl9ub2RlLnUuZmxhZyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIw MSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50 KF9fcHl4X3Zfbm9kZS51LmZsYWcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAyMDMsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZygoKFB5T2JqZWN0ICop KCZQeUludF9UeXBlKSksIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDIwMSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoKChQeU9iamVjdCAqKSgmUHlJbnRfVHlwZSkpLCBfX3B5eF90XzEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyMDMsIF9fcHl4X0wxX2Vy cm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0 X0lzVHJ1ZShfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF81IDwgMCkpIF9fUFlYX0VS UigwLCAyMDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVj dF9Jc1RydWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNSA8IDApKSBfX1BZWF9F UlIoMCwgMjAzLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygo ISgoIV9fcHl4X3RfNSkgIT0gMCkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgMjAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlCb29s X0Zyb21Mb25nKCghKCghX19weXhfdF81KSAhPSAwKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCAyMDMsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8yKTsKKyAgICAgX19weXhfciA9IF9fcHl4X3RfMjsKKyAgICAgX19weXhfdF8yID0g MDsKKyAgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjIwMAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjAy CisgICogICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgorICAqICAgICAg ICAgcmV0dXJuIF9zdHJkZWMobm9kZS51LnN0cmluZykKKyAgKiAgICAgZWxpZiBub2RlLmZvcm1h dCA9PSBNUFZfRk9STUFUX0ZMQUc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC00 NTQyLDcgKzQ1NDIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9ubworICAgICBicmVhazsKKyAg ICAgY2FzZSBNUFZfRk9STUFUX0lOVDY0OgorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjAzCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy MDUKKyAgKiAgICAgICAgIHJldHVybiBub3Qgbm90IGludChub2RlLnUuZmxhZykKKyAgKiAgICAg ZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorICAqICAgICAgICAgcmV0dXJu IGludChub2RlLnUuaW50NjQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC00NTUw LDE2ICs0NTUwLDE2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShzdHJ1Y3QgbXB2X25vCisgICogICAgICAgICByZXR1 cm4gZmxvYXQobm9kZS51LmRvdWJsZV8pCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19weXhf cik7CistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRfdChfX3B5eF92X25v ZGUudS5pbnQ2NCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDIwMywg X19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRf dChfX3B5eF92X25vZGUudS5pbnQ2NCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDAsIDIwNSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIp OworLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKCgoUHlPYmplY3Qg KikoJlB5SW50X1R5cGUpKSwgX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMjAzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xID0gX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZygoKFB5T2JqZWN0ICopKCZQeUludF9UeXBlKSksIF9fcHl4X3Rf Mik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIwNSwgX19weXhfTDFf ZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9ERUNSRUYo X19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgICAgX19weXhfciA9IF9fcHl4X3RfMTsKKyAg ICAgX19weXhfdF8xID0gMDsKKyAgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwMgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjA0CisgICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9G TEFHOgorICAqICAgICAgICAgcmV0dXJuIG5vdCBub3QgaW50KG5vZGUudS5mbGFnKQorICAqICAg ICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC00NTY5LDcgKzQ1NjksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9u bworICAgICBicmVhazsKKyAgICAgY2FzZSBNUFZfRk9STUFUX0RPVUJMRToKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwNQorKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjA3CisgICogICAgICAgICByZXR1cm4gaW50KG5vZGUudS5pbnQ2 NCkKKyAgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKyAgKiAg ICAgICAgIHJldHVybiBmbG9hdChub2RlLnUuZG91YmxlXykgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTQ1NzcsMTMgKzQ1NzcsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKHN0cnVjdCBtcHZfbm8K KyAgKiAgICAgICAgIHJldHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3Jt YXQpCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9fcHl4X3RfMSA9 IFB5RmxvYXRfRnJvbURvdWJsZShfX3B5eF92X25vZGUudS5kb3VibGVfKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjA1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19w eXhfdF8xID0gUHlGbG9hdF9Gcm9tRG91YmxlKF9fcHl4X3Zfbm9kZS51LmRvdWJsZV8pOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMDcsIF9fcHl4X0wxX2Vycm9yKQor ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgX19weXhfciA9IF9fcHl4X3RfMTsK KyAgICAgX19weXhfdF8xID0gMDsKKyAgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwNAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MjA2CisgICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1B VF9JTlQ2NDoKKyAgKiAgICAgICAgIHJldHVybiBpbnQobm9kZS51LmludDY0KQorICAqICAgICBl bGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CitAQCAtNDU5Myw3ICs0NTkzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKHN0cnVjdCBtcHZfbm8K KyAgICAgYnJlYWs7CisgICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX01BUDoKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwNworKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjA5CisgICogICAgICAgICByZXR1cm4gZmxvYXQobm9kZS51LmRv dWJsZV8pCisgICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoK KyAgKiAgICAgICAgIHJldHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3Jt YXQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC00NjAxLDEzICs0NjAxLDEzIEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRf bm9kZV92YWx1ZShzdHJ1Y3QgbXB2X25vCisgICogICAgICAgICByZXR1cm4gX2NvbnZlcnRfdmFs dWUobm9kZS51Lmxpc3QsIG5vZGUuZm9ybWF0KQorICAqLworICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOworLSAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f Y29udmVydF92YWx1ZShfX3B5eF92X25vZGUudS5saXN0LCBfX3B5eF92X25vZGUuZm9ybWF0KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjA3LCBfX3B5eF9MMV9lcnJv cikKKysgICAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZl cnRfdmFsdWUoX19weXhfdl9ub2RlLnUubGlzdCwgX19weXhfdl9ub2RlLmZvcm1hdCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIwOSwgX19weXhfTDFfZXJyb3IpCisg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX3B5eF9yID0gX19weXhfdF8xOwor ICAgICBfX3B5eF90XzEgPSAwOworICAgICBnb3RvIF9fcHl4X0wwOworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjA2CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyMDgKKyAgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFU X0RPVUJMRToKKyAgKiAgICAgICAgIHJldHVybiBmbG9hdChub2RlLnUuZG91YmxlXykKKyAgKiAg ICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtNDYxNyw3ICs0NjE3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKHN0cnVjdCBt cHZfbm8KKyAgICAgYnJlYWs7CisgICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorIAor LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjA5CisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTEKKyAgKiAgICAgICAgIHJldHVybiBfY29udmVy dF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpCisgICogICAgIGVsaWYgbm9kZS5mb3Jt YXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorICAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0 X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZvcm1hdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTQ2MjUsMTMgKzQ2MjUsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKHN0cnVjdCBtcHZfbm8KKyAg KiAKKyAgKi8KKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8xID0g X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUoX19weXhfdl9ub2Rl LnUubGlzdCwgX19weXhfdl9ub2RlLmZvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDIwOSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKF9fcHl4X3Zfbm9kZS51Lmxp c3QsIF9fcHl4X3Zfbm9kZS5mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAyMTEsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKyAgICAgX19weXhfciA9IF9fcHl4X3RfMTsKKyAgICAgX19weXhfdF8xID0gMDsKKyAgICAg Z290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjIwOAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjEwCisgICogICAg IGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKyAgKiAgICAgICAgIHJl dHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpCisgICogICAgIGVs aWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtNDY0Miw3ICs0NjQyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKHN0cnVjdCBtcHZf bm8KKyAgICAgZGVmYXVsdDogYnJlYWs7CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MjEwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MjEyCisgICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgor ICAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZvcm1h dCkKKyAgKiAgICAgcmV0dXJuIE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTQ2NTMsNyArNDY1Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShzdHJ1Y3QgbXB2X25vCisgICBfX3B5eF9yID0g UHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTcKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxOTkKKyAgKiAKKyAgKiAKKyAgKiBjZGVmIF9jb252ZXJ0X25v ZGVfdmFsdWUobXB2X25vZGUgbm9kZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC00Njc1LDcgKzQ2NzUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9ubworICAgcmV0dXJuIF9f cHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTMKKysv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjE1CisgICogCisgICogCisgICogY2Rl ZiBfY29udmVydF92YWx1ZSh2b2lkKiBkYXRhLCBtcHZfZm9ybWF0IGZvcm1hdCk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC00NzA0LDcgKzQ3MDQsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKHZvaWQgKl9f cHl4X3ZfZGF0YQorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9jb252ZXJ0X3ZhbHVlIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjE2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjE4CisgICogICAgIGNkZWYgbXB2X25vZGUgbm9kZQorICAqICAgICBjZGVmIG1wdl9ub2Rl X2xpc3Qgbm9kZWxpc3QKKyAgKiAgICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ3MTQsNyArNDcxNCw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9p ZCAqX19weXhfdl9kYXRhCisgICBzd2l0Y2ggKF9fcHl4X3ZfZm9ybWF0KSB7CisgICAgIGNhc2Ug TVBWX0ZPUk1BVF9OT0RFOgorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjE3CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTkKKyAgKiAg ICAgY2RlZiBtcHZfbm9kZV9saXN0IG5vZGVsaXN0CisgICogICAgIGlmIGZvcm1hdCA9PSBNUFZf Rk9STUFUX05PREU6CisgICogICAgICAgICBub2RlID0gKDxtcHZfbm9kZSo+ZGF0YSlbMF0gICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ3MjMsNyArNDcyMyw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9p ZCAqX19weXhfdl9kYXRhCisgICovCisgICAgIF9fcHl4X3Zfbm9kZSA9ICgoKHN0cnVjdCBtcHZf bm9kZSAqKV9fcHl4X3ZfZGF0YSlbMF0pOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjE4CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy MjAKKyAgKiAgICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERToKKyAgKiAgICAgICAgIG5v ZGUgPSAoPG1wdl9ub2RlKj5kYXRhKVswXQorICAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25v ZGVfdmFsdWUobm9kZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ3MzEsMTMg KzQ3MzEsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fY29udmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEKKyAgKiAgICAgICAgIG5vZGVsaXN0 ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRhKVswXQorICAqLworICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOworLSAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f Y29udmVydF9ub2RlX3ZhbHVlKF9fcHl4X3Zfbm9kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDIxOCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9f cHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoX19weXhfdl9u b2RlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjIwLCBfX3B5eF9M MV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAgIF9fcHl4X3IgPSBf X3B5eF90XzE7CisgICAgIF9fcHl4X3RfMSA9IDA7CisgICAgIGdvdG8gX19weXhfTDA7CisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTYKKysgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIxOAorICAqICAgICBjZGVmIG1wdl9ub2RlIG5vZGUK KyAgKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0IG5vZGVsaXN0CisgICogICAgIGlmIGZvcm1hdCA9 PSBNUFZfRk9STUFUX05PREU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC00NzQ3 LDcgKzQ3NDcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2X19jb252ZXJ0X3ZhbHVlKHZvaWQgKl9fcHl4X3ZfZGF0YQorICAgICBicmVhazsKKyAgICAg Y2FzZSBNUFZfRk9STUFUX05PREVfQVJSQVk6CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyMjAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjIyMgorICAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZSkKKyAgKiAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorICAqICAgICAgICAgbm9k ZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC00NzU2LDE5ICs0NzU2LDE5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19weXhfdl9kYXRhCisg ICovCisgICAgIF9fcHl4X3Zfbm9kZWxpc3QgPSAoKChzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqKV9f cHl4X3ZfZGF0YSlbMF0pOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjIxCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjMKKyAgKiAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorICAqICAgICAgICAgbm9k ZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCisgICogICAgICAgICB2YWx1ZXMgPSBb XSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBmb3IgaSBpbiByYW5n ZShub2RlbGlzdC5udW0pOgorICAqICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoX2NvbnZlcnRf bm9kZV92YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pKQorICAqLworLSAgICBfX3B5eF90XzEgPSBQ eUxpc3RfTmV3KDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjEs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzEgPSBQeUxpc3RfTmV3KDApOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjMsIF9fcHl4X0wxX2Vycm9yKQorICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgX19weXhfdl92YWx1ZXMgPSBfX3B5eF90 XzE7CisgICAgIF9fcHl4X3RfMSA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyMjIKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIy NAorICAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCisgICog ICAgICAgICB2YWx1ZXMgPSBbXQorICAqICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3Qu bnVtKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ3ODAsMjAgKzQ3ODAsMjAg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVy dF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEKKyAgICAgZm9yIChfX3B5eF90XzQgPSAwOyBfX3B5 eF90XzQgPCBfX3B5eF90XzM7IF9fcHl4X3RfNCs9MSkgeworICAgICAgIF9fcHl4X3ZfaSA9IF9f cHl4X3RfNDsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjIz CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNQorICAqICAgICAg ICAgdmFsdWVzID0gW10KKyAgKiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51bSk6 CisgICogICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVs aXN0LnZhbHVlc1tpXSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAg IHJldHVybiB2YWx1ZXMKKyAgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01B UDoKKyAgKi8KKy0gICAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fY29udmVydF9ub2RlX3ZhbHVlKChfX3B5eF92X25vZGVsaXN0LnZhbHVlc1tfX3B5eF92X2ld KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIyMywgX19weXhfTDFf ZXJyb3IpCisrICAgICAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X2NvbnZlcnRfbm9kZV92YWx1ZSgoX19weXhfdl9ub2RlbGlzdC52YWx1ZXNbX19weXhfdl9pXSkp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjUsIF9fcHl4X0wxX2Vy cm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICAgIF9fcHl4X3RfNSA9 IF9fUHl4X1B5T2JqZWN0X0FwcGVuZChfX3B5eF92X3ZhbHVlcywgX19weXhfdF8xKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfNSA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMCwgMjIzLCBfX3B5eF9M MV9lcnJvcikKKysgICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9BcHBlbmQoX19weXhf dl92YWx1ZXMsIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzUgPT0gKChpbnQpLTEp KSkgX19QWVhfRVJSKDAsIDIyNSwgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICAgIH0KKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjIyNAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjI2CisgICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0pOgor ICAqICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlz dC52YWx1ZXNbaV0pKQorICAqICAgICAgICAgcmV0dXJuIHZhbHVlcyAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtNDgwNSw3ICs0ODA1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2Rh dGEKKyAgICAgX19weXhfciA9IF9fcHl4X3ZfdmFsdWVzOworICAgICBnb3RvIF9fcHl4X0wwOwor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjE5CisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjEKKyAgKiAgICAgICAgIG5vZGUgPSAoPG1w dl9ub2RlKj5kYXRhKVswXQorICAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUo bm9kZSkKKyAgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNDgxNSw3ICs0ODE1LDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZSh2b2lk ICpfX3B5eF92X2RhdGEKKyAgICAgYnJlYWs7CisgICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX01B UDoKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNgorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjI4CisgICogICAgICAgICByZXR1cm4g dmFsdWVzCisgICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6CisgICog ICAgICAgICBub2RlbGlzdCA9ICg8bXB2X25vZGVfbGlzdCo+ZGF0YSlbMF0gICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ4MjQsMTkgKzQ4MjQsMTkgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZSh2b2lkICpfX3B5 eF92X2RhdGEKKyAgKi8KKyAgICAgX19weXhfdl9ub2RlbGlzdCA9ICgoKHN0cnVjdCBtcHZfbm9k ZV9saXN0ICopX19weXhfdl9kYXRhKVswXSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyMjcKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjIyOQorICAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorICAqICAg ICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCisgICogICAgICAgICB2 YWx1ZXMgPSB7fSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBmb3Ig aSBpbiByYW5nZShub2RlbGlzdC5udW0pOgorICAqICAgICAgICAgICAgIHZhbHVlID0gX2NvbnZl cnRfbm9kZV92YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pCisgICovCistICAgIF9fcHl4X3RfMSA9 IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMjI3LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xID0gX19QeXhf UHlEaWN0X05ld1ByZXNpemVkKDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAyMjksIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK KyAgICAgX19weXhfdl92YWx1ZXMgPSBfX3B5eF90XzE7CisgICAgIF9fcHl4X3RfMSA9IDA7Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjgKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzMAorICAqICAgICAgICAgbm9kZWxpc3QgPSAo PG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCisgICogICAgICAgICB2YWx1ZXMgPSB7fQorICAqICAg ICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTQ4NDgsMjggKzQ4NDgsMjggQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEK KyAgICAgZm9yIChfX3B5eF90XzQgPSAwOyBfX3B5eF90XzQgPCBfX3B5eF90XzM7IF9fcHl4X3Rf NCs9MSkgeworICAgICAgIF9fcHl4X3ZfaSA9IF9fcHl4X3RfNDsKKyAKKy0gICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjI5CisrICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjIzMQorICAqICAgICAgICAgdmFsdWVzID0ge30KKyAgKiAgICAgICAg IGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51bSk6CisgICogICAgICAgICAgICAgdmFsdWUgPSBf Y29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIHZhbHVlc1tfc3RyZGVjKG5vZGVsaXN0LmtleXNb aV0pXSA9IHZhbHVlCisgICogICAgICAgICByZXR1cm4gdmFsdWVzCisgICovCistICAgICAgX19w eXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1 ZSgoX19weXhfdl9ub2RlbGlzdC52YWx1ZXNbX19weXhfdl9pXSkpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fcHl4 X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUo KF9fcHl4X3Zfbm9kZWxpc3QudmFsdWVzW19fcHl4X3ZfaV0pKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgMjMxLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKyAgICAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X3ZhbHVl LCBfX3B5eF90XzEpOworICAgICAgIF9fcHl4X3RfMSA9IDA7CisgCistICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzMAorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyMzIKKyAgKiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51 bSk6CisgICogICAgICAgICAgICAgdmFsdWUgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0 LnZhbHVlc1tpXSkKKyAgKiAgICAgICAgICAgICB2YWx1ZXNbX3N0cmRlYyhub2RlbGlzdC5rZXlz W2ldKV0gPSB2YWx1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBy ZXR1cm4gdmFsdWVzCisgICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgor ICAqLworLSAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9u X3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMjMwLCBf X3B5eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf NiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDIzMiwgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7 CistICAgICAgX19weXhfdF83ID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKChfX3B5eF92X25v ZGVsaXN0LmtleXNbX19weXhfdl9pXSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlY X0VSUigwLCAyMzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5 Qnl0ZXNfRnJvbVN0cmluZygoX19weXhfdl9ub2RlbGlzdC5rZXlzW19fcHl4X3ZfaV0pKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMjMyLCBfX3B5eF9MMV9lcnJvcikK KyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAgICAgICBfX3B5eF90XzggPSBOVUxM OworICAgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2Rf Q2hlY2soX19weXhfdF82KSkpIHsKK0BAIC00ODg0LDE0ICs0ODg0LDE0IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAq X19weXhfdl9kYXRhCisgICAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfOCkgPyBfX1B5eF9QeU9i amVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzgsIF9fcHl4X3RfNykgOiBfX1B5eF9Q eU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF83KTsKKyAgICAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7CisgICAgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgMjMwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMzIsIF9fcHl4X0wxX2Vycm9yKQorICAgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBf X3B5eF90XzYgPSAwOworLSAgICAgIGlmICh1bmxpa2VseShQeU9iamVjdF9TZXRJdGVtKF9fcHl4 X3ZfdmFsdWVzLCBfX3B5eF90XzEsIF9fcHl4X3ZfdmFsdWUpIDwgMCkpIF9fUFlYX0VSUigwLCAy MzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIGlmICh1bmxpa2VseShQeU9iamVjdF9TZXRJdGVt KF9fcHl4X3ZfdmFsdWVzLCBfX3B5eF90XzEsIF9fcHl4X3ZfdmFsdWUpIDwgMCkpIF9fUFlYX0VS UigwLCAyMzIsIF9fcHl4X0wxX2Vycm9yKQorICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEp OyBfX3B5eF90XzEgPSAwOworICAgICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyMzEKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIz MworICAqICAgICAgICAgICAgIHZhbHVlID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlzdC52 YWx1ZXNbaV0pCisgICogICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMobm9kZWxpc3Qua2V5c1tp XSldID0gdmFsdWUKKyAgKiAgICAgICAgIHJldHVybiB2YWx1ZXMgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTQ5MDMsNyArNDkwMyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19weXhfdl9kYXRh CisgICAgIF9fcHl4X3IgPSBfX3B5eF92X3ZhbHVlczsKKyAgICAgZ290byBfX3B5eF9MMDsKKyAK Ky0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNQorKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjI3CisgICogICAgICAgICAgICAgdmFsdWVzLmFw cGVuZChfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkpCisgICogICAgICAg ICByZXR1cm4gdmFsdWVzCisgICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9N QVA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC00OTEzLDcgKzQ5MTMsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3Zh bHVlKHZvaWQgKl9fcHl4X3ZfZGF0YQorICAgICBicmVhazsKKyAgICAgY2FzZSBNUFZfRk9STUFU X1NUUklORzoKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzMwor KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM1CisgICogICAgICAgICBy ZXR1cm4gdmFsdWVzCisgICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgor ICAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoKCg8Y2hhcioqPmRhdGEpWzBdKSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ5MjEsOSArNDkyMSw5IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19w eXhfdl9kYXRhCisgICogICAgICAgICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2NF90Kj5kYXRhKVsw XQorICAqLworICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDIzMywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMjM1LCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5Qnl0 ZXNfRnJvbVN0cmluZygoKChjaGFyICoqKV9fcHl4X3ZfZGF0YSlbMF0pKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19w eXhfdF83ID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKCgoKGNoYXIgKiopX19weXhfdl9kYXRh KVswXSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAyMzUsIF9fcHl4 X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAgICAgX19weXhfdF84 ID0gTlVMTDsKKyAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzYpKSkgeworQEAgLTQ5MzgsMTQgKzQ5MzgsMTQgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZSh2 b2lkICpfX3B5eF92X2RhdGEKKyAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfOCkgPyBfX1B5eF9Q eU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzgsIF9fcHl4X3RfNykgOiBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF83KTsKKyAgICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworICAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgMjM1LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYg PSAwOworICAgICBfX3B5eF9yID0gX19weXhfdF8xOworICAgICBfX3B5eF90XzEgPSAwOworICAg ICBnb3RvIF9fcHl4X0wwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjMyCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMzQKKyAgKiAg ICAgICAgICAgICB2YWx1ZXNbX3N0cmRlYyhub2RlbGlzdC5rZXlzW2ldKV0gPSB2YWx1ZQorICAq ICAgICAgICAgcmV0dXJuIHZhbHVlcworICAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X1NUUklORzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ5NTUsNyArNDk1NSw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZl cnRfdmFsdWUodm9pZCAqX19weXhfdl9kYXRhCisgICAgIGJyZWFrOworICAgICBjYXNlIE1QVl9G T1JNQVRfRkxBRzoKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIz NQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM3CisgICogICAgICAg ICByZXR1cm4gX3N0cmRlYygoKDxjaGFyKio+ZGF0YSlbMF0pKQorICAqICAgICBlbGlmIGZvcm1h dCA9PSBNUFZfRk9STUFUX0ZMQUc6CisgICogICAgICAgICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2 NF90Kj5kYXRhKVswXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNDk2MywxMyAr NDk2MywxMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2 X19jb252ZXJ0X3ZhbHVlKHZvaWQgKl9fcHl4X3ZfZGF0YQorICAqICAgICAgICAgcmV0dXJuIGlu dCgoPHVpbnQ2NF90Kj5kYXRhKVswXSkKKyAgKi8KKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKCghKCghKCgoKHVpbnQ2 NF90ICopX19weXhfdl9kYXRhKVswXSkgIT0gMCkpICE9IDApKSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDIzNSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3Rf MSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISgoISgoKCh1aW50NjRfdCAqKV9fcHl4X3ZfZGF0 YSlbMF0pICE9IDApKSAhPSAwKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAyMzcsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK KyAgICAgX19weXhfciA9IF9fcHl4X3RfMTsKKyAgICAgX19weXhfdF8xID0gMDsKKyAgICAgZ290 byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIz NAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM2CisgICogICAgIGVs aWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgorICAqICAgICAgICAgcmV0dXJuIF9zdHJk ZWMoKCg8Y2hhcioqPmRhdGEpWzBdKSkKKyAgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1B VF9GTEFHOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNDk3OSw3ICs0OTc5LDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVy dF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEKKyAgICAgYnJlYWs7CisgICAgIGNhc2UgTVBWX0ZP Uk1BVF9JTlQ2NDoKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIz NworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM5CisgICogICAgICAg ICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2NF90Kj5kYXRhKVswXQorICAqICAgICBlbGlmIGZvcm1h dCA9PSBNUFZfRk9STUFUX0lOVDY0OgorICAqICAgICAgICAgcmV0dXJuIGludCgoPHVpbnQ2NF90 Kj5kYXRhKVswXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ5ODcsMTYgKzQ5 ODcsMTYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f Y29udmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEKKyAgKiAgICAgICAgIHJldHVybiBmbG9h dCgoPGRvdWJsZSo+ZGF0YSlbMF0pCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CistICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKCgodWludDY0X3Qg KilfX3B5eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDIzNywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zy b21fdWludDY0X3QoKCgodWludDY0X3QgKilfX3B5eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIzOSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9D YWxsT25lQXJnKCgoUHlPYmplY3QgKikoJlB5SW50X1R5cGUpKSwgX19weXhfdF8xKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMjM3LCBfX3B5eF9MMV9lcnJvcikKKysg ICAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZygoKFB5T2JqZWN0ICopKCZQ eUludF9UeXBlKSksIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDIzOSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgICAgX19w eXhfciA9IF9fcHl4X3RfNjsKKyAgICAgX19weXhfdF82ID0gMDsKKyAgICAgZ290byBfX3B5eF9M MDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzNgorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM4CisgICogICAgIGVsaWYgZm9ybWF0 ID09IE1QVl9GT1JNQVRfRkxBRzoKKyAgKiAgICAgICAgIHJldHVybiBub3Qgbm90ICg8dWludDY0 X3QqPmRhdGEpWzBdCisgICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC01MDA2LDcgKzUwMDYsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKHZv aWQgKl9fcHl4X3ZfZGF0YQorICAgICBicmVhazsKKyAgICAgY2FzZSBNUFZfRk9STUFUX0RPVUJM RToKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzOQorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjQxCisgICogICAgICAgICByZXR1cm4g aW50KCg8dWludDY0X3QqPmRhdGEpWzBdKQorICAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX0RPVUJMRToKKyAgKiAgICAgICAgIHJldHVybiBmbG9hdCgoPGRvdWJsZSo+ZGF0YSlbMF0p ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC01MDE0LDEzICs1MDE0LDEzIEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFs dWUodm9pZCAqX19weXhfdl9kYXRhCisgICogCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19w eXhfcik7CistICAgIF9fcHl4X3RfNiA9IFB5RmxvYXRfRnJvbURvdWJsZSgoKChkb3VibGUgKilf X3B5eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDIzOSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNiA9IFB5RmxvYXRfRnJvbURvdWJs ZSgoKChkb3VibGUgKilfX3B5eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDI0MSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzYpOworICAgICBfX3B5eF9yID0gX19weXhfdF82OworICAgICBfX3B5eF90XzYgPSAw OworICAgICBnb3RvIF9fcHl4X0wwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjM4CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDAK KyAgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKyAgKiAgICAgICAgIHJl dHVybiBpbnQoKDx1aW50NjRfdCo+ZGF0YSlbMF0pCisgICogICAgIGVsaWYgZm9ybWF0ID09IE1Q Vl9GT1JNQVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNTAzMSw3 ICs1MDMxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fY29udmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEKKyAgICAgZGVmYXVsdDogYnJlYWs7 CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjQwCisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjQyCisgICogICAgIGVsaWYgZm9ybWF0 ID09IE1QVl9GT1JNQVRfRE9VQkxFOgorICAqICAgICAgICAgcmV0dXJuIGZsb2F0KCg8ZG91Ymxl Kj5kYXRhKVswXSkKKyAgKiAgICAgcmV0dXJuIE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTUwNDIsNyArNTA0Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19weXhfdl9kYXRhCisgICBf X3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworICAgZ290byBfX3B5eF9M MDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTMKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTUKKyAgKiAKKyAgKiAKKyAgKiBjZGVmIF9j b252ZXJ0X3ZhbHVlKHZvaWQqIGRhdGEsIG1wdl9mb3JtYXQgZm9ybWF0KTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTUwNjYsNyArNTA2Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19weXhf dl9kYXRhCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjI1MAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTIK KyAgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IG5hbWUsIGRhdGEKKyAgKiAKKyAgKiAgICAgY2Rl ZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfcHJvcGVydHkqIHByb3ApOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtNTA4NiwxNiArNTA4NiwxNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9faW5pdChzdHJ1Y3QgX19weXhf b2JqXworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9pbml0IiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjUxCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUzCisgICogCisg ICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X3Byb3BlcnR5KiBwcm9wKToKKyAgKiAg ICAgICAgIHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5uYW1lKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICBzZWxmLmRhdGEgPSBfY29udmVydF92YWx1ZShwcm9wLmRh dGEsIHByb3AuZm9ybWF0KQorICAqICAgICAgICAgcmV0dXJuIHNlbGYKKyAgKi8KKy0gIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjUxLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjUzLCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gX19QeXhfUHlC eXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfcHJvcC0+bmFtZSk7IGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDAsIDI1MSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBf X1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9wcm9wLT5uYW1lKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjUzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzMpOworICAgX19weXhfdF80ID0gTlVMTDsKKyAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsK K0BAIC01MTEwLDcgKzUxMTAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2XzhQcm9wZXJ0eV9faW5pdChzdHJ1Y3QgX19weXhfb2JqXworICAgX19weXhf dF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBf X3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3Rf MiwgX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjUxLCBfX3B5eF9MMV9lcnJvcikKKysg IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI1MywgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworQEAgLTUx MTksMTQgKzUxMTksMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl84UHJvcGVydHlfX2luaXQoc3RydWN0IF9fcHl4X29ial8KKyAgIF9fcHl4X3Zfc2Vs Zi0+bmFtZSA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjU0CisgICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X3Byb3BlcnR5 KiBwcm9wKToKKyAgKiAgICAgICAgIHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5uYW1lKQorICAq ICAgICAgICAgc2VsZi5kYXRhID0gX2NvbnZlcnRfdmFsdWUocHJvcC5kYXRhLCBwcm9wLmZvcm1h dCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgcmV0dXJuIHNlbGYK KyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2 X19jb252ZXJ0X3ZhbHVlKF9fcHl4X3ZfcHJvcC0+ZGF0YSwgX19weXhfdl9wcm9wLT5mb3JtYXQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyNTIsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZl cnRfdmFsdWUoX19weXhfdl9wcm9wLT5kYXRhLCBfX3B5eF92X3Byb3AtPmZvcm1hdCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI1NCwgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsK KyAgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmRhdGEpOworQEAgLTUxMzQsNyArNTEzNCw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3Bl cnR5X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfCisgICBfX3B5eF92X3NlbGYtPmRhdGEgPSBfX3B5 eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjI1MworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1NQor ICAqICAgICAgICAgc2VsZi5uYW1lID0gX3N0cmRlYyhwcm9wLm5hbWUpCisgICogICAgICAgICBz ZWxmLmRhdGEgPSBfY29udmVydF92YWx1ZShwcm9wLmRhdGEsIHByb3AuZm9ybWF0KQorICAqICAg ICAgICAgcmV0dXJuIHNlbGYgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTUxNDYs NyArNTE0Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfOFByb3BlcnR5X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfCisgICBfX3B5eF9yID0gKChQeU9i amVjdCAqKV9fcHl4X3Zfc2VsZik7CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjI1MgorICAqICAgICBjZGVmIHB1YmxpYyBvYmplY3QgbmFtZSwgZGF0YQorICAq IAorICAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9wcm9wZXJ0eSogcHJvcCk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC01MTY4LDcgKzUxNjgsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9faW5pdChz dHJ1Y3QgX19weXhfb2JqXworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDgKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjUwCisgICogICAgIFdyYXBzOiBtcHZfZXZlbnRfcHJvcGVydHkKKyAgKiAgICAgIiIi CisgICogICAgIGNkZWYgcHVibGljIG9iamVjdCBuYW1lLCBkYXRhICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC01NjU3LDcgKzU2NTcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfMl9fc2V0c3RhdGVfY3l0aG9uX18o cworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyNjMKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjY1CisgICog CisgICogICAgIEBwcm9wZXJ0eQorICAqICAgICBkZWYgZXJyb3Jfc3RyKHNlbGYpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNTY5MSw3ICs1NjkxLDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzllcnJvcl9zdHJfX19n ZXRfXyhzdHJ1Y3QKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX2dldF9fIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjY2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjY4 CisgICogICAgICAgICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRoZSBlcnJvciBwcm9lcHJ0eSIi IgorICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworICAqICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTU3MDYsNyArNTcwNiw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF85 ZXJyb3Jfc3RyX19fZ2V0X18oc3RydWN0CisgICAgICAgI2VuZGlmCisgICAgICAgLyp0cnk6Ki8g eworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI2NworKyAg ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI2OQorICAqICAgICAgICAg Y2RlZiBjb25zdCBjaGFyKiBlcnJfYworICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAg ICAgICAgICBlcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmcoc2VsZi5lcnJvcikgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTU3MTYsNyArNTcxNiw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF85ZXJyb3Jfc3RyX19fZ2V0X18o c3RydWN0CisgICAgICAgICBfX3B5eF92X2Vycl9jID0gbXB2X2Vycm9yX3N0cmluZyhfX3B5eF92 X3NlbGYtPmVycm9yKTsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjI2NgorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyNjgKKyAgKiAgICAgICAgICIiIm1wdl9lcnJvcl9zdHJpbmcgb2YgdGhlIGVycm9yIHByb2Vw cnR5IiIiCisgICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVycl9jCisgICogICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNTczNSw3ICs1NzM1 LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2 ZW50XzllcnJvcl9zdHJfX19nZXRfXyhzdHJ1Y3QKKyAgICAgICB9CisgICB9CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjY4CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MjcwCisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAg ICAgIGVycl9jID0gbXB2X2Vycm9yX3N0cmluZyhzZWxmLmVycm9yKQorICAqICAgICAgICAgcmV0 dXJuIF9zdHJkZWMoZXJyX2MpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC01NzQz LDkgKzU3NDMsOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl81RXZlbnRfOWVycm9yX3N0cl9fX2dldF9fKHN0cnVjdAorICAqICAgICBjZGVmIF9kYXRh KHNlbGYsIG1wdl9ldmVudCogZXZlbnQpOgorICAqLworICAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3Ry ZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjY4LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9u X3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjcwLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8z ID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfZXJyX2MpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyNjgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf dF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfZXJyX2MpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyNzAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMyk7CisgICBfX3B5eF90XzQgPSBOVUxMOworICAgaWYgKENZVEhP Tl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkg eworQEAgLTU3NjAsMTQgKzU3NjAsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzllcnJvcl9zdHJfX19nZXRfXyhzdHJ1Y3QKKyAgIF9f cHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf MiwgX19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzIsIF9fcHl4X3RfMyk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3Rf NCA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI2OCwgX19weXhfTDFfZXJyb3Ip CisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyNzAsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisgICBfX3B5 eF90XzEgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyNjMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy NjUKKyAgKiAKKyAgKiAgICAgQHByb3BlcnR5CisgICogICAgIGRlZiBlcnJvcl9zdHIoc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC01Nzg5LDcgKzU3ODksNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfOWVycm9y X3N0cl9fX2dldF9fKHN0cnVjdAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzAKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjcyCisgICogICAgICAgICByZXR1cm4gX3N0cmRlYyhlcnJfYykKKyAgKiAKKyAg KiAgICAgY2RlZiBfZGF0YShzZWxmLCBtcHZfZXZlbnQqIGV2ZW50KTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTU4MTksNyArNTgxOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19kYXRhKHN0cnVjdCBfX3B5eF9vYmpf OXZpCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX2RhdGEiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyNzEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzMKKyAgKiAKKyAg KiAgICAgY2RlZiBfZGF0YShzZWxmLCBtcHZfZXZlbnQqIGV2ZW50KToKKyAgKiAgICAgICAgIGNk ZWYgdm9pZCogZGF0YSA9IGV2ZW50LmRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTU4MjksNyArNTgyOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50X19kYXRhKHN0cnVjdCBfX3B5eF9vYmpfOXZpCisgICBfX3B5eF90 XzEgPSBfX3B5eF92X2V2ZW50LT5kYXRhOworICAgX19weXhfdl9kYXRhID0gX19weXhfdF8xOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3MworKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3NQorICAqICAgICAgICAgY2RlZiB2b2lkKiBkYXRh ID0gZXZlbnQuZGF0YQorICAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2Uq IGNsaW1zZworICAqICAgICAgICAgaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZ X1JFUExZOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNTgzOSw3ICs1ODM5LDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf X2RhdGEoc3RydWN0IF9fcHl4X29ial85dmkKKyAgIHN3aXRjaCAoX19weXhfdl9zZWxmLT5pZCkg eworICAgICBjYXNlIE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFk6CisgCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzQKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjI3NgorICAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21l c3NhZ2UqIGNsaW1zZworICAqICAgICAgICAgaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BS T1BFUlRZX1JFUExZOgorICAqICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSgpLl9pbml0KDxt cHZfZXZlbnRfcHJvcGVydHkqPmRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC01ODQ3LDE2ICs1ODQ3LDE2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50X19kYXRhKHN0cnVjdCBfX3B5eF9vYmpfOXZpCisgICogICAgICAg ICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkK KyAgKi8KKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8yID0gX19Q eXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUHJvcGVydHkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgMjc0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfQ2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUHJvcGVydHkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjc2 LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9f cHl4X3RfMyA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2 X1Byb3BlcnR5ICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eSAqKV9fcHl4X3RfMiktPl9fcHl4X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdF8yKSwgKChzdHJ1Y3QgbXB2 X2V2ZW50X3Byb3BlcnR5ICopX19weXhfdl9kYXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8z KSkgX19QWVhfRVJSKDAsIDI3NCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9ICgo c3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICop KChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4 X3RfMiktPl9fcHl4X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdF8yKSwgKChzdHJ1Y3QgbXB2X2V2ZW50X3Byb3Bl cnR5ICopX19weXhfdl9kYXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDAsIDI3NiwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwor ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgICAgX19weXhf ciA9IF9fcHl4X3RfMzsKKyAgICAgX19weXhfdF8zID0gMDsKKyAgICAgZ290byBfX3B5eF9MMDsK KyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3MworKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjc1CisgICogICAgICAgICBjZGVmIHZvaWQq IGRhdGEgPSBldmVudC5kYXRhCisgICogICAgICAgICBjZGVmIG1wdl9ldmVudF9jbGllbnRfbWVz c2FnZSogY2xpbXNnCisgICogICAgICAgICBpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9HRVRfUFJP UEVSVFlfUkVQTFk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC01ODY2LDcgKzU4 NjYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF9fZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAgICBicmVhazsKKyAgICAgY2FzZSBN UFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6Mjc2CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy NzgKKyAgKiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8bXB2X2V2ZW50X3By b3BlcnR5Kj5kYXRhKQorICAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9QUk9Q RVJUWV9DSEFOR0U6CisgICogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1w dl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTU4NzQsMTYgKzU4NzQsMTYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl81RXZlbnRfX2RhdGEoc3RydWN0IF9fcHl4X29ial85dmkKKyAgKiAgICAgICAg ICAgICByZXR1cm4gTG9nTWVzc2FnZSgpLl9pbml0KDxtcHZfZXZlbnRfbG9nX21lc3NhZ2UqPmRh dGEpCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9fcHl4X3RfMyA9 IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDI3NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5 T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X1Byb3BlcnR5KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDI3OCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAg ICBfX3B5eF90XzIgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eSAqKSgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UHJvcGVydHkgKilfX3B5eF90XzMpLT5fX3B5eF92dGFiKS0+X2luaXQoKChzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3RfMyksICgoc3RydWN0 IG1wdl9ldmVudF9wcm9wZXJ0eSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCAyNzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzIg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eSAqKSgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilf X3B5eF90XzMpLT5fX3B5eF92dGFiKS0+X2luaXQoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3RfMyksICgoc3RydWN0IG1wdl9ldmVudF9w cm9wZXJ0eSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlY X0VSUigwLCAyNzgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgICAgIF9f cHl4X3IgPSBfX3B5eF90XzI7CisgICAgIF9fcHl4X3RfMiA9IDA7CisgICAgIGdvdG8gX19weXhf TDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzUKKysgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3NworICAqICAgICAgICAgaWYgc2Vs Zi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZOgorICAqICAgICAgICAgICAgIHJl dHVybiBQcm9wZXJ0eSgpLl9pbml0KDxtcHZfZXZlbnRfcHJvcGVydHkqPmRhdGEpCisgICogICAg ICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTU4OTMsNyArNTg5Myw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19kYXRhKHN0cnVjdCBfX3B5 eF9vYmpfOXZpCisgICAgIGJyZWFrOworICAgICBjYXNlIE1QVl9FVkVOVF9MT0dfTUVTU0FHRToK KyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3OAorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjgwCisgICogICAgICAgICAgICAgcmV0dXJu IFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKKyAgKiAgICAgICAg IGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfTE9HX01FU1NBR0U6CisgICogICAgICAgICAgICAg cmV0dXJuIExvZ01lc3NhZ2UoKS5faW5pdCg8bXB2X2V2ZW50X2xvZ19tZXNzYWdlKj5kYXRhKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNTkwMSwxNiArNTkwMSwxNiBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9fZGF0YShz dHJ1Y3QgX19weXhfb2JqXzl2aQorICAqICAgICAgICAgIyAgICAgcmV0dXJuIElucHV0RGlzcGF0 Y2goKS5faW5pdCg8bXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0YSkKKyAgKi8K KyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8yID0gX19QeXhfUHlP YmplY3RfQ2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfTG9nTWVzc2FnZSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigw LCAyNzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9D YWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9M b2dNZXNzYWdlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDI4MCwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX3B5 eF90XzMgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9M b2dNZXNzYWdlICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlICopX19weXhfdF8yKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3RfMiksICgoc3RydWN0 IG1wdl9ldmVudF9sb2dfbWVzc2FnZSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCAyNzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90 XzMgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlICopX19weXhfdF8yKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3RfMiksICgoc3RydWN0IG1w dl9ldmVudF9sb2dfbWVzc2FnZSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCAyODAsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8zKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9 IDA7CisgICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7CisgICAgIF9fcHl4X3RfMyA9IDA7CisgICAg IGdvdG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyNzcKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3OQorICAqICAg ICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6CisgICogICAg ICAgICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0 YSkKKyAgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfTE9HX01FU1NBR0U6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC01OTIwLDcgKzU5MjAsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9fZGF0YShzdHJ1 Y3QgX19weXhfb2JqXzl2aQorICAgICBicmVhazsKKyAgICAgY2FzZSBNUFZfRVZFTlRfQ0xJRU5U X01FU1NBR0U6CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyODIK KysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NAorICAqICAgICAgICAg IyAgICAgcmV0dXJuIElucHV0RGlzcGF0Y2goKS5faW5pdCg8bXB2X2V2ZW50X3NjcmlwdF9pbnB1 dF9kaXNwYXRjaCo+ZGF0YSkKKyAgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRf Q0xJRU5UX01FU1NBR0U6CisgICogICAgICAgICAgICAgY2xpbXNnID0gPG1wdl9ldmVudF9jbGll bnRfbWVzc2FnZSo+ZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNTkyOSwx OSArNTkyOSwxOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF9fZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAqLworICAgICBfX3B5eF92 X2NsaW1zZyA9ICgoc3RydWN0IG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSAqKV9fcHl4X3ZfZGF0 YSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyODMKKysgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NQorICAqICAgICAgICAgZWxpZiBz ZWxmLmlkID09IE1QVl9FVkVOVF9DTElFTlRfTUVTU0FHRToKKyAgKiAgICAgICAgICAgICBjbGlt c2cgPSA8bXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKj5kYXRhCisgICogICAgICAgICAgICAgYXJn cyA9IFtdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBudW1f YXJncyA9IGNsaW1zZy5udW1fYXJncworICAqICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG51 bV9hcmdzKToKKyAgKi8KKy0gICAgX19weXhfdF8zID0gUHlMaXN0X05ldygwKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjgzLCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19weXhfdF8zID0gUHlMaXN0X05ldygwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZ WF9FUlIoMCwgMjg1LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Myk7CisgICAgIF9fcHl4X3ZfYXJncyA9ICgoUHlPYmplY3QqKV9fcHl4X3RfMyk7CisgICAgIF9f cHl4X3RfMyA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy ODQKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NgorICAqICAgICAg ICAgICAgIGNsaW1zZyA9IDxtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqPmRhdGEKKyAgKiAgICAg ICAgICAgICBhcmdzID0gW10KKyAgKiAgICAgICAgICAgICBudW1fYXJncyA9IGNsaW1zZy5udW1f YXJncyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNTk1MSw3ICs1OTUxLDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2Rh dGEoc3RydWN0IF9fcHl4X29ial85dmkKKyAgICAgX19weXhfdF80ID0gX19weXhfdl9jbGltc2ct Pm51bV9hcmdzOworICAgICBfX3B5eF92X251bV9hcmdzID0gX19weXhfdF80OworIAorLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg1CisrICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyODcKKyAgKiAgICAgICAgICAgICBhcmdzID0gW10KKyAgKiAg ICAgICAgICAgICBudW1fYXJncyA9IGNsaW1zZy5udW1fYXJncworICAqICAgICAgICAgICAgIGZv ciBpIGluIHJhbmdlKG51bV9hcmdzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTU5NjMsMjYgKzU5NjMsMjYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl81RXZlbnRfX2RhdGEoc3RydWN0IF9fcHl4X29ial85dmkKKyAgICAgZm9yIChf X3B5eF90XzYgPSAwOyBfX3B5eF90XzYgPCBfX3B5eF90XzU7IF9fcHl4X3RfNis9MSkgeworICAg ICAgIF9fcHl4X3ZfaSA9IF9fcHl4X3RfNjsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6Mjg2CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjI4OAorICAqICAgICAgICAgICAgIG51bV9hcmdzID0gY2xpbXNnLm51bV9hcmdzCisgICog ICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtX2FyZ3MpOgorICAqICAgICAgICAgICAgICAg ICBhcmcgPSA8Y2hhcio+Y2xpbXNnLmFyZ3NbaV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICAgICAgICAgICAgICBhcmcgPSBfc3RyZGVjKGFyZykKKyAgKiAgICAgICAgICAg ICAgICAgYXJncy5hcHBlbmQoYXJnKQorICAqLworLSAgICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5 Qnl0ZXNfRnJvbVN0cmluZygoKGNoYXIgKikoX19weXhfdl9jbGltc2ctPmFyZ3NbX19weXhfdl9p XSkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjg2LCBfX3B5eF9M MV9lcnJvcikKKysgICAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoKChj aGFyICopKF9fcHl4X3ZfY2xpbXNnLT5hcmdzW19fcHl4X3ZfaV0pKSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI4OCwgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMyk7CisgICAgICAgX19QeXhfWERFQ1JFRl9TRVQoX19weXhfdl9h cmcsIF9fcHl4X3RfMyk7CisgICAgICAgX19weXhfdF8zID0gMDsKKyAKKy0gICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg3CisrICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjI4OQorICAqICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG51bV9h cmdzKToKKyAgKiAgICAgICAgICAgICAgICAgYXJnID0gPGNoYXIqPmNsaW1zZy5hcmdzW2ldCisg ICogICAgICAgICAgICAgICAgIGFyZyA9IF9zdHJkZWMoYXJnKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFyZykKKyAgKiAgICAg ICAgICAgICByZXR1cm4gYXJncworICAqLworLSAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgMjg3LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDI4OSwgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMik7CisgICAgICAgX19weXhfdF83ID0gTlVMTDsKKyAgICAgICBp ZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfMikpKSB7CitAQCAtNTk5NiwyMyArNTk5NiwyMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9fZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2 aQorICAgICAgIH0KKyAgICAgICBfX3B5eF90XzMgPSAoX19weXhfdF83KSA/IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNywgX19weXhfdl9hcmcpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfYXJnKTsKKyAgICAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICAgICAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjg3LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyODksIF9fcHl4X0wxX2Vycm9y KQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhf dl9hcmcsIF9fcHl4X3RfMyk7CisgICAgICAgX19weXhfdF8zID0gMDsKKyAKKy0gICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg4CisrICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjI5MAorICAqICAgICAgICAgICAgICAgICBhcmcgPSA8Y2hhcio+ Y2xpbXNnLmFyZ3NbaV0KKyAgKiAgICAgICAgICAgICAgICAgYXJnID0gX3N0cmRlYyhhcmcpCisg ICogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFyZykgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgICAgIHJldHVybiBhcmdzCisgICogICAgICAgICBlbGlmIHNl bGYuaWQgPT0gTVBWX0VWRU5UX0VORF9GSUxFOgorICAqLworLSAgICAgIF9fcHl4X3RfOCA9IF9f UHl4X1B5TGlzdF9BcHBlbmQoX19weXhfdl9hcmdzLCBfX3B5eF92X2FyZyk7IGlmICh1bmxpa2Vs eShfX3B5eF90XzggPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDAsIDI4OCwgX19weXhfTDFfZXJy b3IpCisrICAgICAgX19weXhfdF84ID0gX19QeXhfUHlMaXN0X0FwcGVuZChfX3B5eF92X2FyZ3Ms IF9fcHl4X3ZfYXJnKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfOCA9PSAoKGludCktMSkpKSBfX1BZ WF9FUlIoMCwgMjkwLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgfQorIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg5CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyOTEKKyAgKiAgICAgICAgICAgICAgICAgYXJnID0gX3N0cmRlYyhhcmcpCisg ICogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFyZykKKyAgKiAgICAgICAgICAgICByZXR1 cm4gYXJncyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNjAyNCw3ICs2MDI0LDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf X2RhdGEoc3RydWN0IF9fcHl4X29ial85dmkKKyAgICAgX19weXhfciA9IF9fcHl4X3ZfYXJnczsK KyAgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjI4MQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjgzCisg ICogICAgICAgICAjIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BB VENIOgorICAqICAgICAgICAgIyAgICAgcmV0dXJuIElucHV0RGlzcGF0Y2goKS5faW5pdCg8bXB2 X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0YSkKKyAgKiAgICAgICAgIGVsaWYgc2Vs Zi5pZCA9PSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0U6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC02MDM0LDcgKzYwMzQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9fZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAg ICBicmVhazsKKyAgICAgY2FzZSBNUFZfRVZFTlRfRU5EX0ZJTEU6CisgCistICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTEKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjI5MworICAqICAgICAgICAgICAgIHJldHVybiBhcmdzCisgICogICAgICAg ICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0VORF9GSUxFOgorICAqICAgICAgICAgICAgIHJl dHVybiBFbmRPZkZpbGVSZWFjaGVkKCkuX2luaXQoPG1wdl9ldmVudF9lbmRfZmlsZSo+ZGF0YSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTYwNDIsMTYgKzYwNDIsMTYgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGEo c3RydWN0IF9fcHl4X29ial85dmkKKyAgKiAKKyAgKi8KKyAgICAgX19QeXhfWERFQ1JFRihfX3B5 eF9yKTsKKy0gICAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmpl Y3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCkp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyOTEsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVj dCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSk7 IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI5MywgX19weXhfTDFfZXJy b3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX3B5eF90XzIgPSAoKHN0 cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFj aGVkICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVS ZWFjaGVkICopX19weXhfdF8zKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqKV9fcHl4X3RfMyksICgo c3RydWN0IG1wdl9ldmVudF9lbmRfZmlsZSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyOTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5 eF90XzIgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F bmRPZkZpbGVSZWFjaGVkICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9FbmRPZkZpbGVSZWFjaGVkICopX19weXhfdF8zKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqKV9f cHl4X3RfMyksICgoc3RydWN0IG1wdl9ldmVudF9lbmRfZmlsZSAqKV9fcHl4X3ZfZGF0YSkpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyOTMsIF9fcHl4X0wxX2Vycm9y KQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgICAgIF9fcHl4X3IgPSBfX3B5eF90XzI7CisgICAgIF9f cHl4X3RfMiA9IDA7CisgICAgIGdvdG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyOTAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjI5MgorICAqICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpCisgICogICAg ICAgICAgICAgcmV0dXJuIGFyZ3MKKyAgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZF TlRfRU5EX0ZJTEU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC02MDYyLDcgKzYw NjIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF9fZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAgICBkZWZhdWx0OiBicmVhazsKKyAg IH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTIKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTQKKyAgKiAgICAgICAgIGVsaWYgc2VsZi5p ZCA9PSBNUFZfRVZFTlRfRU5EX0ZJTEU6CisgICogICAgICAgICAgICAgcmV0dXJuIEVuZE9mRmls ZVJlYWNoZWQoKS5faW5pdCg8bXB2X2V2ZW50X2VuZF9maWxlKj5kYXRhKQorICAqICAgICAgICAg cmV0dXJuIE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTYwNzMsNyArNjA3 Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2 ZW50X19kYXRhKHN0cnVjdCBfX3B5eF9vYmpfOXZpCisgICBfX3B5eF9yID0gUHlfTm9uZTsgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyNzIKKyAgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKGVycl9jKQorICAqIAorICAq ICAgICBjZGVmIF9kYXRhKHNlbGYsIG1wdl9ldmVudCogZXZlbnQpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtNjA5Niw3ICs2MDk2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGEoc3RydWN0IF9fcHl4X29ial85 dmkKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Mjk1CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5NworICAq IAorICAqICAgICBAcHJvcGVydHkKKyAgKiAgICAgZGVmIG5hbWUoc2VsZik6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC02MTMwLDcgKzYxMzAsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfX19nZXRfXyhzdHJ1 Y3QgX19weQorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyOTgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDAKKyAg KiAgICAgICAgICIiIm1wdl9ldmVudF9uYW1lIG9mIHRoZSBldmVudCBpZCIiIgorICAqICAgICAg ICAgY2RlZiBjb25zdCBjaGFyKiBuYW1lX2MKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC02MTQ1LDcgKzYxNDUsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfX19nZXRf XyhzdHJ1Y3QgX19weQorICAgICAgICNlbmRpZgorICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTkKKysgICAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDEKKyAgKiAgICAgICAgIGNkZWYgY29uc3Qg Y2hhciogbmFtZV9jCisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIG5h bWVfYyA9IG1wdl9ldmVudF9uYW1lKHNlbGYuaWQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC02MTU1LDcgKzYxNTUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfX19nZXRfXyhzdHJ1Y3QgX19weQorICAgICAg ICAgX19weXhfdl9uYW1lX2MgPSBtcHZfZXZlbnRfbmFtZShfX3B5eF92X3NlbGYtPmlkKTsKKyAg ICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5OAor KyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDAKKyAgKiAgICAgICAg ICIiIm1wdl9ldmVudF9uYW1lIG9mIHRoZSBldmVudCBpZCIiIgorICAqICAgICAgICAgY2RlZiBj b25zdCBjaGFyKiBuYW1lX2MKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC02MTc0LDcgKzYxNzQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfX19nZXRfXyhzdHJ1Y3Qg X19weQorICAgICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMDAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDIKKyAgKiAg ICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgbmFtZV9jID0gbXB2X2V2ZW50X25h bWUoc2VsZi5pZCkKKyAgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKG5hbWVfYykgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTYxODIsOSArNjE4Miw5IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80bmFtZV9fX2dldF9fKHN0 cnVjdCBfX3B5CisgICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50KiBldmVudCwgY3R4 KToKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDMwMCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRN b2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDMwMiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0 cmluZyhfX3B5eF92X25hbWVfYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDAsIDMwMCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zy b21TdHJpbmcoX19weXhfdl9uYW1lX2MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlY X0VSUigwLCAzMDIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7 CisgICBfX3B5eF90XzQgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1 bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAgLTYxOTksMTQgKzYxOTks MTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2 ZW50XzRuYW1lX19fZ2V0X18oc3RydWN0IF9fcHkKKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF90 XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMyk7Cisg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgICBfX1B5eF9ERUNS RUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDMwMCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKKyAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworICAgZ290byBf X3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTUKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTcKKyAgKiAKKyAgKiAgICAgQHBy b3BlcnR5CisgICogICAgIGRlZiBuYW1lKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtNjIyOCw3ICs2MjI4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRuYW1lX19fZ2V0X18oc3RydWN0IF9fcHkKKyAgIHJl dHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzAyCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNAorICAqICAgICAgICAg cmV0dXJuIF9zdHJkZWMobmFtZV9jKQorICAqIAorICAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1w dl9ldmVudCogZXZlbnQsIGN0eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC02 MjU3LDIwICs2MjU3LDIwIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfNUV2ZW50X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfOXZpCisgICBpbnQgX19weXhf Y2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2luaXQiLCAwKTsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDMKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDUKKyAgKiAKKyAgKiAgICAgY2RlZiBfaW5pdChz ZWxmLCBtcHZfZXZlbnQqIGV2ZW50LCBjdHgpOgorICAqICAgICAgICAgY2RlZiB1aW50NjRfdCBj dHhpZCA9IDx1aW50NjRfdD5pZChjdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAg KiAgICAgICAgIHNlbGYuaWQgPSBldmVudC5ldmVudF9pZAorICAqICAgICAgICAgc2VsZi5kYXRh ID0gc2VsZi5fZGF0YShldmVudCkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoX19weXhfYnVpbHRpbl9pZCwgX19weXhfdl9jdHgpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf dF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF9idWlsdGluX2lkLCBfX3B5eF92 X2N0eCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwNSwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMiA9IF9f UHl4X1B5SW50X0FzX3VpbnQ2NF90KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8y ID09ICgodWludDY0X3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDMw MywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Bc191aW50NjRf dChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2NF90KS0xKSkg JiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAzMDUsIF9fcHl4X0wxX2Vycm9yKQor ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX3B5eF92X2N0 eGlkID0gKCh1aW50NjRfdClfX3B5eF90XzIpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjMwNAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMw NgorICAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudCogZXZlbnQsIGN0eCk6CisgICog ICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKGN0eCkKKyAgKiAgICAg ICAgIHNlbGYuaWQgPSBldmVudC5ldmVudF9pZCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtNjI4MCwxNCArNjI4MCwxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAgX19w eXhfdF8zID0gX19weXhfdl9ldmVudC0+ZXZlbnRfaWQ7CisgICBfX3B5eF92X3NlbGYtPmlkID0g X19weXhfdF8zOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNQor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNworICAqICAgICAgICAgY2Rl ZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChjdHgpCisgICogICAgICAgICBzZWxmLmlk ID0gZXZlbnQuZXZlbnRfaWQKKyAgKiAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuX2RhdGEoZXZl bnQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHVzZXJkYXRhID0g X3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5X3VzZXJkYXRhLCBOb25lKQor ICAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VW RU5UX1BST1BFUlRZX0NIQU5HRToKKyAgKi8KKy0gIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4 X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxmLT5f X3B5eF92dGFiKS0+X2RhdGEoX19weXhfdl9zZWxmLCBfX3B5eF92X2V2ZW50KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2RhdGEoX19weXhfdl9zZWxmLCBf X3B5eF92X2V2ZW50KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA3 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhf R0lWRVJFRihfX3B5eF90XzEpOworICAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7 CitAQCAtNjI5NSwxOSArNjI5NSwxOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAgX19w eXhfdl9zZWxmLT5kYXRhID0gX19weXhfdF8xOworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDYKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjozMDgKKyAgKiAgICAgICAgIHNlbGYuaWQgPSBldmVudC5ldmVudF9p ZAorICAqICAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5fZGF0YShldmVudCkKKyAgKiAgICAgICAg IHVzZXJkYXRhID0gX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5X3VzZXJk YXRhLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBpZiB1 c2VyZGF0YSBpcyBub3QgTm9uZSBhbmQgc2VsZi5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hB TkdFOgorICAqICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCisgICovCistICBfX3B5eF90 XzQgPSBfX1B5eF9HZXRJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19yZXBs eV91c2VyZGF0YXMsIF9fcHl4X3ZfY3R4aWQsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9t X3VpbnQ2NF90LCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIo MCwgMzA2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNCA9IF9fUHl4X0dldEl0ZW1JbnQo X19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcywgX19weXhfdl9j dHhpZCwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9y KQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBfX3B5eF90XzUgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNCwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSgh X19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90 XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNCwgX19weXhfbl9zX2dldCk7 IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMwOCwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworLSAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV91aW50 NjRfdChfX3B5eF92X2V2ZW50LT5yZXBseV91c2VyZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhf dF80KSkgX19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBf X1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfZXZlbnQtPnJlcGx5X3VzZXJkYXRhKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzA4LCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgX19weXhfdF82ID0gTlVMTDsKKyAg IF9fcHl4X3RfNyA9IDA7CitAQCAtNjMyNCw3ICs2MzI0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQoc3RydWN0IF9fcHl4X29i al85dmkKKyAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKyAgIGlmIChQeUZ1bmN0aW9uX0NoZWNr KF9fcHl4X3RfNSkpIHsKKyAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF82 LCBfX3B5eF90XzQsIFB5X05vbmV9OworLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9u X0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsxLV9fcHl4X3RfNywgMitfX3B5eF90Xzcp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDYsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3Rf NSwgX19weXhfdGVtcCsxLV9fcHl4X3RfNywgMitfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKK0BA IC02MzMzLDE0ICs2MzMzLDE0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfOXZpCisgICAjaWYgQ1lU SE9OX0ZBU1RfUFlDQ0FMTAorICAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5 eF90XzUpKSB7CisgICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4X3RfNiwgX19w eXhfdF80LCBQeV9Ob25lfTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFz dENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF83LCAyK19fcHl4X3RfNyk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3Ip CisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwg X19weXhfdGVtcCsxLV9fcHl4X3RfNywgMitfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgIH0g ZWxzZQorICAgI2VuZGlmCisgICB7CistICAgIF9fcHl4X3RfOCA9IFB5VHVwbGVfTmV3KDIrX19w eXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBfX1BZWF9FUlIoMCwgMzA2LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19weXhfdF84ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzcpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfOCkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9y KQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF84KTsKKyAgICAgaWYgKF9fcHl4X3RfNikgewor ICAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF82KTsgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzgsIDAsIF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IE5VTEw7CitAQCAtNjM1MSw3ICs2MzUxLDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf X2luaXQoc3RydWN0IF9fcHl4X29ial85dmkKKyAgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsK KyAgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzgsIDErX19weXhfdF83LCBQeV9Ob25lKTsK KyAgICAgX19weXhfdF80ID0gMDsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2Fs bChfX3B5eF90XzUsIF9fcHl4X3RfOCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5T2JqZWN0X0NhbGwoX19weXhfdF81LCBfX3B5eF90XzgsIE5VTEwpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4 X3RfOCA9IDA7CisgICB9CitAQCAtNjM1OSw3ICs2MzU5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQoc3RydWN0IF9fcHl4X29i al85dmkKKyAgIF9fcHl4X3ZfdXNlcmRhdGEgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNworKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwOQorICAqICAgICAgICAgc2VsZi5kYXRhID0g c2VsZi5fZGF0YShldmVudCkKKyAgKiAgICAgICAgIHVzZXJkYXRhID0gX3JlcGx5X3VzZXJkYXRh c1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5X3VzZXJkYXRhLCBOb25lKQorICAqICAgICAgICAgaWYg dXNlcmRhdGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BFUlRZX0NI QU5HRTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTYzNzgsMTQgKzYzNzgsMTQg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf X2luaXQoc3RydWN0IF9fcHl4X29ial85dmkKKyAgIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7 CisgICBpZiAoX19weXhfdF85KSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozMDgKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMAor ICAqICAgICAgICAgdXNlcmRhdGEgPSBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXS5nZXQoZXZlbnQu cmVwbHlfdXNlcmRhdGEsIE5vbmUpCisgICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9u ZSBhbmQgc2VsZi5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgorICAqICAgICAgICAg ICAgIHVzZXJkYXRhLnJlbW92ZSgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgICAgICAgICBpZiBub3QgdXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50ZXIg PD0gMDoKKyAgKiAgICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdW2V2 ZW50LnJlcGx5X3VzZXJkYXRhXQorICAqLworLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19yZW1vdmUpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEs IF9fcHl4X25fc19yZW1vdmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigw LCAzMTAsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKyAg ICAgX19weXhfdF84ID0gTlVMTDsKKyAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBs aWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkpIHsKK0BAIC02Mzk5LDIxICs2Mzk5LDIx IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfOXZpCisgICAgIH0KKyAgICAgX19weXhfdF8xID0gKF9f cHl4X3RfOCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwgX19weXhfdF84 KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzUpOworICAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDMwOCwgX19weXhfTDFfZXJyb3IpCisrICAgIGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMxMCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19w eXhfdF81ID0gMDsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDkKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMQorICAqICAgICAgICAgaWYgdXNlcmRh dGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRToK KyAgKiAgICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUoKQorICAqICAgICAgICAgICAgIGlmIG5v dCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRh dGFzW2N0eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0KKyAgKiAgICAgICAgIGlmIHVzZXJkYXRh IGlzIG5vdCBOb25lOgorICAqLworLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19vYnNlcnZlZCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9f cHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YSwgX19w eXhfbl9zX29ic2VydmVkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MzExLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAg IF9fcHl4X3RfMTEgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlr ZWx5KF9fcHl4X3RfMTEgPCAwKSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCisr ICAgIF9fcHl4X3RfMTEgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfMTEgPCAwKSkgX19QWVhfRVJSKDAsIDMxMSwgX19weXhfTDFfZXJyb3Ip CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworICAgICBfX3B5 eF90XzEwID0gKCghX19weXhfdF8xMSkgIT0gMCk7CisgICAgIGlmIChfX3B5eF90XzEwKSB7CitA QCAtNjQyMSwyOSArNjQyMSwyOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAgICAgIF9f cHl4X3RfOSA9IF9fcHl4X3RfMTA7CisgICAgICAgZ290byBfX3B5eF9MN19ib29sX2Jpbm9wX2Rv bmU7CisgICAgIH0KKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92X3VzZXJkYXRhLCBfX3B5eF9uX3NfY291bnRlcik7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9 IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YSwgX19weXhfbl9zX2Nv dW50ZXIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMTEsIF9fcHl4 X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19weXhfdF81 ID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdF8xLCBfX3B5eF9pbnRfMCwgUHlfTEUpOyBf X1B5eF9YR09UUkVGKF9fcHl4X3RfNSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhf RVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNSA9IFB5T2JqZWN0X1Jp Y2hDb21wYXJlKF9fcHl4X3RfMSwgX19weXhfaW50XzAsIFB5X0xFKTsgX19QeXhfWEdPVFJFRihf X3B5eF90XzUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMTEsIF9f cHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKy0gICAgX19weXhfdF8xMCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzUpOyBp ZiAodW5saWtlbHkoX19weXhfdF8xMCA8IDApKSBfX1BZWF9FUlIoMCwgMzA5LCBfX3B5eF9MMV9l cnJvcikKKysgICAgX19weXhfdF8xMCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzUp OyBpZiAodW5saWtlbHkoX19weXhfdF8xMCA8IDApKSBfX1BZWF9FUlIoMCwgMzExLCBfX3B5eF9M MV9lcnJvcikKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Cisg ICAgIF9fcHl4X3RfOSA9IF9fcHl4X3RfMTA7CisgICAgIF9fcHl4X0w3X2Jvb2xfYmlub3BfZG9u ZTo7CisgICAgIGlmIChfX3B5eF90XzkpIHsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzEwCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMxMgorICAqICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCisgICogICAgICAgICAg ICAgaWYgbm90IHVzZXJkYXRhLm9ic2VydmVkIGFuZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6Cisg ICogICAgICAgICAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBs eV91c2VyZGF0YV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgaWYg dXNlcmRhdGEgaXMgbm90IE5vbmU6CisgICogICAgICAgICAgICAgdXNlcmRhdGEgPSB1c2VyZGF0 YS5kYXRhCisgICovCistICAgICAgX19weXhfdF81ID0gX19QeXhfR2V0SXRlbUludChfX3B5eF92 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1 aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSk7IGlmICh1bmxp a2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMxMCwgX19weXhfTDFfZXJyb3IpCisrICAg ICAgX19weXhfdF81ID0gX19QeXhfR2V0SXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50NjRfdCwgMCwgX19QeXhf UHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkg X19QWVhfRVJSKDAsIDMxMiwgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNSk7CistICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X0RlbEl0ZW1JbnQoX19weXhfdF81 LCBfX3B5eF92X2V2ZW50LT5yZXBseV91c2VyZGF0YSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50 X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCAzMTAsIF9fcHl4X0wx X2Vycm9yKQorKyAgICAgIGlmICh1bmxpa2VseShfX1B5eF9EZWxJdGVtSW50KF9fcHl4X3RfNSwg X19weXhfdl9ldmVudC0+cmVwbHlfdXNlcmRhdGEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9G cm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgMzEyLCBfX3B5eF9MMV9l cnJvcikKKyAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKyAK Ky0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzA5CisrICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMQorICAqICAgICAgICAgaWYgdXNlcmRh dGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRToK KyAgKiAgICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUoKQorICAqICAgICAgICAgICAgIGlmIG5v dCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNjQ1Miw3ICs2NDUyLDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQoc3RydWN0IF9fcHl4 X29ial85dmkKKyAgKi8KKyAgICAgfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzA3CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDkK KyAgKiAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuX2RhdGEoZXZlbnQpCisgICogICAgICAgICB1 c2VyZGF0YSA9IF9yZXBseV91c2VyZGF0YXNbY3R4aWRdLmdldChldmVudC5yZXBseV91c2VyZGF0 YSwgTm9uZSkKKyAgKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lIGFuZCBzZWxmLmlk ICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC02NDYxLDcgKzY0NjEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAqLwor ICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMQorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMworICAqICAgICAgICAgICAgIGlmIG5v dCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOgorICAqICAgICAg ICAgICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF1bZXZlbnQucmVwbHlfdXNlcmRh dGFdCisgICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTY0NzIsMTkgKzY0NzIsMTkgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQoc3RydWN0IF9fcHl4X29i al85dmkKKyAgIF9fcHl4X3RfMTAgPSAoX19weXhfdF85ICE9IDApOworICAgaWYgKF9fcHl4X3Rf MTApIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMgorKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE0CisgICogICAgICAgICAgICAg ICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0KKyAg KiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lOgorICAqICAgICAgICAgICAgIHVzZXJk YXRhID0gdXNlcmRhdGEuZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAg ICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gdXNlcmRhdGEKKyAgKiAgICAgICAgIHNlbGYuZXJy b3IgPSBldmVudC5lcnJvcgorICAqLworLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9H ZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19kYXRhKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMzEyLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19w eXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhLCBfX3B5 eF9uX3NfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMxNCwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworICAgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X3RfNSk7CisgICAgIF9fcHl4X3Rf NSA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTEKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMworICAqICAgICAgICAgICAg IGlmIG5vdCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOgorICAq ICAgICAgICAgICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF1bZXZlbnQucmVwbHlf dXNlcmRhdGFdCisgICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTY0OTMsNyArNjQ5Myw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19pbml0KHN0cnVjdCBfX3B5 eF9vYmpfOXZpCisgICovCisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MzEzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE1CisgICog ICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZToKKyAgKiAgICAgICAgICAgICB1c2VyZGF0 YSA9IHVzZXJkYXRhLmRhdGEKKyAgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSB1c2Vy ZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNjUwNiw3ICs2NTA2LDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2lu aXQoc3RydWN0IF9fcHl4X29ial85dmkKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnJl cGx5X3VzZXJkYXRhKTsKKyAgIF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBfX3B5eF92 X3VzZXJkYXRhOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxNAor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxNgorICAqICAgICAgICAgICAg IHVzZXJkYXRhID0gdXNlcmRhdGEuZGF0YQorICAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YSA9IHVzZXJkYXRhCisgICogICAgICAgICBzZWxmLmVycm9yID0gZXZlbnQuZXJyb3IgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTY1MTYsNyArNjUxNiw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19pbml0KHN0cnVjdCBf X3B5eF9vYmpfOXZpCisgICBfX3B5eF90XzcgPSBfX3B5eF92X2V2ZW50LT5lcnJvcjsKKyAgIF9f cHl4X3Zfc2VsZi0+ZXJyb3IgPSBfX3B5eF90Xzc7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzE1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzE3CisgICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gdXNlcmRhdGEKKyAgKiAgICAg ICAgIHNlbGYuZXJyb3IgPSBldmVudC5lcnJvcgorICAqICAgICAgICAgcmV0dXJuIHNlbGYgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTY1MjgsNyArNjUyOCw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19pbml0KHN0cnVj dCBfX3B5eF9vYmpfOXZpCisgICBfX3B5eF9yID0gKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZik7 CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMwMgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNAorICAqICAg ICAgICAgcmV0dXJuIF9zdHJkZWMobmFtZV9jKQorICAqIAorICAqICAgICBjZGVmIF9pbml0KHNl bGYsIG1wdl9ldmVudCogZXZlbnQsIGN0eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK K0BAIC02NTUyLDcgKzY1NTIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAgcmV0dXJu IF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTgK KysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjYwCisgICogY2RlZiBjbGFzcyBF dmVudChvYmplY3QpOgorICAqICAgICAiIiJXcmFwczogbXB2X2V2ZW50IiIiCisgICogICAgIGNk ZWYgcHVibGljIG1wdl9ldmVudF9pZCBpZCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtNjU4Miw3ICs2NTgyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50XzJpZF9fX2dldF9fKHN0cnVjdCBfX3B5eF8KKyAgIGludCBfX3B5 eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fIiwg MCk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8xID0gX19QeXhfUHlJ bnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoX19weXhfdl9zZWxmLT5pZCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI1OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChfX3B5eF92X3NlbGYt PmlkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjYwLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19weXhfciA9IF9fcHl4 X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CitAQCAtNjYyMCw3ICs2NjIwLDcgQEAgc3RhdGljIGlu dCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8yX19zZXRfXyhzdHJ1 Y3QgX19weXhfb2JqXzkKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAg IGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X3NldF9fIiwgMCk7CistICBfX3B5eF90XzEgPSAoKGVudW0gbXB2X2V2ZW50X2lkKV9fUHl4X1B5 SW50X0FzX2VudW1fX21wdl9ldmVudF9pZChfX3B5eF92X3ZhbHVlKSk7IGlmICh1bmxpa2VseShQ eUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDI1OCwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzEgPSAoKGVudW0gbXB2X2V2ZW50X2lkKV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9l dmVudF9pZChfX3B5eF92X3ZhbHVlKSk7IGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDAsIDI2MCwgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF92X3NlbGYtPmlkID0g X19weXhfdF8xOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCitAQCAtNjYzNCw3ICs2 NjM0LDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 XzJpZF8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzkKKyAgIHJldHVybiBfX3B5eF9yOworIH0K KyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjU5CisrLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjI2MQorICAqICAgICAiIiJXcmFwczogbXB2X2V2ZW50IiIi CisgICogICAgIGNkZWYgcHVibGljIG1wdl9ldmVudF9pZCBpZAorICAqICAgICBjZGVmIHB1Ymxp YyBpbnQgZXJyb3IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTY2NjQsNyArNjY2 NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF81ZXJyb3JfX19nZXRfXyhzdHJ1Y3QgX19wCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7 CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworICAgX19QeXhf WERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9f cHl4X3Zfc2VsZi0+ZXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCAyNTksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9p bnQoX19weXhfdl9zZWxmLT5lcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDI2MSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK KyAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworQEAgLTY3MDIsNyAr NjcwMiw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF81ZXJyb3JfMl9fc2V0X18oc3RydWN0IF9fcHl4X29iCisgICBjb25zdCBjaGFyICpfX3B5eF9m aWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOworLSAgX19weXhfdF8xID0gX19QeXhfUHlJ bnRfQXNfaW50KF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMSA9PSAoaW50 KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDI1OSwgX19weXhfTDFfZXJy b3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdl92YWx1ZSk7IGlm ICh1bmxpa2VseSgoX19weXhfdF8xID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBf X1BZWF9FUlIoMCwgMjYxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4X3Zfc2VsZi0+ZXJyb3Ig PSBfX3B5eF90XzE7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KK0BAIC02NzE2LDcg KzY3MTYsNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZl bnRfNWVycm9yXzJfX3NldF9fKHN0cnVjdCBfX3B5eF9vYgorICAgcmV0dXJuIF9fcHl4X3I7Cisg fQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNjAKKysvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjYyCisgICogICAgIGNkZWYgcHVibGljIG1wdl9ldmVu dF9pZCBpZAorICAqICAgICBjZGVmIHB1YmxpYyBpbnQgZXJyb3IKKyAgKiAgICAgY2RlZiBwdWJs aWMgb2JqZWN0IGRhdGEsIHJlcGx5X3VzZXJkYXRhICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC03MjE1LDcgKzcyMTUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMl9fc2V0c3RhdGVfY3l0aG9uX18oc3RydQorICAgcmV0 dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz MTgKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzIwCisgICogCisgICogCisg ICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNzIz Nyw3ICs3MjM3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfNV9lcnJvcnMoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFAKKyAgIHJldHVybiBfX3B5eF9y OworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE5CisrLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMQorICAqIAorICAqIGRlZiBfZXJyb3JzKGZu KToKKyAgKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtNzI4NSw0MiArNzI4NSw0MiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X2Vycm9yc193cmFwcGVkKFB5T2JqZWN0ICpfX3B5eAor ICAgX19weXhfb3V0ZXJfc2NvcGUgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICopIF9fUHl4X0N5RnVuY3Rpb25fR2V0 Q2xvc3VyZShfX3B5eF9zZWxmKTsKKyAgIF9fcHl4X2N1cl9zY29wZSA9IF9fcHl4X291dGVyX3Nj b3BlOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMAorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMgorICAqIGRlZiBfZXJyb3JzKGZuKToK KyAgKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgorICAqICAgICAgICAgdiA9IGZuKCprLCAq Kmt3KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBpZiB2IDwgMDoK KyAgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcih2KQorICAqLworLSAgaWYgKHVubGlrZWx5 KCFfX3B5eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4pKSB7IF9fUHl4X1JhaXNlQ2xvc3VyZU5hbWVF cnJvcigiZm4iKTsgX19QWVhfRVJSKDAsIDMyMCwgX19weXhfTDFfZXJyb3IpIH0KKy0gIF9fcHl4 X3RfMSA9IFB5RGljdF9Db3B5KF9fcHl4X3Zfa3cpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAzMjAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5 eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4pKSB7IF9fUHl4X1JhaXNlQ2xvc3VyZU5hbWVFcnJvcigi Zm4iKTsgX19QWVhfRVJSKDAsIDMyMiwgX19weXhfTDFfZXJyb3IpIH0KKysgIF9fcHl4X3RfMSA9 IFB5RGljdF9Db3B5KF9fcHl4X3Zfa3cpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAzMjIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2N1cl9zY29wZS0+X19w eXhfdl9mbiwgX19weXhfdl9rLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCAzMjAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhf UHlPYmplY3RfQ2FsbChfX3B5eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4sIF9fcHl4X3ZfaywgX19w eXhfdF8xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMzIyLCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX3B5eF92X3YgPSBfX3B5eF90XzI7Cisg ICBfX3B5eF90XzIgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjMyMQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMworICAqICAgICBk ZWYgd3JhcHBlZCgqaywgKiprdyk6CisgICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCisgICog ICAgICAgICBpZiB2IDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAg ICAgICAgIHJhaXNlIE1QVkVycm9yKHYpCisgICogICAgIHJldHVybiB3cmFwcGVkCisgICovCist ICBfX3B5eF90XzIgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X3YsIF9fcHl4X2ludF8w LCBQeV9MVCk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgMzIxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfMyA9IF9f UHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwg MCkpIF9fUFlYX0VSUigwLCAzMjEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gUHlP YmplY3RfUmljaENvbXBhcmUoX19weXhfdl92LCBfX3B5eF9pbnRfMCwgUHlfTFQpOyBfX1B5eF9Y R09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDMyMywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1Ry dWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwg MzIzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworICAgaWYgKHVubGlrZWx5KF9fcHl4X3RfMykpIHsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MzI0CisgICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCisgICogICAgICAg ICBpZiB2IDwgMDoKKyAgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcih2KSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIHJldHVybiB3cmFwcGVkCisgICogCisgICovCist ICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfTVBWRXJy b3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMjIsIF9fcHl4X0wx X2Vycm9yKQorKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhf bl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzI0 LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAgIF9f cHl4X3RfNCA9IE5VTEw7CisgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtl bHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8xKSkpIHsKK0BAIC03MzM0LDE0ICs3MzM0LDE0IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3Jz X3dyYXBwZWQoUHlPYmplY3QgKl9fcHl4CisgICAgIH0KKyAgICAgX19weXhfdF8yID0gKF9fcHl4 X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8xLCBfX3B5eF90XzQsIF9f cHl4X3ZfdikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMSwgX19weXhfdl92 KTsKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzMjIsIF9fcHl4X0wxX2Vycm9y KQorKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzMjQsIF9fcHl4 X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICAgIF9fUHl4X1JhaXNlKF9fcHl4X3Rf MiwgMCwgMCwgMCk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OworLSAgICBfX1BZWF9FUlIoMCwgMzIyLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QWVhfRVJS KDAsIDMyNCwgX19weXhfTDFfZXJyb3IpCisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozMjEKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMy MworICAqICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6CisgICogICAgICAgICB2ID0gZm4oKmss ICoqa3cpCisgICogICAgICAgICBpZiB2IDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTczNTAsNyArNzM1MCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdfZXJyb3JzX3dyYXBwZWQoUHlPYmplY3QgKl9fcHl4CisgICovCisg ICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE5CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzIxCisgICogCisgICogZGVmIF9lcnJvcnMo Zm4pOgorICAqICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC03Mzc0LDcgKzczNzQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X2Vycm9yc193cmFwcGVkKFB5T2JqZWN0ICpfX3B5eAor ICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMTgKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzIwCisgICogCisg ICogCisgICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtNzM5Niw3ICs3Mzk2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNF9lcnJvcnMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAorICAgaWYgKHVubGlr ZWx5KCFfX3B5eF9jdXJfc2NvcGUpKSB7CisgICAgIF9fcHl4X2N1cl9zY29wZSA9ICgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJy b3JzICopUHlfTm9uZSk7CisgICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gICAgX19QWVhf RVJSKDAsIDMxOCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUFlYX0VSUigwLCAzMjAsIF9fcHl4 X0wxX2Vycm9yKQorICAgfSBlbHNlIHsKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X2N1cl9zY29w ZSk7CisgICB9CitAQCAtNzQwNCwxOSArNzQwNCwxOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl80X2Vycm9ycyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0 CisgICBfX1B5eF9JTkNSRUYoX19weXhfY3VyX3Njb3BlLT5fX3B5eF92X2ZuKTsKKyAgIF9fUHl4 X0dJVkVSRUYoX19weXhfY3VyX3Njb3BlLT5fX3B5eF92X2ZuKTsKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozMjEKKyAgKiAKKyAgKiBkZWYgX2Vycm9ycyhmbik6CisgICogICAgIGRlZiB3cmFw cGVkKCprLCAqKmt3KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAg diA9IGZuKCprLCAqKmt3KQorICAqICAgICAgICAgaWYgdiA8IDA6CisgICovCistICBfX3B5eF90 XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN19lcnJvcnNfMXdyYXBwZWQsIDAsIF9fcHl4X25fc19lcnJvcnNfbG9jYWxzX3dyYXBwZWQs ICgoUHlPYmplY3QqKV9fcHl4X2N1cl9zY29wZSksIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19t cHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18yKSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMxOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN19lcnJvcnNfMXdyYXBwZWQsIDAsIF9fcHl4X25fc19lcnJvcnNfbG9jYWxzX3dyYXBw ZWQsICgoUHlPYmplY3QqKV9fcHl4X2N1cl9zY29wZSksIF9fcHl4X25fc192aWRjdXR0ZXJfbGli c19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18yKSk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMyMSwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fcHl4X3Zfd3JhcHBlZCA9IF9fcHl4X3RfMTsK KyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzIzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI1CisgICogICAg ICAgICBpZiB2IDwgMDoKKyAgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcih2KQorICAqICAg ICByZXR1cm4gd3JhcHBlZCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNzQyOCw3 ICs3NDI4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfNF9lcnJvcnMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAorICAgX19weXhfciA9IF9fcHl4X3Zf d3JhcHBlZDsKKyAgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MzE4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzIw CisgICogCisgICogCisgICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtNzQ0OSw3ICs3NDQ5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNF9lcnJvcnMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAorICAg cmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozMjkKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMxCisgICogICAgIGNv ZGUgPSBOb25lCisgICogCisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTc0OTIsMTEgKzc0OTIsMTEgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yXzFfX2luaXRfXyhQ eU9iamVjdCAqX18KKyAgICAgICAgIGNhc2UgIDE6CisgICAgICAgICBpZiAobGlrZWx5KCh2YWx1 ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZSkp ICE9IDApKSBrd19hcmdzLS07CisgICAgICAgICBlbHNlIHsKKy0gICAgICAgICAgX19QeXhfUmFp c2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAz MjksIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxp ZCgiX19pbml0X18iLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDMzMSwgX19weXhfTDNfZXJy b3IpCisgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4g MCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMo X19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9faW5p dF9fIikgPCAwKSkgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDNfZXJyb3IpCisrICAgICAgICBp ZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4 X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJfX2luaXRfXyIpIDwgMCkpIF9fUFlY X0VSUigwLCAzMzEsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIH0KKyAgICAgfSBlbHNlIGlmIChQ eVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9IDIpIHsKKyAgICAgICBnb3RvIF9fcHl4X0w1 X2FyZ3R1cGxlX2Vycm9yOworQEAgLTc1MDksNyArNzUwOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl8xX19pbml0X18oUHlPYmpl Y3QgKl9fCisgICB9CisgICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOwor ICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6OworLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFs aWQoIl9faW5pdF9fIiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9f UFlYX0VSUigwLCAzMjksIF9fcHl4X0wzX2Vycm9yKQorKyAgX19QeXhfUmFpc2VBcmd0dXBsZUlu dmFsaWQoIl9faW5pdF9fIiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7 IF9fUFlYX0VSUigwLCAzMzEsIF9fcHl4X0wzX2Vycm9yKQorICAgX19weXhfTDNfZXJyb3I6Owor ICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuTVBWRXJyb3IuX19pbml0 X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKyAgIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworQEAgLTc1NDAsMTYgKzc1NDAsMTYgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19f aW5pdF9fKENZVEhPTl9VTlVTRUQKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2lu aXRfXyIsIDApOworICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfZSk7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzMyCisgICogCisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKToKKyAgKiAg ICAgICAgIHNlbGYuY29kZSA9IGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAg ICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworICAqICAgICAgICAgY2RlZiBpbnQgZV9pCisg ICovCistICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4 X25fc19jb2RlLCBfX3B5eF92X2UpIDwgMCkgX19QWVhfRVJSKDAsIDMzMCwgX19weXhfTDFfZXJy b3IpCisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4 X25fc19jb2RlLCBfX3B5eF92X2UpIDwgMCkgX19QWVhfRVJSKDAsIDMzMiwgX19weXhfTDFfZXJy b3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMzCisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzM1CisgICogICAgICAgICBjZGVmIGNvbnN0 IGNoYXIqIGVycl9jCisgICogICAgICAgICBjZGVmIGludCBlX2kKKyAgKiAgICAgICAgIGlmIG5v dCBpc2luc3RhbmNlKGUsIGJhc2VzdHJpbmcpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtNzU2MCwxNyArNzU2MCwxNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl84TVBWRXJyb3JfX19pbml0X18oQ1lUSE9OX1VOVVNFRAorICAgX19w eXhfdF8yID0gKCghKF9fcHl4X3RfMSAhPSAwKSkgIT0gMCk7CisgICBpZiAoX19weXhfdF8yKSB7 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzQKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzNgorICAqICAgICAgICAgY2RlZiBpbnQg ZV9pCisgICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBiYXNlc3RyaW5nKToKKyAgKiAg ICAgICAgICAgICBlX2kgPSBlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAg ICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgICAgICBlcnJfYyA9IG1wdl9lcnJv cl9zdHJpbmcoZV9pKQorICAqLworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Bc19pbnQo X19weXhfdl9lKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGludCktMSkgJiYgUHlFcnJf T2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAzMzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5 eF90XzMgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdl9lKTsgaWYgKHVubGlrZWx5KChfX3B5 eF90XzMgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAzMzYs IF9fcHl4X0wxX2Vycm9yKQorICAgICBfX3B5eF92X2VfaSA9IF9fcHl4X3RfMzsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzNQorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzM3CisgICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShl LCBiYXNlc3RyaW5nKToKKyAgKiAgICAgICAgICAgICBlX2kgPSBlCisgICogICAgICAgICAgICAg d2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTc1ODUsNyArNzU4 NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhN UFZFcnJvcl9fX2luaXRfXyhDWVRIT05fVU5VU0VECisgICAgICAgICAjZW5kaWYKKyAgICAgICAg IC8qdHJ5OiovIHsKKyAKKy0gICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMzNgorKyAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzM4 CisgICogICAgICAgICAgICAgZV9pID0gZQorICAqICAgICAgICAgICAgIHdpdGggbm9naWw6Cisg ICogICAgICAgICAgICAgICAgIGVycl9jID0gbXB2X2Vycm9yX3N0cmluZyhlX2kpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC03NTk1LDcgKzc1OTUsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84TVBWRXJyb3JfX19pbml0X18oQ1lU SE9OX1VOVVNFRAorICAgICAgICAgICBfX3B5eF92X2Vycl9jID0gbXB2X2Vycm9yX3N0cmluZyhf X3B5eF92X2VfaSk7CisgICAgICAgICB9CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzM1CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MzM3CisgICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBiYXNlc3RyaW5nKToK KyAgKiAgICAgICAgICAgICBlX2kgPSBlCisgICogICAgICAgICAgICAgd2l0aCBub2dpbDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTc2MTQsMTYgKzc2MTQsMTYgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19faW5p dF9fKENZVEhPTl9VTlVTRUQKKyAgICAgICAgIH0KKyAgICAgfQorIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzM3CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozMzkKKyAgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAg ICAgICAgICBlcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmcoZV9pKQorICAqICAgICAgICAgICAgIGUg PSBfc3RyZGVjKGVycl9jKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAg ICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgZSkKKyAgKiAKKyAgKi8KKy0gICAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzUsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNSwgX19weXhfbl9zX3N0cmRlYyk7IGlm ICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMzOSwgX19weXhfTDFfZXJyb3Ip CisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworLSAgICBfX3B5eF90XzYgPSBfX1B5eF9Q eUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9lcnJfYyk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDMzNywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNiA9IF9f UHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X2Vycl9jKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgMzM5LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7CisgICAgIF9fcHl4X3RfNyA9IE5VTEw7CisgICAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkpIHsK K0BAIC03NjM4LDEzICs3NjM4LDEzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl9fX2luaXRfXyhDWVRIT05fVU5VU0VECisgICAgIF9f cHl4X3RfNCA9IChfX3B5eF90XzcpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf NSwgX19weXhfdF83LCBfX3B5eF90XzYpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzUsIF9fcHl4X3RfNik7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhf dF83ID0gMDsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cist ICAgIGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzNywgX19weXhfTDFf ZXJyb3IpCisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOSwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKyAgICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF92X2UsIF9fcHl4X3RfNCk7CisgICAgIF9fcHl4X3RfNCA9IDA7CisgCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzMKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjMzNQorICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJf YworICAqICAgICAgICAgY2RlZiBpbnQgZV9pCisgICogICAgICAgICBpZiBub3QgaXNpbnN0YW5j ZShlLCBiYXNlc3RyaW5nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTc2NTMs MTQgKzc2NTMsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfOE1QVkVycm9yX19faW5pdF9fKENZVEhPTl9VTlVTRUQKKyAgKi8KKyAgIH0KKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzgKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjozNDAKKyAgKiAgICAgICAgICAgICAgICAgZXJyX2MgPSBtcHZf ZXJyb3Jfc3RyaW5nKGVfaSkKKyAgKiAgICAgICAgICAgICBlID0gX3N0cmRlYyhlcnJfYykKKyAg KiAgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBlKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogCisgICogY2xhc3MgUHlNUFZFcnJvcihFeGNlcHRpb24pOgorICAqLwor LSAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopKCYo KFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0aW9uKVswXSkpLCBfX3B5eF9uX3NfaW5pdCk7IGlm ICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKiko JigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSksIF9fcHl4X25fc19pbml0KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMzQwLCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworICAgX19weXhfdF82ID0gTlVMTDsKKyAg IF9fcHl4X3RfMyA9IDA7CitAQCAtNzY3Nyw3ICs3Njc3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19faW5pdF9fKENZVEhPTl9V TlVTRUQKKyAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKyAgIGlmIChQeUZ1bmN0aW9uX0NoZWNr KF9fcHl4X3RfNSkpIHsKKyAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF82 LCBfX3B5eF92X3NlbGYsIF9fcHl4X3ZfZX07CistICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5RnVu Y3Rpb25fRmFzdENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAyK19fcHl4 X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhf TDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGwoX19w eXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAyK19fcHl4X3RfMyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9f UHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNCk7CisgICB9IGVsc2UKK0BAIC03Njg1LDEzICs3Njg1LDEzIEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl9fX2luaXRf XyhDWVRIT05fVU5VU0VECisgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAorICAgaWYgKF9fUHl4 X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzUpKSB7CisgICAgIFB5T2JqZWN0ICpfX3B5 eF90ZW1wWzNdID0ge19fcHl4X3RfNiwgX19weXhfdl9zZWxmLCBfX3B5eF92X2V9OworLSAgICBf X3B5eF90XzQgPSBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzUsIF9fcHl4X3Rl bXArMS1fX3B5eF90XzMsIDIrX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBf X1BZWF9FUlIoMCwgMzM4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF80ID0gX19QeXhf UHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAy K19fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDM0MCwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICB9IGVsc2UKKyAgICNlbmRp ZgorICAgeworLSAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfMyk7IGlmICh1 bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhfTDFfZXJyb3IpCisr ICAgIF9fcHl4X3RfNyA9IFB5VHVwbGVfTmV3KDIrX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMzQwLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNyk7CisgICAgIGlmIChfX3B5eF90XzYpIHsKKyAgICAgICBfX1B5eF9H SVZFUkVGKF9fcHl4X3RfNik7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCBfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSBOVUxMOworQEAgLTc3MDIsMTQgKzc3MDIsMTQgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19faW5pdF9f KENZVEhPTl9VTlVTRUQKKyAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfZSk7CisgICAgIF9fUHl4 X0dJVkVSRUYoX19weXhfdl9lKTsKKyAgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDEr X19weXhfdF8zLCBfX3B5eF92X2UpOworLSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9D YWxsKF9fcHl4X3RfNSwgX19weXhfdF83LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgMzM4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF80ID0gX19Q eXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzUsIF9fcHl4X3RfNywgTlVMTCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19w eXhfdF83ID0gMDsKKyAgIH0KKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUg PSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI5CisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MzMxCisgICogICAgIGNvZGUgPSBOb25lCisgICogCisgICogICAg IGRlZiBfX2luaXRfXyhzZWxmLCBlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTc3MzQsNyArNzczNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzhNUFZFcnJvcl9fX2luaXRfXyhDWVRIT05fVU5VU0VECisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NworKy8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDkKKyAgKiAKKyAgKiBjbGFzcyBfUmVw bHlVc2VyRGF0YShvYmplY3QpOgorICAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC03Nzc3LDExICs3Nzc3LDExIEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRh dGFfMV9faW5pdF9fKFB5T2JqCisgICAgICAgICBjYXNlICAxOgorICAgICAgICAgaWYgKGxpa2Vs eSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhf bl9zX2RhdGEpKSAhPSAwKSkga3dfYXJncy0tOworICAgICAgICAgZWxzZSB7CistICAgICAgICAg IF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDEsIDIsIDIsIDEpOyBfX1BZ WF9FUlIoMCwgMzQ3LCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgICAgX19QeXhfUmFpc2VBcmd0 dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAzNDksIF9f cHl4X0wzX2Vycm9yKQorICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBpZiAodW5saWtlbHko a3dfYXJncyA+IDApKSB7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25h bEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2Fy Z3MsICJfX2luaXRfXyIpIDwgMCkpIF9fUFlYX0VSUigwLCAzNDcsIF9fcHl4X0wzX2Vycm9yKQor KyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9r d2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAiX19pbml0X18iKSA8 IDApKSBfX1BZWF9FUlIoMCwgMzQ5LCBfX3B5eF9MM19lcnJvcikKKyAgICAgICB9CisgICAgIH0g ZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7CisgICAgICAgZ290 byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKK0BAIC03Nzk0LDcgKzc3OTQsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRh XzFfX2luaXRfXyhQeU9iagorICAgfQorICAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tp bmdfZG9uZTsKKyAgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJn dHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhf YXJncykpOyBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5eF9MM19lcnJvcikKKysgIF9fUHl4X1JhaXNl QXJndHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19w eXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMzQ5LCBfX3B5eF9MM19lcnJvcikKKyAgIF9fcHl4X0wz X2Vycm9yOjsKKyAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9SZXBs eVVzZXJEYXRhLl9faW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSk7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKK0BAIC03ODE1LDM0 ICs3ODE1LDM0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzE0X1JlcGx5VXNlckRhdGFfX19pbml0X18oQ1lUSE9OCisgICBpbnQgX19weXhfY2xpbmVu byA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18iLCAwKTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDgKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTAKKyAgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmpl Y3QpOgorICAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CisgICogICAgICAgICBzZWxm LmNvdW50ZXIgPSAwICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNl bGYuZGF0YSA9IGRhdGEKKyAgKiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBGYWxzZQorICAqLwor LSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3Nf Y291bnRlciwgX19weXhfaW50XzApIDwgMCkgX19QWVhfRVJSKDAsIDM0OCwgX19weXhfTDFfZXJy b3IpCisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4 X25fc19jb3VudGVyLCBfX3B5eF9pbnRfMCkgPCAwKSBfX1BZWF9FUlIoMCwgMzUwLCBfX3B5eF9M MV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDkKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTEKKyAgKiAgICAgZGVmIF9faW5p dF9fKHNlbGYsIGRhdGEpOgorICAqICAgICAgICAgc2VsZi5jb3VudGVyID0gMAorICAqICAgICAg ICAgc2VsZi5kYXRhID0gZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAg ICAgICBzZWxmLm9ic2VydmVkID0gRmFsc2UKKyAgKiAKKyAgKi8KKy0gIGlmIChfX1B5eF9QeU9i amVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2RhdGEsIF9fcHl4X3ZfZGF0 YSkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ5LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9Q eU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2RhdGEsIF9fcHl4X3Zf ZGF0YSkgPCAwKSBfX1BZWF9FUlIoMCwgMzUxLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozNTIKKyAgKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKyAgKiAgICAg ICAgIHNlbGYuZGF0YSA9IGRhdGEKKyAgKiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBGYWxzZSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogICAgIGRlZiBhZGQoc2VsZik6 CisgICovCistICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9f cHl4X25fc19vYnNlcnZlZCwgUHlfRmFsc2UpIDwgMCkgX19QWVhfRVJSKDAsIDM1MCwgX19weXhf TDFfZXJyb3IpCisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYs IF9fcHl4X25fc19vYnNlcnZlZCwgUHlfRmFsc2UpIDwgMCkgX19QWVhfRVJSKDAsIDM1MiwgX19w eXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ3 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ5CisgICogCisgICogY2xh c3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KToKKyAgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRh dGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNzg2Miw3ICs3ODYyLDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlV c2VyRGF0YV9fX2luaXRfXyhDWVRIT04KKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzUyCisrLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjM1NAorICAqICAgICAgICAgc2VsZi5vYnNlcnZlZCA9IEZhbHNlCisgICog CisgICogICAgIGRlZiBhZGQoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC03ODk0LDIyICs3ODk0LDIyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfMmFkZChDWVRIT05fVU5VCisgICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiYWRkIiwgMCk7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzUzCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzU1CisgICogCisgICogICAgIGRlZiBhZGQoc2Vs Zik6CisgICogICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisgICogCisgICogICAgIGRlZiByZW1vdmUoc2VsZik6CisgICovCistICBfX3B5eF90 XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2Nv dW50ZXIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzNTMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5 eF92X3NlbGYsIF9fcHl4X25fc19jb3VudGVyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMzU1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfQWRkT2JqQyhfX3B5eF90XzEsIF9fcHl4 X2ludF8xLCAxLCAxLCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MzUzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0FkZE9iakMo X19weXhfdF8xLCBfX3B5eF9pbnRfMSwgMSwgMSwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDM1NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAg aWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY291 bnRlciwgX19weXhfdF8yKSA8IDApIF9fUFlYX0VSUigwLCAzNTMsIF9fcHl4X0wxX2Vycm9yKQor KyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3Nf Y291bnRlciwgX19weXhfdF8yKSA8IDApIF9fUFlYX0VSUigwLCAzNTUsIF9fcHl4X0wxX2Vycm9y KQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzUyCisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzU0CisgICogICAgICAgICBzZWxmLm9ic2VydmVkID0gRmFsc2UKKyAg KiAKKyAgKiAgICAgZGVmIGFkZChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTc5MzEsNyArNzkzMSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfMmFkZChDWVRIT05fVU5VCisgICByZXR1cm4g X19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NQor Ky8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTcKKyAgKiAgICAgICAgIHNlbGYu Y291bnRlciArPSAxCisgICogCisgICogICAgIGRlZiByZW1vdmUoc2VsZik6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC03OTYzLDIyICs3OTYzLDIyIEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNHJlbW92 ZShDWVRIT05fCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgicmVtb3ZlIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzU2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzU4Cisg ICogCisgICogICAgIGRlZiByZW1vdmUoc2VsZik6CisgICogICAgICAgICBzZWxmLmNvdW50ZXIg LT0gMSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogCisgICovCistICBf X3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhf bl9zX2NvdW50ZXIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzNTYs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jb3VudGVyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMzU4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfU3VidHJhY3RPYmpDKF9fcHl4 X3RfMSwgX19weXhfaW50XzEsIDEsIDEsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9f UFlYX0VSUigwLCAzNTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlJ bnRfU3VidHJhY3RPYmpDKF9fcHl4X3RfMSwgX19weXhfaW50XzEsIDEsIDEsIDApOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzNTgsIF9fcHl4X0wxX2Vycm9yKQorICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKKy0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2Vs ZiwgX19weXhfbl9zX2NvdW50ZXIsIF9fcHl4X3RfMikgPCAwKSBfX1BZWF9FUlIoMCwgMzU2LCBf X3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zf c2VsZiwgX19weXhfbl9zX2NvdW50ZXIsIF9fcHl4X3RfMikgPCAwKSBfX1BZWF9FUlIoMCwgMzU4 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIg PSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NQorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NworICAqICAgICAgICAgc2VsZi5jb3Vu dGVyICs9IDEKKyAgKiAKKyAgKiAgICAgZGVmIHJlbW92ZShzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTgwMDAsNyArODAwMCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNHJlbW92ZShDWVRI T05fCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM3MAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNzIKKyAg KiAKKyAgKiAgICAgQHByb3BlcnR5CisgICogICAgIGRlZiBhcGlfdmVyc2lvbihzZWxmKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTgwMzMsNyArODAzMyw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExYXBpX3Zl cnNpb25fX19nZXRfXyhDCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjM3MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjM3MworICAqICAgICBAcHJvcGVydHkKKyAgKiAgICAgZGVmIGFwaV92ZXJzaW9uKHNlbGYpOgor ICAqICAgICAgICAgcmV0dXJuIF9DQVBJX01JTk9SLCBfQ0FQSV9NQUpPUiwgX0NBUElfVkVSU0lP TiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODA0MSwxMyArODA0MSwxMyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8x MWFwaV92ZXJzaW9uX19fZ2V0X18oQworICAqICAgICBAcHJvcGVydHkKKyAgKi8KKyAgIF9fUHl4 X1hERUNSRUYoX19weXhfcik7CistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf MSwgX19weXhfbl9zX0NBUElfTUlOT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAzNzEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzEsIF9fcHl4X25fc19DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMzczLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4 X25fc19DQVBJX01BSk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MzcxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhf dF8yLCBfX3B5eF9uX3NfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDM3MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZyhfX3B5eF92 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fQ0FQSV9WRVJTSU9OKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzMpKSBfX1BZWF9FUlIoMCwgMzcxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9 IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZyhfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fQ0FQSV9WRVJTSU9OKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIo MCwgMzczLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAg X19weXhfdF80ID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDAsIDM3MSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBQeVR1cGxlX05l dygzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzczLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgX19QeXhfR0lWRVJFRihf X3B5eF90XzEpOworICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQsIDAsIF9fcHl4X3RfMSk7 CitAQCAtODA2Miw3ICs4MDYyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTFhcGlfdmVyc2lvbl9fX2dldF9fKEMKKyAgIF9fcHl4 X3RfNCA9IDA7CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjM3MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3 MgorICAqIAorICAqICAgICBAcHJvcGVydHkKKyAgKiAgICAgZGVmIGFwaV92ZXJzaW9uKHNlbGYp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODA4NCw3ICs4MDg0LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTFh cGlfdmVyc2lvbl9fX2dldF9fKEMKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzc0CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM3NgorICAqIAorICAqICAgICBAcHJvcGVydHkKKyAgKiAgICAgZGVmIG5hbWUo c2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04MTE4LDcgKzgxMTgsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF80bmFtZV9fX2dldF9fKHN0cnVjdCBfXworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozODIKKyAgKiAgICAgICAgICIiIgorICAqICAgICAgICAgY2RlZiBjb25zdCBj aGFyKiBuYW1lCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC04MTI5LDEyICs4MTI5LDEyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRuYW1lX19fZ2V0X18oc3RydWN0 IF9fCisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKyAgICAgaWYgKHVubGlr ZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworICAgICAgIFB5RXJyX1NldE5vbmUo UHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCAzODAsIF9fcHl4X0wx X2Vycm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCAzODIsIF9fcHl4X0wxX2Vycm9yKQorICAgICB9 CisgICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozODEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODMKKyAgKiAgICAg ICAgIGNkZWYgY29uc3QgY2hhciogbmFtZQorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAor ICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTgxNDksNyArODE0OSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzRuYW1lX19fZ2V0X18oc3RydWN0IF9fCisgICAgICAgI2VuZGlm CisgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM4MgorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjM4NAorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgd2l0aCBub2dp bDoKKyAgKiAgICAgICAgICAgICBuYW1lID0gbXB2X2NsaWVudF9uYW1lKHNlbGYuX2N0eCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTgxNTksNyArODE1OSw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRuYW1lX19f Z2V0X18oc3RydWN0IF9fCisgICAgICAgICBfX3B5eF92X25hbWUgPSBtcHZfY2xpZW50X25hbWUo X19weXhfdl9zZWxmLT5fY3R4KTsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjM4MQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozODMKKyAgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZQorICAqICAgICAg ICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTgxNzgsNyArODE3OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRuYW1lX19fZ2V0X18oc3Ry dWN0IF9fCisgICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjM4MworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM4NQorICAq ICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICBuYW1lID0gbXB2X2NsaWVudF9u YW1lKHNlbGYuX2N0eCkKKyAgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKG5hbWUpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04MTg2LDkgKzgxODYsOSBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bmFtZV9fX2dldF9f KHN0cnVjdCBfXworICAqICAgICBAcHJvcGVydHkKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19w eXhfcik7CistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9z X3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDM4MywgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19w eXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDM4 NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4 X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X25hbWUpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAzODMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbmFtZSk7IGlmICh1bmxp a2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDM4NSwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgIF9fcHl4X3RfNCA9IE5VTEw7CisgICBpZiAoQ1lU SE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikp KSB7CitAQCAtODIwMywxNCArODIwMywxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bmFtZV9fX2dldF9fKHN0cnVjdCBfXworICAg X19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhf dF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9f cHl4X3RfMiwgX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhf dF80ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzgzLCBfX3B5eF9MMV9lcnJv cikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDM4NSwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19weXhfciA9IF9fcHl4X3RfMTsKKyAgIF9f cHl4X3RfMSA9IDA7CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjM3NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjM3NgorICAqIAorICAqICAgICBAcHJvcGVydHkKKyAgKiAgICAgZGVmIG5hbWUoc2VsZik6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04MjMyLDcgKzgyMzIsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bmFtZV9f X2dldF9fKHN0cnVjdCBfXworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODYKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6Mzg4CisgICogCisgICogICAgIEBwcm9wZXJ0eQorICAqICAgICBkZWYgdGltZShzZWxm KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTgyNjMsNyArODI2Myw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0 aW1lX19fZ2V0X18oc3RydWN0IF9fCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjM5NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjM5NgorICAqICAgICAgICAgIiIiCisgICogICAgICAgICBjZGVmIGludDY0X3QgdGlt ZQorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtODI3NCwxMiArODI3NCwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80dGltZV9fX2dldF9fKHN0cnVjdCBfXworICAg aWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CisgICAgIGlmICh1bmxpa2VseSghKF9f cHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKyAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fz c2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIoMCwgMzk0LCBfX3B5eF9MMV9lcnJvcikK KysgICAgICBfX1BZWF9FUlIoMCwgMzk2LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgfQorICAgfQor ICAgI2VuZGlmCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk1Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk3CisgICogICAgICAgICBjZGVm IGludDY0X3QgdGltZQorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAg d2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTgyOTQsNyArODI5 NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzR0aW1lX19fZ2V0X18oc3RydWN0IF9fCisgICAgICAgI2VuZGlmCisgICAgICAgLyp0 cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM5 NgorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM5OAorICAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAg ICAgICAgICB0aW1lID0gbXB2X2dldF90aW1lX3VzKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTgzMDQsNyArODMwNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1lX19fZ2V0X18oc3RydWN0 IF9fCisgICAgICAgICBfX3B5eF92X3RpbWUgPSBtcHZfZ2V0X3RpbWVfdXMoX19weXhfdl9zZWxm LT5fY3R4KTsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjM5NQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozOTcK KyAgKiAgICAgICAgIGNkZWYgaW50NjRfdCB0aW1lCisgICogICAgICAgICBhc3NlcnQgc2VsZi5f Y3R4CisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtODMyMyw3ICs4MzIzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNHRpbWVfX19nZXRfXyhzdHJ1Y3QgX18KKyAgICAgICB9 CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk3CisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk5CisgICogICAgICAgICB3aXRoIG5v Z2lsOgorICAqICAgICAgICAgICAgIHRpbWUgPSBtcHZfZ2V0X3RpbWVfdXMoc2VsZi5fY3R4KQor ICAqICAgICAgICAgcmV0dXJuIHRpbWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTgzMzEsMTMgKzgzMzEsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfNHRpbWVfX19nZXRfXyhzdHJ1Y3QgX18KKyAgKiAgICAgIyBk ZWYgc3VzcGVuZChzZWxmKToKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBf X3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludDY0X3QoX19weXhfdl90aW1lKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzk3LCBfX3B5eF9MMV9lcnJvcikKKysg IF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRfdChfX3B5eF92X3RpbWUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzOTksIF9fcHl4X0wxX2Vycm9yKQor ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX3B5eF9yID0gX19weXhfdF8xOworICAg X19weXhfdF8xID0gMDsKKyAgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Mzg2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6Mzg4CisgICogCisgICogICAgIEBwcm9wZXJ0eQorICAqICAgICBkZWYgdGltZShzZWxmKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTgzNTYsNyArODM1Niw3IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1l X19fZ2V0X18oc3RydWN0IF9fCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQxMgorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0MTQKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAgICAgZGVmIHJlcXVlc3Rf ZXZlbnQoc2VsZiwgZXZlbnQsIGVuYWJsZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK K0BAIC04Mzk5LDExICs4Mzk5LDExIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzFyZXF1ZXN0X2V2ZW50KFB5T2JqZWN0CisgICAgICAg ICBjYXNlICAxOgorICAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0 X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2VuYWJsZSkpICE9IDApKSBrd19hcmdz LS07CisgICAgICAgICBlbHNlIHsKKy0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFs aWQoInJlcXVlc3RfZXZlbnQiLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDQxMiwgX19weXhf TDNfZXJyb3IpCisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJyZXF1ZXN0 X2V2ZW50IiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCA0MTQsIF9fcHl4X0wzX2Vycm9yKQor ICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7 CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4 X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJyZXF1ZXN0X2V2 ZW50IikgPCAwKSkgX19QWVhfRVJSKDAsIDQxMiwgX19weXhfTDNfZXJyb3IpCisrICAgICAgICBp ZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4 X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJyZXF1ZXN0X2V2ZW50IikgPCAwKSkg X19QWVhfRVJSKDAsIDQxNCwgX19weXhfTDNfZXJyb3IpCisgICAgICAgfQorICAgICB9IGVsc2Ug aWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0gMikgeworICAgICAgIGdvdG8gX19w eXhfTDVfYXJndHVwbGVfZXJyb3I7CitAQCAtODQxNiw3ICs4NDE2LDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMXJlcXVlc3RfZXZl bnQoUHlPYmplY3QKKyAgIH0KKyAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2Rv bmU7CisgICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxl SW52YWxpZCgicmVxdWVzdF9ldmVudCIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhf YXJncykpOyBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MM19lcnJvcikKKysgIF9fUHl4X1JhaXNl QXJndHVwbGVJbnZhbGlkKCJyZXF1ZXN0X2V2ZW50IiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0la RShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA0MTQsIF9fcHl4X0wzX2Vycm9yKQorICAgX19w eXhfTDNfZXJyb3I6OworICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYu Q29udGV4dC5yZXF1ZXN0X2V2ZW50IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5 eF9maWxlbmFtZSk7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKK0BAIC04NDQ0 LDcgKzg0NDQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF9yZXF1ZXN0X2V2ZW50KHN0cnVjdCBfXworICAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJlcXVlc3RfZXZlbnQiLCAw KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjEKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjMKKyAgKiAgICAgICAgIFdyYXBzOiBtcHZf cmVxdWVzdF9ldmVudAorICAqICAgICAgICAgIiIiCisgICogICAgICAgICBhc3NlcnQgc2VsZi5f Y3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04NDU1LDE5ICs4NDU1LDE5IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 X3JlcXVlc3RfZXZlbnQoc3RydWN0IF9fCisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxh ZykpIHsKKyAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewor ICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlY X0VSUigwLCA0MjEsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA0MjMsIF9f cHl4X0wxX2Vycm9yKQorICAgICB9CisgICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0MjQKKyAgKiAgICAgICAgICIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAorICAqICAgICAgICAgY2RlZiBpbnQgZW5hYmxlX2kgPSAxIGlmIGVuYWJsZSBlbHNlIDAgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICog ICAgICAgICBjZGVmIG1wdl9ldmVudF9pZCBldmVudF9pZCA9IGV2ZW50CisgICovCistICBfX3B5 eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9lbmFibGUpOyBpZiAodW5saWtl bHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA0MjIsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfZW5hYmxlKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgNDI0LCBfX3B5eF9MMV9lcnJvcikK KyAgIGlmIChfX3B5eF90XzIpIHsKKyAgICAgX19weXhfdF8xID0gMTsKKyAgIH0gZWxzZSB7CitA QCAtODQ3NSwxNyArODQ3NSwxNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF9yZXF1ZXN0X2V2ZW50KHN0cnVjdCBfXworICAgfQorICAg X19weXhfdl9lbmFibGVfaSA9IF9fcHl4X3RfMTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0MjQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 MjYKKyAgKiAgICAgICAgIGNkZWYgaW50IGVuYWJsZV9pID0gMSBpZiBlbmFibGUgZWxzZSAwCisg ICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lkIGV2 ZW50X2lkID0gZXZlbnQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAg d2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9ldmVudChzZWxm Ll9jdHgsIGV2ZW50X2lkLCBlbmFibGVfaSkKKyAgKi8KKy0gIF9fcHl4X3RfMyA9ICgoZW51bSBt cHZfZXZlbnRfaWQpX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2V2ZW50X2lkKF9fcHl4X3ZfZXZl bnQpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDI0LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9ICgoZW51bSBtcHZfZXZlbnRfaWQpX19QeXhf UHlJbnRfQXNfZW51bV9fbXB2X2V2ZW50X2lkKF9fcHl4X3ZfZXZlbnQpKTsgaWYgKHVubGlrZWx5 KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDI2LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fcHl4X3ZfZXZlbnRfaWQgPSBfX3B5eF90XzM7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDI1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDI3CisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50 X2lkIGV2ZW50X2lkID0gZXZlbnQKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04NTAwLDcgKzg1MDAsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9yZXF1ZXN0X2V2ZW50KHN0 cnVjdCBfXworICAgICAgICNlbmRpZgorICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjYKKysgICAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjgKKyAgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lk IGV2ZW50X2lkID0gZXZlbnQKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAg ICAgZXJyID0gbXB2X3JlcXVlc3RfZXZlbnQoc2VsZi5fY3R4LCBldmVudF9pZCwgZW5hYmxlX2kp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04NTEwLDcgKzg1MTAsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9yZXF1 ZXN0X2V2ZW50KHN0cnVjdCBfXworICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfcmVxdWVzdF9l dmVudChfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfZXZlbnRfaWQsIF9fcHl4X3ZfZW5hYmxl X2kpOworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDI1CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyNworICAq ICAgICAgICAgY2RlZiBpbnQgZXJyCisgICogICAgICAgICBjZGVmIG1wdl9ldmVudF9pZCBldmVu dF9pZCA9IGV2ZW50CisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CitAQCAtODUyOSw3ICs4NTI5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfcmVxdWVzdF9ldmVudChzdHJ1Y3QgX18K KyAgICAgICB9CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDI3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDI5CisgICogICAgICAg ICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2V2ZW50KHNl bGYuX2N0eCwgZXZlbnRfaWQsIGVuYWJsZV9pKQorICAqICAgICAgICAgcmV0dXJuIGVyciAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODUzNywxMyArODUzNywxMyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9yZXF1ZXN0 X2V2ZW50KHN0cnVjdCBfXworICAqICAgICBAX2Vycm9ycworICAqLworICAgX19QeXhfWERFQ1JF RihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3Zf ZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDI3LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJy KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDI5LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgX19weXhfciA9IF9fcHl4X3Rf NDsKKyAgIF9fcHl4X3RfNCA9IDA7CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQxMgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQxNAorICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgcmVxdWVz dF9ldmVudChzZWxmLCBldmVudCwgZW5hYmxlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTg1NjIsNyArODU2Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0X3JlcXVlc3RfZXZlbnQoc3RydWN0IF9fCisgICByZXR1 cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQz MAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzIKKyAgKiAKKyAgKiAgICAg QF9lcnJvcnMKKyAgKiAgICAgZGVmIHNldF9sb2dfbGV2ZWwoc2VsZiwgbG9nbGV2ZWwpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODU5OSw3ICs4NTk5LDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMnNldF9sb2df bGV2ZWwoc3RydWN0IF8KKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfbG9nX2xl dmVsIiwgMCk7CisgICBfX1B5eF9JTkNSRUYoX19weXhfdl9sb2dsZXZlbCk7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMyCisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDM0CisgICogICAgIGRlZiBzZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xl dmVsKToKKyAgKiAgICAgICAgICIiIldyYXBzOiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIK KyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTg2MTAsMTkgKzg2MTAsMTkgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMnNldF9sb2dfbGV2ZWwoc3RydWN0IF8KKyAgIGlm ICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworICAgICBpZiAodW5saWtlbHkoIShfX3B5 eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7CisgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3Nl cnRpb25FcnJvcik7CistICAgICAgX19QWVhfRVJSKDAsIDQzMiwgX19weXhfTDFfZXJyb3IpCisr ICAgICAgX19QWVhfRVJSKDAsIDQzNCwgX19weXhfTDFfZXJyb3IpCisgICAgIH0KKyAgIH0KKyAg ICNlbmRpZgorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzMworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzNQorICAqICAgICAgICAgIiIiV3Jh cHM6IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYu X2N0eAorICAqICAgICAgICAgbG9nbGV2ZWwgPSBfc3RyZW5jKGxvZ2xldmVsKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGxvZ2xldmVs X2MgPSBsb2dsZXZlbAorICAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICovCistICBfX1B5eF9H ZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQzMywgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQzNSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgIF9fcHl4X3RfMyA9IE5VTEw7CisgICBp ZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfMikpKSB7CitAQCAtODYzNiwyMyArODYzNiwyMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yc2V0X2xvZ19sZXZlbChzdHJ1Y3Qg XworICAgfQorICAgX19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzMsIF9fcHl4X3ZfbG9nbGV2ZWwpIDogX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfbG9nbGV2ZWwpOworICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNDMzLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQzNSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X2xvZ2xldmVsLCBfX3B5eF90XzEp OworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0MzQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzYKKyAgKiAg ICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKiAgICAgICAgIGxvZ2xldmVsID0gX3N0cmVuYyhs b2dsZXZlbCkKKyAgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xl dmVsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGNkZWYgaW50IGVy cgorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5 T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfbG9nbGV2ZWwpOyBpZiAodW5saWtlbHkoKCFfX3B5eF90 XzQpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDM0LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfbG9nbGV2 ZWwpOyBpZiAodW5saWtlbHkoKCFfX3B5eF90XzQpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZ WF9FUlIoMCwgNDM2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4X3ZfbG9nbGV2ZWxfYyA9IF9f cHl4X3RfNDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzYKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzgKKyAgKiAgICAgICAgIGNkZWYg Y29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsCisgICogICAgICAgICBjZGVmIGludCBl cnIKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK K0BAIC04NjY3LDcgKzg2NjcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yc2V0X2xvZ19sZXZlbChzdHJ1Y3QgXworICAgICAgICNl bmRpZgorICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0MzcKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0MzkKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAqICAgICAgICAgd2l0aCBub2dp bDoKKyAgKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMoc2VsZi5f Y3R4LCBsb2dsZXZlbF9jKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODY3Nyw3 ICs4Njc3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMnNldF9sb2dfbGV2ZWwoc3RydWN0IF8KKyAgICAgICAgIF9fcHl4X3ZfZXJy ID0gbXB2X3JlcXVlc3RfbG9nX21lc3NhZ2VzKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9s b2dsZXZlbF9jKTsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQzNgorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 MzgKKyAgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsCisg ICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04Njk2LDcgKzg2OTYsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yc2V0X2xvZ19sZXZl bChzdHJ1Y3QgXworICAgICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0MzgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDAK KyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgZXJyID0gbXB2X3JlcXVl c3RfbG9nX21lc3NhZ2VzKHNlbGYuX2N0eCwgbG9nbGV2ZWxfYykKKyAgKiAgICAgICAgIHJldHVy biBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTg3MDQsMTMgKzg3MDQsMTMg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMnNldF9sb2dfbGV2ZWwoc3RydWN0IF8KKyAgKiAgICAgQF9lcnJvcnMKKyAgKi8KKyAgIF9f UHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2lu dChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQz OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChf X3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ0MCwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fcHl4X3Ig PSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzAKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0MzIKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAgICAg ZGVmIHNldF9sb2dfbGV2ZWwoc2VsZiwgbG9nbGV2ZWwpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtODczMiw3ICs4NzMyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMnNldF9sb2dfbGV2ZWwoc3RydWN0IF8KKyAg IHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDQxCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0MworICAqIAorICAq ICAgICBAX2Vycm9ycworICAqICAgICBkZWYgbG9hZF9jb25maWcoc2VsZiwgZmlsZW5hbWUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODc2OSw3ICs4NzY5LDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNGxvYWRf Y29uZmlnKHN0cnVjdCBfX3AKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJsb2FkX2Nv bmZpZyIsIDApOworICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfZmlsZW5hbWUpOworIAorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0MworKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQ0NQorICAqICAgICBkZWYgbG9hZF9jb25maWcoc2VsZiwgZmlsZW5h bWUpOgorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9sb2FkX2NvbmZpZ19maWxlIiIiCisgICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC04NzgwLDE5ICs4NzgwLDE5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzRsb2FkX2NvbmZpZyhzdHJ1Y3QgX19wCisgICBpZiAodW5s aWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKyAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9z ZWxmLT5fY3R4ICE9IDApKSkgeworICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9u RXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCA0NDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAg IF9fUFlYX0VSUigwLCA0NDUsIF9fcHl4X0wxX2Vycm9yKQorICAgICB9CisgICB9CisgICAjZW5k aWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDQKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDYKKyAgKiAgICAgICAgICIiIldyYXBzOiBt cHZfbG9hZF9jb25maWdfZmlsZSIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAq ICAgICAgICAgZmlsZW5hbWUgPSBfc3RyZW5jKGZpbGVuYW1lKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIF9maWxlbmFtZSA9IGZpbGVu YW1lCisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgNDQ0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDQ2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworICAgX19weXhfdF8zID0gTlVMTDsKKyAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsK K0BAIC04ODA2LDIzICs4ODA2LDIzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRsb2FkX2NvbmZpZyhzdHJ1Y3QgX19wCisgICB9Cisg ICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl9maWxlbmFtZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9maWxlbmFtZSk7CisgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCA0NDQsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNDQ2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisg ICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfZmlsZW5hbWUsIF9fcHl4X3RfMSk7CisgICBfX3B5 eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0NQor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0NworICAqICAgICAgICAgYXNz ZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgZmlsZW5hbWUgPSBfc3RyZW5jKGZpbGVuYW1lKQor ICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBfZmlsZW5hbWUgPSBmaWxlbmFtZSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAgICAg ICAgIHdpdGggbm9naWw6CisgICovCistICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Bc1N0 cmluZyhfX3B5eF92X2ZpbGVuYW1lKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF80KSAmJiBQeUVy cl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ0NSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X2ZpbGVuYW1lKTsgaWYgKHVu bGlrZWx5KCghX19weXhfdF80KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ0 NywgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF92X19maWxlbmFtZSA9IF9fcHl4X3RfNDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDcKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDkKKyAgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciog X2ZpbGVuYW1lID0gZmlsZW5hbWUKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAqICAgICAg ICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTg4MzcsNyAr ODgzNyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzRsb2FkX2NvbmZpZyhzdHJ1Y3QgX19wCisgICAgICAgI2VuZGlmCisgICAgICAg Lyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQ0OAorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1MAorICAq ICAgICAgICAgY2RlZiBpbnQgZXJyCisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAg ICAgICAgIGVyciA9IG1wdl9sb2FkX2NvbmZpZ19maWxlKHNlbGYuX2N0eCwgX2ZpbGVuYW1lKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODg0Nyw3ICs4ODQ3LDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNGxvYWRf Y29uZmlnKHN0cnVjdCBfX3AKKyAgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X2xvYWRfY29uZmln X2ZpbGUoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X19maWxlbmFtZSk7CisgICAgICAgfQor IAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDcKKysgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQ5CisgICogICAgICAgICBjZGVmIGNv bnN0IGNoYXIqIF9maWxlbmFtZSA9IGZpbGVuYW1lCisgICogICAgICAgICBjZGVmIGludCBlcnIK KyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC04ODY2LDcgKzg4NjYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF80bG9hZF9jb25maWcoc3RydWN0IF9fcAorICAgICAgIH0KKyAg IH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDkKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTEKKyAgKiAgICAgICAgIHdpdGggbm9naWw6 CisgICogICAgICAgICAgICAgZXJyID0gbXB2X2xvYWRfY29uZmlnX2ZpbGUoc2VsZi5fY3R4LCBf ZmlsZW5hbWUpCisgICogICAgICAgICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC04ODc0LDEzICs4ODc0LDEzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRsb2FkX2NvbmZpZyhzdHJ1Y3QgX19wCisg ICogICAgIGRlZiBfZm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6CisgICovCisgICBfX1B5eF9YREVD UkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhf dl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0NDksIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9l cnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0NTEsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX3B5eF9yID0gX19weXhf dF8xOworICAgX19weXhfdF8xID0gMDsKKyAgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQxCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDQzCisgICogCisgICogICAgIEBfZXJyb3JzCisgICogICAgIGRlZiBsb2Fk X2NvbmZpZyhzZWxmLCBmaWxlbmFtZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC04OTAyLDcgKzg5MDIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF80bG9hZF9jb25maWcoc3RydWN0IF9fcAorICAgcmV0dXJuIF9f cHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTEKKysv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUzCisgICogICAgICAgICByZXR1cm4g ZXJyCisgICogCisgICogICAgIGRlZiBfZm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04OTM1LDcgKzg5MzUsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3Io Q1lUSE9OX1VOVQorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9mb3JtYXRfZm9yIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDUyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDU0CisgICogCisgICogICAgIGRlZiBfZm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6CisgICogICAg ICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTg5NDYsNyArODk0Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0X2ZvcihDWVRIT05fVU5V CisgICBfX3B5eF90XzIgPSAoX19weXhfdF8xICE9IDApOworICAgaWYgKF9fcHl4X3RfMikgewor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUzCisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTUKKyAgKiAgICAgZGVmIF9mb3JtYXRfZm9y KHNlbGYsIHZhbHVlKToKKyAgKiAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJp bmcpOgorICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX1NUUklORyAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODk1NCwxMyArODk1NCwxMyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3Io Q1lUSE9OX1VOVQorICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0ZMQUcKKyAgKi8K KyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8zID0gX19QeXhfUHlJ bnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfU1RSSU5HKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDUzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19w eXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfU1RS SU5HKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDU1LCBfX3B5eF9M MV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisgICAgIF9fcHl4X3IgPSBf X3B5eF90XzM7CisgICAgIF9fcHl4X3RfMyA9IDA7CisgICAgIGdvdG8gX19weXhfTDA7CisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTIKKysgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1NAorICAqIAorICAqICAgICBkZWYgX2Zvcm1hdF9m b3Ioc2VsZiwgdmFsdWUpOgorICAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0 cmluZyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04OTY5LDcgKzg5NjksNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVQorICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjQ1NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ1NgorICAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6 CisgICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfU1RSSU5HCisgICogICAgICAgICBl bGlmIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtODk3OCwxMiArODk3OCwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVQorICAqLwor ICAgX19weXhfdF8zID0gKChQeU9iamVjdCopJlB5Qm9vbF9UeXBlKTsKKyAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzMpOworLSAgX19weXhfdF8yID0gUHlPYmplY3RfSXNJbnN0YW5jZShfX3B5eF92 X3ZhbHVlLCBfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoX19weXhfdF8yID09ICgoaW50KS0xKSkp IF9fUFlYX0VSUigwLCA0NTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gUHlPYmpl Y3RfSXNJbnN0YW5jZShfX3B5eF92X3ZhbHVlLCBfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoX19w eXhfdF8yID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigwLCA0NTYsIF9fcHl4X0wxX2Vycm9yKQor ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgICBfX3B5eF90XzEg PSAoX19weXhfdF8yICE9IDApOworICAgaWYgKF9fcHl4X3RfMSkgeworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDU1CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0NTcKKyAgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJ TkcKKyAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCk6CisgICogICAgICAg ICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRkxBRyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtODk5MSwxMyArODk5MSwxMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVQorICAqICAg ICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0lOVDY0CisgICovCisgICAgIF9fUHl4X1hERUNS RUYoX19weXhfcik7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2 X2Zvcm1hdChNUFZfRk9STUFUX0ZMQUcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlY X0VSUigwLCA0NTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9GTEFHKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDU3LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMyk7CisgICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7CisgICAgIF9fcHl4 X3RfMyA9IDA7CisgICAgIGdvdG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0NTQKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjQ1NgorICAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6Cisg ICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfU1RSSU5HCisgICogICAgICAgICBlbGlm IGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtOTAwNiw3ICs5MDA2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfNl9mb3JtYXRfZm9yKENZVEhPTl9VTlUKKyAgKi8KKyAgIH0K KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTYKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTgKKyAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5j ZSh2YWx1ZSwgYm9vbCk6CisgICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRkxBRwor ICAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtOTAxNyw3ICs5MDE3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNl9mb3JtYXRfZm9yKENZVEhPTl9V TlUKKyAgIF9fcHl4X3RfMiA9IChfX3B5eF90XzEgIT0gMCk7CisgICBpZiAoX19weXhfdF8yKSB7 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTcKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OQorICAqICAgICAgICAgICAgIHJldHVy biBNUFZfRk9STUFUX0ZMQUcKKyAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50 KToKKyAgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2NCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtOTAyNSwxMyArOTAyNSwxMyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lU SE9OX1VOVQorICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQorICAqLwor ICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9JTlQ2NCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ1NywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4 X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX0lOVDY0 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDU5LCBfX3B5eF9MMV9l cnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisgICAgIF9fcHl4X3IgPSBfX3B5 eF90XzM7CisgICAgIF9fcHl4X3RfMyA9IDA7CisgICAgIGdvdG8gX19weXhfTDA7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTYKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OAorICAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZh bHVlLCBib29sKToKKyAgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9GTEFHCisgICog ICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC05MDQwLDcgKzkwNDAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVQor ICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OAor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2MAorICAqICAgICAgICAgZWxp ZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9S TUFUX0lOVDY0CisgICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTkwNTEsNyArOTA1MSw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0 X2ZvcihDWVRIT05fVU5VCisgICBfX3B5eF90XzEgPSAoX19weXhfdF8yICE9IDApOworICAgaWYg KF9fcHl4X3RfMSkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDU5CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjEKKyAgKiAgICAg ICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2NAorICAqICAgICAgICAgZWxpZiBpc2luc3Rh bmNlKHZhbHVlLCBmbG9hdCk6CisgICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRE9V QkxFICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05MDU5LDEzICs5MDU5LDEzIEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzZfZm9ybWF0X2ZvcihDWVRIT05fVU5VCisgICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JN QVRfTk9ERV9BUlJBWQorICAqLworICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBf X3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9E T1VCTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NTksIF9fcHl4 X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9m b3JtYXQoTVBWX0ZPUk1BVF9ET1VCTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlY X0VSUigwLCA0NjEsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8z KTsKKyAgICAgX19weXhfciA9IF9fcHl4X3RfMzsKKyAgICAgX19weXhfdF8zID0gMDsKKyAgICAg Z290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQ1OAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYwCisgICogICAg ICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6CisgICogICAgICAgICAgICAgcmV0dXJu IE1QVl9GT1JNQVRfSU5UNjQKKyAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxv YXQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTA3NCw3ICs5MDc0LDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf Nl9mb3JtYXRfZm9yKENZVEhPTl9VTlUKKyAgKi8KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NjAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0NjIKKyAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgorICAq ICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQorICAqICAgICAgICAgZWxpZiBp c2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTkwOTUsNyArOTA5NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0X2ZvcihDWVRIT05fVU5VCisgICBf X3B5eF90XzIgPSAoX19weXhfdF8xICE9IDApOworICAgaWYgKF9fcHl4X3RfMikgeworIAorLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYxCisrICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjMKKyAgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZP Uk1BVF9ET1VCTEUKKyAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBs aXN0KSk6CisgICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9BUlJBWSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTEwMywxMyArOTEwMywxMyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1h dF9mb3IoQ1lUSE9OX1VOVQorICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVf TUFQCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9fcHl4X3RfMyA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX05PREVfQVJSQVkp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NjEsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQo TVBWX0ZPUk1BVF9OT0RFX0FSUkFZKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgNDYzLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7 CisgICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7CisgICAgIF9fcHl4X3RfMyA9IDA7CisgICAgIGdv dG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 NjAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2MgorICAqICAgICAg ICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CisgICogICAgICAgICAgICAgcmV0dXJu IE1QVl9GT1JNQVRfRE9VQkxFCisgICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0 dXBsZSwgbGlzdCkpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTExOCw3ICs5 MTE4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfNl9mb3JtYXRfZm9yKENZVEhPTl9VTlUKKyAgKi8KKyAgIH0KKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0NjQKKyAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1 cGxlLCBsaXN0KSk6CisgICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9BUlJB WQorICAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTkxMjksNyArOTEyOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0X2ZvcihDWVRI T05fVU5VCisgICBfX3B5eF90XzEgPSAoX19weXhfdF8yICE9IDApOworICAgaWYgKF9fcHl4X3Rf MSkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYzCisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjUKKyAgKiAgICAgICAgICAgICBy ZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZCisgICogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo dmFsdWUsIGRpY3QpOgorICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfTUFQ ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05MTM3LDEzICs5MTM3LDEzIEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZf Zm9ybWF0X2ZvcihDWVRIT05fVU5VCisgICogCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19w eXhfcik7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1h dChNUFZfRk9STUFUX05PREVfTUFQKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgNDYzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfTk9ERV9NQVApOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NjUsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgICAgX19weXhfciA9IF9fcHl4X3RfMzsKKyAgICAgX19w eXhfdF8zID0gMDsKKyAgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ2MgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NDY0CisgICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0dXBsZSwgbGlz dCkpOgorICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfQVJSQVkKKyAgKiAg ICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC05MTUyLDcgKzkxNTIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVQor ICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2NAor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2NgorICAqICAgICAgICAgZWxp ZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKyAgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZP Uk1BVF9OT0RFX01BUAorICAqICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ORSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTE2MCwxMyArOTE2MCwxMyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9m b3IoQ1lUSE9OX1VOVQorICAqICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbGlz dChzZWxmLCB2YWx1ZXMpOgorICAqLworICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9f cHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX05P TkUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NjQsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0 KE1QVl9GT1JNQVRfTk9ORSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDQ2NiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgIF9f cHl4X3IgPSBfX3B5eF90XzM7CisgICBfX3B5eF90XzMgPSAwOworICAgZ290byBfX3B5eF9MMDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTEKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTMKKyAgKiAgICAgICAgIHJldHVybiBlcnIKKyAg KiAKKyAgKiAgICAgZGVmIF9mb3JtYXRfZm9yKHNlbGYsIHZhbHVlKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTkxODUsNyArOTE4NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0X2ZvcihDWVRIT05f VU5VCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ2NgorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjgKKyAg KiAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PTkUKKyAgKiAKKyAgKiAgICAgY2RlZiBtcHZf bm9kZV9saXN0KiBfcHJlcF9ub2RlX2xpc3Qoc2VsZiwgdmFsdWVzKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTkyMTYsNyArOTIxNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25v ZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9k ZV9sCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX3ByZXBfbm9kZV9saXN0IiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDY5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDcx CisgICogICAgICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKKyAgKiAgICAgICAgIGNkZWYgbXB2X2Zv cm1hdCBmb3JtYXQKKyAgKiAgICAgICAgIGNkZWYgbXB2X25vZGVfbGlzdCogbm9kZV9saXN0ID0g PG1wdl9ub2RlX2xpc3QqPm1hbGxvYyhzaXplb2YobXB2X25vZGVfbGlzdCkpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05MjI1LDE3ICs5MjI1LDE3IEBAIHN0YXRpYyBzdHJ1Y3Qg bXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3By ZXBfbm9kZV9sCisgICovCisgICBfX3B5eF92X25vZGVfbGlzdCA9ICgoc3RydWN0IG1wdl9ub2Rl X2xpc3QgKiltYWxsb2MoKHNpemVvZihzdHJ1Y3QgbXB2X25vZGVfbGlzdCkpKSk7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDcwCisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NDcyCisgICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0 CisgICogICAgICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIG5vZGVfbGlzdCA9IDxtcHZfbm9kZV9s aXN0Kj5tYWxsb2Moc2l6ZW9mKG1wdl9ub2RlX2xpc3QpKQorICAqICAgICAgICAgbm9kZV9saXN0 Lm51bSA9IGxlbih2YWx1ZXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAg ICAgIG5vZGVfbGlzdC52YWx1ZXMgPSBOVUxMCisgICogICAgICAgICBub2RlX2xpc3Qua2V5cyA9 IE5VTEwKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X3ZhbHVl cyk7IGlmICh1bmxpa2VseShfX3B5eF90XzEgPT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VS UigwLCA0NzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gUHlPYmplY3RfTGVuZ3Ro KF9fcHl4X3ZfdmFsdWVzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMSA9PSAoKFB5X3NzaXplX3Qp LTEpKSkgX19QWVhfRVJSKDAsIDQ3MiwgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF92X25vZGVf bGlzdC0+bnVtID0gX19weXhfdF8xOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ3MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3MworICAq ICAgICAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBub2RlX2xpc3QgPSA8bXB2X25vZGVfbGlzdCo+ bWFsbG9jKHNpemVvZihtcHZfbm9kZV9saXN0KSkKKyAgKiAgICAgICAgIG5vZGVfbGlzdC5udW0g PSBsZW4odmFsdWVzKQorICAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTkyNDQsNyArOTI0NCw3IEBAIHN0YXRpYyBzdHJ1 Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf X3ByZXBfbm9kZV9sCisgICovCisgICBfX3B5eF92X25vZGVfbGlzdC0+dmFsdWVzID0gTlVMTDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzIKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzQKKyAgKiAgICAgICAgIG5vZGVfbGlzdC5udW0g PSBsZW4odmFsdWVzKQorICAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKKyAgKiAg ICAgICAgIG5vZGVfbGlzdC5rZXlzID0gTlVMTCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtOTI1Myw3ICs5MjUzLDcgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX2wKKyAgKi8KKyAg IF9fcHl4X3Zfbm9kZV9saXN0LT5rZXlzID0gTlVMTDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0NzMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo0NzUKKyAgKiAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSBOVUxMCisgICogICAgICAgICBu b2RlX2xpc3Qua2V5cyA9IE5VTEwKKyAgKiAgICAgICAgIGlmIG5vZGVfbGlzdC5udW06ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05MjYzLDcgKzkyNjMsNyBAQCBzdGF0aWMgc3Ry dWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 X19wcmVwX25vZGVfbAorICAgX19weXhfdF8yID0gKF9fcHl4X3Zfbm9kZV9saXN0LT5udW0gIT0g MCk7CisgICBpZiAoX19weXhfdF8yKSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0NzQKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3 NgorICAqICAgICAgICAgbm9kZV9saXN0LmtleXMgPSBOVUxMCisgICogICAgICAgICBpZiBub2Rl X2xpc3QubnVtOgorICAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUq Pm1hbGxvYyhub2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTkyNzIsNyArOTI3Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25v ZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9k ZV9sCisgICovCisgICAgIF9fcHl4X3Zfbm9kZV9saXN0LT52YWx1ZXMgPSAoKHN0cnVjdCBtcHZf bm9kZSAqKW1hbGxvYygoX19weXhfdl9ub2RlX2xpc3QtPm51bSAqIChzaXplb2Yoc3RydWN0IG1w dl9ub2RlKSkpKSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 NzMKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3NQorICAqICAgICAg ICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKKyAgKiAgICAgICAgIG5vZGVfbGlzdC5rZXlzID0g TlVMTAorICAqICAgICAgICAgaWYgbm9kZV9saXN0Lm51bTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTkyODEsNyArOTI4MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGVfbGlz dCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9sCisg ICovCisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc1Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc3CisgICogICAgICAgICBpZiBu b2RlX2xpc3QubnVtOgorICAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25v ZGUqPm1hbGxvYyhub2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkKKyAgKiAgICAgICAg IGZvciBpLCB2YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVzKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTkyOTQsMjYgKzkyOTQsMjYgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9s aXN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX2wK KyAgICAgX19weXhfdF80ID0gX19weXhfdl92YWx1ZXM7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzQp OyBfX3B5eF90XzEgPSAwOworICAgICBfX3B5eF90XzUgPSBOVUxMOworICAgfSBlbHNlIHsKKy0g ICAgX19weXhfdF8xID0gLTE7IF9fcHl4X3RfNCA9IFB5T2JqZWN0X0dldEl0ZXIoX19weXhfdl92 YWx1ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4 X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzEgPSAtMTsgX19weXhfdF80ID0gUHlPYmplY3RfR2V0 SXRlcihfX3B5eF92X3ZhbHVlcyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDAsIDQ3NywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwor LSAgICBfX3B5eF90XzUgPSBQeV9UWVBFKF9fcHl4X3RfNCktPnRwX2l0ZXJuZXh0OyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX3B5eF90XzUgPSBQeV9UWVBFKF9fcHl4X3RfNCktPnRwX2l0ZXJuZXh0OyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA0NzcsIF9fcHl4X0wxX2Vycm9yKQorICAgfQor ICAgZm9yICg7OykgeworICAgICBpZiAobGlrZWx5KCFfX3B5eF90XzUpKSB7CisgICAgICAgaWYg KGxpa2VseShQeUxpc3RfQ2hlY2tFeGFjdChfX3B5eF90XzQpKSkgeworICAgICAgICAgaWYgKF9f cHl4X3RfMSA+PSBQeUxpc3RfR0VUX1NJWkUoX19weXhfdF80KSkgYnJlYWs7CisgICAgICAgICAj aWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JF RlMKKy0gICAgICAgIF9fcHl4X3RfNiA9IFB5TGlzdF9HRVRfSVRFTShfX3B5eF90XzQsIF9fcHl4 X3RfMSk7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzErKzsgaWYgKHVubGlrZWx5 KDAgPCAwKSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgICBfX3B5 eF90XzYgPSBQeUxpc3RfR0VUX0lURU0oX19weXhfdF80LCBfX3B5eF90XzEpOyBfX1B5eF9JTkNS RUYoX19weXhfdF82KTsgX19weXhfdF8xKys7IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VS UigwLCA0NzcsIF9fcHl4X0wxX2Vycm9yKQorICAgICAgICAgI2Vsc2UKKy0gICAgICAgIF9fcHl4 X3RfNiA9IFB5U2VxdWVuY2VfSVRFTShfX3B5eF90XzQsIF9fcHl4X3RfMSk7IF9fcHl4X3RfMSsr OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICAgICAgX19weXhfdF82ID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfNCwgX19w eXhfdF8xKTsgX19weXhfdF8xKys7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDQ3NywgX19weXhfTDFfZXJyb3IpCisgICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82 KTsKKyAgICAgICAgICNlbmRpZgorICAgICAgIH0gZWxzZSB7CisgICAgICAgICBpZiAoX19weXhf dF8xID49IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdF80KSkgYnJlYWs7CisgICAgICAgICAjaWYg Q1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMK Ky0gICAgICAgIF9fcHl4X3RfNiA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfdF80LCBfX3B5eF90 XzEpOyBfX1B5eF9JTkNSRUYoX19weXhfdF82KTsgX19weXhfdF8xKys7IGlmICh1bmxpa2VseSgw IDwgMCkpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgICAgX19weXhf dF82ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF90XzQsIF9fcHl4X3RfMSk7IF9fUHl4X0lOQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzErKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJS KDAsIDQ3NywgX19weXhfTDFfZXJyb3IpCisgICAgICAgICAjZWxzZQorLSAgICAgICAgX19weXhf dF82ID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfNCwgX19weXhfdF8xKTsgX19weXhfdF8xKys7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJy b3IpCisrICAgICAgICBfX3B5eF90XzYgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF80LCBfX3B5 eF90XzEpOyBfX3B5eF90XzErKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgNDc3LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworICAgICAgICAgI2VuZGlmCisgICAgICAgfQorQEAgLTkzMjMsNyArOTMyMyw3IEBAIHN0YXRp YyBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfX3ByZXBfbm9kZV9sCisgICAgICAgICBQeU9iamVjdCogZXhjX3R5cGUgPSBQeUVycl9P Y2N1cnJlZCgpOworICAgICAgICAgaWYgKGV4Y190eXBlKSB7CisgICAgICAgICAgIGlmIChsaWtl bHkoX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGV4Y190eXBlLCBQeUV4Y19TdG9w SXRlcmF0aW9uKSkpIFB5RXJyX0NsZWFyKCk7CistICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAs IDQ3NSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAsIDQ3Nywg X19weXhfTDFfZXJyb3IpCisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgICB9CitA QCAtOTMzMywyMCArOTMzMywyMCBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25vZGVfbAorICAgICBfX3B5 eF90XzYgPSAwOworICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKKyAgICAgX19QeXhfWERF Q1JFRl9TRVQoX19weXhfdl9pLCBfX3B5eF90XzMpOworLSAgICBfX3B5eF90XzYgPSBfX1B5eF9Q eUludF9BZGRPYmpDKF9fcHl4X3RfMywgX19weXhfaW50XzEsIDEsIDAsIDApOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X3B5eF90XzYgPSBfX1B5eF9QeUludF9BZGRPYmpDKF9fcHl4X3RfMywgX19weXhfaW50XzEsIDEs IDAsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzcsIF9fcHl4 X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMyk7CisgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNjsKKyAgICAgX19weXhf dF82ID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3Ngor KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc4CisgICogICAgICAgICAg ICAgbm9kZV9saXN0LnZhbHVlcyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBz aXplb2YobXB2X25vZGUpKQorICAqICAgICAgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2 YWx1ZXMpOgorICAqICAgICAgICAgICAgIGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBub2RlID0gc2Vs Zi5fcHJlcF9uYXRpdmVfdmFsdWUodmFsdWUsIGZvcm1hdCkKKyAgKiAgICAgICAgICAgICBub2Rl X2xpc3QudmFsdWVzW2ldID0gbm9kZQorICAqLworLSAgICBfX3B5eF90XzcgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9y bWF0X2Zvcik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ3NiwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIo KChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19mb3JtYXRfZm9yKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDc4LCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisgICAgIF9fcHl4X3RfOCA9IE5VTEw7CisgICAg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfNykpKSB7CitAQCAtOTM2MCwzNiArOTM2MCwzNiBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2Rl X2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25vZGVf bAorICAgICB9CisgICAgIF9fcHl4X3RfNiA9IChfX3B5eF90XzgpID8gX19QeXhfUHlPYmplY3Rf Q2FsbDJBcmdzKF9fcHl4X3RfNywgX19weXhfdF84LCBfX3B5eF92X3ZhbHVlKSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF83LCBfX3B5eF92X3ZhbHVlKTsKKyAgICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzgsIF9fcHl4X0wxX2Vycm9yKQorICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7 IF9fcHl4X3RfNyA9IDA7CistICAgIF9fcHl4X3RfOSA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4 X1B5SW50X0FzX2VudW1fX21wdl9mb3JtYXQoX19weXhfdF82KSk7IGlmICh1bmxpa2VseShQeUVy cl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ3NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9f cHl4X3RfOSA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9mb3Jt YXQoX19weXhfdF82KSk7IGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJS KDAsIDQ3OCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBf X3B5eF90XzYgPSAwOworICAgICBfX3B5eF92X2Zvcm1hdCA9IF9fcHl4X3RfOTsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3NworKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NDc5CisgICogICAgICAgICBmb3IgaSwgdmFsdWUgaW4gZW51 bWVyYXRlKHZhbHVlcyk6CisgICogICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zv cih2YWx1ZSkKKyAgKiAgICAgICAgICAgICBub2RlID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUo dmFsdWUsIGZvcm1hdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAg ICAgIG5vZGVfbGlzdC52YWx1ZXNbaV0gPSBub2RlCisgICogICAgICAgICByZXR1cm4gbm9kZV9s aXN0CisgICovCistICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zv cm1hdChfX3B5eF92X2Zvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDQ3NywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2Zvcm1hdChfX3B5eF92X2Zvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhf dF82KSkgX19QWVhfRVJSKDAsIDQ3OSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOworICAgICBfX3B5eF92X25vZGUgPSAoKHN0cnVjdCBfX3B5eF92dGFic3Ry dWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92 dGFiKS0+X3ByZXBfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92YWx1ZSwgX19w eXhfdF82KTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzgKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ4MAorICAqICAgICAgICAgICAgIGZvcm1hdCA9 IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCisgICogICAgICAgICAgICAgbm9kZSA9IHNlbGYuX3By ZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCisgICogICAgICAgICAgICAgbm9kZV9saXN0 LnZhbHVlc1tpXSA9IG5vZGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAg ICAgcmV0dXJuIG5vZGVfbGlzdAorICAqIAorICAqLworLSAgICBfX3B5eF90XzEwID0gX19QeXhf UHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9pKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzEwID09 IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ3OCwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVf dChfX3B5eF92X2kpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMTAgPT0gKFB5X3NzaXplX3QpLTEp ICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDgwLCBfX3B5eF9MMV9lcnJvcikK KyAgICAgKF9fcHl4X3Zfbm9kZV9saXN0LT52YWx1ZXNbX19weXhfdF8xMF0pID0gX19weXhfdl9u b2RlOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc1CisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzcKKyAgKiAgICAgICAgIGlmIG5v ZGVfbGlzdC5udW06CisgICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IDxtcHZfbm9k ZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2X25vZGUpKQorICAqICAgICAgICAg Zm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtOTQwMCw3ICs5NDAwLDcgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX2wKKyAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDc5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDgx CisgICogICAgICAgICAgICAgbm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBm b3JtYXQpCisgICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVlc1tpXSA9IG5vZGUKKyAgKiAg ICAgICAgIHJldHVybiBub2RlX2xpc3QgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTk0MTAsNyArOTQxMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9sCisgICBfX3B5eF9yID0g X19weXhfdl9ub2RlX2xpc3Q7CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjQ2NgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ2OAorICAqICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ORQorICAqIAorICAq ICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbGlzdChzZWxmLCB2YWx1ZXMpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTQzNCw3ICs5NDM0LDcgQEAgc3RhdGlj IHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF9fcHJlcF9ub2RlX2wKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDgxCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ4MworICAqICAgICAgICAgcmV0dXJuIG5vZGVfbGlzdAorICAqIAorICAqICAgICBj ZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbWFwKHNlbGYsIG1hcCk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05NDY2LDE0ICs5NDY2LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qg bXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3By ZXBfbm9kZV9tCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX3ByZXBfbm9kZV9tYXAiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0ODQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo0ODYKKyAgKiAgICAgICAgIGNkZWYgY2hhciogY2tleQorICAqICAgICAgICAgY2RlZiBtcHZf bm9kZV9saXN0KiBsaXN0CisgICogICAgICAgICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3Qo bWFwLnZhbHVlcygpKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBr ZXlzID0gbWFwLmtleXMoKQorICAqICAgICAgICAgaWYgbm90IGxlbihrZXlzKToKKyAgKi8KKy0g IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9tYXAsIF9fcHl4 X25fc192YWx1ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0ODQs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF92X21hcCwgX19weXhfbl9zX3ZhbHVlcyk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDQ4NiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKyAgIF9fcHl4X3RfMyA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRI T0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAgLTk0ODcsMjAg Kzk0ODcsMjAgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX20KKyAgIH0KKyAgIF9fcHl4X3RfMSA9 IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4 X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKyAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDQ4NCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0ODYsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8y ID0gMDsKKyAgIF9fcHl4X3ZfbGlzdCA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fcHJl cF9ub2RlX2xpc3QoX19weXhfdl9zZWxmLCBfX3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NDg1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg3Cisg ICogICAgICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIGxpc3QKKyAgKiAgICAgICAgIGxpc3QgPSBz ZWxmLl9wcmVwX25vZGVfbGlzdChtYXAudmFsdWVzKCkpCisgICogICAgICAgICBrZXlzID0gbWFw LmtleXMoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBpZiBub3Qg bGVuKGtleXMpOgorICAqICAgICAgICAgICAgIHJldHVybiBsaXN0CisgICovCistICBfX3B5eF90 XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfbWFwLCBfX3B5eF9uX3Nfa2V5 cyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQ4NSwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zf bWFwLCBfX3B5eF9uX3Nfa2V5cyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDQ4NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAg IF9fcHl4X3RfMyA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2Vs eShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAgLTk1MTQsMjQgKzk1MTQsMjQgQEAg c3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF9fcHJlcF9ub2RlX20KKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMp ID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5 eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhf dF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDQ4NSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCA0ODcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgIF9f cHl4X3Zfa2V5cyA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDg4CisgICogICAgICAgICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3Qo bWFwLnZhbHVlcygpKQorICAqICAgICAgICAga2V5cyA9IG1hcC5rZXlzKCkKKyAgKiAgICAgICAg IGlmIG5vdCBsZW4oa2V5cyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAg ICAgICAgICByZXR1cm4gbGlzdAorICAqICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxs b2MobGlzdC5udW0pCisgICovCistICBfX3B5eF90XzQgPSBQeU9iamVjdF9MZW5ndGgoX19weXhf dl9rZXlzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19Q WVhfRVJSKDAsIDQ4NiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBQeU9iamVjdF9M ZW5ndGgoX19weXhfdl9rZXlzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA9PSAoKFB5X3NzaXpl X3QpLTEpKSkgX19QWVhfRVJSKDAsIDQ4OCwgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF90XzUg PSAoKCEoX19weXhfdF80ICE9IDApKSAhPSAwKTsKKyAgIGlmIChfX3B5eF90XzUpIHsKKyAKKy0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ4NworKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg5CisgICogICAgICAgICBrZXlzID0gbWFwLmtleXMo KQorICAqICAgICAgICAgaWYgbm90IGxlbihrZXlzKToKKyAgKiAgICAgICAgICAgICByZXR1cm4g bGlzdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTU0MSw3ICs5NTQxLDcgQEAg c3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF9fcHJlcF9ub2RlX20KKyAgICAgX19weXhfciA9IF9fcHl4X3ZfbGlzdDsKKyAg ICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjQ4NgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg4CisgICog ICAgICAgICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QobWFwLnZhbHVlcygpKQorICAqICAg ICAgICAga2V5cyA9IG1hcC5rZXlzKCkKKyAgKiAgICAgICAgIGlmIG5vdCBsZW4oa2V5cyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05NTUwLDcgKzk1NTAsNyBAQCBzdGF0aWMg c3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0X19wcmVwX25vZGVfbQorICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ4OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5 MAorICAqICAgICAgICAgaWYgbm90IGxlbihrZXlzKToKKyAgKiAgICAgICAgICAgICByZXR1cm4g bGlzdAorICAqICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxsb2MobGlzdC5udW0pICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05NTU5LDcgKzk1NTksNyBAQCBzdGF0aWMg c3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0X19wcmVwX25vZGVfbQorICAqLworICAgX19weXhfdl9saXN0LT5rZXlzID0gKChjaGFyICoq KW1hbGxvYyhfX3B5eF92X2xpc3QtPm51bSkpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ4OQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5 MQorICAqICAgICAgICAgICAgIHJldHVybiBsaXN0CisgICogICAgICAgICBsaXN0LmtleXMgPSA8 Y2hhcioqPm1hbGxvYyhsaXN0Lm51bSkKKyAgKiAgICAgICAgIGZvciBpLCBrZXkgaW4gZW51bWVy YXRlKGtleXMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTU3MiwyNiArOTU3 MiwyNiBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25vZGVfbQorICAgICBfX3B5eF90XzIgPSBfX3B5eF92 X2tleXM7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzQgPSAwOworICAgICBfX3B5 eF90XzYgPSBOVUxMOworICAgfSBlbHNlIHsKKy0gICAgX19weXhfdF80ID0gLTE7IF9fcHl4X3Rf MiA9IFB5T2JqZWN0X0dldEl0ZXIoX19weXhfdl9rZXlzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF80ID0g LTE7IF9fcHl4X3RfMiA9IFB5T2JqZWN0X0dldEl0ZXIoX19weXhfdl9rZXlzKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDkxLCBfX3B5eF9MMV9lcnJvcikKKyAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4X3RfNiA9IFB5X1RZUEUoX19weXhf dF8yKS0+dHBfaXRlcm5leHQ7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDQ4OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNiA9IFB5X1RZUEUoX19weXhfdF8y KS0+dHBfaXRlcm5leHQ7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ5 MSwgX19weXhfTDFfZXJyb3IpCisgICB9CisgICBmb3IgKDs7KSB7CisgICAgIGlmIChsaWtlbHko IV9fcHl4X3RfNikpIHsKKyAgICAgICBpZiAobGlrZWx5KFB5TGlzdF9DaGVja0V4YWN0KF9fcHl4 X3RfMikpKSB7CisgICAgICAgICBpZiAoX19weXhfdF80ID49IFB5TGlzdF9HRVRfU0laRShfX3B5 eF90XzIpKSBicmVhazsKKyAgICAgICAgICNpZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYm ICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworLSAgICAgICAgX19weXhfdF8zID0gUHlMaXN0 X0dFVF9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF80KTsgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7 IF9fcHl4X3RfNCsrOyBpZiAodW5saWtlbHkoMCA8IDApKSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgICAgIF9fcHl4X3RfMyA9IFB5TGlzdF9HRVRfSVRFTShfX3B5eF90 XzIsIF9fcHl4X3RfNCk7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzQrKzsgaWYg KHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAsIDQ5MSwgX19weXhfTDFfZXJyb3IpCisgICAg ICAgICAjZWxzZQorLSAgICAgICAgX19weXhfdF8zID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3Rf MiwgX19weXhfdF80KTsgX19weXhfdF80Kys7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDQ4OSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgICBfX3B5eF90XzMgPSBQeVNl cXVlbmNlX0lURU0oX19weXhfdF8yLCBfX3B5eF90XzQpOyBfX3B5eF90XzQrKzsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDkxLCBfX3B5eF9MMV9lcnJvcikKKyAgICAg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgICAgICAgI2VuZGlmCisgICAgICAgfSBl bHNlIHsKKyAgICAgICAgIGlmIChfX3B5eF90XzQgPj0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF90 XzIpKSBicmVhazsKKyAgICAgICAgICNpZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFD WVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworLSAgICAgICAgX19weXhfdF8zID0gUHlUdXBsZV9H RVRfSVRFTShfX3B5eF90XzIsIF9fcHl4X3RfNCk7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOyBf X3B5eF90XzQrKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAsIDQ4OSwgX19weXhf TDFfZXJyb3IpCisrICAgICAgICBfX3B5eF90XzMgPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X3Rf MiwgX19weXhfdF80KTsgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfNCsrOyBpZiAo dW5saWtlbHkoMCA8IDApKSBfX1BZWF9FUlIoMCwgNDkxLCBfX3B5eF9MMV9lcnJvcikKKyAgICAg ICAgICNlbHNlCistICAgICAgICBfX3B5eF90XzMgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF8y LCBfX3B5eF90XzQpOyBfX3B5eF90XzQrKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZ WF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICAgIF9fcHl4X3RfMyA9IFB5U2Vx dWVuY2VfSVRFTShfX3B5eF90XzIsIF9fcHl4X3RfNCk7IF9fcHl4X3RfNCsrOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0OTEsIF9fcHl4X0wxX2Vycm9yKQorICAgICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisgICAgICAgICAjZW5kaWYKKyAgICAgICB9CitA QCAtOTYwMSw3ICs5NjAxLDcgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX20KKyAgICAgICAgIFB5 T2JqZWN0KiBleGNfdHlwZSA9IFB5RXJyX09jY3VycmVkKCk7CisgICAgICAgICBpZiAoZXhjX3R5 cGUpIHsKKyAgICAgICAgICAgaWYgKGxpa2VseShfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1h dGNoZXMoZXhjX3R5cGUsIFB5RXhjX1N0b3BJdGVyYXRpb24pKSkgUHlFcnJfQ2xlYXIoKTsKKy0g ICAgICAgICAgZWxzZSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICAg ICAgZWxzZSBfX1BZWF9FUlIoMCwgNDkxLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgICAgIH0KKyAg ICAgICAgIGJyZWFrOworICAgICAgIH0KK0BAIC05NjExLDIwICs5NjExLDIwIEBAIHN0YXRpYyBz dHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfX3ByZXBfbm9kZV9tCisgICAgIF9fcHl4X3RfMyA9IDA7CisgICAgIF9fUHl4X0lOQ1JFRihf X3B5eF90XzEpOworICAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X2ksIF9fcHl4X3RfMSk7 CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FkZE9iakMoX19weXhfdF8xLCBfX3B5eF9p bnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ4 OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FkZE9iakMo X19weXhfdF8xLCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8z KSkgX19QWVhfRVJSKDAsIDQ5MSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsKKyAgICAgX19weXhfdF8x ID0gX19weXhfdF8zOworICAgICBfX3B5eF90XzMgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NDkwCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0OTIKKyAgKiAgICAgICAgIGxpc3Qua2V5cyA9IDxjaGFyKio+bWFsbG9jKGxpc3Qu bnVtKQorICAqICAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6CisgICogICAg ICAgICAgICAga2V5ID0gX3N0cmVuYyhrZXkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KyAgKiAgICAgICAgICAgICBja2V5ID0ga2V5CisgICogICAgICAgICAgICAgbGlzdC5rZXlzW2ld ID0gPGNoYXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCisgICovCistICAgIF9fUHl4X0dldE1vZHVs ZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDkwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzcsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA0OTIsIF9fcHl4X0wxX2Vycm9yKQorICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAgICAgX19weXhfdF84ID0gTlVMTDsKKyAgICAg aWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5 eF90XzcpKSkgeworQEAgLTk2MzgsNDQgKzk2MzgsNDQgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9k ZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2Rl X20KKyAgICAgfQorICAgICBfX3B5eF90XzMgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGwyQXJncyhfX3B5eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdl9rZXkpIDogX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzcsIF9fcHl4X3Zfa2V5KTsKKyAgICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCA0OTAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAodW5saWtl bHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0OTIsIF9fcHl4X0wxX2Vycm9yKQorICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9f cHl4X3RfNyA9IDA7CisgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl9rZXksIF9fcHl4X3Rf Myk7CisgICAgIF9fcHl4X3RfMyA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0OTEKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5 MworICAqICAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6CisgICogICAgICAg ICAgICAga2V5ID0gX3N0cmVuYyhrZXkpCisgICogICAgICAgICAgICAgY2tleSA9IGtleSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgbGlzdC5rZXlzW2ldID0g PGNoYXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCisgICogICAgICAgICAgICAgc3RyY3B5KGxpc3Qu a2V5c1tpXSwgY2tleSkKKyAgKi8KKy0gICAgX19weXhfdF85ID0gX19QeXhfUHlPYmplY3RfQXNX cml0YWJsZVN0cmluZyhfX3B5eF92X2tleSk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfOSkgJiYg UHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0OTEsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX3B5eF90XzkgPSBfX1B5eF9QeU9iamVjdF9Bc1dyaXRhYmxlU3RyaW5nKF9fcHl4X3Zfa2V5 KTsgaWYgKHVubGlrZWx5KCghX19weXhfdF85KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDQ5MywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fcHl4X3ZfY2tleSA9IF9fcHl4X3Rf OTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5MgorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk0CisgICogICAgICAgICAgICAga2V5 ID0gX3N0cmVuYyhrZXkpCisgICogICAgICAgICAgICAgY2tleSA9IGtleQorICAqICAgICAgICAg ICAgIGxpc3Qua2V5c1tpXSA9IDxjaGFyKj5tYWxsb2MobGVuKGtleSkgKyAxKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwg Y2tleSkKKyAgKiAgICAgICAgIHJldHVybiBsaXN0CisgICovCistICAgIF9fcHl4X3RfMTAgPSBQ eU9iamVjdF9MZW5ndGgoX19weXhfdl9rZXkpOyBpZiAodW5saWtlbHkoX19weXhfdF8xMCA9PSAo KFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDQ5MiwgX19weXhfTDFfZXJyb3IpCistICAg IF9fcHl4X3RfMTEgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5eF92X2kpOyBpZiAodW5s aWtlbHkoKF9fcHl4X3RfMTEgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkp KSBfX1BZWF9FUlIoMCwgNDkyLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xMCA9IFB5 T2JqZWN0X0xlbmd0aChfX3B5eF92X2tleSk7IGlmICh1bmxpa2VseShfX3B5eF90XzEwID09ICgo UHlfc3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMCwgNDk0LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19weXhfdF8xMSA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3ZfaSk7IGlmICh1bmxp a2VseSgoX19weXhfdF8xMSA9PSAoUHlfc3NpemVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkp IF9fUFlYX0VSUigwLCA0OTQsIF9fcHl4X0wxX2Vycm9yKQorICAgICAoX19weXhfdl9saXN0LT5r ZXlzW19fcHl4X3RfMTFdKSA9ICgoY2hhciAqKW1hbGxvYygoX19weXhfdF8xMCArIDEpKSk7Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTMKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5NQorICAqICAgICAgICAgICAgIGNrZXkgPSBr ZXkKKyAgKiAgICAgICAgICAgICBsaXN0LmtleXNbaV0gPSA8Y2hhcio+bWFsbG9jKGxlbihrZXkp ICsgMSkKKyAgKiAgICAgICAgICAgICBzdHJjcHkobGlzdC5rZXlzW2ldLCBja2V5KSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICByZXR1cm4gbGlzdAorICAqIAorICAq LworLSAgICBfX3B5eF90XzEwID0gX19QeXhfUHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9pKTsg aWYgKHVubGlrZWx5KChfX3B5eF90XzEwID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1 cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ5MywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3Rf MTAgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5eF92X2kpOyBpZiAodW5saWtlbHkoKF9f cHl4X3RfMTAgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9F UlIoMCwgNDk1LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgKHZvaWQpKHN0cmNweSgoX19weXhfdl9s aXN0LT5rZXlzW19fcHl4X3RfMTBdKSwgX19weXhfdl9ja2V5KSk7CisgCistICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ5MQorICAqICAgICAgICAgICAgIHJldHVybiBsaXN0CisgICogICAgICAg ICBsaXN0LmtleXMgPSA8Y2hhcioqPm1hbGxvYyhsaXN0Lm51bSkKKyAgKiAgICAgICAgIGZvciBp LCBrZXkgaW4gZW51bWVyYXRlKGtleXMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtOTY4Niw3ICs5Njg2LDcgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX20KKyAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDk0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk2CisgICogICAg ICAgICAgICAgbGlzdC5rZXlzW2ldID0gPGNoYXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCisgICog ICAgICAgICAgICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkKKyAgKiAgICAgICAgIHJldHVy biBsaXN0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05Njk2LDcgKzk2OTYsNyBA QCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0X19wcmVwX25vZGVfbQorICAgX19weXhfciA9IF9fcHl4X3ZfbGlzdDsKKyAg IGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDgxCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDgzCisgICogICAgICAg ICByZXR1cm4gbm9kZV9saXN0CisgICogCisgICogICAgIGNkZWYgbXB2X25vZGVfbGlzdCogX3By ZXBfbm9kZV9tYXAoc2VsZiwgbWFwKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTk3MjEsNyArOTcyMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9tCisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5NgorKy8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTgKKyAgKiAgICAgICAgIHJldHVybiBs aXN0CisgICogCisgICogICAgIGNkZWYgbXB2X25vZGUgX3ByZXBfbmF0aXZlX3ZhbHVlKHNlbGYs IHZhbHVlLCBmb3JtYXQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTc0OSwz OSArOTc0OSwzOSBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQorICAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9wcmVwX25hdGl2ZV92YWx1ZSIsIDApOworICAgX19QeXhfSU5DUkVGKF9f cHl4X3ZfdmFsdWUpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5 OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwMAorICAqICAgICBjZGVm IG1wdl9ub2RlIF9wcmVwX25hdGl2ZV92YWx1ZShzZWxmLCB2YWx1ZSwgZm9ybWF0KToKKyAgKiAg ICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZQorICAqICAgICAgICAgbm9kZS5mb3JtYXQgPSBmb3Jt YXQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgaWYgZm9ybWF0ID09 IE1QVl9GT1JNQVRfU1RSSU5HOgorICAqICAgICAgICAgICAgIHZhbHVlID0gX3N0cmVuYyh2YWx1 ZSkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50X0Fz X2VudW1fX21wdl9mb3JtYXQoX19weXhfdl9mb3JtYXQpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09j Y3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDk4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3Rf MSA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9mb3JtYXQoX19w eXhfdl9mb3JtYXQpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIo MCwgNTAwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4X3Zfbm9kZS5mb3JtYXQgPSBfX3B5eF90 XzE7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk5CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTAxCisgICogICAgICAgICBjZGVmIG1wdl9u b2RlIG5vZGUKKyAgKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0CisgICogICAgICAgICBp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAgICAgICAgICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUpCisgICogICAgICAgICAg ICAgbm9kZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpCisgICovCist ICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1B VF9TVFJJTkcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0OTksIF9f cHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZf Zm9ybWF0KE1QVl9GT1JNQVRfU1RSSU5HKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgNTAxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIp OworLSAgX19weXhfdF8zID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9f cHl4X3RfMiwgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ5OSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90 XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X2Zvcm1hdCwgX19weXhfdF8yLCBQeV9F USk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBf X1BZWF9FUlIoMCwgNTAxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVl KF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDQ5 OSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUo X19weXhfdF8zKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTAx LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMg PSAwOworICAgaWYgKF9fcHl4X3RfNCkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTAwCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 MDIKKyAgKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0CisgICogICAgICAgICBpZiBmb3Jt YXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CisgICogICAgICAgICAgICAgdmFsdWUgPSBfc3RyZW5j KHZhbHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgbm9k ZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpCisgICogICAgICAgICAg ICAgc3RyY3B5KG5vZGUudS5zdHJpbmcsIHZhbHVlKQorICAqLworLSAgICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUwMCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTAyLCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICAgIF9fcHl4X3RfNSA9IE5VTEw7CisgICAg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19w eXhfdF8yKSkpIHsKK0BAIC05Nzk1LDMzICs5Nzk1LDMzIEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25v ZGUgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3Zh bHVlCisgICAgIH0KKyAgICAgX19weXhfdF8zID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVj dF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzUsIF9fcHl4X3ZfdmFsdWUpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfdmFsdWUpOworICAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CistICAgIGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUwMCwgX19weXhfTDFfZXJyb3IpCisrICAgIGlmICh1 bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUwMiwgX19weXhfTDFfZXJyb3IpCisg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKKyAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3ZhbHVlLCBf X3B5eF90XzMpOworICAgICBfX3B5eF90XzMgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTAxCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1MDMKKyAgKiAgICAgICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKyAg KiAgICAgICAgICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUpCisgICogICAgICAgICAgICAgbm9k ZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBzdHJjcHkobm9kZS51LnN0cmluZywgdmFs dWUpCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CisgICovCist ICAgIF9fcHl4X3RfNiA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlr ZWx5KF9fcHl4X3RfNiA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDUwMSwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNiA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X3Zh bHVlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhf RVJSKDAsIDUwMywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fcHl4X3Zfbm9kZS51LnN0cmluZyA9 ICgoY2hhciAqKW1hbGxvYygoX19weXhfdF82ICsgMSkpKTsKKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjUwMgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTA0CisgICogICAgICAgICAgICAgdmFsdWUgPSBfc3RyZW5jKHZhbHVlKQorICAq ICAgICAgICAgICAgIG5vZGUudS5zdHJpbmcgPSA8Y2hhcio+bWFsbG9jKGxlbih2YWx1ZSkgKyAx KQorICAqICAgICAgICAgICAgIHN0cmNweShub2RlLnUuc3RyaW5nLCB2YWx1ZSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1B VF9GTEFHOgorICAqICAgICAgICAgICAgIG5vZGUudS5mbGFnID0gMSBpZiB2YWx1ZSBlbHNlIDAK KyAgKi8KKy0gICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl92 YWx1ZSk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNykgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9f UFlYX0VSUigwLCA1MDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzcgPSBfX1B5eF9Q eU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF83 KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDUwNCwgX19weXhfTDFfZXJyb3Ip CisgICAgICh2b2lkKShzdHJjcHkoX19weXhfdl9ub2RlLnUuc3RyaW5nLCBfX3B5eF90XzcpKTsK KyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5OQorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTAxCisgICogICAgICAgICBjZGVmIG1wdl9u b2RlIG5vZGUKKyAgKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0CisgICogICAgICAgICBp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC05ODMxLDI5ICs5ODMxLDI5IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGUgX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVlCisgICAg IGdvdG8gX19weXhfTDM7CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTAzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA1CisgICog ICAgICAgICAgICAgbm9kZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEp CisgICogICAgICAgICAgICAgc3RyY3B5KG5vZGUudS5zdHJpbmcsIHZhbHVlKQorICAqICAgICAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisgICogICAgICAgICAgICAgbm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVsc2UgMAor ICAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKyAgKi8KKy0gIF9f cHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX0ZM QUcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA1MDMsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0 KE1QVl9GT1JNQVRfRkxBRyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDUwNSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9f cHl4X3RfMiA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfZm9ybWF0LCBfX3B5eF90XzMs IFB5X0VRKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCA1MDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gUHlP YmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMywgUHlfRVEpOyBfX1B5 eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDUwNSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19w eXhfdF8zID0gMDsKKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90 XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF80IDwgMCkpIF9fUFlYX0VSUigwLCA1MDMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Rf Mik7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwNSwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAg IGlmIChfX3B5eF90XzQpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjUwNAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA2CisgICog ICAgICAgICAgICAgc3RyY3B5KG5vZGUudS5zdHJpbmcsIHZhbHVlKQorICAqICAgICAgICAgZWxp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgorICAqICAgICAgICAgICAgIG5vZGUudS5mbGFn ID0gMSBpZiB2YWx1ZSBlbHNlIDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAg ICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKyAgKiAgICAgICAgICAgICBu b2RlLnUuaW50NjQgPSB2YWx1ZQorICAqLworLSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVj dF9Jc1RydWUoX19weXhfdl92YWx1ZSk7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19Q WVhfRVJSKDAsIDUwNCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5 T2JqZWN0X0lzVHJ1ZShfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDAp KSBfX1BZWF9FUlIoMCwgNTA2LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgaWYgKF9fcHl4X3RfNCkg eworICAgICAgIF9fcHl4X3RfOCA9IDE7CisgICAgIH0gZWxzZSB7CitAQCAtOTg2MSw3ICs5ODYx LDcgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF9fcHJlcF9uYXRpdmVfdmFsdWUKKyAgICAgfQorICAgICBfX3B5eF92X25vZGUu dS5mbGFnID0gX19weXhfdF84OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTAzCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDUKKyAg KiAgICAgICAgICAgICBub2RlLnUuc3RyaW5nID0gPGNoYXIqPm1hbGxvYyhsZW4odmFsdWUpICsg MSkKKyAgKiAgICAgICAgICAgICBzdHJjcHkobm9kZS51LnN0cmluZywgdmFsdWUpCisgICogICAg ICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC05ODcxLDMyICs5ODcxLDMyIEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGUg X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVl CisgICAgIGdvdG8gX19weXhfTDM7CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTA1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA3 CisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CisgICogICAgICAg ICAgICAgbm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVsc2UgMAorICAqICAgICAgICAgZWxpZiBm b3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor ICAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZhbHVlCisgICogICAgICAgICBlbGlmIGZv cm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX0lOVDY0KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTA1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX0lOVDY0 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTA3LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gUHlPYmpl Y3RfUmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMiwgUHlfRVEpOyBfX1B5eF9Y R09UUkVGKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDUwNSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFy ZShfX3B5eF92X2Zvcm1hdCwgX19weXhfdF8yLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhf dF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTA3LCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAg X19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2Vs eShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwNSwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTA3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworICAgaWYgKF9fcHl4X3RfNCkg eworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA2CisrICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDgKKyAgKiAgICAgICAgICAgICBub2Rl LnUuZmxhZyA9IDEgaWYgdmFsdWUgZWxzZSAwCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX0lOVDY0OgorICAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZhbHVlICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1Q Vl9GT1JNQVRfRE9VQkxFOgorICAqICAgICAgICAgICAgIG5vZGUudS5kb3VibGVfID0gdmFsdWUK KyAgKi8KKy0gICAgX19weXhfdF85ID0gX19QeXhfUHlJbnRfQXNfaW50NjRfdChfX3B5eF92X3Zh bHVlKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzkgPT0gKChpbnQ2NF90KS0xKSkgJiYgUHlFcnJf T2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA1MDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5 eF90XzkgPSBfX1B5eF9QeUludF9Bc19pbnQ2NF90KF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtl bHkoKF9fcHl4X3RfOSA9PSAoKGludDY0X3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19Q WVhfRVJSKDAsIDUwOCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fcHl4X3Zfbm9kZS51LmludDY0 ID0gX19weXhfdF85OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTA1CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDcKKyAgKiAgICAg ICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzoKKyAgKiAgICAgICAgICAgICBub2Rl LnUuZmxhZyA9IDEgaWYgdmFsdWUgZWxzZSAwCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX0lOVDY0OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTkwNiwz MiArOTkwNiwzMiBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQorICAgICBnb3RvIF9fcHl4X0wz OworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwNworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwOQorICAqICAgICAgICAgZWxpZiBm b3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKyAgKiAgICAgICAgICAgICBub2RlLnUuaW50NjQg PSB2YWx1ZQorICAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBub2RlLnUuZG91Ymxl XyA9IHZhbHVlCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJS QVk6CisgICovCistICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3Jt YXQoTVBWX0ZPUk1BVF9ET1VCTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigwLCA1MDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfRE9VQkxFKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzMpKSBfX1BZWF9FUlIoMCwgNTA5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzMpOworLSAgX19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhf dl9mb3JtYXQsIF9fcHl4X3RfMywgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUwNywgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzIgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X2Zvcm1hdCwgX19w eXhfdF8zLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTA5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgX19weXhfdF80ID0gX19QeXhfUHlP YmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19Q WVhfRVJSKDAsIDUwNywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBfX1B5eF9QeU9i amVjdF9Jc1RydWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZ WF9FUlIoMCwgNTA5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworICAgaWYgKF9fcHl4X3RfNCkgeworIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA4CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo1MTAKKyAgKiAgICAgICAgICAgICBub2RlLnUuaW50NjQgPSB2YWx1ZQorICAq ICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisgICogICAgICAgICAg ICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisg ICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6CisgICogICAg ICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbGlzdCh2YWx1ZSkKKyAgKi8K Ky0gICAgX19weXhfdF8xMCA9IF9fcHl4X1B5RmxvYXRfQXNEb3VibGUoX19weXhfdl92YWx1ZSk7 IGlmICh1bmxpa2VseSgoX19weXhfdF8xMCA9PSAoZG91YmxlKS0xKSAmJiBQeUVycl9PY2N1cnJl ZCgpKSkgX19QWVhfRVJSKDAsIDUwOCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMTAg PSBfX3B5eF9QeUZsb2F0X0FzRG91YmxlKF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtlbHkoKF9f cHl4X3RfMTAgPT0gKGRvdWJsZSktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigw LCA1MTAsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX3B5eF92X25vZGUudS5kb3VibGVfID0gX19w eXhfdF8xMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwNwor KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA5CisgICogICAgICAgICBl bGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorICAqICAgICAgICAgICAgIG5vZGUudS5p bnQ2NCA9IHZhbHVlCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJM RTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTk5NDEsMjIgKzk5NDEsMjIgQEAg c3RhdGljIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF9fcHJlcF9uYXRpdmVfdmFsdWUKKyAgICAgZ290byBfX3B5eF9MMzsKKyAgIH0KKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDkKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1MTEKKyAgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9G T1JNQVRfRE9VQkxFOgorICAqICAgICAgICAgICAgIG5vZGUudS5kb3VibGVfID0gdmFsdWUKKyAg KiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5f cHJlcF9ub2RlX2xpc3QodmFsdWUpCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX05PREVfTUFQOgorICAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9lbnVt X19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfTk9ERV9BUlJBWSk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDUwOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBf X1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gUHlPYmplY3Rf UmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMiwgUHlfRVEpOyBfX1B5eF9YR09U UkVGKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUw OSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShf X3B5eF92X2Zvcm1hdCwgX19weXhfdF8yLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8z KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19w eXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShf X3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KF9f cHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworICAgaWYgKF9fcHl4X3RfNCkgewor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTEwCisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTIKKyAgKiAgICAgICAgICAgICBub2RlLnUu ZG91YmxlXyA9IHZhbHVlCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05P REVfQVJSQVk6CisgICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVf bGlzdCh2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTk5NjUsNyArOTk2 NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGUgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVlCisgICovCisgICAgIF9fcHl4X3Zfbm9kZS51 Lmxpc3QgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbm9kZV9saXN0KF9fcHl4 X3Zfc2VsZiwgX19weXhfdl92YWx1ZSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo1MDkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUx MQorICAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisgICogICAg ICAgICAgICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQorICAqICAgICAgICAgZWxpZiBmb3JtYXQg PT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtOTk3NSwyMiArOTk3NSwyMiBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQorICAgICBnb3Rv IF9fcHl4X0wzOworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjUxMQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxMworICAqICAgICAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorICAqICAgICAgICAgICAg IG5vZGUudS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QodmFsdWUpCisgICogICAgICAgICBl bGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisgICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbWFw KHZhbHVlKQorICAqICAgICAgICAgZWxzZToKKyAgKi8KKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX05PREVfTUFQKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX05P REVfTUFQKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTEzLCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgX19weXhfdF8yID0g UHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMywgUHlfRVEpOyBf X1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDAsIDUxMSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBQeU9iamVjdF9SaWNo Q29tcGFyZShfX3B5eF92X2Zvcm1hdCwgX19weXhfdF8zLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYo X19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTEzLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAw OworLSAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlmICh1 bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUxMSwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8yKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTEzLCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgaWYgKF9fcHl4 X3RfNCkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTEyCisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTQKKyAgKiAgICAgICAgICAg ICBub2RlLnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0KHZhbHVlKQorICAqICAgICAgICAg ZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKyAgKiAgICAgICAgICAgICBub2Rl LnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9tYXAodmFsdWUpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC05OTk5LDcgKzk5OTksNyBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9f cHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQor ICAqLworICAgICBfX3B5eF92X25vZGUudS5saXN0ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVj dF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRh YiktPl9wcmVwX25vZGVfbWFwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92YWx1ZSk7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTEKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjUxMworICAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBW X0ZPUk1BVF9OT0RFX0FSUkFZOgorICAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5f cHJlcF9ub2RlX2xpc3QodmFsdWUpCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTAwMDksNyAr MTAwMDksNyBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQorICAgICBnb3RvIF9fcHl4X0wzOwor ICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxNAorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxNgorICAqICAgICAgICAgICAgIG5vZGUu dS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX21hcCh2YWx1ZSkKKyAgKiAgICAgICAgIGVsc2U6Cisg ICogICAgICAgICAgICAgbm9kZS5mb3JtYXQgPSBNUFZfRk9STUFUX05PTkUgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTEwMDIxLDcgKzEwMDIxLDcgQEAgc3RhdGljIHN0cnVjdCBt cHZfbm9kZSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9uYXRp dmVfdmFsdWUKKyAgIH0KKyAgIF9fcHl4X0wzOjsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1MTUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 MTcKKyAgKiAgICAgICAgIGVsc2U6CisgICogICAgICAgICAgICAgbm9kZS5mb3JtYXQgPSBNUFZf Rk9STUFUX05PTkUKKyAgKiAgICAgICAgIHJldHVybiBub2RlICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC0xMDAzMSw3ICsxMDAzMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGUg X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVl CisgICBfX3B5eF9yID0gX19weXhfdl9ub2RlOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTYKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0OTgKKyAgKiAgICAgICAgIHJldHVybiBsaXN0CisgICogCisgICog ICAgIGNkZWYgbXB2X25vZGUgX3ByZXBfbmF0aXZlX3ZhbHVlKHNlbGYsIHZhbHVlLCBmb3JtYXQp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTAwNTIsNyArMTAwNTIsNyBAQCBz dGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTcKKysvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTE5CisgICogICAgICAgICByZXR1cm4gbm9kZQorICAqIAorICAqICAgICBj ZGVmIF9mcmVlX25hdGl2ZV92YWx1ZShzZWxmLCBtcHZfbm9kZSBub2RlKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTEwMDc0LDcgKzEwMDc0LDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFs dWUoc3RydWMKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfZnJlZV9uYXRpdmVfdmFsdWUiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1MTgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1MjAKKyAgKiAKKyAgKiAgICAgY2RlZiBfZnJlZV9uYXRpdmVfdmFsdWUoc2VsZiwgbXB2 X25vZGUgbm9kZSk6CisgICogICAgICAgICBpZiBub2RlLmZvcm1hdCBpbiAoTVBWX0ZPUk1BVF9O T0RFX0FSUkFZLCBNUFZfRk9STUFUX05PREVfTUFQKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTEwMDg1LDcgKzEwMDg1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKKyAg ICAgY2FzZSBNUFZfRk9STUFUX05PREVfQVJSQVk6CisgICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RF X01BUDoKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxOQorKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTIxCisgICogICAgIGNkZWYgX2Zy ZWVfbmF0aXZlX3ZhbHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOgorICAqICAgICAgICAgaWYgbm9k ZS5mb3JtYXQgaW4gKE1QVl9GT1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6 CisgICogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEwMDk3LDE5ICsxMDA5NywxOSBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19mcmVlX25h dGl2ZV92YWx1ZShzdHJ1YworICAgICBmb3IgKF9fcHl4X3RfMyA9IDA7IF9fcHl4X3RfMyA8IF9f cHl4X3RfMjsgX19weXhfdF8zKz0xKSB7CisgICAgICAgX19weXhfdl9pID0gX19weXhfdF8zOwor IAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjAKKysgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTIyCisgICogICAgICAgICBpZiBub2Rl LmZvcm1hdCBpbiAoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBNUFZfRk9STUFUX05PREVfTUFQKToK KyAgKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOgorICAqICAg ICAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlLnUubGlzdC52YWx1ZXNb aV0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBmcmVlKG5v ZGUudS5saXN0LnZhbHVlcykKKyAgKiAgICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZf Rk9STUFUX05PREVfTUFQOgorICAqLworLSAgICAgIF9fcHl4X3RfNCA9ICgoc3RydWN0IF9fcHl4 X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYt Pl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCAoX19weXhfdl9u b2RlLnUubGlzdC0+dmFsdWVzW19fcHl4X3ZfaV0pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgNTIwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX3B5eF90XzQgPSAo KHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICop X19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2Vs ZiwgKF9fcHl4X3Zfbm9kZS51Lmxpc3QtPnZhbHVlc1tfX3B5eF92X2ldKSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDUyMiwgX19weXhfTDFfZXJyb3IpCisgICAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7 IF9fcHl4X3RfNCA9IDA7CisgICAgIH0KKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjUyMQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTIz CisgICogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKKyAgKiAg ICAgICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZS51Lmxpc3QudmFsdWVz W2ldKQorICAqICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3QudmFsdWVzKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTAxMTgsNyArMTAxMTgsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19mcmVlX25hdGl2ZV92 YWx1ZShzdHJ1YworICAqLworICAgICBmcmVlKF9fcHl4X3Zfbm9kZS51Lmxpc3QtPnZhbHVlcyk7 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjIKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyNAorICAqICAgICAgICAgICAgICAgICBz ZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlLnUubGlzdC52YWx1ZXNbaV0pCisgICogICAgICAg ICAgICAgZnJlZShub2RlLnUubGlzdC52YWx1ZXMpCisgICogICAgICAgICAgICAgaWYgbm9kZS5m b3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTEwMTI4LDcgKzEwMTI4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKKyAgICAg X19weXhfdF81ID0gKChfX3B5eF92X25vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVAp ICE9IDApOworICAgICBpZiAoX19weXhfdF81KSB7CisgCistICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjUyMworKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1MjUKKyAgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LnZhbHVlcykKKyAg KiAgICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorICAq ICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTAxNDAsNyArMTAxNDAsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19mcmVlX25hdGl2 ZV92YWx1ZShzdHJ1YworICAgICAgIGZvciAoX19weXhfdF8zID0gMDsgX19weXhfdF8zIDwgX19w eXhfdF8yOyBfX3B5eF90XzMrPTEpIHsKKyAgICAgICAgIF9fcHl4X3ZfaSA9IF9fcHl4X3RfMzsK KyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjQKKysgICAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjYKKyAgKiAgICAgICAgICAg ICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorICAqICAgICAgICAgICAg ICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOgorICAqICAgICAgICAgICAgICAg ICAgICAgZnJlZShub2RlLnUubGlzdC5rZXlzW2ldKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtMTAxNTAsNyArMTAxNTAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19mcmVlX25hdGl2ZV92YWx1ZShzdHJ1YworICAg ICAgICAgZnJlZSgoX19weXhfdl9ub2RlLnUubGlzdC0+a2V5c1tfX3B5eF92X2ldKSk7CisgICAg ICAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjUKKysg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTI3CisgICogICAgICAgICAg ICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6CisgICogICAgICAgICAgICAg ICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXNbaV0pCisgICogICAgICAgICAgICAgICAgIGZy ZWUobm9kZS51Lmxpc3Qua2V5cykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEw MTU5LDcgKzEwMTU5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKKyAgKi8KKyAgICAgICBm cmVlKF9fcHl4X3Zfbm9kZS51Lmxpc3QtPmtleXMpOworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1MjIKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTI0CisgICogICAgICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVl KG5vZGUudS5saXN0LnZhbHVlc1tpXSkKKyAgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0 LnZhbHVlcykKKyAgKiAgICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05P REVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTAxNjgsNyArMTAxNjgs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0X19mcmVlX25hdGl2ZV92YWx1ZShzdHJ1YworICAqLworICAgICB9CisgCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjYKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjUyOAorICAqICAgICAgICAgICAgICAgICAgICAgZnJlZShub2RlLnUu bGlzdC5rZXlzW2ldKQorICAqICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXMp CisgICogICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTEwMTc3LDcgKzEwMTc3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMK KyAgKi8KKyAgICAgZnJlZShfX3B5eF92X25vZGUudS5saXN0KTsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxOAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTIwCisgICogCisgICogICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3ZhbHVlKHNl bGYsIG1wdl9ub2RlIG5vZGUpOgorICAqICAgICAgICAgaWYgbm9kZS5mb3JtYXQgaW4gKE1QVl9G T1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC0xMDE4Nyw3ICsxMDE4Nyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX2ZyZWVfbmF0aXZlX3ZhbHVlKHN0 cnVjCisgICAgIGJyZWFrOworICAgICBjYXNlIE1QVl9GT1JNQVRfU1RSSU5HOgorIAorLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTI4CisrICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1MzAKKyAgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0 KQorICAqICAgICAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKyAg KiAgICAgICAgICAgICBmcmVlKG5vZGUudS5zdHJpbmcpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0xMDE5Niw3ICsxMDE5Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX2ZyZWVfbmF0aXZlX3ZhbHVlKHN0cnVjCisg ICovCisgICAgIGZyZWUoX19weXhfdl9ub2RlLnUuc3RyaW5nKTsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyNworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTI5CisgICogICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5 cykKKyAgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0KQorICAqICAgICAgICAgZWxpZiBu b2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTEwMjA3LDcgKzEwMjA3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKKyAg ICAgZGVmYXVsdDogYnJlYWs7CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTE3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTE5Cisg ICogICAgICAgICByZXR1cm4gbm9kZQorICAqIAorICAqICAgICBjZGVmIF9mcmVlX25hdGl2ZV92 YWx1ZShzZWxmLCBtcHZfbm9kZSBub2RlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTEwMjI4LDcgKzEwMjI4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKKyAgIHJldHVy biBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTMw CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUzMgorICAqICAgICAgICAgICAg IGZyZWUobm9kZS51LnN0cmluZykKKyAgKiAKKyAgKiAgICAgZGVmIGNvbW1hbmQoc2VsZiwgKmNt ZGxpc3QsIGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTEwMjgwLDcgKzEwMjgwLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOWNvbW1hbmQoUHlPYmplY3QgKl9f cHkKKyAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAw KSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3Jkcyhf X3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIDAsICJjb21tYW5kIikgPCAw KSkgX19QWVhfRVJSKDAsIDUzMCwgX19weXhfTDNfZXJyb3IpCisrICAgICAgICBpZiAodW5saWtl bHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFt ZXMsIDAsIHZhbHVlcywgMCwgImNvbW1hbmQiKSA8IDApKSBfX1BZWF9FUlIoMCwgNTMyLCBfX3B5 eF9MM19lcnJvcikKKyAgICAgICB9CisgICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShf X3B5eF9hcmdzKSA8IDApIHsKKyAgICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwor QEAgLTEwMjkxLDcgKzEwMjkxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOWNvbW1hbmQoUHlPYmplY3QgKl9fcHkKKyAgIH0KKyAg IGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CisgICBfX3B5eF9MNV9hcmd0 dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiY29tbWFuZCIsIDAs IDAsIDAsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNTMwLCBf X3B5eF9MM19lcnJvcikKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJjb21tYW5kIiwg MCwgMCwgMCwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA1MzIs IF9fcHl4X0wzX2Vycm9yKQorICAgX19weXhfTDNfZXJyb3I6OworICAgX19QeXhfREVDUkVGKF9f cHl4X3ZfY21kbGlzdCk7IF9fcHl4X3ZfY21kbGlzdCA9IDA7CisgICBfX1B5eF9BZGRUcmFjZWJh Y2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmNvbW1hbmQiLCBfX3B5eF9jbGluZW5vLCBf X3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKK0BAIC0xMDMzOCw3ICsxMDMzOCw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhj b21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiY29tbWFuZCIsIDApOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjU0NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjU0NgorICAqICAgICAgICAgV3JhcHM6IG1wdl9jb21tYW5kX25vZGUgYW5kIG1wdl9j b21tYW5kX25vZGVfYXN5bmMKKyAgKiAgICAgICAgICIiIgorICAqICAgICAgICAgYXNzZXJ0IHNl bGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTAzNDksMTkgKzEwMzQ5 LDE5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICBpZiAodW5saWtlbHkoIVB5X09wdGlt aXplRmxhZykpIHsKKyAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDAp KSkgeworICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAg IF9fUFlYX0VSUigwLCA1NDQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA1 NDYsIF9fcHl4X0wxX2Vycm9yKQorICAgICB9CisgICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NDUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1NDcKKyAgKiAgICAgICAgICIiIgorICAqICAgICAgICAgYXNzZXJ0IHNl bGYuX2N0eAorICAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlID0gc2VsZi5fcHJlcF9uYXRp dmVfdmFsdWUoY21kbGlzdCwgc2VsZi5fZm9ybWF0X2ZvcihjbWRsaXN0KSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlcmVzdWx0Cisg ICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2Jq ZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19mb3Jt YXRfZm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTQ1LCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQ eU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19mb3JtYXRfZm9yKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTQ3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgX19weXhfdF8zID0gTlVMTDsKKyAgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7 CitAQCAtMTAzNzUsMTMgKzEwMzc1LDEzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICB9 CisgICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhf X3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl9jbWRsaXN0KSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X2NtZGxpc3QpOworICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgNTQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDU0NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor ICAgX19weXhfdl9ub2RlID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9wcmVwX25hdGl2 ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3ZfY21kbGlzdCwgX19weXhfdF8xKTsKKyAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjU0OQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjU1MQorICAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICogICAgICAgICBjZGVmIHVp bnQ2NF90IGRhdGFfaWQKKyAgKiAgICAgICAgIHJlc3VsdCA9IE5vbmUgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTEwMzkxLDcgKzEwMzkxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9f cHl4X28KKyAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKyAgIF9fcHl4X3ZfcmVzdWx0ID0gUHlf Tm9uZTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTAKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTIKKyAgKiAgICAgICAgIGNkZWYgdWlu dDY0X3QgZGF0YV9pZAorICAqICAgICAgICAgcmVzdWx0ID0gTm9uZQorICAqICAgICAgICAgdHJ5 OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA0MDAsMzEgKzEwNDAwLDMxIEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICovCisgICAvKnRyeToqLyB7CisgCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTEKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjU1MworICAqICAgICAgICAgcmVzdWx0ID0gTm9uZQorICAqICAg ICAgICAgdHJ5OgorICAqICAgICAgICAgICAgIGRhdGFfaWQgPSBpZChkYXRhKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czoK KyAgKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gICAgX19weXhfdF8xID0g X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF9idWlsdGluX2lkLCBfX3B5eF92X2RhdGEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NTEsIF9fcHl4X0w0X2Vy cm9yKQorKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1 aWx0aW5faWQsIF9fcHl4X3ZfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDU1MywgX19weXhfTDRfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEpOyBp ZiAodW5saWtlbHkoKF9fcHl4X3RfNCA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCA1NTEsIF9fcHl4X0w0X2Vycm9yKQorKyAgICBfX3B5eF90XzQg PSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4 X3RfNCA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigw LCA1NTMsIF9fcHl4X0w0X2Vycm9yKQorICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKKyAgICAgX19weXhfdl9kYXRhX2lkID0gX19weXhfdF80OworIAorLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTUyCisrICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1NTQKKyAgKiAgICAgICAgIHRyeToKKyAgKiAgICAgICAgICAg ICBkYXRhX2lkID0gaWQoZGF0YSkKKyAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3Vz OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgICAgIHdpdGgg bm9naWw6CisgICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlKHNl bGYuX2N0eCwgJm5vZGUsICZub2RlcmVzdWx0KQorICAqLworLSAgICBfX3B5eF90XzUgPSBfX1B5 eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9hc3luY2hyb25vdXMpOyBpZiAodW5saWtlbHkoX19w eXhfdF81IDwgMCkpIF9fUFlYX0VSUigwLCA1NTIsIF9fcHl4X0w0X2Vycm9yKQorKyAgICBfX3B5 eF90XzUgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9hc3luY2hyb25vdXMpOyBpZiAo dW5saWtlbHkoX19weXhfdF81IDwgMCkpIF9fUFlYX0VSUigwLCA1NTQsIF9fcHl4X0w0X2Vycm9y KQorICAgICBfX3B5eF90XzYgPSAoKCFfX3B5eF90XzUpICE9IDApOworICAgICBpZiAoX19weXhf dF82KSB7CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1Mwor KyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTUKKyAgKiAgICAgICAg ICAgICBkYXRhX2lkID0gaWQoZGF0YSkKKyAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9u b3VzOgorICAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CitAQCAtMTA0MzksNyArMTA0MzksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhf bworICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTQKKysgICAgICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU2CisgICogICAgICAgICAgICAgaWYg bm90IGFzeW5jaHJvbm91czoKKyAgKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAg ICAgICAgICAgICAgICAgICAgIGVyciA9IG1wdl9jb21tYW5kX25vZGUoc2VsZi5fY3R4LCAmbm9k ZSwgJm5vZGVyZXN1bHQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMDQ0OSw3 ICsxMDQ0OSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICAgICAgICAgICAgX19weXhf dl9lcnIgPSBtcHZfY29tbWFuZF9ub2RlKF9fcHl4X3Zfc2VsZi0+X2N0eCwgKCZfX3B5eF92X25v ZGUpLCAoJl9fcHl4X3Zfbm9kZXJlc3VsdCkpOworICAgICAgICAgICB9CisgCistICAgICAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTMKKysgICAgICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1NQorICAqICAgICAgICAgICAgIGRhdGFfaWQg PSBpZChkYXRhKQorICAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CisgICogICAg ICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xMDQ2OCw3ICsxMDQ2OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICAgICAgICAg IH0KKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjU1NQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTcKKyAgKiAg ICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICAgICAgICAgIGVyciA9 IG1wdl9jb21tYW5kX25vZGUoc2VsZi5fY3R4LCAmbm9kZSwgJm5vZGVyZXN1bHQpCisgICogICAg ICAgICAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEwNDc3 LDcgKzEwNDc3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4X28KKyAgKi8KKyAgICAgICAvKnRy eToqLyB7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU2 CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU4CisgICogICAg ICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlKHNlbGYuX2N0eCwgJm5vZGUs ICZub2RlcmVzdWx0KQorICAqICAgICAgICAgICAgICAgICB0cnk6CisgICogICAgICAgICAgICAg ICAgICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQpIGlmIGVyciA+ PSAwIGVsc2UgTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA0ODUsNyAr MTA0ODUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAqICAgICAgICAgICAgICAgICAg ICAgd2l0aCBub2dpbDoKKyAgKi8KKyAgICAgICAgIGlmICgoKF9fcHl4X3ZfZXJyID49IDApICE9 IDApKSB7CistICAgICAgICAgIF9fcHl4X3RfMiA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2X19jb252ZXJ0X25vZGVfdmFsdWUoX19weXhfdl9ub2RlcmVzdWx0KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTU2LCBfX3B5eF9MMTFfZXJyb3IpCisrICAgICAg ICAgIF9fcHl4X3RfMiA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25v ZGVfdmFsdWUoX19weXhfdl9ub2RlcmVzdWx0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgNTU4LCBfX3B5eF9MMTFfZXJyb3IpCisgICAgICAgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzIpOworICAgICAgICAgICBfX3B5eF90XzEgPSBfX3B5eF90XzI7CisgICAgICAg ICAgIF9fcHl4X3RfMiA9IDA7CitAQCAtMTA0OTcsNyArMTA0OTcsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1 Y3QgX19weXhfbworICAgICAgICAgX19weXhfdF8xID0gMDsKKyAgICAgICB9CisgCistICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1OAorKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjAKKyAgKiAgICAgICAgICAgICAgICAgICAgIHJlc3Vs dCA9IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZXJlc3VsdCkgaWYgZXJyID49IDAgZWxzZSBOb25l CisgICogICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICogICAgICAgICAgICAgICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA1MTQsNyArMTA1 MTQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAgICAgICAgICAgICAgI2VuZGlmCisg ICAgICAgICAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAgICAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTkKKysgICAgICAgICAgICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjU2MQorICAqICAgICAgICAgICAgICAgICBmaW5hbGx5Ogor ICAqICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICAgICAg ICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2RlcmVzdWx0KSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMTA1MjQsNyArMTA1MjQsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3Qg X19weXhfbworICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCgmX19weXhf dl9ub2RlcmVzdWx0KSk7CisgICAgICAgICAgICAgICB9CisgCistICAgICAgICAgICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU4CisrICAgICAgICAgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTYwCisgICogICAgICAgICAgICAgICAgICAgICBy ZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQpIGlmIGVyciA+PSAwIGVsc2Ug Tm9uZQorICAqICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAqICAgICAgICAgICAgICAgICAg ICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEwNTcwLDcg KzEwNTcwLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4X28KKyAgICAgICAgICAgICAgICAgI2Vu ZGlmCisgICAgICAgICAgICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgICAgICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU5CisrICAgICAgICAgICAgICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2MQorICAqICAgICAgICAgICAgICAg ICBmaW5hbGx5OgorICAqICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAg ICAgICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2RlcmVzdWx0KSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA1ODAsNyArMTA1ODAsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29t bWFuZChzdHJ1Y3QgX19weXhfbworICAgICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29u dGVudHMoKCZfX3B5eF92X25vZGVyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgfQorIAorLSAg ICAgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU4CisrICAg ICAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjAKKyAgKiAg ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZXJlc3Vs dCkgaWYgZXJyID49IDAgZWxzZSBOb25lCisgICogICAgICAgICAgICAgICAgIGZpbmFsbHk6Cisg ICogICAgICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTA2MTYsNyArMTA2MTYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbwor ICAgICAgICAgX19weXhfTDEyOjsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjU1MgorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1NTQKKyAgKiAgICAgICAgIHRyeToKKyAgKiAgICAgICAgICAgICBkYXRhX2lkID0g aWQoZGF0YSkKKyAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA2MjYsNyArMTA2MjYsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1 Y3QgX19weXhfbworICAgICAgIGdvdG8gX19weXhfTDY7CisgICAgIH0KKyAKKy0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2MQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTYzCisgICogICAgICAgICAgICAgICAgICAgICAgICAgbXB2X2ZyZWVf bm9kZV9jb250ZW50cygmbm9kZXJlc3VsdCkKKyAgKiAgICAgICAgICAgICBlbHNlOgorICAqICAg ICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lk LCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA2MzQsOSArMTA2MzQs OSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAqICAgICAgICAgICAgICAgICAgICAgX3Jl cGx5X3VzZXJkYXRhc1tkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEp CisgICovCisgICAgIC8qZWxzZSovIHsKKy0gICAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X25fc19nZXQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1NjEsIF9fcHl4X0w0X2Vy cm9yKQorKyAgICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhf dl9zZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDU2MywgX19weXhfTDRfZXJyb3IpCisgICAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7CistICAgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV91 aW50NjRfdChfX3B5eF92X2RhdGFfaWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlY X0VSUigwLCA1NjEsIF9fcHl4X0w0X2Vycm9yKQorKyAgICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5 SW50X0Zyb21fdWludDY0X3QoX19weXhfdl9kYXRhX2lkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMCwgNTYzLCBfX3B5eF9MNF9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8zKTsKKyAgICAgICBfX3B5eF90XzE2ID0gTlVMTDsKKyAgICAgICBfX3B5eF90 XzggPSAwOworQEAgLTEwNjUzLDcgKzEwNjUzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4X28K KyAgICAgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCisgICAgICAgaWYgKFB5RnVuY3Rpb25fQ2hl Y2soX19weXhfdF8yKSkgeworICAgICAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19w eXhfdF8xNiwgX19weXhfdF8zLCBQeV9Ob25lfTsKKy0gICAgICAgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5RnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8yLCBfX3B5eF90ZW1wKzEtX19weXhfdF84LCAy K19fcHl4X3RfOCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU2MSwg X19weXhfTDRfZXJyb3IpCisrICAgICAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zh c3RDYWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3RfOCwgMitfX3B5eF90XzgpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NjMsIF9fcHl4X0w0X2Vycm9y KQorICAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE2KTsgX19weXhfdF8xNiA9IDA7Cisg ICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworQEAgLTEwNjYyLDE0ICsxMDY2MiwxNCBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29t bWFuZChzdHJ1Y3QgX19weXhfbworICAgICAgICNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCisgICAg ICAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzIpKSB7CisgICAgICAg ICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzE2LCBfX3B5eF90XzMsIFB5X05v bmV9OworLSAgICAgICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19w eXhfdF8yLCBfX3B5eF90ZW1wKzEtX19weXhfdF84LCAyK19fcHl4X3RfOCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU2MSwgX19weXhfTDRfZXJyb3IpCisrICAgICAg ICBfX3B5eF90XzEgPSBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzIsIF9fcHl4 X3RlbXArMS1fX3B5eF90XzgsIDIrX19weXhfdF84KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgNTYzLCBfX3B5eF9MNF9lcnJvcikKKyAgICAgICAgIF9fUHl4X1hERUNS RUYoX19weXhfdF8xNik7IF9fcHl4X3RfMTYgPSAwOworICAgICAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CisgICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKKyAgICAgICB9IGVsc2UKKyAgICAgICAjZW5kaWYKKyAgICAgICB7CistICAgICAgICBfX3B5 eF90XzE3ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MTcpKSBfX1BZWF9FUlIoMCwgNTYxLCBfX3B5eF9MNF9lcnJvcikKKysgICAgICAgIF9fcHl4X3Rf MTcgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfOCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xNykp IF9fUFlYX0VSUigwLCA1NjMsIF9fcHl4X0w0X2Vycm9yKQorICAgICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMTcpOworICAgICAgICAgaWYgKF9fcHl4X3RfMTYpIHsKKyAgICAgICAgICAgX19Q eXhfR0lWRVJFRihfX3B5eF90XzE2KTsgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzE3LCAwLCBf X3B5eF90XzE2KTsgX19weXhfdF8xNiA9IE5VTEw7CitAQCAtMTA2ODAsNyArMTA2ODAsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84 Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAgICAgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsK KyAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xNywgMStfX3B5eF90XzgsIFB5X05v bmUpOworICAgICAgICAgX19weXhfdF8zID0gMDsKKy0gICAgICAgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90XzE3LCBOVUxMKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTYxLCBfX3B5eF9MNF9lcnJvcikKKysgICAgICAg IF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90XzE3LCBO VUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTYzLCBfX3B5eF9M NF9lcnJvcikKKyAgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICAgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMTcpOyBfX3B5eF90XzE3ID0gMDsKKyAgICAgICB9CitAQCAtMTA2 ODgsNyArMTA2ODgsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAgICAgIF9fcHl4X3Zf dXNlcmRhdGFzID0gX19weXhfdF8xOworICAgICAgIF9fcHl4X3RfMSA9IDA7CisgCistICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2MgorKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjQKKyAgKiAgICAgICAgICAgICBlbHNlOgorICAqICAg ICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lk LCBOb25lKQorICAqICAgICAgICAgICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEwNjk5LDE0ICsxMDY5OSwxNCBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFu ZChzdHJ1Y3QgX19weXhfbworICAgICAgIF9fcHl4X3RfNSA9IChfX3B5eF90XzYgIT0gMCk7Cisg ICAgICAgaWYgKF9fcHl4X3RfNSkgeworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjU2MworKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjU2NQorICAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJk YXRhLmdldChkYXRhX2lkLCBOb25lKQorICAqICAgICAgICAgICAgICAgICBpZiB1c2VyZGF0YXMg aXMgTm9uZToKKyAgKiAgICAgICAgICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0YXNbZGF0YV9p ZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorICAqICAgICAg ICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgICAgICAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19SZXBseVVzZXJEYXRhKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTYzLCBfX3B5eF9MNF9lcnJvcikKKysgICAgICAg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfUmVwbHlVc2Vy RGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU2NSwgX19weXhf TDRfZXJyb3IpCisgICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgICAgIF9f cHl4X3RfMTcgPSBOVUxMOworICAgICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1 bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAgLTEwNzIwLDE1ICsxMDcy MCwxNSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAgICAgICAgfQorICAgICAgICAgX19w eXhfdF8xID0gKF9fcHl4X3RfMTcpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf MiwgX19weXhfdF8xNywgX19weXhfdl9kYXRhKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8yLCBfX3B5eF92X2RhdGEpOworICAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzE3KTsgX19weXhfdF8xNyA9IDA7CistICAgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCA1NjMsIF9fcHl4X0w0X2Vycm9yKQorKyAgICAgICAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTY1LCBfX3B5eF9MNF9lcnJvcikKKyAgICAgICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Mik7IF9fcHl4X3RfMiA9IDA7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfU2V0SXRlbUlu dChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92 X2RhdGFfaWQsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0 X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA1NjMsIF9fcHl4X0w0X2Vycm9yKQorKyAg ICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcywgX19weXhfdl9kYXRhX2lkLCBfX3B5eF90XzEsIHVp bnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZ WF9FUlIoMCwgNTY1LCBfX3B5eF9MNF9lcnJvcikKKyAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzEpOworICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3VzZXJkYXRhcywgX19w eXhfdF8xKTsKKyAgICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2MgorKyAg ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2NAorICAqICAgICAgICAg ICAgIGVsc2U6CisgICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNl cmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCisgICogICAgICAgICAgICAgICAgIGlmIHVzZXJkYXRh cyBpcyBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA3MzcsMTQgKzEw NzM3LDE0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICovCisgICAgICAgfQorIAorLSAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjQKKysgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY2CisgICogICAgICAgICAgICAgICAgIGlmIHVz ZXJkYXRhcyBpcyBOb25lOgorICAqICAgICAgICAgICAgICAgICAgICAgX3JlcGx5X3VzZXJkYXRh c1tkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisgICogICAgICAg ICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisg ICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgICAgICAgICBl cnIgPSBtcHZfY29tbWFuZF9ub2RlX2FzeW5jKHNlbGYuX2N0eCwgZGF0YV9pZCwgJm5vZGUpCisg ICovCistICAgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92 X3VzZXJkYXRhcywgX19weXhfbl9zX2FkZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDU2NCwgX19weXhfTDRfZXJyb3IpCisrICAgICAgX19weXhfdF8yID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX2FkZCk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU2NiwgX19weXhfTDRfZXJyb3Ip CisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICAgICAgX19weXhfdF8xNyA9IE5V TEw7CisgICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2Rf Q2hlY2soX19weXhfdF8yKSkpIHsKK0BAIC0xMDc1OCwxMiArMTA3NTgsMTIgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQo c3RydWN0IF9fcHl4X28KKyAgICAgICB9CisgICAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfMTcp ID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMTcpIDogX19Q eXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7CisgICAgICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzE3KTsgX19weXhfdF8xNyA9IDA7CistICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNTY0LCBfX3B5eF9MNF9lcnJvcikKKysgICAgICBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NjYsIF9fcHl4X0w0X2Vycm9yKQorICAgICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjUK KysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY3CisgICogICAgICAg ICAgICAgICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1Jl cGx5VXNlckRhdGEoZGF0YSkKKyAgKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCisg ICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xMDc3OCw3ICsxMDc3OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICAg ICAgICAgICNlbmRpZgorICAgICAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2NgorKyAgICAgICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjgKKyAgKiAgICAgICAgICAgICAgICAgdXNlcmRh dGFzLmFkZCgpCisgICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAg ICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlX2FzeW5jKHNlbGYuX2N0eCwgZGF0YV9p ZCwgJm5vZGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMDc4OCw3ICsxMDc4 OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICAgICAgICAgICAgX19weXhfdl9lcnIg PSBtcHZfY29tbWFuZF9ub2RlX2FzeW5jKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9kYXRh X2lkLCAoJl9fcHl4X3Zfbm9kZSkpOworICAgICAgICAgICB9CisgCistICAgICAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjUKKysgICAgICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjU2NworICAqICAgICAgICAgICAgICAgICAgICAgX3JlcGx5 X3VzZXJkYXRhc1tkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisg ICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorICAqICAgICAgICAgICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA4MTAsNyArMTA4 MTAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAgICBfX3B5eF9MNjo7CisgICB9Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY4CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcwCisgICogICAgICAgICAgICAgICAgICAgICBlcnIg PSBtcHZfY29tbWFuZF9ub2RlX2FzeW5jKHNlbGYuX2N0eCwgZGF0YV9pZCwgJm5vZGUpCisgICog ICAgICAgICBmaW5hbGx5OgorICAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVl KG5vZGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMDgxOSw3ICsxMDgxOSw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICovCisgICAvKmZpbmFsbHk6Ki8geworICAg ICAvKm5vcm1hbCBleGl0OioveworLSAgICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9f cHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X25vZGUp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NjgsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJl ZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X25vZGUpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NzAsIF9fcHl4X0wxX2Vycm9yKQorICAgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworICAgICAgIGdvdG8gX19weXhfTDU7CitAQCAtMTA4NDQsNyArMTA4NDQs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhf dF8xMCk7CisgICAgICAgX19weXhfdF84ID0gX19weXhfbGluZW5vOyBfX3B5eF90XzcgPSBfX3B5 eF9jbGluZW5vOyBfX3B5eF90XzE4ID0gX19weXhfZmlsZW5hbWU7CisgICAgICAgeworLSAgICAg ICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92 YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfbm9kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDU2OCwgX19weXhfTDI2X2Vycm9yKQorKyAgICAgICAgX19weXhfdF8x ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92 X3NlbGYsIF9fcHl4X3Zfbm9kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDU3MCwgX19weXhfTDI2X2Vycm9yKQorICAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CisgICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAg ICAgICB9CitAQCAtMTA4NzcsNyArMTA4NzcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbwor ICAgICBfX3B5eF9MNTo7CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTY5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcxCisgICog ICAgICAgICBmaW5hbGx5OgorICAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVl KG5vZGUpCisgICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtMTA4ODcsMTYgKzEwODg3LDE2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisg ICBfX3B5eF90XzUgPSAoKF9fcHl4X3ZfZXJyIDwgMCkgIT0gMCk7CisgICBpZiAodW5saWtlbHko X19weXhfdF81KSkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTcwCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzIKKyAgKiAgICAg ICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlKQorICAqICAgICAgICAgaWYgZXJy IDwgMDoKKyAgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHJldHVybiByZXN1bHQKKyAgKiAKKyAgKi8KKy0g ICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19NUFZFcnJv cik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU3MCwgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9u X3NfTVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1NzIs IF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19w eXhfdF8xNyA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzE3KSkgX19QWVhfRVJSKDAsIDU3MCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9f cHl4X3RfMTcgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xNykpIF9fUFlYX0VSUigwLCA1NzIsIF9fcHl4X0wxX2Vycm9yKQorICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xNyk7CisgICAgIF9fcHl4X3RfMyA9IE5VTEw7CisgICAgIGlm IChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhf dF8yKSkpIHsKK0BAIC0xMDkxMSwxNCArMTA5MTEsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4 X28KKyAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFy Z3MoX19weXhfdF8yLCBfX3B5eF90XzMsIF9fcHl4X3RfMTcpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMTcpOworICAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzE3KTsgX19w eXhfdF8xNyA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDU3MCwgX19weXhfTDFfZXJyb3IpCisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDU3MiwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgICAg X19QeXhfUmFpc2UoX19weXhfdF8xLCAwLCAwLCAwKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fUFlYX0VSUigwLCA1NzAsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX1BZWF9FUlIoMCwgNTcyLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2OQorKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTcxCisgICogICAgICAgICBmaW5hbGx5OgorICAqICAgICAgICAg ICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKG5vZGUpCisgICogICAgICAgICBpZiBlcnIgPCAw OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA5MjcsNyArMTA5MjcsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84 Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjU3MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjU3MworICAqICAgICAgICAgaWYgZXJyIDwgMDoKKyAgKiAgICAgICAgICAgICByYWlzZSBN UFZFcnJvcihlcnIpCisgICogICAgICAgICByZXR1cm4gcmVzdWx0ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC0xMDkzOSw3ICsxMDkzOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5 eF9vCisgICBfX3B5eF9yID0gX19weXhfdl9yZXN1bHQ7CisgICBnb3RvIF9fcHl4X0wwOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUzMAorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjUzMgorICAqICAgICAgICAgICAgIGZyZWUobm9kZS51LnN0 cmluZykKKyAgKiAKKyAgKiAgICAgZGVmIGNvbW1hbmQoc2VsZiwgKmNtZGxpc3QsIGFzeW5jaHJv bm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTEwOTY0LDcgKzEwOTY0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4X28KKyAgIHJldHVybiBf X3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTc0Cisr LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU3NgorICAqIAorICAqICAgICBAX2Vy cm9ycworICAqICAgICBkZWYgZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9u ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTAxMiw3ICsxMTAxMiw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzExZ2V0X3Byb3BlcnR5X2FzeW5jKFB5CisgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGlm ICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9Q YXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFs dWVzLCBwb3NfYXJncywgImdldF9wcm9wZXJ0eV9hc3luYyIpIDwgMCkpIF9fUFlYX0VSUigwLCA1 NzQsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0 aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBv c19hcmdzLCAiZ2V0X3Byb3BlcnR5X2FzeW5jIikgPCAwKSkgX19QWVhfRVJSKDAsIDU3NiwgX19w eXhfTDNfZXJyb3IpCisgICAgICAgfQorICAgICB9IGVsc2UgeworICAgICAgIHN3aXRjaCAoUHlU dXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgeworQEAgLTExMDI4LDcgKzExMDI4LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTFn ZXRfcHJvcGVydHlfYXN5bmMoUHkKKyAgIH0KKyAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5w YWNraW5nX2RvbmU7CisgICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlz ZUFyZ3R1cGxlSW52YWxpZCgiZ2V0X3Byb3BlcnR5X2FzeW5jIiwgMCwgMSwgMiwgUHlUdXBsZV9H RVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4X0wzX2Vycm9yKQor KyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoImdldF9wcm9wZXJ0eV9hc3luYyIsIDAsIDEs IDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNTc2LCBfX3B5 eF9MM19lcnJvcikKKyAgIF9fcHl4X0wzX2Vycm9yOjsKKyAgIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuZ2V0X3Byb3BlcnR5X2FzeW5jIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKK0BAIC0xMTA2NCw3ICsxMTA2NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2Fz eW5jKHN0CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0X3Byb3BlcnR5X2FzeW5j IiwgMCk7CisgICBfX1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1ODUKKyAgKiAgICAgICAgIGRhdGE6IFZhbHVlIHRvIGJlIHBhc3NlZCBpbnRvIHRo ZSByZXBseV91c2VyZGF0YSBvZiB0aGUgcmVzcG9uc2UgZXZlbnQuCisgICogICAgICAgICBXcmFw czogbXB2X2dldF9wcm9wZXJ0eV9hc3luYyIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTEwNzUsMTkgKzExMDc1LDE5IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzEwZ2V0X3Byb3BlcnR5X2FzeW5jKHN0CisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxh ZykpIHsKKyAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewor ICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlY X0VSUigwLCA1ODMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA1ODUsIF9f cHl4X0wxX2Vycm9yKQorICAgICB9CisgICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1ODYKKyAgKiAgICAgICAgIFdyYXBzOiBtcHZfZ2V0X3Byb3BlcnR5X2FzeW5jIiIi CisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBwcm9wID0gX3N0cmVu Yyhwcm9wKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBjZGVmIHVp bnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorICAqICAgICAgICAgdXNlcmRh dGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKyAgKi8KKy0gIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTg0LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5j KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTg2LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgX19weXhfdF8zID0gTlVMTDsK KyAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF8yKSkpIHsKK0BAIC0xMTEwMSwzMiArMTExMDEsMzIgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlf YXN5bmMoc3QKKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmpl Y3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X3Byb3ApIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfcHJvcCk7CisgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCA1ODQsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTg2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7CisgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfcHJvcCwgX19weXhfdF8xKTsKKyAg IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTg1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTg3CisgICogICAgICAg ICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKQorICAq ICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5y ZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKyAgKiAgICAgICAgIGlmIHVzZXJkYXRh cyBpcyBOb25lOgorICAqLworLSAgX19weXhfdF80ID0gUHlPYmplY3RfSGFzaChfX3B5eF92X2Rh dGEpOyBpZiAodW5saWtlbHkoX19weXhfdF80ID09ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlYX0VS UigwLCA1ODUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF80ID0gUHlPYmplY3RfSGFzaChf X3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF80ID09ICgoUHlfaGFzaF90KS0xKSkp IF9fUFlYX0VSUigwLCA1ODcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfdl9pZF9kYXRhID0g KCh1aW50NjRfdClfX3B5eF90XzQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjU4NgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4OAorICAq ICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKyAgKiAgICAgICAgIGNkZWYgdWludDY0X3Qg aWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisgICogICAgICAgICB1c2VyZGF0YXMgPSBz ZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKKyAgKiAgICAgICAg ICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNl ckRhdGEoZGF0YSkKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU4NiwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlf dXNlcmRhdGEsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlY X0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7 CistICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfaWRfZGF0 YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDU4NiwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3Zf aWRfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDU4OCwgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgIF9fcHl4X3RfNSA9 IE5VTEw7CisgICBfX3B5eF90XzYgPSAwOworQEAgLTExMTQzLDcgKzExMTQzLDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRf cHJvcGVydHlfYXN5bmMoc3QKKyAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKyAgIGlmIChQeUZ1 bmN0aW9uX0NoZWNrKF9fcHl4X3RfMikpIHsKKyAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10g PSB7X19weXhfdF81LCBfX3B5eF90XzMsIFB5X05vbmV9OworLSAgICBfX3B5eF90XzEgPSBfX1B5 eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwg MitfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODYs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RD YWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQor ICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKK0BAIC0xMTE1MiwxNCArMTExNTIsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlfYXN5bmMo c3QKKyAgICNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCisgICBpZiAoX19QeXhfUHlGYXN0Q0Z1bmN0 aW9uX0NoZWNrKF9fcHl4X3RfMikpIHsKKyAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7 X19weXhfdF81LCBfX3B5eF90XzMsIFB5X05vbmV9OworLSAgICBfX3B5eF90XzEgPSBfX1B5eF9Q eUNGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5eF90XzYsIDIr X19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTg2LCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENh bGwoX19weXhfdF8yLCBfX3B5eF90ZW1wKzEtX19weXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU4OCwgX19weXhfTDFfZXJyb3IpCisg ICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKyAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworICAgfSBlbHNlCisgICAjZW5kaWYKKyAgIHsKKy0gICAgX19weXhfdF83ID0gUHlU dXBsZV9OZXcoMitfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VS UigwLCA1ODYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygy K19fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDU4OCwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworICAgICBpZiAo X19weXhfdF81KSB7CisgICAgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzUpOyBQeVR1cGxlX1NF VF9JVEVNKF9fcHl4X3RfNywgMCwgX19weXhfdF81KTsgX19weXhfdF81ID0gTlVMTDsKK0BAIC0x MTE3MCw3ICsxMTE3MCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2FzeW5jKHN0CisgICAgIF9fUHl4X0dJ VkVSRUYoUHlfTm9uZSk7CisgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4 X3RfNiwgUHlfTm9uZSk7CisgICAgIF9fcHl4X3RfMyA9IDA7CistICAgIF9fcHl4X3RfMSA9IF9f UHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMiwgX19weXhfdF83LCBOVUxM KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTg4LCBfX3B5eF9MMV9l cnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworICAgfQorQEAgLTExMTc4LDcgKzExMTc4LDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MTBnZXRfcHJvcGVydHlfYXN5bmMoc3QKKyAgIF9fcHl4X3ZfdXNlcmRhdGFzID0gX19weXhfdF8x OworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1ODcKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODkKKyAgKiAg ICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisgICog ICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25l KQorICAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC0xMTE4OSwxNCArMTExODksMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlfYXN5bmMo c3QKKyAgIF9fcHl4X3RfOSA9IChfX3B5eF90XzggIT0gMCk7CisgICBpZiAoX19weXhfdF85KSB7 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODgKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MAorICAqICAgICAgICAgdXNlcmRhdGFz ID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKyAgKiAgICAgICAgIGlm IHVzZXJkYXRhcyBpcyBOb25lOgorICAqICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFb aWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICB1c2VyZGF0YXMuYWRkKCkKKyAgKiAgICAgICAg IGNkZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcAorICAqLworLSAgICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX1JlcGx5VXNlckRhdGEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX1JlcGx5VXNl ckRhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1OTAsIF9fcHl4 X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19weXhfdF83 ID0gTlVMTDsKKyAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAgLTExMjEwLDE1ICsxMTIxMCwxNSBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMGdl dF9wcm9wZXJ0eV9hc3luYyhzdAorICAgICB9CisgICAgIF9fcHl4X3RfMSA9IChfX3B5eF90Xzcp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF83LCBfX3B5eF92 X2RhdGEpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfZGF0 YSk7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gICAg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTg4LCBfX3B5eF9MMV9lcnJv cikKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTkwLCBfX3B5 eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBpZiAodW5saWtlbHkoX19QeXhf U2V0SXRlbUludChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2lkX2RhdGEs IF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAs IDEpIDwgMCkpIF9fUFlYX0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAodW5s aWtlbHkoX19QeXhfU2V0SXRlbUludChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5 eF92X2lkX2RhdGEsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWlu dDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA1OTAsIF9fcHl4X0wxX2Vycm9yKQor ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKyAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF92X3VzZXJkYXRhcywgX19weXhfdF8xKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo1ODcKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4OQorICAqICAg ICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKyAgKiAg ICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUp CisgICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTExMjI3LDE0ICsxMTIyNywxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMGdldF9wcm9wZXJ0eV9hc3luYyhz dAorICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4 OQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MQorICAqICAgICAgICAg aWYgdXNlcmRhdGFzIGlzIE5vbmU6CisgICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisgICogICAgICAg ICB1c2VyZGF0YXMuYWRkKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAg ICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wCisgICogICAgICAgICB3aXRoIG5vZ2ls OgorICAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92 X3VzZXJkYXRhcywgX19weXhfbl9zX2FkZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDU4OSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3NfYWRkKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTkxLCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgX19weXhfdF83ID0gTlVMTDsKKyAgIGlmIChD WVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikp KSB7CitAQCAtMTEyNDgsMjIgKzExMjQ4LDIyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2FzeW5jKHN0Cisg ICB9CisgICBfX3B5eF90XzEgPSAoX19weXhfdF83KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF8yLCBfX3B5eF90XzcpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4 X3RfMik7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODksIF9fcHl4X0wxX2Vycm9y KQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTkxLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OTAK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OTIKKyAgKiAgICAgICAgICAg ICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRh dGEoZGF0YSkKKyAgKiAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorICAqICAgICAgICAgY2RlZiBj b25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAg KiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9w ZXJ0eV9hc3luYygKKyAgKi8KKy0gIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmlu ZyhfX3B5eF92X3Byb3ApOyBpZiAodW5saWtlbHkoKCFfX3B5eF90XzEwKSAmJiBQeUVycl9PY2N1 cnJlZCgpKSkgX19QWVhfRVJSKDAsIDU5MCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEw ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9wcm9wKTsgaWYgKHVubGlrZWx5KCgh X19weXhfdF8xMCkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA1OTIsIF9fcHl4 X0wxX2Vycm9yKQorICAgX19weXhfdl9wcm9wX2MgPSBfX3B5eF90XzEwOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjU5MworICAqICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCisgICogICAgICAg ICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AKKyAgKiAgICAgICAgIHdpdGggbm9naWw6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTI3OCw3ICsxMTI3OCw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEw Z2V0X3Byb3BlcnR5X2FzeW5jKHN0CisgICAgICAgI2VuZGlmCisgICAgICAgLyp0cnk6Ki8gewor IAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MgorKyAgICAg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5NAorICAqICAgICAgICAgY2Rl ZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wCisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAq ICAgICAgICAgICAgIGVyciA9IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMoICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xMTI4OCw3ICsxMTI4OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2Fz eW5jKHN0CisgICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMoX19w eXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X2lkX2RhdGEsIF9fcHl4X3ZfcHJvcF9jLCBNUFZfRk9S TUFUX05PREUpOworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTkxCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5 MworICAqICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCisgICogICAgICAgICBjZGVmIGNvbnN0IGNo YXIqIHByb3BfYyA9IHByb3AKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xMTMwNyw3ICsxMTMwNyw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2Fz eW5jKHN0CisgICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjU5OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwMAorICAq ICAgICAgICAgICAgICAgICBNUFZfRk9STUFUX05PREUsCisgICogICAgICAgICAgICAgKQorICAq ICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTEz MTUsMTMgKzExMzE1LDEzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2FzeW5jKHN0CisgICogICAgIGRlZiB0 cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSwgZGVmYXVsdD1Ob25l KToKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzEgPSBfX1B5 eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDU5OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9Q eUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDYwMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKyAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworICAgZ290byBf X3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzQKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzYKKyAgKiAKKyAgKiAgICAgQF9l cnJvcnMKKyAgKiAgICAgZGVmIGdldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9wLCBkYXRhPU5v bmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTEzNDYsNyArMTEzNDYsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xMGdldF9wcm9wZXJ0eV9hc3luYyhzdAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDAKKysvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjAyCisgICogICAgICAgICByZXR1cm4gZXJyCisgICogCisgICogICAg IGRlZiB0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSwgZGVmYXVs dD1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTExNDAzLDcgKzExNDAz LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMTN0cnlfZ2V0X3Byb3BlcnR5X2FzeW4KKyAgICAgICAgIH0KKyAgICAgICB9CisgICAg ICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5KF9f UHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAw LCB2YWx1ZXMsIHBvc19hcmdzLCAidHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIpIDwgMCkpIF9fUFlY X0VSUigwLCA2MDAsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4 X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2 YWx1ZXMsIHBvc19hcmdzLCAidHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIpIDwgMCkpIF9fUFlYX0VS UigwLCA2MDIsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKyAgICAg ICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpIHsKK0BAIC0xMTQyMiw3ICsx MTQyMiw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzEzdHJ5X2dldF9wcm9wZXJ0eV9hc3luCisgICB9CisgICBnb3RvIF9fcHl4X0w0 X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6Owor LSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInRyeV9nZXRfcHJvcGVydHlfYXN5bmMiLCAw LCAxLCAzLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDYwMCwg X19weXhfTDNfZXJyb3IpCisrICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgidHJ5X2dldF9w cm9wZXJ0eV9hc3luYyIsIDAsIDEsIDMsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBf X1BZWF9FUlIoMCwgNjAyLCBfX3B5eF9MM19lcnJvcikKKyAgIF9fcHl4X0wzX2Vycm9yOjsKKyAg IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQudHJ5X2dldF9w cm9wZXJ0eV9hc3luYyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CitAQCAtMTE0NTEsNyArMTE0 NTEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8xMnRyeV9nZXRfcHJvcGVydHlfYXN5bgorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAw OworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInRyeV9nZXRfcHJvcGVydHlfYXN5bmMi LCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDEKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDMKKyAgKiAKKyAgKiAgICAgZGVmIHRy eV9nZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lLCBkZWZhdWx0PU5vbmUp OgorICAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTE0 NjcsNyArMTE0NjcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8xMnRyeV9nZXRfcHJvcGVydHlfYXN5bgorICAgICBfX1B5eF9YR09U UkVGKF9fcHl4X3RfMyk7CisgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjAyCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjYwNAorICAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBw cm9wLCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6CisgICogICAgICAgICB0cnk6CisgICogICAg ICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5X2FzeW5jKHByb3AsIGRhdGE9ZGF0YSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTExNDc1LDE3ICsxMTQ3NSwxNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8x MnRyeV9nZXRfcHJvcGVydHlfYXN5bgorICAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Cisg ICovCisgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgICBfX3B5eF90XzQgPSBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5 eF9uX3NfZ2V0X3Byb3BlcnR5X2FzeW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgNjAyLCBfX3B5eF9MM19lcnJvcikKKysgICAgICBfX3B5eF90XzQgPSBfX1B5eF9Q eU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3Nf Z2V0X3Byb3BlcnR5X2FzeW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIo MCwgNjA0LCBfX3B5eF9MM19lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsK Ky0gICAgICBfX3B5eF90XzUgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzUpKSBfX1BZWF9FUlIoMCwgNjAyLCBfX3B5eF9MM19lcnJvcikKKysgICAgICBfX3B5eF90XzUg PSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwg NjA0LCBfX3B5eF9MM19lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKyAg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKKyAgICAgICBfX1B5eF9HSVZFUkVGKF9f cHl4X3ZfcHJvcCk7CisgICAgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzUsIDAsIF9fcHl4 X3ZfcHJvcCk7CistICAgICAgX19weXhfdF82ID0gX19QeXhfUHlEaWN0X05ld1ByZXNpemVkKDEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA2MDIsIF9fcHl4X0wzX2Vy cm9yKQorKyAgICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgxKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNjA0LCBfX3B5eF9MM19lcnJvcikK KyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfdF82LCBfX3B5eF9uX3NfZGF0YSwgX19weXhfdl9kYXRhKSA8IDApIF9fUFlYX0VS UigwLCA2MDIsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5T2Jq ZWN0X0NhbGwoX19weXhfdF80LCBfX3B5eF90XzUsIF9fcHl4X3RfNik7IGlmICh1bmxpa2VseSgh X19weXhfdF83KSkgX19QWVhfRVJSKDAsIDYwMiwgX19weXhfTDNfZXJyb3IpCisrICAgICAgaWYg KFB5RGljdF9TZXRJdGVtKF9fcHl4X3RfNiwgX19weXhfbl9zX2RhdGEsIF9fcHl4X3ZfZGF0YSkg PCAwKSBfX1BZWF9FUlIoMCwgNjA0LCBfX3B5eF9MM19lcnJvcikKKysgICAgICBfX3B5eF90Xzcg PSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfNCwgX19weXhfdF81LCBfX3B5eF90XzYpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA2MDQsIF9fcHl4X0wzX2Vycm9y KQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworICAgICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUp OyBfX3B5eF90XzUgPSAwOworQEAgLTExNDk0LDcgKzExNDk0LDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJ0cnlfZ2V0X3Byb3Bl cnR5X2FzeW4KKyAgICAgICBfX3B5eF90XzcgPSAwOworICAgICAgIGdvdG8gX19weXhfTDdfdHJ5 X3JldHVybjsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjAx CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwMworICAqIAorICAq ICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9wLCBkYXRhPU5vbmUsIGRl ZmF1bHQ9Tm9uZSk6CisgICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xMTUwOCw3ICsxMTUwOCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEydHJ5X2dldF9wcm9wZXJ0eV9hc3luCisgICAg IF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAgICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NjAzCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo2MDUKKyAgKiAgICAgICAgIHRyeToKKyAgKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5n ZXRfcHJvcGVydHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKQorICAqICAgICAgICAgZXhjZXB0IE1Q VkVycm9yOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTE1MTYsNyArMTE1MTYs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8xMnRyeV9nZXRfcHJvcGVydHlfYXN5bgorICAqIAorICAqLworICAgICBfX1B5eF9FcnJG ZXRjaCgmX19weXhfdF83LCAmX19weXhfdF82LCAmX19weXhfdF81KTsKKy0gICAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDYwMywgX19weXhfTDVfZXhjZXB0X2Vycm9y KQorKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX01Q VkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNjA1LCBfX3B5 eF9MNV9leGNlcHRfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgICBf X3B5eF90XzggPSBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoX19weXhfdF83LCBf X3B5eF90XzQpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsK K0BAIC0xMTUyNCwxMiArMTE1MjQsMTIgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJ0cnlfZ2V0X3Byb3BlcnR5X2FzeW4KKyAgICAg X19weXhfdF83ID0gMDsgX19weXhfdF82ID0gMDsgX19weXhfdF81ID0gMDsKKyAgICAgaWYgKF9f cHl4X3RfOCkgeworICAgICAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2 LkNvbnRleHQudHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xp bmVubywgX19weXhfZmlsZW5hbWUpOworLSAgICAgIGlmIChfX1B5eF9HZXRFeGNlcHRpb24oJl9f cHl4X3RfNSwgJl9fcHl4X3RfNiwgJl9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNjAzLCBf X3B5eF9MNV9leGNlcHRfZXJyb3IpCisrICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlvbigmX19w eXhfdF81LCAmX19weXhfdF82LCAmX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2MDUsIF9f cHl4X0w1X2V4Y2VwdF9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKyAg ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF83KTsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA0Cisr ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwNgorICAqICAgICAgICAg ICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhwcm9wLCBkYXRhPWRhdGEpCisgICog ICAgICAgICBleGNlcHQgTVBWRXJyb3I6CisgICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTExNTQ3LDcgKzExNTQ3LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJ0 cnlfZ2V0X3Byb3BlcnR5X2FzeW4KKyAgICAgZ290byBfX3B5eF9MNV9leGNlcHRfZXJyb3I7Cisg ICAgIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcjo7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2MDEKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjYwMworICAqIAorICAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9w LCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6CisgICogICAgICAgICB0cnk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTU3Myw3ICsxMTU3Myw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEydHJ5X2dldF9wcm9w ZXJ0eV9hc3luCisgICAgIGdvdG8gX19weXhfTDA7CisgICB9CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjAwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NjAyCisgICogICAgICAgICByZXR1cm4gZXJyCisgICogCisgICogICAgIGRlZiB0cnlf Z2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSwgZGVmYXVsdD1Ob25lKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTExNTk1LDcgKzExNTk1LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJ0 cnlfZ2V0X3Byb3BlcnR5X2FzeW4KKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA2CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjYwOAorICAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisgICogCisgICog ICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9uZSk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTY0Miw3ICsxMTY0Miw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE1dHJ5X2dl dF9wcm9wZXJ0eShQeU9iCisgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGlmICh1bmxpa2Vs eShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlv bmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3Nf YXJncywgInRyeV9nZXRfcHJvcGVydHkiKSA8IDApKSBfX1BZWF9FUlIoMCwgNjA2LCBfX3B5eF9M M19lcnJvcikKKysgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29y ZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgInRy eV9nZXRfcHJvcGVydHkiKSA8IDApKSBfX1BZWF9FUlIoMCwgNjA4LCBfX3B5eF9MM19lcnJvcikK KyAgICAgICB9CisgICAgIH0gZWxzZSB7CisgICAgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9TSVpF KF9fcHl4X2FyZ3MpKSB7CitAQCAtMTE2NTgsNyArMTE2NTgsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNXRyeV9nZXRfcHJvcGVy dHkoUHlPYgorICAgfQorICAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsK KyAgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZh bGlkKCJ0cnlfZ2V0X3Byb3BlcnR5IiwgMCwgMSwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKSk7IF9fUFlYX0VSUigwLCA2MDYsIF9fcHl4X0wzX2Vycm9yKQorKyAgX19QeXhfUmFpc2VB cmd0dXBsZUludmFsaWQoInRyeV9nZXRfcHJvcGVydHkiLCAwLCAxLCAyLCBQeVR1cGxlX0dFVF9T SVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDYwOCwgX19weXhfTDNfZXJyb3IpCisgICBf X3B5eF9MM19lcnJvcjo7CisgICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5Db250ZXh0LnRyeV9nZXRfcHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8s IF9fcHl4X2ZpbGVuYW1lKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworQEAg LTExNjg3LDcgKzExNjg3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMTR0cnlfZ2V0X3Byb3BlcnR5KHN0cnUKKyAgIGludCBfX3B5 eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJ0cnlfZ2V0X3By b3BlcnR5IiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA3 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA5CisgICogCisgICogICAg IGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9uZSk6CisgICogICAg ICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTcwMyw3ICsxMTcw Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzE0dHJ5X2dldF9wcm9wZXJ0eShzdHJ1CisgICAgIF9fUHl4X1hHT1RSRUYoX19weXhf dF8zKTsKKyAgICAgLyp0cnk6Ki8geworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo2MDgKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NjEwCisgICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9u ZSk6CisgICogICAgICAgICB0cnk6CisgICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3By b3BlcnR5KHByb3ApICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTcxMSw3ICsx MTcxMSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzE0dHJ5X2dldF9wcm9wZXJ0eShzdHJ1CisgICogICAgICAgICAgICAgcmV0dXJu IGRlZmF1bHQKKyAgKi8KKyAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICAgIF9f cHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zf c2VsZiksIF9fcHl4X25fc19nZXRfcHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkp IF9fUFlYX0VSUigwLCA2MDgsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgIF9fcHl4X3RfNSA9IF9f UHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4 X25fc19nZXRfcHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigw LCA2MTAsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOwor ICAgICAgIF9fcHl4X3RfNiA9IE5VTEw7CisgICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9E UyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkpIHsKK0BAIC0xMTcyNSwxNCAr MTE3MjUsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMTR0cnlfZ2V0X3Byb3BlcnR5KHN0cnUKKyAgICAgICB9CisgICAgICAgX19w eXhfdF80ID0gKF9fcHl4X3RfNikgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF81 LCBfX3B5eF90XzYsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9f cHl4X3RfNSwgX19weXhfdl9wcm9wKTsKKyAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7 IF9fcHl4X3RfNiA9IDA7CistICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9F UlIoMCwgNjA4LCBfX3B5eF9MM19lcnJvcikKKysgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCA2MTAsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzQpOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUg PSAwOworICAgICAgIF9fcHl4X3IgPSBfX3B5eF90XzQ7CisgICAgICAgX19weXhfdF80ID0gMDsK KyAgICAgICBnb3RvIF9fcHl4X0w3X3RyeV9yZXR1cm47CisgCistICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjYwNworKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo2MDkKKyAgKiAKKyAgKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHkoc2VsZiwg cHJvcCwgZGVmYXVsdD1Ob25lKToKKyAgKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTExNzQ1LDcgKzExNzQ1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTR0cnlfZ2V0X3Byb3BlcnR5KHN0 cnUKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworICAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjYxMQorICAqICAgICAgICAgdHJ5OgorICAqICAgICAgICAgICAgIHJldHVy biBzZWxmLmdldF9wcm9wZXJ0eShwcm9wKQorICAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTE3NTMsNyArMTE3NTMsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNHRy eV9nZXRfcHJvcGVydHkoc3RydQorICAqIAorICAqLworICAgICBfX1B5eF9FcnJGZXRjaCgmX19w eXhfdF80LCAmX19weXhfdF81LCAmX19weXhfdF82KTsKKy0gICAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzcsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19w eXhfdF83KSkgX19QWVhfRVJSKDAsIDYwOSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorKyAgICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNywgX19weXhfbl9zX01QVkVycm9yKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNjExLCBfX3B5eF9MNV9leGNl cHRfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworICAgICBfX3B5eF90Xzgg PSBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoX19weXhfdF80LCBfX3B5eF90Xzcp OworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKK0BAIC0xMTc2 MSwxMiArMTE3NjEsMTIgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMTR0cnlfZ2V0X3Byb3BlcnR5KHN0cnUKKyAgICAgX19weXhfdF80 ID0gMDsgX19weXhfdF81ID0gMDsgX19weXhfdF82ID0gMDsKKyAgICAgaWYgKF9fcHl4X3RfOCkg eworICAgICAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQu dHJ5X2dldF9wcm9wZXJ0eSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUpOworLSAgICAgIGlmIChfX1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfNiwgJl9fcHl4 X3RfNSwgJl9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgNjA5LCBfX3B5eF9MNV9leGNlcHRf ZXJyb3IpCisrICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlvbigmX19weXhfdF82LCAmX19weXhf dF81LCAmX19weXhfdF80KSA8IDApIF9fUFlYX0VSUigwLCA2MTEsIF9fcHl4X0w1X2V4Y2VwdF9l cnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAgICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF81KTsKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAKKy0gICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjEwCisrICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYxMgorICAqICAgICAgICAgICAgIHJldHVybiBzZWxm LmdldF9wcm9wZXJ0eShwcm9wKQorICAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOgorICAqICAg ICAgICAgICAgIHJldHVybiBkZWZhdWx0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xMTc4NCw3ICsxMTc4NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzE0dHJ5X2dldF9wcm9wZXJ0eShzdHJ1CisgICAgIGdvdG8g X19weXhfTDVfZXhjZXB0X2Vycm9yOworICAgICBfX3B5eF9MNV9leGNlcHRfZXJyb3I6OworIAor LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA3CisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDkKKyAgKiAKKyAgKiAgICAgZGVmIHRyeV9nZXRf cHJvcGVydHkoc2VsZiwgcHJvcCwgZGVmYXVsdD1Ob25lKToKKyAgKiAgICAgICAgIHRyeTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTExODEwLDcgKzExODEwLDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTR0cnlf Z2V0X3Byb3BlcnR5KHN0cnUKKyAgICAgZ290byBfX3B5eF9MMDsKKyAgIH0KKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2MDgKKyAgKiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAqIAor ICAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkZWZhdWx0PU5vbmUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTE4MzIsNyArMTE4MzIsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNHRy eV9nZXRfcHJvcGVydHkoc3RydQorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MTIKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjE0CisgICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgKiAKKyAgKiAg ICAgZGVmIGdldF9wcm9wZXJ0eShzZWxmLCBwcm9wKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTExODgyLDcgKzExODgyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF8KKyAg IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJnZXRfcHJvcGVydHkiLCAwKTsKKyAgIF9fUHl4 X0lOQ1JFRihfX3B5eF92X3Byb3ApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYxNAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYxNgorICAq ICAgICBkZWYgZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3ApOgorICAqICAgICAgICAgIiIiV3JhcHM6 IG1wdl9nZXRfcHJvcGVydHkiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTExODkzLDE5ICsxMTg5MywxOSBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNmdldF9w cm9wZXJ0eShzdHJ1Y3QgXworICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Cisg ICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKyAgICAgICBQ eUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIoMCwg NjE0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1BZWF9FUlIoMCwgNjE2LCBfX3B5eF9MMV9l cnJvcikKKyAgICAgfQorICAgfQorICAgI2VuZGlmCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjE2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NjE4CisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBjZGVmIG1wdl9u b2RlIHJlc3VsdAorICAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBw cm9wCisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgNjE2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNjE4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworICAgX19weXhfdF8zID0gTlVMTDsKKyAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsK K0BAIC0xMTkxOSwyMyArMTE5MTksMjMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgIH0K KyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X3Byb3ApIDogX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfcHJvcCk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Myk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA2MTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgNjE4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3ZfcHJvcCwgX19weXhfdF8xKTsKKyAgIF9fcHl4X3RfMSA9IDA7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjE3CisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjE5CisgICogICAgICAgICBjZGVmIG1wdl9ub2Rl IHJlc3VsdAorICAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKyAgKiAgICAgICAgIGNk ZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICov CistICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X3Byb3ApOyBp ZiAodW5saWtlbHkoKCFfX3B5eF90XzQpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIo MCwgNjE3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0Fz U3RyaW5nKF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNCkgJiYgUHlFcnJf T2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA2MTksIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhf dl9wcm9wX2MgPSBfX3B5eF90XzQ7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NjE5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjIxCisgICog ICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AKKyAgKiAgICAgICAgIGNkZWYg aW50IGVycgorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTExOTUwLDcgKzExOTUwLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF8KKyAg ICAgICAjZW5kaWYKKyAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjIwCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NjIyCisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAgICAgICAgIHdp dGggbm9naWw6CisgICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9wZXJ0eSggICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTExOTYwLDcgKzExOTYwLDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJv cGVydHkoc3RydWN0IF8KKyAgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X2dldF9wcm9wZXJ0eShf X3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcHJvcF9jLCBNUFZfRk9STUFUX05PREUsICgmX19w eXhfdl9yZXN1bHQpKTsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjYxOQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo2MjEKKyAgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcAorICAqICAg ICAgICAgY2RlZiBpbnQgZXJyCisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMTE5NzksNyArMTE5NzksNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNmdldF9wcm9wZXJ0eShz dHJ1Y3QgXworICAgICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo2MjYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MjgKKyAg KiAgICAgICAgICAgICAgICAgJnJlc3VsdCwKKyAgKiAgICAgICAgICAgICApCisgICogICAgICAg ICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTE5ODksMTYg KzExOTg5LDE2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICBfX3B5eF90XzUgPSAoKF9f cHl4X3ZfZXJyIDwgMCkgIT0gMCk7CisgICBpZiAodW5saWtlbHkoX19weXhfdF81KSkgeworIAor LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjI3CisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MjkKKyAgKiAgICAgICAgICAgICApCisgICogICAg ICAgICBpZiBlcnIgPCAwOgorICAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgdHJ5OgorICAqICAgICAgICAg ICAgIHYgPSBfY29udmVydF9ub2RlX3ZhbHVlKHJlc3VsdCkKKyAgKi8KKy0gICAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDYyNywgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfTVBWRXJyb3Ip OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2MjksIF9fcHl4X0wxX2Vy cm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF8zID0gX19Q eXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykp IF9fUFlYX0VSUigwLCA2MjcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzMgPSBfX1B5 eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkg X19QWVhfRVJSKDAsIDYyOSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzMpOworICAgICBfX3B5eF90XzYgPSBOVUxMOworICAgICBpZiAoQ1lUSE9OX1VOUEFDS19N RVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CitAQCAtMTIw MTMsMTQgKzEyMDEzLDE0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICAgIF9fcHl4X3Rf MSA9IChfX3B5eF90XzYpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19w eXhfdF82LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIs IF9fcHl4X3RfMyk7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICAgIGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYyNywgX19weXhfTDFfZXJyb3Ip CisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYyOSwgX19weXhf TDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgICAgX19QeXhfUmFpc2UoX19weXhfdF8x LCAwLCAwLCAwKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 CistICAgIF9fUFlYX0VSUigwLCA2MjcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1BZWF9FUlIo MCwgNjI5LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjYyNgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjI4 CisgICogICAgICAgICAgICAgICAgICZyZXN1bHQsCisgICogICAgICAgICAgICAgKQorICAqICAg ICAgICAgaWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEyMDI5 LDcgKzEyMDI5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgKi8KKyAgIH0KKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MjgKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MzAKKyAgKiAgICAgICAgIGlmIGVyciA8IDA6CisgICogICAg ICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorICAqICAgICAgICAgdHJ5OiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTIwMzgsMjAgKzEyMDM4LDIwIEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE2Z2V0X3Byb3Bl cnR5KHN0cnVjdCBfCisgICovCisgICAvKnRyeToqLyB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MjkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYzMQorICAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKyAgKiAgICAg ICAgIHRyeToKKyAgKiAgICAgICAgICAgICB2ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShyZXN1bHQp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGZpbmFsbHk6CisgICog ICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gICAgX19weXhfdF8xID0gX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShfX3B5eF92X3Jlc3VsdCk7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYyOSwgX19weXhfTDhfZXJy b3IpCisrICAgIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252 ZXJ0X25vZGVfdmFsdWUoX19weXhfdl9yZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCA2MzEsIF9fcHl4X0w4X2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKyAgICAgX19weXhfdl92ID0gX19weXhfdF8xOworICAgICBfX3B5eF90XzEgPSAw OworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzMQorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzMworICAqICAgICAgICAgICAgIHYg PSBfY29udmVydF9ub2RlX3ZhbHVlKHJlc3VsdCkKKyAgKiAgICAgICAgIGZpbmFsbHk6CisgICog ICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTEyMDY4LDcgKzEyMDY4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgICAgICAgICAg I2VuZGlmCisgICAgICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMyCisrICAgICAgICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjYzNAorICAqICAgICAgICAgZmluYWxseToKKyAgKiAgICAgICAg ICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRl bnRzKCZyZXN1bHQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMjA3OCw3ICsx MjA3OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICAgICAgICAgICAgbXB2X2ZyZWVf bm9kZV9jb250ZW50cygoJl9fcHl4X3ZfcmVzdWx0KSk7CisgICAgICAgICAgIH0KKyAKKy0gICAg ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzMQorKyAgICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMzCisgICogICAgICAgICAgICAgdiA9 IF9jb252ZXJ0X25vZGVfdmFsdWUocmVzdWx0KQorICAqICAgICAgICAgZmluYWxseToKKyAgKiAg ICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MTIxMjUsNyArMTIxMjUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8xNmdldF9wcm9wZXJ0eShzdHJ1Y3QgXworICAgICAgICAgICAg ICNlbmRpZgorICAgICAgICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgICAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzIKKysgICAgICAgICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzQKKyAgKiAgICAgICAgIGZpbmFsbHk6CisgICog ICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9k ZV9jb250ZW50cygmcmVzdWx0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTIx MzUsNyArMTIxMzUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8xNmdldF9wcm9wZXJ0eShzdHJ1Y3QgXworICAgICAgICAgICAgICAg bXB2X2ZyZWVfbm9kZV9jb250ZW50cygoJl9fcHl4X3ZfcmVzdWx0KSk7CisgICAgICAgICAgICAg fQorIAorLSAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzEK KysgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMzCisgICog ICAgICAgICAgICAgdiA9IF9jb252ZXJ0X25vZGVfdmFsdWUocmVzdWx0KQorICAqICAgICAgICAg ZmluYWxseToKKyAgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CitAQCAtMTIxNzEsNyArMTIxNzEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNmdldF9wcm9wZXJ0eShzdHJ1Y3Qg XworICAgICBfX3B5eF9MOTo7CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjMzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjM1Cisg ICogICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICAgICAgbXB2X2ZyZWVf bm9kZV9jb250ZW50cygmcmVzdWx0KQorICAqICAgICAgICAgcmV0dXJuIHYgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTEyMTgzLDcgKzEyMTgzLDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHko c3RydWN0IF8KKyAgIF9fcHl4X3IgPSBfX3B5eF92X3Y7CisgICBnb3RvIF9fcHl4X0wwOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYxMgorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjYxNAorICAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0 CisgICogCisgICogICAgIGRlZiBnZXRfcHJvcGVydHkoc2VsZiwgcHJvcCk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMjIwNyw3ICsxMjIwNyw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5 KHN0cnVjdCBfCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjYzNgorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 MzgKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAgICAgZGVmIHNldF9wcm9wZXJ0eShzZWxm LCBwcm9wLCB2YWx1ZT1UcnVlLCBhc3luY2hyb25vdXM9RmFsc2UsIGRhdGE9Tm9uZSk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMjI3NSw3ICsxMjI3NSw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE5c2V0X3By b3BlcnR5KFB5T2JqZWN0CisgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGlmICh1bmxpa2Vs eShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlv bmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3Nf YXJncywgInNldF9wcm9wZXJ0eSIpIDwgMCkpIF9fUFlYX0VSUigwLCA2MzYsIF9fcHl4X0wzX2Vy cm9yKQorKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3Jkcyhf X3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0X3By b3BlcnR5IikgPCAwKSkgX19QWVhfRVJSKDAsIDYzOCwgX19weXhfTDNfZXJyb3IpCisgICAgICAg fQorICAgICB9IGVsc2UgeworICAgICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKSkgeworQEAgLTEyMjk3LDcgKzEyMjk3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTlzZXRfcHJvcGVydHkoUHlPYmplY3QK KyAgIH0KKyAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CisgICBfX3B5 eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgic2V0 X3Byb3BlcnR5IiwgMCwgMSwgNCwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlY X0VSUigwLCA2MzYsIF9fcHl4X0wzX2Vycm9yKQorKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFs aWQoInNldF9wcm9wZXJ0eSIsIDAsIDEsIDQsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykp OyBfX1BZWF9FUlIoMCwgNjM4LCBfX3B5eF9MM19lcnJvcikKKyAgIF9fcHl4X0wzX2Vycm9yOjsK KyAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuc2V0X3By b3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Cisg ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKK0BAIC0xMjM0NCw3ICsxMjM0NCw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi c2V0X3Byb3BlcnR5IiwgMCk7CisgICBfX1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzgKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2NDAKKyAgKiAgICAgZGVmIHNldF9wcm9wZXJ0eShzZWxmLCBw cm9wLCB2YWx1ZT1UcnVlLCBhc3luY2hyb25vdXM9RmFsc2UsIGRhdGE9Tm9uZSk6CisgICogICAg ICAgICAiIiJXcmFwczogbXB2X3NldF9wcm9wZXJ0eSBhbmQgbXB2X3NldF9wcm9wZXJ0eV9hc3lu YyIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTIzNTUsMTkgKzEyMzU1LDE5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBf CisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKyAgICAgaWYgKHVubGlrZWx5 KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworICAgICAgIFB5RXJyX1NldE5vbmUoUHlF eGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCA2MzgsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA2NDAsIF9fcHl4X0wxX2Vycm9yKQorICAgICB9Cisg ICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 MzkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDEKKyAgKiAgICAgICAg ICIiIldyYXBzOiBtcHZfc2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIi CisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBwcm9wID0gX3N0cmVu Yyhwcm9wKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBjZGVmIG1w dl9mb3JtYXQgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkKKyAgKiAgICAgICAgIGNk ZWYgbXB2X25vZGUgdiA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCisg ICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0 cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDYzOSwgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhf bl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY0MSwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgIF9fcHl4X3Rf MyA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0 aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CitAQCAtMTIzODEsMjAgKzEyMzgxLDIwIEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0 X3Byb3BlcnR5KHN0cnVjdCBfCisgICB9CisgICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9f UHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl9wcm9w KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X3Byb3ApOwor ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjM5LCBfX3B5eF9MMV9lcnJvcikKKysgIGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY0MSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3Byb3AsIF9fcHl4 X3RfMSk7CisgICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjY0MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0Mgor ICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMo cHJvcCkKKyAgKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRf Zm9yKHZhbHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBjZGVm IG1wdl9ub2RlIHYgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQorICAq ICAgICAgICAgY2RlZiBpbnQgZXJyCisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0 X2Zvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY0MCwgX19weXhf TDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlP YmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0X2Zvcik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY0MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgIF9fcHl4X3RfMyA9IE5VTEw7CisgICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewor QEAgLTEyNDA4LDI2ICsxMjQwOCwyNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eShzdHJ1Y3QgXworICAgfQor ICAgX19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19w eXhfdF8yLCBfX3B5eF90XzMsIF9fcHl4X3ZfdmFsdWUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfdmFsdWUpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgNjQwLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDY0MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19w eXhfdF80ID0gKChlbnVtIG1wdl9mb3JtYXQpX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2Zvcm1h dChfX3B5eF90XzEpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIo MCwgNjQwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNCA9ICgoZW51bSBtcHZfZm9ybWF0 KV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9mb3JtYXQoX19weXhfdF8xKSk7IGlmICh1bmxpa2Vs eShQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDY0MiwgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgIF9fcHl4X3ZfZm9y bWF0ID0gX19weXhfdF80OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjY0MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0MworICAqICAgICAg ICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKyAgKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3Jt YXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZhbHVlKQorICAqICAgICAgICAgY2RlZiBtcHZfbm9kZSB2 ID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUodmFsdWUsIGZvcm1hdCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICogICAgICAgICBjZGVm IHVpbnQ2NF90IGRhdGFfaWQKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21f ZW51bV9fbXB2X2Zvcm1hdChfX3B5eF92X2Zvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDY0MSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoX19weXhfdl9mb3JtYXQpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NDMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX3B5eF92X3YgPSAoKHN0cnVjdCBfX3B5eF92dGFi c3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5 eF92dGFiKS0+X3ByZXBfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92YWx1ZSwg X19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0NQorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0NworICAqICAgICAgICAgY2RlZiB1aW50NjRfdCBk YXRhX2lkCisgICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYworICAqICAgICAgICAg dHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTI0MzYsMjggKzEyNDM2LDI4 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICovCisgICAvKnRyeToqLyB7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDYKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjY0OAorICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBw cm9wX2MKKyAgKiAgICAgICAgIHRyeToKKyAgKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNo cm9ub3VzOgorICAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgICBfX3B5 eF90XzUgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X3Byb3ApOyBpZiAodW5saWtl bHkoKCFfX3B5eF90XzUpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNjQ2LCBf X3B5eF9MNF9lcnJvcikKKysgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmco X19weXhfdl9wcm9wKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF81KSAmJiBQeUVycl9PY2N1cnJl ZCgpKSkgX19QWVhfRVJSKDAsIDY0OCwgX19weXhfTDRfZXJyb3IpCisgICAgIF9fcHl4X3ZfcHJv cF9jID0gX19weXhfdF81OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjQ3CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDkKKyAgKiAg ICAgICAgIHRyeToKKyAgKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wCisgICogICAgICAgICAg ICAgaWYgbm90IGFzeW5jaHJvbm91czogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAq ICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgICAgICAgICAgZXJy ID0gbXB2X3NldF9wcm9wZXJ0eSgKKyAgKi8KKy0gICAgX19weXhfdF82ID0gX19QeXhfUHlPYmpl Y3RfSXNUcnVlKF9fcHl4X3ZfYXN5bmNocm9ub3VzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8 IDApKSBfX1BZWF9FUlIoMCwgNjQ3LCBfX3B5eF9MNF9lcnJvcikKKysgICAgX19weXhfdF82ID0g X19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfYXN5bmNocm9ub3VzKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgNjQ5LCBfX3B5eF9MNF9lcnJvcikKKyAgICAg X19weXhfdF83ID0gKCghX19weXhfdF82KSAhPSAwKTsKKyAgICAgaWYgKF9fcHl4X3RfNykgewor IAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDgKKysgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjUwCisgICogICAgICAgICAgICAgcHJv cF9jID0gcHJvcAorICAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CisgICogICAg ICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xMjQ3Miw3ICsxMjQ3Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICAgICAgICAg ICNlbmRpZgorICAgICAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0OQorKyAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2NTEKKyAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9u b3VzOgorICAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgICAg ICAgICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0eSggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTEyNDgyLDcgKzEyNDgyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgICAg ICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9zZXRfcHJvcGVydHkoX19weXhfdl9zZWxmLT5fY3R4 LCBfX3B5eF92X3Byb3BfYywgTVBWX0ZPUk1BVF9OT0RFLCAoJl9fcHl4X3ZfdikpOworICAgICAg ICAgICB9CisgCistICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 NDgKKysgICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1MAorICAq ICAgICAgICAgICAgIHByb3BfYyA9IHByb3AKKyAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNo cm9ub3VzOgorICAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtMTI1MDEsNyArMTI1MDEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eShzdHJ1 Y3QgXworICAgICAgICAgICB9CisgICAgICAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo2NTUKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NjU3CisgICogICAgICAgICAgICAgICAgICAgICAgICAgJnYKKyAgKiAgICAgICAgICAg ICAgICAgICAgICkKKyAgKiAgICAgICAgICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMTI1MDksMTMgKzEyNTA5LDEzIEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5 KHN0cnVjdCBfCisgICogICAgICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0 YS5nZXQoZGF0YV9pZCwgTm9uZSkKKyAgKi8KKyAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Ip OworLSAgICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjU1LCBfX3B5eF9MNF9lcnJv cikKKysgICAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY1NywgX19weXhfTDRfZXJy b3IpCisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAgICAgX19weXhfciA9IF9f cHl4X3RfMTsKKyAgICAgICBfX3B5eF90XzEgPSAwOworICAgICAgIGdvdG8gX19weXhfTDNfcmV0 dXJuOworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDcKKysg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjQ5CisgICogICAgICAgICB0 cnk6CisgICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAorICAqICAgICAgICAgICAgIGlmIG5v dCBhc3luY2hyb25vdXM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMjUyNCwy NiArMTI1MjQsMjYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgKi8KKyAgICAgfQorIAor LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjU2CisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTgKKyAgKiAgICAgICAgICAgICAgICAgICAgICkK KyAgKiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycgorICAqICAgICAgICAgICAgIGRhdGFfaWQg PSA8dWludDY0X3Q+aGFzaChkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICog ICAgICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoZGF0YV9pZCwg Tm9uZSkKKyAgKiAgICAgICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKKyAgKi8KKy0gICAg X19weXhfdF84ID0gUHlPYmplY3RfSGFzaChfX3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19w eXhfdF84ID09ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlYX0VSUigwLCA2NTYsIF9fcHl4X0w0X2Vy cm9yKQorKyAgICBfX3B5eF90XzggPSBQeU9iamVjdF9IYXNoKF9fcHl4X3ZfZGF0YSk7IGlmICh1 bmxpa2VseShfX3B5eF90XzggPT0gKChQeV9oYXNoX3QpLTEpKSkgX19QWVhfRVJSKDAsIDY1OCwg X19weXhfTDRfZXJyb3IpCisgICAgIF9fcHl4X3ZfZGF0YV9pZCA9ICgodWludDY0X3QpX19weXhf dF84KTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1NworKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjU5CisgICogICAgICAgICAgICAg ICAgIHJldHVybiBlcnIKKyAgKiAgICAgICAgICAgICBkYXRhX2lkID0gPHVpbnQ2NF90Pmhhc2go ZGF0YSkKKyAgKiAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdl dChkYXRhX2lkLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAg ICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6CisgICogICAgICAgICAgICAgICAgIHNlbGYucmVw bHlfdXNlcmRhdGFbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQor ICAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zf c2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9yKQorKyAgICBfX3B5eF90XzIg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEs IF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2 NTksIF9fcHl4X0w0X2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAg X19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5eF92X2RhdGFfaWQpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9y KQorKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfZGF0 YV9pZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDY1OSwgX19weXhf TDRfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgICBfX3B5eF90Xzkg PSBOVUxMOworICAgICBfX3B5eF90XzEwID0gMDsKK0BAIC0xMjU2MCw3ICsxMjU2MCw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4 c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKyAgICAg aWYgKFB5RnVuY3Rpb25fQ2hlY2soX19weXhfdF8yKSkgeworICAgICAgIFB5T2JqZWN0ICpfX3B5 eF90ZW1wWzNdID0ge19fcHl4X3RfOSwgX19weXhfdF8zLCBQeV9Ob25lfTsKKy0gICAgICBfX3B5 eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsx LV9fcHl4X3RfMTAsIDIrX19weXhfdF8xMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDY1NywgX19weXhfTDRfZXJyb3IpCisrICAgICAgX19weXhfdF8xID0gX19QeXhf UHlGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5eF90XzEwLCAy K19fcHl4X3RfMTApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NTks IF9fcHl4X0w0X2Vycm9yKQorICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsgX19weXhf dF85ID0gMDsKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKK0BAIC0xMjU2OSwxNCArMTI1NjksMTQg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgICAgI2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwK KyAgICAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzIpKSB7CisgICAg ICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF85LCBfX3B5eF90XzMsIFB5X05v bmV9OworLSAgICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4 X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3RfMTAsIDIrX19weXhfdF8xMCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY1NywgX19weXhfTDRfZXJyb3IpCisrICAgICAg X19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8yLCBfX3B5eF90 ZW1wKzEtX19weXhfdF8xMCwgMitfX3B5eF90XzEwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgNjU5LCBfX3B5eF9MNF9lcnJvcikKKyAgICAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7CisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CisgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgICAg IH0gZWxzZQorICAgICAjZW5kaWYKKyAgICAgeworLSAgICAgIF9fcHl4X3RfMTEgPSBQeVR1cGxl X05ldygyK19fcHl4X3RfMTApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMTEpKSBfX1BZWF9FUlIo MCwgNjU3LCBfX3B5eF9MNF9lcnJvcikKKysgICAgICBfX3B5eF90XzExID0gUHlUdXBsZV9OZXco MitfX3B5eF90XzEwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzExKSkgX19QWVhfRVJSKDAsIDY1 OSwgX19weXhfTDRfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMTEpOworICAg ICAgIGlmIChfX3B5eF90XzkpIHsKKyAgICAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF85KTsg UHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzExLCAwLCBfX3B5eF90XzkpOyBfX3B5eF90XzkgPSBO VUxMOworQEAgLTEyNTg3LDcgKzEyNTg3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KKyAg ICAgICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOworICAgICAgIFB5VHVwbGVfU0VUX0lURU0oX19w eXhfdF8xMSwgMStfX3B5eF90XzEwLCBQeV9Ob25lKTsKKyAgICAgICBfX3B5eF90XzMgPSAwOwor LSAgICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90 XzExLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjU3LCBf X3B5eF9MNF9lcnJvcikKKysgICAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9f cHl4X3RfMiwgX19weXhfdF8xMSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDY1OSwgX19weXhfTDRfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CisgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90XzExID0gMDsK KyAgICAgfQorQEAgLTEyNTk1LDcgKzEyNTk1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8K KyAgICAgX19weXhfdl91c2VyZGF0YXMgPSBfX3B5eF90XzE7CisgICAgIF9fcHl4X3RfMSA9IDA7 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTgKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2MAorICAqICAgICAgICAgICAgIGRhdGFf aWQgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorICAqICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNl bGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCisgICogICAgICAgICAgICAgaWYg dXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMjYw NiwxNCArMTI2MDYsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgICAgX19weXhfdF82 ID0gKF9fcHl4X3RfNyAhPSAwKTsKKyAgICAgaWYgKF9fcHl4X3RfNikgeworIAorLSAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTkKKysgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjYxCisgICogICAgICAgICAgICAgdXNlcmRhdGFzID0gc2Vs Zi5yZXBseV91c2VyZGF0YS5nZXQoZGF0YV9pZCwgTm9uZSkKKyAgKiAgICAgICAgICAgICBpZiB1 c2VyZGF0YXMgaXMgTm9uZToKKyAgKiAgICAgICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YVtkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkKKyAgKiAg ICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2Jh bE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY1OSwgX19weXhfTDRfZXJyb3IpCisrICAgICAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19SZXBseVVzZXJEYXRh KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNjYxLCBfX3B5eF9MNF9l cnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgICBfX3B5eF90XzEx ID0gTlVMTDsKKyAgICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CitAQCAtMTI2MjcsMTUgKzEyNjI3LDE1IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4 c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICAgICAgfQorICAgICAgIF9fcHl4X3RfMSA9IChfX3B5 eF90XzExKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMTEs IF9fcHl4X3ZfZGF0YSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19w eXhfdl9kYXRhKTsKKyAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90XzEx ID0gMDsKKy0gICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NTks IF9fcHl4X0w0X2Vycm9yKQorKyAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDY2MSwgX19weXhfTDRfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CisgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAg ICAgaWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl9zZWxmLT5yZXBseV91c2Vy ZGF0YSwgX19weXhfdl9kYXRhX2lkLCBfX3B5eF90XzEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUlu dF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNjU5LCBfX3B5eF9M NF9lcnJvcikKKysgICAgICBpZiAodW5saWtlbHkoX19QeXhfU2V0SXRlbUludChfX3B5eF92X3Nl bGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2RhdGFfaWQsIF9fcHl4X3RfMSwgdWludDY0X3Qs IDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigw LCA2NjEsIF9fcHl4X0w0X2Vycm9yKQorICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOwor ICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X3RfMSk7Cisg ICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1OAorKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NjAKKyAgKiAgICAgICAgICAgICBkYXRhX2lkID0gPHVp bnQ2NF90Pmhhc2goZGF0YSkKKyAgKiAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5 X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQorICAqICAgICAgICAgICAgIGlmIHVzZXJkYXRh cyBpcyBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTI2NDQsMTQgKzEy NjQ0LDE0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICovCisgICAgIH0KKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2MAorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjYyCisgICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlz IE5vbmU6CisgICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbZGF0YV9pZF0g PSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorICAqICAgICAgICAgICAgIHVzZXJk YXRhcy5hZGQoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAg d2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0eV9h c3luYygKKyAgKi8KKy0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX2FkZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDY2MCwgX19weXhfTDRfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9IF9f UHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X25fc19hZGQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2NjIsIF9fcHl4X0w0X2Vy cm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19weXhfdF8xMSA9IE5V TEw7CisgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0No ZWNrKF9fcHl4X3RfMikpKSB7CitAQCAtMTI2NjUsMTIgKzEyNjY1LDEyIEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3Bl cnR5KHN0cnVjdCBfCisgICAgIH0KKyAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfMTEpID8gX19Q eXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMTEpIDogX19QeXhfUHlP YmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8x MSk7IF9fcHl4X3RfMTEgPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA2NjAsIF9fcHl4X0w0X2Vycm9yKQorKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA2NjIsIF9fcHl4X0w0X2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYxCisrICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2NjMKKyAgKiAgICAgICAgICAgICAgICAgc2VsZi5yZXBseV91 c2VyZGF0YVtkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisgICog ICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCisgICogICAgICAgICAgICAgd2l0aCBub2dpbDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEyNjg1LDcgKzEyNjg1LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThz ZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgICAgICAgICNlbmRpZgorICAgICAgICAgLyp0cnk6Ki8g eworIAorLSAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYyCisr ICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NjQKKyAgKiAgICAg ICAgICAgICB1c2VyZGF0YXMuYWRkKCkKKyAgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAq ICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jKCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTI2OTUsNyArMTI2OTUsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0 eShzdHJ1Y3QgXworICAgICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9zZXRfcHJvcGVydHlfYXN5 bmMoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X2RhdGFfaWQsIF9fcHl4X3ZfcHJvcF9jLCBN UFZfRk9STUFUX05PREUsICgmX19weXhfdl92KSk7CisgICAgICAgICB9CisgCistICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYxCisrICAgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYzCisgICogICAgICAgICAgICAgICAgIHNlbGYucmVw bHlfdXNlcmRhdGFbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQor ICAqICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorICAqICAgICAgICAgICAgIHdpdGggbm9n aWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMjcxNSw3ICsxMjcxNSw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo2NzIKKyAgKiAgICAgICAgICAgICAgICAgKQorICAqICAgICAgICAgZmluYWxseToK KyAgKiAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZSh2KSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMTI3MjQsNyArMTI3MjQsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eShz dHJ1Y3QgXworICAqLworICAgLypmaW5hbGx5OiovIHsKKyAgICAgLypub3JtYWwgZXhpdDoqL3sK Ky0gICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0 aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNjcwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX3B5eF90XzEg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zf c2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg NjcyLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAg ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgICAgICBnb3Rv IF9fcHl4X0w1OworQEAgLTEyNzQ5LDcgKzEyNzQ5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0 IF8KKyAgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTkpOworICAgICAgIF9fcHl4X3RfMTAg PSBfX3B5eF9saW5lbm87IF9fcHl4X3RfMTIgPSBfX3B5eF9jbGluZW5vOyBfX3B5eF90XzEzID0g X19weXhfZmlsZW5hbWU7CisgICAgICAgeworLSAgICAgICAgX19weXhfdF8xID0gKChzdHJ1Y3Qg X19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zf c2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4 X3Zfdik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3MCwgX19weXhf TDE1X2Vycm9yKQorKyAgICAgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVj dF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRh YiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfdik7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3MiwgX19weXhfTDE1X2Vycm9yKQorICAg ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAgICAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgICAgICB9CitAQCAtMTI3ODIsNyArMTI3ODIsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xOHNldF9wcm9wZXJ0eShzdHJ1Y3QgXworICAgICBfX3B5eF9MM19yZXR1cm46IHsKKyAgICAg ICBfX3B5eF90XzE5ID0gX19weXhfcjsKKyAgICAgICBfX3B5eF9yID0gMDsKKy0gICAgICBfX3B5 eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9f cHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgNjcwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBf X3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9z ZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhf dl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjcyLCBfX3B5eF9M MV9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgICAgICBfX3B5eF9yID0gX19weXhf dF8xOTsKK0BAIC0xMjc5Miw3ICsxMjc5Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisg ICAgIF9fcHl4X0w1OjsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo2NzEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzMKKyAgKiAg ICAgICAgIGZpbmFsbHk6CisgICogICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUo dikKKyAgKiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTEyODAwLDEzICsxMjgwMCwxMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eShzdHJ1Y3QgXworICAqICAg ICBAX2Vycm9ycworICAqLworICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3Rf MSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNjcxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9 IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNjczLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworICAgX19weXhfciA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7Cisg ICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjYzNgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzOAorICAqIAorICAq ICAgICBAX2Vycm9ycworICAqICAgICBkZWYgc2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIHZhbHVl PVRydWUsIGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTEyODMxLDcgKzEyODMxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0 IF8KKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Njc0CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3NgorICAq IAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgc2V0X29wdGlvbihzZWxmLCBwcm9wLCB2 YWx1ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEyODc5LDcgKzEy ODc5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMjFzZXRfb3B0aW9uKFB5T2JqZWN0ICoKKyAgICAgICAgIH0KKyAgICAgICB9Cisg ICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5 KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVz LCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0X29wdGlvbiIpIDwgMCkpIF9fUFlYX0VSUigwLCA2 NzQsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0 aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBv c19hcmdzLCAic2V0X29wdGlvbiIpIDwgMCkpIF9fUFlYX0VSUigwLCA2NzYsIF9fcHl4X0wzX2Vy cm9yKQorICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKyAgICAgICBzd2l0Y2ggKFB5VHVwbGVfR0VU X1NJWkUoX19weXhfYXJncykpIHsKK0BAIC0xMjg5NSw3ICsxMjg5NSw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIxc2V0X29wdGlv bihQeU9iamVjdCAqCisgICB9CisgICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19k b25lOworICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6OworLSAgX19QeXhfUmFpc2VBcmd0dXBs ZUludmFsaWQoInNldF9vcHRpb24iLCAwLCAxLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2Fy Z3MpKTsgX19QWVhfRVJSKDAsIDY3NCwgX19weXhfTDNfZXJyb3IpCisrICBfX1B5eF9SYWlzZUFy Z3R1cGxlSW52YWxpZCgic2V0X29wdGlvbiIsIDAsIDEsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19w eXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNjc2LCBfX3B5eF9MM19lcnJvcikKKyAgIF9fcHl4X0wz X2Vycm9yOjsKKyAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRl eHQuc2V0X29wdGlvbiIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CitAQCAtMTI5MzUsNyArMTI5 MzUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8yMHNldF9vcHRpb24oc3RydWN0IF9fcAorICAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoInNldF9vcHRpb24iLCAwKTsKKyAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3Byb3ApOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3NgorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3OAorICAqICAgICBkZWYgc2V0X29wdGlvbihzZWxm LCBwcm9wLCB2YWx1ZT1UcnVlKToKKyAgKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X29wdGlv biIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTI5NDYsMTkgKzEyOTQ2LDE5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1Y3QgX19w CisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKyAgICAgaWYgKHVubGlrZWx5 KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworICAgICAgIFB5RXJyX1NldE5vbmUoUHlF eGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCA2NzYsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA2NzgsIF9fcHl4X0wxX2Vycm9yKQorICAgICB9Cisg ICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 NzcKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzkKKyAgKiAgICAgICAg ICIiIldyYXBzOiBtcHZfc2V0X29wdGlvbiIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAorICAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgY2RlZiBtcHZfZm9ybWF0IGZvcm1hdCA9IHNlbGYuX2Zvcm1h dF9mb3IodmFsdWUpCisgICogICAgICAgICBjZGVmIG1wdl9ub2RlIHYgPSBzZWxmLl9wcmVwX25h dGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFs TmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCA2NzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA2NzksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMik7CisgICBfX3B5eF90XzMgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAg LTEyOTcyLDIwICsxMjk3MiwyMCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMHNldF9vcHRpb24oc3RydWN0IF9fcAorICAgfQorICAg X19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhf dF8yLCBfX3B5eF90XzMsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfMiwgX19weXhfdl9wcm9wKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsg X19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDY3NywgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA2NzksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdl9wcm9wLCBfX3B5eF90XzEpOworICAgX19weXhfdF8xID0gMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzgKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2ODAKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgK KyAgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCisgICogICAgICAgICBjZGVmIG1wdl9m b3JtYXQgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgY2RlZiBtcHZfbm9kZSB2ID0gc2VsZi5fcHJlcF9uYXRp dmVfdmFsdWUodmFsdWUsIGZvcm1hdCkKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAqLwor LSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19w eXhfdl9zZWxmKSwgX19weXhfbl9zX2Zvcm1hdF9mb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCA2NzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19Q eXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhf bl9zX2Zvcm1hdF9mb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2 ODAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICBfX3B5 eF90XzMgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlN ZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKK0BAIC0xMjk5OSwyNiArMTI5OTksMjYgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjBz ZXRfb3B0aW9uKHN0cnVjdCBfX3AKKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8g X19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X3Zh bHVlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X3ZhbHVl KTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3OCwgX19weXhfTDFfZXJyb3IpCisr ICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2ODAsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhf dF8yKTsgX19weXhfdF8yID0gMDsKKy0gIF9fcHl4X3RfNCA9ICgoZW51bSBtcHZfZm9ybWF0KV9f UHl4X1B5SW50X0FzX2VudW1fX21wdl9mb3JtYXQoX19weXhfdF8xKSk7IGlmICh1bmxpa2VseShQ eUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDY3OCwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzQgPSAoKGVudW0gbXB2X2Zvcm1hdClfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZm9y bWF0KF9fcHl4X3RfMSkpOyBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VS UigwLCA2ODAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7CisgICBfX3B5eF92X2Zvcm1hdCA9IF9fcHl4X3RfNDsKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2ODEKKyAgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCisgICog ICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkK KyAgKiAgICAgICAgIGNkZWYgbXB2X25vZGUgdiA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZh bHVlLCBmb3JtYXQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGNk ZWYgaW50IGVycgorICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MKKyAgKi8KKy0g IF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChfX3B5eF92X2Zv cm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3OSwgX19weXhf TDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3Jt YXQoX19weXhfdl9mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA2ODEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBf X3B5eF92X3YgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbmF0aXZlX3ZhbHVl KF9fcHl4X3Zfc2VsZiwgX19weXhfdl92YWx1ZSwgX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjY4MgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY4 NAorICAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIq IHByb3BfYworICAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMTMwMjcsMTcgKzEzMDI3LDE3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1Y3QgX19wCisgICovCisg ICAvKnRyeToqLyB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 ODMKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY4NQorICAqICAgICAg ICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MKKyAgKiAgICAgICAgIHRyeToKKyAgKiAgICAgICAg ICAgICBwcm9wX2MgPSBwcm9wICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAg ICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfc2V0X29w dGlvbigKKyAgKi8KKy0gICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19w eXhfdl9wcm9wKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF81KSAmJiBQeUVycl9PY2N1cnJlZCgp KSkgX19QWVhfRVJSKDAsIDY4MywgX19weXhfTDRfZXJyb3IpCisrICAgIF9fcHl4X3RfNSA9IF9f UHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4 X3RfNSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA2ODUsIF9fcHl4X0w0X2Vy cm9yKQorICAgICBfX3B5eF92X3Byb3BfYyA9IF9fcHl4X3RfNTsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY4NAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6Njg2CisgICogICAgICAgICB0cnk6CisgICogICAgICAgICAgICAgcHJvcF9j ID0gcHJvcAorICAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC0xMzA1Miw3ICsxMzA1Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1Y3QgX19w CisgICAgICAgICAjZW5kaWYKKyAgICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY4NQorKyAgICAgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njg3CisgICogICAgICAgICAgICAgcHJvcF9jID0gcHJv cAorICAqICAgICAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgICAgIGVyciA9 IG1wdl9zZXRfb3B0aW9uKCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTMwNjIs NyArMTMwNjIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8yMHNldF9vcHRpb24oc3RydWN0IF9fcAorICAgICAgICAgICBfX3B5eF92 X2VyciA9IG1wdl9zZXRfb3B0aW9uKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9wcm9wX2Ms IE1QVl9GT1JNQVRfTk9ERSwgKCZfX3B5eF92X3YpKTsKKyAgICAgICAgIH0KKyAKKy0gICAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2ODQKKysgICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2ODYKKyAgKiAgICAgICAgIHRyeToKKyAgKiAgICAg ICAgICAgICBwcm9wX2MgPSBwcm9wCisgICogICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEzMDgyLDcgKzEzMDgyLDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjBzZXRfb3B0 aW9uKHN0cnVjdCBfX3AKKyAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjY5MgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5 NAorICAqICAgICAgICAgICAgICAgICApCisgICogICAgICAgICBmaW5hbGx5OgorICAqICAgICAg ICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKHYpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0xMzA5MSw3ICsxMzA5MSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1Y3QgX19wCisg ICovCisgICAvKmZpbmFsbHk6Ki8geworICAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgIF9f cHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUo X19weXhfdl9zZWxmLCBfX3B5eF92X3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA2OTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0 IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92 X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5 eF92X3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2OTQsIF9fcHl4 X0wxX2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworICAgICAgIGdvdG8gX19weXhfTDU7 CitAQCAtMTMxMTQsNyArMTMxMTQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMHNldF9vcHRpb24oc3RydWN0IF9fcAorICAgICAg IF9fUHl4X1hHT1RSRUYoX19weXhfdF8xNCk7CisgICAgICAgX19weXhfdF82ID0gX19weXhfbGlu ZW5vOyBfX3B5eF90XzcgPSBfX3B5eF9jbGluZW5vOyBfX3B5eF90XzggPSBfX3B5eF9maWxlbmFt ZTsKKyAgICAgICB7CistICAgICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3Ry dWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92 dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjkyLCBfX3B5eF9MMTBfZXJyb3IpCisr ICAgICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0 aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNjk0LCBfX3B5eF9MMTBfZXJyb3IpCisgICAgICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKyAgICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworICAgICAgIH0KK0BAIC0xMzE0Nyw3ICsxMzE0Nyw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlv bihzdHJ1Y3QgX19wCisgICAgIF9fcHl4X0w1OjsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2OTMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo2OTUKKyAgKiAgICAgICAgIGZpbmFsbHk6CisgICogICAgICAgICAgICAgc2VsZi5fZnJl ZV9uYXRpdmVfdmFsdWUodikKKyAgKiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTEzMTU1LDEzICsxMzE1NSwxMyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMHNldF9vcHRpb24oc3Ry dWN0IF9fcAorICAqICAgICBAX2Vycm9ycworICAqLworICAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjkzLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjk1LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19weXhfciA9IF9fcHl4X3RfMTsKKyAgIF9f cHl4X3RfMSA9IDA7CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjY3NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjY3NgorICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgc2V0X29wdGlvbihzZWxm LCBwcm9wLCB2YWx1ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEz MTgzLDcgKzEzMTgzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMjBzZXRfb3B0aW9uKHN0cnVjdCBfX3AKKyAgIHJldHVybiBfX3B5 eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njk2CisrLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5OAorICAqIAorICAqICAgICBAX2Vycm9y cworICAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTEzMjE1LDcgKzEzMjE1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjJpbml0aWFsaXplKHN0cnVjdCBfX3AKKyAg IGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJp bml0aWFsaXplIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 Njk4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAwCisgICogICAgIGRl ZiBpbml0aWFsaXplKHNlbGYpOgorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9pbml0aWFsaXpl IiIiCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0xMzIyNiwxMiArMTMyMjYsMTIgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjJpbml0aWFsaXplKHN0cnVjdCBfX3AK KyAgIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworICAgICBpZiAodW5saWtlbHko IShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7CisgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4 Y19Bc3NlcnRpb25FcnJvcik7CistICAgICAgX19QWVhfRVJSKDAsIDY5OCwgX19weXhfTDFfZXJy b3IpCisrICAgICAgX19QWVhfRVJSKDAsIDcwMCwgX19weXhfTDFfZXJyb3IpCisgICAgIH0KKyAg IH0KKyAgICNlbmRpZgorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcw MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwMgorICAqICAgICAgICAg YXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICogICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTMyNDYsNyArMTMy NDYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8yMmluaXRpYWxpemUoc3RydWN0IF9fcAorICAgICAgICNlbmRpZgorICAgICAgIC8q dHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MDEKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDMKKyAgKiAg ICAgICAgIGNkZWYgaW50IGVycgorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAg ICAgICBlcnIgPSBtcHZfaW5pdGlhbGl6ZShzZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC0xMzI1Niw3ICsxMzI1Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIyaW5pdGlhbGl6ZShzdHJ1Y3QgX19w CisgICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9pbml0aWFsaXplKF9fcHl4X3Zfc2VsZi0+X2N0 eCk7CisgICAgICAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3MDAKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAyCisgICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzI3 NSw3ICsxMzI3NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzIyaW5pdGlhbGl6ZShzdHJ1Y3QgX19wCisgICAgICAgfQorICAgfQor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwMgorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwNAorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAg KiAgICAgICAgICAgICBlcnIgPSBtcHZfaW5pdGlhbGl6ZShzZWxmLl9jdHgpCisgICogICAgICAg ICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzI4MywxMyAr MTMyODMsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMjJpbml0aWFsaXplKHN0cnVjdCBfX3AKKyAgKiAgICAgZGVmIHdhaXRfZXZl bnQoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcwMiwgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcwNCwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisgICBfX3B5 eF90XzEgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2OTYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 OTgKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAgICAgZGVmIGluaXRpYWxpemUoc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzMwOCw3ICsxMzMwOCw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIy aW5pdGlhbGl6ZShzdHJ1Y3QgX19wCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwNAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3MDYKKyAgKiAgICAgICAgIHJldHVybiBlcnIKKyAgKiAKKyAgKiAgICAgZGVm IHdhaXRfZXZlbnQoc2VsZiwgdGltZW91dD1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTEzMzQ5LDcgKzEzMzQ5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjV3YWl0X2V2ZW50KFB5T2JqZWN0ICoKKyAg ICAgICAgIH0KKyAgICAgICB9CisgICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewor LSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9r d2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAid2FpdF9ldmVudCIp IDwgMCkpIF9fUFlYX0VSUigwLCA3MDQsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYgKHVu bGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFy Z25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAid2FpdF9ldmVudCIpIDwgMCkpIF9fUFlYX0VS UigwLCA3MDYsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKyAgICAg ICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpIHsKK0BAIC0xMzM2Myw3ICsx MzM2Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzI1d2FpdF9ldmVudChQeU9iamVjdCAqCisgICB9CisgICBnb3RvIF9fcHl4X0w0 X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6Owor LSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIndhaXRfZXZlbnQiLCAwLCAwLCAxLCBQeVR1 cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDcwNCwgX19weXhfTDNfZXJy b3IpCisrICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgid2FpdF9ldmVudCIsIDAsIDAsIDEs IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNzA2LCBfX3B5eF9M M19lcnJvcikKKyAgIF9fcHl4X0wzX2Vycm9yOjsKKyAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2LkNvbnRleHQud2FpdF9ldmVudCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7CitAQCAtMTMzOTEsNyArMTMzOTEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNHdhaXRfZXZlbnQoc3RydWN0IF9fcAorICAg aW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndh aXRfZXZlbnQiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MDYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDgKKyAgKiAgICAgZGVm IHdhaXRfZXZlbnQoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgKiAgICAgICAgICIiIldyYXBzOiBt cHZfd2FpdF9ldmVudCIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTM0MDIsMTIgKzEzNDAyLDEyIEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI0d2FpdF9ldmVu dChzdHJ1Y3QgX19wCisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKyAgICAg aWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworICAgICAgIFB5RXJy X1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCA3MDYs IF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA3MDgsIF9fcHl4X0wxX2Vycm9y KQorICAgICB9CisgICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3MDcKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDkK KyAgKiAgICAgICAgICIiIldyYXBzOiBtcHZfd2FpdF9ldmVudCIiIgorICAqICAgICAgICAgYXNz ZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgY2RlZiBkb3VibGUgdGltZW91dF9kID0gdGltZW91 dCBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGVsc2UgLTEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTEzNDE2LDE0ICsxMzQxNiwxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNHdhaXRfZXZlbnQoc3RydWN0IF9fcAor ICAqLworICAgX19weXhfdF8yID0gKF9fcHl4X3ZfdGltZW91dCAhPSBQeV9Ob25lKTsKKyAgIGlm ICgoX19weXhfdF8yICE9IDApKSB7CistICAgIF9fcHl4X3RfMyA9IF9fcHl4X1B5RmxvYXRfQXNE b3VibGUoX19weXhfdl90aW1lb3V0KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGRvdWJs ZSktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA3MDcsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX3B5eF90XzMgPSBfX3B5eF9QeUZsb2F0X0FzRG91YmxlKF9fcHl4X3ZfdGlt ZW91dCk7IGlmICh1bmxpa2VseSgoX19weXhfdF8zID09IChkb3VibGUpLTEpICYmIFB5RXJyX09j Y3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNzA5LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19weXhf dF8xID0gX19weXhfdF8zOworICAgfSBlbHNlIHsKKyAgICAgX19weXhfdF8xID0gLTEuMDsKKyAg IH0KKyAgIF9fcHl4X3ZfdGltZW91dF9kID0gX19weXhfdF8xOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjcwOQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjcxMQorICAqICAgICAgICAgY2RlZiBkb3VibGUgdGltZW91dF9kID0gdGltZW91dCBp ZiB0aW1lb3V0IGlzIG5vdCBOb25lIGVsc2UgLTEKKyAgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50 KiBldmVudAorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTEzNDM4LDcgKzEzNDM4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjR3YWl0X2V2ZW50KHN0cnVjdCBfX3AKKyAg ICAgICAjZW5kaWYKKyAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzEwCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzEyCisgICogICAgICAgICBjZGVmIG1wdl9ldmVudCogZXZlbnQKKyAgKiAg ICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgZXZlbnQgPSBtcHZfd2FpdF9ldmVu dChzZWxmLl9jdHgsIHRpbWVvdXRfZCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTEzNDQ4LDcgKzEzNDQ4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMjR3YWl0X2V2ZW50KHN0cnVjdCBfX3AKKyAgICAgICAgIF9f cHl4X3ZfZXZlbnQgPSBtcHZfd2FpdF9ldmVudChfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3Zf dGltZW91dF9kKTsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjcwOQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MTEKKyAgKiAgICAgICAgIGNkZWYgZG91YmxlIHRpbWVvdXRfZCA9IHRpbWVvdXQgaWYgdGltZW91 dCBpcyBub3QgTm9uZSBlbHNlIC0xCisgICogICAgICAgICBjZGVmIG1wdl9ldmVudCogZXZlbnQK KyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xMzQ2Nyw3ICsxMzQ2Nyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzI0d2FpdF9ldmVudChzdHJ1Y3QgX19wCisgICAgICAgfQor ICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxMQorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxMworICAqICAgICAgICAgd2l0aCBub2dp bDoKKyAgKiAgICAgICAgICAgICBldmVudCA9IG1wdl93YWl0X2V2ZW50KHNlbGYuX2N0eCwgdGlt ZW91dF9kKQorICAqICAgICAgICAgcmV0dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzQ3NSwxNiArMTM0NzUsMTYgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjR3 YWl0X2V2ZW50KHN0cnVjdCBfX3AKKyAgKiAgICAgZGVmIHdha2V1cChzZWxmKToKKyAgKi8KKyAg IF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9D YWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudCkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3MTEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlP YmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNzEzLCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgX19weXhfdF81ID0gKChzdHJ1Y3QgX19weXhf dnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKikoKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdF80KS0+X19weXhfdnRhYikt Pl9pbml0KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilf X3B5eF90XzQpLCBfX3B5eF92X2V2ZW50LCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7IGlm ICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDcxMSwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzUgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FdmVudCAqKSgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RXZlbnQgKilfX3B5eF90XzQpLT5fX3B5eF92dGFiKS0+X2luaXQoKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3RfNCksIF9fcHl4X3ZfZXZlbnQs ICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBf X1BZWF9FUlIoMCwgNzEzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzUpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgICBfX3B5 eF9yID0gX19weXhfdF81OworICAgX19weXhfdF81ID0gMDsKKyAgIGdvdG8gX19weXhfTDA7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzA0CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzA2CisgICogICAgICAgICByZXR1cm4gZXJyCisgICog CisgICogICAgIGRlZiB3YWl0X2V2ZW50KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzUwNCw3ICsxMzUwNCw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI0d2FpdF9ldmVudChz dHJ1Y3QgX19wCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjcxMworKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MTUKKyAgKiAgICAgICAgIHJldHVybiBFdmVudCgpLl9pbml0KGV2ZW50LCBzZWxmKQorICAqIAor ICAqICAgICBkZWYgd2FrZXVwKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMTM1MzQsNyArMTM1MzQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNndha2V1cChzdHJ1Y3QgX19weXhfbworICAgaW50IF9f cHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndha2V1cCIs IDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxNQorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxNworICAqICAgICBkZWYgd2FrZXVwKHNl bGYpOgorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAiIiIKKyAgKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEzNTQ1LDEy ICsxMzU0NSwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8yNndha2V1cChzdHJ1Y3QgX19weXhfbworICAgaWYgKHVubGlrZWx5KCFQ eV9PcHRpbWl6ZUZsYWcpKSB7CisgICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0 eCAhPSAwKSkpIHsKKyAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsK Ky0gICAgICBfX1BZWF9FUlIoMCwgNzE1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1BZWF9F UlIoMCwgNzE3LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgfQorICAgfQorICAgI2VuZGlmCisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE2CisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzE4CisgICogICAgICAgICAiIiJXcmFwczogbXB2X3dha2V1 cCIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgd2l0aCBub2dp bDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEzNTY1LDcgKzEzNTY1LDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MjZ3YWtldXAoc3RydWN0IF9fcHl4X28KKyAgICAgICAjZW5kaWYKKyAgICAgICAvKnRyeToqLyB7 CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE3CisrICAg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE5CisgICogICAgICAgICBh c3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAg IG1wdl93YWtldXAoc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MTM1NzUsNyArMTM1NzUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8yNndha2V1cChzdHJ1Y3QgX19weXhfbworICAgICAgICAgbXB2 X3dha2V1cChfX3B5eF92X3NlbGYtPl9jdHgpOworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE2CisrICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjcxOAorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAiIiIK KyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzU5NCw3ICsxMzU5NCw3IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI2d2Fr ZXVwKHN0cnVjdCBfX3B5eF9vCisgICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjcxMworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjcxNQorICAqICAgICAgICAgcmV0dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpCisg ICogCisgICogICAgIGRlZiB3YWtldXAoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xMzYxNCw3ICsxMzYxNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI2d2FrZXVwKHN0cnVjdCBfX3B5eF9vCisgICBy ZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjcxOQorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjEKKyAgKiAgICAgICAg ICAgICBtcHZfd2FrZXVwKHNlbGYuX2N0eCkKKyAgKiAKKyAgKiAgICAgZGVmIHNldF93YWtldXBf Y2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMTM2NDksNyArMTM2NDksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yOHNldF93YWtldXBfY2FsbGJhY2socworICAgaW50IF9f cHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldF93YWtl dXBfY2FsbGJhY2siLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3MjEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjMKKyAgKiAgICAg ZGVmIHNldF93YWtldXBfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgorICAqICAgICAgICAgIiIi V3JhcHM6IG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrIiIiCisgICogICAgICAgICBhc3NlcnQgc2Vs Zi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzY2MCwyNSArMTM2NjAs MjUgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMjhzZXRfd2FrZXVwX2NhbGxiYWNrKHMKKyAgIGlmICh1bmxpa2VseSghUHlfT3B0aW1p emVGbGFnKSkgeworICAgICBpZiAodW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkp KSB7CisgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7CistICAgICAg X19QWVhfRVJSKDAsIDcyMSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19QWVhfRVJSKDAsIDcy MywgX19weXhfTDFfZXJyb3IpCisgICAgIH0KKyAgIH0KKyAgICNlbmRpZgorIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyMgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjcyNAorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfd2FrZXVwX2Nh bGxiYWNrIiIiCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBjZGVm IHVpbnQ2NF90IG5hbWUgPSA8dWludDY0X3Q+aWQoc2VsZikgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisgICogICAgICAg ICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNldChjYWxsYmFjaykKKyAgKi8KKy0gIF9fcHl4X3RfMSA9 IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfYnVpbHRpbl9pZCwgKChQeU9iamVjdCAq KV9fcHl4X3Zfc2VsZikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3 MjIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF9idWlsdGluX2lkLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcyNCwgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Fz X3VpbnQ2NF90KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09ICgodWludDY0 X3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDcyMiwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEp OyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2Nj dXJyZWQoKSkpIF9fUFlYX0VSUigwLCA3MjQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX3B5eF92X25hbWUgPSAoKHVpbnQ2 NF90KV9fcHl4X3RfMik7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzIzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzI1CisgICogICAgICAg ICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBjZGVmIHVpbnQ2NF90IG5hbWUgPSA8dWlu dDY0X3Q+aWQoc2VsZikKKyAgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjayAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTM2OTEsMTQgKzEzNjkxLDE0IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI4c2V0 X3dha2V1cF9jYWxsYmFjayhzCisgICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5jYWxsYmFj ayk7CisgICBfX3B5eF92X3NlbGYtPmNhbGxiYWNrID0gX19weXhfdl9jYWxsYmFjazsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjQKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo3MjYKKyAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgbmFtZSA9 IDx1aW50NjRfdD5pZChzZWxmKQorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNr CisgICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNldChjYWxsYmFjaykgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAg ICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9jdHgsIF9jX2NhbGxiYWNrLCA8dm9p ZCo+bmFtZSkKKyAgKi8KKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIo X19weXhfdl9zZWxmLT5jYWxsYmFja3RocmVhZCwgX19weXhfbl9zX3NldCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDcyNCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF90XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0 aHJlYWQsIF9fcHl4X25fc19zZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigwLCA3MjYsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Cisg ICBfX3B5eF90XzQgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtl bHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKK0BAIC0xMzcxMiwxMiArMTM3MTIsMTIg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMjhzZXRfd2FrZXVwX2NhbGxiYWNrKHMKKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90 XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMywgX19weXhfdF80LCBfX3B5 eF92X2NhbGxiYWNrKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5 eF92X2NhbGxiYWNrKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcyNCwgX19weXhf TDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3MjYs IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjcyNQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyNworICAqICAg ICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisgICogICAgICAgICBzZWxmLmNhbGxiYWNr dGhyZWFkLnNldChjYWxsYmFjaykKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzczMiw3ICsxMzczMiw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI4c2V0X3dha2V1cF9j YWxsYmFjayhzCisgICAgICAgI2VuZGlmCisgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyNgorKyAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyOAorICAqICAgICAgICAgc2VsZi5jYWxsYmFja3Ro cmVhZC5zZXQoY2FsbGJhY2spCisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAg ICAgIG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lk Kj5uYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTM3NDIsNyArMTM3NDIs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8yOHNldF93YWtldXBfY2FsbGJhY2socworICAgICAgICAgbXB2X3NldF93YWtldXBfY2Fs bGJhY2soX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f Y19jYWxsYmFjaywgKCh2b2lkICopX19weXhfdl9uYW1lKSk7CisgICAgICAgfQorIAorLSAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjUKKysgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzI3CisgICogICAgICAgICBzZWxmLmNhbGxiYWNrID0g Y2FsbGJhY2sKKyAgKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2V0KGNhbGxiYWNrKQor ICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTEzNzYxLDcgKzEzNzYxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMjhzZXRfd2FrZXVwX2NhbGxiYWNrKHMKKyAgICAgICB9Cisg ICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE5CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzIxCisgICogICAgICAgICAgICAgbXB2X3dh a2V1cChzZWxmLl9jdHgpCisgICogCisgICogICAgIGRlZiBzZXRfd2FrZXVwX2NhbGxiYWNrKHNl bGYsIGNhbGxiYWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEzNzg0LDcg KzEzNzg0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMjhzZXRfd2FrZXVwX2NhbGxiYWNrKHMKKyAgIHJldHVybiBfX3B5eF9yOwor IH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzI4CisrLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczMAorICAqICAgICAgICAgICAgIG1wdl9zZXRfd2Fr ZXVwX2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1lKQorICAqIAor ICAqICAgICBkZWYgZ2V0X3dha2V1cF9waXBlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTM4MTYsNyArMTM4MTYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93YWtldXBfcGlwZShzdHJ1Ywor ICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo ImdldF93YWtldXBfcGlwZSIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjczMAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczMgorICAq ICAgICBkZWYgZ2V0X3dha2V1cF9waXBlKHNlbGYpOgorICAqICAgICAgICAgIiIiV3JhcHM6IG1w dl9nZXRfd2FrZXVwX3BpcGUiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEzODI3LDEyICsxMzgyNywxMiBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93 YWtldXBfcGlwZShzdHJ1YworICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Cisg ICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKyAgICAgICBQ eUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIoMCwg NzMwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1BZWF9FUlIoMCwgNzMyLCBfX3B5eF9MMV9l cnJvcikKKyAgICAgfQorICAgfQorICAgI2VuZGlmCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzMyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzM0CisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBjZGVmIGludCBw aXBlCisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtMTM4NDcsNyArMTM4NDcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93YWtldXBfcGlwZShzdHJ1YworICAgICAg ICNlbmRpZgorICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3MzMKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo3MzUKKyAgKiAgICAgICAgIGNkZWYgaW50IHBpcGUKKyAgKiAgICAgICAgIHdpdGgg bm9naWw6CisgICogICAgICAgICAgICAgcGlwZSA9IG1wdl9nZXRfd2FrZXVwX3BpcGUoc2VsZi5f Y3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTM4NTcsNyArMTM4NTcsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8zMGdldF93YWtldXBfcGlwZShzdHJ1YworICAgICAgICAgX19weXhfdl9waXBlID0gbXB2X2dl dF93YWtldXBfcGlwZShfX3B5eF92X3NlbGYtPl9jdHgpOworICAgICAgIH0KKyAKKy0gICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzMyCisrICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjczNAorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAor ICAqICAgICAgICAgY2RlZiBpbnQgcGlwZQorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEzODc2LDcgKzEzODc2LDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzBnZXRfd2Fr ZXVwX3BpcGUoc3RydWMKKyAgICAgICB9CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzM0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzM2CisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIHBpcGUgPSBtcHZf Z2V0X3dha2V1cF9waXBlKHNlbGYuX2N0eCkKKyAgKiAgICAgICAgIHJldHVybiBwaXBlICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzg4NCwxMyArMTM4ODQsMTMgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzBnZXRf d2FrZXVwX3BpcGUoc3RydWMKKyAgKiAgICAgZGVmIF9fY2luaXRfXyhzZWxmKToKKyAgKi8KKyAg IF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9t X2ludChfX3B5eF92X3BpcGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA3MzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9p bnQoX19weXhfdl9waXBlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg NzM2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19w eXhfciA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgICBnb3RvIF9fcHl4X0wwOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyOAorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczMAorICAqICAgICAgICAgICAgIG1wdl9zZXRfd2Fr ZXVwX2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1lKQorICAqIAor ICAqICAgICBkZWYgZ2V0X3dha2V1cF9waXBlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTM5MDksNyArMTM5MDksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93YWtldXBfcGlwZShzdHJ1Ywor ICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3MzYKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzM4CisgICogICAg ICAgICByZXR1cm4gcGlwZQorICAqIAorICAqICAgICBkZWYgX19jaW5pdF9fKHNlbGYpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTM5NDcsMjAgKzEzOTQ3LDIwIEBAIHN0YXRp YyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMyX19jaW5pdF9f KHN0cnVjdCBfX3B5eF9vYmpfCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19jaW5pdF9fIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzM3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NzM5CisgICogCisgICogICAgIGRlZiBfX2Npbml0X18oc2VsZik6CisgICogICAgICAg ICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAg c2VsZi5fY3R4ID0gbXB2X2NyZWF0ZSgpCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeU9i amVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5faWQsICgoUHlPYmplY3QgKilfX3B5eF92X3Nl bGYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNzM3LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhf YnVpbHRpbl9pZCwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3MzksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CistICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChf X3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2NF90KS0xKSkgJiYg UHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA3MzcsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfdF8yID0gX19QeXhfUHlJbnRfQXNfdWludDY0X3QoX19weXhfdF8xKTsgaWYgKHVubGlr ZWx5KChfX3B5eF90XzIgPT0gKCh1aW50NjRfdCktMSkpICYmIFB5RXJyX09jY3VycmVkKCkpKSBf X1BZWF9FUlIoMCwgNzM5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworICAgX19weXhfdl9jdHhpZCA9ICgodWludDY0X3QpX19weXhf dF8yKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MzgKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDAKKyAgKiAgICAgZGVmIF9fY2luaXRf XyhzZWxmKToKKyAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQo c2VsZikKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xMzk3NSw3ICsxMzk3NSw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzMyX19jaW5pdF9fKHN0cnVjdCBfX3B5eF9vYmpfCisgICAg ICAgI2VuZGlmCisgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjczOQorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjc0MQorICAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRf dD5pZChzZWxmKQorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICBzZWxm Ll9jdHggPSBtcHZfY3JlYXRlKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEz OTg1LDcgKzEzOTg1LDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMzJfX2Npbml0X18oc3RydWN0IF9fcHl4X29ial8KKyAgICAgICAgIF9fcHl4 X3Zfc2VsZi0+X2N0eCA9IG1wdl9jcmVhdGUoKTsKKyAgICAgICB9CisgCistICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczOAorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3NDAKKyAgKiAgICAgZGVmIF9fY2luaXRfXyhzZWxmKToKKyAgKiAg ICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2VsZikKKyAgKiAgICAg ICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNDAwNCw3 ICsxNDAwNCw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzMyX19jaW5pdF9fKHN0cnVjdCBfX3B5eF9vYmpfCisgICAgICAgfQorICAgfQorIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0MAorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjc0MgorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAg ICAgICAgICAgICBzZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkKKyAgKiAgICAgICAgIGlmIG5vdCBz ZWxmLl9jdHg6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNDAxNCwxNCArMTQw MTQsMTQgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMzJfX2Npbml0X18oc3RydWN0IF9fcHl4X29ial8KKyAgIF9fcHl4X3RfMyA9ICgoIShfX3B5 eF92X3NlbGYtPl9jdHggIT0gMCkpICE9IDApOworICAgaWYgKHVubGlrZWx5KF9fcHl4X3RfMykp IHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0MQorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQzCisgICogICAgICAgICAgICAgc2Vs Zi5fY3R4ID0gbXB2X2NyZWF0ZSgpCisgICogICAgICAgICBpZiBub3Qgc2VsZi5fY3R4OgorICAq ICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKCJDb250ZXh0IGNyZWF0aW9uIGVycm9yIikgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVh ZCA9IENhbGxiYWNrVGhyZWFkKCkKKyAgKiAgICAgICAgIF9jYWxsYmFja3NbY3R4aWRdID0gc2Vs Zi5jYWxsYmFja3RocmVhZAorICAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9f cHl4X3RfNCwgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBf X1BZWF9FUlIoMCwgNzQxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19w eXhfdF80KSkgX19QWVhfRVJSKDAsIDc0MywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzQpOworICAgICBfX3B5eF90XzUgPSBOVUxMOworICAgICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNCkpKSB7 CitAQCAtMTQwMzUsMTQgKzE0MDM1LDE0IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzMyX19jaW5pdF9fKHN0cnVjdCBfX3B5eF9vYmpfCisgICAg IH0KKyAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFy Z3MoX19weXhfdF80LCBfX3B5eF90XzUsIF9fcHl4X2twX3NfQ29udGV4dF9jcmVhdGlvbl9lcnJv cikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNCwgX19weXhfa3Bfc19Db250 ZXh0X2NyZWF0aW9uX2Vycm9yKTsKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5 eF90XzUgPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3 NDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA3NDMsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgICAgIF9f UHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICBfX1BZWF9FUlIoMCwgNzQxLCBfX3B5eF9MMV9lcnJv cikKKysgICAgX19QWVhfRVJSKDAsIDc0MywgX19weXhfTDFfZXJyb3IpCisgCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDAKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc0MgorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAg ICAgICBzZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkKKyAgKiAgICAgICAgIGlmIG5vdCBzZWxmLl9j dHg6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNDA1MSwxNCArMTQwNTEsMTQg QEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJf X2Npbml0X18oc3RydWN0IF9fcHl4X29ial8KKyAgKi8KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo3NDQKKyAgKiAgICAgICAgIGlmIG5vdCBzZWxmLl9jdHg6CisgICogICAgICAgICAg ICAgcmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3IiKQorICAqICAgICAgICAg c2VsZi5jYWxsYmFja3RocmVhZCA9IENhbGxiYWNrVGhyZWFkKCkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgX2NhbGxiYWNrc1tjdHhpZF0gPSBzZWxmLmNhbGxiYWNr dGhyZWFkCisgICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gZGljdCgpCisgICovCist ICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX0NhbGxiYWNr VGhyZWFkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNzQyLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5 eF9uX3NfQ2FsbGJhY2tUaHJlYWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VS UigwLCA3NDQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Cisg ICBfX3B5eF90XzUgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzQpKSkgeworQEAgLTE0MDcyLDcgKzE0MDcyLDcg QEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJf X2Npbml0X18oc3RydWN0IF9fcHl4X29ial8KKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90 XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSkgOiBf X1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF80KTsKKyAgIF9fUHl4X1hERUNSRUYoX19w eXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDc0MiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA3NDQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAg IF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKK0BAIC0xNDA4MSw3ICsxNDA4MSw3IEBAIHN0YXRp YyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMyX19jaW5pdF9f KHN0cnVjdCBfX3B5eF9vYmpfCisgICBfX3B5eF92X3NlbGYtPmNhbGxiYWNrdGhyZWFkID0gX19w eXhfdF8xOworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3NDMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDUK KyAgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcigiQ29udGV4dCBjcmVhdGlvbiBlcnJvciIp CisgICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkID0gQ2FsbGJhY2tUaHJlYWQoKQorICAq ICAgICAgICAgX2NhbGxiYWNrc1tjdHhpZF0gPSBzZWxmLmNhbGxiYWNrdGhyZWFkICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNDA5MCwxNyArMTQwOTAsMTcgQEAgc3RhdGljIGlu dCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJfX2Npbml0X18oc3Ry dWN0IF9fcHl4X29ial8KKyAgKi8KKyAgIF9fcHl4X3RfMSA9IF9fcHl4X3Zfc2VsZi0+Y2FsbGJh Y2t0aHJlYWQ7CisgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKy0gIGlmICh1bmxpa2VseShf X1B5eF9TZXRJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3Ms IF9fcHl4X3ZfY3R4aWQsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21f dWludDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA3NDMsIF9fcHl4X0wxX2Vycm9y KQorKyAgaWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX2NhbGxiYWNrcywgX19weXhfdl9jdHhpZCwgX19weXhfdF8xLCB1aW50NjRfdCwg MCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAs IDc0NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDQKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDYKKyAgKiAgICAgICAgIHNlbGYu Y2FsbGJhY2t0aHJlYWQgPSBDYWxsYmFja1RocmVhZCgpCisgICogICAgICAgICBfY2FsbGJhY2tz W2N0eGlkXSA9IHNlbGYuY2FsbGJhY2t0aHJlYWQKKyAgKiAgICAgICAgIHNlbGYucmVwbHlfdXNl cmRhdGEgPSBkaWN0KCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAg X3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0gPSBzZWxmLnJlcGx5X3VzZXJkYXRhCisgICogICAgICAg ICBzZWxmLmNhbGxiYWNrdGhyZWFkLnN0YXJ0KCkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4 X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgNzQ0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5RGljdF9O ZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNzQ2 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhf R0lWRVJFRihfX3B5eF90XzEpOworICAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+cmVwbHlf dXNlcmRhdGEpOworQEAgLTE0MTA4LDcgKzE0MTA4LDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJfX2Npbml0X18oc3RydWN0IF9fcHl4X29i al8KKyAgIF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBfX3B5eF90XzE7CisgICBfX3B5 eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0NQor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0NworICAqICAgICAgICAgX2Nh bGxiYWNrc1tjdHhpZF0gPSBzZWxmLmNhbGxiYWNrdGhyZWFkCisgICogICAgICAgICBzZWxmLnJl cGx5X3VzZXJkYXRhID0gZGljdCgpCisgICogICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2N0eGlk XSA9IHNlbGYucmVwbHlfdXNlcmRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTE0MTE3LDE3ICsxNDExNywxNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8zMl9fY2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXworICAqLworICAg X19weXhfdF8xID0gX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YTsKKyAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzEpOworLSAgaWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcywgX19weXhfdl9jdHhpZCwgX19w eXhfdF8xLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkg PCAwKSkgX19QWVhfRVJSKDAsIDc0NSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHko X19QeXhfU2V0SXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNl cmRhdGFzLCBfX3B5eF92X2N0eGlkLCBfX3B5eF90XzEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUlu dF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzQ3LCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0NgorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjc0OAorICAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YSA9IGRpY3QoKQorICAqICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0gPSBzZWxmLnJl cGx5X3VzZXJkYXRhCisgICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnN0YXJ0KCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorICAqICAgICBAX2Vycm9ycworICAqLwor LSAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPmNh bGxiYWNrdGhyZWFkLCBfX3B5eF9uX3Nfc3RhcnQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCA3NDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF80ID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPmNhbGxiYWNrdGhyZWFkLCBfX3B5eF9u X3Nfc3RhcnQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NDgsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICBfX3B5eF90XzUg PSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2Rf Q2hlY2soX19weXhfdF80KSkpIHsKK0BAIC0xNDE0MSwxMiArMTQxNDEsMTIgQEAgc3RhdGljIGlu dCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJfX2Npbml0X18oc3Ry dWN0IF9fcHl4X29ial8KKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzUpID8gX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSkgOiBfX1B5eF9QeU9iamVj dF9DYWxsTm9BcmcoX19weXhfdF80KTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19w eXhfdF81ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDc0 NiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA3NDgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Cisg ICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjczNgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcz OAorICAqICAgICAgICAgcmV0dXJuIHBpcGUKKyAgKiAKKyAgKiAgICAgZGVmIF9fY2luaXRfXyhz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE0MTY4LDcgKzE0MTY4LDcg QEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJf X2Npbml0X18oc3RydWN0IF9fcHl4X29ial8KKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0v KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQ5CisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc1MQorICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYg b2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtMTQyMTYsNyArMTQyMTYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNW9ic2VydmVfcHJvcGVydHko UHlPYgorICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+ IDApKSB7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRz KF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJvYnNl cnZlX3Byb3BlcnR5IikgPCAwKSkgX19QWVhfRVJSKDAsIDc0OSwgX19weXhfTDNfZXJyb3IpCisr ICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3 ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJvYnNlcnZlX3Byb3Bl cnR5IikgPCAwKSkgX19QWVhfRVJSKDAsIDc1MSwgX19weXhfTDNfZXJyb3IpCisgICAgICAgfQor ICAgICB9IGVsc2UgeworICAgICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdz KSkgeworQEAgLTE0MjMyLDcgKzE0MjMyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzVvYnNlcnZlX3Byb3BlcnR5KFB5T2IKKyAg IH0KKyAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CisgICBfX3B5eF9M NV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgib2JzZXJ2 ZV9wcm9wZXJ0eSIsIDAsIDEsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZ WF9FUlIoMCwgNzQ5LCBfX3B5eF9MM19lcnJvcikKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZh bGlkKCJvYnNlcnZlX3Byb3BlcnR5IiwgMCwgMSwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKSk7IF9fUFlYX0VSUigwLCA3NTEsIF9fcHl4X0wzX2Vycm9yKQorICAgX19weXhfTDNfZXJy b3I6OworICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5v YnNlcnZlX3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKK0BAIC0xNDI2OCw3ICsx NDI2OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1CisgICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgib2JzZXJ2ZV9wcm9wZXJ0eSIsIDApOworICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zf cHJvcCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzUxCisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzUzCisgICogICAgIGRlZiBvYnNlcnZl X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6CisgICogICAgICAgICAiIiJXcmFwczog bXB2X29ic2VydmVfcHJvcGVydHkiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE0Mjc5LDQxICsxNDI3OSw0MSBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNG9i c2VydmVfcHJvcGVydHkoc3RydQorICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7 CisgICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKyAgICAg ICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIo MCwgNzUxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1BZWF9FUlIoMCwgNzUzLCBfX3B5eF9M MV9lcnJvcikKKyAgICAgfQorICAgfQorICAgI2VuZGlmCisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NzUyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NzU0CisgICogICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVfcHJvcGVydHkiIiIKKyAg KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRf ZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KyAgKiAgICAgICAgIGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorICAqICAgICAgICAg dXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKyAgKi8K Ky0gIF9fcHl4X3RfMSA9IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfMSA9PSAoKFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIoMCwgNzUyLCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRhKTsgaWYg KHVubGlrZWx5KF9fcHl4X3RfMSA9PSAoKFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIoMCwgNzU0 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4X3ZfaWRfZGF0YSA9ICgodWludDY0X3QpX19weXhf dF8xKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTMKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTUKKyAgKiAgICAgICAgIGFzc2VydCBz ZWxmLl9jdHgKKyAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5o YXNoKGRhdGEpCisgICogICAgICAgICBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5y ZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKyAgKiAgICAgICAgIGlmIHVzZXJkYXRh cyBpcyBOb25lOgorICAqLworLSAgX19weXhfdF8xID0gUHlPYmplY3RfSGFzaChfX3B5eF92X2Rh dGEpOyBpZiAodW5saWtlbHkoX19weXhfdF8xID09ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlYX0VS UigwLCA3NTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gUHlPYmplY3RfSGFzaChf X3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF8xID09ICgoUHlfaGFzaF90KS0xKSkp IF9fUFlYX0VSUigwLCA3NTUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfdl9pZF9kYXRhID0g KCh1aW50NjRfdClfX3B5eF90XzEpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjc1NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1NgorICAq ICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKyAg KiAgICAgICAgIGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorICAqICAgICAgICAgdXNl cmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6Cisg ICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9 IF9SZXBseVVzZXJEYXRhKGRhdGEpCisgICovCistICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X25fc19nZXQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA3NTQsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3Nl bGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMCwgNzU2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOworLSAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5 eF92X2lkX2RhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NTQs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRf dChfX3B5eF92X2lkX2RhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigw LCA3NTYsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICBf X3B5eF90XzUgPSBOVUxMOworICAgX19weXhfdF82ID0gMDsKK0BAIC0xNDMzMCw3ICsxNDMzMCw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1CisgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCisg ICBpZiAoUHlGdW5jdGlvbl9DaGVjayhfX3B5eF90XzMpKSB7CisgICAgIFB5T2JqZWN0ICpfX3B5 eF90ZW1wWzNdID0ge19fcHl4X3RfNSwgX19weXhfdF80LCBQeV9Ob25lfTsKKy0gICAgX19weXhf dF8yID0gX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1f X3B5eF90XzYsIDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlGdW5j dGlvbl9GYXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1fX3B5eF90XzYsIDIrX19weXhf dF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzU2LCBfX3B5eF9M MV9lcnJvcikKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwor ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf NCk7IF9fcHl4X3RfNCA9IDA7CitAQCAtMTQzMzksMTQgKzE0MzM5LDE0IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM0b2JzZXJ2ZV9w cm9wZXJ0eShzdHJ1CisgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAorICAgaWYgKF9fUHl4X1B5 RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzMpKSB7CisgICAgIFB5T2JqZWN0ICpfX3B5eF90 ZW1wWzNdID0ge19fcHl4X3RfNSwgX19weXhfdF80LCBQeV9Ob25lfTsKKy0gICAgX19weXhfdF8y ID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8zLCBfX3B5eF90ZW1wKzEtX19w eXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDc1NCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Q0Z1bmN0 aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90 XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NTYsIF9fcHl4X0wx X2Vycm9yKQorICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Cisg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKKyAgIH0gZWxzZQorICAgI2VuZGlmCisgICB7CistICAgIF9fcHl4 X3RfNyA9IFB5VHVwbGVfTmV3KDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90Xzcp KSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF83ID0gUHlU dXBsZV9OZXcoMitfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VS UigwLCA3NTYsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsK KyAgICAgaWYgKF9fcHl4X3RfNSkgeworICAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF81KTsg UHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDAsIF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IE5V TEw7CitAQCAtMTQzNTcsNyArMTQzNTcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNG9ic2VydmVfcHJvcGVydHkoc3RydQorICAg ICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOworICAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3Rf NywgMStfX3B5eF90XzYsIFB5X05vbmUpOworICAgICBfX3B5eF90XzQgPSAwOworLSAgICBfX3B5 eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMywgX19weXhfdF83LCBOVUxMKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJv cikKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzMsIF9fcHl4 X3RfNywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc1Niwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAgIH0KK0BAIC0xNDM2NSw3ICsx NDM2NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1CisgICBfX3B5eF92X3VzZXJkYXRhcyA9 IF9fcHl4X3RfMjsKKyAgIF9fcHl4X3RfMiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzU1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzU3CisgICogICAgICAgICBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKyAgKiAgICAg ICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCisg ICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTE0Mzc2LDE0ICsxNDM3NiwxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNG9ic2VydmVfcHJvcGVydHkoc3RydQor ICAgX19weXhfdF85ID0gKF9fcHl4X3RfOCAhPSAwKTsKKyAgIGlmIChfX3B5eF90XzkpIHsKKyAK Ky0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1NgorKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzU4CisgICogICAgICAgICB1c2VyZGF0YXMgPSBz ZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorICAqICAgICAgICAgaWYgdXNl cmRhdGFzIGlzIE5vbmU6CisgICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9k YXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9IFRydWUKKyAgKiAg ICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCisgICovCistICAgIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF8zLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc1NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8zLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0 YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc1OCwgX19weXhfTDFf ZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgICBfX3B5eF90XzcgPSBO VUxMOworICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9k X0NoZWNrKF9fcHl4X3RfMykpKSB7CitAQCAtMTQzOTcsMTUgKzE0Mzk3LDE1IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM0b2JzZXJ2 ZV9wcm9wZXJ0eShzdHJ1CisgICAgIH0KKyAgICAgX19weXhfdF8yID0gKF9fcHl4X3RfNykgPyBf X1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8zLCBfX3B5eF90XzcsIF9fcHl4X3ZfZGF0 YSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdl9kYXRhKTsK KyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NTYsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NTgsIF9fcHl4X0wx X2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICAgIGlmICh1bmxpa2VseShfX1B5eF9TZXRJ dGVtSW50KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X3ZfaWRfZGF0YSwgX19w eXhfdF8yLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkg PCAwKSkgX19QWVhfRVJSKDAsIDc1NiwgX19weXhfTDFfZXJyb3IpCisrICAgIGlmICh1bmxpa2Vs eShfX1B5eF9TZXRJdGVtSW50KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X3Zf aWRfZGF0YSwgX19weXhfdF8yLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRf dCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc1OCwgX19weXhfTDFfZXJyb3IpCisgICAg IF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOworICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Zf dXNlcmRhdGFzLCBfX3B5eF90XzIpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19w eXhfdF8yID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1 NQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzU3CisgICogICAgICAg ICBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKyAgKiAgICAgICAgIHVzZXJkYXRhcyA9 IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCisgICogICAgICAgICBpZiB1 c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE0NDE0 LDIzICsxNDQxNCwyMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8zNG9ic2VydmVfcHJvcGVydHkoc3RydQorICAqLworICAgfQorIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1NworKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjc1OQorICAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5v bmU6CisgICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJk YXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisgICogICAgICAgICB1c2VyZGF0YXMub2JzZXJ2 ZWQgPSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHByb3Ag PSBfc3RyZW5jKHByb3ApCisgICogICAgICAgICBjZGVmIGNoYXIqIHByb3BjID0gcHJvcAorICAq LworLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YXMsIF9f cHl4X25fc19vYnNlcnZlZCwgUHlfVHJ1ZSkgPCAwKSBfX1BZWF9FUlIoMCwgNzU3LCBfX3B5eF9M MV9lcnJvcikKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRh dGFzLCBfX3B5eF9uX3Nfb2JzZXJ2ZWQsIFB5X1RydWUpIDwgMCkgX19QWVhfRVJSKDAsIDc1OSwg X19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzU4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzYwCisgICogICAgICAg ICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVz ZXJEYXRhKGRhdGEpCisgICogICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlCisgICog ICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisgICogICAgICAgICBjZGVmIGNoYXIqIHByb3BjID0gcHJvcAorICAqICAgICAgICAgY2RlZiBp bnQgZXJyCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMywgX19w eXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc1 OCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf MywgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDAsIDc2MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAg IF9fcHl4X3RfNyA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlr ZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7CitAQCAtMTQ0NDQsMjMgKzE0NDQ0LDIz IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1CisgICB9CisgICBfX3B5eF90XzIgPSAoX19weXhf dF83KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzMsIF9fcHl4X3RfNywgX19w eXhfdl9wcm9wKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF92 X3Byb3ApOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzU4LCBfX3B5eF9MMV9lcnJv cikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc2MCwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3By b3AsIF9fcHl4X3RfMik7CisgICBfX3B5eF90XzIgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjc1OQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjc2MQorICAqICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gVHJ1ZQorICAqICAgICAg ICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKyAgKiAgICAgICAgIGNkZWYgY2hhciogcHJvcGMgPSBw cm9wICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGNkZWYgaW50IGVy cgorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gIF9fcHl4X3RfMTAgPSBfX1B5eF9Q eU9iamVjdF9Bc1dyaXRhYmxlU3RyaW5nKF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9f cHl4X3RfMTApICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNzU5LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9Bc1dyaXRhYmxlU3RyaW5n KF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfMTApICYmIFB5RXJyX09jY3Vy cmVkKCkpKSBfX1BZWF9FUlIoMCwgNzYxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4X3ZfcHJv cGMgPSBfX3B5eF90XzEwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojc2MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc2MworICAqICAgICAg ICAgY2RlZiBjaGFyKiBwcm9wYyA9IHByb3AKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAq ICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE0 NDc1LDcgKzE0NDc1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMzRvYnNlcnZlX3Byb3BlcnR5KHN0cnUKKyAgICAgICAjZW5kaWYK KyAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NzYyCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzY0CisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAgICAgICAgIHdpdGggbm9naWw6Cisg ICogICAgICAgICAgICAgZXJyID0gbXB2X29ic2VydmVfcHJvcGVydHkoICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xNDQ4NSw3ICsxNDQ4NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0 eShzdHJ1CisgICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9vYnNlcnZlX3Byb3BlcnR5KF9fcHl4 X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9pZF9kYXRhLCBfX3B5eF92X3Byb3BjLCBNUFZfRk9STUFU X05PREUpOworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NzYxCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc2Mwor ICAqICAgICAgICAgY2RlZiBjaGFyKiBwcm9wYyA9IHByb3AKKyAgKiAgICAgICAgIGNkZWYgaW50 IGVycgorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTE0NTA0LDcgKzE0NTA0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzRvYnNlcnZlX3Byb3BlcnR5KHN0cnUKKyAgICAg ICB9CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzY4Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzcwCisgICogICAgICAgICAgICAg ICAgIE1QVl9GT1JNQVRfTk9ERSwKKyAgKiAgICAgICAgICAgICApCisgICogICAgICAgICByZXR1 cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNDUxMiwxMyArMTQ1MTIs MTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMzRvYnNlcnZlX3Byb3BlcnR5KHN0cnUKKyAgKiAgICAgQF9lcnJvcnMKKyAgKi8KKyAg IF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9t X2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDc2OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2lu dChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc3 MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgIF9fcHl4 X3IgPSBfX3B5eF90XzI7CisgICBfX3B5eF90XzIgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDkKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTEKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAg ICAgZGVmIG9ic2VydmVfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGF0YT1Ob25lKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE0NTQzLDcgKzE0NTQzLDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzRvYnNlcnZlX3By b3BlcnR5KHN0cnUKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NzcxCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojc3MworICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgdW5vYnNlcnZlX3Byb3Bl cnR5KHNlbGYsIGRhdGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTQ1ODUs NyArMTQ1ODUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0eShzdAorICAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVub2JzZXJ2ZV9wcm9wZXJ0 eSIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3MworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3NQorICAqICAgICBkZWYgdW5vYnNl cnZlX3Byb3BlcnR5KHNlbGYsIGRhdGEpOgorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl91bm9i c2VydmVfcHJvcGVydHkiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE0NTk2LDMxICsxNDU5NiwzMSBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNnVub2JzZXJ2 ZV9wcm9wZXJ0eShzdAorICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CisgICAg IGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKyAgICAgICBQeUVy cl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIoMCwgNzcz LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1BZWF9FUlIoMCwgNzc1LCBfX3B5eF9MMV9lcnJv cikKKyAgICAgfQorICAgfQorICAgI2VuZGlmCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6Nzc0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc2 CisgICogICAgICAgICAiIiJXcmFwczogbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSIiIgorICAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRh ID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAq ICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9u ZSkKKyAgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBub3QgTm9uZToKKyAgKi8KKy0gIF9fcHl4 X3RfMSA9IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5KF9fcHl4X3Rf MSA9PSAoKFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIoMCwgNzc0LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfMSA9IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfMSA9PSAoKFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIoMCwgNzc2LCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fcHl4X3ZfaWRfZGF0YSA9ICgodWludDY0X3QpX19weXhfdF8xKTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzUKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzcKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgK KyAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEp CisgICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRh LCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBpZiB1c2Vy ZGF0YXMgaXMgbm90IE5vbmU6CisgICogICAgICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0g RmFsc2UKKyAgKi8KKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19w eXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc3NSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90 XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRh dGEsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigw LCA3NzcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICBf X3B5eF90XzQgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfaWRfZGF0YSk7IGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc3NSwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfaWRfZGF0 YSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc3NywgX19weXhfTDFf ZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgIF9fcHl4X3RfNSA9IE5VTEw7 CisgICBfX3B5eF90XzYgPSAwOworQEAgLTE0NjM3LDcgKzE0NjM3LDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVf cHJvcGVydHkoc3QKKyAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKyAgIGlmIChQeUZ1bmN0aW9u X0NoZWNrKF9fcHl4X3RfMykpIHsKKyAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19w eXhfdF81LCBfX3B5eF90XzQsIFB5X05vbmV9OworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUZ1 bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5 eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4 X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9f cHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzcsIF9fcHl4X0wxX2Vycm9yKQorICAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzIpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKK0BAIC0xNDY0NiwxNCArMTQ2NDYsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVydHkoc3QKKyAg ICNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCisgICBpZiAoX19QeXhfUHlGYXN0Q0Z1bmN0aW9uX0No ZWNrKF9fcHl4X3RfMykpIHsKKyAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhf dF81LCBfX3B5eF90XzQsIFB5X05vbmV9OworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUNGdW5j dGlvbl9GYXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1fX3B5eF90XzYsIDIrX19weXhf dF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzc1LCBfX3B5eF9M MV9lcnJvcikKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19w eXhfdF8zLCBfX3B5eF90ZW1wKzEtX19weXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc3NywgX19weXhfTDFfZXJyb3IpCisgICAgIF9f UHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKyAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAw OworICAgfSBlbHNlCisgICAjZW5kaWYKKyAgIHsKKy0gICAgX19weXhfdF83ID0gUHlUdXBsZV9O ZXcoMitfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA3 NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygyK19fcHl4 X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDc3NywgX19weXhf TDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworICAgICBpZiAoX19weXhf dF81KSB7CisgICAgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzUpOyBQeVR1cGxlX1NFVF9JVEVN KF9fcHl4X3RfNywgMCwgX19weXhfdF81KTsgX19weXhfdF81ID0gTlVMTDsKK0BAIC0xNDY2NCw3 ICsxNDY2NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzM2dW5vYnNlcnZlX3Byb3BlcnR5KHN0CisgICAgIF9fUHl4X0dJVkVSRUYo UHlfTm9uZSk7CisgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfNiwg UHlfTm9uZSk7CisgICAgIF9fcHl4X3RfNCA9IDA7CistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5 T2JqZWN0X0NhbGwoX19weXhfdF8zLCBfX3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90 XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMywgX19weXhfdF83LCBOVUxMKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzc3LCBfX3B5eF9MMV9lcnJvcikK KyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzcpOyBfX3B5eF90XzcgPSAwOworICAgfQorQEAgLTE0NjcyLDcgKzE0NjcyLDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9i c2VydmVfcHJvcGVydHkoc3QKKyAgIF9fcHl4X3ZfdXNlcmRhdGFzID0gX19weXhfdF8yOworICAg X19weXhfdF8yID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 NzYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzgKKyAgKiAgICAgICAg IGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisgICogICAgICAg ICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorICAq ICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTQ2ODMsNDAgKzE0NjgzLDQwIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM2dW5vYnNlcnZlX3Byb3BlcnR5KHN0 CisgICBfX3B5eF90XzkgPSAoX19weXhfdF84ICE9IDApOworICAgaWYgKF9fcHl4X3RfOSkgewor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc3CisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzkKKyAgKiAgICAgICAgIHVzZXJkYXRhcyA9 IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCisgICogICAgICAgICBpZiB1 c2VyZGF0YXMgaXMgbm90IE5vbmU6CisgICogICAgICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVk ID0gRmFsc2UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIGlm IHVzZXJkYXRhcy5jb3VudGVyIDw9IDA6CisgICogICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJl cGx5X3VzZXJkYXRhW2lkX2RhdGFdCisgICovCistICAgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRB dHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3Nfb2JzZXJ2ZWQsIFB5X0ZhbHNlKSA8 IDApIF9fUFlYX0VSUigwLCA3NzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAoX19QeXhfUHlP YmplY3RfU2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX29ic2VydmVkLCBQ eV9GYWxzZSkgPCAwKSBfX1BZWF9FUlIoMCwgNzc5LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3OAorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzgwCisgICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgbm90 IE5vbmU6CisgICogICAgICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gRmFsc2UKKyAgKiAg ICAgICAgICAgICBpZiB1c2VyZGF0YXMuY291bnRlciA8PSAwOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJlcGx5X3VzZXJkYXRhW2lk X2RhdGFdCisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKi8KKy0gICAgX19weXhfdF8yID0g X19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX2Nv dW50ZXIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzgsIF9fcHl4 X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3NfY291bnRlcik7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDc4MCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzIpOworLSAgICBfX3B5eF90XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5 eF90XzIsIF9fcHl4X2ludF8wLCBQeV9MRSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNzc4LCBfX3B5eF9MMV9lcnJvcikK KysgICAgX19weXhfdF8zID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdF8yLCBfX3B5eF9p bnRfMCwgUHlfTEUpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19w eXhfdF8zKSkgX19QWVhfRVJSKDAsIDc4MCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBfX3B5eF90XzkgPSBfX1B5eF9Q eU9iamVjdF9Jc1RydWUoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfOSA8IDApKSBf X1BZWF9FUlIoMCwgNzc4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF85ID0gX19QeXhf UHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5eF90XzkgPCAwKSkg X19QWVhfRVJSKDAsIDc4MCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzMpOyBfX3B5eF90XzMgPSAwOworICAgICBpZiAoX19weXhfdF85KSB7CisgCistICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3OQorKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3ODEKKyAgKiAgICAgICAgICAgICB1c2VyZGF0YXMub2Jz ZXJ2ZWQgPSBGYWxzZQorICAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcy5jb3VudGVyIDw9IDA6 CisgICogICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAq ICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gICAgICBpZiAodW5saWtlbHkoX19QeXhfRGVs SXRlbUludChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2lkX2RhdGEsIHVp bnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZ WF9FUlIoMCwgNzc5LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBpZiAodW5saWtlbHkoX19QeXhf RGVsSXRlbUludChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2lkX2RhdGEs IHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBf X1BZWF9FUlIoMCwgNzgxLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc4CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjc4MAorICAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIG5vdCBOb25lOgorICAq ICAgICAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9IEZhbHNlCisgICogICAgICAgICAgICAg aWYgdXNlcmRhdGFzLmNvdW50ZXIgPD0gMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTE0NzI1LDcgKzE0NzI1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVydHkoc3QKKyAgKi8KKyAg ICAgfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc2CisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzgKKyAgKiAgICAgICAgIGNkZWYg dWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisgICogICAgICAgICB1c2Vy ZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorICAqICAgICAg ICAgaWYgdXNlcmRhdGFzIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtMTQ3MzQsNyArMTQ3MzQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0eShzdAorICAqLwor ICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4MQorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4MworICAqICAgICAgICAgICAgICAgICBk ZWwgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXQorICAqICAgICAgICAgY2RlZiBpbnQgZXJy CisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMTQ3NDksNyArMTQ3NDksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0eShzdAorICAgICAgICNl bmRpZgorICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3ODIKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3ODQKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAqICAgICAgICAgd2l0aCBub2dp bDoKKyAgKiAgICAgICAgICAgICBlcnIgPSBtcHZfdW5vYnNlcnZlX3Byb3BlcnR5KCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTQ3NTksNyArMTQ3NTksNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNnVub2JzZXJ2 ZV9wcm9wZXJ0eShzdAorICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfdW5vYnNlcnZlX3Byb3Bl cnR5KF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9pZF9kYXRhKTsKKyAgICAgICB9CisgCist ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4MQorKyAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3ODMKKyAgKiAgICAgICAgICAgICAgICAgZGVs IHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0KKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgor ICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTE0Nzc4LDcgKzE0Nzc4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVydHkoc3QKKyAgICAgICB9Cisg ICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg2CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg4CisgICogICAgICAgICAgICAgICAgIGlk X2RhdGEsCisgICogICAgICAgICAgICAgKQorICAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTQ3ODYsMTMgKzE0Nzg2LDEzIEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM2dW5vYnNl cnZlX3Byb3BlcnR5KHN0CisgICogICAgIGRlZiBzaHV0ZG93bihzZWxmKToKKyAgKi8KKyAgIF9f UHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2lu dChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc4 NiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2ludChf X3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc4OCwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgIF9fcHl4X3Ig PSBfX3B5eF90XzM7CisgICBfX3B5eF90XzMgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzEKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo3NzMKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAgICAg ZGVmIHVub2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBkYXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTE0ODE2LDcgKzE0ODE2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVydHkoc3QK KyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6Nzg4CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5MAorICAqICAg ICAgICAgcmV0dXJuIGVycgorICAqIAorICAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNDg1MSw3ICsxNDg1MSw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRv d24oc3RydWN0IF9fcHl4CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgic2h1dGRvd24iLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3ODkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3OTEKKyAgKiAKKyAgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOgorICAqICAgICAgICAgaWYg c2VsZi5fY3R4ID09IE5VTEw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNDg2 MSw3ICsxNDg2MSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24oc3RydWN0IF9fcHl4CisgICBfX3B5eF90XzEgPSAo KF9fcHl4X3Zfc2VsZi0+X2N0eCA9PSBOVUxMKSAhPSAwKTsKKyAgIGlmIChfX3B5eF90XzEpIHsK KyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5MAorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzkyCisgICogICAgIGRlZiBzaHV0ZG93bihz ZWxmKToKKyAgKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgorICAqICAgICAgICAgICAg IHJldHVybiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTQ4NzIsNyArMTQ4NzIs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8zOHNodXRkb3duKHN0cnVjdCBfX3B5eAorICAgICBfX3B5eF9yID0gUHlfTm9uZTsgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworICAgICBnb3RvIF9fcHl4X0wwOworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg5CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3OTEKKyAgKiAKKyAgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOgorICAq ICAgICAgICAgaWYgc2VsZi5fY3R4ID09IE5VTEw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xNDg4MSwyMCArMTQ4ODEsMjAgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzhzaHV0ZG93bihzdHJ1Y3QgX19weXgKKyAg Ki8KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTEKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTMKKyAgKiAgICAgICAgIGlmIHNl bGYuX2N0eCA9PSBOVUxMOgorICAqICAgICAgICAgICAgIHJldHVybgorICAqICAgICAgICAgY2Rl ZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIG1wdl90 ZXJtaW5hdGVfZGVzdHJveShzZWxmLl9jdHgpCisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9Q eU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5faWQsICgoUHlPYmplY3QgKilfX3B5eF92 X3NlbGYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzkxLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfYnVpbHRpbl9pZCwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3OTMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7CistICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Bc191aW50NjRf dChfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoKHVpbnQ2NF90KS0xKSkg JiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA3OTEsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfQXNfdWludDY0X3QoX19weXhfdF8yKTsgaWYgKHVu bGlrZWx5KChfX3B5eF90XzMgPT0gKCh1aW50NjRfdCktMSkpICYmIFB5RXJyX09jY3VycmVkKCkp KSBfX1BZWF9FUlIoMCwgNzkzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19weXhfdl9jdHhpZCA9ICgodWludDY0X3QpX19w eXhfdF8zKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTIKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTQKKyAgKiAgICAgICAgICAgICBy ZXR1cm4KKyAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2Vs ZikKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK K0BAIC0xNDkwOSw3ICsxNDkwOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24oc3RydWN0IF9fcHl4CisgICAgICAg I2VuZGlmCisgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc5MworKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjc5NQorICAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5p ZChzZWxmKQorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICBtcHZfdGVy bWluYXRlX2Rlc3Ryb3koc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMTQ5MTksNyArMTQ5MTksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zOHNodXRkb3duKHN0cnVjdCBfX3B5eAorICAgICAgICAg bXB2X3Rlcm1pbmF0ZV9kZXN0cm95KF9fcHl4X3Zfc2VsZi0+X2N0eCk7CisgICAgICAgfQorIAor LSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTIKKysgICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk0CisgICogICAgICAgICAgICAgcmV0dXJu CisgICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCisg ICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MTQ5MzgsMTQgKzE0OTM4LDE0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24oc3RydWN0IF9fcHl4CisgICAgICAgfQor ICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5NAorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5NgorICAqICAgICAgICAgd2l0aCBub2dp bDoKKyAgKiAgICAgICAgICAgICBtcHZfdGVybWluYXRlX2Rlc3Ryb3koc2VsZi5fY3R4KQorICAq ICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zaHV0ZG93bigpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGRlbCBfY2FsbGJhY2tzW2N0eGlkXQorICAqICAgICAg ICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdCisgICovCistICBfX3B5eF90XzQgPSBfX1B5 eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQsIF9fcHl4 X25fc19zaHV0ZG93bik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc5 NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRy U3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQsIF9fcHl4X25fc19zaHV0ZG93bik7IGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc5NiwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgIF9fcHl4X3RfNSA9IE5VTEw7CisgICBp ZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90 XzQpKSkgeworQEAgLTE0OTU5LDMwICsxNDk1OSwzMCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zOHNodXRkb3duKHN0cnVjdCBfX3B5 eAorICAgfQorICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X3RfNCwgX19weXhfdF81KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhf X3B5eF90XzQpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwor LSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzk0LCBfX3B5eF9MMV9l cnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc5NiwgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 Nzk1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk3CisgICogICAgICAg ICAgICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KHNlbGYuX2N0eCkKKyAgKiAgICAgICAgIHNlbGYu Y2FsbGJhY2t0aHJlYWQuc2h1dGRvd24oKQorICAqICAgICAgICAgZGVsIF9jYWxsYmFja3NbY3R4 aWRdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGRlbCBfcmVwbHlf dXNlcmRhdGFzW2N0eGlkXQorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKKyAgKi8K Ky0gIGlmICh1bmxpa2VseShfX1B5eF9EZWxJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGli c18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3ZfY3R4aWQsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUlu dF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzk1LCBfX3B5eF9M MV9lcnJvcikKKysgIGlmICh1bmxpa2VseShfX1B5eF9EZWxJdGVtSW50KF9fcHl4X3ZfOXZpZGN1 dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3ZfY3R4aWQsIHVpbnQ2NF90LCAwLCBf X1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzk3 LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3OTYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTgKKyAgKiAgICAg ICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRvd24oKQorICAqICAgICAgICAgZGVsIF9jYWxs YmFja3NbY3R4aWRdCisgICogICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0gICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5v bmUKKyAgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBOb25lCisgICovCistICBpZiAo dW5saWtlbHkoX19QeXhfRGVsSXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f cmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRf RnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc5NiwgX19weXhfTDFf ZXJyb3IpCisrICBpZiAodW5saWtlbHkoX19QeXhfRGVsSXRlbUludChfX3B5eF92Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50NjRfdCwg MCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAs IDc5OCwgX19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6Nzk3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk5CisgICog ICAgICAgICBkZWwgX2NhbGxiYWNrc1tjdHhpZF0KKyAgKiAgICAgICAgIGRlbCBfcmVwbHlfdXNl cmRhdGFzW2N0eGlkXQorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE0OTk1LDcgKzE0OTk1LDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzhzaHV0ZG93bihz dHJ1Y3QgX19weXgKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmNhbGxiYWNrKTsKKyAg IF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2sgPSBQeV9Ob25lOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjc5OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjgwMAorICAqICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdCisgICogICAg ICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorICAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YSA9IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1MDA4LDcgKzE1MDA4 LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMzhzaHV0ZG93bihzdHJ1Y3QgX19weXgKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3Nl bGYtPnJlcGx5X3VzZXJkYXRhKTsKKyAgIF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBQ eV9Ob25lOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5OQorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgwMQorICAqICAgICAgICAgc2VsZi5j YWxsYmFjayA9IE5vbmUKKyAgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBOb25lCisg ICogICAgICAgICBzZWxmLl9jdHggPSBOVUxMICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK K0BAIC0xNTAxNyw3ICsxNTAxNyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24oc3RydWN0IF9fcHl4CisgICovCisg ICBfX3B5eF92X3NlbGYtPl9jdHggPSBOVUxMOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjc4OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5 MAorICAqICAgICAgICAgcmV0dXJuIGVycgorICAqIAorICAqICAgICBkZWYgc2h1dGRvd24oc2Vs Zik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNTA0MCw3ICsxNTA0MCw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzM4c2h1dGRvd24oc3RydWN0IF9fcHl4CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxMworKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4MTUKKyAgKiAgICAgIyAgICAgcmV0dXJuIGN0eAorICAqIAorICAqICAg ICBkZWYgX19kZWFsbG9jX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xNTA2OSwxNCArMTUwNjksMTQgQEAgc3RhdGljIHZvaWQgX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzQwX19kZWFsbG9jX18oc3RydWN0IF9fcHl4X28KKyAgIGludCBf X3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlYWxs b2NfXyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNAor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNgorICAqIAorICAqICAgICBk ZWYgX19kZWFsbG9jX18oc2VsZik6CisgICogICAgICAgICBzZWxmLnNodXRkb3duKCkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorICAqIGNkZWYgdm9pZCAqX2NfZ2V0cHJvY2Fk ZHJlc3Modm9pZCAqY3R4LCBjb25zdCBjaGFyICpuYW1lKSB3aXRoIGdpbDoKKyAgKi8KKy0gIF9f cHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zf c2VsZiksIF9fcHl4X25fc19zaHV0ZG93bik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDgxNCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3Nfc2h1 dGRvd24pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA4MTYsIF9fcHl4 X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICBfX3B5eF90XzMgPSBO VUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF8yKSkpIHsKK0BAIC0xNTA5MCwxMiArMTUwOTAsMTIgQEAgc3RhdGljIHZvaWQg X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQwX19kZWFsbG9jX18oc3Ry dWN0IF9fcHl4X28KKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9D YWxsTm9BcmcoX19weXhfdF8yKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDgxNCwg X19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA4MTYsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjgxMworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNQor ICAqICAgICAjICAgICByZXR1cm4gY3R4CisgICogCisgICogICAgIGRlZiBfX2RlYWxsb2NfXyhz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1MjI3LDcgKzE1MjI3LDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNDRfX3NldHN0YXRlX2N5dGhvbl9fKEMKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0v KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODE2CisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjgxOAorICAqICAgICAgICAgc2VsZi5zaHV0ZG93bigpCisgICogCisg ICogY2RlZiB2b2lkICpfY19nZXRwcm9jYWRkcmVzcyh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm5h bWUpIHdpdGggZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTUyNTEsMTQg KzE1MjUxLDE0IEBAIHN0YXRpYyB2b2lkICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f Y19nZXRwcm9jYWRkcmVzcyh2b2lkICpfX3B5eF92X2N0eCwKKyAgICNlbmRpZgorICAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9jX2dldHByb2NhZGRyZXNzIiwgMCk7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODE3CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODE5CisgICogCisgICogY2RlZiB2b2lkICpfY19nZXRwcm9jYWRkcmVz cyh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUpIHdpdGggZ2lsOgorICAqICAgICByZXR1cm4g PHZvaWQgKj48aW50cHRyX3Q+KDxvYmplY3Q+Y3R4KShuYW1lKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogCisgICogY2RlZiB2b2lkIF9jX3VwZGF0ZWNiKHZvaWQgKmN0eCkgd2l0 aCBnaWw6CisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19w eXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgODE3LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhf X3B5eF92X25hbWUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA4MTks IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICBfX1B5eF9J TkNSRUYoKChQeU9iamVjdCAqKV9fcHl4X3ZfY3R4KSk7CisgICBfX3B5eF90XzMgPSAoKFB5T2Jq ZWN0ICopX19weXhfdl9jdHgpOyBfX3B5eF90XzQgPSBOVUxMOworQEAgLTE1Mjc0LDE1ICsxNTI3 NCwxNSBAQCBzdGF0aWMgdm9pZCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfZ2V0 cHJvY2FkZHJlc3Modm9pZCAqX19weXhfdl9jdHgsCisgICBfX3B5eF90XzEgPSAoX19weXhfdF80 KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzMsIF9fcHl4X3RfNCwgX19weXhf dF8yKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF90XzIpOwor ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA4MTcsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgODE5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7CistICBfX3B5eF90XzUgPSBfX1B5eF9QeUludF9Bc19pbnRwdHJfdChfX3B5eF90XzEpOyBp ZiAodW5saWtlbHkoKF9fcHl4X3RfNSA9PSAoKGludHB0cl90KS0xKSkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCA4MTcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF81ID0g X19QeXhfUHlJbnRfQXNfaW50cHRyX3QoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90 XzUgPT0gKChpbnRwdHJfdCktMSkpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwg ODE5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworICAgX19weXhfciA9ICgodm9pZCAqKSgoaW50cHRyX3QpX19weXhfdF81KSk7Cisg ICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjgxNgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxOAorICAqICAgICAg ICAgc2VsZi5zaHV0ZG93bigpCisgICogCisgICogY2RlZiB2b2lkICpfY19nZXRwcm9jYWRkcmVz cyh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUpIHdpdGggZ2lsOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtMTUzMDYsNyArMTUzMDYsNyBAQCBzdGF0aWMgdm9pZCAqX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfZ2V0cHJvY2FkZHJlc3Modm9pZCAqX19weXhfdl9j dHgsCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjgxOQorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MjEKKyAg KiAgICAgcmV0dXJuIDx2b2lkICo+PGludHB0cl90Pig8b2JqZWN0PmN0eCkobmFtZSkKKyAgKiAK KyAgKiBjZGVmIHZvaWQgX2NfdXBkYXRlY2Iodm9pZCAqY3R4KSB3aXRoIGdpbDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1MzI3LDcgKzE1MzI3LDcgQEAgc3RhdGljIHZvaWQg X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfdXBkYXRlY2Iodm9pZCAqX19weXhfdl9j dHgpIHsKKyAgICNlbmRpZgorICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9jX3VwZGF0 ZWNiIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODIwCisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODIyCisgICogCisgICogY2RlZiB2 b2lkIF9jX3VwZGF0ZWNiKHZvaWQgKmN0eCkgd2l0aCBnaWw6CisgICogICAgICg8b2JqZWN0PmN0 eCkoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTUzNDcsMTIgKzE1MzQ3LDEy IEBAIHN0YXRpYyB2b2lkIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX3VwZGF0ZWNi KHZvaWQgKl9fcHl4X3ZfY3R4KSB7CisgICB9CisgICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/ IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpIDogX19QeXhf UHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Myk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA4MjAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgODIyLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo4MTkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo4MjEKKyAgKiAgICAgcmV0dXJuIDx2b2lkICo+PGludHB0cl90Pig8b2JqZWN0PmN0eCko bmFtZSkKKyAgKiAKKyAgKiBjZGVmIHZvaWQgX2NfdXBkYXRlY2Iodm9pZCAqY3R4KSB3aXRoIGdp bDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1Mzc0LDcgKzE1Mzc0LDcgQEAg c3RhdGljIHZvaWQgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfdXBkYXRlY2Iodm9p ZCAqX19weXhfdl9jdHgpIHsKKyAgICNlbmRpZgorIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODg2CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4 OAorICAqICAgICAgICAgb2JqZWN0IG93bmVkCisgICogCisgICogICAgIGRlZiBfX2luaXRfXyhz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1NDA3LDE0ICsxNTQwNywx NCBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQ YXJhbXNfX19pbml0X18oc3RydWN0IF9fcHl4XworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwor ICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fIiwgMCk7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODg3CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODg5CisgICogCisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAg KiAgICAgICAgIHNlbGYub3duZWQgPSBbXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisg ICogICAgICAgICBzZWxmLnBhcmFtc1swXS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElE CisgICogCisgICovCistICBfX3B5eF90XzEgPSBQeUxpc3RfTmV3KDApOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4ODcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf dF8xID0gUHlMaXN0X05ldygwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgODg5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAg X19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworICAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+ b3duZWQpOworQEAgLTE1NDIyLDcgKzE1NDIyLDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX19faW5pdF9fKHN0cnVjdCBfX3B5eF8K KyAgIF9fcHl4X3Zfc2VsZi0+b3duZWQgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4OAorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5MAorICAqICAgICBkZWYgX19pbml0X18oc2VsZik6 CisgICogICAgICAgICBzZWxmLm93bmVkID0gW10KKyAgKiAgICAgICAgIHNlbGYucGFyYW1zWzBd LnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTE1NDMxLDcgKzE1NDMxLDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX19faW5pdF9fKHN0cnVjdCBfX3B5eF8KKyAg Ki8KKyAgIChfX3B5eF92X3NlbGYtPnBhcmFtc1swXSkudHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1f SU5WQUxJRDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4ODYKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4ODgKKyAgKiAgICAgICAgIG9iamVj dCBvd25lZAorICAqIAorICAqICAgICBkZWYgX19pbml0X18oc2VsZik6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xNTQ1MSw3ICsxNTQ1MSw3IEBAIHN0YXRpYyBpbnQgX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19fX2luaXRfXyhzdHJ1Y3Qg X19weXhfCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjg5MAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTIK KyAgKiAgICAgICAgIHNlbGYucGFyYW1zWzBdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFM SUQKKyAgKiAKKyAgKiAgICAgY2RlZiBhZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90 eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFsc2UpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTU0ODAsNyArMTU0ODAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfdm9pZHAoc3RydWN0Cisg ICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTEK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTMKKyAgKiAKKyAgKiAgICAg Y2RlZiBhZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJp bnQgb3duZWQ9RmFsc2UpOgorICAqICAgICAgICAgY291bnQgPSBsZW4oc2VsZi5vd25lZCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1NDg5LDI2ICsxNTQ4OSwyNiBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFt c19hZGRfdm9pZHAoc3RydWN0CisgICovCisgICBfX3B5eF90XzEgPSBfX3B5eF92X3NlbGYtPm93 bmVkOworICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7CistICBfX3B5eF90XzIgPSBQeU9iamVj dF9MZW5ndGgoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA9PSAoKFB5X3NzaXpl X3QpLTEpKSkgX19QWVhfRVJSKDAsIDg5MSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIg PSBQeU9iamVjdF9MZW5ndGgoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA9PSAo KFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDg5MywgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3RfMSA9IFB5 SW50X0Zyb21Tc2l6ZV90KF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDg5MSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBQeUludF9Gcm9t U3NpemVfdChfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA4OTMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBf X3B5eF92X2NvdW50ID0gX19weXhfdF8xOworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4OTQKKyAgKiAgICAgY2RlZiBhZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRl cl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFsc2UpOgorICAqICAgICAgICAg Y291bnQgPSBsZW4oc2VsZi5vd25lZCkKKyAgKiAgICAgICAgIGlmIGNvdW50ID49IE1BWF9SRU5E RVJfUEFSQU1TOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAg aWYgb3duZWQ6CisgICogICAgICAgICAgICAgICAgIGZyZWUocCkKKyAgKi8KKy0gIF9fcHl4X3Rf MSA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfY291bnQsIF9fcHl4X2ludF8zMiwgUHlf R0UpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDg5MiwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90XzMgPSBfX1B5eF9Q eU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBf X1BZWF9FUlIoMCwgODkyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IFB5T2JqZWN0 X1JpY2hDb21wYXJlKF9fcHl4X3ZfY291bnQsIF9fcHl4X2ludF8zMiwgUHlfR0UpOyBfX1B5eF9Y R09UUkVGKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDg5NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1Ry dWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwg ODk0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworICAgaWYgKF9fcHl4X3RfMykgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODkzCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo4OTUKKyAgKiAgICAgICAgIGNvdW50ID0gbGVuKHNlbGYub3duZWQpCisgICogICAgICAgICBp ZiBjb3VudCA+PSBNQVhfUkVOREVSX1BBUkFNUzoKKyAgKiAgICAgICAgICAgICBpZiBvd25lZDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1NTE4LDcgKzE1NTE4LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJh bXNfYWRkX3ZvaWRwKHN0cnVjdAorICAgICBfX3B5eF90XzMgPSAoX19weXhfdl9vd25lZCAhPSAw KTsKKyAgICAgaWYgKF9fcHl4X3RfMykgeworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4OTQKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6ODk2CisgICogICAgICAgICBpZiBjb3VudCA+PSBNQVhfUkVOREVSX1BBUkFNUzoKKyAgKiAg ICAgICAgICAgICBpZiBvd25lZDoKKyAgKiAgICAgICAgICAgICAgICAgZnJlZShwKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTU1MjcsNyArMTU1MjcsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRf dm9pZHAoc3RydWN0CisgICovCisgICAgICAgZnJlZShfX3B5eF92X3ApOworIAorLSAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTMKKysgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6ODk1CisgICogICAgICAgICBjb3VudCA9IGxlbihzZWxmLm93 bmVkKQorICAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJBTVM6CisgICogICAg ICAgICAgICAgaWYgb3duZWQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNTUz NiwxNCArMTU1MzYsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRkX3ZvaWRwKHN0cnVjdAorICAqLworICAgICB9Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTUKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5NworICAqICAgICAgICAgICAgIGlmIG93bmVk OgorICAqICAgICAgICAgICAgICAgICBmcmVlKHApCisgICogICAgICAgICAgICAgcmFpc2UgUHlN UFZFcnJvcigiUmVuZGVyUGFyYW1zIG92ZXJmbG93IikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorICAqIAorICAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLnR5cGUgPSB0CisgICov CistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3NfUHlN UFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDg5NSwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBf X3B5eF9uX3NfUHlNUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDAsIDg5NywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwor ICAgICBfX3B5eF90XzUgPSBOVUxMOworICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNCkpKSB7CitAQCAtMTU1NTcsMTQgKzE1 NTU3LDE0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNfUmVuZGVyUGFyYW1zX2FkZF92b2lkcChzdHJ1Y3QKKyAgICAgfQorICAgICBfX3B5eF90XzEg PSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzQsIF9fcHl4 X3RfNSwgX19weXhfa3Bfc19SZW5kZXJQYXJhbXNfb3ZlcmZsb3cpIDogX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X2twX3NfUmVuZGVyUGFyYW1zX292ZXJmbG93KTsK KyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworLSAgICBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4OTUsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4OTcsIF9fcHl4X0wx X2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwg MCwgMCwgMCk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwor LSAgICBfX1BZWF9FUlIoMCwgODk1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QWVhfRVJSKDAs IDg5NywgX19weXhfTDFfZXJyb3IpCisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4OTIKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5NAor ICAqICAgICBjZGVmIGFkZF92b2lkcChzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgdm9p ZCAqcCwgYmludCBvd25lZD1GYWxzZSk6CisgICogICAgICAgICBjb3VudCA9IGxlbihzZWxmLm93 bmVkKQorICAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJBTVM6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNTU3Myw1MiArMTU1NzMsNTIgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRk X3ZvaWRwKHN0cnVjdAorICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjg5NworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5OQor ICAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlJlbmRlclBhcmFtcyBvdmVyZmxvdyIp CisgICogCisgICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudF0udHlwZSA9IHQgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEg PSBwCisgICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudCArIDFdLnR5cGUgPSBNUFZfUkVOREVS X1BBUkFNX0lOVkFMSUQKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6 ZV90KF9fcHl4X3ZfY291bnQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoUHlfc3NpemVf dCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4OTcsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9jb3Vu dCk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9P Y2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDg5OSwgX19weXhfTDFfZXJyb3IpCisgICAoX19weXhf dl9zZWxmLT5wYXJhbXNbX19weXhfdF8yXSkudHlwZSA9IF9fcHl4X3ZfdDsKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5MDAKKyAgKiAKKyAgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50XS50 eXBlID0gdAorICAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEgPSBwICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50ICsgMV0u dHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJRAorICAqICAgICAgICAgc2VsZi5vd25lZC5h cHBlbmQob3duZWQpCisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVf dChfX3B5eF92X2NvdW50KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzIgPT0gKFB5X3NzaXplX3Qp LTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgODk4LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3ZfY291bnQp OyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoUHlfc3NpemVfdCktMSkgJiYgUHlFcnJfT2Nj dXJyZWQoKSkpIF9fUFlYX0VSUigwLCA5MDAsIF9fcHl4X0wxX2Vycm9yKQorICAgKF9fcHl4X3Zf c2VsZi0+cGFyYW1zW19fcHl4X3RfMl0pLmRhdGEgPSBfX3B5eF92X3A7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODk5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTAxCisgICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudF0udHlwZSA9IHQK KyAgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50XS5kYXRhID0gcAorICAqICAgICAgICAgc2Vs Zi5wYXJhbXNbY291bnQgKyAxXS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElEICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93 bmVkKQorICAqIAorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfQWRkT2JqQyhfX3B5 eF92X2NvdW50LCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDg5OSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5 eF9QeUludF9BZGRPYmpDKF9fcHl4X3ZfY291bnQsIF9fcHl4X2ludF8xLCAxLCAwLCAwKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTAxLCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbmRl eF9Bc1NzaXplX3QoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzIgPT0gKFB5X3Nz aXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgODk5LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3Rf MSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9P Y2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDkwMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgIChfX3B5eF92X3NlbGYtPnBhcmFt c1tfX3B5eF90XzJdKS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElEOworIAorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwMAorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjkwMgorICAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEg PSBwCisgICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudCArIDFdLnR5cGUgPSBNUFZfUkVOREVS X1BBUkFNX0lOVkFMSUQKKyAgKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogICAgIGNkZWYgYWRkX2ludChzZWxm LCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgaW50IHZhbCk6CisgICovCistICBfX3B5eF90XzEg PSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoX19weXhfdl9vd25lZCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDkwMCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEg PSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoX19weXhfdl9vd25lZCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDkwMiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0FwcGVuZChfX3B5 eF92X3NlbGYtPm93bmVkLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF82ID09ICgo aW50KS0xKSkpIF9fUFlYX0VSUigwLCA5MDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82 ID0gX19QeXhfUHlPYmplY3RfQXBwZW5kKF9fcHl4X3Zfc2VsZi0+b3duZWQsIF9fcHl4X3RfMSk7 IGlmICh1bmxpa2VseShfX3B5eF90XzYgPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDAsIDkwMiwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTAKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTIKKyAgKiAgICAgICAgIHNlbGYucGFyYW1z WzBdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQKKyAgKiAKKyAgKiAgICAgY2RlZiBh ZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3du ZWQ9RmFsc2UpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTU2NDIsNyArMTU2 NDIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz X1JlbmRlclBhcmFtc19hZGRfdm9pZHAoc3RydWN0CisgICByZXR1cm4gX19weXhfcjsKKyB9Cisg CistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwMgorKy8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5MDQKKyAgKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93 bmVkKQorICAqIAorICAqICAgICBjZGVmIGFkZF9pbnQoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90 eXBlIHQsIGludCB2YWwpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTU2NjAs NyArMTU2NjAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzX1JlbmRlclBhcmFtc19hZGRfaW50KHN0cnVjdCBfXworICAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImFkZF9pbnQiLCAwKTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDMKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDUKKyAgKiAKKyAgKiAgICAgY2RlZiBhZGRfaW50KHNl bGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBpbnQgdmFsKToKKyAgKiAgICAgICAgIGNkZWYg aW50ICpwID0gPGludCAqPm1hbGxvYyhzaXplb2YoaW50KSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTE1NjY5LDcgKzE1NjY5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRkX2ludChzdHJ1Y3QgX18K KyAgKi8KKyAgIF9fcHl4X3ZfcCA9ICgoaW50ICopbWFsbG9jKChzaXplb2YoaW50KSkpKTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDQKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDYKKyAgKiAgICAgY2RlZiBhZGRfaW50KHNlbGYsIG1w dl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBpbnQgdmFsKToKKyAgKiAgICAgICAgIGNkZWYgaW50ICpw ID0gPGludCAqPm1hbGxvYyhzaXplb2YoaW50KSkKKyAgKiAgICAgICAgIHBbMF0gPSB2YWwgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1Njc4LDE4ICsxNTY3OCwxOCBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFt c19hZGRfaW50KHN0cnVjdCBfXworICAqLworICAgKF9fcHl4X3ZfcFswXSkgPSBfX3B5eF92X3Zh bDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDUKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDcKKyAgKiAgICAgICAgIGNkZWYgaW50ICpw ID0gPGludCAqPm1hbGxvYyhzaXplb2YoaW50KSkKKyAgKiAgICAgICAgIHBbMF0gPSB2YWwKKyAg KiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAKKyAgKiAgICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1f dHlwZSB0LCBjaGFyICpzKToKKyAgKi8KKy0gIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3Nl bGYtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9zZWxmLCBfX3B5eF92X3QsIF9fcHl4 X3ZfcCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkwNSwg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmLT5fX3B5 eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl90LCBfX3B5eF92X3AsIE5V TEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MDcsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo5MDIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDQKKyAg KiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQorICAqIAorICAqICAgICBjZGVmIGFk ZF9pbnQoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGludCB2YWwpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTU3MTAsNyArMTU3MTAsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfaW50 KHN0cnVjdCBfXworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MDcKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTA5CisgICogICAgICAgICBzZWxmLmFkZF92b2lkcCh0LCBwKQorICAqIAorICAqICAgICBjZGVm IGFkZF9zdHJpbmcoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGNoYXIgKnMpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTU3MjgsNyArMTU3MjgsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19h ZGRfc3RyaW5nKHN0cnVjdAorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoImFkZF9zdHJpbmciLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5MDgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo5MTAKKyAgKiAKKyAgKiAgICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1wdl9yZW5kZXJf cGFyYW1fdHlwZSB0LCBjaGFyICpzKToKKyAgKiAgICAgICAgIGNkZWYgY2hhciAqcCA9IDxjaGFy ICo+bWFsbG9jKHN0cmxlbihzKSArIDEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xNTczNyw3ICsxNTczNyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF9zdHJpbmcoc3RydWN0CisgICovCisgICBf X3B5eF92X3AgPSAoKGNoYXIgKiltYWxsb2MoKHN0cmxlbihfX3B5eF92X3MpICsgMSkpKTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDkKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTEKKyAgKiAgICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYs IG1wdl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBjaGFyICpzKToKKyAgKiAgICAgICAgIGNkZWYgY2hh ciAqcCA9IDxjaGFyICo+bWFsbG9jKHN0cmxlbihzKSArIDEpCisgICogICAgICAgICBzdHJjcHko cCwgcykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1NzQ2LDE4ICsxNTc0Niwx OCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1Jl bmRlclBhcmFtc19hZGRfc3RyaW5nKHN0cnVjdAorICAqLworICAgKHZvaWQpKHN0cmNweShfX3B5 eF92X3AsIF9fcHl4X3ZfcykpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjkxMAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxMgorICAqICAg ICAgICAgY2RlZiBjaGFyICpwID0gPGNoYXIgKj5tYWxsb2Moc3RybGVuKHMpICsgMSkKKyAgKiAg ICAgICAgIHN0cmNweShwLCBzKQorICAqICAgICAgICAgc2VsZi5hZGRfdm9pZHAodCwgcCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorICAqICAgICBkZWYgX19kZWFsbG9jX18o c2VsZik6CisgICovCistICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmLT5fX3B5eF92 dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl90LCBfX3B5eF92X3AsIE5VTEwp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MTAsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPmFk ZF92b2lkcChfX3B5eF92X3NlbGYsIF9fcHl4X3ZfdCwgX19weXhfdl9wLCBOVUxMKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTEyLCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA3 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA5CisgICogICAgICAgICBz ZWxmLmFkZF92b2lkcCh0LCBwKQorICAqIAorICAqICAgICBjZGVmIGFkZF9zdHJpbmcoc2VsZiwg bXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGNoYXIgKnMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTU3NzgsNyArMTU3NzgsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfc3RyaW5nKHN0cnVjdAor ICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo5MTIKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE0CisgICogICAg ICAgICBzZWxmLmFkZF92b2lkcCh0LCBwKQorICAqIAorICAqICAgICBkZWYgX19kZWFsbG9jX18o c2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNTgxMyw3ICsxNTgxMyw3 IEBAIHN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQ YXJhbXNfMl9fZGVhbGxvY19fKHN0cnVjdCBfCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cisg ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18iLCAwKTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTMKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MTUKKyAgKiAKKyAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYp OgorICAqICAgICAgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTU4MjYsMjYgKzE1ODI2LDI2IEBAIHN0YXRpYyB2 b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfMl9fZGVh bGxvY19fKHN0cnVjdCBfCisgICAgIF9fcHl4X3RfMiA9IF9fcHl4X3Zfc2VsZi0+b3duZWQ7IF9f UHl4X0lOQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzMgPSAwOworICAgICBfX3B5eF90XzQgPSBO VUxMOworICAgfSBlbHNlIHsKKy0gICAgX19weXhfdF8zID0gLTE7IF9fcHl4X3RfMiA9IFB5T2Jq ZWN0X0dldEl0ZXIoX19weXhfdl9zZWxmLT5vd25lZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9IC0x OyBfX3B5eF90XzIgPSBQeU9iamVjdF9HZXRJdGVyKF9fcHl4X3Zfc2VsZi0+b3duZWQpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5MTUsIF9fcHl4X0wxX2Vycm9yKQor ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF80ID0gUHlfVFlQRShf X3B5eF90XzIpLT50cF9pdGVybmV4dDsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9F UlIoMCwgOTEzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF80ID0gUHlfVFlQRShfX3B5 eF90XzIpLT50cF9pdGVybmV4dDsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIo MCwgOTE1LCBfX3B5eF9MMV9lcnJvcikKKyAgIH0KKyAgIGZvciAoOzspIHsKKyAgICAgaWYgKGxp a2VseSghX19weXhfdF80KSkgeworICAgICAgIGlmIChsaWtlbHkoUHlMaXN0X0NoZWNrRXhhY3Qo X19weXhfdF8yKSkpIHsKKyAgICAgICAgIGlmIChfX3B5eF90XzMgPj0gUHlMaXN0X0dFVF9TSVpF KF9fcHl4X3RfMikpIGJyZWFrOworICAgICAgICAgI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNS T1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCistICAgICAgICBfX3B5eF90XzUgPSBQ eUxpc3RfR0VUX0lURU0oX19weXhfdF8yLCBfX3B5eF90XzMpOyBfX1B5eF9JTkNSRUYoX19weXhf dF81KTsgX19weXhfdF8zKys7IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA5MTMs IF9fcHl4X0wxX2Vycm9yKQorKyAgICAgICAgX19weXhfdF81ID0gUHlMaXN0X0dFVF9JVEVNKF9f cHl4X3RfMiwgX19weXhfdF8zKTsgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfMysr OyBpZiAodW5saWtlbHkoMCA8IDApKSBfX1BZWF9FUlIoMCwgOTE1LCBfX3B5eF9MMV9lcnJvcikK KyAgICAgICAgICNlbHNlCistICAgICAgICBfX3B5eF90XzUgPSBQeVNlcXVlbmNlX0lURU0oX19w eXhfdF8yLCBfX3B5eF90XzMpOyBfX3B5eF90XzMrKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUp KSBfX1BZWF9FUlIoMCwgOTEzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICAgIF9fcHl4X3RfNSA9 IFB5U2VxdWVuY2VfSVRFTShfX3B5eF90XzIsIF9fcHl4X3RfMyk7IF9fcHl4X3RfMysrOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA5MTUsIF9fcHl4X0wxX2Vycm9yKQor ICAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CisgICAgICAgICAjZW5kaWYKKyAgICAg ICB9IGVsc2UgeworICAgICAgICAgaWYgKF9fcHl4X3RfMyA+PSBQeVR1cGxlX0dFVF9TSVpFKF9f cHl4X3RfMikpIGJyZWFrOworICAgICAgICAgI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1Mg JiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCistICAgICAgICBfX3B5eF90XzUgPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF8zKTsgX19QeXhfSU5DUkVGKF9fcHl4X3Rf NSk7IF9fcHl4X3RfMysrOyBpZiAodW5saWtlbHkoMCA8IDApKSBfX1BZWF9FUlIoMCwgOTEzLCBf X3B5eF9MMV9lcnJvcikKKysgICAgICAgIF9fcHl4X3RfNSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfdF8yLCBfX3B5eF90XzMpOyBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsgX19weXhfdF8zKys7 IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA5MTUsIF9fcHl4X0wxX2Vycm9yKQor ICAgICAgICAgI2Vsc2UKKy0gICAgICAgIF9fcHl4X3RfNSA9IFB5U2VxdWVuY2VfSVRFTShfX3B5 eF90XzIsIF9fcHl4X3RfMyk7IF9fcHl4X3RfMysrOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkp IF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgICAgX19weXhfdF81ID0g UHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF8zKTsgX19weXhfdF8zKys7IGlmICh1 bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDkxNSwgX19weXhfTDFfZXJyb3IpCisg ICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKyAgICAgICAgICNlbmRpZgorICAgICAg IH0KK0BAIC0xNTg1NSw3ICsxNTg1NSw3IEBAIHN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfMl9fZGVhbGxvY19fKHN0cnVjdCBfCisgICAg ICAgICBQeU9iamVjdCogZXhjX3R5cGUgPSBQeUVycl9PY2N1cnJlZCgpOworICAgICAgICAgaWYg KGV4Y190eXBlKSB7CisgICAgICAgICAgIGlmIChsaWtlbHkoX19QeXhfUHlFcnJfR2l2ZW5FeGNl cHRpb25NYXRjaGVzKGV4Y190eXBlLCBQeUV4Y19TdG9wSXRlcmF0aW9uKSkpIFB5RXJyX0NsZWFy KCk7CistICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCisr ICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAsIDkxNSwgX19weXhfTDFfZXJyb3IpCisgICAgICAg ICB9CisgICAgICAgICBicmVhazsKKyAgICAgICB9CitAQCAtMTU4NjUsMzMgKzE1ODY1LDMzIEBA IHN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJh bXNfMl9fZGVhbGxvY19fKHN0cnVjdCBfCisgICAgIF9fcHl4X3RfNSA9IDA7CisgICAgIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X2ksIF9f cHl4X3RfMSk7CistICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0FkZE9iakMoX19weXhfdF8x LCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhf RVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50 X0FkZE9iakMoX19weXhfdF8xLCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSgh X19weXhfdF81KSkgX19QWVhfRVJSKDAsIDkxNSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzUpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsKKyAgICAg X19weXhfdF8xID0gX19weXhfdF81OworICAgICBfX3B5eF90XzUgPSAwOworIAorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE0CisrICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MTYKKyAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOgorICAq ICAgICAgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOgorICAqICAgICAgICAg ICAgIGlmIGo6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICAg ICAgZnJlZShzZWxmLnBhcmFtc1tpXS5kYXRhKQorICAqIAorICAqLworLSAgICBfX3B5eF90XzYg PSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9qKTsgaWYgKHVubGlrZWx5KF9fcHl4X3Rf NiA8IDApKSBfX1BZWF9FUlIoMCwgOTE0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF82 ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zfaik7IGlmICh1bmxpa2VseShfX3B5eF90 XzYgPCAwKSkgX19QWVhfRVJSKDAsIDkxNiwgX19weXhfTDFfZXJyb3IpCisgICAgIGlmIChfX3B5 eF90XzYpIHsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE1 CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxNworICAqICAgICAg ICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOgorICAqICAgICAgICAgICAgIGlm IGo6CisgICogICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorICAqIGNkZWYgdm9pZCAqZ2V0X3BvaW50ZXIo Y29uc3QgY2hhciAqbmFtZSwgb2JqZWN0IG9iaik6CisgICovCistICAgICAgX19weXhfdF83ID0g X19QeXhfUHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9pKTsgaWYgKHVubGlrZWx5KChfX3B5eF90 XzcgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwg OTE1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUluZGV4X0Fz U3NpemVfdChfX3B5eF92X2kpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoUHlfc3NpemVf dCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA5MTcsIF9fcHl4X0wxX2Vy cm9yKQorICAgICAgIGZyZWUoKF9fcHl4X3Zfc2VsZi0+cGFyYW1zW19fcHl4X3RfN10pLmRhdGEp OworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTQKKysgICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE2CisgICogICAgIGRlZiBfX2Rl YWxsb2NfXyhzZWxmKToKKyAgKiAgICAgICAgIGZvciBpLCBqIGluIGVudW1lcmF0ZShzZWxmLm93 bmVkKToKKyAgKiAgICAgICAgICAgICBpZiBqOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtMTU5MDAsNyArMTU5MDAsNyBAQCBzdGF0aWMgdm9pZCBfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzJfX2RlYWxsb2NfXyhzdHJ1Y3QgXworICAqLwor ICAgICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTMKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxNQorICAqIAorICAqICAgICBk ZWYgX19kZWFsbG9jX18oc2VsZik6CisgICogICAgICAgICBmb3IgaSwgaiBpbiBlbnVtZXJhdGUo c2VsZi5vd25lZCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNTkxMSw3ICsx NTkxMSw3IEBAIHN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19S ZW5kZXJQYXJhbXNfMl9fZGVhbGxvY19fKHN0cnVjdCBfCisgICBfX1B5eF9ERUNSRUYoX19weXhf dF8yKTsgX19weXhfdF8yID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxMgorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxNAorICAqICAgICAgICAgc2VsZi5h ZGRfdm9pZHAodCwgcCkKKyAgKiAKKyAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTYwNDUsNyArMTYwNDUsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNf Nl9fc2V0c3RhdGVfY3l0aAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTcKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTE5CisgICogICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkK KyAgKiAKKyAgKiBjZGVmIHZvaWQgKmdldF9wb2ludGVyKGNvbnN0IGNoYXIgKm5hbWUsIG9iamVj dCBvYmopOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTYwNzEsNyArMTYwNzEs NyBAQCBzdGF0aWMgdm9pZCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3BvaW50 ZXIoY2hhciBjb25zdCAqX19weXhfdl9uYW1lLAorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwor ICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImdldF9wb2ludGVyIiwgMCk7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE5CisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTIxCisgICogY2RlZiB2b2lkICpnZXRfcG9pbnRlcihjb25zdCBj aGFyICpuYW1lLCBvYmplY3Qgb2JqKToKKyAgKiAgICAgY2RlZiB2b2lkICpwCisgICogICAgIGlm IFB5Q2Fwc3VsZV9Jc1ZhbGlkKG9iaiwgbmFtZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xNjA4MSwxNyArMTYwODEsMTcgQEAgc3RhdGljIHZvaWQgKl9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2X2dldF9wb2ludGVyKGNoYXIgY29uc3QgKl9fcHl4X3ZfbmFtZSwKKyAg IF9fcHl4X3RfMSA9IChQeUNhcHN1bGVfSXNWYWxpZChfX3B5eF92X29iaiwgX19weXhfdl9uYW1l KSAhPSAwKTsKKyAgIGlmIChfX3B5eF90XzEpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjkyMAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTIyCisgICogICAgIGNkZWYgdm9pZCAqcAorICAqICAgICBpZiBQeUNhcHN1bGVfSXNWYWxp ZChvYmosIG5hbWUpOgorICAqICAgICAgICAgcCA9IFB5Q2Fwc3VsZV9HZXRQb2ludGVyKG9iaiwg bmFtZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBlbGlmIGlzaW5zdGFu Y2Uob2JqLCBpbnQpIG9yIGlzaW5zdGFuY2Uob2JqLCBsb25nKSBhbmQgb2JqOgorICAqICAgICAg ICAgcCA9IDx2b2lkICo+PGludHB0cl90Pm9iagorICAqLworLSAgICBfX3B5eF90XzIgPSBQeUNh cHN1bGVfR2V0UG9pbnRlcihfX3B5eF92X29iaiwgX19weXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfMiA9PSAoKHZvaWQgKilOVUxMKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDkyMCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9IFB5Q2Fwc3VsZV9H ZXRQb2ludGVyKF9fcHl4X3Zfb2JqLCBfX3B5eF92X25hbWUpOyBpZiAodW5saWtlbHkoX19weXhf dF8yID09ICgodm9pZCAqKU5VTEwpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwg OTIyLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19weXhfdl9wID0gX19weXhfdF8yOworIAorLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE5CisrICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjEKKyAgKiBjZGVmIHZvaWQgKmdldF9wb2ludGVyKGNv bnN0IGNoYXIgKm5hbWUsIG9iamVjdCBvYmopOgorICAqICAgICBjZGVmIHZvaWQgKnAKKyAgKiAg ICAgaWYgUHlDYXBzdWxlX0lzVmFsaWQob2JqLCBuYW1lKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTE2MTAxLDcgKzE2MTAxLDcgQEAgc3RhdGljIHZvaWQgKl9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2X2dldF9wb2ludGVyKGNoYXIgY29uc3QgKl9fcHl4X3ZfbmFtZSwK KyAgICAgZ290byBfX3B5eF9MMzsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MjEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjMK KyAgKiAgICAgaWYgUHlDYXBzdWxlX0lzVmFsaWQob2JqLCBuYW1lKToKKyAgKiAgICAgICAgIHAg PSBQeUNhcHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCisgICogICAgIGVsaWYgaXNpbnN0YW5j ZShvYmosIGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNjEyMiwyMiArMTYxMjIsMjIgQEAgc3RhdGljIHZvaWQg Kl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X2dldF9wb2ludGVyKGNoYXIgY29uc3QgKl9f cHl4X3ZfbmFtZSwKKyAgICAgX19weXhfdF8xID0gX19weXhfdF8zOworICAgICBnb3RvIF9fcHl4 X0w0X2Jvb2xfYmlub3BfZG9uZTsKKyAgIH0KKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0 X0lzVHJ1ZShfX3B5eF92X29iaik7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19QWVhf RVJSKDAsIDkyMSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVj dF9Jc1RydWUoX19weXhfdl9vYmopOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlY X0VSUigwLCA5MjMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfdF8xID0gX19weXhfdF8zOwor ICAgX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKKyAgIGlmIChsaWtlbHkoX19weXhfdF8xKSkg eworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTIyCisrICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjQKKyAgKiAgICAgICAgIHAgPSBQeUNh cHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCisgICogICAgIGVsaWYgaXNpbnN0YW5jZShvYmos IGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6CisgICogICAgICAgICBwID0g PHZvaWQgKj48aW50cHRyX3Q+b2JqICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgZWxzZToKKyAgKiAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlVua25vd24gb3IgaW52YWxp ZCBwb2ludGVyIG9iamVjdDogJXIiICUgb2JqKQorICAqLworLSAgICBfX3B5eF90XzUgPSBfX1B5 eF9QeUludF9Bc19pbnRwdHJfdChfX3B5eF92X29iaik7IGlmICh1bmxpa2VseSgoX19weXhfdF81 ID09ICgoaW50cHRyX3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDky MiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0FzX2ludHB0 cl90KF9fcHl4X3Zfb2JqKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzUgPT0gKChpbnRwdHJfdCkt MSkpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTI0LCBfX3B5eF9MMV9lcnJv cikKKyAgICAgX19weXhfdl9wID0gKCh2b2lkICopKChpbnRwdHJfdClfX3B5eF90XzUpKTsKKyAK Ky0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkyMQorKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTIzCisgICogICAgIGlmIFB5Q2Fwc3VsZV9Jc1Zh bGlkKG9iaiwgbmFtZSk6CisgICogICAgICAgICBwID0gUHlDYXBzdWxlX0dldFBvaW50ZXIob2Jq LCBuYW1lKQorICAqICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBpbnQpIG9yIGlzaW5zdGFuY2Uo b2JqLCBsb25nKSBhbmQgb2JqOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTYx NDcsNyArMTYxNDcsNyBAQCBzdGF0aWMgdm9pZCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfZ2V0X3BvaW50ZXIoY2hhciBjb25zdCAqX19weXhfdl9uYW1lLAorICAgICBnb3RvIF9fcHl4 X0wzOworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkyNAor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkyNgorICAqICAgICAgICAgcCA9 IDx2b2lkICo+PGludHB0cl90Pm9iagorICAqICAgICBlbHNlOgorICAqICAgICAgICAgcmFpc2Ug UHlNUFZFcnJvcigiVW5rbm93biBvciBpbnZhbGlkIHBvaW50ZXIgb2JqZWN0OiAlciIgJSBvYmop ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNjE1NSw5ICsxNjE1NSw5IEBAIHN0 YXRpYyB2b2lkICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9nZXRfcG9pbnRlcihjaGFy IGNvbnN0ICpfX3B5eF92X25hbWUsCisgICogCisgICovCisgICAvKmVsc2UqLyB7CistICAgIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5eF9uX3NfUHlNUFZFcnJvcik7 IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDkyNCwgX19weXhfTDFfZXJy b3IpCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5eF9uX3Nf UHlNUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDkyNiwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgICBfX3B5 eF90XzggPSBfX1B5eF9QeVN0cmluZ19Gb3JtYXRTYWZlKF9fcHl4X2twX3NfVW5rbm93bl9vcl9p bnZhbGlkX3BvaW50ZXJfb2JqZWMsIF9fcHl4X3Zfb2JqKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzgpKSBfX1BZWF9FUlIoMCwgOTI0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF84ID0g X19QeXhfUHlTdHJpbmdfRm9ybWF0U2FmZShfX3B5eF9rcF9zX1Vua25vd25fb3JfaW52YWxpZF9w b2ludGVyX29iamVjLCBfX3B5eF92X29iaik7IGlmICh1bmxpa2VseSghX19weXhfdF84KSkgX19Q WVhfRVJSKDAsIDkyNiwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzgpOworICAgICBfX3B5eF90XzkgPSBOVUxMOworICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRI T0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNykpKSB7CitAQCAtMTYxNzIs MTYgKzE2MTcyLDE2IEBAIHN0YXRpYyB2b2lkICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9nZXRfcG9pbnRlcihjaGFyIGNvbnN0ICpfX3B5eF92X25hbWUsCisgICAgIF9fcHl4X3RfNiA9 IChfX3B5eF90XzkpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNywgX19weXhf dF85LCBfX3B5eF90XzgpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzcsIF9f cHl4X3RfOCk7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsgX19weXhfdF85ID0gMDsK KyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7CistICAgIGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkyNCwgX19weXhfTDFfZXJyb3IpCisr ICAgIGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkyNiwgX19weXhfTDFf ZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworICAgICBfX1B5eF9ERUNSRUYo X19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAgICAgX19QeXhfUmFpc2UoX19weXhfdF82LCAw LCAwLCAwKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cist ICAgIF9fUFlYX0VSUigwLCA5MjQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1BZWF9FUlIoMCwg OTI2LCBfX3B5eF9MMV9lcnJvcikKKyAgIH0KKyAgIF9fcHl4X0wzOjsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MjcKKyAgKiAgICAgZWxzZToKKyAgKiAgICAgICAgIHJhaXNlIFB5TVBWRXJy b3IoIlVua25vd24gb3IgaW52YWxpZCBwb2ludGVyIG9iamVjdDogJXIiICUgb2JqKQorICAqICAg ICByZXR1cm4gcCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTYxOTEsNyArMTYx OTEsNyBAQCBzdGF0aWMgdm9pZCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3Bv aW50ZXIoY2hhciBjb25zdCAqX19weXhfdl9uYW1lLAorICAgX19weXhfciA9IF9fcHl4X3ZfcDsK KyAgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTE3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE5CisgICogICAg ICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkKKyAgKiAKKyAgKiBjZGVmIHZv aWQgKmdldF9wb2ludGVyKGNvbnN0IGNoYXIgKm5hbWUsIG9iamVjdCBvYmopOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTYyMTIsNyArMTYyMTIsNyBAQCBzdGF0aWMgdm9pZCAq X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3BvaW50ZXIoY2hhciBjb25zdCAqX19w eXhfdl9uYW1lLAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MjkKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTMxCisgICogQGN5dGhvbi5pbnRlcm5hbAorICAqIGNkZWYgY2xhc3MgUmVuZGVyRnJhbWVJbmZv KG9iamVjdCk6CisgICogICAgIGNkZWYgX2Zyb21fc3RydWN0KHNlbGYsIG1wdl9yZW5kZXJfZnJh bWVfaW5mbyAqaW5mbyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNjIzMCw4 MyArMTYyMzAsODMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNVJlbmRlckZyYW1lSW5mb19fZnJvbV9zdHJ1Y3Qoc3QKKyAgIGludCBfX3B5eF9jbGlu ZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfZnJvbV9zdHJ1Y3QiLCAw KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzAKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzIKKyAgKiBjZGVmIGNsYXNzIFJlbmRlckZy YW1lSW5mbyhvYmplY3QpOgorICAqICAgICBjZGVmIF9mcm9tX3N0cnVjdChzZWxmLCBtcHZfcmVu ZGVyX2ZyYW1lX2luZm8gKmluZm8pOgorICAqICAgICAgICAgc2VsZi5wcmVzZW50ID0gYm9vbChp bmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNlbGYucmVkcmF3ID0gYm9vbChpbmZvWzBd LmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFRFJBVykKKyAgKiAgICAgICAgIHNlbGYu cmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVB VCkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKChfX3B5 eF92X2luZm9bMF0pLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMwLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKChfX3B5eF92X2luZm9b MF0pLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMyLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVl KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDkz MCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUo X19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgOTMy LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworLSAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKCghKCFfX3B5eF90XzIp KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkzMCwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoIV9fcHl4X3Rf MikpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMyLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgaWYgKF9fUHl4X1B5T2Jq ZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19wcmVz ZW50LCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDkzMCwgX19weXhfTDFfZXJyb3IpCisr ICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxm KSwgX19weXhfbl9zX3ByZXNlbnQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMyLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMQorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMworICAqICAgICBjZGVmIF9mcm9tX3N0cnVj dChzZWxmLCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKmluZm8pOgorICAqICAgICAgICAgc2VsZi5w cmVzZW50ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNF TlQpCisgICogICAgICAgICBzZWxmLnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9S RU5ERVJfRlJBTUVfSU5GT19SRURSQVcpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAg KiAgICAgICAgIHNlbGYucmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9G UkFNRV9JTkZPX1JFUEVBVCkKKyAgKiAgICAgICAgIHNlbGYuYmxvY2tfdnN5bmMgPSBib29sKGlu Zm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMpCisgICovCist ICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KCgoX19weXhfdl9pbmZvWzBd KS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3Rf MSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKChfX3B5eF92X2luZm9bMF0pLmZsYWdzICYg TVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFRFJBVykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzEpOyBp ZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX3B5 eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoIV9fcHl4X3RfMikpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfMSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISghX19weXhfdF8yKSkpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vycm9yKQorICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0 cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX3JlZHJhdywgX19weXhfdF8x KSA8IDApIF9fUFlYX0VSUigwLCA5MzEsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1B5 T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19y ZWRyYXcsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMzLCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjkzNAorICAqICAgICAgICAgc2VsZi5wcmVzZW50ID0gYm9vbChpbmZvWzBd LmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpCisgICogICAgICAgICBzZWxm LnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURS QVcpCisgICogICAgICAgICBzZWxmLnJlcGVhdCA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9S RU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAg KiAgICAgICAgIHNlbGYuYmxvY2tfdnN5bmMgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVO REVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMpCisgICogICAgICAgICBzZWxmLnRhcmdldF90aW1l ID0gaW5mb1swXS50YXJnZXRfdGltZQorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRf RnJvbV91aW50NjRfdCgoKF9fcHl4X3ZfaW5mb1swXSkuZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1F X0lORk9fUkVQRUFUKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkz MiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2 NF90KCgoX19weXhfdl9pbmZvWzBdKS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRVBF QVQpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTM0LCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19Q eXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAw KSkgX19QWVhfRVJSKDAsIDkzMiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5 eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDAp KSBfX1BZWF9FUlIoMCwgOTM0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21M b25nKCghKCFfX3B5eF90XzIpKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDkzMiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJv bUxvbmcoKCEoIV9fcHl4X3RfMikpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgOTM0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2Vs ZiksIF9fcHl4X25fc19yZXBlYXQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMyLCBf X3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKCgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfcmVwZWF0LCBfX3B5eF90XzEpIDwgMCkgX19Q WVhfRVJSKDAsIDkzNCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5MzMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzUKKyAgKiAgICAg ICAgIHNlbGYucmVkcmF3ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9J TkZPX1JFRFJBVykKKyAgKiAgICAgICAgIHNlbGYucmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdz ICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVBVCkKKyAgKiAgICAgICAgIHNlbGYuYmxvY2tf dnN5bmMgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tf VlNZTkMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNlbGYudGFy Z2V0X3RpbWUgPSBpbmZvWzBdLnRhcmdldF90aW1lCisgICogICAgICAgICByZXR1cm4gc2VsZgor ICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCgoKF9fcHl4X3Zf aW5mb1swXSkuZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMpKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMzLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKChfX3B5eF92X2luZm9b MF0pLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX0JMT0NLX1ZTWU5DKSk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkzNSwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lz VHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigw LCA5MzMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNU cnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAs IDkzNSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISghX19weXhf dF8yKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKCghKCFfX3B5 eF90XzIpKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkzNSwgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIGlmIChfX1B5eF9Q eU9iamVjdF9TZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3Nf YmxvY2tfdnN5bmMsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMzLCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5 eF92X3NlbGYpLCBfX3B5eF9uX3NfYmxvY2tfdnN5bmMsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9F UlIoMCwgOTM1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkz NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzNgorICAqICAgICAgICAg c2VsZi5yZXBlYXQgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9f UkVQRUFUKQorICAqICAgICAgICAgc2VsZi5ibG9ja192c3luYyA9IGJvb2woaW5mb1swXS5mbGFn cyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19CTE9DS19WU1lOQykKKyAgKiAgICAgICAgIHNlbGYu dGFyZ2V0X3RpbWUgPSBpbmZvWzBdLnRhcmdldF90aW1lICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKyAgKiAgICAgICAgIHJldHVybiBzZWxmCisgICogCisgICovCistICBfX3B5eF90XzEg PSBfX1B5eF9QeUludF9Gcm9tX2ludDY0X3QoKF9fcHl4X3ZfaW5mb1swXSkudGFyZ2V0X3RpbWUp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzQsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQ2NF90KChfX3B5eF92X2lu Zm9bMF0pLnRhcmdldF90aW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgOTM2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAg aWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiks IF9fcHl4X25fc190YXJnZXRfdGltZSwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCA5MzQs IF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9i amVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc190YXJnZXRfdGltZSwgX19weXhfdF8xKSA8 IDApIF9fUFlYX0VSUigwLCA5MzYsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTM1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTM3Cisg ICogICAgICAgICBzZWxmLmJsb2NrX3ZzeW5jID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JF TkRFUl9GUkFNRV9JTkZPX0JMT0NLX1ZTWU5DKQorICAqICAgICAgICAgc2VsZi50YXJnZXRfdGlt ZSA9IGluZm9bMF0udGFyZ2V0X3RpbWUKKyAgKiAgICAgICAgIHJldHVybiBzZWxmICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNjMxOCw3ICsxNjMxOCw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fX2Zy b21fc3RydWN0KHN0CisgICBfX3B5eF9yID0gKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZik7Cisg ICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjkyOQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMQorICAqIEBjeXRo b24uaW50ZXJuYWwKKyAgKiBjZGVmIGNsYXNzIFJlbmRlckZyYW1lSW5mbyhvYmplY3QpOgorICAq ICAgICBjZGVmIF9mcm9tX3N0cnVjdChzZWxmLCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKmluZm8p OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTY2MjQsNyArMTY2MjQsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNVJlbmRlckZy YW1lSW5mb18yX19zZXRzdGF0ZV9jeQorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTAKKysvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTUyCisgICogICAgICAgICBiaW50IGluaXRlZAorICAqIAorICAqICAgICBk ZWYgX19pbml0X18oc2VsZiwgbXB2LCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MTY2NTMsNyArMTY2NTMsNyBAQCBzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfMV9faW5pdF9fKFB5T2JqZWN0ICpfXworICAgICBzdGF0aWMg UHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19tcHYsJl9fcHl4X25f c19hcGlfdHlwZSwmX19weXhfbl9zX29wZW5nbF9pbml0X3BhcmFtcywmX19weXhfbl9zX2FkdmFu Y2VkX2NvbnRyb2wsJl9fcHl4X25fc194MTFfZGlzcGxheSwmX19weXhfbl9zX3dsX2Rpc3BsYXks Jl9fcHl4X25fc19kcm1fZGlzcGxheSwmX19weXhfbl9zX2RybV9vc2Rfc2l6ZSwwfTsKKyAgICAg UHlPYmplY3QqIHZhbHVlc1s4XSA9IHswLDAsMCwwLDAsMCwwLDB9OworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTUyCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5NTQKKyAgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1wdiwKKyAgKiAg ICAgICAgICAgICAgICAgIGFwaV90eXBlLAorICAqICAgICAgICAgICAgICAgICAgb3BlbmdsX2lu aXRfcGFyYW1zPU5vbmUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNjY2Miw3 ICsxNjY2Miw3IEBAIHN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz UmVuZGVyQ29udGV4dF8xX19pbml0X18oUHlPYmplY3QgKl9fCisgICovCisgICAgIHZhbHVlc1sy XSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjk1MworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTU1CisgICogICAgICAgICAgICAgICAgICBhcGlfdHlwZSwKKyAgKiAgICAgICAgICAgICAgICAg IG9wZW5nbF9pbml0X3BhcmFtcz1Ob25lLAorICAqICAgICAgICAgICAgICAgICAgYWR2YW5jZWRf Y29udHJvbD1GYWxzZSwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE2NjcxLDcg KzE2NjcxLDcgQEAgc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNS ZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX18KKyAgKi8KKyAgICAgdmFsdWVzWzNd ID0gKChQeU9iamVjdCAqKVB5X0ZhbHNlKTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjk1NAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTU2CisgICogICAgICAgICAgICAgICAgICBvcGVuZ2xfaW5pdF9wYXJhbXM9Tm9uZSwKKyAgKiAg ICAgICAgICAgICAgICAgIGFkdmFuY2VkX2NvbnRyb2w9RmFsc2UsCisgICogICAgICAgICAgICAg ICAgICB4MTFfZGlzcGxheT1Ob25lLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MTY2ODAsNyArMTY2ODAsNyBAQCBzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfMV9faW5pdF9fKFB5T2JqZWN0ICpfXworICAqLworICAgICB2 YWx1ZXNbNF0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5NTUKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk1NworICAqICAgICAgICAgICAgICAgICAgYWR2YW5jZWRfY29udHJvbD1GYWxzZSwK KyAgKiAgICAgICAgICAgICAgICAgIHgxMV9kaXNwbGF5PU5vbmUsCisgICogICAgICAgICAgICAg ICAgICB3bF9kaXNwbGF5PU5vbmUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0x NjY4OSw3ICsxNjY4OSw3IEBAIHN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzUmVuZGVyQ29udGV4dF8xX19pbml0X18oUHlPYmplY3QgKl9fCisgICovCisgICAgIHZh bHVlc1s1XSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjk1NgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTU4CisgICogICAgICAgICAgICAgICAgICB4MTFfZGlzcGxheT1Ob25lLAorICAqICAg ICAgICAgICAgICAgICAgd2xfZGlzcGxheT1Ob25lLAorICAqICAgICAgICAgICAgICAgICAgZHJt X2Rpc3BsYXk9Tm9uZSwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE2Njk4LDcg KzE2Njk4LDcgQEAgc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNS ZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX18KKyAgKi8KKyAgICAgdmFsdWVzWzZd ID0gKChQeU9iamVjdCAqKVB5X05vbmUpOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTU3CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 NTkKKyAgKiAgICAgICAgICAgICAgICAgIHdsX2Rpc3BsYXk9Tm9uZSwKKyAgKiAgICAgICAgICAg ICAgICAgIGRybV9kaXNwbGF5PU5vbmUsCisgICogICAgICAgICAgICAgICAgICBkcm1fb3NkX3Np emU9Tm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTY3MzgsNyArMTY3Mzgs NyBAQCBzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNv bnRleHRfMV9faW5pdF9fKFB5T2JqZWN0ICpfXworICAgICAgICAgY2FzZSAgMToKKyAgICAgICAg IGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3 ZHMsIF9fcHl4X25fc19hcGlfdHlwZSkpICE9IDApKSBrd19hcmdzLS07CisgICAgICAgICBlbHNl IHsKKy0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwg MiwgOCwgMSk7IF9fUFlYX0VSUigwLCA5NTAsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgICBf X1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAwLCAyLCA4LCAxKTsgX19QWVhf RVJSKDAsIDk1MiwgX19weXhfTDNfZXJyb3IpCisgICAgICAgICB9CisgICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7CisgICAgICAgICBjYXNlICAyOgorQEAgLTE2Nzc4LDcgKzE2Nzc4LDcgQEAg c3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0 XzFfX2luaXRfXyhQeU9iamVjdCAqX18KKyAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgaWYg KHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1Bh cnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1 ZXMsIHBvc19hcmdzLCAiX19pbml0X18iKSA8IDApKSBfX1BZWF9FUlIoMCwgOTUwLCBfX3B5eF9M M19lcnJvcikKKysgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29y ZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9f aW5pdF9fIikgPCAwKSkgX19QWVhfRVJSKDAsIDk1MiwgX19weXhfTDNfZXJyb3IpCisgICAgICAg fQorICAgICB9IGVsc2UgeworICAgICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKSkgeworQEAgLTE2ODExLDcgKzE2ODExLDcgQEAgc3RhdGljIGludCBfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX18K KyAgIH0KKyAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CisgICBfX3B5 eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19p bml0X18iLCAwLCAyLCA4LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJS KDAsIDk1MCwgX19weXhfTDNfZXJyb3IpCisrICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgi X19pbml0X18iLCAwLCAyLCA4LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhf RVJSKDAsIDk1MiwgX19weXhfTDNfZXJyb3IpCisgICBfX3B5eF9MM19lcnJvcjo7CisgICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0Ll9faW5pdF9f IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKK0BAIC0xNjgxOSw3ICsxNjgxOSw3IEBAIHN0YXRp YyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xX19p bml0X18oUHlPYmplY3QgKl9fCisgICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7 CisgICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29u dGV4dF9fX2luaXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Jl bmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X21wdiwgX19weXhfdl9hcGlfdHlw ZSwgX19weXhfdl9vcGVuZ2xfaW5pdF9wYXJhbXMsIF9fcHl4X3ZfYWR2YW5jZWRfY29udHJvbCwg X19weXhfdl94MTFfZGlzcGxheSwgX19weXhfdl93bF9kaXNwbGF5LCBfX3B5eF92X2RybV9kaXNw bGF5LCBfX3B5eF92X2RybV9vc2Rfc2l6ZSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTUwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTUy CisgICogICAgICAgICBiaW50IGluaXRlZAorICAqIAorICAqICAgICBkZWYgX19pbml0X18oc2Vs ZiwgbXB2LCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTY4NTYsMTQgKzE2ODU2 LDE0IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVy Q29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7 CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18iLCAwKTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NjUKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5NjcKKyAgKiAgICAgICAgICAgICBtcHZfb3BlbmdsX2RybV9vc2Rf c2l6ZSBfZHJtX29zZF9zaXplCisgICogCisgICogICAgICAgICBzZWxmLl9tcHYgPSBtcHYgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorICAqICAgICAgICAgbWVtc2V0KCZnbF9w YXJhbXMsIDAsIHNpemVvZihnbF9wYXJhbXMpKQorICAqLworLSAgaWYgKCEobGlrZWx5KCgoX19w eXhfdl9tcHYpID09IFB5X05vbmUpIHx8IGxpa2VseShfX1B5eF9UeXBlVGVzdChfX3B5eF92X21w diwgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpKSkpKSBfX1BZWF9F UlIoMCwgOTY1LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICghKGxpa2VseSgoKF9fcHl4X3ZfbXB2 KSA9PSBQeV9Ob25lKSB8fCBsaWtlbHkoX19QeXhfVHlwZVRlc3QoX19weXhfdl9tcHYsIF9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KSkpKSkgX19QWVhfRVJSKDAsIDk2 NywgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF90XzEgPSBfX3B5eF92X21wdjsKKyAgIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzEpOworICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworQEAgLTE2 ODcyLDcgKzE2ODcyLDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNSZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVjdCBfX3B5eF8KKyAgIF9fcHl4X3Zfc2Vs Zi0+X21wdiA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCAqKV9fcHl4X3RfMSk7CisgICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjk2NworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjk2OQorICAqICAgICAgICAgc2VsZi5fbXB2ID0gbXB2CisgICogCisgICogICAgICAgICBt ZW1zZXQoJmdsX3BhcmFtcywgMCwgc2l6ZW9mKGdsX3BhcmFtcykpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC0xNjg4MSw3ICsxNjg4MSw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19w eXhfCisgICovCisgICAodm9pZCkobWVtc2V0KCgmX19weXhfdl9nbF9wYXJhbXMpLCAwLCAoc2l6 ZW9mKF9fcHl4X3ZfZ2xfcGFyYW1zKSkpKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5NjgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzAK KyAgKiAKKyAgKiAgICAgICAgIG1lbXNldCgmZ2xfcGFyYW1zLCAwLCBzaXplb2YoZ2xfcGFyYW1z KSkKKyAgKiAgICAgICAgIG1lbXNldCgmZHJtX3BhcmFtcywgMCwgc2l6ZW9mKGRybV9wYXJhbXMp KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTY4OTAsNyArMTY4OTAsNyBAQCBz dGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRf X19pbml0X18oc3RydWN0IF9fcHl4XworICAqLworICAgKHZvaWQpKG1lbXNldCgoJl9fcHl4X3Zf ZHJtX3BhcmFtcyksIDAsIChzaXplb2YoX19weXhfdl9kcm1fcGFyYW1zKSkpKTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NjkKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5NzEKKyAgKiAgICAgICAgIG1lbXNldCgmZ2xfcGFyYW1zLCAwLCBz aXplb2YoZ2xfcGFyYW1zKSkKKyAgKiAgICAgICAgIG1lbXNldCgmZHJtX3BhcmFtcywgMCwgc2l6 ZW9mKGRybV9wYXJhbXMpKQorICAqICAgICAgICAgbWVtc2V0KCZfZHJtX29zZF9zaXplLCAwLCBz aXplb2YoX2RybV9vc2Rfc2l6ZSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0x Njg5OSw0NSArMTY4OTksNDUgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNSZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVjdCBfX3B5eF8KKyAgKi8KKyAgICh2 b2lkKShtZW1zZXQoKCZfX3B5eF92X19kcm1fb3NkX3NpemUpLCAwLCAoc2l6ZW9mKF9fcHl4X3Zf X2RybV9vc2Rfc2l6ZSkpKSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTcxCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTczCisgICogICAg ICAgICBtZW1zZXQoJl9kcm1fb3NkX3NpemUsIDAsIHNpemVvZihfZHJtX29zZF9zaXplKSkKKyAg KiAKKyAgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJhbXMoKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisgICogCisgICogICAgICAgICBpZiBhcGlfdHlwZSA9PSBzZWxmLkFQSV9P UEVOR0w6CisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQ eU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk3MSwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVj dCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk3MywgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fcHl4X3ZfcGFyYW1zID0gKChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhf dF8xKTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTczCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTc1Cisg ICogICAgICAgICBwYXJhbXMgPSBfUmVuZGVyUGFyYW1zKCkKKyAgKiAKKyAgKiAgICAgICAgIGlm IGFwaV90eXBlID09IHNlbGYuQVBJX09QRU5HTDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfc3RyaW5nKE1QVl9SRU5ERVJfUEFSQU1fQVBJ X1RZUEUsIE1QVl9SRU5ERVJfQVBJX1RZUEVfT1BFTkdMKQorICAqICAgICAgICAgZWxzZToKKyAg Ki8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAq KV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19BUElfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgOTczLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9 IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9f cHl4X25fc19BUElfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgOTc1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAg X19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9hcGlfdHlwZSwgX19weXhf dF8xLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgOTczLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9 IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfYXBpX3R5cGUsIF9fcHl4X3RfMSwgUHlfRVEp OyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDk3NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShf X3B5eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlYX0VSUigwLCA5NzMs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9f cHl4X3RfMik7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDk3NSwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKKyAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTc0CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo5NzYKKyAgKiAKKyAgKiAgICAgICAgIGlmIGFwaV90eXBlID09IHNlbGYuQVBJX09QRU5H TDoKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3N0cmluZyhNUFZfUkVOREVSX1BBUkFNX0FQ SV9UWVBFLCBNUFZfUkVOREVSX0FQSV9UWVBFX09QRU5HTCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgZWxzZToKKyAgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVy cm9yKCJVbmtub3duIGFwaV90eXBlICVyIiAlIGFwaV90eXBlKQorICAqLworLSAgICBfX3B5eF90 XzIgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVu ZGVyUGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfc3RyaW5nKF9fcHl4 X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0FQSV9UWVBFLCBNUFZfUkVOREVSX0FQSV9UWVBF X09QRU5HTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk3NCwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3Rf OXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19w eXhfdnRhYiktPmFkZF9zdHJpbmcoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1fQVBJ X1RZUEUsIE1QVl9SRU5ERVJfQVBJX1RZUEVfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgOTc2LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTczCisrICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzUKKyAgKiAgICAgICAgIHBhcmFtcyA9 IF9SZW5kZXJQYXJhbXMoKQorICAqIAorICAqICAgICAgICAgaWYgYXBpX3R5cGUgPT0gc2VsZi5B UElfT1BFTkdMOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTY5NDcsNyArMTY5 NDcsNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAgICBnb3RvIF9fcHl4X0wzOworICAg fQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3NgorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3OAorICAqICAgICAgICAgICAgIHBhcmFtcy5h ZGRfc3RyaW5nKE1QVl9SRU5ERVJfUEFSQU1fQVBJX1RZUEUsIE1QVl9SRU5ERVJfQVBJX1RZUEVf T1BFTkdMKQorICAqICAgICAgICAgZWxzZToKKyAgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVy cm9yKCJVbmtub3duIGFwaV90eXBlICVyIiAlIGFwaV90eXBlKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CitAQCAtMTY5NTUsOSArMTY5NTUsOSBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4 XworICAqICAgICAgICAgaWYgb3BlbmdsX2luaXRfcGFyYW1zIGlzIG5vdCBOb25lOgorICAqLwor ICAgLyplbHNlKi8geworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwg X19weXhfbl9zX1B5TVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA5NzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1l KF9fcHl4X3RfMSwgX19weXhfbl9zX1B5TVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA5NzgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKy0gICAgX19weXhfdF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0U2FmZShf X3B5eF9rcF9zX1Vua25vd25fYXBpX3R5cGVfciwgX19weXhfdl9hcGlfdHlwZSk7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDk3NiwgX19weXhfTDFfZXJyb3IpCisrICAg IF9fcHl4X3RfNCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdFNhZmUoX19weXhfa3Bfc19Vbmtub3du X2FwaV90eXBlX3IsIF9fcHl4X3ZfYXBpX3R5cGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCA5NzgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF80KTsKKyAgICAgX19weXhfdF81ID0gTlVMTDsKKyAgICAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzEpKSkgeworQEAgLTE2 OTcyLDE2ICsxNjk3MiwxNiBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAgICBfX3B5eF90 XzIgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzEsIF9f cHl4X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8x LCBfX3B5eF90XzQpOworICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9 IDA7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5NzYsIF9fcHl4X0wxX2Vycm9y KQorKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5NzgsIF9fcHl4 X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICAgIF9fUHl4X1JhaXNlKF9fcHl4X3Rf MiwgMCwgMCwgMCk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OworLSAgICBfX1BZWF9FUlIoMCwgOTc2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QWVhfRVJS KDAsIDk3OCwgX19weXhfTDFfZXJyb3IpCisgICB9CisgICBfX3B5eF9MMzo7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTc4CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTgwCisgICogICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJvcigiVW5r bm93biBhcGlfdHlwZSAlciIgJSBhcGlfdHlwZSkKKyAgKiAKKyAgKiAgICAgICAgIGlmIG9wZW5n bF9pbml0X3BhcmFtcyBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTE2OTkyLDE0ICsxNjk5MiwxNCBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAgX19w eXhfdF82ID0gKF9fcHl4X3RfMyAhPSAwKTsKKyAgIGlmIChfX3B5eF90XzYpIHsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3OQorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTgxCisgICogCisgICogICAgICAgICBpZiBvcGVuZ2xfaW5p dF9wYXJhbXMgaXMgbm90IE5vbmU6CisgICogICAgICAgICAgICAgc2VsZi5fZ2V0X3Byb2NfYWRk cmVzcyA9IG9wZW5nbF9pbml0X3BhcmFtc1siZ2V0X3Byb2NfYWRkcmVzcyJdICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRk cmVzcyA9ICZfY19nZXRwcm9jYWRkcmVzcworICAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRf cHJvY19hZGRyZXNzX2N0eCA9IDx2b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVzcworICAqLwor LSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9EaWN0X0dldEl0ZW0oX19weXhfdl9vcGVu Z2xfaW5pdF9wYXJhbXMsIF9fcHl4X25fc19nZXRfcHJvY19hZGRyZXNzKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTc5LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfRGljdF9HZXRJdGVtKF9fcHl4X3Zfb3BlbmdsX2luaXRf cGFyYW1zLCBfX3B5eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcyk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDk4MSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzIpOworICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMik7CisgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF92X3NlbGYtPl9nZXRfcHJvY19hZGRyZXNzKTsKK0BAIC0xNzAwNyw3ICsx NzAwNyw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVu ZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICAgIF9fcHl4X3Zfc2VsZi0+X2dl dF9wcm9jX2FkZHJlc3MgPSBfX3B5eF90XzI7CisgICAgIF9fcHl4X3RfMiA9IDA7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODAKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk4MgorICAqICAgICAgICAgaWYgb3BlbmdsX2luaXRfcGFy YW1zIGlzIG5vdCBOb25lOgorICAqICAgICAgICAgICAgIHNlbGYuX2dldF9wcm9jX2FkZHJlc3Mg PSBvcGVuZ2xfaW5pdF9wYXJhbXNbImdldF9wcm9jX2FkZHJlc3MiXQorICAqICAgICAgICAgICAg IGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzID0gJl9jX2dldHByb2NhZGRyZXNzICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNzAxNiw3ICsxNzAxNiw3IEBAIHN0YXRpYyBpbnQg X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhz dHJ1Y3QgX19weXhfCisgICovCisgICAgIF9fcHl4X3ZfZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJl c3MgPSAoJl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX2dldHByb2NhZGRyZXNzKTsK KyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4MQorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTgzCisgICogICAgICAgICAgICAgc2VsZi5f Z2V0X3Byb2NfYWRkcmVzcyA9IG9wZW5nbF9pbml0X3BhcmFtc1siZ2V0X3Byb2NfYWRkcmVzcyJd CisgICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3MgPSAmX2NfZ2V0cHJv Y2FkZHJlc3MKKyAgKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzc19jdHgg PSA8dm9pZCAqPnNlbGYuX2dldF9wcm9jX2FkZHJlc3MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTE3MDI1LDE4ICsxNzAyNSwxOCBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4Xwor ICAqLworICAgICBfX3B5eF92X2dsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9ICgodm9p ZCAqKV9fcHl4X3Zfc2VsZi0+X2dldF9wcm9jX2FkZHJlc3MpOworIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTgyCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5ODQKKyAgKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVz cyA9ICZfY19nZXRwcm9jYWRkcmVzcworICAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJv Y19hZGRyZXNzX2N0eCA9IDx2b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVzcworICAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJB TVMsICZnbF9wYXJhbXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAg IGlmIGFkdmFuY2VkX2NvbnRyb2w6CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBW X1JFTkRFUl9QQVJBTV9BRFZBTkNFRF9DT05UUk9MLCAxKQorICAqLworLSAgICBfX3B5eF90XzIg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9w YXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0lOSVRfUEFSQU1TLCAoJl9fcHl4X3ZfZ2xf cGFyYW1zKSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk4 MiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJz dHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFt cy0+X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJB TV9PUEVOR0xfSU5JVF9QQVJBTVMsICgmX19weXhfdl9nbF9wYXJhbXMpLCBOVUxMKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTg0LCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTc4CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODAKKyAgKiAg ICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJVbmtub3duIGFwaV90eXBlICVyIiAlIGFwaV90 eXBlKQorICAqIAorICAqICAgICAgICAgaWYgb3BlbmdsX2luaXRfcGFyYW1zIGlzIG5vdCBOb25l OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTcwNDUsMjggKzE3MDQ1LDI4IEBA IHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICovCisgICB9CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTgzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTg1CisgICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3NfY3R4 ID0gPHZvaWQgKj5zZWxmLl9nZXRfcHJvY19hZGRyZXNzCisgICogICAgICAgICAgICAgcGFyYW1z LmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9JTklUX1BBUkFNUywgJmdsX3BhcmFt cykKKyAgKiAgICAgICAgIGlmIGFkdmFuY2VkX2NvbnRyb2w6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFN X0FEVkFOQ0VEX0NPTlRST0wsIDEpCisgICogICAgICAgICBpZiB4MTFfZGlzcGxheToKKyAgKi8K Ky0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X2FkdmFuY2VkX2Nv bnRyb2wpOyBpZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlYX0VSUigwLCA5ODMsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4 X3ZfYWR2YW5jZWRfY29udHJvbCk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhf RVJSKDAsIDk4NSwgX19weXhfTDFfZXJyb3IpCisgICBpZiAoX19weXhfdF82KSB7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODQKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk4NgorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9p ZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMpCisgICog ICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9sOgorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf aW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6CisgICogICAgICAgICAg ICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheQorICAqLworLSAgICBfX3B5eF90XzIg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4X3ZfcGFy YW1zLCBNUFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5ODQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5 eF90XzIgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f UmVuZGVyUGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4 X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5ODYsIF9fcHl4X0wxX2Vycm9yKQorICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5ODMKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4NQorICAqICAg ICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9IDx2b2lkICo+c2VsZi5f Z2V0X3Byb2NfYWRkcmVzcworICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JF TkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMpCisgICogICAgICAgICBp ZiBhZHZhbmNlZF9jb250cm9sOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTcw NzUsMTcgKzE3MDc1LDE3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICovCisgICB9Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTg1CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTg3CisgICogICAgICAgICBpZiBhZHZhbmNlZF9jb250 cm9sOgorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURW QU5DRURfQ09OVFJPTCwgMSkKKyAgKiAgICAgICAgIGlmIHgxMV9kaXNwbGF5OiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4 MTFfZGlzcGxheQorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9Q QVJBTV9YMTFfRElTUExBWSwgZ2V0X3BvaW50ZXIoIkRpc3BsYXkiLCB4MTFfZGlzcGxheSkpCisg ICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl94MTFfZGlz cGxheSk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDk4NSwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhf dl94MTFfZGlzcGxheSk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAs IDk4NywgX19weXhfTDFfZXJyb3IpCisgICBpZiAoX19weXhfdF82KSB7CisgCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODYKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjk4OAorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9S RU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkKKyAgKiAgICAgICAgIGlmIHgxMV9kaXNw bGF5OgorICAqICAgICAgICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3MDk4LDE4ICsxNzA5OCwxOCBAQCBzdGF0 aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19p bml0X18oc3RydWN0IF9fcHl4XworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5feDEx X2Rpc3BsYXkpOworICAgICBfX3B5eF92X3NlbGYtPl94MTFfZGlzcGxheSA9IF9fcHl4X3ZfeDEx X2Rpc3BsYXk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODcK KysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4OQorICAqICAgICAgICAg aWYgeDExX2Rpc3BsYXk6CisgICogICAgICAgICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFf ZGlzcGxheQorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJB TV9YMTFfRElTUExBWSwgZ2V0X3BvaW50ZXIoIkRpc3BsYXkiLCB4MTFfZGlzcGxheSkpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGlmIHdsX2Rpc3BsYXk6CisgICog ICAgICAgICAgICAgc2VsZi5fd2xfZGlzcGxheSA9IHdsX2Rpc3BsYXkKKyAgKi8KKy0gICAgX19w eXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9f cHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX1gxMV9ESVNQTEFZLCBfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9nZXRfcG9pbnRlcigoKGNoYXIgY29uc3QgKikiRGlzcGxheSIpLCBf X3B5eF92X3gxMV9kaXNwbGF5KSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDk4NywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0 IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilf X3B5eF92X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBW X1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Z2V0X3BvaW50ZXIoKChjaGFyIGNvbnN0ICopIkRpc3BsYXkiKSwgX19weXhfdl94MTFfZGlzcGxh eSksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5ODksIF9f cHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5ODUKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk4NworICAqICAgICAgICAgaWYgYWR2YW5jZWRfY29udHJvbDoKKyAgKiAgICAgICAg ICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEp CisgICogICAgICAgICBpZiB4MTFfZGlzcGxheTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTE3MTE4LDE3ICsxNzExOCwxNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAq LworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4OAorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MAorICAqICAgICAgICAgICAgIHNl bGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRk X3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2ludGVyKCJEaXNwbGF5 IiwgeDExX2Rpc3BsYXkpKQorICAqICAgICAgICAgaWYgd2xfZGlzcGxheTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9k aXNwbGF5CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFN X1dMX0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCisgICov CistICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl93bF9kaXNwbGF5 KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgOTg4LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X3ds X2Rpc3BsYXkpOyBpZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlYX0VSUigwLCA5OTAs IF9fcHl4X0wxX2Vycm9yKQorICAgaWYgKF9fcHl4X3RfNikgeworIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTg5CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5OTEKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5E RVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2ludGVyKCJEaXNwbGF5IiwgeDExX2Rpc3BsYXkp KQorICAqICAgICAgICAgaWYgd2xfZGlzcGxheToKKyAgKiAgICAgICAgICAgICBzZWxmLl93bF9k aXNwbGF5ID0gd2xfZGlzcGxheSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTcx NDEsMTggKzE3MTQxLDE4IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICAgIF9fUHl4X0RF Q1JFRihfX3B5eF92X3NlbGYtPl93bF9kaXNwbGF5KTsKKyAgICAgX19weXhfdl9zZWxmLT5fd2xf ZGlzcGxheSA9IF9fcHl4X3Zfd2xfZGlzcGxheTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjk5MAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTkyCisgICogICAgICAgICBpZiB3bF9kaXNwbGF5OgorICAqICAgICAgICAgICAgIHNlbGYu X3dsX2Rpc3BsYXkgPSB3bF9kaXNwbGF5CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lk cChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwg d2xfZGlzcGxheSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGlm IGRybV9kaXNwbGF5OgorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxh eS5nZXQoImZkIiwgLTEpCisgICovCistICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3Bh cmFtcy0+X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9Q QVJBTV9XTF9ESVNQTEFZLCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9nZXRfcG9pbnRl cigoKGNoYXIgY29uc3QgKikid2xfZGlzcGxheSIpLCBfX3B5eF92X3dsX2Rpc3BsYXkpLCBOVUxM KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTkwLCBfX3B5eF9MMV9l cnJvcikKKysgICAgX19weXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFi KS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVks IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X2dldF9wb2ludGVyKCgoY2hhciBjb25zdCAq KSJ3bF9kaXNwbGF5IiksIF9fcHl4X3Zfd2xfZGlzcGxheSksIE5VTEwpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTIsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODgK KysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MAorICAqICAgICAgICAg ICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkKKyAgKiAgICAgICAgICAgICBwYXJh bXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2ludGVyKCJE aXNwbGF5IiwgeDExX2Rpc3BsYXkpKQorICAqICAgICAgICAgaWYgd2xfZGlzcGxheTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3MTYxLDgwICsxNzE2MSw4MCBAQCBzdGF0aWMg aW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0 X18oc3RydWN0IF9fcHl4XworICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjk5MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5 MworICAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNwbGF5CisgICogICAg ICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdl dF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCisgICogICAgICAgICBpZiBkcm1f ZGlzcGxheTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIGRy bV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpCisgICogICAgICAgICAgICAg ZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpCisgICov CistICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9kcm1fZGlzcGxh eSk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDk5MSwgX19weXhf TDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9k cm1fZGlzcGxheSk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDk5 MywgX19weXhfTDFfZXJyb3IpCisgICBpZiAoX19weXhfdF82KSB7CisgCistICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTIKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjk5NAorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JF TkRFUl9QQVJBTV9XTF9ESVNQTEFZLCBnZXRfcG9pbnRlcigid2xfZGlzcGxheSIsIHdsX2Rpc3Bs YXkpKQorICAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6CisgICogICAgICAgICAgICAgZHJtX3Bh cmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5 LmdldCgiY3J0Y19pZCIsIC0xKQorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9y X2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkKKyAgKi8KKy0gICAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2RybV9kaXNwbGF5LCBf X3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTky LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihfX3B5eF92X2RybV9kaXNwbGF5LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTk0LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwo X19weXhfdF8yLCBfX3B5eF90dXBsZV9fNywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDk5MiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9f UHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90dXBsZV9fNywgTlVMTCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5NCwgX19weXhfTDFfZXJyb3IpCisg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKKy0gICAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9f cHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09IChpbnQpLTEpICYmIFB5RXJyX09j Y3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTkyLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhf dF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhf dF83ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTk0LCBf X3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9 IDA7CisgICAgIF9fcHl4X3ZfZHJtX3BhcmFtcy5mZCA9IF9fcHl4X3RfNzsKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MworKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTk1CisgICogICAgICAgICBpZiBkcm1fZGlzcGxheToKKyAgKiAg ICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIsIC0xKQorICAq ICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5LmdldCgiY3J0Y19p ZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgZHJt X3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0x KQorICAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVlc3Rf cHRyIiwgTm9uZSkKKyAgKi8KKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihfX3B5eF92X2RybV9kaXNwbGF5LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTkzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhf dF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2RybV9kaXNwbGF5LCBfX3B5 eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTk1LCBf X3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4 X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8xLCBfX3B5eF90dXBsZV9fOCwgTlVM TCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk5MywgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8xLCBf X3B5eF90dXBsZV9fOCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDk5NSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwor ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAgX19weXhf dF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSgoX19weXhf dF83ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTkzLCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4 X3RfMik7IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3Vy cmVkKCkpKSBfX1BZWF9FUlIoMCwgOTk1LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgICAgIF9fcHl4X3ZfZHJtX3BhcmFtcy5j cnRjX2lkID0gX19weXhfdF83OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTk0CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTYKKyAg KiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIsIC0xKQor ICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5LmdldCgiY3J0 Y19pZCIsIC0xKQorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJt X2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorICAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVl c3RfcHRyIiwgTm9uZSkKKyAgKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6CisgICov CistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9kcm1f ZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDAsIDk5NCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2Jq ZWN0X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk5NiwgX19weXhfTDFfZXJyb3IpCisg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9i amVjdF9DYWxsKF9fcHl4X3RfMiwgX19weXhfdHVwbGVfXzksIE5VTEwpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5OTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5 eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMiwgX19weXhfdHVwbGVfXzksIE5V TEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5OTYsIF9fcHl4X0wx X2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5SW50 X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoaW50KS0xKSAm JiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDk5NCwgX19weXhfTDFfZXJyb3IpCisr ICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtl bHkoKF9fcHl4X3RfNyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJS KDAsIDk5NiwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworICAgICBfX3B5eF92X2RybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gX19w eXhfdF83OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk1Cisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTcKKyAgKiAgICAgICAgICAg ICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKKyAg KiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgi Y29ubmVjdG9yX2lkIiwgLTEpCisgICogICAgICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0 KCJhdG9taWNfcmVxdWVzdF9wdHIiLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisgICogICAgICAgICAgICAgaWYgYXJwIGlzIG5vdCBOb25lOgorICAqICAgICAgICAgICAgICAg ICBkcm1fcGFyYW1zLmF0b21pY19yZXF1ZXN0X3B0ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5n ZXRfcG9pbnRlcihhcnAsICJkcm1Nb2RlQXRvbWljUmVxKiIpCisgICovCistICAgIF9fcHl4X3Rf MSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19weXhf bl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5NSwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIo X19weXhfdl9kcm1fZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDk5NywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4 X3RfMSwgX19weXhfdHVwbGVfXzEwLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgOTk1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8yID0gX19QeXhf UHlPYmplY3RfQ2FsbChfX3B5eF90XzEsIF9fcHl4X3R1cGxlX18xMCwgTlVMTCk7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk5NywgX19weXhfTDFfZXJyb3IpCisgICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKyAgICAgX19weXhfdl9hcnAgPSBfX3B5eF90XzI7CisgICAgIF9fcHl4 X3RfMiA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTYK KysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5OAorICAqICAgICAgICAg ICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3Jf aWQiLCAtMSkKKyAgKiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5nZXQoImF0b21pY19y ZXF1ZXN0X3B0ciIsIE5vbmUpCisgICogICAgICAgICAgICAgaWYgYXJwIGlzIG5vdCBOb25lOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTcyNDUsMTcgKzE3MjQ1LDE3IEBAIHN0 YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9f X2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzYgIT0gMCk7 CisgICAgIGlmIChfX3B5eF90XzMpIHsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTk3CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojk5OQorICAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVl c3RfcHRyIiwgTm9uZSkKKyAgKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6CisgICog ICAgICAgICAgICAgICAgIGRybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gPF9kcm1Nb2Rl QXRvbWljUmVxICoqPmdldF9wb2ludGVyKGFycCwgImRybU1vZGVBdG9taWNSZXEqIikgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVy X2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkKKyAgKiAgICAgICAgICAgICBw YXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1z KQorICAqLworLSAgICAgIF9fcHl4X3RfOCA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4 X3ZfYXJwKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF84KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDAsIDk5NywgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19weXhfdF84ID0gX19Q eXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9hcnApOyBpZiAodW5saWtlbHkoKCFfX3B5eF90 XzgpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTk5LCBfX3B5eF9MMV9lcnJv cikKKyAgICAgICBfX3B5eF92X2RybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gKChzdHJ1 Y3QgX2RybU1vZGVBdG9taWNSZXEgKiopX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0 X3BvaW50ZXIoX19weXhfdF84LCBfX3B5eF9rcF9zX2RybU1vZGVBdG9taWNSZXEpKTsKKyAKKy0g ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk2CisrICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5OAorICAqICAgICAgICAgICAgIGRybV9wYXJh bXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkKKyAg KiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5nZXQoImF0b21pY19yZXF1ZXN0X3B0ciIs IE5vbmUpCisgICogICAgICAgICAgICAgaWYgYXJwIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMTcyNjQsMzQgKzE3MjY0LDM0IEBAIHN0YXRpYyBpbnQgX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1 Y3QgX19weXhfCisgICovCisgICAgIH0KKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjk5OAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAw MAorICAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKKyAgKiAgICAgICAgICAgICAg ICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+ Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQorICAqICAgICAgICAgICAgIGRy bV9wYXJhbXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9p ZHAoTVBWX1JFTkRFUl9QQVJBTV9EUk1fRElTUExBWSwgJmRybV9wYXJhbXMpCisgICogICAgICAg ICBpZiBkcm1fb3NkX3NpemU6CisgICovCistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0 X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk5OCwgX19weXhfTDFfZXJyb3IpCisrICAg IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxh eSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDEwMDAsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0g ICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzIsIF9fcHl4X3R1cGxl X18xMSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5OCwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19w eXhfdF8yLCBfX3B5eF90dXBsZV9fMTEsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxMDAwLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor LSAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdF8xKTsgaWYgKHVubGlr ZWx5KChfX3B5eF90XzcgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VS UigwLCA5OTgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9B c19pbnQoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzcgPT0gKGludCktMSkgJiYg UHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDAwLCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICAgIF9fcHl4X3Zf ZHJtX3BhcmFtcy5yZW5kZXJfZmQgPSBfX3B5eF90Xzc7CisgCistICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5OTkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwMDEKKyAgKiAgICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVz dF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0 b21pY1JlcSoiKQorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVyX2ZkID0gZHJtX2Rp c3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3Zv aWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1zKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6CisgICogICAg ICAgICAgICAgX2RybV9vc2Rfc2l6ZS53aWR0aCwgX2RybV9vc2Rfc2l6ZS5oZWlnaHQgPSBkcm1f b3NkX3NpemUKKyAgKi8KKy0gICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVj dF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5f X3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0RS TV9ESVNQTEFZLCAoJl9fcHl4X3ZfZHJtX3BhcmFtcyksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5OTksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90 XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVu ZGVyUGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhf dl9wYXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICgmX19weXhfdl9kcm1fcGFy YW1zKSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwMDEs IF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTEKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjk5MworICAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNw bGF5CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dM X0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCisgICogICAg ICAgICBpZiBkcm1fZGlzcGxheTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3 MzAwLDE3ICsxNzMwMCwxNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAqLworICAgfQor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDAKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDAyCisgICogICAgICAgICAgICAgZHJtX3BhcmFt cy5yZW5kZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJlbmRlcl9mZCIsIC0xKQorICAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9EUk1fRElTUExBWSwgJmRy bV9wYXJhbXMpCisgICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBfZHJtX29zZF9zaXplLndpZHRoLCBfZHJtX29z ZF9zaXplLmhlaWdodCA9IGRybV9vc2Rfc2l6ZQorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf dm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9EUk1fT1NEX1NJWkUsICZfZHJtX29zZF9zaXplKQorICAq LworLSAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfZHJtX29zZF9z aXplKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwgMTAwMCwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhf dl9kcm1fb3NkX3NpemUpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlYX0VSUigw LCAxMDAyLCBfX3B5eF9MMV9lcnJvcikKKyAgIGlmIChfX3B5eF90XzMpIHsKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDEKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwMDMKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRw KE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1zKQorICAqICAgICAgICAg aWYgZHJtX29zZF9zaXplOgorICAqICAgICAgICAgICAgIF9kcm1fb3NkX3NpemUud2lkdGgsIF9k cm1fb3NkX3NpemUuaGVpZ2h0ID0gZHJtX29zZF9zaXplICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0xNzMyMyw3ICsxNzMyMyw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisg ICAgICAgaWYgKHVubGlrZWx5KHNpemUgIT0gMikpIHsKKyAgICAgICAgIGlmIChzaXplID4gMikg X19QeXhfUmFpc2VUb29NYW55VmFsdWVzRXJyb3IoMik7CisgICAgICAgICBlbHNlIGlmIChzaXpl ID49IDApIF9fUHl4X1JhaXNlTmVlZE1vcmVWYWx1ZXNFcnJvcihzaXplKTsKKy0gICAgICAgIF9f UFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICAgIF9fUFlYX0VSUigwLCAx MDAzLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgICB9CisgICAgICAgI2lmIENZVEhPTl9BU1NVTUVf U0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCisgICAgICAgaWYgKGxp a2VseShQeVR1cGxlX0NoZWNrRXhhY3Qoc2VxdWVuY2UpKSkgeworQEAgLTE3MzM2LDIxICsxNzMz NiwyMSBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzEpOworICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOworICAgICAgICNlbHNlCist ICAgICAgX19weXhfdF8xID0gUHlTZXF1ZW5jZV9JVEVNKHNlcXVlbmNlLCAwKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCisrICAg ICAgX19weXhfdF8xID0gUHlTZXF1ZW5jZV9JVEVNKHNlcXVlbmNlLCAwKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTAwMywgX19weXhfTDFfZXJyb3IpCisgICAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgICAgX19weXhfdF8yID0gUHlTZXF1ZW5jZV9J VEVNKHNlcXVlbmNlLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MTAwMSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19weXhfdF8yID0gUHlTZXF1ZW5jZV9JVEVN KHNlcXVlbmNlLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTAw MywgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICAg ICAgI2VuZGlmCisgICAgIH0gZWxzZSB7CisgICAgICAgUHlfc3NpemVfdCBpbmRleCA9IC0xOwor LSAgICAgIF9fcHl4X3RfNCA9IFB5T2JqZWN0X0dldEl0ZXIoX19weXhfdl9kcm1fb3NkX3NpemUp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9l cnJvcikKKysgICAgICBfX3B5eF90XzQgPSBQeU9iamVjdF9HZXRJdGVyKF9fcHl4X3ZfZHJtX29z ZF9zaXplKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAwMywgX19w eXhfTDFfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICAgICAgX19w eXhfdF85ID0gUHlfVFlQRShfX3B5eF90XzQpLT50cF9pdGVybmV4dDsKKyAgICAgICBpbmRleCA9 IDA7IF9fcHl4X3RfMSA9IF9fcHl4X3RfOShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIGdvdG8gX19weXhfTDExX3VucGFja2luZ19mYWlsZWQ7CisgICAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisgICAgICAgaW5kZXggPSAxOyBfX3B5eF90XzIgPSBfX3B5eF90Xzko X19weXhfdF80KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBnb3RvIF9fcHl4X0wxMV91bnBh Y2tpbmdfZmFpbGVkOworICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICAgIGlm IChfX1B5eF9JdGVybmV4dFVucGFja0VuZENoZWNrKF9fcHl4X3RfOShfX3B5eF90XzQpLCAyKSA8 IDApIF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBpZiAoX19QeXhf SXRlcm5leHRVbnBhY2tFbmRDaGVjayhfX3B5eF90XzkoX19weXhfdF80KSwgMikgPCAwKSBfX1BZ WF9FUlIoMCwgMTAwMywgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19weXhfdF85ID0gTlVMTDsK KyAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgICAgICBn b3RvIF9fcHl4X0wxMl91bnBhY2tpbmdfZG9uZTsKK0BAIC0xNzM1OCwyOCArMTczNTgsMjggQEAg c3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0 X19faW5pdF9fKHN0cnVjdCBfX3B5eF8KKyAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKyAgICAgICBfX3B5eF90XzkgPSBOVUxMOworICAgICAgIGlmIChfX1B5 eF9JdGVyRmluaXNoKCkgPT0gMCkgX19QeXhfUmFpc2VOZWVkTW9yZVZhbHVlc0Vycm9yKGluZGV4 KTsKKy0gICAgICBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19Q WVhfRVJSKDAsIDEwMDMsIF9fcHl4X0wxX2Vycm9yKQorICAgICAgIF9fcHl4X0wxMl91bnBhY2tp bmdfZG9uZTo7CisgICAgIH0KKy0gICAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9f cHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09IChpbnQpLTEpICYmIFB5RXJyX09j Y3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4 X3RfNyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4 X3RfNyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwMDMs IF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKKy0gICAgX19weXhfdF8xMCA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzIpOyBp ZiAodW5saWtlbHkoKF9fcHl4X3RfMTAgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkp IF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xMCA9IF9f UHl4X1B5SW50X0FzX2ludChfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMTAgPT0g KGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDAzLCBfX3B5eF9M MV9lcnJvcikKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisg ICAgIF9fcHl4X3ZfX2RybV9vc2Rfc2l6ZS53aWR0aCA9IF9fcHl4X3RfNzsKKyAgICAgX19weXhf dl9fZHJtX29zZF9zaXplLmhlaWdodCA9IF9fcHl4X3RfMTA7CisgCistICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDAyCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDA0CisgICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6CisgICogICAgICAg ICAgICAgX2RybV9vc2Rfc2l6ZS53aWR0aCwgX2RybV9vc2Rfc2l6ZS5oZWlnaHQgPSBkcm1fb3Nk X3NpemUKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1f RFJNX09TRF9TSVpFLCAmX2RybV9vc2Rfc2l6ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqIAorICAqICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2NyZWF0ZSgmc2Vs Zi5fY3R4LCBzZWxmLl9tcHYuX2N0eCwgcGFyYW1zLnBhcmFtcykKKyAgKi8KKy0gICAgX19weXhf dF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1Jl bmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4 X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgKCZfX3B5eF92X19kcm1f b3NkX3NpemUpLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MTAwMiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3Bh cmFtcy0+X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9Q QVJBTV9EUk1fT1NEX1NJWkUsICgmX19weXhfdl9fZHJtX29zZF9zaXplKSwgTlVMTCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwMDQsIF9fcHl4X0wxX2Vycm9yKQor ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Mik7IF9fcHl4X3RfMiA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDAwCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDAyCisg ICogICAgICAgICAgICAgZHJtX3BhcmFtcy5yZW5kZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJl bmRlcl9mZCIsIC0xKQorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRF Ul9QQVJBTV9EUk1fRElTUExBWSwgJmRybV9wYXJhbXMpCisgICogICAgICAgICBpZiBkcm1fb3Nk X3NpemU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNzM4OCw3ICsxNzM4OCw3 IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29u dGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICovCisgICB9CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAwNAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwMDYKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5E RVJfUEFSQU1fRFJNX09TRF9TSVpFLCAmX2RybV9vc2Rfc2l6ZSkKKyAgKiAKKyAgKiAgICAgICAg IGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2Ll9j dHgsIHBhcmFtcy5wYXJhbXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNzM5 Nyw3ICsxNzM5Nyw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICovCisgICBfX3B5eF92 X2VyciA9IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoKCZfX3B5eF92X3NlbGYtPl9jdHgpLCBf X3B5eF92X3NlbGYtPl9tcHYtPl9jdHgsIF9fcHl4X3ZfcGFyYW1zLT5wYXJhbXMpOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDUKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDA3CisgICogCisgICogICAgICAgICBlcnIgPSBtcHZfcmVu ZGVyX2NvbnRleHRfY3JlYXRlKCZzZWxmLl9jdHgsIHNlbGYuX21wdi5fY3R4LCBwYXJhbXMucGFy YW1zKQorICAqICAgICAgICAgaWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTE3NDA3LDE2ICsxNzQwNywxNiBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAg X19weXhfdF8zID0gKChfX3B5eF92X2VyciA8IDApICE9IDApOworICAgaWYgKHVubGlrZWx5KF9f cHl4X3RfMykpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEw MDYKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDgKKyAgKiAgICAg ICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2 Ll9jdHgsIHBhcmFtcy5wYXJhbXMpCisgICogICAgICAgICBpZiBlcnIgPCAwOgorICAqICAgICAg ICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor ICAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCisgICogCisgICovCistICAgIF9fUHl4X0dl dE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDA2LCBfX3B5eF9MMV9lcnJvcikKKysg ICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzEsIF9fcHl4X25fc19NUFZFcnJv cik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwMDgsIF9fcHl4X0wx X2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19weXhfdF80ID0g X19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCAxMDA2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF80ID0g X19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCAxMDA4LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNCk7CisgICAgIF9fcHl4X3RfNSA9IE5VTEw7CisgICAgIGlmIChDWVRIT05fVU5Q QUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8xKSkpIHsKK0BA IC0xNzQzMSwxNCArMTc0MzEsMTQgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVjdCBfX3B5eF8KKyAgICAgX19w eXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8x LCBfX3B5eF90XzUsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfMSwgX19weXhfdF80KTsKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90 XzUgPSAwOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0g ICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTAwNiwgX19weXhfTDFf ZXJyb3IpCisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwMDgs IF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICAgIF9fUHl4X1JhaXNlKF9f cHl4X3RfMiwgMCwgMCwgMCk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworLSAgICBfX1BZWF9FUlIoMCwgMTAwNiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9f UFlYX0VSUigwLCAxMDA4LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwMDUKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwMDcKKyAgKiAKKyAgKiAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9j cmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2Ll9jdHgsIHBhcmFtcy5wYXJhbXMpCisgICogICAg ICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTc0NDcs NyArMTc0NDcsNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAqLworICAgfQorIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDcKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDA5CisgICogICAgICAgICBpZiBlcnIgPCAwOgorICAqICAg ICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKyAgKiAgICAgICAgIHNlbGYuaW5pdGVkID0g VHJ1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTc0NTYsNyArMTc0NTYsNyBA QCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAqLworICAgX19weXhfdl9zZWxmLT5pbml0ZWQg PSAxOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk1MAorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk1MgorICAqICAgICAgICAgYmludCBpbml0 ZWQKKyAgKiAKKyAgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1wdiwgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTE3NDgxLDcgKzE3NDgxLDcgQEAgc3RhdGljIGludCBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVjdCBf X3B5eF8KKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTAxMAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDEy CisgICogCisgICogICAgIEBfZXJyb3JzCisgICogICAgIGRlZiBzZXRfaWNjX3Byb2ZpbGUoc2Vs ZiwgaWNjX2Jsb2IpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTc1MjAsNyAr MTc1MjAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfMnNldF9pY2NfcHJvZmlsZQorICAgaW50IF9fcHl4X2NsaW5lbm8g PSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldF9pY2NfcHJvZmlsZSIsIDAp OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMTYKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDE4CisgICogICAgICAgICAgICAgaW50IGVy cgorICAqIAorICAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaWNjX2Jsb2IsIGJ5dGVzKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3NTMxLDE0ICsxNzUzMSwxNCBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNv bnRleHRfMnNldF9pY2NfcHJvZmlsZQorICAgX19weXhfdF8yID0gKCghKF9fcHl4X3RfMSAhPSAw KSkgIT0gMCk7CisgICBpZiAodW5saWtlbHkoX19weXhfdF8yKSkgeworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAxNworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTAxOQorICAqIAorICAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo aWNjX2Jsb2IsIGJ5dGVzKToKKyAgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJpY2Nf YmxvYiBzaG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKyAgKiAgICAgICAgIHZhbC5kYXRhID0gPHZvaWQgKj48Y2hhciAqPmljY19ibG9iCisg ICogICAgICAgICB2YWwuc2l6ZSA9IGxlbihpY2NfYmxvYikKKyAgKi8KKy0gICAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19QeU1QVkVycm9yKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAxNywgX19weXhfTDFfZXJyb3IpCisr ICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3NfUHlNUFZF cnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwMTksIF9fcHl4 X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgICAgX19weXhfdF81 ID0gTlVMTDsKKyAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzQpKSkgeworQEAgLTE3NTUyLDE0ICsxNzU1MiwxNCBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfMnNldF9pY2NfcHJvZmlsZQorICAgICB9CisgICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNCwgX19weXhfdF81LCBfX3B5eF9r cF9zX2ljY19ibG9iX3Nob3VsZF9iZV9hX2J5dGVzX2luc3RhKSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF80LCBfX3B5eF9rcF9zX2ljY19ibG9iX3Nob3VsZF9iZV9hX2J5dGVz X2luc3RhKTsKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwor LSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMDE3LCBfX3B5eF9M MV9lcnJvcikKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTAx OSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgICBf X1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgICAgX19QeXhfUmFpc2Uo X19weXhfdF8zLCAwLCAwLCAwKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4 X3RfMyA9IDA7CistICAgIF9fUFlYX0VSUigwLCAxMDE3LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19QWVhfRVJSKDAsIDEwMTksIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTAxNgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTAxOAorICAqICAgICAgICAgICAgIGludCBlcnIKKyAgKiAKKyAgKiAgICAgICAg IGlmIG5vdCBpc2luc3RhbmNlKGljY19ibG9iLCBieXRlcyk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC0xNzU2OCwyNyArMTc1NjgsMjcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2Zp bGUKKyAgKi8KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDE4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyMAorICAqICAgICAg ICAgaWYgbm90IGlzaW5zdGFuY2UoaWNjX2Jsb2IsIGJ5dGVzKToKKyAgKiAgICAgICAgICAgICBy YWlzZSBQeU1QVkVycm9yKCJpY2NfYmxvYiBzaG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIpCisg ICogICAgICAgICB2YWwuZGF0YSA9IDx2b2lkICo+PGNoYXIgKj5pY2NfYmxvYiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICB2YWwuc2l6ZSA9IGxlbihpY2NfYmxvYikK KyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0FzV3JpdGFibGVTdHJp bmcoX19weXhfdl9pY2NfYmxvYik7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNikgJiYgUHlFcnJf T2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDE4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0FzV3JpdGFibGVTdHJpbmcoX19weXhfdl9pY2NfYmxvYik7 IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNikgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VS UigwLCAxMDIwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4X3ZfdmFsLmRhdGEgPSAoKHZvaWQg KikoKGNoYXIgKilfX3B5eF90XzYpKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDE5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyMQor ICAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoImljY19ibG9iIHNob3VsZCBiZSBhIGJ5 dGVzIGluc3RhbmNlIikKKyAgKiAgICAgICAgIHZhbC5kYXRhID0gPHZvaWQgKj48Y2hhciAqPmlj Y19ibG9iCisgICogICAgICAgICB2YWwuc2l6ZSA9IGxlbihpY2NfYmxvYikgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqIAorICAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5E RVJfUEFSQU1fSUNDX1BST0ZJTEUKKyAgKi8KKy0gIF9fcHl4X3RfNyA9IFB5T2JqZWN0X0xlbmd0 aChfX3B5eF92X2ljY19ibG9iKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNyA9PSAoKFB5X3NzaXpl X3QpLTEpKSkgX19QWVhfRVJSKDAsIDEwMTksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF83 ID0gUHlPYmplY3RfTGVuZ3RoKF9fcHl4X3ZfaWNjX2Jsb2IpOyBpZiAodW5saWtlbHkoX19weXhf dF83ID09ICgoUHlfc3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMCwgMTAyMSwgX19weXhfTDFfZXJy b3IpCisgICBfX3B5eF92X3ZhbC5zaXplID0gX19weXhfdF83OworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDIzCisgICogICAgICAgICB2YWwuc2l6ZSA9IGxlbihpY2NfYmxvYikKKyAgKiAK KyAgKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lDQ19QUk9GSUxFICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNzU5Nyw3ICsxNzU5Nyw3IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF8yc2V0X2ljY19wcm9maWxlCisgICovCisgICBfX3B5eF92X3BhcmFtLnR5cGUgPSBNUFZfUkVO REVSX1BBUkFNX0lDQ19QUk9GSUxFOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwMjIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI0Cisg ICogCisgICogICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JQ0NfUFJPRklM RQorICAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZ2YWwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTE3NjA2LDcgKzE3NjA2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2ZpbGUKKyAg Ki8KKyAgIF9fcHl4X3ZfcGFyYW0uZGF0YSA9ICgmX19weXhfdl92YWwpOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDI2CisgICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAorICAqIAor ICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTE3NjIxLDcgKzE3NjIxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2ZpbGUKKyAgICAgICAjZW5k aWYKKyAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTAyNQorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwMjcKKyAgKiAKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAg ZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4LCBwYXJhbSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3NjMxLDcgKzE3NjMxLDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250 ZXh0XzJzZXRfaWNjX3Byb2ZpbGUKKyAgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X3JlbmRlcl9j b250ZXh0X3NldF9wYXJhbWV0ZXIoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X3BhcmFtKTsK KyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEw MjQKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyNgorICAqICAg ICAgICAgcGFyYW0uZGF0YSA9ICZ2YWwKKyAgKiAKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNzY1MCw3ICsxNzY1MCw3IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF8yc2V0X2ljY19wcm9maWxlCisgICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwMjYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDI4CisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIGVyciA9 IG1wdl9yZW5kZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKHNlbGYuX2N0eCwgcGFyYW0pCisgICog ICAgICAgICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNzY1 OCwxMyArMTc2NTgsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2ZpbGUKKyAgKiAgICAgQF9lcnJv cnMKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzMgPSBfX1B5 eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkg X19QWVhfRVJSKDAsIDEwMjYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8zID0gX19QeXhf UHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9f UFlYX0VSUigwLCAxMDI4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzMpOworICAgX19weXhfciA9IF9fcHl4X3RfMzsKKyAgIF9fcHl4X3RfMyA9IDA7CisgICBnb3Rv IF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMTAK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDEyCisgICogCisgICogICAg IEBfZXJyb3JzCisgICogICAgIGRlZiBzZXRfaWNjX3Byb2ZpbGUoc2VsZiwgaWNjX2Jsb2IpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTc2ODUsNyArMTc2ODUsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfMnNldF9pY2NfcHJvZmlsZQorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI5CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwMzEKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAgICAgZGVmIHNldF9h bWJpZW50X2xpZ2h0KHNlbGYsIGx1eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xNzcxOSwxNyArMTc3MTksMTcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzRzZXRfYW1iaWVudF9saWcKKyAgIGludCBf X3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfYW1i aWVudF9saWdodCIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwMzUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM3CisgICogICAg ICAgICAgICAgaW50IGVycgorICAqIAorICAqICAgICAgICAgdmFsID0gbHV4ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BB UkFNX0FNQklFTlRfTElHSFQKKyAgKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsCisgICovCist ICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdl9sdXgpOyBpZiAodW5saWtl bHkoKF9fcHl4X3RfMSA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJS KDAsIDEwMzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfQXNf aW50KF9fcHl4X3ZfbHV4KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzEgPT0gKGludCktMSkgJiYg UHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDM3LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fcHl4X3ZfdmFsID0gX19weXhfdF8xOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwMzYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM4 CisgICogCisgICogICAgICAgICB2YWwgPSBsdXgKKyAgKiAgICAgICAgIHBhcmFtLnR5cGUgPSBN UFZfUkVOREVSX1BBUkFNX0FNQklFTlRfTElHSFQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTE3NzM4LDcgKzE3NzM4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzRzZXRfYW1iaWVudF9saWcKKyAgKi8K KyAgIF9fcHl4X3ZfcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fQU1CSUVOVF9MSUdIVDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM3CisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAzOQorICAqICAgICAgICAgdmFsID0gbHV4Cisg ICogICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9BTUJJRU5UX0xJR0hUCisg ICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtMTc3NDcsNyArMTc3NDcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNHNldF9hbWJpZW50X2xpZworICAqLwor ICAgX19weXhfdl9wYXJhbS5kYXRhID0gKCZfX3B5eF92X3ZhbCk7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAzOQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwNDEKKyAgKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsCisgICogCisgICog ICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTc3 NjIsNyArMTc3NjIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM1JlbmRlckNvbnRleHRfNHNldF9hbWJpZW50X2xpZworICAgICAgICNlbmRpZgor ICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDQwCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA0MgorICAqIAorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICBlcnIg PSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3BhcmFtZXRlcihzZWxmLl9jdHgsIHBhcmFtKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTc3NzIsNyArMTc3NzIsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRf NHNldF9hbWJpZW50X2xpZworICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfcmVuZGVyX2NvbnRl eHRfc2V0X3BhcmFtZXRlcihfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW0pOworICAg ICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAzOQor KyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDQxCisgICogICAgICAg ICBwYXJhbS5kYXRhID0gJnZhbAorICAqIAorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3NzkxLDcgKzE3NzkxLDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzRz ZXRfYW1iaWVudF9saWcKKyAgICAgICB9CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTA0MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwNDMKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgZXJyID0gbXB2 X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4LCBwYXJhbSkKKyAgKiAgICAg ICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3Nzk5LDEz ICsxNzc5OSwxMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfNHNldF9hbWJpZW50X2xpZworICAqICAgICBkZWYgZ2V0X25l eHRfZnJhbWVfaW5mbyhzZWxmKToKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Cist ICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwNDEsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMDQzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgX19weXhfciA9IF9fcHl4X3RfMjsKKyAgIF9fcHl4 X3RfMiA9IDA7CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwMjkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDMxCisgICogCisgICogICAgIEBfZXJyb3JzCisgICogICAgIGRlZiBzZXRfYW1iaWVudF9saWdo dChzZWxmLCBsdXgpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTc4MjQsNyAr MTc4MjQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfNHNldF9hbWJpZW50X2xpZworICAgcmV0dXJuIF9fcHl4X3I7Cisg fQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDQzCisrLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNDUKKyAgKiAgICAgICAgIHJldHVybiBlcnIKKyAg KiAKKyAgKiAgICAgZGVmIGdldF9uZXh0X2ZyYW1lX2luZm8oc2VsZik6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xNzg2MSw3ICsxNzg2MSw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF82Z2V0X25leHRf ZnJhbWVfCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiZ2V0X25leHRfZnJhbWVfaW5mbyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwNDgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDUwCisgICogICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJhbSBwYXJhbQorICAqIAor ICAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9JTkZP ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNzg3MCw3ICsxNzg3MCw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29u dGV4dF82Z2V0X25leHRfZnJhbWVfCisgICovCisgICBfX3B5eF92X3BhcmFtLnR5cGUgPSBNUFZf UkVOREVSX1BBUkFNX05FWFRfRlJBTUVfSU5GTzsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDQ5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA1MQorICAqIAorICAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fTkVY VF9GUkFNRV9JTkZPCisgICogICAgICAgICBwYXJhbS5kYXRhID0gJmluZm8gICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3ODc5LDcgKzE3ODc5LDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzZnZXRfbmV4 dF9mcmFtZV8KKyAgKi8KKyAgIF9fcHl4X3ZfcGFyYW0uZGF0YSA9ICgmX19weXhfdl9pbmZvKTsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDUwCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MgorICAqICAgICAgICAgcGFyYW0udHlwZSA9 IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9JTkZPCisgICogICAgICAgICBwYXJhbS5kYXRh ID0gJmluZm8KKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0xNzg5NCw3ICsxNzg5NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF82Z2V0X25leHRfZnJhbWVfCisg ICAgICAgI2VuZGlmCisgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTEKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDUzCisgICogICAgICAgICBwYXJhbS5kYXRhID0gJmluZm8KKyAgKiAg ICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250 ZXh0X2dldF9pbmZvKHNlbGYuX2N0eCwgcGFyYW0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xNzkwNCw3ICsxNzkwNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF82Z2V0X25leHRfZnJhbWVfCisgICAg ICAgICBfX3B5eF92X2VyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhfX3B5eF92X3Nl bGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW0pOworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MAorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDUyCisgICogICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9Q QVJBTV9ORVhUX0ZSQU1FX0lORk8KKyAgKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmaW5mbworICAq ICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3 OTIzLDcgKzE3OTIzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzZnZXRfbmV4dF9mcmFtZV8KKyAgICAgICB9CisgICB9 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MgorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTQKKyAgKiAgICAgICAgIHdpdGggbm9naWw6 CisgICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2dldF9pbmZvKHNlbGYu X2N0eCwgcGFyYW0pCisgICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CitAQCAtMTc5MzMsMTYgKzE3OTMzLDE2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF82Z2V0X25leHRfZnJh bWVfCisgICBfX3B5eF90XzEgPSAoKF9fcHl4X3ZfZXJyIDwgMCkgIT0gMCk7CisgICBpZiAodW5s aWtlbHkoX19weXhfdF8xKSkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTA1MworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1NQor ICAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhzZWxmLl9j dHgsIHBhcmFtKQorICAqICAgICAgICAgaWYgZXJyIDwgMDoKKyAgKiAgICAgICAgICAgICByYWlz ZSBNUFZFcnJvcihlcnIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKyAgKiAg ICAgICAgIHJldHVybiBSZW5kZXJGcmFtZUluZm8oKS5fZnJvbV9zdHJ1Y3QoJmluZm8pCisgICov CistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8zLCBfX3B5eF9uX3NfTVBW RXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMDUzLCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzMsIF9f cHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDEwNTUsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0g ICAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDUzLCBfX3B5eF9MMV9lcnJvcikKKysg ICAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDU1LCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICAgIF9fcHl4X3RfNSA9IE5VTEw7CisgICAg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19w eXhfdF8zKSkpIHsKK0BAIC0xNzk1NywxNCArMTc5NTcsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzZnZXRfbmV4dF9m cmFtZV8KKyAgICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF8zLCBfX3B5eF90XzUsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9D YWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdF80KTsKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzUpOyBfX3B5eF90XzUgPSAwOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19w eXhfdF80ID0gMDsKKy0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MTA1MywgX19weXhfTDFfZXJyb3IpCisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDEwNTUsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgICAg IF9fUHl4X1JhaXNlKF9fcHl4X3RfMiwgMCwgMCwgMCk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBfX1BZWF9FUlIoMCwgMTA1MywgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fUFlYX0VSUigwLCAxMDU1LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTIKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTQKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICog ICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2dldF9pbmZvKHNlbGYuX2N0eCwg cGFyYW0pCisgICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtMTc5NzMsNyArMTc5NzMsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNmdldF9uZXh0X2ZyYW1lXworICAq LworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTUKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU3CisgICogICAgICAgICAgICAg cmFpc2UgTVBWRXJyb3IoZXJyKQorICAqIAorICAqICAgICAgICAgcmV0dXJuIFJlbmRlckZyYW1l SW5mbygpLl9mcm9tX3N0cnVjdCgmaW5mbykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTE3OTgxLDE2ICsxNzk4MSwxNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNmdldF9uZXh0X2ZyYW1lXworICAqICAg ICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6CisgICovCisgICBfX1B5eF9YREVD UkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJ bmZvKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwNTUsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlP YmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZv KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwNTcsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX3B5eF90XzMgPSAoKHN0 cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUlu Zm8gKikoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1l SW5mbyAqKV9fcHl4X3RfMiktPl9fcHl4X3Z0YWIpLT5fZnJvbV9zdHJ1Y3QoKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKilfX3B5eF90XzIp LCAoJl9fcHl4X3ZfaW5mbykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigw LCAxMDU1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqKSgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICopX19weXhf dF8yKS0+X19weXhfdnRhYiktPl9mcm9tX3N0cnVjdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqKV9fcHl4X3RfMiksICgmX19weXhfdl9p bmZvKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDEwNTcsIF9fcHl4 X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisgICBfX1B5eF9ERUNSRUYo X19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgIF9fcHl4X3IgPSBfX3B5eF90XzM7CisgICBf X3B5eF90XzMgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDQzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTA0NQorICAqICAgICAgICAgcmV0dXJuIGVycgorICAqIAorICAqICAgICBkZWYgZ2V0X25l eHRfZnJhbWVfaW5mbyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4 MDEyLDcgKzE4MDEyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzZnZXRfbmV4dF9mcmFtZV8KKyAgIHJldHVybiBfX3B5 eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1NworKy8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU5CisgICogICAgICAgICByZXR1cm4g UmVuZGVyRnJhbWVJbmZvKCkuX2Zyb21fc3RydWN0KCZpbmZvKQorICAqIAorICAqICAgICBkZWYg c2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xODAzOCw3ICsxODAzOCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF84c2V0X3VwZGF0ZV9jYWxsCisgICBf X1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo InNldF91cGRhdGVfY2FsbGJhY2siLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDU4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2 MAorICAqIAorICAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6CisgICog ICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTgw NTMsNyArMTgwNTMsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM1JlbmRlckNvbnRleHRfOHNldF91cGRhdGVfY2FsbAorICAgICAgICNlbmRpZgor ICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDU5CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA2MQorICAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6CisgICogICAg ICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9zZXRf dXBkYXRlX2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAqPmNiKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTgwNjMsNyArMTgwNjMsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRf OHNldF91cGRhdGVfY2FsbAorICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3NldF91cGRhdGVf Y2FsbGJhY2soX19weXhfdl9zZWxmLT5fY3R4LCAoJl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2X19jX3VwZGF0ZWNiKSwgKCh2b2lkICopX19weXhfdl9jYikpOworICAgICAgIH0KKyAKKy0g ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1OAorKyAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDYwCisgICogCisgICogICAgIGRlZiBzZXRf dXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKToKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODA4Miw3ICsxODA4Miw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF84 c2V0X3VwZGF0ZV9jYWxsCisgICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwNjAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDYyCisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIG1wdl9yZW5k ZXJfY29udGV4dF9zZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8 dm9pZCAqPmNiKQorICAqICAgICAgICAgc2VsZi51cGRhdGVfY2IgPSBjYiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMTgwOTUsNyArMTgwOTUsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfOHNldF91cGRh dGVfY2FsbAorICAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+dXBkYXRlX2NiKTsKKyAgIF9f cHl4X3Zfc2VsZi0+dXBkYXRlX2NiID0gX19weXhfdl9jYjsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDU3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTA1OQorICAqICAgICAgICAgcmV0dXJuIFJlbmRlckZyYW1lSW5mbygpLl9mcm9tX3N0 cnVjdCgmaW5mbykKKyAgKiAKKyAgKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwg Y2IpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTgxMTAsNyArMTgxMTAsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfOHNldF91cGRhdGVfY2FsbAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDYyCisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwNjQKKyAgKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKKyAg KiAKKyAgKiAgICAgZGVmIHVwZGF0ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTE4MTQxLDcgKzE4MTQxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEwdXBkYXRlKHN0cnVjdAorICAgaW50 IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVwZGF0 ZSIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjQKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY2CisgICogICAgIGRlZiB1cGRh dGUoc2VsZik6CisgICogICAgICAgICBjZGVmIHVpbnQ2NF90IHJldAorICAqICAgICAgICAgd2l0 aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4MTU2LDcgKzE4MTU2 LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNS ZW5kZXJDb250ZXh0XzEwdXBkYXRlKHN0cnVjdAorICAgICAgICNlbmRpZgorICAgICAgIC8qdHJ5 OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY1 CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2NworICAqICAg ICAgICAgY2RlZiB1aW50NjRfdCByZXQKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAg ICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3VwZGF0ZShzZWxmLl9jdHgpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODE2Niw3ICsxODE2Niw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8x MHVwZGF0ZShzdHJ1Y3QKKyAgICAgICAgIF9fcHl4X3ZfcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0 X3VwZGF0ZShfX3B5eF92X3NlbGYtPl9jdHgpOworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2NAorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDY2CisgICogICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICogICAg ICAgICBjZGVmIHVpbnQ2NF90IHJldAorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4MTg1LDcgKzE4MTg1LDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEwdXBk YXRlKHN0cnVjdAorICAgICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDY2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2 OAorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICByZXQgPSBtcHZfcmVu ZGVyX2NvbnRleHRfdXBkYXRlKHNlbGYuX2N0eCkKKyAgKiAgICAgICAgIHJldHVybiByZXQgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4MTkzLDEzICsxODE5MywxMyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfMTB1cGRhdGUoc3RydWN0CisgICogICAgIEBfZXJyb3JzCisgICovCisgICBfX1B5eF9YREVD UkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChf X3B5eF92X3JldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwNjYs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRf dChfX3B5eF92X3JldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEw NjgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX3B5 eF9yID0gX19weXhfdF8xOworICAgX19weXhfdF8xID0gMDsKKyAgIGdvdG8gX19weXhfTDA7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2MgorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjQKKyAgKiAgICAgICAgIHNlbGYudXBkYXRlX2Ni ID0gY2IKKyAgKiAKKyAgKiAgICAgZGVmIHVwZGF0ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTE4MjE4LDcgKzE4MjE4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEwdXBkYXRlKHN0cnVj dAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDY5CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNzEKKyAg KiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAgICAgZGVmIHJlbmRlcihzZWxmLCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTgyNDQsNyArMTgyNDQsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5k ZXIoUHlPYmplYworICAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7 Jl9fcHl4X25fc19vcGVuZ2xfZmJvLCZfX3B5eF9uX3NfZmxpcF95LCZfX3B5eF9uX3NfZGVwdGgs Jl9fcHl4X25fc19ibG9ja19mb3JfdGFyZ2V0X3RpbWUsJl9fcHl4X25fc19za2lwX3JlbmRlcmlu ZywwfTsKKyAgICAgUHlPYmplY3QqIHZhbHVlc1s1XSA9IHswLDAsMCwwLDB9OworIAorLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MAorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MgorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYg cmVuZGVyKHNlbGYsCisgICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTgyNTMsNyArMTgyNTMsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNy ZW5kZXIoUHlPYmplYworICAqLworICAgICB2YWx1ZXNbMF0gPSAoKFB5T2JqZWN0ICopUHlfTm9u ZSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDcxCisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDczCisgICogICAgIGRlZiByZW5k ZXIoc2VsZiwKKyAgKiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUsCisgICogICAgICAg ICAgICAgICAgZmxpcF95PUZhbHNlLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MTgyNjIsNyArMTgyNjIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIoUHlPYmplYworICAqLworICAgICB2 YWx1ZXNbMV0gPSAoKFB5T2JqZWN0ICopUHlfRmFsc2UpOworIAorLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTA3NAorICAqICAgICAgICAgICAgICAgIG9wZW5nbF9mYm89Tm9uZSwKKyAgKiAg ICAgICAgICAgICAgICBmbGlwX3k9RmFsc2UsCisgICogICAgICAgICAgICAgICAgZGVwdGg9Tm9u ZSwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4MjcxLDcgKzE4MjcxLDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJD b250ZXh0XzEzcmVuZGVyKFB5T2JqZWMKKyAgKi8KKyAgICAgdmFsdWVzWzJdID0gKChQeU9iamVj dCAqKVB5X05vbmUpOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA3MworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3NQorICAqICAg ICAgICAgICAgICAgIGZsaXBfeT1GYWxzZSwKKyAgKiAgICAgICAgICAgICAgICBkZXB0aD1Ob25l LAorICAqICAgICAgICAgICAgICAgIGJsb2NrX2Zvcl90YXJnZXRfdGltZT1UcnVlLCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTgyODAsNyArMTgyODAsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNy ZW5kZXIoUHlPYmplYworICAqLworICAgICB2YWx1ZXNbM10gPSAoKFB5T2JqZWN0ICopUHlfVHJ1 ZSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDc0CisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDc2CisgICogICAgICAgICAgICAg ICAgZGVwdGg9Tm9uZSwKKyAgKiAgICAgICAgICAgICAgICBibG9ja19mb3JfdGFyZ2V0X3RpbWU9 VHJ1ZSwKKyAgKiAgICAgICAgICAgICAgICBza2lwX3JlbmRlcmluZz1GYWxzZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODMzOCw3ICsxODMzOCw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xM3Jl bmRlcihQeU9iamVjCisgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGlmICh1bmxpa2VseShr d19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFs S2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJn cywgInJlbmRlciIpIDwgMCkpIF9fUFlYX0VSUigwLCAxMDY5LCBfX3B5eF9MM19lcnJvcikKKysg ICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dk cywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgInJlbmRlciIpIDwgMCkp IF9fUFlYX0VSUigwLCAxMDcxLCBfX3B5eF9MM19lcnJvcikKKyAgICAgICB9CisgICAgIH0gZWxz ZSB7CisgICAgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKSB7CitAQCAt MTgzNjQsNyArMTgzNjQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIoUHlPYmplYworICAgfQorICAgZ290 byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKyAgIF9fcHl4X0w1X2FyZ3R1cGxl X2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJyZW5kZXIiLCAwLCAwLCA1 LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDEwNjksIF9fcHl4 X0wzX2Vycm9yKQorKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInJlbmRlciIsIDAsIDAs IDUsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMTA3MSwgX19w eXhfTDNfZXJyb3IpCisgICBfX3B5eF9MM19lcnJvcjo7CisgICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0LnJlbmRlciIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CitAQCAtMTgzNzIsNyArMTgzNzIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIoUHlPYmpl YworICAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OworICAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTJyZW5kZXIoKChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopX19w eXhfdl9zZWxmKSwgX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF92X2ZsaXBfeSwgX19weXhfdl9k ZXB0aCwgX19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUsIF9fcHl4X3Zfc2tpcF9yZW5kZXJp bmcpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjkKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDcxCisgICogCisgICogICAgIEBfZXJy b3JzCisgICogICAgIGRlZiByZW5kZXIoc2VsZiwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTE4NDAyLDI5ICsxODQwMiwyOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTJyZW5kZXIoc3RydWN0CisgICBp bnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgicmVu ZGVyIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3OQor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODEKKyAgKiAgICAgICAgICAg ICBtcHZfb3BlbmdsX2ZibyBmYm8KKyAgKiAKKyAgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQ YXJhbXMoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogICAgICAgICBp ZiBvcGVuZ2xfZmJvOgorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE5v QXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRl clBhcmFtcykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDc5LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygo KFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJh bXMpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA4MSwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fcHl4X3ZfcGFyYW1z ID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z ICopX19weXhfdF8xKTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA4MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwODMKKyAgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJhbXMoKQorICAqIAorICAq ICAgICAgICAgaWYgb3BlbmdsX2ZibzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAq ICAgICAgICAgICAgIG1lbXNldCgmZmJvLCAwLCBzaXplb2YoZmJvKSkKKyAgKiAgICAgICAgICAg ICBmYm8uZmJvID0gb3BlbmdsX2Ziby5nZXQoImZibyIsIDApIG9yIDAKKyAgKi8KKy0gIF9fcHl4 X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X29wZW5nbF9mYm8pOyBpZiAodW5s aWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCAxMDgxLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X29wZW5nbF9mYm8p OyBpZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9M MV9lcnJvcikKKyAgIGlmIChfX3B5eF90XzIpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwODIKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwODQKKyAgKiAKKyAgKiAgICAgICAgIGlmIG9wZW5nbF9mYm86CisgICogICAgICAgICAg ICAgbWVtc2V0KCZmYm8sIDAsIHNpemVvZihmYm8pKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtMTg0MzMsMjMgKzE4NDMzLDIzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKKyAg Ki8KKyAgICAgKHZvaWQpKG1lbXNldCgoJl9fcHl4X3ZfZmJvKSwgMCwgKHNpemVvZihfX3B5eF92 X2ZibykpKSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDgz CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg1CisgICogICAgICAg ICBpZiBvcGVuZ2xfZmJvOgorICAqICAgICAgICAgICAgIG1lbXNldCgmZmJvLCAwLCBzaXplb2Yo ZmJvKSkKKyAgKiAgICAgICAgICAgICBmYm8uZmJvID0gb3BlbmdsX2Ziby5nZXQoImZibyIsIDAp IG9yIDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIGZiby53 ID0gb3BlbmdsX2Zib1sidyJdCisgICogICAgICAgICAgICAgZmJvLmggPSBvcGVuZ2xfZmJvWyJo Il0KKyAgKi8KKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5 eF92X29wZW5nbF9mYm8sIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xID0gX19Q eXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X29wZW5nbF9mYm8sIF9fcHl4X25fc19nZXQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDg1LCBfX3B5eF9MMV9l cnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4X3RfNCA9IF9f UHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8xLCBfX3B5eF90dXBsZV9fMTIsIE5VTEwpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikK KysgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzEsIF9fcHl4X3R1 cGxlX18xMiwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEw ODUsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3RfMiA9 IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoX19weXhfdF8y IDwgMCkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8y ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNCk7IGlmICh1bmxpa2VseShfX3B5eF90 XzIgPCAwKSkgX19QWVhfRVJSKDAsIDEwODUsIF9fcHl4X0wxX2Vycm9yKQorICAgICBpZiAoIV9f cHl4X3RfMikgeworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAw OworICAgICB9IGVsc2UgeworLSAgICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0FzX2ludChf X3B5eF90XzQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNSA9PSAoaW50KS0xKSAmJiBQeUVycl9P Y2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9f cHl4X3RfNSA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoKF9f cHl4X3RfNSA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEw ODUsIF9fcHl4X0wxX2Vycm9yKQorICAgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNTsKKyAgICAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgICAgICBnb3RvIF9f cHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKK0BAIC0xODQ1OCw0OSArMTg0NTgsNDkgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0 XzEycmVuZGVyKHN0cnVjdAorICAgICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OworICAgICBf X3B5eF92X2Ziby5mYm8gPSBfX3B5eF90XzM7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDg0CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDg2CisgICogICAgICAgICAgICAgbWVtc2V0KCZmYm8sIDAsIHNpemVvZihmYm8pKQorICAq ICAgICAgICAgICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJvLmdldCgiZmJvIiwgMCkgb3IgMAorICAq ICAgICAgICAgICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBmYm8uaCA9IG9wZW5nbF9mYm9bImgiXQorICAqICAg ICAgICAgICAgIGZiby5pbnRlcm5hbF9mb3JtYXQgPSBvcGVuZ2xfZmJvLmdldCgiaW50ZXJuYWxf Zm9ybWF0IiwgMCkgb3IgMAorICAqLworLSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9E aWN0X0dldEl0ZW0oX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF9uX3Nfdyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwODQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9EaWN0X0dldEl0ZW0oX19weXhfdl9vcGVuZ2xfZmJv LCBfX3B5eF9uX3Nfdyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEw ODYsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAg X19weXhfdF8zID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfNCk7IGlmICh1bmxpa2VseSgo X19weXhfdF8zID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwg MTA4NCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FzX2lu dChfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoaW50KS0xKSAmJiBQeUVy cl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwODYsIF9fcHl4X0wxX2Vycm9yKQorICAgICBf X1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgICAgX19weXhfdl9mYm8u dyA9IF9fcHl4X3RfMzsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwODUKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODcKKyAgKiAg ICAgICAgICAgICBmYm8uZmJvID0gb3BlbmdsX2Ziby5nZXQoImZibyIsIDApIG9yIDAKKyAgKiAg ICAgICAgICAgICBmYm8udyA9IG9wZW5nbF9mYm9bInciXQorICAqICAgICAgICAgICAgIGZiby5o ID0gb3BlbmdsX2Zib1siaCJdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAg ICAgICAgICBmYm8uaW50ZXJuYWxfZm9ybWF0ID0gb3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zv cm1hdCIsIDApIG9yIDAKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5E RVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZibykKKyAgKi8KKy0gICAgX19weXhfdF80ID0gX19QeXhf UHlPYmplY3RfRGljdF9HZXRJdGVtKF9fcHl4X3Zfb3BlbmdsX2ZibywgX19weXhfbl9zX2gpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDg1LCBfX3B5eF9MMV9lcnJv cikKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfRGljdF9HZXRJdGVtKF9fcHl4X3Zf b3BlbmdsX2ZibywgX19weXhfbl9zX2gpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCAxMDg3LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NCk7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzQpOyBpZiAo dW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19Q WVhfRVJSKDAsIDEwODUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzMgPSBfX1B5eF9Q eUludF9Bc19pbnQoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGludCkt MSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDg3LCBfX3B5eF9MMV9lcnJv cikKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgICAgIF9f cHl4X3ZfZmJvLmggPSBfX3B5eF90XzM7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDg2CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDg4CisgICogICAgICAgICAgICAgZmJvLncgPSBvcGVuZ2xfZmJvWyJ3Il0KKyAgKiAgICAgICAg ICAgICBmYm8uaCA9IG9wZW5nbF9mYm9bImgiXQorICAqICAgICAgICAgICAgIGZiby5pbnRlcm5h bF9mb3JtYXQgPSBvcGVuZ2xfZmJvLmdldCgiaW50ZXJuYWxfZm9ybWF0IiwgMCkgb3IgMCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lk cChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCisgICogICAgICAgICBpZiBmbGlw X3k6CisgICovCistICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19w eXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNCA9IF9f UHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF9uX3NfZ2V0 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTA4OCwgX19weXhfTDFf ZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgICBfX3B5eF90XzEgPSBf X1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfNCwgX19weXhfdHVwbGVfXzEzLCBOVUxMKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3Ip CisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF80LCBfX3B5eF90 dXBsZV9fMTMsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAx MDg4LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBfX3B5eF90XzIg PSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3Rf MiA8IDApKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhf dF8yIDwgMCkpIF9fUFlYX0VSUigwLCAxMDg4LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgaWYgKCFf X3B5eF90XzIpIHsKKyAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKyAgICAgfSBlbHNlIHsKKy0gICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeUludF9Bc19pbnQo X19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzUgPT0gKGludCktMSkgJiYgUHlFcnJf T2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDg2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBf X3B5eF90XzUgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChf X3B5eF90XzUgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAx MDg4LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgICBfX3B5eF90XzMgPSBfX3B5eF90XzU7CisgICAg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICAgICAgZ290byBf X3B5eF9MNl9ib29sX2Jpbm9wX2RvbmU7CitAQCAtMTg1MDksMTggKzE4NTA5LDE4IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF8xMnJlbmRlcihzdHJ1Y3QKKyAgICAgX19weXhfTDZfYm9vbF9iaW5vcF9kb25lOjsKKyAgICAg X19weXhfdl9mYm8uaW50ZXJuYWxfZm9ybWF0ID0gX19weXhfdF8zOworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4NworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTA4OQorICAqICAgICAgICAgICAgIGZiby5oID0gb3BlbmdsX2Zib1si aCJdCisgICogICAgICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8uZ2V0 KCJpbnRlcm5hbF9mb3JtYXQiLCAwKSBvciAwCisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF92 b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGlmIGZsaXBfeToKKyAgKiAgICAgICAgICAgICBwYXJh bXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKKyAgKi8KKy0gICAgX19weXhf dF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1Jl bmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4 X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICgmX19weXhfdl9mYm8pLCBO VUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA4NywgX19weXhf TDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19weXhf dnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xf RkJPLCAoJl9fcHl4X3ZfZmJvKSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDEwODksIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDgxCisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDgzCisgICogICAgICAgICBwYXJhbXMgPSBfUmVu ZGVyUGFyYW1zKCkKKyAgKiAKKyAgKiAgICAgICAgIGlmIG9wZW5nbF9mYm86ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODUyOSwyOCArMTg1MjksMjggQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEycmVu ZGVyKHN0cnVjdAorICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwODgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkwCisg ICogICAgICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8uZ2V0KCJpbnRl cm5hbF9mb3JtYXQiLCAwKSBvciAwCisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChN UFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCisgICogICAgICAgICBpZiBmbGlwX3k6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRk X2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKKyAgKiAgICAgICAgIGlmIGRlcHRoIGlz IG5vdCBOb25lOgorICAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9f cHl4X3ZfZmxpcF95KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwg MTA4OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1Ry dWUoX19weXhfdl9mbGlwX3kpOyBpZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VS UigwLCAxMDkwLCBfX3B5eF9MMV9lcnJvcikKKyAgIGlmIChfX3B5eF90XzIpIHsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODkKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTEKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3Zv aWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZibykKKyAgKiAgICAgICAgIGlmIGZs aXBfeToKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZM SVBfWSwgMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgaWYgZGVw dGggaXMgbm90IE5vbmU6CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRF Ul9QQVJBTV9ERVBUSCwgZGVwdGgpCisgICovCistICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9f cHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5 eF92X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5E RVJfUEFSQU1fRkxJUF9ZLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgMTA4OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4 X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92 X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJf UEFSQU1fRkxJUF9ZLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MTA5MSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODgKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwOTAKKyAgKiAgICAgICAgICAgICBmYm8uaW50ZXJuYWxfZm9ybWF0 ID0gb3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIsIDApIG9yIDAKKyAgKiAgICAgICAg ICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZibykK KyAgKiAgICAgICAgIGlmIGZsaXBfeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTE4NTU5LDcgKzE4NTU5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEycmVuZGVyKHN0cnVjdAorICAqLworICAgfQor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTAKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkyCisgICogICAgICAgICBpZiBmbGlwX3k6Cisg ICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9GTElQX1ksIDEp CisgICogICAgICAgICBpZiBkZXB0aCBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTE4NTcwLDE5ICsxODU3MCwxOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTJyZW5kZXIoc3RydWN0 CisgICBfX3B5eF90XzYgPSAoX19weXhfdF8yICE9IDApOworICAgaWYgKF9fcHl4X3RfNikgewor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5MQorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5MworICAqICAgICAgICAgICAgIHBhcmFt cy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fRkxJUF9ZLCAxKQorICAqICAgICAgICAgaWYgZGVw dGggaXMgbm90IE5vbmU6CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRF Ul9QQVJBTV9ERVBUSCwgZGVwdGgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgICAgIGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0X3RpbWU6CisgICogICAgICAgICAgICAgcGFy YW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCisg ICovCistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF92X2RlcHRoKTsg aWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkp IF9fUFlYX0VSUigwLCAxMDkxLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19weXhfdF8xID0gKChz dHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFt cyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywg TVBWX1JFTkRFUl9QQVJBTV9ERVBUSCwgX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMTA5MSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9 IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF92X2RlcHRoKTsgaWYgKHVubGlrZWx5KChfX3B5eF90 XzMgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDkzLCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVj dF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5f X3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9ERVBU SCwgX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA5 MywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwOTIKKyAgKiAgICAgICAgIGlmIGZsaXBfeToKKyAgKiAgICAgICAgICAg ICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKKyAgKiAgICAgICAg IGlmIGRlcHRoIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MTg1OTEsMjkgKzE4NTkxLDI5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKKyAgKi8KKyAgIH0K KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkyCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NAorICAqICAgICAgICAgaWYgZGVwdGggaXMg bm90IE5vbmU6CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJB TV9ERVBUSCwgZGVwdGgpCisgICogICAgICAgICBpZiBub3QgYmxvY2tfZm9yX3RhcmdldF90aW1l OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgcGFyYW1zLmFk ZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCisgICogICAg ICAgICBpZiBza2lwX3JlbmRlcmluZzoKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2Jq ZWN0X0lzVHJ1ZShfX3B5eF92X2Jsb2NrX2Zvcl90YXJnZXRfdGltZSk7IGlmICh1bmxpa2VseShf X3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDEwOTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfYmxvY2tfZm9yX3RhcmdldF90 aW1lKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgMTA5NCwgX19w eXhfTDFfZXJyb3IpCisgICBfX3B5eF90XzIgPSAoKCFfX3B5eF90XzYpICE9IDApOworICAgaWYg KF9fcHl4X3RfMikgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA5MworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NQorICAqICAg ICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIGRlcHRoKQor ICAqICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90YXJnZXRfdGltZToKKyAgKiAgICAgICAgICAg ICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0JMT0NLX0ZPUl9UQVJHRVRfVElNRSwg MCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgaWYgc2tpcF9yZW5k ZXJpbmc6CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9T S0lQX1JFTkRFUklORywgMSkKKyAgKi8KKy0gICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhf dnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3Zf cGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9Q QVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxMDkzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xID0gKChz dHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFt cyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywg TVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDk1LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5 MgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NAorICAqICAgICAg ICAgaWYgZGVwdGggaXMgbm90IE5vbmU6CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQo TVBWX1JFTkRFUl9QQVJBTV9ERVBUSCwgZGVwdGgpCisgICogICAgICAgICBpZiBub3QgYmxvY2tf Zm9yX3RhcmdldF90aW1lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTg2MjIs MjggKzE4NjIyLDI4IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKKyAgKi8KKyAgIH0KKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDk0CisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NgorICAqICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90 YXJnZXRfdGltZToKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BB UkFNX0JMT0NLX0ZPUl9UQVJHRVRfVElNRSwgMCkKKyAgKiAgICAgICAgIGlmIHNraXBfcmVuZGVy aW5nOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgcGFyYW1z LmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkKKyAgKiAKKyAgKi8K Ky0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X3NraXBfcmVuZGVy aW5nKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgMTA5NCwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhf dl9za2lwX3JlbmRlcmluZyk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJS KDAsIDEwOTYsIF9fcHl4X0wxX2Vycm9yKQorICAgaWYgKF9fcHl4X3RfMikgeworIAorLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NQorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NworICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50 KE1QVl9SRU5ERVJfUEFSQU1fQkxPQ0tfRk9SX1RBUkdFVF9USU1FLCAwKQorICAqICAgICAgICAg aWYgc2tpcF9yZW5kZXJpbmc6CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JF TkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqIAorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gICAgX19weXhfdF8xID0g KChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBh cmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFt cywgTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwOTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90 XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVu ZGVyUGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4X3Zf cGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX1NLSVBfUkVOREVSSU5HLCAxKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA5NywgX19weXhfTDFfZXJyb3IpCisgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEw OTQKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTYKKyAgKiAgICAg ICAgIGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0X3RpbWU6CisgICogICAgICAgICAgICAgcGFyYW1z LmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCisgICog ICAgICAgICBpZiBza2lwX3JlbmRlcmluZzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTE4NjUyLDcgKzE4NjUyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEycmVuZGVyKHN0cnVjdAorICAqLworICAg fQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTcKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDk5CisgICogICAgICAgICAgICAgcGFyYW1z LmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkKKyAgKiAKKyAgKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODY2 Nyw3ICsxODY2Nyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKKyAgICAgICAjZW5kaWYKKyAg ICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTA5OAorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx MDAKKyAgKiAKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgcmV0ID0g bXB2X3JlbmRlcl9jb250ZXh0X3JlbmRlcihzZWxmLl9jdHgsIHBhcmFtcy5wYXJhbXMpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODY3Nyw3ICsxODY3Nyw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8x MnJlbmRlcihzdHJ1Y3QKKyAgICAgICAgIF9fcHl4X3ZfcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0 X3JlbmRlcihfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW1zLT5wYXJhbXMpOworICAg ICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5Nwor KyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDk5CisgICogICAgICAg ICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkK KyAgKiAKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xODY5Niw3ICsxODY5Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKKyAgICAg ICB9CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5OQor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDEKKyAgKiAgICAgICAgIHdp dGggbm9naWw6CisgICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3JlbmRl cihzZWxmLl9jdHgsIHBhcmFtcy5wYXJhbXMpCisgICogICAgICAgICByZXR1cm4gcmV0ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODcwNCwxMyArMTg3MDQsMTMgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0 XzEycmVuZGVyKHN0cnVjdAorICAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6CisgICovCisg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJv bV9pbnQoX19weXhfdl9yZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCAxMDk5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21f aW50KF9fcHl4X3ZfcmV0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MTEwMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9f cHl4X3IgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworICAgZ290byBfX3B5eF9MMDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY5CisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MQorICAqIAorICAqICAgICBAX2Vycm9ycwor ICAqICAgICBkZWYgcmVuZGVyKHNlbGYsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xODczMSw3ICsxODczMSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKKyAgIHJldHVybiBf X3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwMQor Ky8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTAzCisgICogICAgICAgICByZXR1 cm4gcmV0CisgICogCisgICogICAgIGRlZiByZXBvcnRfc3dhcChzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4NzU3LDcgKzE4NzU3LDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE0cmVwb3J0 X3N3YXAoc3QKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgicmVwb3J0X3N3YXAiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTAyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTEwNAorICAqIAorICAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6CisgICogICAgICAg ICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTg3NzIsNyAr MTg3NzIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfMTRyZXBvcnRfc3dhcChzdAorICAgICAgICNlbmRpZgorICAgICAg IC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMTAzCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwNQor ICAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6CisgICogICAgICAgICB3aXRoIG5vZ2lsOgor ICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9yZXBvcnRfc3dhcChzZWxmLl9jdHgp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODc4Miw3ICsxODc4Miw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29u dGV4dF8xNHJlcG9ydF9zd2FwKHN0CisgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfcmVwb3J0 X3N3YXAoX19weXhfdl9zZWxmLT5fY3R4KTsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDIKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTEwNAorICAqIAorICAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6 CisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMTg4MDEsNyArMTg4MDEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTRyZXBvcnRfc3dhcChzdAorICAgICAgIH0K KyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTAxCisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwMworICAqICAgICAgICAgcmV0dXJu IHJldAorICAqIAorICAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xODgxNiw3ICsxODgxNiw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNHJlcG9ydF9z d2FwKHN0CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExMDUKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEw NworICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9yZXBvcnRfc3dhcChzZWxmLl9j dHgpCisgICogCisgICogICAgIGRlZiBmcmVlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTg4NDMsNyArMTg4NDMsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTZmcmVlKHN0cnVjdCBfXwor ICAgaW50IF9fcHl4X3RfMTsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJmcmVlIiwg MCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwNgorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDgKKyAgKiAKKyAgKiAgICAgZGVmIGZy ZWUoc2VsZik6CisgICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xODg1Myw3ICsxODg1Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZyZWUoc3Ry dWN0IF9fCisgICBfX3B5eF90XzEgPSAoKCEoX19weXhfdl9zZWxmLT5pbml0ZWQgIT0gMCkpICE9 IDApOworICAgaWYgKF9fcHl4X3RfMSkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTEwNworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTEwOQorICAqICAgICBkZWYgZnJlZShzZWxmKToKKyAgKiAgICAgICAgIGlmIG5vdCBzZWxmLmlu aXRlZDoKKyAgKiAgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTE4ODY0LDcgKzE4ODY0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE2ZnJlZShzdHJ1Y3QgX18KKyAgICAg X19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgZ290byBfX3B5 eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDYKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDgKKyAgKiAKKyAgKiAgICAg ZGVmIGZyZWUoc2VsZik6CisgICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODg3Myw3ICsxODg3Myw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZy ZWUoc3RydWN0IF9fCisgICovCisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEwOAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTAK KyAgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKyAgKiAgICAgICAgICAgICByZXR1cm4K KyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xODg4OCw3ICsxODg4OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZyZWUoc3RydWN0IF9fCisgICAgICAgI2Vu ZGlmCisgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExMDkKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTExCisgICogICAgICAgICAgICAgcmV0dXJuCisgICogICAgICAgICB3aXRoIG5vZ2ls OgorICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0eCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4ODk4LDcgKzE4ODk4LDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0 XzE2ZnJlZShzdHJ1Y3QgX18KKyAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKF9fcHl4 X3Zfc2VsZi0+X2N0eCk7CisgICAgICAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTA4CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExMTAKKyAgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKyAgKiAgICAgICAgICAg ICByZXR1cm4KKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0xODkxNyw3ICsxODkxNyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZyZWUoc3RydWN0IF9fCisg ICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx MTAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTEyCisgICogICAgICAg ICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNl bGYuX2N0eCkKKyAgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTE4OTI2LDcgKzE4OTI2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE2ZnJlZShzdHJ1 Y3QgX18KKyAgKi8KKyAgIF9fcHl4X3Zfc2VsZi0+aW5pdGVkID0gMDsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTA1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTEwNworICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9yZXBv cnRfc3dhcChzZWxmLl9jdHgpCisgICogCisgICogICAgIGRlZiBmcmVlKHNlbGYpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTg5NDIsNyArMTg5NDIsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTZm cmVlKHN0cnVjdCBfXworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTEyCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExMTQKKyAgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKKyAgKiAKKyAgKiAgICAg ZGVmIGNsb3NlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTg5Njks NyArMTg5NjksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgXworICAgaW50IF9fcHl4X3RfMTsK KyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjbG9zZSIsIDApOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTE1CisgICogCisgICogICAgIGRlZiBjbG9zZShzZWxmKToKKyAgKiAg ICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTE4OTc5LDcgKzE4OTc5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE4Y2xvc2Uoc3RydWN0IF8KKyAgIF9fcHl4 X3RfMSA9ICgoIShfX3B5eF92X3NlbGYtPmluaXRlZCAhPSAwKSkgIT0gMCk7CisgICBpZiAoX19w eXhfdF8xKSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE0 CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE2CisgICogICAgIGRl ZiBjbG9zZShzZWxmKToKKyAgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKyAgKiAgICAg ICAgICAgICByZXR1cm4gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4OTkwLDcg KzE4OTkwLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNSZW5kZXJDb250ZXh0XzE4Y2xvc2Uoc3RydWN0IF8KKyAgICAgX19weXhfciA9IFB5X05v bmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTMKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMTUKKyAgKiAKKyAgKiAgICAgZGVmIGNsb3NlKHNlbGYp OgorICAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTg5OTksNyArMTg5OTksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgXwor ICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTUK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE3CisgICogICAgICAgICBp ZiBub3Qgc2VsZi5pbml0ZWQ6CisgICogICAgICAgICAgICAgcmV0dXJuCisgICogICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTkwMTQsNyArMTkw MTQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgXworICAgICAgICNlbmRpZgorICAgICAgIC8q dHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTE2CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExOAorICAq ICAgICAgICAgICAgIHJldHVybgorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAg ICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC0xOTAyNCw3ICsxOTAyNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xOGNsb3NlKHN0cnVj dCBfCisgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShfX3B5eF92X3NlbGYtPl9jdHgp OworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTExNQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE3CisgICog ICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6CisgICogICAgICAgICAgICAgcmV0dXJuCisgICog ICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTkw NDMsNyArMTkwNDMsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM1JlbmRlckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgXworICAgICAgIH0KKyAgIH0K KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE3CisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExOQorICAqICAgICAgICAgd2l0aCBub2dpbDoK KyAgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCisgICog ICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK K0BAIC0xOTA1Miw3ICsxOTA1Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xOGNsb3NlKHN0cnVjdCBfCisgICovCisg ICBfX3B5eF92X3NlbGYtPmluaXRlZCA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTExMgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx MTQKKyAgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKKyAgKiAKKyAgKiAgICAgZGVmIGNs b3NlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTkwNjgsNyArMTkw NjgsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgXworICAgcmV0dXJuIF9fcHl4X3I7CisgfQor IAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE5CisrLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMjEKKyAgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFs c2UKKyAgKiAKKyAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtMTkwOTcsMTQgKzE5MDk3LDE0IEBAIHN0YXRpYyB2b2lkIF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjBfX2RlYWxsb2NfXyhz dHJ1Y3QKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfX2RlYWxsb2NfXyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExMjAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTIy CisgICogCisgICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKKyAgKiAgICAgICAgIHNlbGYu Y2xvc2UoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogY2RlZiBjbGFz cyBPcGVuR0xSZW5kZXJDb250ZXh0KFJlbmRlckNvbnRleHQpOgorICAqLworLSAgX19weXhfdF8y ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwg X19weXhfbl9zX2Nsb3NlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MTEyMCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfY2xvc2UpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTIyLCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgX19weXhfdF8zID0gTlVMTDsKKyAgIGlm IChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3Rf MikpKSB7CitAQCAtMTkxMTgsMTIgKzE5MTE4LDEyIEBAIHN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjBfX2RlYWxsb2NfXyhzdHJ1Y3QK KyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19w eXhfdF8yKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0g IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMjAsIF9fcHl4X0wxX2Vy cm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEyMiwgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTExOQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMjEKKyAgKiAgICAg ICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKKyAgKiAKKyAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNl bGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTkyNTUsNyArMTkyNTUsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfMjRfX3NldHN0YXRlX2N5dAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTIzCisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExMjUKKyAgKiAKKyAgKiBjZGVmIGNsYXNzIE9wZW5HTFJlbmRlckNv bnRleHQoUmVuZGVyQ29udGV4dCk6CisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtcHYsICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xOTMxMiwxMiArMTkzMTIsMTIgQEAgc3Rh dGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250 ZXh0XzFfX2luaXRfXyhQeU9iamUKKyAgICAgICAgIGNhc2UgIDE6CisgICAgICAgICBpZiAobGlr ZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5 eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcykpICE9IDApKSBrd19hcmdzLS07CisgICAgICAgICBlbHNl IHsKKy0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwg MiwgMiwgMSk7IF9fUFlYX0VSUigwLCAxMTIzLCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgICAg X19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwgMiwgMiwgMSk7IF9fUFlY X0VSUigwLCAxMTI1LCBfX3B5eF9MM19lcnJvcikKKyAgICAgICAgIH0KKyAgICAgICB9CisgICAg ICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworICAgICAgICAgY29uc3QgUHlfc3NpemVf dCB1c2VkX3Bvc19hcmdzID0gKHBvc19hcmdzIDwgMikgPyBwb3NfYXJncyA6IDI7CistICAgICAg ICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9f cHl4X3B5YXJnbmFtZXMsIF9fcHl4X3Zfa3dhcmdzLCB2YWx1ZXMsIHVzZWRfcG9zX2FyZ3MsICJf X2luaXRfXyIpIDwgMCkpIF9fUFlYX0VSUigwLCAxMTIzLCBfX3B5eF9MM19lcnJvcikKKysgICAg ICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywg X19weXhfcHlhcmduYW1lcywgX19weXhfdl9rd2FyZ3MsIHZhbHVlcywgdXNlZF9wb3NfYXJncywg Il9faW5pdF9fIikgPCAwKSkgX19QWVhfRVJSKDAsIDExMjUsIF9fcHl4X0wzX2Vycm9yKQorICAg ICAgIH0KKyAgICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpIDwgMikg eworICAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CitAQCAtMTkzMzAsNyArMTkz MzAsNyBAQCBzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5H TFJlbmRlckNvbnRleHRfMV9faW5pdF9fKFB5T2JqZQorICAgfQorICAgZ290byBfX3B5eF9MNF9h cmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKyAgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKy0g IF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDAsIDIsIDIsIFB5VHVwbGVf R0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMTEyMywgX19weXhfTDNfZXJyb3Ip CisrICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAwLCAyLCAyLCBQeVR1 cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDExMjUsIF9fcHl4X0wzX2Vy cm9yKQorICAgX19weXhfTDNfZXJyb3I6OworICAgX19QeXhfREVDUkVGKF9fcHl4X3ZfYXJncyk7 IF9fcHl4X3ZfYXJncyA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdl9rd2FyZ3MpOyBfX3B5 eF92X2t3YXJncyA9IDA7CitAQCAtMTkzNjAsMzkgKzE5MzYwLDM5IEBAIHN0YXRpYyBpbnQgX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF9fX2luaXRf XyhzdHJ1Y3QKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfX2luaXRfXyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExMjcKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTI5 CisgICogICAgICAgICAgICAgICAgICAqYXJncywgKiprd2FyZ3MpOgorICAqICAgICAgICAgaW5p dF9wYXJhbXMgPSB7CisgICogICAgICAgICAgICAgImdldF9wcm9jX2FkZHJlc3MiOiBnZXRfcHJv Y19hZGRyZXNzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIH0KKyAg KiAgICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0X18oc2VsZiwgbXB2LCBSZW5kZXJDb250ZXh0 LkFQSV9PUEVOR0wsCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeURpY3RfTmV3UHJlc2l6 ZWQoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMjcsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlEaWN0X05ld1ByZXNpemVkKDEpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTI5LCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9f cHl4X3RfMSwgX19weXhfbl9zX2dldF9wcm9jX2FkZHJlc3MsIF9fcHl4X3ZfZ2V0X3Byb2NfYWRk cmVzcykgPCAwKSBfX1BZWF9FUlIoMCwgMTEyNywgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlE aWN0X1NldEl0ZW0oX19weXhfdF8xLCBfX3B5eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcywgX19weXhf dl9nZXRfcHJvY19hZGRyZXNzKSA8IDApIF9fUFlYX0VSUigwLCAxMTI5LCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fcHl4X3ZfaW5pdF9wYXJhbXMgPSAoKFB5T2JqZWN0KilfX3B5eF90XzEpOworICAg X19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTI5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMQorICAqICAgICAg ICAgICAgICJnZXRfcHJvY19hZGRyZXNzIjogZ2V0X3Byb2NfYWRkcmVzcworICAqICAgICAgICAg fQorICAqICAgICAgICAgUmVuZGVyQ29udGV4dC5fX2luaXRfXyhzZWxmLCBtcHYsIFJlbmRlckNv bnRleHQuQVBJX09QRU5HTCwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BhcmFtcywgKmFyZ3MsICoqa3dhcmdzKQor ICAqIAorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5 T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQp LCBfX3B5eF9uX3NfaW5pdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDExMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Jl bmRlckNvbnRleHQpLCBfX3B5eF9uX3NfaW5pdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDExMzEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmpl Y3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCksIF9f cHl4X25fc19BUElfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgMTEyOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9H ZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyQ29udGV4dCksIF9fcHl4X25fc19BUElfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgMTEzMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTMwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMgorICAqICAgICAg ICAgfQorICAqICAgICAgICAgUmVuZGVyQ29udGV4dC5fX2luaXRfXyhzZWxmLCBtcHYsIFJlbmRl ckNvbnRleHQuQVBJX09QRU5HTCwKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5pdF9wYXJhbXMsICphcmdzLCAqKmt3YXJncykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqIAorICAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6CisgICovCistICBfX3B5 eF90XzMgPSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgMTEyOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBQeVR1cGxlX05ldyg0 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTEzMSwgX19weXhfTDFf ZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgIF9fUHl4X0lOQ1JFRigoKFB5 T2JqZWN0ICopX19weXhfdl9zZWxmKSk7CisgICBfX1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKilf X3B5eF92X3NlbGYpKTsKK0BAIC0xOTQwNyw0MiArMTk0MDcsNDIgQEAgc3RhdGljIGludCBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0X19faW5pdF9f KHN0cnVjdAorICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDMsIF9fcHl4X3ZfaW5pdF9w YXJhbXMpOworICAgX19weXhfdF8yID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTI5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEz MQorICAqICAgICAgICAgICAgICJnZXRfcHJvY19hZGRyZXNzIjogZ2V0X3Byb2NfYWRkcmVzcwor ICAqICAgICAgICAgfQorICAqICAgICAgICAgUmVuZGVyQ29udGV4dC5fX2luaXRfXyhzZWxmLCBt cHYsIFJlbmRlckNvbnRleHQuQVBJX09QRU5HTCwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BhcmFtcywgKmFyZ3Ms ICoqa3dhcmdzKQorICAqIAorICAqLworLSAgX19weXhfdF8yID0gUHlOdW1iZXJfQWRkKF9fcHl4 X3RfMywgX19weXhfdl9hcmdzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgMTEyOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBQeU51bWJlcl9BZGQoX19w eXhfdF8zLCBfX3B5eF92X2FyZ3MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VS UigwLCAxMTMxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwor ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExMzIKKyAgKiAgICAgICAgIH0KKyAgKiAgICAgICAgIFJlbmRlckNvbnRl eHQuX19pbml0X18oc2VsZiwgbXB2LCBSZW5kZXJDb250ZXh0LkFQSV9PUEVOR0wsCisgICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfcGFyYW1zLCAqYXJncywgKiprd2FyZ3Mp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKyAgKiBjbGFzcyBDYWxsYmFja1Ro cmVhZChUaHJlYWQpOgorICAqLworLSAgX19weXhfdF8zID0gUHlEaWN0X0NvcHkoX19weXhfdl9r d2FyZ3MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTMwLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9IFB5RGljdF9Db3B5KF9fcHl4X3Zfa3dhcmdzKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTI5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTEzMQorICAqICAgICAgICAgICAgICJnZXRfcHJvY19hZGRyZXNzIjogZ2V0X3Byb2NfYWRk cmVzcworICAqICAgICAgICAgfQorICAqICAgICAgICAgUmVuZGVyQ29udGV4dC5fX2luaXRfXyhz ZWxmLCBtcHYsIFJlbmRlckNvbnRleHQuQVBJX09QRU5HTCwgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BhcmFtcywg KmFyZ3MsICoqa3dhcmdzKQorICAqIAorICAqLworLSAgX19weXhfdF80ID0gX19QeXhfUHlPYmpl Y3RfQ2FsbChfX3B5eF90XzEsIF9fcHl4X3RfMiwgX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTEyOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90 XzQgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMTMxLCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhf dF8yID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEyMworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExMjUKKyAgKiAKKyAgKiBjZGVmIGNsYXNzIE9wZW5HTFJlbmRlckNvbnRleHQo UmVuZGVyQ29udGV4dCk6CisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtcHYsICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xOTU3OSw3ICsxOTU3OSw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4 dF80X19zZXRzdGF0CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExMzMKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTEzNQorICAqIAorICAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6CisgICogICAg IGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE5 NjEyLDE2ICsxOTYxMiwxNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkX19faW5pdF9fKENZVEhPTgorICAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fIiwg MCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzNAorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzYKKyAgKiBjbGFzcyBDYWxsYmFja1Ro cmVhZChUaHJlYWQpOgorICAqICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICogICAgICAgICBU aHJlYWQuX19pbml0X18oc2VsZikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAg ICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCisgICogICAgICAgICBzZWxmLmxvY2sgPSBTZW1hcGhv cmUoKQorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4 X25fc19UaHJlYWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTM0 LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8y LCBfX3B5eF9uX3NfVGhyZWFkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgMTEzNiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0g IF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF8yLCBfX3B5eF9u X3NfaW5pdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDExMzQsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF90XzIsIF9fcHl4X25fc19pbml0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZ WF9FUlIoMCwgMTEzNiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8z KTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19weXhf dF8yID0gTlVMTDsKK0BAIC0xOTYzNiwyOCArMTk2MzYsMjggQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF9fX2luaXRfXyhD WVRIT04KKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzIpID8gX19QeXhfUHlPYmplY3Rf Q2FsbDJBcmdzKF9fcHl4X3RfMywgX19weXhfdF8yLCBfX3B5eF92X3NlbGYpIDogX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzMsIF9fcHl4X3Zfc2VsZik7CisgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAxMTM0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMzYsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8z ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzUKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTM3CisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAg KiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQorICAqICAgICAgICAgc2VsZi5kYWVtb24g PSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNlbGYubG9j ayA9IFNlbWFwaG9yZSgpCisgICogICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQorICAq LworLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9u X3NfZGFlbW9uLCBQeV9UcnVlKSA8IDApIF9fUFlYX0VSUigwLCAxMTM1LCBfX3B5eF9MMV9lcnJv cikKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhf bl9zX2RhZW1vbiwgUHlfVHJ1ZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTEzNywgX19weXhfTDFfZXJy b3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzNgorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzgKKyAgKiAgICAgICAgIFRocmVhZC5f X2luaXRfXyhzZWxmKQorICAqICAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCisgICogICAgICAg ICBzZWxmLmxvY2sgPSBTZW1hcGhvcmUoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisg ICogICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQorICAqICAgICAgICAgc2VsZi5jYWxs YmFjayA9IE5vbmUKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8z LCBfX3B5eF9uX3NfU2VtYXBob3JlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgMTEzNiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1l KF9fcHl4X3RfMywgX19weXhfbl9zX1NlbWFwaG9yZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8z KSkgX19QWVhfRVJSKDAsIDExMzgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMyk7CisgICBfX3B5eF90XzIgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzMpKSkgeworQEAgLTE5Njcx LDIyICsxOTY3MSwyMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNENhbGxiYWNrVGhyZWFkX19faW5pdF9fKENZVEhPTgorICAgfQorICAgX19weXhf dF8xID0gKF9fcHl4X3RfMikgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywg X19weXhfdF8yKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzMpOworICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEzNiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTM4LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7CistICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3Nl bGYsIF9fcHl4X25fc19sb2NrLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDExMzYsIF9f cHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9z ZWxmLCBfX3B5eF9uX3NfbG9jaywgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTM4LCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzcKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTM5CisgICogICAgICAgICBzZWxmLmRhZW1v biA9IFRydWUKKyAgKiAgICAgICAgIHNlbGYubG9jayA9IFNlbWFwaG9yZSgpCisgICogICAgICAg ICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisg ICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorICAqICAgICAgICAgc2VsZi5pc3NodXRk b3duID0gRmFsc2UKKyAgKi8KKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfbG9jayk7IGlmICh1bmxpa2VseSghX19weXhfdF8z KSkgX19QWVhfRVJSKDAsIDExMzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8zID0gX19Q eXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTEzOSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2Jq ZWN0X0dldEF0dHJTdHIoX19weXhfdF8zLCBfX3B5eF9uX3NfYWNxdWlyZSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExMzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzMsIF9fcHl4X25fc19h Y3F1aXJlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTEzOSwgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworICAgX19weXhfdF8zID0gTlVMTDsKK0BAIC0x OTcwMSwzMCArMTk3MDEsMzAgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF9fX2luaXRfXyhDWVRIT04KKyAgIH0KKyAgIF9f cHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf MiwgX19weXhfdF8zLCBQeV9UcnVlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhf dF8yLCBQeV9UcnVlKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMzcsIF9fcHl4 X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEz OSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTEzOAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDAKKyAg KiAgICAgICAgIHNlbGYubG9jayA9IFNlbWFwaG9yZSgpCisgICogICAgICAgICBzZWxmLmxvY2su YWNxdWlyZShUcnVlKQorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gRmFsc2UK KyAgKiAKKyAgKi8KKy0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2Vs ZiwgX19weXhfbl9zX2NhbGxiYWNrLCBQeV9Ob25lKSA8IDApIF9fUFlYX0VSUigwLCAxMTM4LCBf X3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zf c2VsZiwgX19weXhfbl9zX2NhbGxiYWNrLCBQeV9Ob25lKSA8IDApIF9fUFlYX0VSUigwLCAxMTQw LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMTM5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQorICAqICAg ICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoVHJ1ZSkKKyAgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sg PSBOb25lCisgICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisgICogCisgICogICAgIGRlZiBzaHV0ZG93bihzZWxmKToKKyAgKi8K Ky0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9z X2lzc2h1dGRvd24sIFB5X0ZhbHNlKSA8IDApIF9fUFlYX0VSUigwLCAxMTM5LCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19w eXhfbl9zX2lzc2h1dGRvd24sIFB5X0ZhbHNlKSA8IDApIF9fUFlYX0VSUigwLCAxMTQxLCBfX3B5 eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTMz CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzNQorICAqIAorICAqIGNs YXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6CisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE5NzQ3LDcgKzE5NzQ3LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1Ro cmVhZF9fX2luaXRfXyhDWVRIT04KKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTQzCisgICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZQorICAq IAorICAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xOTc4MCwzNCArMTk3ODAsMzQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8yc2h1dGRvd24oQ1lUSE8KKyAg IGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJz aHV0ZG93biIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx NDIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ0CisgICogCisgICog ICAgIGRlZiBzaHV0ZG93bihzZWxmKToKKyAgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IFRy dWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jYWxsYmFj ayA9IE5vbmUKKyAgKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKKyAgKi8KKy0gIGlmIChf X1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2lzc2h1dGRv d24sIFB5X1RydWUpIDwgMCkgX19QWVhfRVJSKDAsIDExNDIsIF9fcHl4X0wxX2Vycm9yKQorKyAg aWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfaXNz aHV0ZG93biwgUHlfVHJ1ZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJyb3Ip CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MworKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDUKKyAgKiAgICAgZGVmIHNodXRkb3duKHNl bGYpOgorICAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gVHJ1ZQorICAqICAgICAgICAgc2Vs Zi5jYWxsYmFjayA9IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAg ICAgc2VsZi5sb2NrLnJlbGVhc2UoKQorICAqIAorICAqLworLSAgaWYgKF9fUHl4X1B5T2JqZWN0 X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2ssIFB5X05vbmUpIDwg MCkgX19QWVhfRVJSKDAsIDExNDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1B5T2Jq ZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2ssIFB5X05vbmUp IDwgMCkgX19QWVhfRVJSKDAsIDExNDUsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTQ2CisgICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVlCisgICog ICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorICAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVh c2UoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogICAgIGRlZiBjYWxs KHNlbGYpOgorICAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9Q eU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2xvY2spOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTQ2LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3Rf R2V0QXR0clN0cihfX3B5eF90XzIsIF9fcHl4X25fc19yZWxlYXNlKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90 XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfMiwgX19weXhfbl9zX3JlbGVh c2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTQ2LCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgICBfX3B5eF90XzIgPSBOVUxMOworQEAgLTE5ODIy LDEyICsxOTgyMiwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzJzaHV0ZG93bihDWVRITworICAgfQorICAgX19weXhf dF8xID0gKF9fcHl4X3RfMikgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywg X19weXhfdF8yKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzMpOworICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTQ2LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQxCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MworICAqICAgICAgICAgc2VsZi5pc3NodXRk b3duID0gRmFsc2UKKyAgKiAKKyAgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTk4NTAsNyArMTk4NTAsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzJzaHV0 ZG93bihDWVRITworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTQ2CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExNDgKKyAgKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKKyAgKiAKKyAgKiAgICAgZGVm IGNhbGwoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xOTg4MywxNiAr MTk4ODMsMTYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTRDYWxsYmFja1RocmVhZF80Y2FsbChDWVRIT05fVU4KKyAgIGludCBfX3B5eF9jbGluZW5v ID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjYWxsIiwgMCk7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0NworKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExNDkKKyAgKiAKKyAgKiAgICAgZGVmIGNhbGwoc2VsZik6Cisg ICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAKKyAgKiAgICAgZGVmIHNldChzZWxmLCBjYWxsYmFjayk6CisgICovCistICBfX3B5 eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9z X2xvY2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTQ3LCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19w eXhfdl9zZWxmLCBfX3B5eF9uX3NfbG9jayk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Mik7CistICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfMiwg X19weXhfbl9zX3JlbGVhc2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigw LCAxMTQ3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoX19weXhfdF8yLCBfX3B5eF9uX3NfcmVsZWFzZSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8zKSkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKKyAgIF9fcHl4X3RfMiA9IE5VTEw7CitAQCAtMTk5MDcsMTIgKzE5OTA3LDEyIEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJl YWRfNGNhbGwoQ1lUSE9OX1VOCisgICB9CisgICBfX3B5eF90XzEgPSAoX19weXhfdF8yKSA/IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF90XzIpIDogX19QeXhfUHlP YmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMyk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCAxMTQ3LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExNDYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTQ4CisgICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisgICogCisgICogICAg IGRlZiBjYWxsKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTk5MzUs NyArMTk5MzUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNENhbGxiYWNrVGhyZWFkXzRjYWxsKENZVEhPTl9VTgorICAgcmV0dXJuIF9fcHl4X3I7 CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ5CisrLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTEKKyAgKiAgICAgICAgIHNlbGYubG9jay5y ZWxlYXNlKCkKKyAgKiAKKyAgKiAgICAgZGVmIHNldChzZWxmLCBjYWxsYmFjayk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xOTk3OCwxMSArMTk5NzgsMTEgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF83 c2V0KFB5T2JqZWN0ICoKKyAgICAgICAgIGNhc2UgIDE6CisgICAgICAgICBpZiAobGlrZWx5KCh2 YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nf Y2FsbGJhY2spKSAhPSAwKSkga3dfYXJncy0tOworICAgICAgICAgZWxzZSB7CistICAgICAgICAg IF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJzZXQiLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJS KDAsIDExNDksIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxl SW52YWxpZCgic2V0IiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAxMTUxLCBfX3B5eF9MM19l cnJvcikKKyAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3Mg PiAwKSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3Jk cyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0 IikgPCAwKSkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYg KHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9w eWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0IikgPCAwKSkgX19QWVhfRVJSKDAs IDExNTEsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIH0KKyAgICAgfSBlbHNlIGlmIChQeVR1cGxl X0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9IDIpIHsKKyAgICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1 cGxlX2Vycm9yOworQEAgLTE5OTk1LDcgKzE5OTk1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF83c2V0KFB5T2JqZWN0 ICoKKyAgIH0KKyAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CisgICBf X3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgi c2V0IiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigw LCAxMTQ5LCBfX3B5eF9MM19lcnJvcikKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJz ZXQiLCAxLCAyLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAs IDExNTEsIF9fcHl4X0wzX2Vycm9yKQorICAgX19weXhfTDNfZXJyb3I6OworICAgX19QeXhfQWRk VHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQuc2V0IiwgX19weXhf Y2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKK0BAIC0yMDAxNiwxNiArMjAwMTYsMTYgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF82c2V0 KENZVEhPTl9VTlUKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJzZXQiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTUwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1Mgor ICAqIAorICAqICAgICBkZWYgc2V0KHNlbGYsIGNhbGxiYWNrKToKKyAgKiAgICAgICAgIHNlbGYu Y2FsbGJhY2sgPSBjYWxsYmFjayAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisg ICogICAgIGRlZiBydW4oc2VsZik6CisgICovCistICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0 clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jYWxsYmFjaywgX19weXhfdl9jYWxsYmFjaykg PCAwKSBfX1BZWF9FUlIoMCwgMTE1MCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfUHlP YmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jYWxsYmFjaywgX19weXhf dl9jYWxsYmFjaykgPCAwKSBfX1BZWF9FUlIoMCwgMTE1MiwgX19weXhfTDFfZXJyb3IpCisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0OQorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNTEKKyAgKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNl KCkKKyAgKiAKKyAgKiAgICAgZGVmIHNldChzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0yMDA0NSw3ICsyMDA0NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNnNldChDWVRI T05fVU5VCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExNTIKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1 NAorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisgICogCisgICogICAgIGRl ZiBydW4oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0yMDA4Miw3ICsy MDA4Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzE0Q2FsbGJhY2tUaHJlYWRfOHJ1bihDWVRIT05fVU5VCisgICBpbnQgX19weXhfY2xpbmVubyA9 IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgicnVuIiwgMCk7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1MworKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExNTUKKyAgKiAKKyAgKiAgICAgZGVmIHJ1bihzZWxmKToKKyAgKiAg ICAgICAgIHdoaWxlIG5vdCBzZWxmLmlzc2h1dGRvd246ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0yMDA5MCwyMyArMjAwOTAsMjMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF84cnVuKENZVEhPTl9VTlUK KyAgKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBpZiBzZWxm LmNhbGxiYWNrIGVsc2UgTm9uZQorICAqLworICAgd2hpbGUgKDEpIHsKKy0gICAgX19weXhfdF8x ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19pc3No dXRkb3duKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE1MywgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIo X19weXhfdl9zZWxmLCBfX3B5eF9uX3NfaXNzaHV0ZG93bik7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDExNTUsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKy0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9f cHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDExNTMs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUo X19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgMTE1 NSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworICAgICBfX3B5eF90XzMgPSAoKCFfX3B5eF90XzIpICE9IDApOworICAgICBpZiAo IV9fcHl4X3RfMykgYnJlYWs7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTU0CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU2Cisg ICogICAgIGRlZiBydW4oc2VsZik6CisgICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3NodXRk b3duOgorICAqICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxm LmNhbGxiYWNrKSBpZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9uZQorICAqIAorICAqLworLSAgICBf X3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhf bl9zX2xvY2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMTU0LCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgMTE1NiwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOworLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3RfNCwgX19weXhfbl9zX2FjcXVpcmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9f UFlYX0VSUigwLCAxMTU0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF81ID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzQsIF9fcHl4X25fc19hY3F1aXJlKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMTE1NiwgX19weXhfTDFfZXJyb3IpCisg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKKyAgICAgX19weXhfdF80ID0gTlVMTDsKK0BAIC0yMDEyMSwyNiAr MjAxMjEsMjYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTRDYWxsYmFja1RocmVhZF84cnVuKENZVEhPTl9VTlUKKyAgICAgfQorICAgICBfX3B5eF90 XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzUsIF9f cHl4X3RfNCwgUHlfVHJ1ZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwg UHlfVHJ1ZSk7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsK Ky0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE1NCwgX19weXhf TDFfZXJyb3IpCisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEx NTYsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisgICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTE1NQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTE1NworICAqICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNzaHV0ZG93bjoKKyAgKiAgICAg ICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQorICAqICAgICAgICAgICAgIHNlbGYubXB2 X2NhbGxiYWNrKHNlbGYuY2FsbGJhY2spIGlmIHNlbGYuY2FsbGJhY2sgZWxzZSBOb25lICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKyAgKiAgICAgZGVmIG1wdl9jYWxsYmFjayhz ZWxmLCBjYWxsYmFjayk6CisgICovCistICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2spOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAxMTU1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19w eXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25f c19jYWxsYmFjayk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDExNTcs IF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKy0gICAgX19w eXhfdF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNSk7IGlmICh1bmxpa2VseShf X3B5eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDExNTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF81KTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDFfZXJyb3IpCisgICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworICAgICBpZiAoX19weXhf dF8zKSB7CistICAgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5 eF92X3NlbGYsIF9fcHl4X25fc19tcHZfY2FsbGJhY2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCAxMTU1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX3B5eF90XzQg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX21wdl9j YWxsYmFjayk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDExNTcsIF9f cHl4X0wxX2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgICAgIF9f cHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9u X3NfY2FsbGJhY2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTU1 LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NhbGxiYWNrKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CisgICAgICAgX19weXhfdF83ID0gTlVMTDsKKyAgICAgICBp ZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90 XzQpKSkgeworQEAgLTIwMTU1LDcgKzIwMTU1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF84cnVuKENZVEhPTl9VTlUK KyAgICAgICBfX3B5eF90XzUgPSAoX19weXhfdF83KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJn cyhfX3B5eF90XzQsIF9fcHl4X3RfNywgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxP bmVBcmcoX19weXhfdF80LCBfX3B5eF90XzYpOworICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF83KTsgX19weXhfdF83ID0gMDsKKyAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19w eXhfdF82ID0gMDsKKy0gICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigw LCAxMTU1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkp IF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF81KTsKKyAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKyAgICAgICBfX3B5eF90XzEgPSBfX3B5eF90XzU7CitAQCAtMjAxNjcsNyArMjAxNjcsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxi YWNrVGhyZWFkXzhydW4oQ1lUSE9OX1VOVQorICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTUyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1NAorICAq ICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisgICogCisgICogICAgIGRlZiBydW4o c2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0yMDE5Miw3ICsyMDE5Miw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2Fs bGJhY2tUaHJlYWRfOHJ1bihDWVRIT05fVU5VCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCist LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTcKKysvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTE1OQorICAqICAgICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNr KHNlbGYuY2FsbGJhY2spIGlmIHNlbGYuY2FsbGJhY2sgZWxzZSBOb25lCisgICogCisgICogICAg IGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMjAyMzUsMTEgKzIwMjM1LDExIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTFtcHZfY2FsbGJhY2so CisgICAgICAgICBjYXNlICAxOgorICAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19Q eXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2NhbGxiYWNrKSkgIT0g MCkpIGt3X2FyZ3MtLTsKKyAgICAgICAgIGVsc2UgeworLSAgICAgICAgICBfX1B5eF9SYWlzZUFy Z3R1cGxlSW52YWxpZCgibXB2X2NhbGxiYWNrIiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAx MTU3LCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFs aWQoIm1wdl9jYWxsYmFjayIsIDEsIDIsIDIsIDEpOyBfX1BZWF9FUlIoMCwgMTE1OSwgX19weXhf TDNfZXJyb3IpCisgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGlmICh1bmxpa2VseShrd19h cmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5 d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywg Im1wdl9jYWxsYmFjayIpIDwgMCkpIF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MM19lcnJvcikK KysgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhf a3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIm1wdl9jYWxsYmFj ayIpIDwgMCkpIF9fUFlYX0VSUigwLCAxMTU5LCBfX3B5eF9MM19lcnJvcikKKyAgICAgICB9Cisg ICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7CisgICAg ICAgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKK0BAIC0yMDI1Miw3ICsyMDI1Miw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJh Y2tUaHJlYWRfMTFtcHZfY2FsbGJhY2soCisgICB9CisgICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50 X3VucGFja2luZ19kb25lOworICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6OworLSAgX19QeXhf UmFpc2VBcmd0dXBsZUludmFsaWQoIm1wdl9jYWxsYmFjayIsIDEsIDIsIDIsIFB5VHVwbGVfR0VU X1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDNfZXJyb3IpCisr ICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgibXB2X2NhbGxiYWNrIiwgMSwgMiwgMiwgUHlU dXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCAxMTU5LCBfX3B5eF9MM19l cnJvcikKKyAgIF9fcHl4X0wzX2Vycm9yOjsKKyAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0 dGVyLmxpYnMubXB2LkNhbGxiYWNrVGhyZWFkLm1wdl9jYWxsYmFjayIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CitAQCAtMjAyODUsNyArMjAyODUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNr KAorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIm1wdl9jYWxsYmFjayIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExNTgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTYwCisg ICogCisgICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgorICAqICAgICAg ICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjAzMDEsNyArMjAzMDEs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENh bGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNrKAorICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3Rf Myk7CisgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTE1OQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTYxCisgICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgorICAqICAgICAg ICAgdHJ5OgorICAqICAgICAgICAgICAgIGNhbGxiYWNrKCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTIwMzIxLDEyICsyMDMyMSwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNr KAorICAgICAgIH0KKyAgICAgICBfX3B5eF90XzQgPSAoX19weXhfdF82KSA/IF9fUHl4X1B5T2Jq ZWN0X0NhbGxPbmVBcmcoX19weXhfdF81LCBfX3B5eF90XzYpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE5vQXJnKF9fcHl4X3RfNSk7CisgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOyBfX3B5 eF90XzYgPSAwOworLSAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAs IDExNTksIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF80KSkg X19QWVhfRVJSKDAsIDExNjEsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAw OworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworIAorLSAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU4CisrICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNjAKKyAgKiAKKyAgKiAgICAgZGVmIG1wdl9j YWxsYmFjayhzZWxmLCBjYWxsYmFjayk6CisgICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0yMDM0Myw3ICsyMDM0Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTBtcHZfY2Fs bGJhY2soCisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKyAg ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2MAorKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTE2MgorICAqICAgICAgICAgdHJ5OgorICAqICAgICAgICAgICAg IGNhbGxiYWNrKCkKKyAgKiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTIwMzUzLDI5ICsyMDM1MywyOSBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzEw bXB2X2NhbGxiYWNrKAorICAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUVycl9FeGNlcHRpb25NYXRj aGVzKCgoUHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkp OworICAgICBpZiAoX19weXhfdF83KSB7CisgICAgICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQubXB2X2NhbGxiYWNrIiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICAgICAgaWYgKF9fUHl4X0dldEV4 Y2VwdGlvbigmX19weXhfdF80LCAmX19weXhfdF81LCAmX19weXhfdF82KSA8IDApIF9fUFlYX0VS UigwLCAxMTYwLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCisrICAgICAgaWYgKF9fUHl4X0dldEV4 Y2VwdGlvbigmX19weXhfdF80LCAmX19weXhfdF81LCAmX19weXhfdF82KSA8IDApIF9fUFlYX0VS UigwLCAxMTYyLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNCk7CisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CisgICAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNik7CisgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7CisgICAg ICAgX19weXhfdl9lID0gX19weXhfdF81OworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTYxCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExNjMKKyAgKiAgICAgICAgICAgICBjYWxsYmFjaygpCisgICogICAgICAgICBleGNlcHQg RXhjZXB0aW9uIGFzIGU6CisgICogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgicHltcHYg ZXJyb3IgZHVyaW5nIGNhbGxiYWNrOiAlc1xuIiAlIGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKyAgKiAKKyAgKiBjZGVmIHZvaWQgX2NfY2FsbGJhY2sodm9pZCogZCkgd2l0aCBnaWw6 CisgICovCistICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzksIF9fcHl4 X25fc19zeXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlYX0VSUigwLCAxMTYxLCBf X3B5eF9MNV9leGNlcHRfZXJyb3IpCisrICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShf X3B5eF90XzksIF9fcHl4X25fc19zeXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlY X0VSUigwLCAxMTYzLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfOSk7CistICAgICAgX19weXhfdF8xMCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfdF85LCBfX3B5eF9uX3Nfc3RkZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEw KSkgX19QWVhfRVJSKDAsIDExNjEsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKysgICAgICBfX3B5 eF90XzEwID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzksIF9fcHl4X25fc19z dGRlcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMTApKSBfX1BZWF9FUlIoMCwgMTE2MywgX19w eXhfTDVfZXhjZXB0X2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEwKTsKKyAg ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF85KTsgX19weXhfdF85ID0gMDsKKy0gICAgICBfX3B5 eF90XzkgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfMTAsIF9fcHl4X25fc193 cml0ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF85KSkgX19QWVhfRVJSKDAsIDExNjEsIF9fcHl4 X0w1X2V4Y2VwdF9lcnJvcikKKysgICAgICBfX3B5eF90XzkgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3RfMTAsIF9fcHl4X25fc193cml0ZSk7IGlmICh1bmxpa2VseSghX19weXhf dF85KSkgX19QWVhfRVJSKDAsIDExNjMsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKyAgICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF85KTsKKyAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xMCk7 IF9fcHl4X3RfMTAgPSAwOworLSAgICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeVN0cmluZ19Gb3Jt YXRTYWZlKF9fcHl4X2twX3NfcHltcHZfZXJyb3JfZHVyaW5nX2NhbGxiYWNrX3MsIF9fcHl4X3Zf ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xMCkpIF9fUFlYX0VSUigwLCAxMTYxLCBfX3B5eF9M NV9leGNlcHRfZXJyb3IpCisrICAgICAgX19weXhfdF8xMCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1h dFNhZmUoX19weXhfa3Bfc19weW1wdl9lcnJvcl9kdXJpbmdfY2FsbGJhY2tfcywgX19weXhfdl9l KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEwKSkgX19QWVhfRVJSKDAsIDExNjMsIF9fcHl4X0w1 X2V4Y2VwdF9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xMCk7CisgICAgICAg X19weXhfdF8xMSA9IE5VTEw7CisgICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBs aWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF85KSkpIHsKK0BAIC0yMDM5MCw3ICsyMDM5MCw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2Fs bGJhY2tUaHJlYWRfMTBtcHZfY2FsbGJhY2soCisgICAgICAgX19weXhfdF84ID0gKF9fcHl4X3Rf MTEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfOSwgX19weXhfdF8xMSwgX19w eXhfdF8xMCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfOSwgX19weXhfdF8x MCk7CisgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzExKTsgX19weXhfdF8xMSA9IDA7Cisg ICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMTApOyBfX3B5eF90XzEwID0gMDsKKy0gICAgICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfOCkpIF9fUFlYX0VSUigwLCAxMTYxLCBfX3B5eF9MNV9leGNl cHRfZXJyb3IpCisrICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBfX1BZWF9FUlIoMCwg MTE2MywgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzgpOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90XzkgPSAwOworICAg ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworQEAgLTIwNDAyLDcg KzIwNDAyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTRDYWxsYmFja1RocmVhZF8xMG1wdl9jYWxsYmFjaygKKyAgICAgZ290byBfX3B5eF9MNV9l eGNlcHRfZXJyb3I7CisgICAgIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcjo7CisgCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU4CisrICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTYwCisgICogCisgICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2Vs ZiwgY2FsbGJhY2spOgorICAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtMjA0MjIsNyArMjA0MjIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNrKAorICAg ICBfX3B5eF9MOF90cnlfZW5kOjsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTU3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1 OQorICAqICAgICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNrKHNlbGYuY2FsbGJhY2spIGlmIHNl bGYuY2FsbGJhY2sgZWxzZSBOb25lCisgICogCisgICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2Vs ZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjA0NTAsNyAr MjA0NTAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xNENhbGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNrKAorICAgcmV0dXJuIF9fcHl4X3I7Cisg fQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTYzCisrLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNjUKKyAgKiAgICAgICAgICAgICBzeXMuc3RkZXJy LndyaXRlKCJweW1wdiBlcnJvciBkdXJpbmcgY2FsbGJhY2s6ICVzXG4iICUgZSkKKyAgKiAKKyAg KiBjZGVmIHZvaWQgX2NfY2FsbGJhY2sodm9pZCogZCkgd2l0aCBnaWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0yMDQ3NCw3ICsyMDQ3NCw3IEBAIHN0YXRpYyB2b2lkIF9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX2NhbGxiYWNrKHZvaWQgKl9fcHl4X3ZfZCkgewor ICAgI2VuZGlmCisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2NfY2FsbGJhY2siLCAw KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTY0CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2NgorICAqIAorICAqIGNkZWYgdm9pZCBf Y19jYWxsYmFjayh2b2lkKiBkKSB3aXRoIGdpbDoKKyAgKiAgICAgY2RlZiB1aW50NjRfdCBuYW1l ID0gPHVpbnQ2NF90PmQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTIwNDgzLDE1 ICsyMDQ4MywxNSBAQCBzdGF0aWMgdm9pZCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f Y19jYWxsYmFjayh2b2lkICpfX3B5eF92X2QpIHsKKyAgKi8KKyAgIF9fcHl4X3ZfbmFtZSA9ICgo dWludDY0X3QpX19weXhfdl9kKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTY1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2NworICAq IGNkZWYgdm9pZCBfY19jYWxsYmFjayh2b2lkKiBkKSB3aXRoIGdpbDoKKyAgKiAgICAgY2RlZiB1 aW50NjRfdCBuYW1lID0gPHVpbnQ2NF90PmQKKyAgKiAgICAgY2FsbGJhY2sgPSBfY2FsbGJhY2tz LmdldChuYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGNhbGxiYWNr LmNhbGwoKQorICAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY2FsbGJhY2tzLCBfX3B5eF9uX3NfZ2V0KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTE2NSwgX19weXhfTDFfZXJy b3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfOXZp ZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTY3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV91 aW50NjRfdChfX3B5eF92X25hbWUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigwLCAxMTY1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zy b21fdWludDY0X3QoX19weXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZ WF9FUlIoMCwgMTE2NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8z KTsKKyAgIF9fcHl4X3RfNCA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAgLTIwNTA2LDE4ICsyMDUw NiwxOCBAQCBzdGF0aWMgdm9pZCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY19jYWxs YmFjayh2b2lkICpfX3B5eF92X2QpIHsKKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19Q eXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF90XzMpIDog X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMyk7CisgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDExNjUsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMTE2NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor ICAgX19weXhfdl9jYWxsYmFjayA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2NgorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNjgKKyAgKiAgICAgY2RlZiB1aW50NjRfdCBuYW1lID0g PHVpbnQ2NF90PmQKKyAgKiAgICAgY2FsbGJhY2sgPSBfY2FsbGJhY2tzLmdldChuYW1lKQorICAq ICAgICBjYWxsYmFjay5jYWxsKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqLwor LSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2NhbGxiYWNr LCBfX3B5eF9uX3NfY2FsbCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDExNjYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cihfX3B5eF92X2NhbGxiYWNrLCBfX3B5eF9uX3NfY2FsbCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExNjgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7CisgICBfX3B5eF90XzMgPSBOVUxMOworICAgaWYgKENZVEhPTl9V TlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKK0BA IC0yMDUzMSwxMiArMjA1MzEsMTIgQEAgc3RhdGljIHZvaWQgX19weXhfZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX2NfY2FsbGJhY2sodm9pZCAqX19weXhfdl9kKSB7CisgICB9CisgICBfX3B5eF90 XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBf X3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7CisgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTY2LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNjgsIF9fcHl4X0wxX2Vycm9yKQorICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19w eXhfdF8yID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNjMKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTY1CisgICogICAgICAgICAgICAgc3lzLnN0ZGVy ci53cml0ZSgicHltcHYgZXJyb3IgZHVyaW5nIGNhbGxiYWNrOiAlc1xuIiAlIGUpCisgICogCisg ICogY2RlZiB2b2lkIF9jX2NhbGxiYWNrKHZvaWQqIGQpIHdpdGggZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMjQ0NDQsMTMgKzI0NDQ0LDEzIEBAIHN0YXRpYyBfX1B5eF9T dHJpbmdUYWJFbnRyeSBfX3B5eF9zdHJpbmdfdGFiW10gPSB7CisgICB7MCwgMCwgMCwgMCwgMCwg MCwgMH0KKyB9OworIHN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfSW5pdENhY2hl ZEJ1aWx0aW5zKHZvaWQpIHsKKy0gIF9fcHl4X2J1aWx0aW5fSW1wb3J0RXJyb3IgPSBfX1B5eF9H ZXRCdWlsdGluTmFtZShfX3B5eF9uX3NfSW1wb3J0RXJyb3IpOyBpZiAoIV9fcHl4X2J1aWx0aW5f SW1wb3J0RXJyb3IpIF9fUFlYX0VSUigwLCA0NCwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF9i dWlsdGluX29iamVjdCA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19vYmplY3QpOyBp ZiAoIV9fcHl4X2J1aWx0aW5fb2JqZWN0KSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fcHl4X2J1aWx0aW5fVW5pY29kZURlY29kZUVycm9yID0gX19QeXhfR2V0QnVpbHRp bk5hbWUoX19weXhfbl9zX1VuaWNvZGVEZWNvZGVFcnJvcik7IGlmICghX19weXhfYnVpbHRpbl9V bmljb2RlRGVjb2RlRXJyb3IpIF9fUFlYX0VSUigwLCA1OCwgX19weXhfTDFfZXJyb3IpCistICBf X3B5eF9idWlsdGluX1VuaWNvZGVFbmNvZGVFcnJvciA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9f cHl4X25fc19Vbmljb2RlRW5jb2RlRXJyb3IpOyBpZiAoIV9fcHl4X2J1aWx0aW5fVW5pY29kZUVu Y29kZUVycm9yKSBfX1BZWF9FUlIoMCwgNjYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfYnVp bHRpbl9yYW5nZSA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19yYW5nZSk7IGlmICgh X19weXhfYnVpbHRpbl9yYW5nZSkgX19QWVhfRVJSKDAsIDIyMiwgX19weXhfTDFfZXJyb3IpCist ICBfX3B5eF9idWlsdGluX2lkID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX2lkKTsg aWYgKCFfX3B5eF9idWlsdGluX2lkKSBfX1BZWF9FUlIoMCwgMzAzLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fcHl4X2J1aWx0aW5fZW51bWVyYXRlID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhf bl9zX2VudW1lcmF0ZSk7IGlmICghX19weXhfYnVpbHRpbl9lbnVtZXJhdGUpIF9fUFlYX0VSUigw LCA0NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfYnVpbHRpbl9JbXBvcnRFcnJvciA9IF9f UHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19JbXBvcnRFcnJvcik7IGlmICghX19weXhfYnVp bHRpbl9JbXBvcnRFcnJvcikgX19QWVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X2J1aWx0aW5fb2JqZWN0ID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX29iamVj dCk7IGlmICghX19weXhfYnVpbHRpbl9vYmplY3QpIF9fUFlYX0VSUigwLCAzNDgsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfYnVpbHRpbl9Vbmljb2RlRGVjb2RlRXJyb3IgPSBfX1B5eF9HZXRC dWlsdGluTmFtZShfX3B5eF9uX3NfVW5pY29kZURlY29kZUVycm9yKTsgaWYgKCFfX3B5eF9idWls dGluX1VuaWNvZGVEZWNvZGVFcnJvcikgX19QWVhfRVJSKDAsIDYwLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X2J1aWx0aW5fVW5pY29kZUVuY29kZUVycm9yID0gX19QeXhfR2V0QnVpbHRpbk5h bWUoX19weXhfbl9zX1VuaWNvZGVFbmNvZGVFcnJvcik7IGlmICghX19weXhfYnVpbHRpbl9Vbmlj b2RlRW5jb2RlRXJyb3IpIF9fUFlYX0VSUigwLCA2OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF9idWlsdGluX3JhbmdlID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX3JhbmdlKTsg aWYgKCFfX3B5eF9idWlsdGluX3JhbmdlKSBfX1BZWF9FUlIoMCwgMjI0LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fcHl4X2J1aWx0aW5faWQgPSBfX1B5eF9HZXRCdWlsdGluTmFtZShfX3B5eF9uX3Nf aWQpOyBpZiAoIV9fcHl4X2J1aWx0aW5faWQpIF9fUFlYX0VSUigwLCAzMDUsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfYnVpbHRpbl9lbnVtZXJhdGUgPSBfX1B5eF9HZXRCdWlsdGluTmFtZShf X3B5eF9uX3NfZW51bWVyYXRlKTsgaWYgKCFfX3B5eF9idWlsdGluX2VudW1lcmF0ZSkgX19QWVhf RVJSKDAsIDQ3NywgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF9idWlsdGluX1R5cGVFcnJvciA9 IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19UeXBlRXJyb3IpOyBpZiAoIV9fcHl4X2J1 aWx0aW5fVHlwZUVycm9yKSBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCisgICByZXR1 cm4gMDsKKyAgIF9fcHl4X0wxX2Vycm9yOjsKK0BAIC0yNDQ2MSwxNyArMjQ0NjEsMTcgQEAgc3Rh dGljIENZVEhPTl9TTUFMTF9DT0RFIGludCBfX1B5eF9Jbml0Q2FjaGVkQ29uc3RhbnRzKHZvaWQp IHsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19QeXhfSW5pdENhY2hlZENvbnN0YW50cyIsIDApOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjMyMQorICAqIAorICAqIGRlZiBfZXJyb3JzKGZuKToKKyAgKiAgICAgZGVmIHdy YXBwZWQoKmssICoqa3cpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAg ICB2ID0gZm4oKmssICoqa3cpCisgICogICAgICAgICBpZiB2IDwgMDoKKyAgKi8KKy0gIF9fcHl4 X3R1cGxlXyA9IFB5VHVwbGVfUGFjaygzLCBfX3B5eF9uX3NfaywgX19weXhfbl9zX2t3LCBfX3B5 eF9uX3Nfdik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfKSkgX19QWVhfRVJSKDAsIDMxOSwg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90dXBsZV8gPSBQeVR1cGxlX1BhY2soMywgX19weXhf bl9zX2ssIF9fcHl4X25fc19rdywgX19weXhfbl9zX3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1 cGxlXykpIF9fUFlYX0VSUigwLCAzMjEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3R1cGxlXyk7CisgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlXyk7CistICBfX3B5 eF9jb2Rlb2JqX18yID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDAsIDAsIDMsIDAsIENP X09QVElNSVpFRHxDT19ORVdMT0NBTFN8Q09fVkFSQVJHU3xDT19WQVJLRVlXT1JEUywgX19weXhf ZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhf dHVwbGVfLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3Nf dmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3dyYXBwZWQsIDMxOSwgX19w eXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzIpKSBfX1BZWF9F UlIoMCwgMzE5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X2NvZGVvYmpfXzIgPSAoUHlPYmpl Y3QqKV9fUHl4X1B5Q29kZV9OZXcoMCwgMCwgMywgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FM U3xDT19WQVJBUkdTfENPX1ZBUktFWVdPUkRTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV8sIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9t cHZfcHl4LCBfX3B5eF9uX3Nfd3JhcHBlZCwgMzIxLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1 bmxpa2VseSghX19weXhfY29kZW9ial9fMikpIF9fUFlYX0VSUigwLCAzMjEsIF9fcHl4X0wxX2Vy cm9yKQorIAorICAgLyogIih0cmVlIGZyYWdtZW50KSI6MgorICAqIGRlZiBfX3JlZHVjZV9jeXRo b25fXyhzZWxmKToKK0BAIC0yNDUxMSw4MCArMjQ1MTEsODAgQEAgc3RhdGljIENZVEhPTl9TTUFM TF9DT0RFIGludCBfX1B5eF9Jbml0Q2FjaGVkQ29uc3RhbnRzKHZvaWQpIHsKKyAgIF9fUHl4X0dP VFJFRihfX3B5eF90dXBsZV9fNik7CisgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX182KTsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTIKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTQKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRk X3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fV0xfRElTUExBWSwgZ2V0X3BvaW50ZXIoIndsX2Rpc3Bs YXkiLCB3bF9kaXNwbGF5KSkKKyAgKiAgICAgICAgIGlmIGRybV9kaXNwbGF5OgorICAqICAgICAg ICAgICAgIGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQg PSBkcm1fZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKKyAgKiAgICAgICAgICAgICBkcm1fcGFy YW1zLmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpCisg ICovCistICBfX3B5eF90dXBsZV9fNyA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfZmQsIF9f cHl4X2ludF9uZWdfMSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzcpKSBfX1BZWF9FUlIo MCwgOTkyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX183ID0gUHlUdXBsZV9QYWNr KDIsIF9fcHl4X25fc19mZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 dXBsZV9fNykpIF9fUFlYX0VSUigwLCA5OTQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3R1cGxlX183KTsKKyAgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzcpOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MworKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5NQorICAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6 CisgICogICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAt MSkKKyAgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQo ImNydGNfaWQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAg ICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3Jf aWQiLCAtMSkKKyAgKiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5nZXQoImF0b21pY19y ZXF1ZXN0X3B0ciIsIE5vbmUpCisgICovCistICBfX3B5eF90dXBsZV9fOCA9IFB5VHVwbGVfUGFj aygyLCBfX3B5eF9uX3NfY3J0Y19pZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90dXBsZV9fOCkpIF9fUFlYX0VSUigwLCA5OTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdHVwbGVfXzggPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9zX2NydGNfaWQsIF9fcHl4X2lu dF9uZWdfMSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzgpKSBfX1BZWF9FUlIoMCwgOTk1 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fOCk7CisgICBf X1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX184KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5OTQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 OTYKKyAgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIs IC0xKQorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5Lmdl dCgiY3J0Y19pZCIsIC0xKQorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lk ID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWlj X3JlcXVlc3RfcHRyIiwgTm9uZSkKKyAgKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6 CisgICovCistICBfX3B5eF90dXBsZV9fOSA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfY29u bmVjdG9yX2lkLCBfX3B5eF9pbnRfbmVnXzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX185 KSkgX19QWVhfRVJSKDAsIDk5NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90dXBsZV9fOSA9 IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfY29ubmVjdG9yX2lkLCBfX3B5eF9pbnRfbmVnXzEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX185KSkgX19QWVhfRVJSKDAsIDk5NiwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzkpOworICAgX19QeXhfR0lW RVJFRihfX3B5eF90dXBsZV9fOSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTk1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk3CisgICog ICAgICAgICAgICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lk IiwgLTEpCisgICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlz cGxheS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0xKQorICAqICAgICAgICAgICAgIGFycCA9IGRybV9k aXNwbGF5LmdldCgiYXRvbWljX3JlcXVlc3RfcHRyIiwgTm9uZSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKKyAgKiAgICAg ICAgICAgICAgICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9t aWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQorICAqLworLSAg X19weXhfdHVwbGVfXzEwID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19hdG9taWNfcmVxdWVz dF9wdHIsIFB5X05vbmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMCkpIF9fUFlYX0VS UigwLCA5OTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVwbGVfXzEwID0gUHlUdXBsZV9Q YWNrKDIsIF9fcHl4X25fc19hdG9taWNfcmVxdWVzdF9wdHIsIFB5X05vbmUpOyBpZiAodW5saWtl bHkoIV9fcHl4X3R1cGxlX18xMCkpIF9fUFlYX0VSUigwLCA5OTcsIF9fcHl4X0wxX2Vycm9yKQor ICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18xMCk7CisgICBfX1B5eF9HSVZFUkVGKF9fcHl4 X3R1cGxlX18xMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk4 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAwMAorICAqICAgICAgICAg ICAgIGlmIGFycCBpcyBub3QgTm9uZToKKyAgKiAgICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5h dG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJw LCAiZHJtTW9kZUF0b21pY1JlcSoiKQorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVy X2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9Q QVJBTV9EUk1fRElTUExBWSwgJmRybV9wYXJhbXMpCisgICogICAgICAgICBpZiBkcm1fb3NkX3Np emU6CisgICovCistICBfX3B5eF90dXBsZV9fMTEgPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9z X3JlbmRlcl9mZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9f MTEpKSBfX1BZWF9FUlIoMCwgOTk4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX18x MSA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfcmVuZGVyX2ZkLCBfX3B5eF9pbnRfbmVnXzEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMSkpIF9fUFlYX0VSUigwLCAxMDAwLCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTEpOworICAgX19QeXhf R0lWRVJFRihfX3B5eF90dXBsZV9fMTEpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwODMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg1 CisgICogICAgICAgICBpZiBvcGVuZ2xfZmJvOgorICAqICAgICAgICAgICAgIG1lbXNldCgmZmJv LCAwLCBzaXplb2YoZmJvKSkKKyAgKiAgICAgICAgICAgICBmYm8uZmJvID0gb3BlbmdsX2Ziby5n ZXQoImZibyIsIDApIG9yIDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAg ICAgICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdCisgICogICAgICAgICAgICAgZmJvLmggPSBv cGVuZ2xfZmJvWyJoIl0KKyAgKi8KKy0gIF9fcHl4X3R1cGxlX18xMiA9IFB5VHVwbGVfUGFjaygy LCBfX3B5eF9uX3NfZmJvLCBfX3B5eF9pbnRfMCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVf XzEyKSkgX19QWVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVwbGVf XzEyID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19mYm8sIF9fcHl4X2ludF8wKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90dXBsZV9fMTIpKSBfX1BZWF9FUlIoMCwgMTA4NSwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzEyKTsKKyAgIF9fUHl4X0dJVkVSRUYo X19weXhfdHVwbGVfXzEyKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDg2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4OAorICAqICAg ICAgICAgICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdCisgICogICAgICAgICAgICAgZmJvLmgg PSBvcGVuZ2xfZmJvWyJoIl0KKyAgKiAgICAgICAgICAgICBmYm8uaW50ZXJuYWxfZm9ybWF0ID0g b3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIsIDApIG9yIDAgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRF Ul9QQVJBTV9PUEVOR0xfRkJPLCAmZmJvKQorICAqICAgICAgICAgaWYgZmxpcF95OgorICAqLwor LSAgX19weXhfdHVwbGVfXzEzID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19pbnRlcm5hbF9m b3JtYXQsIF9fcHl4X2ludF8wKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMTMpKSBfX1BZ WF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90dXBsZV9fMTMgPSBQeVR1 cGxlX1BhY2soMiwgX19weXhfbl9zX2ludGVybmFsX2Zvcm1hdCwgX19weXhfaW50XzApOyBpZiAo dW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMykpIF9fUFlYX0VSUigwLCAxMDg4LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTMpOworICAgX19QeXhfR0lWRVJF RihfX3B5eF90dXBsZV9fMTMpOworIAorQEAgLTI0NjI2LDE4MyArMjQ2MjYsMTgzIEBAIHN0YXRp YyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfSW5pdENhY2hlZENvbnN0YW50cyh2b2lkKSB7 CisgICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzE3KTsKKyAgIF9fUHl4X0dJVkVSRUYoX19w eXhfdHVwbGVfXzE3KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 MgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU0CisgICogICAgIHZvaWQg UHlfSW5pdGlhbGl6ZSgpCisgICogCisgICogX2lzX3B5MyA9IHN5cy52ZXJzaW9uX2luZm8gPj0g KDMsKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogX3N0cmRlY19lcnIgPSAic3Vy cm9nYXRlZXNjYXBlIiBpZiBfaXNfcHkzIGVsc2UgInN0cmljdCIKKyAgKiAjIG1wdiAtPiBQeXRo b24KKyAgKi8KKy0gIF9fcHl4X3R1cGxlX18xOCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9pbnRf Myk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE4KSkgX19QWVhfRVJSKDAsIDUyLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX18xOCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9p bnRfMyk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE4KSkgX19QWVhfRVJSKDAsIDU0LCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTgpOworICAgX19Q eXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTgpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjU1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcK KyAgKiBfc3RyZGVjX2VyciA9ICJzdXJyb2dhdGVlc2NhcGUiIGlmIF9pc19weTMgZWxzZSAic3Ry aWN0IgorICAqICMgbXB2IC0+IFB5dGhvbgorICAqIGRlZiBfc3RyZGVjKHMpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIHRyeToKKyAgKiAgICAgICAgIHJldHVybiBzLmRl Y29kZSgidXRmLTgiLCBfc3RyZGVjX2VycikKKyAgKi8KKy0gIF9fcHl4X3R1cGxlX18xOSA9IFB5 VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nfcyk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE5 KSkgX19QWVhfRVJSKDAsIDU1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX18xOSA9 IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nfcyk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVf XzE5KSkgX19QWVhfRVJSKDAsIDU3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90dXBsZV9fMTkpOworICAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTkpOworLSAg X19weXhfY29kZW9ial9fMjAgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwg MCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzE5LCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHlt cHZfbXB2X3B5eCwgX19weXhfbl9zX3N0cmRlYywgNTUsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYg KHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18yMCkpIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF9jb2Rlb2JqX18yMCA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05l dygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRl cywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMTks IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0 ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3Nfc3RyZGVjLCA1NywgX19weXhfZW1wdHlf Ynl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzIwKSkgX19QWVhfRVJSKDAsIDU3 LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo2MworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1CisgICogCisgICog IyBQeXRob24gLT4gbXB2CisgICogZGVmIF9zdHJlbmMocyk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKyAgKiAgICAgdHJ5OgorICAqICAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCJ1dGYt OCIsIF9zdHJkZWNfZXJyKQorICAqLworLSAgX19weXhfdHVwbGVfXzIxID0gUHlUdXBsZV9QYWNr KDEsIF9fcHl4X25fc19zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjEpKSBfX1BZWF9F UlIoMCwgNjMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVwbGVfXzIxID0gUHlUdXBsZV9Q YWNrKDEsIF9fcHl4X25fc19zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjEpKSBfX1BZ WF9FUlIoMCwgNjUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxl X18yMSk7CisgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18yMSk7CistICBfX3B5eF9jb2Rl b2JqX18yMiA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJ TUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUs IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMjEsIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4 LCBfX3B5eF9uX3Nfc3RyZW5jLCA2MywgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHko IV9fcHl4X2NvZGVvYmpfXzIyKSkgX19QWVhfRVJSKDAsIDYzLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fcHl4X2NvZGVvYmpfXzIyID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEs IDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18yMSwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5 bXB2X21wdl9weXgsIF9fcHl4X25fc19zdHJlbmMsIDY1LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlm ICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMjIpKSBfX1BZWF9FUlIoMCwgNjUsIF9fcHl4X0wx X2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOAorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMAorICAqIAorICAqIAorICAqIGRl ZiBfZXJyb3JzKGZuKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBkZWYg d3JhcHBlZCgqaywgKiprdyk6CisgICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCisgICovCist ICBfX3B5eF90dXBsZV9fMjMgPSBQeVR1cGxlX1BhY2soMywgX19weXhfbl9zX2ZuLCBfX3B5eF9u X3Nfd3JhcHBlZCwgX19weXhfbl9zX3dyYXBwZWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxl X18yMykpIF9fUFlYX0VSUigwLCAzMTgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVwbGVf XzIzID0gUHlUdXBsZV9QYWNrKDMsIF9fcHl4X25fc19mbiwgX19weXhfbl9zX3dyYXBwZWQsIF9f cHl4X25fc193cmFwcGVkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjMpKSBfX1BZWF9F UlIoMCwgMzIwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9f MjMpOworICAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMjMpOworLSAgX19weXhfY29kZW9i al9fMjQgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMywgMCwgQ09fT1BUSU1J WkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzIzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwg X19weXhfbl9zX2Vycm9ycywgMzE4LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSgh X19weXhfY29kZW9ial9fMjQpKSBfX1BZWF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKKysg IF9fcHl4X2NvZGVvYmpfXzI0ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDMs IDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18yMywgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5 bXB2X21wdl9weXgsIF9fcHl4X25fc19lcnJvcnMsIDMyMCwgX19weXhfZW1wdHlfYnl0ZXMpOyBp ZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzI0KSkgX19QWVhfRVJSKDAsIDMyMCwgX19weXhf TDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI5Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMxCisgICogICAgIGNvZGUgPSBO b25lCisgICogCisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jb2RlID0gZQorICAqICAgICAgICAgY2Rl ZiBjb25zdCBjaGFyKiBlcnJfYworICAqLworLSAgX19weXhfdHVwbGVfXzI1ID0gUHlUdXBsZV9Q YWNrKDQsIF9fcHl4X25fc19zZWxmLCBfX3B5eF9uX3NfZSwgX19weXhfbl9zX2Vycl9jLCBfX3B5 eF9uX3NfZV9pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjUpKSBfX1BZWF9FUlIoMCwg MzI5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX18yNSA9IFB5VHVwbGVfUGFjayg0 LCBfX3B5eF9uX3Nfc2VsZiwgX19weXhfbl9zX2UsIF9fcHl4X25fc19lcnJfYywgX19weXhfbl9z X2VfaSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzI1KSkgX19QWVhfRVJSKDAsIDMzMSwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzI1KTsKKyAgIF9f UHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzI1KTsKKy0gIF9fcHl4X2NvZGVvYmpfXzI2ID0gKFB5 T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDIsIDAsIDQsIDAsIENPX09QVElNSVpFRHxDT19ORVdM T0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlf dHVwbGUsIF9fcHl4X3R1cGxlX18yNSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19p bml0LCAzMjksIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2Jq X18yNikpIF9fUFlYX0VSUigwLCAzMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfY29kZW9i al9fMjYgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgNCwgMCwgQ09fT1BUSU1J WkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzI1LCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwg X19weXhfbl9zX2luaXQsIDMzMSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9f cHl4X2NvZGVvYmpfXzI2KSkgX19QWVhfRVJSKDAsIDMzMSwgX19weXhfTDFfZXJyb3IpCisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ2CisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ4CisgICogY2RlZiBfcmVwbHlfdXNlcmRhdGFzID0gZGlj dCgpCisgICogCisgICogY2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CisgICog ICAgICAgICBzZWxmLmNvdW50ZXIgPSAwCisgICovCistICBfX3B5eF90dXBsZV9fMjcgPSBQeVR1 cGxlX1BhY2soMSwgX19weXhfYnVpbHRpbl9vYmplY3QpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1 cGxlX18yNykpIF9fUFlYX0VSUigwLCAzNDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVw bGVfXzI3ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2J1aWx0aW5fb2JqZWN0KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90dXBsZV9fMjcpKSBfX1BZWF9FUlIoMCwgMzQ4LCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMjcpOworICAgX19QeXhfR0lWRVJFRihfX3B5 eF90dXBsZV9fMjcpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0 NworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0OQorICAqIAorICAqIGNs YXNzIF9SZXBseVVzZXJEYXRhKG9iamVjdCk6CisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBk YXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jb3Vu dGVyID0gMAorICAqICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorICAqLworLSAgX19weXhfdHVw bGVfXzI4ID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19zZWxmLCBfX3B5eF9uX3NfZGF0YSk7 IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzI4KSkgX19QWVhfRVJSKDAsIDM0NywgX19weXhf TDFfZXJyb3IpCisrICBfX3B5eF90dXBsZV9fMjggPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9z X3NlbGYsIF9fcHl4X25fc19kYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjgpKSBf X1BZWF9FUlIoMCwgMzQ5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 dXBsZV9fMjgpOworICAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMjgpOworLSAgX19weXhf Y29kZW9ial9fMjkgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgMiwgMCwgQ09f T1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzI4LCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2 X3B5eCwgX19weXhfbl9zX2luaXQsIDM0NywgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtl bHkoIV9fcHl4X2NvZGVvYmpfXzI5KSkgX19QWVhfRVJSKDAsIDM0NywgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF9jb2Rlb2JqX18yOSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygyLCAw LCAyLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMjgsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGli c19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfaW5pdCwgMzQ5LCBfX3B5eF9lbXB0eV9ieXRlcyk7 IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMjkpKSBfX1BZWF9FUlIoMCwgMzQ5LCBfX3B5 eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTIK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTQKKyAgKiAgICAgICAgIHNl bGYub2JzZXJ2ZWQgPSBGYWxzZQorICAqIAorICAqICAgICBkZWYgYWRkKHNlbGYpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMQorICAq IAorICAqLworLSAgX19weXhfdHVwbGVfXzMwID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25fc19z ZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMzApKSBfX1BZWF9FUlIoMCwgMzUyLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX18zMCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5 eF9uX3Nfc2VsZik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzMwKSkgX19QWVhfRVJSKDAs IDM1NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzMwKTsK KyAgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzMwKTsKKy0gIF9fcHl4X2NvZGVvYmpfXzMx ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxD T19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhf ZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18zMCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4 X25fc19hZGQsIDM1MiwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2Nv ZGVvYmpfXzMxKSkgX19QWVhfRVJSKDAsIDM1MiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF9j b2Rlb2JqX18zMSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19P UFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMzAsIF9fcHl4X2VtcHR5X3R1cGxl LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZf cHl4LCBfX3B5eF9uX3NfYWRkLCAzNTQsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF9jb2Rlb2JqX18zMSkpIF9fUFlYX0VSUigwLCAzNTQsIF9fcHl4X0wxX2Vycm9yKQor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NQorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NworICAqICAgICAgICAgc2VsZi5jb3VudGVyICs9 IDEKKyAgKiAKKyAgKiAgICAgZGVmIHJlbW92ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jb3VudGVyIC09IDEKKyAgKiAKKyAgKi8KKy0gIF9f cHl4X3R1cGxlX18zMiA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nfc2VsZik7IGlmICh1bmxp a2VseSghX19weXhfdHVwbGVfXzMyKSkgX19QWVhfRVJSKDAsIDM1NSwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90dXBsZV9fMzIgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18zMikpIF9fUFlYX0VSUigwLCAzNTcsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18zMik7CisgICBfX1B5eF9HSVZF UkVGKF9fcHl4X3R1cGxlX18zMik7CistICBfX3B5eF9jb2Rlb2JqX18zMyA9IChQeU9iamVjdCop X19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBf X3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF90dXBsZV9fMzIsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfcmVtb3ZlLCAz NTUsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18zMykp IF9fUFlYX0VSUigwLCAzNTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfY29kZW9ial9fMzMg PSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENP X05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzMyLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhf bl9zX3JlbW92ZSwgMzU3LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhf Y29kZW9ial9fMzMpKSBfX1BZWF9FUlIoMCwgMzU3LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTMzCisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTEzNQorICAqIAorICAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRo cmVhZCk6CisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICogICAgICAgICBz ZWxmLmRhZW1vbiA9IFRydWUKKyAgKi8KKy0gIF9fcHl4X3R1cGxlX18zNCA9IFB5VHVwbGVfUGFj aygxLCBfX3B5eF9uX3Nfc2VsZik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzM0KSkgX19Q WVhfRVJSKDAsIDExMzMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVwbGVfXzM0ID0gUHlU dXBsZV9QYWNrKDEsIF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9f MzQpKSBfX1BZWF9FUlIoMCwgMTEzNSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdHVwbGVfXzM0KTsKKyAgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzM0KTsKKy0g IF9fcHl4X2NvZGVvYmpfXzM1ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEs IDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18zNCwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5 bXB2X21wdl9weXgsIF9fcHl4X25fc19pbml0LCAxMTMzLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlm ICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMzUpKSBfX1BZWF9FUlIoMCwgMTEzMywgX19weXhf TDFfZXJyb3IpCisrICBfX3B5eF9jb2Rlb2JqX18zNSA9IChQeU9iamVjdCopX19QeXhfUHlDb2Rl X05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9i eXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9f MzQsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRj dXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfaW5pdCwgMTEzNSwgX19weXhfZW1w dHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzM1KSkgX19QWVhfRVJSKDAs IDExMzUsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExNDEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQzCisg ICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZQorICAqIAorICAqICAgICBkZWYgc2h1 dGRvd24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNl bGYuaXNzaHV0ZG93biA9IFRydWUKKyAgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lCisg ICovCistICBfX3B5eF90dXBsZV9fMzYgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYp OyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18zNikpIF9fUFlYX0VSUigwLCAxMTQxLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX18zNiA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9u X3Nfc2VsZik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzM2KSkgX19QWVhfRVJSKDAsIDEx NDMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18zNik7Cisg ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18zNik7CistICBfX3B5eF9jb2Rlb2JqX18zNyA9 IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8Q09f TkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMzYsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9u X3Nfc2h1dGRvd24sIDExNDEsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF9jb2Rlb2JqX18zNykpIF9fUFlYX0VSUigwLCAxMTQxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X2NvZGVvYmpfXzM3ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAs IENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18zNiwgX19weXhfZW1wdHlf dHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2 X21wdl9weXgsIF9fcHl4X25fc19zaHV0ZG93biwgMTE0MywgX19weXhfZW1wdHlfYnl0ZXMpOyBp ZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzM3KSkgX19QWVhfRVJSKDAsIDExNDMsIF9fcHl4 X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDYK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ4CisgICogICAgICAgICBz ZWxmLmxvY2sucmVsZWFzZSgpCisgICogCisgICogICAgIGRlZiBjYWxsKHNlbGYpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisg ICogCisgICovCistICBfX3B5eF90dXBsZV9fMzggPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9z X3NlbGYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18zOCkpIF9fUFlYX0VSUigwLCAxMTQ2 LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX18zOCA9IFB5VHVwbGVfUGFjaygxLCBf X3B5eF9uX3Nfc2VsZik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzM4KSkgX19QWVhfRVJS KDAsIDExNDgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18z OCk7CisgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18zOCk7CistICBfX3B5eF9jb2Rlb2Jq X18zOSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUla RUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMzgsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBf X3B5eF9uX3NfY2FsbCwgMTE0NiwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9f cHl4X2NvZGVvYmpfXzM5KSkgX19QWVhfRVJSKDAsIDExNDYsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfY29kZW9ial9fMzkgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwg MCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzM4LCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHlt cHZfbXB2X3B5eCwgX19weXhfbl9zX2NhbGwsIDExNDgsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYg KHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18zOSkpIF9fUFlYX0VSUigwLCAxMTQ4LCBfX3B5eF9M MV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ5Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1MQorICAqICAgICAgICAgc2Vs Zi5sb2NrLnJlbGVhc2UoKQorICAqIAorICAqICAgICBkZWYgc2V0KHNlbGYsIGNhbGxiYWNrKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9 IGNhbGxiYWNrCisgICogCisgICovCistICBfX3B5eF90dXBsZV9fNDAgPSBQeVR1cGxlX1BhY2so MiwgX19weXhfbl9zX3NlbGYsIF9fcHl4X25fc19jYWxsYmFjayk7IGlmICh1bmxpa2VseSghX19w eXhfdHVwbGVfXzQwKSkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdHVwbGVfXzQwID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19zZWxmLCBfX3B5eF9uX3Nf Y2FsbGJhY2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX180MCkpIF9fUFlYX0VSUigwLCAx MTUxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNDApOwor ICAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fNDApOworLSAgX19weXhfY29kZW9ial9fNDEg PSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgMiwgMCwgQ09fT1BUSU1JWkVEfENP X05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzQwLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhf bl9zX3NldCwgMTE0OSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2Nv ZGVvYmpfXzQxKSkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf Y29kZW9ial9fNDEgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgMiwgMCwgQ09f T1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzQwLCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2 X3B5eCwgX19weXhfbl9zX3NldCwgMTE1MSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtl bHkoIV9fcHl4X2NvZGVvYmpfXzQxKSkgX19QWVhfRVJSKDAsIDExNTEsIF9fcHl4X0wxX2Vycm9y KQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTIKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU0CisgICogICAgICAgICBzZWxmLmNhbGxi YWNrID0gY2FsbGJhY2sKKyAgKiAKKyAgKiAgICAgZGVmIHJ1bihzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNzaHV0ZG93bjoK KyAgKiAgICAgICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQorICAqLworLSAgX19weXhf dHVwbGVfXzQyID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90dXBsZV9fNDIpKSBfX1BZWF9FUlIoMCwgMTE1MiwgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF90dXBsZV9fNDIgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3R1cGxlX180MikpIF9fUFlYX0VSUigwLCAxMTU0LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNDIpOworICAgX19QeXhfR0lWRVJF RihfX3B5eF90dXBsZV9fNDIpOworLSAgX19weXhfY29kZW9ial9fNDMgPSAoUHlPYmplY3QqKV9f UHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19w eXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfdHVwbGVfXzQyLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3J1biwgMTE1Miwg X19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzQzKSkgX19Q WVhfRVJSKDAsIDExNTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfY29kZW9ial9fNDMgPSAo UHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05F V0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfdHVwbGVfXzQyLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlf dHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9z X3J1biwgMTE1NCwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVv YmpfXzQzKSkgX19QWVhfRVJSKDAsIDExNTQsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTcKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTU5CisgICogICAgICAgICAgICAgc2VsZi5tcHZfY2FsbGJhY2soc2Vs Zi5jYWxsYmFjaykgaWYgc2VsZi5jYWxsYmFjayBlbHNlIE5vbmUKKyAgKiAKKyAgKiAgICAgZGVm IG1wdl9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAgICAgICAgIHRyeToKKyAgKiAgICAgICAgICAgICBjYWxsYmFjaygpCisgICovCist ICBfX3B5eF90dXBsZV9fNDQgPSBQeVR1cGxlX1BhY2soMywgX19weXhfbl9zX3NlbGYsIF9fcHl4 X25fc19jYWxsYmFjaywgX19weXhfbl9zX2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX180 NCkpIF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX180 NCA9IFB5VHVwbGVfUGFjaygzLCBfX3B5eF9uX3Nfc2VsZiwgX19weXhfbl9zX2NhbGxiYWNrLCBf X3B5eF9uX3NfZSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzQ0KSkgX19QWVhfRVJSKDAs IDExNTksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX180NCk7 CisgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX180NCk7CistICBfX3B5eF9jb2Rlb2JqX180 NSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygyLCAwLCAzLCAwLCBDT19PUFRJTUlaRUR8 Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDQsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5 eF9uX3NfbXB2X2NhbGxiYWNrLCAxMTU3LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2Vs eSghX19weXhfY29kZW9ial9fNDUpKSBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF9jb2Rlb2JqX180NSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygyLCAw LCAzLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDQsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGli c19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfbXB2X2NhbGxiYWNrLCAxMTU5LCBfX3B5eF9lbXB0 eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fNDUpKSBfX1BZWF9FUlIoMCwg MTE1OSwgX19weXhfTDFfZXJyb3IpCisgCisgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisgICog ZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQoX19weXhfdHlwZSwgbG9uZyBfX3B5 eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMjQ4NDAsOSArMjQ4NDAsOSBAQCBzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4 X0luaXRHbG9iYWxzKHZvaWQpIHsKKyAgIGlmIChfX1B5eF9Jbml0U3RyaW5ncyhfX3B5eF9zdHJp bmdfdGFiKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcik7CisgICBfX3B5eF9p bnRfMCA9IFB5SW50X0Zyb21Mb25nKDApOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8wKSkgX19Q WVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfaW50XzEgPSBQeUludF9Gcm9t TG9uZygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfMSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fcHl4X2ludF8yID0gUHlJbnRfRnJvbUxvbmcoMik7IGlmICh1bmxp a2VseSghX19weXhfaW50XzIpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisgICBf X3B5eF9pbnRfMyA9IFB5SW50X0Zyb21Mb25nKDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8z KSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfaW50XzMyID0gUHlJ bnRfRnJvbUxvbmcoMzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8zMikpIF9fUFlYX0VSUigw LCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X2ludF8xMDkgPSBQeUludF9Gcm9tTG9uZygx MDkpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8xMDkpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhf TDFfZXJyb3IpCisgICBfX3B5eF9pbnRfNTcxMzE2OSA9IFB5SW50X0Zyb21Mb25nKDU3MTMxNjlM KTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfNTcxMzE2OSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fcHl4X2ludF85MDk1ODI2MiA9IFB5SW50X0Zyb21Mb25nKDkwOTU4 MjYyTCk7IGlmICh1bmxpa2VseSghX19weXhfaW50XzkwOTU4MjYyKSkgX19QWVhfRVJSKDAsIDEs IF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfaW50XzE0MjAzNjkxMCA9IFB5SW50X0Zyb21Mb25n KDE0MjAzNjkxMEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8xNDIwMzY5MTApKSBfX1BZWF9F UlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCitAQCAtMjQ4OTcsMTIyICsyNDg5NywxMjIgQEAgc3Rh dGljIGludCBfX1B5eF9tb2Rpbml0X3R5cGVfaW5pdF9jb2RlKHZvaWQpIHsKKyAgIC8qLS0tIFR5 cGUgaW5pdCBjb2RlIC0tLSovCisgICBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9FbmRPZkZpbGVSZWFjaGVkID0gJl9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RW5kT2ZGaWxlUmVhY2hlZDsKKyAgIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RW5kT2ZGaWxlUmVhY2hlZC5faW5pdCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKiwgc3RydWN0IG1wdl9ldmVu dF9lbmRfZmlsZSAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJl YWNoZWRfX2luaXQ7CistICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9fcHl4 X0wxX2Vycm9yKQorKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCkgPCAwKSBfX1BZWF9FUlIoMCwgMTU4LCBfX3B5eF9M MV9lcnJvcikKKyAgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKKyAgIF9fcHl4X3R5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQudHBfcHJpbnQgPSAwOwor ICAgI2VuZGlmCisgICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZ VFlQRV9MT09LVVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RW5kT2ZGaWxlUmVhY2hlZC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQudHBfZ2V0YXR0cm8gPT0gUHlPYmplY3RfR2VuZXJp Y0dldEF0dHIpKSB7CisgICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9m RmlsZVJlYWNoZWQudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0cjsK KyAgIH0KKy0gIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRW5kT2ZGaWxlUmVhY2hlZC50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9fcHl4 X0wxX2Vycm9yKQorLSAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX0Vu ZE9mRmlsZVJlYWNoZWQsIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9fcHl4X0wxX2Vy cm9yKQorLSAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAx NTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldFZ0YWJsZShfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLnRwX2RpY3QsIF9fcHl4X3Z0YWJw dHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwgMCkgX19QWVhfRVJS KDAsIDE1OCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9t LCBfX3B5eF9uX3NfRW5kT2ZGaWxlUmVhY2hlZCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwgMCkgX19QWVhfRVJSKDAsIDE1 OCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCop Jl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwgMCkg X19QWVhfRVJSKDAsIDE1OCwgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF9wdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkOworICAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZSA9ICZfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2U7CisgICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xv Z01lc3NhZ2UuX2luaXQgPSAoUHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICosIHN0cnVjdCBtcHZfZXZlbnRfbG9nX21lc3NhZ2Ug KikpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX19pbml0OworLSAg aWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVz c2FnZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeVR5 cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UpIDwg MCkgX19QWVhfRVJSKDAsIDE4NCwgX19weXhfTDFfZXJyb3IpCisgICAjaWYgUFlfVkVSU0lPTl9I RVggPCAweDAzMDgwMEIxCisgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlLnRwX3ByaW50ID0gMDsKKyAgICNlbmRpZgorICAgaWYgKChDWVRIT05fVVNFX1RZUEVf U0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UudHBfZGljdG9mZnNldCAmJiBfX3B5eF90 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLnRwX2dldGF0dHJvID09IFB5T2Jq ZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworICAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Mb2dNZXNzYWdlLnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0 dHI7CisgICB9CistICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0xvZ01lc3NhZ2UudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfTG9nTWVzc2FnZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJv cikKKy0gIGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19Mb2dNZXNzYWdl LCAoUHlPYmplY3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2Fn ZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChfX1B5eF9z ZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf TG9nTWVzc2FnZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikKKysgIGlm IChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVz c2FnZS50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlKSA8IDApIF9fUFlYX0VSUigwLCAxODQsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5T2Jq ZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX0xvZ01lc3NhZ2UsIChQeU9iamVjdCAqKSZf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKSA8IDApIF9fUFlYX0VS UigwLCAxODQsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlP YmplY3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKSA8IDAp IF9fUFlYX0VSUigwLCAxODQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfcHR5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfTG9nTWVzc2FnZTsKKyAgIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2 X1Byb3BlcnR5ID0gJl9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHk7 CisgICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5Ll9pbml0ID0g KFB5T2JqZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJv cGVydHkgKiwgc3RydWN0IG1wdl9ldmVudF9wcm9wZXJ0eSAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl84UHJvcGVydHlfX2luaXQ7CistICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSkgPCAwKSBfX1BZWF9FUlIoMCwgMjQz LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSA8IDApIF9fUFlYX0VSUigwLCAyNDUsIF9fcHl4X0wx X2Vycm9yKQorICAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQorICAgX19weXhfdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfcHJpbnQgPSAwOworICAgI2VuZGlm CisgICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09L VVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHku dHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eS50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKyAgICAgX19weXhf dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZ2V0YXR0cm8gPSBfX1B5eF9Q eU9iamVjdF9HZW5lcmljR2V0QXR0cjsKKyAgIH0KKy0gIGlmIChfX1B5eF9TZXRWdGFibGUoX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZGljdCwgX19weXhfdnRh YnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpIDwgMCkgX19QWVhfRVJSKDAsIDI0 MywgX19weXhfTDFfZXJyb3IpCistICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5 eF9uX3NfUHJvcGVydHksIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eSkgPCAwKSBfX1BZWF9FUlIoMCwgMjQzLCBfX3B5eF9MMV9lcnJvcikKKy0g IGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUHJvcGVydHkpIDwgMCkgX19QWVhfRVJSKDAsIDI0MywgX19weXhfTDFfZXJy b3IpCisrICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X1Byb3BlcnR5LnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2 X1Byb3BlcnR5KSA8IDApIF9fUFlYX0VSUigwLCAyNDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX1Byb3BlcnR5LCAoUHlPYmplY3Qg KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpIDwgMCkgX19QWVhf RVJSKDAsIDI0NSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQ eU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSA8IDAp IF9fUFlYX0VSUigwLCAyNDUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfcHR5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ID0gJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X1Byb3BlcnR5OworICAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZl bnQgPSAmX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudDsKKyAgIF9fcHl4 X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQuX2RhdGEgPSAoUHlPYmplY3QgKigq KShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqLCBzdHJ1Y3Qg bXB2X2V2ZW50ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9fZGF0YTsK KyAgIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQuX2luaXQgPSAoUHlP YmplY3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAq LCBzdHJ1Y3QgbXB2X2V2ZW50ICosIFB5T2JqZWN0ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2XzVFdmVudF9faW5pdDsKKy0gIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KSA8IDApIF9fUFlYX0VSUigwLCAyNTYsIF9fcHl4X0wx X2Vycm9yKQorKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRXZlbnQpIDwgMCkgX19QWVhfRVJSKDAsIDI1OCwgX19weXhfTDFfZXJyb3IpCisgICAj aWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCisgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FdmVudC50cF9wcmludCA9IDA7CisgICAjZW5kaWYKKyAgIGlmICgoQ1lUSE9O X1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC50cF9kaWN0b2Zmc2V0ICYmIF9f cHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50LnRwX2dldGF0dHJvID09IFB5T2Jq ZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworICAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudC50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOwor ICAgfQorLSAgaWYgKF9fUHl4X1NldFZ0YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudC50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudCkgPCAwKSBfX1BZWF9FUlIoMCwgMjU2LCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChQeU9i amVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19FdmVudCwgKFB5T2JqZWN0ICopJl9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KSA8IDApIF9fUFlYX0VSUigwLCAyNTYs IF9fcHl4X0wxX2Vycm9yKQorLSAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCkgPCAwKSBfX1BZWF9FUlIoMCwg MjU2LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRXZlbnQpIDwgMCkgX19QWVhfRVJSKDAsIDI1OCwgX19weXhfTDFfZXJy b3IpCisrICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfRXZlbnQsIChQ eU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCkgPCAwKSBf X1BZWF9FUlIoMCwgMjU4LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9zZXR1cF9yZWR1 Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpIDwg MCkgX19QWVhfRVJSKDAsIDI1OCwgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF9wdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRXZlbnQ7CisgICBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ID0gJl9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dDsKKyAgIF9fcHl4 X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC5fcHJlcF9ub2RlX2xpc3QgPSAo c3RydWN0IG1wdl9ub2RlX2xpc3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICosIFB5T2JqZWN0ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0X19wcmVwX25vZGVfbGlzdDsKKyAgIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dC5fcHJlcF9ub2RlX21hcCA9IChzdHJ1Y3QgbXB2X25vZGVfbGlz dCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKiwg UHlPYmplY3QgKikpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBf bm9kZV9tYXA7CisgICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQu X3ByZXBfbmF0aXZlX3ZhbHVlID0gKHN0cnVjdCBtcHZfbm9kZSAoKikoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAq KSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9uYXRpdmVfdmFs dWU7CisgICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQuX2ZyZWVf bmF0aXZlX3ZhbHVlID0gKFB5T2JqZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCAqLCBzdHJ1Y3QgbXB2X25vZGUpKV9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0X19mcmVlX25hdGl2ZV92YWx1ZTsKKy0gIGlmIChQeVR5cGVf UmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19Q WVhfRVJSKDAsIDM1OSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5 eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCAz NjEsIF9fcHl4X0wxX2Vycm9yKQorICAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQor ICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC50cF9wcmludCA9IDA7 CisgICAjZW5kaWYKKyAgIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0Vf UFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0LnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dC50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKyAg ICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC50cF9nZXRhdHRybyA9 IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOworICAgfQorLSAgaWYgKF9fUHl4X1NldFZ0 YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LnRwX2RpY3QsIF9f cHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJS KDAsIDM1OSwgX19weXhfTDFfZXJyb3IpCistICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9t LCBfX3B5eF9uX3NfQ29udGV4dCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDM1OSwgX19weXhfTDFfZXJyb3Ip CistICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDM1OSwgX19weXhfTDFf ZXJyb3IpCisrICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMzYxLCBfX3B5eF9MMV9lcnJvcikKKysgIGlm IChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19Db250ZXh0LCAoUHlPYmplY3Qg KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCkgPCAwKSBfX1BZWF9F UlIoMCwgMzYxLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5 T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCkgPCAwKSBf X1BZWF9FUlIoMCwgMzYxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ID0gJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQ7CisgICBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zID0gJl9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFt czsKKyAgIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy5h ZGRfdm9pZHAgPSAoUHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fUmVuZGVyUGFyYW1zICosIGVudW0gbXB2X3JlbmRlcl9wYXJhbV90eXBlLCB2b2lk ICosIHN0cnVjdCBfX3B5eF9vcHRfYXJnc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVy UGFyYW1zX2FkZF92b2lkcCAqX19weXhfb3B0aW9uYWxfYXJncykpX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF92b2lkcDsKKyAgIF9fcHl4X3Z0YWJsZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy5hZGRfaW50ID0gKFB5T2JqZWN0ICoo Kikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAq LCBlbnVtIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSwgaW50KSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRkX2ludDsKKyAgIF9fcHl4X3Z0YWJsZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy5hZGRfc3RyaW5nID0gKFB5T2JqZWN0ICooKiko c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqLCBl bnVtIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSwgY2hhciAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRkX3N0cmluZzsKKy0gIGlmIChQeVR5cGVfUmVhZHko Jl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMpIDwgMCkgX19Q WVhfRVJSKDAsIDg4MSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5 eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKSA8IDApIF9fUFlYX0VS UigwLCA4ODMsIF9fcHl4X0wxX2Vycm9yKQorICAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4 MDBCMQorICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50 cF9wcmludCA9IDA7CisgICAjZW5kaWYKKyAgIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYm IENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zLnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9nZXRhdHRybyA9PSBQeU9iamVj dF9HZW5lcmljR2V0QXR0cikpIHsKKyAgICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX1JlbmRlclBhcmFtcy50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRB dHRyOworICAgfQorLSAgaWYgKF9fUHl4X1NldFZ0YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zLnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMpIDwgMCkgX19QWVhfRVJSKDAsIDg4MSwgX19weXhf TDFfZXJyb3IpCistICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfUmVu ZGVyUGFyYW1zLCAoUHlPYmplY3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X1JlbmRlclBhcmFtcykgPCAwKSBfX1BZWF9FUlIoMCwgODgxLCBfX3B5eF9MMV9lcnJvcikKKy0g IGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcykgPCAwKSBfX1BZWF9FUlIoMCwgODgxLCBfX3B5eF9M MV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKSA8IDApIF9fUFlYX0VSUigwLCA4ODMsIF9fcHl4X0wx X2Vycm9yKQorKyAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX1JlbmRl clBhcmFtcywgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19S ZW5kZXJQYXJhbXMpIDwgMCkgX19QWVhfRVJSKDAsIDg4MywgX19weXhfTDFfZXJyb3IpCisrICBp ZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X19SZW5kZXJQYXJhbXMpIDwgMCkgX19QWVhfRVJSKDAsIDg4MywgX19weXhfTDFf ZXJyb3IpCisgICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFt cyA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zOworICAg X19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvID0gJl9f cHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvOworICAgX19w eXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8uX2Zyb21fc3Ry dWN0ID0gKFB5T2JqZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyRnJhbWVJbmZvICosIHN0cnVjdCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKikpX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fX2Zyb21fc3RydWN0 OworLSAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyRnJhbWVJbmZvKSA8IDApIF9fUFlYX0VSUigwLCA5MjgsIF9fcHl4X0wxX2Vycm9yKQor KyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVu ZGVyRnJhbWVJbmZvKSA8IDApIF9fUFlYX0VSUigwLCA5MzAsIF9fcHl4X0wxX2Vycm9yKQorICAg I2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQorICAgX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX3ByaW50ID0gMDsKKyAgICNlbmRpZgorICAg aWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAm JiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5m by50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckZyYW1lSW5mby50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKyAg ICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2dl dGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7CisgICB9CistICBpZiAoX19Q eXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1l SW5mby50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJG cmFtZUluZm8pIDwgMCkgX19QWVhfRVJSKDAsIDkyOCwgX19weXhfTDFfZXJyb3IpCistICBpZiAo X19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X1JlbmRlckZyYW1lSW5mbykgPCAwKSBfX1BZWF9FUlIoMCwgOTI4LCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80 bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbykgPCAwKSBfX1BZWF9FUlIoMCwgOTMwLCBfX3B5eF9M MV9lcnJvcikKKysgIGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvKSA8IDApIF9fUFlYX0VSUigw LCA5MzAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckZyYW1lSW5mbyA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9S ZW5kZXJGcmFtZUluZm87CistICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCA5MzcsIF9fcHl4 X0wxX2Vycm9yKQorKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgOTM5LCBfX3B5eF9MMV9l cnJvcikKKyAgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKKyAgIF9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQudHBfcHJpbnQgPSAwOworICAgI2Vu ZGlmCisgICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9M T09LVVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X1JlbmRlckNvbnRleHQudHBfZ2V0YXR0cm8gPT0gUHlPYmplY3RfR2VuZXJpY0dldEF0dHIpKSB7 CisgICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQudHBf Z2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0cjsKKyAgIH0KKy0gIGlmIChQ eU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19SZW5kZXJDb250ZXh0LCAoUHlPYmpl Y3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCkgPCAw KSBfX1BZWF9FUlIoMCwgOTM3LCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChfX1B5eF9zZXR1cF9y ZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgOTM3LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQ eU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19SZW5kZXJDb250ZXh0LCAoUHlPYmpl Y3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCkgPCAw KSBfX1BZWF9FUlIoMCwgOTM5LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9zZXR1cF9y ZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgOTM5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ID0gJl9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQ7CisgICBfX3B5eF90eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2Jhc2UgPSBfX3B5eF9wdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dDsKKy0gIGlmIChQeVR5cGVfUmVh ZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQp IDwgMCkgX19QWVhfRVJSKDAsIDExMjIsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5VHlwZV9S ZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4 dCkgPCAwKSBfX1BZWF9FUlIoMCwgMTEyNCwgX19weXhfTDFfZXJyb3IpCisgICAjaWYgUFlfVkVS U0lPTl9IRVggPCAweDAzMDgwMEIxCisgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX3ByaW50ID0gMDsKKyAgICNlbmRpZgorICAgaWYgKChD WVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtl bHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQu dHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xS ZW5kZXJDb250ZXh0LnRwX2dldGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgewor ICAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0 LnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7CisgICB9CistICBp ZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfT3BlbkdMUmVuZGVyQ29udGV4 dCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJl bmRlckNvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDExMjIsIF9fcHl4X0wxX2Vycm9yKQorLSAg aWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCAxMTIyLCBf X3B5eF9MMV9lcnJvcikKKysgIGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25f c19PcGVuR0xSZW5kZXJDb250ZXh0LCAoUHlPYmplY3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMTEyNCwg X19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9f cHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQpIDwgMCkg X19QWVhfRVJSKDAsIDExMjQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfcHR5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQgPSAmX19weXhfdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dDsKKy0gIGlmIChQeVR5cGVfUmVhZHko Jl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vy cm9ycykgPCAwKSBfX1BZWF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeVR5 cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0 cnVjdF9fX2Vycm9ycykgPCAwKSBfX1BZWF9FUlIoMCwgMzIwLCBfX3B5eF9MMV9lcnJvcikKKyAg ICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKKyAgIF9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycy50cF9wcmludCA9IDA7Cisg ICAjZW5kaWYKK0BAIC0yNTMxNSwyOSArMjUzMTUsMjkgQEAgaWYgKCFfX1B5eF9SZWZOYW5ueSkg eworICAqIF9fdmVyc2lvbl9fID0gIjAuMy4wIgorICAqIF9fYXV0aG9yX18gPSAiQW5kcmUgRCIg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorLSAqIF9SRVFVSVJFRF9DQVBJX01B Sk9SID0gMgorKyAqICNfUkVRVUlSRURfQ0FQSV9NQUpPUiA9IDIKKyAgKi8KKyAgIGlmIChQeURp Y3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfYXV0aG9yLCBfX3B5eF9rcF9zX0FuZHJlX0Qp IDwgMCkgX19QWVhfRVJSKDAsIDMxLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMworLSAqIF9fYXV0aG9yX18gPSAiQW5kcmUgRCIKKy0g KiAKKy0gKiBfUkVRVUlSRURfQ0FQSV9NQUpPUiA9IDIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqIF9NSU5fQ0FQSV9NSU5PUiA9IDAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozNQorKyAqICNfUkVRVUlSRURfQ0FQSV9NQUpPUiA9IDIKKysgKiAjX01JTl9D QVBJX01JTk9SID0gMAorKyAqIF9SRVFVSVJFRF9DQVBJX01BSk9SID0gMSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogX01JTl9DQVBJX01JTk9SID0gMTA5CisgICogCisgICovCist ICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX1JFUVVJUkVEX0NBUElfTUFK T1IsIF9fcHl4X2ludF8yKSA8IDApIF9fUFlYX0VSUigwLCAzMywgX19weXhfTDFfZXJyb3IpCisr ICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX1JFUVVJUkVEX0NBUElfTUFK T1IsIF9fcHl4X2ludF8xKSA8IDApIF9fUFlYX0VSUigwLCAzNSwgX19weXhfTDFfZXJyb3IpCisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQKKy0gKiAKKy0gKiBfUkVR VUlSRURfQ0FQSV9NQUpPUiA9IDIKKy0gKiBfTUlOX0NBUElfTUlOT1IgPSAwICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz NgorKyAqICNfTUlOX0NBUElfTUlOT1IgPSAwCisrICogX1JFUVVJUkVEX0NBUElfTUFKT1IgPSAx CisrICogX01JTl9DQVBJX01JTk9SID0gMTA5ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KyAgKiAKKyAgKiBjZGVmIHVuc2lnbmVkIGxvbmcgX0NBUElfVkVSU0lPTgorICAqLworLSAgaWYg KFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUiwgX19weXhf aW50XzApIDwgMCkgX19QWVhfRVJSKDAsIDM0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeURp Y3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfTUlOX0NBUElfTUlOT1IsIF9fcHl4X2ludF8x MDkpIDwgMCkgX19QWVhfRVJSKDAsIDM2LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM5CisgICogCisgICogY2RlZiB1bnNpZ25lZCBsb25nIF9DQVBJX1ZFUlNJT04K KyAgKiB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjUzNTIs NyArMjUzNTIsNyBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7CisgICAgICAgI2VuZGlmCisgICAg ICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjM4CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDAKKyAg KiBjZGVmIHVuc2lnbmVkIGxvbmcgX0NBUElfVkVSU0lPTgorICAqIHdpdGggbm9naWw6CisgICog ICAgIF9DQVBJX1ZFUlNJT04gPSBtcHZfY2xpZW50X2FwaV92ZXJzaW9uKCkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTI1MzYyLDcgKzI1MzYyLDcgQEAgaWYgKCFfX1B5eF9SZWZO YW5ueSkgeworICAgICAgICAgX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX0NBUElfVkVS U0lPTiA9IG1wdl9jbGllbnRfYXBpX3ZlcnNpb24oKTsKKyAgICAgICB9CisgCistICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3CisrICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjM5CisgICogCisgICogY2RlZiB1bnNpZ25lZCBsb25nIF9DQVBJ X1ZFUlNJT04KKyAgKiB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMjUzODEsODAgKzI1MzgxLDgwIEBAIGlmICghX19QeXhfUmVmTmFubnkpIHsKKyAgICAgICB9 CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDAKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MgorICAqICAgICBfQ0FQSV9WRVJTSU9O ID0gbXB2X2NsaWVudF9hcGlfdmVyc2lvbigpCisgICogCisgICogX0NBUElfTUFKT1IgPSBfQ0FQ SV9WRVJTSU9OID4+IDE2ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiBfQ0FQSV9N SU5PUiA9IF9DQVBJX1ZFUlNJT04gJiAweEZGRkYKKyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfMiA9 IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZygoX19weXhfdl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX0NBUElfVkVSU0lPTiA+PiAxNikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9f UFlYX0VSUigwLCA0MCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUlu dF9Gcm9tX3Vuc2lnbmVkX2xvbmcoKF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19DQVBJ X1ZFUlNJT04gPj4gMTYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg NDIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBpZiAo UHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX0NBUElfTUFKT1IsIF9fcHl4X3RfMikg PCAwKSBfX1BZWF9FUlIoMCwgNDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5RGljdF9TZXRJ dGVtKF9fcHl4X2QsIF9fcHl4X25fc19DQVBJX01BSk9SLCBfX3B5eF90XzIpIDwgMCkgX19QWVhf RVJSKDAsIDQyLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQx CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMKKyAgKiAKKyAgKiBfQ0FQ SV9NQUpPUiA9IF9DQVBJX1ZFUlNJT04gPj4gMTYKKyAgKiBfQ0FQSV9NSU5PUiA9IF9DQVBJX1ZF UlNJT04gJiAweEZGRkYgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorICAqIGlm IF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01BSk9SIG9yIF9DQVBJX01JTk9SIDwgX01J Tl9DQVBJX01JTk9SOgorICAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV91bnNp Z25lZF9sb25nKChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fQ0FQSV9WRVJTSU9OICYg MHhGRkZGKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQxLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9u ZygoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX0NBUElfVkVSU0lPTiAmIDB4RkZGRikp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0MywgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShf X3B5eF9kLCBfX3B5eF9uX3NfQ0FQSV9NSU5PUiwgX19weXhfdF8yKSA8IDApIF9fUFlYX0VSUigw LCA0MSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19w eXhfbl9zX0NBUElfTUlOT1IsIF9fcHl4X3RfMikgPCAwKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4 X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NQorICAqIF9DQVBJX01JTk9SID0gX0NBUElfVkVSU0lP TiAmIDB4RkZGRgorICAqIAorICAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01B Sk9SIG9yIF9DQVBJX01JTk9SIDwgX01JTl9DQVBJX01JTk9SOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgIHJhaXNlIEltcG9ydEVycm9yKAorICAqICAgICAgICAgImxpYm1w diB2ZXJzaW9uIGlzIGluY29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJQorICAq LworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19DQVBJ X01BSk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4 X25fc19DQVBJX01BSk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg NDUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX1B5 eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhfbl9zX1JFUVVJUkVEX0NBUElf TUFKT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0MywgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhf bl9zX1JFUVVJUkVEX0NBUElfTUFKT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA0NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gIF9fcHl4X3RfNCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3RfMiwgX19weXhfdF8x LCBQeV9ORSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzQpKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF80ID0gUHlP YmplY3RfUmljaENvbXBhcmUoX19weXhfdF8yLCBfX3B5eF90XzEsIFB5X05FKTsgX19QeXhfWEdP VFJFRihfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA0 NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8y ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgX19w eXhfdF81ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNCk7IGlmICh1bmxpa2VseShf X3B5eF90XzUgPCAwKSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoX19w eXhfdF81IDwgMCkpIF9fUFlYX0VSUigwLCA0NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9E RUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgIGlmICghX19weXhfdF81KSB7Cisg ICB9IGVsc2UgeworICAgICBfX3B5eF90XzMgPSBfX3B5eF90XzU7CisgICAgIGdvdG8gX19weXhf TDZfYm9vbF9iaW5vcF9kb25lOworICAgfQorLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShf X3B5eF90XzQsIF9fcHl4X25fc19DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwg X19weXhfbl9zX01JTl9DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzEsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhf dF80LCBfX3B5eF90XzEsIFB5X0xUKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzIpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0MywgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzIgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF90XzQsIF9fcHl4X3RfMSwgUHlf TFQpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDQ1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3Rf MSA9IDA7CistICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8yKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfNSA8IDApKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlm ICh1bmxpa2VseShfX3B5eF90XzUgPCAwKSkgX19QWVhfRVJSKDAsIDQ1LCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19weXhf dF8zID0gX19weXhfdF81OworICAgX19weXhfTDZfYm9vbF9iaW5vcF9kb25lOjsKKyAgIGlmICh1 bmxpa2VseShfX3B5eF90XzMpKSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0NgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDgKKyAg KiAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCisgICogICAgICAgICAibGlibXB2IHZlcnNpb24gaXMg aW5jb3JyZWN0LiBSZXF1aXJlZCAlZC4lZCBnb3QgJWQuJWQuIiAlCisgICogICAgICAgICAgICAg KF9SRVFVSVJFRF9DQVBJX01BSk9SLCBfTUlOX0NBUElfTUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQ SV9NSU5PUikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICApCisgICogCisg ICovCistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nf UkVRVUlSRURfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShf X3B5eF90XzIsIF9fcHl4X25fc19SRVFVSVJFRF9DQVBJX01BSk9SKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzEsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzEsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ4LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF80LCBfX3B5eF9uX3NfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkg X19QWVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19DQVBJX01BSk9SKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF80KTsKKy0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzYsIF9fcHl4X25fc19DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgNDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxO YW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX0NBUElfTUlOT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCA0OCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOworLSAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X3B5eF90XzcgPSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZ WF9FUlIoMCwgNDgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83 KTsKKyAgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzIpOworICAgICBQeVR1cGxlX1NFVF9JVEVN KF9fcHl4X3RfNywgMCwgX19weXhfdF8yKTsKK0BAIC0yNTQ2OSwzMiArMjU0NjksMzIgQEAgaWYg KCFfX1B5eF9SZWZOYW5ueSkgeworICAgICBfX3B5eF90XzQgPSAwOworICAgICBfX3B5eF90XzYg PSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUKKysgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3CisgICogaWYgX0NBUElfTUFKT1Ig IT0gX1JFUVVJUkVEX0NBUElfTUFKT1Igb3IgX0NBUElfTUlOT1IgPCBfTUlOX0NBUElfTUlOT1I6 CisgICogICAgIHJhaXNlIEltcG9ydEVycm9yKAorICAqICAgICAgICAgImxpYm1wdiB2ZXJzaW9u IGlzIGluY29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgKF9SRVFVSVJFRF9DQVBJX01BSk9SLCBf TUlOX0NBUElfTUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQSV9NSU5PUikKKyAgKiAgICAgKQorICAq LworLSAgICBfX3B5eF90XzYgPSBfX1B5eF9QeVN0cmluZ19Gb3JtYXQoX19weXhfa3Bfc19saWJt cHZfdmVyc2lvbl9pc19pbmNvcnJlY3RfUmVxdSwgX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90 XzYgPSBfX1B5eF9QeVN0cmluZ19Gb3JtYXQoX19weXhfa3Bfc19saWJtcHZfdmVyc2lvbl9pc19p bmNvcnJlY3RfUmVxdSwgX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgNDcsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82 KTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NAorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NDYKKyAgKiAKKyAgKiBpZiBfQ0FQSV9NQUpPUiAhPSBfUkVR VUlSRURfQ0FQSV9NQUpPUiBvciBfQ0FQSV9NSU5PUiA8IF9NSU5fQ0FQSV9NSU5PUjoKKyAgKiAg ICAgcmFpc2UgSW1wb3J0RXJyb3IoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgICAgICJsaWJtcHYgdmVyc2lvbiBpcyBpbmNvcnJlY3QuIFJlcXVpcmVkICVkLiVkIGdvdCAl ZC4lZC4iICUKKyAgKiAgICAgICAgICAgICAoX1JFUVVJUkVEX0NBUElfTUFKT1IsIF9NSU5fQ0FQ SV9NSU5PUiwgX0NBUElfTUFKT1IsIF9DQVBJX01JTk9SKQorICAqLworLSAgICBfX3B5eF90Xzcg PSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5fSW1wb3J0RXJyb3IsIF9f cHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ0LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF9idWlsdGluX0ltcG9ydEVycm9yLCBfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNykpIF9fUFlYX0VSUigwLCA0NiwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzcpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKKyAgICAgX19QeXhfUmFpc2UoX19weXhfdF83LCAwLCAwLCAwKTsKKyAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICAgIF9fUFlYX0VSUigwLCA0NCwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUFlYX0VSUigwLCA0NiwgX19weXhfTDFfZXJyb3IpCisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MworKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUKKyAgKiBfQ0FQSV9NSU5PUiA9IF9DQVBJX1ZFUlNJ T04gJiAweEZGRkYKKyAgKiAKKyAgKiBpZiBfQ0FQSV9NQUpPUiAhPSBfUkVRVUlSRURfQ0FQSV9N QUpPUiBvciBfQ0FQSV9NSU5PUiA8IF9NSU5fQ0FQSV9NSU5PUjogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTI1NTAzLDMzICsyNTUwMywzMyBAQCBpZiAoIV9fUHl4X1JlZk5hbm55 KSB7CisgICovCisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NAorICAqICAgICB2b2lk IFB5X0luaXRpYWxpemUoKQorICAqIAorICAqIF9pc19weTMgPSBzeXMudmVyc2lvbl9pbmZvID49 ICgzLCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIF9zdHJkZWNfZXJyID0gInN1 cnJvZ2F0ZWVzY2FwZSIgaWYgX2lzX3B5MyBlbHNlICJzdHJpY3QiCisgICogIyBtcHYgLT4gUHl0 aG9uCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNywgX19weXhf bl9zX3N5cyk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDUyLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5 eF9uX3Nfc3lzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNTQsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICBfX3B5eF90XzYg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNywgX19weXhfbl9zX3ZlcnNpb25f aW5mbyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDUyLCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhf dF83LCBfX3B5eF9uX3NfdmVyc2lvbl9pbmZvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgNTQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nik7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gIF9fcHl4 X3RfNyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3RfNiwgX19weXhfdHVwbGVfXzE4LCBQ eV9HRSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90Xzcp KSBfX1BZWF9FUlIoMCwgNTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF83ID0gUHlPYmpl Y3RfUmljaENvbXBhcmUoX19weXhfdF82LCBfX3B5eF90dXBsZV9fMTgsIFB5X0dFKTsgX19QeXhf WEdPVFJFRihfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigw LCA1NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfaXNfcHkz LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDUyLCBfX3B5eF9MMV9lcnJvcikKKysgIGlm IChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfaXNfcHkzLCBfX3B5eF90XzcpIDwg MCkgX19QWVhfRVJSKDAsIDU0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzcpOyBfX3B5eF90XzcgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjUzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTUKKyAgKiAK KyAgKiBfaXNfcHkzID0gc3lzLnZlcnNpb25faW5mbyA+PSAoMywpCisgICogX3N0cmRlY19lcnIg PSAic3Vycm9nYXRlZXNjYXBlIiBpZiBfaXNfcHkzIGVsc2UgInN0cmljdCIgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICMgbXB2IC0+IFB5dGhvbgorICAqIGRlZiBfc3RyZGVjKHMp OgorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25f c19pc19weTMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA1MywgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19w eXhfbl9zX2lzX3B5Myk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDU1 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgX19weXhf dF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNik7IGlmICh1bmxpa2VseShfX3B5 eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDUzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3Rf MyA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoX19weXhf dF8zIDwgMCkpIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNS RUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAgIGlmIChfX3B5eF90XzMpIHsKKyAgICAg X19QeXhfSU5DUkVGKF9fcHl4X25fc19zdXJyb2dhdGVlc2NhcGUpOworQEAgLTI1NTM4LDM0ICsy NTUzOCwzNCBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7CisgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF9uX3Nfc3RyaWN0KTsKKyAgICAgX19weXhfdF83ID0gX19weXhfbl9zX3N0cmljdDsKKyAgIH0K Ky0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3Nfc3RyZGVjX2VyciwgX19w eXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA1MywgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlE aWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmRlY19lcnIsIF9fcHl4X3RfNykgPCAw KSBfX1BZWF9FUlIoMCwgNTUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NworICAqIF9z dHJkZWNfZXJyID0gInN1cnJvZ2F0ZWVzY2FwZSIgaWYgX2lzX3B5MyBlbHNlICJzdHJpY3QiCisg ICogIyBtcHYgLT4gUHl0aG9uCisgICogZGVmIF9zdHJkZWMocyk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgdHJ5OgorICAqICAgICAgICAgcmV0dXJuIHMuZGVjb2RlKCJ1 dGYtOCIsIF9zdHJkZWNfZXJyKQorICAqLworLSAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25fTmV3 RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzFfc3RyZGVjLCBOVUxMLCBfX3B5 eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZ WF9FUlIoMCwgNTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25f TmV3RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzFfc3RyZGVjLCBOVUxMLCBf X3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBf X1BZWF9FUlIoMCwgNTcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nyk7CistICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmRlYywgX19w eXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlE aWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmRlYywgX19weXhfdF83KSA8IDApIF9f UFlYX0VSUigwLCA1NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF83 KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo2MworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1CisgICogCisgICog IyBQeXRob24gLT4gbXB2CisgICogZGVmIF9zdHJlbmMocyk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKyAgKiAgICAgdHJ5OgorICAqICAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCJ1dGYt OCIsIF9zdHJkZWNfZXJyKQorICAqLworLSAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25fTmV3RXgo Jl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzNfc3RyZW5jLCBOVUxMLCBfX3B5eF9u X3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9F UlIoMCwgNjMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25fTmV3 RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzNfc3RyZW5jLCBOVUxMLCBfX3B5 eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZ WF9FUlIoMCwgNjUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7 CistICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmVuYywgX19weXhf dF83KSA8IDApIF9fUFlYX0VSUigwLCA2MywgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlEaWN0 X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmVuYywgX19weXhfdF83KSA8IDApIF9fUFlY X0VSUigwLCA2NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsg X19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyCisgICogICAgICAgICBy ZXR1cm4gcworICAqIAorICAqIFB5X0luaXRpYWxpemUoKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMjU1NzQsODgzICsyNTU3NCw4ODMgQEAgaWYgKCFfX1B5eF9SZWZOYW5ueSkg eworICAqLworICAgUHlfSW5pdGlhbGl6ZSgpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjcyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQK KyAgKiBQeV9Jbml0aWFsaXplKCkKKyAgKiAKKyAgKiBjbGFzcyBFcnJvcnM6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgIiIiU2V0IG9mIGtub3duIGVycm9yIGNvZGVzIGZy b20gTXB2RXJyb3IgYW5kIEV2ZW50IHJlc3BvbnNlcy4KKyAgKiAKKyAgKi8KKy0gIF9fcHl4X3Rf NyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF9uX3NfRXJyb3JzLCBfX3B5eF9uX3NfRXJyb3JzLCAoUHlPYmplY3Qg KikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfa3Bfc19TZXRfb2Zf a25vd25fZXJyb3JfY29kZXNfZnJvbV9NcCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19Q WVhfRVJSKDAsIDcyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNyA9IF9fUHl4X1B5M01l dGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9uX3NfRXJyb3JzLCBfX3B5eF9uX3NfRXJyb3JzLCAoUHlPYmplY3QgKikgTlVMTCwgX19weXhf bl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfa3Bfc19TZXRfb2Zfa25vd25fZXJyb3JfY29k ZXNfZnJvbV9NcCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDc0LCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6ODEKKyAgKiAgICAgWW91IHNob3VsZCBoYW5kbGUgdGhlIHBvc3NpYmlsaXR5 IHRoYXQgZXJyb3IgY29kZXMgbWF5IG5vdCBiZSBhbnkgb2YgdGhlc2UgdmFsdWVzLgorICAqICAg ICAiIiIKKyAgKiAgICAgc3VjY2VzcyA9IE1QVl9FUlJPUl9TVUNDRVNTICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgcXVldWVfZnVsbCA9IE1QVl9FUlJPUl9FVkVOVF9RVUVV RV9GVUxMCisgICogICAgIG5vbWVtID0gTVBWX0VSUk9SX05PTUVNCisgICovCistICBfX3B5eF90 XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfU1VDQ0VTUyk7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDc5LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9F UlJPUl9TVUNDRVNTKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODEs IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19Q eXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc3VjY2VzcywgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCA3OSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc3VjY2VzcywgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCA4MSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhf dF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo4MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgyCisgICogICAg ICIiIgorICAqICAgICBzdWNjZXNzID0gTVBWX0VSUk9SX1NVQ0NFU1MKKyAgKiAgICAgcXVldWVf ZnVsbCA9IE1QVl9FUlJPUl9FVkVOVF9RVUVVRV9GVUxMICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKyAgKiAgICAgbm9tZW0gPSBNUFZfRVJST1JfTk9NRU0KKyAgKiAgICAgdW5pbml0aWFs aXplZCA9IE1QVl9FUlJPUl9VTklOSVRJQUxJWkVECisgICovCistICBfX3B5eF90XzYgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfRVZFTlRfUVVFVUVfRlVMTCk7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgwLCBfX3B5eF9MMV9lcnJv cikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9F UlJPUl9FVkVOVF9RVUVVRV9GVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgODIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cist ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcXVldWVfZnVs bCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4MCwgX19weXhfTDFfZXJyb3IpCisrICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcXVldWVfZnVsbCwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo4MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjgzCisgICogICAgIHN1Y2Nlc3MgPSBNUFZfRVJST1JfU1VDQ0VTUworICAqICAgICBxdWV1 ZV9mdWxsID0gTVBWX0VSUk9SX0VWRU5UX1FVRVVFX0ZVTEwKKyAgKiAgICAgbm9tZW0gPSBNUFZf RVJST1JfTk9NRU0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICB1bmluaXRp YWxpemVkID0gTVBWX0VSUk9SX1VOSU5JVElBTElaRUQKKyAgKiAgICAgaW52YWxpZF9wYXJhbWV0 ZXIgPSBNUFZfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9f UHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9OT01FTSk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9OT01F TSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgzLCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX25vbWVtLCBfX3B5eF90XzYpIDwgMCkgX19QWVhf RVJSKDAsIDgxLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc19ub21lbSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4 MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MgorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg0CisgICogICAgIHF1ZXVlX2Z1bGwgPSBN UFZfRVJST1JfRVZFTlRfUVVFVUVfRlVMTAorICAqICAgICBub21lbSA9IE1QVl9FUlJPUl9OT01F TQorICAqICAgICB1bmluaXRpYWxpemVkID0gTVBWX0VSUk9SX1VOSU5JVElBTElaRUQgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBpbnZhbGlkX3BhcmFtZXRlciA9IE1QVl9F UlJPUl9JTlZBTElEX1BBUkFNRVRFUgorICAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfT1BU SU9OX05PVF9GT1VORAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVt X19tcHZfZXJyb3IoTVBWX0VSUk9SX1VOSU5JVElBTElaRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCA4MiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBf X1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfVU5JTklUSUFMSVpFRCk7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg0LCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNs YXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3VuaW5pdGlhbGl6ZWQsIF9fcHl4X3RfNikgPCAwKSBf X1BZWF9FUlIoMCwgODIsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNs YXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3VuaW5pdGlhbGl6ZWQsIF9fcHl4X3RfNikgPCAwKSBf X1BZWF9FUlIoMCwgODQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Nik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6ODMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NQorICAqICAgICBu b21lbSA9IE1QVl9FUlJPUl9OT01FTQorICAqICAgICB1bmluaXRpYWxpemVkID0gTVBWX0VSUk9S X1VOSU5JVElBTElaRUQKKyAgKiAgICAgaW52YWxpZF9wYXJhbWV0ZXIgPSBNUFZfRVJST1JfSU5W QUxJRF9QQVJBTUVURVIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBub3Rf Zm91bmQgPSBNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORAorICAqICAgICBvcHRpb25fZm9ybWF0 ID0gTVBWX0VSUk9SX09QVElPTl9GT1JNQVQKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUik7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgzLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJP Ul9JTlZBTElEX1BBUkFNRVRFUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDg1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAg aWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2ludmFsaWRfcGFy YW1ldGVyLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDgzLCBfX3B5eF9MMV9lcnJvcikK KysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19pbnZhbGlk X3BhcmFtZXRlciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4NSwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NAorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjg2CisgICogICAgIHVuaW5pdGlhbGl6ZWQgPSBNUFZfRVJST1JfVU5J TklUSUFMSVpFRAorICAqICAgICBpbnZhbGlkX3BhcmFtZXRlciA9IE1QVl9FUlJPUl9JTlZBTElE X1BBUkFNRVRFUgorICAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VO RCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIG9wdGlvbl9mb3JtYXQgPSBN UFZfRVJST1JfT1BUSU9OX0ZPUk1BVAorICAqICAgICBvcHRpb25fZXJyb3IgPSBNUFZfRVJST1Jf T1BUSU9OX0VSUk9SCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9lcnJvcihNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORCk7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDg0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9PUFRJT05fTk9UX0ZP VU5EKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODYsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFt ZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm90X2ZvdW5kLCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDg0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5D bGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19ub3RfZm91bmQsIF9fcHl4X3RfNikgPCAwKSBfX1BZ WF9FUlIoMCwgODYsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7 IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 ODUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NworICAqICAgICBpbnZh bGlkX3BhcmFtZXRlciA9IE1QVl9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUgorICAqICAgICBub3Rf Zm91bmQgPSBNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORAorICAqICAgICBvcHRpb25fZm9ybWF0 ID0gTVBWX0VSUk9SX09QVElPTl9GT1JNQVQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor ICAqICAgICBvcHRpb25fZXJyb3IgPSBNUFZfRVJST1JfT1BUSU9OX0VSUk9SCisgICogICAgIG5v dF9mb3VuZCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9OT1RfRk9VTkQKKyAgKi8KKy0gIF9fcHl4X3Rf NiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9PUFRJT05fRk9S TUFUKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODUsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3Io TVBWX0VSUk9SX09QVElPTl9GT1JNQVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCA4NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK Ky0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19vcHRpb25f Zm9ybWF0LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg1LCBfX3B5eF9MMV9lcnJvcikK KysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19vcHRpb25f Zm9ybWF0LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg3LCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6ODgKKyAgKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX09QVElPTl9OT1Rf Rk9VTkQKKyAgKiAgICAgb3B0aW9uX2Zvcm1hdCA9IE1QVl9FUlJPUl9PUFRJT05fRk9STUFUCisg ICogICAgIG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJT05fRVJST1IgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfUFJPUEVSVFlf Tk9UX0ZPVU5ECisgICogICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9G T1JNQVQKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vy cm9yKE1QVl9FUlJPUl9PUFRJT05fRVJST1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9f UFlYX0VSUigwLCA4NiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfT1BUSU9OX0VSUk9SKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF83LCBfX3B5eF9uX3Nfb3B0aW9uX2Vycm9yLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAs IDg2LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90 XzcsIF9fcHl4X25fc19vcHRpb25fZXJyb3IsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwg ODgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3Rf NiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODcKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OQorICAqICAgICBvcHRpb25fZm9ybWF0 ID0gTVBWX0VSUk9SX09QVElPTl9GT1JNQVQKKyAgKiAgICAgb3B0aW9uX2Vycm9yID0gTVBWX0VS Uk9SX09QVElPTl9FUlJPUgorICAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfUFJPUEVSVFlf Tk9UX0ZPVU5EICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgcHJvcGVydHlf Zm9ybWF0ID0gTVBWX0VSUk9SX1BST1BFUlRZX0ZPUk1BVAorICAqICAgICBwcm9wZXJ0eV91bmF2 YWlsYWJsZSA9IE1QVl9FUlJPUl9QUk9QRVJUWV9VTkFWQUlMQUJMRQorICAqLworLSAgX19weXhf dF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1BST1BFUlRZ X05PVF9GT1VORCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg3LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2 X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJUWV9OT1RfRk9VTkQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCA4OSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4 X25fc19ub3RfZm91bmQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODcsIF9fcHl4X0wx X2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9z X25vdF9mb3VuZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4OSwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OAorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjkwCisgICogICAgIG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJ T05fRVJST1IKKyAgKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX1BST1BFUlRZX05PVF9GT1VO RAorICAqICAgICBwcm9wZXJ0eV9mb3JtYXQgPSBNUFZfRVJST1JfUFJPUEVSVFlfRk9STUFUICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUg PSBNUFZfRVJST1JfUFJPUEVSVFlfVU5BVkFJTEFCTEUKKyAgKiAgICAgcHJvcGVydHlfZXJyb3Ig PSBNUFZfRVJST1JfUFJPUEVSVFlfRVJST1IKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJUWV9GT1JNQVQpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4OCwgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1Jf UFJPUEVSVFlfRk9STUFUKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg OTAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcHJvcGVydHlfZm9ybWF0 LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg4LCBfX3B5eF9MMV9lcnJvcikKKysgIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV9mb3Jt YXQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTAsIF9fcHl4X0wxX2Vycm9yKQorICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo5MQorICAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfUFJPUEVSVFlfTk9UX0ZP VU5ECisgICogICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9GT1JNQVQK KyAgKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1JfUFJPUEVSVFlfVU5BVkFJ TEFCTEUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBwcm9wZXJ0eV9lcnJv ciA9IE1QVl9FUlJPUl9QUk9QRVJUWV9FUlJPUgorICAqICAgICBjb21tYW5kX2Vycm9yID0gTVBW X0VSUk9SX0NPTU1BTkQKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51 bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJUWV9VTkFWQUlMQUJMRSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJU WV9VTkFWQUlMQUJMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkx LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3Byb3BlcnR5X3VuYXZhaWxh YmxlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg5LCBfX3B5eF9MMV9lcnJvcikKKysg IGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV91 bmF2YWlsYWJsZSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MSwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MAorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjkyCisgICogICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9Q Uk9QRVJUWV9GT1JNQVQKKyAgKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1Jf UFJPUEVSVFlfVU5BVkFJTEFCTEUKKyAgKiAgICAgcHJvcGVydHlfZXJyb3IgPSBNUFZfRVJST1Jf UFJPUEVSVFlfRVJST1IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBjb21t YW5kX2Vycm9yID0gTVBWX0VSUk9SX0NPTU1BTkQKKyAgKiAgICAgbG9hZGluZ19mYWlsZWQgPSBN UFZfRVJST1JfTE9BRElOR19GQUlMRUQKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50 X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJUWV9FUlJPUik7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9Q RVJUWV9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkyLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3Byb3BlcnR5X2Vycm9yLCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDkwLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV9lcnJvciwgX19w eXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjkzCisgICogICAgIHByb3BlcnR5X3VuYXZhaWxhYmxlID0gTVBWX0VSUk9SX1BST1BFUlRZX1VO QVZBSUxBQkxFCisgICogICAgIHByb3BlcnR5X2Vycm9yID0gTVBWX0VSUk9SX1BST1BFUlRZX0VS Uk9SCisgICogICAgIGNvbW1hbmRfZXJyb3IgPSBNUFZfRVJST1JfQ09NTUFORCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGxvYWRpbmdfZmFpbGVkID0gTVBWX0VSUk9SX0xP QURJTkdfRkFJTEVECisgICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX0FPX0lOSVRf RkFJTEVECisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l cnJvcihNUFZfRVJST1JfQ09NTUFORCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDkxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9DT01NQU5EKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgOTMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfY29tbWFuZF9lcnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MSwgX19w eXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfY29tbWFuZF9lcnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MywgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MgorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk0CisgICogICAgIHByb3BlcnR5X2Vycm9yID0gTVBW X0VSUk9SX1BST1BFUlRZX0VSUk9SCisgICogICAgIGNvbW1hbmRfZXJyb3IgPSBNUFZfRVJST1Jf Q09NTUFORAorICAqICAgICBsb2FkaW5nX2ZhaWxlZCA9IE1QVl9FUlJPUl9MT0FESU5HX0ZBSUxF RCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGFvX2luaXRfZmFpbGVkID0g TVBWX0VSUk9SX0FPX0lOSVRfRkFJTEVECisgICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VS Uk9SX1ZPX0lOSVRfRkFJTEVECisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9t X2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfTE9BRElOR19GQUlMRUQpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5MiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90 XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfTE9BRElOR19G QUlMRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5NCwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXRO YW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19sb2FkaW5nX2ZhaWxlZCwgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCA5MiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfbG9hZGluZ19mYWlsZWQsIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgOTQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NQor ICAqICAgICBjb21tYW5kX2Vycm9yID0gTVBWX0VSUk9SX0NPTU1BTkQKKyAgKiAgICAgbG9hZGlu Z19mYWlsZWQgPSBNUFZfRVJST1JfTE9BRElOR19GQUlMRUQKKyAgKiAgICAgYW9faW5pdF9mYWls ZWQgPSBNUFZfRVJST1JfQU9fSU5JVF9GQUlMRUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICB2b19pbml0X2ZhaWxlZCA9IE1QVl9FUlJPUl9WT19JTklUX0ZBSUxFRAorICAq ICAgICBub3RoaW5nX3RvX3BsYXkgPSBNUFZfRVJST1JfTk9USElOR19UT19QTEFZCisgICovCist ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1Jf QU9fSU5JVF9GQUlMRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5 MywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9lcnJvcihNUFZfRVJST1JfQU9fSU5JVF9GQUlMRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCA5NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4 X25fc19hb19pbml0X2ZhaWxlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MywgX19w eXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfYW9faW5pdF9mYWlsZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTUsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTQKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NgorICAqICAgICBsb2FkaW5nX2ZhaWxlZCA9IE1Q Vl9FUlJPUl9MT0FESU5HX0ZBSUxFRAorICAqICAgICBhb19pbml0X2ZhaWxlZCA9IE1QVl9FUlJP Ul9BT19JTklUX0ZBSUxFRAorICAqICAgICB2b19pbml0X2ZhaWxlZCA9IE1QVl9FUlJPUl9WT19J TklUX0ZBSUxFRCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIG5vdGhpbmdf dG9fcGxheSA9IE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkKKyAgKiAgICAgdW5rbm93bl9mb3Jt YXQgPSBNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4 X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9WT19JTklUX0ZBSUxFRCk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDk0LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJP Ul9WT19JTklUX0ZBSUxFRCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDk2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3ZvX2luaXRfZmFpbGVk LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDk0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc192b19pbml0X2ZhaWxl ZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5NiwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk3CisgICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX0FPX0lOSVRfRkFJ TEVECisgICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lOSVRfRkFJTEVECisg ICogICAgIG5vdGhpbmdfdG9fcGxheSA9IE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICB1bmtub3duX2Zvcm1hdCA9IE1QVl9FUlJP Ul9VTktOT1dOX0ZPUk1BVAorICAqICAgICB1bnN1cHBvcnRlZCA9IE1QVl9FUlJPUl9VTlNVUFBP UlRFRAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJy b3IoTVBWX0VSUk9SX05PVEhJTkdfVE9fUExBWSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDk1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5NywgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc19ub3RoaW5nX3RvX3BsYXksIF9fcHl4X3RfNikgPCAwKSBfX1BZ WF9FUlIoMCwgOTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNz KF9fcHl4X3RfNywgX19weXhfbl9zX25vdGhpbmdfdG9fcGxheSwgX19weXhfdF82KSA8IDApIF9f UFlYX0VSUigwLCA5NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5NgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4CisgICogICAgIHZv X2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lOSVRfRkFJTEVECisgICogICAgIG5vdGhpbmdf dG9fcGxheSA9IE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkKKyAgKiAgICAgdW5rbm93bl9mb3Jt YXQgPSBNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICB1bnN1cHBvcnRlZCA9IE1QVl9FUlJPUl9VTlNVUFBPUlRFRAorICAqICAgICBu b3RfaW1wbGVtZW50ZWQgPSBNUFZfRVJST1JfTk9UX0lNUExFTUVOVEVECisgICovCistICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfVU5LTk9X Tl9GT1JNQVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5NiwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l cnJvcihNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA5OCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc191 bmtub3duX2Zvcm1hdCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5NiwgX19weXhfTDFf ZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nf dW5rbm93bl9mb3JtYXQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTgsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTcKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5OQorICAqICAgICBub3RoaW5nX3RvX3BsYXkgPSBNUFZfRVJS T1JfTk9USElOR19UT19QTEFZCisgICogICAgIHVua25vd25fZm9ybWF0ID0gTVBWX0VSUk9SX1VO S05PV05fRk9STUFUCisgICogICAgIHVuc3VwcG9ydGVkID0gTVBWX0VSUk9SX1VOU1VQUE9SVEVE ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgbm90X2ltcGxlbWVudGVkID0g TVBWX0VSUk9SX05PVF9JTVBMRU1FTlRFRAorICAqIAorICAqLworLSAgX19weXhfdF82ID0gX19Q eXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1VOU1VQUE9SVEVEKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTcsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9S X1VOU1VQUE9SVEVEKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTks IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19Q eXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdW5zdXBwb3J0ZWQsIF9fcHl4 X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTcsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3Vuc3VwcG9ydGVkLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDk5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjk4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAw CisgICogICAgIHVua25vd25fZm9ybWF0ID0gTVBWX0VSUk9SX1VOS05PV05fRk9STUFUCisgICog ICAgIHVuc3VwcG9ydGVkID0gTVBWX0VSUk9SX1VOU1VQUE9SVEVECisgICogICAgIG5vdF9pbXBs ZW1lbnRlZCA9IE1QVl9FUlJPUl9OT1RfSU1QTEVNRU5URUQgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqIAorICAqIAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX05PVF9JTVBMRU1FTlRFRCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDk4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9OT1RfSU1Q TEVNRU5URUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDAsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm90X2ltcGxlbWVudGVkLCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDk4LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19ub3RfaW1wbGVtZW50ZWQsIF9f cHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTAwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjcyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NzQKKyAgKiBQeV9Jbml0aWFsaXplKCkKKyAgKiAKKyAgKiBjbGFzcyBFcnJvcnM6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgIiIiU2V0IG9mIGtub3duIGVycm9yIGNv ZGVzIGZyb20gTXB2RXJyb3IgYW5kIEV2ZW50IHJlc3BvbnNlcy4KKyAgKiAKKyAgKi8KKy0gIF9f cHl4X3RfNiA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKCgoUHlPYmplY3QqKSZfX1B5eF9EZWZhdWx0 Q2xhc3NUeXBlKSwgX19weXhfbl9zX0Vycm9ycywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3Rf NywgTlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDcy LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKCgo UHlPYmplY3QqKSZfX1B5eF9EZWZhdWx0Q2xhc3NUeXBlKSwgX19weXhfbl9zX0Vycm9ycywgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X3RfNywgTlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDc0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19F cnJvcnMsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgNzIsIF9fcHl4X0wxX2Vycm9yKQor KyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19FcnJvcnMsIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgNzQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsg X19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDMKKyAgKiAKKyAgKiAK KyAgKiBjbGFzcyBFdmVudHM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAg IiIiU2V0IG9mIGtub3duIHZhbHVlcyBmb3IgRXZlbnQgaWRzLgorICAqIAorICAqLworLSAgX19w eXhfdF83ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZSgoUHlPYmplY3QgKikgTlVMTCwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X25fc19FdmVudHMsIF9fcHl4X25fc19FdmVudHMsIChQeU9i amVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9rcF9zX1Nl dF9vZl9rbm93bl92YWx1ZXNfZm9yX0V2ZW50X2lkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90Xzcp KSBfX1BZWF9FUlIoMCwgMTAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNyA9IF9fUHl4 X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5X3R1cGxl LCBfX3B5eF9uX3NfRXZlbnRzLCBfX3B5eF9uX3NfRXZlbnRzLCAoUHlPYmplY3QgKikgTlVMTCwg X19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfa3Bfc19TZXRfb2Zfa25vd25fdmFs dWVzX2Zvcl9FdmVudF9pZCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAs IDEwMywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDgKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTAKKyAgKiAgICAgWW91IHNob3VsZCBoYW5kbGUgdGhlIHBv c3NpYmlsaXR5IHRoYXQgZXZlbnQgaWRzIG1heSBub3QgYmUgYW55IG9mIHRoZXNlIHZhbHVlcy4K KyAgKiAgICAgIiIiCisgICogICAgIG5vbmUgPSBNUFZfRVZFTlRfTk9ORSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisgICogICAgIHNodXRkb3duID0gTVBWX0VWRU5UX1NIVVRET1dOCisg ICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5UX0xPR19NRVNTQUdFCisgICovCistICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfTk9O RSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEwOCwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9p ZChNUFZfRVZFTlRfTk9ORSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDExMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19ub25lLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEwOCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm9uZSwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCAxMTAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTA5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExCisgICog ICAgICIiIgorICAqICAgICBub25lID0gTVBWX0VWRU5UX05PTkUKKyAgKiAgICAgc2h1dGRvd24g PSBNUFZfRVZFTlRfU0hVVERPV04gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAg ICBsb2dfbWVzc2FnZSA9IE1QVl9FVkVOVF9MT0dfTUVTU0FHRQorICAqICAgICBnZXRfcHJvcGVy dHlfcmVwbHkgPSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCisgICovCistICBfX3B5eF90 XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfU0hVVERP V04pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDksIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRf aWQoTVBWX0VWRU5UX1NIVVRET1dOKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgMTExLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwor LSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3NodXRkb3du LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEwOSwgX19weXhfTDFfZXJyb3IpCisrICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9f cHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTExLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExMAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExMgorICAqICAgICBub25lID0gTVBWX0VWRU5UX05PTkUKKyAgKiAgICAgc2h1dGRvd24g PSBNUFZfRVZFTlRfU0hVVERPV04KKyAgKiAgICAgbG9nX21lc3NhZ2UgPSBNUFZfRVZFTlRfTE9H X01FU1NBR0UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBnZXRfcHJvcGVy dHlfcmVwbHkgPSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCisgICogICAgIHNldF9wcm9w ZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkKKyAgKi8KKy0gIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9MT0df TUVTU0FHRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExMCwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l dmVudF9pZChNUFZfRVZFTlRfTE9HX01FU1NBR0UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCAxMTIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nf bG9nX21lc3NhZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTEwLCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19s b2dfbWVzc2FnZSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTIsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExCisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTEzCisgICogICAgIHNodXRkb3duID0gTVBWX0VWRU5UX1NIVVRE T1dOCisgICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5UX0xPR19NRVNTQUdFCisgICogICAg IGdldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBzZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZf RVZFTlRfU0VUX1BST1BFUlRZX1JFUExZCisgICogICAgIGNvbW1hbmRfcmVwbHkgPSBNUFZfRVZF TlRfQ09NTUFORF9SRVBMWQorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWSk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExMSwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRf R0VUX1BST1BFUlRZX1JFUExZKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgMTEzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAg aWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2dldF9wcm9wZXJ0 eV9yZXBseSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTEsIF9fcHl4X0wxX2Vycm9y KQorKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2dldF9w cm9wZXJ0eV9yZXBseSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTMsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEyCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0CisgICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5U X0xPR19NRVNTQUdFCisgICogICAgIGdldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9HRVRf UFJPUEVSVFlfUkVQTFkKKyAgKiAgICAgc2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX1NF VF9QUk9QRVJUWV9SRVBMWSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGNv bW1hbmRfcmVwbHkgPSBNUFZfRVZFTlRfQ09NTUFORF9SRVBMWQorICAqICAgICBzdGFydF9maWxl ID0gTVBWX0VWRU5UX1NUQVJUX0ZJTEUKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50 X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTIsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBW X0VWRU5UX1NFVF9QUk9QRVJUWV9SRVBMWSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDExNCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82 KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19zZXRf cHJvcGVydHlfcmVwbHksIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTEyLCBfX3B5eF9M MV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25f c19zZXRfcHJvcGVydHlfcmVwbHksIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE0LCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMworKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNQorICAqICAgICBnZXRfcHJvcGVydHlfcmVw bHkgPSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCisgICogICAgIHNldF9wcm9wZXJ0eV9y ZXBseSA9IE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkKKyAgKiAgICAgY29tbWFuZF9yZXBs eSA9IE1QVl9FVkVOVF9DT01NQU5EX1JFUExZICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KyAgKiAgICAgc3RhcnRfZmlsZSA9IE1QVl9FVkVOVF9TVEFSVF9GSUxFCisgICogICAgIGVuZF9m aWxlID0gTVBWX0VWRU5UX0VORF9GSUxFCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfQ09NTUFORF9SRVBMWSk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExMywgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZF TlRfQ09NTUFORF9SRVBMWSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDExNSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19jb21tYW5kX3JlcGx5 LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExMywgX19weXhfTDFfZXJyb3IpCisrICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfY29tbWFuZF9yZXBs eSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTUsIF9fcHl4X0wxX2Vycm9yKQorICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTE2CisgICogICAgIHNldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9TRVRf UFJPUEVSVFlfUkVQTFkKKyAgKiAgICAgY29tbWFuZF9yZXBseSA9IE1QVl9FVkVOVF9DT01NQU5E X1JFUExZCisgICogICAgIHN0YXJ0X2ZpbGUgPSBNUFZfRVZFTlRfU1RBUlRfRklMRSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGVuZF9maWxlID0gTVBWX0VWRU5UX0VORF9G SUxFCisgICogICAgIGZpbGVfbG9hZGVkID0gTVBWX0VWRU5UX0ZJTEVfTE9BREVECisgICovCist ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZF TlRfU1RBUlRfRklMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEx NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9ldmVudF9pZChNUFZfRVZFTlRfU1RBUlRfRklMRSk7IGlmICh1bmxpa2VseSghX19weXhf dF82KSkgX19QWVhfRVJSKDAsIDExNiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4 X25fc19zdGFydF9maWxlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNCwgX19weXhf TDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9u X3Nfc3RhcnRfZmlsZSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTYsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1CisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTE3CisgICogICAgIGNvbW1hbmRfcmVwbHkgPSBNUFZfRVZF TlRfQ09NTUFORF9SRVBMWQorICAqICAgICBzdGFydF9maWxlID0gTVBWX0VWRU5UX1NUQVJUX0ZJ TEUKKyAgKiAgICAgZW5kX2ZpbGUgPSBNUFZfRVZFTlRfRU5EX0ZJTEUgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqICAgICBmaWxlX2xvYWRlZCA9IE1QVl9FVkVOVF9GSUxFX0xPQURF RAorICAqICAgICAjIHRyYWNrc19jaGFuZ2VkID0gTVBWX0VWRU5UX1RSQUNLU19DSEFOR0VECisg ICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChN UFZfRVZFTlRfRU5EX0ZJTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCAxMTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0VORF9GSUxFKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19w eXhfbl9zX2VuZF9maWxlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNSwgX19weXhf TDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9u X3NfZW5kX2ZpbGUsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE3LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNgorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExOAorICAqICAgICBzdGFydF9maWxlID0gTVBWX0VWRU5UX1NU QVJUX0ZJTEUKKyAgKiAgICAgZW5kX2ZpbGUgPSBNUFZfRVZFTlRfRU5EX0ZJTEUKKyAgKiAgICAg ZmlsZV9sb2FkZWQgPSBNUFZfRVZFTlRfRklMRV9MT0FERUQgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAjIHRyYWNrc19jaGFuZ2VkID0gTVBWX0VWRU5UX1RSQUNLU19DSEFO R0VECisgICogICAgICMgdHJhY2tzX3N3aXRjaGVkID0gTVBWX0VWRU5UX1RSQUNLX1NXSVRDSEVE CisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9p ZChNUFZfRVZFTlRfRklMRV9MT0FERUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCAxMTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0ZJTEVfTE9BREVEKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNywgX19weXhfbl9zX2ZpbGVfbG9hZGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAs IDExNiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF83LCBfX3B5eF9uX3NfZmlsZV9sb2FkZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwg MTE4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExOQorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEyMQorICAqICAgICAjIHRyYWNrc19j aGFuZ2VkID0gTVBWX0VWRU5UX1RSQUNLU19DSEFOR0VECisgICogICAgICMgdHJhY2tzX3N3aXRj aGVkID0gTVBWX0VWRU5UX1RSQUNLX1NXSVRDSEVECisgICogICAgIGlkbGUgPSBNUFZfRVZFTlRf SURMRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICMgcGF1c2UgPSBNUFZf RVZFTlRfUEFVU0UKKyAgKiAgICAgIyB1bnBhdXNlID0gTVBWX0VWRU5UX1VOUEFVU0UKKyAgKi8K Ky0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9F VkVOVF9JRExFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE5LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2 X2V2ZW50X2lkKE1QVl9FVkVOVF9JRExFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgMTIxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2lkbGUs IF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE5LCBfX3B5eF9MMV9lcnJvcikKKysgIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19pZGxlLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNS RUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMjIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MjQKKyAgKiAgICAgIyBwYXVzZSA9IE1QVl9FVkVOVF9QQVVTRQorICAqICAgICAjIHVucGF1c2Ug PSBNUFZfRVZFTlRfVU5QQVVTRQorICAqICAgICB0aWNrID0gTVBWX0VWRU5UX1RJQ0sgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAjIHNjcmlwdF9pbnB1dF9kaXNwYXRjaCA9 IE1QVl9FVkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0gKKyAgKiAgICAgY2xpZW50X21lc3NhZ2Ug PSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0UKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9USUNLKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTIyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9USUNL KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTI0LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3RpY2ssIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9F UlIoMCwgMTIyLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc190aWNrLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEy NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjQKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjYKKyAgKiAgICAgdGljayA9IE1QVl9F VkVOVF9USUNLCisgICogICAgICMgc2NyaXB0X2lucHV0X2Rpc3BhdGNoID0gTVBWX0VWRU5UX1ND UklQVF9JTlBVVF9ESVNQQVRDSAorICAqICAgICBjbGllbnRfbWVzc2FnZSA9IE1QVl9FVkVOVF9D TElFTlRfTUVTU0FHRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIHZpZGVv X3JlY29uZmlnID0gTVBWX0VWRU5UX1ZJREVPX1JFQ09ORklHCisgICogICAgIGF1ZGlvX3JlY29u ZmlnID0gTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHCisgICovCistICBfX3B5eF90XzYgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0Up OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMjQsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQo TVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgMTI2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2NsaWVu dF9tZXNzYWdlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyNCwgX19weXhfTDFfZXJy b3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfY2xp ZW50X21lc3NhZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTI2LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEyNQorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEyNworICAqICAgICAjIHNjcmlwdF9pbnB1dF9kaXNwYXRjaCA9 IE1QVl9FVkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0gKKyAgKiAgICAgY2xpZW50X21lc3NhZ2Ug PSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0UKKyAgKiAgICAgdmlkZW9fcmVjb25maWcgPSBNUFZf RVZFTlRfVklERU9fUkVDT05GSUcgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAg ICBhdWRpb19yZWNvbmZpZyA9IE1QVl9FVkVOVF9BVURJT19SRUNPTkZJRworICAqICAgICAjIG1l dGFkYXRhX3VwZGF0ZSA9IE1QVl9FVkVOVF9NRVRBREFUQV9VUERBVEUKKyAgKi8KKy0gIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9WSURF T19SRUNPTkZJRyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEyNSwg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21w dl9ldmVudF9pZChNUFZfRVZFTlRfVklERU9fUkVDT05GSUcpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCAxMjcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfdmlkZW9fcmVjb25maWcsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTI1LCBf X3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9f cHl4X25fc192aWRlb19yZWNvbmZpZywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMjcs IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTI2CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTI4CisgICogICAgIGNsaWVudF9tZXNzYWdl ID0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFCisgICogICAgIHZpZGVvX3JlY29uZmlnID0gTVBW X0VWRU5UX1ZJREVPX1JFQ09ORklHCisgICogICAgIGF1ZGlvX3JlY29uZmlnID0gTVBWX0VWRU5U X0FVRElPX1JFQ09ORklHICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgIyBt ZXRhZGF0YV91cGRhdGUgPSBNUFZfRVZFTlRfTUVUQURBVEFfVVBEQVRFCisgICogICAgIHNlZWsg PSBNUFZfRVZFTlRfU0VFSworICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTI2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9BVURJ T19SRUNPTkZJRyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEyOCwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19hdWRpb19yZWNvbmZpZywgX19w eXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMjYsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2F1ZGlvX3JlY29uZmlnLCBf X3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyOCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMjgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMzAKKyAgKiAgICAgYXVkaW9fcmVjb25maWcgPSBNUFZfRVZFTlRfQVVESU9fUkVDT05G SUcKKyAgKiAgICAgIyBtZXRhZGF0YV91cGRhdGUgPSBNUFZfRVZFTlRfTUVUQURBVEFfVVBEQVRF CisgICogICAgIHNlZWsgPSBNUFZfRVZFTlRfU0VFSyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisgICogICAgIHBsYXliYWNrX3Jlc3RhcnQgPSBNUFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFS VAorICAqICAgICBwcm9wZXJ0eV9jaGFuZ2UgPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFCisg ICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChN UFZfRVZFTlRfU0VFSyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEy OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9ldmVudF9pZChNUFZfRVZFTlRfU0VFSyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDEzMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19z ZWVrLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyOCwgX19weXhfTDFfZXJyb3IpCisr ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2VlaywgX19w eXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTI5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTMxCisgICogICAgICMgbWV0YWRhdGFfdXBkYXRlID0gTVBWX0VWRU5UX01FVEFEQVRBX1VQ REFURQorICAqICAgICBzZWVrID0gTVBWX0VWRU5UX1NFRUsKKyAgKiAgICAgcGxheWJhY2tfcmVz dGFydCA9IE1QVl9FVkVOVF9QTEFZQkFDS19SRVNUQVJUICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKyAgKiAgICAgcHJvcGVydHlfY2hhbmdlID0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5H RQorICAqICAgICAjIGNoYXB0ZXJfY2hhbmdlID0gTVBWX0VWRU5UX0NIQVBURVJfQ0hBTkdFCisg ICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChN UFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFSVCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDEyOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFSVCk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEzMSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFz cyhfX3B5eF90XzcsIF9fcHl4X25fc19wbGF5YmFja19yZXN0YXJ0LCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDEyOSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcGxheWJhY2tfcmVzdGFydCwgX19weXhfdF82KSA8 IDApIF9fUFlYX0VSUigwLCAxMzEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9f cHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTMwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTMyCisg ICogICAgIHNlZWsgPSBNUFZfRVZFTlRfU0VFSworICAqICAgICBwbGF5YmFja19yZXN0YXJ0ID0g TVBWX0VWRU5UX1BMQVlCQUNLX1JFU1RBUlQKKyAgKiAgICAgcHJvcGVydHlfY2hhbmdlID0gTVBW X0VWRU5UX1BST1BFUlRZX0NIQU5HRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICog ICAgICMgY2hhcHRlcl9jaGFuZ2UgPSBNUFZfRVZFTlRfQ0hBUFRFUl9DSEFOR0UKKyAgKiAKKyAg Ki8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1Q Vl9FVkVOVF9QUk9QRVJUWV9DSEFOR0UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCAxMzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRSk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEzMiwgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV9jaGFuZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZ WF9FUlIoMCwgMTMwLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFz cyhfX3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV9jaGFuZ2UsIF9fcHl4X3RfNikgPCAwKSBf X1BZWF9FUlIoMCwgMTMyLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwMQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMworICAqIAor ICAqIAorICAqIGNsYXNzIEV2ZW50czogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAq ICAgICAiIiJTZXQgb2Yga25vd24gdmFsdWVzIGZvciBFdmVudCBpZHMuCisgICogCisgICovCist ICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZSgoKFB5T2JqZWN0KikmX19QeXhfRGVm YXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19FdmVudHMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF90XzcsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCAxMDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHkzQ2xhc3NDcmVh dGUoKChQeU9iamVjdCopJl9fUHl4X0RlZmF1bHRDbGFzc1R5cGUpLCBfX3B5eF9uX3NfRXZlbnRz LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdF83LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTAzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4 X25fc19FdmVudHMsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTAxLCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfRXZlbnRzLCBf X3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEwMywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzcpOyBfX3B5eF90XzcgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEzNAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEzNgorICAq IAorICAqIAorICAqIGNsYXNzIExvZ0xldmVsczogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICBubyA9IE1QVl9MT0dfTEVWRUxfTk9ORQorICAqICAgICBmYXRhbCA9IE1QVl9M T0dfTEVWRUxfRkFUQUwKKyAgKi8KKy0gIF9fcHl4X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1By ZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfTG9n TGV2ZWxzLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCAoUHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9z X3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0ICopIE5VTEwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF83 ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZSgoUHlPYmplY3QgKikgTlVMTCwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X25fc19Mb2dMZXZlbHMsIF9fcHl4X25fc19Mb2dMZXZlbHMsIChQeU9i amVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikg TlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEzNiwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMzcKKyAgKiAKKyAgKiBjbGFzcyBMb2dMZXZlbHM6CisgICogICAgIG5vID0gTVBW X0xPR19MRVZFTF9OT05FICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgZmF0 YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMCisgICogICAgIGVycm9yID0gTVBWX0xPR19MRVZFTF9F UlJPUgorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9n X2xldmVsKE1QVl9MT0dfTEVWRUxfTk9ORSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDEzNSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9OT05FKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNywgX19weXhfbl9zX25vLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEzNSwgX19w eXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3Nfbm8sIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTM3LCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEzNgorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEzOAorICAqIGNsYXNzIExvZ0xldmVsczoKKyAgKiAgICAgbm8gPSBN UFZfTE9HX0xFVkVMX05PTkUKKyAgKiAgICAgZmF0YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgZXJyb3IgPSBNUFZfTE9HX0xFVkVM X0VSUk9SCisgICogICAgIHdhcm4gPSBNUFZfTE9HX0xFVkVMX1dBUk4KKyAgKi8KKy0gIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVM X0ZBVEFMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM2LCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xv Z19sZXZlbChNUFZfTE9HX0xFVkVMX0ZBVEFMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgMTM4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2Zh dGFsLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEzNiwgX19weXhfTDFfZXJyb3IpCisr ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZmF0YWwsIF9f cHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTM4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEzNworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEzOQorICAqICAgICBubyA9IE1QVl9MT0dfTEVWRUxfTk9ORQorICAqICAgICBmYXRhbCA9 IE1QVl9MT0dfTEVWRUxfRkFUQUwKKyAgKiAgICAgZXJyb3IgPSBNUFZfTE9HX0xFVkVMX0VSUk9S ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgd2FybiA9IE1QVl9MT0dfTEVW RUxfV0FSTgorICAqICAgICBpbmZvID0gTVBWX0xPR19MRVZFTF9JTkZPCisgICovCistICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZF TF9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEzNywgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9s b2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDEzOSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19l cnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzcsIF9fcHl4X0wxX2Vycm9yKQor KyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2Vycm9yLCBf X3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEzOSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMzgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxNDAKKyAgKiAgICAgZmF0YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMCisgICogICAgIGVy cm9yID0gTVBWX0xPR19MRVZFTF9FUlJPUgorICAqICAgICB3YXJuID0gTVBWX0xPR19MRVZFTF9X QVJOICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgaW5mbyA9IE1QVl9MT0df TEVWRUxfSU5GTworICAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WCisgICovCistICBfX3B5eF90 XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9X QVJOKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM4LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19s ZXZlbChNUFZfTE9HX0xFVkVMX1dBUk4pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCAxNDAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7 CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfd2Fybiwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3dhcm4sIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgMTQwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEzOQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE0 MQorICAqICAgICBlcnJvciA9IE1QVl9MT0dfTEVWRUxfRVJST1IKKyAgKiAgICAgd2FybiA9IE1Q Vl9MT0dfTEVWRUxfV0FSTgorICAqICAgICBpbmZvID0gTVBWX0xPR19MRVZFTF9JTkZPICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgdiA9IE1QVl9MT0dfTEVWRUxfVgorICAq ICAgICBkZWJ1ZyA9IE1QVl9MT0dfTEVWRUxfREVCVUcKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9f UHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX0lORk8pOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzksIF9fcHl4X0wxX2Vycm9y KQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xldmVsKE1Q Vl9MT0dfTEVWRUxfSU5GTyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDE0MSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19pbmZvLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEzOSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfaW5mbywgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCAxNDEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTQwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTQyCisgICog ICAgIHdhcm4gPSBNUFZfTE9HX0xFVkVMX1dBUk4KKyAgKiAgICAgaW5mbyA9IE1QVl9MT0dfTEVW RUxfSU5GTworICAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKyAgKiAgICAgZGVidWcgPSBNUFZfTE9HX0xFVkVMX0RFQlVHCisgICogICAgIHRy YWNlID0gTVBWX0xPR19MRVZFTF9UUkFDRQorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJ bnRfRnJvbV9lbnVtX19tcHZfbG9nX2xldmVsKE1QVl9MT0dfTEVWRUxfVik7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE0MCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZF TF9WKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTQyLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5h bWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3YsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9F UlIoMCwgMTQwLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc192LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE0Miwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDEKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDMKKyAgKiAgICAgaW5mbyA9IE1QVl9MT0df TEVWRUxfSU5GTworICAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WCisgICogICAgIGRlYnVnID0g TVBWX0xPR19MRVZFTF9ERUJVRyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAg IHRyYWNlID0gTVBWX0xPR19MRVZFTF9UUkFDRQorICAqIAorICAqLworLSAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xldmVsKE1QVl9MT0dfTEVWRUxfREVCVUcp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNDEsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xldmVs KE1QVl9MT0dfTEVWRUxfREVCVUcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigwLCAxNDMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cist ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZGVidWcsIF9f cHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTQxLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChf X1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19kZWJ1ZywgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCAxNDMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTQyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTQ0 CisgICogICAgIHYgPSBNUFZfTE9HX0xFVkVMX1YKKyAgKiAgICAgZGVidWcgPSBNUFZfTE9HX0xF VkVMX0RFQlVHCisgICogICAgIHRyYWNlID0gTVBWX0xPR19MRVZFTF9UUkFDRSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogCisgICovCistICBfX3B5eF90XzYgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9UUkFDRSk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE0MiwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBW X0xPR19MRVZFTF9UUkFDRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDE0NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc190cmFjZSwgX19weXhf dF82KSA8IDApIF9fUFlYX0VSUigwLCAxNDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3RyYWNlLCBfX3B5eF90XzYpIDwg MCkgX19QWVhfRVJSKDAsIDE0NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMzQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzYKKyAg KiAKKyAgKiAKKyAgKiBjbGFzcyBMb2dMZXZlbHM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAgICAgbm8gPSBNUFZfTE9HX0xFVkVMX05PTkUKKyAgKiAgICAgZmF0YWwgPSBNUFZf TE9HX0xFVkVMX0ZBVEFMCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0 ZSgoKFB5T2JqZWN0KikmX19QeXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19Mb2dMZXZl bHMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90XzcsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdF82ID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUoKChQeU9iamVjdCopJl9fUHl4X0RlZmF1bHRD bGFzc1R5cGUpLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhf dF83LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg MTM2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYg KFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19Mb2dMZXZlbHMsIF9fcHl4X3RfNikg PCAwKSBfX1BZWF9FUlIoMCwgMTM0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeURpY3RfU2V0 SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCBfX3B5eF90XzYpIDwgMCkgX19QWVhf RVJSKDAsIDEzNiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsg X19weXhfdF82ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE0NQorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE0NworICAqIAorICAqIAorICAqIGNsYXNzIEVP RlJlYXNvbnM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgIiIiS25vd24g cG9zc2libGUgdmFsdWVzIGZvciBFbmRPZkZpbGVSZWFjaGVkIHJlYXNvbi4KKyAgKiAKKyAgKi8K Ky0gIF9fcHl4X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5V TEwsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfRU9GUmVhc29ucywgX19weXhfbl9zX0VP RlJlYXNvbnMsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2 LCBfX3B5eF9rcF9zX0tub3duX3Bvc3NpYmxlX3ZhbHVlc19mb3JfRW5kT2ZGKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMTQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfRU9GUmVhc29ucywgX19weXhfbl9zX0VPRlJlYXNv bnMsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5 eF9rcF9zX0tub3duX3Bvc3NpYmxlX3ZhbHVlc19mb3JfRW5kT2ZGKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMTQ3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzcpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjE1MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE1MgorICAqICAgICBZ b3Ugc2hvdWxkIGhhbmRsZSB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGUgcmVhc29uIG1heSBub3Qg YmUgYW55IG9mIHRoZXNlIHZhbHVlcy4KKyAgKiAgICAgIiIiCisgICogICAgIGVvZiA9IE1QVl9F TkRfRklMRV9SRUFTT05fRU9GICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAg YWJvcnRlZCA9IE1QVl9FTkRfRklMRV9SRUFTT05fU1RPUAorICAqICAgICBxdWl0ID0gTVBWX0VO RF9GSUxFX1JFQVNPTl9RVUlUCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9t X2VudW1fX21wdl9lbmRfZmlsZV9yZWFzb24oTVBWX0VORF9GSUxFX1JFQVNPTl9FT0YpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNTAsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5kX2ZpbGVfcmVhc29u KE1QVl9FTkRfRklMRV9SRUFTT05fRU9GKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgMTUyLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2VvZiwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxNTAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2VvZiwgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCAxNTIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTUxCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTUz CisgICogICAgICIiIgorICAqICAgICBlb2YgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX0VPRgorICAq ICAgICBhYm9ydGVkID0gTVBWX0VORF9GSUxFX1JFQVNPTl9TVE9QICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgcXVpdCA9IE1QVl9FTkRfRklMRV9SRUFTT05fUVVJVAorICAq ICAgICBlcnJvciA9IE1QVl9FTkRfRklMRV9SRUFTT05fRVJST1IKKyAgKi8KKy0gIF9fcHl4X3Rf NiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2VuZF9maWxlX3JlYXNvbihNUFZfRU5EX0ZJ TEVfUkVBU09OX1NUT1ApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAx NTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVt X19tcHZfZW5kX2ZpbGVfcmVhc29uKE1QVl9FTkRfRklMRV9SRUFTT05fU1RPUCk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE1MywgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5 eF90XzcsIF9fcHl4X25fc19hYm9ydGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE1 MSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83 LCBfX3B5eF9uX3NfYWJvcnRlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxNTMsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTUyCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTU0CisgICogICAgIGVvZiA9IE1QVl9FTkRfRklM RV9SRUFTT05fRU9GCisgICogICAgIGFib3J0ZWQgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX1NUT1AK KyAgKiAgICAgcXVpdCA9IE1QVl9FTkRfRklMRV9SRUFTT05fUVVJVCAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisgICogICAgIGVycm9yID0gTVBWX0VORF9GSUxFX1JFQVNPTl9FUlJPUgor ICAqIAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5k X2ZpbGVfcmVhc29uKE1QVl9FTkRfRklMRV9SRUFTT05fUVVJVCk7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDE1MiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lbmRfZmlsZV9yZWFzb24oTVBWX0VORF9GSUxF X1JFQVNPTl9RVUlUKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTU0 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3F1aXQsIF9fcHl4X3RfNikg PCAwKSBfX1BZWF9FUlIoMCwgMTUyLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXRO YW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19xdWl0LCBfX3B5eF90XzYpIDwgMCkgX19Q WVhfRVJSKDAsIDE1NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxNTMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNTUKKyAgKiAgICAg YWJvcnRlZCA9IE1QVl9FTkRfRklMRV9SRUFTT05fU1RPUAorICAqICAgICBxdWl0ID0gTVBWX0VO RF9GSUxFX1JFQVNPTl9RVUlUCisgICogICAgIGVycm9yID0gTVBWX0VORF9GSUxFX1JFQVNPTl9F UlJPUiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogCisgICovCistICBf X3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lbmRfZmlsZV9yZWFzb24oTVBW X0VORF9GSUxFX1JFQVNPTl9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDE1MywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9G cm9tX2VudW1fX21wdl9lbmRfZmlsZV9yZWFzb24oTVBWX0VORF9GSUxFX1JFQVNPTl9FUlJPUik7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE1NSwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5D bGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19lcnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VS UigwLCAxNTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9f cHl4X3RfNywgX19weXhfbl9zX2Vycm9yLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE1 NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDUKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDcKKyAgKiAKKyAgKiAKKyAgKiBjbGFz cyBFT0ZSZWFzb25zOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICIiIktu b3duIHBvc3NpYmxlIHZhbHVlcyBmb3IgRW5kT2ZGaWxlUmVhY2hlZCByZWFzb24uCisgICogCisg ICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZSgoKFB5T2JqZWN0KikmX19Q eXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19FT0ZSZWFzb25zLCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfdF83LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgMTQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5 M0NsYXNzQ3JlYXRlKCgoUHlPYmplY3QqKSZfX1B5eF9EZWZhdWx0Q2xhc3NUeXBlKSwgX19weXhf bl9zX0VPRlJlYXNvbnMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90XzcsIE5VTEwsIDAsIDEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNDcsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoUHlEaWN0X1NldEl0ZW0o X19weXhfZCwgX19weXhfbl9zX0VPRlJlYXNvbnMsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIo MCwgMTQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBf X3B5eF9uX3NfRU9GUmVhc29ucywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxNDcsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7 CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozMjAKKyAgKiAKKyAgKiAKKyAgKiBkZWYgX2Vycm9ycyhmbik6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgor ICAqICAgICAgICAgdiA9IGZuKCprLCAqKmt3KQorICAqLworLSAgX19weXhfdF83ID0gUHlDRnVu Y3Rpb25fTmV3RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVfZXJyb3JzLCBO VUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzcpKSBfX1BZWF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNyA9IFB5 Q0Z1bmN0aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81X2Vycm9y cywgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlmICh1bmxpa2VseSghX19w eXhfdF83KSkgX19QWVhfRVJSKDAsIDMyMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RS RUYoX19weXhfdF83KTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3Nf ZXJyb3JzLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDMxOCwgX19weXhfTDFfZXJyb3Ip CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX2Vycm9ycywgX19weXhf dF83KSA8IDApIF9fUFlYX0VSUigwLCAzMjAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzI2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzI4CisgICogCisgICogCisgICogY2xhc3MgTVBWRXJyb3IoRXhjZXB0aW9uKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBjb2RlID0gTm9uZQorICAqIAorICAqLworLSAg X19weXhfdF83ID0gUHlUdXBsZV9OZXcoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19Q WVhfRVJSKDAsIDMyNiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzcgPSBQeVR1cGxlX05l dygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMzI4LCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworICAgX19QeXhfSU5DUkVGKCgo UHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOworICAg X19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0 aW9uKVswXSkpKTsKKyAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCAoKFB5T2JqZWN0 ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0aW9uKVswXSkpKTsKKy0gIF9fcHl4X3Rf NiA9IF9fUHl4X0NhbGN1bGF0ZU1ldGFjbGFzcyhOVUxMLCBfX3B5eF90XzcpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAzMjYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdF82ID0gX19QeXhfQ2FsY3VsYXRlTWV0YWNsYXNzKE5VTEwsIF9fcHl4X3RfNyk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDMyOCwgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5M01ldGFj bGFzc1ByZXBhcmUoX19weXhfdF82LCBfX3B5eF90XzcsIF9fcHl4X25fc19NUFZFcnJvciwgX19w eXhfbl9zX01QVkVycm9yLCAoUHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9s aWJzX21wdiwgKFB5T2JqZWN0ICopIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9f UFlYX0VSUigwLCAzMjYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF80ID0gX19QeXhfUHkz TWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzYsIF9fcHl4X3RfNywgX19weXhfbl9zX01QVkVycm9y LCBfX3B5eF9uX3NfTVBWRXJyb3IsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0 dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80 KSkgX19QWVhfRVJSKDAsIDMyOCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19w eXhfdF80KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjcKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjkKKyAgKiAKKyAgKiBjbGFzcyBN UFZFcnJvcihFeGNlcHRpb24pOgorICAqICAgICBjb2RlID0gTm9uZSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisgICogCisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKToKKyAgKi8K Ky0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19jb2RlLCBQ eV9Ob25lKSA8IDApIF9fUFlYX0VSUigwLCAzMjcsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX2NvZGUsIFB5X05vbmUpIDwg MCkgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzI5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MzMxCisgICogICAgIGNvZGUgPSBOb25lCisgICogCisgICogICAgIGRlZiBfX2luaXRf XyhzZWxmLCBlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2Vs Zi5jb2RlID0gZQorICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworICAqLworLSAg X19weXhfdF8xID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzhNUFZFcnJvcl8xX19pbml0X18sIDAsIF9fcHl4X25fc19NUFZFcnJvcl9fX2lu aXQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmpl Y3QgKilfX3B5eF9jb2Rlb2JqX18yNikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAzMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfQ3lGdW5j dGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl8xX19p bml0X18sIDAsIF9fcHl4X25fc19NUFZFcnJvcl9fX2luaXQsIE5VTEwsIF9fcHl4X25fc192aWRj dXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18yNikp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMzEsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3NfaW5pdCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VS UigwLCAzMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9f cHl4X3RfNCwgX19weXhfbl9zX2luaXQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMzMx LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyNgorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyOAorICAqIAorICAqIAorICAqIGNsYXNz IE1QVkVycm9yKEV4Y2VwdGlvbik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgY29kZSA9IE5vbmUKKyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5M0NsYXNz Q3JlYXRlKF9fcHl4X3RfNiwgX19weXhfbl9zX01QVkVycm9yLCBfX3B5eF90XzcsIF9fcHl4X3Rf NCwgTlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMy NiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZShf X3B5eF90XzYsIF9fcHl4X25fc19NUFZFcnJvciwgX19weXhfdF83LCBfX3B5eF90XzQsIE5VTEws IDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMjgsIF9fcHl4 X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoUHlEaWN0X1Nl dEl0ZW0oX19weXhfZCwgX19weXhfbl9zX01QVkVycm9yLCBfX3B5eF90XzEpIDwgMCkgX19QWVhf RVJSKDAsIDMyNiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhf ZCwgX19weXhfbl9zX01QVkVycm9yLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDMyOCwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhf dF83KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozNDAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDIKKyAgKiAg ICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBlKQorICAqIAorICAqIGNsYXNzIFB5TVBW RXJyb3IoRXhjZXB0aW9uKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBw YXNzCisgICogCisgICovCistICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMzQwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfNyA9IFB5VHVwbGVfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlY X0VSUigwLCAzNDIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7 CisgICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKSgmKChQeVR5cGVPYmplY3QqKVB5RXhjX0V4 Y2VwdGlvbilbMF0pKSk7CisgICBfX1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKikoJigoUHlUeXBl T2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOworICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5 eF90XzcsIDAsICgoUHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24p WzBdKSkpOworLSAgX19weXhfdF82ID0gX19QeXhfQ2FsY3VsYXRlTWV0YWNsYXNzKE5VTEwsIF9f cHl4X3RfNyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDM0MCwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9DYWxjdWxhdGVNZXRhY2xhc3MoTlVM TCwgX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMzQy LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgX19weXhf dF80ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzYsIF9fcHl4X3RfNywgX19w eXhfbl9zX1B5TVBWRXJyb3IsIF9fcHl4X25fc19QeU1QVkVycm9yLCAoUHlPYmplY3QgKikgTlVM TCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0ICopIE5VTEwpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNDAsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19weXhfdF80ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzYsIF9fcHl4 X3RfNywgX19weXhfbl9zX1B5TVBWRXJyb3IsIF9fcHl4X25fc19QeU1QVkVycm9yLCAoUHlPYmpl Y3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0ICopIE5V TEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNDIsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBfX3B5eF90XzEgPSBfX1B5 eF9QeTNDbGFzc0NyZWF0ZShfX3B5eF90XzYsIF9fcHl4X25fc19QeU1QVkVycm9yLCBfX3B5eF90 XzcsIF9fcHl4X3RfNCwgTlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeTND bGFzc0NyZWF0ZShfX3B5eF90XzYsIF9fcHl4X25fc19QeU1QVkVycm9yLCBfX3B5eF90XzcsIF9f cHl4X3RfNCwgTlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDM0MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0g IGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfUHlNUFZFcnJvciwgX19weXhf dF8xKSA8IDApIF9fUFlYX0VSUigwLCAzNDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5RGlj dF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19QeU1QVkVycm9yLCBfX3B5eF90XzEpIDwgMCkg X19QWVhfRVJSKDAsIDM0MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90 XzQgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgICBf X1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNDUKKyAgKiAgICAgcGFzcworICAqIAorICAqIGNkZWYgX2NhbGxiYWNrcyA9IGRp Y3QoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogY2RlZiBfcmVwbHlfdXNlcmRh dGFzID0gZGljdCgpCisgICogCisgICovCistICBfX3B5eF90XzcgPSBfX1B5eF9QeURpY3RfTmV3 UHJlc2l6ZWQoMCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDM0Mywg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzcgPSBfX1B5eF9QeURpY3RfTmV3UHJlc2l6ZWQo MCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDM0NSwgX19weXhfTDFf ZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAgIF9fUHl4X1hHT1RSRUYoX19w eXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NhbGxiYWNrcyk7CisgICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3RfNyk7 CisgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNyk7CisgICBfX3B5eF90XzcgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NAorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjM0NgorICAqIAorICAqIGNkZWYgX2NhbGxiYWNrcyA9IGRpY3Qo KQorICAqIGNkZWYgX3JlcGx5X3VzZXJkYXRhcyA9IGRpY3QoKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogCisgICogY2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KToKKyAgKi8K Ky0gIF9fcHl4X3RfNyA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMzQ0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNyA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzcpKSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOworICAgX19QeXhfWEdPVFJFRihfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fcmVwbHlfdXNlcmRhdGFzKTsKKyAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcywgX19weXhfdF83KTsKKyAgIF9fUHl4X0dJ VkVSRUYoX19weXhfdF83KTsKKyAgIF9fcHl4X3RfNyA9IDA7CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MzQ4CisgICogY2RlZiBfcmVwbHlfdXNlcmRhdGFzID0gZGljdCgpCisgICogCisgICog Y2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CisgICogICAgICAgICBzZWxmLmNv dW50ZXIgPSAwCisgICovCistICBfX3B5eF90XzcgPSBfX1B5eF9DYWxjdWxhdGVNZXRhY2xhc3Mo TlVMTCwgX19weXhfdHVwbGVfXzI3KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9F UlIoMCwgMzQ2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNyA9IF9fUHl4X0NhbGN1bGF0 ZU1ldGFjbGFzcyhOVUxMLCBfX3B5eF90dXBsZV9fMjcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NykpIF9fUFlYX0VSUigwLCAzNDgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNyk7CistICBfX3B5eF90XzYgPSBfX1B5eF9QeTNNZXRhY2xhc3NQcmVwYXJlKF9fcHl4 X3RfNywgX19weXhfdHVwbGVfXzI3LCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSwgX19weXhfbl9z X1JlcGx5VXNlckRhdGEsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xp YnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDM0NiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeTNN ZXRhY2xhc3NQcmVwYXJlKF9fcHl4X3RfNywgX19weXhfdHVwbGVfXzI3LCBfX3B5eF9uX3NfUmVw bHlVc2VyRGF0YSwgX19weXhfbl9zX1JlcGx5VXNlckRhdGEsIChQeU9iamVjdCAqKSBOVUxMLCBf X3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDM0OCwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNDcKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDkKKyAg KiAKKyAgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOgorICAqICAgICBkZWYgX19pbml0 X18oc2VsZiwgZGF0YSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAg IHNlbGYuY291bnRlciA9IDAKKyAgKiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKyAgKi8KKy0g IF9fcHl4X3RfNCA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzFfX2luaXRfXywgMCwgX19weXhfbl9zX1JlcGx5 VXNlckRhdGFfX19pbml0LCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5 eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMjkpKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzQpKSBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNCA9 IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NF9SZXBseVVzZXJEYXRhXzFfX2luaXRfXywgMCwgX19weXhfbl9zX1JlcGx5VXNlckRhdGFfX19p bml0LCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2Jq ZWN0ICopX19weXhfY29kZW9ial9fMjkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgMzQ5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQp OworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNiwgX19weXhfbl9zX2luaXQs IF9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5eF9MMV9lcnJvcikKKysgIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzYsIF9fcHl4X25fc19pbml0LCBfX3B5eF90 XzQpIDwgMCkgX19QWVhfRVJSKDAsIDM0OSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNS RUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozNTIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz NTQKKyAgKiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBGYWxzZQorICAqIAorICAqICAgICBkZWYg YWRkKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBzZWxm LmNvdW50ZXIgKz0gMQorICAqIAorICAqLworLSAgX19weXhfdF80ID0gX19QeXhfQ3lGdW5jdGlv bl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFf M2FkZCwgMCwgX19weXhfbl9zX1JlcGx5VXNlckRhdGFfYWRkLCBOVUxMLCBfX3B5eF9uX3Nfdmlk Y3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMzEp KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzUyLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X3RfNCA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzNhZGQsIDAsIF9fcHl4X25fc19S ZXBseVVzZXJEYXRhX2FkZCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19w eXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzMxKSk7IGlmICh1bmxpa2VseSghX19w eXhfdF80KSkgX19QWVhfRVJSKDAsIDM1NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RS RUYoX19weXhfdF80KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzYsIF9f cHl4X25fc19hZGQsIF9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzUyLCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzYsIF9fcHl4X25fc19h ZGQsIF9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzU0LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM1NworICAqICAgICAgICAgc2VsZi5jb3VudGVyICs9IDEKKyAgKiAKKyAgKiAg ICAgZGVmIHJlbW92ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAg ICAgICAgc2VsZi5jb3VudGVyIC09IDEKKyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfNCA9IF9fUHl4 X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBs eVVzZXJEYXRhXzVyZW1vdmUsIDAsIF9fcHl4X25fc19SZXBseVVzZXJEYXRhX3JlbW92ZSwgTlVM TCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9f cHl4X2NvZGVvYmpfXzMzKSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAs IDM1NSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBfX1B5eF9DeUZ1bmN0aW9uX05l dygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV81cmVt b3ZlLCAwLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YV9yZW1vdmUsIE5VTEwsIF9fcHl4X25fc192 aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18z MykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNTcsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBpZiAoX19QeXhfU2V0TmFt ZUluQ2xhc3MoX19weXhfdF82LCBfX3B5eF9uX3NfcmVtb3ZlLCBfX3B5eF90XzQpIDwgMCkgX19Q WVhfRVJSKDAsIDM1NSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xh c3MoX19weXhfdF82LCBfX3B5eF9uX3NfcmVtb3ZlLCBfX3B5eF90XzQpIDwgMCkgX19QWVhfRVJS KDAsIDM1NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19w eXhfdF80ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDYK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDgKKyAgKiBjZGVmIF9yZXBs eV91c2VyZGF0YXMgPSBkaWN0KCkKKyAgKiAKKyAgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmpl Y3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGRlZiBfX2luaXRfXyhz ZWxmLCBkYXRhKToKKyAgKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKyAgKi8KKy0gIF9fcHl4 X3RfNCA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKF9fcHl4X3RfNywgX19weXhfbl9zX1JlcGx5VXNl ckRhdGEsIF9fcHl4X3R1cGxlX18yNywgX19weXhfdF82LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfNCA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKF9fcHl4X3RfNywgX19weXhfbl9zX1JlcGx5 VXNlckRhdGEsIF9fcHl4X3R1cGxlX18yNywgX19weXhfdF82LCBOVUxMLCAwLCAxKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzQ4LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2Qs IF9fcHl4X25fc19SZXBseVVzZXJEYXRhLCBfX3B5eF90XzQpIDwgMCkgX19QWVhfRVJSKDAsIDM0 NiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhf bl9zX1JlcGx5VXNlckRhdGEsIF9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ4LCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwor ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgICBfX1B5eF9ERUNS RUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0MTEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 MTMKKyAgKiAgICAgIyAgICAgICAgIG1wdl9yZXN1bWUoc2VsZi5fY3R4KQorICAqIAorICAqICAg ICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGRlZiByZXF1 ZXN0X2V2ZW50KHNlbGYsIGV2ZW50LCBlbmFibGUpOgorICAqICAgICAgICAgIiIiRW5hYmxlIG9y IGRpc2FibGUgYSBnaXZlbiBldmVudC4KKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgNDExLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgNDEzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQx MgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQxNAorICAqIAorICAqICAg ICBAX2Vycm9ycworICAqICAgICBkZWYgcmVxdWVzdF9ldmVudChzZWxmLCBldmVudCwgZW5hYmxl KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgIiIiRW5hYmxlIG9y IGRpc2FibGUgYSBnaXZlbiBldmVudC4KKyAgKiAKKyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNs YXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQsIF9fcHl4X25fc19yZXF1ZXN0X2V2ZW50KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzQpKSBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE5h bWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19yZXF1ZXN0X2V2ZW50KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDE0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzQpOworICAgX19weXhfdF8xID0gTlVMTDsKKyAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsK K0BAIC0yNjQ2NSwzMSArMjY0NjUsMzEgQEAgaWYgKCFfX1B5eF9SZWZOYW5ueSkgeworICAgX19w eXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82 LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfNiwgX19weXhfdF80KTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYg KHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDExLCBfX3B5eF9MMV9lcnJvcikK KysgIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQxMywgX19weXhfTDFf ZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAq KV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5 eF9uX3NfcmVxdWVzdF9ldmVudCwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA0MTIsIF9f cHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfcmVx dWVzdF9ldmVudCwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA0MTQsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgICBQeVR5 cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyOQorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzMQorICAqICAgICAgICAgcmV0dXJuIGVycgorICAq IAorICAqICAgICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAg IGRlZiBzZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xldmVsKToKKyAgKiAgICAgICAgICIiIldyYXBz OiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgNDI5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDMxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjQzMAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzMgorICAqIAor ICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgc2V0X2xvZ19sZXZlbChzZWxmLCBsb2dsZXZl bCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICIiIldyYXBzOiBt cHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgK KyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19w eXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19zZXRfbG9n X2xldmVsKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDMwLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0 ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19z ZXRfbG9nX2xldmVsKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDMy LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgX19weXhf dF8xID0gTlVMTDsKKyAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlN ZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsKK0BAIC0yNjUwNCwzMSArMjY1MDQsMzEgQEAgaWYg KCFfX1B5eF9SZWZOYW5ueSkgeworICAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9Q eU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80KTsKKyAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9F UlIoMCwgNDI5LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF83KSkg X19QWVhfRVJSKDAsIDQzMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhf dF83KTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgaWYg KFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0X2xvZ19sZXZlbCwgX19weXhfdF83 KSA8IDApIF9fUFlYX0VSUigwLCA0MzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5RGljdF9T ZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0X2xvZ19sZXZlbCwgX19weXhfdF83KSA8IDApIF9f UFlYX0VSUigwLCA0MzIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Nyk7IF9fcHl4X3RfNyA9IDA7CisgICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ0MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0Mgor ICAqICAgICAgICAgcmV0dXJuIGVycgorICAqIAorICAqICAgICBAX2Vycm9ycyAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGRlZiBsb2FkX2NvbmZpZyhzZWxmLCBmaWxlbmFt ZSk6CisgICogICAgICAgICAiIiJXcmFwczogbXB2X2xvYWRfY29uZmlnX2ZpbGUiIiIKKyAgKi8K Ky0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3Jz KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDQwLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3Nf ZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDQyLCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ0MworICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgbG9hZF9j b25maWcoc2VsZiwgZmlsZW5hbWUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICog ICAgICAgICAiIiJXcmFwczogbXB2X2xvYWRfY29uZmlnX2ZpbGUiIiIKKyAgKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHgKKyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwg KFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9f cHl4X25fc19sb2FkX2NvbmZpZyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDAsIDQ0MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90 XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 LCBfX3B5eF9uX3NfbG9hZF9jb25maWcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCA0NDMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7 CisgICBfX3B5eF90XzEgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1 bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgeworQEAgLTI2NTQzLDMxICsyNjU0 MywzMSBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7CisgICBfX3B5eF90XzcgPSAoX19weXhfdF8x KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhf dF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQpOwor ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NykpIF9fUFlYX0VSUigwLCA0NDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDQyLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzcpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CistICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19sb2FkX2NvbmZpZywg X19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA0NDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfbG9hZF9jb25maWcsIF9fcHl4X3RfNykg PCAwKSBfX1BZWF9FUlIoMCwgNDQzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworICAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo1NzMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo1NzUKKyAgKiAgICAgICAgIHJldHVybiByZXN1bHQKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBkZWYgZ2V0X3Byb3BlcnR5X2Fz eW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6CisgICogICAgICAgICAiIiJHZXRzIHRoZSB2YWx1 ZSBvZiBhIHByb3BlcnR5IGFzeW5jaHJvbm91c2x5LgorICAqLworLSAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCA1NzMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA1NzUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTc0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTc2CisgICog CisgICogICAgIEBfZXJyb3JzCisgICogICAgIGRlZiBnZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwg cHJvcCwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAg ICAgIiIiR2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBhc3luY2hyb25vdXNseS4KKyAgKiAK KyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19w eXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19nZXRfcHJv cGVydHlfYXN5bmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA1NzQs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlP YmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhf bl9zX2dldF9wcm9wZXJ0eV9hc3luYyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhf RVJSKDAsIDU3NiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsK KyAgIF9fcHl4X3RfMSA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVu bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CitAQCAtMjY1ODIsMzEgKzI2NTgy LDMxIEBAIGlmICghX19QeXhfUmVmTmFubnkpIHsKKyAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90 XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Cisg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX1B5eF9ERUNS RUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83 KSkgX19QWVhfRVJSKDAsIDU3MywgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9f cHl4X3RfNykpIF9fUFlYX0VSUigwLCA1NzUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNyk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX2dldF9wcm9wZXJ0eV9h c3luYywgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4X0wxX2Vycm9yKQor KyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5X2FzeW5j LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDU3NiwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAgIFB5VHlwZV9Nb2RpZmll ZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjM1CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjM3CisgICogICAgICAgICByZXR1cm4gdgorICAqIAorICAqICAgICBA X2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGRlZiBzZXRfcHJv cGVydHkoc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSwgYXN5bmNocm9ub3VzPUZhbHNlLCBkYXRhPU5v bmUpOgorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfcHJvcGVydHkgYW5kIG1wdl9zZXRf cHJvcGVydHlfYXN5bmMiIiIKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgNjM1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgNjM3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzNgorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzOAorICAqIAorICAqICAgICBAX2Vy cm9ycworICAqICAgICBkZWYgc2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIHZhbHVlPVRydWUsIGFz eW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfcHJvcGVydHkgYW5kIG1wdl9zZXRfcHJv cGVydHlfYXN5bmMiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKi8KKy0gIF9f UHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19zZXRfcHJvcGVydHkpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2MzYsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3NldF9wcm9wZXJ0eSk7 IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDYzOCwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgIF9fcHl4X3RfMSA9IE5VTEw7Cisg ICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9f cHl4X3RfNikpKSB7CitAQCAtMjY2MjEsMzEgKzI2NjIxLDMxIEBAIGlmICghX19QeXhfUmVmTmFu bnkpIHsKKyAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80 ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDYzNSwgX19w eXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA2 MzcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRl bSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+ dHBfZGljdCwgX19weXhfbl9zX3NldF9wcm9wZXJ0eSwgX19weXhfdF83KSA8IDApIF9fUFlYX0VS UigwLCA2MzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVj dCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBf X3B5eF9uX3Nfc2V0X3Byb3BlcnR5LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDYzOCwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0g MDsKKyAgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjczCisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njc1CisgICogICAgICAgICByZXR1 cm4gZXJyCisgICogCisgICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAgICAgZGVmIHNldF9vcHRpb24oc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSk6CisgICog ICAgICAgICAiIiJXcmFwczogbXB2X3NldF9vcHRpb24iIiIKKyAgKi8KKy0gIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNjczLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNjc1LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjY3NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3Ngor ICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgc2V0X29wdGlvbihzZWxmLCBwcm9w LCB2YWx1ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAg IiIiV3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4 CisgICovCistICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9f cHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCBfX3B5eF9uX3Nfc2V0X29w dGlvbik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDY3NCwgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAq KV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCBfX3B5eF9uX3Nfc2V0 X29wdGlvbik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDY3NiwgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgIF9fcHl4X3RfMSA9 IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9k X0NoZWNrKF9fcHl4X3RfNikpKSB7CitAQCAtMjY2NjAsMzEgKzI2NjYwLDMxIEBAIGlmICghX19Q eXhfUmVmTmFubnkpIHsKKyAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmpl Y3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CisgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAs IDY3MywgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlY X0VSUigwLCA2NzUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7 CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURp Y3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3NldF9vcHRpb24sIF9fcHl4X3RfNykgPCAwKSBf X1BZWF9FUlIoMCwgNjc0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeURpY3RfU2V0SXRlbSgo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBf ZGljdCwgX19weXhfbl9zX3NldF9vcHRpb24sIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwg Njc2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90 XzcgPSAwOworICAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 OTUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2OTcKKyAgKiAgICAgICAg IHJldHVybiBlcnIKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKToKKyAgKiAgICAgICAgICIiIldy YXBzOiBtcHZfaW5pdGlhbGl6ZSIiIgorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA2OTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCA2OTcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njk2 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njk4CisgICogCisgICogICAg IEBfZXJyb3JzCisgICogICAgIGRlZiBpbml0aWFsaXplKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisgICogICAgICAgICAiIiJXcmFwczogbXB2X2luaXRpYWxpemUiIiIKKyAg KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNsYXNz KF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQsIF9fcHl4X25fc19pbml0aWFsaXplKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgNjk2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE5hbWVJbkNs YXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQsIF9fcHl4X25fc19pbml0aWFsaXplKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzQpKSBfX1BZWF9FUlIoMCwgNjk4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOworICAgX19weXhfdF8xID0gTlVMTDsKKyAgIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsKK0BAIC0yNjY5 OSwzMSArMjY2OTksMzEgQEAgaWYgKCFfX1B5eF9SZWZOYW5ueSkgeworICAgX19weXhfdF83ID0g KF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90 XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19w eXhfdF80KTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNjk1LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1 bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDY5NywgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBf X3B5eF90XzYgPSAwOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfaW5p dGlhbGl6ZSwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2OTYsIF9fcHl4X0wxX2Vycm9y KQorKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfaW5pdGlhbGl6ZSwgX19w eXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2OTgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgICBQeVR5cGVfTW9kaWZpZWQoX19w eXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjc1MAorICAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zdGFydCgpCisg ICogCisgICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgZGVmIG9ic2VydmVfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGF0YT1Ob25lKToKKyAgKiAgICAg ICAgICIiIldyYXBzOiBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eSIiIgorICAqLworLSAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA3NDgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA3NTAsIF9fcHl4X0wxX2Vycm9yKQor ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzQ5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzUx CisgICogCisgICogICAgIEBfZXJyb3JzCisgICogICAgIGRlZiBvYnNlcnZlX3Byb3BlcnR5KHNl bGYsIHByb3AsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgICAgICIiIldyYXBzOiBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eSIiIgorICAqICAgICAgICAgYXNz ZXJ0IHNlbGYuX2N0eAorICAqLworLSAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19w eXhfbl9zX29ic2VydmVfcHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCA3NDksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19w eXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCwgX19weXhfbl9zX29ic2VydmVfcHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCA3NTEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNCk7CisgICBfX3B5eF90XzEgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgeworQEAgLTI2NzM4 LDMxICsyNjczOCwzMSBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7CisgICBfX3B5eF90XzcgPSAo X19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3Rf MSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5 eF90XzQpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICBpZiAodW5saWtlbHko IV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA3NDgsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNzUwLCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9f cHl4X3RfNiA9IDA7CistICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19vYnNl cnZlX3Byb3BlcnR5LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDc0OSwgX19weXhfTDFf ZXJyb3IpCisrICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19vYnNlcnZlX3By b3BlcnR5LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDc1MSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAgIFB5VHlwZV9N b2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzcwCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzcyCisgICogICAgICAgICByZXR1cm4gZXJyCisgICogCisg ICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgZGVm IHVub2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBkYXRhKToKKyAgKiAgICAgICAgICIiIldyYXBzOiBt cHZfdW5vYnNlcnZlX3Byb3BlcnR5IiIiCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxO YW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDc3MCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDc3MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RS RUYoX19weXhfdF82KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 NzEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzMKKyAgKiAKKyAgKiAg ICAgQF9lcnJvcnMKKyAgKiAgICAgZGVmIHVub2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBkYXRhKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl91 bm9ic2VydmVfcHJvcGVydHkiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKi8K Ky0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc191bm9ic2VydmVfcHJv cGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NzEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3Qg KilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3Vu b2JzZXJ2ZV9wcm9wZXJ0eSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAs IDc3MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgIF9f cHl4X3RfMSA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5 KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CitAQCAtMjY3NzcsNTQgKzI2Nzc3LDU0IEBA IGlmICghX19QeXhfUmVmTmFubnkpIHsKKyAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19Q eXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDog X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CisgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19Q WVhfRVJSKDAsIDc3MCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NykpIF9fUFlYX0VSUigwLCA3NzIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNyk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0g IGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3Vub2JzZXJ2ZV9wcm9wZXJ0eSwg X19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA3NzEsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfdW5vYnNlcnZlX3Byb3BlcnR5LCBfX3B5 eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDc3MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9E RUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAgIFB5VHlwZV9Nb2RpZmllZChfX3B5 eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTM4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTQwCisgICogCisgICogY2RlZiBjbGFzcyBSZW5kZXJDb250ZXh0KG9iamVjdCk6 CisgICogICAgIEFQSV9PUEVOR0wgPSAib3BlbmdsIiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisgICogICAgIFVQREFURV9GUkFNRSA9IE1QVl9SRU5ERVJfVVBEQVRFX0ZSQU1FCisgICog CisgICovCistICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19BUElf T1BFTkdMLCBfX3B5eF9uX3Nfb3BlbmdsKSA8IDApIF9fUFlYX0VSUigwLCA5MzgsIF9fcHl4X0wx X2Vycm9yKQorKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfQVBJ X09QRU5HTCwgX19weXhfbl9zX29wZW5nbCkgPCAwKSBfX1BZWF9FUlIoMCwgOTQwLCBfX3B5eF9M MV9lcnJvcikKKyAgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfUmVuZGVyQ29udGV4dCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTM5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTQxCisgICog Y2RlZiBjbGFzcyBSZW5kZXJDb250ZXh0KG9iamVjdCk6CisgICogICAgIEFQSV9PUEVOR0wgPSAi b3BlbmdsIgorICAqICAgICBVUERBVEVfRlJBTUUgPSBNUFZfUkVOREVSX1VQREFURV9GUkFNRSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogICAgIGNkZWY6CisgICovCist ICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9yZW5kZXJfdXBkYXRlX2Zs YWcoTVBWX1JFTkRFUl9VUERBVEVfRlJBTUUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9f UFlYX0VSUigwLCA5MzksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF83ID0gX19QeXhfUHlJ bnRfRnJvbV9lbnVtX19tcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKE1QVl9SRU5ERVJfVVBEQVRFX0ZS QU1FKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgOTQxLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgaWYgKFB5RGljdF9TZXRJ dGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJD b250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfVVBEQVRFX0ZSQU1FLCBfX3B5eF90XzcpIDwgMCkg X19QWVhfRVJSKDAsIDkzOSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlEaWN0X1NldEl0ZW0o KFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRl eHQtPnRwX2RpY3QsIF9fcHl4X25fc19VUERBVEVfRlJBTUUsIF9fcHl4X3RfNykgPCAwKSBfX1BZ WF9FUlIoMCwgOTQxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90Xzcp OyBfX3B5eF90XzcgPSAwOworICAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDA5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTAxMQorICAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCisgICogCisgICogICAgIEBfZXJy b3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgZGVmIHNldF9pY2NfcHJv ZmlsZShzZWxmLCBpY2NfYmxvYik6CisgICogICAgICAgICBjZGVmOgorICAqLworLSAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDA5LCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTAxMSwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDEwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTAxMgorICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgc2V0X2ljY19wcm9m aWxlKHNlbGYsIGljY19ibG9iKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAg ICAgICAgY2RlZjoKKyAgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX3BhcmFtIHBhcmFtCisgICov CistICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LCBfX3B5eF9uX3Nfc2V0X2lj Y19wcm9maWxlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAxMCwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9i amVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LCBf X3B5eF9uX3Nfc2V0X2ljY19wcm9maWxlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgMTAxMiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKyAgIF9fcHl4X3RfMSA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CitAQCAtMjY4MzksMzEgKzI2 ODM5LDMxIEBAIGlmICghX19QeXhfUmVmTmFubnkpIHsKKyAgIF9fcHl4X3RfNyA9IChfX3B5eF90 XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5 eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7 CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX1B5eF9E RUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhf dF83KSkgX19QWVhfRVJSKDAsIDEwMDksIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMTAxMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9HT1RSRUYoX19weXhfdF83KTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0 X2ljY19wcm9maWxlLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDEwMTAsIF9fcHl4X0wx X2Vycm9yKQorKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0 X2ljY19wcm9maWxlLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDEwMTIsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgICBQ eVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNv bnRleHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjgKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDMwCisgICogICAgICAgICByZXR1 cm4gZXJyCisgICogCisgICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAgICAgZGVmIHNldF9hbWJpZW50X2xpZ2h0KHNlbGYsIGx1eCk6CisgICogICAgICAg ICBjZGVmOgorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9f cHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAx MDI4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhf dF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgMTAzMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI5CisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAzMQorICAqIAorICAqICAgICBAX2Vycm9ycwor ICAqICAgICBkZWYgc2V0X2FtYmllbnRfbGlnaHQoc2VsZiwgbHV4KTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgY2RlZjoKKyAgKiAgICAgICAgICAgICBtcHZfcmVu ZGVyX3BhcmFtIHBhcmFtCisgICovCistICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQs IChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250 ZXh0LCBfX3B5eF9uX3Nfc2V0X2FtYmllbnRfbGlnaHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCAxMDI5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X1JlbmRlckNvbnRleHQsIF9fcHl4X25fc19zZXRfYW1iaWVudF9saWdodCk7IGlmICh1 bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwMzEsIF9fcHl4X0wxX2Vycm9yKQor ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICBfX3B5eF90XzEgPSBOVUxMOworICAgaWYg KENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90 XzYpKSkgeworQEAgLTI2ODc4LDMxICsyNjg3OCwzMSBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7 CisgICBfX3B5eF90XzcgPSAoX19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhf X3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF82LCBfX3B5eF90XzQpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7 CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMDI4LCBfX3B5eF9M MV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEwMzAs IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisgICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbSgo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dC0+dHBfZGljdCwgX19weXhfbl9zX3NldF9hbWJpZW50X2xpZ2h0LCBfX3B5eF90XzcpIDwgMCkg X19QWVhfRVJSKDAsIDEwMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5RGljdF9TZXRJdGVt KChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250 ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0X2FtYmllbnRfbGlnaHQsIF9fcHl4X3RfNykgPCAw KSBfX1BZWF9FUlIoMCwgMTAzMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCk7CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwNzAKKyAgKiAgICAgICAgIHJldHVybiByZXQKKyAgKiAKKyAgKiAgICAgQF9lcnJv cnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBkZWYgcmVuZGVyKHNlbGYs CisgICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLAorICAqLworLSAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDY4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTA3MCwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDY5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA3MQorICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgcmVuZGVyKHNlbGYsICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJv PU5vbmUsCisgICogICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorICAqLworLSAgX19QeXhf R2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgX19weXhfbl9zX3JlbmRlcik7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwNjksIF9fcHl4X0wxX2Vycm9yKQorKyAg X19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgX19weXhfbl9zX3JlbmRlcik7IGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwNzEsIF9fcHl4X0wxX2Vycm9y KQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICBfX3B5eF90XzEgPSBOVUxMOworICAg aWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5 eF90XzYpKSkgeworQEAgLTI2OTE3LDExNCArMjY5MTcsMTE0IEBAIGlmICghX19QeXhfUmVmTmFu bnkpIHsKKyAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80 ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEwNjgsIF9f cHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwg MTA3MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgaWYgKFB5RGljdF9TZXRJ dGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJD b250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfcmVuZGVyLCBfX3B5eF90XzcpIDwgMCkgX19QWVhf RVJSKDAsIDEwNjksIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9i amVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50 cF9kaWN0LCBfX3B5eF9uX3NfcmVuZGVyLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDEw NzEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3Rf NyA9IDA7CisgICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckNvbnRleHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExMzIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTM0CisgICog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfcGFyYW1zLCAqYXJncywgKiprd2Fy Z3MpCisgICogCisgICogY2xhc3MgQ2FsbGJhY2tUaHJlYWQoVGhyZWFkKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICogICAgICAg ICBUaHJlYWQuX19pbml0X18oc2VsZikKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF83LCBfX3B5eF9uX3NfVGhyZWFkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90Xzcp KSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfNywgX19weXhfbl9zX1RocmVhZCk7IGlmICh1bmxpa2VseSghX19w eXhfdF83KSkgX19QWVhfRVJSKDAsIDExMzQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNyk7CistICBfX3B5eF90XzYgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzYgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgMTEzNCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82 KTsKKyAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF83KTsKKyAgIFB5VHVwbGVfU0VUX0lURU0oX19w eXhfdF82LCAwLCBfX3B5eF90XzcpOworICAgX19weXhfdF83ID0gMDsKKy0gIF9fcHl4X3RfNyA9 IF9fUHl4X0NhbGN1bGF0ZU1ldGFjbGFzcyhOVUxMLCBfX3B5eF90XzYpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMTMyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNyA9IF9fUHl4X0NhbGN1bGF0ZU1ldGFjbGFzcyhOVUxMLCBfX3B5eF90XzYpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMTM0LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgX19weXhfdF80ID0gX19QeXhfUHkzTWV0YWNs YXNzUHJlcGFyZShfX3B5eF90XzcsIF9fcHl4X3RfNiwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFk LCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3Nf dmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2VseSghX19w eXhfdF80KSkgX19QWVhfRVJSKDAsIDExMzIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF80 ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzcsIF9fcHl4X3RfNiwgX19weXhf bl9zX0NhbGxiYWNrVGhyZWFkLCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIChQeU9iamVjdCAq KSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7 IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDExMzQsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTEzMworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExMzUKKyAgKiAKKyAgKiBjbGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOgorICAqICAg ICBkZWYgX19pbml0X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQorICAqICAgICAgICAgc2VsZi5kYWVtb24gPSBU cnVlCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRl Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8xX19pbml0X18sIDAsIF9f cHl4X25fc19DYWxsYmFja1RocmVhZF9fX2luaXQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJf bGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18zNSkpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTMzLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzFfX2luaXRfXywgMCwgX19weXhfbl9zX0Nh bGxiYWNrVGhyZWFkX19faW5pdCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwg X19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzM1KSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMzUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF80 LCBfX3B5eF9uX3NfaW5pdCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTMzLCBfX3B5 eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4 X25fc19pbml0LCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDExMzUsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExNDMKKyAgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IEZh bHNlCisgICogCisgICogICAgIGRlZiBzaHV0ZG93bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gVHJ1ZQorICAqICAgICAg ICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVu Y3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhy ZWFkXzNzaHV0ZG93biwgMCwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX3NodXRkb3duLCBOVUxM LCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19w eXhfY29kZW9ial9fMzcpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MTE0MSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05l dygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8zc2h1 dGRvd24sIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9zaHV0ZG93biwgTlVMTCwgX19weXhf bl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVv YmpfXzM3KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNDMsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9fcHl4X3RfMSkg PCAwKSBfX1BZWF9FUlIoMCwgMTE0MSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9fcHl4X3RfMSkgPCAw KSBfX1BZWF9FUlIoMCwgMTE0MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTQ2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0OAor ICAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQorICAqIAorICAqICAgICBkZWYgY2FsbChz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5sb2Nr LnJlbGVhc2UoKQorICAqIAorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfQ3lGdW5jdGlvbl9O ZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNWNh bGwsIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9jYWxsLCBOVUxMLCBfX3B5eF9uX3Nfdmlk Y3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMzkp KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE0NiwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF81Y2FsbCwgMCwgX19weXhfbl9z X0NhbGxiYWNrVGhyZWFkX2NhbGwsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYs IF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18zOSkpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTQ4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NCwgX19weXhfbl9zX2NhbGwsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE0NiwgX19w eXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5 eF9uX3NfY2FsbCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTQ4LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDkKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTUxCisgICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgp CisgICogCisgICogICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisgICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKyAgKiAK KyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzdzZXQsIDAsIF9fcHl4X25fc19D YWxsYmFja1RocmVhZF9zZXQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9f cHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX180MSkpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3Rf MSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xNENhbGxiYWNrVGhyZWFkXzdzZXQsIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9zZXQs IE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3Qg KilfX3B5eF9jb2Rlb2JqX180MSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAxMTUxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX3NldCwgX19w eXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChf X1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19zZXQsIF9fcHl4X3RfMSkg PCAwKSBfX1BZWF9FUlIoMCwgMTE1MSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYo X19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTUyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1 NAorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisgICogCisgICogICAgIGRl ZiBydW4oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHdo aWxlIG5vdCBzZWxmLmlzc2h1dGRvd246CisgICogICAgICAgICAgICAgc2VsZi5sb2NrLmFjcXVp cmUoVHJ1ZSkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5 eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzlydW4sIDAsIF9f cHl4X25fc19DYWxsYmFja1RocmVhZF9ydW4sIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGli c19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX180MykpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTUyLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzlydW4sIDAsIF9fcHl4X25fc19DYWxsYmFja1Ro cmVhZF9ydW4sIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgo UHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX180MykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxMTU0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9z X3J1biwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTUyLCBfX3B5eF9MMV9lcnJvcikK KysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19ydW4sIF9f cHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE1NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTU3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTE1OQorICAqICAgICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNrKHNlbGYuY2FsbGJh Y2spIGlmIHNlbGYuY2FsbGJhY2sgZWxzZSBOb25lCisgICogCisgICogICAgIGRlZiBtcHZfY2Fs bGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICog ICAgICAgICB0cnk6CisgICogICAgICAgICAgICAgY2FsbGJhY2soKQorICAqLworLSAgX19weXhf dF8xID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18z bXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTFtcHZfY2FsbGJhY2ssIDAsIF9fcHl4X25fc19DYWxsYmFj a1RocmVhZF9tcHZfY2FsbGJhY2ssIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYs IF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX180NSkpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNENhbGxiYWNrVGhyZWFkXzExbXB2X2NhbGxiYWNrLCAwLCBfX3B5eF9uX3NfQ2FsbGJh Y2tUaHJlYWRfbXB2X2NhbGxiYWNrLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2 LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fNDUpKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE1OSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90 XzQsIF9fcHl4X25fc19tcHZfY2FsbGJhY2ssIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwg MTE1NywgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF80LCBfX3B5eF9uX3NfbXB2X2NhbGxiYWNrLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAs IDExNTksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4 X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMgor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzQKKyAgKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXJhbXMsICphcmdzLCAqKmt3YXJncykKKyAgKiAK KyAgKiBjbGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgKiAgICAgICAgIFRocmVhZC5f X2luaXRfXyhzZWxmKQorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUo X19weXhfdF83LCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIF9fcHl4X3RfNiwgX19weXhfdF80 LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEz MiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZShf X3B5eF90XzcsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfdF82LCBfX3B5eF90XzQs IE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTM0 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgaWYgKFB5 RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfdF8x KSA8IDApIF9fUFlYX0VSUigwLCAxMTMyLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeURpY3Rf U2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIF9fcHl4X3RfMSkgPCAw KSBfX1BZWF9FUlIoMCwgMTEzNCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5 eF90XzQgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Citk aWZmIC0tZ2l0IGEvdmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCBiL3ZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgKK2luZGV4IDhhZjJkY2M3Li4xZGVjZGRhOCAxMDA2NDQKKy0tLSBhL3Zp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgKKysrKyBiL3ZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgKK0BAIC0zMCw4ICszMCwxMCBAQCBmcm9tIGNsaWVudCBjaW1wb3J0ICoKKyBfX3ZlcnNp b25fXyA9ICIwLjMuMCIKKyBfX2F1dGhvcl9fID0gIkFuZHJlIEQiCisgCistX1JFUVVJUkVEX0NB UElfTUFKT1IgPSAyCistX01JTl9DQVBJX01JTk9SID0gMAorKyNfUkVRVUlSRURfQ0FQSV9NQUpP UiA9IDIKKysjX01JTl9DQVBJX01JTk9SID0gMAorK19SRVFVSVJFRF9DQVBJX01BSk9SID0gMQor K19NSU5fQ0FQSV9NSU5PUiA9IDEwOQorIAorIGNkZWYgdW5zaWduZWQgbG9uZyBfQ0FQSV9WRVJT SU9OCisgd2l0aCBub2dpbDoKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvdmlkY3V0dGVyL3RlbXBsYXRl IGIvc3JjcGtncy92aWRjdXR0ZXIvdGVtcGxhdGUKaW5kZXggMDdiZGE1MGM5MTdjLi45M2U2ZGJl ZmFhY2MgMTAwNjQ0Ci0tLSBhL3NyY3BrZ3MvdmlkY3V0dGVyL3RlbXBsYXRlCisrKyBiL3NyY3Br Z3MvdmlkY3V0dGVyL3RlbXBsYXRlCkBAIC0xLDcgKzEsNyBAQAogIyBUZW1wbGF0ZSBmaWxlIGZv ciAndmlkY3V0dGVyJwogcGtnbmFtZT12aWRjdXR0ZXIKLXZlcnNpb249Ni4wLjAKLXJldmlzaW9u PTYKK3ZlcnNpb249Ni4wLjUuMQorcmV2aXNpb249MQogYnVpbGRfc3R5bGU9cHl0aG9uMy1tb2R1 bGUKIGhvc3RtYWtlZGVwZW5kcz0icHl0aG9uMy1zZXR1cHRvb2xzIHB5dGhvbjMtQ3l0aG9uIgog bWFrZWRlcGVuZHM9Im1wdi1kZXZlbCBweXRob24zLWRldmVsIgpAQCAtMTIsNyArMTIsNyBAQCBt YWludGFpbmVyPSJPcnBoYW5lZCA8b3JwaGFuQHZvaWRsaW51eC5vcmc+IgogbGljZW5zZT0iR1BM LTMuMC1vci1sYXRlciIKIGhvbWVwYWdlPSJodHRwczovL2dpdGh1Yi5jb20vb3ptYXJ0aWFuL3Zp ZGN1dHRlciIKIGRpc3RmaWxlcz0iaHR0cHM6Ly9naXRodWIuY29tL296bWFydGlhbi92aWRjdXR0 ZXIvYXJjaGl2ZS9yZWZzL3RhZ3MvJHt2ZXJzaW9ufS50YXIuZ3oiCi1jaGVja3N1bT1jMDliZTdl Y2VhZjQyZmY3MjExZmUzYjgxMjUyNzljNGZlYzdmN2QyNTFkMjcyYjYxZDU3OWU0MjZiZDRlMmMy CitjaGVja3N1bT1jNjM3NGVhZWRiODQ1ZjllNTgwZTU1NWRkMTJjMWRiMWNmMmZmYTI4ZDM3NTZi MDhlMmFlMjhjMWE0Y2Q0YTk2CiAKIHByZV9idWlsZCgpIHsKIAlybSAtZiB2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYuYwoKRnJvbSA5NjMwNmJmOGY1OWExZGNkNmZhMDY4ZjRhZWQzNzFkOTkyNWRk ODUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgQmVuc29uIDxhYmVuc29u K3ZvaWRAZ21haWwuY29tPgpEYXRlOiBNb24sIDE0IE5vdiAyMDIyIDA4OjA4OjMxIC0wNjAwClN1 YmplY3Q6IFtQQVRDSCA4LzldIHN0cmVtaW8tc2hlbGw6IHJlYnVpbGQgZm9yIG1wdi0wLjM1LjAK Ci0tLQogc3JjcGtncy9zdHJlbWlvLXNoZWxsL3RlbXBsYXRlIHwgMiArLQogMSBmaWxlIGNoYW5n ZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjcGtncy9z dHJlbWlvLXNoZWxsL3RlbXBsYXRlIGIvc3JjcGtncy9zdHJlbWlvLXNoZWxsL3RlbXBsYXRlCmlu ZGV4IDY0MTAwMGQ2ZmU2NC4uMmIwYzBiMjNhZjY5IDEwMDY0NAotLS0gYS9zcmNwa2dzL3N0cmVt aW8tc2hlbGwvdGVtcGxhdGUKKysrIGIvc3JjcGtncy9zdHJlbWlvLXNoZWxsL3RlbXBsYXRlCkBA IC0xLDcgKzEsNyBAQAogIyBUZW1wbGF0ZSBmaWxlIGZvciAnc3RyZW1pby1zaGVsbCcKIHBrZ25h bWU9c3RyZW1pby1zaGVsbAogdmVyc2lvbj00LjQuMTU5Ci1yZXZpc2lvbj0yCityZXZpc2lvbj0z CiBfc2luZ2xlYXBwbGljYXRpb25faGFzaD1mMWUxNTA4MWRjNTdhOWMwM2Y3ZjRmMTY1Njc3ZjE4 ODAyZTE0MzdhCiBfbGlibXB2X2hhc2g9ODIyYTQxYTEwODdkYWYyOTExZmMzMzZmYmQ5NTA5Zjk2 MjE1OGZlZgogY3JlYXRlX3dya3NyYz15ZXMKCkZyb20gM2RiNWUyOGRlNjkzNjAzZmZkYmI4YjI3 OTEyYjk2NjE1OWEyYjNjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogQW5kcmV3IEJl bnNvbiA8YWJlbnNvbit2b2lkQGdtYWlsLmNvbT4KRGF0ZTogTW9uLCAxNCBOb3YgMjAyMiAwODow ODozMSAtMDYwMApTdWJqZWN0OiBbUEFUQ0ggOS85XSB2aWRjdXR0ZXI6IHVzZSBzeXN0ZW0gbXB2 IGhlYWRlcnMKCi0tLQogc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0xLnBhdGNo IHwgNTIyNzEgLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9t cHYtMC4zNS0zLnBhdGNoIHwgMTMyNjAgLS0tLS0KIHNyY3BrZ3MvdmlkY3V0dGVyL3RlbXBsYXRl ICAgICAgICAgICAgICAgICB8ICAgIDE0ICstCiAzIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlv bnMoKyksIDY1NTM1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvdmlkY3V0dGVy L3BhdGNoZXMvbXB2LTAuMzUtMS5wYXRjaCBiL3NyY3BrZ3MvdmlkY3V0dGVyL3BhdGNoZXMvbXB2 LTAuMzUtMS5wYXRjaAppbmRleCBjMzNiYWQ0YTgyYmIuLjc1OWI3ODdmN2E2OSAxMDA2NDQKLS0t IGEvc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0xLnBhdGNoCisrKyBiL3NyY3Br Z3MvdmlkY3V0dGVyL3BhdGNoZXMvbXB2LTAuMzUtMS5wYXRjaApAQCAtOCw3ICs4LDYgQEAgU3Vi amVjdDogW1BBVENIXSBQYXRjaGVzIHRvIHB5bXB2IHRvIHdvcmthcm91bmQgb3BlbmdsX2NiIGRl cHJlY2F0aW9uIGZyb20KIAogLS0tCiAgdmlkY3V0dGVyL2xpYnMvcHltcHYvY2xpZW50LnB4ZCB8 ICAgIDU0ICstCi0gdmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LmMgICAgICB8IDQ2Mzk0ICsrKysr KysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQogIHZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgg ICAgfCAgIDE5MiArLQogIDMgZmlsZXMgY2hhbmdlZCwgMjE4MzIgaW5zZXJ0aW9ucygrKSwgMjQ4 MDggZGVsZXRpb25zKC0pCiAKQEAgLTExMyw1MjI3NiArMTEyLDYgQEAgaW5kZXggYmVmZTIxOWUu LmQ5YTg4MTZmIDEwMDY0NAogIAogIAogIGNkZWYgZXh0ZXJuIGZyb20gIm1wdi9yZW5kZXIuaCI6 Ci1kaWZmIC0tZ2l0IGEvdmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LmMgYi92aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYuYwotaW5kZXggMjAyYWFlOGMuLmEzNTIyZWY1IDEwMDY0NAotLS0tIGEvdmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LmMKLSsrKyBiL3ZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5j Ci1AQCAtMSw0ICsxLDQgQEAKLS0vKiBHZW5lcmF0ZWQgYnkgQ3l0aG9uIDAuMjkuMjEgKi8KLSsv KiBHZW5lcmF0ZWQgYnkgQ3l0aG9uIDAuMjkuMjggKi8KLSAKLSAvKiBCRUdJTjogQ3l0aG9uIE1l dGFkYXRhCi0gewotQEAgLTE5LDE1ICsxOSwxNyBAQAotIH0KLSBFTkQ6IEN5dGhvbiBNZXRhZGF0 YSAqLwotIAotKyNpZm5kZWYgUFlfU1NJWkVfVF9DTEVBTgotICNkZWZpbmUgUFlfU1NJWkVfVF9D TEVBTgotKyNlbmRpZiAvKiBQWV9TU0laRV9UX0NMRUFOICovCi0gI2luY2x1ZGUgIlB5dGhvbi5o IgotICNpZm5kZWYgUHlfUFlUSE9OX0gKLSAgICAgI2Vycm9yIFB5dGhvbiBoZWFkZXJzIG5lZWRl ZCB0byBjb21waWxlIEMgZXh0ZW5zaW9ucywgcGxlYXNlIGluc3RhbGwgZGV2ZWxvcG1lbnQgdmVy c2lvbiBvZiBQeXRob24uCi0gI2VsaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDYwMDAwIHx8ICgw eDAzMDAwMDAwIDw9IFBZX1ZFUlNJT05fSEVYICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzAzMDAw MCkKLSAgICAgI2Vycm9yIEN5dGhvbiByZXF1aXJlcyBQeXRob24gMi42KyBvciBQeXRob24gMy4z Ky4KLSAjZWxzZQotLSNkZWZpbmUgQ1lUSE9OX0FCSSAiMF8yOV8yMSIKLS0jZGVmaW5lIENZVEhP Tl9IRVhfVkVSU0lPTiAweDAwMUQxNUYwCi0rI2RlZmluZSBDWVRIT05fQUJJICIwXzI5XzI4Igot KyNkZWZpbmUgQ1lUSE9OX0hFWF9WRVJTSU9OIDB4MDAxRDFDRjAKLSAjZGVmaW5lIENZVEhPTl9G VVRVUkVfRElWSVNJT04gMAotICNpbmNsdWRlIDxzdGRkZWYuaD4KLSAjaWZuZGVmIG9mZnNldG9m Ci1AQCAtMTc0LDcgKzE3Niw3IEBAIEVORDogQ3l0aG9uIE1ldGFkYXRhICovCi0gICAjaWZuZGVm IENZVEhPTl9VU0VfVU5JQ09ERV9JTlRFUk5BTFMKLSAgICAgI2RlZmluZSBDWVRIT05fVVNFX1VO SUNPREVfSU5URVJOQUxTIDEKLSAgICNlbmRpZgotLSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgw MzAzMDBGMAotKyAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzAzMDBGMCB8fCBQWV9WRVJTSU9O X0hFWCA+PSAweDAzMEIwMEEyCi0gICAgICN1bmRlZiBDWVRIT05fVVNFX1VOSUNPREVfV1JJVEVS Ci0gICAgICNkZWZpbmUgQ1lUSE9OX1VTRV9VTklDT0RFX1dSSVRFUiAwCi0gICAjZWxpZiAhZGVm aW5lZChDWVRIT05fVVNFX1VOSUNPREVfV1JJVEVSKQotQEAgLTE4OSwxMSArMTkxLDE0IEBAIEVO RDogQ3l0aG9uIE1ldGFkYXRhICovCi0gICAjaWZuZGVmIENZVEhPTl9VTlBBQ0tfTUVUSE9EUwot ICAgICAjZGVmaW5lIENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAxCi0gICAjZW5kaWYKLS0gICNpZm5k ZWYgQ1lUSE9OX0ZBU1RfVEhSRUFEX1NUQVRFCi0rICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgw MzBCMDBBNAotKyAgICAjdW5kZWYgQ1lUSE9OX0ZBU1RfVEhSRUFEX1NUQVRFCi0rICAgICNkZWZp bmUgQ1lUSE9OX0ZBU1RfVEhSRUFEX1NUQVRFIDAKLSsgICNlbGlmICFkZWZpbmVkKENZVEhPTl9G QVNUX1RIUkVBRF9TVEFURSkKLSAgICAgI2RlZmluZSBDWVRIT05fRkFTVF9USFJFQURfU1RBVEUg MQotICAgI2VuZGlmCi0gICAjaWZuZGVmIENZVEhPTl9GQVNUX1BZQ0FMTAotLSAgICAjZGVmaW5l IENZVEhPTl9GQVNUX1BZQ0FMTCAxCi0rICAgICNkZWZpbmUgQ1lUSE9OX0ZBU1RfUFlDQUxMIChQ WV9WRVJTSU9OX0hFWCA8IDB4MDMwQjAwQTEpCi0gICAjZW5kaWYKLSAgICNpZm5kZWYgQ1lUSE9O X1BFUDQ4OV9NVUxUSV9QSEFTRV9JTklUCi0gICAgICNkZWZpbmUgQ1lUSE9OX1BFUDQ4OV9NVUxU SV9QSEFTRV9JTklUIChQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDUwMDAwKQotQEAgLTIwNCw3ICsy MDksMTAgQEAgRU5EOiBDeXRob24gTWV0YWRhdGEgKi8KLSAgICNpZm5kZWYgQ1lUSE9OX1VTRV9E SUNUX1ZFUlNJT05TCi0gICAgICNkZWZpbmUgQ1lUSE9OX1VTRV9ESUNUX1ZFUlNJT05TIChQWV9W RVJTSU9OX0hFWCA+PSAweDAzMDYwMEIxKQotICAgI2VuZGlmCi0tICAjaWZuZGVmIENZVEhPTl9V U0VfRVhDX0lORk9fU1RBQ0sKLSsgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMEIwMEE0Ci0r ICAgICN1bmRlZiBDWVRIT05fVVNFX0VYQ19JTkZPX1NUQUNLCi0rICAgICNkZWZpbmUgQ1lUSE9O X1VTRV9FWENfSU5GT19TVEFDSyAwCi0rICAjZWxpZiAhZGVmaW5lZChDWVRIT05fVVNFX0VYQ19J TkZPX1NUQUNLKQotICAgICAjZGVmaW5lIENZVEhPTl9VU0VfRVhDX0lORk9fU1RBQ0sgKFBZX1ZF UlNJT05fSEVYID49IDB4MDMwNzAwQTMpCi0gICAjZW5kaWYKLSAjZW5kaWYKLUBAIC0yMTIsNyAr MjIwLDkgQEAgRU5EOiBDeXRob24gTWV0YWRhdGEgKi8KLSAjZGVmaW5lIENZVEhPTl9GQVNUX1BZ Q0NBTEwgIChDWVRIT05fRkFTVF9QWUNBTEwgJiYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA2MDBC MSkKLSAjZW5kaWYKLSAjaWYgQ1lUSE9OX1VTRV9QWUxPTkdfSU5URVJOQUxTCi0tICAjaW5jbHVk ZSAibG9uZ2ludHJlcHIuaCIKLSsgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotKyAgICAjaW5j bHVkZSAibG9uZ2ludHJlcHIuaCIKLSsgICNlbmRpZgotICAgI3VuZGVmIFNISUZUCi0gICAjdW5k ZWYgQkFTRQotICAgI3VuZGVmIE1BU0sKLUBAIC0zMjksOSArMzM5LDY4IEBAIEVORDogQ3l0aG9u IE1ldGFkYXRhICovCi0gICAjZGVmaW5lIF9fUHl4X0RlZmF1bHRDbGFzc1R5cGUgUHlDbGFzc19U eXBlCi0gI2Vsc2UKLSAgICNkZWZpbmUgX19QeXhfQlVJTFRJTl9NT0RVTEVfTkFNRSAiYnVpbHRp bnMiCi0tI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwQTQgJiYgUFlfVkVSU0lPTl9IRVgg PCAweDAzMDgwMEIyCi0tICAjZGVmaW5lIF9fUHl4X1B5Q29kZV9OZXcoYSwgaywgbCwgcywgZiwg Y29kZSwgYywgbiwgdiwgZnYsIGNlbGwsIGZuLCBuYW1lLCBmbGluZSwgbG5vcylcCi0tICAgICAg ICAgIFB5Q29kZV9OZXcoYSwgMCwgaywgbCwgcywgZiwgY29kZSwgYywgbiwgdiwgZnYsIGNlbGws IGZuLCBuYW1lLCBmbGluZSwgbG5vcykKLSsgICNkZWZpbmUgX19QeXhfRGVmYXVsdENsYXNzVHlw ZSBQeVR5cGVfVHlwZQotKyNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMEIwMEExCi0rICAgIHN0 YXRpYyBDWVRIT05fSU5MSU5FIFB5Q29kZU9iamVjdCogX19QeXhfUHlDb2RlX05ldyhpbnQgYSwg aW50IGssIGludCBsLCBpbnQgcywgaW50IGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjb2RlLCBQeU9iamVjdCAqYywgUHlP YmplY3QqIG4sIFB5T2JqZWN0ICp2LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZnYsIFB5T2JqZWN0ICpjZWxsLCBQeU9iamVj dCogZm4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB5T2JqZWN0ICpuYW1lLCBpbnQgZmxpbmUsIFB5T2JqZWN0ICpsbm9zKSB7Ci0rICAgICAg ICBQeU9iamVjdCAqa3dkcz1OVUxMLCAqYXJnY291bnQ9TlVMTCwgKnBvc29ubHlhcmdjb3VudD1O VUxMLCAqa3dvbmx5YXJnY291bnQ9TlVMTDsKLSsgICAgICAgIFB5T2JqZWN0ICpubG9jYWxzPU5V TEwsICpzdGFja3NpemU9TlVMTCwgKmZsYWdzPU5VTEwsICpyZXBsYWNlPU5VTEwsICpjYWxsX3Jl c3VsdD1OVUxMLCAqZW1wdHk9TlVMTDsKLSsgICAgICAgIGNvbnN0IGNoYXIgKmZuX2NzdHI9TlVM TDsKLSsgICAgICAgIGNvbnN0IGNoYXIgKm5hbWVfY3N0cj1OVUxMOwotKyAgICAgICAgUHlDb2Rl T2JqZWN0KiBjbz1OVUxMOwotKyAgICAgICAgUHlPYmplY3QgKnR5cGUsICp2YWx1ZSwgKnRyYWNl YmFjazsKLSsgICAgICAgIFB5RXJyX0ZldGNoKCZ0eXBlLCAmdmFsdWUsICZ0cmFjZWJhY2spOwot KyAgICAgICAgaWYgKCEoa3dkcz1QeURpY3RfTmV3KCkpKSBnb3RvIGVuZDsKLSsgICAgICAgIGlm ICghKGFyZ2NvdW50PVB5TG9uZ19Gcm9tTG9uZyhhKSkpIGdvdG8gZW5kOwotKyAgICAgICAgaWYg KFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3ZHMsICJjb19hcmdjb3VudCIsIGFyZ2NvdW50KSAhPSAw KSBnb3RvIGVuZDsKLSsgICAgICAgIGlmICghKHBvc29ubHlhcmdjb3VudD1QeUxvbmdfRnJvbUxv bmcoMCkpKSBnb3RvIGVuZDsKLSsgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2Rz LCAiY29fcG9zb25seWFyZ2NvdW50IiwgcG9zb25seWFyZ2NvdW50KSAhPSAwKSBnb3RvIGVuZDsK LSsgICAgICAgIGlmICghKGt3b25seWFyZ2NvdW50PVB5TG9uZ19Gcm9tTG9uZyhrKSkpIGdvdG8g ZW5kOwotKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3ZHMsICJjb19rd29ubHlh cmdjb3VudCIsIGt3b25seWFyZ2NvdW50KSAhPSAwKSBnb3RvIGVuZDsKLSsgICAgICAgIGlmICgh KG5sb2NhbHM9UHlMb25nX0Zyb21Mb25nKGwpKSkgZ290byBlbmQ7Ci0rICAgICAgICBpZiAoUHlE aWN0X1NldEl0ZW1TdHJpbmcoa3dkcywgImNvX25sb2NhbHMiLCBubG9jYWxzKSAhPSAwKSBnb3Rv IGVuZDsKLSsgICAgICAgIGlmICghKHN0YWNrc2l6ZT1QeUxvbmdfRnJvbUxvbmcocykpKSBnb3Rv IGVuZDsKLSsgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2RzLCAiY29fc3RhY2tz aXplIiwgc3RhY2tzaXplKSAhPSAwKSBnb3RvIGVuZDsKLSsgICAgICAgIGlmICghKGZsYWdzPVB5 TG9uZ19Gcm9tTG9uZyhmKSkpIGdvdG8gZW5kOwotKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVt U3RyaW5nKGt3ZHMsICJjb19mbGFncyIsIGZsYWdzKSAhPSAwKSBnb3RvIGVuZDsKLSsgICAgICAg IGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2RzLCAiY29fY29kZSIsIGNvZGUpICE9IDApIGdv dG8gZW5kOwotKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3ZHMsICJjb19jb25z dHMiLCBjKSAhPSAwKSBnb3RvIGVuZDsKLSsgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmlu Zyhrd2RzLCAiY29fbmFtZXMiLCBuKSAhPSAwKSBnb3RvIGVuZDsKLSsgICAgICAgIGlmIChQeURp Y3RfU2V0SXRlbVN0cmluZyhrd2RzLCAiY29fdmFybmFtZXMiLCB2KSAhPSAwKSBnb3RvIGVuZDsK LSsgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2RzLCAiY29fZnJlZXZhcnMiLCBm dikgIT0gMCkgZ290byBlbmQ7Ci0rICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoa3dk cywgImNvX2NlbGx2YXJzIiwgY2VsbCkgIT0gMCkgZ290byBlbmQ7Ci0rICAgICAgICBpZiAoUHlE aWN0X1NldEl0ZW1TdHJpbmcoa3dkcywgImNvX2xpbmV0YWJsZSIsIGxub3MpICE9IDApIGdvdG8g ZW5kOwotKyAgICAgICAgaWYgKCEoZm5fY3N0cj1QeVVuaWNvZGVfQXNVVEY4QW5kU2l6ZShmbiwg TlVMTCkpKSBnb3RvIGVuZDsKLSsgICAgICAgIGlmICghKG5hbWVfY3N0cj1QeVVuaWNvZGVfQXNV VEY4QW5kU2l6ZShuYW1lLCBOVUxMKSkpIGdvdG8gZW5kOwotKyAgICAgICAgaWYgKCEoY28gPSBQ eUNvZGVfTmV3RW1wdHkoZm5fY3N0ciwgbmFtZV9jc3RyLCBmbGluZSkpKSBnb3RvIGVuZDsKLSsg ICAgICAgIGlmICghKHJlcGxhY2UgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKChQeU9iamVjdCop Y28sICJyZXBsYWNlIikpKSBnb3RvIGNsZWFudXBfY29kZV90b287Ci0rICAgICAgICBpZiAoIShl bXB0eSA9IFB5VHVwbGVfTmV3KDApKSkgZ290byBjbGVhbnVwX2NvZGVfdG9vOyAvLyB1bmZvcnR1 bmF0ZWx5IF9fcHl4X2VtcHR5X3R1cGxlIGlzbid0IGF2YWlsYWJsZSBoZXJlCi0rICAgICAgICBp ZiAoIShjYWxsX3Jlc3VsdCA9IFB5T2JqZWN0X0NhbGwocmVwbGFjZSwgZW1wdHksIGt3ZHMpKSkg Z290byBjbGVhbnVwX2NvZGVfdG9vOwotKyAgICAgICAgUHlfWERFQ1JFRigoUHlPYmplY3QqKWNv KTsKLSsgICAgICAgIGNvID0gKFB5Q29kZU9iamVjdCopY2FsbF9yZXN1bHQ7Ci0rICAgICAgICBj YWxsX3Jlc3VsdCA9IE5VTEw7Ci0rICAgICAgICBpZiAoMCkgewotKyAgICAgICAgICAgIGNsZWFu dXBfY29kZV90b286Ci0rICAgICAgICAgICAgUHlfWERFQ1JFRigoUHlPYmplY3QqKWNvKTsKLSsg ICAgICAgICAgICBjbyA9IE5VTEw7Ci0rICAgICAgICB9Ci0rICAgICAgICBlbmQ6Ci0rICAgICAg ICBQeV9YREVDUkVGKGt3ZHMpOwotKyAgICAgICAgUHlfWERFQ1JFRihhcmdjb3VudCk7Ci0rICAg ICAgICBQeV9YREVDUkVGKHBvc29ubHlhcmdjb3VudCk7Ci0rICAgICAgICBQeV9YREVDUkVGKGt3 b25seWFyZ2NvdW50KTsKLSsgICAgICAgIFB5X1hERUNSRUYobmxvY2Fscyk7Ci0rICAgICAgICBQ eV9YREVDUkVGKHN0YWNrc2l6ZSk7Ci0rICAgICAgICBQeV9YREVDUkVGKHJlcGxhY2UpOwotKyAg ICAgICAgUHlfWERFQ1JFRihjYWxsX3Jlc3VsdCk7Ci0rICAgICAgICBQeV9YREVDUkVGKGVtcHR5 KTsKLSsgICAgICAgIGlmICh0eXBlKSB7Ci0rICAgICAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBl LCB2YWx1ZSwgdHJhY2ViYWNrKTsKLSsgICAgICAgIH0KLSsgICAgICAgIHJldHVybiBjbzsKLSsg ICAgfQotICNlbHNlCi0gICAjZGVmaW5lIF9fUHl4X1B5Q29kZV9OZXcoYSwgaywgbCwgcywgZiwg Y29kZSwgYywgbiwgdiwgZnYsIGNlbGwsIGZuLCBuYW1lLCBmbGluZSwgbG5vcylcCi0gICAgICAg ICAgIFB5Q29kZV9OZXcoYSwgaywgbCwgcywgZiwgY29kZSwgYywgbiwgdiwgZnYsIGNlbGwsIGZu LCBuYW1lLCBmbGluZSwgbG5vcykKLUBAIC00NDUsOCArNTE0LDEyIEBAIHN0YXRpYyBDWVRIT05f SU5MSU5FIHZvaWQgKiBQeVRocmVhZF90c3NfZ2V0KFB5X3Rzc190ICprZXkpIHsKLSAjZW5kaWYK LSAjaWYgUFlfVkVSU0lPTl9IRVggPiAweDAzMDMwMDAwICYmIGRlZmluZWQoUHlVbmljb2RlX0tJ TkQpCi0gICAjZGVmaW5lIENZVEhPTl9QRVAzOTNfRU5BQkxFRCAxCi0rICAjaWYgZGVmaW5lZChQ eVVuaWNvZGVfSVNfUkVBRFkpCi0gICAjZGVmaW5lIF9fUHl4X1B5VW5pY29kZV9SRUFEWShvcCkg ICAgICAgKGxpa2VseShQeVVuaWNvZGVfSVNfUkVBRFkob3ApKSA/XAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogX1B5VW5pY29kZV9SZWFkeSgoUHlP YmplY3QgKikob3ApKSkKLSsgICNlbHNlCi0rICAjZGVmaW5lIF9fUHl4X1B5VW5pY29kZV9SRUFE WShvcCkgICAgICAgKDApCi0rICAjZW5kaWYKLSAgICNkZWZpbmUgX19QeXhfUHlVbmljb2RlX0dF VF9MRU5HVEgodSkgICBQeVVuaWNvZGVfR0VUX0xFTkdUSCh1KQotICAgI2RlZmluZSBfX1B5eF9Q eVVuaWNvZGVfUkVBRF9DSEFSKHUsIGkpIFB5VW5pY29kZV9SRUFEX0NIQVIodSwgaSkKLSAgICNk ZWZpbmUgX19QeXhfUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHUpICAgUHlVbmljb2RlX01BWF9D SEFSX1ZBTFVFKHUpCi1AQCAtNDU1LDcgKzUyOCwxMSBAQCBzdGF0aWMgQ1lUSE9OX0lOTElORSB2 b2lkICogUHlUaHJlYWRfdHNzX2dldChQeV90c3NfdCAqa2V5KSB7Ci0gICAjZGVmaW5lIF9fUHl4 X1B5VW5pY29kZV9SRUFEKGssIGQsIGkpICAgUHlVbmljb2RlX1JFQUQoaywgZCwgaSkKLSAgICNk ZWZpbmUgX19QeXhfUHlVbmljb2RlX1dSSVRFKGssIGQsIGksIGNoKSAgUHlVbmljb2RlX1dSSVRF KGssIGQsIGksIGNoKQotICAgI2lmIGRlZmluZWQoUHlVbmljb2RlX0lTX1JFQURZKSAmJiBkZWZp bmVkKFB5VW5pY29kZV9HRVRfU0laRSkKLSsgICNpZiBDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRI T04gJiYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA5MDAwMAotKyAgI2RlZmluZSBfX1B5eF9QeVVu aWNvZGVfSVNfVFJVRSh1KSAgICAgICgwICE9IChsaWtlbHkoUHlVbmljb2RlX0lTX1JFQURZKHUp KSA/IFB5VW5pY29kZV9HRVRfTEVOR1RIKHUpIDogKChQeUNvbXBhY3RVbmljb2RlT2JqZWN0ICop KHUpKS0+d3N0cl9sZW5ndGgpKQotKyAgI2Vsc2UKLSAgICNkZWZpbmUgX19QeXhfUHlVbmljb2Rl X0lTX1RSVUUodSkgICAgICAoMCAhPSAobGlrZWx5KFB5VW5pY29kZV9JU19SRUFEWSh1KSkgPyBQ eVVuaWNvZGVfR0VUX0xFTkdUSCh1KSA6IFB5VW5pY29kZV9HRVRfU0laRSh1KSkpCi0rICAjZW5k aWYKLSAgICNlbHNlCi0gICAjZGVmaW5lIF9fUHl4X1B5VW5pY29kZV9JU19UUlVFKHUpICAgICAg KDAgIT0gUHlVbmljb2RlX0dFVF9MRU5HVEgodSkpCi0gICAjZW5kaWYKLUBAIC02MjcsNyArNzA0 LDYgQEAgc3RhdGljIENZVEhPTl9JTkxJTkUgZmxvYXQgX19QWVhfTkFOKCkgewotICNpbmNsdWRl IDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgIm1wdi9jbGllbnQu aCIKLS0jaW5jbHVkZSAibXB2L29wZW5nbF9jYi5oIgotICNpbmNsdWRlICJtcHYvcmVuZGVyLmgi Ci0gI2luY2x1ZGUgIm1wdi9yZW5kZXJfZ2wuaCIKLSAjaWZkZWYgX09QRU5NUAotQEAgLTg1Nywx MiArOTMzLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpfX3B5eF9mW10gPSB7Ci0gCi0gLyotLS0g VHlwZSBkZWNsYXJhdGlvbnMgLS0tKi8KLSBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkOwotLXN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0lucHV0RGlzcGF0Y2g7Ci0gc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfTG9nTWVzc2FnZTsKLSBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eTsKLSBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudDsKLSBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0Owot LXN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQ7Ci0g c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtczsKLSBz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm87Ci0g c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dDsKLUBA IC04OTcsMjEgKzk3MSw2IEBAIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0VuZE9mRmlsZVJlYWNoZWQgewotIH07Ci0gCi0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjE2OQotLSAqIAotLSAqIAotLSAqIGNkZWYgY2xhc3MgSW5wdXREaXNwYXRjaChv YmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICIiIkRhdGEgZmll bGQgZm9yIE1QVl9FVkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0ggZXZlbnRzLgotLSAqIAotLSAq LwotLXN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2gg ewotLSAgUHlPYmplY3RfSEVBRAotLSAgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRl cl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKl9fcHl4X3Z0YWI7Ci0tICBQeU9iamVjdCAqYXJn MDsKLS0gIFB5T2JqZWN0ICp0eXBlOwotLX07Ci0tCi0tCi0gLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjE4MgotICAqIAotICAqIAotQEAgLTk3OCwyMSArMTAzNyw2IEBAIHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgewotIH07Ci0gCi0gCi0t LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgyMgotLSAqICAgICAoPG9iamVjdD5j dHgpKCkKLS0gKiAKLS0gKiBjZGVmIGNsYXNzIE9wZW5HTENvbnRleHQob2JqZWN0KTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBjZGVmOgotLSAqICAgICAgICAgbXB2X29w ZW5nbF9jYl9jb250ZXh0ICpfY3R4Ci0tICovCi0tc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCB7Ci0tICBQeU9iamVjdF9IRUFECi0tICBzdHJ1Y3Qg bXB2X29wZW5nbF9jYl9jb250ZXh0ICpfY3R4OwotLSAgaW50IGluaXRlZDsKLS0gIFB5T2JqZWN0 ICp1cGRhdGVfY2I7Ci0tfTsKLS0KLS0KLSAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6ODgxCi0gICogREVGIE1BWF9SRU5ERVJfUEFSQU1TID0gMzIKLSAgKiAKLUBAIC0xMDgwLDIw ICsxMTI0LDYgQEAgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2 X0VuZE9mRmlsZVJlYWNoZWQgewotIHN0YXRpYyBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqX19weXhfdnRhYnB0cl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZDsKLSAKLSAKLS0vKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTY5Ci0tICogCi0tICogCi0tICogY2RlZiBjbGFzcyBJbnB1dERp c3BhdGNoKG9iamVjdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgIiIi RGF0YSBmaWVsZCBmb3IgTVBWX0VWRU5UX1NDUklQVF9JTlBVVF9ESVNQQVRDSCBldmVudHMuCi0t ICogCi0tICovCi0tCi0tc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18z bXB2X0lucHV0RGlzcGF0Y2ggewotLSAgUHlPYmplY3QgKigqX2luaXQpKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKiwgc3RydWN0IG1wdl9ldmVu dF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2ggKik7Ci0tfTsKLS1zdGF0aWMgc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKl9fcHl4X3Z0YWJw dHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2g7Ci0tCi0tCi0gLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE4MgotICAqIAotICAqIAotQEAgLTEzMTgsNiArMTM0 OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbERpY3QoUHlP YmplY3QgKmZ1bmMsIFB5T2JqZWN0ICoqYXJncywKLSAjaWZuZGVmIFB5X01FTUJFUl9TSVpFCi0g I2RlZmluZSBQeV9NRU1CRVJfU0laRSh0eXBlLCBtZW1iZXIpIHNpemVvZigoKHR5cGUgKikwKS0+ bWVtYmVyKQotICNlbmRpZgotKyNpZiBDWVRIT05fRkFTVF9QWUNBTEwKLSAgIHN0YXRpYyBzaXpl X3QgX19weXhfcHlmcmFtZV9sb2NhbHNwbHVzX29mZnNldCA9IDA7Ci0gICAjaW5jbHVkZSAiZnJh bWVvYmplY3QuaCIKLSAgICNkZWZpbmUgX19QeHlfUHlGcmFtZV9Jbml0aWFsaXplX09mZnNldHMo KVwKLUBAIC0xMzI1LDYgKzEzNTYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fUHl4X1B5RnVuY3Rp b25fRmFzdENhbGxEaWN0KFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqKmFyZ3MsCi0gICAgICAo dm9pZCkoX19weXhfcHlmcmFtZV9sb2NhbHNwbHVzX29mZnNldCA9ICgoc2l6ZV90KVB5RnJhbWVf VHlwZS50cF9iYXNpY3NpemUpIC0gUHlfTUVNQkVSX1NJWkUoUHlGcmFtZU9iamVjdCwgZl9sb2Nh bHNwbHVzKSkpCi0gICAjZGVmaW5lIF9fUHl4X1B5RnJhbWVfR2V0TG9jYWxzcGx1cyhmcmFtZSlc Ci0gICAgIChhc3NlcnQoX19weXhfcHlmcmFtZV9sb2NhbHNwbHVzX29mZnNldCksIChQeU9iamVj dCAqKikoKChjaGFyICopKGZyYW1lKSkgKyBfX3B5eF9weWZyYW1lX2xvY2Fsc3BsdXNfb2Zmc2V0 KSkKLSsjZW5kaWYgLy8gQ1lUSE9OX0ZBU1RfUFlDQUxMCi0gI2VuZGlmCi0gCi0gLyogUHlDRnVu Y3Rpb25GYXN0Q2FsbC5wcm90byAqLwotQEAgLTE3NDcsMTIgKzE3NzksMjMgQEAgc3RhdGljIHZv aWQgX19weXhfaW5zZXJ0X2NvZGVfb2JqZWN0KGludCBjb2RlX2xpbmUsIFB5Q29kZU9iamVjdCog Y29kZV9vYmplY3QpOwotIHN0YXRpYyB2b2lkIF9fUHl4X0FkZFRyYWNlYmFjayhjb25zdCBjaGFy ICpmdW5jbmFtZSwgaW50IGNfbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IHB5X2xpbmUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKLSAKLSsvKiBHQ0NEaWFnbm9zdGlj cy5wcm90byAqLwotKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPiA0IHx8IChf X0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDYpKQotKyNkZWZpbmUgX19QeXhfSEFT X0dDQ19ESUFHTk9TVElDCi0rI2VuZGlmCi0rCi0gLyogQ0ludFRvUHkucHJvdG8gKi8KLSBzdGF0 aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV9pbnQoaW50IHZhbHVl KTsKLSAKLSsvKiBDSW50RnJvbVB5LnByb3RvICovCi0rc3RhdGljIENZVEhPTl9JTkxJTkUgaW50 IF9fUHl4X1B5SW50X0FzX2ludChQeU9iamVjdCAqKTsKLSsKLSAvKiBDSW50VG9QeS5wcm90byAq LwotIHN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9ldmVudF9pZChlbnVtIG1wdl9ldmVudF9pZCB2YWx1ZSk7Ci0gCi0rLyogQ0ludEZyb21Q eS5wcm90byAqLwotK3N0YXRpYyBDWVRIT05fSU5MSU5FIGVudW0gbXB2X2V2ZW50X2lkIF9fUHl4 X1B5SW50X0FzX2VudW1fX21wdl9ldmVudF9pZChQeU9iamVjdCAqKTsKLSsKLSAvKiBDSW50VG9Q eS5wcm90byAqLwotIHN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9G cm9tX3Vuc2lnbmVkX2xvbmcodW5zaWduZWQgbG9uZyB2YWx1ZSk7Ci0gCi1AQCAtMTc2OCwzMCAr MTgxMSwyMSBAQCBzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZW5kX2ZpbGVfcmVhc29uKGVudW0gbQotIC8qIENJbnRUb1B5LnByb3RvICov Ci0gc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21fZW51bV9f bXB2X3JlbmRlcl91cGRhdGVfZmxhZyhlbnVtIG1wdl9yZW5kZXJfdXBkYXRlX2ZsYWcgdmFsdWUp OwotIAotKy8qIENJbnRGcm9tUHkucHJvdG8gKi8KLStzdGF0aWMgQ1lUSE9OX0lOTElORSBsb25n IF9fUHl4X1B5SW50X0FzX2xvbmcoUHlPYmplY3QgKik7Ci0rCi0gLyogQ0ludFRvUHkucHJvdG8g Ki8KLSBzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV9pbnQ2 NF90KGludDY0X3QgdmFsdWUpOwotIAotIC8qIENJbnRUb1B5LnByb3RvICovCi0gc3RhdGljIENZ VEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QodWludDY0X3Qg dmFsdWUpOwotIAotLS8qIENJbnRUb1B5LnByb3RvICovCi0tc3RhdGljIENZVEhPTl9JTkxJTkUg UHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChlbnVtIG1wdl9mb3Jt YXQgdmFsdWUpOwotLQotLS8qIENJbnRUb1B5LnByb3RvICovCi0tc3RhdGljIENZVEhPTl9JTkxJ TkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21fbG9uZyhsb25nIHZhbHVlKTsKLS0KLS0vKiBD SW50RnJvbVB5LnByb3RvICovCi0tc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4X1B5SW50 X0FzX2ludChQeU9iamVjdCAqKTsKLS0KLS0vKiBDSW50RnJvbVB5LnByb3RvICovCi0tc3RhdGlj IENZVEhPTl9JTkxJTkUgZW51bSBtcHZfZXZlbnRfaWQgX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2 X2V2ZW50X2lkKFB5T2JqZWN0ICopOwotLQotLS8qIENJbnRGcm9tUHkucHJvdG8gKi8KLS1zdGF0 aWMgQ1lUSE9OX0lOTElORSBsb25nIF9fUHl4X1B5SW50X0FzX2xvbmcoUHlPYmplY3QgKik7Ci0t Ci0gLyogQ0ludEZyb21QeS5wcm90byAqLwotIHN0YXRpYyBDWVRIT05fSU5MSU5FIHVpbnQ2NF90 IF9fUHl4X1B5SW50X0FzX3VpbnQ2NF90KFB5T2JqZWN0ICopOwotIAotKy8qIENJbnRUb1B5LnBy b3RvICovCi0rc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21f ZW51bV9fbXB2X2Zvcm1hdChlbnVtIG1wdl9mb3JtYXQgdmFsdWUpOwotKwotIC8qIENJbnRGcm9t UHkucHJvdG8gKi8KLSBzdGF0aWMgQ1lUSE9OX0lOTElORSBlbnVtIG1wdl9mb3JtYXQgX19QeXhf UHlJbnRfQXNfZW51bV9fbXB2X2Zvcm1hdChQeU9iamVjdCAqKTsKLSAKLUBAIC0xODAxLDYgKzE4 MzUsOSBAQCBzdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQ2NF90IF9fUHl4X1B5SW50X0FzX2ludDY0 X3QoUHlPYmplY3QgKik7Ci0gLyogQ0ludEZyb21QeS5wcm90byAqLwotIHN0YXRpYyBDWVRIT05f SU5MSU5FIGludHB0cl90IF9fUHl4X1B5SW50X0FzX2ludHB0cl90KFB5T2JqZWN0ICopOwotIAot Ky8qIENJbnRUb1B5LnByb3RvICovCi0rc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9f UHl4X1B5SW50X0Zyb21fbG9uZyhsb25nIHZhbHVlKTsKLSsKLSAvKiBDaGVja0JpbmFyeVZlcnNp b24ucHJvdG8gKi8KLSBzdGF0aWMgaW50IF9fUHl4X2NoZWNrX2JpbmFyeV92ZXJzaW9uKHZvaWQp OwotIAotQEAgLTE4MDgsNyArMTg0NSw2IEBAIHN0YXRpYyBpbnQgX19QeXhfY2hlY2tfYmluYXJ5 X3ZlcnNpb24odm9pZCk7Ci0gc3RhdGljIGludCBfX1B5eF9Jbml0U3RyaW5ncyhfX1B5eF9TdHJp bmdUYWJFbnRyeSAqdCk7Ci0gCi0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfX2luaXQoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqX19weXhfdl9zZWxmLCBzdHJ1Y3Qg bXB2X2V2ZW50X2VuZF9maWxlICpfX3B5eF92X2VvZik7IC8qIHByb3RvKi8KLS1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9faW5p dChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICpf X3B5eF92X3NlbGYsIHN0cnVjdCBtcHZfZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3BhdGNoICpfX3B5 eF92X2lucHV0KTsgLyogcHJvdG8qLwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX19pbml0KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZiwgc3RydWN0IG1wdl9ldmVu dF9sb2dfbWVzc2FnZSAqX19weXhfdl9tc2cpOyAvKiBwcm90byovCi0gc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfX2luaXQoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3Zfc2VsZiwgc3Ry dWN0IG1wdl9ldmVudF9wcm9wZXJ0eSAqX19weXhfdl9wcm9wKTsgLyogcHJvdG8qLwotIHN0YXRp YyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19kYXRhKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYs IHN0cnVjdCBtcHZfZXZlbnQgKl9fcHl4X3ZfZXZlbnQpOyAvKiBwcm90byovCi1AQCAtMTgzNCwx MiArMTg3MCwxMCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2XzE1UmVuZGVyRnJhbWVJbmZvX19mcm9tX3N0cnVjdChzdAotIAotIC8qIE1vZHVsZSBkZWNs YXJhdGlvbnMgZnJvbSAndmlkY3V0dGVyLmxpYnMubXB2JyAqLwotIHN0YXRpYyBQeVR5cGVPYmpl Y3QgKl9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkID0g MDsKLS1zdGF0aWMgUHlUeXBlT2JqZWN0ICpfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfSW5wdXREaXNwYXRjaCA9IDA7Ci0gc3RhdGljIFB5VHlwZU9iamVjdCAqX19weXhfcHR5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgPSAwOwotIHN0YXRpYyBQeVR5cGVPYmpl Y3QgKl9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSA9IDA7Ci0gc3Rh dGljIFB5VHlwZU9iamVjdCAqX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50 ID0gMDsKLSBzdGF0aWMgUHlUeXBlT2JqZWN0ICpfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCA9IDA7Ci0tc3RhdGljIFB5VHlwZU9iamVjdCAqX19weXhfcHR5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQgPSAwOwotIHN0YXRpYyBQeVR5cGVPYmpl Y3QgKl9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zID0gMDsK LSBzdGF0aWMgUHlUeXBlT2JqZWN0ICpfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyRnJhbWVJbmZvID0gMDsKLSBzdGF0aWMgUHlUeXBlT2JqZWN0ICpfX3B5eF9wdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCA9IDA7Ci1AQCAtMTg1NSw3ICsxODg5 LDYgQEAgc3RhdGljIHZvaWQgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfdXBkYXRl Y2Iodm9pZCAqKTsgLypwcm90byovCi0gc3RhdGljIHZvaWQgKl9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2X2dldF9wb2ludGVyKGNoYXIgY29uc3QgKiwgUHlPYmplY3QgKik7IC8qcHJvdG8q LwotIHN0YXRpYyB2b2lkIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX2NhbGxiYWNr KHZvaWQgKik7IC8qcHJvdG8qLwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKiwg UHlPYmplY3QgKik7IC8qcHJvdG8qLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0X3N0YXRlKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKiwgUHlP YmplY3QgKik7IC8qcHJvdG8qLwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKiwgUHlPYmplY3QgKik7 IC8qcHJvdG8qLwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqLCBQeU9iamVjdCAqKTsgLypwcm90byovCi0g c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBp Y2tsZV9FdmVudF9fc2V0X3N0YXRlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0V2ZW50ICosIFB5T2JqZWN0ICopOyAvKnByb3RvKi8KLUBAIC0xODczLDcgKzE5MDYsNiBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2J1aWx0aW5fcmFuZ2U7Ci0gc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9idWlsdGluX2lkOwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfYnVpbHRpbl9lbnVt ZXJhdGU7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9idWlsdGluX1R5cGVFcnJvcjsKLS1zdGF0 aWMgUHlPYmplY3QgKl9fcHl4X2J1aWx0aW5fRGVwcmVjYXRpb25XYXJuaW5nOwotIHN0YXRpYyBj b25zdCBjaGFyIF9fcHl4X2tfZVtdID0gImUiOwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tf aFtdID0gImgiOwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfa1tdID0gImsiOwotQEAgLTE5 MDAsNyArMTkzMiw2IEBAIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfY2FsbFtdID0gImNhbGwi OwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfY29kZVtdID0gImNvZGUiOwotIHN0YXRpYyBj b25zdCBjaGFyIF9fcHl4X2tfZGF0YVtdID0gImRhdGEiOwotIHN0YXRpYyBjb25zdCBjaGFyIF9f cHl4X2tfZGljdFtdID0gIl9fZGljdF9fIjsKLS1zdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX2V4 dHNbXSA9ICJleHRzIjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX2lkbGVbXSA9ICJpZGxl IjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX2luZm9bXSA9ICJpbmZvIjsKLSBzdGF0aWMg Y29uc3QgY2hhciBfX3B5eF9rX2luaXRbXSA9ICJfX2luaXRfXyI7Ci1AQCAtMTkyNiw3ICsxOTU3 LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19lcnJvcltdID0gImVycm9yIjsKLSBzdGF0 aWMgY29uc3QgY2hhciBfX3B5eF9rX2V2ZW50W10gPSAiZXZlbnQiOwotIHN0YXRpYyBjb25zdCBj aGFyIF9fcHl4X2tfZmF0YWxbXSA9ICJmYXRhbCI7Ci0gc3RhdGljIGNvbnN0IGNoYXIgX19weXhf a19ub21lbVtdID0gIm5vbWVtIjsKLS1zdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX3BhdXNlW10g PSAicGF1c2UiOwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfcmFuZ2VbXSA9ICJyYW5nZSI7 Ci0gc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19zdGFydFtdID0gInN0YXJ0IjsKLSBzdGF0aWMg Y29uc3QgY2hhciBfX3B5eF9rX3RyYWNlW10gPSAidHJhY2UiOwotQEAgLTE5NzMsNyArMjAwMyw2 IEBAIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfcHJlc2VudFtdID0gInByZXNlbnQiOwotIHN0 YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfcmVsZWFzZVtdID0gInJlbGVhc2UiOwotIHN0YXRpYyBj b25zdCBjaGFyIF9fcHl4X2tfc3VjY2Vzc1tdID0gInN1Y2Nlc3MiOwotIHN0YXRpYyBjb25zdCBj aGFyIF9fcHl4X2tfdGltZW91dFtdID0gInRpbWVvdXQiOwotLXN0YXRpYyBjb25zdCBjaGFyIF9f cHl4X2tfdW5wYXVzZVtdID0gInVucGF1c2UiOwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tf dmVyc2lvbltdID0gIl9fdmVyc2lvbl9fIjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX3dy YXBwZWRbXSA9ICJ3cmFwcGVkIjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX01QVkVycm9y W10gPSAiTVBWRXJyb3IiOwotQEAgLTE5OTgsNyArMjAyNyw2IEBAIHN0YXRpYyBjb25zdCBjaGFy IF9fcHl4X2tfcHl4X3N0YXRlW10gPSAiX19weXhfc3RhdGUiOwotIHN0YXRpYyBjb25zdCBjaGFy IF9fcHl4X2tfcmVkdWNlX2V4W10gPSAiX19yZWR1Y2VfZXhfXyI7Ci0gc3RhdGljIGNvbnN0IGNo YXIgX19weXhfa19yZW5kZXJfZmRbXSA9ICJyZW5kZXJfZmQiOwotIHN0YXRpYyBjb25zdCBjaGFy IF9fcHl4X2tfdGhyZWFkaW5nW10gPSAidGhyZWFkaW5nIjsKLS1zdGF0aWMgY29uc3QgY2hhciBf X3B5eF9rX3VuaW5pdF9nbFtdID0gInVuaW5pdF9nbCI7Ci0gc3RhdGljIGNvbnN0IGNoYXIgX19w eXhfa19BUElfT1BFTkdMW10gPSAiQVBJX09QRU5HTCI7Ci0gc3RhdGljIGNvbnN0IGNoYXIgX19w eXhfa19DQVBJX01BSk9SW10gPSAiX0NBUElfTUFKT1IiOwotIHN0YXRpYyBjb25zdCBjaGFyIF9f cHl4X2tfQ0FQSV9NSU5PUltdID0gIl9DQVBJX01JTk9SIjsKLUBAIC0yMDM4LDggKzIwNjYsNiBA QCBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX3B5eF9jaGVja3N1bVtdID0gIl9fcHl4X2NoZWNr c3VtIjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX3NldF9wcm9wZXJ0eVtdID0gInNldF9w cm9wZXJ0eSI7Ci0gc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19zdHJpbmdzb3VyY2VbXSA9ICJz dHJpbmdzb3VyY2UiOwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfdmVyc2lvbl9pbmZvW10g PSAidmVyc2lvbl9pbmZvIjsKLS1zdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX0lucHV0RGlzcGF0 Y2hbXSA9ICJJbnB1dERpc3BhdGNoIjsKLS1zdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX09wZW5H TENvbnRleHRbXSA9ICJPcGVuR0xDb250ZXh0IjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9r X1JlbmRlckNvbnRleHRbXSA9ICJSZW5kZXJDb250ZXh0IjsKLSBzdGF0aWMgY29uc3QgY2hhciBf X3B5eF9rX1JlcGx5VXNlckRhdGFbXSA9ICJfUmVwbHlVc2VyRGF0YSI7Ci0gc3RhdGljIGNvbnN0 IGNoYXIgX19weXhfa19jb21tYW5kX2Vycm9yW10gPSAiY29tbWFuZF9lcnJvciI7Ci1AQCAtMjA1 MywxOCArMjA3OSwxNSBAQCBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX0NhbGxiYWNrVGhyZWFk W10gPSAiQ2FsbGJhY2tUaHJlYWQiOwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfTUlOX0NB UElfTUlOT1JbXSA9ICJfTUlOX0NBUElfTUlOT1IiOwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4 X2tfYW9faW5pdF9mYWlsZWRbXSA9ICJhb19pbml0X2ZhaWxlZCI7Ci0gc3RhdGljIGNvbnN0IGNo YXIgX19weXhfa19hdWRpb19yZWNvbmZpZ1tdID0gImF1ZGlvX3JlY29uZmlnIjsKLS1zdGF0aWMg Y29uc3QgY2hhciBfX3B5eF9rX2NoYXB0ZXJfY2hhbmdlW10gPSAiY2hhcHRlcl9jaGFuZ2UiOwot IHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfY2xpZW50X21lc3NhZ2VbXSA9ICJjbGllbnRfbWVz c2FnZSI7Ci0gc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19sb2FkaW5nX2ZhaWxlZFtdID0gImxv YWRpbmdfZmFpbGVkIjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX3Byb3BlcnR5X2Vycm9y W10gPSAicHJvcGVydHlfZXJyb3IiOwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfc2tpcF9y ZW5kZXJpbmdbXSA9ICJza2lwX3JlbmRlcmluZyI7Ci0tc3RhdGljIGNvbnN0IGNoYXIgX19weXhf a190cmFja3NfY2hhbmdlZFtdID0gInRyYWNrc19jaGFuZ2VkIjsKLSBzdGF0aWMgY29uc3QgY2hh ciBfX3B5eF9rX3Vua25vd25fZm9ybWF0W10gPSAidW5rbm93bl9mb3JtYXQiOwotIHN0YXRpYyBj b25zdCBjaGFyIF9fcHl4X2tfdmlkZW9fcmVjb25maWdbXSA9ICJ2aWRlb19yZWNvbmZpZyI7Ci0g c3RhdGljIGNvbnN0IGNoYXIgX19weXhfa192b19pbml0X2ZhaWxlZFtdID0gInZvX2luaXRfZmFp bGVkIjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX01QVkVycm9yX19faW5pdFtdID0gIk1Q VkVycm9yLl9faW5pdF9fIjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX2ludGVybmFsX2Zv cm1hdFtdID0gImludGVybmFsX2Zvcm1hdCI7Ci0tc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19t ZXRhZGF0YV91cGRhdGVbXSA9ICJtZXRhZGF0YV91cGRhdGUiOwotIHN0YXRpYyBjb25zdCBjaGFy IF9fcHl4X2tfbm90X2ltcGxlbWVudGVkW10gPSAibm90X2ltcGxlbWVudGVkIjsKLSBzdGF0aWMg Y29uc3QgY2hhciBfX3B5eF9rX25vdGhpbmdfdG9fcGxheVtdID0gIm5vdGhpbmdfdG9fcGxheSI7 Ci0gc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19wcm9wZXJ0eV9jaGFuZ2VbXSA9ICJwcm9wZXJ0 eV9jaGFuZ2UiOwotQEAgLTIwNzMsNyArMjA5Niw2IEBAIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4 X2tfcHl4X1BpY2tsZUVycm9yW10gPSAiX19weXhfUGlja2xlRXJyb3IiOwotIHN0YXRpYyBjb25z dCBjaGFyIF9fcHl4X2tfc2V0X2ljY19wcm9maWxlW10gPSAic2V0X2ljY19wcm9maWxlIjsKLSBz dGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX3NldHN0YXRlX2N5dGhvbltdID0gIl9fc2V0c3RhdGVf Y3l0aG9uX18iOwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfc3Vycm9nYXRlZXNjYXBlW10g PSAic3Vycm9nYXRlZXNjYXBlIjsKLS1zdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX3RyYWNrc19z d2l0Y2hlZFtdID0gInRyYWNrc19zd2l0Y2hlZCI7Ci0gc3RhdGljIGNvbnN0IGNoYXIgX19weXhf a19FbmRPZkZpbGVSZWFjaGVkW10gPSAiRW5kT2ZGaWxlUmVhY2hlZCI7Ci0gc3RhdGljIGNvbnN0 IGNoYXIgX19weXhfa19hZHZhbmNlZF9jb250cm9sW10gPSAiYWR2YW5jZWRfY29udHJvbCI7Ci0g c3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19kcm1Nb2RlQXRvbWljUmVxW10gPSAiZHJtTW9kZUF0 b21pY1JlcSoiOwotQEAgLTIwODUsNyArMjEwNyw2IEBAIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4 X2tfaW52YWxpZF9wYXJhbWV0ZXJbXSA9ICJpbnZhbGlkX3BhcmFtZXRlciI7Ci0gc3RhdGljIGNv bnN0IGNoYXIgX19weXhfa19zZXRfYW1iaWVudF9saWdodFtdID0gInNldF9hbWJpZW50X2xpZ2h0 IjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX3J1bltdID0gIkNh bGxiYWNrVGhyZWFkLnJ1biI7Ci0gc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19DYWxsYmFja1Ro cmVhZF9zZXRbXSA9ICJDYWxsYmFja1RocmVhZC5zZXQiOwotLXN0YXRpYyBjb25zdCBjaGFyIF9f cHl4X2tfRGVwcmVjYXRpb25XYXJuaW5nW10gPSAiRGVwcmVjYXRpb25XYXJuaW5nIjsKLSBzdGF0 aWMgY29uc3QgY2hhciBfX3B5eF9rX1VuaWNvZGVEZWNvZGVFcnJvcltdID0gIlVuaWNvZGVEZWNv ZGVFcnJvciI7Ci0gc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19Vbmljb2RlRW5jb2RlRXJyb3Jb XSA9ICJVbmljb2RlRW5jb2RlRXJyb3IiOwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfVW5r bm93bl9hcGlfdHlwZV9yW10gPSAiVW5rbm93biBhcGlfdHlwZSAlciI7Ci1AQCAtMjEwOSwxMiAr MjEzMCw5IEBAIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfUmVuZGVyUGFyYW1zX292ZXJmbG93 W10gPSAiUmVuZGVyUGFyYW1zIG92ZXJmbG93IjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9r X2Jsb2NrX2Zvcl90YXJnZXRfdGltZVtdID0gImJsb2NrX2Zvcl90YXJnZXRfdGltZSI7Ci0gc3Rh dGljIGNvbnN0IGNoYXIgX19weXhfa19lcnJvcnNfbG9jYWxzX3dyYXBwZWRbXSA9ICJfZXJyb3Jz Ljxsb2NhbHM+LndyYXBwZWQiOwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfcHl4X3VucGlj a2xlX1Byb3BlcnR5W10gPSAiX19weXhfdW5waWNrbGVfUHJvcGVydHkiOwotLXN0YXRpYyBjb25z dCBjaGFyIF9fcHl4X2tfc2NyaXB0X2lucHV0X2Rpc3BhdGNoW10gPSAic2NyaXB0X2lucHV0X2Rp c3BhdGNoIjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX0NvbnRleHRfY3JlYXRpb25fZXJy b3JbXSA9ICJDb250ZXh0IGNyZWF0aW9uIGVycm9yIjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5 eF9rX0NhbGxiYWNrVGhyZWFkX3NodXRkb3duW10gPSAiQ2FsbGJhY2tUaHJlYWQuc2h1dGRvd24i OwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VbXSA9 ICJfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlIjsKLS1zdGF0aWMgY29uc3QgY2hhciBfX3B5eF9r X09wZW5HTF9BUElfbm90X2F2YWlsYWJsZVtdID0gIk9wZW5HTCBBUEkgbm90IGF2YWlsYWJsZSI7 Ci0tc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaFtd ID0gIl9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2giOwotIHN0YXRpYyBjb25zdCBjaGFyIF9f cHl4X2tfQ2FsbGJhY2tUaHJlYWRfbXB2X2NhbGxiYWNrW10gPSAiQ2FsbGJhY2tUaHJlYWQubXB2 X2NhbGxiYWNrIjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX3B5eF91bnBpY2tsZV9SZW5k ZXJGcmFtZUluZm9bXSA9ICJfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8iOwotIHN0YXRp YyBjb25zdCBjaGFyIF9fcHl4X2tfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eFtdID0gInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOwotQEAgLTIxMjUsMTEgKzIxNDMsOSBAQCBzdGF0 aWMgY29uc3QgY2hhciBfX3B5eF9rX3NlbGZfcGFyYW1zX2Nhbm5vdF9iZV9jb252ZXJ0ZWRbXSA9 ICJzZWxmLnBhcmFtcyBjYW5ubwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfSW5jb21wYXRp YmxlX2NoZWNrc3Vtc19zX3ZzXzB4MDVbXSA9ICJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2 cyAweDA1NzJkMTEgPSAoZGF0YSwgbmFtZSkpIjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9r X0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDU2W10gPSAiSW5jb21wYXRpYmxlIGNoZWNr c3VtcyAoJXMgdnMgMHg1NmJlOWI2ID0gKGVycm9yLCByZWFzb24pKSI7Ci0gc3RhdGljIGNvbnN0 IGNoYXIgX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHg4N1tdID0gIkluY29t cGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ODc3NGZhZSA9IChsZXZlbCwgbG9nX2xldmVsLCBw cmVmaXgsIHRleHQpKSI7Ci0tc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19JbmNvbXBhdGlibGVf Y2hlY2tzdW1zX3NfdnNfMHhiZltdID0gIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4 YmY2NDFhOSA9IChhcmcwLCB0eXBlKSkiOwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfSW5j b21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4ZDRbXSA9ICJJbmNvbXBhdGlibGUgY2hlY2tzdW1z ICglcyB2cyAweGQ0MWQ4Y2QgPSAoKSkiOwotIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfSW5j b21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4ZGFbXSA9ICJJbmNvbXBhdGlibGUgY2hlY2tzdW1z ICglcyB2cyAweGRhMzhjMjUgPSAoZGF0YSwgZXJyb3IsIGlkLCByZXBseV91c2VyZGF0YSkpIjsK LSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX0tub3duX3Bvc3NpYmxlX3ZhbHVlc19mb3JfRW5k T2ZGW10gPSAiS25vd24gcG9zc2libGUgdmFsdWVzIGZvciBFbmRPZkZpbGVSZWFjaGVkIHJlYXNv bi5cblxuICAgIFlvdSBzaG91bGQgaGFuZGxlIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSByZWFz b24gbWF5IG5vdCBiZSBhbnkgb2YgdGhlc2UgdmFsdWVzLlxuICAgICI7Ci0tc3RhdGljIGNvbnN0 IGNoYXIgX19weXhfa19PcGVuR0xDb250ZXh0X2lzX2RlcHJlY2F0ZWRfcGxlYVtdID0gIk9wZW5H TENvbnRleHQgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHN3aXRjaCB0byBSZW5kZXJDb250ZXh0IjsK LSBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX1NldF9vZl9rbm93bl9lcnJvcl9jb2Rlc19mcm9t X01wW10gPSAiU2V0IG9mIGtub3duIGVycm9yIGNvZGVzIGZyb20gTXB2RXJyb3IgYW5kIEV2ZW50 IHJlc3BvbnNlcy5cblxuICAgIE1vc3RseSB3cmFwcyB0aGUgZW51bSBtcHZfZXJyb3IuXG4gICAg VmFsdWVzIG1pZ2h0IG5vdCBhbHdheXMgYmUgaW50ZWdlcnMgaW4gdGhlIGZ1dHVyZS5cbiAgICBZ b3Ugc2hvdWxkIGhhbmRsZSB0aGUgcG9zc2liaWxpdHkgdGhhdCBlcnJvciBjb2RlcyBtYXkgbm90 IGJlIGFueSBvZiB0aGVzZSB2YWx1ZXMuXG4gICAgIjsKLSBzdGF0aWMgY29uc3QgY2hhciBfX3B5 eF9rX1NldF9vZl9rbm93bl92YWx1ZXNfZm9yX0V2ZW50X2lkW10gPSAiU2V0IG9mIGtub3duIHZh bHVlcyBmb3IgRXZlbnQgaWRzLlxuXG4gICAgTW9zdGx5IHdyYXBzIHRoZSBlbnVtIG1wdl9ldmVu dF9pZC5cbiAgICBWYWx1ZXMgbWlnaHQgbm90IGFsd2F5cyBiZSBpbnRlZ2VycyBpbiB0aGUgZnV0 dXJlLlxuICAgIFlvdSBzaG91bGQgaGFuZGxlIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGV2ZW50IGlk cyBtYXkgbm90IGJlIGFueSBvZiB0aGVzZSB2YWx1ZXMuXG4gICAgIjsKLSBzdGF0aWMgY29uc3Qg Y2hhciBfX3B5eF9rX1Vua25vd25fb3JfaW52YWxpZF9wb2ludGVyX29iamVjW10gPSAiVW5rbm93 biBvciBpbnZhbGlkIHBvaW50ZXIgb2JqZWN0OiAlciI7Ci1AQCAtMjE1MSw3ICsyMTY3LDYgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWRfc2V0OwotIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX3NodXRkb3duOwotIHN0YXRpYyBQeU9i amVjdCAqX19weXhfbl9zX0NvbnRleHQ7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9rcF9zX0Nv bnRleHRfY3JlYXRpb25fZXJyb3I7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfRGVwcmVj YXRpb25XYXJuaW5nOwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX0VPRlJlYXNvbnM7Ci0g c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfRW5kT2ZGaWxlUmVhY2hlZDsKLSBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X25fc19FcnJvcnM7Ci1AQCAtMjE2MSwyMCArMjE3NiwxNSBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X25fc19JbXBvcnRFcnJvcjsKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2twX3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4MDU7Ci0gc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDU2OwotIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfa3Bfc19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHg4NzsKLS1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4 YmY7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNf c192c18weGQ0OwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfa3Bfc19JbmNvbXBhdGlibGVfY2hl Y2tzdW1zX3NfdnNfMHhkYTsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19JbnB1dERpc3Bh dGNoOwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfa3Bfc19Lbm93bl9wb3NzaWJsZV92YWx1ZXNf Zm9yX0VuZE9mRjsKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19Mb2dMZXZlbHM7Ci0gc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfTG9nTWVzc2FnZTsKLSBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X25fc19NSU5fQ0FQSV9NSU5PUjsKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19NUFZF cnJvcjsKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19NUFZFcnJvcl9fX2luaXQ7Ci0tc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfT3BlbkdMQ29udGV4dDsKLS1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X2twX3NfT3BlbkdMQ29udGV4dF9pc19kZXByZWNhdGVkX3BsZWE7Ci0gc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9uX3NfT3BlbkdMUmVuZGVyQ29udGV4dDsKLS1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X2twX3NfT3BlbkdMX0FQSV9ub3RfYXZhaWxhYmxlOwotIHN0YXRpYyBQeU9iamVjdCAq X19weXhfbl9zX1BpY2tsZUVycm9yOwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX1Byb3Bl cnR5OwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX1B5TVBWRXJyb3I7Ci1AQCAtMjIxMSw3 ICsyMjIxLDYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfYmxvY2tfZm9yX3RhcmdldF90 aW1lOwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX2Jsb2NrX3ZzeW5jOwotIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfbl9zX2NhbGw7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfY2Fs bGJhY2s7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfY2hhcHRlcl9jaGFuZ2U7Ci0gc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfY2xpZW50X21lc3NhZ2U7Ci0gc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9uX3NfY2xpbmVfaW5fdHJhY2ViYWNrOwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhf bl9zX2Nsb3NlOwotQEAgLTIyNDQsNyArMjI1Myw2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf bl9zX2Vycm9yOwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX2Vycm9yczsKLSBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X25fc19lcnJvcnNfbG9jYWxzX3dyYXBwZWQ7Ci0gc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9uX3NfZXZlbnQ7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfZXh0czsK LSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19mYXRhbDsKLSBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X25fc19mYm87Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfZmQ7Ci1AQCAtMjI4MCw3 ICsyMjg4LDYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfbG9jazsKLSBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X25fc19sb2dfbWVzc2FnZTsKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25f c19tYWluOwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX21ldGFjbGFzczsKLS1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X25fc19tZXRhZGF0YV91cGRhdGU7Ci0gc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9uX3NfbW9kdWxlOwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX21wdjsKLSBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X25fc19tcHZfY2FsbGJhY2s7Ci1AQCAtMjMwMSw3ICsyMzA4LDYg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3Nfb3BlbmdsX2ZibzsKLSBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X25fc19vcGVuZ2xfaW5pdF9wYXJhbXM7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9uX3Nfb3B0aW9uX2Vycm9yOwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX29wdGlvbl9m b3JtYXQ7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfcGF1c2U7Ci0gc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9uX3NfcGlja2xlOwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3BsYXli YWNrX3Jlc3RhcnQ7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfcHJlcGFyZTsKLUBAIC0y MzE5LDcgKzIzMjUsNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19weXhfc3RhdGU7Ci0g c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfcHl4X3R5cGU7Ci0gc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9uX3NfcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQ7Ci0gc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9uX3NfcHl4X3VucGlja2xlX0V2ZW50OwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhf bl9zX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoOwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhf bl9zX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlOwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9z X3B5eF91bnBpY2tsZV9Qcm9wZXJ0eTsKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19weXhf dW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvOwotQEAgLTIzNDAsNyArMjM0NSw2IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfbl9zX3JlcGVhdDsKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19y ZXF1ZXN0X2V2ZW50OwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3J1bjsKLSBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X25fc19zOwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3Njcmlw dF9pbnB1dF9kaXNwYXRjaDsKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19zZWVrOwotIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3NlbGY7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9r cF9zX3NlbGZfX2N0eF9jYW5ub3RfYmVfY29udmVydGVkX3RvOwotQEAgLTIzNzMsMTMgKzIzNzcs OSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc190aHJlYWRpbmc7Ci0gc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9uX3NfdGljazsKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc190aW1lb3V0 OwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3RyYWNlOwotLXN0YXRpYyBQeU9iamVjdCAq X19weXhfbl9zX3RyYWNrc19jaGFuZ2VkOwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3Ry YWNrc19zd2l0Y2hlZDsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc191bmluaXRfZ2w7Ci0g c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfdW5pbml0aWFsaXplZDsKLSBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X25fc191bmtub3duX2Zvcm1hdDsKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25f c191bm9ic2VydmVfcHJvcGVydHk7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfdW5wYXVz ZTsKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc191bnN1cHBvcnRlZDsKLSBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X25fc191cGRhdGU7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9rcF9zX3V0 Zl84OwotQEAgLTI0MDksMTQgKzI0MDksNiBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfNWVycm9yXzJfX3NldF9fKHN0cgotIHN0 YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hl ZF81ZXJyb3JfNF9fZGVsX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RW5kT2ZGaWxlUmVhY2hlZCAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8gKi8KLSBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRf X19yZWR1Y2VfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RW5kT2ZGaWxlUmVhY2hlZCAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8gKi8KLSBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRf Ml9fc2V0c3RhdGVfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRW5kT2ZGaWxlUmVhY2hlZCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5 eF9zdGF0ZSk7IC8qIHByb3RvICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcwX19fZ2V0X18oc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqX19weXhfdl9zZWxmKTsg LyogcHJvdG8gKi8KLS1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M0lucHV0RGlzcGF0Y2hfNGFyZzBfMl9fc2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhf dl92YWx1ZSk7IC8qIHByb3RvICovCi0tc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcwXzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKl9fcHl4X3Zfc2VsZik7IC8qIHBy b3RvICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNJbnB1dERpc3BhdGNoXzR0eXBlX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8gKi8KLS1z dGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hf NHR5cGVfMl9fc2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5w dXREaXNwYXRjaCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qIHBy b3RvICovCi0tc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1 dERpc3BhdGNoXzR0eXBlXzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0lucHV0RGlzcGF0Y2ggKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCi0tc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNo X19fcmVkdWNlX2N5dGhvbl9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0lucHV0RGlzcGF0Y2ggKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCi0tc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzJfX3Nl dHN0YXRlX2N5dGhvbl9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lu cHV0RGlzcGF0Y2ggKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUp OyAvKiBwcm90byAqLwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4X19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8gKi8K LSBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2Vf NnByZWZpeF8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9M b2dNZXNzYWdlICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLyogcHJv dG8gKi8KLSBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01l c3NhZ2VfNnByZWZpeF80X19kZWxfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLwotQEAgLTI0NjIsNDEg KzI0NTQsMjkgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTRfUmVwbHlVc2VyRGF0YV80cmVtb3ZlKENZVEhPTl8KLSBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMWFwaV92ZXJzaW9uX19fZ2V0 X18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLwotIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRuYW1lX19fZ2V0X18oc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKTsg LyogcHJvdG8gKi8KLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF80dGltZV9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCi0tc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfc3VzcGVuZChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3Nl bGYpOyAvKiBwcm90byAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzJyZXN1bWUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8gKi8KLS1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80cmVxdWVzdF9l dmVudChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5 eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2V2ZW50LCBQeU9iamVjdCAqX19weXhfdl9lbmFi bGUpOyAvKiBwcm90byAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzZzZXRfbG9nX2xldmVsKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zf bG9nbGV2ZWwpOyAvKiBwcm90byAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhsb2FkX2NvbmZpZyhzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X2ZpbGVuYW1lKTsgLyogcHJvdG8gKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMF9mb3JtYXRfZm9yKENZVEhPTl9VTlVTRUQg c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9z ZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qIHByb3RvICovCi0tc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJjb21tYW5kKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfYXN5bmNocm9ub3VzLCBQeU9iamVjdCAqX19weXhfdl9kYXRh LCBQeU9iamVjdCAqX19weXhfdl9jbWRsaXN0KTsgLyogcHJvdG8gKi8KLS1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNGdldF9wcm9wZXJ0 eV9hc3luYyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X2Rh dGEpOyAvKiBwcm90byAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzE2dHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEsIFB5T2JqZWN0ICpfX3B5eF92 X2RlZmF1bHQpOyAvKiBwcm90byAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4dHJ5X2dldF9wcm9wZXJ0eShzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X2RlZmF1bHQpOyAvKiBwcm90byAqLwot LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzIwZ2V0X3Byb3BlcnR5KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCk7IC8qIHByb3RvICov Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMjJzZXRfcHJvcGVydHkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQeU9iamVjdCAq X19weXhfdl92YWx1ZSwgUHlPYmplY3QgKl9fcHl4X3ZfYXN5bmNocm9ub3VzLCBQeU9iamVjdCAq X19weXhfdl9kYXRhKTsgLyogcHJvdG8gKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNHNldF9vcHRpb24oc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfdl9wcm9wLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qIHByb3RvICovCi0tc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjZp bml0aWFsaXplKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQg Kl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjh3YWl0X2V2ZW50KHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfdGltZW91dCk7IC8qIHByb3RvICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzB3YWtldXAoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8g Ki8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8zMnNldF93YWtldXBfY2FsbGJhY2soc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9jYWxsYmFj ayk7IC8qIHByb3RvICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMzRnZXRfd2FrZXVwX3BpcGUoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8gKi8KLS1z dGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNl9fY2lu aXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5 eF92X3NlbGYpOyAvKiBwcm90byAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4b2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEpOyAvKiBwcm90byAqLwotLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQw dW5vYnNlcnZlX3Byb3BlcnR5KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSk7IC8qIHByb3Rv ICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfNDJzaHV0ZG93bihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ0b3BlbmdsX2NiX2FwaShzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYp OyAvKiBwcm90byAqLwotLXN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF80Nl9fZGVhbGxvY19fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCi0tc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDhfX3JlZHVjZV9j eXRob25fXyhDWVRIT05fVU5VU0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCi0tc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNTBfX3NldHN0YXRlX2N5 dGhvbl9fKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF92 X19fcHl4X3N0YXRlKTsgLyogcHJvdG8gKi8KLS1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqX19weXhfdl9zZWxmKTsgLyogcHJv dG8gKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M09wZW5HTENvbnRleHRfMmluaXRfZ2woc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfT3BlbkdMQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9leHRz LCBQeU9iamVjdCAqX19weXhfdl9nZXRfcHJvY19hZGRyZXNzKTsgLyogcHJvdG8gKi8KLS1zdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRl eHRfNHNldF91cGRhdGVfY2FsbGJhY2soc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfT3BlbkdMQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9jYik7 IC8qIHByb3RvICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNPcGVuR0xDb250ZXh0XzZkcmF3KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X09wZW5HTENvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zf ZmJvLCBQeU9iamVjdCAqX19weXhfdl93LCBQeU9iamVjdCAqX19weXhfdl9oKTsgLyogcHJvdG8g Ki8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09w ZW5HTENvbnRleHRfOHJlcG9ydF9mbGlwKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X09wZW5HTENvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdGlt ZSk7IC8qIHByb3RvICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzEwdW5pbml0X2dsKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3Rv ICovCi0tc3RhdGljIHZvaWQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdM Q29udGV4dF8xMl9fZGVhbGxvY19fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X09wZW5HTENvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCi0tc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzE0 X19yZWR1Y2VfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLwot LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdM Q29udGV4dF8xNl9fc2V0c3RhdGVfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpfX3B5eF92X3NlbGYsIENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKiBwcm90byAqLwot K3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 X3JlcXVlc3RfZXZlbnQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9ldmVudCwgUHlPYmplY3QgKl9f cHl4X3ZfZW5hYmxlKTsgLyogcHJvdG8gKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yc2V0X2xvZ19sZXZlbChzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X2xvZ2xldmVsKTsgLyogcHJvdG8gKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bG9hZF9jb25maWcoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9maWxlbmFtZSk7IC8qIHByb3RvICovCi0rc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNl9mb3JtYXRfZm9yKENZVEhP Tl9VTlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qIHByb3RvICovCi0rc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNv bW1hbmQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9hc3luY2hyb25vdXMsIFB5T2JqZWN0ICpfX3B5 eF92X2RhdGEsIFB5T2JqZWN0ICpfX3B5eF92X2NtZGxpc3QpOyAvKiBwcm90byAqLwotK3N0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0 X3Byb3BlcnR5X2FzeW5jKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmplY3QgKl9f cHl4X3ZfZGF0YSk7IC8qIHByb3RvICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJ0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSwgUHlPYmplY3Qg Kl9fcHl4X3ZfZGVmYXVsdCk7IC8qIHByb3RvICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTR0cnlfZ2V0X3Byb3BlcnR5KHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmplY3QgKl9fcHl4X3ZfZGVmYXVsdCk7IC8qIHBy b3RvICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wKTsgLyog cHJvdG8gKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3AsIFB5 T2JqZWN0ICpfX3B5eF92X3ZhbHVlLCBQeU9iamVjdCAqX19weXhfdl9hc3luY2hyb25vdXMsIFB5 T2JqZWN0ICpfX3B5eF92X2RhdGEpOyAvKiBwcm90byAqLwotK3N0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLyogcHJvdG8g Ki8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8yMmluaXRpYWxpemUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dCAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8gKi8KLStzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNHdhaXRfZXZlbnQoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQ eU9iamVjdCAqX19weXhfdl90aW1lb3V0KTsgLyogcHJvdG8gKi8KLStzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNndha2V1cChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpOyAv KiBwcm90byAqLwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzI4c2V0X3dha2V1cF9jYWxsYmFjayhzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X2NhbGxiYWNrKTsgLyogcHJvdG8gKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93YWtldXBfcGlwZShzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90 byAqLwotK3N0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzMyX19jaW5pdF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzRvYnNlcnZlX3Byb3BlcnR5KHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSk7IC8qIHByb3Rv ICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMzZ1bm9ic2VydmVfcHJvcGVydHkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9kYXRhKTsg LyogcHJvdG8gKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8zOHNodXRkb3duKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCi0rc3RhdGljIHZvaWQg X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQwX19kZWFsbG9jX18oc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxm KTsgLyogcHJvdG8gKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF80Ml9fcmVkdWNlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQgc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKTsg LyogcHJvdG8gKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF80NF9fc2V0c3RhdGVfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKiBwcm90byAqLwot IHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFt c19fX2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLwotIHN0YXRpYyB2b2lkIF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfMl9fZGVhbGxvY19fKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKl9fcHl4X3Zf c2VsZik7IC8qIHByb3RvICovCi0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzRfX3JlZHVjZV9jeXRob25fXyhDWVRIT05fVU5V U0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMg Kl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCi1AQCAtMjUyNiwxOCArMjUwNiwxNSBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhy ZWFkXzZzZXQoQ1lUSE9OX1VOVQotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfOHJ1bihDWVRIT05fVU5VU0VEIFB5T2JqZWN0 ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8gKi8KLSBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhy ZWFkXzEwbXB2X2NhbGxiYWNrKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2Fs bGJhY2spOyAvKiBwcm90byAqLwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzZfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkKENZVEhPTl9VTlVT RUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5cGUsIGxv bmcgX19weXhfdl9fX3B5eF9jaGVja3N1bSwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUp OyAvKiBwcm90byAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzhfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoKENZVEhPTl9VTlVTRUQgUHlPYmpl Y3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5cGUsIGxvbmcgX19weXhf dl9fX3B5eF9jaGVja3N1bSwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKiBwcm90 byAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEw X19weXhfdW5waWNrbGVfTG9nTWVzc2FnZShDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9z ZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF90eXBlLCBsb25nIF9fcHl4X3ZfX19weXhfY2hl Y2tzdW0sIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLyogcHJvdG8gKi8KLS1zdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMl9fcHl4X3VucGlj a2xlX1Byb3BlcnR5KENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X3R5cGUsIGxvbmcgX19weXhfdl9fX3B5eF9jaGVja3N1bSwgUHlPYmpl Y3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKiBwcm90byAqLwotLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X19weXhfdW5waWNrbGVfRXZlbnQoQ1lU SE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf dHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9iamVjdCAqX19weXhfdl9fX3B5 eF9zdGF0ZSk7IC8qIHByb3RvICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTZfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8oQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSwg bG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0 ZSk7IC8qIHByb3RvICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfOF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UoQ1lUSE9OX1VOVVNFRCBQeU9iamVj dCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92 X19fcHl4X2NoZWNrc3VtLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qIHByb3Rv ICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBf X3B5eF91bnBpY2tsZV9Qcm9wZXJ0eShDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxm LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF90eXBlLCBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tz dW0sIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLyogcHJvdG8gKi8KLStzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMl9fcHl4X3VucGlja2xl X0V2ZW50KENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X19fcHl4X3R5cGUsIGxvbmcgX19weXhfdl9fX3B5eF9jaGVja3N1bSwgUHlPYmplY3QgKl9f cHl4X3ZfX19weXhfc3RhdGUpOyAvKiBwcm90byAqLwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZv KENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19f cHl4X3R5cGUsIGxvbmcgX19weXhfdl9fX3B5eF9jaGVja3N1bSwgUHlPYmplY3QgKl9fcHl4X3Zf X19weXhfc3RhdGUpOyAvKiBwcm90byAqLwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKFB5VHlwZU9iamVjdCAqdCwg UHlPYmplY3QgKmEsIFB5T2JqZWN0ICprKTsgLypwcm90byovCi0tc3RhdGljIFB5T2JqZWN0ICpf X3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2goUHlUeXBlT2Jq ZWN0ICp0LCBQeU9iamVjdCAqYSwgUHlPYmplY3QgKmspOyAvKnByb3RvKi8KLSBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZShQeVR5 cGVPYmplY3QgKnQsIFB5T2JqZWN0ICphLCBQeU9iamVjdCAqayk7IC8qcHJvdG8qLwotIHN0YXRp YyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eShQ eVR5cGVPYmplY3QgKnQsIFB5T2JqZWN0ICphLCBQeU9iamVjdCAqayk7IC8qcHJvdG8qLwotIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudChQ eVR5cGVPYmplY3QgKnQsIFB5T2JqZWN0ICphLCBQeU9iamVjdCAqayk7IC8qcHJvdG8qLwotIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 KFB5VHlwZU9iamVjdCAqdCwgUHlPYmplY3QgKmEsIFB5T2JqZWN0ICprKTsgLypwcm90byovCi0t c3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5H TENvbnRleHQoUHlUeXBlT2JqZWN0ICp0LCBQeU9iamVjdCAqYSwgUHlPYmplY3QgKmspOyAvKnBy b3RvKi8KLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNt cHZfX1JlbmRlclBhcmFtcyhQeVR5cGVPYmplY3QgKnQsIFB5T2JqZWN0ICphLCBQeU9iamVjdCAq ayk7IC8qcHJvdG8qLwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8oUHlUeXBlT2JqZWN0ICp0LCBQeU9iamVjdCAqYSwg UHlPYmplY3QgKmspOyAvKnByb3RvKi8KLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dChQeVR5cGVPYmplY3QgKnQsIFB5T2Jq ZWN0ICphLCBQeU9iamVjdCAqayk7IC8qcHJvdG8qLwotQEAgLTI1NDUsMTMgKzI1MjIsMTIgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5H TFJlbmRlckNvbnRleHQoUHlUeXBlT2IKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzKFB5VHlwZU9i amVjdCAqdCwgUHlPYmplY3QgKmEsIFB5T2JqZWN0ICprKTsgLypwcm90byovCi0gc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9pbnRfMDsKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8xOwotK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfaW50XzI7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9pbnRf MzsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF85OwotIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfaW50XzMyOwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfaW50XzU3MTMxNjk7Ci0gc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9pbnRfOTA5NTgyNjI7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9p bnRfMTQyMDM2OTEwOwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfaW50XzIwMDY4ODA0MTsKLSBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8yMjI0MTkxNDk7Ci0gc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9pbnRfMjI4ODIyMDUzOwotIHN0YXRpYyBQeU9iamVjdCAqX19weXhfaW50X25lZ18xOwot QEAgLTI1NzMsNDggKzI1NDksNDMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fMTY7 Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fMTc7Ci0gc3RhdGljIFB5T2JqZWN0ICpf X3B5eF90dXBsZV9fMTg7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fMTk7Ci0tc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fMjA7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90 dXBsZV9fMjE7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fMjI7Ci0tc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF90dXBsZV9fMjQ7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9f MjY7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fMjM7Ci0rc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF90dXBsZV9fMjU7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fMjc7Ci0g c3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fMjg7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF90dXBsZV9fMzA7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fMzE7Ci0tc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fMzM7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBs ZV9fMzU7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fMzc7Ci0tc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF90dXBsZV9fMzk7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fNDE7 Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fNDM7Ci0tc3RhdGljIFB5T2JqZWN0ICpf X3B5eF90dXBsZV9fNDU7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fNDc7Ci0tc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fNDk7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90 dXBsZV9fNTE7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fNTM7Ci0tc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF90dXBsZV9fNTU7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9f NTc7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fNTk7Ci0rc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF90dXBsZV9fMzI7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fMzQ7Ci0r c3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fMzY7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF90dXBsZV9fMzg7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fNDA7Ci0rc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fNDI7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBs ZV9fNDQ7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fNDY7Ci0rc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF90dXBsZV9fNDg7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fNTA7 Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90dXBsZV9fNTI7Ci0rc3RhdGljIFB5T2JqZWN0ICpf X3B5eF90dXBsZV9fNTQ7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rlb2JqX18yOwotLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfY29kZW9ial9fMjM7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9jb2Rlb2JqX18yNTsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzI3OwotK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfY29kZW9ial9fMjA7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9jb2Rlb2JqX18yMjsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzI0OwotK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfY29kZW9ial9fMjY7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9jb2Rlb2JqX18yOTsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzMyOwotLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfY29kZW9ial9fMzQ7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9jb2Rlb2JqX18zNjsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzM4OwotLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfY29kZW9ial9fNDA7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9jb2Rlb2JqX180MjsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzQ0OwotLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfY29kZW9ial9fNDY7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9jb2Rlb2JqX180ODsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzUwOwotLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfY29kZW9ial9fNTI7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9jb2Rlb2JqX181NDsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzU2OwotLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfY29kZW9ial9fNTg7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9jb2Rlb2JqX182MDsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzMxOwotK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfY29kZW9ial9fMzM7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9jb2Rlb2JqX18zNTsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzM3OwotK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfY29kZW9ial9fMzk7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9jb2Rlb2JqX180MTsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzQzOwotK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfY29kZW9ial9fNDU7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9jb2Rlb2JqX180NzsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzQ5OwotK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfY29kZW9ial9fNTE7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9jb2Rlb2JqX181MzsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzU1OwotIC8q IExhdGUgaW5jbHVkZXMgKi8KLSAKLSAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTUKLUBAIC0yOTg3LDcgKzI5NTgsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8yX3N0cmVuYyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0Ci0gICogICAg ICAgICAjIEluIHB5dGhvbjIsIGFzc3VtZSBieXRlcyBhbmQgd2FsayByaWdodCB0aHJvdWdoCi0g ICogICAgICAgICByZXR1cm4gcyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0t ICogUHlFdmFsX0luaXRUaHJlYWRzKCkKLSsgKiBQeV9Jbml0aWFsaXplKCkKLSAgKi8KLSAgICAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3Mp OwotQEAgLTM2MTYsMTUgKzM1ODcsMTUgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkXzJfX3NldHN0YXRlX2MKLSAgIHJl dHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTc2Ci0tICogICAgIGNkZWYgcHVibGljIG9iamVjdCBhcmcwLCB0eXBlCi0rLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjE4OQotKyAqICAgICBjZGVmIHB1YmxpYyBvYmplY3QgcHJl Zml4LCBsZXZlbCwgdGV4dCwgbG9nX2xldmVsCi0gICogCi0tICogICAgIGNkZWYgX2luaXQoc2Vs ZiwgbXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCogaW5wdXQpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLmFyZzAgPSBpbnB1dC5hcmcwCi0tICog ICAgICAgICBzZWxmLnR5cGUgPSBfc3RyZGVjKGlucHV0LnR5cGUpCi0rICogICAgIGNkZWYgX2lu aXQoc2VsZiwgbXB2X2V2ZW50X2xvZ19tZXNzYWdlKiBtc2cpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICBzZWxmLmxldmVsID0gX3N0cmRlYyhtc2cubGV2ZWwpCi0r ICogICAgICAgICBzZWxmLnByZWZpeCA9IF9zdHJkZWMobXNnLnByZWZpeCkKLSAgKi8KLSAKLS1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNw YXRjaF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERp c3BhdGNoICpfX3B5eF92X3NlbGYsIHN0cnVjdCBtcHZfZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3Bh dGNoICpfX3B5eF92X2lucHV0KSB7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfX2luaXQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmLCBzdHJ1Y3QgbXB2X2V2ZW50 X2xvZ19tZXNzYWdlICpfX3B5eF92X21zZykgewotICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxM OwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSAgIFB5T2JqZWN0ICpfX3B5eF90XzEg PSBOVUxMOwotQEAgLTM2MzYsMzEgKzM2MDcsODIgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfX2luaXQoc3RydWN0IF9fcHkK LSAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJfaW5pdCIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE3 NwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5MAotICAqIAotLSAqICAg ICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2gqIGlucHV0 KToKLS0gKiAgICAgICAgIHNlbGYuYXJnMCA9IGlucHV0LmFyZzAgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi50eXBlID0gX3N0cmRlYyhpbnB1dC50eXBlKQot LSAqICAgICAgICAgcmV0dXJuIHNlbGYKLSsgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZl bnRfbG9nX21lc3NhZ2UqIG1zZyk6Ci0rICogICAgICAgICBzZWxmLmxldmVsID0gX3N0cmRlYyht c2cubGV2ZWwpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYu cHJlZml4ID0gX3N0cmRlYyhtc2cucHJlZml4KQotKyAqICAgICAgICAgc2VsZi50ZXh0ID0gX3N0 cmRlYyhtc2cudGV4dCkKLSsgKi8KLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhf dF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgMTkwLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwot KyAgX19weXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbXNnLT5sZXZl bCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDE5MCwgX19weXhfTDFf ZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgIF9fcHl4X3RfNCA9IE5VTEw7 Ci0rICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNr KF9fcHl4X3RfMikpKSB7Ci0rICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfMik7Ci0rICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgewotKyAgICAgIFB5T2JqZWN0KiBm dW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwotKyAgICAgIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzQpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0rICAg ICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKLSsgICAgfQotKyAgfQot KyAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19w eXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfMiwgX19weXhfdF8zKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19w eXhfdF80ID0gMDsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwot KyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTkwLCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Ci0rICBf X1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5sZXZlbCk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhf dl9zZWxmLT5sZXZlbCk7Ci0rICBfX3B5eF92X3NlbGYtPmxldmVsID0gX19weXhfdF8xOwotKyAg X19weXhfdF8xID0gMDsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox OTEKLSsgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfbG9nX21lc3NhZ2UqIG1zZyk6 Ci0rICogICAgICAgICBzZWxmLmxldmVsID0gX3N0cmRlYyhtc2cubGV2ZWwpCi0rICogICAgICAg ICBzZWxmLnByZWZpeCA9IF9zdHJkZWMobXNnLnByZWZpeCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi50ZXh0ID0gX3N0cmRlYyhtc2cudGV4dCkKLSsgKiAg ICAgICAgIHNlbGYubG9nX2xldmVsID0gbXNnLmxvZ19sZXZlbAotICAqLwotLSAgX19weXhfdF8x ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9pbnB1dC0+YXJnMCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE3NywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5 eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDE5MSwgX19weXhfTDFfZXJyb3IpCi0r ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNf RnJvbVN0cmluZyhfX3B5eF92X21zZy0+cHJlZml4KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMCwgMTkxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzMpOwotKyAgX19weXhfdF80ID0gTlVMTDsKLSsgIGlmIChDWVRIT05fVU5QQUNLX01FVEhP RFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLSsgICAgX19weXhf dF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKLSsgICAgaWYgKGxpa2VseShfX3B5 eF90XzQpKSB7Ci0rICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfMik7Ci0rICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7Ci0rICAgICAg X19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Rf MiwgZnVuY3Rpb24pOwotKyAgICB9Ci0rICB9Ci0rICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/ IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdF8z KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOwotKyAg X19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotKyAgX19QeXhfREVDUkVG KF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxOTEsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSAgIF9f UHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmFy ZzApOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+YXJnMCk7Ci0tICBfX3B5eF92X3Nl bGYtPmFyZzAgPSBfX3B5eF90XzE7Ci0rICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5wcmVm aXgpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsKLSsgIF9fcHl4X3Zf c2VsZi0+cHJlZml4ID0gX19weXhfdF8xOwotICAgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNzgKLS0gKiAgICAgY2RlZiBfaW5pdChzZWxm LCBtcHZfZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3BhdGNoKiBpbnB1dCk6Ci0tICogICAgICAgICBz ZWxmLmFyZzAgPSBpbnB1dC5hcmcwCi0tICogICAgICAgICBzZWxmLnR5cGUgPSBfc3RyZGVjKGlu cHV0LnR5cGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxOTIKLSsgKiAgICAgICAgIHNlbGYubGV2ZWwgPSBfc3RyZGVj KG1zZy5sZXZlbCkKLSsgKiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0cmRlYyhtc2cucHJlZml4 KQotKyAqICAgICAgICAgc2VsZi50ZXh0ID0gX3N0cmRlYyhtc2cudGV4dCkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBtc2cubG9nX2xl dmVsCi0gICogICAgICAgICByZXR1cm4gc2VsZgotLSAqIAotICAqLwotLSAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxNzgsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxOTIsIF9fcHl4X0wxX2Vycm9yKQotICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zy b21TdHJpbmcoX19weXhfdl9pbnB1dC0+dHlwZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkg X19QWVhfRVJSKDAsIDE3OCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMgPSBfX1B5eF9Q eUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9tc2ctPnRleHQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCAxOTIsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMyk7Ci0gICBfX3B5eF90XzQgPSBOVUxMOwotICAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotQEAgLTM2 NzUsMTggKzM2OTcsMzMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfX2luaXQoc3RydWN0IF9fcHkKLSAgIF9fcHl4X3RfMSA9 IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhf dF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9f cHl4X3RfMyk7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0g ICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gIGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE3OCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxOTIsIF9fcHl4X0wxX2Vycm9yKQot ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsg X19weXhfdF8yID0gMDsKLSAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0dP VFJFRihfX3B5eF92X3NlbGYtPnR5cGUpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+ dHlwZSk7Ci0tICBfX3B5eF92X3NlbGYtPnR5cGUgPSBfX3B5eF90XzE7Ci0rICBfX1B5eF9HT1RS RUYoX19weXhfdl9zZWxmLT50ZXh0KTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnRl eHQpOwotKyAgX19weXhfdl9zZWxmLT50ZXh0ID0gX19weXhfdF8xOwotKyAgX19weXhfdF8xID0g MDsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTMKLSsgKiAgICAg ICAgIHNlbGYucHJlZml4ID0gX3N0cmRlYyhtc2cucHJlZml4KQotKyAqICAgICAgICAgc2VsZi50 ZXh0ID0gX3N0cmRlYyhtc2cudGV4dCkKLSsgKiAgICAgICAgIHNlbGYubG9nX2xldmVsID0gbXNn LmxvZ19sZXZlbCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICByZXR1 cm4gc2VsZgotKyAqIAotKyAqLwotKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQo X19weXhfdl9tc2ctPmxvZ19sZXZlbCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDE5MywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK LSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF92X3Nl bGYtPmxvZ19sZXZlbCk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwp OwotKyAgX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwgPSBfX3B5eF90XzE7Ci0gICBfX3B5eF90XzEg PSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE3OQotLSAqICAg ICAgICAgc2VsZi5hcmcwID0gaW5wdXQuYXJnMAotLSAqICAgICAgICAgc2VsZi50eXBlID0gX3N0 cmRlYyhpbnB1dC50eXBlKQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5 NAotKyAqICAgICAgICAgc2VsZi50ZXh0ID0gX3N0cmRlYyhtc2cudGV4dCkKLSsgKiAgICAgICAg IHNlbGYubG9nX2xldmVsID0gbXNnLmxvZ19sZXZlbAotICAqICAgICAgICAgcmV0dXJuIHNlbGYg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqIAotICAqIAotQEAgLTM2OTYsMTIgKzM3 MzMsMTIgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M0lucHV0RGlzcGF0Y2hfX2luaXQoc3RydWN0IF9fcHkKLSAgIF9fcHl4X3IgPSAoKFB5T2JqZWN0 ICopX19weXhfdl9zZWxmKTsKLSAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTc2Ci0tICogICAgIGNkZWYgcHVibGljIG9iamVjdCBhcmcw LCB0eXBlCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTg5Ci0rICogICAg IGNkZWYgcHVibGljIG9iamVjdCBwcmVmaXgsIGxldmVsLCB0ZXh0LCBsb2dfbGV2ZWwKLSAgKiAK LS0gKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3BhdGNo KiBpbnB1dCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYu YXJnMCA9IGlucHV0LmFyZzAKLS0gKiAgICAgICAgIHNlbGYudHlwZSA9IF9zdHJkZWMoaW5wdXQu dHlwZSkKLSsgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfbG9nX21lc3NhZ2UqIG1z Zyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYubGV2ZWwg PSBfc3RyZGVjKG1zZy5sZXZlbCkKLSsgKiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0cmRlYyht c2cucHJlZml4KQotICAqLwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi1AQCAtMzcx MCw3ICszNzQ3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM0lucHV0RGlzcGF0Y2hfX2luaXQoc3RydWN0IF9fcHkKLSAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8yKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKLSAgIF9fUHl4X1hERUNS RUYoX19weXhfdF80KTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2 LklucHV0RGlzcGF0Y2guX2luaXQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lKTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Lkxv Z01lc3NhZ2UuX2luaXQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKLSAgIF9fcHl4X3IgPSAwOwotICAgX19weXhfTDA6OwotICAgX19QeXhfWEdJVkVSRUYo X19weXhfcik7Ci1AQCAtMzcxOCwzNCArMzc1NSwzNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9faW5pdChzdHJ1Y3QgX19w eQotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxNzQKLS0gKiAgICAgV3JhcHM6IG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0 Y2gKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTg3Ci0rICogICAgIFdyYXBz OiBtcHZfZXZlbnRfbG9nX21lc3NhZ2UKLSAgKiAgICAgIiIiCi0tICogICAgIGNkZWYgcHVibGlj IG9iamVjdCBhcmcwLCB0eXBlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAg Y2RlZiBwdWJsaWMgb2JqZWN0IHByZWZpeCwgbGV2ZWwsIHRleHQsIGxvZ19sZXZlbCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0tICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2 X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCogaW5wdXQpOgotKyAqICAgICBjZGVmIF9pbml0 KHNlbGYsIG1wdl9ldmVudF9sb2dfbWVzc2FnZSogbXNnKToKLSAgKi8KLSAKLSAvKiBQeXRob24g d3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzSW5wdXREaXNwYXRjaF80YXJnMF8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxm KTsgLypwcm90byovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcwXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYpIHsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x MExvZ01lc3NhZ2VfNnByZWZpeF8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypw cm90byovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTBMb2dNZXNzYWdlXzZwcmVmaXhfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewot ICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK LSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIsIDApOwot LSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0 Y2hfNGFyZzBfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0lucHV0RGlzcGF0Y2ggKilfX3B5eF92X3NlbGYpKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVmaXhfX19nZXRfXygoKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3Nl bGYpKTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcw X19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNw YXRjaCAqX19weXhfdl9zZWxmKSB7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVmaXhfX19nZXRfXyhzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYpIHsKLSAg IFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25z Ci0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOwotICAgX19QeXhf WERFQ1JFRihfX3B5eF9yKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPmFyZzApOwot LSAgX19weXhfciA9IF9fcHl4X3Zfc2VsZi0+YXJnMDsKLSsgIF9fUHl4X0lOQ1JFRihfX3B5eF92 X3NlbGYtPnByZWZpeCk7Ci0rICBfX3B5eF9yID0gX19weXhfdl9zZWxmLT5wcmVmaXg7Ci0gICBn b3RvIF9fcHl4X0wwOwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi1AQCAtMzc1Niwy NyArMzc5MywyNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM0lucHV0RGlzcGF0Y2hfNGFyZzBfX19nZXRfXyhzdAotIH0KLSAKLSAvKiBQeXRob24g d3JhcHBlciAqLwotLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz SW5wdXREaXNwYXRjaF80YXJnMF8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl92YWx1ZSk7IC8qcHJvdG8qLwotLXN0YXRpYyBpbnQgX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80YXJnMF8zX19zZXRfXyhQeU9iamVj dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgewotK3N0YXRpYyBpbnQg X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzNfX3Nl dF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLypw cm90byovCi0rc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dN ZXNzYWdlXzZwcmVmaXhfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfdmFsdWUpIHsKLSAgIGludCBfX3B5eF9yOwotICAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fICh3cmFwcGVy KSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lu cHV0RGlzcGF0Y2hfNGFyZzBfMl9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9f cHl4X3ZfdmFsdWUpKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTBMb2dNZXNzYWdlXzZwcmVmaXhfMl9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAq KV9fcHl4X3ZfdmFsdWUpKTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0t c3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNo XzRhcmcwXzJfX3NldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lu cHV0RGlzcGF0Y2ggKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKLStz dGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnBy ZWZpeF8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7Ci0gICBpbnQg X19weXhfcjsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0gICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOwotICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFs dWUpOwotICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3ZhbHVlKTsKLS0gIF9fUHl4X0dPVFJFRihf X3B5eF92X3NlbGYtPmFyZzApOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+YXJnMCk7 Ci0tICBfX3B5eF92X3NlbGYtPmFyZzAgPSBfX3B5eF92X3ZhbHVlOwotKyAgX19QeXhfR09UUkVG KF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnBy ZWZpeCk7Ci0rICBfX3B5eF92X3NlbGYtPnByZWZpeCA9IF9fcHl4X3ZfdmFsdWU7Ci0gCi0gICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fcHl4X3IgPSAwOwotQEAgLTM3ODUsMjcgKzM4 MjIsMjcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1 dERpc3BhdGNoXzRhcmcwXzJfX3NldF9fKHN0cnVjdAotIH0KLSAKLSAvKiBQeXRob24gd3JhcHBl ciAqLwotLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXRE aXNwYXRjaF80YXJnMF81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byov Ci0tc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3Bh dGNoXzRhcmcwXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKLStzdGF0aWMgaW50 IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF81X19k ZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCi0rc3RhdGljIGludCBfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVmaXhfNV9fZGVsX18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotICAgaW50IF9fcHl4X3I7Ci0gICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVsX18g KHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzSW5wdXREaXNwYXRjaF80YXJnMF80X19kZWxfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKilfX3B5eF92X3NlbGYpKTsKLSsgIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVm aXhfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlICopX19weXhfdl9zZWxmKSk7Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K LSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0g fQotIAotLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXRE aXNwYXRjaF80YXJnMF80X19kZWxfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9JbnB1dERpc3BhdGNoICpfX3B5eF92X3NlbGYpIHsKLStzdGF0aWMgaW50IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF80X19kZWxfXyhzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3Nl bGYpIHsKLSAgIGludCBfX3B5eF9yOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSAg IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fIiwgMCk7Ci0gICBfX1B5eF9JTkNS RUYoUHlfTm9uZSk7Ci0gICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOwotLSAgX19QeXhfR09UUkVG KF9fcHl4X3Zfc2VsZi0+YXJnMCk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5hcmcw KTsKLS0gIF9fcHl4X3Zfc2VsZi0+YXJnMCA9IFB5X05vbmU7Ci0rICBfX1B5eF9HT1RSRUYoX19w eXhfdl9zZWxmLT5wcmVmaXgpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4 KTsKLSsgIF9fcHl4X3Zfc2VsZi0+cHJlZml4ID0gUHlfTm9uZTsKLSAKLSAgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLwotICAgX19weXhfciA9IDA7Ci1AQCAtMzgxNCwyNSArMzg1MSwyNSBAQCBz dGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hf NGFyZzBfNF9fZGVsX18oc3RydWN0Ci0gfQotIAotIC8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3Bh dGNoXzR0eXBlXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KLS1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlz cGF0Y2hfNHR5cGVfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2 ZWxfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2 ZWxfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotICAgUHlPYmplY3QgKl9fcHl4 X3IgPSAwOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSAgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfX19nZXRfXygo KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKilf X3B5eF92X3NlbGYpKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTBMb2dNZXNzYWdlXzVsZXZlbF9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZikpOwotIAotICAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCi0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAg IHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfX19nZXRfXyhzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICpfX3B5eF92X3NlbGYp IHsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExv Z01lc3NhZ2VfNWxldmVsX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmKSB7Ci0gICBQeU9iamVjdCAqX19weXhfciA9 IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotICAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0t ICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT50eXBlKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF92 X3NlbGYtPnR5cGU7Ci0rICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5sZXZlbCk7Ci0rICBf X3B5eF9yID0gX19weXhfdl9zZWxmLT5sZXZlbDsKLSAgIGdvdG8gX19weXhfTDA7Ci0gCi0gICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLUBAIC0zODQzLDI3ICszODgwLDI3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80 dHlwZV9fX2dldF9fKHN0Ci0gfQotIAotIC8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIGlu dCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzR0eXBlXzNf X3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsg Lypwcm90byovCi0tc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJ bnB1dERpc3BhdGNoXzR0eXBlXzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF92X3ZhbHVlKSB7Ci0rc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZlbF8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9z ZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qcHJvdG8qLwotK3N0YXRpYyBpbnQgX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxfM19fc2V0X18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKLSAgIGlu dCBfX3B5eF9yOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSAgIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJfX3NldF9fICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfMl9fc2V0 X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNo ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfdmFsdWUpKTsKLSsgIF9fcHl4 X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZlbF8y X19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3Nh Z2UgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1ZSkpOwotIAotICAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfMl9fc2V0X18oc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgewotK3N0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxfMl9fc2V0X18oc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl92YWx1ZSkgewotICAgaW50IF9fcHl4X3I7Ci0gICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18iLCAw KTsKLSAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlKTsKLSAgIF9fUHl4X0dJVkVSRUYoX19w eXhfdl92YWx1ZSk7Ci0tICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT50eXBlKTsKLS0gIF9f UHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnR5cGUpOwotLSAgX19weXhfdl9zZWxmLT50eXBlID0g X19weXhfdl92YWx1ZTsKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmxldmVsKTsKLSsg IF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmxldmVsKTsKLSsgIF9fcHl4X3Zfc2VsZi0+bGV2 ZWwgPSBfX3B5eF92X3ZhbHVlOwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0gICBf X3B5eF9yID0gMDsKLUBAIC0zODcyLDI3ICszOTA5LDI3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80dHlwZV8yX19zZXRfXyhzdHJ1 Y3QKLSB9Ci0gCi0gLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfNV9fZGVsX18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80dHlwZV81X19kZWxfXyhQeU9iamVjdCAq X19weXhfdl9zZWxmKSB7Ci0rc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTBMb2dNZXNzYWdlXzVsZXZlbF81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsg Lypwcm90byovCi0rc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBM b2dNZXNzYWdlXzVsZXZlbF81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Ci0gICBp bnQgX19weXhfcjsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0gICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3IgPSBf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzR0eXBlXzRfX2Rl bF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRj aCAqKV9fcHl4X3Zfc2VsZikpOwotKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzRfX2RlbF9fKCgoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZikpOwotIAotICAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfNF9fZGVsX18oc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqX19weXhfdl9zZWxm KSB7Ci0rc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzVsZXZlbF80X19kZWxfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYpIHsKLSAgIGludCBfX3B5eF9yOwotICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2Rl bF9fIiwgMCk7Ci0gICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0gICBfX1B5eF9HSVZFUkVGKFB5 X05vbmUpOwotLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+dHlwZSk7Ci0tICBfX1B5eF9E RUNSRUYoX19weXhfdl9zZWxmLT50eXBlKTsKLS0gIF9fcHl4X3Zfc2VsZi0+dHlwZSA9IFB5X05v bmU7Ci0rICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5sZXZlbCk7Ci0rICBfX1B5eF9ERUNS RUYoX19weXhfdl9zZWxmLT5sZXZlbCk7Ci0rICBfX3B5eF92X3NlbGYtPmxldmVsID0gUHlfTm9u ZTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19weXhfciA9IDA7Ci1AQCAt MzkwMCw2MyArMzkzNywyNDMgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNJbnB1dERpc3BhdGNoXzR0eXBlXzRfX2RlbF9fKHN0cnVjdAotICAgcmV0dXJuIF9f cHl4X3I7Ci0gfQotIAotLS8qICIodHJlZSBmcmFnbWVudCkiOjEKLS0gKiBkZWYgX19yZWR1Y2Vf Y3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgY2Rl ZiB0dXBsZSBzdGF0ZQotLSAqICAgICBjZGVmIG9iamVjdCBfZGljdAotLSAqLwotLQotIC8qIFB5 dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzFfX3JlZHVjZV9jeXRob25fXyhQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KLS1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlz cGF0Y2hfMV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9V TlVTRUQgUHlPYmplY3QgKnVudXNlZCkgewotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF8xX19nZXRfXyhQeU9iamVjdCAq X19weXhfdl9zZWxmKTsgLypwcm90byovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0ZXh0XzFfX2dldF9fKFB5T2JqZWN0ICpf X3B5eF92X3NlbGYpIHsKLSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLSAgIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2Vf Y3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9fX3JlZHVjZV9jeXRob25fXygoKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKilfX3B5eF92X3Nl bGYpKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIs IDApOwotKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01l c3NhZ2VfNHRleHRfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpKTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19w eXhfcjsKLSB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNJbnB1dERpc3BhdGNoX19fcmVkdWNlX2N5dGhvbl9fKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKl9fcHl4X3Zfc2VsZikgewotLSAg UHlPYmplY3QgKl9fcHl4X3Zfc3RhdGUgPSAwOwotLSAgUHlPYmplY3QgKl9fcHl4X3ZfX2RpY3Qg PSAwOwotLSAgaW50IF9fcHl4X3ZfdXNlX3NldHN0YXRlOwotK3N0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF9fX2dldF9fKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zf c2VsZikgewotICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotLSAgaW50IF9fcHl4 X3RfMjsKLS0gIGludCBfX3B5eF90XzM7Ci0tICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsK LS0gIGludCBfX3B5eF90XzU7Ci0tICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKLS0gIGlu dCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxM OwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fcmVkdWNlX2N5dGhvbl9fIiwgMCk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgiX19nZXRfXyIsIDApOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLSsgIF9fUHl4X0lO Q1JFRihfX3B5eF92X3NlbGYtPnRleHQpOwotKyAgX19weXhfciA9IF9fcHl4X3Zfc2VsZi0+dGV4 dDsKLSsgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo1Ci0tICog ICAgIGNkZWYgb2JqZWN0IF9kaWN0Ci0tICogICAgIGNkZWYgYmludCB1c2Vfc2V0c3RhdGUKLS0g KiAgICAgc3RhdGUgPSAoc2VsZi5hcmcwLCBzZWxmLnR5cGUpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUp Ci0tICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgotLSAqLwotLSAgX19weXhfdF8xID0gUHlU dXBsZV9OZXcoMik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDUsIF9f cHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9JTkNS RUYoX19weXhfdl9zZWxmLT5hcmcwKTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zZWxmLT5h cmcwKTsKLS0gIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCBfX3B5eF92X3NlbGYtPmFy ZzApOwotLSAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+dHlwZSk7Ci0tICBfX1B5eF9HSVZF UkVGKF9fcHl4X3Zfc2VsZi0+dHlwZSk7Ci0tICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwg MSwgX19weXhfdl9zZWxmLT50eXBlKTsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAg X19weXhfTDA6OwotKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0rICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBfX3B5eF9yOwotK30KLSsKLSsvKiBQeXRob24g d3JhcHBlciAqLwotK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEw TG9nTWVzc2FnZV80dGV4dF8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVj dCAqX19weXhfdl92YWx1ZSk7IC8qcHJvdG8qLwotK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF8zX19zZXRfXyhQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgewotKyAgaW50IF9fcHl4X3I7Ci0r ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fc2V0X18gKHdyYXBwZXIpIiwgMCk7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF8yX19zZXRfXygoKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpLCAo KFB5T2JqZWN0ICopX19weXhfdl92YWx1ZSkpOwotKwotKyAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCi0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBfX3B5eF9y OwotK30KLSsKLStzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExv Z01lc3NhZ2VfNHRleHRfMl9fc2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkg ewotKyAgaW50IF9fcHl4X3I7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18iLCAwKTsKLSsgIF9fUHl4X0lOQ1JFRihf X3B5eF92X3ZhbHVlKTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdl92YWx1ZSk7Ci0rICBfX1B5 eF9HT1RSRUYoX19weXhfdl9zZWxmLT50ZXh0KTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3Nl bGYtPnRleHQpOwotKyAgX19weXhfdl9zZWxmLT50ZXh0ID0gX19weXhfdl92YWx1ZTsKLSsKLSsg IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19weXhfciA9IDA7Ci0rICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBfX3B5eF9yOwotK30KLSsKLSsvKiBQeXRo b24gd3JhcHBlciAqLwotK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEwTG9nTWVzc2FnZV80dGV4dF81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypw cm90byovCi0rc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dN ZXNzYWdlXzR0ZXh0XzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKLSsgIGludCBf X3B5eF9yOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX2RlbF9fICh3cmFwcGVyKSIsIDApOwotKyAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNHRleHRfNF9fZGVsX18oKChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopX19weXhf dl9zZWxmKSk7Ci0rCi0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIF9fcHl4X3I7Ci0rfQotKwotK3N0YXRpYyBp bnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF80X19k ZWxfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpf X3B5eF92X3NlbGYpIHsKLSsgIGludCBfX3B5eF9yOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJh dGlvbnMKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fIiwgMCk7Ci0rICBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0rICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOwotKyAgX19Q eXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+dGV4dCk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdl9z ZWxmLT50ZXh0KTsKLSsgIF9fcHl4X3Zfc2VsZi0+dGV4dCA9IFB5X05vbmU7Ci0rCi0rICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fcHl4X3IgPSAwOwotKyAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19weXhfcjsKLSt9Ci0rCi0rLyogUHl0aG9uIHdy YXBwZXIgKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxm KTsgLypwcm90byovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTBMb2dNZXNzYWdlXzlsb2dfbGV2ZWxfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zf c2VsZikgewotKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotKyAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVy KSIsIDApOwotKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExv Z01lc3NhZ2VfOWxvZ19sZXZlbF9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZikpOwotKwotKyAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCi0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJl dHVybiBfX3B5eF9yOwotK30KLSsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF9fX2dldF9fKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZikgewot KyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlv bnMKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fIiwgMCk7Ci0rICBfX1B5 eF9YREVDUkVGKF9fcHl4X3IpOwotKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+bG9nX2xl dmVsKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF92X3NlbGYtPmxvZ19sZXZlbDsKLSsgIGdvdG8gX19w eXhfTDA7Ci0rCi0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fcHl4X0wwOjsKLSsg IF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7Ci0rICByZXR1cm4gX19weXhfcjsKLSt9Ci0rCi0rLyogUHl0aG9uIHdyYXBwZXIgKi8KLStz dGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxv Z19sZXZlbF8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhf dl92YWx1ZSk7IC8qcHJvdG8qLwotK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsXzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7Ci0rICBpbnQgX19weXhfcjsKLSsgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19zZXRfXyAod3JhcHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzlsb2dfbGV2ZWxfMl9fc2V0X18oKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopX19weXhfdl9zZWxmKSwg KChQeU9iamVjdCAqKV9fcHl4X3ZfdmFsdWUpKTsKLSsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19weXhf cjsKLSt9Ci0rCi0rc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBM b2dNZXNzYWdlXzlsb2dfbGV2ZWxfMl9fc2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92 YWx1ZSkgewotKyAgaW50IF9fcHl4X3I7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwot KyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18iLCAwKTsKLSsgIF9fUHl4X0lO Q1JFRihfX3B5eF92X3ZhbHVlKTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdl92YWx1ZSk7Ci0r ICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwpOwotKyAgX19QeXhfREVDUkVG KF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsKTsKLSsgIF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsID0g X19weXhfdl92YWx1ZTsKLSsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19weXhf ciA9IDA7Ci0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBfX3B5 eF9yOwotK30KLSsKLSsvKiBQeXRob24gd3JhcHBlciAqLwotK3N0YXRpYyBpbnQgX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsXzVfX2RlbF9fKFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KLStzdGF0aWMgaW50IF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF81X19kZWxfXyhQeU9i amVjdCAqX19weXhfdl9zZWxmKSB7Ci0rICBpbnQgX19weXhfcjsKLSsgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyAod3Jh cHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTBMb2dNZXNzYWdlXzlsb2dfbGV2ZWxfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopX19weXhfdl9zZWxmKSk7Ci0rCi0rICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwot KyAgcmV0dXJuIF9fcHl4X3I7Ci0rfQotKwotK3N0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsXzRfX2RlbF9fKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZikgewot KyAgaW50IF9fcHl4X3I7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVsX18iLCAwKTsKLSsgIF9fUHl4X0lOQ1JFRihQeV9O b25lKTsKLSsgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7Ci0rICBfX1B5eF9HT1RSRUYoX19weXhf dl9zZWxmLT5sb2dfbGV2ZWwpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+bG9nX2xl dmVsKTsKLSsgIF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsID0gUHlfTm9uZTsKLSsKLSsgIC8qIGZ1 bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19weXhfciA9IDA7Ci0rICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBfX3B5eF9yOwotK30KLSsKLSsvKiAiKHRyZWUgZnJh Z21lbnQpIjoxCi0rICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGNkZWYgdHVwbGUgc3RhdGUKLSsgKiAgICAgY2RlZiBv YmplY3QgX2RpY3QKLSsgKi8KLSsKLSsvKiBQeXRob24gd3JhcHBlciAqLwotK3N0YXRpYyBQeU9i amVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV8xX19yZWR1 Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVj dCAqdW51c2VkKTsgLypwcm90byovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzFfX3JlZHVjZV9jeXRob25fXyhQeU9iamVjdCAq X19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKLSsgIFB5T2Jq ZWN0ICpfX3B5eF9yID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0rICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7 Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2Fn ZV9fX3JlZHVjZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpKTsKLSsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19w eXhfcjsKLSt9Ci0rCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTBMb2dNZXNzYWdlX19fcmVkdWNlX2N5dGhvbl9fKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZikgewotKyAgUHlPYmpl Y3QgKl9fcHl4X3Zfc3RhdGUgPSAwOwotKyAgUHlPYmplY3QgKl9fcHl4X3ZfX2RpY3QgPSAwOwot KyAgaW50IF9fcHl4X3ZfdXNlX3NldHN0YXRlOwotKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxM OwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzEg PSBOVUxMOwotKyAgaW50IF9fcHl4X3RfMjsKLSsgIGludCBfX3B5eF90XzM7Ci0rICBQeU9iamVj dCAqX19weXhfdF80ID0gTlVMTDsKLSsgIGludCBfX3B5eF90XzU7Ci0rICBQeU9iamVjdCAqX19w eXhfdF82ID0gTlVMTDsKLSsgIGludCBfX3B5eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAq X19weXhfZmlsZW5hbWUgPSBOVUxMOwotKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotKyAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fIiwgMCk7Ci0rCi0rICAv KiAiKHRyZWUgZnJhZ21lbnQpIjo1Ci0rICogICAgIGNkZWYgb2JqZWN0IF9kaWN0Ci0rICogICAg IGNkZWYgYmludCB1c2Vfc2V0c3RhdGUKLSsgKiAgICAgc3RhdGUgPSAoc2VsZi5sZXZlbCwgc2Vs Zi5sb2dfbGV2ZWwsIHNlbGYucHJlZml4LCBzZWxmLnRleHQpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUp Ci0rICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgotKyAqLwotKyAgX19weXhfdF8xID0gUHlU dXBsZV9OZXcoNCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDUsIF9f cHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9JTkNS RUYoX19weXhfdl9zZWxmLT5sZXZlbCk7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc2VsZi0+ bGV2ZWwpOwotKyAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDAsIF9fcHl4X3Zfc2VsZi0+ bGV2ZWwpOwotKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsKTsKLSsgIF9f UHl4X0dJVkVSRUYoX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwpOwotKyAgUHlUdXBsZV9TRVRfSVRF TShfX3B5eF90XzEsIDEsIF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsKTsKLSsgIF9fUHl4X0lOQ1JF RihfX3B5eF92X3NlbGYtPnByZWZpeCk7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc2VsZi0+ cHJlZml4KTsKLSsgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAyLCBfX3B5eF92X3NlbGYt PnByZWZpeCk7Ci0rICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT50ZXh0KTsKLSsgIF9fUHl4 X0dJVkVSRUYoX19weXhfdl9zZWxmLT50ZXh0KTsKLSsgIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF8xLCAzLCBfX3B5eF92X3NlbGYtPnRleHQpOwotICAgX19weXhfdl9zdGF0ZSA9ICgoUHlPYmpl Y3QqKV9fcHl4X3RfMSk7Ci0gICBfX3B5eF90XzEgPSAwOwotIAotICAgLyogIih0cmVlIGZyYWdt ZW50KSI6NgotICAqICAgICBjZGVmIGJpbnQgdXNlX3NldHN0YXRlCi0tICogICAgIHN0YXRlID0g KHNlbGYuYXJnMCwgc2VsZi50eXBlKQotKyAqICAgICBzdGF0ZSA9IChzZWxmLmxldmVsLCBzZWxm LmxvZ19sZXZlbCwgc2VsZi5wcmVmaXgsIHNlbGYudGV4dCkKLSAgKiAgICAgX2RpY3QgPSBnZXRh dHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSAgKiAgICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6Ci0gICogICAgICAgICBzdGF0ZSArPSAoX2Rp Y3QsKQotQEAgLTM5NjcsNyArNDE4NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9fX3JlZHVjZV9jeXRob25fCi0gICBf X3B5eF90XzEgPSAwOwotIAotICAgLyogIih0cmVlIGZyYWdtZW50KSI6NwotLSAqICAgICBzdGF0 ZSA9IChzZWxmLmFyZzAsIHNlbGYudHlwZSkKLSsgKiAgICAgc3RhdGUgPSAoc2VsZi5sZXZlbCwg c2VsZi5sb2dfbGV2ZWwsIHNlbGYucHJlZml4LCBzZWxmLnRleHQpCi0gICogICAgIF9kaWN0ID0g Z2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKQotICAqICAgICBpZiBfZGljdCBpcyBub3Qg Tm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgc3RhdGUgKz0g KF9kaWN0LCkKLUBAIC00MDAwLDEyICs0MjE3LDEyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9fX3JlZHVjZV9jeXRob25f Ci0gICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQotICAqICAgICAgICAgdXNlX3NldHN0YXRl ID0gVHJ1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgIGVsc2U6Ci0tICog ICAgICAgICB1c2Vfc2V0c3RhdGUgPSBzZWxmLmFyZzAgaXMgbm90IE5vbmUgb3Igc2VsZi50eXBl IGlzIG5vdCBOb25lCi0rICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBzZWxmLmxldmVsIGlzIG5v dCBOb25lIG9yIHNlbGYubG9nX2xldmVsIGlzIG5vdCBOb25lIG9yIHNlbGYucHJlZml4IGlzIG5v dCBOb25lIG9yIHNlbGYudGV4dCBpcyBub3QgTm9uZQotICAqLwotICAgICBfX3B5eF92X3VzZV9z ZXRzdGF0ZSA9IDE7Ci0gCi0gICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjcKLS0gKiAgICAgc3Rh dGUgPSAoc2VsZi5hcmcwLCBzZWxmLnR5cGUpCi0rICogICAgIHN0YXRlID0gKHNlbGYubGV2ZWws IHNlbGYubG9nX2xldmVsLCBzZWxmLnByZWZpeCwgc2VsZi50ZXh0KQotICAqICAgICBfZGljdCA9 IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKLSAgKiAgICAgaWYgX2RpY3QgaXMgbm90 IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIHN0YXRlICs9 IChfZGljdCwpCi1AQCAtNDAxNywxOSArNDIzNCwzMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfX19yZWR1Y2VfY3l0aG9u XwotICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKLSAgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9 IFRydWUKLSAgKiAgICAgZWxzZToKLS0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuYXJn MCBpcyBub3QgTm9uZSBvciBzZWxmLnR5cGUgaXMgbm90IE5vbmUgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5sZXZlbCBpcyBub3Qg Tm9uZSBvciBzZWxmLmxvZ19sZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLnByZWZpeCBpcyBub3Qg Tm9uZSBvciBzZWxmLnRleHQgaXMgbm90IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqICAgICBpZiB1c2Vfc2V0c3RhdGU6Ci0tICogICAgICAgICByZXR1cm4gX19weXhfdW5w aWNrbGVfSW5wdXREaXNwYXRjaCwgKHR5cGUoc2VsZiksIDB4YmY2NDFhOSwgTm9uZSksIHN0YXRl Ci0rICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgKHR5cGUoc2Vs ZiksIDB4ODc3NGZhZSwgTm9uZSksIHN0YXRlCi0gICovCi0gICAvKmVsc2UqLyB7Ci0tICAgIF9f cHl4X3RfMiA9IChfX3B5eF92X3NlbGYtPmFyZzAgIT0gUHlfTm9uZSk7Ci0rICAgIF9fcHl4X3Rf MiA9IChfX3B5eF92X3NlbGYtPmxldmVsICE9IFB5X05vbmUpOwotKyAgICBfX3B5eF90XzUgPSAo X19weXhfdF8yICE9IDApOwotKyAgICBpZiAoIV9fcHl4X3RfNSkgewotKyAgICB9IGVsc2Ugewot KyAgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNTsKLSsgICAgICBnb3RvIF9fcHl4X0w0X2Jvb2xf Ymlub3BfZG9uZTsKLSsgICAgfQotKyAgICBfX3B5eF90XzUgPSAoX19weXhfdl9zZWxmLT5sb2df bGV2ZWwgIT0gUHlfTm9uZSk7Ci0rICAgIF9fcHl4X3RfMiA9IChfX3B5eF90XzUgIT0gMCk7Ci0r ICAgIGlmICghX19weXhfdF8yKSB7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgX19weXhfdF8zID0g X19weXhfdF8yOwotKyAgICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOwotKyAgICB9 Ci0rICAgIF9fcHl4X3RfMiA9IChfX3B5eF92X3NlbGYtPnByZWZpeCAhPSBQeV9Ob25lKTsKLSAg ICAgX19weXhfdF81ID0gKF9fcHl4X3RfMiAhPSAwKTsKLSAgICAgaWYgKCFfX3B5eF90XzUpIHsK LSAgICAgfSBlbHNlIHsKLSAgICAgICBfX3B5eF90XzMgPSBfX3B5eF90XzU7Ci0gICAgICAgZ290 byBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU7Ci0gICAgIH0KLS0gICAgX19weXhfdF81ID0gKF9f cHl4X3Zfc2VsZi0+dHlwZSAhPSBQeV9Ob25lKTsKLSsgICAgX19weXhfdF81ID0gKF9fcHl4X3Zf c2VsZi0+dGV4dCAhPSBQeV9Ob25lKTsKLSAgICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSAhPSAw KTsKLSAgICAgX19weXhfdF8zID0gX19weXhfdF8yOwotICAgICBfX3B5eF9MNF9ib29sX2Jpbm9w X2RvbmU6OwotQEAgLTQwMzksMzIgKzQyNzAsMzIgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoX19fcmVkdWNlX2N5dGhvbl8K LSAKLSAgIC8qICIodHJlZSBmcmFnbWVudCkiOjEyCi0gICogICAgIGVsc2U6Ci0tICogICAgICAg ICB1c2Vfc2V0c3RhdGUgPSBzZWxmLmFyZzAgaXMgbm90IE5vbmUgb3Igc2VsZi50eXBlIGlzIG5v dCBOb25lCi0rICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBzZWxmLmxldmVsIGlzIG5vdCBOb25l IG9yIHNlbGYubG9nX2xldmVsIGlzIG5vdCBOb25lIG9yIHNlbGYucHJlZml4IGlzIG5vdCBOb25l IG9yIHNlbGYudGV4dCBpcyBub3QgTm9uZQotICAqICAgICBpZiB1c2Vfc2V0c3RhdGU6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2ts ZV9JbnB1dERpc3BhdGNoLCAodHlwZShzZWxmKSwgMHhiZjY0MWE5LCBOb25lKSwgc3RhdGUKLSsg KiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAodHlwZShzZWxmKSwg MHg4Nzc0ZmFlLCBOb25lKSwgc3RhdGUKLSAgKiAgICAgZWxzZToKLSAgKi8KLSAgIF9fcHl4X3Rf MyA9IChfX3B5eF92X3VzZV9zZXRzdGF0ZSAhPSAwKTsKLSAgIGlmIChfX3B5eF90XzMpIHsKLSAK LSAgICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKLS0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9 IHNlbGYuYXJnMCBpcyBub3QgTm9uZSBvciBzZWxmLnR5cGUgaXMgbm90IE5vbmUKLSsgKiAgICAg ICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYubGV2ZWwgaXMgbm90IE5vbmUgb3Igc2VsZi5sb2dfbGV2 ZWwgaXMgbm90IE5vbmUgb3Igc2VsZi5wcmVmaXggaXMgbm90IE5vbmUgb3Igc2VsZi50ZXh0IGlz IG5vdCBOb25lCi0gICogICAgIGlmIHVzZV9zZXRzdGF0ZToKLS0gKiAgICAgICAgIHJldHVybiBf X3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoLCAodHlwZShzZWxmKSwgMHhiZjY0MWE5LCBOb25l KSwgc3RhdGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJu IF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIE5vbmUp LCBzdGF0ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgIGVsc2U6Ci0tICog ICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCwgKHR5cGUoc2VsZiks IDB4YmY2NDFhOSwgc3RhdGUpCi0rICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9n TWVzc2FnZSwgKHR5cGUoc2VsZiksIDB4ODc3NGZhZSwgc3RhdGUpCi0gICovCi0gICAgIF9fUHl4 X1hERUNSRUYoX19weXhfcik7Ci0tICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhf dF80LCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2gpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX0xv Z01lc3NhZ2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCAxMywgX19w eXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotICAgICBfX3B5eF90 XzEgPSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MSwgMTMsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAg ICAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92 X3NlbGYpKSkpOwotICAgICBfX1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlP YmplY3QgKilfX3B5eF92X3NlbGYpKSkpOwotICAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3Rf MSwgMCwgKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7 Ci0tICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMjAwNjg4MDQxKTsKLS0gICAgX19QeXhfR0lW RVJFRihfX3B5eF9pbnRfMjAwNjg4MDQxKTsKLS0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzEsIDEsIF9fcHl4X2ludF8yMDA2ODgwNDEpOwotKyAgICBfX1B5eF9JTkNSRUYoX19weXhfaW50 XzE0MjAzNjkxMCk7Ci0rICAgIF9fUHl4X0dJVkVSRUYoX19weXhfaW50XzE0MjAzNjkxMCk7Ci0r ICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAxLCBfX3B5eF9pbnRfMTQyMDM2OTEwKTsK LSAgICAgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotICAgICBfX1B5eF9HSVZFUkVGKFB5X05vbmUp OwotICAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMiwgUHlfTm9uZSk7Ci1AQCAtNDA4 NSwzMiArNDMxNiwzMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfX19yZWR1Y2VfY3l0aG9uXwotIAotICAgICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxMgotICAqICAgICBlbHNlOgotLSAqICAgICAgICAgdXNlX3NldHN0YXRl ID0gc2VsZi5hcmcwIGlzIG5vdCBOb25lIG9yIHNlbGYudHlwZSBpcyBub3QgTm9uZQotKyAqICAg ICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5sZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLmxvZ19s ZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLnByZWZpeCBpcyBub3QgTm9uZSBvciBzZWxmLnRleHQg aXMgbm90IE5vbmUKLSAgKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRj aCwgKHR5cGUoc2VsZiksIDB4YmY2NDFhOSwgTm9uZSksIHN0YXRlCi0rICogICAgICAgICByZXR1 cm4gX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgKHR5cGUoc2VsZiksIDB4ODc3NGZhZSwgTm9u ZSksIHN0YXRlCi0gICogICAgIGVsc2U6Ci0gICovCi0gICB9Ci0gCi0gICAvKiAiKHRyZWUgZnJh Z21lbnQpIjoxNQotLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0 Y2gsICh0eXBlKHNlbGYpLCAweGJmNjQxYTksIE5vbmUpLCBzdGF0ZQotKyAqICAgICAgICAgcmV0 dXJuIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIE5v bmUpLCBzdGF0ZQotICAqICAgICBlbHNlOgotLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlj a2xlX0lucHV0RGlzcGF0Y2gsICh0eXBlKHNlbGYpLCAweGJmNjQxYTksIHN0YXRlKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVf TG9nTWVzc2FnZSwgKHR5cGUoc2VsZiksIDB4ODc3NGZhZSwgc3RhdGUpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSAgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9z dGF0ZSk6Ci0tICogICAgIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZShz ZWxmLCBfX3B5eF9zdGF0ZSkKLSsgKiAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0 X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQotICAqLwotICAgLyplbHNlKi8gewotICAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4 X3RfNiwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5 eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9M b2dNZXNzYWdlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMTUsIF9f cHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSAgICAgX19weXhf dF8xID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDEsIDE1LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0g ICAgIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhf dl9zZWxmKSkpKTsKLSAgICAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5 T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKLSAgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzEsIDAsICgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkp OwotLSAgICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzIwMDY4ODA0MSk7Ci0tICAgIF9fUHl4X0dJ VkVSRUYoX19weXhfaW50XzIwMDY4ODA0MSk7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF8xLCAxLCBfX3B5eF9pbnRfMjAwNjg4MDQxKTsKLSsgICAgX19QeXhfSU5DUkVGKF9fcHl4X2lu dF8xNDIwMzY5MTApOwotKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X2ludF8xNDIwMzY5MTApOwot KyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMSwgX19weXhfaW50XzE0MjAzNjkxMCk7 Ci0gICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3N0YXRlKTsKLSAgICAgX19QeXhfR0lWRVJFRihf X3B5eF92X3N0YXRlKTsKLSAgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDIsIF9fcHl4 X3Zfc3RhdGUpOwotQEAgLTQxMzgsNyArNDM2OSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9fX3JlZHVjZV9jeXRob25f Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf NCk7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5JbnB1dERpc3BhdGNoLl9fcmVkdWNlX2N5dGhvbl9fIiwgX19w eXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX1B5eF9BZGRU cmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Mb2dNZXNzYWdlLl9fcmVkdWNlX2N5dGhvbl9f IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0gICBfX3B5 eF9yID0gTlVMTDsKLSAgIF9fcHl4X0wwOjsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdl9zdGF0 ZSk7Ci1AQCAtNDE1MCwyNSArNDM4MSwyNSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfX19yZWR1Y2VfY3l0aG9uXwotIAot IC8qICIodHJlZSBmcmFnbWVudCkiOjE2Ci0gICogICAgIGVsc2U6Ci0tICogICAgICAgICByZXR1 cm4gX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCwgKHR5cGUoc2VsZiksIDB4YmY2NDFhOSwg c3RhdGUpCi0rICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgKHR5 cGUoc2VsZiksIDB4ODc3NGZhZSwgc3RhdGUpCi0gICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18o c2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAg IF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZShzZWxmLCBfX3B5eF9zdGF0 ZSkKLSsgKiAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKHNlbGYsIF9f cHl4X3N0YXRlKQotICAqLwotIAotIC8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzNfX3Nl dHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X19fcHl4X3N0YXRlKTsgLypwcm90byovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzNfX3NldHN0YXRlX2N5dGhvbl9fKFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7Ci0r c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzNfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLypwcm90byovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzNfX3NldHN0YXRlX2N5dGhv bl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRl KSB7Ci0gICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18g KHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzSW5wdXREaXNwYXRjaF8yX19zZXRzdGF0ZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKilfX3B5eF92X3NlbGYpLCAo KFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOwotKyAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfMl9fc2V0c3RhdGVfY3l0aG9uX18o KChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopX19w eXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsKLSAKLSAgIC8q IGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzJfX3NldHN0YXRlX2N5dGhvbl9f KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKLStzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfMl9fc2V0 c3RhdGVfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9n TWVzc2FnZSAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgewot ICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlv bnMKLSAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotQEAgLTQxNzgsMjAgKzQ0MDksMjAg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1 dERpc3BhdGNoXzJfX3NldHN0YXRlX2N5dGgKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJfX3NldHN0YXRlX2N5dGhvbl9fIiwgMCk7Ci0gCi0gICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox NwotLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2gsICh0eXBl KHNlbGYpLCAweGJmNjQxYTksIHN0YXRlKQotKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlj a2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIHN0YXRlKQotICAqIGRlZiBf X3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKLS0gKiAgICAgX19weXhfdW5w aWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2Vf X3NldF9zdGF0ZShzZWxmLCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqLwotICAgaWYgKCEobGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X19fcHl4 X3N0YXRlKSl8fCgoX19weXhfdl9fX3B5eF9zdGF0ZSkgPT0gUHlfTm9uZSl8fChQeUVycl9Gb3Jt YXQoUHlFeGNfVHlwZUVycm9yLCAiRXhwZWN0ZWQgJS4xNnMsIGdvdCAlLjIwMHMiLCAidHVwbGUi LCBQeV9UWVBFKF9fcHl4X3ZfX19weXhfc3RhdGUpLT50cF9uYW1lKSwgMCkpKSBfX1BZWF9FUlIo MSwgMTcsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0X3N0YXRlKF9fcHl4 X3Zfc2VsZiwgKChQeU9iamVjdCopX19weXhfdl9fX3B5eF9zdGF0ZSkpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90 XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9Mb2dNZXNz YWdlX19zZXRfc3RhdGUoX19weXhfdl9zZWxmLCAoKFB5T2JqZWN0KilfX3B5eF92X19fcHl4X3N0 YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDE3LCBfX3B5eF9M MV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0gICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNgot ICAqICAgICBlbHNlOgotLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0lucHV0RGlz cGF0Y2gsICh0eXBlKHNlbGYpLCAweGJmNjQxYTksIHN0YXRlKQotKyAqICAgICAgICAgcmV0dXJu IF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIHN0YXRl KQotICAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3Bh dGNoX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCi0rICogICAgIF9fcHl4X3VucGlja2xl X0xvZ01lc3NhZ2VfX3NldF9zdGF0ZShzZWxmLCBfX3B5eF9zdGF0ZSkKLSAgKi8KLSAKLSAgIC8q IGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotQEAgLTQxOTksNyArNDQzMCw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF8yX19z ZXRzdGF0ZV9jeXRoCi0gICBnb3RvIF9fcHl4X0wwOwotICAgX19weXhfTDFfZXJyb3I6OwotICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0 ZXIubGlicy5tcHYuSW5wdXREaXNwYXRjaC5fX3NldHN0YXRlX2N5dGhvbl9fIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX1B5eF9BZGRUcmFjZWJh Y2soInZpZGN1dHRlci5saWJzLm1wdi5Mb2dNZXNzYWdlLl9fc2V0c3RhdGVfY3l0aG9uX18iLCBf X3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSAgIF9fcHl4X3Ig PSBOVUxMOwotICAgX19weXhfTDA6OwotICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci1AQCAt NDIwNywxNDk0ICs0NDM4LDE2ODcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzJfX3NldHN0YXRlX2N5dGgKLSAgIHJldHVy biBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTg5 Ci0tICogICAgIGNkZWYgcHVibGljIG9iamVjdCBwcmVmaXgsIGxldmVsLCB0ZXh0LCBsb2dfbGV2 ZWwKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTk3Ci0gICogCi0tICogICAg IGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X2xvZ19tZXNzYWdlKiBtc2cpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLmxldmVsID0gX3N0cmRlYyhtc2cu bGV2ZWwpCi0tICogICAgICAgICBzZWxmLnByZWZpeCA9IF9zdHJkZWMobXNnLnByZWZpeCkKLSsg KiAKLSsgKiBjZGVmIF9jb252ZXJ0X25vZGVfdmFsdWUobXB2X25vZGUgbm9kZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1B VF9TVFJJTkc6Ci0rICogICAgICAgICByZXR1cm4gX3N0cmRlYyhub2RlLnUuc3RyaW5nKQotICAq LwotIAotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBM b2dNZXNzYWdlX19pbml0KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xv Z01lc3NhZ2UgKl9fcHl4X3Zfc2VsZiwgc3RydWN0IG1wdl9ldmVudF9sb2dfbWVzc2FnZSAqX19w eXhfdl9tc2cpIHsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9ub2RlIF9fcHl4X3Zfbm9kZSkgewot ICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlv bnMKLSAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3Rf MiA9IE5VTEw7Ci0gICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKLSAgIFB5T2JqZWN0ICpf X3B5eF90XzQgPSBOVUxMOwotKyAgaW50IF9fcHl4X3RfNTsKLSAgIGludCBfX3B5eF9saW5lbm8g PSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotICAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9pbml0IiwgMCk7 Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2NvbnZlcnRfbm9kZV92YWx1ZSIsIDAp OwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5MAotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5OAotICAqIAotLSAqICAgICBjZGVmIF9pbml0 KHNlbGYsIG1wdl9ldmVudF9sb2dfbWVzc2FnZSogbXNnKToKLS0gKiAgICAgICAgIHNlbGYubGV2 ZWwgPSBfc3RyZGVjKG1zZy5sZXZlbCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq ICAgICAgICAgc2VsZi5wcmVmaXggPSBfc3RyZGVjKG1zZy5wcmVmaXgpCi0tICogICAgICAgICBz ZWxmLnRleHQgPSBfc3RyZGVjKG1zZy50ZXh0KQotLSAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCAxOTAsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7Ci0tICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19w eXhfdl9tc2ctPmxldmVsKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwg MTkwLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgX19w eXhfdF80ID0gTlVMTDsKLS0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLS0gICAgX19weXhfdF80ID0gUHlNZXRob2Rf R0VUX1NFTEYoX19weXhfdF8yKTsKLS0gICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7Ci0tICAg ICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7 Ci0tICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7Ci0tICAgICAgX19QeXhfSU5DUkVGKGZ1 bmN0aW9uKTsKLS0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwot LSAgICB9Ci0tICB9Ci0tICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdF8zKSA6IF9fUHl4X1B5T2Jq ZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOwotLSAgX19QeXhfWERFQ1JFRihf X3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAx OTAsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5 eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gIF9fUHl4X0dJVkVSRUYoX19w eXhfdF8xKTsKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmxldmVsKTsKLS0gIF9fUHl4 X0RFQ1JFRihfX3B5eF92X3NlbGYtPmxldmVsKTsKLS0gIF9fcHl4X3Zfc2VsZi0+bGV2ZWwgPSBf X3B5eF90XzE7Ci0tICBfX3B5eF90XzEgPSAwOwotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjE5MQotLSAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9sb2df bWVzc2FnZSogbXNnKToKLS0gKiAgICAgICAgIHNlbGYubGV2ZWwgPSBfc3RyZGVjKG1zZy5sZXZl bCkKLS0gKiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0cmRlYyhtc2cucHJlZml4KSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLnRleHQgPSBfc3RyZGVjKG1z Zy50ZXh0KQotLSAqICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBtc2cubG9nX2xldmVsCi0rICog Y2RlZiBfY29udmVydF9ub2RlX3ZhbHVlKG1wdl9ub2RlIG5vZGUpOgotKyAqICAgICBpZiBub2Rl LmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobm9kZS51LnN0cmluZykKLSsgKiAgICAgZWxp ZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6Ci0gICovCi0tICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDE5MSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKLS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmlu ZyhfX3B5eF92X21zZy0+cHJlZml4KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgMTkxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwot LSAgX19weXhfdF80ID0gTlVMTDsKLS0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5s aWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLS0gICAgX19weXhfdF80ID0gUHlN ZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKLS0gICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7 Ci0tICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4 X3RfMik7Ci0tICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7Ci0tICAgICAgX19QeXhfSU5D UkVGKGZ1bmN0aW9uKTsKLS0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rp b24pOwotLSAgICB9Ci0tICB9Ci0tICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5 T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdF8zKSA6IF9fUHl4 X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOwotLSAgX19QeXhfWERF Q1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Myk7IF9fcHl4X3RfMyA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAxOTEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0t ICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gIF9fUHl4X0dJVkVS RUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnByZWZpeCk7Ci0t ICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5wcmVmaXgpOwotLSAgX19weXhfdl9zZWxmLT5w cmVmaXggPSBfX3B5eF90XzE7Ci0tICBfX3B5eF90XzEgPSAwOwotKyAgc3dpdGNoIChfX3B5eF92 X25vZGUuZm9ybWF0KSB7Ci0rICAgIGNhc2UgTVBWX0ZPUk1BVF9TVFJJTkc6Ci0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTkyCi0tICogICAgICAgICBzZWxmLmxldmVs ID0gX3N0cmRlYyhtc2cubGV2ZWwpCi0tICogICAgICAgICBzZWxmLnByZWZpeCA9IF9zdHJkZWMo bXNnLnByZWZpeCkKLS0gKiAgICAgICAgIHNlbGYudGV4dCA9IF9zdHJkZWMobXNnLnRleHQpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYubG9nX2xldmVsID0g bXNnLmxvZ19sZXZlbAotLSAqICAgICAgICAgcmV0dXJuIHNlbGYKLSsgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjE5OQotKyAqIGNkZWYgX2NvbnZlcnRfbm9kZV92YWx1ZSht cHZfbm9kZSBub2RlKToKLSsgKiAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJ Tkc6Ci0rICogICAgICAgICByZXR1cm4gX3N0cmRlYyhub2RlLnUuc3RyaW5nKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1B VF9GTEFHOgotKyAqICAgICAgICAgcmV0dXJuIG5vdCBub3QgaW50KG5vZGUudS5mbGFnKQotICAq LwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJk ZWMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxOTIsIF9fcHl4X0wx X2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX3B5eF90XzMgPSBfX1B5 eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9tc2ctPnRleHQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCAxOTIsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7Ci0tICBfX3B5eF90XzQgPSBOVUxMOwotLSAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotLSAg ICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwotLSAgICBpZiAobGlr ZWx5KF9fcHl4X3RfNCkpIHsKLS0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9H RVRfRlVOQ1RJT04oX19weXhfdF8yKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsK LS0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQo X19weXhfdF8yLCBmdW5jdGlvbik7Ci0rICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0rICAg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTk5LCBfX3B5eF9MMV9lcnJv cikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fcHl4X3RfMyA9IF9fUHl4 X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X25vZGUudS5zdHJpbmcpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxOTksIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgICAgX19weXhfdF80ID0gTlVMTDsKLSsgICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgewotKyAgICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Ci0r ICAgICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7Ci0rICAgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKLSsgICAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzQpOwotKyAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAg ICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0rICAgICAgfQotICAg ICB9Ci0tICB9Ci0tICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0Nh bGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdF8zKSA6IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4 X3RfMyA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxOTIs IF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhf dF8xKTsKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnRleHQpOwotLSAgX19QeXhfREVD UkVGKF9fcHl4X3Zfc2VsZi0+dGV4dCk7Ci0tICBfX3B5eF92X3NlbGYtPnRleHQgPSBfX3B5eF90 XzE7Ci0tICBfX3B5eF90XzEgPSAwOwotKyAgICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9f UHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdF8zKSA6 IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOwotKyAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAxOTksIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 Ci0rICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7Ci0rICAgIF9fcHl4X3RfMSA9IDA7Ci0rICAgIGdv dG8gX19weXhfTDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTkz Ci0tICogICAgICAgICBzZWxmLnByZWZpeCA9IF9zdHJkZWMobXNnLnByZWZpeCkKLS0gKiAgICAg ICAgIHNlbGYudGV4dCA9IF9zdHJkZWMobXNnLnRleHQpCi0tICogICAgICAgICBzZWxmLmxvZ19s ZXZlbCA9IG1zZy5sb2dfbGV2ZWwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgcmV0dXJuIHNlbGYKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjE5OAotICAqIAotKyAqIGNkZWYgX2NvbnZlcnRfbm9kZV92YWx1ZShtcHZfbm9kZSBub2RlKToK LSsgKiAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKG5vZGUudS5zdHJp bmcpCi0rICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgotICAqLwot LSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9tc2ctPmxvZ19sZXZl bCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5MywgX19weXhfTDFf ZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0dJVkVSRUYoX19w eXhfdF8xKTsKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCk7Ci0tICBf X1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwpOwotLSAgX19weXhfdl9zZWxmLT5s b2dfbGV2ZWwgPSBfX3B5eF90XzE7Ci0tICBfX3B5eF90XzEgPSAwOwotKyAgICBicmVhazsKLSsg ICAgY2FzZSBNUFZfRk9STUFUX0ZMQUc6Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTk0Ci0tICogICAgICAgICBzZWxmLnRleHQgPSBfc3RyZGVjKG1zZy50ZXh0KQot LSAqICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBtc2cubG9nX2xldmVsCi0tICogICAgICAgICBy ZXR1cm4gc2VsZiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogCi0tICogCi0rICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMDEKLSsgKiAgICAgICAgIHJldHVy biBfc3RyZGVjKG5vZGUudS5zdHJpbmcpCi0rICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBW X0ZPUk1BVF9GTEFHOgotKyAqICAgICAgICAgcmV0dXJuIG5vdCBub3QgaW50KG5vZGUudS5mbGFn KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGVsaWYgbm9kZS5mb3JtYXQg PT0gTVBWX0ZPUk1BVF9JTlQ2NDoKLSsgKiAgICAgICAgIHJldHVybiBpbnQobm9kZS51LmludDY0 KQotICAqLwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gIF9fUHl4X0lOQ1JFRigoKFB5 T2JqZWN0ICopX19weXhfdl9zZWxmKSk7Ci0tICBfX3B5eF9yID0gKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZik7Ci0tICBnb3RvIF9fcHl4X0wwOwotKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Ip OwotKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X25vZGUudS5m bGFnKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjAxLCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fcHl4X3RfMiA9 IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoKChQeU9iamVjdCAqKSgmUHlJbnRfVHlwZSkpLCBf X3B5eF90XzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyMDEsIF9f cHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICAgIF9fcHl4X3RfNSA9IF9fUHl4 X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF81IDwgMCkp IF9fUFlYX0VSUigwLCAyMDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgICAgX19weXhfdF8yID0gX19QeXhfUHlCb29sX0Zy b21Mb25nKCghKCghX19weXhfdF81KSAhPSAwKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCAyMDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKLSsgICAgX19weXhfciA9IF9fcHl4X3RfMjsKLSsgICAgX19weXhfdF8yID0gMDsK LSsgICAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxODkKLS0gKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHByZWZpeCwgbGV2ZWwsIHRleHQs IGxvZ19sZXZlbAotLSAqIAotLSAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9sb2df bWVzc2FnZSogbXNnKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAg c2VsZi5sZXZlbCA9IF9zdHJkZWMobXNnLmxldmVsKQotLSAqICAgICAgICAgc2VsZi5wcmVmaXgg PSBfc3RyZGVjKG1zZy5wcmVmaXgpCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoyMDAKLSsgKiAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6Ci0r ICogICAgICAgICByZXR1cm4gX3N0cmRlYyhub2RlLnUuc3RyaW5nKQotKyAqICAgICBlbGlmIG5v ZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICAgICAgcmV0dXJuIG5vdCBub3QgaW50KG5vZGUudS5mbGFnKQotKyAqICAgICBl bGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6Ci0gICovCi0rICAgIGJyZWFrOwot KyAgICBjYXNlIE1QVl9GT1JNQVRfSU5UNjQ6Ci0gCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KLS0gIF9fcHl4X0wxX2Vycm9yOjsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKLS0g IF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsK LS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2LkxvZ01lc3NhZ2UuX2luaXQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fcHl4X3IgPSAwOwotLSAgX19weXhfTDA6Owot LSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRl eHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjIwMwotKyAqICAgICAgICAgcmV0dXJuIG5vdCBub3QgaW50KG5vZGUudS5m bGFnKQotKyAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6Ci0rICog ICAgICAgICByZXR1cm4gaW50KG5vZGUudS5pbnQ2NCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOgotKyAq ICAgICAgICAgcmV0dXJuIGZsb2F0KG5vZGUudS5kb3VibGVfKQotKyAqLwotKyAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3IpOwotKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2ludDY0 X3QoX19weXhfdl9ub2RlLnUuaW50NjQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlY X0VSUigwLCAyMDMsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKLSsgICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZygoKFB5T2JqZWN0 ICopKCZQeUludF9UeXBlKSksIF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDIwMywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsg ICAgX19weXhfciA9IF9fcHl4X3RfMTsKLSsgICAgX19weXhfdF8xID0gMDsKLSsgICAgZ290byBf X3B5eF9MMDsKLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTg3Ci0tICog ICAgIFdyYXBzOiBtcHZfZXZlbnRfbG9nX21lc3NhZ2UKLS0gKiAgICAgIiIiCi0tICogICAgIGNk ZWYgcHVibGljIG9iamVjdCBwcmVmaXgsIGxldmVsLCB0ZXh0LCBsb2dfbGV2ZWwgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIAotLSAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9l dmVudF9sb2dfbWVzc2FnZSogbXNnKToKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjIwMgotKyAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzoK LSsgKiAgICAgICAgIHJldHVybiBub3Qgbm90IGludChub2RlLnUuZmxhZykKLSsgKiAgICAgZWxp ZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgICAgICByZXR1cm4gaW50KG5vZGUudS5pbnQ2NCkKLSsgKiAgICAgZWxp ZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKLSAgKi8KLSsgICAgYnJlYWs7Ci0r ICAgIGNhc2UgTVBWX0ZPUk1BVF9ET1VCTEU6Ci0gCi0tLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfNnByZWZpeF8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCi0t c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzZwcmVmaXhfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotLSAgUHlPYmpl Y3QgKl9fcHl4X3IgPSAwOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhf ciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF9f X2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2Fn ZSAqKV9fcHl4X3Zfc2VsZikpOwotLQotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLS0K LS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01l c3NhZ2VfNnByZWZpeF9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZikgewotLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBO VUxMOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfX2dldF9fIiwgMCk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAg X19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsKLS0gIF9fcHl4X3IgPSBfX3B5eF92 X3NlbGYtPnByZWZpeDsKLS0gIGdvdG8gX19weXhfTDA7Ci0tCi0tICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KLS0gIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotLSAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0r ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMDUKLSsgKiAgICAgICAgIHJl dHVybiBpbnQobm9kZS51LmludDY0KQotKyAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9G T1JNQVRfRE9VQkxFOgotKyAqICAgICAgICAgcmV0dXJuIGZsb2F0KG5vZGUudS5kb3VibGVfKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0g TVBWX0ZPUk1BVF9OT0RFX01BUDoKLSsgKiAgICAgICAgIHJldHVybiBfY29udmVydF92YWx1ZShu b2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpCi0rICovCi0rICAgIF9fUHl4X1hERUNSRUYoX19weXhf cik7Ci0rICAgIF9fcHl4X3RfMSA9IFB5RmxvYXRfRnJvbURvdWJsZShfX3B5eF92X25vZGUudS5k b3VibGVfKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjA1LCBfX3B5 eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fcHl4X3Ig PSBfX3B5eF90XzE7Ci0rICAgIF9fcHl4X3RfMSA9IDA7Ci0rICAgIGdvdG8gX19weXhfTDA7Ci0g Ci0tLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8zX19zZXRfXyhQeU9iamVjdCAqX19weXhf dl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qcHJvdG8qLwotLXN0YXRpYyBpbnQg X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzNfX3Nl dF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7Ci0t ICBpbnQgX19weXhfcjsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3Ig PSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVmaXhfMl9f c2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfdmFsdWUpKTsKLSsgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwNAotKyAqICAgICBlbGlmIG5vZGUuZm9y bWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6Ci0rICogICAgICAgICByZXR1cm4gaW50KG5vZGUudS5p bnQ2NCkKLSsgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIGZsb2F0KG5vZGUu dS5kb3VibGVfKQotKyAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9N QVA6Ci0rICovCi0rICAgIGJyZWFrOwotKyAgICBjYXNlIE1QVl9GT1JNQVRfTk9ERV9NQVA6Ci0g Ci0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MjA3Ci0rICogICAgICAgICByZXR1cm4gZmxvYXQobm9kZS51LmRvdWJs ZV8pCi0rICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKLSsg KiAgICAgICAgIHJldHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9 PSBNUFZfRk9STUFUX05PREVfQVJSQVk6Ci0rICogICAgICAgICByZXR1cm4gX2NvbnZlcnRfdmFs dWUobm9kZS51Lmxpc3QsIG5vZGUuZm9ybWF0KQotKyAqLwotKyAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOwotKyAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f Y29udmVydF92YWx1ZShfX3B5eF92X25vZGUudS5saXN0LCBfX3B5eF92X25vZGUuZm9ybWF0KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjA3LCBfX3B5eF9MMV9lcnJv cikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fcHl4X3IgPSBfX3B5eF90 XzE7Ci0rICAgIF9fcHl4X3RfMSA9IDA7Ci0rICAgIGdvdG8gX19weXhfTDA7Ci0gCi0tc3RhdGlj IGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVmaXhf Ml9fc2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2Fn ZSAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgewotLSAgaW50IF9fcHl4 X3I7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fc2V0X18iLCAwKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlKTsK LS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdl92YWx1ZSk7Ci0tICBfX1B5eF9HT1RSRUYoX19weXhf dl9zZWxmLT5wcmVmaXgpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsK LS0gIF9fcHl4X3Zfc2VsZi0+cHJlZml4ID0gX19weXhfdl92YWx1ZTsKLSsgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwNgotKyAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09 IE1QVl9GT1JNQVRfRE9VQkxFOgotKyAqICAgICAgICAgcmV0dXJuIGZsb2F0KG5vZGUudS5kb3Vi bGVfKQotKyAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHJldHVybiBfY29udmVydF92 YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpCi0rICogICAgIGVsaWYgbm9kZS5mb3JtYXQg PT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotKyAqLwotKyAgICBicmVhazsKLSsgICAgY2FzZSBN UFZfRk9STUFUX05PREVfQVJSQVk6Ci0gCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0g IF9fcHl4X3IgPSAwOwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1 cm4gX19weXhfcjsKLS19Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy MDkKLSsgKiAgICAgICAgIHJldHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5m b3JtYXQpCi0rICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZ OgotKyAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZv cm1hdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICByZXR1cm4gTm9uZQot KyAqIAotKyAqLwotKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotKyAgICBfX3B5eF90XzEg PSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZShfX3B5eF92X25v ZGUudS5saXN0LCBfX3B5eF92X25vZGUuZm9ybWF0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgMjA5LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7Ci0rICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7Ci0rICAgIF9fcHl4X3RfMSA9IDA7 Ci0rICAgIGdvdG8gX19weXhfTDA7Ci0gCi0tLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMg aW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF81 X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCi0tc3RhdGljIGludCBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVmaXhfNV9fZGVs X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotLSAgaW50IF9fcHl4X3I7Ci0tICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVs X18gKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzRfX2RlbF9fKCgoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZikpOwotKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjA4Ci0rICogICAgIGVsaWYgbm9kZS5m b3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKLSsgKiAgICAgICAgIHJldHVybiBfY29udmVy dF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpCi0rICogICAgIGVsaWYgbm9kZS5mb3Jt YXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICByZXR1cm4gX2NvbnZlcnRfdmFsdWUobm9kZS51Lmxpc3QsIG5vZGUuZm9y bWF0KQotKyAqICAgICByZXR1cm4gTm9uZQotKyAqLwotKyAgICBicmVhazsKLSsgICAgZGVmYXVs dDogYnJlYWs7Ci0rICB9Ci0gCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIxMAotKyAqICAgICBlbGlmIG5vZGUuZm9y bWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKLSsgKiAgICAgICAgIHJldHVybiBfY29udmVy dF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpCi0rICogICAgIHJldHVybiBOb25lICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAKLSsgKiAKLSsgKi8KLSsgIF9fUHl4X1hE RUNSRUYoX19weXhfcik7Ci0rICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05v bmUpOwotKyAgZ290byBfX3B5eF9MMDsKLSAKLS1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF80X19kZWxfXyhzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYpIHsKLS0g IGludCBfX3B5eF9yOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fIiwgMCk7Ci0tICBfX1B5eF9JTkNSRUYoUHlfTm9u ZSk7Ci0tICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOwotLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zf c2VsZi0+cHJlZml4KTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnByZWZpeCk7Ci0t ICBfX3B5eF92X3NlbGYtPnByZWZpeCA9IFB5X05vbmU7Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTk3Ci0rICogCi0rICogCi0rICogY2RlZiBfY29udmVydF9ub2RlX3Zh bHVlKG1wdl9ub2RlIG5vZGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAg IGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgotKyAqICAgICAgICAgcmV0dXJu IF9zdHJkZWMobm9kZS51LnN0cmluZykKLSsgKi8KLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLwotKyAgX19weXhfTDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwot KyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMp OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2 aWRjdXR0ZXIubGlicy5tcHYuX2NvbnZlcnRfbm9kZV92YWx1ZSIsIF9fcHl4X2NsaW5lbm8sIF9f cHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotICAgX19weXhfciA9IDA7Ci0rICBfX3B5eF9M MDo7Ci0rICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qIFB5dGhvbiB3cmFwcGVy ICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBM b2dNZXNzYWdlXzVsZXZlbF8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90 byovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBM b2dNZXNzYWdlXzVsZXZlbF8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Ci0tICBQ eU9iamVjdCAqX19weXhfciA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBwZXIpIiwgMCk7Ci0tICBf X3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2 ZWxfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01l c3NhZ2UgKilfX3B5eF92X3NlbGYpKTsKLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwot LSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19 Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIxMwotKyAqIAotKyAqIAotKyAq IGNkZWYgX2NvbnZlcnRfdmFsdWUodm9pZCogZGF0YSwgbXB2X2Zvcm1hdCBmb3JtYXQpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGNkZWYgbXB2X25vZGUgbm9kZQotKyAq ICAgICBjZGVmIG1wdl9ub2RlX2xpc3Qgbm9kZWxpc3QKLSsgKi8KLSAKLS1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsX19f Z2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAq X19weXhfdl9zZWxmKSB7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fY29udmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEsIGVudW0gbXB2X2Zvcm1h dCBfX3B5eF92X2Zvcm1hdCkgewotKyAgc3RydWN0IG1wdl9ub2RlIF9fcHl4X3Zfbm9kZTsKLSsg IHN0cnVjdCBtcHZfbm9kZV9saXN0IF9fcHl4X3Zfbm9kZWxpc3Q7Ci0rICBQeU9iamVjdCAqX19w eXhfdl92YWx1ZXMgPSBOVUxMOwotKyAgaW50IF9fcHl4X3ZfaTsKLSsgIFB5T2JqZWN0ICpfX3B5 eF92X3ZhbHVlID0gTlVMTDsKLSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19n ZXRfXyIsIDApOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gIF9fUHl4X0lOQ1JFRihf X3B5eF92X3NlbGYtPmxldmVsKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF92X3NlbGYtPmxldmVsOwot LSAgZ290byBfX3B5eF9MMDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotKyAgaW50 IF9fcHl4X3RfMjsKLSsgIGludCBfX3B5eF90XzM7Ci0rICBpbnQgX19weXhfdF80OwotKyAgaW50 IF9fcHl4X3RfNTsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOwotKyAgUHlPYmplY3Qg Kl9fcHl4X3RfNyA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF84ID0gTlVMTDsKLSsgIGlu dCBfX3B5eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxM OwotKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9jb252ZXJ0X3ZhbHVlIiwgMCk7Ci0gCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K LS0gIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotLSAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0rICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjE2Ci0rICogICAgIGNkZWYgbXB2X25vZGUgbm9k ZQotKyAqICAgICBjZGVmIG1wdl9ub2RlX2xpc3Qgbm9kZWxpc3QKLSsgKiAgICAgaWYgZm9ybWF0 ID09IE1QVl9GT1JNQVRfTk9ERTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICAgICAgbm9kZSA9ICg8bXB2X25vZGUqPmRhdGEpWzBdCi0rICogICAgICAgICByZXR1cm4gX2Nv bnZlcnRfbm9kZV92YWx1ZShub2RlKQotKyAqLwotKyAgc3dpdGNoIChfX3B5eF92X2Zvcm1hdCkg ewotKyAgICBjYXNlIE1QVl9GT1JNQVRfTk9ERToKLSAKLS0vKiBQeXRob24gd3JhcHBlciAqLwot LXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81 bGV2ZWxfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zf dmFsdWUpOyAvKnByb3RvKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7Ci0tICBpbnQgX19weXhfcjsKLS0gIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRf XyAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZlbF8yX19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0 ICopX19weXhfdl92YWx1ZSkpOwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjE3Ci0rICogICAgIGNkZWYgbXB2X25vZGVfbGlzdCBub2RlbGlzdAotKyAqICAgICBpZiBm b3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFOgotKyAqICAgICAgICAgbm9kZSA9ICg8bXB2X25vZGUq PmRhdGEpWzBdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHJldHVy biBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGUpCi0rICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9G T1JNQVRfTk9ERV9BUlJBWToKLSsgKi8KLSsgICAgX19weXhfdl9ub2RlID0gKCgoc3RydWN0IG1w dl9ub2RlICopX19weXhfdl9kYXRhKVswXSk7Ci0gCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7 Ci0tfQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjE4Ci0rICogICAg IGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREU6Ci0rICogICAgICAgICBub2RlID0gKDxtcHZf bm9kZSo+ZGF0YSlbMF0KLSsgKiAgICAgICAgIHJldHVybiBfY29udmVydF9ub2RlX3ZhbHVlKG5v ZGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgZWxpZiBmb3JtYXQgPT0g TVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotKyAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2Rl X2xpc3QqPmRhdGEpWzBdCi0rICovCi0rICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0rICAg IF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVf dmFsdWUoX19weXhfdl9ub2RlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgMjE4LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0r ICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7Ci0rICAgIF9fcHl4X3RfMSA9IDA7Ci0rICAgIGdvdG8g X19weXhfTDA7Ci0gCi0tc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTBMb2dNZXNzYWdlXzVsZXZlbF8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Zh bHVlKSB7Ci0tICBpbnQgX19weXhfcjsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0t ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOwotLSAgX19QeXhfSU5D UkVGKF9fcHl4X3ZfdmFsdWUpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X3ZhbHVlKTsKLS0g IF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmxldmVsKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5 eF92X3NlbGYtPmxldmVsKTsKLS0gIF9fcHl4X3Zfc2VsZi0+bGV2ZWwgPSBfX3B5eF92X3ZhbHVl OwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjE2Ci0rICogICAgIGNk ZWYgbXB2X25vZGUgbm9kZQotKyAqICAgICBjZGVmIG1wdl9ub2RlX2xpc3Qgbm9kZWxpc3QKLSsg KiAgICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICAgICAgbm9kZSA9ICg8bXB2X25vZGUqPmRhdGEpWzBdCi0rICogICAg ICAgICByZXR1cm4gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlKQotKyAqLwotKyAgICBicmVhazsK LSsgICAgY2FzZSBNUFZfRk9STUFUX05PREVfQVJSQVk6Ci0gCi0tICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KLS0gIF9fcHl4X3IgPSAwOwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyMjAKLSsgKiAgICAgICAgIHJldHVybiBfY29udmVydF9ub2RlX3ZhbHVlKG5v ZGUpCi0rICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKLSsgKiAg ICAgICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRhKVswXSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICB2YWx1ZXMgPSBbXQotKyAqICAgICAgICAgZm9y IGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKToKLSsgKi8KLSsgICAgX19weXhfdl9ub2RlbGlzdCA9 ICgoKHN0cnVjdCBtcHZfbm9kZV9saXN0ICopX19weXhfdl9kYXRhKVswXSk7Ci0gCi0tLyogUHl0 aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfNWxldmVsXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAv KnByb3RvKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExv Z01lc3NhZ2VfNWxldmVsXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKLS0gIGlu dCBfX3B5eF9yOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJfX2RlbF9fICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzRfX2RlbF9f KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9f cHl4X3Zfc2VsZikpOwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjIx Ci0rICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKLSsgKiAgICAg ICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRhKVswXQotKyAqICAgICAgICAgdmFs dWVzID0gW10gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgZm9yIGkg aW4gcmFuZ2Uobm9kZWxpc3QubnVtKToKLSsgKiAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKF9j b252ZXJ0X25vZGVfdmFsdWUobm9kZWxpc3QudmFsdWVzW2ldKSkKLSsgKi8KLSsgICAgX19weXhf dF8xID0gUHlMaXN0X05ldygwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgMjIxLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0r ICAgIF9fcHl4X3ZfdmFsdWVzID0gX19weXhfdF8xOwotKyAgICBfX3B5eF90XzEgPSAwOwotIAot LSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRl eHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjIyMgotKyAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3Qq PmRhdGEpWzBdCi0rICogICAgICAgICB2YWx1ZXMgPSBbXQotKyAqICAgICAgICAgZm9yIGkgaW4g cmFuZ2Uobm9kZWxpc3QubnVtKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICAgICAgICAgIHZhbHVlcy5hcHBlbmQoX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlzdC52YWx1 ZXNbaV0pKQotKyAqICAgICAgICAgcmV0dXJuIHZhbHVlcwotKyAqLwotKyAgICBfX3B5eF90XzIg PSBfX3B5eF92X25vZGVsaXN0Lm51bTsKLSsgICAgX19weXhfdF8zID0gX19weXhfdF8yOwotKyAg ICBmb3IgKF9fcHl4X3RfNCA9IDA7IF9fcHl4X3RfNCA8IF9fcHl4X3RfMzsgX19weXhfdF80Kz0x KSB7Ci0rICAgICAgX19weXhfdl9pID0gX19weXhfdF80OwotIAotLXN0YXRpYyBpbnQgX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxfNF9fZGVsX18oc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9z ZWxmKSB7Ci0tICBpbnQgX19weXhfcjsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0t ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyIsIDApOwotLSAgX19QeXhfSU5D UkVGKFB5X05vbmUpOwotLSAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKLS0gIF9fUHl4X0dPVFJF RihfX3B5eF92X3NlbGYtPmxldmVsKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmxl dmVsKTsKLS0gIF9fcHl4X3Zfc2VsZi0+bGV2ZWwgPSBQeV9Ob25lOwotKyAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjMKLSsgKiAgICAgICAgIHZhbHVlcyA9IFtdCi0r ICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0pOgotKyAqICAgICAgICAgICAg IHZhbHVlcy5hcHBlbmQoX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICByZXR1cm4gdmFsdWVzCi0r ICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6Ci0rICovCi0rICAgICAg X19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92 YWx1ZSgoX19weXhfdl9ub2RlbGlzdC52YWx1ZXNbX19weXhfdl9pXSkpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjMsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0 X0FwcGVuZChfX3B5eF92X3ZhbHVlcywgX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3Rf NSA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMCwgMjIzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgICAgfQotIAotLSAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX3B5eF9yID0gMDsKLS0gIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjI0Ci0rICogICAgICAgICBmb3IgaSBpbiByYW5n ZShub2RlbGlzdC5udW0pOgotKyAqICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoX2NvbnZlcnRf bm9kZV92YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pKQotKyAqICAgICAgICAgcmV0dXJuIHZhbHVl cyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGVsaWYgZm9ybWF0ID09IE1Q Vl9GT1JNQVRfTk9ERV9NQVA6Ci0rICogICAgICAgICBub2RlbGlzdCA9ICg8bXB2X25vZGVfbGlz dCo+ZGF0YSlbMF0KLSsgKi8KLSsgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLSsgICAgX19Q eXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWVzKTsKLSsgICAgX19weXhfciA9IF9fcHl4X3ZfdmFsdWVz OwotKyAgICBnb3RvIF9fcHl4X0wwOwotIAotLS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0 ZXh0XzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KLS1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNHRl eHRfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotLSAgUHlPYmplY3QgKl9fcHl4 X3IgPSAwOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNHRleHRfX19nZXRfXygoKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92 X3NlbGYpKTsKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIxOQotKyAq ICAgICAgICAgbm9kZSA9ICg8bXB2X25vZGUqPmRhdGEpWzBdCi0rICogICAgICAgICByZXR1cm4g X2NvbnZlcnRfbm9kZV92YWx1ZShub2RlKQotKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX05PREVfQVJSQVk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAg IG5vZGVsaXN0ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRhKVswXQotKyAqICAgICAgICAgdmFsdWVz ID0gW10KLSsgKi8KLSsgICAgYnJlYWs7Ci0rICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX01BUDoK LSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoyMjYKLSsgKiAgICAgICAgIHJldHVybiB2YWx1ZXMKLSsgKiAgICAg ZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKLSsgKiAgICAgICAgIG5vZGVsaXN0 ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRhKVswXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICB2YWx1ZXMgPSB7fQotKyAqICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9k ZWxpc3QubnVtKToKLSsgKi8KLSsgICAgX19weXhfdl9ub2RlbGlzdCA9ICgoKHN0cnVjdCBtcHZf bm9kZV9saXN0ICopX19weXhfdl9kYXRhKVswXSk7Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0ZXh0X19fZ2V0X18oc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9z ZWxmKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0tICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsK LS0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxm LT50ZXh0KTsKLS0gIF9fcHl4X3IgPSBfX3B5eF92X3NlbGYtPnRleHQ7Ci0tICBnb3RvIF9fcHl4 X0wwOwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjI3Ci0rICogICAg IGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6Ci0rICogICAgICAgICBub2RlbGlz dCA9ICg8bXB2X25vZGVfbGlzdCo+ZGF0YSlbMF0KLSsgKiAgICAgICAgIHZhbHVlcyA9IHt9ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5v ZGVsaXN0Lm51bSk6Ci0rICogICAgICAgICAgICAgdmFsdWUgPSBfY29udmVydF9ub2RlX3ZhbHVl KG5vZGVsaXN0LnZhbHVlc1tpXSkKLSsgKi8KLSsgICAgX19weXhfdF8xID0gX19QeXhfUHlEaWN0 X05ld1ByZXNpemVkKDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAy MjcsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgICAg X19weXhfdl92YWx1ZXMgPSBfX3B5eF90XzE7Ci0rICAgIF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hHSVZFUkVG KF9fcHl4X3IpOwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4g X19weXhfcjsKLS19Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjgK LSsgKiAgICAgICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRhKVswXQotKyAqICAg ICAgICAgdmFsdWVzID0ge30KLSsgKiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51 bSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICB2YWx1ZSA9 IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZWxpc3QudmFsdWVzW2ldKQotKyAqICAgICAgICAgICAg IHZhbHVlc1tfc3RyZGVjKG5vZGVsaXN0LmtleXNbaV0pXSA9IHZhbHVlCi0rICovCi0rICAgIF9f cHl4X3RfMiA9IF9fcHl4X3Zfbm9kZWxpc3QubnVtOwotKyAgICBfX3B5eF90XzMgPSBfX3B5eF90 XzI7Ci0rICAgIGZvciAoX19weXhfdF80ID0gMDsgX19weXhfdF80IDwgX19weXhfdF8zOyBfX3B5 eF90XzQrPTEpIHsKLSsgICAgICBfX3B5eF92X2kgPSBfX3B5eF90XzQ7Ci0gCi0tLyogUHl0aG9u IHdyYXBwZXIgKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x MExvZ01lc3NhZ2VfNHRleHRfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNHRleHRfM19fc2V0X18oUHlPYmplY3QgKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKLS0gIGludCBfX3B5eF9yOwot LSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfX3NldF9fICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNHRleHRfMl9fc2V0X18oKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopX19weXhfdl9zZWxmKSwg KChQeU9iamVjdCAqKV9fcHl4X3ZfdmFsdWUpKTsKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MjI5Ci0rICogICAgICAgICB2YWx1ZXMgPSB7fQotKyAqICAgICAgICAg Zm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKToKLSsgKiAgICAgICAgICAgICB2YWx1ZSA9IF9j b252ZXJ0X25vZGVfdmFsdWUobm9kZWxpc3QudmFsdWVzW2ldKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMobm9kZWxpc3Qua2V5c1tp XSldID0gdmFsdWUKLSsgKiAgICAgICAgIHJldHVybiB2YWx1ZXMKLSsgKi8KLSsgICAgICBfX3B5 eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVl KChfX3B5eF92X25vZGVsaXN0LnZhbHVlc1tfX3B5eF92X2ldKSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDIyOSwgX19weXhfTDFfZXJyb3IpCi0rICAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgICAgX19QeXhfWERFQ1JFRl9TRVQoX19weXhfdl92YWx1 ZSwgX19weXhfdF8xKTsKLSsgICAgICBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCi0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVy biBfX3B5eF9yOwotLX0KLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MjMwCi0rICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0pOgotKyAqICAgICAg ICAgICAgIHZhbHVlID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pCi0r ICogICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMobm9kZWxpc3Qua2V5c1tpXSldID0gdmFsdWUg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIHZhbHVlcwot KyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKLSsgKi8KLSsgICAgICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX3N0cmRlYyk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDIzMCwgX19weXhfTDFfZXJyb3Ip Ci0rICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICAgICAgX19weXhfdF83ID0gX19Q eXhfUHlCeXRlc19Gcm9tU3RyaW5nKChfX3B5eF92X25vZGVsaXN0LmtleXNbX19weXhfdl9pXSkp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAyMzAsIF9fcHl4X0wxX2Vy cm9yKQotKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotKyAgICAgIF9fcHl4X3RfOCA9 IE5VTEw7Ci0rICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzYpKSkgewotKyAgICAgICAgX19weXhfdF84ID0gUHlNZXRob2Rf R0VUX1NFTEYoX19weXhfdF82KTsKLSsgICAgICAgIGlmIChsaWtlbHkoX19weXhfdF84KSkgewot KyAgICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19w eXhfdF82KTsKLSsgICAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfOCk7Ci0rICAgICAgICAg IF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0rICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19w eXhfdF82LCBmdW5jdGlvbik7Ci0rICAgICAgICB9Ci0rICAgICAgfQotKyAgICAgIF9fcHl4X3Rf MSA9IChfX3B5eF90XzgpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19w eXhfdF84LCBfX3B5eF90XzcpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYs IF9fcHl4X3RfNyk7Ci0rICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90Xzgg PSAwOwotKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotKyAg ICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIzMCwgX19weXhfTDFf ZXJyb3IpCi0rICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICAgICAgaWYgKHVubGlrZWx5KFB5T2Jq ZWN0X1NldEl0ZW0oX19weXhfdl92YWx1ZXMsIF9fcHl4X3RfMSwgX19weXhfdl92YWx1ZSkgPCAw KSkgX19QWVhfRVJSKDAsIDIzMCwgX19weXhfTDFfZXJyb3IpCi0rICAgICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICAgIH0KLSAKLS1zdGF0aWMgaW50IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNHRleHRfMl9fc2V0X18oc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9z ZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgewotLSAgaW50IF9fcHl4X3I7Ci0tICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9f c2V0X18iLCAwKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlKTsKLS0gIF9fUHl4X0dJ VkVSRUYoX19weXhfdl92YWx1ZSk7Ci0tICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT50ZXh0 KTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnRleHQpOwotLSAgX19weXhfdl9zZWxm LT50ZXh0ID0gX19weXhfdl92YWx1ZTsKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjIzMQotKyAqICAgICAgICAgICAgIHZhbHVlID0gX2NvbnZlcnRfbm9kZV92YWx1ZShu b2RlbGlzdC52YWx1ZXNbaV0pCi0rICogICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMobm9kZWxp c3Qua2V5c1tpXSldID0gdmFsdWUKLSsgKiAgICAgICAgIHJldHVybiB2YWx1ZXMgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NU UklORzoKLSsgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKCgoPGNoYXIqKj5kYXRhKVswXSkpCi0r ICovCi0rICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0rICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF92X3ZhbHVlcyk7Ci0rICAgIF9fcHl4X3IgPSBfX3B5eF92X3ZhbHVlczsKLSsgICAgZ290byBf X3B5eF9MMDsKLSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19weXhfciA9IDA7 Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwot LX0KLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNQotKyAqICAgICAg ICAgICAgIHZhbHVlcy5hcHBlbmQoX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlzdC52YWx1ZXNb aV0pKQotKyAqICAgICAgICAgcmV0dXJuIHZhbHVlcwotKyAqICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAg ICAgICBub2RlbGlzdCA9ICg8bXB2X25vZGVfbGlzdCo+ZGF0YSlbMF0KLSsgKiAgICAgICAgIHZh bHVlcyA9IHt9Ci0rICovCi0rICAgIGJyZWFrOwotKyAgICBjYXNlIE1QVl9GT1JNQVRfU1RSSU5H OgotIAotLS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0ZXh0XzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYpOyAvKnByb3RvKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xMExvZ01lc3NhZ2VfNHRleHRfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZikgewotLSAgaW50IF9fcHl4X3I7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVsX18gKHdyYXBwZXIpIiwgMCk7Ci0tICBf X3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4 dF80X19kZWxfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01l c3NhZ2UgKilfX3B5eF92X3NlbGYpKTsKLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwot LSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19 Ci0tCi0tc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzR0ZXh0XzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZikgewotLSAgaW50IF9fcHl4X3I7Ci0tICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVs X18iLCAwKTsKLS0gIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLS0gIF9fUHl4X0dJVkVSRUYoUHlf Tm9uZSk7Ci0tICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT50ZXh0KTsKLS0gIF9fUHl4X0RF Q1JFRihfX3B5eF92X3NlbGYtPnRleHQpOwotLSAgX19weXhfdl9zZWxmLT50ZXh0ID0gUHlfTm9u ZTsKLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19weXhfciA9IDA7Ci0tICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLS0K LS0vKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsXzFfX2dldF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF8xX19nZXRfXyhQeU9i amVjdCAqX19weXhfdl9zZWxmKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0tICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9f Z2V0X18gKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsX19fZ2V0X18oKChzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopX19weXhfdl9zZWxmKSk7Ci0t Ci0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MjMzCi0rICogICAgICAgICByZXR1cm4gdmFsdWVzCi0rICogICAgIGVs aWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgotKyAqICAgICAgICAgcmV0dXJuIF9zdHJk ZWMoKCg8Y2hhcioqPmRhdGEpWzBdKSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6Ci0rICogICAgICAgICByZXR1cm4g bm90IG5vdCAoPHVpbnQ2NF90Kj5kYXRhKVswXQotKyAqLwotKyAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOwotKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhf bl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDIzMywg X19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgICBfX3B5 eF90XzcgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoKCgoY2hhciAqKilfX3B5eF92X2RhdGEp WzBdKSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDIzMywgX19weXhf TDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotKyAgICBfX3B5eF90Xzgg PSBOVUxMOwotKyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0 aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7Ci0rICAgICAgX19weXhfdF84ID0gUHlNZXRob2RfR0VU X1NFTEYoX19weXhfdF82KTsKLSsgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfOCkpIHsKLSsgICAg ICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzYp OwotKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfOCk7Ci0rICAgICAgICBfX1B5eF9JTkNS RUYoZnVuY3Rpb24pOwotKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1bmN0 aW9uKTsKLSsgICAgICB9Ci0rICAgIH0KLSsgICAgX19weXhfdF8xID0gKF9fcHl4X3RfOCkgPyBf X1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzgsIF9fcHl4X3RfNykg OiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF83KTsKLSsgICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOwotKyAgICBfX1B5eF9ERUNS RUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLSsgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OwotKyAgICBfX3B5eF9yID0gX19weXhfdF8xOwotKyAgICBfX3B5eF90XzEgPSAwOwotKyAgICBn b3RvIF9fcHl4X0wwOwotIAotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsX19fZ2V0X18oc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmKSB7Ci0tICBQ eU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwot LSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKLS0gIF9fUHl4X1hE RUNSRUYoX19weXhfcik7Ci0tICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwp OwotLSAgX19weXhfciA9IF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsOwotLSAgZ290byBfX3B5eF9M MDsKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzMgotKyAqICAgICAg ICAgICAgIHZhbHVlc1tfc3RyZGVjKG5vZGVsaXN0LmtleXNbaV0pXSA9IHZhbHVlCi0rICogICAg ICAgICByZXR1cm4gdmFsdWVzCi0rICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RS SU5HOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICByZXR1cm4gX3N0 cmRlYygoKDxjaGFyKio+ZGF0YSlbMF0pKQotKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX0ZMQUc6Ci0rICovCi0rICAgIGJyZWFrOwotKyAgICBjYXNlIE1QVl9GT1JNQVRfRkxBRzoK LSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19weXhfTDA6OwotLSAgX19QeXhf WEdJVkVSRUYoX19weXhfcik7Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0g IHJldHVybiBfX3B5eF9yOwotLX0KLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjIzNQotKyAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoKCg8Y2hhcioqPmRhdGEpWzBdKSkK LSsgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgotKyAqICAgICAgICAgcmV0 dXJuIG5vdCBub3QgKDx1aW50NjRfdCo+ZGF0YSlbMF0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgotKyAqICAgICAg ICAgcmV0dXJuIGludCgoPHVpbnQ2NF90Kj5kYXRhKVswXSkKLSsgKi8KLSsgICAgX19QeXhfWERF Q1JFRihfX3B5eF9yKTsKLSsgICAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKCgh KCghKCgoKHVpbnQ2NF90ICopX19weXhfdl9kYXRhKVswXSkgIT0gMCkpICE9IDApKSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIzNSwgX19weXhfTDFfZXJyb3IpCi0r ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICBfX3B5eF9yID0gX19weXhfdF8xOwot KyAgICBfX3B5eF90XzEgPSAwOwotKyAgICBnb3RvIF9fcHl4X0wwOwotIAotLS8qIFB5dGhvbiB3 cmFwcGVyICovCi0tc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBM b2dNZXNzYWdlXzlsb2dfbGV2ZWxfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlP YmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF8zX19zZXRfXyhQeU9i amVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgewotLSAgaW50IF9f cHl4X3I7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9fc2V0X18gKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsXzJfX3NldF9f KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9f cHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVlKSk7Ci0rICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMzQKLSsgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBW X0ZPUk1BVF9TVFJJTkc6Ci0rICogICAgICAgICByZXR1cm4gX3N0cmRlYygoKDxjaGFyKio+ZGF0 YSlbMF0pKQotKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHJldHVybiBub3Qgbm90ICg8dWludDY0 X3QqPmRhdGEpWzBdCi0rICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6Ci0r ICovCi0rICAgIGJyZWFrOwotKyAgICBjYXNlIE1QVl9GT1JNQVRfSU5UNjQ6Ci0gCi0tICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwot LSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjM3Ci0rICogICAgICAgICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2NF90Kj5kYXRhKVsw XQotKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgotKyAqICAgICAgICAg cmV0dXJuIGludCgoPHVpbnQ2NF90Kj5kYXRhKVswXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKLSsgKiAgICAg ICAgIHJldHVybiBmbG9hdCgoPGRvdWJsZSo+ZGF0YSlbMF0pCi0rICovCi0rICAgIF9fUHl4X1hE RUNSRUYoX19weXhfcik7Ci0rICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0 X3QoKCgodWludDY0X3QgKilfX3B5eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDIzNywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOwotKyAgICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KCgoUHlPYmplY3QgKikoJlB5SW50X1R5cGUpKSwgX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMjM3LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNik7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOwotKyAgICBfX3B5eF9yID0gX19weXhfdF82OwotKyAgICBfX3B5eF90XzYgPSAwOwot KyAgICBnb3RvIF9fcHl4X0wwOwotIAotLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsXzJfX3NldF9fKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfdmFsdWUpIHsKLS0gIGludCBfX3B5eF9yOwotLSAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fIiwgMCk7 Ci0tICBfX1B5eF9JTkNSRUYoX19weXhfdl92YWx1ZSk7Ci0tICBfX1B5eF9HSVZFUkVGKF9fcHl4 X3ZfdmFsdWUpOwotLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsKTsKLS0g IF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCk7Ci0tICBfX3B5eF92X3NlbGYt PmxvZ19sZXZlbCA9IF9fcHl4X3ZfdmFsdWU7Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyMzYKLSsgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgot KyAqICAgICAgICAgcmV0dXJuIG5vdCBub3QgKDx1aW50NjRfdCo+ZGF0YSlbMF0KLSsgKiAgICAg ZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICAgICAgcmV0dXJuIGludCgoPHVpbnQ2NF90Kj5kYXRhKVswXSkKLSsgKiAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6Ci0rICovCi0rICAgIGJyZWFrOwot KyAgICBjYXNlIE1QVl9GT1JNQVRfRE9VQkxFOgotIAotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCi0tICBfX3B5eF9yID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwot LSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjM5Ci0rICogICAgICAgICByZXR1cm4gaW50KCg8dWludDY0X3QqPmRhdGEpWzBdKQot KyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKLSsgKiAgICAgICAgIHJl dHVybiBmbG9hdCgoPGRvdWJsZSo+ZGF0YSlbMF0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiAgICAgcmV0dXJuIE5vbmUKLSsgKiAKLSsgKi8KLSsgICAgX19QeXhfWERFQ1JFRihf X3B5eF9yKTsKLSsgICAgX19weXhfdF82ID0gUHlGbG9hdF9Gcm9tRG91YmxlKCgoKGRvdWJsZSAq KV9fcHl4X3ZfZGF0YSlbMF0pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgMjM5LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0r ICAgIF9fcHl4X3IgPSBfX3B5eF90XzY7Ci0rICAgIF9fcHl4X3RfNiA9IDA7Ci0rICAgIGdvdG8g X19weXhfTDA7Ci0gCi0tLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF81X19kZWxfXyhQ eU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCi0tc3RhdGljIGludCBfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzlsb2dfbGV2ZWxfNV9fZGVsX18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZikgewotLSAgaW50IF9fcHl4X3I7Ci0tICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVsX18gKHdy YXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsXzRfX2RlbF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZikpOwotKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM4Ci0rICogICAgIGVsaWYgZm9ybWF0ID09 IE1QVl9GT1JNQVRfSU5UNjQ6Ci0rICogICAgICAgICByZXR1cm4gaW50KCg8dWludDY0X3QqPmRh dGEpWzBdKQotKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIGZsb2F0KCg8ZG91Ymxl Kj5kYXRhKVswXSkKLSsgKiAgICAgcmV0dXJuIE5vbmUKLSsgKi8KLSsgICAgYnJlYWs7Ci0rICAg IGRlZmF1bHQ6IGJyZWFrOwotKyAgfQotIAotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0t ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0K LSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDAKLSsgKiAgICAgZWxpZiBm b3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6Ci0rICogICAgICAgICByZXR1cm4gZmxvYXQoKDxk b3VibGUqPmRhdGEpWzBdKQotKyAqICAgICByZXR1cm4gTm9uZSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogCi0rICogCi0rICovCi0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwot KyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLSsgIGdvdG8gX19w eXhfTDA7Ci0gCi0tc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBM b2dNZXNzYWdlXzlsb2dfbGV2ZWxfNF9fZGVsX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmKSB7Ci0tICBpbnQgX19weXhfcjsK LS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX19kZWxfXyIsIDApOwotLSAgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotLSAgX19QeXhf R0lWRVJFRihQeV9Ob25lKTsKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmxvZ19sZXZl bCk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwpOwotLSAgX19weXhf dl9zZWxmLT5sb2dfbGV2ZWwgPSBQeV9Ob25lOwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjIxMwotKyAqIAotKyAqIAotKyAqIGNkZWYgX2NvbnZlcnRfdmFsdWUodm9pZCog ZGF0YSwgbXB2X2Zvcm1hdCBmb3JtYXQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0r ICogICAgIGNkZWYgbXB2X25vZGUgbm9kZQotKyAqICAgICBjZGVmIG1wdl9ub2RlX2xpc3Qgbm9k ZWxpc3QKLSsgKi8KLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19weXhfTDFf ZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotKyAgX19QeXhfWERFQ1JFRihf X3B5eF90XzYpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOwotKyAgX19QeXhfWERFQ1JF RihfX3B5eF90XzgpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYu X2NvbnZlcnRfdmFsdWUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKLSAgIF9fcHl4X3IgPSAwOwotKyAgX19weXhfTDA6OwotKyAgX19QeXhfWERFQ1JFRihf X3B5eF92X3ZhbHVlcyk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfdmFsdWUpOwotKyAgX19Q eXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsK LSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAiKHRyZWUgZnJhZ21lbnQpIjoxCi0tICog ZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgIGNkZWYgdHVwbGUgc3RhdGUKLS0gKiAgICAgY2RlZiBvYmplY3QgX2RpY3QKLSsv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUwCi0rICogICAgIGNkZWYgcHVibGlj IG9iamVjdCBuYW1lLCBkYXRhCi0rICogCi0rICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2 ZW50X3Byb3BlcnR5KiBwcm9wKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICAgICAgc2VsZi5uYW1lID0gX3N0cmRlYyhwcm9wLm5hbWUpCi0rICogICAgICAgICBzZWxmLmRh dGEgPSBfY29udmVydF92YWx1ZShwcm9wLmRhdGEsIHByb3AuZm9ybWF0KQotICAqLwotIAotLS8q IFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzFfX3JlZHVjZV9jeXRob25fXyhQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KLS1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfMV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVT RUQgUHlPYmplY3QgKnVudXNlZCkgewotLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotK3N0YXRp YyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X19pbml0 KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpfX3B5eF92 X3NlbGYsIHN0cnVjdCBtcHZfZXZlbnRfcHJvcGVydHkgKl9fcHl4X3ZfcHJvcCkgewotKyAgUHlP YmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0g IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyAod3JhcHBlciki LCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dN ZXNzYWdlX19fcmVkdWNlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZikpOwotKyAgUHlPYmplY3QgKl9fcHl4 X3RfMSA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKLSsgIFB5T2JqZWN0 ICpfX3B5eF90XzMgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7Ci0rICBp bnQgX19weXhfbGluZW5vID0gMDsKLSsgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVM TDsKLSsgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfaW5pdCIsIDApOwotIAotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLS0KLS1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfX19yZWR1Y2VfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmKSB7Ci0tICBQeU9iamVjdCAqX19weXhfdl9zdGF0 ZSA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhfdl9fZGljdCA9IDA7Ci0tICBpbnQgX19weXhfdl91 c2Vfc2V0c3RhdGU7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0tICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0tICBpbnQg X19weXhfdF8yOwotLSAgaW50IF9fcHl4X3RfMzsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBO VUxMOwotLSAgaW50IF9fcHl4X3RfNTsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOwot LSAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0tICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9 IE5VTEw7Ci0tICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18iLCAwKTsKLS0KLS0gIC8qICIodHJlZSBmcmFnbWVu dCkiOjUKLS0gKiAgICAgY2RlZiBvYmplY3QgX2RpY3QKLS0gKiAgICAgY2RlZiBiaW50IHVzZV9z ZXRzdGF0ZQotLSAqICAgICBzdGF0ZSA9IChzZWxmLmxldmVsLCBzZWxmLmxvZ19sZXZlbCwgc2Vs Zi5wcmVmaXgsIHNlbGYudGV4dCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICBfZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKLS0gKiAgICAgaWYgX2Rp Y3QgaXMgbm90IE5vbmU6Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUx Ci0rICogCi0rICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X3Byb3BlcnR5KiBwcm9w KToKLSsgKiAgICAgICAgIHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5uYW1lKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBzZWxmLmRhdGEgPSBfY29udmVydF92YWx1 ZShwcm9wLmRhdGEsIHByb3AuZm9ybWF0KQotKyAqICAgICAgICAgcmV0dXJuIHNlbGYKLSAgKi8K LS0gIF9fcHl4X3RfMSA9IFB5VHVwbGVfTmV3KDQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE1vZHVsZUdsb2Jh bE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgMjUxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOwotKyAgX19weXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4 X3ZfcHJvcC0+bmFtZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI1 MSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgIF9fcHl4 X3RfNCA9IE5VTEw7Ci0rICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Ci0rICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dF VF9TRUxGKF9fcHl4X3RfMik7Ci0rICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgewotKyAgICAg IFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwot KyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5j dGlvbik7Ci0rICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKLSsg ICAgfQotKyAgfQotKyAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9D YWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVj dF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKTsKLSsgIF9fUHl4X1hERUNSRUYoX19w eXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5 eF90XzMgPSAwOwotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjUx LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19QeXhf SU5DUkVGKF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X3Nl bGYtPmxldmVsKTsKLS0gIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCBfX3B5eF92X3Nl bGYtPmxldmVsKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCk7Ci0t ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsKTsKLS0gIFB5VHVwbGVfU0VU X0lURU0oX19weXhfdF8xLCAxLCBfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCk7Ci0tICBfX1B5eF9J TkNSRUYoX19weXhfdl9zZWxmLT5wcmVmaXgpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X3Nl bGYtPnByZWZpeCk7Ci0tICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMiwgX19weXhfdl9z ZWxmLT5wcmVmaXgpOwotLSAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+dGV4dCk7Ci0tICBf X1B5eF9HSVZFUkVGKF9fcHl4X3Zfc2VsZi0+dGV4dCk7Ci0tICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfMSwgMywgX19weXhfdl9zZWxmLT50ZXh0KTsKLS0gIF9fcHl4X3Zfc3RhdGUgPSAoKFB5 T2JqZWN0KilfX3B5eF90XzEpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9HT1RSRUYoX19w eXhfdl9zZWxmLT5uYW1lKTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPm5hbWUpOwot KyAgX19weXhfdl9zZWxmLT5uYW1lID0gX19weXhfdF8xOwotICAgX19weXhfdF8xID0gMDsKLSAK LS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjYKLS0gKiAgICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0 ZQotLSAqICAgICBzdGF0ZSA9IChzZWxmLmxldmVsLCBzZWxmLmxvZ19sZXZlbCwgc2VsZi5wcmVm aXgsIHNlbGYudGV4dCkKLS0gKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycs IE5vbmUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgaWYgX2RpY3QgaXMg bm90IE5vbmU6Ci0tICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQotKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjI1MgotKyAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9l dmVudF9wcm9wZXJ0eSogcHJvcCk6Ci0rICogICAgICAgICBzZWxmLm5hbWUgPSBfc3RyZGVjKHBy b3AubmFtZSkKLSsgKiAgICAgICAgIHNlbGYuZGF0YSA9IF9jb252ZXJ0X3ZhbHVlKHByb3AuZGF0 YSwgcHJvcC5mb3JtYXQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAg IHJldHVybiBzZWxmCi0rICogCi0gICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9HZXRBdHRyMygo KFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX2RpY3QsIFB5X05vbmUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLSsg IF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVl KF9fcHl4X3ZfcHJvcC0+ZGF0YSwgX19weXhfdl9wcm9wLT5mb3JtYXQpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyNTIsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX3B5eF92X19kaWN0ID0gX19weXhfdF8xOwotKyAgX19Q eXhfR0lWRVJFRihfX3B5eF90XzEpOwotKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0 YSk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKLSsgIF9fcHl4X3Zfc2Vs Zi0+ZGF0YSA9IF9fcHl4X3RfMTsKLSAgIF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjo3Ci0tICogICAgIHN0YXRlID0gKHNlbGYubGV2ZWwsIHNlbGYubG9nX2xldmVs LCBzZWxmLnByZWZpeCwgc2VsZi50ZXh0KQotLSAqICAgICBfZGljdCA9IGdldGF0dHIoc2VsZiwg J19fZGljdF9fJywgTm9uZSkKLS0gKiAgICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpCi0tICog ICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjUzCi0rICogICAgICAgICBzZWxmLm5hbWUgPSBfc3RyZGVjKHByb3AubmFtZSkK LSsgKiAgICAgICAgIHNlbGYuZGF0YSA9IF9jb252ZXJ0X3ZhbHVlKHByb3AuZGF0YSwgcHJvcC5m b3JtYXQpCi0rICogICAgICAgICByZXR1cm4gc2VsZiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogCi0rICogCi0gICovCi0tICBfX3B5eF90XzIgPSAoX19weXhfdl9fZGljdCAhPSBQ eV9Ob25lKTsKLS0gIF9fcHl4X3RfMyA9IChfX3B5eF90XzIgIT0gMCk7Ci0tICBpZiAoX19weXhf dF8zKSB7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotKyAgX19QeXhfSU5DUkVGKCgoUHlP YmplY3QgKilfX3B5eF92X3NlbGYpKTsKLSsgIF9fcHl4X3IgPSAoKFB5T2JqZWN0ICopX19weXhf dl9zZWxmKTsKLSsgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAgIC8qICIodHJlZSBmcmFnbWVudCki OjgKLS0gKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCi0tICog ICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgotLSAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0g VHJ1ZQotLSAqICAgICBlbHNlOgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjI1MAotKyAqICAgICBjZGVmIHB1YmxpYyBvYmplY3QgbmFtZSwgZGF0YQotKyAqIAotKyAqICAg ICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9wcm9wZXJ0eSogcHJvcCk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5u YW1lKQotKyAqICAgICAgICAgc2VsZi5kYXRhID0gX2NvbnZlcnRfdmFsdWUocHJvcC5kYXRhLCBw cm9wLmZvcm1hdCkKLSAgKi8KLS0gICAgX19weXhfdF8xID0gUHlUdXBsZV9OZXcoMSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDgsIF9fcHl4X0wxX2Vycm9yKQotLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfX2Rp Y3QpOwotLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3ZfX2RpY3QpOwotLSAgICBQeVR1cGxlX1NF VF9JVEVNKF9fcHl4X3RfMSwgMCwgX19weXhfdl9fZGljdCk7Ci0tICAgIF9fcHl4X3RfNCA9IFB5 TnVtYmVyX0luUGxhY2VBZGQoX19weXhfdl9zdGF0ZSwgX19weXhfdF8xKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMSwgOCwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzQpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKLS0gICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3N0YXRlLCAoKFB5T2JqZWN0 KilfX3B5eF90XzQpKTsKLS0gICAgX19weXhfdF80ID0gMDsKLSAKLS0gICAgLyogIih0cmVlIGZy YWdtZW50KSI6OQotLSAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKLS0gKiAgICAgICAgIHN0 YXRlICs9IChfZGljdCwpCi0tICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgZWxzZToKLS0gKiAgICAgICAgIHVzZV9zZXRz dGF0ZSA9IHNlbGYubGV2ZWwgaXMgbm90IE5vbmUgb3Igc2VsZi5sb2dfbGV2ZWwgaXMgbm90IE5v bmUgb3Igc2VsZi5wcmVmaXggaXMgbm90IE5vbmUgb3Igc2VsZi50ZXh0IGlzIG5vdCBOb25lCi0t ICovCi0tICAgIF9fcHl4X3ZfdXNlX3NldHN0YXRlID0gMTsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLwotKyAgX19weXhfTDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEp OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzMpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuUHJvcGVydHkuX2luaXQiLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fcHl4X3IgPSAwOwotKyAgX19weXhfTDA6 OwotKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKLSsgIHJldHVybiBfX3B5eF9yOwotK30KLSAKLS0gICAgLyogIih0cmVlIGZyYWdt ZW50KSI6NwotLSAqICAgICBzdGF0ZSA9IChzZWxmLmxldmVsLCBzZWxmLmxvZ19sZXZlbCwgc2Vs Zi5wcmVmaXgsIHNlbGYudGV4dCkKLS0gKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2Rp Y3RfXycsIE5vbmUpCi0tICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQotLSAqICAgICAg ICAgdXNlX3NldHN0YXRlID0gVHJ1ZQotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyNDgKLSsgKiAgICAgV3JhcHM6IG1wdl9ldmVudF9wcm9wZXJ0eQotKyAqICAgICAiIiIKLSsg KiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IG5hbWUsIGRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqIAotKyAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9wcm9wZXJ0 eSogcHJvcCk6Ci0gICovCi0tICAgIGdvdG8gX19weXhfTDM7Ci0tICB9Ci0gCi0tICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxMQotLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQotLSAqICAg ICBlbHNlOgotLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5sZXZlbCBpcyBub3QgTm9u ZSBvciBzZWxmLmxvZ19sZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLnByZWZpeCBpcyBub3QgTm9u ZSBvciBzZWxmLnRleHQgaXMgbm90IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICBpZiB1c2Vfc2V0c3RhdGU6Ci0tICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNr bGVfTG9nTWVzc2FnZSwgKHR5cGUoc2VsZiksIDB4ODc3NGZhZSwgTm9uZSksIHN0YXRlCi0tICov Ci0tICAvKmVsc2UqLyB7Ci0tICAgIF9fcHl4X3RfMiA9IChfX3B5eF92X3NlbGYtPmxldmVsICE9 IFB5X05vbmUpOwotLSAgICBfX3B5eF90XzUgPSAoX19weXhfdF8yICE9IDApOwotLSAgICBpZiAo IV9fcHl4X3RfNSkgewotLSAgICB9IGVsc2UgewotLSAgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3Rf NTsKLS0gICAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKLS0gICAgfQotLSAgICBf X3B5eF90XzUgPSAoX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwgIT0gUHlfTm9uZSk7Ci0tICAgIF9f cHl4X3RfMiA9IChfX3B5eF90XzUgIT0gMCk7Ci0tICAgIGlmICghX19weXhfdF8yKSB7Ci0tICAg IH0gZWxzZSB7Ci0tICAgICAgX19weXhfdF8zID0gX19weXhfdF8yOwotLSAgICAgIGdvdG8gX19w eXhfTDRfYm9vbF9iaW5vcF9kb25lOwotLSAgICB9Ci0tICAgIF9fcHl4X3RfMiA9IChfX3B5eF92 X3NlbGYtPnByZWZpeCAhPSBQeV9Ob25lKTsKLS0gICAgX19weXhfdF81ID0gKF9fcHl4X3RfMiAh PSAwKTsKLS0gICAgaWYgKCFfX3B5eF90XzUpIHsKLS0gICAgfSBlbHNlIHsKLS0gICAgICBfX3B5 eF90XzMgPSBfX3B5eF90XzU7Ci0tICAgICAgZ290byBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU7 Ci0tICAgIH0KLS0gICAgX19weXhfdF81ID0gKF9fcHl4X3Zfc2VsZi0+dGV4dCAhPSBQeV9Ob25l KTsKLS0gICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSAhPSAwKTsKLS0gICAgX19weXhfdF8zID0g X19weXhfdF8yOwotLSAgICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OwotLSAgICBfX3B5eF92 X3VzZV9zZXRzdGF0ZSA9IF9fcHl4X3RfMzsKLS0gIH0KLS0gIF9fcHl4X0wzOjsKLSsvKiBQeXRo b24gd3JhcHBlciAqLwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzhQcm9wZXJ0eV80bmFtZV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsg Lypwcm90byovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfOFByb3BlcnR5XzRuYW1lXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKLSsg IFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0r ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKLSsg IF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRuYW1l X19fZ2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eSAqKV9fcHl4X3Zfc2VsZikpOwotIAotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKLS0gKiAg ICAgZWxzZToKLS0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYubGV2ZWwgaXMgbm90IE5v bmUgb3Igc2VsZi5sb2dfbGV2ZWwgaXMgbm90IE5vbmUgb3Igc2VsZi5wcmVmaXggaXMgbm90IE5v bmUgb3Igc2VsZi50ZXh0IGlzIG5vdCBOb25lCi0tICogICAgIGlmIHVzZV9zZXRzdGF0ZTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlj a2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIE5vbmUpLCBzdGF0ZQotLSAq ICAgICBlbHNlOgotLSAqLwotLSAgX19weXhfdF8zID0gKF9fcHl4X3ZfdXNlX3NldHN0YXRlICE9 IDApOwotLSAgaWYgKF9fcHl4X3RfMykgewotKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0r ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBfX3B5eF9yOwotK30K LSAKLS0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKLS0gKiAgICAgICAgIHVzZV9zZXRzdGF0 ZSA9IHNlbGYubGV2ZWwgaXMgbm90IE5vbmUgb3Igc2VsZi5sb2dfbGV2ZWwgaXMgbm90IE5vbmUg b3Igc2VsZi5wcmVmaXggaXMgbm90IE5vbmUgb3Igc2VsZi50ZXh0IGlzIG5vdCBOb25lCi0tICog ICAgIGlmIHVzZV9zZXRzdGF0ZToKLS0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9M b2dNZXNzYWdlLCAodHlwZShzZWxmKSwgMHg4Nzc0ZmFlLCBOb25lKSwgc3RhdGUgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBlbHNlOgotLSAqICAgICAgICAgcmV0dXJuIF9f cHl4X3VucGlja2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIHN0YXRlKQot LSAqLwotLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9y KQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLS0gICAgX19weXhfdF8xID0gUHlUdXBs ZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5 eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X0lO Q1JFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsK LS0gICAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19w eXhfdl9zZWxmKSkpKTsKLS0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDAsICgoUHlP YmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOwotLSAgICBfX1B5 eF9JTkNSRUYoX19weXhfaW50XzE0MjAzNjkxMCk7Ci0tICAgIF9fUHl4X0dJVkVSRUYoX19weXhf aW50XzE0MjAzNjkxMCk7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAxLCBfX3B5 eF9pbnRfMTQyMDM2OTEwKTsKLS0gICAgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotLSAgICBfX1B5 eF9HSVZFUkVGKFB5X05vbmUpOwotLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMiwg UHlfTm9uZSk7Ci0tICAgIF9fcHl4X3RfNiA9IFB5VHVwbGVfTmV3KDMpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOwotLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNCk7Ci0tICAg IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF82LCAwLCBfX3B5eF90XzQpOwotLSAgICBfX1B5eF9H SVZFUkVGKF9fcHl4X3RfMSk7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF82LCAxLCBf X3B5eF90XzEpOwotLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9zdGF0ZSk7Ci0tICAgIF9fUHl4 X0dJVkVSRUYoX19weXhfdl9zdGF0ZSk7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF82 LCAyLCBfX3B5eF92X3N0YXRlKTsKLS0gICAgX19weXhfdF80ID0gMDsKLS0gICAgX19weXhfdF8x ID0gMDsKLS0gICAgX19weXhfciA9IF9fcHl4X3RfNjsKLS0gICAgX19weXhfdF82ID0gMDsKLS0g ICAgZ290byBfX3B5eF9MMDsKLS0KLS0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKLS0gKiAg ICAgZWxzZToKLS0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYubGV2ZWwgaXMgbm90IE5v bmUgb3Igc2VsZi5sb2dfbGV2ZWwgaXMgbm90IE5vbmUgb3Igc2VsZi5wcmVmaXggaXMgbm90IE5v bmUgb3Igc2VsZi50ZXh0IGlzIG5vdCBOb25lCi0tICogICAgIGlmIHVzZV9zZXRzdGF0ZTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlj a2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIE5vbmUpLCBzdGF0ZQotLSAq ICAgICBlbHNlOgotLSAqLwotLSAgfQotLQotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTUKLS0g KiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAodHlwZShzZWxmKSwg MHg4Nzc0ZmFlLCBOb25lKSwgc3RhdGUKLS0gKiAgICAgZWxzZToKLS0gKiAgICAgICAgIHJldHVy biBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAodHlwZShzZWxmKSwgMHg4Nzc0ZmFlLCBzdGF0 ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhv bl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKLS0gKiAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2Fn ZV9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQotLSAqLwotLSAgLyplbHNlKi8gewotLSAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1l KF9fcHl4X3RfNiwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gICAgX19weXhfdF8xID0gUHlUdXBsZV9OZXcoMyk7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDE1LCBfX3B5eF9MMV9lcnJv cikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X0lOQ1JFRigoKFB5 T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKLS0gICAgX19Q eXhfR0lWRVJFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxm KSkpKTsKLS0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDAsICgoUHlPYmplY3QgKilQ eV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOwotLSAgICBfX1B5eF9JTkNSRUYo X19weXhfaW50XzE0MjAzNjkxMCk7Ci0tICAgIF9fUHl4X0dJVkVSRUYoX19weXhfaW50XzE0MjAz NjkxMCk7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAxLCBfX3B5eF9pbnRfMTQy MDM2OTEwKTsKLS0gICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc3RhdGUpOwotLSAgICBfX1B5eF9H SVZFUkVGKF9fcHl4X3Zfc3RhdGUpOwotLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwg MiwgX19weXhfdl9zdGF0ZSk7Ci0tICAgIF9fcHl4X3RfNCA9IFB5VHVwbGVfTmV3KDIpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCAxNSwgX19weXhfTDFfZXJyb3IpCi0t ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Rf Nik7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF80LCAwLCBfX3B5eF90XzYpOwotLSAg ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF80LCAxLCBfX3B5eF90XzEpOwotLSAgICBfX3B5eF90XzYgPSAwOwotLSAgICBfX3B5eF90XzEg PSAwOwotLSAgICBfX3B5eF9yID0gX19weXhfdF80OwotLSAgICBfX3B5eF90XzQgPSAwOwotLSAg ICBnb3RvIF9fcHl4X0wwOwotLSAgfQotLQotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MQotLSAq IGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICBjZGVmIHR1cGxlIHN0YXRlCi0tICogICAgIGNkZWYgb2JqZWN0IF9kaWN0Ci0t ICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFBy b3BlcnR5XzRuYW1lX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUHJvcGVydHkgKl9fcHl4X3Zfc2VsZikgewotKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxM OwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfX2dldF9fIiwgMCk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotKyAgX19Q eXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+bmFtZSk7Ci0rICBfX3B5eF9yID0gX19weXhfdl9zZWxm LT5uYW1lOwotKyAgZ290byBfX3B5eF9MMDsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LwotLSAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOwot LSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuTG9nTWVzc2FnZS5fX3Jl ZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOwotLSAgX19weXhfciA9IE5VTEw7Ci0gICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9YREVDUkVG KF9fcHl4X3Zfc3RhdGUpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X19kaWN0KTsKLSAgIF9f UHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogIih0cmVlIGZyYWdtZW50KSI6MTYKLS0g KiAgICAgZWxzZToKLS0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdl LCAodHlwZShzZWxmKSwgMHg4Nzc0ZmFlLCBzdGF0ZSkKLS0gKiBkZWYgX19zZXRzdGF0ZV9jeXRo b25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0 YXRlKQotLSAqLwotKy8qIFB5dGhvbiB3cmFwcGVyICovCi0rc3RhdGljIGludCBfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRuYW1lXzNfX3NldF9fKFB5T2JqZWN0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLypwcm90byovCi0rc3RhdGlj IGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRuYW1lXzNfX3Nl dF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7Ci0r ICBpbnQgX19weXhfcjsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0rICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyAod3JhcHBlcikiLCAwKTsKLSsgIF9fcHl4X3Ig PSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRuYW1lXzJfX3NldF9f KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5 eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1ZSkpOwotKwotKyAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCi0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJl dHVybiBfX3B5eF9yOwotK30KLSsKLStzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl84UHJvcGVydHlfNG5hbWVfMl9fc2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zf dmFsdWUpIHsKLSsgIGludCBfX3B5eF9yOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK LSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fIiwgMCk7Ci0rICBfX1B5eF9J TkNSRUYoX19weXhfdl92YWx1ZSk7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3ZfdmFsdWUpOwot KyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+bmFtZSk7Ci0rICBfX1B5eF9ERUNSRUYoX19w eXhfdl9zZWxmLT5uYW1lKTsKLSsgIF9fcHl4X3Zfc2VsZi0+bmFtZSA9IF9fcHl4X3ZfdmFsdWU7 Ci0rCi0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fcHl4X3IgPSAwOwotKyAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19weXhfcjsKLSt9Ci0gCi0g LyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKnByb3RvKi8K LS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01l c3NhZ2VfM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLStz dGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVf NV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotK3N0YXRpYyBpbnQg X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV81X19kZWxfXyhQ eU9iamVjdCAqX19weXhfdl9zZWxmKSB7Ci0rICBpbnQgX19weXhfcjsKLSAgIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0 ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzJfX3NldHN0YXRlX2N5dGhvbl9fKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2Vs ZiksICgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4X3N0YXRlKSk7Ci0rICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19kZWxfXyAod3JhcHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRuYW1lXzRfX2RlbF9fKCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF92X3Nl bGYpKTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzJfX3NldHN0 YXRlX2N5dGhvbl9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01l c3NhZ2UgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKLS0g IFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLStzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVfNF9fZGVsX18oc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3Zfc2VsZikgewotKyAgaW50IF9f cHl4X3I7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgUHlPYmplY3QgKl9fcHl4 X3RfMSA9IE5VTEw7Ci0tICBpbnQgX19weXhfbGluZW5vID0gMDsKLS0gIGNvbnN0IGNoYXIgKl9f cHl4X2ZpbGVuYW1lID0gTlVMTDsKLS0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fIiwgMCk7Ci0rICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyIsIDApOwotKyAgX19QeXhfSU5DUkVGKFB5 X05vbmUpOwotKyAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKLSsgIF9fUHl4X0dPVFJFRihfX3B5 eF92X3NlbGYtPm5hbWUpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+bmFtZSk7Ci0r ICBfX3B5eF92X3NlbGYtPm5hbWUgPSBQeV9Ob25lOwotIAotLSAgLyogIih0cmVlIGZyYWdtZW50 KSI6MTcKLS0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAodHlw ZShzZWxmKSwgMHg4Nzc0ZmFlLCBzdGF0ZSkKLS0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhz ZWxmLCBfX3B5eF9zdGF0ZSk6Ci0tICogICAgIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3Nl dF9zdGF0ZShzZWxmLCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqLwotLSAgaWYgKCEobGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X19fcHl4X3N0 YXRlKSl8fCgoX19weXhfdl9fX3B5eF9zdGF0ZSkgPT0gUHlfTm9uZSl8fChQeUVycl9Gb3JtYXQo UHlFeGNfVHlwZUVycm9yLCAiRXhwZWN0ZWQgJS4xNnMsIGdvdCAlLjIwMHMiLCAidHVwbGUiLCBQ eV9UWVBFKF9fcHl4X3ZfX19weXhfc3RhdGUpLT50cF9uYW1lKSwgMCkpKSBfX1BZWF9FUlIoMSwg MTcsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKF9fcHl4X3Zfc2Vs ZiwgKChQeU9iamVjdCopX19weXhfdl9fX3B5eF9zdGF0ZSkpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwot KyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0rICBfX3B5eF9yID0gMDsKLSsgIF9fUHl4X1Jl Zk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIF9fcHl4X3I7Ci0rfQotIAotLSAgLyog Iih0cmVlIGZyYWdtZW50KSI6MTYKLS0gKiAgICAgZWxzZToKLS0gKiAgICAgICAgIHJldHVybiBf X3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAodHlwZShzZWxmKSwgMHg4Nzc0ZmFlLCBzdGF0ZSkK LS0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9f c2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQotLSAqLwotKy8qIFB5dGhvbiB3cmFwcGVyICov Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3Bl cnR5XzRkYXRhXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KLStz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlf NGRhdGFfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotKyAgUHlPYmplY3QgKl9f cHl4X3IgPSAwOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIsIDApOwotKyAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfX19nZXRfXygoKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdl9z ZWxmKSk7Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X3IgPSBQeV9O b25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRl eHQoKTsKLSsgIHJldHVybiBfX3B5eF9yOwotK30KLSsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfX19nZXRfXyhzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqX19weXhfdl9zZWxmKSB7 Ci0rICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKLSsgIF9f UHl4X1hERUNSRUYoX19weXhfcik7Ci0rICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5kYXRh KTsKLSsgIF9fcHl4X3IgPSBfX3B5eF92X3NlbGYtPmRhdGE7Ci0gICBnb3RvIF9fcHl4X0wwOwot LSAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAgX19Q eXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuTG9nTWVzc2FnZS5fX3NldHN0YXRl X2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 Ci0tICBfX3B5eF9yID0gTlVMTDsKLSsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAg X19weXhfTDA6OwotICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTk3Ci0tICogCi0tICogCi0tICogY2RlZiBfY29udmVy dF9ub2RlX3ZhbHVlKG1wdl9ub2RlIG5vZGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgotLSAqICAgICAg ICAgcmV0dXJuIF9zdHJkZWMobm9kZS51LnN0cmluZykKLS0gKi8KLSsvKiBQeXRob24gd3JhcHBl ciAqLwotK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0 eV80ZGF0YV8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhf dl92YWx1ZSk7IC8qcHJvdG8qLwotK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzhQcm9wZXJ0eV80ZGF0YV8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQ eU9iamVjdCAqX19weXhfdl92YWx1ZSkgewotKyAgaW50IF9fcHl4X3I7Ci0rICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18g KHdyYXBwZXIpIiwgMCk7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzhQcm9wZXJ0eV80ZGF0YV8yX19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4 X3ZfdmFsdWUpKTsKLSAKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9ub2RlIF9fcHl4X3Zfbm9kZSkg ewotLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotKyAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCi0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBfX3B5eF9y OwotK30KLSsKLStzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJv cGVydHlfNGRhdGFfMl9fc2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUHJvcGVydHkgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKLSsg IGludCBfX3B5eF9yOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIFB5T2JqZWN0 ICpfX3B5eF90XzEgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0tICBQ eU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxM OwotLSAgaW50IF9fcHl4X3RfNTsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3Qg Y2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwot LSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9jb252ZXJ0X25vZGVfdmFsdWUiLCAwKTsK LSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fIiwgMCk7Ci0rICBfX1B5eF9J TkNSRUYoX19weXhfdl92YWx1ZSk7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3ZfdmFsdWUpOwot KyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7Ci0rICBfX1B5eF9ERUNSRUYoX19w eXhfdl9zZWxmLT5kYXRhKTsKLSsgIF9fcHl4X3Zfc2VsZi0+ZGF0YSA9IF9fcHl4X3ZfdmFsdWU7 Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTk4Ci0tICogCi0tICog Y2RlZiBfY29udmVydF9ub2RlX3ZhbHVlKG1wdl9ub2RlIG5vZGUpOgotLSAqICAgICBpZiBub2Rl LmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobm9kZS51LnN0cmluZykKLS0gKiAgICAgZWxp ZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6Ci0rICAvKiBmdW5jdGlvbiBleGl0IGNv ZGUgKi8KLSsgIF9fcHl4X3IgPSAwOwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 Ci0rICByZXR1cm4gX19weXhfcjsKLSt9Ci0rCi0rLyogUHl0aG9uIHdyYXBwZXIgKi8KLStzdGF0 aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfNV9f ZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotK3N0YXRpYyBpbnQgX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80ZGF0YV81X19kZWxfXyhQeU9i amVjdCAqX19weXhfdl9zZWxmKSB7Ci0rICBpbnQgX19weXhfcjsKLSsgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyAod3Jh cHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf OFByb3BlcnR5XzRkYXRhXzRfX2RlbF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF92X3NlbGYpKTsKLSsKLSsgIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4g X19weXhfcjsKLSt9Ci0rCi0rc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfOFByb3BlcnR5XzRkYXRhXzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X1Byb3BlcnR5ICpfX3B5eF92X3NlbGYpIHsKLSsgIGludCBfX3B5eF9yOwotKyAg X19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJfX2RlbF9fIiwgMCk7Ci0rICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0rICBfX1B5eF9HSVZF UkVGKFB5X05vbmUpOwotKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7Ci0rICBf X1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKLSsgIF9fcHl4X3Zfc2VsZi0+ZGF0YSA9 IFB5X05vbmU7Ci0rCi0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fcHl4X3IgPSAw OwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19weXhfcjsK LSt9Ci0rCi0rLyogIih0cmVlIGZyYWdtZW50KSI6MQotKyAqIGRlZiBfX3JlZHVjZV9jeXRob25f XyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBjZGVmIHR1cGxl IHN0YXRlCi0rICogICAgIGNkZWYgb2JqZWN0IF9kaWN0Ci0gICovCi0tICBzd2l0Y2ggKF9fcHl4 X3Zfbm9kZS5mb3JtYXQpIHsKLS0gICAgY2FzZSBNUFZfRk9STUFUX1NUUklORzoKLSAKLS0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5OQotLSAqIGNkZWYgX2NvbnZlcnRf bm9kZV92YWx1ZShtcHZfbm9kZSBub2RlKToKLS0gKiAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBW X0ZPUk1BVF9TVFJJTkc6Ci0tICogICAgICAgICByZXR1cm4gX3N0cmRlYyhub2RlLnUuc3RyaW5n KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGVsaWYgbm9kZS5mb3JtYXQg PT0gTVBWX0ZPUk1BVF9GTEFHOgotLSAqICAgICAgICAgcmV0dXJuIG5vdCBub3QgaW50KG5vZGUu dS5mbGFnKQotKy8qIFB5dGhvbiB3cmFwcGVyICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzFfX3JlZHVjZV9jeXRob25fXyhQeU9i amVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnBy b3RvKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84 UHJvcGVydHlfMV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhP Tl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgewotKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwot KyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfX3JlZHVjZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X19fcmVkdWNlX2N5dGhvbl9fKCgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF92 X3NlbGYpKTsKLSsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19weXhfcjsKLSt9Ci0rCi0rc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X19fcmVkdWNl X2N5dGhvbl9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5 ICpfX3B5eF92X3NlbGYpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X3N0YXRlID0gMDsKLSsgIFB5 T2JqZWN0ICpfX3B5eF92X19kaWN0ID0gMDsKLSsgIGludCBfX3B5eF92X3VzZV9zZXRzdGF0ZTsK LSsgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCi0rICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSsgIGludCBfX3B5eF90XzI7Ci0r ICBpbnQgX19weXhfdF8zOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7Ci0rICBpbnQg X19weXhfdF81OwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7Ci0rICBpbnQgX19weXhf bGluZW5vID0gMDsKLSsgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSsgIGlu dCBfX3B5eF9jbGluZW5vID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3Jl ZHVjZV9jeXRob25fXyIsIDApOwotKwotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6NQotKyAqICAg ICBjZGVmIG9iamVjdCBfZGljdAotKyAqICAgICBjZGVmIGJpbnQgdXNlX3NldHN0YXRlCi0rICog ICAgIHN0YXRlID0gKHNlbGYuZGF0YSwgc2VsZi5uYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKQot KyAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKLSAgKi8KLS0gICAgX19QeXhfWERFQ1JFRihf X3B5eF9yKTsKLS0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4 X25fc19zdHJkZWMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxOTks IF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19w eXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3Zfbm9kZS51LnN0cmluZyk7 IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDE5OSwgX19weXhfTDFfZXJy b3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgICBfX3B5eF90XzQgPSBOVUxM OwotLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0No ZWNrKF9fcHl4X3RfMikpKSB7Ci0tICAgICAgX19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYo X19weXhfdF8yKTsKLS0gICAgICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKLS0gICAgICAgIFB5 T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwotLSAg ICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoZnVu Y3Rpb24pOwotLSAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsK LS0gICAgICB9Ci0tICAgIH0KLS0gICAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9Q eU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKTsKLS0gICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMTk5LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAg ICBfX3B5eF9yID0gX19weXhfdF8xOwotLSAgICBfX3B5eF90XzEgPSAwOwotLSAgICBnb3RvIF9f cHl4X0wwOwotKyAgX19weXhfdF8xID0gUHlUdXBsZV9OZXcoMik7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKLSsgIF9f UHl4X0dJVkVSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKLSsgIFB5VHVwbGVfU0VUX0lURU0oX19w eXhfdF8xLCAwLCBfX3B5eF92X3NlbGYtPmRhdGEpOwotKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zf c2VsZi0+bmFtZSk7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc2VsZi0+bmFtZSk7Ci0rICBQ eVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMSwgX19weXhfdl9zZWxmLT5uYW1lKTsKLSsgIF9f cHl4X3Zfc3RhdGUgPSAoKFB5T2JqZWN0KilfX3B5eF90XzEpOwotKyAgX19weXhfdF8xID0gMDsK LSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5OAotLSAqIAotLSAq IGNkZWYgX2NvbnZlcnRfbm9kZV92YWx1ZShtcHZfbm9kZSBub2RlKToKLS0gKiAgICAgaWYgbm9k ZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgICAgIHJldHVybiBfc3RyZGVjKG5vZGUudS5zdHJpbmcpCi0tICogICAgIGVs aWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgotKyAgLyogIih0cmVlIGZyYWdtZW50 KSI6NgotKyAqICAgICBjZGVmIGJpbnQgdXNlX3NldHN0YXRlCi0rICogICAgIHN0YXRlID0gKHNl bGYuZGF0YSwgc2VsZi5uYW1lKQotKyAqICAgICBfZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGlj dF9fJywgTm9uZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBpZiBfZGlj dCBpcyBub3QgTm9uZToKLSsgKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpCi0gICovCi0tICAg IGJyZWFrOwotLSAgICBjYXNlIE1QVl9GT1JNQVRfRkxBRzoKLSsgIF9fcHl4X3RfMSA9IF9fUHl4 X0dldEF0dHIzKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZGljdCwgUHlf Tm9uZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wx X2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBfX3B5eF92X19kaWN0ID0g X19weXhfdF8xOwotKyAgX19weXhfdF8xID0gMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjIwMQotLSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobm9kZS51LnN0 cmluZykKLS0gKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6Ci0tICog ICAgICAgICByZXR1cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0 OgotLSAqICAgICAgICAgcmV0dXJuIGludChub2RlLnUuaW50NjQpCi0rICAvKiAiKHRyZWUgZnJh Z21lbnQpIjo3Ci0rICogICAgIHN0YXRlID0gKHNlbGYuZGF0YSwgc2VsZi5uYW1lKQotKyAqICAg ICBfZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKLSsgKiAgICAgaWYgX2Rp Y3QgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAg IHN0YXRlICs9IChfZGljdCwpCi0rICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCi0gICov Ci0tICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5 SW50X0Zyb21faW50KF9fcHl4X3Zfbm9kZS51LmZsYWcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAyMDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8yID0gKF9f cHl4X3ZfX2RpY3QgIT0gUHlfTm9uZSk7Ci0rICBfX3B5eF90XzMgPSAoX19weXhfdF8yICE9IDAp OwotKyAgaWYgKF9fcHl4X3RfMykgewotKwotKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo4Ci0r ICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKQotKyAqICAgICBp ZiBfZGljdCBpcyBub3QgTm9uZToKLSsgKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUK LSsgKiAgICAgZWxzZToKLSsgKi8KLSsgICAgX19weXhfdF8xID0gUHlUdXBsZV9OZXcoMSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDgsIF9fcHl4X0wxX2Vycm9yKQot ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19weXhfdF8yID0gX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZygoKFB5T2JqZWN0ICopKCZQeUludF9UeXBlKSksIF9fcHl4X3RfMSk7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDIwMSwgX19weXhfTDFfZXJy b3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgICBfX1B5eF9JTkNSRUYoX19w eXhfdl9fZGljdCk7Ci0rICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9fZGljdCk7Ci0rICAgIFB5 VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCBfX3B5eF92X19kaWN0KTsKLSsgICAgX19weXhf dF80ID0gUHlOdW1iZXJfSW5QbGFjZUFkZChfX3B5eF92X3N0YXRlLCBfX3B5eF90XzEpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCA4LCBfX3B5eF9MMV9lcnJvcikKLSsg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEp OyBfX3B5eF90XzEgPSAwOwotLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUo X19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNSA8IDApKSBfX1BZWF9FUlIoMCwgMjAx LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7Ci0tICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISgoIV9fcHl4 X3RfNSkgIT0gMCkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjAx LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9f cHl4X3IgPSBfX3B5eF90XzI7Ci0tICAgIF9fcHl4X3RfMiA9IDA7Ci0tICAgIGdvdG8gX19weXhf TDA7Ci0rICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl9zdGF0ZSwgKChQeU9iamVjdCopX19w eXhfdF80KSk7Ci0rICAgIF9fcHl4X3RfNCA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoyMDAKLS0gKiAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1B VF9TVFJJTkc6Ci0tICogICAgICAgICByZXR1cm4gX3N0cmRlYyhub2RlLnUuc3RyaW5nKQotLSAq ICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmV0dXJuIG5vdCBub3QgaW50KG5vZGUudS5mbGFn KQotLSAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6Ci0rICAgIC8q ICIodHJlZSBmcmFnbWVudCkiOjkKLSsgKiAgICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6Ci0rICog ICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQotKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1 ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGVsc2U6Ci0rICogICAgICAg ICB1c2Vfc2V0c3RhdGUgPSBzZWxmLmRhdGEgaXMgbm90IE5vbmUgb3Igc2VsZi5uYW1lIGlzIG5v dCBOb25lCi0gICovCi0tICAgIGJyZWFrOwotLSAgICBjYXNlIE1QVl9GT1JNQVRfSU5UNjQ6Ci0r ICAgIF9fcHl4X3ZfdXNlX3NldHN0YXRlID0gMTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjIwMwotLSAqICAgICAgICAgcmV0dXJuIG5vdCBub3QgaW50KG5vZGUu dS5mbGFnKQotLSAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6Ci0t ICogICAgICAgICByZXR1cm4gaW50KG5vZGUudS5pbnQ2NCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOgot LSAqICAgICAgICAgcmV0dXJuIGZsb2F0KG5vZGUudS5kb3VibGVfKQotKyAgICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjo3Ci0rICogICAgIHN0YXRlID0gKHNlbGYuZGF0YSwgc2VsZi5uYW1lKQotKyAq ICAgICBfZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKLSsgKiAgICAgaWYg X2RpY3QgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAg ICAgIHN0YXRlICs9IChfZGljdCwpCi0rICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCi0g ICovCi0tICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICAgIF9fcHl4X3RfMiA9IF9fUHl4 X1B5SW50X0Zyb21faW50NjRfdChfX3B5eF92X25vZGUudS5pbnQ2NCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDIwMywgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOwotLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKCgoUHlPYmplY3QgKikoJlB5SW50X1R5cGUpKSwgX19weXhfdF8yKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjAzLCBfX3B5eF9MMV9lcnJvcikKLS0gICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOwotLSAgICBfX3B5eF9yID0gX19weXhfdF8xOwotLSAgICBfX3B5eF90XzEg PSAwOwotLSAgICBnb3RvIF9fcHl4X0wwOwotKyAgICBnb3RvIF9fcHl4X0wzOwotKyAgfQotIAot LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjAyCi0tICogICAgIGVsaWYg bm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgotLSAqICAgICAgICAgcmV0dXJuIG5vdCBu b3QgaW50KG5vZGUudS5mbGFnKQotLSAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JN QVRfSU5UNjQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHJldHVy biBpbnQobm9kZS51LmludDY0KQotLSAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JN QVRfRE9VQkxFOgotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKLSsgKiAgICAgICAgIHVzZV9z ZXRzdGF0ZSA9IFRydWUKLSsgKiAgICAgZWxzZToKLSsgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9 IHNlbGYuZGF0YSBpcyBub3QgTm9uZSBvciBzZWxmLm5hbWUgaXMgbm90IE5vbmUgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBpZiB1c2Vfc2V0c3RhdGU6Ci0rICogICAgICAg ICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAweDA1NzJkMTEs IE5vbmUpLCBzdGF0ZQotICAqLwotLSAgICBicmVhazsKLS0gICAgY2FzZSBNUFZfRk9STUFUX0RP VUJMRToKLSsgIC8qZWxzZSovIHsKLSsgICAgX19weXhfdF8yID0gKF9fcHl4X3Zfc2VsZi0+ZGF0 YSAhPSBQeV9Ob25lKTsKLSsgICAgX19weXhfdF81ID0gKF9fcHl4X3RfMiAhPSAwKTsKLSsgICAg aWYgKCFfX3B5eF90XzUpIHsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBfX3B5eF90XzMgPSBfX3B5 eF90XzU7Ci0rICAgICAgZ290byBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU7Ci0rICAgIH0KLSsg ICAgX19weXhfdF81ID0gKF9fcHl4X3Zfc2VsZi0+bmFtZSAhPSBQeV9Ob25lKTsKLSsgICAgX19w eXhfdF8yID0gKF9fcHl4X3RfNSAhPSAwKTsKLSsgICAgX19weXhfdF8zID0gX19weXhfdF8yOwot KyAgICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OwotKyAgICBfX3B5eF92X3VzZV9zZXRzdGF0 ZSA9IF9fcHl4X3RfMzsKLSsgIH0KLSsgIF9fcHl4X0wzOjsKLSAKLS0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjIwNQotLSAqICAgICAgICAgcmV0dXJuIGludChub2RlLnUu aW50NjQpCi0tICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6Ci0t ICogICAgICAgICByZXR1cm4gZmxvYXQobm9kZS51LmRvdWJsZV8pICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVf TUFQOgotLSAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2Rl LmZvcm1hdCkKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjEyCi0rICogICAgIGVsc2U6Ci0rICog ICAgICAgICB1c2Vfc2V0c3RhdGUgPSBzZWxmLmRhdGEgaXMgbm90IE5vbmUgb3Igc2VsZi5uYW1l IGlzIG5vdCBOb25lCi0rICogICAgIGlmIHVzZV9zZXRzdGF0ZTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5LCAo dHlwZShzZWxmKSwgMHgwNTcyZDExLCBOb25lKSwgc3RhdGUKLSsgKiAgICAgZWxzZToKLSsgKi8K LSsgIF9fcHl4X3RfMyA9IChfX3B5eF92X3VzZV9zZXRzdGF0ZSAhPSAwKTsKLSsgIGlmIChfX3B5 eF90XzMpIHsKLSsKLSsgICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKLSsgKiAgICAgICAgIHVz ZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9uZSBvciBzZWxmLm5hbWUgaXMgbm90IE5v bmUKLSsgKiAgICAgaWYgdXNlX3NldHN0YXRlOgotKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3Vu cGlja2xlX1Byb3BlcnR5LCAodHlwZShzZWxmKSwgMHgwNTcyZDExLCBOb25lKSwgc3RhdGUgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBlbHNlOgotKyAqICAgICAgICAgcmV0 dXJuIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5LCAodHlwZShzZWxmKSwgMHgwNTcyZDExLCBzdGF0 ZSkKLSAgKi8KLSAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gICAgX19weXhfdF8xID0g UHlGbG9hdF9Gcm9tRG91YmxlKF9fcHl4X3Zfbm9kZS51LmRvdWJsZV8pOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMDUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5 eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9Q cm9wZXJ0eSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5 eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0rICAgIF9fcHl4X3Rf MSA9IFB5VHVwbGVfTmV3KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigx LCAxMywgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAg ICBfX3B5eF9yID0gX19weXhfdF8xOwotKyAgICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKVB5 X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7Ci0rICAgIF9fUHl4X0dJVkVSRUYo KChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7Ci0rICAg IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCAoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5 T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKLSsgICAgX19QeXhfSU5DUkVGKF9fcHl4X2ludF81 NzEzMTY5KTsKLSsgICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRfNTcxMzE2OSk7Ci0rICAgIFB5 VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAxLCBfX3B5eF9pbnRfNTcxMzE2OSk7Ci0rICAgIF9f UHl4X0lOQ1JFRihQeV9Ob25lKTsKLSsgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKLSsgICAg UHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDIsIFB5X05vbmUpOwotKyAgICBfX3B5eF90XzYg PSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMSwg MTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSsgICAg X19QeXhfR0lWRVJFRihfX3B5eF90XzQpOwotKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3Rf NiwgMCwgX19weXhfdF80KTsKLSsgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwotKyAgICBQ eVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNiwgMSwgX19weXhfdF8xKTsKLSsgICAgX19QeXhfSU5D UkVGKF9fcHl4X3Zfc3RhdGUpOwotKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc3RhdGUpOwot KyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNiwgMiwgX19weXhfdl9zdGF0ZSk7Ci0rICAg IF9fcHl4X3RfNCA9IDA7Ci0gICAgIF9fcHl4X3RfMSA9IDA7Ci0rICAgIF9fcHl4X3IgPSBfX3B5 eF90XzY7Ci0rICAgIF9fcHl4X3RfNiA9IDA7Ci0gICAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMDQKLS0gKiAgICAgZWxpZiBub2Rl LmZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgotLSAqICAgICAgICAgcmV0dXJuIGludChub2Rl LnUuaW50NjQpCi0tICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHJldHVybiBmbG9hdChu b2RlLnUuZG91YmxlXykKLS0gKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05P REVfTUFQOgotKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgotKyAqICAgICBlbHNlOgotKyAq ICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5kYXRhIGlzIG5vdCBOb25lIG9yIHNlbGYubmFt ZSBpcyBub3QgTm9uZQotKyAqICAgICBpZiB1c2Vfc2V0c3RhdGU6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwg KHR5cGUoc2VsZiksIDB4MDU3MmQxMSwgTm9uZSksIHN0YXRlCi0rICogICAgIGVsc2U6Ci0gICov Ci0tICAgIGJyZWFrOwotLSAgICBjYXNlIE1QVl9GT1JNQVRfTk9ERV9NQVA6Ci0rICB9Ci0gCi0t ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMDcKLS0gKiAgICAgICAgIHJl dHVybiBmbG9hdChub2RlLnUuZG91YmxlXykKLS0gKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBN UFZfRk9STUFUX05PREVfTUFQOgotLSAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5v ZGUudS5saXN0LCBub2RlLmZvcm1hdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq ICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKLS0gKiAgICAg ICAgIHJldHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpCi0rICAv KiAiKHRyZWUgZnJhZ21lbnQpIjoxNQotKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xl X1Byb3BlcnR5LCAodHlwZShzZWxmKSwgMHgwNTcyZDExLCBOb25lKSwgc3RhdGUKLSsgKiAgICAg ZWxzZToKLSsgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgKHR5cGUo c2VsZiksIDB4MDU3MmQxMSwgc3RhdGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6Ci0rICogICAgIF9f cHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCi0gICov Ci0rICAvKmVsc2UqLyB7Ci0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICAgIF9fcHl4 X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKF9fcHl4 X3Zfbm9kZS51Lmxpc3QsIF9fcHl4X3Zfbm9kZS5mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAyMDcsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HZXRN b2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9Qcm9wZXJ0 eSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDE1LCBfX3B5eF9MMV9l cnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICAgIF9fcHl4X3RfMSA9IFB5 VHVwbGVfTmV3KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNSwg X19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgICBfX3B5 eF9yID0gX19weXhfdF8xOwotKyAgICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUo KChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7Ci0rICAgIF9fUHl4X0dJVkVSRUYoKChQeU9i amVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7Ci0rICAgIFB5VHVw bGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCAoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0 ICopX19weXhfdl9zZWxmKSkpKTsKLSsgICAgX19QeXhfSU5DUkVGKF9fcHl4X2ludF81NzEzMTY5 KTsKLSsgICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRfNTcxMzE2OSk7Ci0rICAgIFB5VHVwbGVf U0VUX0lURU0oX19weXhfdF8xLCAxLCBfX3B5eF9pbnRfNTcxMzE2OSk7Ci0rICAgIF9fUHl4X0lO Q1JFRihfX3B5eF92X3N0YXRlKTsKLSsgICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3N0YXRlKTsK LSsgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDIsIF9fcHl4X3Zfc3RhdGUpOwotKyAg ICBfX3B5eF90XzQgPSBQeVR1cGxlX05ldygyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBf X1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhf dF80KTsKLSsgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzYpOwotKyAgICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfNCwgMCwgX19weXhfdF82KTsKLSsgICAgX19QeXhfR0lWRVJFRihfX3B5eF90 XzEpOwotKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNCwgMSwgX19weXhfdF8xKTsKLSsg ICAgX19weXhfdF82ID0gMDsKLSAgICAgX19weXhfdF8xID0gMDsKLSsgICAgX19weXhfciA9IF9f cHl4X3RfNDsKLSsgICAgX19weXhfdF80ID0gMDsKLSAgICAgZ290byBfX3B5eF9MMDsKLSsgIH0K LSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwNgotLSAqICAgICBl bGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOgotLSAqICAgICAgICAgcmV0dXJu IGZsb2F0KG5vZGUudS5kb3VibGVfKQotLSAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9G T1JNQVRfTk9ERV9NQVA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg IHJldHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpCi0tICogICAg IGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotKyAgLyogIih0cmVl IGZyYWdtZW50KSI6MQotKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBjZGVmIHR1cGxlIHN0YXRlCi0rICogICAgIGNk ZWYgb2JqZWN0IF9kaWN0Ci0gICovCi0tICAgIGJyZWFrOwotLSAgICBjYXNlIE1QVl9GT1JNQVRf Tk9ERV9BUlJBWToKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIw OQotLSAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZv cm1hdCkKLS0gKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6 Ci0tICogICAgICAgICByZXR1cm4gX2NvbnZlcnRfdmFsdWUobm9kZS51Lmxpc3QsIG5vZGUuZm9y bWF0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIHJldHVybiBOb25lCi0t ICogCi0tICovCi0tICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICAgIF9fcHl4X3RfMSA9 IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKF9fcHl4X3Zfbm9k ZS51Lmxpc3QsIF9fcHl4X3Zfbm9kZS5mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAyMDksIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKLS0gICAgX19weXhfciA9IF9fcHl4X3RfMTsKLS0gICAgX19weXhfdF8xID0gMDsK LS0gICAgZ290byBfX3B5eF9MMDsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19w eXhfTDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzQpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOwotKyAgX19QeXhf QWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUHJvcGVydHkuX19yZWR1Y2VfY3l0aG9u X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9f cHl4X3IgPSBOVUxMOwotKyAgX19weXhfTDA6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X3N0 YXRlKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdl9fZGljdCk7Ci0rICBfX1B5eF9YR0lWRVJF RihfX3B5eF9yKTsKLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJu IF9fcHl4X3I7Ci0rfQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MjA4Ci0tICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKLS0g KiAgICAgICAgIHJldHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQp Ci0tICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICByZXR1cm4gX2NvbnZlcnRfdmFs dWUobm9kZS51Lmxpc3QsIG5vZGUuZm9ybWF0KQotLSAqICAgICByZXR1cm4gTm9uZQotKy8qICIo dHJlZSBmcmFnbWVudCkiOjE2Ci0rICogICAgIGVsc2U6Ci0rICogICAgICAgICByZXR1cm4gX19w eXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAweDA1NzJkMTEsIHN0YXRlKQotKyAq IGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0 YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQotICAqLwotLSAgICBicmVhazsKLS0gICAgZGVmYXVsdDog YnJlYWs7Ci0tICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjEw Ci0tICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotLSAq ICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZvcm1hdCkK LS0gKiAgICAgcmV0dXJuIE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIAot LSAqIAotKy8qIFB5dGhvbiB3cmFwcGVyICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzNfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2Jq ZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLypwcm90 byovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFBy b3BlcnR5XzNfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7Ci0rICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0r ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fc2V0c3RhdGVfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7Ci0rICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV8yX19zZXRzdGF0ZV9jeXRob25f XygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopX19w eXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsKLSsKLSsgIC8q IGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 Ci0rICByZXR1cm4gX19weXhfcjsKLSt9Ci0rCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzJfX3NldHN0YXRlX2N5dGhvbl9fKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpfX3B5eF92X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7Ci0rICBQeU9iamVjdCAqX19weXhfciA9 IE5VTEw7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgUHlPYmplY3QgKl9fcHl4 X3RfMSA9IE5VTEw7Ci0rICBpbnQgX19weXhfbGluZW5vID0gMDsKLSsgIGNvbnN0IGNoYXIgKl9f cHl4X2ZpbGVuYW1lID0gTlVMTDsKLSsgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLSsgIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fIiwgMCk7Ci0rCi0rICAv KiAiKHRyZWUgZnJhZ21lbnQpIjoxNwotKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xl X1Byb3BlcnR5LCAodHlwZShzZWxmKSwgMHgwNTcyZDExLCBzdGF0ZSkKLSsgKiBkZWYgX19zZXRz dGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6Ci0rICogICAgIF9fcHl4X3VucGlja2xl X1Byb3BlcnR5X19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSAgKi8KLS0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICBfX3B5eF9y ID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotLSAgZ290byBfX3B5eF9MMDsKLSsg IGlmICghKGxpa2VseShQeVR1cGxlX0NoZWNrRXhhY3QoX19weXhfdl9fX3B5eF9zdGF0ZSkpfHwo KF9fcHl4X3ZfX19weXhfc3RhdGUpID09IFB5X05vbmUpfHwoUHlFcnJfRm9ybWF0KFB5RXhjX1R5 cGVFcnJvciwgIkV4cGVjdGVkICUuMTZzLCBnb3QgJS4yMDBzIiwgInR1cGxlIiwgUHlfVFlQRShf X3B5eF92X19fcHl4X3N0YXRlKS0+dHBfbmFtZSksIDApKSkgX19QWVhfRVJSKDEsIDE3LCBfX3B5 eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2 X19fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoX19weXhfdl9zZWxmLCAoKFB5T2Jq ZWN0KilfX3B5eF92X19fcHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDEsIDE3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTk3Ci0tICogCi0tICogCi0tICogY2RlZiBf Y29udmVydF9ub2RlX3ZhbHVlKG1wdl9ub2RlIG5vZGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgotLSAq ICAgICAgICAgcmV0dXJuIF9zdHJkZWMobm9kZS51LnN0cmluZykKLSsgIC8qICIodHJlZSBmcmFn bWVudCkiOjE2Ci0rICogICAgIGVsc2U6Ci0rICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNr bGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAweDA1NzJkMTEsIHN0YXRlKQotKyAqIGRlZiBfX3Nl dHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKHNlbGYs IF9fcHl4X3N0YXRlKQotICAqLwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0rICBf X3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotKyAgZ290byBfX3B5eF9M MDsKLSAgIF9fcHl4X0wxX2Vycm9yOjsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKLS0g IF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsK LS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2Ll9jb252ZXJ0X25vZGVfdmFsdWUiLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fcHl4X3IgPSAwOwotKyAgX19QeXhfQWRk VHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUHJvcGVydHkuX19zZXRzdGF0ZV9jeXRob25f XyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19w eXhfciA9IE5VTEw7Ci0gICBfX3B5eF9MMDo7Ci0gICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsK LSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0g fQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTMKLS0gKiAKLSsvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjYzCi0gICogCi0tICogY2RlZiBfY29udmVy dF92YWx1ZSh2b2lkKiBkYXRhLCBtcHZfZm9ybWF0IGZvcm1hdCk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgY2RlZiBtcHZfbm9kZSBub2RlCi0tICogICAgIGNkZWYgbXB2 X25vZGVfbGlzdCBub2RlbGlzdAotKyAqICAgICBAcHJvcGVydHkKLSsgKiAgICAgZGVmIGVycm9y X3N0cihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgIiIi bXB2X2Vycm9yX3N0cmluZyBvZiB0aGUgZXJyb3IgcHJvZXBydHkiIiIKLSsgKiAgICAgICAgIGNk ZWYgY29uc3QgY2hhciogZXJyX2MKLSAgKi8KLSAKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKHZvaWQgKl9fcHl4X3ZfZGF0YSwg ZW51bSBtcHZfZm9ybWF0IF9fcHl4X3ZfZm9ybWF0KSB7Ci0tICBzdHJ1Y3QgbXB2X25vZGUgX19w eXhfdl9ub2RlOwotLSAgc3RydWN0IG1wdl9ub2RlX2xpc3QgX19weXhfdl9ub2RlbGlzdDsKLS0g IFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlcyA9IE5VTEw7Ci0tICBpbnQgX19weXhfdl9pOwotLSAg UHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUgPSBOVUxMOwotKy8qIFB5dGhvbiB3cmFwcGVyICovCi0r c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50Xzll cnJvcl9zdHJfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF85ZXJy b3Jfc3RyXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKLSsgIFB5T2JqZWN0ICpf X3B5eF9yID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0rICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzllcnJvcl9zdHJfX19nZXRfXygo KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9z ZWxmKSk7Ci0rCi0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIF9fcHl4X3I7Ci0rfQotKwotK3N0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF85ZXJyb3Jfc3RyX19f Z2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4 X3Zfc2VsZikgewotKyAgY2hhciBjb25zdCAqX19weXhfdl9lcnJfYzsKLSAgIFB5T2JqZWN0ICpf X3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0gICBQeU9iamVj dCAqX19weXhfdF8xID0gTlVMTDsKLS0gIGludCBfX3B5eF90XzI7Ci0tICBpbnQgX19weXhfdF8z OwotLSAgaW50IF9fcHl4X3RfNDsKLS0gIGludCBfX3B5eF90XzU7Ci0tICBQeU9iamVjdCAqX19w eXhfdF82ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxMOwotLSAgUHlPYmpl Y3QgKl9fcHl4X3RfOCA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKLSsg IFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5V TEw7Ci0gICBpbnQgX19weXhfbGluZW5vID0gMDsKLSAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVu YW1lID0gTlVMTDsKLSAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfY29udmVydF92YWx1ZSIsIDApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyMTYKLS0gKiAgICAgY2RlZiBtcHZfbm9kZSBub2RlCi0tICogICAgIGNkZWYgbXB2 X25vZGVfbGlzdCBub2RlbGlzdAotLSAqICAgICBpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RF OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBub2RlID0gKDxtcHZf bm9kZSo+ZGF0YSlbMF0KLS0gKiAgICAgICAgIHJldHVybiBfY29udmVydF9ub2RlX3ZhbHVlKG5v ZGUpCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjY2Ci0rICogICAgICAg ICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRoZSBlcnJvciBwcm9lcHJ0eSIiIgotKyAqICAgICAg ICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYwotKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIGVycl9jID0gbXB2X2Vycm9y X3N0cmluZyhzZWxmLmVycm9yKQotKyAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoZXJyX2MpCi0g ICovCi0tICBzd2l0Y2ggKF9fcHl4X3ZfZm9ybWF0KSB7Ci0tICAgIGNhc2UgTVBWX0ZPUk1BVF9O T0RFOgotKyAgewotKyAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotKyAgICAgIFB5VGhyZWFkU3Rh dGUgKl9zYXZlOwotKyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotKyAgICAgIF9fUHl4X0Zhc3RH SUxfUmVtZW1iZXIoKTsKLSsgICAgICAjZW5kaWYKLSsgICAgICAvKnRyeToqLyB7Ci0gCi0tICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTcKLS0gKiAgICAgY2RlZiBtcHZf bm9kZV9saXN0IG5vZGVsaXN0Ci0tICogICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREU6 Ci0tICogICAgICAgICBub2RlID0gKDxtcHZfbm9kZSo+ZGF0YSlbMF0gICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9k ZSkKLS0gKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotKyAgICAg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI2NwotKyAqICAgICAgICAgY2Rl ZiBjb25zdCBjaGFyKiBlcnJfYwotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAg ICAgICBlcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmcoc2VsZi5lcnJvcikgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoZXJyX2MpCi0rICogCi0g ICovCi0tICAgIF9fcHl4X3Zfbm9kZSA9ICgoKHN0cnVjdCBtcHZfbm9kZSAqKV9fcHl4X3ZfZGF0 YSlbMF0pOwotKyAgICAgICAgX19weXhfdl9lcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmcoX19weXhf dl9zZWxmLT5lcnJvcik7Ci0rICAgICAgfQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjE4Ci0tICogICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREU6Ci0t ICogICAgICAgICBub2RlID0gKDxtcHZfbm9kZSo+ZGF0YSlbMF0KLS0gKiAgICAgICAgIHJldHVy biBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotLSAqICAgICAg ICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCi0rICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI2NgotKyAqICAgICAgICAgIiIibXB2X2Vycm9yX3N0 cmluZyBvZiB0aGUgZXJyb3IgcHJvZXBydHkiIiIKLSsgKiAgICAgICAgIGNkZWYgY29uc3QgY2hh ciogZXJyX2MKLSsgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgICAgICAgICBlcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmcoc2VsZi5lcnJv cikKLSsgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKGVycl9jKQotICAqLwotLSAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3IpOwotLSAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKF9fcHl4X3Zfbm9kZSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIxOCwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotLSAgICBfX3B5eF9yID0gX19weXhfdF8xOwotLSAgICBfX3B5 eF90XzEgPSAwOwotLSAgICBnb3RvIF9fcHl4X0wwOwotKyAgICAgIC8qZmluYWxseToqLyB7Ci0r ICAgICAgICAvKm5vcm1hbCBleGl0OiovewotKyAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQK LSsgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKLSsgICAgICAgICAgUHlfQkxPQ0tf VEhSRUFEUwotKyAgICAgICAgICAjZW5kaWYKLSsgICAgICAgICAgZ290byBfX3B5eF9MNTsKLSsg ICAgICAgIH0KLSsgICAgICAgIF9fcHl4X0w1OjsKLSsgICAgICB9Ci0rICB9Ci0gCi0tICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTYKLS0gKiAgICAgY2RlZiBtcHZfbm9k ZSBub2RlCi0tICogICAgIGNkZWYgbXB2X25vZGVfbGlzdCBub2RlbGlzdAotLSAqICAgICBpZiBm b3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogICAgICAgICBub2RlID0gKDxtcHZfbm9kZSo+ZGF0YSlbMF0KLS0gKiAgICAgICAgIHJldHVy biBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGUpCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjY4Ci0rICogICAgICAgICB3aXRoIG5vZ2lsOgotKyAqICAgICAgICAgICAgIGVy cl9jID0gbXB2X2Vycm9yX3N0cmluZyhzZWxmLmVycm9yKQotKyAqICAgICAgICAgcmV0dXJuIF9z dHJkZWMoZXJyX2MpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAKLSsgKiAgICAg Y2RlZiBfZGF0YShzZWxmLCBtcHZfZXZlbnQqIGV2ZW50KToKLSAgKi8KLS0gICAgYnJlYWs7Ci0t ICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotKyAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3Ry ZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjY4LCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgX19weXhfdF8zID0gX19Q eXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfZXJyX2MpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCAyNjgsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfMyk7Ci0rICBfX3B5eF90XzQgPSBOVUxMOwotKyAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotKyAgICBf X3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwotKyAgICBpZiAobGlrZWx5 KF9fcHl4X3RfNCkpIHsKLSsgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRf RlVOQ1RJT04oX19weXhfdF8yKTsKLSsgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsKLSsg ICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19w eXhfdF8yLCBmdW5jdGlvbik7Ci0rICAgIH0KLSsgIH0KLSsgIF9fcHl4X3RfMSA9IChfX3B5eF90 XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5 eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMyk7 Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSsgIGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDI2OCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwot KyAgX19weXhfciA9IF9fcHl4X3RfMTsKLSsgIF9fcHl4X3RfMSA9IDA7Ci0rICBnb3RvIF9fcHl4 X0wwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjIwCi0tICog ICAgICAgICByZXR1cm4gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlKQotLSAqICAgICBlbGlmIGZv cm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6Ci0tICogICAgICAgICBub2RlbGlzdCA9ICg8 bXB2X25vZGVfbGlzdCo+ZGF0YSlbMF0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq ICAgICAgICAgdmFsdWVzID0gW10KLS0gKiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGVsaXN0 Lm51bSk6Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjYzCi0rICogCi0r ICogICAgIEBwcm9wZXJ0eQotKyAqICAgICBkZWYgZXJyb3Jfc3RyKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRo ZSBlcnJvciBwcm9lcHJ0eSIiIgotKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYwot ICAqLwotLSAgICBfX3B5eF92X25vZGVsaXN0ID0gKCgoc3RydWN0IG1wdl9ub2RlX2xpc3QgKilf X3B5eF92X2RhdGEpWzBdKTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjIyMQotLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6Ci0t ICogICAgICAgICBub2RlbGlzdCA9ICg8bXB2X25vZGVfbGlzdCo+ZGF0YSlbMF0KLS0gKiAgICAg ICAgIHZhbHVlcyA9IFtdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg IGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51bSk6Ci0tICogICAgICAgICAgICAgdmFsdWVzLmFw cGVuZChfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkpCi0rICAvKiBmdW5j dGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fcHl4X0wxX2Vycm9yOjsKLSsgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKLSsgIF9fUHl4X1hERUNS RUYoX19weXhfdF8zKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKLSsgIF9fUHl4X0Fk ZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkV2ZW50LmVycm9yX3N0ci5fX2dldF9fIiwg X19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX3B5eF9y ID0gTlVMTDsKLSsgIF9fcHl4X0wwOjsKLSsgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotKyAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19weXhfcjsKLSt9Ci0r Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3MAotKyAqICAgICAgICAgcmV0 dXJuIF9zdHJkZWMoZXJyX2MpCi0rICogCi0rICogICAgIGNkZWYgX2RhdGEoc2VsZiwgbXB2X2V2 ZW50KiBldmVudCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGNk ZWYgdm9pZCogZGF0YSA9IGV2ZW50LmRhdGEKLSsgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2Ns aWVudF9tZXNzYWdlKiBjbGltc2cKLSAgKi8KLS0gICAgX19weXhfdF8xID0gUHlMaXN0X05ldygw KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjIxLCBfX3B5eF9MMV9l cnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fcHl4X3ZfdmFsdWVz ID0gX19weXhfdF8xOwotLSAgICBfX3B5eF90XzEgPSAwOwotIAotLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MjIyCi0tICogICAgICAgICBub2RlbGlzdCA9ICg8bXB2X25v ZGVfbGlzdCo+ZGF0YSlbMF0KLS0gKiAgICAgICAgIHZhbHVlcyA9IFtdCi0tICogICAgICAgICBm b3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0pOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVs aXN0LnZhbHVlc1tpXSkpCi0tICogICAgICAgICByZXR1cm4gdmFsdWVzCi0rc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGEoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZiwgc3RydWN0 IG1wdl9ldmVudCAqX19weXhfdl9ldmVudCkgewotKyAgdm9pZCAqX19weXhfdl9kYXRhOwotKyAg c3RydWN0IG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSAqX19weXhfdl9jbGltc2c7Ci0rICBQeU9i amVjdCAqX19weXhfdl9hcmdzID0gTlVMTDsKLSsgIGludCBfX3B5eF92X251bV9hcmdzOwotKyAg aW50IF9fcHl4X3ZfaTsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X2FyZyA9IE5VTEw7Ci0rICBQeU9i amVjdCAqX19weXhfciA9IE5VTEw7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAg dm9pZCAqX19weXhfdF8xOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0rICBQeU9i amVjdCAqX19weXhfdF8zID0gTlVMTDsKLSsgIGludCBfX3B5eF90XzQ7Ci0rICBpbnQgX19weXhf dF81OwotKyAgaW50IF9fcHl4X3RfNjsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxMOwot KyAgaW50IF9fcHl4X3RfODsKLSsgIGludCBfX3B5eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hh ciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9kYXRhIiwgMCk7Ci0rCi0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjcxCi0rICogCi0rICogICAgIGNkZWYgX2RhdGEoc2Vs ZiwgbXB2X2V2ZW50KiBldmVudCk6Ci0rICogICAgICAgICBjZGVmIHZvaWQqIGRhdGEgPSBldmVu dC5kYXRhICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGNkZWYgbXB2 X2V2ZW50X2NsaWVudF9tZXNzYWdlKiBjbGltc2cKLSsgKiAgICAgICAgIGlmIHNlbGYuaWQgPT0g TVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWToKLSAgKi8KLS0gICAgX19weXhfdF8yID0gX19w eXhfdl9ub2RlbGlzdC5udW07Ci0tICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfMjsKLS0gICAgZm9y IChfX3B5eF90XzQgPSAwOyBfX3B5eF90XzQgPCBfX3B5eF90XzM7IF9fcHl4X3RfNCs9MSkgewot LSAgICAgIF9fcHl4X3ZfaSA9IF9fcHl4X3RfNDsKLSsgIF9fcHl4X3RfMSA9IF9fcHl4X3ZfZXZl bnQtPmRhdGE7Ci0rICBfX3B5eF92X2RhdGEgPSBfX3B5eF90XzE7Ci0gCi0tICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyMwotLSAqICAgICAgICAgdmFsdWVzID0gW10K LS0gKiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51bSk6Ci0tICogICAgICAgICAg ICAgdmFsdWVzLmFwcGVuZChfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHJldHVybiB2YWx1ZXMK LS0gKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKLSsgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzMKLSsgKiAgICAgICAgIGNkZWYgdm9pZCogZGF0 YSA9IGV2ZW50LmRhdGEKLSsgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2NsaWVudF9tZXNzYWdl KiBjbGltc2cKLSsgKiAgICAgICAgIGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0dFVF9QUk9QRVJU WV9SRVBMWTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIHJl dHVybiBQcm9wZXJ0eSgpLl9pbml0KDxtcHZfZXZlbnRfcHJvcGVydHkqPmRhdGEpCi0rICogICAg ICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRToKLSAgKi8KLS0g ICAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9u b2RlX3ZhbHVlKChfX3B5eF92X25vZGVsaXN0LnZhbHVlc1tfX3B5eF92X2ldKSk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIyMywgX19weXhfTDFfZXJyb3IpCi0tICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgICAgX19weXhfdF81ID0gX19QeXhfUHlP YmplY3RfQXBwZW5kKF9fcHl4X3ZfdmFsdWVzLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19w eXhfdF81ID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigwLCAyMjMsIF9fcHl4X0wxX2Vycm9yKQot LSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgICB9Ci0r ICBzd2l0Y2ggKF9fcHl4X3Zfc2VsZi0+aWQpIHsKLSsgICAgY2FzZSBNUFZfRVZFTlRfR0VUX1BS T1BFUlRZX1JFUExZOgotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MjI0Ci0tICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0pOgotLSAqICAgICAg ICAgICAgIHZhbHVlcy5hcHBlbmQoX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlzdC52YWx1ZXNb aV0pKQotLSAqICAgICAgICAgcmV0dXJuIHZhbHVlcyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6Ci0tICogICAg ICAgICBub2RlbGlzdCA9ICg8bXB2X25vZGVfbGlzdCo+ZGF0YSlbMF0KLSsgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3NAotKyAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRf Y2xpZW50X21lc3NhZ2UqIGNsaW1zZwotKyAqICAgICAgICAgaWYgc2VsZi5pZCA9PSBNUFZfRVZF TlRfR0VUX1BST1BFUlRZX1JFUExZOgotKyAqICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSgp Ll9pbml0KDxtcHZfZXZlbnRfcHJvcGVydHkqPmRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hB TkdFOgotKyAqICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSgpLl9pbml0KDxtcHZfZXZlbnRf cHJvcGVydHkqPmRhdGEpCi0gICovCi0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICAg IF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlcyk7Ci0tICAgIF9fcHl4X3IgPSBfX3B5eF92X3Zh bHVlczsKLSsgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmpl Y3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjc0LCBfX3B5eF9MMV9lcnJvcikKLSsg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fcHl4X3RfMyA9ICgoc3RydWN0IF9f cHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3RfMiktPl9f cHl4X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X1Byb3BlcnR5ICopX19weXhfdF8yKSwgKChzdHJ1Y3QgbXB2X2V2ZW50X3Byb3BlcnR5ICopX19w eXhfdl9kYXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI3NCwg X19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotKyAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgICAgX19weXhfciA9IF9fcHl4 X3RfMzsKLSsgICAgX19weXhfdF8zID0gMDsKLSAgICAgZ290byBfX3B5eF9MMDsKLSAKLS0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIxOQotLSAqICAgICAgICAgbm9kZSA9 ICg8bXB2X25vZGUqPmRhdGEpWzBdCi0tICogICAgICAgICByZXR1cm4gX2NvbnZlcnRfbm9kZV92 YWx1ZShub2RlKQotLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIG5vZGVsaXN0ID0gKDxt cHZfbm9kZV9saXN0Kj5kYXRhKVswXQotLSAqICAgICAgICAgdmFsdWVzID0gW10KLSsgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3MwotKyAqICAgICAgICAgY2RlZiB2b2lk KiBkYXRhID0gZXZlbnQuZGF0YQotKyAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21l c3NhZ2UqIGNsaW1zZwotKyAqICAgICAgICAgaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BS T1BFUlRZX1JFUExZOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAg ICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKLSsg KiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgotICAq LwotICAgICBicmVhazsKLS0gICAgY2FzZSBNUFZfRk9STUFUX05PREVfTUFQOgotKyAgICBjYXNl IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyMjYKLS0gKiAgICAgICAgIHJldHVybiB2YWx1ZXMKLS0gKiAgICAgZWxp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKLS0gKiAgICAgICAgIG5vZGVsaXN0ID0g KDxtcHZfbm9kZV9saXN0Kj5kYXRhKVswXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogICAgICAgICB2YWx1ZXMgPSB7fQotLSAqICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxp c3QubnVtKToKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3NgotKyAq ICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSgpLl9pbml0KDxtcHZfZXZlbnRfcHJvcGVydHkq PmRhdGEpCi0rICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX1BST1BFUlRZX0NI QU5HRToKLSsgKiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8bXB2X2V2ZW50 X3Byb3BlcnR5Kj5kYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAg ICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0xPR19NRVNTQUdFOgotKyAqICAgICAgICAgICAg IHJldHVybiBMb2dNZXNzYWdlKCkuX2luaXQoPG1wdl9ldmVudF9sb2dfbWVzc2FnZSo+ZGF0YSkK LSAgKi8KLS0gICAgX19weXhfdl9ub2RlbGlzdCA9ICgoKHN0cnVjdCBtcHZfbm9kZV9saXN0ICop X19weXhfdl9kYXRhKVswXSk7Ci0rICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0rICAgIF9f cHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSk7IGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDAsIDI3NiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzMpOwotKyAgICBfX3B5eF90XzIgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKSgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF90XzMpLT5fX3B5eF92dGFiKS0+X2lu aXQoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9f cHl4X3RfMyksICgoc3RydWN0IG1wdl9ldmVudF9wcm9wZXJ0eSAqKV9fcHl4X3ZfZGF0YSkpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyNzYsIF9fcHl4X0wxX2Vycm9y KQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICAgIF9fcHl4X3IgPSBfX3B5eF90XzI7Ci0rICAgIF9f cHl4X3RfMiA9IDA7Ci0rICAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyMjcKLS0gKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1B VF9OT0RFX01BUDoKLS0gKiAgICAgICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRh KVswXQotLSAqICAgICAgICAgdmFsdWVzID0ge30gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKToKLS0gKiAgICAgICAg ICAgICB2YWx1ZSA9IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZWxpc3QudmFsdWVzW2ldKQotKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjc1Ci0rICogICAgICAgICBpZiBz ZWxmLmlkID09IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFk6Ci0rICogICAgICAgICAgICAg cmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKLSsgKiAg ICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KCku X2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKLSsgKiAgICAgICAgIGVsaWYgc2VsZi5p ZCA9PSBNUFZfRVZFTlRfTE9HX01FU1NBR0U6Ci0gICovCi0tICAgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMjI3LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 Ci0tICAgIF9fcHl4X3ZfdmFsdWVzID0gX19weXhfdF8xOwotLSAgICBfX3B5eF90XzEgPSAwOwot KyAgICBicmVhazsKLSsgICAgY2FzZSBNUFZfRVZFTlRfTE9HX01FU1NBR0U6Ci0gCi0tICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjgKLS0gKiAgICAgICAgIG5vZGVsaXN0 ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRhKVswXQotLSAqICAgICAgICAgdmFsdWVzID0ge30KLS0g KiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51bSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICB2YWx1ZSA9IF9jb252ZXJ0X25vZGVfdmFsdWUo bm9kZWxpc3QudmFsdWVzW2ldKQotLSAqICAgICAgICAgICAgIHZhbHVlc1tfc3RyZGVjKG5vZGVs aXN0LmtleXNbaV0pXSA9IHZhbHVlCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoyNzgKLSsgKiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8bXB2X2V2 ZW50X3Byb3BlcnR5Kj5kYXRhKQotKyAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVO VF9MT0dfTUVTU0FHRToKLSsgKiAgICAgICAgICAgICByZXR1cm4gTG9nTWVzc2FnZSgpLl9pbml0 KDxtcHZfZXZlbnRfbG9nX21lc3NhZ2UqPmRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiAgICAgICAgICMgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9TQ1JJUFRfSU5QVVRf RElTUEFUQ0g6Ci0rICogICAgICAgICAjICAgICByZXR1cm4gSW5wdXREaXNwYXRjaCgpLl9pbml0 KDxtcHZfZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3BhdGNoKj5kYXRhKQotICAqLwotLSAgICBfX3B5 eF90XzIgPSBfX3B5eF92X25vZGVsaXN0Lm51bTsKLS0gICAgX19weXhfdF8zID0gX19weXhfdF8y OwotLSAgICBmb3IgKF9fcHl4X3RfNCA9IDA7IF9fcHl4X3RfNCA8IF9fcHl4X3RfMzsgX19weXhf dF80Kz0xKSB7Ci0tICAgICAgX19weXhfdl9pID0gX19weXhfdF80OwotKyAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3IpOwotKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9Bcmco KChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDI3OCwgX19weXhfTDFf ZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgICBfX3B5eF90XzMgPSAo KHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl ICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICop X19weXhfdF8yKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3RfMiksICgoc3RydWN0IG1wdl9ldmVu dF9sb2dfbWVzc2FnZSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykp IF9fUFlYX0VSUigwLCAyNzgsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8zKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0r ICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7Ci0rICAgIF9fcHl4X3RfMyA9IDA7Ci0rICAgIGdvdG8g X19weXhfTDA7Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIy OQotLSAqICAgICAgICAgdmFsdWVzID0ge30KLS0gKiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5v ZGVsaXN0Lm51bSk6Ci0tICogICAgICAgICAgICAgdmFsdWUgPSBfY29udmVydF9ub2RlX3ZhbHVl KG5vZGVsaXN0LnZhbHVlc1tpXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgICAgIHZhbHVlc1tfc3RyZGVjKG5vZGVsaXN0LmtleXNbaV0pXSA9IHZhbHVlCi0tICog ICAgICAgICByZXR1cm4gdmFsdWVzCi0tICovCi0tICAgICAgX19weXhfdF8xID0gX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZSgoX19weXhfdl9ub2RlbGlz dC52YWx1ZXNbX19weXhfdl9pXSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAyMjksIF9fcHl4X0wxX2Vycm9yKQotLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OwotLSAgICAgIF9fUHl4X1hERUNSRUZfU0VUKF9fcHl4X3ZfdmFsdWUsIF9fcHl4X3RfMSk7Ci0t ICAgICAgX19weXhfdF8xID0gMDsKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjI3NwotKyAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9QUk9QRVJUWV9D SEFOR0U6Ci0rICogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVu dF9wcm9wZXJ0eSo+ZGF0YSkKLSsgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRf TE9HX01FU1NBR0U6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAg ICByZXR1cm4gTG9nTWVzc2FnZSgpLl9pbml0KDxtcHZfZXZlbnRfbG9nX21lc3NhZ2UqPmRhdGEp Ci0rICogICAgICAgICAjIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJ U1BBVENIOgotKyAqLwotKyAgICBicmVhazsKLSsgICAgY2FzZSBNUFZfRVZFTlRfQ0xJRU5UX01F U1NBR0U6Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzMAot LSAqICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKToKLS0gKiAgICAgICAgICAg ICB2YWx1ZSA9IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZWxpc3QudmFsdWVzW2ldKQotLSAqICAg ICAgICAgICAgIHZhbHVlc1tfc3RyZGVjKG5vZGVsaXN0LmtleXNbaV0pXSA9IHZhbHVlICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHJldHVybiB2YWx1ZXMKLS0gKiAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6Ci0rICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyODIKLSsgKiAgICAgICAgICMgICAgIHJldHVybiBJbnB1dERp c3BhdGNoKCkuX2luaXQoPG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2gqPmRhdGEpCi0r ICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFOgotKyAq ICAgICAgICAgICAgIGNsaW1zZyA9IDxtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqPmRhdGEgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIGFyZ3MgPSBbXQotKyAq ICAgICAgICAgICAgIG51bV9hcmdzID0gY2xpbXNnLm51bV9hcmdzCi0gICovCi0tICAgICAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAyMzAsIF9fcHl4X0wxX2Vycm9yKQot LSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgICAgIF9fcHl4X3RfNyA9IF9fUHl4 X1B5Qnl0ZXNfRnJvbVN0cmluZygoX19weXhfdl9ub2RlbGlzdC5rZXlzW19fcHl4X3ZfaV0pKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMjMwLCBfX3B5eF9MMV9lcnJv cikKLS0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLS0gICAgICBfX3B5eF90XzggPSBO VUxMOwotLSAgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRo b2RfQ2hlY2soX19weXhfdF82KSkpIHsKLS0gICAgICAgIF9fcHl4X3RfOCA9IFB5TWV0aG9kX0dF VF9TRUxGKF9fcHl4X3RfNik7Ci0tICAgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfOCkpIHsKLS0g ICAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4 X3RfNik7Ci0tICAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzgpOwotLSAgICAgICAgICBf X1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4 X3RfNiwgZnVuY3Rpb24pOwotLSAgICAgICAgfQotLSAgICAgIH0KLS0gICAgICBfX3B5eF90XzEg PSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4 X3RfOCwgX19weXhfdF83KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBf X3B5eF90XzcpOwotLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsgX19weXhfdF84ID0g MDsKLS0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLS0gICAg ICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMzAsIF9fcHl4X0wxX2Vy cm9yKQotLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotLSAgICAgIGlmICh1bmxpa2VseShQeU9iamVj dF9TZXRJdGVtKF9fcHl4X3ZfdmFsdWVzLCBfX3B5eF90XzEsIF9fcHl4X3ZfdmFsdWUpIDwgMCkp IF9fUFlYX0VSUigwLCAyMzAsIF9fcHl4X0wxX2Vycm9yKQotLSAgICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgICB9Ci0rICAgIF9fcHl4X3ZfY2xpbXNnID0g KChzdHJ1Y3QgbXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlICopX19weXhfdl9kYXRhKTsKLSAKLS0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzMQotLSAqICAgICAgICAgICAg IHZhbHVlID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pCi0tICogICAg ICAgICAgICAgdmFsdWVzW19zdHJkZWMobm9kZWxpc3Qua2V5c1tpXSldID0gdmFsdWUKLS0gKiAg ICAgICAgIHJldHVybiB2YWx1ZXMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKLS0gKiAgICAgICAgIHJldHVybiBf c3RyZGVjKCgoPGNoYXIqKj5kYXRhKVswXSkpCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyODMKLSsgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfQ0xJ RU5UX01FU1NBR0U6Ci0rICogICAgICAgICAgICAgY2xpbXNnID0gPG1wdl9ldmVudF9jbGllbnRf bWVzc2FnZSo+ZGF0YQotKyAqICAgICAgICAgICAgIGFyZ3MgPSBbXSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgbnVtX2FyZ3MgPSBjbGltc2cubnVtX2FyZ3MK LSsgKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShudW1fYXJncyk6Ci0gICovCi0tICAgIF9f UHl4X1hERUNSRUYoX19weXhfcik7Ci0tICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlcyk7 Ci0tICAgIF9fcHl4X3IgPSBfX3B5eF92X3ZhbHVlczsKLS0gICAgZ290byBfX3B5eF9MMDsKLSsg ICAgX19weXhfdF8zID0gUHlMaXN0X05ldygwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBf X1BZWF9FUlIoMCwgMjgzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMyk7Ci0rICAgIF9fcHl4X3ZfYXJncyA9ICgoUHlPYmplY3QqKV9fcHl4X3RfMyk7Ci0rICAg IF9fcHl4X3RfMyA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyMjUKLS0gKiAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKF9jb252ZXJ0X25vZGVfdmFsdWUo bm9kZWxpc3QudmFsdWVzW2ldKSkKLS0gKiAgICAgICAgIHJldHVybiB2YWx1ZXMKLS0gKiAgICAg ZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBd Ci0tICogICAgICAgICB2YWx1ZXMgPSB7fQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Mjg0Ci0rICogICAgICAgICAgICAgY2xpbXNnID0gPG1wdl9ldmVudF9jbGllbnRf bWVzc2FnZSo+ZGF0YQotKyAqICAgICAgICAgICAgIGFyZ3MgPSBbXQotKyAqICAgICAgICAgICAg IG51bV9hcmdzID0gY2xpbXNnLm51bV9hcmdzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShudW1fYXJncyk6Ci0rICogICAgICAgICAg ICAgICAgIGFyZyA9IDxjaGFyKj5jbGltc2cuYXJnc1tpXQotICAqLwotLSAgICBicmVhazsKLS0g ICAgY2FzZSBNUFZfRk9STUFUX1NUUklORzoKLSsgICAgX19weXhfdF80ID0gX19weXhfdl9jbGlt c2ctPm51bV9hcmdzOwotKyAgICBfX3B5eF92X251bV9hcmdzID0gX19weXhfdF80OwotIAotLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjMzCi0tICogICAgICAgICByZXR1 cm4gdmFsdWVzCi0tICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgotLSAq ICAgICAgICAgcmV0dXJuIF9zdHJkZWMoKCg8Y2hhcioqPmRhdGEpWzBdKSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6 Ci0tICogICAgICAgICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2NF90Kj5kYXRhKVswXQotKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg1Ci0rICogICAgICAgICAgICAgYXJn cyA9IFtdCi0rICogICAgICAgICAgICAgbnVtX2FyZ3MgPSBjbGltc2cubnVtX2FyZ3MKLSsgKiAg ICAgICAgICAgICBmb3IgaSBpbiByYW5nZShudW1fYXJncyk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICAgICAgYXJnID0gPGNoYXIqPmNsaW1zZy5hcmdzW2ld Ci0rICogICAgICAgICAgICAgICAgIGFyZyA9IF9zdHJkZWMoYXJnKQotICAqLwotLSAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4 X3RfNiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDIzMywgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OwotLSAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoKCgoY2hhciAqKilf X3B5eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAs IDIzMywgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotLSAg ICBfX3B5eF90XzggPSBOVUxMOwotLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVu bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7Ci0tICAgICAgX19weXhfdF84ID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82KTsKLS0gICAgICBpZiAobGlrZWx5KF9fcHl4X3Rf OCkpIHsKLS0gICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElP TihfX3B5eF90XzYpOwotLSAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfOCk7Ci0tICAgICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzYsIGZ1bmN0aW9uKTsKLS0gICAgICB9Ci0tICAgIH0KLS0gICAgX19weXhfdF8xID0gKF9f cHl4X3RfOCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90Xzgs IF9fcHl4X3RfNykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhf dF83KTsKLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOwotLSAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLS0gICAgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJvcikKLS0gICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBf X3B5eF90XzYgPSAwOwotLSAgICBfX3B5eF9yID0gX19weXhfdF8xOwotLSAgICBfX3B5eF90XzEg PSAwOwotLSAgICBnb3RvIF9fcHl4X0wwOwotKyAgICBfX3B5eF90XzQgPSBfX3B5eF92X251bV9h cmdzOwotKyAgICBfX3B5eF90XzUgPSBfX3B5eF90XzQ7Ci0rICAgIGZvciAoX19weXhfdF82ID0g MDsgX19weXhfdF82IDwgX19weXhfdF81OyBfX3B5eF90XzYrPTEpIHsKLSsgICAgICBfX3B5eF92 X2kgPSBfX3B5eF90XzY7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyMzIKLS0gKiAgICAgICAgICAgICB2YWx1ZXNbX3N0cmRlYyhub2RlbGlzdC5rZXlzW2ldKV0g PSB2YWx1ZQotLSAqICAgICAgICAgcmV0dXJuIHZhbHVlcwotLSAqICAgICBlbGlmIGZvcm1hdCA9 PSBNUFZfRk9STUFUX1NUUklORzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgcmV0dXJuIF9zdHJkZWMoKCg8Y2hhcioqPmRhdGEpWzBdKSkKLS0gKiAgICAgZWxpZiBm b3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyODYKLSsgKiAgICAgICAgICAgICBudW1fYXJncyA9IGNsaW1zZy5udW1fYXJn cwotKyAqICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG51bV9hcmdzKToKLSsgKiAgICAgICAg ICAgICAgICAgYXJnID0gPGNoYXIqPmNsaW1zZy5hcmdzW2ldICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICAgICAgYXJnID0gX3N0cmRlYyhhcmcpCi0rICogICAg ICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFyZykKLSAgKi8KLS0gICAgYnJlYWs7Ci0tICAgIGNh c2UgTVBWX0ZPUk1BVF9GTEFHOgotKyAgICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJv bVN0cmluZygoKGNoYXIgKikoX19weXhfdl9jbGltc2ctPmFyZ3NbX19weXhfdl9pXSkpKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjg2LCBfX3B5eF9MMV9lcnJvcikK LSsgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgICAgICBfX1B5eF9YREVDUkVGX1NF VChfX3B5eF92X2FyZywgX19weXhfdF8zKTsKLSsgICAgICBfX3B5eF90XzMgPSAwOwotIAotLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM1Ci0tICogICAgICAgICByZXR1 cm4gX3N0cmRlYygoKDxjaGFyKio+ZGF0YSlbMF0pKQotLSAqICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX0ZMQUc6Ci0tICogICAgICAgICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2NF90Kj5k YXRhKVswXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGVsaWYgZm9ybWF0 ID09IE1QVl9GT1JNQVRfSU5UNjQ6Ci0tICogICAgICAgICByZXR1cm4gaW50KCg8dWludDY0X3Qq PmRhdGEpWzBdKQotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyODcK LSsgKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShudW1fYXJncyk6Ci0rICogICAgICAgICAg ICAgICAgIGFyZyA9IDxjaGFyKj5jbGltc2cuYXJnc1tpXQotKyAqICAgICAgICAgICAgICAgICBh cmcgPSBfc3RyZGVjKGFyZykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAg ICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpCi0rICogICAgICAgICAgICAgcmV0dXJuIGFyZ3MK LSAgKi8KLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gICAgX19weXhfdF8xID0gX19Q eXhfUHlCb29sX0Zyb21Mb25nKCghKCghKCgoKHVpbnQ2NF90ICopX19weXhfdl9kYXRhKVswXSkg IT0gMCkpICE9IDApKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIz NSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgICBf X3B5eF9yID0gX19weXhfdF8xOwotLSAgICBfX3B5eF90XzEgPSAwOwotLSAgICBnb3RvIF9fcHl4 X0wwOwotKyAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9u X3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjg3LCBf X3B5eF9MMV9lcnJvcikKLSsgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgICAgICBf X3B5eF90XzcgPSBOVUxMOwotKyAgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5s aWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLSsgICAgICAgIF9fcHl4X3RfNyA9 IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Ci0rICAgICAgICBpZiAobGlrZWx5KF9fcHl4 X3RfNykpIHsKLSsgICAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZV TkNUSU9OKF9fcHl4X3RfMik7Ci0rICAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzcpOwot KyAgICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAgICAgICAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotKyAgICAgICAgfQotKyAgICAgIH0KLSsgICAg ICBfX3B5eF90XzMgPSAoX19weXhfdF83KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzIsIF9fcHl4X3RfNywgX19weXhfdl9hcmcpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZyhfX3B5eF90XzIsIF9fcHl4X3ZfYXJnKTsKLSsgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Nyk7IF9fcHl4X3RfNyA9IDA7Ci0rICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZ WF9FUlIoMCwgMjg3LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8zKTsKLSsgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsg ICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfYXJnLCBfX3B5eF90XzMpOwotKyAgICAgIF9f cHl4X3RfMyA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy MzQKLS0gKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6Ci0tICogICAgICAg ICByZXR1cm4gX3N0cmRlYygoKDxjaGFyKio+ZGF0YSlbMF0pKQotLSAqICAgICBlbGlmIGZvcm1h dCA9PSBNUFZfRk9STUFUX0ZMQUc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgIHJldHVybiBub3Qgbm90ICg8dWludDY0X3QqPmRhdGEpWzBdCi0tICogICAgIGVsaWYg Zm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6Ci0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjI4OAotKyAqICAgICAgICAgICAgICAgICBhcmcgPSA8Y2hhcio+Y2xpbXNn LmFyZ3NbaV0KLSsgKiAgICAgICAgICAgICAgICAgYXJnID0gX3N0cmRlYyhhcmcpCi0rICogICAg ICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFyZykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICAgICAgICAgIHJldHVybiBhcmdzCi0rICogICAgICAgICBlbGlmIHNlbGYuaWQg PT0gTVBWX0VWRU5UX0VORF9GSUxFOgotICAqLwotLSAgICBicmVhazsKLS0gICAgY2FzZSBNUFZf Rk9STUFUX0lOVDY0OgotKyAgICAgIF9fcHl4X3RfOCA9IF9fUHl4X1B5TGlzdF9BcHBlbmQoX19w eXhfdl9hcmdzLCBfX3B5eF92X2FyZyk7IGlmICh1bmxpa2VseShfX3B5eF90XzggPT0gKChpbnQp LTEpKSkgX19QWVhfRVJSKDAsIDI4OCwgX19weXhfTDFfZXJyb3IpCi0rICAgIH0KLSAKLS0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzNwotLSAqICAgICAgICAgcmV0dXJu IG5vdCBub3QgKDx1aW50NjRfdCo+ZGF0YSlbMF0KLS0gKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBW X0ZPUk1BVF9JTlQ2NDoKLS0gKiAgICAgICAgIHJldHVybiBpbnQoKDx1aW50NjRfdCo+ZGF0YSlb MF0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgZWxpZiBmb3JtYXQgPT0g TVBWX0ZPUk1BVF9ET1VCTEU6Ci0tICogICAgICAgICByZXR1cm4gZmxvYXQoKDxkb3VibGUqPmRh dGEpWzBdKQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg5Ci0rICog ICAgICAgICAgICAgICAgIGFyZyA9IF9zdHJkZWMoYXJnKQotKyAqICAgICAgICAgICAgICAgICBh cmdzLmFwcGVuZChhcmcpCi0rICogICAgICAgICAgICAgcmV0dXJuIGFyZ3MgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9F TkRfRklMRToKLSsgKiAgICAgICAgICAgICByZXR1cm4gRW5kT2ZGaWxlUmVhY2hlZCgpLl9pbml0 KDxtcHZfZXZlbnRfZW5kX2ZpbGUqPmRhdGEpCi0gICovCi0gICAgIF9fUHl4X1hERUNSRUYoX19w eXhfcik7Ci0tICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKCgodWlu dDY0X3QgKilfX3B5eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDIzNywgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOwotLSAgICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKCgoUHlPYmpl Y3QgKikoJlB5SW50X1R5cGUpKSwgX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgMjM3LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNik7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwot LSAgICBfX3B5eF9yID0gX19weXhfdF82OwotLSAgICBfX3B5eF90XzYgPSAwOwotKyAgICBfX1B5 eF9JTkNSRUYoX19weXhfdl9hcmdzKTsKLSsgICAgX19weXhfciA9IF9fcHl4X3ZfYXJnczsKLSAg ICAgZ290byBfX3B5eF9MMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjIzNgotLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6Ci0tICogICAg ICAgICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2NF90Kj5kYXRhKVswXQotLSAqICAgICBlbGlmIGZv cm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogICAgICAgICByZXR1cm4gaW50KCg8dWludDY0X3QqPmRhdGEpWzBdKQotLSAqICAgICBlbGlm IGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjI4MQotKyAqICAgICAgICAgIyBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5U X1NDUklQVF9JTlBVVF9ESVNQQVRDSDoKLSsgKiAgICAgICAgICMgICAgIHJldHVybiBJbnB1dERp c3BhdGNoKCkuX2luaXQoPG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2gqPmRhdGEpCi0r ICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgY2xpbXNnID0gPG1wdl9l dmVudF9jbGllbnRfbWVzc2FnZSo+ZGF0YQotKyAqICAgICAgICAgICAgIGFyZ3MgPSBbXQotICAq LwotICAgICBicmVhazsKLS0gICAgY2FzZSBNUFZfRk9STUFUX0RPVUJMRToKLSsgICAgY2FzZSBN UFZfRVZFTlRfRU5EX0ZJTEU6Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoyMzkKLS0gKiAgICAgICAgIHJldHVybiBpbnQoKDx1aW50NjRfdCo+ZGF0YSlbMF0pCi0t ICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOgotLSAqICAgICAgICAgcmV0 dXJuIGZsb2F0KCg8ZG91YmxlKj5kYXRhKVswXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICByZXR1cm4gTm9uZQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjkxCi0rICogICAgICAgICAgICAgcmV0dXJuIGFyZ3MKLSsgKiAgICAgICAgIGVsaWYg c2VsZi5pZCA9PSBNUFZfRVZFTlRfRU5EX0ZJTEU6Ci0rICogICAgICAgICAgICAgcmV0dXJuIEVu ZE9mRmlsZVJlYWNoZWQoKS5faW5pdCg8bXB2X2V2ZW50X2VuZF9maWxlKj5kYXRhKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICByZXR1cm4gTm9uZQotICAqIAotICAq LwotICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICBfX3B5eF90XzYgPSBQeUZsb2F0 X0Zyb21Eb3VibGUoKCgoZG91YmxlICopX19weXhfdl9kYXRhKVswXSkpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAyMzksIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF82KTsKLS0gICAgX19weXhfciA9IF9fcHl4X3RfNjsKLS0gICAgX19w eXhfdF82ID0gMDsKLSsgICAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVh Y2hlZCkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyOTEsIF9fcHl4 X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgICAgX19weXhfdF8y ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZG aWxlUmVhY2hlZCAqKSgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5k T2ZGaWxlUmVhY2hlZCAqKV9fcHl4X3RfMyktPl9fcHl4X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKilfX3B5eF90 XzMpLCAoKHN0cnVjdCBtcHZfZXZlbnRfZW5kX2ZpbGUgKilfX3B5eF92X2RhdGEpKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjkxLCBfX3B5eF9MMV9lcnJvcikKLSsg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMp OyBfX3B5eF90XzMgPSAwOwotKyAgICBfX3B5eF9yID0gX19weXhfdF8yOwotKyAgICBfX3B5eF90 XzIgPSAwOwotICAgICBnb3RvIF9fcHl4X0wwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MjM4Ci0tICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5U NjQ6Ci0tICogICAgICAgICByZXR1cm4gaW50KCg8dWludDY0X3QqPmRhdGEpWzBdKQotLSAqICAg ICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgcmV0dXJuIGZsb2F0KCg8ZG91YmxlKj5kYXRhKVswXSkKLS0g KiAgICAgcmV0dXJuIE5vbmUKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjI5MAotKyAqICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpCi0rICogICAgICAgICAg ICAgcmV0dXJuIGFyZ3MKLSsgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfRU5E X0ZJTEU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICByZXR1 cm4gRW5kT2ZGaWxlUmVhY2hlZCgpLl9pbml0KDxtcHZfZXZlbnRfZW5kX2ZpbGUqPmRhdGEpCi0r ICogICAgICAgICByZXR1cm4gTm9uZQotICAqLwotICAgICBicmVhazsKLSAgICAgZGVmYXVsdDog YnJlYWs7Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjQw Ci0tICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOgotLSAqICAgICAgICAg cmV0dXJuIGZsb2F0KCg8ZG91YmxlKj5kYXRhKVswXSkKLS0gKiAgICAgcmV0dXJuIE5vbmUgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIAotLSAqIAotLSAqLwotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5MgotKyAqICAgICAgICAgZWxpZiBzZWxmLmlkID09 IE1QVl9FVkVOVF9FTkRfRklMRToKLSsgKiAgICAgICAgICAgICByZXR1cm4gRW5kT2ZGaWxlUmVh Y2hlZCgpLl9pbml0KDxtcHZfZXZlbnRfZW5kX2ZpbGUqPmRhdGEpCi0rICogICAgICAgICByZXR1 cm4gTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogCi0rICogICAgIEBwcm9w ZXJ0eQotKyAqLwotICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLSAgIF9fcHl4X3IgPSBQeV9O b25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0gICBnb3RvIF9fcHl4X0wwOwotIAotLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIxMwotLSAqIAotKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjI3MAotKyAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoZXJy X2MpCi0gICogCi0tICogY2RlZiBfY29udmVydF92YWx1ZSh2b2lkKiBkYXRhLCBtcHZfZm9ybWF0 IGZvcm1hdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgY2RlZiBtcHZf bm9kZSBub2RlCi0tICogICAgIGNkZWYgbXB2X25vZGVfbGlzdCBub2RlbGlzdAotKyAqICAgICBj ZGVmIF9kYXRhKHNlbGYsIG1wdl9ldmVudCogZXZlbnQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgICAgICBjZGVmIHZvaWQqIGRhdGEgPSBldmVudC5kYXRhCi0rICogICAg ICAgICBjZGVmIG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSogY2xpbXNnCi0gICovCi0gCi0gICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fcHl4X0wxX2Vycm9yOjsKLS0gIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKLSsgIF9fUHl4 X1hERUNSRUYoX19weXhfdF8yKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKLSAgIF9f UHl4X1hERUNSRUYoX19weXhfdF83KTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsKLS0g IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9jb252ZXJ0X3ZhbHVlIiwg X19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX1B5eF9B ZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5FdmVudC5fZGF0YSIsIF9fcHl4X2NsaW5l bm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotICAgX19weXhfciA9IDA7Ci0gICBf X3B5eF9MMDo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfdmFsdWVzKTsKLS0gIF9fUHl4X1hE RUNSRUYoX19weXhfdl92YWx1ZSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfYXJncyk7Ci0r ICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfYXJnKTsKLSAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Ip OwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsK LSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1MAotLSAqICAgICBj ZGVmIHB1YmxpYyBvYmplY3QgbmFtZSwgZGF0YQotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyOTUKLSAgKiAKLS0gKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfcHJv cGVydHkqIHByb3ApOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBz ZWxmLm5hbWUgPSBfc3RyZGVjKHByb3AubmFtZSkKLS0gKiAgICAgICAgIHNlbGYuZGF0YSA9IF9j b252ZXJ0X3ZhbHVlKHByb3AuZGF0YSwgcHJvcC5mb3JtYXQpCi0rICogICAgIEBwcm9wZXJ0eQot KyAqICAgICBkZWYgbmFtZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgIiIibXB2X2V2ZW50X25hbWUgb2YgdGhlIGV2ZW50IGlkIiIiCi0rICogICAgICAg ICBjZGVmIGNvbnN0IGNoYXIqIG5hbWVfYwotICAqLwotIAotLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X19pbml0KHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpfX3B5eF92X3NlbGYsIHN0cnVjdCBt cHZfZXZlbnRfcHJvcGVydHkgKl9fcHl4X3ZfcHJvcCkgewotKy8qIFB5dGhvbiB3cmFwcGVyICov Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 XzRuYW1lXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KLStzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVf MV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotKyAgUHlPYmplY3QgKl9fcHl4X3Ig PSAwOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIsIDApOwotKyAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfX19nZXRfXygoKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxmKSk7Ci0rCi0r ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOwotKyAgcmV0dXJuIF9fcHl4X3I7Ci0rfQotKwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80bmFtZV9fX2dldF9fKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYpIHsKLSsgIGNo YXIgY29uc3QgKl9fcHl4X3ZfbmFtZV9jOwotICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwot ICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBO VUxMOwotQEAgLTU3MDQsMTggKzYxMjgsNjMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfX2luaXQoc3RydWN0IF9fcHl4X29ial8KLSAg IGludCBfX3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9pbml0IiwgMCk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRf XyIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1MQotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5OAotKyAqICAgICAgICAgIiIibXB2 X2V2ZW50X25hbWUgb2YgdGhlIGV2ZW50IGlkIiIiCi0rICogICAgICAgICBjZGVmIGNvbnN0IGNo YXIqIG5hbWVfYwotKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICAgICAgICAgIG5hbWVfYyA9IG1wdl9ldmVudF9uYW1lKHNlbGYuaWQp Ci0rICogICAgICAgICByZXR1cm4gX3N0cmRlYyhuYW1lX2MpCi0rICovCi0rICB7Ci0rICAgICAg I2lmZGVmIFdJVEhfVEhSRUFECi0rICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7Ci0rICAgICAg UHlfVU5CTE9DS19USFJFQURTCi0rICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwotKyAg ICAgICNlbmRpZgotKyAgICAgIC8qdHJ5OiovIHsKLSsKLSsgICAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyOTkKLSsgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFt ZV9jCi0rICogICAgICAgICB3aXRoIG5vZ2lsOgotKyAqICAgICAgICAgICAgIG5hbWVfYyA9IG1w dl9ldmVudF9uYW1lKHNlbGYuaWQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgIHJldHVybiBfc3RyZGVjKG5hbWVfYykKLSAgKiAKLS0gKiAgICAgY2RlZiBfaW5pdChz ZWxmLCBtcHZfZXZlbnRfcHJvcGVydHkqIHByb3ApOgotLSAqICAgICAgICAgc2VsZi5uYW1lID0g X3N0cmRlYyhwcm9wLm5hbWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAg ICAgIHNlbGYuZGF0YSA9IF9jb252ZXJ0X3ZhbHVlKHByb3AuZGF0YSwgcHJvcC5mb3JtYXQpCi0t ICogICAgICAgICByZXR1cm4gc2VsZgotICAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCAyNTEsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgICAgX19weXhfdl9uYW1l X2MgPSBtcHZfZXZlbnRfbmFtZShfX3B5eF92X3NlbGYtPmlkKTsKLSsgICAgICB9Ci0rCi0rICAg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5OAotKyAqICAgICAgICAgIiIi bXB2X2V2ZW50X25hbWUgb2YgdGhlIGV2ZW50IGlkIiIiCi0rICogICAgICAgICBjZGVmIGNvbnN0 IGNoYXIqIG5hbWVfYwotKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIG5hbWVfYyA9IG1wdl9ldmVudF9uYW1lKHNlbGYu aWQpCi0rICogICAgICAgICByZXR1cm4gX3N0cmRlYyhuYW1lX2MpCi0rICovCi0rICAgICAgLypm aW5hbGx5OiovIHsKLSsgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97Ci0rICAgICAgICAgICNpZmRl ZiBXSVRIX1RIUkVBRAotKyAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOwotKyAgICAg ICAgICBQeV9CTE9DS19USFJFQURTCi0rICAgICAgICAgICNlbmRpZgotKyAgICAgICAgICBnb3Rv IF9fcHl4X0w1OwotKyAgICAgICAgfQotKyAgICAgICAgX19weXhfTDU6OwotKyAgICAgIH0KLSsg IH0KLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDAKLSsgKiAgICAg ICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgbmFtZV9jID0gbXB2X2V2ZW50X25hbWUo c2VsZi5pZCkKLSsgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKG5hbWVfYykgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqIAotKyAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVu dCogZXZlbnQsIGN0eCk6Ci0rICovCi0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotKyAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzMDAsIF9fcHl4X0wxX2Vycm9yKQot ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVz X0Zyb21TdHJpbmcoX19weXhfdl9wcm9wLT5uYW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMCwgMjUxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMyA9IF9fUHl4 X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X25hbWVfYyk7IGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDAsIDMwMCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYo X19weXhfdF8zKTsKLSAgIF9fcHl4X3RfNCA9IE5VTEw7Ci0gICBpZiAoQ1lUSE9OX1VOUEFDS19N RVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Ci1AQCAtNTcz MCw0OCArNjE5OSwxOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2XzhQcm9wZXJ0eV9faW5pdChzdHJ1Y3QgX19weXhfb2JqXwotICAgX19weXhfdF8xID0g KF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90 XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19w eXhfdF8zKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjUxLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwMCwgX19weXhfTDFfZXJyb3IpCi0g ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwotLSAgX19QeXhfR09U UkVGKF9fcHl4X3Zfc2VsZi0+bmFtZSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5u YW1lKTsKLS0gIF9fcHl4X3Zfc2VsZi0+bmFtZSA9IF9fcHl4X3RfMTsKLS0gIF9fcHl4X3RfMSA9 IDA7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUyCi0tICogICAg IGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X3Byb3BlcnR5KiBwcm9wKToKLS0gKiAgICAgICAg IHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5uYW1lKQotLSAqICAgICAgICAgc2VsZi5kYXRhID0g X2NvbnZlcnRfdmFsdWUocHJvcC5kYXRhLCBwcm9wLmZvcm1hdCkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmV0dXJuIHNlbGYKLS0gKiAKLS0gKi8KLS0gIF9fcHl4 X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKF9fcHl4 X3ZfcHJvcC0+ZGF0YSwgX19weXhfdl9wcm9wLT5mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAyNTIsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9HT1RS RUYoX19weXhfdl9zZWxmLT5kYXRhKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmRh dGEpOwotLSAgX19weXhfdl9zZWxmLT5kYXRhID0gX19weXhfdF8xOwotKyAgX19weXhfciA9IF9f cHl4X3RfMTsKLSAgIF9fcHl4X3RfMSA9IDA7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjUzCi0tICogICAgICAgICBzZWxmLm5hbWUgPSBfc3RyZGVjKHByb3AubmFt ZSkKLS0gKiAgICAgICAgIHNlbGYuZGF0YSA9IF9jb252ZXJ0X3ZhbHVlKHByb3AuZGF0YSwgcHJv cC5mb3JtYXQpCi0tICogICAgICAgICByZXR1cm4gc2VsZiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogCi0tICogCi0tICovCi0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAg X19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsKLS0gIF9fcHl4X3IgPSAo KFB5T2JqZWN0ICopX19weXhfdl9zZWxmKTsKLSAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUwCi0tICogICAgIGNkZWYgcHVibGljIG9i amVjdCBuYW1lLCBkYXRhCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjk1 Ci0gICogCi0tICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X3Byb3BlcnR5KiBwcm9w KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi5uYW1lID0g X3N0cmRlYyhwcm9wLm5hbWUpCi0tICogICAgICAgICBzZWxmLmRhdGEgPSBfY29udmVydF92YWx1 ZShwcm9wLmRhdGEsIHByb3AuZm9ybWF0KQotKyAqICAgICBAcHJvcGVydHkKLSsgKiAgICAgZGVm IG5hbWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICIi Im1wdl9ldmVudF9uYW1lIG9mIHRoZSBldmVudCBpZCIiIgotKyAqICAgICAgICAgY2RlZiBjb25z dCBjaGFyKiBuYW1lX2MKLSAgKi8KLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotQEAg LTU3ODAsMTU0NyArNjIyMCwxNzEwIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfCi0gICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0gICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRl ci5saWJzLm1wdi5Qcm9wZXJ0eS5faW5pdCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOwotLSAgX19weXhfciA9IDA7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5FdmVudC5uYW1lLl9fZ2V0X18iLCBfX3B5eF9jbGluZW5vLCBf X3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fcHl4X3IgPSBOVUxMOwotICAgX19w eXhfTDA6OwotICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MjQ4Ci0tICogICAgIFdyYXBzOiBtcHZfZXZlbnRfcHJvcGVy dHkKLS0gKiAgICAgIiIiCi0tICogICAgIGNkZWYgcHVibGljIG9iamVjdCBuYW1lLCBkYXRhICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MzAyCi0rICogICAgICAgICByZXR1cm4gX3N0cmRlYyhuYW1lX2MpCi0gICogCi0tICog ICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X3Byb3BlcnR5KiBwcm9wKToKLSsgKiAgICAg Y2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnQqIGV2ZW50LCBjdHgpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90 PmlkKGN0eCkKLSsgKiAgICAgICAgIHNlbGYuaWQgPSBldmVudC5ldmVudF9pZAotICAqLwotIAot LS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRuYW1lXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZikgewotLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJh dGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIs IDApOwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVy dHlfNG5hbWVfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X1Byb3BlcnR5ICopX19weXhfdl9zZWxmKSk7Ci0tCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7 Ci0tfQotLQotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzhQcm9wZXJ0eV80bmFtZV9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X1Byb3BlcnR5ICpfX3B5eF92X3NlbGYpIHsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdl9zZWxmLCBzdHJ1Y3QgbXB2X2V2ZW50 ICpfX3B5eF92X2V2ZW50LCBQeU9iamVjdCAqX19weXhfdl9jdHgpIHsKLSsgIHVpbnQ2NF90IF9f cHl4X3ZfY3R4aWQ7Ci0rICBQeU9iamVjdCAqX19weXhfdl91c2VyZGF0YSA9IE5VTEw7Ci0gICBQ eU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwot LSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKLS0gIF9fUHl4X1hE RUNSRUYoX19weXhfcik7Ci0tICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5uYW1lKTsKLS0g IF9fcHl4X3IgPSBfX3B5eF92X3NlbGYtPm5hbWU7Ci0tICBnb3RvIF9fcHl4X0wwOwotLQotLSAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9YR0lWRVJF RihfX3B5eF9yKTsKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJu IF9fcHl4X3I7Ci0tfQotKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0rICB1aW50NjRf dCBfX3B5eF90XzI7Ci0rICBlbnVtIG1wdl9ldmVudF9pZCBfX3B5eF90XzM7Ci0rICBQeU9iamVj dCAqX19weXhfdF80ID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwotKyAg UHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7Ci0rICBpbnQgX19weXhfdF83OwotKyAgUHlPYmpl Y3QgKl9fcHl4X3RfOCA9IE5VTEw7Ci0rICBpbnQgX19weXhfdF85OwotKyAgaW50IF9fcHl4X3Rf MTA7Ci0rICBpbnQgX19weXhfdF8xMTsKLSsgIGludCBfX3B5eF9saW5lbm8gPSAwOwotKyAgY29u c3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAw OwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9pbml0IiwgMCk7Ci0gCi0tLyogUHl0 aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl84UHJvcGVydHlfNG5hbWVfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4 X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKLS0gIGludCBfX3B5eF9yOwotLSAg X19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJfX3NldF9fICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVfMl9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmpl Y3QgKilfX3B5eF92X3ZhbHVlKSk7Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzAzCi0rICogCi0rICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50KiBldmVudCwg Y3R4KToKLSsgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoY3R4 KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBzZWxmLmlkID0gZXZl bnQuZXZlbnRfaWQKLSsgKiAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuX2RhdGEoZXZlbnQpCi0r ICovCi0rICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0 aW5faWQsIF9fcHl4X3ZfY3R4KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgMzAzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAg X19weXhfdF8yID0gX19QeXhfUHlJbnRfQXNfdWludDY0X3QoX19weXhfdF8xKTsgaWYgKHVubGlr ZWx5KChfX3B5eF90XzIgPT0gKCh1aW50NjRfdCktMSkpICYmIFB5RXJyX09jY3VycmVkKCkpKSBf X1BZWF9FUlIoMCwgMzAzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgX19weXhfdl9jdHhpZCA9ICgodWludDY0X3QpX19weXhf dF8yKTsKLSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzA0Ci0rICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2 ZW50KiBldmVudCwgY3R4KToKLSsgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWlu dDY0X3Q+aWQoY3R4KQotKyAqICAgICAgICAgc2VsZi5pZCA9IGV2ZW50LmV2ZW50X2lkICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuX2Rh dGEoZXZlbnQpCi0rICogICAgICAgICB1c2VyZGF0YSA9IF9yZXBseV91c2VyZGF0YXNbY3R4aWRd LmdldChldmVudC5yZXBseV91c2VyZGF0YSwgTm9uZSkKLSsgKi8KLSsgIF9fcHl4X3RfMyA9IF9f cHl4X3ZfZXZlbnQtPmV2ZW50X2lkOwotKyAgX19weXhfdl9zZWxmLT5pZCA9IF9fcHl4X3RfMzsK LSAKLS1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlf NG5hbWVfMl9fc2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJv cGVydHkgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKLS0gIGludCBf X3B5eF9yOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX3NldF9fIiwgMCk7Ci0tICBfX1B5eF9JTkNSRUYoX19weXhfdl92YWx1 ZSk7Ci0tICBfX1B5eF9HSVZFUkVGKF9fcHl4X3ZfdmFsdWUpOwotLSAgX19QeXhfR09UUkVGKF9f cHl4X3Zfc2VsZi0+bmFtZSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5uYW1lKTsK LS0gIF9fcHl4X3Zfc2VsZi0+bmFtZSA9IF9fcHl4X3ZfdmFsdWU7Ci0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzA1Ci0rICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlk ID0gPHVpbnQ2NF90PmlkKGN0eCkKLSsgKiAgICAgICAgIHNlbGYuaWQgPSBldmVudC5ldmVudF9p ZAotKyAqICAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5fZGF0YShldmVudCkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgdXNlcmRhdGEgPSBfcmVwbHlfdXNlcmRhdGFz W2N0eGlkXS5nZXQoZXZlbnQucmVwbHlfdXNlcmRhdGEsIE5vbmUpCi0rICogICAgICAgICBpZiB1 c2VyZGF0YSBpcyBub3QgTm9uZSBhbmQgc2VsZi5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hB TkdFOgotKyAqLwotKyAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZGF0 YShfX3B5eF92X3NlbGYsIF9fcHl4X3ZfZXZlbnQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAzMDUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9HT1RSRUYoX19w eXhfdl9zZWxmLT5kYXRhKTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmRhdGEpOwot KyAgX19weXhfdl9zZWxmLT5kYXRhID0gX19weXhfdF8xOwotKyAgX19weXhfdF8xID0gMDsKLSAK LS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19weXhfciA9IDA7Ci0tICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDYKLSsgKiAgICAgICAgIHNlbGYuaWQgPSBl dmVudC5ldmVudF9pZAotKyAqICAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5fZGF0YShldmVudCkK LSsgKiAgICAgICAgIHVzZXJkYXRhID0gX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0uZ2V0KGV2ZW50 LnJlcGx5X3VzZXJkYXRhLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZSBhbmQgc2VsZi5pZCAhPSBNUFZfRVZFTlRf UFJPUEVSVFlfQ0hBTkdFOgotKyAqICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCi0rICov Ci0rICBfX3B5eF90XzQgPSBfX1B5eF9HZXRJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGli c18zbXB2X19yZXBseV91c2VyZGF0YXMsIF9fcHl4X3ZfY3R4aWQsIHVpbnQ2NF90LCAwLCBfX1B5 eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgMzA2LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzQpOwotKyAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90 XzQsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigw LCAzMDYsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7Ci0rICBf X1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgIF9fcHl4X3RfNCA9IF9f UHl4X1B5SW50X0Zyb21fdWludDY0X3QoX19weXhfdl9ldmVudC0+cmVwbHlfdXNlcmRhdGEpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzMDYsIF9fcHl4X0wxX2Vycm9y KQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0rICBfX3B5eF90XzYgPSBOVUxMOwotKyAg X19weXhfdF83ID0gMDsKLSsgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfNSkpKSB7Ci0rICAgIF9fcHl4X3RfNiA9IFB5TWV0aG9kX0dF VF9TRUxGKF9fcHl4X3RfNSk7Ci0rICAgIGlmIChsaWtlbHkoX19weXhfdF82KSkgewotKyAgICAg IFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzUpOwot KyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzYpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5j dGlvbik7Ci0rICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzUsIGZ1bmN0aW9uKTsKLSsg ICAgICBfX3B5eF90XzcgPSAxOwotKyAgICB9Ci0rICB9Ci0rICAjaWYgQ1lUSE9OX0ZBU1RfUFlD QUxMCi0rICBpZiAoUHlGdW5jdGlvbl9DaGVjayhfX3B5eF90XzUpKSB7Ci0rICAgIFB5T2JqZWN0 ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4X3RfNiwgX19weXhfdF80LCBQeV9Ob25lfTsKLSsgICAg X19weXhfdF8xID0gX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzUsIF9fcHl4X3Rl bXArMS1fX3B5eF90XzcsIDIrX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMzA2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOwotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICB9IGVsc2UKLSsg ICNlbmRpZgotKyAgI2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwKLSsgIGlmIChfX1B5eF9QeUZhc3RD RnVuY3Rpb25fQ2hlY2soX19weXhfdF81KSkgewotKyAgICBQeU9iamVjdCAqX19weXhfdGVtcFsz XSA9IHtfX3B5eF90XzYsIF9fcHl4X3RfNCwgUHlfTm9uZX07Ci0rICAgIF9fcHl4X3RfMSA9IF9f UHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsxLV9fcHl4X3Rf NywgMitfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAz MDYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4 X3RfNiA9IDA7Ci0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICBfX1B5eF9ERUNS RUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgIH0gZWxzZQotKyAgI2VuZGlmCi0rICB7 Ci0rICAgIF9fcHl4X3RfOCA9IFB5VHVwbGVfTmV3KDIrX19weXhfdF83KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzgpKSBfX1BZWF9FUlIoMCwgMzA2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfOCk7Ci0rICAgIGlmIChfX3B5eF90XzYpIHsKLSsgICAgICBfX1B5 eF9HSVZFUkVGKF9fcHl4X3RfNik7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF84LCAwLCBfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSBOVUxMOwotKyAgICB9Ci0rICAgIF9fUHl4X0dJVkVSRUYoX19w eXhfdF80KTsKLSsgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzgsIDArX19weXhfdF83LCBf X3B5eF90XzQpOwotKyAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0rICAgIF9fUHl4X0dJVkVS RUYoUHlfTm9uZSk7Ci0rICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF84LCAxK19fcHl4X3Rf NywgUHlfTm9uZSk7Ci0rICAgIF9fcHl4X3RfNCA9IDA7Ci0rICAgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5T2JqZWN0X0NhbGwoX19weXhfdF81LCBfX3B5eF90XzgsIE5VTEwpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4 X3RfOCA9IDA7Ci0rICB9Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0g MDsKLSsgIF9fcHl4X3ZfdXNlcmRhdGEgPSBfX3B5eF90XzE7Ci0rICBfX3B5eF90XzEgPSAwOwot IAotLS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfOFByb3BlcnR5XzRuYW1lXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYpOyAvKnByb3RvKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl84UHJvcGVydHlfNG5hbWVfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotLSAg aW50IF9fcHl4X3I7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9fZGVsX18gKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV80X19kZWxfXygo KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhf dl9zZWxmKSk7Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzA3Ci0rICog ICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLl9kYXRhKGV2ZW50KQotKyAqICAgICAgICAgdXNlcmRh dGEgPSBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXS5nZXQoZXZlbnQucmVwbHlfdXNlcmRhdGEsIE5v bmUpCi0rICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZSBhbmQgc2VsZi5pZCAhPSBN UFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0r ICogICAgICAgICAgICAgdXNlcmRhdGEucmVtb3ZlKCkKLSsgKiAgICAgICAgICAgICBpZiBub3Qg dXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50ZXIgPD0gMDoKLSsgKi8KLSsgIF9f cHl4X3RfMTAgPSAoX19weXhfdl91c2VyZGF0YSAhPSBQeV9Ob25lKTsKLSsgIF9fcHl4X3RfMTEg PSAoX19weXhfdF8xMCAhPSAwKTsKLSsgIGlmIChfX3B5eF90XzExKSB7Ci0rICB9IGVsc2Ugewot KyAgICBfX3B5eF90XzkgPSBfX3B5eF90XzExOwotKyAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlu b3BfZG9uZTsKLSsgIH0KLSsgIF9fcHl4X3RfMTEgPSAoKF9fcHl4X3Zfc2VsZi0+aWQgIT0gTVBW X0VWRU5UX1BST1BFUlRZX0NIQU5HRSkgIT0gMCk7Ci0rICBfX3B5eF90XzkgPSBfX3B5eF90XzEx OwotKyAgX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKLSsgIGlmIChfX3B5eF90XzkpIHsKLSAK LS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250 ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozMDgKLSsgKiAgICAgICAgIHVzZXJkYXRhID0gX3JlcGx5X3VzZXJkYXRh c1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5X3VzZXJkYXRhLCBOb25lKQotKyAqICAgICAgICAgaWYg dXNlcmRhdGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BFUlRZX0NI QU5HRToKLSsgKiAgICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUoKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgaWYgbm90IHVzZXJkYXRhLm9ic2VydmVkIGFu ZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6Ci0rICogICAgICAgICAgICAgICAgIGRlbCBfcmVwbHlf dXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0KLSsgKi8KLSsgICAgX19weXhf dF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhLCBfX3B5eF9u X3NfcmVtb3ZlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMzA4LCBf X3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7Ci0rICAgIF9fcHl4 X3RfOCA9IE5VTEw7Ci0rICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfNSkpKSB7Ci0rICAgICAgX19weXhfdF84ID0gUHlNZXRob2Rf R0VUX1NFTEYoX19weXhfdF81KTsKLSsgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfOCkpIHsKLSsg ICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90 XzUpOwotKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfOCk7Ci0rICAgICAgICBfX1B5eF9J TkNSRUYoZnVuY3Rpb24pOwotKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzUsIGZ1 bmN0aW9uKTsKLSsgICAgICB9Ci0rICAgIH0KLSsgICAgX19weXhfdF8xID0gKF9fcHl4X3RfOCkg PyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwgX19weXhfdF84KSA6IF9fUHl4 X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzUpOwotKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfOCk7IF9fcHl4X3RfOCA9IDA7Ci0rICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDMwOCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLSsgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tc3RhdGljIGludCBf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRuYW1lXzRfX2RlbF9fKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpfX3B5eF92X3Nl bGYpIHsKLS0gIGludCBfX3B5eF9yOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0g IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fIiwgMCk7Ci0tICBfX1B5eF9JTkNS RUYoUHlfTm9uZSk7Ci0tICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOwotLSAgX19QeXhfR09UUkVG KF9fcHl4X3Zfc2VsZi0+bmFtZSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5uYW1l KTsKLS0gIF9fcHl4X3Zfc2VsZi0+bmFtZSA9IFB5X05vbmU7Ci0rICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjozMDkKLSsgKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBO b25lIGFuZCBzZWxmLmlkICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6Ci0rICogICAgICAg ICAgICAgdXNlcmRhdGEucmVtb3ZlKCkKLSsgKiAgICAgICAgICAgICBpZiBub3QgdXNlcmRhdGEu b2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50ZXIgPD0gMDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICAgICAgICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF1b ZXZlbnQucmVwbHlfdXNlcmRhdGFdCi0rICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9u ZToKLSsgKi8KLSsgICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5 eF92X3VzZXJkYXRhLCBfX3B5eF9uX3Nfb2JzZXJ2ZWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAzMDksIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKLSsgICAgX19weXhfdF8xMSA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5 eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF8xMSA8IDApKSBfX1BZWF9FUlIoMCwgMzA5LCBf X3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9 IDA7Ci0rICAgIF9fcHl4X3RfMTAgPSAoKCFfX3B5eF90XzExKSAhPSAwKTsKLSsgICAgaWYgKF9f cHl4X3RfMTApIHsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBfX3B5eF90XzkgPSBfX3B5eF90XzEw OwotKyAgICAgIGdvdG8gX19weXhfTDdfYm9vbF9iaW5vcF9kb25lOwotKyAgICB9Ci0rICAgIF9f cHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YSwgX19w eXhfbl9zX2NvdW50ZXIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAz MDksIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgICAg X19weXhfdF81ID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdF8xLCBfX3B5eF9pbnRfMCwg UHlfTEUpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfNSk7IGlmICh1bmxpa2VseSghX19weXhfdF81 KSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgICBfX3B5eF90XzEwID0gX19QeXhfUHlPYmpl Y3RfSXNUcnVlKF9fcHl4X3RfNSk7IGlmICh1bmxpa2VseShfX3B5eF90XzEwIDwgMCkpIF9fUFlY X0VSUigwLCAzMDksIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81 KTsgX19weXhfdF81ID0gMDsKLSsgICAgX19weXhfdF85ID0gX19weXhfdF8xMDsKLSsgICAgX19w eXhfTDdfYm9vbF9iaW5vcF9kb25lOjsKLSsgICAgaWYgKF9fcHl4X3RfOSkgewotIAotLSAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX3B5eF9yID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotKyAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTAKLSsgKiAgICAgICAgICAgICB1c2VyZGF0YS5y ZW1vdmUoKQotKyAqICAgICAgICAgICAgIGlmIG5vdCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNl cmRhdGEuY291bnRlciA8PSAwOgotKyAqICAgICAgICAgICAgICAgICBkZWwgX3JlcGx5X3VzZXJk YXRhc1tjdHhpZF1bZXZlbnQucmVwbHlfdXNlcmRhdGFdICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lOgotKyAqICAgICAgICAg ICAgIHVzZXJkYXRhID0gdXNlcmRhdGEuZGF0YQotKyAqLwotKyAgICAgIF9fcHl4X3RfNSA9IF9f UHl4X0dldEl0ZW1JbnQoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3VzZXJk YXRhcywgX19weXhfdl9jdHhpZCwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0 X3QsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMTAs IF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOwotKyAgICAg IGlmICh1bmxpa2VseShfX1B5eF9EZWxJdGVtSW50KF9fcHl4X3RfNSwgX19weXhfdl9ldmVudC0+ cmVwbHlfdXNlcmRhdGEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAw LCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgMzEwLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBf X1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLSAKLS0vKiBQeXRob24gd3Jh cHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzhQcm9wZXJ0eV80ZGF0YV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90 byovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFBy b3BlcnR5XzRkYXRhXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKLS0gIFB5T2Jq ZWN0ICpfX3B5eF9yID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4 X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhX19fZ2V0 X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9f cHl4X3Zfc2VsZikpOwotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz MDkKLSsgKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lIGFuZCBzZWxmLmlkICE9IE1Q Vl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6Ci0rICogICAgICAgICAgICAgdXNlcmRhdGEucmVtb3Zl KCkKLSsgKiAgICAgICAgICAgICBpZiBub3QgdXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRh LmNvdW50ZXIgPD0gMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg ICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF1bZXZlbnQucmVwbHlfdXNlcmRhdGFd Ci0rICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZToKLSsgKi8KLSsgICAgfQotIAot LSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRl eHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjMwNwotKyAqICAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5fZGF0YShldmVu dCkKLSsgKiAgICAgICAgIHVzZXJkYXRhID0gX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0uZ2V0KGV2 ZW50LnJlcGx5X3VzZXJkYXRhLCBOb25lKQotKyAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90 IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCi0r ICogICAgICAgICAgICAgaWYgbm90IHVzZXJkYXRhLm9ic2VydmVkIGFuZCB1c2VyZGF0YS5jb3Vu dGVyIDw9IDA6Ci0rICovCi0rICB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhX19fZ2V0X18oc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3Zfc2VsZikgewotLSAgUHlP YmplY3QgKl9fcHl4X3IgPSBOVUxMOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0g IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fIiwgMCk7Ci0tICBfX1B5eF9YREVD UkVGKF9fcHl4X3IpOwotLSAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7Ci0tICBf X3B5eF9yID0gX19weXhfdl9zZWxmLT5kYXRhOwotLSAgZ290byBfX3B5eF9MMDsKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTEKLSsgKiAgICAgICAgICAgICBpZiBub3Qg dXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50ZXIgPD0gMDoKLSsgKiAgICAgICAg ICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdW2V2ZW50LnJlcGx5X3VzZXJkYXRh XQotKyAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICB1c2VyZGF0YSA9IHVzZXJkYXRhLmRhdGEKLSsg KiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSB1c2VyZGF0YQotKyAqLwotKyAgX19weXhf dF85ID0gKF9fcHl4X3ZfdXNlcmRhdGEgIT0gUHlfTm9uZSk7Ci0rICBfX3B5eF90XzEwID0gKF9f cHl4X3RfOSAhPSAwKTsKLSsgIGlmIChfX3B5eF90XzEwKSB7Ci0gCi0tICAvKiBmdW5jdGlvbiBl eGl0IGNvZGUgKi8KLS0gIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwot LSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19 Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTIKLSsgKiAgICAgICAg ICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdW2V2ZW50LnJlcGx5X3VzZXJkYXRh XQotKyAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmU6Ci0rICogICAgICAgICAgICAg dXNlcmRhdGEgPSB1c2VyZGF0YS5kYXRhICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSB1c2VyZGF0YQotKyAqICAgICAgICAgc2Vs Zi5lcnJvciA9IGV2ZW50LmVycm9yCi0rICovCi0rICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2Jq ZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YSwgX19weXhfbl9zX2RhdGEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMTIsIF9fcHl4X0wxX2Vycm9yKQotKyAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKLSsgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92 X3VzZXJkYXRhLCBfX3B5eF90XzUpOwotKyAgICBfX3B5eF90XzUgPSAwOwotIAotLS8qIFB5dGhv biB3cmFwcGVyICovCi0tc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf OFByb3BlcnR5XzRkYXRhXzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X3ZhbHVlKTsgLypwcm90byovCi0tc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7Ci0tICBpbnQgX19weXhfcjsKLS0gIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19zZXRfXyAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzJfX3NldF9fKCgoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0 ICopX19weXhfdl92YWx1ZSkpOwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzExCi0rICogICAgICAgICAgICAgaWYgbm90IHVzZXJkYXRhLm9ic2VydmVkIGFuZCB1c2Vy ZGF0YS5jb3VudGVyIDw9IDA6Ci0rICogICAgICAgICAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRh dGFzW2N0eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0KLSsgKiAgICAgICAgIGlmIHVzZXJkYXRh IGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAg ICAgdXNlcmRhdGEgPSB1c2VyZGF0YS5kYXRhCi0rICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJk YXRhID0gdXNlcmRhdGEKLSsgKi8KLSsgIH0KLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozMTMKLSsgKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lOgotKyAq ICAgICAgICAgICAgIHVzZXJkYXRhID0gdXNlcmRhdGEuZGF0YQotKyAqICAgICAgICAgc2VsZi5y ZXBseV91c2VyZGF0YSA9IHVzZXJkYXRhICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgICAgIHNlbGYuZXJyb3IgPSBldmVudC5lcnJvcgotKyAqICAgICAgICAgcmV0dXJuIHNl bGYKLSsgKi8KLSsgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3VzZXJkYXRhKTsKLSsgIF9fUHl4X0dJ VkVSRUYoX19weXhfdl91c2VyZGF0YSk7Ci0rICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5y ZXBseV91c2VyZGF0YSk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5yZXBseV91c2Vy ZGF0YSk7Ci0rICBfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhID0gX19weXhfdl91c2VyZGF0 YTsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTQKLSsgKiAgICAg ICAgICAgICB1c2VyZGF0YSA9IHVzZXJkYXRhLmRhdGEKLSsgKiAgICAgICAgIHNlbGYucmVwbHlf dXNlcmRhdGEgPSB1c2VyZGF0YQotKyAqICAgICAgICAgc2VsZi5lcnJvciA9IGV2ZW50LmVycm9y ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHJldHVybiBzZWxmCi0r ICogCi0rICovCi0rICBfX3B5eF90XzcgPSBfX3B5eF92X2V2ZW50LT5lcnJvcjsKLSsgIF9fcHl4 X3Zfc2VsZi0+ZXJyb3IgPSBfX3B5eF90Xzc7Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MzE1Ci0rICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gdXNlcmRh dGEKLSsgKiAgICAgICAgIHNlbGYuZXJyb3IgPSBldmVudC5lcnJvcgotKyAqICAgICAgICAgcmV0 dXJuIHNlbGYgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIAotKyAqIAotKyAqLwot KyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLSsgIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICop X19weXhfdl9zZWxmKSk7Ci0rICBfX3B5eF9yID0gKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZik7 Ci0rICBnb3RvIF9fcHl4X0wwOwotKwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMwMgotKyAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobmFtZV9jKQotKyAqIAotKyAqICAg ICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudCogZXZlbnQsIGN0eCk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0 X3Q+aWQoY3R4KQotKyAqICAgICAgICAgc2VsZi5pZCA9IGV2ZW50LmV2ZW50X2lkCi0rICovCi0g Ci0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fcHl4X0wxX2Vycm9yOjsKLSsgIF9f UHl4X1hERUNSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKLSsg IF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsK LSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2LkV2ZW50Ll9pbml0IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5v LCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX3B5eF9yID0gMDsKLSsgIF9fcHl4X0wwOjsKLSsgIF9f UHl4X1hERUNSRUYoX19weXhfdl91c2VyZGF0YSk7Ci0rICBfX1B5eF9YR0lWRVJFRihfX3B5eF9y KTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7 Ci0gfQotIAotLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9w ZXJ0eV80ZGF0YV8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Qcm9wZXJ0eSAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgewotLSAg aW50IF9fcHl4X3I7Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1OAotKyAq IGNkZWYgY2xhc3MgRXZlbnQob2JqZWN0KToKLSsgKiAgICAgIiIiV3JhcHM6IG1wdl9ldmVudCIi IgotKyAqICAgICBjZGVmIHB1YmxpYyBtcHZfZXZlbnRfaWQgaWQgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAqICAgICBjZGVmIHB1YmxpYyBpbnQgZXJyb3IKLSsgKiAgICAgY2RlZiBw dWJsaWMgb2JqZWN0IGRhdGEsIHJlcGx5X3VzZXJkYXRhCi0rICovCi0rCi0rLyogUHl0aG9uIHdy YXBwZXIgKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfMmlkXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8K LStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf MmlkXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKLSsgIFB5T2JqZWN0ICpfX3B5 eF9yID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOwotLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFs dWUpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X3ZhbHVlKTsKLS0gIF9fUHl4X0dPVFJFRihf X3B5eF92X3NlbGYtPmRhdGEpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7 Ci0tICBfX3B5eF92X3NlbGYtPmRhdGEgPSBfX3B5eF92X3ZhbHVlOwotKyAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBwZXIpIiwgMCk7Ci0rICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yaWRfX19nZXRfXygoKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxmKSk7Ci0g Ci0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X3IgPSAwOwotKyAgX19QeXhf UmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19weXhfcjsKLSt9Ci0rCi0rc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzJpZF9f X2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5 eF92X3NlbGYpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSsgIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCi0rICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSsgIGludCBf X3B5eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwot KyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo Il9fZ2V0X18iLCAwKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0rICBfX3B5eF90XzEg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChfX3B5eF92X3NlbGYtPmlkKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjU4LCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgX19weXhfciA9IF9fcHl4X3RfMTsK LSsgIF9fcHl4X3RfMSA9IDA7Ci0rICBnb3RvIF9fcHl4X0wwOwotKwotKyAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCi0rICBfX3B5eF9MMV9lcnJvcjo7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMSk7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5FdmVudC5p ZC5fX2dldF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 Ci0rICBfX3B5eF9yID0gTlVMTDsKLSsgIF9fcHl4X0wwOjsKLSsgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3IpOwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19w eXhfcjsKLSB9Ci0gCi0gLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfNV9fZGVsX18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzhQcm9wZXJ0eV80ZGF0YV81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9z ZWxmKSB7Ci0rc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 XzJpZF8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92 YWx1ZSk7IC8qcHJvdG8qLwotK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF8yaWRfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfdmFsdWUpIHsKLSAgIGludCBfX3B5eF9yOwotICAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fICh3cmFwcGVy KSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJv cGVydHlfNGRhdGFfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3Zfc2VsZikpOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fc2V0X18gKHdyYXBwZXIpIiwgMCk7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yaWRfMl9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3Qg KilfX3B5eF92X3ZhbHVlKSk7Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAot LXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80ZGF0 YV80X19kZWxfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eSAqX19weXhfdl9zZWxmKSB7Ci0rc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50XzJpZF8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FdmVudCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgewot ICAgaW50IF9fcHl4X3I7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVsX18iLCAwKTsKLS0gIF9fUHl4X0lOQ1JFRihQeV9O b25lKTsKLS0gIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7Ci0tICBfX1B5eF9HT1RSRUYoX19weXhf dl9zZWxmLT5kYXRhKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmRhdGEpOwotLSAg X19weXhfdl9zZWxmLT5kYXRhID0gUHlfTm9uZTsKLSsgIGVudW0gbXB2X2V2ZW50X2lkIF9fcHl4 X3RfMTsKLSsgIGludCBfX3B5eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhfZmls ZW5hbWUgPSBOVUxMOwotKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotKyAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fc2V0X18iLCAwKTsKLSsgIF9fcHl4X3RfMSA9ICgoZW51bSBtcHZf ZXZlbnRfaWQpX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2V2ZW50X2lkKF9fcHl4X3ZfdmFsdWUp KTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMjU4LCBfX3B5 eF9MMV9lcnJvcikKLSsgIF9fcHl4X3Zfc2VsZi0+aWQgPSBfX3B5eF90XzE7Ci0gCi0gICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fcHl4X3IgPSAwOwotKyAgZ290byBfX3B5eF9MMDsK LSsgIF9fcHl4X0wxX2Vycm9yOjsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxp YnMubXB2LkV2ZW50LmlkLl9fc2V0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKLSsgIF9fcHl4X3IgPSAtMTsKLSsgIF9fcHl4X0wwOjsKLSAgIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8q ICIodHJlZSBmcmFnbWVudCkiOjEKLS0gKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgY2RlZiB0dXBsZSBzdGF0ZQotLSAq ICAgICBjZGVmIG9iamVjdCBfZGljdAotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyNTkKLSsgKiAgICAgIiIiV3JhcHM6IG1wdl9ldmVudCIiIgotKyAqICAgICBjZGVmIHB1Ymxp YyBtcHZfZXZlbnRfaWQgaWQKLSsgKiAgICAgY2RlZiBwdWJsaWMgaW50IGVycm9yICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IGRhdGEsIHJl cGx5X3VzZXJkYXRhCi0rICogCi0gICovCi0gCi0gLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfMV9f cmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV8xX19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7Ci0rc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzVlcnJvcl8x X19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCi0rc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzVlcnJvcl8xX19nZXRf XyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Ci0gICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0g ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fcmVkdWNlX2N5dGhvbl9fICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfX19yZWR1Y2VfY3l0aG9uX18oKChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3Zf c2VsZikpOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBwZXIp IiwgMCk7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF81ZXJyb3JfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50ICopX19weXhfdl9zZWxmKSk7Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K LSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0g fQotIAotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQ cm9wZXJ0eV9fX3JlZHVjZV9jeXRob25fXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Qcm9wZXJ0eSAqX19weXhfdl9zZWxmKSB7Ci0tICBQeU9iamVjdCAqX19weXhfdl9z dGF0ZSA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhfdl9fZGljdCA9IDA7Ci0tICBpbnQgX19weXhf dl91c2Vfc2V0c3RhdGU7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfNUV2ZW50XzVlcnJvcl9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYpIHsKLSAgIFB5T2JqZWN0ICpfX3B5eF9y ID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0gICBQeU9iamVjdCAqX19w eXhfdF8xID0gTlVMTDsKLS0gIGludCBfX3B5eF90XzI7Ci0tICBpbnQgX19weXhfdF8zOwotLSAg UHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7Ci0tICBpbnQgX19weXhfdF81OwotLSAgUHlPYmpl Y3QgKl9fcHl4X3RfNiA9IE5VTEw7Ci0gICBpbnQgX19weXhfbGluZW5vID0gMDsKLSAgIGNvbnN0 IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAgIGludCBfX3B5eF9jbGluZW5vID0gMDsK LS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyIsIDApOwot LQotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6NQotLSAqICAgICBjZGVmIG9iamVjdCBfZGljdAot LSAqICAgICBjZGVmIGJpbnQgdXNlX3NldHN0YXRlCi0tICogICAgIHN0YXRlID0gKHNlbGYuZGF0 YSwgc2VsZi5uYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIF9kaWN0 ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKQotLSAqICAgICBpZiBfZGljdCBpcyBu b3QgTm9uZToKLS0gKi8KLS0gIF9fcHl4X3RfMSA9IFB5VHVwbGVfTmV3KDIpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fIiwgMCk7Ci0rICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOwotKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9zZWxm LT5lcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI1OSwgX19w eXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0lOQ1JF RihfX3B5eF92X3NlbGYtPmRhdGEpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYtPmRh dGEpOwotLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDAsIF9fcHl4X3Zfc2VsZi0+ZGF0 YSk7Ci0tICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5uYW1lKTsKLS0gIF9fUHl4X0dJVkVS RUYoX19weXhfdl9zZWxmLT5uYW1lKTsKLS0gIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAx LCBfX3B5eF92X3NlbGYtPm5hbWUpOwotLSAgX19weXhfdl9zdGF0ZSA9ICgoUHlPYmplY3QqKV9f cHl4X3RfMSk7Ci0rICBfX3B5eF9yID0gX19weXhfdF8xOwotICAgX19weXhfdF8xID0gMDsKLSsg IGdvdG8gX19weXhfTDA7Ci0gCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2Ci0tICogICAgIGNk ZWYgYmludCB1c2Vfc2V0c3RhdGUKLS0gKiAgICAgc3RhdGUgPSAoc2VsZi5kYXRhLCBzZWxmLm5h bWUpCi0tICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgot LSAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKLS0gKi8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4 X0dldEF0dHIzKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZGljdCwgUHlf Tm9uZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wx X2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX3B5eF92X19kaWN0ID0g X19weXhfdF8xOwotLSAgX19weXhfdF8xID0gMDsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LwotKyAgX19weXhfTDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotKyAg X19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQuZXJyb3IuX19nZXRf XyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19w eXhfciA9IE5VTEw7Ci0rICBfX3B5eF9MMDo7Ci0rICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsK LSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIF9fcHl4X3I7Ci0r fQotIAotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6NwotLSAqICAgICBzdGF0ZSA9IChzZWxmLmRh dGEsIHNlbGYubmFtZSkKLS0gKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycs IE5vbmUpCi0tICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQotLSAqICAgICAgICAgdXNl X3NldHN0YXRlID0gVHJ1ZQotLSAqLwotLSAgX19weXhfdF8yID0gKF9fcHl4X3ZfX2RpY3QgIT0g UHlfTm9uZSk7Ci0tICBfX3B5eF90XzMgPSAoX19weXhfdF8yICE9IDApOwotLSAgaWYgKF9fcHl4 X3RfMykgewotKy8qIFB5dGhvbiB3cmFwcGVyICovCi0rc3RhdGljIGludCBfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzVlcnJvcl8zX19zZXRfXyhQeU9iamVjdCAqX19weXhf dl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qcHJvdG8qLwotK3N0YXRpYyBpbnQg X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF81ZXJyb3JfM19fc2V0X18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKLSsgIGludCBf X3B5eF9yOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX3NldF9fICh3cmFwcGVyKSIsIDApOwotKyAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVycm9yXzJfX3NldF9fKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpLCAo KFB5T2JqZWN0ICopX19weXhfdl92YWx1ZSkpOwotIAotLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQp Ijo4Ci0tICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKQotLSAq ICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKLS0gKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9 IFRydWUKLS0gKiAgICAgZWxzZToKLS0gKi8KLS0gICAgX19weXhfdF8xID0gUHlUdXBsZV9OZXco MSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDgsIF9fcHl4X0wxX2Vy cm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19QeXhfSU5DUkVGKF9f cHl4X3ZfX2RpY3QpOwotLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3ZfX2RpY3QpOwotLSAgICBQ eVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMCwgX19weXhfdl9fZGljdCk7Ci0tICAgIF9fcHl4 X3RfNCA9IFB5TnVtYmVyX0luUGxhY2VBZGQoX19weXhfdl9zdGF0ZSwgX19weXhfdF8xKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMSwgOCwgX19weXhfTDFfZXJyb3IpCi0t ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKLS0gICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3N0YXRlLCAo KFB5T2JqZWN0KilfX3B5eF90XzQpKTsKLS0gICAgX19weXhfdF80ID0gMDsKLSsgIC8qIGZ1bmN0 aW9uIGV4aXQgY29kZSAqLwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICBy ZXR1cm4gX19weXhfcjsKLSt9Ci0gCi0tICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjkKLS0gKiAg ICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6Ci0tICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQot LSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgIGVsc2U6Ci0tICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBzZWxmLmRhdGEg aXMgbm90IE5vbmUgb3Igc2VsZi5uYW1lIGlzIG5vdCBOb25lCi0tICovCi0tICAgIF9fcHl4X3Zf dXNlX3NldHN0YXRlID0gMTsKLS0KLS0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6NwotLSAqICAg ICBzdGF0ZSA9IChzZWxmLmRhdGEsIHNlbGYubmFtZSkKLS0gKiAgICAgX2RpY3QgPSBnZXRhdHRy KHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCi0tICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzdGF0ZSArPSAoX2RpY3Qs KQotLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQotLSAqLwotLSAgICBnb3RvIF9fcHl4 X0wzOwotLSAgfQotLQotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKLS0gKiAgICAgICAgIHVz ZV9zZXRzdGF0ZSA9IFRydWUKLS0gKiAgICAgZWxzZToKLS0gKiAgICAgICAgIHVzZV9zZXRzdGF0 ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9uZSBvciBzZWxmLm5hbWUgaXMgbm90IE5vbmUgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBpZiB1c2Vfc2V0c3RhdGU6Ci0tICogICAg ICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAweDA1NzJk MTEsIE5vbmUpLCBzdGF0ZQotLSAqLwotLSAgLyplbHNlKi8gewotLSAgICBfX3B5eF90XzIgPSAo X19weXhfdl9zZWxmLT5kYXRhICE9IFB5X05vbmUpOwotLSAgICBfX3B5eF90XzUgPSAoX19weXhf dF8yICE9IDApOwotLSAgICBpZiAoIV9fcHl4X3RfNSkgewotLSAgICB9IGVsc2UgewotLSAgICAg IF9fcHl4X3RfMyA9IF9fcHl4X3RfNTsKLS0gICAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3Bf ZG9uZTsKLS0gICAgfQotLSAgICBfX3B5eF90XzUgPSAoX19weXhfdl9zZWxmLT5uYW1lICE9IFB5 X05vbmUpOwotLSAgICBfX3B5eF90XzIgPSAoX19weXhfdF81ICE9IDApOwotLSAgICBfX3B5eF90 XzMgPSBfX3B5eF90XzI7Ci0tICAgIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7Ci0tICAgIF9f cHl4X3ZfdXNlX3NldHN0YXRlID0gX19weXhfdF8zOwotLSAgfQotLSAgX19weXhfTDM6OwotLQot LSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKLS0gKiAgICAgZWxzZToKLS0gKiAgICAgICAgIHVz ZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9uZSBvciBzZWxmLm5hbWUgaXMgbm90IE5v bmUKLS0gKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYp LCAweDA1NzJkMTEsIE5vbmUpLCBzdGF0ZQotLSAqICAgICBlbHNlOgotLSAqLwotLSAgX19weXhf dF8zID0gKF9fcHl4X3ZfdXNlX3NldHN0YXRlICE9IDApOwotLSAgaWYgKF9fcHl4X3RfMykgewot LQotLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMwotLSAqICAgICAgICAgdXNlX3NldHN0YXRl ID0gc2VsZi5kYXRhIGlzIG5vdCBOb25lIG9yIHNlbGYubmFtZSBpcyBub3QgTm9uZQotLSAqICAg ICBpZiB1c2Vfc2V0c3RhdGU6Ci0tICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJv cGVydHksICh0eXBlKHNlbGYpLCAweDA1NzJkMTEsIE5vbmUpLCBzdGF0ZSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGVsc2U6Ci0tICogICAgICAgICByZXR1cm4gX19weXhf dW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAweDA1NzJkMTEsIHN0YXRlKQotLSAqLwot LSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxO YW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSk7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKLS0gICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tICAgIF9fcHl4X3RfMSA9IFB5VHVwbGVfTmV3KDMp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJy b3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgICBfX1B5eF9JTkNSRUYoKChQ eU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7Ci0tICAgIF9f UHl4X0dJVkVSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2Vs ZikpKSk7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCAoKFB5T2JqZWN0ICop UHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKLS0gICAgX19QeXhfSU5DUkVG KF9fcHl4X2ludF81NzEzMTY5KTsKLS0gICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRfNTcxMzE2 OSk7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAxLCBfX3B5eF9pbnRfNTcxMzE2 OSk7Ci0tICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLS0gICAgX19QeXhfR0lWRVJFRihQeV9O b25lKTsKLS0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDIsIFB5X05vbmUpOwotLSAg ICBfX3B5eF90XzYgPSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKLS0gICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzQpOwotLSAgICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfNiwgMCwgX19weXhfdF80KTsKLS0gICAgX19QeXhfR0lWRVJFRihfX3B5eF90 XzEpOwotLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNiwgMSwgX19weXhfdF8xKTsKLS0g ICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc3RhdGUpOwotLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4 X3Zfc3RhdGUpOwotLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNiwgMiwgX19weXhfdl9z dGF0ZSk7Ci0tICAgIF9fcHl4X3RfNCA9IDA7Ci0tICAgIF9fcHl4X3RfMSA9IDA7Ci0tICAgIF9f cHl4X3IgPSBfX3B5eF90XzY7Ci0tICAgIF9fcHl4X3RfNiA9IDA7Ci0tICAgIGdvdG8gX19weXhf TDA7Ci0tCi0tICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjEyCi0tICogICAgIGVsc2U6Ci0tICog ICAgICAgICB1c2Vfc2V0c3RhdGUgPSBzZWxmLmRhdGEgaXMgbm90IE5vbmUgb3Igc2VsZi5uYW1l IGlzIG5vdCBOb25lCi0tICogICAgIGlmIHVzZV9zZXRzdGF0ZTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5LCAo dHlwZShzZWxmKSwgMHgwNTcyZDExLCBOb25lKSwgc3RhdGUKLS0gKiAgICAgZWxzZToKLS0gKi8K LS0gIH0KLS0KLS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjE1Ci0tICogICAgICAgICByZXR1cm4g X19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAweDA1NzJkMTEsIE5vbmUpLCBz dGF0ZQotLSAqICAgICBlbHNlOgotLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1By b3BlcnR5LCAodHlwZShzZWxmKSwgMHgwNTcyZDExLCBzdGF0ZSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRl KToKLS0gKiAgICAgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShzZWxmLCBfX3B5 eF9zdGF0ZSkKLS0gKi8KLS0gIC8qZWxzZSovIHsKLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKLS0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19w eXhfdW5waWNrbGVfUHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigxLCAxNSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwot LSAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKLS0gICAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpKSkpOwotLSAgICBfX1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKilQ eV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOwotLSAgICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfMSwgMCwgKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZikpKSk7Ci0tICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfNTcxMzE2OSk7Ci0tICAg IF9fUHl4X0dJVkVSRUYoX19weXhfaW50XzU3MTMxNjkpOwotLSAgICBQeVR1cGxlX1NFVF9JVEVN KF9fcHl4X3RfMSwgMSwgX19weXhfaW50XzU3MTMxNjkpOwotLSAgICBfX1B5eF9JTkNSRUYoX19w eXhfdl9zdGF0ZSk7Ci0tICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zdGF0ZSk7Ci0tICAgIFB5 VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAyLCBfX3B5eF92X3N0YXRlKTsKLS0gICAgX19weXhf dF80ID0gUHlUdXBsZV9OZXcoMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDEsIDE1LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0t ICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF82KTsKLS0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5 eF90XzQsIDAsIF9fcHl4X3RfNik7Ci0tICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLS0g ICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQsIDEsIF9fcHl4X3RfMSk7Ci0tICAgIF9fcHl4 X3RfNiA9IDA7Ci0tICAgIF9fcHl4X3RfMSA9IDA7Ci0tICAgIF9fcHl4X3IgPSBfX3B5eF90XzQ7 Ci0tICAgIF9fcHl4X3RfNCA9IDA7Ci0tICAgIGdvdG8gX19weXhfTDA7Ci0tICB9Ci0tCi0tICAv KiAiKHRyZWUgZnJhZ21lbnQpIjoxCi0tICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGNkZWYgdHVwbGUgc3RhdGUKLS0g KiAgICAgY2RlZiBvYmplY3QgX2RpY3QKLS0gKi8KLStzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVycm9yXzJfX3NldF9fKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X3ZhbHVlKSB7Ci0rICBpbnQgX19weXhfcjsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCi0rICBpbnQgX19weXhfdF8xOwotKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0rICBjb25z dCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0rICBpbnQgX19weXhfY2xpbmVubyA9IDA7 Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOwotKyAgX19weXhf dF8xID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtlbHkoKF9f cHl4X3RfMSA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDI1 OSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF92X3NlbGYtPmVycm9yID0gX19weXhfdF8xOwot IAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0rICBfX3B5eF9yID0gMDsKLSsgIGdvdG8g X19weXhfTDA7Ci0gICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf MSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfNik7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Qcm9wZXJ0 eS5fX3JlZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhf ZmlsZW5hbWUpOwotLSAgX19weXhfciA9IE5VTEw7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5FdmVudC5lcnJvci5fX3NldF9fIiwgX19weXhfY2xpbmVubywgX19w eXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX3B5eF9yID0gLTE7Ci0gICBfX3B5eF9M MDo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfc3RhdGUpOwotLSAgX19QeXhfWERFQ1JFRihf X3B5eF92X19kaWN0KTsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotICAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogIih0 cmVlIGZyYWdtZW50KSI6MTYKLS0gKiAgICAgZWxzZToKLS0gKiAgICAgICAgIHJldHVybiBfX3B5 eF91bnBpY2tsZV9Qcm9wZXJ0eSwgKHR5cGUoc2VsZiksIDB4MDU3MmQxMSwgc3RhdGUpCi0tICog ZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3Rh dGUoc2VsZiwgX19weXhfc3RhdGUpCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjI2MAotKyAqICAgICBjZGVmIHB1YmxpYyBtcHZfZXZlbnRfaWQgaWQKLSsgKiAgICAgY2RlZiBw dWJsaWMgaW50IGVycm9yCi0rICogICAgIGNkZWYgcHVibGljIG9iamVjdCBkYXRhLCByZXBseV91 c2VyZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogCi0rICogICAgIEBwcm9w ZXJ0eQotICAqLwotIAotIC8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzNfX3NldHN0YXRlX2N5dGhv bl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRl KTsgLypwcm90byovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfOFByb3BlcnR5XzNfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7Ci0rc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzFfX2dldF9fKFB5T2Jq ZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfMV9fZ2V0X18oUHlPYmplY3QgKl9f cHl4X3Zfc2VsZikgewotICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotICAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRl X2N5dGhvbl9fICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfMl9fc2V0c3RhdGVfY3l0aG9uX18oKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3Zfc2VsZiksICgo UHlPYmplY3QgKilfX3B5eF92X19fcHl4X3N0YXRlKSk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhX19fZ2V0X18oKChzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZikpOwotIAotICAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfMl9fc2V0c3RhdGVfY3l0aG9uX18oc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKLStzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfX19nZXRfXyhzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdl9zZWxmKSB7Ci0g ICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9u cwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0tICBpbnQgX19weXhfbGluZW5vID0g MDsKLS0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLS0gIGludCBfX3B5eF9j bGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5 dGhvbl9fIiwgMCk7Ci0tCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNwotLSAqICAgICAgICAg cmV0dXJuIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5LCAodHlwZShzZWxmKSwgMHgwNTcyZDExLCBz dGF0ZSkKLS0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6Ci0t ICogICAgIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3Rh dGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKi8KLS0gIGlmICghKGxpa2VseShQ eVR1cGxlX0NoZWNrRXhhY3QoX19weXhfdl9fX3B5eF9zdGF0ZSkpfHwoKF9fcHl4X3ZfX19weXhf c3RhdGUpID09IFB5X05vbmUpfHwoUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkV4cGVj dGVkICUuMTZzLCBnb3QgJS4yMDBzIiwgInR1cGxlIiwgUHlfVFlQRShfX3B5eF92X19fcHl4X3N0 YXRlKS0+dHBfbmFtZSksIDApKSkgX19QWVhfRVJSKDEsIDE3LCBfX3B5eF9MMV9lcnJvcikKLS0g IF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlja2xl X1Byb3BlcnR5X19zZXRfc3RhdGUoX19weXhfdl9zZWxmLCAoKFB5T2JqZWN0KilfX3B5eF92X19f cHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDE3LCBf X3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQp IjoxNgotLSAqICAgICBlbHNlOgotLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1By b3BlcnR5LCAodHlwZShzZWxmKSwgMHgwNTcyZDExLCBzdGF0ZSkKLS0gKiBkZWYgX19zZXRzdGF0 ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShzZWxmLCBfX3B5 eF9zdGF0ZSkKLS0gKi8KLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fIiwg MCk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zf c2VsZi0+ZGF0YSk7Ci0rICBfX3B5eF9yID0gX19weXhfdl9zZWxmLT5kYXRhOwotKyAgZ290byBf X3B5eF9MMDsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19weXhfciA9IFB5 X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLS0gIGdvdG8gX19weXhfTDA7Ci0tICBfX3B5 eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9BZGRU cmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Qcm9wZXJ0eS5fX3NldHN0YXRlX2N5dGhvbl9f IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICBfX3B5 eF9yID0gTlVMTDsKLSAgIF9fcHl4X0wwOjsKLSAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwot ICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9 Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI2MwotLSAqIAotLSAqICAg ICBAcHJvcGVydHkKLS0gKiAgICAgZGVmIGVycm9yX3N0cihzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgIiIibXB2X2Vycm9yX3N0cmluZyBvZiB0aGUgZXJy b3IgcHJvZXBydHkiIiIKLS0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogZXJyX2MKLS0gKi8K LS0KLSAvKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF85ZXJyb3Jfc3RyXzFfX2dldF9fKFB5T2JqZWN0ICpf X3B5eF92X3NlbGYpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfOWVycm9yX3N0cl8xX19nZXRfXyhQeU9iamVjdCAqX19w eXhfdl9zZWxmKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0rc3RhdGljIGludCBfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzNfX3NldF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLypwcm90byovCi0rc3Rh dGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzNfX3Nl dF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7Ci0r ICBpbnQgX19weXhfcjsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3Ig PSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzllcnJvcl9zdHJfX19nZXRf XygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhf dl9zZWxmKSk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyAod3JhcHBl cikiLCAwKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2 ZW50XzRkYXRhXzJfX3NldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRXZlbnQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1ZSkpOwot IAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfOWVycm9yX3N0cl9fX2dldF9fKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYp IHsKLS0gIGNoYXIgY29uc3QgKl9fcHl4X3ZfZXJyX2M7Ci0tICBQeU9iamVjdCAqX19weXhfciA9 IE5VTEw7Ci0rc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 XzRkYXRhXzJfX3NldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2 ZW50ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7Ci0rICBpbnQgX19w eXhfcjsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBQeU9iamVjdCAqX19weXhf dF8xID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMyA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLS0gIGlu dCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxM OwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fZ2V0X18iLCAwKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9f IiwgMCk7Ci0rICBfX1B5eF9JTkNSRUYoX19weXhfdl92YWx1ZSk7Ci0rICBfX1B5eF9HSVZFUkVG KF9fcHl4X3ZfdmFsdWUpOwotKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7Ci0r ICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKLSsgIF9fcHl4X3Zfc2VsZi0+ZGF0 YSA9IF9fcHl4X3ZfdmFsdWU7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjY2Ci0tICogICAgICAgICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRoZSBlcnJvciBwcm9l cHJ0eSIiIgotLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYwotLSAqICAgICAgICAg d2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAg IGVycl9jID0gbXB2X2Vycm9yX3N0cmluZyhzZWxmLmVycm9yKQotLSAqICAgICAgICAgcmV0dXJu IF9zdHJkZWMoZXJyX2MpCi0tICovCi0tICB7Ci0tICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0t ICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7Ci0tICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0t ICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwotLSAgICAgICNlbmRpZgotLSAgICAgIC8q dHJ5OiovIHsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19weXhfciA9IDA7Ci0r ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBfX3B5eF9yOwotK30K LSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNjcKLS0gKiAg ICAgICAgIGNkZWYgY29uc3QgY2hhciogZXJyX2MKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0t ICogICAgICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKHNlbGYuZXJyb3IpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHJldHVybiBfc3RyZGVjKGVycl9j KQotLSAqIAotLSAqLwotLSAgICAgICAgX19weXhfdl9lcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmco X19weXhfdl9zZWxmLT5lcnJvcik7Ci0tICAgICAgfQotKy8qIFB5dGhvbiB3cmFwcGVyICovCi0r c3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzVf X2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KLStzdGF0aWMgaW50IF9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfNV9fZGVsX18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZikgewotKyAgaW50IF9fcHl4X3I7Ci0rICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVsX18gKHdyYXBw ZXIpIiwgMCk7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF80ZGF0YV80X19kZWxfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0V2ZW50ICopX19weXhfdl9zZWxmKSk7Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjI2NgotLSAqICAgICAgICAgIiIibXB2X2Vycm9yX3N0cmluZyBvZiB0 aGUgZXJyb3IgcHJvZXBydHkiIiIKLS0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogZXJyX2MK LS0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgICAgICBlcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmcoc2VsZi5lcnJvcikKLS0gKiAg ICAgICAgIHJldHVybiBfc3RyZGVjKGVycl9jKQotLSAqLwotLSAgICAgIC8qZmluYWxseToqLyB7 Ci0tICAgICAgICAvKm5vcm1hbCBleGl0OiovewotLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJF QUQKLS0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKLS0gICAgICAgICAgUHlfQkxP Q0tfVEhSRUFEUwotLSAgICAgICAgICAjZW5kaWYKLS0gICAgICAgICAgZ290byBfX3B5eF9MNTsK LS0gICAgICAgIH0KLS0gICAgICAgIF9fcHl4X0w1OjsKLS0gICAgICB9Ci0tICB9Ci0rICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwot KyAgcmV0dXJuIF9fcHl4X3I7Ci0rfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjI2OAotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBlcnJf YyA9IG1wdl9lcnJvcl9zdHJpbmcoc2VsZi5lcnJvcikKLS0gKiAgICAgICAgIHJldHVybiBfc3Ry ZGVjKGVycl9jKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogCi0tICogICAgIGNk ZWYgX2RhdGEoc2VsZiwgbXB2X2V2ZW50KiBldmVudCk6Ci0tICovCi0rc3RhdGljIGludCBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzRfX2RlbF9fKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYpIHsKLSsg IGludCBfX3B5eF9yOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fIiwgMCk7Ci0rICBfX1B5eF9JTkNSRUYoUHlfTm9u ZSk7Ci0rICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOwotKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zf c2VsZi0+ZGF0YSk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKLSsgIF9f cHl4X3Zfc2VsZi0+ZGF0YSA9IFB5X05vbmU7Ci0rCi0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KLSsgIF9fcHl4X3IgPSAwOwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0r ICByZXR1cm4gX19weXhfcjsKLSt9Ci0rCi0rLyogUHl0aG9uIHdyYXBwZXIgKi8KLStzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91 c2VyZGF0YV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCi0rc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVw bHlfdXNlcmRhdGFfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotKyAgUHlPYmpl Y3QgKl9fcHl4X3IgPSAwOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIsIDApOwotKyAgX19weXhf ciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0 YV9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQg KilfX3B5eF92X3NlbGYpKTsKLSsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19weXhfcjsKLSt9Ci0rCi0r c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0 cmVwbHlfdXNlcmRhdGFfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCAqX19weXhfdl9zZWxmKSB7Ci0rICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7 Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fZ2V0X18iLCAwKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICBfX1B5 eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDI2OCwgX19weXhfTDFfZXJyb3IpCi0t ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNf RnJvbVN0cmluZyhfX3B5eF92X2Vycl9jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZ WF9FUlIoMCwgMjY4LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMp OwotLSAgX19weXhfdF80ID0gTlVMTDsKLS0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg dW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLS0gICAgX19weXhfdF80ID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKLS0gICAgaWYgKGxpa2VseShfX3B5eF90XzQp KSB7Ci0tICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9f cHl4X3RfMik7Ci0tICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7Ci0tICAgICAgX19QeXhf SU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVu Y3Rpb24pOwotLSAgICB9Ci0tICB9Ci0tICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4 X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdF8zKSA6IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOwotLSAgX19QeXhf WERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAyNjgsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gIF9fcHl4X3Ig PSBfX3B5eF90XzE7Ci0tICBfX3B5eF90XzEgPSAwOwotKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zf c2VsZi0+cmVwbHlfdXNlcmRhdGEpOwotKyAgX19weXhfciA9IF9fcHl4X3Zfc2VsZi0+cmVwbHlf dXNlcmRhdGE7Ci0gICBnb3RvIF9fcHl4X0wwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjI2MwotLSAqIAotLSAqICAgICBAcHJvcGVydHkKLS0gKiAgICAgZGVmIGVy cm9yX3N0cihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAg IiIibXB2X2Vycm9yX3N0cmluZyBvZiB0aGUgZXJyb3IgcHJvZXBydHkiIiIKLS0gKiAgICAgICAg IGNkZWYgY29uc3QgY2hhciogZXJyX2MKLS0gKi8KLS0KLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLwotLSAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwot LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMp OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2 aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQuZXJyb3Jfc3RyLl9fZ2V0X18iLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fcHl4X3IgPSBOVUxMOwotICAg X19weXhfTDA6OwotICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjcwCi0tICogICAgICAgICByZXR1cm4gX3N0cmRlYyhl cnJfYykKLS0gKiAKLS0gKiAgICAgY2RlZiBfZGF0YShzZWxmLCBtcHZfZXZlbnQqIGV2ZW50KTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgY2RlZiB2b2lkKiBkYXRh ID0gZXZlbnQuZGF0YQotLSAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2Uq IGNsaW1zZwotKy8qIFB5dGhvbiB3cmFwcGVyICovCi0rc3RhdGljIGludCBfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVwbHlfdXNlcmRhdGFfM19fc2V0X18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8KLStz dGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91 c2VyZGF0YV8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhf dl92YWx1ZSkgewotKyAgaW50IF9fcHl4X3I7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9u cwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18gKHdyYXBwZXIpIiwgMCk7 Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJl cGx5X3VzZXJkYXRhXzJfX3NldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1ZSkp OwotKwotKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0rICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKLSsgIHJldHVybiBfX3B5eF9yOwotK30KLSsKLStzdGF0aWMgaW50IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV8yX19zZXRf XyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdl9z ZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgewotKyAgaW50IF9fcHl4X3I7Ci0rICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9f c2V0X18iLCAwKTsKLSsgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlKTsKLSsgIF9fUHl4X0dJ VkVSRUYoX19weXhfdl92YWx1ZSk7Ci0rICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5yZXBs eV91c2VyZGF0YSk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0 YSk7Ci0rICBfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhID0gX19weXhfdl92YWx1ZTsKLSsK LSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19weXhfciA9IDA7Ci0rICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBfX3B5eF9yOwotK30KLSsKLSsvKiBQ eXRob24gd3JhcHBlciAqLwotK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYpOyAvKnByb3RvKi8KLStzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxm KSB7Ci0rICBpbnQgX19weXhfcjsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0rICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyAod3JhcHBlcikiLCAwKTsKLSsgIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVwbHlfdXNl cmRhdGFfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudCAqKV9fcHl4X3Zfc2VsZikpOwotKwotKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0r ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBfX3B5eF9yOwotK30K LSsKLStzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRy ZXBseV91c2VyZGF0YV80X19kZWxfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCAqX19weXhfdl9zZWxmKSB7Ci0rICBpbnQgX19weXhfcjsKLSsgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxf XyIsIDApOwotKyAgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotKyAgX19QeXhfR0lWRVJFRihQeV9O b25lKTsKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKLSsg IF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKLSsgIF9fcHl4X3Zf c2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBQeV9Ob25lOwotKwotKyAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCi0rICBfX3B5eF9yID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OwotKyAgcmV0dXJuIF9fcHl4X3I7Ci0rfQotKwotKy8qICIodHJlZSBmcmFnbWVudCkiOjEKLSsg KiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiAgICAgY2RlZiB0dXBsZSBzdGF0ZQotKyAqICAgICBjZGVmIG9iamVjdCBfZGljdAot ICAqLwotIAotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf NUV2ZW50X19kYXRhKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50 ICpfX3B5eF92X3NlbGYsIHN0cnVjdCBtcHZfZXZlbnQgKl9fcHl4X3ZfZXZlbnQpIHsKLS0gIHZv aWQgKl9fcHl4X3ZfZGF0YTsKLS0gIHN0cnVjdCBtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UgKl9f cHl4X3ZfY2xpbXNnOwotLSAgUHlPYmplY3QgKl9fcHl4X3ZfYXJncyA9IE5VTEw7Ci0tICBpbnQg X19weXhfdl9udW1fYXJnczsKLS0gIGludCBfX3B5eF92X2k7Ci0tICBQeU9iamVjdCAqX19weXhf dl9hcmcgPSBOVUxMOwotKy8qIFB5dGhvbiB3cmFwcGVyICovCi0rc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzFfX3JlZHVjZV9jeXRob25fXyhQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAv KnByb3RvKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfMV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhP Tl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgewotKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwot KyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfX3JlZHVjZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19fcmVkdWNlX2N5dGhvbl9fKCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYp KTsKLSsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19weXhfcjsKLSt9Ci0rCi0rc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19fcmVkdWNlX2N5dGhvbl9f KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3Nl bGYpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X3N0YXRlID0gMDsKLSsgIFB5T2JqZWN0ICpfX3B5 eF92X19kaWN0ID0gMDsKLSsgIGludCBfX3B5eF92X3VzZV9zZXRzdGF0ZTsKLSAgIFB5T2JqZWN0 ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICB2b2lk ICpfX3B5eF90XzE7Ci0rICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSAgIFB5T2JqZWN0 ICpfX3B5eF90XzIgPSBOVUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0gICBp bnQgX19weXhfdF80OwotICAgaW50IF9fcHl4X3RfNTsKLSAgIGludCBfX3B5eF90XzY7Ci0tICBQ eU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKLS0gIGludCBfX3B5eF90Xzg7Ci0gICBpbnQgX19w eXhfbGluZW5vID0gMDsKLSAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAg IGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf ZGF0YSIsIDApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhv bl9fIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjcxCi0t ICogCi0tICogICAgIGNkZWYgX2RhdGEoc2VsZiwgbXB2X2V2ZW50KiBldmVudCk6Ci0tICogICAg ICAgICBjZGVmIHZvaWQqIGRhdGEgPSBldmVudC5kYXRhICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLS0gKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKiBjbGltc2cK LS0gKiAgICAgICAgIGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWToK LSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjUKLSsgKiAgICAgY2RlZiBvYmplY3QgX2RpY3QKLSsg KiAgICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQotKyAqICAgICBzdGF0ZSA9IChzZWxmLmRhdGEs IHNlbGYuZXJyb3IsIHNlbGYuaWQsIHNlbGYucmVwbHlfdXNlcmRhdGEpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycs IE5vbmUpCi0rICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgotICAqLwotLSAgX19weXhfdF8x ID0gX19weXhfdl9ldmVudC0+ZGF0YTsKLS0gIF9fcHl4X3ZfZGF0YSA9IF9fcHl4X3RfMTsKLSsg IF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3Zfc2VsZi0+ZXJyb3IpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikK LSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoX19weXhfdl9zZWxmLT5pZCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09U UkVGKF9fcHl4X3RfMik7Ci0rICBfX3B5eF90XzMgPSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5 eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPmRhdGEp OwotKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYtPmRhdGEpOwotKyAgUHlUdXBsZV9TRVRf SVRFTShfX3B5eF90XzMsIDAsIF9fcHl4X3Zfc2VsZi0+ZGF0YSk7Ci0rICBfX1B5eF9HSVZFUkVG KF9fcHl4X3RfMSk7Ci0rICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMSwgX19weXhfdF8x KTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8yKTsKLSsgIFB5VHVwbGVfU0VUX0lURU0oX19w eXhfdF8zLCAyLCBfX3B5eF90XzIpOwotKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+cmVw bHlfdXNlcmRhdGEpOwotKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJk YXRhKTsKLSsgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8zLCAzLCBfX3B5eF92X3NlbGYtPnJl cGx5X3VzZXJkYXRhKTsKLSsgIF9fcHl4X3RfMSA9IDA7Ci0rICBfX3B5eF90XzIgPSAwOwotKyAg X19weXhfdl9zdGF0ZSA9ICgoUHlPYmplY3QqKV9fcHl4X3RfMyk7Ci0rICBfX3B5eF90XzMgPSAw OwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3MwotLSAqICAgICAg ICAgY2RlZiB2b2lkKiBkYXRhID0gZXZlbnQuZGF0YQotLSAqICAgICAgICAgY2RlZiBtcHZfZXZl bnRfY2xpZW50X21lc3NhZ2UqIGNsaW1zZwotLSAqICAgICAgICAgaWYgc2VsZi5pZCA9PSBNUFZf RVZFTlRfR0VUX1BST1BFUlRZX1JFUExZOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0 eSo+ZGF0YSkKLS0gKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfUFJPUEVSVFlf Q0hBTkdFOgotLSAqLwotLSAgc3dpdGNoIChfX3B5eF92X3NlbGYtPmlkKSB7Ci0tICAgIGNhc2Ug TVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWToKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjI3NAotLSAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21l c3NhZ2UqIGNsaW1zZwotLSAqICAgICAgICAgaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BS T1BFUlRZX1JFUExZOgotLSAqICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSgpLl9pbml0KDxt cHZfZXZlbnRfcHJvcGVydHkqPmRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgotLSAq ICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSgpLl9pbml0KDxtcHZfZXZlbnRfcHJvcGVydHkq PmRhdGEpCi0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2Ci0rICogICAgIGNkZWYgYmludCB1c2Vf c2V0c3RhdGUKLSsgKiAgICAgc3RhdGUgPSAoc2VsZi5kYXRhLCBzZWxmLmVycm9yLCBzZWxmLmlk LCBzZWxmLnJlcGx5X3VzZXJkYXRhKQotKyAqICAgICBfZGljdCA9IGdldGF0dHIoc2VsZiwgJ19f ZGljdF9fJywgTm9uZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBpZiBf ZGljdCBpcyBub3QgTm9uZToKLSsgKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpCi0gICovCi0t ICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2Jq ZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X1Byb3BlcnR5KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDI3 NCwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgICBf X3B5eF90XzMgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Qcm9wZXJ0eSAqKSgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJv cGVydHkgKilfX3B5eF90XzIpLT5fX3B5eF92dGFiKS0+X2luaXQoKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3RfMiksICgoc3RydWN0IG1w dl9ldmVudF9wcm9wZXJ0eSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MykpIF9fUFlYX0VSUigwLCAyNzQsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8zKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 Ci0tICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7Ci0tICAgIF9fcHl4X3RfMyA9IDA7Ci0tICAgIGdv dG8gX19weXhfTDA7Ci0rICBfX3B5eF90XzMgPSBfX1B5eF9HZXRBdHRyMygoKFB5T2JqZWN0ICop X19weXhfdl9zZWxmKSwgX19weXhfbl9zX2RpY3QsIFB5X05vbmUpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJF RihfX3B5eF90XzMpOwotKyAgX19weXhfdl9fZGljdCA9IF9fcHl4X3RfMzsKLSsgIF9fcHl4X3Rf MyA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzMKLS0g KiAgICAgICAgIGNkZWYgdm9pZCogZGF0YSA9IGV2ZW50LmRhdGEKLS0gKiAgICAgICAgIGNkZWYg bXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKiBjbGltc2cKLS0gKiAgICAgICAgIGlmIHNlbGYuaWQg PT0gTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSgpLl9pbml0KDxtcHZfZXZlbnRf cHJvcGVydHkqPmRhdGEpCi0tICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX1BS T1BFUlRZX0NIQU5HRToKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjcKLSsgKiAgICAgc3RhdGUg PSAoc2VsZi5kYXRhLCBzZWxmLmVycm9yLCBzZWxmLmlkLCBzZWxmLnJlcGx5X3VzZXJkYXRhKQot KyAqICAgICBfZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKLSsgKiAgICAg aWYgX2RpY3QgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgIHN0YXRlICs9IChfZGljdCwpCi0rICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVl Ci0gICovCi0tICAgIGJyZWFrOwotLSAgICBjYXNlIE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6 Ci0rICBfX3B5eF90XzQgPSAoX19weXhfdl9fZGljdCAhPSBQeV9Ob25lKTsKLSsgIF9fcHl4X3Rf NSA9IChfX3B5eF90XzQgIT0gMCk7Ci0rICBpZiAoX19weXhfdF81KSB7Ci0gCi0tICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzYKLS0gKiAgICAgICAgICAgICByZXR1cm4g UHJvcGVydHkoKS5faW5pdCg8bXB2X2V2ZW50X3Byb3BlcnR5Kj5kYXRhKQotLSAqICAgICAgICAg ZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6Ci0tICogICAgICAgICAg ICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1Q Vl9FVkVOVF9MT0dfTUVTU0FHRToKLS0gKiAgICAgICAgICAgICByZXR1cm4gTG9nTWVzc2FnZSgp Ll9pbml0KDxtcHZfZXZlbnRfbG9nX21lc3NhZ2UqPmRhdGEpCi0rICAgIC8qICIodHJlZSBmcmFn bWVudCkiOjgKLSsgKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUp Ci0rICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgotKyAqICAgICAgICAgc3RhdGUgKz0gKF9k aWN0LCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgdXNlX3NldHN0 YXRlID0gVHJ1ZQotKyAqICAgICBlbHNlOgotICAqLwotLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3IpOwotLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVj dCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSkpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyNzYsIF9fcHl4X0wxX2Vycm9yKQotKyAg ICBfX3B5eF90XzMgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBf X1BZWF9FUlIoMSwgOCwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzMpOwotLSAgICBfX3B5eF90XzIgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKSgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF90XzMpLT5fX3B5eF92dGFiKS0+X2luaXQoKChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3RfMyks ICgoc3RydWN0IG1wdl9ldmVudF9wcm9wZXJ0eSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyNzYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBf X1B5eF9JTkNSRUYoX19weXhfdl9fZGljdCk7Ci0rICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9f ZGljdCk7Ci0rICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8zLCAwLCBfX3B5eF92X19kaWN0 KTsKLSsgICAgX19weXhfdF8yID0gUHlOdW1iZXJfSW5QbGFjZUFkZChfX3B5eF92X3N0YXRlLCBf X3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA4LCBfX3B5 eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0gICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgICBfX3B5eF9yID0gX19weXhfdF8y OwotKyAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Zfc3RhdGUsICgoUHlPYmplY3QqKV9fcHl4 X3RfMikpOwotICAgICBfX3B5eF90XzIgPSAwOwotLSAgICBnb3RvIF9fcHl4X0wwOwotIAotLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjc1Ci0tICogICAgICAgICBpZiBz ZWxmLmlkID09IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFk6Ci0tICogICAgICAgICAgICAg cmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKLS0gKiAg ICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KCku X2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKLS0gKiAgICAgICAgIGVsaWYgc2VsZi5p ZCA9PSBNUFZfRVZFTlRfTE9HX01FU1NBR0U6Ci0rICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjkK LSsgKiAgICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6Ci0rICogICAgICAgICBzdGF0ZSArPSAoX2Rp Y3QsKQotKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgIGVsc2U6Ci0rICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBzZWxm LmRhdGEgaXMgbm90IE5vbmUgb3Igc2VsZi5yZXBseV91c2VyZGF0YSBpcyBub3QgTm9uZQotICAq LwotLSAgICBicmVhazsKLS0gICAgY2FzZSBNUFZfRVZFTlRfTE9HX01FU1NBR0U6Ci0rICAgIF9f cHl4X3ZfdXNlX3NldHN0YXRlID0gMTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjI3OAotLSAqICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSgpLl9pbml0KDxt cHZfZXZlbnRfcHJvcGVydHkqPmRhdGEpCi0tICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBW X0VWRU5UX0xPR19NRVNTQUdFOgotLSAqICAgICAgICAgICAgIHJldHVybiBMb2dNZXNzYWdlKCku X2luaXQoPG1wdl9ldmVudF9sb2dfbWVzc2FnZSo+ZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9TQ1JJUFRfSU5Q VVRfRElTUEFUQ0g6Ci0tICogICAgICAgICAgICAgcmV0dXJuIElucHV0RGlzcGF0Y2goKS5faW5p dCg8bXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0YSkKLSsgICAgLyogIih0cmVl IGZyYWdtZW50KSI6NwotKyAqICAgICBzdGF0ZSA9IChzZWxmLmRhdGEsIHNlbGYuZXJyb3IsIHNl bGYuaWQsIHNlbGYucmVwbHlfdXNlcmRhdGEpCi0rICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxm LCAnX19kaWN0X18nLCBOb25lKQotKyAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKLSsg KiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUKLSsgKi8KLSsgICAgZ290byBfX3B5eF9MMzsK LSsgIH0KLSsKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjExCi0rICogICAgICAgICB1c2Vfc2V0 c3RhdGUgPSBUcnVlCi0rICogICAgIGVsc2U6Ci0rICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBz ZWxmLmRhdGEgaXMgbm90IE5vbmUgb3Igc2VsZi5yZXBseV91c2VyZGF0YSBpcyBub3QgTm9uZSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGlmIHVzZV9zZXRzdGF0ZToKLSsg KiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9FdmVudCwgKHR5cGUoc2VsZiksIDB4ZGEz OGMyNSwgTm9uZSksIHN0YXRlCi0rICovCi0rICAvKmVsc2UqLyB7Ci0rICAgIF9fcHl4X3RfNCA9 IChfX3B5eF92X3NlbGYtPmRhdGEgIT0gUHlfTm9uZSk7Ci0rICAgIF9fcHl4X3RfNiA9IChfX3B5 eF90XzQgIT0gMCk7Ci0rICAgIGlmICghX19weXhfdF82KSB7Ci0rICAgIH0gZWxzZSB7Ci0rICAg ICAgX19weXhfdF81ID0gX19weXhfdF82OwotKyAgICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5v cF9kb25lOwotKyAgICB9Ci0rICAgIF9fcHl4X3RfNiA9IChfX3B5eF92X3NlbGYtPnJlcGx5X3Vz ZXJkYXRhICE9IFB5X05vbmUpOwotKyAgICBfX3B5eF90XzQgPSAoX19weXhfdF82ICE9IDApOwot KyAgICBfX3B5eF90XzUgPSBfX3B5eF90XzQ7Ci0rICAgIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9u ZTo7Ci0rICAgIF9fcHl4X3ZfdXNlX3NldHN0YXRlID0gX19weXhfdF81OwotKyAgfQotKyAgX19w eXhfTDM6OwotKwotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKLSsgKiAgICAgZWxzZToKLSsg KiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9uZSBvciBzZWxmLnJl cGx5X3VzZXJkYXRhIGlzIG5vdCBOb25lCi0rICogICAgIGlmIHVzZV9zZXRzdGF0ZTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xl X0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBOb25lKSwgc3RhdGUKLSsgKiAgICAgZWxz ZToKLSsgKi8KLSsgIF9fcHl4X3RfNSA9IChfX3B5eF92X3VzZV9zZXRzdGF0ZSAhPSAwKTsKLSsg IGlmIChfX3B5eF90XzUpIHsKLSsKLSsgICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKLSsgKiAg ICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9uZSBvciBzZWxmLnJlcGx5 X3VzZXJkYXRhIGlzIG5vdCBOb25lCi0rICogICAgIGlmIHVzZV9zZXRzdGF0ZToKLSsgKiAgICAg ICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9FdmVudCwgKHR5cGUoc2VsZiksIDB4ZGEzOGMyNSwg Tm9uZSksIHN0YXRlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgZWxzZToK LSsgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9FdmVudCwgKHR5cGUoc2VsZiksIDB4 ZGEzOGMyNSwgc3RhdGUpCi0gICovCi0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICAg IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhf cHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UpKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjc4LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19weXhfdW5waWNrbGVfRXZl bnQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFf ZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgICBfX3B5eF90XzMgPSAo KHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl ICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICop X19weXhfdF8yKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3RfMiksICgoc3RydWN0IG1wdl9ldmVu dF9sb2dfbWVzc2FnZSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykp IF9fUFlYX0VSUigwLCAyNzgsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzMgPSBQeVR1 cGxlX05ldygzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgMTMsIF9f cHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICAgIF9fcHl4X3IgPSBfX3B5eF90 XzM7Ci0rICAgIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICop X19weXhfdl9zZWxmKSkpKTsKLSsgICAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopUHlfVFlQ RSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKLSsgICAgUHlUdXBsZV9TRVRfSVRFTShf X3B5eF90XzMsIDAsICgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3Nl bGYpKSkpOwotKyAgICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzIyODgyMjA1Myk7Ci0rICAgIF9f UHl4X0dJVkVSRUYoX19weXhfaW50XzIyODgyMjA1Myk7Ci0rICAgIFB5VHVwbGVfU0VUX0lURU0o X19weXhfdF8zLCAxLCBfX3B5eF9pbnRfMjI4ODIyMDUzKTsKLSsgICAgX19QeXhfSU5DUkVGKFB5 X05vbmUpOwotKyAgICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOwotKyAgICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfMywgMiwgUHlfTm9uZSk7Ci0rICAgIF9fcHl4X3RfMSA9IFB5VHVwbGVfTmV3 KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFf ZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICBfX1B5eF9HSVZFUkVG KF9fcHl4X3RfMik7Ci0rICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCBfX3B5eF90 XzIpOwotKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMyk7Ci0rICAgIFB5VHVwbGVfU0VUX0lU RU0oX19weXhfdF8xLCAxLCBfX3B5eF90XzMpOwotKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9z dGF0ZSk7Ci0rICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zdGF0ZSk7Ci0rICAgIFB5VHVwbGVf U0VUX0lURU0oX19weXhfdF8xLCAyLCBfX3B5eF92X3N0YXRlKTsKLSsgICAgX19weXhfdF8yID0g MDsKLSAgICAgX19weXhfdF8zID0gMDsKLSsgICAgX19weXhfciA9IF9fcHl4X3RfMTsKLSsgICAg X19weXhfdF8xID0gMDsKLSAgICAgZ290byBfX3B5eF9MMDsKLSAKLS0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjI3NwotLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1Q Vl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6Ci0tICogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5 KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKLS0gKiAgICAgICAgIGVsaWYgc2Vs Zi5pZCA9PSBNUFZfRVZFTlRfTE9HX01FU1NBR0U6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgICAgICAgICByZXR1cm4gTG9nTWVzc2FnZSgpLl9pbml0KDxtcHZfZXZlbnRf bG9nX21lc3NhZ2UqPmRhdGEpCi0tICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5U X1NDUklQVF9JTlBVVF9ESVNQQVRDSDoKLSsgICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKLSsg KiAgICAgZWxzZToKLSsgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3Qg Tm9uZSBvciBzZWxmLnJlcGx5X3VzZXJkYXRhIGlzIG5vdCBOb25lCi0rICogICAgIGlmIHVzZV9z ZXRzdGF0ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJu IF9fcHl4X3VucGlja2xlX0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBOb25lKSwgc3Rh dGUKLSsgKiAgICAgZWxzZToKLSAgKi8KLS0gICAgYnJlYWs7Ci0tICAgIGNhc2UgTVBWX0VWRU5U X1NDUklQVF9JTlBVVF9ESVNQQVRDSDoKLSsgIH0KLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjI4MAotLSAqICAgICAgICAgICAgIHJldHVybiBMb2dNZXNzYWdlKCku X2luaXQoPG1wdl9ldmVudF9sb2dfbWVzc2FnZSo+ZGF0YSkKLS0gKiAgICAgICAgIGVsaWYgc2Vs Zi5pZCA9PSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENIOgotLSAqICAgICAgICAgICAg IHJldHVybiBJbnB1dERpc3BhdGNoKCkuX2luaXQoPG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlz cGF0Y2gqPmRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGVs aWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0U6Ci0tICogICAgICAgICAgICAg Y2xpbXNnID0gPG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSo+ZGF0YQotKyAgLyogIih0cmVlIGZy YWdtZW50KSI6MTUKLSsgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9FdmVudCwgKHR5 cGUoc2VsZiksIDB4ZGEzOGMyNSwgTm9uZSksIHN0YXRlCi0rICogICAgIGVsc2U6Ci0rICogICAg ICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0eXBlKHNlbGYpLCAweGRhMzhjMjUs IHN0YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogZGVmIF9fc2V0c3RhdGVf Y3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgotKyAqICAgICBfX3B5eF91bnBpY2tsZV9FdmVu dF9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQotICAqLwotKyAgLyplbHNlKi8gewotICAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVj dF9DYWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9JbnB1dERpc3BhdGNoKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDI4MCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF8xLCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX0V2ZW50KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKLSsgICAgX19weXhfdF8zID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxp a2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDE1LCBfX3B5eF9MMV9lcnJvcikKLSAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4 X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKikoKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKilfX3B5eF90 XzMpLT5fX3B5eF92dGFiKS0+X2luaXQoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9JbnB1dERpc3BhdGNoICopX19weXhfdF8zKSwgKChzdHJ1Y3QgbXB2X2V2ZW50X3Nj cmlwdF9pbnB1dF9kaXNwYXRjaCAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCAyODAsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9JTkNS RUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7Ci0r ICAgIF9fUHl4X0dJVkVSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZikpKSk7Ci0rICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8zLCAwLCAoKFB5T2Jq ZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKLSsgICAgX19QeXhf SU5DUkVGKF9fcHl4X2ludF8yMjg4MjIwNTMpOwotKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X2lu dF8yMjg4MjIwNTMpOwotKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMSwgX19weXhf aW50XzIyODgyMjA1Myk7Ci0rICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3N0YXRlKTsKLSsgICAg X19QeXhfR0lWRVJFRihfX3B5eF92X3N0YXRlKTsKLSsgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5 eF90XzMsIDIsIF9fcHl4X3Zfc3RhdGUpOwotKyAgICBfX3B5eF90XzIgPSBQeVR1cGxlX05ldygy KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vy cm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsK LSsgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzIsIDAsIF9fcHl4X3RfMSk7Ci0rICAgIF9f UHl4X0dJVkVSRUYoX19weXhfdF8zKTsKLSsgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzIs IDEsIF9fcHl4X3RfMyk7Ci0rICAgIF9fcHl4X3RfMSA9IDA7Ci0rICAgIF9fcHl4X3RfMyA9IDA7 Ci0gICAgIF9fcHl4X3IgPSBfX3B5eF90XzI7Ci0gICAgIF9fcHl4X3RfMiA9IDA7Ci0gICAgIGdv dG8gX19weXhfTDA7Ci0rICB9Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoyNzkKLS0gKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfTE9HX01FU1NB R0U6Ci0tICogICAgICAgICAgICAgcmV0dXJuIExvZ01lc3NhZ2UoKS5faW5pdCg8bXB2X2V2ZW50 X2xvZ19tZXNzYWdlKj5kYXRhKQotLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVO VF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0g6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgICAgICByZXR1cm4gSW5wdXREaXNwYXRjaCgpLl9pbml0KDxtcHZfZXZlbnRfc2Ny aXB0X2lucHV0X2Rpc3BhdGNoKj5kYXRhKQotLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1Q Vl9FVkVOVF9DTElFTlRfTUVTU0FHRToKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjEKLSsgKiBk ZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgY2RlZiB0dXBsZSBzdGF0ZQotKyAqICAgICBjZGVmIG9iamVjdCBfZGljdAotICAq LwotLSAgICBicmVhazsKLS0gICAgY2FzZSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0U6Ci0gCi0t ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyODIKLS0gKiAgICAgICAgICAg ICByZXR1cm4gSW5wdXREaXNwYXRjaCgpLl9pbml0KDxtcHZfZXZlbnRfc2NyaXB0X2lucHV0X2Rp c3BhdGNoKj5kYXRhKQotLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9DTElF TlRfTUVTU0FHRToKLS0gKiAgICAgICAgICAgICBjbGltc2cgPSA8bXB2X2V2ZW50X2NsaWVudF9t ZXNzYWdlKj5kYXRhICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAg ICBhcmdzID0gW10KLS0gKiAgICAgICAgICAgICBudW1fYXJncyA9IGNsaW1zZy5udW1fYXJncwot LSAqLwotLSAgICBfX3B5eF92X2NsaW1zZyA9ICgoc3RydWN0IG1wdl9ldmVudF9jbGllbnRfbWVz c2FnZSAqKV9fcHl4X3ZfZGF0YSk7Ci0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9f cHl4X0wxX2Vycm9yOjsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8yKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKLSsgIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkV2ZW50Ll9fcmVkdWNlX2N5dGhvbl9f IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX3B5 eF9yID0gTlVMTDsKLSsgIF9fcHl4X0wwOjsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdl9zdGF0 ZSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX2RpY3QpOwotKyAgX19QeXhfWEdJVkVSRUYo X19weXhfcik7Ci0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBf X3B5eF9yOwotK30KLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4 MwotLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9DTElFTlRfTUVTU0FHRToK LS0gKiAgICAgICAgICAgICBjbGltc2cgPSA8bXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKj5kYXRh Ci0tICogICAgICAgICAgICAgYXJncyA9IFtdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgICAgICAgICBudW1fYXJncyA9IGNsaW1zZy5udW1fYXJncwotLSAqICAgICAgICAg ICAgIGZvciBpIGluIHJhbmdlKG51bV9hcmdzKToKLSsvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNgot KyAqICAgICBlbHNlOgotKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0V2ZW50LCAo dHlwZShzZWxmKSwgMHhkYTM4YzI1LCBzdGF0ZSkKLSsgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25f XyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShzZWxmLCBfX3B5eF9zdGF0ZSkKLSAg Ki8KLS0gICAgX19weXhfdF8yID0gUHlMaXN0X05ldygwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgMjgzLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7Ci0tICAgIF9fcHl4X3ZfYXJncyA9ICgoUHlPYmplY3QqKV9fcHl4X3RfMik7 Ci0tICAgIF9fcHl4X3RfMiA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyODQKLS0gKiAgICAgICAgICAgICBjbGltc2cgPSA8bXB2X2V2ZW50X2NsaWVudF9t ZXNzYWdlKj5kYXRhCi0tICogICAgICAgICAgICAgYXJncyA9IFtdCi0tICogICAgICAgICAgICAg bnVtX2FyZ3MgPSBjbGltc2cubnVtX2FyZ3MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG51bV9hcmdzKToKLS0gKiAgICAgICAgICAg ICAgICAgYXJnID0gPGNoYXIqPmNsaW1zZy5hcmdzW2ldCi0tICovCi0tICAgIF9fcHl4X3RfNCA9 IF9fcHl4X3ZfY2xpbXNnLT5udW1fYXJnczsKLS0gICAgX19weXhfdl9udW1fYXJncyA9IF9fcHl4 X3RfNDsKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NQotLSAq ICAgICAgICAgICAgIGFyZ3MgPSBbXQotLSAqICAgICAgICAgICAgIG51bV9hcmdzID0gY2xpbXNn Lm51bV9hcmdzCi0tICogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtX2FyZ3MpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgIGFyZyA9IDxjaGFy Kj5jbGltc2cuYXJnc1tpXQotLSAqICAgICAgICAgICAgICAgICBhcmcgPSBfc3RyZGVjKGFyZykK LS0gKi8KLS0gICAgX19weXhfdF80ID0gX19weXhfdl9udW1fYXJnczsKLS0gICAgX19weXhfdF81 ID0gX19weXhfdF80OwotLSAgICBmb3IgKF9fcHl4X3RfNiA9IDA7IF9fcHl4X3RfNiA8IF9fcHl4 X3RfNTsgX19weXhfdF82Kz0xKSB7Ci0tICAgICAgX19weXhfdl9pID0gX19weXhfdF82OwotLQot LSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyODYKLS0gKiAgICAgICAg ICAgICBudW1fYXJncyA9IGNsaW1zZy5udW1fYXJncwotLSAqICAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKG51bV9hcmdzKToKLS0gKiAgICAgICAgICAgICAgICAgYXJnID0gPGNoYXIqPmNsaW1z Zy5hcmdzW2ldICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAg ICAgYXJnID0gX3N0cmRlYyhhcmcpCi0tICogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFy ZykKLS0gKi8KLS0gICAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoKChj aGFyICopKF9fcHl4X3ZfY2xpbXNnLT5hcmdzW19fcHl4X3ZfaV0pKSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDI4NiwgX19weXhfTDFfZXJyb3IpCi0tICAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgICAgX19QeXhfWERFQ1JFRl9TRVQoX19weXhfdl9h cmcsIF9fcHl4X3RfMik7Ci0tICAgICAgX19weXhfdF8yID0gMDsKLS0KLS0gICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg3Ci0tICogICAgICAgICAgICAgZm9yIGkgaW4g cmFuZ2UobnVtX2FyZ3MpOgotLSAqICAgICAgICAgICAgICAgICBhcmcgPSA8Y2hhcio+Y2xpbXNn LmFyZ3NbaV0KLS0gKiAgICAgICAgICAgICAgICAgYXJnID0gX3N0cmRlYyhhcmcpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoYXJn KQotLSAqICAgICAgICAgICAgIHJldHVybiBhcmdzCi0tICovCi0tICAgICAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZShfX3B5eF90XzMsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyODcsIF9fcHl4X0wxX2Vycm9yKQotLSAgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgICAgIF9fcHl4X3RfNyA9IE5VTEw7Ci0tICAgICAg aWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5 eF90XzMpKSkgewotLSAgICAgICAgX19weXhfdF83ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhf dF8zKTsKLS0gICAgICAgIGlmIChsaWtlbHkoX19weXhfdF83KSkgewotLSAgICAgICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8zKTsKLS0gICAg ICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNyk7Ci0tICAgICAgICAgIF9fUHl4X0lOQ1JFRihm dW5jdGlvbik7Ci0tICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlv bik7Ci0tICAgICAgICB9Ci0tICAgICAgfQotLSAgICAgIF9fcHl4X3RfMiA9IChfX3B5eF90Xzcp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMywgX19weXhfdF83LCBfX3B5eF92 X2FyZykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdl9hcmcp OwotLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLS0gICAg ICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyODcsIF9fcHl4X0wxX2Vy cm9yKQotLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19w eXhfdl9hcmcsIF9fcHl4X3RfMik7Ci0tICAgICAgX19weXhfdF8yID0gMDsKLS0KLS0gICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg4Ci0tICogICAgICAgICAgICAgICAg IGFyZyA9IDxjaGFyKj5jbGltc2cuYXJnc1tpXQotLSAqICAgICAgICAgICAgICAgICBhcmcgPSBf c3RyZGVjKGFyZykKLS0gKiAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoYXJnKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcmV0dXJuIGFyZ3MKLS0gKiAg ICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfRU5EX0ZJTEU6Ci0tICovCi0tICAgICAg X19weXhfdF84ID0gX19QeXhfUHlMaXN0X0FwcGVuZChfX3B5eF92X2FyZ3MsIF9fcHl4X3ZfYXJn KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfOCA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMCwgMjg4 LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgfQotKy8qIFB5dGhvbiB3cmFwcGVyICovCi0rc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzNfX3NldHN0 YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19f cHl4X3N0YXRlKTsgLypwcm90byovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzNfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7Ci0rICBQeU9iamVjdCAq X19weXhfciA9IDA7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7Ci0r ICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yX19zZXRz dGF0ZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2 ZW50ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsK LSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4OQotLSAqICAgICAg ICAgICAgICAgICBhcmcgPSBfc3RyZGVjKGFyZykKLS0gKiAgICAgICAgICAgICAgICAgYXJncy5h cHBlbmQoYXJnKQotLSAqICAgICAgICAgICAgIHJldHVybiBhcmdzICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfRU5EX0ZJ TEU6Ci0tICogICAgICAgICAgICAgcmV0dXJuIEVuZE9mRmlsZVJlYWNoZWQoKS5faW5pdCg8bXB2 X2V2ZW50X2VuZF9maWxlKj5kYXRhKQotLSAqLwotLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Ip OwotLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9hcmdzKTsKLS0gICAgX19weXhfciA9IF9fcHl4 X3ZfYXJnczsKLS0gICAgZ290byBfX3B5eF9MMDsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19weXhfcjsK LSt9Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyODEKLS0gKiAg ICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENIOgot LSAqICAgICAgICAgICAgIHJldHVybiBJbnB1dERpc3BhdGNoKCkuX2luaXQoPG1wdl9ldmVudF9z Y3JpcHRfaW5wdXRfZGlzcGF0Y2gqPmRhdGEpCi0tICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0g TVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogICAgICAgICAgICAgY2xpbXNnID0gPG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSo+ZGF0YQot LSAqICAgICAgICAgICAgIGFyZ3MgPSBbXQotLSAqLwotLSAgICBicmVhazsKLS0gICAgY2FzZSBN UFZfRVZFTlRfRU5EX0ZJTEU6Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50XzJfX3NldHN0YXRlX2N5dGhvbl9fKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X19fcHl4X3N0YXRlKSB7Ci0rICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0rICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0r ICBpbnQgX19weXhfbGluZW5vID0gMDsKLSsgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKLSsgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fIiwgMCk7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyOTEKLS0gKiAgICAgICAgICAgICByZXR1cm4gYXJncwotLSAq ICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9FTkRfRklMRToKLS0gKiAgICAgICAg ICAgICByZXR1cm4gRW5kT2ZGaWxlUmVhY2hlZCgpLl9pbml0KDxtcHZfZXZlbnRfZW5kX2ZpbGUq PmRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHJldHVybiBO b25lCi0tICogCi0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNwotKyAqICAgICAgICAgcmV0dXJu IF9fcHl4X3VucGlja2xlX0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBzdGF0ZSkKLSsg KiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6Ci0rICogICAgIF9f cHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKi8KLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsK LS0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmplY3QgKilf X3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCkpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyOTEsIF9fcHl4X0wxX2Vycm9yKQot LSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19weXhfdF8zID0gKChzdHJ1Y3Qg X19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAq KSgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hl ZCAqKV9fcHl4X3RfMiktPl9fcHl4X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKilfX3B5eF90XzIpLCAoKHN0cnVj dCBtcHZfZXZlbnRfZW5kX2ZpbGUgKilfX3B5eF92X2RhdGEpKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzMpKSBfX1BZWF9FUlIoMCwgMjkxLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIg PSAwOwotLSAgICBfX3B5eF9yID0gX19weXhfdF8zOwotLSAgICBfX3B5eF90XzMgPSAwOwotLSAg ICBnb3RvIF9fcHl4X0wwOwotKyAgaWYgKCEobGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5 eF92X19fcHl4X3N0YXRlKSl8fCgoX19weXhfdl9fX3B5eF9zdGF0ZSkgPT0gUHlfTm9uZSl8fChQ eUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiRXhwZWN0ZWQgJS4xNnMsIGdvdCAlLjIwMHMi LCAidHVwbGUiLCBQeV9UWVBFKF9fcHl4X3ZfX19weXhfc3RhdGUpLT50cF9uYW1lKSwgMCkpKSBf X1BZWF9FUlIoMSwgMTcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShfX3B5 eF92X3NlbGYsICgoUHlPYmplY3QqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5MAotLSAq ICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpCi0tICogICAgICAgICAgICAgcmV0dXJu IGFyZ3MKLS0gKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfRU5EX0ZJTEU6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICByZXR1cm4gRW5kT2ZG aWxlUmVhY2hlZCgpLl9pbml0KDxtcHZfZXZlbnRfZW5kX2ZpbGUqPmRhdGEpCi0tICogICAgICAg ICByZXR1cm4gTm9uZQotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTYKLSsgKiAgICAgZWxzZToK LSsgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9FdmVudCwgKHR5cGUoc2VsZiksIDB4 ZGEzOGMyNSwgc3RhdGUpCi0rICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhf c3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIF9fcHl4X3VucGlj a2xlX0V2ZW50X19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCi0gICovCi0tICAgIGJyZWFr OwotLSAgICBkZWZhdWx0OiBicmVhazsKLS0gIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyOTIKLS0gKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRf RU5EX0ZJTEU6Ci0tICogICAgICAgICAgICAgcmV0dXJuIEVuZE9mRmlsZVJlYWNoZWQoKS5faW5p dCg8bXB2X2V2ZW50X2VuZF9maWxlKj5kYXRhKQotLSAqICAgICAgICAgcmV0dXJuIE5vbmUgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIAotLSAqICAgICBAcHJvcGVydHkKLS0gKi8K LS0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K LSAgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0gICBnb3RvIF9f cHl4X0wwOwotKyAgX19weXhfTDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEp OwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQuX19zZXRz dGF0ZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOwotKyAgX19weXhfciA9IE5VTEw7Ci0rICBfX3B5eF9MMDo7Ci0rICBfX1B5eF9YR0lWRVJF RihfX3B5eF9yKTsKLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJu IF9fcHl4X3I7Ci0rfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3 MAotLSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoZXJyX2MpCi0rLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjMxOAotICAqIAotLSAqICAgICBjZGVmIF9kYXRhKHNlbGYsIG1wdl9l dmVudCogZXZlbnQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBj ZGVmIHZvaWQqIGRhdGEgPSBldmVudC5kYXRhCi0tICogICAgICAgICBjZGVmIG1wdl9ldmVudF9j bGllbnRfbWVzc2FnZSogY2xpbXNnCi0rICogCi0rICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KToKLSsg KiAgICAgICAgIHYgPSBmbigqaywgKiprdykKLSAgKi8KLSAKLSsvKiBQeXRob24gd3JhcHBlciAq LwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVfZXJy b3JzKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9mbik7IC8qcHJvdG8q LwotK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 X2Vycm9ycyA9IHsiX2Vycm9ycyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfNV9lcnJvcnMsIE1FVEhfTywgMH07Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNV9lcnJvcnMoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF92X2ZuKSB7Ci0rICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0rICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9l cnJvcnMgKHdyYXBwZXIpIiwgMCk7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzRfZXJyb3JzKF9fcHl4X3NlbGYsICgoUHlPYmplY3QgKilfX3B5eF92X2ZuKSk7 Ci0rCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X0wxX2Vycm9yOjsKLS0g IF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsK LS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2LkV2ZW50Ll9kYXRhIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5v LCBfX3B5eF9maWxlbmFtZSk7Ci0tICBfX3B5eF9yID0gMDsKLS0gIF9fcHl4X0wwOjsKLS0gIF9f UHl4X1hERUNSRUYoX19weXhfdl9hcmdzKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9hcmcp OwotLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6Mjk1Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMx OQotICAqIAotLSAqICAgICBAcHJvcGVydHkKLS0gKiAgICAgZGVmIG5hbWUoc2VsZik6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICIiIm1wdl9ldmVudF9uYW1lIG9m IHRoZSBldmVudCBpZCIiIgotLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBuYW1lX2MKLSsg KiBkZWYgX2Vycm9ycyhmbik6Ci0rICogICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgdiA9IGZuKCprLCAqKmt3KQotKyAq ICAgICAgICAgaWYgdiA8IDA6Ci0gICovCi0gCi0gLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVf MV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotLXN0YXRpYyBQeU9i amVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80bmFtZV8xX19nZXRf XyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN19lcnJvcnNfMXdyYXBwZWQoUHlPYmplY3QgKl9fcHl4X3Nl bGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8q LwotK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 X2Vycm9yc18xd3JhcHBlZCA9IHsid3JhcHBlZCIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1 bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X2Vycm9y c18xd3JhcHBlZCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9OwotK3N0YXRpYyBQeU9i amVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3JzXzF3cmFwcGVkKFB5 T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4 X2t3ZHMpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X2sgPSAwOwotKyAgUHlPYmplY3QgKl9fcHl4 X3Zfa3cgPSAwOwotICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotICAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFw cGVyKSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 RXZlbnRfNG5hbWVfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0V2ZW50ICopX19weXhfdl9zZWxmKSk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgid3JhcHBlZCAod3JhcHBlcikiLCAwKTsKLSsgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSAm JiB1bmxpa2VseSghX19QeXhfQ2hlY2tLZXl3b3JkU3RyaW5ncyhfX3B5eF9rd2RzLCAid3JhcHBl ZCIsIDEpKSkgcmV0dXJuIE5VTEw7Ci0rICBfX3B5eF92X2t3ID0gKF9fcHl4X2t3ZHMpID8gUHlE aWN0X0NvcHkoX19weXhfa3dkcykgOiBQeURpY3RfTmV3KCk7IGlmICh1bmxpa2VseSghX19weXhf dl9rdykpIHJldHVybiBOVUxMOwotKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfa3cpOwotKyAgX19Q eXhfSU5DUkVGKF9fcHl4X2FyZ3MpOwotKyAgX19weXhfdl9rID0gX19weXhfYXJnczsKLSsgIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN19lcnJvcnNfd3JhcHBlZChf X3B5eF9zZWxmLCBfX3B5eF92X2ssIF9fcHl4X3Zfa3cpOwotIAotICAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCi0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfayk7Ci0rICBfX1B5eF9YREVDUkVG KF9fcHl4X3Zfa3cpOwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1 cm4gX19weXhfcjsKLSB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50XzRuYW1lX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgewotLSAgY2hhciBjb25zdCAqX19w eXhfdl9uYW1lX2M7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN19lcnJvcnNfd3JhcHBlZChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3ZfaywgUHlPYmplY3QgKl9fcHl4X3Zfa3cpIHsKLSsgIHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqX19weXhfY3Vy X3Njb3BlOwotKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhf c2NvcGVfc3RydWN0X19fZXJyb3JzICpfX3B5eF9vdXRlcl9zY29wZTsKLSsgIFB5T2JqZWN0ICpf X3B5eF92X3YgPSBOVUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKLSAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotICAg UHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVM TDsKLSsgIGludCBfX3B5eF90XzM7Ci0gICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLSAg IGludCBfX3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fZ2V0X18iLCAwKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJ3cmFw cGVkIiwgMCk7Ci0rICBfX3B5eF9vdXRlcl9zY29wZSA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKikgX19QeXhfQ3lG dW5jdGlvbl9HZXRDbG9zdXJlKF9fcHl4X3NlbGYpOwotKyAgX19weXhfY3VyX3Njb3BlID0gX19w eXhfb3V0ZXJfc2NvcGU7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 Mjk4Ci0tICogICAgICAgICAiIiJtcHZfZXZlbnRfbmFtZSBvZiB0aGUgZXZlbnQgaWQiIiIKLS0g KiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZV9jCi0tICogICAgICAgICB3aXRoIG5vZ2ls OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgbmFtZV9jID0g bXB2X2V2ZW50X25hbWUoc2VsZi5pZCkKLS0gKiAgICAgICAgIHJldHVybiBfc3RyZGVjKG5hbWVf YykKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjAKLSsgKiBkZWYgX2Vy cm9ycyhmbik6Ci0rICogICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KToKLSsgKiAgICAgICAgIHYg PSBmbigqaywgKiprdykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg aWYgdiA8IDA6Ci0rICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IodikKLSAgKi8KLS0gIHsK LS0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsK LS0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKLS0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVy KCk7Ci0tICAgICAgI2VuZGlmCi0tICAgICAgLyp0cnk6Ki8gewotKyAgaWYgKHVubGlrZWx5KCFf X3B5eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4pKSB7IF9fUHl4X1JhaXNlQ2xvc3VyZU5hbWVFcnJv cigiZm4iKTsgX19QWVhfRVJSKDAsIDMyMCwgX19weXhfTDFfZXJyb3IpIH0KLSsgIF9fcHl4X3Rf MSA9IFB5RGljdF9Db3B5KF9fcHl4X3Zfa3cpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCAzMjAsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7Ci0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2N1cl9zY29wZS0+ X19weXhfdl9mbiwgX19weXhfdl9rLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCAzMjAsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9f cHl4X3RfMik7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsg IF9fcHl4X3ZfdiA9IF9fcHl4X3RfMjsKLSsgIF9fcHl4X3RfMiA9IDA7Ci0gCi0tICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjk5Ci0tICogICAgICAgICBjZGVmIGNv bnN0IGNoYXIqIG5hbWVfYwotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAg ICBuYW1lX2MgPSBtcHZfZXZlbnRfbmFtZShzZWxmLmlkKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogICAgICAgICByZXR1cm4gX3N0cmRlYyhuYW1lX2MpCi0tICogCi0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzIxCi0rICogICAgIGRlZiB3cmFwcGVkKCpr LCAqKmt3KToKLSsgKiAgICAgICAgIHYgPSBmbigqaywgKiprdykKLSsgKiAgICAgICAgIGlmIHYg PCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgcmFpc2Ug TVBWRXJyb3IodikKLSsgKiAgICAgcmV0dXJuIHdyYXBwZWQKLSAgKi8KLS0gICAgICAgIF9fcHl4 X3ZfbmFtZV9jID0gbXB2X2V2ZW50X25hbWUoX19weXhfdl9zZWxmLT5pZCk7Ci0tICAgICAgfQot KyAgX19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl92LCBfX3B5eF9pbnRf MCwgUHlfTFQpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDMyMSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMgPSBf X1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8 IDApKSBfX1BZWF9FUlIoMCwgMzIxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgaWYgKHVubGlrZWx5KF9fcHl4X3RfMykpIHsK LSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjk4Ci0tICogICAg ICAgICAiIiJtcHZfZXZlbnRfbmFtZSBvZiB0aGUgZXZlbnQgaWQiIiIKLS0gKiAgICAgICAgIGNk ZWYgY29uc3QgY2hhciogbmFtZV9jCi0tICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgbmFtZV9jID0gbXB2X2V2ZW50X25h bWUoc2VsZi5pZCkKLS0gKiAgICAgICAgIHJldHVybiBfc3RyZGVjKG5hbWVfYykKLSsgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMgotKyAqICAgICAgICAgdiA9IGZuKCpr LCAqKmt3KQotKyAqICAgICAgICAgaWYgdiA8IDA6Ci0rICogICAgICAgICAgICAgcmFpc2UgTVBW RXJyb3IodikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICByZXR1cm4gd3Jh cHBlZAotKyAqIAotICAqLwotLSAgICAgIC8qZmluYWxseToqLyB7Ci0tICAgICAgICAvKm5vcm1h bCBleGl0OiovewotLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAgICAgICAgX19Q eXhfRmFzdEdJTF9Gb3JnZXQoKTsKLS0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotLSAgICAg ICAgICAjZW5kaWYKLS0gICAgICAgICAgZ290byBfX3B5eF9MNTsKLS0gICAgICAgIH0KLS0gICAg ICAgIF9fcHl4X0w1OjsKLSsgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzEs IF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDMyMiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot KyAgICBfX3B5eF90XzQgPSBOVUxMOwotKyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMSkpKSB7Ci0rICAgICAgX19weXhfdF80 ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8xKTsKLSsgICAgICBpZiAobGlrZWx5KF9fcHl4 X3RfNCkpIHsKLSsgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzEpOwotKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7Ci0rICAg ICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChf X3B5eF90XzEsIGZ1bmN0aW9uKTsKLSAgICAgICB9Ci0tICB9Ci0rICAgIH0KLSsgICAgX19weXhf dF8yID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8xLCBf X3B5eF90XzQsIF9fcHl4X3ZfdikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3Rf MSwgX19weXhfdl92KTsKLSsgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQg PSAwOwotKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzMjIsIF9f cHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICAgIF9fUHl4X1JhaXNlKF9fcHl4 X3RfMiwgMCwgMCwgMCk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIg PSAwOwotKyAgICBfX1BZWF9FUlIoMCwgMzIyLCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDAKLS0gKiAgICAgICAgIHdpdGggbm9naWw6 Ci0tICogICAgICAgICAgICAgbmFtZV9jID0gbXB2X2V2ZW50X25hbWUoc2VsZi5pZCkKLS0gKiAg ICAgICAgIHJldHVybiBfc3RyZGVjKG5hbWVfYykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqIAotLSAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudCogZXZlbnQsIGN0eCk6 Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjEKLSsgKiAgICAgZGVm IHdyYXBwZWQoKmssICoqa3cpOgotKyAqICAgICAgICAgdiA9IGZuKCprLCAqKmt3KQotKyAqICAg ICAgICAgaWYgdiA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAg ICAgICByYWlzZSBNUFZFcnJvcih2KQotKyAqICAgICByZXR1cm4gd3JhcHBlZAotICAqLwotLSAg X19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgMzAwLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIp OwotLSAgX19weXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbmFtZV9j KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMzAwLCBfX3B5eF9MMV9l cnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgX19weXhfdF80ID0gTlVMTDsK LS0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF8yKSkpIHsKLS0gICAgX19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhf dF8yKTsKLS0gICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7Ci0tICAgICAgUHlPYmplY3QqIGZ1 bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0tICAgICAgX19QeXhf SU5DUkVGKF9fcHl4X3RfNCk7Ci0tICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAg ICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotLSAgICB9Ci0gICB9Ci0t ICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8yLCBfX3B5eF90XzMpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5 eF90XzQgPSAwOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0t ICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDAsIF9fcHl4X0wxX2Vy cm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhf dF8yKTsgX19weXhfdF8yID0gMDsKLS0gIF9fcHl4X3IgPSBfX3B5eF90XzE7Ci0tICBfX3B5eF90 XzEgPSAwOwotLSAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyOTUKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTkK LSAgKiAKLS0gKiAgICAgQHByb3BlcnR5Ci0tICogICAgIGRlZiBuYW1lKHNlbGYpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAiIiJtcHZfZXZlbnRfbmFtZSBvZiB0 aGUgZXZlbnQgaWQiIiIKLS0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZV9jCi0rICog ZGVmIF9lcnJvcnMoZm4pOgotKyAqICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHYgPSBmbigqaywgKiprdykKLSsgKiAg ICAgICAgIGlmIHYgPCAwOgotICAqLwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0r ICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotKyAgZ290byBfX3B5 eF9MMDsKLSAgIF9fcHl4X0wxX2Vycm9yOjsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsK LSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8z KTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2LkV2ZW50Lm5hbWUuX19nZXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9f cHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuX2Vycm9ycy53cmFwcGVkIiwgX19weXhfY2xpbmVubywgX19weXhfbGlu ZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0gICBfX3B5eF9yID0gTlVMTDsKLSAgIF9fcHl4X0wwOjsK LSsgIF9fUHl4X1hERUNSRUYoX19weXhfdl92KTsKLSAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Ip OwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsK LSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwMgotLSAqICAgICAg ICAgcmV0dXJuIF9zdHJkZWMobmFtZV9jKQotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMTgKLSAgKiAKLS0gKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnQqIGV2ZW50 LCBjdHgpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjZGVmIHVp bnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKGN0eCkKLS0gKiAgICAgICAgIHNlbGYuaWQgPSBl dmVudC5ldmVudF9pZAotKyAqIAotKyAqIGRlZiBfZXJyb3JzKGZuKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6Ci0rICogICAgICAg ICB2ID0gZm4oKmssICoqa3cpCi0gICovCi0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZiwgc3RydWN0IG1wdl9ldmVudCAqX19w eXhfdl9ldmVudCwgUHlPYmplY3QgKl9fcHl4X3ZfY3R4KSB7Ci0tICB1aW50NjRfdCBfX3B5eF92 X2N0eGlkOwotLSAgUHlPYmplY3QgKl9fcHl4X3ZfdXNlcmRhdGEgPSBOVUxMOwotK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzRfZXJyb3JzKENZVEhPTl9V TlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2ZuKSB7Ci0rICBz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3Rf X19lcnJvcnMgKl9fcHl4X2N1cl9zY29wZTsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X3dyYXBwZWQg PSAwOwotICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKLSAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotLSAgdWludDY0X3QgX19w eXhfdF8yOwotLSAgZW51bSBtcHZfZXZlbnRfaWQgX19weXhfdF8zOwotLSAgUHlPYmplY3QgKl9f cHl4X3RfNCA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKLS0gIFB5T2Jq ZWN0ICpfX3B5eF90XzYgPSBOVUxMOwotLSAgaW50IF9fcHl4X3RfNzsKLS0gIFB5T2JqZWN0ICpf X3B5eF90XzggPSBOVUxMOwotLSAgaW50IF9fcHl4X3RfOTsKLS0gIGludCBfX3B5eF90XzEwOwot LSAgaW50IF9fcHl4X3RfMTE7Ci0gICBpbnQgX19weXhfbGluZW5vID0gMDsKLSAgIGNvbnN0IGNo YXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0g IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfaW5pdCIsIDApOwotKyAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9lcnJvcnMiLCAwKTsKLSsgIF9fcHl4X2N1cl9zY29wZSA9IChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19l cnJvcnMgKilfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0 cnVjdF9fX2Vycm9ycyhfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2Nv cGVfc3RydWN0X19fZXJyb3JzLCBfX3B5eF9lbXB0eV90dXBsZSwgTlVMTCk7Ci0rICBpZiAodW5s aWtlbHkoIV9fcHl4X2N1cl9zY29wZSkpIHsKLSsgICAgX19weXhfY3VyX3Njb3BlID0gKChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19l cnJvcnMgKilQeV9Ob25lKTsKLSsgICAgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotKyAgICBfX1BZ WF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKLSsgIH0gZWxzZSB7Ci0rICAgIF9fUHl4X0dP VFJFRihfX3B5eF9jdXJfc2NvcGUpOwotKyAgfQotKyAgX19weXhfY3VyX3Njb3BlLT5fX3B5eF92 X2ZuID0gX19weXhfdl9mbjsKLSsgIF9fUHl4X0lOQ1JFRihfX3B5eF9jdXJfc2NvcGUtPl9fcHl4 X3ZfZm4pOwotKyAgX19QeXhfR0lWRVJFRihfX3B5eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4pOwot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwMwotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOQotICAqIAotLSAqICAgICBjZGVmIF9pbml0KHNl bGYsIG1wdl9ldmVudCogZXZlbnQsIGN0eCk6Ci0tICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0 eGlkID0gPHVpbnQ2NF90PmlkKGN0eCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq ICAgICAgICAgc2VsZi5pZCA9IGV2ZW50LmV2ZW50X2lkCi0tICogICAgICAgICBzZWxmLmRhdGEg PSBzZWxmLl9kYXRhKGV2ZW50KQotKyAqIGRlZiBfZXJyb3JzKGZuKToKLSsgKiAgICAgZGVmIHdy YXBwZWQoKmssICoqa3cpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAg ICB2ID0gZm4oKmssICoqa3cpCi0rICogICAgICAgICBpZiB2IDwgMDoKLSAgKi8KLS0gIF9fcHl4 X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfYnVpbHRpbl9pZCwgX19weXhf dl9jdHgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDMsIF9fcHl4 X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9fcHl4X21k ZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3JzXzF3cmFwcGVkLCAwLCBfX3B5eF9uX3Nf ZXJyb3JzX2xvY2Fsc193cmFwcGVkLCAoKFB5T2JqZWN0KilfX3B5eF9jdXJfc2NvcGUpLCBfX3B5 eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29k ZW9ial9fMikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMTksIF9f cHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX3B5eF90XzIg PSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4 X3RfMiA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigw LCAzMDMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4 X3RfMSA9IDA7Ci0tICBfX3B5eF92X2N0eGlkID0gKCh1aW50NjRfdClfX3B5eF90XzIpOwotKyAg X19weXhfdl93cmFwcGVkID0gX19weXhfdF8xOwotKyAgX19weXhfdF8xID0gMDsKLSAKLS0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDQKLS0gKiAgICAgY2RlZiBfaW5pdChz ZWxmLCBtcHZfZXZlbnQqIGV2ZW50LCBjdHgpOgotLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBj dHhpZCA9IDx1aW50NjRfdD5pZChjdHgpCi0tICogICAgICAgICBzZWxmLmlkID0gZXZlbnQuZXZl bnRfaWQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi5kYXRh ID0gc2VsZi5fZGF0YShldmVudCkKLS0gKiAgICAgICAgIHVzZXJkYXRhID0gX3JlcGx5X3VzZXJk YXRhc1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5X3VzZXJkYXRhLCBOb25lKQotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMwotKyAqICAgICAgICAgaWYgdiA8IDA6Ci0rICog ICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IodikKLSsgKiAgICAgcmV0dXJuIHdyYXBwZWQgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIAotKyAqIAotICAqLwotLSAgX19weXhfdF8z ID0gX19weXhfdl9ldmVudC0+ZXZlbnRfaWQ7Ci0tICBfX3B5eF92X3NlbGYtPmlkID0gX19weXhf dF8zOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLSsgIF9fUHl4X0lOQ1JFRihfX3B5eF92 X3dyYXBwZWQpOwotKyAgX19weXhfciA9IF9fcHl4X3Zfd3JhcHBlZDsKLSsgIGdvdG8gX19weXhf TDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzA1Ci0tICogICAg ICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKGN0eCkKLS0gKiAgICAgICAg IHNlbGYuaWQgPSBldmVudC5ldmVudF9pZAotLSAqICAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5f ZGF0YShldmVudCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgdXNl cmRhdGEgPSBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXS5nZXQoZXZlbnQucmVwbHlfdXNlcmRhdGEs IE5vbmUpCi0tICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZSBhbmQgc2VsZi5pZCAh PSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjMxOAotKyAqIAotKyAqIAotKyAqIGRlZiBfZXJyb3JzKGZuKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6Ci0rICog ICAgICAgICB2ID0gZm4oKmssICoqa3cpCi0gICovCi0tICBfX3B5eF90XzEgPSAoKHN0cnVjdCBf X3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2Vs Zi0+X19weXhfdnRhYiktPl9kYXRhKF9fcHl4X3Zfc2VsZiwgX19weXhfdl9ldmVudCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwNSwgX19weXhfTDFfZXJyb3IpCi0t ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsK LS0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmRhdGEpOwotLSAgX19QeXhfREVDUkVGKF9f cHl4X3Zfc2VsZi0+ZGF0YSk7Ci0tICBfX3B5eF92X3NlbGYtPmRhdGEgPSBfX3B5eF90XzE7Ci0t ICBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjMwNgotLSAqICAgICAgICAgc2VsZi5pZCA9IGV2ZW50LmV2ZW50X2lkCi0tICogICAgICAgICBz ZWxmLmRhdGEgPSBzZWxmLl9kYXRhKGV2ZW50KQotLSAqICAgICAgICAgdXNlcmRhdGEgPSBfcmVw bHlfdXNlcmRhdGFzW2N0eGlkXS5nZXQoZXZlbnQucmVwbHlfdXNlcmRhdGEsIE5vbmUpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBO b25lIGFuZCBzZWxmLmlkICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6Ci0tICogICAgICAg ICAgICAgdXNlcmRhdGEucmVtb3ZlKCkKLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAg X19weXhfTDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotKyAgX19QeXhf QWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX2Vycm9ycyIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19weXhfciA9IE5VTEw7Ci0rICBf X3B5eF9MMDo7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfd3JhcHBlZCk7Ci0rICBfX1B5eF9E RUNSRUYoKChQeU9iamVjdCAqKV9fcHl4X2N1cl9zY29wZSkpOwotKyAgX19QeXhfWEdJVkVSRUYo X19weXhfcik7Ci0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBf X3B5eF9yOwotK30KLSsKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI5Ci0r ICogICAgIGNvZGUgPSBOb25lCi0rICogCi0rICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5jb2RlID0gZQot KyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYwotICAqLwotLSAgX19weXhfdF80ID0g X19QeXhfR2V0SXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNl cmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50 NjRfdCwgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMw NiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLS0gIF9fcHl4 X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF80LCBfX3B5eF9uX3NfZ2V0 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMzA2LCBfX3B5eF9MMV9l cnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Gcm9tX3Vp bnQ2NF90KF9fcHl4X3ZfZXZlbnQtPnJlcGx5X3VzZXJkYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzQpKSBfX1BZWF9FUlIoMCwgMzA2LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJF RihfX3B5eF90XzQpOwotLSAgX19weXhfdF82ID0gTlVMTDsKLS0gIF9fcHl4X3RfNyA9IDA7Ci0t ICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5 eF90XzUpKSkgewotLSAgICBfX3B5eF90XzYgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzUp OwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfNikpIHsKLS0gICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF81KTsKLS0gICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF82KTsKLS0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgIF9f UHl4X0RFQ1JFRl9TRVQoX19weXhfdF81LCBmdW5jdGlvbik7Ci0tICAgICAgX19weXhfdF83ID0g MTsKLS0gICAgfQotLSAgfQotLSAgI2lmIENZVEhPTl9GQVNUX1BZQ0FMTAotLSAgaWYgKFB5RnVu Y3Rpb25fQ2hlY2soX19weXhfdF81KSkgewotLSAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9 IHtfX3B5eF90XzYsIF9fcHl4X3RfNCwgUHlfTm9uZX07Ci0tICAgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5RnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF83LCAy K19fcHl4X3RfNyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwNiwg X19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgfSBlbHNlCi0tICAjZW5kaWYKLS0gICNpZiBD WVRIT05fRkFTVF9QWUNDQUxMCi0tICBpZiAoX19QeXhfUHlGYXN0Q0Z1bmN0aW9uX0NoZWNrKF9f cHl4X3RfNSkpIHsKLS0gICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF82LCBf X3B5eF90XzQsIFB5X05vbmV9OwotLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUNGdW5jdGlvbl9G YXN0Q2FsbChfX3B5eF90XzUsIF9fcHl4X3RlbXArMS1fX3B5eF90XzcsIDIrX19weXhfdF83KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA2LCBfX3B5eF9MMV9lcnJv cikKLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotLSAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9f cHl4X3RfNCA9IDA7Ci0tICB9IGVsc2UKLS0gICNlbmRpZgotKwotKy8qIFB5dGhvbiB3cmFwcGVy ICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1Q VkVycm9yXzFfX2luaXRfXyhQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2Fy Z3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCi0rc3RhdGljIFB5TWV0aG9kRGVm IF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl8xX19pbml0X18gPSB7 Il9faW5pdF9fIiwgKFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMp X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl8xX19pbml0X18sIE1FVEhf VkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfTsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl84TVBWRXJyb3JfMV9faW5pdF9fKFB5T2JqZWN0ICpfX3B5eF9z ZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKLSsgIFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYgPSAwOwotKyAgUHlPYmplY3QgKl9fcHl4X3ZfZSA9IDA7Ci0r ICBpbnQgX19weXhfbGluZW5vID0gMDsKLSsgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKLSsgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLSsgIFB5T2JqZWN0ICpfX3B5eF9yID0g MDsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0rICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19pbml0X18gKHdyYXBwZXIpIiwgMCk7Ci0gICB7Ci0tICAgIF9fcHl4X3RfOCA9 IFB5VHVwbGVfTmV3KDIrX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBfX1BZ WF9FUlIoMCwgMzA2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf OCk7Ci0tICAgIGlmIChfX3B5eF90XzYpIHsKLS0gICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Rf Nik7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF84LCAwLCBfX3B5eF90XzYpOyBfX3B5eF90XzYg PSBOVUxMOwotKyAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9f cHl4X25fc19zZWxmLCZfX3B5eF9uX3NfZSwwfTsKLSsgICAgUHlPYmplY3QqIHZhbHVlc1syXSA9 IHswLDB9OwotKyAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKLSsgICAgICBQeV9zc2l6 ZV90IGt3X2FyZ3M7Ci0rICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVf R0VUX1NJWkUoX19weXhfYXJncyk7Ci0rICAgICAgc3dpdGNoIChwb3NfYXJncykgewotKyAgICAg ICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsK LSsgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgIGNhc2UgIDE6IHZhbHVlc1sw XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0rICAgICAgICBDWVRIT05fRkFM TFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAwOiBicmVhazsKLSsgICAgICAgIGRlZmF1bHQ6IGdv dG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0rICAgICAgfQotKyAgICAgIGt3X2FyZ3MgPSBQ eURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKLSsgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0rICAg ICAgICBjYXNlICAwOgotKyAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlE aWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3NlbGYpKSAhPSAwKSkga3dfYXJn cy0tOwotKyAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotKyAgICAg ICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAgY2FzZSAgMToKLSsgICAgICAgIGlmIChs aWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9f cHl4X25fc19lKSkgIT0gMCkpIGt3X2FyZ3MtLTsKLSsgICAgICAgIGVsc2UgewotKyAgICAgICAg ICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAxLCAyLCAyLCAxKTsgX19Q WVhfRVJSKDAsIDMyOSwgX19weXhfTDNfZXJyb3IpCi0rICAgICAgICB9Ci0rICAgICAgfQotKyAg ICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKLSsgICAgICAgIGlmICh1bmxpa2VseShf X1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywg MCwgdmFsdWVzLCBwb3NfYXJncywgIl9faW5pdF9fIikgPCAwKSkgX19QWVhfRVJSKDAsIDMyOSwg X19weXhfTDNfZXJyb3IpCi0rICAgICAgfQotKyAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJ WkUoX19weXhfYXJncykgIT0gMikgewotKyAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJy b3I7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShf X3B5eF9hcmdzLCAwKTsKLSsgICAgICB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4 X2FyZ3MsIDEpOwotICAgICB9Ci0tICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF80KTsKLS0gICAg UHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzgsIDArX19weXhfdF83LCBfX3B5eF90XzQpOwotLSAg ICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0tICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7Ci0t ICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF84LCAxK19fcHl4X3RfNywgUHlfTm9uZSk7Ci0t ICAgIF9fcHl4X3RfNCA9IDA7Ci0tICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwo X19weXhfdF81LCBfX3B5eF90XzgsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCAzMDYsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7Ci0rICAg IF9fcHl4X3Zfc2VsZiA9IHZhbHVlc1swXTsKLSsgICAgX19weXhfdl9lID0gdmFsdWVzWzFdOwot ICAgfQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0tICBfX3B5 eF92X3VzZXJkYXRhID0gX19weXhfdF8xOwotLSAgX19weXhfdF8xID0gMDsKLSsgIGdvdG8gX19w eXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7Ci0rICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJv cjo7Ci0rICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAxLCAyLCAyLCBQ eVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDNf ZXJyb3IpCi0rICBfX3B5eF9MM19lcnJvcjo7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1 dHRlci5saWJzLm1wdi5NUFZFcnJvci5fX2luaXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xp bmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 Ci0rICByZXR1cm4gTlVMTDsKLSsgIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsK LSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19f aW5pdF9fKF9fcHl4X3NlbGYsIF9fcHl4X3Zfc2VsZiwgX19weXhfdl9lKTsKLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDcKLS0gKiAgICAgICAgIHNlbGYuZGF0YSA9 IHNlbGYuX2RhdGEoZXZlbnQpCi0tICogICAgICAgICB1c2VyZGF0YSA9IF9yZXBseV91c2VyZGF0 YXNbY3R4aWRdLmdldChldmVudC5yZXBseV91c2VyZGF0YSwgTm9uZSkKLS0gKiAgICAgICAgIGlm IHVzZXJkYXRhIGlzIG5vdCBOb25lIGFuZCBzZWxmLmlkICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9D SEFOR0U6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICB1c2Vy ZGF0YS5yZW1vdmUoKQotLSAqICAgICAgICAgICAgIGlmIG5vdCB1c2VyZGF0YS5vYnNlcnZlZCBh bmQgdXNlcmRhdGEuY291bnRlciA8PSAwOgotLSAqLwotLSAgX19weXhfdF8xMCA9IChfX3B5eF92 X3VzZXJkYXRhICE9IFB5X05vbmUpOwotLSAgX19weXhfdF8xMSA9IChfX3B5eF90XzEwICE9IDAp OwotLSAgaWYgKF9fcHl4X3RfMTEpIHsKLS0gIH0gZWxzZSB7Ci0tICAgIF9fcHl4X3RfOSA9IF9f cHl4X3RfMTE7Ci0tICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOwotLSAgfQotLSAg X19weXhfdF8xMSA9ICgoX19weXhfdl9zZWxmLT5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hB TkdFKSAhPSAwKTsKLS0gIF9fcHl4X3RfOSA9IF9fcHl4X3RfMTE7Ci0tICBfX3B5eF9MNF9ib29s X2Jpbm9wX2RvbmU6OwotLSAgaWYgKF9fcHl4X3RfOSkgewotKyAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCi0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBfX3B5 eF9yOwotK30KLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwOAot LSAqICAgICAgICAgdXNlcmRhdGEgPSBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXS5nZXQoZXZlbnQu cmVwbHlfdXNlcmRhdGEsIE5vbmUpCi0tICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9u ZSBhbmQgc2VsZi5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgotLSAqICAgICAgICAg ICAgIHVzZXJkYXRhLnJlbW92ZSgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgICAgICBpZiBub3QgdXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50ZXIg PD0gMDoKLS0gKiAgICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdW2V2 ZW50LnJlcGx5X3VzZXJkYXRhXQotLSAqLwotLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19yZW1vdmUpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQotLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKLS0gICAgX19weXhfdF84ID0gTlVMTDsKLS0gICAg aWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhf dF81KSkpIHsKLS0gICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzUp OwotLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF84KSkgewotLSAgICAgICAgUHlPYmplY3QqIGZ1 bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNSk7Ci0tICAgICAgICBfX1B5 eF9JTkNSRUYoX19weXhfdF84KTsKLS0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0t ICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNSwgZnVuY3Rpb24pOwotLSAgICAgIH0K LS0gICAgfQotLSAgICBfX3B5eF90XzEgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF81LCBfX3B5eF90XzgpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJn KF9fcHl4X3RfNSk7Ci0tICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsgX19weXhfdF84ID0g MDsKLS0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA4LCBfX3B5 eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl84TVBWRXJyb3JfX19pbml0X18oQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAq X19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZSkg ewotKyAgY2hhciBjb25zdCAqX19weXhfdl9lcnJfYzsKLSsgIGludCBfX3B5eF92X2VfaTsKLSsg IFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25z Ci0rICBpbnQgX19weXhfdF8xOwotKyAgaW50IF9fcHl4X3RfMjsKLSsgIGludCBfX3B5eF90XzM7 Ci0rICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzUg PSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19w eXhfdF83ID0gTlVMTDsKLSsgIGludCBfX3B5eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAq X19weXhfZmlsZW5hbWUgPSBOVUxMOwotKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotKyAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fIiwgMCk7Ci0rICBfX1B5eF9JTkNSRUYo X19weXhfdl9lKTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMw OQotLSAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBW X0VWRU5UX1BST1BFUlRZX0NIQU5HRToKLS0gKiAgICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUo KQotLSAqICAgICAgICAgICAgIGlmIG5vdCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEu Y291bnRlciA8PSAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAg ICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0K LS0gKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lOgotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjMzMAotKyAqIAotKyAqICAgICBkZWYgX19pbml0X18oc2VsZiwg ZSk6Ci0rICogICAgICAgICBzZWxmLmNvZGUgPSBlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogZXJyX2MKLSsgKiAgICAgICAgIGNkZWYg aW50IGVfaQotICAqLwotLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19vYnNlcnZlZCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOwotLSAgICBfX3B5eF90XzExID0gX19QeXhfUHlPYmplY3RfSXNUcnVl KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzExIDwgMCkpIF9fUFlYX0VSUigwLCAz MDksIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKLS0gICAgX19weXhfdF8xMCA9ICgoIV9fcHl4X3RfMTEpICE9IDApOwotLSAgICBp ZiAoX19weXhfdF8xMCkgewotLSAgICB9IGVsc2UgewotLSAgICAgIF9fcHl4X3RfOSA9IF9fcHl4 X3RfMTA7Ci0tICAgICAgZ290byBfX3B5eF9MN19ib29sX2Jpbm9wX2RvbmU7Ci0tICAgIH0KLS0g ICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRh LCBfX3B5eF9uX3NfY291bnRlcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot LSAgICBfX3B5eF90XzUgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF90XzEsIF9fcHl4X2lu dF8wLCBQeV9MRSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF81KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzUpKSBfX1BZWF9FUlIoMCwgMzA5LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9Q eU9iamVjdF9Jc1RydWUoX19weXhfdF81KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMTAgPCAwKSkg X19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzUpOyBfX3B5eF90XzUgPSAwOwotLSAgICBfX3B5eF90XzkgPSBfX3B5eF90XzEwOwotLSAg ICBfX3B5eF9MN19ib29sX2Jpbm9wX2RvbmU6OwotLSAgICBpZiAoX19weXhfdF85KSB7Ci0rICBp ZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jb2Rl LCBfX3B5eF92X2UpIDwgMCkgX19QWVhfRVJSKDAsIDMzMCwgX19weXhfTDFfZXJyb3IpCi0gCi0t ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMAotLSAqICAgICAgICAg ICAgIHVzZXJkYXRhLnJlbW92ZSgpCi0tICogICAgICAgICAgICAgaWYgbm90IHVzZXJkYXRhLm9i c2VydmVkIGFuZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6Ci0tICogICAgICAgICAgICAgICAgIGRl bCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0gICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmU6 Ci0tICogICAgICAgICAgICAgdXNlcmRhdGEgPSB1c2VyZGF0YS5kYXRhCi0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMzCi0rICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIq IGVycl9jCi0rICogICAgICAgICBjZGVmIGludCBlX2kKLSsgKiAgICAgICAgIGlmIG5vdCBpc2lu c3RhbmNlKGUsIGJhc2VzdHJpbmcpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgICAgICAgICAgZV9pID0gZQotKyAqICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0gICovCi0t ICAgICAgX19weXhfdF81ID0gX19QeXhfR2V0SXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50NjRfdCwgMCwgX19Q eXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF81 KSkgX19QWVhfRVJSKDAsIDMxMCwgX19weXhfTDFfZXJyb3IpCi0tICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNSk7Ci0tICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X0RlbEl0ZW1JbnQoX19weXhf dF81LCBfX3B5eF92X2V2ZW50LT5yZXBseV91c2VyZGF0YSwgdWludDY0X3QsIDAsIF9fUHl4X1B5 SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCAzMTAsIF9fcHl4 X0wxX2Vycm9yKQotLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAw OwotKyAgX19weXhfdF8xID0gX19QeXhfUHlCYXNlU3RyaW5nX0NoZWNrKF9fcHl4X3ZfZSk7IAot KyAgX19weXhfdF8yID0gKCghKF9fcHl4X3RfMSAhPSAwKSkgIT0gMCk7Ci0rICBpZiAoX19weXhf dF8yKSB7Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwOQot LSAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VW RU5UX1BST1BFUlRZX0NIQU5HRToKLS0gKiAgICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUoKQot LSAqICAgICAgICAgICAgIGlmIG5vdCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291 bnRlciA8PSAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAg ICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0KLS0g KiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lOgotKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MzM0Ci0rICogICAgICAgICBjZGVmIGludCBlX2kKLSsgKiAgICAg ICAgIGlmIG5vdCBpc2luc3RhbmNlKGUsIGJhc2VzdHJpbmcpOgotKyAqICAgICAgICAgICAgIGVf aSA9IGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIHdpdGgg bm9naWw6Ci0rICogICAgICAgICAgICAgICAgIGVycl9jID0gbXB2X2Vycm9yX3N0cmluZyhlX2kp Ci0gICovCi0tICAgIH0KLSsgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4 X3ZfZSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8zID09IChpbnQpLTEpICYmIFB5RXJyX09jY3Vy cmVkKCkpKSBfX1BZWF9FUlIoMCwgMzM0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdl9l X2kgPSBfX3B5eF90XzM7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozMDcKLS0gKiAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuX2RhdGEoZXZlbnQpCi0tICogICAg ICAgICB1c2VyZGF0YSA9IF9yZXBseV91c2VyZGF0YXNbY3R4aWRdLmdldChldmVudC5yZXBseV91 c2VyZGF0YSwgTm9uZSkKLS0gKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lIGFuZCBz ZWxmLmlkICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUoKQotLSAqICAgICAgICAg ICAgIGlmIG5vdCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOgot KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzM1Ci0rICogICAgICAgICBp ZiBub3QgaXNpbnN0YW5jZShlLCBiYXNlc3RyaW5nKToKLSsgKiAgICAgICAgICAgICBlX2kgPSBl Ci0rICogICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICAgICAgICAgICAgICBlcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmcoZV9pKQotKyAq ICAgICAgICAgICAgIGUgPSBfc3RyZGVjKGVycl9jKQotICAqLwotLSAgfQotKyAgICB7Ci0rICAg ICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwot KyAgICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0rICAgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVt YmVyKCk7Ci0rICAgICAgICAjZW5kaWYKLSsgICAgICAgIC8qdHJ5OiovIHsKLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTEKLS0gKiAgICAgICAgICAgICBpZiBub3Qg dXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50ZXIgPD0gMDoKLS0gKiAgICAgICAg ICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdW2V2ZW50LnJlcGx5X3VzZXJkYXRh XQotLSAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICB1c2VyZGF0YSA9IHVzZXJkYXRhLmRhdGEKLS0g KiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSB1c2VyZGF0YQotKyAgICAgICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzM2Ci0rICogICAgICAgICAgICAgZV9pID0g ZQotKyAqICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgICAgIGVycl9j ID0gbXB2X2Vycm9yX3N0cmluZyhlX2kpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgICAgICAgICBlID0gX3N0cmRlYyhlcnJfYykKLSsgKiAgICAgICAgIEV4Y2VwdGlvbi5f X2luaXRfXyhzZWxmLCBlKQotICAqLwotLSAgX19weXhfdF85ID0gKF9fcHl4X3ZfdXNlcmRhdGEg IT0gUHlfTm9uZSk7Ci0tICBfX3B5eF90XzEwID0gKF9fcHl4X3RfOSAhPSAwKTsKLS0gIGlmIChf X3B5eF90XzEwKSB7Ci0rICAgICAgICAgIF9fcHl4X3ZfZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5n KF9fcHl4X3ZfZV9pKTsKLSsgICAgICAgIH0KLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjMxMgotLSAqICAgICAgICAgICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRh c1tjdHhpZF1bZXZlbnQucmVwbHlfdXNlcmRhdGFdCi0tICogICAgICAgICBpZiB1c2VyZGF0YSBp cyBub3QgTm9uZToKLS0gKiAgICAgICAgICAgICB1c2VyZGF0YSA9IHVzZXJkYXRhLmRhdGEgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YSA9IHVzZXJkYXRhCi0tICogICAgICAgICBzZWxmLmVycm9yID0gZXZlbnQuZXJyb3IKLSsgICAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzUKLSsgKiAgICAgICAgIGlm IG5vdCBpc2luc3RhbmNlKGUsIGJhc2VzdHJpbmcpOgotKyAqICAgICAgICAgICAgIGVfaSA9IGUK LSsgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICAgICAgICAgIGVycl9jID0gbXB2X2Vycm9yX3N0cmluZyhlX2kpCi0rICog ICAgICAgICAgICAgZSA9IF9zdHJkZWMoZXJyX2MpCi0gICovCi0tICAgIF9fcHl4X3RfNSA9IF9f UHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YSwgX19weXhfbl9zX2RhdGEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMTIsIF9fcHl4X0wxX2Vy cm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKLS0gICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF92X3VzZXJkYXRhLCBfX3B5eF90XzUpOwotLSAgICBfX3B5eF90XzUgPSAwOwotKyAg ICAgICAgLypmaW5hbGx5OiovIHsKLSsgICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKLSsgICAg ICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAgICAgICAgICBfX1B5eF9GYXN0R0lMX0Zv cmdldCgpOwotKyAgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSsgICAgICAgICAgICAjZW5k aWYKLSsgICAgICAgICAgICBnb3RvIF9fcHl4X0w2OwotKyAgICAgICAgICB9Ci0rICAgICAgICAg IF9fcHl4X0w2OjsKLSsgICAgICAgIH0KLSsgICAgfQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MzExCi0tICogICAgICAgICAgICAgaWYgbm90IHVzZXJkYXRhLm9i c2VydmVkIGFuZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6Ci0tICogICAgICAgICAgICAgICAgIGRl bCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0KLS0gKiAgICAg ICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgICAgICAgICAgdXNlcmRhdGEgPSB1c2VyZGF0YS5kYXRhCi0tICogICAgICAgICBz ZWxmLnJlcGx5X3VzZXJkYXRhID0gdXNlcmRhdGEKLS0gKi8KLS0gIH0KLS0KLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTMKLS0gKiAgICAgICAgIGlmIHVzZXJkYXRhIGlz IG5vdCBOb25lOgotLSAqICAgICAgICAgICAgIHVzZXJkYXRhID0gdXNlcmRhdGEuZGF0YQotLSAq ICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IHVzZXJkYXRhICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYuZXJyb3IgPSBldmVudC5lcnJvcgotLSAqICAg ICAgICAgcmV0dXJuIHNlbGYKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjMzNwotKyAqICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgICAgIGVy cl9jID0gbXB2X2Vycm9yX3N0cmluZyhlX2kpCi0rICogICAgICAgICAgICAgZSA9IF9zdHJkZWMo ZXJyX2MpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIEV4Y2VwdGlv bi5fX2luaXRfXyhzZWxmLCBlKQotKyAqIAotICAqLwotLSAgX19QeXhfSU5DUkVGKF9fcHl4X3Zf dXNlcmRhdGEpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X3VzZXJkYXRhKTsKLS0gIF9fUHl4 X0dPVFJFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKLS0gIF9fUHl4X0RFQ1JFRihf X3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKLS0gIF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNl cmRhdGEgPSBfX3B5eF92X3VzZXJkYXRhOwotKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1l KF9fcHl4X3RfNSwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkg X19QWVhfRVJSKDAsIDMzNywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzUpOwotKyAgICBfX3B5eF90XzYgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhf dl9lcnJfYyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDMzNywgX19w eXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgICBfX3B5eF90 XzcgPSBOVUxMOwotKyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfNSkpKSB7Ci0rICAgICAgX19weXhfdF83ID0gUHlNZXRob2Rf R0VUX1NFTEYoX19weXhfdF81KTsKLSsgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfNykpIHsKLSsg ICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90 XzUpOwotKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNyk7Ci0rICAgICAgICBfX1B5eF9J TkNSRUYoZnVuY3Rpb24pOwotKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzUsIGZ1 bmN0aW9uKTsKLSsgICAgICB9Ci0rICAgIH0KLSsgICAgX19weXhfdF80ID0gKF9fcHl4X3RfNykg PyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF81LCBfX3B5eF90XzcsIF9fcHl4X3Rf NikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwgX19weXhfdF82KTsKLSsg ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSsgICAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzQpKSBfX1BZWF9FUlIoMCwgMzM3LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNCk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUg PSAwOwotKyAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfZSwgX19weXhfdF80KTsKLSsgICAg X19weXhfdF80ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz MTQKLS0gKiAgICAgICAgICAgICB1c2VyZGF0YSA9IHVzZXJkYXRhLmRhdGEKLS0gKiAgICAgICAg IHNlbGYucmVwbHlfdXNlcmRhdGEgPSB1c2VyZGF0YQotLSAqICAgICAgICAgc2VsZi5lcnJvciA9 IGV2ZW50LmVycm9yICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHJl dHVybiBzZWxmCi0tICogCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz MzMKLSsgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogZXJyX2MKLSsgKiAgICAgICAgIGNkZWYg aW50IGVfaQotKyAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZSwgYmFzZXN0cmluZyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBlX2kgPSBlCi0rICog ICAgICAgICAgICAgd2l0aCBub2dpbDoKLSAgKi8KLS0gIF9fcHl4X3RfNyA9IF9fcHl4X3ZfZXZl bnQtPmVycm9yOwotLSAgX19weXhfdl9zZWxmLT5lcnJvciA9IF9fcHl4X3RfNzsKLSsgIH0KLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTUKLS0gKiAgICAgICAgIHNl bGYucmVwbHlfdXNlcmRhdGEgPSB1c2VyZGF0YQotLSAqICAgICAgICAgc2VsZi5lcnJvciA9IGV2 ZW50LmVycm9yCi0tICogICAgICAgICByZXR1cm4gc2VsZiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzM4Ci0r ICogICAgICAgICAgICAgICAgIGVycl9jID0gbXB2X2Vycm9yX3N0cmluZyhlX2kpCi0rICogICAg ICAgICAgICAgZSA9IF9zdHJkZWMoZXJyX2MpCi0rICogICAgICAgICBFeGNlcHRpb24uX19pbml0 X18oc2VsZiwgZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqIAotKyAqIGNsYXNz IFB5TVBWRXJyb3IoRXhjZXB0aW9uKToKLSAgKi8KLS0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7 Ci0tICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOwotLSAgX19weXhf ciA9ICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpOwotLSAgZ290byBfX3B5eF9MMDsKLSsgIF9f cHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKSgmKChQeVR5 cGVPYmplY3QqKVB5RXhjX0V4Y2VwdGlvbilbMF0pKSwgX19weXhfbl9zX2luaXQpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMzgsIF9fcHl4X0wxX2Vycm9yKQotKyAg X19QeXhfR09UUkVGKF9fcHl4X3RfNSk7Ci0rICBfX3B5eF90XzYgPSBOVUxMOwotKyAgX19weXhf dF8zID0gMDsKLSsgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9k X0NoZWNrKF9fcHl4X3RfNSkpKSB7Ci0rICAgIF9fcHl4X3RfNiA9IFB5TWV0aG9kX0dFVF9TRUxG KF9fcHl4X3RfNSk7Ci0rICAgIGlmIChsaWtlbHkoX19weXhfdF82KSkgewotKyAgICAgIFB5T2Jq ZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzUpOwotKyAgICAg IF9fUHl4X0lOQ1JFRihfX3B5eF90XzYpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7 Ci0rICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzUsIGZ1bmN0aW9uKTsKLSsgICAgICBf X3B5eF90XzMgPSAxOwotKyAgICB9Ci0rICB9Ci0rICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCi0r ICBpZiAoUHlGdW5jdGlvbl9DaGVjayhfX3B5eF90XzUpKSB7Ci0rICAgIFB5T2JqZWN0ICpfX3B5 eF90ZW1wWzNdID0ge19fcHl4X3RfNiwgX19weXhfdl9zZWxmLCBfX3B5eF92X2V9OwotKyAgICBf X3B5eF90XzQgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVt cCsxLV9fcHl4X3RfMywgMitfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9f UFlYX0VSUigwLCAzMzgsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAg fSBlbHNlCi0rICAjZW5kaWYKLSsgICNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCi0rICBpZiAoX19Q eXhfUHlGYXN0Q0Z1bmN0aW9uX0NoZWNrKF9fcHl4X3RfNSkpIHsKLSsgICAgUHlPYmplY3QgKl9f cHl4X3RlbXBbM10gPSB7X19weXhfdF82LCBfX3B5eF92X3NlbGYsIF9fcHl4X3ZfZX07Ci0rICAg IF9fcHl4X3RfNCA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhf dGVtcCsxLV9fcHl4X3RfMywgMitfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCAzMzgsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwot KyAgfSBlbHNlCi0rICAjZW5kaWYKLSsgIHsKLSsgICAgX19weXhfdF83ID0gUHlUdXBsZV9OZXco MitfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAzMzgs IF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSsgICAgaWYg KF9fcHl4X3RfNikgewotKyAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF82KTsgUHlUdXBsZV9T RVRfSVRFTShfX3B5eF90XzcsIDAsIF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IE5VTEw7Ci0rICAg IH0KLSsgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZik7Ci0rICAgIF9fUHl4X0dJVkVSRUYo X19weXhfdl9zZWxmKTsKLSsgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDArX19weXhf dF8zLCBfX3B5eF92X3NlbGYpOwotKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9lKTsKLSsgICAg X19QeXhfR0lWRVJFRihfX3B5eF92X2UpOwotKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3Rf NywgMStfX3B5eF90XzMsIF9fcHl4X3ZfZSk7Ci0rICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2Jq ZWN0X0NhbGwoX19weXhfdF81LCBfX3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNCkpIF9fUFlYX0VSUigwLCAzMzgsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF80KTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9 IDA7Ci0rICB9Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLSsg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotIAotLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwMgotLSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMo bmFtZV9jKQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyOQotKyAqICAg ICBjb2RlID0gTm9uZQotICAqIAotLSAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudCog ZXZlbnQsIGN0eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGNk ZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoY3R4KQotLSAqICAgICAgICAgc2VsZi5p ZCA9IGV2ZW50LmV2ZW50X2lkCi0rICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5jb2RlID0gZQotKyAqICAg ICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYwotICAqLwotIAotICAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCi0rICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwot KyAgZ290byBfX3B5eF9MMDsKLSAgIF9fcHl4X0wxX2Vycm9yOjsKLS0gIF9fUHl4X1hERUNSRUYo X19weXhfdF8xKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKLSAgIF9fUHl4X1hERUNS RUYoX19weXhfdF81KTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKLS0gIF9fUHl4X1hE RUNSRUYoX19weXhfdF84KTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMu bXB2LkV2ZW50Ll9pbml0IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7Ci0tICBfX3B5eF9yID0gMDsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsKLSsg IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Lk1QVkVycm9yLl9faW5pdF9f IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX3B5 eF9yID0gTlVMTDsKLSAgIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdl91c2Vy ZGF0YSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfZSk7Ci0gICBfX1B5eF9YR0lWRVJFRihf X3B5eF9yKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9f cHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTgKLS0g KiBjZGVmIGNsYXNzIEV2ZW50KG9iamVjdCk6Ci0tICogICAgICIiIldyYXBzOiBtcHZfZXZlbnQi IiIKLS0gKiAgICAgY2RlZiBwdWJsaWMgbXB2X2V2ZW50X2lkIGlkICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgY2RlZiBwdWJsaWMgaW50IGVycm9yCi0tICogICAgIGNkZWYg cHVibGljIG9iamVjdCBkYXRhLCByZXBseV91c2VyZGF0YQotKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozNDcKLSsgKiAKLSsgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3Qp OgotKyAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKLSsgKiAgICAgICAgIHNlbGYu ZGF0YSA9IGRhdGEKLSAgKi8KLSAKLSAvKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9i amVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yaWRfMV9fZ2V0X18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yaWRfMV9fZ2V0X18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZikgewotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfMV9faW5pdF9fKFB5T2JqZWN0ICpfX3B5eF9zZWxm LCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8K LStzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRf UmVwbHlVc2VyRGF0YV8xX19pbml0X18gPSB7Il9faW5pdF9fIiwgKFB5Q0Z1bmN0aW9uKSh2b2lk KikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzE0X1JlcGx5VXNlckRhdGFfMV9faW5pdF9fLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywg MH07Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRf UmVwbHlVc2VyRGF0YV8xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgewotKyAgUHlPYmplY3QgKl9fcHl4X3Zf c2VsZiA9IDA7Ci0rICBQeU9iamVjdCAqX19weXhfdl9kYXRhID0gMDsKLSsgIGludCBfX3B5eF9s aW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotKyAgaW50 IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dl dF9fICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl81RXZlbnRfMmlkX19fZ2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZikpOwotKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9faW5pdF9fICh3cmFwcGVyKSIsIDApOwotKyAgewotKyAgICBzdGF0aWMgUHlP YmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19zZWxmLCZfX3B5eF9uX3Nf ZGF0YSwwfTsKLSsgICAgUHlPYmplY3QqIHZhbHVlc1syXSA9IHswLDB9OwotKyAgICBpZiAodW5s aWtlbHkoX19weXhfa3dkcykpIHsKLSsgICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7Ci0rICAgICAg Y29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7 Ci0rICAgICAgc3dpdGNoIChwb3NfYXJncykgewotKyAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFd ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKLSsgICAgICAgIENZVEhPTl9GQUxM VEhST1VHSDsKLSsgICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0o X19weXhfYXJncywgMCk7Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBj YXNlICAwOiBicmVhazsKLSsgICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVf ZXJyb3I7Ci0rICAgICAgfQotKyAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2Rz KTsKLSsgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0rICAgICAgICBjYXNlICAwOgotKyAgICAg ICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhf a3dkcywgX19weXhfbl9zX3NlbGYpKSAhPSAwKSkga3dfYXJncy0tOwotKyAgICAgICAgZWxzZSBn b3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OwotKyAgICAgICAgY2FzZSAgMToKLSsgICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9f UHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19kYXRhKSkgIT0gMCkp IGt3X2FyZ3MtLTsKLSsgICAgICAgIGVsc2UgewotKyAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1 cGxlSW52YWxpZCgiX19pbml0X18iLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDM0NywgX19w eXhfTDNfZXJyb3IpCi0rICAgICAgICB9Ci0rICAgICAgfQotKyAgICAgIGlmICh1bmxpa2VseShr d19hcmdzID4gMCkpIHsKLSsgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFs S2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJn cywgIl9faW5pdF9fIikgPCAwKSkgX19QWVhfRVJSKDAsIDM0NywgX19weXhfTDNfZXJyb3IpCi0r ICAgICAgfQotKyAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0g MikgewotKyAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0rICAgIH0gZWxzZSB7 Ci0rICAgICAgdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKLSsg ICAgICB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOwotKyAgICB9 Ci0rICAgIF9fcHl4X3Zfc2VsZiA9IHZhbHVlc1swXTsKLSsgICAgX19weXhfdl9kYXRhID0gdmFs dWVzWzFdOwotKyAgfQotKyAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsK LSsgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKLSsgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZh bGlkKCJfX2luaXRfXyIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBf X1BZWF9FUlIoMCwgMzQ3LCBfX3B5eF9MM19lcnJvcikKLSsgIF9fcHl4X0wzX2Vycm9yOjsKLSsg IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9SZXBseVVzZXJEYXRhLl9f aW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0r ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBOVUxMOwotKyAgX19w eXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OwotKyAgX19weXhfciA9IF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhX19faW5pdF9fKF9fcHl4X3NlbGYs IF9fcHl4X3Zfc2VsZiwgX19weXhfdl9kYXRhKTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhf cjsKLSB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50XzJpZF9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0V2ZW50ICpfX3B5eF92X3NlbGYpIHsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhX19faW5pdF9fKENZVEhPTl9VTlVT RUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X2RhdGEpIHsKLSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSAg IGludCBfX3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fZ2V0X18iLCAwKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICBfX3B5 eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChfX3B5eF92X3NlbGYt PmlkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjU4LCBfX3B5eF9M MV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19weXhfciA9IF9fcHl4 X3RfMTsKLS0gIF9fcHl4X3RfMSA9IDA7Ci0tICBnb3RvIF9fcHl4X0wwOwotLQotLSAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCi0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5F dmVudC5pZC5fX2dldF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7Ci0tICBfX3B5eF9yID0gTlVMTDsKLS0gIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hHSVZF UkVGKF9fcHl4X3IpOwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1 cm4gX19weXhfcjsKLS19Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18i LCAwKTsKLSAKLS0vKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBpbnQgX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yaWRfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zf c2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8KLS1zdGF0aWMgaW50IF9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMmlkXzNfX3NldF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7Ci0tICBpbnQgX19weXhf cjsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19zZXRfXyAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8yX19zZXRfXygoKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVj dCAqKV9fcHl4X3ZfdmFsdWUpKTsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozNDgKLSsgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOgotKyAqICAgICBkZWYgX19p bml0X18oc2VsZiwgZGF0YSk6Ci0rICogICAgICAgICBzZWxmLmNvdW50ZXIgPSAwICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKLSsgKiAg ICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBGYWxzZQotKyAqLwotKyAgaWYgKF9fUHl4X1B5T2JqZWN0 X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY291bnRlciwgX19weXhfaW50XzAp IDwgMCkgX19QWVhfRVJSKDAsIDM0OCwgX19weXhfTDFfZXJyb3IpCi0gCi0tICAvKiBmdW5jdGlv biBleGl0IGNvZGUgKi8KLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0 dXJuIF9fcHl4X3I7Ci0tfQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0 OQotKyAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6Ci0rICogICAgICAgICBzZWxmLmNv dW50ZXIgPSAwCi0rICogICAgICAgICBzZWxmLmRhdGEgPSBkYXRhICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBGYWxzZQotKyAqIAotKyAq LwotKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9u X3NfZGF0YSwgX19weXhfdl9kYXRhKSA8IDApIF9fUFlYX0VSUigwLCAzNDksIF9fcHl4X0wxX2Vy cm9yKQotIAotLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF8yaWRfMl9fc2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZl bnQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKLS0gIGludCBfX3B5 eF9yOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIGVudW0gbXB2X2V2ZW50X2lk IF9fcHl4X3RfMTsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19w eXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18iLCAwKTsKLS0gIF9fcHl4X3RfMSA9ICgoZW51 bSBtcHZfZXZlbnRfaWQpX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2V2ZW50X2lkKF9fcHl4X3Zf dmFsdWUpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMjU4 LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fcHl4X3Zfc2VsZi0+aWQgPSBfX3B5eF90XzE7Ci0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzUwCi0rICogICAgICAgICBzZWxmLmNv dW50ZXIgPSAwCi0rICogICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCi0rICogICAgICAgICBzZWxm Lm9ic2VydmVkID0gRmFsc2UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIAotKyAq ICAgICBkZWYgYWRkKHNlbGYpOgotKyAqLwotKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJT dHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3Nfb2JzZXJ2ZWQsIFB5X0ZhbHNlKSA8IDApIF9fUFlY X0VSUigwLCAzNTAsIF9fcHl4X0wxX2Vycm9yKQotKwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjM0NwotKyAqIAotKyAqIGNsYXNzIF9SZXBseVVzZXJEYXRhKG9iamVjdCk6 Ci0rICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5jb3VudGVyID0gMAotKyAqICAgICAgICAgc2VsZi5k YXRhID0gZGF0YQotKyAqLwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX3B5 eF9yID0gMDsKLSsgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0g ICBnb3RvIF9fcHl4X0wwOwotICAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfQWRkVHJhY2Vi YWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQuaWQuX19zZXRfXyIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotLSAgX19weXhfciA9IC0xOwotKyAgX19Q eXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlcGx5VXNlckRhdGEuX19pbml0 X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9f cHl4X3IgPSBOVUxMOwotICAgX19weXhfTDA6OwotKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7 Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwot IH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjU5Ci0tICogICAgICIi IldyYXBzOiBtcHZfZXZlbnQiIiIKLS0gKiAgICAgY2RlZiBwdWJsaWMgbXB2X2V2ZW50X2lkIGlk Ci0tICogICAgIGNkZWYgcHVibGljIGludCBlcnJvciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgIGNkZWYgcHVibGljIG9iamVjdCBkYXRhLCByZXBseV91c2VyZGF0YQotKy8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTIKLSsgKiAgICAgICAgIHNlbGYub2Jz ZXJ2ZWQgPSBGYWxzZQotKyAqIAotKyAqICAgICBkZWYgYWRkKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMQotICAqIAotICAq LwotIAotIC8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzVlcnJvcl8xX19nZXRfXyhQeU9iamVjdCAqX19w eXhfdl9zZWxmKTsgLypwcm90byovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzVlcnJvcl8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9z ZWxmKSB7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTRfUmVwbHlVc2VyRGF0YV8zYWRkKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9zZWxmKTsgLypwcm90byovCi0rc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfM2FkZCA9IHsiYWRkIiwgKFB5Q0Z1 bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzNh ZGQsIE1FVEhfTywgMH07Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV8zYWRkKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9zZWxmKSB7Ci0gICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0gICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9f Z2V0X18gKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzVFdmVudF81ZXJyb3JfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxmKSk7Ci0rICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiYWRkICh3cmFwcGVyKSIsIDApOwotKyAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzJhZGQoX19weXhfc2VsZiwg KChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCi0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9y OwotIH0KLSAKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfNWVycm9yX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgewotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfMmFkZChDWVRIT05fVU5VU0VE IFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Ci0gICBQeU9i amVjdCAqX19weXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotICAg UHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVM TDsKLSAgIGludCBfX3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5h bWUgPSBOVUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0t ICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X3NlbGYtPmVycm9yKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjU5LCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJhZGQiLCAwKTsKLSsKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTMKLSsgKiAKLSsgKiAgICAgZGVmIGFkZChz ZWxmKToKLSsgKiAgICAgICAgIHNlbGYuY291bnRlciArPSAxICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAKLSsgKiAgICAgZGVmIHJlbW92ZShzZWxmKToKLSsgKi8KLSsgIF9fcHl4 X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3Nf Y291bnRlcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDM1MywgX19w eXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fcHl4X3IgPSBf X3B5eF90XzE7Ci0tICBfX3B5eF90XzEgPSAwOwotLSAgZ290byBfX3B5eF9MMDsKLSsgIF9fcHl4 X3RfMiA9IF9fUHl4X1B5SW50X0FkZE9iakMoX19weXhfdF8xLCBfX3B5eF9pbnRfMSwgMSwgMSwg MCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDM1MywgX19weXhfTDFf ZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIo X19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY291bnRlciwgX19weXhfdF8yKSA8IDApIF9fUFlYX0VS UigwLCAzNTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9f cHl4X3RfMiA9IDA7Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzUy Ci0rICogICAgICAgICBzZWxmLm9ic2VydmVkID0gRmFsc2UKLSsgKiAKLSsgKiAgICAgZGVmIGFk ZChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5j b3VudGVyICs9IDEKLSsgKiAKLSsgKi8KLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwot KyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLSsgIGdvdG8gX19w eXhfTDA7Ci0gICBfX3B5eF9MMV9lcnJvcjo7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7 Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5FdmVudC5lcnJvci5f X2dldF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0r ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1 dHRlci5saWJzLm1wdi5fUmVwbHlVc2VyRGF0YS5hZGQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSAgIF9fcHl4X3IgPSBOVUxMOwotICAgX19weXhfTDA6 OwotICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci1AQCAtNzMyOCwxMTgxICs3OTMxLDEyNTMg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 XzVlcnJvcl9fX2dldF9fKHN0cnVjdCBfX3AKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLSsv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzU1Ci0rICogICAgICAgICBzZWxmLmNv dW50ZXIgKz0gMQotKyAqIAotKyAqICAgICBkZWYgcmVtb3ZlKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBzZWxmLmNvdW50ZXIgLT0gMQotKyAqIAotKyAq LwotKwotIC8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzVlcnJvcl8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9z ZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qcHJvdG8qLwotLXN0YXRpYyBpbnQgX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF81ZXJyb3JfM19fc2V0X18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKLS0gIGludCBfX3B5 eF9yOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0 X1JlcGx5VXNlckRhdGFfNXJlbW92ZShQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzVyZW1vdmUgPSB7InJlbW92ZSIs IChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2Vy RGF0YV81cmVtb3ZlLCBNRVRIX08sIDB9OwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNXJlbW92ZShQeU9iamVjdCAqX19w eXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotKyAgUHlPYmplY3QgKl9fcHl4X3Ig PSAwOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfX3NldF9fICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVycm9yXzJfX3NldF9fKCgoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpLCAoKFB5 T2JqZWN0ICopX19weXhfdl92YWx1ZSkpOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo InJlbW92ZSAod3JhcHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV80cmVtb3ZlKF9fcHl4X3NlbGYsICgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpKTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0g Ci0tc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzVlcnJv cl8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgewotLSAgaW50IF9fcHl4X3I7 Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVw bHlVc2VyRGF0YV80cmVtb3ZlKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSAg IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBpbnQgX19weXhfdF8xOwotKyAgUHlPYmpl Y3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKLSAg IGludCBfX3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fc2V0X18iLCAwKTsKLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0FzX2ludChf X3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzEgPT0gKGludCktMSkgJiYgUHlF cnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAyNTksIF9fcHl4X0wxX2Vycm9yKQotLSAgX19w eXhfdl9zZWxmLT5lcnJvciA9IF9fcHl4X3RfMTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJyZW1vdmUiLCAwKTsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozNTYKLSsgKiAKLSsgKiAgICAgZGVmIHJlbW92ZShzZWxmKToKLSsgKiAgICAgICAgIHNlbGYu Y291bnRlciAtPSAxICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAKLSsgKiAKLSsg Ki8KLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxm LCBfX3B5eF9uX3NfY291bnRlcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDM1NiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsg IF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X1N1YnRyYWN0T2JqQyhfX3B5eF90XzEsIF9fcHl4X2lu dF8xLCAxLCAxLCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMzU2 LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICBpZiAoX19QeXhfUHlPYmplY3Rf U2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jb3VudGVyLCBfX3B5eF90XzIpIDwg MCkgX19QWVhfRVJSKDAsIDM1NiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19w eXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNTUKLSsgKiAgICAgICAgIHNlbGYuY291bnRlciArPSAxCi0rICogCi0rICogICAg IGRlZiByZW1vdmUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAg ICAgIHNlbGYuY291bnRlciAtPSAxCi0rICogCi0rICovCi0gCi0gICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KLS0gIF9fcHl4X3IgPSAwOwotKyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lO Q1JFRihQeV9Ob25lKTsKLSAgIGdvdG8gX19weXhfTDA7Ci0gICBfX3B5eF9MMV9lcnJvcjo7Ci0t ICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5FdmVudC5lcnJvci5fX3Nl dF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICBf X3B5eF9yID0gLTE7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMik7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5fUmVwbHlVc2VyRGF0YS5yZW1vdmUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKLSsgIF9fcHl4X3IgPSBOVUxMOwotICAgX19weXhfTDA6OwotKyAgX19Q eXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsK LSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjYwCi0tICogICAgIGNkZWYgcHVibGljIG1wdl9ldmVudF9pZCBpZAotLSAqICAgICBj ZGVmIHB1YmxpYyBpbnQgZXJyb3IKLS0gKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IGRhdGEsIHJl cGx5X3VzZXJkYXRhICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzcwCi0gICogCi0gICogICAgIEBwcm9wZXJ0eQotKyAqICAg ICBkZWYgYXBpX3ZlcnNpb24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgICAgIHJldHVybiBfQ0FQSV9NSU5PUiwgX0NBUElfTUFKT1IsIF9DQVBJX1ZFUlNJT04K LSsgKiAKLSAgKi8KLSAKLSAvKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80ZGF0YV8xX19nZXRfXyhQeU9i amVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzFfX2dldF9fKFB5T2JqZWN0ICpf X3B5eF92X3NlbGYpIHsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8xMWFwaV92ZXJzaW9uXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYpOyAvKnByb3RvKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8xMWFwaV92ZXJzaW9uXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYpIHsKLSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCi0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3Jh cHBlcikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf NUV2ZW50XzRkYXRhX19fZ2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZikpOwotKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMWFwaV92ZXJzaW9uX19fZ2V0X18oKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7 Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80ZGF0YV9fX2dldF9fKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYpIHsK LStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xMWFwaV92ZXJzaW9uX19fZ2V0X18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsKLSAgIFB5T2JqZWN0 ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0rICBQeU9i amVjdCAqX19weXhfdF8xID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwot KyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF80ID0g TlVMTDsKLSsgIGludCBfX3B5eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhfZmls ZW5hbWUgPSBOVUxMOwotKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozNzEKLSsgKiAgICAgQHByb3BlcnR5Ci0rICogICAgIGRlZiBhcGlfdmVy c2lvbihzZWxmKToKLSsgKiAgICAgICAgIHJldHVybiBfQ0FQSV9NSU5PUiwgX0NBUElfTUFKT1Is IF9DQVBJX1ZFUlNJT04gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIAotKyAqICAg ICBAcHJvcGVydHkKLSsgKi8KLSAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICBfX1B5eF9J TkNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF92X3NlbGYtPmRh dGE7Ci0rICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhfbl9zX0NB UElfTUlOT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzNzEsIF9f cHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9HZXRN b2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX0NBUElfTUFKT1IpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzNzEsIF9fcHl4X0wxX2Vycm9yKQotKyAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9t X3Vuc2lnbmVkX2xvbmcoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX0NBUElfVkVSU0lP Tik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDM3MSwgX19weXhfTDFf ZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgIF9fcHl4X3RfNCA9IFB5VHVw bGVfTmV3KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNzEsIF9f cHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0rICBfX1B5eF9HSVZF UkVGKF9fcHl4X3RfMSk7Ci0rICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNCwgMCwgX19weXhf dF8xKTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8yKTsKLSsgIFB5VHVwbGVfU0VUX0lURU0o X19weXhfdF80LCAxLCBfX3B5eF90XzIpOwotKyAgX19QeXhfR0lWRVJFRihfX3B5eF90XzMpOwot KyAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQsIDIsIF9fcHl4X3RfMyk7Ci0rICBfX3B5eF90 XzEgPSAwOwotKyAgX19weXhfdF8yID0gMDsKLSsgIF9fcHl4X3RfMyA9IDA7Ci0rICBfX3B5eF9y ID0gX19weXhfdF80OwotKyAgX19weXhfdF80ID0gMDsKLSAgIGdvdG8gX19weXhfTDA7Ci0gCi0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzcwCi0rICogCi0rICogICAgIEBw cm9wZXJ0eQotKyAqICAgICBkZWYgYXBpX3ZlcnNpb24oc2VsZik6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHJldHVybiBfQ0FQSV9NSU5PUiwgX0NBUElfTUFKT1Is IF9DQVBJX1ZFUlNJT04KLSsgKiAKLSsgKi8KLSsKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LwotKyAgX19weXhfTDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotKyAg X19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOwot KyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuQ29udGV4dC5hcGlfdmVyc2lvbi5fX2dldF9fIiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX3B5eF9yID0gTlVMTDsKLSAg IF9fcHl4X0wwOjsKLSAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotICAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0rLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3NAotKyAqIAotKyAqICAgICBAcHJvcGVydHkKLSsg KiAgICAgZGVmIG5hbWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgICIiIlVuaXF1ZSBuYW1lIGZvciBldmVyeSBjb250ZXh0IGNyZWF0ZWQuCi0rICogCi0r ICovCi0rCi0gLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zf c2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8KLS1zdGF0aWMgaW50IF9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfM19fc2V0X18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKLS0gIGludCBfX3B5 eF9yOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzRuYW1lXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8K LStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF80bmFtZV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Ci0rICBQeU9iamVjdCAq X19weXhfciA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18gKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80ZGF0YV8yX19zZXRfXygoKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxm KSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfdmFsdWUpKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIsIDApOwotKyAgX19weXhfciA9IF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bmFtZV9fX2dldF9fKCgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOwotIAot ICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRl eHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS1zdGF0aWMgaW50IF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfMl9fc2V0X18oc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3ZfdmFsdWUpIHsKLS0gIGludCBfX3B5eF9yOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRuYW1lX19fZ2V0X18oc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKSB7Ci0r ICBjaGFyIGNvbnN0ICpfX3B5eF92X25hbWU7Ci0rICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7 Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fc2V0X18iLCAwKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlKTsKLS0g IF9fUHl4X0dJVkVSRUYoX19weXhfdl92YWx1ZSk7Ci0tICBfX1B5eF9HT1RSRUYoX19weXhfdl9z ZWxmLT5kYXRhKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmRhdGEpOwotLSAgX19w eXhfdl9zZWxmLT5kYXRhID0gX19weXhfdl92YWx1ZTsKLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLwotLSAgX19weXhfciA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLS0KLS0vKiBQeXRob24gd3JhcHBlciAqLwotLXN0 YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80ZGF0YV81X19k ZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCi0tc3RhdGljIGludCBfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzVfX2RlbF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYpIHsKLS0gIGludCBfX3B5eF9yOwotLSAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fICh3cmFwcGVy KSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZl bnRfNGRhdGFfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9FdmVudCAqKV9fcHl4X3Zfc2VsZikpOwotLQotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICov Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwot LX0KLSsgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3Rf MiA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpf X3B5eF90XzQgPSBOVUxMOwotKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0rICBjb25zdCBjaGFy ICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0rICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0rICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOwotIAotLXN0YXRpYyBpbnQg X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80ZGF0YV80X19kZWxfXyhzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdl9zZWxmKSB7 Ci0tICBpbnQgX19weXhfcjsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyIsIDApOwotLSAgX19QeXhfSU5DUkVGKFB5 X05vbmUpOwotLSAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKLS0gIF9fUHl4X0dPVFJFRihfX3B5 eF92X3NlbGYtPmRhdGEpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7Ci0t ICBfX3B5eF92X3NlbGYtPmRhdGEgPSBQeV9Ob25lOwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjM4MAotKyAqICAgICAgICAgIiIiCi0rICogICAgICAgICBjZGVmIGNvbnN0 IGNoYXIqIG5hbWUKLSsgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAgICAgICBu YW1lID0gbXB2X2NsaWVudF9uYW1lKHNlbGYuX2N0eCkKLSsgKi8KLSsgICNpZm5kZWYgQ1lUSE9O X1dJVEhPVVRfQVNTRVJUSU9OUwotKyAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7 Ci0rICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKLSsgICAg ICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKLSsgICAgICBfX1BZWF9FUlIo MCwgMzgwLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgfQotKyAgfQotKyAgI2VuZGlmCi0gCi0tICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X3IgPSAwOwotLSAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzgxCi0rICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIq IG5hbWUKLSsgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSsgKiAgICAgICAgIHdpdGggbm9n aWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBuYW1lID0g bXB2X2NsaWVudF9uYW1lKHNlbGYuX2N0eCkKLSsgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKG5h bWUpCi0rICovCi0rICB7Ci0rICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0rICAgICAgUHlUaHJl YWRTdGF0ZSAqX3NhdmU7Ci0rICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0rICAgICAgX19QeXhf RmFzdEdJTF9SZW1lbWJlcigpOwotKyAgICAgICNlbmRpZgotKyAgICAgIC8qdHJ5OiovIHsKLSAK LS0vKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzFfX2dldF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV8xX19nZXRfXyhQeU9i amVjdCAqX19weXhfdl9zZWxmKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0tICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9f Z2V0X18gKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhX19fZ2V0X18oKChzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZikpOwotKyAgICAg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM4MgotKyAqICAgICAgICAgYXNz ZXJ0IHNlbGYuX2N0eAotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAgICAgICBu YW1lID0gbXB2X2NsaWVudF9uYW1lKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobmFtZSkKLSsgKiAKLSsgKi8KLSsgICAg ICAgIF9fcHl4X3ZfbmFtZSA9IG1wdl9jbGllbnRfbmFtZShfX3B5eF92X3NlbGYtPl9jdHgpOwot KyAgICAgIH0KLSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0rICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM4MQotKyAqICAgICAgICAgY2RlZiBjb25zdCBj aGFyKiBuYW1lCi0rICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0rICogICAgICAgICB3aXRo IG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgbmFt ZSA9IG1wdl9jbGllbnRfbmFtZShzZWxmLl9jdHgpCi0rICogICAgICAgICByZXR1cm4gX3N0cmRl YyhuYW1lKQotKyAqLwotKyAgICAgIC8qZmluYWxseToqLyB7Ci0rICAgICAgICAvKm5vcm1hbCBl eGl0OiovewotKyAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAgICAgICAgX19QeXhf RmFzdEdJTF9Gb3JnZXQoKTsKLSsgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotKyAgICAgICAg ICAjZW5kaWYKLSsgICAgICAgICAgZ290byBfX3B5eF9MNTsKLSsgICAgICAgIH0KLSsgICAgICAg IF9fcHl4X0w1OjsKLSsgICAgICB9Ci0rICB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVwbHlfdXNlcmRhdGFfX19nZXRfXyhz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdl9zZWxm KSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xh cmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODMKLSsgKiAgICAgICAgIHdpdGgg bm9naWw6Ci0rICogICAgICAgICAgICAgbmFtZSA9IG1wdl9jbGllbnRfbmFtZShzZWxmLl9jdHgp Ci0rICogICAgICAgICByZXR1cm4gX3N0cmRlYyhuYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogCi0rICogICAgIEBwcm9wZXJ0eQotKyAqLwotICAgX19QeXhfWERFQ1JFRihf X3B5eF9yKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsK LS0gIF9fcHl4X3IgPSBfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhOwotKyAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzODMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zyb21T dHJpbmcoX19weXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIo MCwgMzgzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotKyAg X19weXhfdF80ID0gTlVMTDsKLSsgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtl bHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLSsgICAgX19weXhfdF80ID0gUHlNZXRo b2RfR0VUX1NFTEYoX19weXhfdF8yKTsKLSsgICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7Ci0r ICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3Rf Mik7Ci0rICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7Ci0rICAgICAgX19QeXhfSU5DUkVG KGZ1bmN0aW9uKTsKLSsgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24p OwotKyAgICB9Ci0rICB9Ci0rICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdF8zKSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOwotKyAgX19QeXhfWERFQ1JF RihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7 IF9fcHl4X3RfMyA9IDA7Ci0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCAzODMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgIF9fcHl4X3IgPSBfX3B5 eF90XzE7Ci0rICBfX3B5eF90XzEgPSAwOwotICAgZ290byBfX3B5eF9MMDsKLSAKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNzQKLSsgKiAKLSsgKiAgICAgQHByb3BlcnR5 Ci0rICogICAgIGRlZiBuYW1lKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0r ICogICAgICAgICAiIiJVbmlxdWUgbmFtZSBmb3IgZXZlcnkgY29udGV4dCBjcmVhdGVkLgotKyAq IAotKyAqLwotKwotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0rICBfX3B5eF9MMV9lcnJv cjo7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMik7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0rICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNCk7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250 ZXh0Lm5hbWUuX19nZXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUpOwotKyAgX19weXhfciA9IE5VTEw7Ci0gICBfX3B5eF9MMDo7Ci0gICBfX1B5eF9YR0lW RVJFRihfX3B5eF9yKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0 dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIGludCBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVwbHlfdXNlcmRhdGFfM19f c2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAv KnByb3RvKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZl bnRfMTRyZXBseV91c2VyZGF0YV8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl92YWx1ZSkgewotLSAgaW50IF9fcHl4X3I7Ci0tICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18gKHdy YXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzJfX3NldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19w eXhfdl92YWx1ZSkpOwotLQotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLS0KLS1zdGF0 aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2Vy ZGF0YV8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVu dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgewotLSAgaW50IF9fcHl4 X3I7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fc2V0X18iLCAwKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlKTsK LS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdl92YWx1ZSk7Ci0tICBfX1B5eF9HT1RSRUYoX19weXhf dl9zZWxmLT5yZXBseV91c2VyZGF0YSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5y ZXBseV91c2VyZGF0YSk7Ci0tICBfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhID0gX19weXhf dl92YWx1ZTsKLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19weXhfciA9IDA7 Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwot LX0KLS0KLS0vKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzVfX2RlbF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV81X19kZWxfXyhQeU9iamVjdCAq X19weXhfdl9zZWxmKSB7Ci0tICBpbnQgX19weXhfcjsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFy YXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyAod3JhcHBlciki LCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 XzE0cmVwbHlfdXNlcmRhdGFfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZikpOwotLQotLSAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCi0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBf X3B5eF9yOwotLX0KLS0KLS1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV80X19kZWxfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdl9zZWxmKSB7Ci0tICBpbnQgX19weXhfcjsK LS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX19kZWxfXyIsIDApOwotLSAgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotLSAgX19QeXhf R0lWRVJFRihQeV9Ob25lKTsKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnJlcGx5X3Vz ZXJkYXRhKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsK LS0gIF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBQeV9Ob25lOwotLQotLSAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCi0tICBfX3B5eF9yID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotLQotLS8qICIodHJlZSBmcmFn bWVudCkiOjEKLS0gKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgY2RlZiB0dXBsZSBzdGF0ZQotLSAqICAgICBjZGVmIG9i amVjdCBfZGljdAotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODYKLSsgKiAK LSsgKiAgICAgQHByb3BlcnR5Ci0rICogICAgIGRlZiB0aW1lKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAiIiJJbnRlcm5hbCBtcHYgY2xpZW50IHRpbWUu Ci0rICogCi0gICovCi0gCi0gLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMV9fcmVkdWNlX2N5dGhvbl9f KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7 IC8qcHJvdG8qLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF8xX19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lU SE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNHRpbWVfMV9fZ2V0X18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1lXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYpIHsKLSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0 aG9uX18gKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzVFdmVudF9fX3JlZHVjZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxmKSk7Ci0rICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNHRpbWVfX19nZXRfXygoKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3Nl bGYpKTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19fcmVkdWNlX2N5dGhv bl9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92 X3NlbGYpIHsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X3N0YXRlID0gMDsKLS0gIFB5T2JqZWN0ICpf X3B5eF92X19kaWN0ID0gMDsKLS0gIGludCBfX3B5eF92X3VzZV9zZXRzdGF0ZTsKLStzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80dGltZV9f X2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9f cHl4X3Zfc2VsZikgewotKyAgaW50NjRfdCBfX3B5eF92X3RpbWU7Ci0gICBQeU9iamVjdCAqX19w eXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotICAgUHlPYmplY3Qg Kl9fcHl4X3RfMSA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKLS0gIFB5 T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOwotLSAgaW50IF9fcHl4X3RfNDsKLS0gIGludCBfX3B5 eF90XzU7Ci0tICBpbnQgX19weXhfdF82OwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBj b25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9 IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18iLCAw KTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fIiwgMCk7Ci0gCi0tICAv KiAiKHRyZWUgZnJhZ21lbnQpIjo1Ci0tICogICAgIGNkZWYgb2JqZWN0IF9kaWN0Ci0tICogICAg IGNkZWYgYmludCB1c2Vfc2V0c3RhdGUKLS0gKiAgICAgc3RhdGUgPSAoc2VsZi5kYXRhLCBzZWxm LmVycm9yLCBzZWxmLmlkLCBzZWxmLnJlcGx5X3VzZXJkYXRhKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25l KQotLSAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKLS0gKi8KLS0gIF9fcHl4X3RfMSA9IF9f UHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3Zfc2VsZi0+ZXJyb3IpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOwotLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZf ZXZlbnRfaWQoX19weXhfdl9zZWxmLT5pZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7 Ci0tICBfX3B5eF90XzMgPSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhf dF8zKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPmRhdGEpOwotLSAgX19QeXhfR0lW RVJFRihfX3B5eF92X3NlbGYtPmRhdGEpOwotLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMs IDAsIF9fcHl4X3Zfc2VsZi0+ZGF0YSk7Ci0tICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Ci0t ICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMSwgX19weXhfdF8xKTsKLS0gIF9fUHl4X0dJ VkVSRUYoX19weXhfdF8yKTsKLS0gIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8zLCAyLCBfX3B5 eF90XzIpOwotLSAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOwot LSAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKLS0gIFB5VHVw bGVfU0VUX0lURU0oX19weXhfdF8zLCAzLCBfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsK LS0gIF9fcHl4X3RfMSA9IDA7Ci0tICBfX3B5eF90XzIgPSAwOwotLSAgX19weXhfdl9zdGF0ZSA9 ICgoUHlPYmplY3QqKV9fcHl4X3RfMyk7Ci0tICBfX3B5eF90XzMgPSAwOwotLQotLSAgLyogIih0 cmVlIGZyYWdtZW50KSI6NgotLSAqICAgICBjZGVmIGJpbnQgdXNlX3NldHN0YXRlCi0tICogICAg IHN0YXRlID0gKHNlbGYuZGF0YSwgc2VsZi5lcnJvciwgc2VsZi5pZCwgc2VsZi5yZXBseV91c2Vy ZGF0YSkKLS0gKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6 Ci0tICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQotLSAqLwotLSAgX19weXhfdF8zID0gX19Q eXhfR2V0QXR0cjMoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19kaWN0LCBQ eV9Ob25lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgNiwgX19weXhf TDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gIF9fcHl4X3ZfX2RpY3Qg PSBfX3B5eF90XzM7Ci0tICBfX3B5eF90XzMgPSAwOwotLQotLSAgLyogIih0cmVlIGZyYWdtZW50 KSI6NwotLSAqICAgICBzdGF0ZSA9IChzZWxmLmRhdGEsIHNlbGYuZXJyb3IsIHNlbGYuaWQsIHNl bGYucmVwbHlfdXNlcmRhdGEpCi0tICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0 X18nLCBOb25lKQotLSAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKLS0gKiAgICAgICAg IHVzZV9zZXRzdGF0ZSA9IFRydWUKLS0gKi8KLS0gIF9fcHl4X3RfNCA9IChfX3B5eF92X19kaWN0 ICE9IFB5X05vbmUpOwotLSAgX19weXhfdF81ID0gKF9fcHl4X3RfNCAhPSAwKTsKLS0gIGlmIChf X3B5eF90XzUpIHsKLS0KLS0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6OAotLSAqICAgICBfZGlj dCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKLS0gKiAgICAgaWYgX2RpY3QgaXMg bm90IE5vbmU6Ci0tICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCi0tICogICAgIGVs c2U6Ci0tICovCi0tICAgIF9fcHl4X3RfMyA9IFB5VHVwbGVfTmV3KDEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA4LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X19kaWN0KTsKLS0g ICAgX19QeXhfR0lWRVJFRihfX3B5eF92X19kaWN0KTsKLS0gICAgUHlUdXBsZV9TRVRfSVRFTShf X3B5eF90XzMsIDAsIF9fcHl4X3ZfX2RpY3QpOwotLSAgICBfX3B5eF90XzIgPSBQeU51bWJlcl9J blBsYWNlQWRkKF9fcHl4X3Zfc3RhdGUsIF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDEsIDgsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8yKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7 Ci0tICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl9zdGF0ZSwgKChQeU9iamVjdCopX19weXhf dF8yKSk7Ci0tICAgIF9fcHl4X3RfMiA9IDA7Ci0tCi0tICAgIC8qICIodHJlZSBmcmFnbWVudCki OjkKLS0gKiAgICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6Ci0tICogICAgICAgICBzdGF0ZSArPSAo X2RpY3QsKQotLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgIGVsc2U6Ci0tICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBz ZWxmLmRhdGEgaXMgbm90IE5vbmUgb3Igc2VsZi5yZXBseV91c2VyZGF0YSBpcyBub3QgTm9uZQot LSAqLwotLSAgICBfX3B5eF92X3VzZV9zZXRzdGF0ZSA9IDE7Ci0tCi0tICAgIC8qICIodHJlZSBm cmFnbWVudCkiOjcKLS0gKiAgICAgc3RhdGUgPSAoc2VsZi5kYXRhLCBzZWxmLmVycm9yLCBzZWxm LmlkLCBzZWxmLnJlcGx5X3VzZXJkYXRhKQotLSAqICAgICBfZGljdCA9IGdldGF0dHIoc2VsZiwg J19fZGljdF9fJywgTm9uZSkKLS0gKiAgICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpCi0tICog ICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCi0tICovCi0tICAgIGdvdG8gX19weXhfTDM7Ci0t ICB9Ci0tCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMQotLSAqICAgICAgICAgdXNlX3NldHN0 YXRlID0gVHJ1ZQotLSAqICAgICBlbHNlOgotLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2Vs Zi5kYXRhIGlzIG5vdCBOb25lIG9yIHNlbGYucmVwbHlfdXNlcmRhdGEgaXMgbm90IE5vbmUgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBpZiB1c2Vfc2V0c3RhdGU6Ci0tICog ICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0eXBlKHNlbGYpLCAweGRhMzhj MjUsIE5vbmUpLCBzdGF0ZQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM5 NAotKyAqICAgICAgICAgIiIiCi0rICogICAgICAgICBjZGVmIGludDY0X3QgdGltZQotKyAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgICAgICB3aXRoIG5vZ2lsOgotKyAqICAgICAgICAgICAgIHRpbWUgPSBtcHZfZ2V0X3RpbWVf dXMoc2VsZi5fY3R4KQotICAqLwotLSAgLyplbHNlKi8gewotLSAgICBfX3B5eF90XzQgPSAoX19w eXhfdl9zZWxmLT5kYXRhICE9IFB5X05vbmUpOwotLSAgICBfX3B5eF90XzYgPSAoX19weXhfdF80 ICE9IDApOwotLSAgICBpZiAoIV9fcHl4X3RfNikgewotLSAgICB9IGVsc2UgewotLSAgICAgIF9f cHl4X3RfNSA9IF9fcHl4X3RfNjsKLS0gICAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9u ZTsKLSsgICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUwotKyAgaWYgKHVubGlrZWx5 KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Ci0rICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+ X2N0eCAhPSAwKSkpIHsKLSsgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9y KTsKLSsgICAgICBfX1BZWF9FUlIoMCwgMzk0LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgfQotLSAg ICBfX3B5eF90XzYgPSAoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSAhPSBQeV9Ob25lKTsK LS0gICAgX19weXhfdF80ID0gKF9fcHl4X3RfNiAhPSAwKTsKLS0gICAgX19weXhfdF81ID0gX19w eXhfdF80OwotLSAgICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OwotLSAgICBfX3B5eF92X3Vz ZV9zZXRzdGF0ZSA9IF9fcHl4X3RfNTsKLSAgIH0KLS0gIF9fcHl4X0wzOjsKLSsgICNlbmRpZgot IAotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKLS0gKiAgICAgZWxzZToKLS0gKiAgICAgICAg IHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9uZSBvciBzZWxmLnJlcGx5X3VzZXJk YXRhIGlzIG5vdCBOb25lCi0tICogICAgIGlmIHVzZV9zZXRzdGF0ZTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0V2ZW50LCAo dHlwZShzZWxmKSwgMHhkYTM4YzI1LCBOb25lKSwgc3RhdGUKLS0gKiAgICAgZWxzZToKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozOTUKLSsgKiAgICAgICAgIGNkZWYgaW50 NjRfdCB0aW1lCi0rICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0rICogICAgICAgICB3aXRo IG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgdGlt ZSA9IG1wdl9nZXRfdGltZV91cyhzZWxmLl9jdHgpCi0rICogICAgICAgICByZXR1cm4gdGltZQot ICAqLwotLSAgX19weXhfdF81ID0gKF9fcHl4X3ZfdXNlX3NldHN0YXRlICE9IDApOwotLSAgaWYg KF9fcHl4X3RfNSkgewotKyAgewotKyAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotKyAgICAgIFB5 VGhyZWFkU3RhdGUgKl9zYXZlOwotKyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotKyAgICAgIF9f UHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLSsgICAgICAjZW5kaWYKLSsgICAgICAvKnRyeToqLyB7 Ci0gCi0tICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjEzCi0tICogICAgICAgICB1c2Vfc2V0c3Rh dGUgPSBzZWxmLmRhdGEgaXMgbm90IE5vbmUgb3Igc2VsZi5yZXBseV91c2VyZGF0YSBpcyBub3Qg Tm9uZQotLSAqICAgICBpZiB1c2Vfc2V0c3RhdGU6Ci0tICogICAgICAgICByZXR1cm4gX19weXhf dW5waWNrbGVfRXZlbnQsICh0eXBlKHNlbGYpLCAweGRhMzhjMjUsIE5vbmUpLCBzdGF0ZSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGVsc2U6Ci0tICogICAgICAgICByZXR1 cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0eXBlKHNlbGYpLCAweGRhMzhjMjUsIHN0YXRlKQot KyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM5NgotKyAqICAgICAg ICAgYXNzZXJ0IHNlbGYuX2N0eAotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAg ICAgICB0aW1lID0gbXB2X2dldF90aW1lX3VzKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIHRpbWUKLSsgKiAKLSAgKi8KLS0gICAgX19Q eXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5 eF90XzIsIF9fcHl4X25fc19weXhfdW5waWNrbGVfRXZlbnQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzIpOwotLSAgICBfX3B5eF90XzMgPSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gICAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilQ eV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOwotLSAgICBfX1B5eF9HSVZFUkVG KCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOwotLSAg ICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMCwgKChQeU9iamVjdCAqKVB5X1RZUEUoKChQ eU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7Ci0tICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRf MjI4ODIyMDUzKTsKLS0gICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRfMjI4ODIyMDUzKTsKLS0g ICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDEsIF9fcHl4X2ludF8yMjg4MjIwNTMpOwot LSAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0tICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7 Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8zLCAyLCBQeV9Ob25lKTsKLS0gICAgX19w eXhfdF8xID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 Ci0tICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8yKTsKLS0gICAgUHlUdXBsZV9TRVRfSVRFTShf X3B5eF90XzEsIDAsIF9fcHl4X3RfMik7Ci0tICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8zKTsK LS0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4X3RfMyk7Ci0tICAgIF9f UHl4X0lOQ1JFRihfX3B5eF92X3N0YXRlKTsKLS0gICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3N0 YXRlKTsKLS0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDIsIF9fcHl4X3Zfc3RhdGUp OwotLSAgICBfX3B5eF90XzIgPSAwOwotLSAgICBfX3B5eF90XzMgPSAwOwotLSAgICBfX3B5eF9y ID0gX19weXhfdF8xOwotLSAgICBfX3B5eF90XzEgPSAwOwotLSAgICBnb3RvIF9fcHl4X0wwOwot KyAgICAgICAgX19weXhfdl90aW1lID0gbXB2X2dldF90aW1lX3VzKF9fcHl4X3Zfc2VsZi0+X2N0 eCk7Ci0rICAgICAgfQotIAotLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgotLSAqICAgICBl bHNlOgotLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5kYXRhIGlzIG5vdCBOb25lIG9y IHNlbGYucmVwbHlfdXNlcmRhdGEgaXMgbm90IE5vbmUKLS0gKiAgICAgaWYgdXNlX3NldHN0YXRl OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICByZXR1cm4gX19weXhf dW5waWNrbGVfRXZlbnQsICh0eXBlKHNlbGYpLCAweGRhMzhjMjUsIE5vbmUpLCBzdGF0ZQotLSAq ICAgICBlbHNlOgotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozOTUK LSsgKiAgICAgICAgIGNkZWYgaW50NjRfdCB0aW1lCi0rICogICAgICAgICBhc3NlcnQgc2VsZi5f Y3R4Ci0rICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICAgICAgdGltZSA9IG1wdl9nZXRfdGltZV91cyhzZWxmLl9jdHgpCi0rICog ICAgICAgICByZXR1cm4gdGltZQotICAqLwotKyAgICAgIC8qZmluYWxseToqLyB7Ci0rICAgICAg ICAvKm5vcm1hbCBleGl0OiovewotKyAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAg ICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKLSsgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFE UwotKyAgICAgICAgICAjZW5kaWYKLSsgICAgICAgICAgZ290byBfX3B5eF9MNTsKLSsgICAgICAg IH0KLSsgICAgICAgIF9fcHl4X0w1OjsKLSsgICAgICB9Ci0gICB9Ci0gCi0tICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxNQotLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0V2ZW50LCAo dHlwZShzZWxmKSwgMHhkYTM4YzI1LCBOb25lKSwgc3RhdGUKLS0gKiAgICAgZWxzZToKLS0gKiAg ICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9FdmVudCwgKHR5cGUoc2VsZiksIDB4ZGEzOGMy NSwgc3RhdGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiBkZWYgX19zZXRzdGF0 ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6Ci0tICogICAgIF9fcHl4X3VucGlja2xlX0V2 ZW50X19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCi0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6Mzk3Ci0rICogICAgICAgICB3aXRoIG5vZ2lsOgotKyAqICAgICAgICAg ICAgIHRpbWUgPSBtcHZfZ2V0X3RpbWVfdXMoc2VsZi5fY3R4KQotKyAqICAgICAgICAgcmV0dXJu IHRpbWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIAotKyAqICAgICAjIGRlZiBz dXNwZW5kKHNlbGYpOgotICAqLwotLSAgLyplbHNlKi8gewotLSAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOwotLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhf bl9zX3B5eF91bnBpY2tsZV9FdmVudCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDEsIDE1LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 Ci0tICAgIF9fcHl4X3RfMyA9IFB5VHVwbGVfTmV3KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MykpIF9fUFlYX0VSUigxLCAxNSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOwotLSAgICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9i amVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7Ci0tICAgIF9fUHl4X0dJVkVSRUYoKChQeU9iamVjdCAq KVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7Ci0tICAgIFB5VHVwbGVfU0VU X0lURU0oX19weXhfdF8zLCAwLCAoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19w eXhfdl9zZWxmKSkpKTsKLS0gICAgX19QeXhfSU5DUkVGKF9fcHl4X2ludF8yMjg4MjIwNTMpOwot LSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X2ludF8yMjg4MjIwNTMpOwotLSAgICBQeVR1cGxlX1NF VF9JVEVNKF9fcHl4X3RfMywgMSwgX19weXhfaW50XzIyODgyMjA1Myk7Ci0tICAgIF9fUHl4X0lO Q1JFRihfX3B5eF92X3N0YXRlKTsKLS0gICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3N0YXRlKTsK LS0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDIsIF9fcHl4X3Zfc3RhdGUpOwotLSAg ICBfX3B5eF90XzIgPSBQeVR1cGxlX05ldygyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8yKTsKLS0gICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwotLSAgICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfMiwgMCwgX19weXhfdF8xKTsKLS0gICAgX19QeXhfR0lWRVJFRihfX3B5eF90 XzMpOwotLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMiwgMSwgX19weXhfdF8zKTsKLS0g ICAgX19weXhfdF8xID0gMDsKLS0gICAgX19weXhfdF8zID0gMDsKLS0gICAgX19weXhfciA9IF9f cHl4X3RfMjsKLS0gICAgX19weXhfdF8yID0gMDsKLS0gICAgZ290byBfX3B5eF9MMDsKLS0gIH0K LSsgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0rICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9G cm9tX2ludDY0X3QoX19weXhfdl90aW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgMzk3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OwotKyAgX19weXhfciA9IF9fcHl4X3RfMTsKLSsgIF9fcHl4X3RfMSA9IDA7Ci0rICBnb3RvIF9f cHl4X0wwOwotIAotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MQotLSAqIGRlZiBfX3JlZHVjZV9j eXRob25fXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBjZGVm IHR1cGxlIHN0YXRlCi0tICogICAgIGNkZWYgb2JqZWN0IF9kaWN0Ci0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6Mzg2Ci0rICogCi0rICogICAgIEBwcm9wZXJ0eQotKyAqICAg ICBkZWYgdGltZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAg ICAgIiIiSW50ZXJuYWwgbXB2IGNsaWVudCB0aW1lLgotKyAqIAotICAqLwotIAotICAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCi0gICBfX3B5eF9MMV9lcnJvcjo7Ci0gICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMyk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5FdmVudC5fX3JlZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5t cHYuQ29udGV4dC50aW1lLl9fZ2V0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKLSAgIF9fcHl4X3IgPSBOVUxMOwotICAgX19weXhfTDA6OwotLSAgX19Q eXhfWERFQ1JFRihfX3B5eF92X3N0YXRlKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9fZGlj dCk7Ci0gICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICIodHJlZSBmcmFnbWVu dCkiOjE2Ci0tICogICAgIGVsc2U6Ci0tICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVf RXZlbnQsICh0eXBlKHNlbGYpLCAweGRhMzhjMjUsIHN0YXRlKQotLSAqIGRlZiBfX3NldHN0YXRl X2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0 YXRlKQotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MTIKLSsgKiAKLSsgKiAg ICAgQF9lcnJvcnMKLSsgKiAgICAgZGVmIHJlcXVlc3RfZXZlbnQoc2VsZiwgZXZlbnQsIGVuYWJs ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICIiIkVuYWJsZSBv ciBkaXNhYmxlIGEgZ2l2ZW4gZXZlbnQuCi0rICogCi0gICovCi0gCi0gLyogUHl0aG9uIHdyYXBw ZXIgKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 RXZlbnRfM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfM19fc2V0c3RhdGVfY3l0aG9uX18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsK LStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xcmVxdWVzdF9ldmVudChQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhf YXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KLStzdGF0aWMgY2hhciBfX3B5 eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X3JlcXVlc3RfZXZlbnRbXSA9ICJF bmFibGUgb3IgZGlzYWJsZSBhIGdpdmVuIGV2ZW50LlxuXG4gICAgICAgIEFyZ3VtZW50czpcbiAg ICAgICAgZXZlbnQgLSBTZWUgRXZlbnRzXG4gICAgICAgIGVuYWJsZSAtIFRydWUgdG8gZW5hYmxl LCBGYWxzZSB0byBkaXNhYmxlXG5cbiAgICAgICAgV3JhcHM6IG1wdl9yZXF1ZXN0X2V2ZW50XG4g ICAgICAgICI7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMXJlcXVlc3RfZXZlbnQoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7Ci0rICBQeU9iamVjdCAqX19w eXhfdl9ldmVudCA9IDA7Ci0rICBQeU9iamVjdCAqX19weXhfdl9lbmFibGUgPSAwOwotKyAgaW50 IF9fcHl4X2xpbmVubyA9IDA7Ci0rICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7 Ci0rICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0g ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fc2V0c3RhdGVfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yX19zZXRzdGF0ZV9jeXRob25fXygo KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9z ZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsKLSsgIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJyZXF1ZXN0X2V2ZW50ICh3cmFwcGVyKSIsIDApOwotKyAgewotKyAg ICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19ldmVu dCwmX19weXhfbl9zX2VuYWJsZSwwfTsKLSsgICAgUHlPYmplY3QqIHZhbHVlc1syXSA9IHswLDB9 OwotKyAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKLSsgICAgICBQeV9zc2l6ZV90IGt3 X2FyZ3M7Ci0rICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJ WkUoX19weXhfYXJncyk7Ci0rICAgICAgc3dpdGNoIChwb3NfYXJncykgewotKyAgICAgICAgY2Fz ZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKLSsgICAg ICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5 VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9V R0g7Ci0rICAgICAgICBjYXNlICAwOiBicmVhazsKLSsgICAgICAgIGRlZmF1bHQ6IGdvdG8gX19w eXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0rICAgICAgfQotKyAgICAgIGt3X2FyZ3MgPSBQeURpY3Rf U2l6ZShfX3B5eF9rd2RzKTsKLSsgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0rICAgICAgICBj YXNlICAwOgotKyAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dl dEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2V2ZW50KSkgIT0gMCkpIGt3X2FyZ3MtLTsK LSsgICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLSsgICAgICAgIENZ VEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgIGNhc2UgIDE6Ci0rICAgICAgICBpZiAobGlrZWx5 KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9u X3NfZW5hYmxlKSkgIT0gMCkpIGt3X2FyZ3MtLTsKLSsgICAgICAgIGVsc2UgewotKyAgICAgICAg ICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgicmVxdWVzdF9ldmVudCIsIDEsIDIsIDIsIDEp OyBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MM19lcnJvcikKLSsgICAgICAgIH0KLSsgICAgICB9 Ci0rICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewotKyAgICAgICAgaWYgKHVubGlr ZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25h bWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAicmVxdWVzdF9ldmVudCIpIDwgMCkpIF9fUFlYX0VS UigwLCA0MTIsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgIH0KLSsgICAgfSBlbHNlIGlmIChQeVR1 cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9IDIpIHsKLSsgICAgICBnb3RvIF9fcHl4X0w1X2Fy Z3R1cGxlX2Vycm9yOwotKyAgICB9IGVsc2UgewotKyAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVf R0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0rICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRf SVRFTShfX3B5eF9hcmdzLCAxKTsKLSsgICAgfQotKyAgICBfX3B5eF92X2V2ZW50ID0gdmFsdWVz WzBdOwotKyAgICBfX3B5eF92X2VuYWJsZSA9IHZhbHVlc1sxXTsKLSsgIH0KLSsgIGdvdG8gX19w eXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7Ci0rICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJv cjo7Ci0rICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgicmVxdWVzdF9ldmVudCIsIDEsIDIs IDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5 eF9MM19lcnJvcikKLSsgIF9fcHl4X0wzX2Vycm9yOjsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQucmVxdWVzdF9ldmVudCIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7Ci0rICByZXR1cm4gTlVMTDsKLSsgIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2lu Z19kb25lOjsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfcmVxdWVzdF9ldmVudCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X2V2ZW50LCBfX3B5eF92X2VuYWJs ZSk7Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLXN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yX19zZXRzdGF0ZV9jeXRo b25fXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhf dl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgewotK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X3JlcXVlc3RfZXZlbnQo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9z ZWxmLCBQeU9iamVjdCAqX19weXhfdl9ldmVudCwgUHlPYmplY3QgKl9fcHl4X3ZfZW5hYmxlKSB7 Ci0rICBpbnQgX19weXhfdl9lbmFibGVfaTsKLSsgIGludCBfX3B5eF92X2VycjsKLSsgIGVudW0g bXB2X2V2ZW50X2lkIF9fcHl4X3ZfZXZlbnRfaWQ7Ci0gICBQeU9iamVjdCAqX19weXhfciA9IE5V TEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgUHlPYmplY3QgKl9fcHl4X3Rf MSA9IE5VTEw7Ci0rICBpbnQgX19weXhfdF8xOwotKyAgaW50IF9fcHl4X3RfMjsKLSsgIGVudW0g bXB2X2V2ZW50X2lkIF9fcHl4X3RfMzsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOwot ICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9 IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyIsIDApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoInJlcXVlc3RfZXZlbnQiLCAwKTsKLSAKLS0gIC8qICIodHJlZSBmcmFnbWVudCki OjE3Ci0tICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0eXBlKHNlbGYp LCAweGRhMzhjMjUsIHN0YXRlKQotLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9f cHl4X3N0YXRlKToKLS0gKiAgICAgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShzZWxm LCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyMQotKyAqICAgICAgICAgV3JhcHM6IG1wdl9yZXF1 ZXN0X2V2ZW50Ci0rICogICAgICAgICAiIiIKLSsgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgY2RlZiBpbnQgZW5hYmxl X2kgPSAxIGlmIGVuYWJsZSBlbHNlIDAKLSsgKiAgICAgICAgIGNkZWYgaW50IGVycgotICAqLwot LSAgaWYgKCEobGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X19fcHl4X3N0YXRlKSl8 fCgoX19weXhfdl9fX3B5eF9zdGF0ZSkgPT0gUHlfTm9uZSl8fChQeUVycl9Gb3JtYXQoUHlFeGNf VHlwZUVycm9yLCAiRXhwZWN0ZWQgJS4xNnMsIGdvdCAlLjIwMHMiLCAidHVwbGUiLCBQeV9UWVBF KF9fcHl4X3ZfX19weXhfc3RhdGUpLT50cF9uYW1lKSwgMCkpKSBfX1BZWF9FUlIoMSwgMTcsIF9f cHl4X0wxX2Vycm9yKQotLSAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShfX3B5eF92X3NlbGYsICgoUHlPYmpl Y3QqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMSwgMTcsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgICNpZm5kZWYg Q1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUwotKyAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZs YWcpKSB7Ci0rICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsK LSsgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKLSsgICAgICBfX1BZ WF9FUlIoMCwgNDIxLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgfQotKyAgfQotKyAgI2VuZGlmCi0g Ci0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNgotLSAqICAgICBlbHNlOgotLSAqICAgICAgICAg cmV0dXJuIF9fcHl4X3VucGlja2xlX0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBzdGF0 ZSkKLS0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgX19weXhfdW5waWNrbGVfRXZlbnRfX3Nl dF9zdGF0ZShzZWxmLCBfX3B5eF9zdGF0ZSkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0MjIKLSsgKiAgICAgICAgICIiIgotKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAotKyAqICAgICAgICAgY2RlZiBpbnQgZW5hYmxlX2kgPSAxIGlmIGVuYWJsZSBlbHNlIDAgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0rICog ICAgICAgICBjZGVmIG1wdl9ldmVudF9pZCBldmVudF9pZCA9IGV2ZW50Ci0gICovCi0rICBfX3B5 eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9lbmFibGUpOyBpZiAodW5saWtl bHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA0MjIsIF9fcHl4X0wxX2Vycm9yKQotKyAg aWYgKF9fcHl4X3RfMikgewotKyAgICBfX3B5eF90XzEgPSAxOwotKyAgfSBlbHNlIHsKLSsgICAg X19weXhfdF8xID0gMDsKLSsgIH0KLSsgIF9fcHl4X3ZfZW5hYmxlX2kgPSBfX3B5eF90XzE7Ci0g Ci0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5 eF9JTkNSRUYoUHlfTm9uZSk7Ci0tICBnb3RvIF9fcHl4X0wwOwotLSAgX19weXhfTDFfZXJyb3I6 OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2 aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQuX19zZXRzdGF0ZV9jeXRob25fXyIsIF9fcHl4X2NsaW5l bm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotLSAgX19weXhfciA9IE5VTEw7Ci0t ICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLS0gIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyNAotKyAqICAgICAgICAgY2RlZiBpbnQgZW5hYmxl X2kgPSAxIGlmIGVuYWJsZSBlbHNlIDAKLSsgKiAgICAgICAgIGNkZWYgaW50IGVycgotKyAqICAg ICAgICAgY2RlZiBtcHZfZXZlbnRfaWQgZXZlbnRfaWQgPSBldmVudCAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICB3aXRoIG5vZ2lsOgotKyAqICAgICAgICAgICAgIGVy ciA9IG1wdl9yZXF1ZXN0X2V2ZW50KHNlbGYuX2N0eCwgZXZlbnRfaWQsIGVuYWJsZV9pKQotKyAq LwotKyAgX19weXhfdF8zID0gKChlbnVtIG1wdl9ldmVudF9pZClfX1B5eF9QeUludF9Bc19lbnVt X19tcHZfZXZlbnRfaWQoX19weXhfdl9ldmVudCkpOyBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCA0MjQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdl9ldmVu dF9pZCA9IF9fcHl4X3RfMzsKLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzE4Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDI1Ci0rICogICAgICAg ICBjZGVmIGludCBlcnIKLSsgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lkIGV2ZW50X2lkID0g ZXZlbnQKLSsgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9ldmVudChzZWxmLl9jdHgsIGV2 ZW50X2lkLCBlbmFibGVfaSkKLSsgKiAgICAgICAgIHJldHVybiBlcnIKLSsgKi8KLSsgIHsKLSsg ICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKLSsg ICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKLSsgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7 Ci0rICAgICAgI2VuZGlmCi0rICAgICAgLyp0cnk6Ki8gewotKwotKyAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyNgotKyAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRf aWQgZXZlbnRfaWQgPSBldmVudAotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAg ICAgICBlcnIgPSBtcHZfcmVxdWVzdF9ldmVudChzZWxmLl9jdHgsIGV2ZW50X2lkLCBlbmFibGVf aSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIGVycgot ICAqIAotKyAqLwotKyAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfcmVxdWVzdF9ldmVudChfX3B5 eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfZXZlbnRfaWQsIF9fcHl4X3ZfZW5hYmxlX2kpOwotKyAg ICAgIH0KLSsKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDI1Ci0r ICogICAgICAgICBjZGVmIGludCBlcnIKLSsgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lkIGV2 ZW50X2lkID0gZXZlbnQKLSsgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9ldmVudChzZWxm Ll9jdHgsIGV2ZW50X2lkLCBlbmFibGVfaSkKLSsgKiAgICAgICAgIHJldHVybiBlcnIKLSsgKi8K LSsgICAgICAvKmZpbmFsbHk6Ki8gewotKyAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKLSsgICAg ICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0rICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0 KCk7Ci0rICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSsgICAgICAgICAgI2VuZGlmCi0rICAg ICAgICAgIGdvdG8gX19weXhfTDU7Ci0rICAgICAgICB9Ci0rICAgICAgICBfX3B5eF9MNTo7Ci0r ICAgICAgfQotKyAgfQotKwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQy NwotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVx dWVzdF9ldmVudChzZWxmLl9jdHgsIGV2ZW50X2lkLCBlbmFibGVfaSkKLSsgKiAgICAgICAgIHJl dHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqIAotLSAqIGRlZiBfZXJy b3JzKGZuKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBkZWYgd3JhcHBl ZCgqaywgKiprdyk6Ci0tICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCi0rICogICAgIEBfZXJy b3JzCi0gICovCi0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotKyAgX19weXhfdF80ID0gX19Q eXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCA0MjcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNCk7Ci0rICBfX3B5eF9yID0gX19weXhfdF80OwotKyAgX19weXhfdF80ID0gMDsKLSsgIGdv dG8gX19weXhfTDA7Ci0gCi0tLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81X2Vycm9ycyhQeU9iamVjdCAqX19weXhf c2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZm4pOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlNZXRob2RE ZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNV9lcnJvcnMgPSB7Il9lcnJvcnMi LCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVfZXJyb3JzLCBN RVRIX08sIDB9OwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzVfZXJyb3JzKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9mbikg ewotLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlv bnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfZXJyb3JzICh3cmFwcGVyKSIsIDAp OwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl80X2Vycm9ycyhf X3B5eF9zZWxmLCAoKFB5T2JqZWN0ICopX19weXhfdl9mbikpOwotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQxMgotKyAqIAotKyAqICAgICBAX2Vycm9ycwotKyAqICAgICBk ZWYgcmVxdWVzdF9ldmVudChzZWxmLCBldmVudCwgZW5hYmxlKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAqICAgICAgICAgIiIiRW5hYmxlIG9yIGRpc2FibGUgYSBnaXZlbiBldmVu dC4KLSsgKiAKLSsgKi8KLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19weXhf TDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotKyAgX19QeXhfQWRkVHJh Y2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5yZXF1ZXN0X2V2ZW50IiwgX19weXhf Y2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX3B5eF9yID0gTlVM TDsKLSsgIF9fcHl4X0wwOjsKLSsgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotICAgX19QeXhf UmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOQotKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0MzAKLSAgKiAKLS0gKiBkZWYgX2Vycm9ycyhmbik6Ci0tICogICAgIGRl ZiB3cmFwcGVkKCprLCAqKmt3KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgdiA9IGZuKCprLCAqKmt3KQotLSAqICAgICAgICAgaWYgdiA8IDA6Ci0rICogICAgIEBf ZXJyb3JzCi0rICogICAgIGRlZiBzZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xldmVsKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9yZXF1ZXN0 X2xvZ19tZXNzYWdlcyIiIgotKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqLwotIAot IC8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN19lcnJvcnNfMXdyYXBwZWQoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLwotLXN0 YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X2Vycm9y c18xd3JhcHBlZCA9IHsid3JhcHBlZCIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9u V2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X2Vycm9yc18xd3Jh cHBlZCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9OwotLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3JzXzF3cmFwcGVkKFB5T2JqZWN0 ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMp IHsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X2sgPSAwOwotLSAgUHlPYmplY3QgKl9fcHl4X3Zfa3cg PSAwOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzNzZXRfbG9nX2xldmVsKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X2xvZ2xldmVsKTsgLypwcm90byovCi0rc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yc2V0X2xvZ19sZXZlbFtdID0gIldyYXBzOiBtcHZf cmVxdWVzdF9sb2dfbWVzc2FnZXMiOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzNzZXRfbG9nX2xldmVsKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2xvZ2xldmVsKSB7Ci0gICBQeU9iamVjdCAqX19weXhf ciA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIndyYXBwZWQgKHdyYXBwZXIpIiwgMCk7Ci0tICBpZiAodW5saWtlbHkoX19w eXhfa3dkcykgJiYgdW5saWtlbHkoIV9fUHl4X0NoZWNrS2V5d29yZFN0cmluZ3MoX19weXhfa3dk cywgIndyYXBwZWQiLCAxKSkpIHJldHVybiBOVUxMOwotLSAgaWYgKHVubGlrZWx5KF9fcHl4X2t3 ZHMpKSB7Ci0tICAgIF9fcHl4X3Zfa3cgPSBQeURpY3RfQ29weShfX3B5eF9rd2RzKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF92X2t3KSkgcmV0dXJuIE5VTEw7Ci0tICAgIF9fUHl4X0dPVFJFRihfX3B5 eF92X2t3KTsKLS0gIH0gZWxzZSB7Ci0tICAgIF9fcHl4X3Zfa3cgPSBOVUxMOwotLSAgfQotLSAg X19QeXhfSU5DUkVGKF9fcHl4X2FyZ3MpOwotLSAgX19weXhfdl9rID0gX19weXhfYXJnczsKLS0g IF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN19lcnJvcnNfd3JhcHBl ZChfX3B5eF9zZWxmLCBfX3B5eF92X2ssIF9fcHl4X3Zfa3cpOwotKyAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoInNldF9sb2dfbGV2ZWwgKHdyYXBwZXIpIiwgMCk7Ci0rICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzJzZXRfbG9nX2xldmVsKCgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zf c2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X2xvZ2xldmVsKSk7Ci0gCi0gICAvKiBmdW5jdGlv biBleGl0IGNvZGUgKi8KLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9rKTsKLS0gIF9fUHl4X1hE RUNSRUYoX19weXhfdl9rdyk7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAg IHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83X2Vycm9yc193cmFwcGVkKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQ eU9iamVjdCAqX19weXhfdl9rLCBQeU9iamVjdCAqX19weXhfdl9rdykgewotLSAgc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3Jz ICpfX3B5eF9jdXJfc2NvcGU7Ci0tICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKl9fcHl4X291dGVyX3Njb3BlOwotLSAg UHlPYmplY3QgKl9fcHl4X3ZfdiA9IE5VTEw7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMnNldF9sb2dfbGV2ZWwoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVj dCAqX19weXhfdl9sb2dsZXZlbCkgewotKyAgY2hhciBjb25zdCAqX19weXhfdl9sb2dsZXZlbF9j OwotKyAgaW50IF9fcHl4X3ZfZXJyOwotICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAg X19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxM OwotLSAgaW50IF9fcHl4X3RfMjsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotICAg UHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVM TDsKLSsgIGNoYXIgY29uc3QgKl9fcHl4X3RfNDsKLSAgIGludCBfX3B5eF9saW5lbm8gPSAwOwot ICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotICAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndyYXBwZWQiLCAwKTsKLS0g IF9fcHl4X291dGVyX3Njb3BlID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqKSBfX1B5eF9DeUZ1bmN0aW9uX0dldENs b3N1cmUoX19weXhfc2VsZik7Ci0tICBfX3B5eF9jdXJfc2NvcGUgPSBfX3B5eF9vdXRlcl9zY29w ZTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfbG9nX2xldmVsIiwgMCk7Ci0r ICBfX1B5eF9JTkNSRUYoX19weXhfdl9sb2dsZXZlbCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MzIwCi0tICogZGVmIF9lcnJvcnMoZm4pOgotLSAqICAgICBkZWYg d3JhcHBlZCgqaywgKiprdyk6Ci0tICogICAgICAgICB2ID0gZm4oKmssICoqa3cpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGlmIHYgPCAwOgotLSAqICAgICAgICAg ICAgIHJhaXNlIE1QVkVycm9yKHYpCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDMyCi0rICogICAgIGRlZiBzZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xldmVsKToKLSsgKiAg ICAgICAgICIiIldyYXBzOiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKLSsgKiAgICAgICAg IGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAg ICAgbG9nbGV2ZWwgPSBfc3RyZW5jKGxvZ2xldmVsKQotKyAqICAgICAgICAgY2RlZiBjb25zdCBj aGFyKiBsb2dsZXZlbF9jID0gbG9nbGV2ZWwKLSAgKi8KLS0gIGlmICh1bmxpa2VseSghX19weXhf Y3VyX3Njb3BlLT5fX3B5eF92X2ZuKSkgeyBfX1B5eF9SYWlzZUNsb3N1cmVOYW1lRXJyb3IoImZu Iik7IF9fUFlYX0VSUigwLCAzMjAsIF9fcHl4X0wxX2Vycm9yKSB9Ci0tICBfX3B5eF90XzEgPSBf X1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2N1cl9zY29wZS0+X19weXhfdl9mbiwgX19weXhfdl9r LCBfX3B5eF92X2t3KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzIw LCBfX3B5eF9MMV9lcnJvcikKLSsgICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUwot KyAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Ci0rICAgIGlmICh1bmxpa2VseSgh KF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKLSsgICAgICBQeUVycl9TZXROb25lKFB5RXhj X0Fzc2VydGlvbkVycm9yKTsKLSsgICAgICBfX1BZWF9FUlIoMCwgNDMyLCBfX3B5eF9MMV9lcnJv cikKLSsgICAgfQotKyAgfQotKyAgI2VuZGlmCi0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDMzCi0rICogICAgICAgICAiIiJXcmFwczogbXB2X3JlcXVlc3RfbG9nX21l c3NhZ2VzIiIiCi0rICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0rICogICAgICAgICBsb2ds ZXZlbCA9IF9zdHJlbmMobG9nbGV2ZWwpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsCi0rICogICAg ICAgICBjZGVmIGludCBlcnIKLSsgKi8KLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgNDMzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIp OwotKyAgX19weXhfdF8zID0gTlVMTDsKLSsgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg dW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLSsgICAgX19weXhfdF8zID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKLSsgICAgaWYgKGxpa2VseShfX3B5eF90XzMp KSB7Ci0rICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9f cHl4X3RfMik7Ci0rICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7Ci0rICAgICAgX19QeXhf SU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVu Y3Rpb24pOwotKyAgICB9Ci0rICB9Ci0rICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4 X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl9sb2dsZXZl bCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9sb2dsZXZl bCk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0MzMsIF9fcHl4X0wxX2Vycm9yKQot ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX3B5eF92X3YgPSBfX3B5eF90XzE7Ci0r ICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgIF9fUHl4X0RFQ1JF Rl9TRVQoX19weXhfdl9sb2dsZXZlbCwgX19weXhfdF8xKTsKLSAgIF9fcHl4X3RfMSA9IDA7Ci0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzIxCi0tICogICAgIGRlZiB3 cmFwcGVkKCprLCAqKmt3KToKLS0gKiAgICAgICAgIHYgPSBmbigqaywgKiprdykKLS0gKiAgICAg ICAgIGlmIHYgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAg ICAgcmFpc2UgTVBWRXJyb3IodikKLS0gKiAgICAgcmV0dXJuIHdyYXBwZWQKLSsgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzQKLSsgKiAgICAgICAgIGFzc2VydCBzZWxmLl9j dHgKLSsgKiAgICAgICAgIGxvZ2xldmVsID0gX3N0cmVuYyhsb2dsZXZlbCkKLSsgKiAgICAgICAg IGNkZWYgY29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGNkZWYgaW50IGVycgotKyAqICAgICAgICAgd2l0aCBu b2dpbDoKLSAgKi8KLS0gIF9fcHl4X3RfMSA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3Zf diwgX19weXhfaW50XzAsIFB5X0xUKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMjEsIF9fcHl4X0wxX2Vycm9yKQotLSAg X19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2Vs eShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDMyMSwgX19weXhfTDFfZXJyb3IpCi0tICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLS0gIGlmICh1bmxpa2VseShf X3B5eF90XzIpKSB7Ci0rICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5 eF92X2xvZ2xldmVsKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF80KSAmJiBQeUVycl9PY2N1cnJl ZCgpKSkgX19QWVhfRVJSKDAsIDQzNCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF92X2xvZ2xl dmVsX2MgPSBfX3B5eF90XzQ7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMjIKLS0gKiAgICAgICAgIHYgPSBmbigqaywgKiprdykKLS0gKiAgICAgICAgIGlmIHYg PCAwOgotLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKHYpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgcmV0dXJuIHdyYXBwZWQKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0MzYKLSsgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbG9nbGV2 ZWxfYyA9IGxvZ2xldmVsCi0rICogICAgICAgICBjZGVmIGludCBlcnIKLSsgKiAgICAgICAgIHdp dGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBl cnIgPSBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMoc2VsZi5fY3R4LCBsb2dsZXZlbF9jKQotKyAq ICAgICAgICAgcmV0dXJuIGVycgotKyAqLwotKyAgewotKyAgICAgICNpZmRlZiBXSVRIX1RIUkVB RAotKyAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwotKyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFE UwotKyAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLSsgICAgICAjZW5kaWYKLSsgICAg ICAvKnRyeToqLyB7Ci0rCi0rICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDM3Ci0rICogICAgICAgICBjZGVmIGludCBlcnIKLSsgKiAgICAgICAgIHdpdGggbm9naWw6 Ci0rICogICAgICAgICAgICAgZXJyID0gbXB2X3JlcXVlc3RfbG9nX21lc3NhZ2VzKHNlbGYuX2N0 eCwgbG9nbGV2ZWxfYykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg cmV0dXJuIGVycgotICAqIAotICAqLwotLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9f cHl4X3RfMywgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBf X1BZWF9FUlIoMCwgMzIyLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMyk7Ci0tICAgIF9fcHl4X3RfNCA9IE5VTEw7Ci0tICAgIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKLS0gICAgICBf X3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzMpOwotLSAgICAgIGlmIChsaWtl bHkoX19weXhfdF80KSkgewotLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2Rf R0VUX0ZVTkNUSU9OKF9fcHl4X3RfMyk7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF80 KTsKLS0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3RfMywgZnVuY3Rpb24pOwotKyAgICAgICAgX19weXhfdl9lcnIgPSBtcHZf cmVxdWVzdF9sb2dfbWVzc2FnZXMoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X2xvZ2xldmVs X2MpOwotICAgICAgIH0KLS0gICAgfQotLSAgICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9f UHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzMsIF9fcHl4X3RfNCwgX19weXhfdl92KSA6 IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF92X3YpOwotLSAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICAgIGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMyMiwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19w eXhfdF8zID0gMDsKLS0gICAgX19QeXhfUmFpc2UoX19weXhfdF8xLCAwLCAwLCAwKTsKLS0gICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICAgIF9fUFlYX0VSUigw LCAzMjIsIF9fcHl4X0wxX2Vycm9yKQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzIxCi0tICogICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KToKLS0gKiAgICAgICAg IHYgPSBmbigqaywgKiprdykKLS0gKiAgICAgICAgIGlmIHYgPCAwOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IodikKLS0gKiAgICAg cmV0dXJuIHdyYXBwZWQKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDM2Ci0rICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGxvZ2xldmVsX2MgPSBsb2dsZXZlbAot KyAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0rICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgZXJyID0gbXB2X3JlcXVlc3Rf bG9nX21lc3NhZ2VzKHNlbGYuX2N0eCwgbG9nbGV2ZWxfYykKLSsgKiAgICAgICAgIHJldHVybiBl cnIKLSAgKi8KLSsgICAgICAvKmZpbmFsbHk6Ki8gewotKyAgICAgICAgLypub3JtYWwgZXhpdDoq L3sKLSsgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0rICAgICAgICAgIF9fUHl4X0Zhc3RH SUxfRm9yZ2V0KCk7Ci0rICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSsgICAgICAgICAgI2Vu ZGlmCi0rICAgICAgICAgIGdvdG8gX19weXhfTDU7Ci0rICAgICAgICB9Ci0rICAgICAgICBfX3B5 eF9MNTo7Ci0rICAgICAgfQotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjMxOQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzOAotKyAq ICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9s b2dfbWVzc2FnZXMoc2VsZi5fY3R4LCBsb2dsZXZlbF9jKQotKyAqICAgICAgICAgcmV0dXJuIGVy ciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0tICogZGVmIF9lcnJvcnMoZm4p OgotLSAqICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLS0gKiAgICAgICAgIHYgPSBmbigqaywgKiprdykKLS0gKiAgICAgICAgIGlmIHYgPCAw OgotKyAqICAgICBAX2Vycm9ycwotKyAqLwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLSsg IF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNDM4LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgX19weXhfciA9IF9fcHl4X3RfMTsKLSsgIF9fcHl4 X3RfMSA9IDA7Ci0rICBnb3RvIF9fcHl4X0wwOwotKwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQzMAotKyAqIAotKyAqICAgICBAX2Vycm9ycwotKyAqICAgICBkZWYgc2V0 X2xvZ19sZXZlbChzZWxmLCBsb2dsZXZlbCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgICAgICIiIldyYXBzOiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKLSsgKiAg ICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSAgKi8KLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLwotLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLS0gIGdv dG8gX19weXhfTDA7Ci0gICBfX3B5eF9MMV9lcnJvcjo7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0gICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMyk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9BZGRUcmFj ZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fZXJyb3JzLndyYXBwZWQiLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuc2V0X2xvZ19sZXZlbCIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotICAgX19weXhfciA9IE5VTEw7Ci0gICBf X3B5eF9MMDo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfdik7Ci0rICBfX1B5eF9YREVDUkVG KF9fcHl4X3ZfbG9nbGV2ZWwpOwotICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0v KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE4Ci0tICogCi0rLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjQ0MQotICAqIAotLSAqIGRlZiBfZXJyb3JzKGZuKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6 Ci0tICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCi0rICogICAgIEBfZXJyb3JzCi0rICogICAg IGRlZiBsb2FkX2NvbmZpZyhzZWxmLCBmaWxlbmFtZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgICAgICIiIldyYXBzOiBtcHZfbG9hZF9jb25maWdfZmlsZSIiIgotKyAq ICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqLwotIAotLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzRfZXJyb3JzKENZVEhPTl9VTlVTRUQgUHlPYmpl Y3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2ZuKSB7Ci0tICBzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKl9f cHl4X2N1cl9zY29wZTsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X3dyYXBwZWQgPSAwOwotKy8qIFB5 dGhvbiB3cmFwcGVyICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfNWxvYWRfY29uZmlnKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF92X2ZpbGVuYW1lKTsgLypwcm90byovCi0rc3RhdGljIGNoYXIgX19weXhf ZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bG9hZF9jb25maWdbXSA9ICJXcmFw czogbXB2X2xvYWRfY29uZmlnX2ZpbGUiOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzVsb2FkX2NvbmZpZyhQeU9iamVjdCAqX19weXhf dl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9maWxlbmFtZSkgewotKyAgUHlPYmplY3QgKl9fcHl4 X3IgPSAwOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJsb2FkX2NvbmZpZyAod3JhcHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNGxvYWRfY29uZmlnKCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2Vs ZiksICgoUHlPYmplY3QgKilfX3B5eF92X2ZpbGVuYW1lKSk7Ci0rCi0rICAvKiBmdW5jdGlvbiBl eGl0IGNvZGUgKi8KLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJu IF9fcHl4X3I7Ci0rfQotKwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzRsb2FkX2NvbmZpZyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2Zp bGVuYW1lKSB7Ci0rICBjaGFyIGNvbnN0ICpfX3B5eF92X19maWxlbmFtZTsKLSsgIGludCBfX3B5 eF92X2VycjsKLSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCi0gICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSsgIFB5T2JqZWN0 ICpfX3B5eF90XzIgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0rICBj aGFyIGNvbnN0ICpfX3B5eF90XzQ7Ci0gICBpbnQgX19weXhfbGluZW5vID0gMDsKLSAgIGNvbnN0 IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAgIGludCBfX3B5eF9jbGluZW5vID0gMDsK LS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfZXJyb3JzIiwgMCk7Ci0tICBfX3B5eF9j dXJfc2NvcGUgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhf c2NvcGVfc3RydWN0X19fZXJyb3JzICopX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycywgX19weXhfZW1wdHlfdHVwbGUsIE5V TEwpOwotLSAgaWYgKHVubGlrZWx5KCFfX3B5eF9jdXJfc2NvcGUpKSB7Ci0tICAgIF9fcHl4X2N1 cl9zY29wZSA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhf c2NvcGVfc3RydWN0X19fZXJyb3JzICopUHlfTm9uZSk7Ci0tICAgIF9fUHl4X0lOQ1JFRihQeV9O b25lKTsKLS0gICAgX19QWVhfRVJSKDAsIDMxOCwgX19weXhfTDFfZXJyb3IpCi0tICB9IGVsc2Ug ewotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfY3VyX3Njb3BlKTsKLSsgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJsb2FkX2NvbmZpZyIsIDApOwotKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zf ZmlsZW5hbWUpOwotKwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0Mwot KyAqICAgICBkZWYgbG9hZF9jb25maWcoc2VsZiwgZmlsZW5hbWUpOgotKyAqICAgICAgICAgIiIi V3JhcHM6IG1wdl9sb2FkX2NvbmZpZ19maWxlIiIiCi0rICogICAgICAgICBhc3NlcnQgc2VsZi5f Y3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGZpbGVuYW1lID0g X3N0cmVuYyhmaWxlbmFtZSkKLSsgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogX2ZpbGVuYW1l ID0gZmlsZW5hbWUKLSsgKi8KLSsgICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUwot KyAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Ci0rICAgIGlmICh1bmxpa2VseSgh KF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKLSsgICAgICBQeUVycl9TZXROb25lKFB5RXhj X0Fzc2VydGlvbkVycm9yKTsKLSsgICAgICBfX1BZWF9FUlIoMCwgNDQzLCBfX3B5eF9MMV9lcnJv cikKLSsgICAgfQotICAgfQotLSAgX19weXhfY3VyX3Njb3BlLT5fX3B5eF92X2ZuID0gX19weXhf dl9mbjsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4pOwotLSAg X19QeXhfR0lWRVJFRihfX3B5eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4pOwotKyAgI2VuZGlmCi0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE5Ci0tICogCi0tICogZGVm IF9lcnJvcnMoZm4pOgotLSAqICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHYgPSBmbigqaywgKiprdykKLS0gKiAgICAg ICAgIGlmIHYgPCAwOgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0NAot KyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9sb2FkX2NvbmZpZ19maWxlIiIiCi0rICogICAgICAg ICBhc3NlcnQgc2VsZi5fY3R4Ci0rICogICAgICAgICBmaWxlbmFtZSA9IF9zdHJlbmMoZmlsZW5h bWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGNkZWYgY29uc3Qg Y2hhciogX2ZpbGVuYW1lID0gZmlsZW5hbWUKLSsgKiAgICAgICAgIGNkZWYgaW50IGVycgotICAq LwotLSAgX19weXhfdF8xID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdfZXJyb3JzXzF3cmFwcGVkLCAwLCBfX3B5eF9uX3NfZXJyb3JzX2xv Y2Fsc193cmFwcGVkLCAoKFB5T2JqZWN0KilfX3B5eF9jdXJfc2NvcGUpLCBfX3B5eF9uX3Nfdmlk Y3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMikp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMTksIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19z dHJlbmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0NDQsIF9fcHl4 X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICBfX3B5eF90XzMgPSBO VUxMOwotKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9D aGVjayhfX3B5eF90XzIpKSkgewotKyAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzIpOwotKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKLSsgICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKLSsgICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF8zKTsKLSsgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwot KyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0rICAgIH0KLSsg IH0KLSsgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdz KF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X2ZpbGVuYW1lKSA6IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X2ZpbGVuYW1lKTsKLSsgIF9fUHl4X1hERUNS RUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSsgIGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDQ0NCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKLS0gIF9fcHl4X3Zfd3JhcHBlZCA9IF9fcHl4X3RfMTsKLSsgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92 X2ZpbGVuYW1lLCBfX3B5eF90XzEpOwotICAgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjMKLS0gKiAgICAgICAgIGlmIHYgPCAwOgotLSAq ICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKHYpCi0tICogICAgIHJldHVybiB3cmFwcGVkICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAKLS0gKiAKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NDUKLSsgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSsg KiAgICAgICAgIGZpbGVuYW1lID0gX3N0cmVuYyhmaWxlbmFtZSkKLSsgKiAgICAgICAgIGNkZWYg Y29uc3QgY2hhciogX2ZpbGVuYW1lID0gZmlsZW5hbWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0rICogICAgICAgICB3aXRoIG5vZ2lsOgot KyAqLwotKyAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9maWxl bmFtZSk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNCkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9f UFlYX0VSUigwLCA0NDUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdl9fZmlsZW5hbWUgPSBf X3B5eF90XzQ7Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQ3Ci0r ICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIF9maWxlbmFtZSA9IGZpbGVuYW1lCi0rICogICAg ICAgICBjZGVmIGludCBlcnIKLSsgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBlcnIgPSBtcHZfbG9hZF9jb25maWdfZmls ZShzZWxmLl9jdHgsIF9maWxlbmFtZSkKLSsgKiAgICAgICAgIHJldHVybiBlcnIKLSsgKi8KLSsg IHsKLSsgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAgICBQeVRocmVhZFN0YXRlICpfc2F2 ZTsKLSsgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKLSsgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVt YmVyKCk7Ci0rICAgICAgI2VuZGlmCi0rICAgICAgLyp0cnk6Ki8gewotKwotKyAgICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0OAotKyAqICAgICAgICAgY2RlZiBpbnQg ZXJyCi0rICogICAgICAgICB3aXRoIG5vZ2lsOgotKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9s b2FkX2NvbmZpZ19maWxlKHNlbGYuX2N0eCwgX2ZpbGVuYW1lKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICByZXR1cm4gZXJyCi0rICogCi0rICovCi0rICAgICAgICBf X3B5eF92X2VyciA9IG1wdl9sb2FkX2NvbmZpZ19maWxlKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19w eXhfdl9fZmlsZW5hbWUpOwotKyAgICAgIH0KLSsKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDQ3Ci0rICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIF9maWxlbmFt ZSA9IGZpbGVuYW1lCi0rICogICAgICAgICBjZGVmIGludCBlcnIKLSsgKiAgICAgICAgIHdpdGgg bm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBlcnIg PSBtcHZfbG9hZF9jb25maWdfZmlsZShzZWxmLl9jdHgsIF9maWxlbmFtZSkKLSsgKiAgICAgICAg IHJldHVybiBlcnIKLSsgKi8KLSsgICAgICAvKmZpbmFsbHk6Ki8gewotKyAgICAgICAgLypub3Jt YWwgZXhpdDoqL3sKLSsgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0rICAgICAgICAgIF9f UHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0rICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSsgICAg ICAgICAgI2VuZGlmCi0rICAgICAgICAgIGdvdG8gX19weXhfTDU7Ci0rICAgICAgICB9Ci0rICAg ICAgICBfX3B5eF9MNTo7Ci0rICAgICAgfQotKyAgfQotKwotKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQ0OQotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAg ICAgICBlcnIgPSBtcHZfbG9hZF9jb25maWdfZmlsZShzZWxmLl9jdHgsIF9maWxlbmFtZSkKLSsg KiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIAot KyAqICAgICBkZWYgX2Zvcm1hdF9mb3Ioc2VsZiwgdmFsdWUpOgotICAqLwotICAgX19QeXhfWERF Q1JFRihfX3B5eF9yKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3dyYXBwZWQpOwotLSAgX19w eXhfciA9IF9fcHl4X3Zfd3JhcHBlZDsKLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21f aW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg NDQ5LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgX19w eXhfciA9IF9fcHl4X3RfMTsKLSsgIF9fcHl4X3RfMSA9IDA7Ci0gICBnb3RvIF9fcHl4X0wwOwot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOAotLSAqIAotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0MQotICAqIAotLSAqIGRlZiBfZXJyb3Jz KGZuKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBkZWYgd3JhcHBlZCgq aywgKiprdyk6Ci0tICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCi0rICogICAgIEBfZXJyb3Jz Ci0rICogICAgIGRlZiBsb2FkX2NvbmZpZyhzZWxmLCBmaWxlbmFtZSk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICIiIldyYXBzOiBtcHZfbG9hZF9jb25maWdfZmls ZSIiIgotKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqLwotIAotICAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCi0gICBfX3B5eF9MMV9lcnJvcjo7Ci0gICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMSk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fZXJy b3JzIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0r ICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmxvYWRfY29u ZmlnIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0gICBf X3B5eF9yID0gTlVMTDsKLSAgIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdl93 cmFwcGVkKTsKLS0gIF9fUHl4X0RFQ1JFRigoKFB5T2JqZWN0ICopX19weXhfY3VyX3Njb3BlKSk7 Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfZmlsZW5hbWUpOwotICAgX19QeXhfWEdJVkVSRUYo X19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBf X3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI5Ci0t ICogICAgIGNvZGUgPSBOb25lCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1 MQotKyAqICAgICAgICAgcmV0dXJuIGVycgotICAqIAotLSAqICAgICBkZWYgX19pbml0X18oc2Vs ZiwgZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYuY29k ZSA9IGUKLS0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogZXJyX2MKLSsgKiAgICAgZGVmIF9m b3JtYXRfZm9yKHNlbGYsIHZhbHVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6Ci0rICogICAgICAgICAg ICAgcmV0dXJuIE1QVl9GT1JNQVRfU1RSSU5HCi0gICovCi0gCi0gLyogUHl0aG9uIHdyYXBwZXIg Ki8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84TVBW RXJyb3JfMV9faW5pdF9fKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJn cywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlNZXRob2REZWYg X19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yXzFfX2luaXRfXyA9IHsi X19pbml0X18iLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3Jkcylf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yXzFfX2luaXRfXywgTUVUSF9W QVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9OwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl8xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3Nl bGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgewotLSAgUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhfdl9lID0gMDsKLS0g IGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzdfZm9ybWF0X2ZvcihQeU9iamVjdCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qcHJvdG8qLwotK3N0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzdfZm9y bWF0X2ZvcihQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkg ewotICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlv bnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyAod3JhcHBlcikiLCAw KTsKLS0gIHsKLS0gICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZf X3B5eF9uX3Nfc2VsZiwmX19weXhfbl9zX2UsMH07Ci0tICAgIFB5T2JqZWN0KiB2YWx1ZXNbMl0g PSB7MCwwfTsKLS0gICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7Ci0tICAgICAgUHlfc3Np emVfdCBrd19hcmdzOwotLSAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxl X0dFVF9TSVpFKF9fcHl4X2FyZ3MpOwotLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKLS0gICAg ICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7 Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAxOiB2YWx1ZXNb MF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOwotLSAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgMDogYnJlYWs7Ci0tICAgICAgICBkZWZhdWx0OiBn b3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotLSAgICAgIH0KLS0gICAgICBrd19hcmdzID0g UHlEaWN0X1NpemUoX19weXhfa3dkcyk7Ci0tICAgICAgc3dpdGNoIChwb3NfYXJncykgewotLSAg ICAgICAgY2FzZSAgMDoKLS0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5 RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19zZWxmKSkgIT0gMCkpIGt3X2Fy Z3MtLTsKLS0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLS0gICAg ICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDE6Ci0tICAgICAgICBpZiAo bGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBf X3B5eF9uX3NfZSkpICE9IDApKSBrd19hcmdzLS07Ci0tICAgICAgICBlbHNlIHsKLS0gICAgICAg ICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMSwgMiwgMiwgMSk7IF9f UFlYX0VSUigwLCAzMjksIF9fcHl4X0wzX2Vycm9yKQotLSAgICAgICAgfQotLSAgICAgIH0KLS0g ICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7Ci0tICAgICAgICBpZiAodW5saWtlbHko X19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMs IDAsIHZhbHVlcywgcG9zX2FyZ3MsICJfX2luaXRfXyIpIDwgMCkpIF9fUFlYX0VSUigwLCAzMjks IF9fcHl4X0wzX2Vycm9yKQotLSAgICAgIH0KLS0gICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9T SVpFKF9fcHl4X2FyZ3MpICE9IDIpIHsKLS0gICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vy cm9yOwotLSAgICB9IGVsc2UgewotLSAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0o X19weXhfYXJncywgMCk7Ci0tICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5 eF9hcmdzLCAxKTsKLS0gICAgfQotLSAgICBfX3B5eF92X3NlbGYgPSB2YWx1ZXNbMF07Ci0tICAg IF9fcHl4X3ZfZSA9IHZhbHVlc1sxXTsKLS0gIH0KLS0gIGdvdG8gX19weXhfTDRfYXJndW1lbnRf dW5wYWNraW5nX2RvbmU7Ci0tICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Ci0tICBfX1B5eF9S YWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAxLCAyLCAyLCBQeVR1cGxlX0dFVF9TSVpF KF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDNfZXJyb3IpCi0tICBfX3B5 eF9MM19lcnJvcjo7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5N UFZFcnJvci5fX2luaXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUpOwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gTlVM TDsKLS0gIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKLS0gIF9fcHl4X3IgPSBf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19faW5pdF9fKF9fcHl4X3Nl bGYsIF9fcHl4X3Zfc2VsZiwgX19weXhfdl9lKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfZm9ybWF0X2ZvciAod3JhcHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNl9mb3JtYXRfZm9yKCgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksICgoUHlP YmplY3QgKilfX3B5eF92X3ZhbHVlKSk7Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K LSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0g fQotIAotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhN UFZFcnJvcl9fX2luaXRfXyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9lKSB7Ci0tICBjaGFyIGNvbnN0 ICpfX3B5eF92X2Vycl9jOwotLSAgaW50IF9fcHl4X3ZfZV9pOwotK3N0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0X2ZvcihDWVRI T05fVU5VU0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKLSAgIFB5T2JqZWN0ICpf X3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0gICBpbnQgX19w eXhfdF8xOwotICAgaW50IF9fcHl4X3RfMjsKLS0gIGludCBfX3B5eF90XzM7Ci0tICBQeU9iamVj dCAqX19weXhfdF80ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwotLSAg UHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVM TDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOwotKyAgaW50IF9fcHl4X3RfNDsKLSAg IGludCBfX3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9faW5pdF9fIiwgMCk7Ci0tICBfX1B5eF9JTkNSRUYoX19weXhfdl9lKTsKLSsgIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfZm9ybWF0X2ZvciIsIDApOwotIAotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzMAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ1MgotICAqIAotLSAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZSk6Ci0t ICogICAgICAgICBzZWxmLmNvZGUgPSBlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogZXJyX2MKLS0gKiAgICAgICAgIGNkZWYgaW50IGVf aQotLSAqLwotLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBf X3B5eF9uX3NfY29kZSwgX19weXhfdl9lKSA8IDApIF9fUFlYX0VSUigwLCAzMzAsIF9fcHl4X0wx X2Vycm9yKQotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzMwotLSAq ICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYwotLSAqICAgICAgICAgY2RlZiBpbnQgZV9p Ci0tICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBiYXNlc3RyaW5nKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGVfaSA9IGUKLS0gKiAgICAgICAg ICAgICB3aXRoIG5vZ2lsOgotKyAqICAgICBkZWYgX2Zvcm1hdF9mb3Ioc2VsZiwgdmFsdWUpOgot KyAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJ TkcKLSsgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCk6Ci0gICovCi0tICBf X3B5eF90XzEgPSBfX1B5eF9QeUJhc2VTdHJpbmdfQ2hlY2soX19weXhfdl9lKTsgCi0tICBfX3B5 eF90XzIgPSAoKCEoX19weXhfdF8xICE9IDApKSAhPSAwKTsKLSsgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5QmFzZVN0cmluZ19DaGVjayhfX3B5eF92X3ZhbHVlKTsgCi0rICBfX3B5eF90XzIgPSAoX19w eXhfdF8xICE9IDApOwotICAgaWYgKF9fcHl4X3RfMikgewotIAotLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzM0Ci0tICogICAgICAgICBjZGVmIGludCBlX2kKLS0gKiAg ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUsIGJhc2VzdHJpbmcpOgotLSAqICAgICAgICAgICAg IGVfaSA9IGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIHdp dGggbm9naWw6Ci0tICogICAgICAgICAgICAgICAgIGVycl9jID0gbXB2X2Vycm9yX3N0cmluZyhl X2kpCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTMKLSsgKiAgICAg ZGVmIF9mb3JtYXRfZm9yKHNlbGYsIHZhbHVlKToKLSsgKiAgICAgICAgIGlmIGlzaW5zdGFuY2Uo dmFsdWUsIGJhc2VzdHJpbmcpOgotKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX1NU UklORyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBlbGlmIGlzaW5z dGFuY2UodmFsdWUsIGJvb2wpOgotKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0ZM QUcKLSAgKi8KLS0gICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3ZfZSk7 IGlmICh1bmxpa2VseSgoX19weXhfdF8zID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkp KSBfX1BZWF9FUlIoMCwgMzM0LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19weXhfdl9lX2kgPSBf X3B5eF90XzM7Ci0rICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0rICAgIF9fcHl4X3RfMyA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX1NUUklORyk7IGlm ICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ1MywgX19weXhfTDFfZXJyb3Ip Ci0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotKyAgICBfX3B5eF9yID0gX19weXhfdF8z OwotKyAgICBfX3B5eF90XzMgPSAwOwotKyAgICBnb3RvIF9fcHl4X0wwOwotIAotLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzM1Ci0tICogICAgICAgICBpZiBub3QgaXNp bnN0YW5jZShlLCBiYXNlc3RyaW5nKToKLS0gKiAgICAgICAgICAgICBlX2kgPSBlCi0tICogICAg ICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgICAgICAgICBlcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmcoZV9pKQotLSAqICAgICAgICAg ICAgIGUgPSBfc3RyZGVjKGVycl9jKQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NDUyCi0rICogCi0rICogICAgIGRlZiBfZm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6Ci0r ICogICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX1NUUklO RwotKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKLSAgKi8KLS0gICAg ewotLSAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgICBQeVRocmVhZFN0YXRlICpf c2F2ZTsKLS0gICAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotLSAgICAgICAgX19QeXhfRmFzdEdJ TF9SZW1lbWJlcigpOwotLSAgICAgICAgI2VuZGlmCi0tICAgICAgICAvKnRyeToqLyB7Ci0rICB9 Ci0gCi0tICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzYKLS0g KiAgICAgICAgICAgICBlX2kgPSBlCi0tICogICAgICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAg ICAgICAgICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGUgPSBfc3RyZGVjKGVycl9jKQotLSAq ICAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIGUpCi0rICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NDU0Ci0rICogICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBi YXNlc3RyaW5nKToKLSsgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJTkcKLSsg KiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9GTEFHCi0rICog ICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0gICovCi0tICAgICAgICAgIF9f cHl4X3ZfZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKF9fcHl4X3ZfZV9pKTsKLS0gICAgICAgIH0K LSsgIF9fcHl4X3RfMyA9ICgoUHlPYmplY3QqKSZQeUJvb2xfVHlwZSk7Ci0rICBfX1B5eF9JTkNS RUYoX19weXhfdF8zKTsKLSsgIF9fcHl4X3RfMiA9IFB5T2JqZWN0X0lzSW5zdGFuY2UoX19weXhf dl92YWx1ZSwgX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA9PSAoKGludCktMSkp KSBfX1BZWF9FUlIoMCwgNDU0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzMpOyBfX3B5eF90XzMgPSAwOwotKyAgX19weXhfdF8xID0gKF9fcHl4X3RfMiAhPSAwKTsK LSsgIGlmIChfX3B5eF90XzEpIHsKLSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozMzUKLS0gKiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUsIGJhc2VzdHJp bmcpOgotLSAqICAgICAgICAgICAgIGVfaSA9IGUKLS0gKiAgICAgICAgICAgICB3aXRoIG5vZ2ls OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgIGVycl9j ID0gbXB2X2Vycm9yX3N0cmluZyhlX2kpCi0tICogICAgICAgICAgICAgZSA9IF9zdHJkZWMoZXJy X2MpCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTUKLSsgKiAgICAg ICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJTkcKLSsgKiAgICAgICAgIGVsaWYgaXNpbnN0 YW5jZSh2YWx1ZSwgYm9vbCk6Ci0rICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRkxB RyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBlbGlmIGlzaW5zdGFu Y2UodmFsdWUsIGludCk6Ci0rICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfSU5UNjQK LSAgKi8KLS0gICAgICAgIC8qZmluYWxseToqLyB7Ci0tICAgICAgICAgIC8qbm9ybWFsIGV4aXQ6 Ki97Ci0tICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgICAgICAgX19QeXhf RmFzdEdJTF9Gb3JnZXQoKTsKLS0gICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCi0tICAgICAg ICAgICAgI2VuZGlmCi0tICAgICAgICAgICAgZ290byBfX3B5eF9MNjsKLS0gICAgICAgICAgfQot LSAgICAgICAgICBfX3B5eF9MNjo7Ci0tICAgICAgICB9Ci0tICAgIH0KLSsgICAgX19QeXhfWERF Q1JFRihfX3B5eF9yKTsKLSsgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfZm9ybWF0KE1QVl9GT1JNQVRfRkxBRyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDQ1NSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzMpOwotKyAgICBfX3B5eF9yID0gX19weXhfdF8zOwotKyAgICBfX3B5eF90XzMgPSAwOwotKyAg ICBnb3RvIF9fcHl4X0wwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzM3Ci0tICogICAgICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICAgICAg ZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkKLS0gKiAgICAgICAgICAgICBlID0gX3N0cmRl YyhlcnJfYykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgRXhjZXB0 aW9uLl9faW5pdF9fKHNlbGYsIGUpCi0tICogCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0NTQKLSsgKiAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJp bmcpOgotKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX1NUUklORwotKyAqICAgICAg ICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0ZMQUcKLSsgKiAgICAgICAg IGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLSAgKi8KLS0gICAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzUsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMzcsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF81KTsKLS0gICAgX19weXhfdF82ID0gX19QeXhfUHlCeXRlc19Gcm9tU3Ry aW5nKF9fcHl4X3ZfZXJyX2MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCAzMzcsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0g ICAgX19weXhfdF83ID0gTlVMTDsKLS0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1 bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzUpKSkgewotLSAgICAgIF9fcHl4X3RfNyA9 IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNSk7Ci0tICAgICAgaWYgKGxpa2VseShfX3B5eF90 XzcpKSB7Ci0tICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJ T04oX19weXhfdF81KTsKLS0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzcpOwotLSAgICAg ICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19w eXhfdF81LCBmdW5jdGlvbik7Ci0tICAgICAgfQotLSAgICB9Ci0tICAgIF9fcHl4X3RfNCA9IChf X3B5eF90XzcpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNSwgX19weXhfdF83 LCBfX3B5eF90XzYpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzUsIF9fcHl4 X3RfNik7Ci0tICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLS0g ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tICAgIGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzNywgX19weXhfTDFfZXJyb3IpCi0tICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsg X19weXhfdF81ID0gMDsKLS0gICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X2UsIF9fcHl4X3Rf NCk7Ci0tICAgIF9fcHl4X3RfNCA9IDA7Ci0rICB9Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjozMzMKLS0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogZXJyX2MK LS0gKiAgICAgICAgIGNkZWYgaW50IGVfaQotLSAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo ZSwgYmFzZXN0cmluZyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg ICAgICBlX2kgPSBlCi0tICogICAgICAgICAgICAgd2l0aCBub2dpbDoKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTYKLSsgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2 YWx1ZSwgYm9vbCk6Ci0rICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRkxBRwotKyAq ICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfSU5UNjQKLSsgKiAg ICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgotKyAqLwotKyAgX19weXhfdF8x ID0gUHlJbnRfQ2hlY2soX19weXhfdl92YWx1ZSk7IAotKyAgX19weXhfdF8yID0gKF9fcHl4X3Rf MSAhPSAwKTsKLSsgIGlmIChfX3B5eF90XzIpIHsKLSsKLSsgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQ1NwotKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0ZM QUcKLSsgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLSsgKiAgICAgICAg ICAgICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2NCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKLSsgKiAgICAgICAg ICAgICByZXR1cm4gTVBWX0ZPUk1BVF9ET1VCTEUKLSsgKi8KLSsgICAgX19QeXhfWERFQ1JFRihf X3B5eF9yKTsKLSsgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9y bWF0KE1QVl9GT1JNQVRfSU5UNjQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigwLCA0NTcsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsK LSsgICAgX19weXhfciA9IF9fcHl4X3RfMzsKLSsgICAgX19weXhfdF8zID0gMDsKLSsgICAgZ290 byBfX3B5eF9MMDsKLSsKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1 NgotKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKLSsgKiAgICAgICAg ICAgICByZXR1cm4gTVBWX0ZPUk1BVF9GTEFHCi0rICogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo dmFsdWUsIGludCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAg ICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2NAotKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZh bHVlLCBmbG9hdCk6Ci0gICovCi0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzM4Ci0tICogICAgICAgICAgICAgICAgIGVycl9jID0gbXB2X2Vycm9yX3N0cmlu ZyhlX2kpCi0tICogICAgICAgICAgICAgZSA9IF9zdHJkZWMoZXJyX2MpCi0tICogICAgICAgICBF eGNlcHRpb24uX19pbml0X18oc2VsZiwgZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqIAotLSAqIGNsYXNzIFB5TVBWRXJyb3IoRXhjZXB0aW9uKToKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NTgKLSsgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1 ZSwgaW50KToKLSsgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2NAotKyAqICAg ICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9ET1VCTEUKLSsgKiAg ICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBsaXN0KSk6Ci0rICovCi0rICBf X3B5eF90XzIgPSBQeUZsb2F0X0NoZWNrKF9fcHl4X3ZfdmFsdWUpOyAKLSsgIF9fcHl4X3RfMSA9 IChfX3B5eF90XzIgIT0gMCk7Ci0rICBpZiAoX19weXhfdF8xKSB7Ci0rCi0rICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTkKLSsgKiAgICAgICAgICAgICByZXR1cm4gTVBW X0ZPUk1BVF9JTlQ2NAotKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6 Ci0rICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRE9VQkxFICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxl LCBsaXN0KSk6Ci0rICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9BUlJBWQot KyAqLwotKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotKyAgICBfX3B5eF90XzMgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9ET1VCTEUpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NTksIF9fcHl4X0wxX2Vycm9yKQotKyAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgICAgX19weXhfciA9IF9fcHl4X3RfMzsKLSsg ICAgX19weXhfdF8zID0gMDsKLSsgICAgZ290byBfX3B5eF9MMDsKLSsKLSsgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OAotKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNl KHZhbHVlLCBpbnQpOgotKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0lOVDY0Ci0r ICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQot KyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKToKLSAgKi8K LS0gIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKSgm KChQeVR5cGVPYmplY3QqKVB5RXhjX0V4Y2VwdGlvbilbMF0pKSwgX19weXhfbl9zX2luaXQpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMzgsIF9fcHl4X0wxX2Vycm9y KQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7Ci0tICBfX3B5eF90XzYgPSBOVUxMOwotLSAg X19weXhfdF8zID0gMDsKLS0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfNSkpKSB7Ci0tICAgIF9fcHl4X3RfNiA9IFB5TWV0aG9kX0dF VF9TRUxGKF9fcHl4X3RfNSk7Ci0tICAgIGlmIChsaWtlbHkoX19weXhfdF82KSkgewotLSAgICAg IFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzUpOwot LSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzYpOwotLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5j dGlvbik7Ci0tICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzUsIGZ1bmN0aW9uKTsKLS0g ICAgICBfX3B5eF90XzMgPSAxOwotLSAgICB9Ci0gICB9Ci0tICAjaWYgQ1lUSE9OX0ZBU1RfUFlD QUxMCi0tICBpZiAoUHlGdW5jdGlvbl9DaGVjayhfX3B5eF90XzUpKSB7Ci0tICAgIFB5T2JqZWN0 ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4X3RfNiwgX19weXhfdl9zZWxmLCBfX3B5eF92X2V9Owot LSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19w eXhfdGVtcCsxLV9fcHl4X3RfMywgMitfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCAzMzgsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQp OwotLSAgfSBlbHNlCi0tICAjZW5kaWYKLS0gICNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCi0tICBp ZiAoX19QeXhfUHlGYXN0Q0Z1bmN0aW9uX0NoZWNrKF9fcHl4X3RfNSkpIHsKLS0gICAgUHlPYmpl Y3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF82LCBfX3B5eF92X3NlbGYsIF9fcHl4X3ZfZX07 Ci0tICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwg X19weXhfdGVtcCsxLV9fcHl4X3RfMywgMitfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNCkpIF9fUFlYX0VSUigwLCAzMzgsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzQpOwotLSAgfSBlbHNlCi0tICAjZW5kaWYKLS0gIHsKLS0gICAgX19weXhfdF83ID0gUHlUdXBs ZV9OZXcoMitfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigw LCAzMzgsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLS0g ICAgaWYgKF9fcHl4X3RfNikgewotLSAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF82KTsgUHlU dXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDAsIF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IE5VTEw7 Ci0tICAgIH0KLS0gICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZik7Ci0tICAgIF9fUHl4X0dJ VkVSRUYoX19weXhfdl9zZWxmKTsKLS0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDAr X19weXhfdF8zLCBfX3B5eF92X3NlbGYpOwotLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9lKTsK LS0gICAgX19QeXhfR0lWRVJFRihfX3B5eF92X2UpOwotLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfNywgMStfX3B5eF90XzMsIF9fcHl4X3ZfZSk7Ci0tICAgIF9fcHl4X3RfNCA9IF9fUHl4 X1B5T2JqZWN0X0NhbGwoX19weXhfdF81LCBfX3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzMzgsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF80KTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4 X3RfNyA9IDA7Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYwCi0r ICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKLSsgKiAgICAgICAgICAg ICByZXR1cm4gTVBWX0ZPUk1BVF9ET1VCTEUKLSsgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2 YWx1ZSwgKHR1cGxlLCBsaXN0KSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZCi0rICogICAgICAgICBlbGlm IGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgotKyAqLwotKyAgX19weXhfdF8yID0gUHlUdXBsZV9D aGVjayhfX3B5eF92X3ZhbHVlKTsgCi0rICBfX3B5eF90XzQgPSAoX19weXhfdF8yICE9IDApOwot KyAgaWYgKCFfX3B5eF90XzQpIHsKLSsgIH0gZWxzZSB7Ci0rICAgIF9fcHl4X3RfMSA9IF9fcHl4 X3RfNDsKLSsgICAgZ290byBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU7Ci0gICB9Ci0tICBfX1B5 eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzQpOyBfX3B5eF90XzQgPSAwOwotKyAgX19weXhfdF80ID0gUHlMaXN0X0NoZWNrKF9fcHl4 X3ZfdmFsdWUpOyAKLSsgIF9fcHl4X3RfMiA9IChfX3B5eF90XzQgIT0gMCk7Ci0rICBfX3B5eF90 XzEgPSBfX3B5eF90XzI7Ci0rICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OwotKyAgX19weXhf dF8yID0gKF9fcHl4X3RfMSAhPSAwKTsKLSsgIGlmIChfX3B5eF90XzIpIHsKLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjkKLS0gKiAgICAgY29kZSA9IE5vbmUKLS0g KiAKLS0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogICAgICAgICBzZWxmLmNvZGUgPSBlCi0tICogICAgICAgICBjZGVmIGNvbnN0 IGNoYXIqIGVycl9jCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjEK LSsgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9ET1VCTEUKLSsgKiAgICAgICAgIGVs aWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBsaXN0KSk6Ci0rICogICAgICAgICAgICAgcmV0 dXJuIE1QVl9GT1JNQVRfTk9ERV9BUlJBWSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0r ICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgotKyAqICAgICAgICAgICAg IHJldHVybiBNUFZfRk9STUFUX05PREVfTUFQCi0gICovCi0rICAgIF9fUHl4X1hERUNSRUYoX19w eXhfcik7Ci0rICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1h dChNUFZfRk9STUFUX05PREVfQVJSQVkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlY X0VSUigwLCA0NjEsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8z KTsKLSsgICAgX19weXhfciA9IF9fcHl4X3RfMzsKLSsgICAgX19weXhfdF8zID0gMDsKLSsgICAg Z290byBfX3B5eF9MMDsKLSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19weXhf ciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLS0gIGdvdG8gX19weXhfTDA7Ci0t ICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Ci0tICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7Ci0tICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRl ci5saWJzLm1wdi5NUFZFcnJvci5fX2luaXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVu bywgX19weXhfZmlsZW5hbWUpOwotLSAgX19weXhfciA9IE5VTEw7Ci0tICBfX3B5eF9MMDo7Ci0t ICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfZSk7Ci0tICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsK LS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0t fQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYwCi0rICogICAgICAg ICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKLSsgKiAgICAgICAgICAgICByZXR1cm4g TVBWX0ZPUk1BVF9ET1VCTEUKLSsgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1 cGxlLCBsaXN0KSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAg ICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZCi0rICogICAgICAgICBlbGlmIGlzaW5zdGFu Y2UodmFsdWUsIGRpY3QpOgotKyAqLwotKyAgfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozNDcKLS0gKiAKLS0gKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOgot LSAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLS0gKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKLS0gKiAgICAgICAgIHNlbGYuZGF0 YSA9IGRhdGEKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjIKLSsgKiAg ICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBsaXN0KSk6Ci0rICogICAgICAg ICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9BUlJBWQotKyAqICAgICAgICAgZWxpZiBpc2lu c3RhbmNlKHZhbHVlLCBkaWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfTUFQCi0rICogICAgICAgICByZXR1cm4g TVBWX0ZPUk1BVF9OT05FCi0gICovCi0rICBfX3B5eF90XzIgPSBQeURpY3RfQ2hlY2soX19weXhf dl92YWx1ZSk7IAotKyAgX19weXhfdF8xID0gKF9fcHl4X3RfMiAhPSAwKTsKLSsgIGlmIChfX3B5 eF90XzEpIHsKLSAKLS0vKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfMV9faW5pdF9fKFB5 T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4 X2t3ZHMpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV8xX19pbml0X18gPSB7Il9faW5pdF9fIiwg KFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfMV9faW5pdF9fLCBNRVRIX1ZBUkFS R1N8TUVUSF9LRVlXT1JEUywgMH07Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV8xX19pbml0X18oUHlPYmplY3QgKl9fcHl4 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgewotLSAg UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhfdl9kYXRhID0g MDsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5h bWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgUHlPYmplY3QgKl9fcHl4 X3IgPSAwOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX2luaXRfXyAod3JhcHBlcikiLCAwKTsKLS0gIHsKLS0gICAgc3RhdGlj IFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3Nfc2VsZiwmX19weXhf bl9zX2RhdGEsMH07Ci0tICAgIFB5T2JqZWN0KiB2YWx1ZXNbMl0gPSB7MCwwfTsKLS0gICAgaWYg KHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7Ci0tICAgICAgUHlfc3NpemVfdCBrd19hcmdzOwotLSAg ICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2Fy Z3MpOwotLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKLS0gICAgICAgIGNhc2UgIDI6IHZhbHVl c1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7Ci0tICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9J VEVNKF9fcHl4X2FyZ3MsIDApOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAg ICAgY2FzZSAgMDogYnJlYWs7Ci0tICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1 cGxlX2Vycm9yOwotLSAgICAgIH0KLS0gICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19weXhf a3dkcyk7Ci0tICAgICAgc3dpdGNoIChwb3NfYXJncykgewotLSAgICAgICAgY2FzZSAgMDoKLS0g ICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9f cHl4X2t3ZHMsIF9fcHl4X25fc19zZWxmKSkgIT0gMCkpIGt3X2FyZ3MtLTsKLS0gICAgICAgIGVs c2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLS0gICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKLS0gICAgICAgIGNhc2UgIDE6Ci0tICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0g PSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZGF0YSkpICE9 IDApKSBrd19hcmdzLS07Ci0tICAgICAgICBlbHNlIHsKLS0gICAgICAgICAgX19QeXhfUmFpc2VB cmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAzNDcs IF9fcHl4X0wzX2Vycm9yKQotLSAgICAgICAgfQotLSAgICAgIH0KLS0gICAgICBpZiAodW5saWtl bHkoa3dfYXJncyA+IDApKSB7Ci0tICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRp b25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9z X2FyZ3MsICJfX2luaXRfXyIpIDwgMCkpIF9fUFlYX0VSUigwLCAzNDcsIF9fcHl4X0wzX2Vycm9y KQotLSAgICAgIH0KLS0gICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3Mp ICE9IDIpIHsKLS0gICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotLSAgICB9IGVs c2UgewotLSAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7 Ci0tICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKLS0g ICAgfQotLSAgICBfX3B5eF92X3NlbGYgPSB2YWx1ZXNbMF07Ci0tICAgIF9fcHl4X3ZfZGF0YSA9 IHZhbHVlc1sxXTsKLS0gIH0KLS0gIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2Rv bmU7Ci0tICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Ci0tICBfX1B5eF9SYWlzZUFyZ3R1cGxl SW52YWxpZCgiX19pbml0X18iLCAxLCAyLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3Mp KTsgX19QWVhfRVJSKDAsIDM0NywgX19weXhfTDNfZXJyb3IpCi0tICBfX3B5eF9MM19lcnJvcjo7 Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVwbHlVc2VyRGF0 YS5fX2luaXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gTlVMTDsKLS0g IF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKLS0gIF9fcHl4X3IgPSBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV9fX2luaXRfXyhfX3B5eF9z ZWxmLCBfX3B5eF92X3NlbGYsIF9fcHl4X3ZfZGF0YSk7Ci0tCi0tICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9f cHl4X3I7Ci0tfQotLQotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzE0X1JlcGx5VXNlckRhdGFfX19pbml0X18oQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAq X19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0 YSkgewotLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotLSAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fIiwgMCk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MzQ4Ci0tICogY2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KToK LS0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgotLSAqICAgICAgICAgc2VsZi5jb3Vu dGVyID0gMCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLmRh dGEgPSBkYXRhCi0tICogICAgICAgICBzZWxmLm9ic2VydmVkID0gRmFsc2UKLSsgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2MwotKyAqICAgICAgICAgICAgIHJldHVybiBN UFZfRk9STUFUX05PREVfQVJSQVkKLSsgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwg ZGljdCk6Ci0rICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9NQVAgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9O RQotKyAqIAotICAqLwotLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9z ZWxmLCBfX3B5eF9uX3NfY291bnRlciwgX19weXhfaW50XzApIDwgMCkgX19QWVhfRVJSKDAsIDM0 OCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0rICAgIF9f cHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX05P REVfTUFQKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDYzLCBfX3B5 eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0rICAgIF9fcHl4X3Ig PSBfX3B5eF90XzM7Ci0rICAgIF9fcHl4X3RfMyA9IDA7Ci0rICAgIGdvdG8gX19weXhfTDA7Ci0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ5Ci0tICogICAgIGRlZiBf X2luaXRfXyhzZWxmLCBkYXRhKToKLS0gKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKLS0gKiAg ICAgICAgIHNlbGYuZGF0YSA9IGRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq ICAgICAgICAgc2VsZi5vYnNlcnZlZCA9IEZhbHNlCi0tICogCi0rICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NjIKLSsgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1 ZSwgKHR1cGxlLCBsaXN0KSk6Ci0rICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9E RV9BUlJBWQotKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFU X05PREVfTUFQCi0rICogICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT05FCi0gICovCi0tICBp ZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19kYXRh LCBfX3B5eF92X2RhdGEpIDwgMCkgX19QWVhfRVJSKDAsIDM0OSwgX19weXhfTDFfZXJyb3IpCi0r ICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzUwCi0tICogICAg ICAgICBzZWxmLmNvdW50ZXIgPSAwCi0tICogICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCi0tICog ICAgICAgICBzZWxmLm9ic2VydmVkID0gRmFsc2UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2NAotKyAqICAgICAgICAg ZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKLSsgKiAgICAgICAgICAgICByZXR1cm4gTVBW X0ZPUk1BVF9OT0RFX01BUAotKyAqICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ORSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0tICogICAgIGRlZiBhZGQoc2VsZik6Ci0r ICogICAgIGNkZWYgbXB2X25vZGVfbGlzdCogX3ByZXBfbm9kZV9saXN0KHNlbGYsIHZhbHVlcyk6 Ci0gICovCi0tICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9f cHl4X25fc19vYnNlcnZlZCwgUHlfRmFsc2UpIDwgMCkgX19QWVhfRVJSKDAsIDM1MCwgX19weXhf TDFfZXJyb3IpCi0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotKyAgX19weXhfdF8zID0gX19Q eXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfTk9ORSk7IGlmICh1bmxp a2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ2NCwgX19weXhfTDFfZXJyb3IpCi0rICBf X1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF90XzM7Ci0rICBfX3B5 eF90XzMgPSAwOwotKyAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozNDcKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 NTEKLSsgKiAgICAgICAgIHJldHVybiBlcnIKLSAgKiAKLS0gKiBjbGFzcyBfUmVwbHlVc2VyRGF0 YShvYmplY3QpOgotLSAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKLS0gKiAgICAg ICAgIHNlbGYuZGF0YSA9IGRhdGEKLSsgKiAgICAgZGVmIF9mb3JtYXRfZm9yKHNlbGYsIHZhbHVl KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgaWYgaXNpbnN0YW5j ZSh2YWx1ZSwgYmFzZXN0cmluZyk6Ci0rICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRf U1RSSU5HCi0gICovCi0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X3Ig PSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0tICBnb3RvIF9fcHl4X0wwOwotICAg X19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5t cHYuX1JlcGx5VXNlckRhdGEuX19pbml0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8s IF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKLSsgIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX2Zvcm1hdF9mb3IiLCBf X3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSAgIF9fcHl4X3Ig PSBOVUxMOwotICAgX19weXhfTDA6OwotICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci1AQCAt ODUxMCwxMTYwICs5MTg1LDExODYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV9fX2luaXRfXyhDWVRIT04KLSAgIHJldHVy biBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzUy Ci0tICogICAgICAgICBzZWxmLm9ic2VydmVkID0gRmFsc2UKLS0gKiAKLS0gKiAgICAgZGVmIGFk ZChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi5j b3VudGVyICs9IDEKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDY2Ci0rICog ICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT05FCi0gICogCi0rICogICAgIGNkZWYgbXB2X25v ZGVfbGlzdCogX3ByZXBfbm9kZV9saXN0KHNlbGYsIHZhbHVlcyk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZQotKyAqICAgICAgICAg Y2RlZiBtcHZfZm9ybWF0IGZvcm1hdAotICAqLwotIAotLS8qIFB5dGhvbiB3cmFwcGVyICovCi0t c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlV c2VyRGF0YV8zYWRkKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxm KTsgLypwcm90byovCi0tc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfM2FkZCA9IHsiYWRkIiwgKFB5Q0Z1bmN0aW9uKV9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzNhZGQsIE1FVEhf TywgMH07Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTRfUmVwbHlVc2VyRGF0YV8zYWRkKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9zZWxmKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0tICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImFkZCAod3JhcHBl cikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRf UmVwbHlVc2VyRGF0YV8yYWRkKF9fcHl4X3NlbGYsICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYp KTsKLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0tCi0tc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV8yYWRkKENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYp IHsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLStzdGF0aWMgc3RydWN0IG1wdl9ub2Rl X2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25vZGVf bGlzdChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5 eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlcykgewotKyAgc3RydWN0IG1wdl9ub2Rl IF9fcHl4X3Zfbm9kZTsKLSsgIGVudW0gbXB2X2Zvcm1hdCBfX3B5eF92X2Zvcm1hdDsKLSsgIHN0 cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF92X25vZGVfbGlzdDsKLSsgIFB5T2JqZWN0ICpfX3B5 eF92X2kgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUgPSBOVUxMOwotKyAgc3Ry dWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X3I7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9u cwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF8y ID0gTlVMTDsKLSsgIFB5X3NzaXplX3QgX19weXhfdF8xOwotKyAgaW50IF9fcHl4X3RfMjsKLSsg IFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5V TEw7Ci0rICBQeU9iamVjdCAqKCpfX3B5eF90XzUpKFB5T2JqZWN0ICopOwotKyAgUHlPYmplY3Qg Kl9fcHl4X3RfNiA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKLSsgIFB5 T2JqZWN0ICpfX3B5eF90XzggPSBOVUxMOwotKyAgZW51bSBtcHZfZm9ybWF0IF9fcHl4X3RfOTsK LSsgIFB5X3NzaXplX3QgX19weXhfdF8xMDsKLSAgIGludCBfX3B5eF9saW5lbm8gPSAwOwotICAg Y29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8g PSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImFkZCIsIDApOwotKyAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9wcmVwX25vZGVfbGlzdCIsIDApOwotIAotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1MwotLSAqIAotLSAqICAgICBkZWYgYWRkKHNl bGYpOgotLSAqICAgICAgICAgc2VsZi5jb3VudGVyICs9IDEgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqIAotLSAqICAgICBkZWYgcmVtb3ZlKHNlbGYpOgotKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjQ2OQotKyAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2Rl Ci0rICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0Ci0rICogICAgICAgICBjZGVmIG1w dl9ub2RlX2xpc3QqIG5vZGVfbGlzdCA9IDxtcHZfbm9kZV9saXN0Kj5tYWxsb2Moc2l6ZW9mKG1w dl9ub2RlX2xpc3QpKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBu b2RlX2xpc3QubnVtID0gbGVuKHZhbHVlcykKLSsgKiAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMg PSBOVUxMCi0gICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3Zfc2VsZiwgX19weXhfbl9zX2NvdW50ZXIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAzNTMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7Ci0tICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9BZGRPYmpDKF9fcHl4X3RfMSwgX19w eXhfaW50XzEsIDEsIDEsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigw LCAzNTMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLS0gIGlmIChfX1B5eF9QeU9i amVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NvdW50ZXIsIF9fcHl4X3Rf MikgPCAwKSBfX1BZWF9FUlIoMCwgMzUzLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgX19weXhfdl9ub2RlX2xpc3QgPSAoKHN0 cnVjdCBtcHZfbm9kZV9saXN0ICopbWFsbG9jKChzaXplb2Yoc3RydWN0IG1wdl9ub2RlX2xpc3Qp KSkpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1MgotLSAqICAg ICAgICAgc2VsZi5vYnNlcnZlZCA9IEZhbHNlCi0tICogCi0tICogICAgIGRlZiBhZGQoc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYuY291bnRlciAr PSAxCi0tICogCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDcwCi0rICog ICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0Ci0rICogICAgICAgICBjZGVmIG1wdl9ub2Rl X2xpc3QqIG5vZGVfbGlzdCA9IDxtcHZfbm9kZV9saXN0Kj5tYWxsb2Moc2l6ZW9mKG1wdl9ub2Rl X2xpc3QpKQotKyAqICAgICAgICAgbm9kZV9saXN0Lm51bSA9IGxlbih2YWx1ZXMpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSBOVUxM Ci0rICogICAgICAgICBub2RlX2xpc3Qua2V5cyA9IE5VTEwKLSAgKi8KLSsgIF9fcHl4X3RfMSA9 IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X3ZhbHVlcyk7IGlmICh1bmxpa2VseShfX3B5eF90XzEg PT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VSUigwLCA0NzAsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19weXhfdl9ub2RlX2xpc3QtPm51bSA9IF9fcHl4X3RfMTsKLSAKLS0gIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLwotLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25l KTsKLS0gIGdvdG8gX19weXhfTDA7Ci0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9B ZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVwbHlVc2VyRGF0YS5hZGQiLCBfX3B5 eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fcHl4X3IgPSBO VUxMOwotLSAgX19weXhfTDA6OwotLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0tICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLS0KLS0v KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzU1Ci0tICogICAgICAgICBzZWxmLmNv dW50ZXIgKz0gMQotLSAqIAotLSAqICAgICBkZWYgcmVtb3ZlKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLmNvdW50ZXIgLT0gMQotLSAqIAotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3MQotKyAqICAgICAgICAgY2RlZiBt cHZfbm9kZV9saXN0KiBub2RlX2xpc3QgPSA8bXB2X25vZGVfbGlzdCo+bWFsbG9jKHNpemVvZiht cHZfbm9kZV9saXN0KSkKLSsgKiAgICAgICAgIG5vZGVfbGlzdC5udW0gPSBsZW4odmFsdWVzKQot KyAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICAgICAgbm9kZV9saXN0LmtleXMgPSBOVUxMCi0rICogICAgICAgICBp ZiBub2RlX2xpc3QubnVtOgotICAqLwotKyAgX19weXhfdl9ub2RlX2xpc3QtPnZhbHVlcyA9IE5V TEw7Ci0gCi0tLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzVyZW1vdmUoUHlPYmplY3Qg Kl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KLS1zdGF0aWMg UHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2Vy RGF0YV81cmVtb3ZlID0geyJyZW1vdmUiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNXJlbW92ZSwgTUVUSF9PLCAwfTsKLS1zdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJE YXRhXzVyZW1vdmUoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYp IHsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgicmVtb3ZlICh3cmFwcGVyKSIsIDAp OwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVz ZXJEYXRhXzRyZW1vdmUoX19weXhfc2VsZiwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOwot LQotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0NzIKLSsgKiAgICAgICAgIG5vZGVfbGlzdC5udW0gPSBsZW4odmFsdWVz KQotKyAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKLSsgKiAgICAgICAgIG5vZGVf bGlzdC5rZXlzID0gTlVMTCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAg ICBpZiBub2RlX2xpc3QubnVtOgotKyAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8 bXB2X25vZGUqPm1hbGxvYyhub2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkKLSsgKi8K LSsgIF9fcHl4X3Zfbm9kZV9saXN0LT5rZXlzID0gTlVMTDsKLSAKLS1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzRyZW1vdmUo Q1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZikgewotLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotLSAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9f cHl4X3RfMiA9IE5VTEw7Ci0tICBpbnQgX19weXhfbGluZW5vID0gMDsKLS0gIGNvbnN0IGNoYXIg Kl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLS0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJyZW1vdmUiLCAwKTsKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NzMKLSsgKiAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSBO VUxMCi0rICogICAgICAgICBub2RlX2xpc3Qua2V5cyA9IE5VTEwKLSsgKiAgICAgICAgIGlmIG5v ZGVfbGlzdC5udW06ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAg ICBub2RlX2xpc3QudmFsdWVzID0gPG1wdl9ub2RlKj5tYWxsb2Mobm9kZV9saXN0Lm51bSAqIHNp emVvZihtcHZfbm9kZSkpCi0rICogICAgICAgICBmb3IgaSwgdmFsdWUgaW4gZW51bWVyYXRlKHZh bHVlcyk6Ci0rICovCi0rICBfX3B5eF90XzIgPSAoX19weXhfdl9ub2RlX2xpc3QtPm51bSAhPSAw KTsKLSsgIGlmIChfX3B5eF90XzIpIHsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNTYKLS0gKiAKLS0gKiAgICAgZGVmIHJlbW92ZShzZWxmKToKLS0gKiAgICAgICAg IHNlbGYuY291bnRlciAtPSAxICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAKLSsg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3NAotKyAqICAgICAgICAgbm9k ZV9saXN0LmtleXMgPSBOVUxMCi0rICogICAgICAgICBpZiBub2RlX2xpc3QubnVtOgotKyAqICAg ICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxvYyhub2RlX2xpc3Qu bnVtICogc2l6ZW9mKG1wdl9ub2RlKSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOgotKyAqICAgICAgICAg ICAgIGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCi0rICovCi0rICAgIF9fcHl4X3Zf bm9kZV9saXN0LT52YWx1ZXMgPSAoKHN0cnVjdCBtcHZfbm9kZSAqKW1hbGxvYygoX19weXhfdl9u b2RlX2xpc3QtPm51bSAqIChzaXplb2Yoc3RydWN0IG1wdl9ub2RlKSkpKSk7Ci0rCi0rICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzMKLSsgKiAgICAgICAgIG5vZGVfbGlz dC52YWx1ZXMgPSBOVUxMCi0rICogICAgICAgICBub2RlX2xpc3Qua2V5cyA9IE5VTEwKLSsgKiAg ICAgICAgIGlmIG5vZGVfbGlzdC5udW06ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgICAgICAgICBub2RlX2xpc3QudmFsdWVzID0gPG1wdl9ub2RlKj5tYWxsb2Mobm9kZV9s aXN0Lm51bSAqIHNpemVvZihtcHZfbm9kZSkpCi0rICogICAgICAgICBmb3IgaSwgdmFsdWUgaW4g ZW51bWVyYXRlKHZhbHVlcyk6Ci0rICovCi0rICB9Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDc1Ci0rICogICAgICAgICBpZiBub2RlX2xpc3QubnVtOgotKyAqICAg ICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxvYyhub2RlX2xpc3Qu bnVtICogc2l6ZW9mKG1wdl9ub2RlKSkKLSsgKiAgICAgICAgIGZvciBpLCB2YWx1ZSBpbiBlbnVt ZXJhdGUodmFsdWVzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg ICAgIGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCi0rICogICAgICAgICAgICAgbm9k ZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCi0rICovCi0rICBfX1B5 eF9JTkNSRUYoX19weXhfaW50XzApOwotKyAgX19weXhfdF8zID0gX19weXhfaW50XzA7Ci0rICBp ZiAobGlrZWx5KFB5TGlzdF9DaGVja0V4YWN0KF9fcHl4X3ZfdmFsdWVzKSkgfHwgUHlUdXBsZV9D aGVja0V4YWN0KF9fcHl4X3ZfdmFsdWVzKSkgewotKyAgICBfX3B5eF90XzQgPSBfX3B5eF92X3Zh bHVlczsgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfMSA9IDA7Ci0rICAgIF9fcHl4 X3RfNSA9IE5VTEw7Ci0rICB9IGVsc2UgewotKyAgICBfX3B5eF90XzEgPSAtMTsgX19weXhfdF80 ID0gUHlPYmplY3RfR2V0SXRlcihfX3B5eF92X3ZhbHVlcyk7IGlmICh1bmxpa2VseSghX19weXhf dF80KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzQpOwotKyAgICBfX3B5eF90XzUgPSBQeV9UWVBFKF9fcHl4X3RfNCktPnRwX2l0 ZXJuZXh0OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4 X0wxX2Vycm9yKQotKyAgfQotKyAgZm9yICg7OykgewotKyAgICBpZiAobGlrZWx5KCFfX3B5eF90 XzUpKSB7Ci0rICAgICAgaWYgKGxpa2VseShQeUxpc3RfQ2hlY2tFeGFjdChfX3B5eF90XzQpKSkg ewotKyAgICAgICAgaWYgKF9fcHl4X3RfMSA+PSBQeUxpc3RfR0VUX1NJWkUoX19weXhfdF80KSkg YnJlYWs7Ci0rICAgICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9O X0FWT0lEX0JPUlJPV0VEX1JFRlMKLSsgICAgICAgIF9fcHl4X3RfNiA9IFB5TGlzdF9HRVRfSVRF TShfX3B5eF90XzQsIF9fcHl4X3RfMSk7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzErKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJy b3IpCi0rICAgICAgICAjZWxzZQotKyAgICAgICAgX19weXhfdF82ID0gUHlTZXF1ZW5jZV9JVEVN KF9fcHl4X3RfNCwgX19weXhfdF8xKTsgX19weXhfdF8xKys7IGlmICh1bmxpa2VseSghX19weXhf dF82KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCi0rICAgICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF82KTsKLSsgICAgICAgICNlbmRpZgotKyAgICAgIH0gZWxzZSB7Ci0rICAg ICAgICBpZiAoX19weXhfdF8xID49IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdF80KSkgYnJlYWs7 Ci0rICAgICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lE X0JPUlJPV0VEX1JFRlMKLSsgICAgICAgIF9fcHl4X3RfNiA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfdF80LCBfX3B5eF90XzEpOyBfX1B5eF9JTkNSRUYoX19weXhfdF82KTsgX19weXhfdF8xKys7 IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQot KyAgICAgICAgI2Vsc2UKLSsgICAgICAgIF9fcHl4X3RfNiA9IFB5U2VxdWVuY2VfSVRFTShfX3B5 eF90XzQsIF9fcHl4X3RfMSk7IF9fcHl4X3RfMSsrOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7Ci0rICAgICAgICAjZW5kaWYKLSsgICAgICB9Ci0rICAgIH0gZWxzZSB7Ci0r ICAgICAgX19weXhfdF82ID0gX19weXhfdF81KF9fcHl4X3RfNCk7Ci0rICAgICAgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSB7Ci0rICAgICAgICBQeU9iamVjdCogZXhjX3R5cGUgPSBQeUVycl9P Y2N1cnJlZCgpOwotKyAgICAgICAgaWYgKGV4Y190eXBlKSB7Ci0rICAgICAgICAgIGlmIChsaWtl bHkoX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGV4Y190eXBlLCBQeUV4Y19TdG9w SXRlcmF0aW9uKSkpIFB5RXJyX0NsZWFyKCk7Ci0rICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAs IDQ3NSwgX19weXhfTDFfZXJyb3IpCi0rICAgICAgICB9Ci0rICAgICAgICBicmVhazsKLSsgICAg ICB9Ci0rICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICAgIH0KLSsgICAgX19QeXhf WERFQ1JFRl9TRVQoX19weXhfdl92YWx1ZSwgX19weXhfdF82KTsKLSsgICAgX19weXhfdF82ID0g MDsKLSsgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7Ci0rICAgIF9fUHl4X1hERUNSRUZfU0VU KF9fcHl4X3ZfaSwgX19weXhfdF8zKTsKLSsgICAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfQWRk T2JqQyhfX3B5eF90XzMsIF9fcHl4X2ludF8xLCAxLCAwLCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgNDc1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOwotKyAgICBfX3B5 eF90XzMgPSBfX3B5eF90XzY7Ci0rICAgIF9fcHl4X3RfNiA9IDA7Ci0rCi0rICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzYKLSsgKiAgICAgICAgICAgICBub2RlX2xpc3Qu dmFsdWVzID0gPG1wdl9ub2RlKj5tYWxsb2Mobm9kZV9saXN0Lm51bSAqIHNpemVvZihtcHZfbm9k ZSkpCi0rICogICAgICAgICBmb3IgaSwgdmFsdWUgaW4gZW51bWVyYXRlKHZhbHVlcyk6Ci0rICog ICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIG5vZGUgPSBzZWxmLl9wcmVwX25hdGl2 ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQotKyAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXNb aV0gPSBub2RlCi0rICovCi0rICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19mb3JtYXRfZm9yKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDc2LCBfX3B5eF9MMV9lcnJvcikK LSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0rICAgIF9fcHl4X3RfOCA9IE5VTEw7Ci0r ICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9f cHl4X3RfNykpKSB7Ci0rICAgICAgX19weXhfdF84ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhf dF83KTsKLSsgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfOCkpIHsKLSsgICAgICAgIFB5T2JqZWN0 KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzcpOwotKyAgICAgICAg X19QeXhfSU5DUkVGKF9fcHl4X3RfOCk7Ci0rICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24p OwotKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzcsIGZ1bmN0aW9uKTsKLSsgICAg ICB9Ci0rICAgIH0KLSsgICAgX19weXhfdF82ID0gKF9fcHl4X3RfOCkgPyBfX1B5eF9QeU9iamVj dF9DYWxsMkFyZ3MoX19weXhfdF83LCBfX3B5eF90XzgsIF9fcHl4X3ZfdmFsdWUpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzcsIF9fcHl4X3ZfdmFsdWUpOwotKyAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7Ci0rICAgIGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ3NiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhf dF83ID0gMDsKLSsgICAgX19weXhfdF85ID0gKChlbnVtIG1wdl9mb3JtYXQpX19QeXhfUHlJbnRf QXNfZW51bV9fbXB2X2Zvcm1hdChfX3B5eF90XzYpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3Vy cmVkKCkpKSBfX1BZWF9FUlIoMCwgNDc2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICAgIF9fcHl4X3ZfZm9ybWF0ID0gX19w eXhfdF85OwotKwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc3Ci0r ICogICAgICAgICBmb3IgaSwgdmFsdWUgaW4gZW51bWVyYXRlKHZhbHVlcyk6Ci0rICogICAgICAg ICAgICAgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkKLSsgKiAgICAgICAgICAgICBu b2RlID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUodmFsdWUsIGZvcm1hdCkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXNbaV0gPSBu b2RlCi0rICogICAgICAgICByZXR1cm4gbm9kZV9saXN0Ci0rICovCi0rICAgIF9fcHl4X3RfNiA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChfX3B5eF92X2Zvcm1hdCk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ3NywgX19weXhfTDFfZXJyb3IpCi0r ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgICBfX3B5eF92X25vZGUgPSAoKHN0cnVj dCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhf dl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19w eXhfdl92YWx1ZSwgX19weXhfdF82KTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9f cHl4X3RfNiA9IDA7Ci0rCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 NzgKLSsgKiAgICAgICAgICAgICBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZhbHVlKQotKyAq ICAgICAgICAgICAgIG5vZGUgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0 KQotKyAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXNbaV0gPSBub2RlICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHJldHVybiBub2RlX2xpc3QKLSAgKiAKLSAg Ki8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxm LCBfX3B5eF9uX3NfY291bnRlcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDM1NiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0g IF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X1N1YnRyYWN0T2JqQyhfX3B5eF90XzEsIF9fcHl4X2lu dF8xLCAxLCAxLCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMzU2 LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICBpZiAoX19QeXhfUHlPYmplY3Rf U2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jb3VudGVyLCBfX3B5eF90XzIpIDwg MCkgX19QWVhfRVJSKDAsIDM1NiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19w eXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgICAgX19weXhfdF8xMCA9IF9fUHl4X1B5SW5kZXhf QXNTc2l6ZV90KF9fcHl4X3ZfaSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8xMCA9PSAoUHlfc3Np emVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0NzgsIF9fcHl4X0wx X2Vycm9yKQotKyAgICAoX19weXhfdl9ub2RlX2xpc3QtPnZhbHVlc1tfX3B5eF90XzEwXSkgPSBf X3B5eF92X25vZGU7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzU1 Ci0tICogICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDc1Ci0rICogICAgICAgICBpZiBub2RlX2xpc3QubnVtOgotKyAqICAg ICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxvYyhub2RlX2xpc3Qu bnVtICogc2l6ZW9mKG1wdl9ub2RlKSkKLSsgKiAgICAgICAgIGZvciBpLCB2YWx1ZSBpbiBlbnVt ZXJhdGUodmFsdWVzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg ICAgIGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCi0rICogICAgICAgICAgICAgbm9k ZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCi0rICovCi0rICB9Ci0r ICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotKwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ3OQotKyAqICAgICAgICAgICAgIG5vZGUgPSBzZWxmLl9wcmVwX25hdGl2 ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQotKyAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXNb aV0gPSBub2RlCi0rICogICAgICAgICByZXR1cm4gbm9kZV9saXN0ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSAgKiAKLS0gKiAgICAgZGVmIHJlbW92ZShzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi5jb3VudGVyIC09IDEKLSsgKiAgICAg Y2RlZiBtcHZfbm9kZV9saXN0KiBfcHJlcF9ub2RlX21hcChzZWxmLCBtYXApOgotKyAqLwotKyAg X19weXhfciA9IF9fcHl4X3Zfbm9kZV9saXN0OwotKyAgZ290byBfX3B5eF9MMDsKLSsKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjYKLSsgKiAgICAgICAgIHJldHVybiBN UFZfRk9STUFUX05PTkUKLSAgKiAKLSsgKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBfcHJlcF9u b2RlX2xpc3Qoc2VsZiwgdmFsdWVzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlCi0rICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQg Zm9ybWF0Ci0gICovCi0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X3Ig PSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0tICBnb3RvIF9fcHl4X0wwOwotICAg X19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAgX19QeXhf WERFQ1JFRihfX3B5eF90XzIpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGli cy5tcHYuX1JlcGx5VXNlckRhdGEucmVtb3ZlIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5v LCBfX3B5eF9maWxlbmFtZSk7Ci0tICBfX3B5eF9yID0gTlVMTDsKLSsgIF9fUHl4X1hERUNSRUYo X19weXhfdF8zKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKLSsgIF9fUHl4X1hERUNS RUYoX19weXhfdF82KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsKLSsgIF9fUHl4X1hE RUNSRUYoX19weXhfdF84KTsKLSsgIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0dGVyLmxp YnMubXB2LkNvbnRleHQuX3ByZXBfbm9kZV9saXN0IiwgX19weXhfY2xpbmVubywgX19weXhfbGlu ZW5vLCBfX3B5eF9maWxlbmFtZSwgMSwgMCk7Ci0rICBfX3B5eF9yID0gMDsKLSAgIF9fcHl4X0ww OjsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF92 X2kpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X3ZhbHVlKTsKLSAgIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNzAKLS0gKiAKLS0gKiAgICAgQHByb3BlcnR5Ci0tICog ICAgIGRlZiBhcGlfdmVyc2lvbihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgcmV0dXJuIF9DQVBJX01JTk9SLCBfQ0FQSV9NQUpPUiwgX0NBUElfVkVSU0lP TgotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODEKLSsgKiAgICAgICAgIHJl dHVybiBub2RlX2xpc3QKLSAgKiAKLSsgKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBfcHJlcF9u b2RlX21hcChzZWxmLCBtYXApOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAg ICAgICBjZGVmIGNoYXIqIGNrZXkKLSsgKiAgICAgICAgIGNkZWYgbXB2X25vZGVfbGlzdCogbGlz dAotICAqLwotIAotLS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTFhcGlfdmVyc2lvbl8xX19nZXRf XyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCi0tc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTFhcGlfdmVyc2lvbl8xX19n ZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7 Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fZ2V0X18gKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExYXBpX3ZlcnNpb25fX19nZXRfXygoKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYp KTsKLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0tCi0tc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTFhcGlfdmVyc2lvbl9f X2dldF9fKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dCAqX19weXhfdl9zZWxmKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7 Ci0rc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF9fcHJlcF9ub2RlX21hcChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X21hcCkg ewotKyAgY2hhciAqX19weXhfdl9ja2V5OwotKyAgc3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4 X3ZfbGlzdDsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X2tleXMgPSBOVUxMOwotKyAgUHlPYmplY3Qg Kl9fcHl4X3ZfaSA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdl9rZXkgPSBOVUxMOwotKyAg c3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X3I7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucwotICAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0gICBQeU9iamVjdCAqX19weXhf dF8yID0gTlVMTDsKLSAgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOwotLSAgUHlPYmplY3Qg Kl9fcHl4X3RfNCA9IE5VTEw7Ci0rICBQeV9zc2l6ZV90IF9fcHl4X3RfNDsKLSsgIGludCBfX3B5 eF90XzU7Ci0rICBQeU9iamVjdCAqKCpfX3B5eF90XzYpKFB5T2JqZWN0ICopOwotKyAgUHlPYmpl Y3QgKl9fcHl4X3RfNyA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF84ID0gTlVMTDsKLSsg IGNoYXIgKl9fcHl4X3RfOTsKLSsgIFB5X3NzaXplX3QgX19weXhfdF8xMDsKLSsgIFB5X3NzaXpl X3QgX19weXhfdF8xMTsKLSAgIGludCBfX3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAq X19weXhfZmlsZW5hbWUgPSBOVUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKLSsgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfcHJlcF9ub2RlX21hcCIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjM3MQotLSAqICAgICBAcHJvcGVydHkKLS0gKiAgICAgZGVmIGFw aV92ZXJzaW9uKHNlbGYpOgotLSAqICAgICAgICAgcmV0dXJuIF9DQVBJX01JTk9SLCBfQ0FQSV9N QUpPUiwgX0NBUElfVkVSU0lPTiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogCi0t ICogICAgIEBwcm9wZXJ0eQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ4 NAotKyAqICAgICAgICAgY2RlZiBjaGFyKiBja2V5Ci0rICogICAgICAgICBjZGVmIG1wdl9ub2Rl X2xpc3QqIGxpc3QKLSsgKiAgICAgICAgIGxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbGlzdChtYXAu dmFsdWVzKCkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGtleXMg PSBtYXAua2V5cygpCi0rICogICAgICAgICBpZiBub3QgbGVuKGtleXMpOgotICAqLwotLSAgX19Q eXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhf dF8xLCBfX3B5eF9uX3NfQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDM3MSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfQ0FQ SV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDM3MSwgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3ZfbWFwLCBfX3B5eF9uX3NfdmFsdWVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgNDg0LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzIpOwotLSAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV91bnNpZ25lZF9sb25nKF9fcHl4 X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19DQVBJX1ZFUlNJT04pOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCAzNzEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7Ci0tICBfX3B5eF90XzQgPSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzcxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwotLSAg UHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQsIDAsIF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9HSVZF UkVGKF9fcHl4X3RfMik7Ci0tICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNCwgMSwgX19weXhf dF8yKTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8zKTsKLS0gIFB5VHVwbGVfU0VUX0lURU0o X19weXhfdF80LCAyLCBfX3B5eF90XzMpOwotLSAgX19weXhfdF8xID0gMDsKLS0gIF9fcHl4X3Rf MiA9IDA7Ci0tICBfX3B5eF90XzMgPSAwOwotLSAgX19weXhfciA9IF9fcHl4X3RfNDsKLS0gIF9f cHl4X3RfNCA9IDA7Ci0tICBnb3RvIF9fcHl4X0wwOwotLQotLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjM3MAotLSAqIAotLSAqICAgICBAcHJvcGVydHkKLS0gKiAgICAgZGVm IGFwaV92ZXJzaW9uKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAg ICAgICByZXR1cm4gX0NBUElfTUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQSV9WRVJTSU9OCi0tICog Ci0tICovCi0tCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X0wxX2Vycm9y OjsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhf dF8yKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKLS0gIF9fUHl4X1hERUNSRUYoX19w eXhfdF80KTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRl eHQuYXBpX3ZlcnNpb24uX19nZXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19w eXhfZmlsZW5hbWUpOwotLSAgX19weXhfciA9IE5VTEw7Ci0tICBfX3B5eF9MMDo7Ci0tICBfX1B5 eF9YR0lWRVJFRihfX3B5eF9yKTsKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwot LSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotLQotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozNzQKLS0gKiAKLS0gKiAgICAgQHByb3BlcnR5Ci0tICogICAgIGRlZiBuYW1lKHNlbGYp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAiIiJVbmlxdWUgbmFt ZSBmb3IgZXZlcnkgY29udGV4dCBjcmVhdGVkLgotLSAqIAotLSAqLwotLQotLS8qIFB5dGhvbiB3 cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfNG5hbWVfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJv dG8qLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzRuYW1lXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKLS0gIFB5T2Jq ZWN0ICpfX3B5eF9yID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4 X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNG5hbWVfX19nZXRf XygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5 eF92X3NlbGYpKTsKLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0tCi0tc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNG5hbWVf X19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpf X3B5eF92X3NlbGYpIHsKLS0gIGNoYXIgY29uc3QgKl9fcHl4X3ZfbmFtZTsKLS0gIFB5T2JqZWN0 ICpfX3B5eF9yID0gTlVMTDsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBQeU9i amVjdCAqX19weXhfdF8xID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwot LSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF80ID0g TlVMTDsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmls ZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozODAKLS0gKiAgICAgICAgICIiIgotLSAqICAgICAgICAgY2RlZiBjb25z dCBjaGFyKiBuYW1lCi0tICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0tICogICAgICAgICAgICAg bmFtZSA9IG1wdl9jbGllbnRfbmFtZShzZWxmLl9jdHgpCi0tICovCi0tICAjaWZuZGVmIENZVEhP Tl9XSVRIT1VUX0FTU0VSVElPTlMKLS0gIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkg ewotLSAgICBpZiAodW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7Ci0tICAg ICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7Ci0tICAgICAgX19QWVhfRVJS KDAsIDM4MCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMgPSBOVUxMOwotKyAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkp IHsKLSsgICAgX19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKLSsgICAg aWYgKGxpa2VseShfX3B5eF90XzMpKSB7Ci0rICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0rICAgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3RfMyk7Ci0rICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotICAgICB9Ci0gICB9Ci0tICAjZW5kaWYKLS0K LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODEKLS0gKiAgICAgICAgIGNk ZWYgY29uc3QgY2hhciogbmFtZQotLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotLSAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgICAgIG5hbWUgPSBtcHZfY2xpZW50X25hbWUoc2VsZi5fY3R4KQotLSAqICAgICAgICAgcmV0 dXJuIF9zdHJkZWMobmFtZSkKLS0gKi8KLS0gIHsKLS0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQK LS0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKLS0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMK LS0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0tICAgICAgI2VuZGlmCi0tICAgICAg Lyp0cnk6Ki8gewotLQotLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjM4MgotLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotLSAqICAgICAgICAgd2l0aCBub2dp bDoKLS0gKiAgICAgICAgICAgICBuYW1lID0gbXB2X2NsaWVudF9uYW1lKHNlbGYuX2N0eCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobmFt ZSkKLS0gKiAKLS0gKi8KLS0gICAgICAgIF9fcHl4X3ZfbmFtZSA9IG1wdl9jbGllbnRfbmFtZShf X3B5eF92X3NlbGYtPl9jdHgpOwotLSAgICAgIH0KLS0KLS0gICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MzgxCi0tICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIG5hbWUK LS0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLS0gKiAgICAgICAgIHdpdGggbm9naWw6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBuYW1lID0gbXB2X2Ns aWVudF9uYW1lKHNlbGYuX2N0eCkKLS0gKiAgICAgICAgIHJldHVybiBfc3RyZGVjKG5hbWUpCi0t ICovCi0tICAgICAgLypmaW5hbGx5OiovIHsKLS0gICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97Ci0t ICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0Zv cmdldCgpOwotLSAgICAgICAgICBQeV9CTE9DS19USFJFQURTCi0tICAgICAgICAgICNlbmRpZgot LSAgICAgICAgICBnb3RvIF9fcHl4X0w1OwotLSAgICAgICAgfQotLSAgICAgICAgX19weXhfTDU6 OwotLSAgICAgIH0KLS0gIH0KLSsgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9D YWxsTm9BcmcoX19weXhfdF8yKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKLSsgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ4NCwg X19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgX19weXhfdl9saXN0ID0gKChzdHJ1 Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4 X3Zfc2VsZi0+X19weXhfdnRhYiktPl9wcmVwX25vZGVfbGlzdChfX3B5eF92X3NlbGYsIF9fcHl4 X3RfMSk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODMKLS0gKiAgICAgICAgIHdpdGgg bm9naWw6Ci0tICogICAgICAgICAgICAgbmFtZSA9IG1wdl9jbGllbnRfbmFtZShzZWxmLl9jdHgp Ci0tICogICAgICAgICByZXR1cm4gX3N0cmRlYyhuYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogCi0tICogICAgIEBwcm9wZXJ0eQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ4NQotKyAqICAgICAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBsaXN0Ci0r ICogICAgICAgICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QobWFwLnZhbHVlcygpKQotKyAq ICAgICAgICAga2V5cyA9IG1hcC5rZXlzKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAqICAgICAgICAgaWYgbm90IGxlbihrZXlzKToKLSsgKiAgICAgICAgICAgICByZXR1cm4gbGlz dAotICAqLwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgMzgzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMiA9 IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9tYXAsIF9fcHl4X25fc19rZXlzKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDg1LCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgX19weXhfdF8zID0gX19QeXhfUHlC eXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbmFtZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkg X19QWVhfRVJSKDAsIDM4MywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhf dF8zKTsKLS0gIF9fcHl4X3RfNCA9IE5VTEw7Ci0tICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RT ICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Ci0tICAgIF9fcHl4X3Rf NCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Ci0tICAgIGlmIChsaWtlbHkoX19weXhf dF80KSkgewotKyAgX19weXhfdF8zID0gTlVMTDsKLSsgIGlmIChDWVRIT05fVU5QQUNLX01FVEhP RFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Ci0rICAgIF9fcHl4X3Rf MyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Ci0rICAgIGlmIChsaWtlbHkoX19weXhf dF8zKSkgewotICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElP TihfX3B5eF90XzIpOwotLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOwotKyAgICAgIF9f UHl4X0lOQ1JFRihfX3B5eF90XzMpOwotICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0g ICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKLSAgICAgfQotICAg fQotLSAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3Mo X19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25l QXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAw OwotLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzgzLCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9Bcmco X19weXhfdF8yKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsK LSsgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ4NSwgX19weXhfTDFf ZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgX19weXhfciA9IF9fcHl4X3RfMTsKLSsgIF9fcHl4 X3Zfa2V5cyA9IF9fcHl4X3RfMTsKLSAgIF9fcHl4X3RfMSA9IDA7Ci0tICBnb3RvIF9fcHl4X0ww OwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3NAotLSAqIAotLSAq ICAgICBAcHJvcGVydHkKLS0gKiAgICAgZGVmIG5hbWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICIiIlVuaXF1ZSBuYW1lIGZvciBldmVyeSBjb250ZXh0 IGNyZWF0ZWQuCi0tICogCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg2 Ci0rICogICAgICAgICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QobWFwLnZhbHVlcygpKQot KyAqICAgICAgICAga2V5cyA9IG1hcC5rZXlzKCkKLSsgKiAgICAgICAgIGlmIG5vdCBsZW4oa2V5 cyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICByZXR1cm4g bGlzdAotKyAqICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxsb2MobGlzdC5udW0pCi0g ICovCi0rICBfX3B5eF90XzQgPSBQeU9iamVjdF9MZW5ndGgoX19weXhfdl9rZXlzKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfNCA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDQ4Niwg X19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzUgPSAoKCEoX19weXhfdF80ICE9IDApKSAhPSAw KTsKLSsgIGlmIChfX3B5eF90XzUpIHsKLSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwot LSAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzIpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOwotLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0 ZXIubGlicy5tcHYuQ29udGV4dC5uYW1lLl9fZ2V0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fcHl4X3IgPSBOVUxMOwotLSAgX19weXhfTDA6 OwotLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLS0KLS0vKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6Mzg2Ci0tICogCi0tICogICAgIEBwcm9wZXJ0eQotLSAqICAgICBkZWYg dGltZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgIiIi SW50ZXJuYWwgbXB2IGNsaWVudCB0aW1lLgotLSAqIAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDg3Ci0rICogICAgICAgICBrZXlzID0gbWFwLmtleXMoKQotKyAqICAg ICAgICAgaWYgbm90IGxlbihrZXlzKToKLSsgKiAgICAgICAgICAgICByZXR1cm4gbGlzdCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBsaXN0LmtleXMgPSA8Y2hhcioq Pm1hbGxvYyhsaXN0Lm51bSkKLSsgKiAgICAgICAgIGZvciBpLCBrZXkgaW4gZW51bWVyYXRlKGtl eXMpOgotICAqLwotKyAgICBfX3B5eF9yID0gX19weXhfdl9saXN0OwotKyAgICBnb3RvIF9fcHl4 X0wwOwotIAotLS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNHRpbWVfMV9fZ2V0X18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1lXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYpIHsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3Jh cHBlcikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfNHRpbWVfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKLSsgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQ4NgotKyAqICAgICAgICAgbGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9s aXN0KG1hcC52YWx1ZXMoKSkKLSsgKiAgICAgICAgIGtleXMgPSBtYXAua2V5cygpCi0rICogICAg ICAgICBpZiBub3QgbGVuKGtleXMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgICAgICAgICAgcmV0dXJuIGxpc3QKLSsgKiAgICAgICAgIGxpc3Qua2V5cyA9IDxjaGFyKio+ bWFsbG9jKGxpc3QubnVtKQotKyAqLwotKyAgfQotIAotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCi0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9y OwotLX0KLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODgKLSsgKiAgICAg ICAgIGlmIG5vdCBsZW4oa2V5cyk6Ci0rICogICAgICAgICAgICAgcmV0dXJuIGxpc3QKLSsgKiAg ICAgICAgIGxpc3Qua2V5cyA9IDxjaGFyKio+bWFsbG9jKGxpc3QubnVtKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBmb3IgaSwga2V5IGluIGVudW1lcmF0ZShrZXlz KToKLSsgKiAgICAgICAgICAgICBrZXkgPSBfc3RyZW5jKGtleSkKLSsgKi8KLSsgIF9fcHl4X3Zf bGlzdC0+a2V5cyA9ICgoY2hhciAqKiltYWxsb2MoX19weXhfdl9saXN0LT5udW0pKTsKLSAKLS1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80 dGltZV9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKl9fcHl4X3Zfc2VsZikgewotLSAgaW50NjRfdCBfX3B5eF92X3RpbWU7Ci0tICBQeU9iamVj dCAqX19weXhfciA9IE5VTEw7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgUHlP YmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0tICBpbnQgX19weXhfbGluZW5vID0gMDsKLS0gIGNv bnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLS0gIGludCBfX3B5eF9jbGluZW5vID0g MDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fIiwgMCk7Ci0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg5Ci0rICogICAgICAgICAgICAgcmV0dXJu IGxpc3QKLSsgKiAgICAgICAgIGxpc3Qua2V5cyA9IDxjaGFyKio+bWFsbG9jKGxpc3QubnVtKQot KyAqICAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBrZXkgPSBfc3RyZW5jKGtleSkKLSsgKiAg ICAgICAgICAgICBja2V5ID0ga2V5Ci0rICovCi0rICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzAp OwotKyAgX19weXhfdF8xID0gX19weXhfaW50XzA7Ci0rICBpZiAobGlrZWx5KFB5TGlzdF9DaGVj a0V4YWN0KF9fcHl4X3Zfa2V5cykpIHx8IFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X2tleXMp KSB7Ci0rICAgIF9fcHl4X3RfMiA9IF9fcHl4X3Zfa2V5czsgX19QeXhfSU5DUkVGKF9fcHl4X3Rf Mik7IF9fcHl4X3RfNCA9IDA7Ci0rICAgIF9fcHl4X3RfNiA9IE5VTEw7Ci0rICB9IGVsc2Ugewot KyAgICBfX3B5eF90XzQgPSAtMTsgX19weXhfdF8yID0gUHlPYmplY3RfR2V0SXRlcihfX3B5eF92 X2tleXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4 X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgICAgX19weXhfdF82 ID0gUHlfVFlQRShfX3B5eF90XzIpLT50cF9pdGVybmV4dDsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzYpKSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikKLSsgIH0KLSsgIGZvciAoOzsp IHsKLSsgICAgaWYgKGxpa2VseSghX19weXhfdF82KSkgewotKyAgICAgIGlmIChsaWtlbHkoUHlM aXN0X0NoZWNrRXhhY3QoX19weXhfdF8yKSkpIHsKLSsgICAgICAgIGlmIChfX3B5eF90XzQgPj0g UHlMaXN0X0dFVF9TSVpFKF9fcHl4X3RfMikpIGJyZWFrOwotKyAgICAgICAgI2lmIENZVEhPTl9B U1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCi0rICAgICAg ICBfX3B5eF90XzMgPSBQeUxpc3RfR0VUX0lURU0oX19weXhfdF8yLCBfX3B5eF90XzQpOyBfX1B5 eF9JTkNSRUYoX19weXhfdF8zKTsgX19weXhfdF80Kys7IGlmICh1bmxpa2VseSgwIDwgMCkpIF9f UFlYX0VSUigwLCA0ODksIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgICAgI2Vsc2UKLSsgICAgICAg IF9fcHl4X3RfMyA9IFB5U2VxdWVuY2VfSVRFTShfX3B5eF90XzIsIF9fcHl4X3RfNCk7IF9fcHl4 X3RfNCsrOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4 X0wxX2Vycm9yKQotKyAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0rICAgICAgICAj ZW5kaWYKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgaWYgKF9fcHl4X3RfNCA+PSBQeVR1cGxl X0dFVF9TSVpFKF9fcHl4X3RfMikpIGJyZWFrOwotKyAgICAgICAgI2lmIENZVEhPTl9BU1NVTUVf U0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCi0rICAgICAgICBfX3B5 eF90XzMgPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF80KTsgX19QeXhfSU5D UkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfNCsrOyBpZiAodW5saWtlbHkoMCA8IDApKSBfX1BZWF9F UlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICAgICNlbHNlCi0rICAgICAgICBfX3B5 eF90XzMgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF8yLCBfX3B5eF90XzQpOyBfX3B5eF90XzQr KzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9l cnJvcikKLSsgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotKyAgICAgICAgI2VuZGlm Ci0rICAgICAgfQotKyAgICB9IGVsc2UgewotKyAgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNihf X3B5eF90XzIpOwotKyAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgewotKyAgICAgICAg UHlPYmplY3QqIGV4Y190eXBlID0gUHlFcnJfT2NjdXJyZWQoKTsKLSsgICAgICAgIGlmIChleGNf dHlwZSkgewotKyAgICAgICAgICBpZiAobGlrZWx5KF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9u TWF0Y2hlcyhleGNfdHlwZSwgUHlFeGNfU3RvcEl0ZXJhdGlvbikpKSBQeUVycl9DbGVhcigpOwot KyAgICAgICAgICBlbHNlIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4X0wxX2Vycm9yKQotKyAgICAg ICAgfQotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzMpOwotKyAgICB9Ci0rICAgIF9fUHl4X1hERUNSRUZfU0VUKF9fcHl4X3Zfa2V5LCBfX3B5 eF90XzMpOwotKyAgICBfX3B5eF90XzMgPSAwOwotKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8x KTsKLSsgICAgX19QeXhfWERFQ1JFRl9TRVQoX19weXhfdl9pLCBfX3B5eF90XzEpOwotKyAgICBf X3B5eF90XzMgPSBfX1B5eF9QeUludF9BZGRPYmpDKF9fcHl4X3RfMSwgX19weXhfaW50XzEsIDEs IDAsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4 X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fcHl4X3RfMSA9IF9fcHl4X3RfMzsKLSsgICAgX19weXhf dF8zID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozOTQKLS0g KiAgICAgICAgICIiIgotLSAqICAgICAgICAgY2RlZiBpbnQ2NF90IHRpbWUKLS0gKiAgICAgICAg IGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICB0aW1lID0gbXB2X2dldF90aW1lX3VzKHNl bGYuX2N0eCkKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5MAotKyAq ICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxsb2MobGlzdC5udW0pCi0rICogICAgICAg ICBmb3IgaSwga2V5IGluIGVudW1lcmF0ZShrZXlzKToKLSsgKiAgICAgICAgICAgICBrZXkgPSBf c3RyZW5jKGtleSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAg IGNrZXkgPSBrZXkKLSsgKiAgICAgICAgICAgICBsaXN0LmtleXNbaV0gPSA8Y2hhcio+bWFsbG9j KGxlbihrZXkpICsgMSkKLSAgKi8KLS0gICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9O UwotLSAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Ci0tICAgIGlmICh1bmxpa2Vs eSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKLS0gICAgICBQeUVycl9TZXROb25lKFB5 RXhjX0Fzc2VydGlvbkVycm9yKTsKLS0gICAgICBfX1BZWF9FUlIoMCwgMzk0LCBfX3B5eF9MMV9l cnJvcikKLSsgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzcsIF9fcHl4X25f c19zdHJlbmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA0OTAsIF9f cHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSsgICAgX19weXhf dF84ID0gTlVMTDsKLSsgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQ eU1ldGhvZF9DaGVjayhfX3B5eF90XzcpKSkgewotKyAgICAgIF9fcHl4X3RfOCA9IFB5TWV0aG9k X0dFVF9TRUxGKF9fcHl4X3RfNyk7Ci0rICAgICAgaWYgKGxpa2VseShfX3B5eF90XzgpKSB7Ci0r ICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhf dF83KTsKLSsgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzgpOwotKyAgICAgICAgX19QeXhf SU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF83LCBm dW5jdGlvbik7Ci0rICAgICAgfQotICAgICB9Ci0tICB9Ci0tICAjZW5kaWYKLSsgICAgX19weXhf dF8zID0gKF9fcHl4X3RfOCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF83LCBf X3B5eF90XzgsIF9fcHl4X3Zfa2V5KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhf dF83LCBfX3B5eF92X2tleSk7Ci0rICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsgX19weXhf dF84ID0gMDsKLSsgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDkw LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0rICAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotKyAgICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3Zfa2V5LCBfX3B5eF90XzMpOwotKyAgICBfX3B5eF90XzMgPSAwOwotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM5NQotLSAqICAgICAgICAgY2RlZiBp bnQ2NF90IHRpbWUKLS0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLS0gKiAgICAgICAgIHdp dGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICB0 aW1lID0gbXB2X2dldF90aW1lX3VzKHNlbGYuX2N0eCkKLS0gKiAgICAgICAgIHJldHVybiB0aW1l Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTEKLSsgKiAgICAgICAg IGZvciBpLCBrZXkgaW4gZW51bWVyYXRlKGtleXMpOgotKyAqICAgICAgICAgICAgIGtleSA9IF9z dHJlbmMoa2V5KQotKyAqICAgICAgICAgICAgIGNrZXkgPSBrZXkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIGxpc3Qua2V5c1tpXSA9IDxjaGFyKj5tYWxsb2Mo bGVuKGtleSkgKyAxKQotKyAqICAgICAgICAgICAgIHN0cmNweShsaXN0LmtleXNbaV0sIGNrZXkp Ci0gICovCi0tICB7Ci0tICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgUHlUaHJlYWRT dGF0ZSAqX3NhdmU7Ci0tICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0tICAgICAgX19QeXhfRmFz dEdJTF9SZW1lbWJlcigpOwotLSAgICAgICNlbmRpZgotLSAgICAgIC8qdHJ5OiovIHsKLSsgICAg X19weXhfdF85ID0gX19QeXhfUHlPYmplY3RfQXNXcml0YWJsZVN0cmluZyhfX3B5eF92X2tleSk7 IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfOSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VS UigwLCA0OTEsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF92X2NrZXkgPSBfX3B5eF90Xzk7 Ci0gCi0tICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk2Ci0tICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAg ICAgICAgICAgIHRpbWUgPSBtcHZfZ2V0X3RpbWVfdXMoc2VsZi5fY3R4KSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICByZXR1cm4gdGltZQotKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDkyCi0rICogICAgICAgICAgICAga2V5ID0gX3N0cmVu YyhrZXkpCi0rICogICAgICAgICAgICAgY2tleSA9IGtleQotKyAqICAgICAgICAgICAgIGxpc3Qu a2V5c1tpXSA9IDxjaGFyKj5tYWxsb2MobGVuKGtleSkgKyAxKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkKLSsg KiAgICAgICAgIHJldHVybiBsaXN0Ci0rICovCi0rICAgIF9fcHl4X3RfMTAgPSBQeU9iamVjdF9M ZW5ndGgoX19weXhfdl9rZXkpOyBpZiAodW5saWtlbHkoX19weXhfdF8xMCA9PSAoKFB5X3NzaXpl X3QpLTEpKSkgX19QWVhfRVJSKDAsIDQ5MiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3Rf MTEgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5eF92X2kpOyBpZiAodW5saWtlbHkoKF9f cHl4X3RfMTEgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9F UlIoMCwgNDkyLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgKF9fcHl4X3ZfbGlzdC0+a2V5c1tfX3B5 eF90XzExXSkgPSAoKGNoYXIgKiltYWxsb2MoKF9fcHl4X3RfMTAgKyAxKSkpOwotKwotKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDkzCi0rICogICAgICAgICAgICAgY2tl eSA9IGtleQotKyAqICAgICAgICAgICAgIGxpc3Qua2V5c1tpXSA9IDxjaGFyKj5tYWxsb2MobGVu KGtleSkgKyAxKQotKyAqICAgICAgICAgICAgIHN0cmNweShsaXN0LmtleXNbaV0sIGNrZXkpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHJldHVybiBsaXN0Ci0gICog Ci0gICovCi0tICAgICAgICBfX3B5eF92X3RpbWUgPSBtcHZfZ2V0X3RpbWVfdXMoX19weXhfdl9z ZWxmLT5fY3R4KTsKLS0gICAgICB9Ci0rICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeUluZGV4X0Fz U3NpemVfdChfX3B5eF92X2kpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMTAgPT0gKFB5X3NzaXpl X3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDkzLCBfX3B5eF9MMV9l cnJvcikKLSsgICAgKHZvaWQpKHN0cmNweSgoX19weXhfdl9saXN0LT5rZXlzW19fcHl4X3RfMTBd KSwgX19weXhfdl9ja2V5KSk7Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjM5NQotLSAqICAgICAgICAgY2RlZiBpbnQ2NF90IHRpbWUKLS0gKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHgKLS0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICB0aW1lID0gbXB2X2dldF90aW1lX3VzKHNlbGYu X2N0eCkKLS0gKiAgICAgICAgIHJldHVybiB0aW1lCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0ODkKLSsgKiAgICAgICAgICAgICByZXR1cm4gbGlzdAotKyAqICAgICAg ICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxsb2MobGlzdC5udW0pCi0rICogICAgICAgICBmb3Ig aSwga2V5IGluIGVudW1lcmF0ZShrZXlzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAqICAgICAgICAgICAgIGtleSA9IF9zdHJlbmMoa2V5KQotKyAqICAgICAgICAgICAgIGNrZXkg PSBrZXkKLSAgKi8KLS0gICAgICAvKmZpbmFsbHk6Ki8gewotLSAgICAgICAgLypub3JtYWwgZXhp dDoqL3sKLS0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgICAgIF9fUHl4X0Zh c3RHSUxfRm9yZ2V0KCk7Ci0tICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLS0gICAgICAgICAg I2VuZGlmCi0tICAgICAgICAgIGdvdG8gX19weXhfTDU7Ci0tICAgICAgICB9Ci0tICAgICAgICBf X3B5eF9MNTo7Ci0tICAgICAgfQotICAgfQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9f cHl4X3RfMiA9IDA7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK LSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozOTcKLS0gKiAgICAgICAg IHdpdGggbm9naWw6Ci0tICogICAgICAgICAgICAgdGltZSA9IG1wdl9nZXRfdGltZV91cyhzZWxm Ll9jdHgpCi0tICogICAgICAgICByZXR1cm4gdGltZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk0Ci0rICogICAgICAg ICAgICAgbGlzdC5rZXlzW2ldID0gPGNoYXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCi0rICogICAg ICAgICAgICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkKLSsgKiAgICAgICAgIHJldHVybiBs aXN0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAKLS0gKiAgICAgZGVmIHN1c3Bl bmQoc2VsZik6Ci0rICogICAgIGNkZWYgbXB2X25vZGUgX3ByZXBfbmF0aXZlX3ZhbHVlKHNlbGYs IHZhbHVlLCBmb3JtYXQpOgotICAqLwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gIF9f cHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRfdChfX3B5eF92X3RpbWUpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzOTcsIF9fcHl4X0wxX2Vycm9yKQotLSAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX3B5eF9yID0gX19weXhfdF8xOwotLSAgX19w eXhfdF8xID0gMDsKLSsgIF9fcHl4X3IgPSBfX3B5eF92X2xpc3Q7Ci0gICBnb3RvIF9fcHl4X0ww OwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM4NgotLSAqIAotLSAq ICAgICBAcHJvcGVydHkKLS0gKiAgICAgZGVmIHRpbWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICIiIkludGVybmFsIG1wdiBjbGllbnQgdGltZS4KLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODEKLSsgKiAgICAgICAgIHJldHVy biBub2RlX2xpc3QKLSAgKiAKLSsgKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBfcHJlcF9ub2Rl X21hcChzZWxmLCBtYXApOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAg ICBjZGVmIGNoYXIqIGNrZXkKLSsgKiAgICAgICAgIGNkZWYgbXB2X25vZGVfbGlzdCogbGlzdAot ICAqLwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0gICBfX3B5eF9MMV9lcnJvcjo7 Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnRpbWUuX19nZXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9f cHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotLSAgX19weXhfciA9IE5VTEw7Ci0rICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0rICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7Ci0r ICBfX1B5eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0Ll9wcmVw X25vZGVfbWFwIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSwg MSwgMCk7Ci0rICBfX3B5eF9yID0gMDsKLSAgIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hHSVZFUkVG KF9fcHl4X3IpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X2tleXMpOwotKyAgX19QeXhfWERF Q1JFRihfX3B5eF92X2kpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X2tleSk7Ci0gICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0v KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk5Ci0tICogICAgICAgICByZXR1cm4g dGltZQotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTYKLSsgKiAgICAgICAg IHJldHVybiBsaXN0Ci0gICogCi0tICogICAgIGRlZiBzdXNwZW5kKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAiIiJXcmFwczogbXB2X3N1c3BlbmQiIiIK LS0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSsgKiAgICAgY2RlZiBtcHZfbm9kZSBfcHJl cF9uYXRpdmVfdmFsdWUoc2VsZiwgdmFsdWUsIGZvcm1hdCk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZQotKyAqICAgICAgICAgbm9k ZS5mb3JtYXQgPSBmb3JtYXQKLSAgKi8KLSAKLS0vKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzFzdXNw ZW5kKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNl ZCk7IC8qcHJvdG8qLwotLXN0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfc3VzcGVuZFtdID0gIldyYXBzOiBtcHZfc3VzcGVuZCI7Ci0tc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMXN1c3BlbmQo UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7 Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9u cwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInN1c3BlbmQgKHdyYXBwZXIpIiwgMCk7 Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X3N1 c3BlbmQoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICop X19weXhfdl9zZWxmKSk7Ci0tCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotLQotLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X3N1 c3BlbmQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19w eXhfdl9zZWxmKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0rc3RhdGljIHN0cnVj dCBtcHZfbm9kZSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9u YXRpdmVfdmFsdWUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSwgUHlPYmplY3QgKl9fcHl4 X3ZfZm9ybWF0KSB7Ci0rICBzdHJ1Y3QgbXB2X25vZGUgX19weXhfdl9ub2RlOwotKyAgc3RydWN0 IG1wdl9ub2RlIF9fcHl4X3I7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgZW51 bSBtcHZfZm9ybWF0IF9fcHl4X3RfMTsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwot KyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0rICBpbnQgX19weXhfdF80OwotKyAgUHlP YmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7Ci0rICBQeV9zc2l6ZV90IF9fcHl4X3RfNjsKLSsgIGNo YXIgY29uc3QgKl9fcHl4X3RfNzsKLSsgIGludCBfX3B5eF90Xzg7Ci0rICBpbnQ2NF90IF9fcHl4 X3RfOTsKLSsgIGRvdWJsZSBfX3B5eF90XzEwOwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0g ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVu byA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic3VzcGVuZCIsIDApOwotKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9wcmVwX25hdGl2ZV92YWx1ZSIsIDApOwotKyAg X19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWUpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQwMQotLSAqICAgICBkZWYgc3VzcGVuZChzZWxmKToKLS0gKiAgICAgICAg ICIiIldyYXBzOiBtcHZfc3VzcGVuZCIiIgotLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAq ICAgICAgICAgICAgIG1wdl9zdXNwZW5kKHNlbGYuX2N0eCkKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0OTgKLSsgKiAgICAgY2RlZiBtcHZfbm9kZSBfcHJlcF9uYXRpdmVf dmFsdWUoc2VsZiwgdmFsdWUsIGZvcm1hdCk6Ci0rICogICAgICAgICBjZGVmIG1wdl9ub2RlIG5v ZGUKLSsgKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKLSsg KiAgICAgICAgICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUpCi0gICovCi0tICAjaWZuZGVmIENZ VEhPTl9XSVRIT1VUX0FTU0VSVElPTlMKLS0gIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFn KSkgewotLSAgICBpZiAodW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7Ci0t ICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7Ci0tICAgICAgX19QWVhf RVJSKDAsIDQwMSwgX19weXhfTDFfZXJyb3IpCi0tICAgIH0KLS0gIH0KLS0gICNlbmRpZgotLQot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQwMgotLSAqICAgICAgICAgIiIi V3JhcHM6IG1wdl9zdXNwZW5kIiIiCi0tICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0tICog ICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAg ICAgICAgICAgbXB2X3N1c3BlbmQoc2VsZi5fY3R4KQotLSAqIAotLSAqLwotLSAgewotLSAgICAg ICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwotLSAgICAg IFB5X1VOQkxPQ0tfVEhSRUFEUwotLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLS0g ICAgICAjZW5kaWYKLS0gICAgICAvKnRyeToqLyB7Ci0rICBfX3B5eF90XzEgPSAoKGVudW0gbXB2 X2Zvcm1hdClfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZm9ybWF0KF9fcHl4X3ZfZm9ybWF0KSk7 IGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ5OCwgX19weXhf TDFfZXJyb3IpCi0rICBfX3B5eF92X25vZGUuZm9ybWF0ID0gX19weXhfdF8xOwotIAotLSAgICAg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQwMwotLSAqICAgICAgICAgYXNz ZXJ0IHNlbGYuX2N0eAotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBt cHZfc3VzcGVuZChzZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAK LS0gKiAgICAgZGVmIHJlc3VtZShzZWxmKToKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0OTkKLSsgKiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZQotKyAqICAgICAgICAg bm9kZS5mb3JtYXQgPSBmb3JtYXQKLSsgKiAgICAgICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X1NUUklORzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIHZh bHVlID0gX3N0cmVuYyh2YWx1ZSkKLSsgKiAgICAgICAgICAgICBub2RlLnUuc3RyaW5nID0gPGNo YXIqPm1hbGxvYyhsZW4odmFsdWUpICsgMSkKLSAgKi8KLS0gICAgICAgIG1wdl9zdXNwZW5kKF9f cHl4X3Zfc2VsZi0+X2N0eCk7Ci0tICAgICAgfQotKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfU1RSSU5HKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDk5LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dP VFJFRihfX3B5eF90XzIpOwotKyAgX19weXhfdF8zID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19w eXhfdl9mb3JtYXQsIF9fcHl4X3RfMiwgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7 IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ5OSwgX19weXhfTDFfZXJy b3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgIF9fcHl4 X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoX19w eXhfdF80IDwgMCkpIF9fUFlYX0VSUigwLCA0OTksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhf REVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICBpZiAoX19weXhfdF80KSB7Ci0g Ci0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQwMgotLSAqICAgICAg ICAgIiIiV3JhcHM6IG1wdl9zdXNwZW5kIiIiCi0tICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4 Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogICAgICAgICAgICAgbXB2X3N1c3BlbmQoc2VsZi5fY3R4KQotLSAqIAotKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTAwCi0rICogICAgICAgICBub2RlLmZvcm1hdCA9 IGZvcm1hdAotKyAqICAgICAgICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgotKyAq ICAgICAgICAgICAgIHZhbHVlID0gX3N0cmVuYyh2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICAgICAgICAgIG5vZGUudS5zdHJpbmcgPSA8Y2hhcio+bWFsbG9jKGxl bih2YWx1ZSkgKyAxKQotKyAqICAgICAgICAgICAgIHN0cmNweShub2RlLnUuc3RyaW5nLCB2YWx1 ZSkKLSAgKi8KLS0gICAgICAvKmZpbmFsbHk6Ki8gewotLSAgICAgICAgLypub3JtYWwgZXhpdDoq L3sKLS0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgICAgIF9fUHl4X0Zhc3RH SUxfRm9yZ2V0KCk7Ci0tICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLS0gICAgICAgICAgI2Vu ZGlmCi0tICAgICAgICAgIGdvdG8gX19weXhfTDU7Ci0tICAgICAgICB9Ci0tICAgICAgICBfX3B5 eF9MNTo7Ci0rICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9u X3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTAwLCBf X3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fcHl4 X3RfNSA9IE5VTEw7Ci0rICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLSsgICAgICBfX3B5eF90XzUgPSBQeU1ldGhv ZF9HRVRfU0VMRihfX3B5eF90XzIpOwotKyAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewot KyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4 X3RfMik7Ci0rICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKLSsgICAgICAgIF9fUHl4 X0lOQ1JFRihmdW5jdGlvbik7Ci0rICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwg ZnVuY3Rpb24pOwotICAgICAgIH0KLS0gIH0KLSsgICAgfQotKyAgICBfX3B5eF90XzMgPSAoX19w eXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNSwg X19weXhfdl92YWx1ZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19w eXhfdl92YWx1ZSk7Ci0rICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0g MDsKLSsgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTAwLCBfX3B5 eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0rICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3ZfdmFsdWUsIF9fcHl4X3RfMyk7Ci0rICAgIF9fcHl4X3RfMyA9IDA7Ci0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk5Ci0tICogICAgICAgICByZXR1cm4gdGlt ZQotLSAqIAotLSAqICAgICBkZWYgc3VzcGVuZChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zdXNwZW5kIiIiCi0tICogICAgICAg ICBhc3NlcnQgc2VsZi5fY3R4Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo1MDEKLSsgKiAgICAgICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKLSsgKiAg ICAgICAgICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUpCi0rICogICAgICAgICAgICAgbm9kZS51 LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBzdHJjcHkobm9kZS51LnN0cmluZywgdmFsdWUp Ci0rICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6Ci0gICovCi0rICAg IF9fcHl4X3RfNiA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfNiA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDUwMSwgX19weXhf TDFfZXJyb3IpCi0rICAgIF9fcHl4X3Zfbm9kZS51LnN0cmluZyA9ICgoY2hhciAqKW1hbGxvYygo X19weXhfdF82ICsgMSkpKTsKLSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19w eXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLS0gIGdvdG8gX19weXhfTDA7 Ci0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5s aWJzLm1wdi5Db250ZXh0LnN1c3BlbmQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKLS0gIF9fcHl4X3IgPSBOVUxMOwotLSAgX19weXhfTDA6OwotLSAgX19Q eXhfWEdJVkVSRUYoX19weXhfcik7Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsK LS0gIHJldHVybiBfX3B5eF9yOwotLX0KLS0KLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NDA1Ci0tICogICAgICAgICAgICAgbXB2X3N1c3BlbmQoc2VsZi5fY3R4KQotLSAqIAot LSAqICAgICBkZWYgcmVzdW1lKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogICAgICAgICAiIiJXcmFwczogbXB2X3Jlc3VtZSIiIgotLSAqICAgICAgICAgYXNzZXJ0IHNl bGYuX2N0eAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTAyCi0rICog ICAgICAgICAgICAgdmFsdWUgPSBfc3RyZW5jKHZhbHVlKQotKyAqICAgICAgICAgICAgIG5vZGUu dS5zdHJpbmcgPSA8Y2hhcio+bWFsbG9jKGxlbih2YWx1ZSkgKyAxKQotKyAqICAgICAgICAgICAg IHN0cmNweShub2RlLnUuc3RyaW5nLCB2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgotKyAqICAgICAg ICAgICAgIG5vZGUudS5mbGFnID0gMSBpZiB2YWx1ZSBlbHNlIDAKLSAgKi8KLSsgICAgX19weXhf dF83ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl92YWx1ZSk7IGlmICh1bmxpa2Vs eSgoIV9fcHl4X3RfNykgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA1MDIsIF9f cHl4X0wxX2Vycm9yKQotKyAgICAodm9pZCkoc3RyY3B5KF9fcHl4X3Zfbm9kZS51LnN0cmluZywg X19weXhfdF83KSk7Ci0gCi0tLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zcmVzdW1lKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8q LwotLXN0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MnJlc3VtZVtdID0gIldyYXBzOiBtcHZfcmVzdW1lIjsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zcmVzdW1lKFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgewotLSAgUHlPYmplY3Qg Kl9fcHl4X3IgPSAwOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJyZXN1bWUgKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzJyZXN1bWUoKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7 Ci0tCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NDk5Ci0rICogICAgICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKLSsg KiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0Ci0rICogICAgICAgICBpZiBmb3JtYXQgPT0g TVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAg ICAgICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUpCi0rICogICAgICAgICAgICAgbm9kZS51LnN0 cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpCi0rICovCi0rICAgIGdvdG8gX19w eXhfTDM7Ci0rICB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMnJlc3VtZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0g TlVMTDsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBpbnQgX19weXhfbGluZW5v ID0gMDsKLS0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLS0gIGludCBfX3B5 eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJyZXN1bWUiLCAw KTsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDMKLSsgKiAgICAgICAg ICAgICBub2RlLnUuc3RyaW5nID0gPGNoYXIqPm1hbGxvYyhsZW4odmFsdWUpICsgMSkKLSsgKiAg ICAgICAgICAgICBzdHJjcHkobm9kZS51LnN0cmluZywgdmFsdWUpCi0rICogICAgICAgICBlbGlm IGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgICAgICAgICBub2RlLnUuZmxhZyA9IDEgaWYgdmFsdWUgZWxzZSAwCi0rICogICAg ICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgotKyAqLwotKyAgX19weXhfdF8z ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfRkxBRyk7IGlm ICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUwMywgX19weXhfTDFfZXJyb3Ip Ci0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgIF9fcHl4X3RfMiA9IFB5T2JqZWN0X1Jp Y2hDb21wYXJlKF9fcHl4X3ZfZm9ybWF0LCBfX3B5eF90XzMsIFB5X0VRKTsgX19QeXhfWEdPVFJF RihfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1MDMs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7Ci0rICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8yKTsgaWYg KHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTAzLCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgaWYgKF9f cHl4X3RfNCkgewotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQwNwot LSAqICAgICBkZWYgcmVzdW1lKHNlbGYpOgotLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9yZXN1 bWUiIiIKLS0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBtcHZfcmVz dW1lKHNlbGYuX2N0eCkKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUw NAotKyAqICAgICAgICAgICAgIHN0cmNweShub2RlLnUuc3RyaW5nLCB2YWx1ZSkKLSsgKiAgICAg ICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzoKLSsgKiAgICAgICAgICAgICBub2Rl LnUuZmxhZyA9IDEgaWYgdmFsdWUgZWxzZSAwICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6Ci0rICogICAgICAg ICAgICAgbm9kZS51LmludDY0ID0gdmFsdWUKLSAgKi8KLS0gICNpZm5kZWYgQ1lUSE9OX1dJVEhP VVRfQVNTRVJUSU9OUwotLSAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Ci0tICAg IGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKLS0gICAgICBQeUVy cl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKLS0gICAgICBfX1BZWF9FUlIoMCwgNDA3 LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVl KF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtlbHkoX19weXhfdF80IDwgMCkpIF9fUFlYX0VSUigw LCA1MDQsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBpZiAoX19weXhfdF80KSB7Ci0rICAgICAgX19w eXhfdF84ID0gMTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBfX3B5eF90XzggPSAwOwotICAgICB9 Ci0rICAgIF9fcHl4X3Zfbm9kZS51LmZsYWcgPSBfX3B5eF90Xzg7Ci0rCi0rICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDMKLSsgKiAgICAgICAgICAgICBub2RlLnUuc3Ry aW5nID0gPGNoYXIqPm1hbGxvYyhsZW4odmFsdWUpICsgMSkKLSsgKiAgICAgICAgICAgICBzdHJj cHkobm9kZS51LnN0cmluZywgdmFsdWUpCi0rICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZf Rk9STUFUX0ZMQUc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAg ICBub2RlLnUuZmxhZyA9IDEgaWYgdmFsdWUgZWxzZSAwCi0rICogICAgICAgICBlbGlmIGZvcm1h dCA9PSBNUFZfRk9STUFUX0lOVDY0OgotKyAqLwotKyAgICBnb3RvIF9fcHl4X0wzOwotICAgfQot LSAgI2VuZGlmCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDA4Ci0t ICogICAgICAgICAiIiJXcmFwczogbXB2X3Jlc3VtZSIiIgotLSAqICAgICAgICAgYXNzZXJ0IHNl bGYuX2N0eAotLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqICAgICAgICAgICAgIG1wdl9yZXN1bWUoc2VsZi5fY3R4KQotLSAqIAotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwNQotKyAqICAgICAgICAgZWxpZiBmb3Jt YXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgotKyAqICAgICAgICAgICAgIG5vZGUudS5mbGFnID0gMSBp ZiB2YWx1ZSBlbHNlIDAKLSsgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5U NjQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBub2RlLnUu aW50NjQgPSB2YWx1ZQotKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VC TEU6Ci0gICovCi0tICB7Ci0tICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgUHlUaHJl YWRTdGF0ZSAqX3NhdmU7Ci0tICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0tICAgICAgX19QeXhf RmFzdEdJTF9SZW1lbWJlcigpOwotLSAgICAgICNlbmRpZgotLSAgICAgIC8qdHJ5OiovIHsKLSsg IF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFU X0lOVDY0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTA1LCBfX3B5 eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgX19weXhfdF8zID0g UHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMiwgUHlfRVEpOyBf X1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDAsIDUwNSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsg X19weXhfdF8yID0gMDsKLSsgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5 eF90XzMpOyBpZiAodW5saWtlbHkoX19weXhfdF80IDwgMCkpIF9fUFlYX0VSUigwLCA1MDUsIF9f cHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7 Ci0rICBpZiAoX19weXhfdF80KSB7Ci0gCi0tICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDA5Ci0tICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0tICogICAgICAg ICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIG1wdl9yZXN1bWUoc2VsZi5fY3R4KSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogCi0tICogICAgIEBfZXJyb3JzCi0rICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDYKLSsgKiAgICAgICAgICAgICBub2Rl LnUuZmxhZyA9IDEgaWYgdmFsdWUgZWxzZSAwCi0rICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX0lOVDY0OgotKyAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZhbHVlICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1Q Vl9GT1JNQVRfRE9VQkxFOgotKyAqICAgICAgICAgICAgIG5vZGUudS5kb3VibGVfID0gdmFsdWUK LSAgKi8KLS0gICAgICAgIG1wdl9yZXN1bWUoX19weXhfdl9zZWxmLT5fY3R4KTsKLS0gICAgICB9 Ci0rICAgIF9fcHl4X3RfOSA9IF9fUHl4X1B5SW50X0FzX2ludDY0X3QoX19weXhfdl92YWx1ZSk7 IGlmICh1bmxpa2VseSgoX19weXhfdF85ID09ICgoaW50NjRfdCktMSkpICYmIFB5RXJyX09jY3Vy cmVkKCkpKSBfX1BZWF9FUlIoMCwgNTA2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdl9u b2RlLnUuaW50NjQgPSBfX3B5eF90Xzk7Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQwOAotLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9yZXN1bWUiIiIKLS0g KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLS0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBtcHZfcmVzdW1lKHNlbGYu X2N0eCkKLS0gKiAKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwNQot KyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgotKyAqICAgICAgICAg ICAgIG5vZGUudS5mbGFnID0gMSBpZiB2YWx1ZSBlbHNlIDAKLSsgKiAgICAgICAgIGVsaWYgZm9y bWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgICAgICAgICBub2RlLnUuaW50NjQgPSB2YWx1ZQotKyAqICAgICAgICAgZWxpZiBmb3Jt YXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6Ci0gICovCi0tICAgICAgLypmaW5hbGx5OiovIHsKLS0g ICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97Ci0tICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAot LSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOwotLSAgICAgICAgICBQeV9CTE9DS19U SFJFQURTCi0tICAgICAgICAgICNlbmRpZgotLSAgICAgICAgICBnb3RvIF9fcHl4X0w1OwotLSAg ICAgICAgfQotLSAgICAgICAgX19weXhfTDU6OwotLSAgICAgIH0KLSsgICAgZ290byBfX3B5eF9M MzsKLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MDUKLS0g KiAgICAgICAgICAgICBtcHZfc3VzcGVuZChzZWxmLl9jdHgpCi0tICogCi0tICogICAgIGRlZiBy ZXN1bWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICIi IldyYXBzOiBtcHZfcmVzdW1lIiIiCi0tICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA3Ci0rICogICAgICAgICBlbGlmIGZv cm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgotKyAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9 IHZhbHVlCi0rICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIG5vZGUudS5kb3VibGVf ID0gdmFsdWUKLSsgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJB WToKLSAgKi8KLSsgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1h dChNUFZfRk9STUFUX0RPVUJMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDAsIDUwNywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsg IF9fcHl4X3RfMiA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfZm9ybWF0LCBfX3B5eF90 XzMsIFB5X0VRKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA1MDcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVG KF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVj dF9Jc1RydWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9F UlIoMCwgNTA3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOwotKyAgaWYgKF9fcHl4X3RfNCkgewotIAotLSAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCi0tICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwot LSAgZ290byBfX3B5eF9MMDsKLS0gIF9fcHl4X0wxX2Vycm9yOjsKLS0gIF9fUHl4X0FkZFRyYWNl YmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQucmVzdW1lIiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICBfX3B5eF9yID0gTlVMTDsKLS0gIF9f cHl4X0wwOjsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotLSAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0rICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDgKLSsgKiAgICAgICAgICAgICBub2RlLnUuaW50NjQg PSB2YWx1ZQotKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6Ci0r ICogICAgICAgICAgICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJS QVk6Ci0rICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbGlzdCh2 YWx1ZSkKLSsgKi8KLSsgICAgX19weXhfdF8xMCA9IF9fcHl4X1B5RmxvYXRfQXNEb3VibGUoX19w eXhfdl92YWx1ZSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8xMCA9PSAoZG91YmxlKS0xKSAmJiBQ eUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDUwOCwgX19weXhfTDFfZXJyb3IpCi0rICAg IF9fcHl4X3Zfbm9kZS51LmRvdWJsZV8gPSBfX3B5eF90XzEwOwotIAotLS8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0MTIKLS0gKiAKLS0gKiAgICAgQF9lcnJvcnMKLS0gKiAgICAg ZGVmIHJlcXVlc3RfZXZlbnQoc2VsZiwgZXZlbnQsIGVuYWJsZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICIiIkVuYWJsZSBvciBkaXNhYmxlIGEgZ2l2ZW4gZXZl bnQuCi0tICogCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDcKLSsg KiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6Ci0rICogICAgICAgICAg ICAgbm9kZS51LmludDY0ID0gdmFsdWUKLSsgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9G T1JNQVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAg ICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQotKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBW X0ZPUk1BVF9OT0RFX0FSUkFZOgotICAqLwotLQotLS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNXJl cXVlc3RfZXZlbnQoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3Ms IFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCi0tc3RhdGljIGNoYXIgX19weXhfZG9j Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80cmVxdWVzdF9ldmVudFtdID0gIkVuYWJs ZSBvciBkaXNhYmxlIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAgICAgQXJndW1lbnRzOlxuICAgICAg ICBldmVudCAtIFNlZSBFdmVudHNcbiAgICAgICAgZW5hYmxlIC0gVHJ1ZSB0byBlbmFibGUsIEZh bHNlIHRvIGRpc2FibGVcblxuICAgICAgICBXcmFwczogbXB2X3JlcXVlc3RfZXZlbnRcbiAgICAg ICAgIjsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF81cmVxdWVzdF9ldmVudChQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKLS0gIFB5T2JqZWN0ICpfX3B5eF92 X2V2ZW50ID0gMDsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X2VuYWJsZSA9IDA7Ci0tICBpbnQgX19w eXhfbGluZW5vID0gMDsKLS0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLS0g IGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLS0gIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi cmVxdWVzdF9ldmVudCAod3JhcHBlcikiLCAwKTsKLS0gIHsKLS0gICAgc3RhdGljIFB5T2JqZWN0 ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfZXZlbnQsJl9fcHl4X25fc19lbmFi bGUsMH07Ci0tICAgIFB5T2JqZWN0KiB2YWx1ZXNbMl0gPSB7MCwwfTsKLS0gICAgaWYgKHVubGlr ZWx5KF9fcHl4X2t3ZHMpKSB7Ci0tICAgICAgUHlfc3NpemVfdCBrd19hcmdzOwotLSAgICAgIGNv bnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpOwot LSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKLS0gICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9 IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7Ci0tICAgICAgICBDWVRIT05fRkFMTFRI Uk9VR0g7Ci0tICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9f cHl4X2FyZ3MsIDApOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2Fz ZSAgMDogYnJlYWs7Ci0tICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vy cm9yOwotLSAgICAgIH0KLS0gICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7 Ci0tICAgICAgc3dpdGNoIChwb3NfYXJncykgewotLSAgICAgICAgY2FzZSAgMDoKLS0gICAgICAg IGlmIChsaWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3 ZHMsIF9fcHl4X25fc19ldmVudCkpICE9IDApKSBrd19hcmdzLS07Ci0tICAgICAgICBlbHNlIGdv dG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 Ci0tICAgICAgICBjYXNlICAxOgotLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19Q eXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2VuYWJsZSkpICE9IDAp KSBrd19hcmdzLS07Ci0tICAgICAgICBlbHNlIHsKLS0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0 dXBsZUludmFsaWQoInJlcXVlc3RfZXZlbnQiLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDQx MiwgX19weXhfTDNfZXJyb3IpCi0tICAgICAgICB9Ci0tICAgICAgfQotLSAgICAgIGlmICh1bmxp a2VseShrd19hcmdzID4gMCkpIHsKLS0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9w dGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBw b3NfYXJncywgInJlcXVlc3RfZXZlbnQiKSA8IDApKSBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9M M19lcnJvcikKLS0gICAgICB9Ci0tICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5 eF9hcmdzKSAhPSAyKSB7Ci0tICAgICAgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLS0g ICAgfSBlbHNlIHsKLS0gICAgICB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2Fy Z3MsIDApOwotLSAgICAgIHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywg MSk7Ci0tICAgIH0KLS0gICAgX19weXhfdl9ldmVudCA9IHZhbHVlc1swXTsKLS0gICAgX19weXhf dl9lbmFibGUgPSB2YWx1ZXNbMV07Ci0rICAgIGdvdG8gX19weXhfTDM7Ci0gICB9Ci0tICBnb3Rv IF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOwotLSAgX19weXhfTDVfYXJndHVwbGVf ZXJyb3I6OwotLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInJlcXVlc3RfZXZlbnQiLCAx LCAyLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDQxMiwg X19weXhfTDNfZXJyb3IpCi0tICBfX3B5eF9MM19lcnJvcjo7Ci0tICBfX1B5eF9BZGRUcmFjZWJh Y2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnJlcXVlc3RfZXZlbnQiLCBfX3B5eF9jbGlu ZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIE5VTEw7Ci0tICBfX3B5eF9MNF9hcmd1bWVudF91bnBh Y2tpbmdfZG9uZTo7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzRyZXF1ZXN0X2V2ZW50KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfZXZlbnQsIF9fcHl4X3Zf ZW5hYmxlKTsKLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0gCi0tc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNHJlcXVlc3Rf ZXZlbnQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9ldmVudCwgUHlPYmplY3QgKl9fcHl4X3ZfZW5h YmxlKSB7Ci0tICBpbnQgX19weXhfdl9lbmFibGVfaTsKLS0gIGludCBfX3B5eF92X2VycjsKLS0g IGVudW0gbXB2X2V2ZW50X2lkIF9fcHl4X3ZfZXZlbnRfaWQ7Ci0tICBQeU9iamVjdCAqX19weXhf ciA9IE5VTEw7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgaW50IF9fcHl4X3Rf MTsKLS0gIGludCBfX3B5eF90XzI7Ci0tICBlbnVtIG1wdl9ldmVudF9pZCBfX3B5eF90XzM7Ci0t ICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwot LSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJlcXVlc3RfZXZlbnQiLCAw KTsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDkKLSsgKiAgICAgICAg IGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOgotKyAqICAgICAgICAgICAgIG5vZGUu dS5kb3VibGVfID0gdmFsdWUKLSsgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRf Tk9ERV9BUlJBWTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAg IG5vZGUudS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QodmFsdWUpCi0rICogICAgICAgICBl bGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgotKyAqLwotKyAgX19weXhfdF8yID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfTk9ERV9BUlJBWSk7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUwOSwgX19weXhfTDFfZXJy b3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgIF9fcHl4X3RfMyA9IFB5T2JqZWN0 X1JpY2hDb21wYXJlKF9fcHl4X3ZfZm9ybWF0LCBfX3B5eF90XzIsIFB5X0VRKTsgX19QeXhfWEdP VFJFRihfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA1 MDksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7Ci0rICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8zKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTA5LCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotKyAgaWYg KF9fcHl4X3RfNCkgewotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQy MQotLSAqICAgICAgICAgV3JhcHM6IG1wdl9yZXF1ZXN0X2V2ZW50Ci0tICogICAgICAgICAiIiIK LS0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICAgICAgY2RlZiBpbnQgZW5hYmxlX2kgPSAxIGlmIGVuYWJsZSBlbHNlIDAKLS0g KiAgICAgICAgIGNkZWYgaW50IGVycgotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTEwCi0rICogICAgICAgICAgICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQotKyAqICAg ICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotKyAqICAgICAgICAg ICAgIG5vZGUudS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QodmFsdWUpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRf Tk9ERV9NQVA6Ci0rICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVf bWFwKHZhbHVlKQotICAqLwotLSAgI2lmbmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05TCi0t ICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKLS0gICAgaWYgKHVubGlrZWx5KCEo X19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewotLSAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNf QXNzZXJ0aW9uRXJyb3IpOwotLSAgICAgIF9fUFlYX0VSUigwLCA0MjEsIF9fcHl4X0wxX2Vycm9y KQotLSAgICB9Ci0tICB9Ci0tICAjZW5kaWYKLSsgICAgX19weXhfdl9ub2RlLnUubGlzdCA9ICgo c3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilf X3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fcHJlcF9ub2RlX2xpc3QoX19weXhfdl9zZWxmLCBf X3B5eF92X3ZhbHVlKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 MjIKLS0gKiAgICAgICAgICIiIgotLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotLSAqICAg ICAgICAgY2RlZiBpbnQgZW5hYmxlX2kgPSAxIGlmIGVuYWJsZSBlbHNlIDAgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0tICogICAgICAgICBj ZGVmIG1wdl9ldmVudF9pZCBldmVudF9pZCA9IGV2ZW50Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo1MDkKLSsgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JN QVRfRE9VQkxFOgotKyAqICAgICAgICAgICAgIG5vZGUudS5kb3VibGVfID0gdmFsdWUKLSsgKiAg ICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5fcHJl cF9ub2RlX2xpc3QodmFsdWUpCi0rICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X05PREVfTUFQOgotICAqLwotLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9f cHl4X3ZfZW5hYmxlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwg NDIyLCBfX3B5eF9MMV9lcnJvcikKLS0gIGlmIChfX3B5eF90XzIpIHsKLS0gICAgX19weXhfdF8x ID0gMTsKLS0gIH0gZWxzZSB7Ci0tICAgIF9fcHl4X3RfMSA9IDA7Ci0rICAgIGdvdG8gX19weXhf TDM7Ci0gICB9Ci0tICBfX3B5eF92X2VuYWJsZV9pID0gX19weXhfdF8xOwotIAotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyNAotLSAqICAgICAgICAgY2RlZiBpbnQgZW5h YmxlX2kgPSAxIGlmIGVuYWJsZSBlbHNlIDAKLS0gKiAgICAgICAgIGNkZWYgaW50IGVycgotLSAq ICAgICAgICAgY2RlZiBtcHZfZXZlbnRfaWQgZXZlbnRfaWQgPSBldmVudCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAg IGVyciA9IG1wdl9yZXF1ZXN0X2V2ZW50KHNlbGYuX2N0eCwgZXZlbnRfaWQsIGVuYWJsZV9pKQot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxMQotKyAqICAgICAgICAgZWxp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotKyAqICAgICAgICAgICAgIG5vZGUu dS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QodmFsdWUpCi0rICogICAgICAgICBlbGlmIGZv cm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbWFwKHZhbHVl KQotKyAqICAgICAgICAgZWxzZToKLSAgKi8KLS0gIF9fcHl4X3RfMyA9ICgoZW51bSBtcHZfZXZl bnRfaWQpX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2V2ZW50X2lkKF9fcHl4X3ZfZXZlbnQpKTsg aWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDI0LCBfX3B5eF9M MV9lcnJvcikKLS0gIF9fcHl4X3ZfZXZlbnRfaWQgPSBfX3B5eF90XzM7Ci0rICBfX3B5eF90XzMg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9OT0RFX01BUCk7 IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUxMSwgX19weXhfTDFfZXJy b3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgIF9fcHl4X3RfMiA9IFB5T2JqZWN0 X1JpY2hDb21wYXJlKF9fcHl4X3ZfZm9ybWF0LCBfX3B5eF90XzMsIFB5X0VRKTsgX19QeXhfWEdP VFJFRihfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1 MTEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3Rf MyA9IDA7Ci0rICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8yKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgaWYg KF9fcHl4X3RfNCkgewotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQy NQotLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0tICogICAgICAgICBjZGVmIG1wdl9ldmVudF9p ZCBldmVudF9pZCA9IGV2ZW50Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgZXJyID0gbXB2X3JlcXVlc3RfZXZlbnQo c2VsZi5fY3R4LCBldmVudF9pZCwgZW5hYmxlX2kpCi0tICogICAgICAgICByZXR1cm4gZXJyCi0r ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTIKLSsgKiAgICAgICAgICAg ICBub2RlLnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0KHZhbHVlKQotKyAqICAgICAgICAg ZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKLSsgKiAgICAgICAgICAgICBub2Rl LnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9tYXAodmFsdWUpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgIGVsc2U6Ci0rICogICAgICAgICAgICAgbm9kZS5mb3JtYXQg PSBNUFZfRk9STUFUX05PTkUKLSAgKi8KLS0gIHsKLS0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQK LS0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKLS0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMK LS0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0tICAgICAgI2VuZGlmCi0tICAgICAg Lyp0cnk6Ki8gewotKyAgICBfX3B5eF92X25vZGUudS5saXN0ID0gKChzdHJ1Y3QgX19weXhfdnRh YnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19w eXhfdnRhYiktPl9wcmVwX25vZGVfbWFwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92YWx1ZSk7Ci0g Ci0tICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDI2Ci0tICogICAg ICAgICBjZGVmIG1wdl9ldmVudF9pZCBldmVudF9pZCA9IGV2ZW50Ci0tICogICAgICAgICB3aXRo IG5vZ2lsOgotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2V2ZW50KHNlbGYuX2N0 eCwgZXZlbnRfaWQsIGVuYWJsZV9pKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgICAgICByZXR1cm4gZXJyCi0tICogCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1MTEKLSsgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9B UlJBWToKLSsgKiAgICAgICAgICAgICBub2RlLnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0 KHZhbHVlKQotKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIG5vZGUudS5saXN0 ID0gc2VsZi5fcHJlcF9ub2RlX21hcCh2YWx1ZSkKLSsgKiAgICAgICAgIGVsc2U6Ci0gICovCi0t ICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9yZXF1ZXN0X2V2ZW50KF9fcHl4X3Zfc2VsZi0+X2N0 eCwgX19weXhfdl9ldmVudF9pZCwgX19weXhfdl9lbmFibGVfaSk7Ci0tICAgICAgfQotKyAgICBn b3RvIF9fcHl4X0wzOwotKyAgfQotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0MjUKLS0gKiAgICAgICAgIGNkZWYgaW50IGVycgotLSAqICAgICAgICAgY2RlZiBt cHZfZXZlbnRfaWQgZXZlbnRfaWQgPSBldmVudAotLSAqICAgICAgICAgd2l0aCBub2dpbDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1 ZXN0X2V2ZW50KHNlbGYuX2N0eCwgZXZlbnRfaWQsIGVuYWJsZV9pKQotLSAqICAgICAgICAgcmV0 dXJuIGVycgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxNAotKyAqICAg ICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX21hcCh2YWx1ZSkKLSsgKiAg ICAgICAgIGVsc2U6Ci0rICogICAgICAgICAgICAgbm9kZS5mb3JtYXQgPSBNUFZfRk9STUFUX05P TkUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIG5vZGUK LSsgKiAKLSAgKi8KLS0gICAgICAvKmZpbmFsbHk6Ki8gewotLSAgICAgICAgLypub3JtYWwgZXhp dDoqL3sKLS0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgICAgIF9fUHl4X0Zh c3RHSUxfRm9yZ2V0KCk7Ci0tICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLS0gICAgICAgICAg I2VuZGlmCi0tICAgICAgICAgIGdvdG8gX19weXhfTDU7Ci0tICAgICAgICB9Ci0tICAgICAgICBf X3B5eF9MNTo7Ci0tICAgICAgfQotKyAgLyplbHNlKi8gewotKyAgICBfX3B5eF92X25vZGUuZm9y bWF0ID0gTVBWX0ZPUk1BVF9OT05FOwotICAgfQotKyAgX19weXhfTDM6OwotIAotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyNwotLSAqICAgICAgICAgd2l0aCBub2dpbDoK LS0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9ldmVudChzZWxmLl9jdHgsIGV2ZW50 X2lkLCBlbmFibGVfaSkKLS0gKiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxNQotKyAq ICAgICAgICAgZWxzZToKLSsgKiAgICAgICAgICAgICBub2RlLmZvcm1hdCA9IE1QVl9GT1JNQVRf Tk9ORQotKyAqICAgICAgICAgcmV0dXJuIG5vZGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqIAotLSAqICAgICBAX2Vycm9ycwotKyAqICAgICBjZGVmIF9mcmVlX25hdGl2ZV92YWx1 ZShzZWxmLCBtcHZfbm9kZSBub2RlKToKLSAgKi8KLS0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7 Ci0tICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1 bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDQyNywgX19weXhfTDFfZXJyb3IpCi0t ICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLS0gIF9fcHl4X3IgPSBfX3B5eF90XzQ7Ci0tICBf X3B5eF90XzQgPSAwOwotKyAgX19weXhfciA9IF9fcHl4X3Zfbm9kZTsKLSAgIGdvdG8gX19weXhf TDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDEyCi0tICogCi0t ICogICAgIEBfZXJyb3JzCi0tICogICAgIGRlZiByZXF1ZXN0X2V2ZW50KHNlbGYsIGV2ZW50LCBl bmFibGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAiIiJFbmFi bGUgb3IgZGlzYWJsZSBhIGdpdmVuIGV2ZW50LgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ5NgotKyAqICAgICAgICAgcmV0dXJuIGxpc3QKLSAgKiAKLSsgKiAgICAgY2Rl ZiBtcHZfbm9kZSBfcHJlcF9uYXRpdmVfdmFsdWUoc2VsZiwgdmFsdWUsIGZvcm1hdCk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZQot KyAqICAgICAgICAgbm9kZS5mb3JtYXQgPSBmb3JtYXQKLSAgKi8KLSAKLSAgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLwotICAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzQpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4 dC5yZXF1ZXN0X2V2ZW50IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7Ci0tICBfX3B5eF9yID0gTlVMTDsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsK LSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF81 KTsKLSsgIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQu X3ByZXBfbmF0aXZlX3ZhbHVlIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSwgMSwgMCk7Ci0rICBfX1B5eF9wcmV0ZW5kX3RvX2luaXRpYWxpemUoJl9fcHl4X3Ip OwotICAgX19weXhfTDA6OwotLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0rICBfX1B5eF9Y REVDUkVGKF9fcHl4X3ZfdmFsdWUpOwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQzMAotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTcKLSsgKiAg ICAgICAgIHJldHVybiBub2RlCi0gICogCi0tICogICAgIEBfZXJyb3JzCi0tICogICAgIGRlZiBz ZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xldmVsKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyIiIgotLSAq ICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotKyAqICAgICBjZGVmIF9mcmVlX25hdGl2ZV92YWx1 ZShzZWxmLCBtcHZfbm9kZSBub2RlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgaWYgbm9kZS5mb3JtYXQgaW4gKE1QVl9GT1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZP Uk1BVF9OT0RFX01BUCk6Ci0rICogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxp c3QubnVtKToKLSAgKi8KLSAKLS0vKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzdzZXRfbG9nX2xldmVs KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2xvZ2xldmVsKTsgLypw cm90byovCi0tc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF82c2V0X2xvZ19sZXZlbFtdID0gIldyYXBzOiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMi OwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzdzZXRfbG9nX2xldmVsKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X2xvZ2xldmVsKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0tICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldF9sb2df bGV2ZWwgKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzZzZXRfbG9nX2xldmVsKCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilf X3B5eF92X2xvZ2xldmVsKSk7Ci0tCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotLQot LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzZzZXRfbG9nX2xldmVsKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfbG9nbGV2ZWwpIHsKLS0gIGNo YXIgY29uc3QgKl9fcHl4X3ZfbG9nbGV2ZWxfYzsKLS0gIGludCBfX3B5eF92X2VycjsKLStzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19mcmVl X25hdGl2ZV92YWx1ZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0ICpfX3B5eF92X3NlbGYsIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF92X25vZGUpIHsKLSsgIGlu dCBfX3B5eF92X2k7Ci0gICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0tICBQeU9i amVjdCAqX19weXhfdF8yID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOwot LSAgY2hhciBjb25zdCAqX19weXhfdF80OwotKyAgaW50IF9fcHl4X3RfMTsKLSsgIGludCBfX3B5 eF90XzI7Ci0rICBpbnQgX19weXhfdF8zOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7 Ci0rICBpbnQgX19weXhfdF81OwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBj aGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0t ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X2xvZ19sZXZlbCIsIDApOwotLSAgX19Q eXhfSU5DUkVGKF9fcHl4X3ZfbG9nbGV2ZWwpOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9mcmVlX25hdGl2ZV92YWx1ZSIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQzMgotLSAqICAgICBkZWYgc2V0X2xvZ19sZXZlbChzZWxmLCBsb2dsZXZl bCk6Ci0tICogICAgICAgICAiIiJXcmFwczogbXB2X3JlcXVlc3RfbG9nX21lc3NhZ2VzIiIiCi0t ICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgICAgIGxvZ2xldmVsID0gX3N0cmVuYyhsb2dsZXZlbCkKLS0gKiAgICAgICAgIGNk ZWYgY29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsCi0rICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTE4Ci0rICogCi0rICogICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3Zh bHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOgotKyAqICAgICAgICAgaWYgbm9kZS5mb3JtYXQgaW4g KE1QVl9GT1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUu bGlzdC5udW0pOgotKyAqICAgICAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShu b2RlLnUubGlzdC52YWx1ZXNbaV0pCi0gICovCi0tICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FT U0VSVElPTlMKLS0gIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgewotLSAgICBpZiAo dW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7Ci0tICAgICAgUHlFcnJfU2V0 Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7Ci0tICAgICAgX19QWVhfRVJSKDAsIDQzMiwgX19w eXhfTDFfZXJyb3IpCi0tICAgIH0KLS0gIH0KLS0gICNlbmRpZgotKyAgc3dpdGNoIChfX3B5eF92 X25vZGUuZm9ybWF0KSB7Ci0rICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotKyAgICBj YXNlIE1QVl9GT1JNQVRfTk9ERV9NQVA6Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NDMzCi0tICogICAgICAgICAiIiJXcmFwczogbXB2X3JlcXVlc3RfbG9nX21lc3Nh Z2VzIiIiCi0tICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0tICogICAgICAgICBsb2dsZXZl bCA9IF9zdHJlbmMobG9nbGV2ZWwpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgIGNkZWYgY29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsCi0tICogICAgICAg ICBjZGVmIGludCBlcnIKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUx OQotKyAqICAgICBjZGVmIF9mcmVlX25hdGl2ZV92YWx1ZShzZWxmLCBtcHZfbm9kZSBub2RlKToK LSsgKiAgICAgICAgIGlmIG5vZGUuZm9ybWF0IGluIChNUFZfRk9STUFUX05PREVfQVJSQVksIE1Q Vl9GT1JNQVRfTk9ERV9NQVApOgotKyAqICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGUu dS5saXN0Lm51bSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAg ICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZS51Lmxpc3QudmFsdWVzW2ldKQotKyAq ICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3QudmFsdWVzKQotICAqLwotLSAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0MzMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX3B5eF90XzMgPSBOVUxMOwotLSAgaWYgKENZVEhP Tl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkg ewotLSAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwotLSAgICBp ZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKLS0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1l dGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoX19weXhf dF8zKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgIF9fUHl4X0RFQ1JF Rl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0rICAgIF9fcHl4X3RfMSA9IF9fcHl4X3Zfbm9k ZS51Lmxpc3QtPm51bTsKLSsgICAgX19weXhfdF8yID0gX19weXhfdF8xOwotKyAgICBmb3IgKF9f cHl4X3RfMyA9IDA7IF9fcHl4X3RfMyA8IF9fcHl4X3RfMjsgX19weXhfdF8zKz0xKSB7Ci0rICAg ICAgX19weXhfdl9pID0gX19weXhfdF8zOwotKwotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1MjAKLSsgKiAgICAgICAgIGlmIG5vZGUuZm9ybWF0IGluIChNUFZfRk9S TUFUX05PREVfQVJSQVksIE1QVl9GT1JNQVRfTk9ERV9NQVApOgotKyAqICAgICAgICAgICAgIGZv ciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6Ci0rICogICAgICAgICAgICAgICAgIHNlbGYu X2ZyZWVfbmF0aXZlX3ZhbHVlKG5vZGUudS5saXN0LnZhbHVlc1tpXSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3QudmFsdWVzKQot KyAqICAgICAgICAgICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6Ci0r ICovCi0rICAgICAgX19weXhfdF80ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVl X25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIChfX3B5eF92X25vZGUudS5saXN0LT52YWx1ZXNb X19weXhfdl9pXSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA1MjAs IF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAgICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotICAgICB9Ci0tICB9Ci0t ICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl9sb2dsZXZlbCkgOiBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9sb2dsZXZlbCk7Ci0tICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCA0MzMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gIF9fUHl4 X0RFQ1JFRl9TRVQoX19weXhfdl9sb2dsZXZlbCwgX19weXhfdF8xKTsKLS0gIF9fcHl4X3RfMSA9 IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDM0Ci0tICogICAg ICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0tICogICAgICAgICBsb2dsZXZlbCA9IF9zdHJlbmMobG9n bGV2ZWwpCi0tICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGxvZ2xldmVsX2MgPSBsb2dsZXZl bCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjZGVmIGludCBlcnIK LS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1MjEKLSsgKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5u dW0pOgotKyAqICAgICAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlLnUu bGlzdC52YWx1ZXNbaV0pCi0rICogICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC52YWx1ZXMp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBpZiBub2RlLmZv cm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgotKyAqICAgICAgICAgICAgICAgICBmb3IgaSBp biByYW5nZShub2RlLnUubGlzdC5udW0pOgotICAqLwotLSAgX19weXhfdF80ID0gX19QeXhfUHlP YmplY3RfQXNTdHJpbmcoX19weXhfdl9sb2dsZXZlbCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3Rf NCkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0MzQsIF9fcHl4X0wxX2Vycm9y KQotLSAgX19weXhfdl9sb2dsZXZlbF9jID0gX19weXhfdF80OwotKyAgICBmcmVlKF9fcHl4X3Zf bm9kZS51Lmxpc3QtPnZhbHVlcyk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NDM2Ci0tICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGxvZ2xldmVsX2MgPSBsb2ds ZXZlbAotLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0tICogICAgICAgICB3aXRoIG5vZ2lsOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgZXJyID0gbXB2X3Jl cXVlc3RfbG9nX21lc3NhZ2VzKHNlbGYuX2N0eCwgbG9nbGV2ZWxfYykKLS0gKiAgICAgICAgIHJl dHVybiBlcnIKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyMgotKyAq ICAgICAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlLnUubGlzdC52YWx1 ZXNbaV0pCi0rICogICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC52YWx1ZXMpCi0rICogICAg ICAgICAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShu b2RlLnUubGlzdC5udW0pOgotKyAqICAgICAgICAgICAgICAgICAgICAgZnJlZShub2RlLnUubGlz dC5rZXlzW2ldKQotICAqLwotLSAgewotLSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAg IFB5VGhyZWFkU3RhdGUgKl9zYXZlOwotLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotLSAgICAg IF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLS0gICAgICAjZW5kaWYKLS0gICAgICAvKnRyeToq LyB7Ci0rICAgIF9fcHl4X3RfNSA9ICgoX19weXhfdl9ub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFU X05PREVfTUFQKSAhPSAwKTsKLSsgICAgaWYgKF9fcHl4X3RfNSkgewotIAotLSAgICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzNwotLSAqICAgICAgICAgY2RlZiBpbnQg ZXJyCi0tICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9y ZXF1ZXN0X2xvZ19tZXNzYWdlcyhzZWxmLl9jdHgsIGxvZ2xldmVsX2MpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHJldHVybiBlcnIKLS0gKiAKLSsgICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTIzCi0rICogICAgICAgICAgICAgZnJlZShu b2RlLnUubGlzdC52YWx1ZXMpCi0rICogICAgICAgICAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBW X0ZPUk1BVF9OT0RFX01BUDoKLSsgKiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9k ZS51Lmxpc3QubnVtKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg ICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC5rZXlzW2ldKQotKyAqICAgICAgICAgICAgICAg ICBmcmVlKG5vZGUudS5saXN0LmtleXMpCi0gICovCi0tICAgICAgICBfX3B5eF92X2VyciA9IG1w dl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyhfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfbG9nbGV2 ZWxfYyk7Ci0tICAgICAgfQotKyAgICAgIF9fcHl4X3RfMSA9IF9fcHl4X3Zfbm9kZS51Lmxpc3Qt Pm51bTsKLSsgICAgICBfX3B5eF90XzIgPSBfX3B5eF90XzE7Ci0rICAgICAgZm9yIChfX3B5eF90 XzMgPSAwOyBfX3B5eF90XzMgPCBfX3B5eF90XzI7IF9fcHl4X3RfMys9MSkgewotKyAgICAgICAg X19weXhfdl9pID0gX19weXhfdF8zOwotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0MzYKLS0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbG9nbGV2ZWxfYyA9 IGxvZ2xldmVsCi0tICogICAgICAgICBjZGVmIGludCBlcnIKLS0gKiAgICAgICAgIHdpdGggbm9n aWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBlcnIgPSBt cHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMoc2VsZi5fY3R4LCBsb2dsZXZlbF9jKQotLSAqICAgICAg ICAgcmV0dXJuIGVycgotKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjUyNAotKyAqICAgICAgICAgICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9N QVA6Ci0rICogICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6 Ci0rICogICAgICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXNbaV0pICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICAgICAgZnJlZShub2RlLnUu bGlzdC5rZXlzKQotKyAqICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3QpCi0gICovCi0tICAg ICAgLypmaW5hbGx5OiovIHsKLS0gICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97Ci0tICAgICAgICAg ICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOwot LSAgICAgICAgICBQeV9CTE9DS19USFJFQURTCi0tICAgICAgICAgICNlbmRpZgotLSAgICAgICAg ICBnb3RvIF9fcHl4X0w1OwotLSAgICAgICAgfQotLSAgICAgICAgX19weXhfTDU6OwotKyAgICAg ICAgZnJlZSgoX19weXhfdl9ub2RlLnUubGlzdC0+a2V5c1tfX3B5eF92X2ldKSk7Ci0gICAgICAg fQotLSAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzOAotLSAq ICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9s b2dfbWVzc2FnZXMoc2VsZi5fY3R4LCBsb2dsZXZlbF9jKQotLSAqICAgICAgICAgcmV0dXJuIGVy ciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogCi0tICogICAgIEBfZXJyb3JzCi0r ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyNQotKyAqICAgICAgICAg ICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOgotKyAqICAgICAgICAgICAg ICAgICAgICAgZnJlZShub2RlLnUubGlzdC5rZXlzW2ldKQotKyAqICAgICAgICAgICAgICAgICBm cmVlKG5vZGUudS5saXN0LmtleXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0KQotKyAqICAgICAgICAgZWxpZiBub2RlLmZvcm1h dCA9PSBNUFZfRk9STUFUX1NUUklORzoKLSAgKi8KLS0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7 Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQzOCwgX19weXhfTDFfZXJyb3IpCi0t ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF90XzE7Ci0tICBf X3B5eF90XzEgPSAwOwotLSAgZ290byBfX3B5eF9MMDsKLSsgICAgICBmcmVlKF9fcHl4X3Zfbm9k ZS51Lmxpc3QtPmtleXMpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQzMAotLSAqIAotLSAqICAgICBAX2Vycm9ycwotLSAqICAgICBkZWYgc2V0X2xvZ19sZXZlbChz ZWxmLCBsb2dsZXZlbCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg ICIiIldyYXBzOiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKLS0gKiAgICAgICAgIGFzc2Vy dCBzZWxmLl9jdHgKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTIy Ci0rICogICAgICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKG5vZGUudS5saXN0 LnZhbHVlc1tpXSkKLSsgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LnZhbHVlcykKLSsg KiAgICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgIGZvciBpIGluIHJh bmdlKG5vZGUudS5saXN0Lm51bSk6Ci0rICogICAgICAgICAgICAgICAgICAgICBmcmVlKG5vZGUu dS5saXN0LmtleXNbaV0pCi0gICovCi0rICAgIH0KLSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLwotLSAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwot LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMp OwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5zZXRf bG9nX2xldmVsIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 Ci0tICBfX3B5eF9yID0gTlVMTDsKLS0gIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hERUNSRUYoX19w eXhfdl9sb2dsZXZlbCk7Ci0tICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLS0gIF9fUHl4X1Jl Zk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTI2Ci0rICogICAgICAgICAgICAgICAgICAg ICBmcmVlKG5vZGUudS5saXN0LmtleXNbaV0pCi0rICogICAgICAgICAgICAgICAgIGZyZWUobm9k ZS51Lmxpc3Qua2V5cykKLSsgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0KSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1Q Vl9GT1JNQVRfU1RSSU5HOgotKyAqICAgICAgICAgICAgIGZyZWUobm9kZS51LnN0cmluZykKLSsg Ki8KLSsgICAgZnJlZShfX3B5eF92X25vZGUudS5saXN0KTsKLSAKLS0vKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NDQxCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1MTgKLSAgKiAKLS0gKiAgICAgQF9lcnJvcnMKLS0gKiAgICAgZGVmIGxvYWRfY29uZmln KHNlbGYsIGZpbGVuYW1lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgIiIiV3JhcHM6IG1wdl9sb2FkX2NvbmZpZ19maWxlIiIiCi0tICogICAgICAgICBhc3NlcnQg c2VsZi5fY3R4Ci0rICogICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3ZhbHVlKHNlbGYsIG1wdl9ub2Rl IG5vZGUpOgotKyAqICAgICAgICAgaWYgbm9kZS5mb3JtYXQgaW4gKE1QVl9GT1JNQVRfTk9ERV9B UlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOgotKyAqICAg ICAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlLnUubGlzdC52YWx1ZXNb aV0pCi0gICovCi0rICAgIGJyZWFrOwotKyAgICBjYXNlIE1QVl9GT1JNQVRfU1RSSU5HOgotIAot LS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOWxvYWRfY29uZmlnKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYsIFB5T2JqZWN0ICpfX3B5eF92X2ZpbGVuYW1lKTsgLypwcm90byovCi0tc3RhdGljIGNoYXIg X19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84bG9hZF9jb25maWdbXSA9 ICJXcmFwczogbXB2X2xvYWRfY29uZmlnX2ZpbGUiOwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzlsb2FkX2NvbmZpZyhQeU9iamVjdCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9maWxlbmFtZSkgewotLSAgUHlPYmplY3Qg Kl9fcHl4X3IgPSAwOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJsb2FkX2NvbmZpZyAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4 X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGxvYWRfY29uZmln KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4 X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X2ZpbGVuYW1lKSk7Ci0tCi0tICAvKiBmdW5j dGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAg cmV0dXJuIF9fcHl4X3I7Ci0tfQotLQotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhsb2FkX2NvbmZpZyhzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X2ZpbGVuYW1lKSB7Ci0tICBjaGFyIGNvbnN0ICpfX3B5eF92X19maWxlbmFtZTsKLSsgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyOAotKyAqICAgICAgICAgICAgIGZy ZWUobm9kZS51Lmxpc3QpCi0rICogICAgICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JN QVRfU1RSSU5HOgotKyAqICAgICAgICAgICAgIGZyZWUobm9kZS51LnN0cmluZykgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIAotKyAqICAgICBkZWYgY29tbWFuZChzZWxmLCAqY21k bGlzdCwgYXN5bmNocm9ub3VzPUZhbHNlLCBkYXRhPU5vbmUpOgotKyAqLwotKyAgICBmcmVlKF9f cHl4X3Zfbm9kZS51LnN0cmluZyk7Ci0rCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1MjcKLSsgKiAgICAgICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC5rZXlzKQot KyAqICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3QpCi0rICogICAgICAgICBlbGlmIG5vZGUu Zm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICAgICAgZnJlZShub2RlLnUuc3RyaW5nKQotKyAqIAotKyAqLwotKyAgICBi cmVhazsKLSsgICAgZGVmYXVsdDogYnJlYWs7Ci0rICB9Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTE3Ci0rICogICAgICAgICByZXR1cm4gbm9kZQotKyAqIAotKyAq ICAgICBjZGVmIF9mcmVlX25hdGl2ZV92YWx1ZShzZWxmLCBtcHZfbm9kZSBub2RlKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgaWYgbm9kZS5mb3JtYXQgaW4gKE1Q Vl9GT1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6Ci0rICogICAgICAgICAg ICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKLSsgKi8KLSsKLSsgIC8qIGZ1bmN0 aW9uIGV4aXQgY29kZSAqLwotKyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9O b25lKTsKLSsgIGdvdG8gX19weXhfTDA7Ci0rICBfX3B5eF9MMV9lcnJvcjo7Ci0rICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNCk7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJz Lm1wdi5Db250ZXh0Ll9mcmVlX25hdGl2ZV92YWx1ZSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xp bmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19weXhfciA9IDA7Ci0rICBfX3B5eF9MMDo7Ci0r ICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOwotKyAgcmV0dXJuIF9fcHl4X3I7Ci0rfQotKwotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo1MzAKLSsgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5zdHJpbmcpCi0rICog Ci0rICogICAgIGRlZiBjb21tYW5kKHNlbGYsICpjbWRsaXN0LCBhc3luY2hyb25vdXM9RmFsc2Us IGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICIi IlNlbmQgYSBjb21tYW5kIHRvIG1wdi4KLSsgKiAKLSsgKi8KLSsKLSsvKiBQeXRob24gd3JhcHBl ciAqLwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0Xzljb21tYW5kKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9h cmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLwotK3N0YXRpYyBjaGFyIF9fcHl4 X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmRbXSA9ICJTZW5kIGEg Y29tbWFuZCB0byBtcHYuXG5cbiAgICAgICAgTm9uLWFzeW5jIHN1Y2Nlc3MgcmV0dXJucyB0aGUg Y29tbWFuZCdzIHJlc3BvbnNlIGRhdGEsIG90aGVyd2lzZSBOb25lXG5cbiAgICAgICAgQXJndW1l bnRzOlxuICAgICAgICBBY2NlcHRzIHBhcmFtZXRlcnMgYXMgYXJnc1xuXG4gICAgICAgIEtleXdv cmQgQXJndW1lbnRzOlxuICAgICAgICBhc3luY2hyb25vdXM6IFRydWUgd2lsbCByZXR1cm4gcmln aHQgYXdheSwgc3RhdHVzIGNvbWVzIGluIGFzIE1QVl9FVkVOVF9DT01NQU5EX1JFUExZXG4gICAg ICAgIGRhdGE6IE9ubHkgdmFsaWQgaWYgYXN5bmMsIGdldHMgc2VudCBiYWNrIGFzIHJlcGx5X3Vz ZXJkYXRhIGluIHRoZSBFdmVudFxuXG4gICAgICAgIFdyYXBzOiBtcHZfY29tbWFuZF9ub2RlIGFu ZCBtcHZfY29tbWFuZF9ub2RlX2FzeW5jXG4gICAgICAgICI7Ci0rc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOWNvbW1hbmQoUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2Rz KSB7Ci0rICBQeU9iamVjdCAqX19weXhfdl9hc3luY2hyb25vdXMgPSAwOwotKyAgUHlPYmplY3Qg Kl9fcHl4X3ZfZGF0YSA9IDA7Ci0rICBQeU9iamVjdCAqX19weXhfdl9jbWRsaXN0ID0gMDsKLSsg IGludCBfX3B5eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOwotKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAw OwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJjb21tYW5kICh3cmFwcGVyKSIsIDApOwotKyAgaWYgKFB5VHVwbGVfR0VUX1NJWkUo X19weXhfYXJncykgPiAwKSB7Ci0rICAgIF9fcHl4X3ZfY21kbGlzdCA9IFB5VHVwbGVfR2V0U2xp Y2UoX19weXhfYXJncywgMCwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7Ci0rICAgIGlm ICh1bmxpa2VseSghX19weXhfdl9jbWRsaXN0KSkgewotKyAgICAgIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOwotKyAgICAgIHJldHVybiBOVUxMOwotKyAgICB9Ci0rICAgIF9fUHl4X0dP VFJFRihfX3B5eF92X2NtZGxpc3QpOwotKyAgfSBlbHNlIHsKLSsgICAgX19weXhfdl9jbWRsaXN0 ID0gX19weXhfZW1wdHlfdHVwbGU7IF9fUHl4X0lOQ1JFRihfX3B5eF9lbXB0eV90dXBsZSk7Ci0r ICB9Ci0rICB7Ci0rICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsm X19weXhfbl9zX2FzeW5jaHJvbm91cywmX19weXhfbl9zX2RhdGEsMH07Ci0rICAgIFB5T2JqZWN0 KiB2YWx1ZXNbMl0gPSB7MCwwfTsKLSsgICAgdmFsdWVzWzBdID0gKChQeU9iamVjdCAqKVB5X0Zh bHNlKTsKLSsgICAgdmFsdWVzWzFdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOwotKyAgICBpZiAo dW5saWtlbHkoX19weXhfa3dkcykpIHsKLSsgICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7Ci0rICAg ICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cyk7Ci0rICAgICAgc3dpdGNoIChwb3NfYXJncykgewotKyAgICAgICAgZGVmYXVsdDoKLSsgICAg ICAgIGNhc2UgIDA6IGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBrd19hcmdzID0gUHlEaWN0X1Np emUoX19weXhfa3dkcyk7Ci0rICAgICAgaWYgKGt3X2FyZ3MgPiAwICYmIGxpa2VseShrd19hcmdz IDw9IDIpKSB7Ci0rICAgICAgICBQeV9zc2l6ZV90IGluZGV4OwotKyAgICAgICAgZm9yIChpbmRl eCA9IDA7IGluZGV4IDwgMiAmJiBrd19hcmdzID4gMDsgaW5kZXgrKykgewotKyAgICAgICAgICBQ eU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCAqX19w eXhfcHlhcmduYW1lc1tpbmRleF0pOwotKyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzW2lu ZGV4XSA9IHZhbHVlOyBrd19hcmdzLS07IH0KLSsgICAgICAgIH0KLSsgICAgICB9Ci0rICAgICAg aWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewotKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4 X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2 YWx1ZXMsIDAsICJjb21tYW5kIikgPCAwKSkgX19QWVhfRVJSKDAsIDUzMCwgX19weXhfTDNfZXJy b3IpCi0rICAgICAgfQotKyAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cykgPCAwKSB7Ci0rICAgICAgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLSsgICAgfSBl bHNlIHsKLSsgICAgfQotKyAgICBfX3B5eF92X2FzeW5jaHJvbm91cyA9IHZhbHVlc1swXTsKLSsg ICAgX19weXhfdl9kYXRhID0gdmFsdWVzWzFdOwotKyAgfQotKyAgZ290byBfX3B5eF9MNF9hcmd1 bWVudF91bnBhY2tpbmdfZG9uZTsKLSsgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKLSsgIF9f UHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJjb21tYW5kIiwgMCwgMCwgMCwgUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA1MzAsIF9fcHl4X0wzX2Vycm9yKQotKyAg X19weXhfTDNfZXJyb3I6OwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3ZfY21kbGlzdCk7IF9fcHl4 X3ZfY21kbGlzdCA9IDA7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5Db250ZXh0LmNvbW1hbmQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2Zp bGVuYW1lKTsKLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIE5V TEw7Ci0rICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7Ci0rICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiks IF9fcHl4X3ZfYXN5bmNocm9ub3VzLCBfX3B5eF92X2RhdGEsIF9fcHl4X3ZfY21kbGlzdCk7Ci0r Ci0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdl9j bWRsaXN0KTsKLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIF9f cHl4X3I7Ci0rfQotKwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfYXN5bmNocm9u b3VzLCBQeU9iamVjdCAqX19weXhfdl9kYXRhLCBQeU9iamVjdCAqX19weXhfdl9jbWRsaXN0KSB7 Ci0rICBzdHJ1Y3QgbXB2X25vZGUgX19weXhfdl9ub2RlOwotKyAgc3RydWN0IG1wdl9ub2RlIF9f cHl4X3Zfbm9kZXJlc3VsdDsKLSAgIGludCBfX3B5eF92X2VycjsKLSsgIHVpbnQ2NF90IF9fcHl4 X3ZfZGF0YV9pZDsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X3Jlc3VsdCA9IE5VTEw7Ci0rICBQeU9i amVjdCAqX19weXhfdl91c2VyZGF0YXMgPSBOVUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3IgPSBO VUxMOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSAgIFB5T2JqZWN0ICpfX3B5eF90 XzEgPSBOVUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0gICBQeU9iamVjdCAq X19weXhfdF8zID0gTlVMTDsKLS0gIGNoYXIgY29uc3QgKl9fcHl4X3RfNDsKLSsgIHVpbnQ2NF90 IF9fcHl4X3RfNDsKLSsgIGludCBfX3B5eF90XzU7Ci0rICBpbnQgX19weXhfdF82OwotKyAgaW50 IF9fcHl4X3RfNzsKLSsgIGludCBfX3B5eF90Xzg7Ci0rICBjaGFyIGNvbnN0ICpfX3B5eF90Xzk7 Ci0rICBQeU9iamVjdCAqX19weXhfdF8xMCA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8x MSA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8xMiA9IE5VTEw7Ci0rICBQeU9iamVjdCAq X19weXhfdF8xMyA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8xNCA9IE5VTEw7Ci0rICBQ eU9iamVjdCAqX19weXhfdF8xNSA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8xNiA9IE5V TEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8xNyA9IE5VTEw7Ci0rICBjaGFyIGNvbnN0ICpfX3B5 eF90XzE4OwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFyICpfX3B5eF9m aWxlbmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgibG9hZF9jb25maWciLCAwKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5 eF92X2ZpbGVuYW1lKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjb21tYW5kIiwg MCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQzCi0tICogICAg IGRlZiBsb2FkX2NvbmZpZyhzZWxmLCBmaWxlbmFtZSk6Ci0tICogICAgICAgICAiIiJXcmFwczog bXB2X2xvYWRfY29uZmlnX2ZpbGUiIiIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1NDQKLSsgKiAgICAgICAgIFdyYXBzOiBtcHZfY29tbWFuZF9ub2RlIGFuZCBtcHZfY29t bWFuZF9ub2RlX2FzeW5jCi0rICogICAgICAgICAiIiIKLSAgKiAgICAgICAgIGFzc2VydCBzZWxm Ll9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgZmlsZW5hbWUg PSBfc3RyZW5jKGZpbGVuYW1lKQotLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBfZmlsZW5h bWUgPSBmaWxlbmFtZQotKyAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlID0gc2VsZi5fcHJl cF9uYXRpdmVfdmFsdWUoY21kbGlzdCwgc2VsZi5fZm9ybWF0X2ZvcihjbWRsaXN0KSkKLSsgKiAg ICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZXJlc3VsdAotICAqLwotICAgI2lmbmRlZiBDWVRIT05f V0lUSE9VVF9BU1NFUlRJT05TCi0gICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsK LSAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewotICAgICAg IFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOwotLSAgICAgIF9fUFlYX0VSUigw LCA0NDMsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fUFlYX0VSUigwLCA1NDQsIF9fcHl4X0wx X2Vycm9yKQotICAgICB9Ci0gICB9Ci0gICAjZW5kaWYKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0NDQKLS0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfbG9hZF9jb25m aWdfZmlsZSIiIgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU0NQotKyAq ICAgICAgICAgIiIiCi0gICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0tICogICAgICAgICBm aWxlbmFtZSA9IF9zdHJlbmMoZmlsZW5hbWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogX2ZpbGVuYW1lID0gZmlsZW5hbWUKLSsgKiAg ICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKGNtZGxp c3QsIHNlbGYuX2Zvcm1hdF9mb3IoY21kbGlzdCkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZXJlc3VsdAotICAqICAgICAgICAgY2Rl ZiBpbnQgZXJyCi0gICovCi0tICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwg X19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDQ0NCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0X2Zvcik7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU0NSwgX19weXhfTDFfZXJy b3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgIF9fcHl4X3RfMyA9IE5VTEw7Ci0t ICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9f cHl4X3RfMikpKSB7Ci0rICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotICAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRf U0VMRihfX3B5eF90XzIpOwotICAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKLSAgICAgICBQ eU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKLUBA IC05NjcyLDY3OSArMTAzNzMsNzI0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhsb2FkX2NvbmZpZyhzdHJ1Y3QgX19wCi0gICAgICAg X19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKLSAgICAgfQotICAgfQotLSAg X19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhf dF8yLCBfX3B5eF90XzMsIF9fcHl4X3ZfZmlsZW5hbWUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfZmlsZW5hbWUpOwotKyAgX19weXhfdF8xID0gKF9fcHl4 X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzMsIF9f cHl4X3ZfY21kbGlzdCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19w eXhfdl9jbWRsaXN0KTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ0NCwgX19weXhf TDFfZXJyb3IpCi0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NDUs IF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gIF9fUHl4X0RFQ1JFRl9TRVQoX19w eXhfdl9maWxlbmFtZSwgX19weXhfdF8xKTsKLS0gIF9fcHl4X3RfMSA9IDA7Ci0rICBfX3B5eF92 X25vZGUgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbmF0aXZlX3ZhbHVlKF9f cHl4X3Zfc2VsZiwgX19weXhfdl9jbWRsaXN0LCBfX3B5eF90XzEpOwotKyAgX19QeXhfREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDQ1Ci0tICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0tICogICAgICAg ICBmaWxlbmFtZSA9IF9zdHJlbmMoZmlsZW5hbWUpCi0tICogICAgICAgICBjZGVmIGNvbnN0IGNo YXIqIF9maWxlbmFtZSA9IGZpbGVuYW1lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NDkKLSAgKiAgICAgICAgIGNkZWYg aW50IGVycgotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAgIGNkZWYgdWludDY0 X3QgZGF0YV9pZAotKyAqICAgICAgICAgcmVzdWx0ID0gTm9uZSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICB0cnk6Ci0rICogICAgICAgICAgICAgZGF0YV9pZCA9IGlk KGRhdGEpCi0gICovCi0tICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5 eF92X2ZpbGVuYW1lKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF80KSAmJiBQeUVycl9PY2N1cnJl ZCgpKSkgX19QWVhfRVJSKDAsIDQ0NSwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF92X19maWxl bmFtZSA9IF9fcHl4X3RfNDsKLSsgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLSsgIF9fcHl4X3Zf cmVzdWx0ID0gUHlfTm9uZTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo0NDcKLS0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogX2ZpbGVuYW1lID0gZmlsZW5hbWUK LS0gKiAgICAgICAgIGNkZWYgaW50IGVycgotLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9sb2FkX2Nv bmZpZ19maWxlKHNlbGYuX2N0eCwgX2ZpbGVuYW1lKQotLSAqICAgICAgICAgcmV0dXJuIGVycgot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1MAotKyAqICAgICAgICAgY2Rl ZiB1aW50NjRfdCBkYXRhX2lkCi0rICogICAgICAgICByZXN1bHQgPSBOb25lCi0rICogICAgICAg ICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBkYXRh X2lkID0gaWQoZGF0YSkKLSsgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgotICAq LwotLSAgewotLSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgIFB5VGhyZWFkU3RhdGUg Kl9zYXZlOwotLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotLSAgICAgIF9fUHl4X0Zhc3RHSUxf UmVtZW1iZXIoKTsKLS0gICAgICAjZW5kaWYKLS0gICAgICAvKnRyeToqLyB7Ci0rICAvKnRyeToq LyB7Ci0gCi0tICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQ4Ci0t ICogICAgICAgICBjZGVmIGludCBlcnIKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0tICogICAg ICAgICAgICAgZXJyID0gbXB2X2xvYWRfY29uZmlnX2ZpbGUoc2VsZi5fY3R4LCBfZmlsZW5hbWUp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHJldHVybiBlcnIKLS0g KiAKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1MQotKyAqICAgICAg ICAgcmVzdWx0ID0gTm9uZQotKyAqICAgICAgICAgdHJ5OgotKyAqICAgICAgICAgICAgIGRhdGFf aWQgPSBpZChkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAg ICAgaWYgbm90IGFzeW5jaHJvbm91czoKLSsgKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoK LSAgKi8KLS0gICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X2xvYWRfY29uZmlnX2ZpbGUoX19weXhf dl9zZWxmLT5fY3R4LCBfX3B5eF92X19maWxlbmFtZSk7Ci0tICAgICAgfQotKyAgICBfX3B5eF90 XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5faWQsIF9fcHl4X3Zf ZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU1MSwgX19weXhf TDRfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICBfX3B5eF90XzQg PSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4 X3RfNCA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigw LCA1NTEsIF9fcHl4X0w0X2Vycm9yKQotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKLSsgICAgX19weXhfdl9kYXRhX2lkID0gX19weXhfdF80OwotIAotLSAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDcKLS0gKiAgICAgICAgIGNkZWYg Y29uc3QgY2hhciogX2ZpbGVuYW1lID0gZmlsZW5hbWUKLS0gKiAgICAgICAgIGNkZWYgaW50IGVy cgotLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgICAgIGVyciA9IG1wdl9sb2FkX2NvbmZpZ19maWxlKHNlbGYuX2N0eCwgX2Zp bGVuYW1lKQotLSAqICAgICAgICAgcmV0dXJuIGVycgotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTUyCi0rICogICAgICAgICB0cnk6Ci0rICogICAgICAgICAgICAgZGF0 YV9pZCA9IGlkKGRhdGEpCi0rICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2ls OgotKyAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZShzZWxmLl9j dHgsICZub2RlLCAmbm9kZXJlc3VsdCkKLSAgKi8KLS0gICAgICAvKmZpbmFsbHk6Ki8gewotLSAg ICAgICAgLypub3JtYWwgZXhpdDoqL3sKLSsgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3Rf SXNUcnVlKF9fcHl4X3ZfYXN5bmNocm9ub3VzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNSA8IDAp KSBfX1BZWF9FUlIoMCwgNTUyLCBfX3B5eF9MNF9lcnJvcikKLSsgICAgX19weXhfdF82ID0gKCgh X19weXhfdF81KSAhPSAwKTsKLSsgICAgaWYgKF9fcHl4X3RfNikgewotKwotKyAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTMKLSsgKiAgICAgICAgICAgICBkYXRhX2lk ID0gaWQoZGF0YSkKLSsgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgotKyAqICAg ICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0r ICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlKHNlbGYuX2N0eCwg Jm5vZGUsICZub2RlcmVzdWx0KQotKyAqICAgICAgICAgICAgICAgICB0cnk6Ci0rICovCi0rICAg ICAgewotICAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAgICAgICAgX19QeXhfRmFz dEdJTF9Gb3JnZXQoKTsKLS0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotKyAgICAgICAgICBQ eVRocmVhZFN0YXRlICpfc2F2ZTsKLSsgICAgICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0rICAg ICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLSAgICAgICAgICAgI2VuZGlmCi0tICAg ICAgICAgIGdvdG8gX19weXhfTDU7Ci0tICAgICAgICB9Ci0tICAgICAgICBfX3B5eF9MNTo7Ci0t ICAgICAgfQotLSAgfQotKyAgICAgICAgICAvKnRyeToqLyB7Ci0gCi0tICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NDQ5Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAg ICAgICAgICAgIGVyciA9IG1wdl9sb2FkX2NvbmZpZ19maWxlKHNlbGYuX2N0eCwgX2ZpbGVuYW1l KQotLSAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogCi0tICogICAgIGRlZiBfZm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6Ci0rICAgICAgICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1NAotKyAqICAgICAgICAgICAgIGlm IG5vdCBhc3luY2hyb25vdXM6Ci0rICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0rICog ICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlKHNlbGYuX2N0eCwgJm5v ZGUsICZub2RlcmVzdWx0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAg ICAgICAgICAgIHRyeToKLSsgKiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jb252ZXJ0 X25vZGVfdmFsdWUobm9kZXJlc3VsdCkgaWYgZXJyID49IDAgZWxzZSBOb25lCi0gICovCi0tICBf X1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9p bnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0 NDksIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX3B5 eF9yID0gX19weXhfdF8xOwotLSAgX19weXhfdF8xID0gMDsKLS0gIGdvdG8gX19weXhfTDA7Ci0r ICAgICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfY29tbWFuZF9ub2RlKF9fcHl4X3Zfc2VsZi0+ X2N0eCwgKCZfX3B5eF92X25vZGUpLCAoJl9fcHl4X3Zfbm9kZXJlc3VsdCkpOwotKyAgICAgICAg ICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQxCi0tICogCi0t ICogICAgIEBfZXJyb3JzCi0tICogICAgIGRlZiBsb2FkX2NvbmZpZyhzZWxmLCBmaWxlbmFtZSk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICIiIldyYXBzOiBtcHZf bG9hZF9jb25maWdfZmlsZSIiIgotLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotKyAgICAg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTUzCi0rICogICAgICAgICAg ICAgZGF0YV9pZCA9IGlkKGRhdGEpCi0rICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91 czoKLSsgKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZShz ZWxmLl9jdHgsICZub2RlLCAmbm9kZXJlc3VsdCkKLSsgKiAgICAgICAgICAgICAgICAgdHJ5Ogot ICAqLwotKyAgICAgICAgICAvKmZpbmFsbHk6Ki8gewotKyAgICAgICAgICAgIC8qbm9ybWFsIGV4 aXQ6Ki97Ci0rICAgICAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAgICAgICAgICAg IF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0rICAgICAgICAgICAgICBQeV9CTE9DS19USFJFQURT Ci0rICAgICAgICAgICAgICAjZW5kaWYKLSsgICAgICAgICAgICAgIGdvdG8gX19weXhfTDk7Ci0r ICAgICAgICAgICAgfQotKyAgICAgICAgICAgIF9fcHl4X0w5OjsKLSsgICAgICAgICAgfQotKyAg ICAgIH0KLSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19weXhfTDFfZXJyb3I6 OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzIpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5sb2FkX2NvbmZpZyIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotLSAgX19weXhfciA9IE5VTEw7Ci0tICBf X3B5eF9MMDo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfZmlsZW5hbWUpOwotLSAgX19QeXhf WEdJVkVSRUYoX19weXhfcik7Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0g IHJldHVybiBfX3B5eF9yOwotLX0KLS0KLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDUxCi0tICogICAgICAgICByZXR1cm4gZXJyCi0tICogCi0tICogICAgIGRlZiBfZm9ybWF0 X2ZvcihzZWxmLCB2YWx1ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAg ICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgotLSAqICAgICAgICAgICAgIHJl dHVybiBNUFZfRk9STUFUX1NUUklORwotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1NTUKLSsgKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAg ICAgICAgICAgICAgIGVyciA9IG1wdl9jb21tYW5kX25vZGUoc2VsZi5fY3R4LCAmbm9kZSwgJm5v ZGVyZXN1bHQpCi0rICogICAgICAgICAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NvbnZlcnRfbm9kZV92 YWx1ZShub2RlcmVzdWx0KSBpZiBlcnIgPj0gMCBlbHNlIE5vbmUKLSsgKiAgICAgICAgICAgICAg ICAgZmluYWxseToKLSAgKi8KLSsgICAgICAvKnRyeToqLyB7Ci0gCi0tLyogUHl0aG9uIHdyYXBw ZXIgKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8xMV9mb3JtYXRfZm9yKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X3ZhbHVlKTsgLypwcm90byovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTFfZm9ybWF0X2ZvcihQeU9iamVjdCAqX19weXhf dl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgewotLSAgUHlPYmplY3QgKl9fcHl4X3Ig PSAwOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfZm9ybWF0X2ZvciAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBfZm9ybWF0X2ZvcigoKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYp LCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1ZSkpOwotLQotLSAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCi0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5 eF9yOwotLX0KLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8xMF9mb3JtYXRfZm9yKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfdl92YWx1ZSkgewotLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotLSAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIGludCBfX3B5eF90XzE7Ci0tICBpbnQgX19weXhfdF8y OwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0tICBpbnQgX19weXhfdF80OwotLSAg aW50IF9fcHl4X2xpbmVubyA9IDA7Ci0tICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5V TEw7Ci0tICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX2Zvcm1hdF9mb3IiLCAwKTsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0NTIKLS0gKiAKLS0gKiAgICAgZGVmIF9mb3JtYXRfZm9yKHNlbGYsIHZhbHVlKToK LS0gKiAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfU1RS SU5HCi0tICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOgotKyAgICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1NgotKyAqICAgICAgICAgICAgICAg ICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZShzZWxmLl9jdHgsICZub2RlLCAmbm9kZXJlc3Vs dCkKLSsgKiAgICAgICAgICAgICAgICAgdHJ5OgotKyAqICAgICAgICAgICAgICAgICAgICAgcmVz dWx0ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlcmVzdWx0KSBpZiBlcnIgPj0gMCBlbHNlIE5v bmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgICAgICBmaW5h bGx5OgotKyAqICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKLSAgKi8KLS0gIF9fcHl4 X3RfMSA9IF9fUHl4X1B5QmFzZVN0cmluZ19DaGVjayhfX3B5eF92X3ZhbHVlKTsgCi0tICBfX3B5 eF90XzIgPSAoX19weXhfdF8xICE9IDApOwotLSAgaWYgKF9fcHl4X3RfMikgewotKyAgICAgICAg aWYgKCgoX19weXhfdl9lcnIgPj0gMCkgIT0gMCkpIHsKLSsgICAgICAgICAgX19weXhfdF8yID0g X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShfX3B5eF92 X25vZGVyZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1NTYs IF9fcHl4X0wxMV9lcnJvcikKLSsgICAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0r ICAgICAgICAgIF9fcHl4X3RfMSA9IF9fcHl4X3RfMjsKLSsgICAgICAgICAgX19weXhfdF8yID0g MDsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsK LSsgICAgICAgICAgX19weXhfdF8xID0gUHlfTm9uZTsKLSsgICAgICAgIH0KLSsgICAgICAgIF9f UHl4X0RFQ1JFRl9TRVQoX19weXhfdl9yZXN1bHQsIF9fcHl4X3RfMSk7Ci0rICAgICAgICBfX3B5 eF90XzEgPSAwOwotKyAgICAgIH0KLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ1MwotLSAqICAgICBkZWYgX2Zvcm1hdF9mb3Ioc2VsZiwgdmFsdWUpOgotLSAqICAg ICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6Ci0tICogICAgICAgICAgICAg cmV0dXJuIE1QVl9GT1JNQVRfU1RSSU5HICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCk6Ci0tICogICAgICAgICAgICAg cmV0dXJuIE1QVl9GT1JNQVRfRkxBRwotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1NTgKLSsgKiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jb252ZXJ0X25v ZGVfdmFsdWUobm9kZXJlc3VsdCkgaWYgZXJyID49IDAgZWxzZSBOb25lCi0rICogICAgICAgICAg ICAgICAgIGZpbmFsbHk6Ci0rICogICAgICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgICAgICAgICAgbXB2 X2ZyZWVfbm9kZV9jb250ZW50cygmbm9kZXJlc3VsdCkKLSsgKiAgICAgICAgICAgICBlbHNlOgot ICAqLwotLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICBfX3B5eF90XzMgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9TVFJJTkcpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NTMsIF9fcHl4X0wxX2Vycm9yKQotLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gICAgX19weXhfciA9IF9fcHl4X3RfMzsKLS0g ICAgX19weXhfdF8zID0gMDsKLS0gICAgZ290byBfX3B5eF9MMDsKLSsgICAgICAvKmZpbmFsbHk6 Ki8gewotKyAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKLSsgICAgICAgICAgewotKyAgICAgICAg ICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0rICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlICpf c2F2ZTsKLSsgICAgICAgICAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotKyAgICAgICAgICAgICAg X19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwotKyAgICAgICAgICAgICAgI2VuZGlmCi0rICAgICAg ICAgICAgICAvKnRyeToqLyB7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0NTIKLS0gKiAKLS0gKiAgICAgZGVmIF9mb3JtYXRfZm9yKHNlbGYsIHZhbHVlKToKLS0g KiAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfU1RSSU5H Ci0tICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOgotKyAgICAgICAgICAg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU5Ci0rICogICAgICAgICAg ICAgICAgIGZpbmFsbHk6Ci0rICogICAgICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotKyAq ICAgICAgICAgICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoJm5vZGVyZXN1 bHQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBlbHNlOgot KyAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChk YXRhX2lkLCBOb25lKQotICAqLwotLSAgfQotKyAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2Rl X2NvbnRlbnRzKCgmX19weXhfdl9ub2RlcmVzdWx0KSk7Ci0rICAgICAgICAgICAgICB9Ci0gCi0t ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDU0Ci0tICogICAgICAgICBpZiBp c2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKLS0gKiAgICAgICAgICAgICByZXR1cm4gTVBW X0ZPUk1BVF9TVFJJTkcKLS0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICByZXR1cm4gTVBW X0ZPUk1BVF9GTEFHCi0tICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0r ICAgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU4Ci0rICog ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVyZXN1 bHQpIGlmIGVyciA+PSAwIGVsc2UgTm9uZQotKyAqICAgICAgICAgICAgICAgICBmaW5hbGx5Ogot KyAqICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICAgICAgICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVu dHMoJm5vZGVyZXN1bHQpCi0rICogICAgICAgICAgICAgZWxzZToKLSAgKi8KLS0gIF9fcHl4X3Rf MyA9ICgoUHlPYmplY3QqKSZQeUJvb2xfVHlwZSk7Ci0tICBfX1B5eF9JTkNSRUYoX19weXhfdF8z KTsKLS0gIF9fcHl4X3RfMiA9IFB5T2JqZWN0X0lzSW5zdGFuY2UoX19weXhfdl92YWx1ZSwgX19w eXhfdF8zKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIo MCwgNDU0LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5 eF90XzMgPSAwOwotLSAgX19weXhfdF8xID0gKF9fcHl4X3RfMiAhPSAwKTsKLS0gIGlmIChfX3B5 eF90XzEpIHsKLSsgICAgICAgICAgICAgIC8qZmluYWxseToqLyB7Ci0rICAgICAgICAgICAgICAg IC8qbm9ybWFsIGV4aXQ6Ki97Ci0rICAgICAgICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFE Ci0rICAgICAgICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKLSsgICAgICAgICAg ICAgICAgICBQeV9CTE9DS19USFJFQURTCi0rICAgICAgICAgICAgICAgICAgI2VuZGlmCi0rICAg ICAgICAgICAgICAgICAgZ290byBfX3B5eF9MMTU7Ci0rICAgICAgICAgICAgICAgIH0KLSsgICAg ICAgICAgICAgICAgX19weXhfTDE1OjsKLSsgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgfQot KyAgICAgICAgICBnb3RvIF9fcHl4X0wxMjsKLSsgICAgICAgIH0KLSsgICAgICAgIF9fcHl4X0wx MV9lcnJvcjo7Ci0rICAgICAgICAvKmV4Y2VwdGlvbiBleGl0OiovewotKyAgICAgICAgICBfX1B5 eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKLSsgICAgICAgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9h c3NpZ24KLSsgICAgICAgICAgX19weXhfdF8xMCA9IDA7IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90 XzEyID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3RfMTQgPSAwOyBfX3B5eF90XzE1ID0gMDsK LSsgICAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAg ICAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0rICAgICAg ICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSsgICAgICAgICAg aWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgX19QeXhfRXhjZXB0aW9uU3dhcCgmX19weXhfdF8x MywgJl9fcHl4X3RfMTQsICZfX3B5eF90XzE1KTsKLSsgICAgICAgICAgaWYgKChQWV9NQUpPUl9W RVJTSU9OIDwgMykgfHwgdW5saWtlbHkoX19QeXhfR2V0RXhjZXB0aW9uKCZfX3B5eF90XzEwLCAm X19weXhfdF8xMSwgJl9fcHl4X3RfMTIpIDwgMCkpIF9fUHl4X0VyckZldGNoKCZfX3B5eF90XzEw LCAmX19weXhfdF8xMSwgJl9fcHl4X3RfMTIpOwotKyAgICAgICAgICBfX1B5eF9YR09UUkVGKF9f cHl4X3RfMTApOwotKyAgICAgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTEpOwotKyAgICAg ICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTIpOwotKyAgICAgICAgICBfX1B5eF9YR09UUkVG KF9fcHl4X3RfMTMpOwotKyAgICAgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTQpOwotKyAg ICAgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTUpOwotKyAgICAgICAgICBfX3B5eF90Xzcg PSBfX3B5eF9saW5lbm87IF9fcHl4X3RfOCA9IF9fcHl4X2NsaW5lbm87IF9fcHl4X3RfOSA9IF9f cHl4X2ZpbGVuYW1lOwotKyAgICAgICAgICB7Ci0rICAgICAgICAgICAgewotKyAgICAgICAgICAg ICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAq X3NhdmU7Ci0rICAgICAgICAgICAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotKyAgICAgICAgICAg ICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0rICAgICAgICAgICAgICAgICNlbmRpZgot KyAgICAgICAgICAgICAgICAvKnRyeToqLyB7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0NTUKLS0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJ TkcKLS0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCk6Ci0tICogICAgICAg ICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRkxBRyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0tICogICAgICAgICAg ICAgcmV0dXJuIE1QVl9GT1JNQVRfSU5UNjQKLSsgICAgICAgICAgICAgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU5Ci0rICogICAgICAgICAgICAgICAgIGZpbmFsbHk6 Ci0rICogICAgICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotKyAqICAgICAgICAgICAgICAg ICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoJm5vZGVyZXN1bHQpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBlbHNlOgotKyAqICAgICAgICAgICAg ICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQot ICAqLwotLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICBfX3B5eF90XzMgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9GTEFHKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDU1LCBfX3B5eF9MMV9lcnJvcikKLS0gICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7Ci0tICAg IF9fcHl4X3RfMyA9IDA7Ci0tICAgIGdvdG8gX19weXhfTDA7Ci0rICAgICAgICAgICAgICAgICAg bXB2X2ZyZWVfbm9kZV9jb250ZW50cygoJl9fcHl4X3Zfbm9kZXJlc3VsdCkpOwotKyAgICAgICAg ICAgICAgICB9Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTQK LS0gKiAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgotLSAqICAgICAg ICAgICAgIHJldHVybiBNUFZfRk9STUFUX1NUUklORwotLSAqICAgICAgICAgZWxpZiBpc2luc3Rh bmNlKHZhbHVlLCBib29sKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgICAgIHJldHVybiBNUFZfRk9STUFUX0ZMQUcKLS0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5j ZSh2YWx1ZSwgaW50KToKLSsgICAgICAgICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjU1OAotKyAqICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NvbnZlcnRf bm9kZV92YWx1ZShub2RlcmVzdWx0KSBpZiBlcnIgPj0gMCBlbHNlIE5vbmUKLSsgKiAgICAgICAg ICAgICAgICAgZmluYWxseToKLSsgKiAgICAgICAgICAgICAgICAgICAgIHdpdGggbm9naWw6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICAgICAgICAgICAgICBt cHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2RlcmVzdWx0KQotKyAqICAgICAgICAgICAgIGVsc2U6 Ci0gICovCi0tICB9Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDU2 Ci0tICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOgotLSAqICAgICAgICAg ICAgIHJldHVybiBNUFZfRk9STUFUX0ZMQUcKLS0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2 YWx1ZSwgaW50KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAg IHJldHVybiBNUFZfRk9STUFUX0lOVDY0Ci0tICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFs dWUsIGZsb2F0KToKLS0gKi8KLS0gIF9fcHl4X3RfMSA9IFB5SW50X0NoZWNrKF9fcHl4X3ZfdmFs dWUpOyAKLS0gIF9fcHl4X3RfMiA9IChfX3B5eF90XzEgIT0gMCk7Ci0tICBpZiAoX19weXhfdF8y KSB7Ci0rICAgICAgICAgICAgICAgIC8qZmluYWxseToqLyB7Ci0rICAgICAgICAgICAgICAgICAg Lypub3JtYWwgZXhpdDoqL3sKLSsgICAgICAgICAgICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVB RAotKyAgICAgICAgICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKLSsgICAgICAg ICAgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSsgICAgICAgICAgICAgICAgICAgICNlbmRp ZgotKyAgICAgICAgICAgICAgICAgICAgZ290byBfX3B5eF9MMjA7Ci0rICAgICAgICAgICAgICAg ICAgfQotKyAgICAgICAgICAgICAgICAgIF9fcHl4X0wyMDo7Ci0rICAgICAgICAgICAgICAgIH0K LSsgICAgICAgICAgICB9Ci0rICAgICAgICAgIH0KLSsgICAgICAgICAgaWYgKFBZX01BSk9SX1ZF UlNJT04gPj0gMykgewotKyAgICAgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTMpOwot KyAgICAgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTQpOwotKyAgICAgICAgICAgIF9f UHl4X1hHSVZFUkVGKF9fcHl4X3RfMTUpOwotKyAgICAgICAgICAgIF9fUHl4X0V4Y2VwdGlvblJl c2V0KF9fcHl4X3RfMTMsIF9fcHl4X3RfMTQsIF9fcHl4X3RfMTUpOwotKyAgICAgICAgICB9Ci0r ICAgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTApOwotKyAgICAgICAgICBfX1B5eF9Y R0lWRVJFRihfX3B5eF90XzExKTsKLSsgICAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8x Mik7Ci0rICAgICAgICAgIF9fUHl4X0VyclJlc3RvcmUoX19weXhfdF8xMCwgX19weXhfdF8xMSwg X19weXhfdF8xMik7Ci0rICAgICAgICAgIF9fcHl4X3RfMTAgPSAwOyBfX3B5eF90XzExID0gMDsg X19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTMgPSAwOyBfX3B5eF90XzE0ID0gMDsgX19weXhfdF8x NSA9IDA7Ci0rICAgICAgICAgIF9fcHl4X2xpbmVubyA9IF9fcHl4X3RfNzsgX19weXhfY2xpbmVu byA9IF9fcHl4X3RfODsgX19weXhfZmlsZW5hbWUgPSBfX3B5eF90Xzk7Ci0rICAgICAgICAgIGdv dG8gX19weXhfTDRfZXJyb3I7Ci0rICAgICAgICB9Ci0rICAgICAgICBfX3B5eF9MMTI6OwotKyAg ICAgIH0KLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1NwotLSAq ICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0ZMQUcKLS0gKiAgICAgICAgIGVsaWYgaXNp bnN0YW5jZSh2YWx1ZSwgaW50KToKLS0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9J TlQ2NCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBlbGlmIGlzaW5z dGFuY2UodmFsdWUsIGZsb2F0KToKLS0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9E T1VCTEUKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTUyCi0rICog ICAgICAgICB0cnk6Ci0rICogICAgICAgICAgICAgZGF0YV9pZCA9IGlkKGRhdGEpCi0rICogICAg ICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotKyAqICAgICAgICAgICAgICAgICAg ICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZShzZWxmLl9jdHgsICZub2RlLCAmbm9kZXJlc3VsdCkK LSAgKi8KLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gICAgX19weXhfdF8zID0gX19Q eXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfSU5UNjQpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NTcsIF9fcHl4X0wxX2Vycm9yKQotLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gICAgX19weXhfciA9IF9fcHl4X3RfMzsKLS0g ICAgX19weXhfdF8zID0gMDsKLS0gICAgZ290byBfX3B5eF9MMDsKLSsgICAgICBnb3RvIF9fcHl4 X0w2OwotKyAgICB9Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 NTYKLS0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCk6Ci0tICogICAgICAg ICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRkxBRwotLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNl KHZhbHVlLCBpbnQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAg ICAgcmV0dXJuIE1QVl9GT1JNQVRfSU5UNjQKLS0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2 YWx1ZSwgZmxvYXQpOgotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTYx Ci0rICogICAgICAgICAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50cygmbm9k ZXJlc3VsdCkKLSsgKiAgICAgICAgICAgICBlbHNlOgotKyAqICAgICAgICAgICAgICAgICB1c2Vy ZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBO b25lOgotKyAqICAgICAgICAgICAgICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tkYXRhX2lkXSA9 IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCi0gICovCi0tICB9Ci0rICAgIC8qZWxz ZSovIHsKLSsgICAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4 X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA1NjEsIF9fcHl4X0w0X2Vycm9yKQotKyAgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOwotKyAgICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21f dWludDY0X3QoX19weXhfdl9kYXRhX2lkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZ WF9FUlIoMCwgNTYxLCBfX3B5eF9MNF9lcnJvcikKLSsgICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8zKTsKLSsgICAgICBfX3B5eF90XzE2ID0gTlVMTDsKLSsgICAgICBfX3B5eF90XzggPSAwOwot KyAgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNr KF9fcHl4X3RfMikpKSB7Ci0rICAgICAgICBfX3B5eF90XzE2ID0gUHlNZXRob2RfR0VUX1NFTEYo X19weXhfdF8yKTsKLSsgICAgICAgIGlmIChsaWtlbHkoX19weXhfdF8xNikpIHsKLSsgICAgICAg ICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7 Ci0rICAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzE2KTsKLSsgICAgICAgICAgX19QeXhf SU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIs IGZ1bmN0aW9uKTsKLSsgICAgICAgICAgX19weXhfdF84ID0gMTsKLSsgICAgICAgIH0KLSsgICAg ICB9Ci0rICAgICAgI2lmIENZVEhPTl9GQVNUX1BZQ0FMTAotKyAgICAgIGlmIChQeUZ1bmN0aW9u X0NoZWNrKF9fcHl4X3RfMikpIHsKLSsgICAgICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0g e19fcHl4X3RfMTYsIF9fcHl4X3RfMywgUHlfTm9uZX07Ci0rICAgICAgICBfX3B5eF90XzEgPSBf X1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3Rf OCwgMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1 NjEsIF9fcHl4X0w0X2Vycm9yKQotKyAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE2KTsg X19weXhfdF8xNiA9IDA7Ci0rICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgICAg ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotKyAgICAgIH0gZWxz ZQotKyAgICAgICNlbmRpZgotKyAgICAgICNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCi0rICAgICAg aWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzIpKSB7Ci0rICAgICAgICBQ eU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzE2LCBfX3B5eF90XzMsIFB5X05vbmV9 OwotKyAgICAgICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhf dF8yLCBfX3B5eF90ZW1wKzEtX19weXhfdF84LCAyK19fcHl4X3RfOCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU2MSwgX19weXhfTDRfZXJyb3IpCi0rICAgICAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMTYpOyBfX3B5eF90XzE2ID0gMDsKLSsgICAgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7Ci0rICAgICAgfSBlbHNlCi0rICAgICAgI2VuZGlmCi0rICAgICAgewotKyAg ICAgICAgX19weXhfdF8xNyA9IFB5VHVwbGVfTmV3KDIrX19weXhfdF84KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzE3KSkgX19QWVhfRVJSKDAsIDU2MSwgX19weXhfTDRfZXJyb3IpCi0rICAgICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xNyk7Ci0rICAgICAgICBpZiAoX19weXhfdF8xNikgewot KyAgICAgICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMTYpOyBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfMTcsIDAsIF9fcHl4X3RfMTYpOyBfX3B5eF90XzE2ID0gTlVMTDsKLSsgICAgICAgIH0K LSsgICAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8zKTsKLSsgICAgICAgIFB5VHVwbGVfU0VU X0lURU0oX19weXhfdF8xNywgMCtfX3B5eF90XzgsIF9fcHl4X3RfMyk7Ci0rICAgICAgICBfX1B5 eF9JTkNSRUYoUHlfTm9uZSk7Ci0rICAgICAgICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOwotKyAg ICAgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzE3LCAxK19fcHl4X3RfOCwgUHlfTm9uZSk7 Ci0rICAgICAgICBfX3B5eF90XzMgPSAwOwotKyAgICAgICAgX19weXhfdF8xID0gX19QeXhfUHlP YmplY3RfQ2FsbChfX3B5eF90XzIsIF9fcHl4X3RfMTcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NjEsIF9fcHl4X0w0X2Vycm9yKQotKyAgICAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xNyk7 IF9fcHl4X3RfMTcgPSAwOwotKyAgICAgIH0KLSsgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKLSsgICAgICBfX3B5eF92X3VzZXJkYXRhcyA9IF9fcHl4X3RfMTsK LSsgICAgICBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ1OAotLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgotLSAq ICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0lOVDY0Ci0tICogICAgICAgICBlbGlmIGlz aW5zdGFuY2UodmFsdWUsIGZsb2F0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq ICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQotLSAqICAgICAgICAgZWxpZiBp c2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKToKLSsgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTYyCi0rICogICAgICAgICAgICAgZWxzZToKLSsgKiAgICAgICAg ICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoZGF0YV9pZCwgTm9u ZSkKLSsgKiAgICAgICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0 YXNbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQotKyAqICAgICAg ICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkKLSAgKi8KLS0gIF9fcHl4X3RfMiA9IFB5RmxvYXRf Q2hlY2soX19weXhfdl92YWx1ZSk7IAotLSAgX19weXhfdF8xID0gKF9fcHl4X3RfMiAhPSAwKTsK LS0gIGlmIChfX3B5eF90XzEpIHsKLSsgICAgICBfX3B5eF90XzYgPSAoX19weXhfdl91c2VyZGF0 YXMgPT0gUHlfTm9uZSk7Ci0rICAgICAgX19weXhfdF81ID0gKF9fcHl4X3RfNiAhPSAwKTsKLSsg ICAgICBpZiAoX19weXhfdF81KSB7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0NTkKLS0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2NAotLSAq ICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0tICogICAgICAgICAgICAg cmV0dXJuIE1QVl9GT1JNQVRfRE9VQkxFICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBsaXN0KSk6Ci0tICogICAg ICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9BUlJBWQotKyAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2MwotKyAqICAgICAgICAgICAgICAgICB1c2VyZGF0 YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQotKyAqICAgICAgICAg ICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKLSsgKiAgICAgICAgICAgICAgICAgICAgIF9y ZXBseV91c2VyZGF0YXNbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRh KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgIHVzZXJk YXRhcy5hZGQoKQotKyAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotICAqLwotLSAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9t X2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9ET1VCTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCA0NTksIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8zKTsKLS0gICAgX19weXhfciA9IF9fcHl4X3RfMzsKLS0gICAgX19weXhfdF8z ID0gMDsKLS0gICAgZ290byBfX3B5eF9MMDsKLSsgICAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2Jh bE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU2MywgX19weXhfTDRfZXJyb3IpCi0rICAgICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgICAgICAgIF9fcHl4X3RfMTcgPSBOVUxMOwotKyAg ICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVj ayhfX3B5eF90XzIpKSkgewotKyAgICAgICAgICBfX3B5eF90XzE3ID0gUHlNZXRob2RfR0VUX1NF TEYoX19weXhfdF8yKTsKLSsgICAgICAgICAgaWYgKGxpa2VseShfX3B5eF90XzE3KSkgewotKyAg ICAgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5 eF90XzIpOwotKyAgICAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzE3KTsKLSsgICAgICAg ICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAgICAgICAgICAgIF9fUHl4X0RFQ1JFRl9T RVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0rICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsgICAg ICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzE3KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhf X3B5eF90XzIsIF9fcHl4X3RfMTcsIF9fcHl4X3ZfZGF0YSkgOiBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9kYXRhKTsKLSsgICAgICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xNyk7IF9fcHl4X3RfMTcgPSAwOwotKyAgICAgICAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNTYzLCBfX3B5eF9MNF9lcnJvcikKLSsgICAgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9f cHl4X3RfMiA9IDA7Ci0rICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfU2V0SXRlbUludChfX3B5 eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2RhdGFf aWQsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAs IDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA1NjMsIF9fcHl4X0w0X2Vycm9yKQotKyAgICAgICAg X19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7Ci0rICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4 X3ZfdXNlcmRhdGFzLCBfX3B5eF90XzEpOwotKyAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0NTgKLS0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLS0gKiAg ICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2NAotLSAqICAgICAgICAgZWxpZiBpc2lu c3RhbmNlKHZhbHVlLCBmbG9hdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9ET1VCTEUKLS0gKiAgICAgICAgIGVsaWYgaXNp bnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBsaXN0KSk6Ci0rICAgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTYyCi0rICogICAgICAgICAgICAgZWxzZToKLSsgKiAgICAgICAg ICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoZGF0YV9pZCwgTm9u ZSkKLSsgKiAgICAgICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0 YXNbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQotKyAqICAgICAg ICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkKLSAgKi8KLS0gIH0KLSsgICAgICB9Ci0gCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYwCi0tICogICAgICAgICBlbGlmIGlz aW5zdGFuY2UodmFsdWUsIGZsb2F0KToKLS0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1B VF9ET1VCTEUKLS0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBsaXN0 KSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICByZXR1cm4g TVBWX0ZPUk1BVF9OT0RFX0FSUkFZCi0tICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUs IGRpY3QpOgotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjQKLSsg KiAgICAgICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6Ci0rICogICAgICAgICAgICAg ICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNl ckRhdGEoZGF0YSkKLSsgKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKLSsg KiAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1wdl9jb21tYW5kX25vZGVfYXN5bmMoc2VsZi5f Y3R4LCBkYXRhX2lkLCAmbm9kZSkKLSAgKi8KLS0gIF9fcHl4X3RfMiA9IFB5VHVwbGVfQ2hlY2so X19weXhfdl92YWx1ZSk7IAotLSAgX19weXhfdF80ID0gKF9fcHl4X3RfMiAhPSAwKTsKLS0gIGlm ICghX19weXhfdF80KSB7Ci0tICB9IGVsc2UgewotLSAgICBfX3B5eF90XzEgPSBfX3B5eF90XzQ7 Ci0tICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOwotLSAgfQotLSAgX19weXhfdF80 ID0gUHlMaXN0X0NoZWNrKF9fcHl4X3ZfdmFsdWUpOyAKLS0gIF9fcHl4X3RfMiA9IChfX3B5eF90 XzQgIT0gMCk7Ci0tICBfX3B5eF90XzEgPSBfX3B5eF90XzI7Ci0tICBfX3B5eF9MNF9ib29sX2Jp bm9wX2RvbmU6OwotLSAgX19weXhfdF8yID0gKF9fcHl4X3RfMSAhPSAwKTsKLS0gIGlmIChfX3B5 eF90XzIpIHsKLSsgICAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3NfYWRkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgNTY0LCBfX3B5eF9MNF9lcnJvcikKLSsgICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8yKTsKLSsgICAgICBfX3B5eF90XzE3ID0gTlVMTDsKLSsgICAgICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewot KyAgICAgICAgX19weXhfdF8xNyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Ci0rICAg ICAgICBpZiAobGlrZWx5KF9fcHl4X3RfMTcpKSB7Ci0rICAgICAgICAgIFB5T2JqZWN0KiBmdW5j dGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwotKyAgICAgICAgICBfX1B5 eF9JTkNSRUYoX19weXhfdF8xNyk7Ci0rICAgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7 Ci0rICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0rICAg ICAgICB9Ci0rICAgICAgfQotKyAgICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzE3KSA/IF9fUHl4 X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzE3KSA6IF9fUHl4X1B5T2Jq ZWN0X0NhbGxOb0FyZyhfX3B5eF90XzIpOwotKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8x Nyk7IF9fcHl4X3RfMTcgPSAwOwotKyAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDU2NCwgX19weXhfTDRfZXJyb3IpCi0rICAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7Ci0rICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0r ICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjEKLS0gKiAgICAgICAgICAgICByZXR1 cm4gTVBWX0ZPUk1BVF9ET1VCTEUKLS0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwg KHR1cGxlLCBsaXN0KSk6Ci0tICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9B UlJBWSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBlbGlmIGlzaW5z dGFuY2UodmFsdWUsIGRpY3QpOgotLSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05P REVfTUFQCi0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2NQotKyAq ICAgICAgICAgICAgICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tkYXRhX2lkXSA9IHVzZXJkYXRh cyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCi0rICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcy5h ZGQoKQotKyAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2Rl X2FzeW5jKHNlbGYuX2N0eCwgZGF0YV9pZCwgJm5vZGUpCi0rICogICAgICAgICBmaW5hbGx5Ogot ICAqLwotLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICBfX3B5eF90XzMgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDYxLCBfX3B5eF9MMV9lcnJvcikK LS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7 Ci0tICAgIF9fcHl4X3RfMyA9IDA7Ci0tICAgIGdvdG8gX19weXhfTDA7Ci0rICAgICAgewotKyAg ICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqX3Nh dmU7Ci0rICAgICAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotKyAgICAgICAgICBfX1B5eF9GYXN0 R0lMX1JlbWVtYmVyKCk7Ci0rICAgICAgICAgICNlbmRpZgotKyAgICAgICAgICAvKnRyeToqLyB7 Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjAKLS0gKiAgICAg ICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgotLSAqICAgICAgICAgICAgIHJldHVy biBNUFZfRk9STUFUX0RPVUJMRQotLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAo dHVwbGUsIGxpc3QpKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAg ICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfQVJSQVkKLS0gKiAgICAgICAgIGVsaWYgaXNpbnN0 YW5jZSh2YWx1ZSwgZGljdCk6Ci0rICAgICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjU2NgotKyAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkKLSsgKiAg ICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAgICAgICAgICAgICAgIGVyciA9 IG1wdl9jb21tYW5kX25vZGVfYXN5bmMoc2VsZi5fY3R4LCBkYXRhX2lkLCAmbm9kZSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgZmluYWxseToKLSsgKiAgICAgICAg ICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlKQotKyAqLwotKyAgICAgICAgICAgIF9f cHl4X3ZfZXJyID0gbXB2X2NvbW1hbmRfbm9kZV9hc3luYyhfX3B5eF92X3NlbGYtPl9jdHgsIF9f cHl4X3ZfZGF0YV9pZCwgKCZfX3B5eF92X25vZGUpKTsKLSsgICAgICAgICAgfQotKwotKyAgICAg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY1Ci0rICogICAgICAgICAg ICAgICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5 VXNlckRhdGEoZGF0YSkKLSsgKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCi0rICog ICAgICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1wdl9jb21tYW5kX25vZGVfYXN5bmMoc2Vs Zi5fY3R4LCBkYXRhX2lkLCAmbm9kZSkKLSsgKiAgICAgICAgIGZpbmFsbHk6Ci0gICovCi0rICAg ICAgICAgIC8qZmluYWxseToqLyB7Ci0rICAgICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKLSsg ICAgICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotKyAgICAgICAgICAgICAgX19QeXhfRmFz dEdJTF9Gb3JnZXQoKTsKLSsgICAgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSsgICAgICAg ICAgICAgICNlbmRpZgotKyAgICAgICAgICAgICAgZ290byBfX3B5eF9MMjQ7Ci0rICAgICAgICAg ICAgfQotKyAgICAgICAgICAgIF9fcHl4X0wyNDo7Ci0rICAgICAgICAgIH0KLSsgICAgICB9Ci0r ICAgIH0KLSsgICAgX19weXhfTDY6OwotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ2MgotLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVw bGUsIGxpc3QpKToKLS0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZ Ci0tICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9N QVAKLS0gKiAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PTkUKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1NjgKLSsgKiAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1w dl9jb21tYW5kX25vZGVfYXN5bmMoc2VsZi5fY3R4LCBkYXRhX2lkLCAmbm9kZSkKLSsgKiAgICAg ICAgIGZpbmFsbHk6Ci0rICogICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9k ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgaWYgZXJyIDwgMDoK LSsgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCi0gICovCi0tICBfX3B5eF90XzIg PSBQeURpY3RfQ2hlY2soX19weXhfdl92YWx1ZSk7IAotLSAgX19weXhfdF8xID0gKF9fcHl4X3Rf MiAhPSAwKTsKLS0gIGlmIChfX3B5eF90XzEpIHsKLSsgIC8qZmluYWxseToqLyB7Ci0rICAgIC8q bm9ybWFsIGV4aXQ6Ki97Ci0rICAgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0 cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhf dnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfbm9kZSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU2OCwgX19weXhfTDFfZXJyb3Ip Ci0rICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICAgICAgZ290byBfX3B5eF9MNTsKLSsgICAgfQot KyAgICBfX3B5eF9MNF9lcnJvcjo7Ci0rICAgIC8qZXhjZXB0aW9uIGV4aXQ6Ki97Ci0rICAgICAg X19QeXhfUHlUaHJlYWRTdGF0ZV9kZWNsYXJlCi0rICAgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9h c3NpZ24KLSsgICAgICBfX3B5eF90XzE1ID0gMDsgX19weXhfdF8xNCA9IDA7IF9fcHl4X3RfMTMg PSAwOyBfX3B5eF90XzEyID0gMDsgX19weXhfdF8xMSA9IDA7IF9fcHl4X3RfMTAgPSAwOwotKyAg ICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgICAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMTYpOyBfX3B5eF90XzE2ID0gMDsKLSsgICAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMTcpOyBfX3B5eF90XzE3ID0gMDsKLSsgICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0rICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMp OyBfX3B5eF90XzMgPSAwOwotKyAgICAgIGlmIChQWV9NQUpPUl9WRVJTSU9OID49IDMpIF9fUHl4 X0V4Y2VwdGlvblN3YXAoJl9fcHl4X3RfMTIsICZfX3B5eF90XzExLCAmX19weXhfdF8xMCk7Ci0r ICAgICAgaWYgKChQWV9NQUpPUl9WRVJTSU9OIDwgMykgfHwgdW5saWtlbHkoX19QeXhfR2V0RXhj ZXB0aW9uKCZfX3B5eF90XzE1LCAmX19weXhfdF8xNCwgJl9fcHl4X3RfMTMpIDwgMCkpIF9fUHl4 X0VyckZldGNoKCZfX3B5eF90XzE1LCAmX19weXhfdF8xNCwgJl9fcHl4X3RfMTMpOwotKyAgICAg IF9fUHl4X1hHT1RSRUYoX19weXhfdF8xNSk7Ci0rICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90 XzE0KTsKLSsgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTMpOwotKyAgICAgIF9fUHl4X1hH T1RSRUYoX19weXhfdF8xMik7Ci0rICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzExKTsKLSsg ICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTApOwotKyAgICAgIF9fcHl4X3RfOCA9IF9fcHl4 X2xpbmVubzsgX19weXhfdF83ID0gX19weXhfY2xpbmVubzsgX19weXhfdF8xOCA9IF9fcHl4X2Zp bGVuYW1lOwotKyAgICAgIHsKLSsgICAgICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9f cHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X25vZGUp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NjgsIF9fcHl4X0wyNl9l cnJvcikKLSsgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICAgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICAgICAgfQotKyAgICAgIGlmIChQ WV9NQUpPUl9WRVJTSU9OID49IDMpIHsKLSsgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Rf MTIpOwotKyAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMSk7Ci0rICAgICAgICBfX1B5 eF9YR0lWRVJFRihfX3B5eF90XzEwKTsKLSsgICAgICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9f cHl4X3RfMTIsIF9fcHl4X3RfMTEsIF9fcHl4X3RfMTApOwotKyAgICAgIH0KLSsgICAgICBfX1B5 eF9YR0lWRVJFRihfX3B5eF90XzE1KTsKLSsgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzE0 KTsKLSsgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEzKTsKLSsgICAgICBfX1B5eF9FcnJS ZXN0b3JlKF9fcHl4X3RfMTUsIF9fcHl4X3RfMTQsIF9fcHl4X3RfMTMpOwotKyAgICAgIF9fcHl4 X3RfMTUgPSAwOyBfX3B5eF90XzE0ID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3RfMTIgPSAw OyBfX3B5eF90XzExID0gMDsgX19weXhfdF8xMCA9IDA7Ci0rICAgICAgX19weXhfbGluZW5vID0g X19weXhfdF84OyBfX3B5eF9jbGluZW5vID0gX19weXhfdF83OyBfX3B5eF9maWxlbmFtZSA9IF9f cHl4X3RfMTg7Ci0rICAgICAgZ290byBfX3B5eF9MMV9lcnJvcjsKLSsgICAgICBfX3B5eF9MMjZf ZXJyb3I6OwotKyAgICAgIGlmIChQWV9NQUpPUl9WRVJTSU9OID49IDMpIHsKLSsgICAgICAgIF9f UHl4X1hHSVZFUkVGKF9fcHl4X3RfMTIpOwotKyAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhf dF8xMSk7Ci0rICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEwKTsKLSsgICAgICAgIF9f UHl4X0V4Y2VwdGlvblJlc2V0KF9fcHl4X3RfMTIsIF9fcHl4X3RfMTEsIF9fcHl4X3RfMTApOwot KyAgICAgIH0KLSsgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTUpOyBfX3B5eF90XzE1ID0g MDsKLSsgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTQpOyBfX3B5eF90XzE0ID0gMDsKLSsg ICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTMpOyBfX3B5eF90XzEzID0gMDsKLSsgICAgICBf X3B5eF90XzEyID0gMDsgX19weXhfdF8xMSA9IDA7IF9fcHl4X3RfMTAgPSAwOwotKyAgICAgIGdv dG8gX19weXhfTDFfZXJyb3I7Ci0rICAgIH0KLSsgICAgX19weXhfTDU6OwotKyAgfQotIAotLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYzCi0tICogICAgICAgICAgICAg cmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9BUlJBWQotLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNl KHZhbHVlLCBkaWN0KToKLS0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX01B UCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICByZXR1cm4gTVBWX0ZP Uk1BVF9OT05FCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY5Ci0rICog ICAgICAgICBmaW5hbGx5OgotKyAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVl KG5vZGUpCi0rICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQotKyAqICAgICAgICAgcmV0 dXJuIHJlc3VsdAotKyAqLwotKyAgX19weXhfdF81ID0gKChfX3B5eF92X2VyciA8IDApICE9IDAp OwotKyAgaWYgKHVubGlrZWx5KF9fcHl4X3RfNSkpIHsKLSsKLSsgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjU3MAotKyAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZl X3ZhbHVlKG5vZGUpCi0rICogICAgICAgICBpZiBlcnIgPCAwOgotKyAqICAgICAgICAgICAgIHJh aXNlIE1QVkVycm9yKGVycikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAg ICAgcmV0dXJuIHJlc3VsdAotICAqIAotICAqLwotLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Ip OwotLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBW X0ZPUk1BVF9OT0RFX01BUCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDQ2MywgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAg ICBfX3B5eF9yID0gX19weXhfdF8zOwotLSAgICBfX3B5eF90XzMgPSAwOwotLSAgICBnb3RvIF9f cHl4X0wwOwotKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhf bl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTcw LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9f cHl4X3RfMTcgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xNykpIF9fUFlYX0VSUigwLCA1NzAsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xNyk7Ci0rICAgIF9fcHl4X3RfMyA9IE5VTEw7Ci0rICAgIGlm IChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhf dF8yKSkpIHsKLSsgICAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIp OwotKyAgICAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkgewotKyAgICAgICAgUHlPYmplY3QqIGZ1 bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0rICAgICAgICBfX1B5 eF9JTkNSRUYoX19weXhfdF8zKTsKLSsgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0r ICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotKyAgICAgIH0K LSsgICAgfQotKyAgICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0Nh bGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdF8xNykgOiBfX1B5eF9QeU9iamVj dF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8xNyk7Ci0rICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMTcp OyBfX3B5eF90XzE3ID0gMDsKLSsgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgNTcwLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgICBfX1B5 eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKLSsgICAgX19QWVhfRVJSKDAsIDU3MCwgX19weXhfTDFfZXJyb3Ip Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjIKLS0gKiAgICAg ICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBsaXN0KSk6Ci0tICogICAgICAgICAg ICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9BUlJBWQotLSAqICAgICAgICAgZWxpZiBpc2luc3Rh bmNlKHZhbHVlLCBkaWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfTUFQCi0tICogICAgICAgICByZXR1cm4gTVBW X0ZPUk1BVF9OT05FCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjkK LSsgKiAgICAgICAgIGZpbmFsbHk6Ci0rICogICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVf dmFsdWUobm9kZSkKLSsgKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCi0rICogICAgICAg ICByZXR1cm4gcmVzdWx0Ci0gICovCi0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDY0Ci0tICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3Qp OgotLSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfTUFQCi0tICogICAgICAg ICByZXR1cm4gTVBWX0ZPUk1BVF9OT05FICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzEKLSsgKiAgICAgICAgIGlmIGVy ciA8IDA6Ci0rICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQotKyAqICAgICAgICAg cmV0dXJuIHJlc3VsdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0tICogICAg IGNkZWYgbXB2X25vZGVfbGlzdCogX3ByZXBfbm9kZV9saXN0KHNlbGYsIHZhbHVlcyk6Ci0rICog ICAgIEBfZXJyb3JzCi0gICovCi0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgX19weXhf dF8zID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfTk9ORSk7 IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ2NCwgX19weXhfTDFfZXJy b3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF90XzM7 Ci0tICBfX3B5eF90XzMgPSAwOwotKyAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfcmVzdWx0KTsKLSsg IF9fcHl4X3IgPSBfX3B5eF92X3Jlc3VsdDsKLSAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUxCi0tICogICAgICAgICByZXR1cm4gZXJy Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTMwCi0rICogICAgICAgICAg ICAgZnJlZShub2RlLnUuc3RyaW5nKQotKyAqIAotKyAqICAgICBkZWYgY29tbWFuZChzZWxmLCAq Y21kbGlzdCwgYXN5bmNocm9ub3VzPUZhbHNlLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAiIiJTZW5kIGEgY29tbWFuZCB0byBtcHYuCi0gICog Ci0tICogICAgIGRlZiBfZm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcp OgotLSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX1NUUklORwotICAqLwotIAotICAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0gICBfX3B5eF9MMV9lcnJvcjo7Ci0rICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0gICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5s aWJzLm1wdi5Db250ZXh0Ll9mb3JtYXRfZm9yIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5v LCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTYpOwotKyAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzE3KTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2LkNvbnRleHQuY29tbWFuZCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOwotICAgX19weXhfciA9IE5VTEw7Ci0gICBfX3B5eF9MMDo7Ci0rICBf X1B5eF9YREVDUkVGKF9fcHl4X3ZfcmVzdWx0KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdl91 c2VyZGF0YXMpOwotICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDY2Ci0tICogICAgICAgICByZXR1cm4gTVBWX0ZPUk1B VF9OT05FCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU3NAotKyAqIAotKyAq ICAgICBAX2Vycm9ycwotKyAqICAgICBkZWYgZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3As IGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICIi IkdldHMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgYXN5bmNocm9ub3VzbHkuCi0gICogCi0tICog ICAgIGNkZWYgbXB2X25vZGVfbGlzdCogX3ByZXBfbm9kZV9saXN0KHNlbGYsIHZhbHVlcyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9k ZQotLSAqICAgICAgICAgY2RlZiBtcHZfZm9ybWF0IGZvcm1hdAotICAqLwotIAotLXN0YXRpYyBz dHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfX3ByZXBfbm9kZV9saXN0KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWVzKSB7Ci0tICBz dHJ1Y3QgbXB2X25vZGUgX19weXhfdl9ub2RlOwotLSAgZW51bSBtcHZfZm9ybWF0IF9fcHl4X3Zf Zm9ybWF0OwotLSAgc3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X3Zfbm9kZV9saXN0OwotLSAg UHlPYmplY3QgKl9fcHl4X3ZfaSA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdl92YWx1ZSA9 IE5VTEw7Ci0tICBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfcjsKLS0gIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCi0tICBQeV9zc2l6ZV90IF9fcHl4X3RfMTsKLS0gIGludCBfX3B5eF90 XzI7Ci0tICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90 XzQgPSBOVUxMOwotLSAgUHlPYmplY3QgKigqX19weXhfdF81KShQeU9iamVjdCAqKTsKLS0gIFB5 T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7 Ci0tICBQeU9iamVjdCAqX19weXhfdF84ID0gTlVMTDsKLS0gIGVudW0gbXB2X2Zvcm1hdCBfX3B5 eF90Xzk7Ci0tICBQeV9zc2l6ZV90IF9fcHl4X3RfMTA7Ci0rLyogUHl0aG9uIHdyYXBwZXIgKi8K LStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xMWdldF9wcm9wZXJ0eV9hc3luYyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KLStzdGF0aWMgY2hh ciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5 X2FzeW5jW10gPSAiR2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBhc3luY2hyb25vdXNseS5c blxuICAgICAgICBBcmd1bWVudHM6XG4gICAgICAgIHByb3A6IFByb3BlcnR5IHRvIGdldCB0aGUg dmFsdWUgb2YuXG5cbiAgICAgICAgS2V5d29yZCBhcmd1bWVudHM6XG4gICAgICAgIGRhdGE6IFZh bHVlIHRvIGJlIHBhc3NlZCBpbnRvIHRoZSByZXBseV91c2VyZGF0YSBvZiB0aGUgcmVzcG9uc2Ug ZXZlbnQuXG4gICAgICAgIFdyYXBzOiBtcHZfZ2V0X3Byb3BlcnR5X2FzeW5jIjsKLStzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMWdldF9w cm9wZXJ0eV9hc3luYyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJn cywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X3Byb3AgPSAw OwotKyAgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSA9IDA7Ci0gICBpbnQgX19weXhfbGluZW5vID0g MDsKLSAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAgIGludCBfX3B5eF9j bGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfcHJlcF9ub2RlX2xp c3QiLCAwKTsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjkKLS0g KiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZQotLSAqICAgICAgICAgY2RlZiBtcHZfZm9ybWF0 IGZvcm1hdAotLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBub2RlX2xpc3QgPSA8bXB2 X25vZGVfbGlzdCo+bWFsbG9jKHNpemVvZihtcHZfbm9kZV9saXN0KSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgbm9kZV9saXN0Lm51bSA9IGxlbih2YWx1ZXMpCi0t ICogICAgICAgICBub2RlX2xpc3QudmFsdWVzID0gTlVMTAotLSAqLwotLSAgX19weXhfdl9ub2Rl X2xpc3QgPSAoKHN0cnVjdCBtcHZfbm9kZV9saXN0ICopbWFsbG9jKChzaXplb2Yoc3RydWN0IG1w dl9ub2RlX2xpc3QpKSkpOwotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQ3MAotLSAqICAgICAgICAgY2RlZiBtcHZfZm9ybWF0IGZvcm1hdAotLSAqICAgICAgICAgY2Rl ZiBtcHZfbm9kZV9saXN0KiBub2RlX2xpc3QgPSA8bXB2X25vZGVfbGlzdCo+bWFsbG9jKHNpemVv ZihtcHZfbm9kZV9saXN0KSkKLS0gKiAgICAgICAgIG5vZGVfbGlzdC5udW0gPSBsZW4odmFsdWVz KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBub2RlX2xpc3QudmFs dWVzID0gTlVMTAotLSAqICAgICAgICAgbm9kZV9saXN0LmtleXMgPSBOVUxMCi0tICovCi0tICBf X3B5eF90XzEgPSBQeU9iamVjdF9MZW5ndGgoX19weXhfdl92YWx1ZXMpOyBpZiAodW5saWtlbHko X19weXhfdF8xID09ICgoUHlfc3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMCwgNDcwLCBfX3B5eF9M MV9lcnJvcikKLS0gIF9fcHl4X3Zfbm9kZV9saXN0LT5udW0gPSBfX3B5eF90XzE7Ci0tCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDcxCi0tICogICAgICAgICBjZGVmIG1w dl9ub2RlX2xpc3QqIG5vZGVfbGlzdCA9IDxtcHZfbm9kZV9saXN0Kj5tYWxsb2Moc2l6ZW9mKG1w dl9ub2RlX2xpc3QpKQotLSAqICAgICAgICAgbm9kZV9saXN0Lm51bSA9IGxlbih2YWx1ZXMpCi0t ICogICAgICAgICBub2RlX2xpc3QudmFsdWVzID0gTlVMTCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogICAgICAgICBub2RlX2xpc3Qua2V5cyA9IE5VTEwKLS0gKiAgICAgICAgIGlm IG5vZGVfbGlzdC5udW06Ci0tICovCi0tICBfX3B5eF92X25vZGVfbGlzdC0+dmFsdWVzID0gTlVM TDsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzIKLS0gKiAgICAg ICAgIG5vZGVfbGlzdC5udW0gPSBsZW4odmFsdWVzKQotLSAqICAgICAgICAgbm9kZV9saXN0LnZh bHVlcyA9IE5VTEwKLS0gKiAgICAgICAgIG5vZGVfbGlzdC5rZXlzID0gTlVMTCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBpZiBub2RlX2xpc3QubnVtOgotLSAqICAg ICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxvYyhub2RlX2xpc3Qu bnVtICogc2l6ZW9mKG1wdl9ub2RlKSkKLS0gKi8KLS0gIF9fcHl4X3Zfbm9kZV9saXN0LT5rZXlz ID0gTlVMTDsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzMKLS0g KiAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSBOVUxMCi0tICogICAgICAgICBub2RlX2xpc3Qu a2V5cyA9IE5VTEwKLS0gKiAgICAgICAgIGlmIG5vZGVfbGlzdC5udW06ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBub2RlX2xpc3QudmFsdWVzID0gPG1wdl9u b2RlKj5tYWxsb2Mobm9kZV9saXN0Lm51bSAqIHNpemVvZihtcHZfbm9kZSkpCi0tICogICAgICAg ICBmb3IgaSwgdmFsdWUgaW4gZW51bWVyYXRlKHZhbHVlcyk6Ci0tICovCi0tICBfX3B5eF90XzIg PSAoX19weXhfdl9ub2RlX2xpc3QtPm51bSAhPSAwKTsKLS0gIGlmIChfX3B5eF90XzIpIHsKLS0K LS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3NAotLSAqICAgICAgICAg bm9kZV9saXN0LmtleXMgPSBOVUxMCi0tICogICAgICAgICBpZiBub2RlX2xpc3QubnVtOgotLSAq ICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxvYyhub2RlX2xp c3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOgotLSAqICAgICAg ICAgICAgIGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCi0tICovCi0tICAgIF9fcHl4 X3Zfbm9kZV9saXN0LT52YWx1ZXMgPSAoKHN0cnVjdCBtcHZfbm9kZSAqKW1hbGxvYygoX19weXhf dl9ub2RlX2xpc3QtPm51bSAqIChzaXplb2Yoc3RydWN0IG1wdl9ub2RlKSkpKSk7Ci0tCi0tICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzMKLS0gKiAgICAgICAgIG5vZGVf bGlzdC52YWx1ZXMgPSBOVUxMCi0tICogICAgICAgICBub2RlX2xpc3Qua2V5cyA9IE5VTEwKLS0g KiAgICAgICAgIGlmIG5vZGVfbGlzdC5udW06ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgICAgICAgICBub2RlX2xpc3QudmFsdWVzID0gPG1wdl9ub2RlKj5tYWxsb2Mobm9k ZV9saXN0Lm51bSAqIHNpemVvZihtcHZfbm9kZSkpCi0tICogICAgICAgICBmb3IgaSwgdmFsdWUg aW4gZW51bWVyYXRlKHZhbHVlcyk6Ci0tICovCi0tICB9Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NDc1Ci0tICogICAgICAgICBpZiBub2RlX2xpc3QubnVtOgotLSAq ICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxvYyhub2RlX2xp c3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkKLS0gKiAgICAgICAgIGZvciBpLCB2YWx1ZSBpbiBl bnVtZXJhdGUodmFsdWVzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgICAgIGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCi0tICogICAgICAgICAgICAg bm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCi0tICovCi0tICBf X1B5eF9JTkNSRUYoX19weXhfaW50XzApOwotLSAgX19weXhfdF8zID0gX19weXhfaW50XzA7Ci0t ICBpZiAobGlrZWx5KFB5TGlzdF9DaGVja0V4YWN0KF9fcHl4X3ZfdmFsdWVzKSkgfHwgUHlUdXBs ZV9DaGVja0V4YWN0KF9fcHl4X3ZfdmFsdWVzKSkgewotLSAgICBfX3B5eF90XzQgPSBfX3B5eF92 X3ZhbHVlczsgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfMSA9IDA7Ci0tICAgIF9f cHl4X3RfNSA9IE5VTEw7Ci0tICB9IGVsc2UgewotLSAgICBfX3B5eF90XzEgPSAtMTsgX19weXhf dF80ID0gUHlPYmplY3RfR2V0SXRlcihfX3B5eF92X3ZhbHVlcyk7IGlmICh1bmxpa2VseSghX19w eXhfdF80KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzQpOwotLSAgICBfX3B5eF90XzUgPSBQeV9UWVBFKF9fcHl4X3RfNCktPnRw X2l0ZXJuZXh0OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA0NzUsIF9f cHl4X0wxX2Vycm9yKQotLSAgfQotLSAgZm9yICg7OykgewotLSAgICBpZiAobGlrZWx5KCFfX3B5 eF90XzUpKSB7Ci0tICAgICAgaWYgKGxpa2VseShQeUxpc3RfQ2hlY2tFeGFjdChfX3B5eF90XzQp KSkgewotLSAgICAgICAgaWYgKF9fcHl4X3RfMSA+PSBQeUxpc3RfR0VUX1NJWkUoX19weXhfdF80 KSkgYnJlYWs7Ci0tICAgICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lU SE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMKLS0gICAgICAgIF9fcHl4X3RfNiA9IFB5TGlzdF9HRVRf SVRFTShfX3B5eF90XzQsIF9fcHl4X3RfMSk7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzYpOyBfX3B5 eF90XzErKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFf ZXJyb3IpCi0tICAgICAgICAjZWxzZQotLSAgICAgICAgX19weXhfdF82ID0gUHlTZXF1ZW5jZV9J VEVNKF9fcHl4X3RfNCwgX19weXhfdF8xKTsgX19weXhfdF8xKys7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCi0tICAgICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF82KTsKLS0gICAgICAgICNlbmRpZgotLSAgICAgIH0gZWxzZSB7Ci0t ICAgICAgICBpZiAoX19weXhfdF8xID49IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdF80KSkgYnJl YWs7Ci0tICAgICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FW T0lEX0JPUlJPV0VEX1JFRlMKLS0gICAgICAgIF9fcHl4X3RfNiA9IFB5VHVwbGVfR0VUX0lURU0o X19weXhfdF80LCBfX3B5eF90XzEpOyBfX1B5eF9JTkNSRUYoX19weXhfdF82KTsgX19weXhfdF8x Kys7IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9y KQotLSAgICAgICAgI2Vsc2UKLS0gICAgICAgIF9fcHl4X3RfNiA9IFB5U2VxdWVuY2VfSVRFTShf X3B5eF90XzQsIF9fcHl4X3RfMSk7IF9fcHl4X3RfMSsrOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NikpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQotLSAgICAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7Ci0tICAgICAgICAjZW5kaWYKLSsgIFB5T2JqZWN0ICpfX3B5eF9yID0g MDsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0rICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiZ2V0X3Byb3BlcnR5X2FzeW5jICh3cmFwcGVyKSIsIDApOwotKyAgewotKyAgICBz dGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19wcm9wLCZf X3B5eF9uX3NfZGF0YSwwfTsKLSsgICAgUHlPYmplY3QqIHZhbHVlc1syXSA9IHswLDB9OwotKyAg ICB2YWx1ZXNbMV0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7Ci0rICAgIGlmICh1bmxpa2VseShf X3B5eF9rd2RzKSkgewotKyAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKLSsgICAgICBjb25zdCBQ eV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKLSsgICAg ICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0rICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOwotKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OwotKyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9h cmdzLCAwKTsKLSsgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgIGNhc2UgIDA6 IGJyZWFrOwotKyAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsK LSAgICAgICB9Ci0tICAgIH0gZWxzZSB7Ci0tICAgICAgX19weXhfdF82ID0gX19weXhfdF81KF9f cHl4X3RfNCk7Ci0tICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSB7Ci0tICAgICAgICBQ eU9iamVjdCogZXhjX3R5cGUgPSBQeUVycl9PY2N1cnJlZCgpOwotLSAgICAgICAgaWYgKGV4Y190 eXBlKSB7Ci0tICAgICAgICAgIGlmIChsaWtlbHkoX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25N YXRjaGVzKGV4Y190eXBlLCBQeUV4Y19TdG9wSXRlcmF0aW9uKSkpIFB5RXJyX0NsZWFyKCk7Ci0t ICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCi0rICAgICAg a3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOwotKyAgICAgIHN3aXRjaCAocG9zX2Fy Z3MpIHsKLSsgICAgICAgIGNhc2UgIDA6Ci0rICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0g PSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHJvcCkpICE9 IDApKSBrd19hcmdzLS07Ci0rICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJy b3I7Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAxOgotKyAg ICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7Ci0rICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9f UHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19kYXRhKTsKLSsgICAg ICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1sxXSA9IHZhbHVlOyBrd19hcmdzLS07IH0KLSAgICAg ICAgIH0KLS0gICAgICAgIGJyZWFrOwotICAgICAgIH0KLS0gICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKLS0gICAgfQotLSAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X3ZhbHVlLCBf X3B5eF90XzYpOwotLSAgICBfX3B5eF90XzYgPSAwOwotLSAgICBfX1B5eF9JTkNSRUYoX19weXhf dF8zKTsKLS0gICAgX19QeXhfWERFQ1JFRl9TRVQoX19weXhfdl9pLCBfX3B5eF90XzMpOwotLSAg ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9BZGRPYmpDKF9fcHl4X3RfMywgX19weXhfaW50XzEs IDEsIDAsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzUsIF9f cHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNjsKLS0gICAgX19w eXhfdF82ID0gMDsKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3 NgotLSAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxvYyhu b2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkKLS0gKiAgICAgICAgIGZvciBpLCB2YWx1 ZSBpbiBlbnVtZXJhdGUodmFsdWVzKToKLS0gKiAgICAgICAgICAgICBmb3JtYXQgPSBzZWxmLl9m b3JtYXRfZm9yKHZhbHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAg ICAgICAgbm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCi0tICog ICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVlc1tpXSA9IG5vZGUKLS0gKi8KLS0gICAgX19weXhf dF83ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxm KSwgX19weXhfbl9zX2Zvcm1hdF9mb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlY X0VSUigwLCA0NzYsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83 KTsKLS0gICAgX19weXhfdF84ID0gTlVMTDsKLS0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9E UyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF83KSkpIHsKLS0gICAgICBfX3B5eF90 XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzcpOwotLSAgICAgIGlmIChsaWtlbHkoX19w eXhfdF84KSkgewotLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZV TkNUSU9OKF9fcHl4X3RfNyk7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF84KTsKLS0g ICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgICBfX1B5eF9ERUNSRUZfU0VU KF9fcHl4X3RfNywgZnVuY3Rpb24pOwotKyAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkp IHsKLSsgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19w eXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgImdldF9wcm9w ZXJ0eV9hc3luYyIpIDwgMCkpIF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4X0wzX2Vycm9yKQotKyAg ICAgIH0KLSsgICAgfSBlbHNlIHsKLSsgICAgICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19w eXhfYXJncykpIHsKLSsgICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lU RU0oX19weXhfYXJncywgMSk7Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAg ICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOwot KyAgICAgICAgYnJlYWs7Ci0rICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxl X2Vycm9yOwotICAgICAgIH0KLSAgICAgfQotLSAgICBfX3B5eF90XzYgPSAoX19weXhfdF84KSA/ IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdl92 YWx1ZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNywgX19weXhfdl92YWx1 ZSk7Ci0tICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsgX19weXhfdF84ID0gMDsKLS0gICAg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDc2LCBfX3B5eF9MMV9lcnJv cikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzcpOyBfX3B5eF90XzcgPSAwOwotLSAgICBfX3B5eF90XzkgPSAoKGVudW0gbXB2X2Zvcm1h dClfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZm9ybWF0KF9fcHl4X3RfNikpOyBpZiAodW5saWtl bHkoUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0NzYsIF9fcHl4X0wxX2Vycm9yKQot LSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0gICAgX19weXhf dl9mb3JtYXQgPSBfX3B5eF90Xzk7Ci0tCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0NzcKLS0gKiAgICAgICAgIGZvciBpLCB2YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVz KToKLS0gKiAgICAgICAgICAgICBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZhbHVlKQotLSAq ICAgICAgICAgICAgIG5vZGUgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0 KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgbm9kZV9saXN0 LnZhbHVlc1tpXSA9IG5vZGUKLS0gKiAgICAgICAgIHJldHVybiBub2RlX2xpc3QKLS0gKi8KLS0g ICAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KF9fcHl4X3Zf Zm9ybWF0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDc3LCBfX3B5 eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICAgIF9fcHl4X3Zf bm9kZSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fcHJlcF9uYXRpdmVfdmFsdWUoX19w eXhfdl9zZWxmLCBfX3B5eF92X3ZhbHVlLCBfX3B5eF90XzYpOwotLSAgICBfX1B5eF9ERUNSRUYo X19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ3OAotLSAqICAgICAgICAgICAgIGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9m b3IodmFsdWUpCi0tICogICAgICAgICAgICAgbm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVl KHZhbHVlLCBmb3JtYXQpCi0tICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVlc1tpXSA9IG5v ZGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmV0dXJuIG5vZGVf bGlzdAotLSAqIAotLSAqLwotLSAgICBfX3B5eF90XzEwID0gX19QeXhfUHlJbmRleF9Bc1NzaXpl X3QoX19weXhfdl9pKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzEwID09IChQeV9zc2l6ZV90KS0x KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ3OCwgX19weXhfTDFfZXJyb3Ip Ci0tICAgIChfX3B5eF92X25vZGVfbGlzdC0+dmFsdWVzW19fcHl4X3RfMTBdKSA9IF9fcHl4X3Zf bm9kZTsKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3NQotLSAq ICAgICAgICAgaWYgbm9kZV9saXN0Lm51bToKLS0gKiAgICAgICAgICAgICBub2RlX2xpc3QudmFs dWVzID0gPG1wdl9ub2RlKj5tYWxsb2Mobm9kZV9saXN0Lm51bSAqIHNpemVvZihtcHZfbm9kZSkp Ci0tICogICAgICAgICBmb3IgaSwgdmFsdWUgaW4gZW51bWVyYXRlKHZhbHVlcyk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBmb3JtYXQgPSBzZWxmLl9mb3Jt YXRfZm9yKHZhbHVlKQotLSAqICAgICAgICAgICAgIG5vZGUgPSBzZWxmLl9wcmVwX25hdGl2ZV92 YWx1ZSh2YWx1ZSwgZm9ybWF0KQotLSAqLwotKyAgICBfX3B5eF92X3Byb3AgPSB2YWx1ZXNbMF07 Ci0rICAgIF9fcHl4X3ZfZGF0YSA9IHZhbHVlc1sxXTsKLSAgIH0KLS0gIF9fUHl4X0RFQ1JFRihf X3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc5 Ci0tICogICAgICAgICAgICAgbm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBm b3JtYXQpCi0tICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVlc1tpXSA9IG5vZGUKLS0gKiAg ICAgICAgIHJldHVybiBub2RlX2xpc3QgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq IAotLSAqICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbWFwKHNlbGYsIG1hcCk6 Ci0tICovCi0tICBfX3B5eF9yID0gX19weXhfdl9ub2RlX2xpc3Q7Ci0tICBnb3RvIF9fcHl4X0ww OwotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2NgotLSAqICAgICAg ICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ORQotLSAqIAotLSAqICAgICBjZGVmIG1wdl9ub2RlX2xp c3QqIF9wcmVwX25vZGVfbGlzdChzZWxmLCB2YWx1ZXMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogICAgICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKLS0gKiAgICAgICAgIGNkZWYg bXB2X2Zvcm1hdCBmb3JtYXQKLS0gKi8KLSsgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNr aW5nX2RvbmU7Ci0rICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Ci0rICBfX1B5eF9SYWlzZUFy Z3R1cGxlSW52YWxpZCgiZ2V0X3Byb3BlcnR5X2FzeW5jIiwgMCwgMSwgMiwgUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4X0wzX2Vycm9yKQotKyAg X19weXhfTDNfZXJyb3I6OwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5t cHYuQ29udGV4dC5nZXRfcHJvcGVydHlfYXN5bmMiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5l bm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwot KyAgcmV0dXJuIE5VTEw7Ci0rICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7Ci0r ICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0 X3Byb3BlcnR5X2FzeW5jKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfcHJvcCwgX19weXhfdl9kYXRhKTsKLSAK LSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19weXhfTDFfZXJyb3I6OwotLSAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzMpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzYpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOwot LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOwotLSAgX19QeXhfV3JpdGVVbnJhaXNhYmxlKCJ2 aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5fcHJlcF9ub2RlX2xpc3QiLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsKLS0gIF9fcHl4X3IgPSAwOwot LSAgX19weXhfTDA6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2kpOwotLSAgX19QeXhfWERF Q1JFRihfX3B5eF92X3ZhbHVlKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwot ICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0ODEKLS0gKiAgICAgICAgIHJldHVybiBub2RlX2xpc3QKLS0gKiAKLS0gKiAgICAgY2Rl ZiBtcHZfbm9kZV9saXN0KiBfcHJlcF9ub2RlX21hcChzZWxmLCBtYXApOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjZGVmIGNoYXIqIGNrZXkKLS0gKiAgICAgICAg IGNkZWYgbXB2X25vZGVfbGlzdCogbGlzdAotLSAqLwotLQotLXN0YXRpYyBzdHJ1Y3QgbXB2X25v ZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9k ZV9tYXAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9tYXApIHsKLS0gIGNoYXIgKl9fcHl4X3ZfY2tl eTsKLS0gIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF92X2xpc3Q7Ci0tICBQeU9iamVjdCAq X19weXhfdl9rZXlzID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X2kgPSBOVUxMOwotLSAg UHlPYmplY3QgKl9fcHl4X3Zfa2V5ID0gTlVMTDsKLS0gIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpf X3B5eF9yOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2FzeW5jKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJv cCwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSkgewotKyAgdWludDY0X3QgX19weXhfdl9pZF9kYXRh OwotKyAgUHlPYmplY3QgKl9fcHl4X3ZfdXNlcmRhdGFzID0gTlVMTDsKLSsgIGNoYXIgY29uc3Qg Kl9fcHl4X3ZfcHJvcF9jOwotKyAgaW50IF9fcHl4X3ZfZXJyOwotKyAgUHlPYmplY3QgKl9fcHl4 X3IgPSBOVUxMOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSAgIFB5T2JqZWN0ICpf X3B5eF90XzEgPSBOVUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0gICBQeU9i amVjdCAqX19weXhfdF8zID0gTlVMTDsKLS0gIFB5X3NzaXplX3QgX19weXhfdF80OwotLSAgaW50 IF9fcHl4X3RfNTsKLS0gIFB5T2JqZWN0ICooKl9fcHl4X3RfNikoUHlPYmplY3QgKik7Ci0rICBQ eV9oYXNoX3QgX19weXhfdF80OwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7Ci0rICBp bnQgX19weXhfdF82OwotICAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7Ci0tICBQeU9iamVj dCAqX19weXhfdF84ID0gTlVMTDsKLS0gIGNoYXIgKl9fcHl4X3RfOTsKLS0gIFB5X3NzaXplX3Qg X19weXhfdF8xMDsKLS0gIFB5X3NzaXplX3QgX19weXhfdF8xMTsKLSsgIGludCBfX3B5eF90Xzg7 Ci0rICBpbnQgX19weXhfdF85OwotKyAgY2hhciBjb25zdCAqX19weXhfdF8xMDsKLSAgIGludCBf X3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwot ICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo Il9wcmVwX25vZGVfbWFwIiwgMCk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0 X3Byb3BlcnR5X2FzeW5jIiwgMCk7Ci0rICBfX1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODQKLS0gKiAgICAgICAgIGNk ZWYgY2hhciogY2tleQotLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBsaXN0Ci0tICog ICAgICAgICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QobWFwLnZhbHVlcygpKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBrZXlzID0gbWFwLmtleXMoKQotLSAq ICAgICAgICAgaWYgbm90IGxlbihrZXlzKToKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1ODMKLSsgKiAgICAgICAgIGRhdGE6IFZhbHVlIHRvIGJlIHBhc3NlZCBpbnRvIHRo ZSByZXBseV91c2VyZGF0YSBvZiB0aGUgcmVzcG9uc2UgZXZlbnQuCi0rICogICAgICAgICBXcmFw czogbXB2X2dldF9wcm9wZXJ0eV9hc3luYyIiIgotKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBwcm9wID0gX3N0cmVu Yyhwcm9wKQotKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhh c2goZGF0YSkKLSAgKi8KLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIo X19weXhfdl9tYXAsIF9fcHl4X25fc192YWx1ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCA0ODQsIF9fcHl4X0wxX2Vycm9yKQotKyAgI2lmbmRlZiBDWVRIT05fV0lU SE9VVF9BU1NFUlRJT05TCi0rICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKLSsg ICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewotKyAgICAgIFB5 RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOwotKyAgICAgIF9fUFlYX0VSUigwLCA1 ODMsIF9fcHl4X0wxX2Vycm9yKQotKyAgICB9Ci0rICB9Ci0rICAjZW5kaWYKLSsKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODQKLSsgKiAgICAgICAgIFdyYXBzOiBtcHZf Z2V0X3Byb3BlcnR5X2FzeW5jIiIiCi0rICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0rICog ICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRh KQotKyAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0 YSwgTm9uZSkKLSsgKi8KLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBf X3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg NTg0LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotICAgX19w eXhfdF8zID0gTlVMTDsKLS0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Ci0rICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RT ICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Ci0gICAgIF9fcHl4X3Rf MyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Ci0gICAgIGlmIChsaWtlbHkoX19weXhf dF8zKSkgewotICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElP TihfX3B5eF90XzIpOwotQEAgLTEwMzUzLDIyMyArMTEwOTksMjM0IEBAIHN0YXRpYyBzdHJ1Y3Qg bXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3By ZXBfbm9kZV9tCi0gICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsK LSAgICAgfQotICAgfQotLSAgX19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVj dF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxO b0FyZyhfX3B5eF90XzIpOwotKyAgX19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9i amVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzMsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9wcm9wKTsKLSAgIF9fUHl4 X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ4NCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODQsIF9fcHl4X0wxX2Vycm9yKQotICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhf dF8yID0gMDsKLS0gIF9fcHl4X3ZfbGlzdCA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5f cHJlcF9ub2RlX2xpc3QoX19weXhfdl9zZWxmLCBfX3B5eF90XzEpOwotLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Zf cHJvcCwgX19weXhfdF8xKTsKLSsgIF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NDg1Ci0tICogICAgICAgICBjZGVmIG1wdl9ub2RlX2xpc3Qq IGxpc3QKLS0gKiAgICAgICAgIGxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbGlzdChtYXAudmFsdWVz KCkpCi0tICogICAgICAgICBrZXlzID0gbWFwLmtleXMoKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogICAgICAgICBpZiBub3QgbGVuKGtleXMpOgotLSAqICAgICAgICAgICAgIHJl dHVybiBsaXN0Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTg1Ci0rICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0rICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9w KQotKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0 YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgdXNlcmRhdGFzID0g c2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKLSsgKiAgICAgICAgIGlmIHVz ZXJkYXRhcyBpcyBOb25lOgotICAqLwotLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cihfX3B5eF92X21hcCwgX19weXhfbl9zX2tleXMpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA0ODUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF80ID0g UHlPYmplY3RfSGFzaChfX3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF80ID09ICgo UHlfaGFzaF90KS0xKSkpIF9fUFlYX0VSUigwLCA1ODUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19w eXhfdl9pZF9kYXRhID0gKCh1aW50NjRfdClfX3B5eF90XzQpOwotKwotKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjU4NgotKyAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJv cCkKLSsgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRh dGEpCi0rICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9k YXRhLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBpZiB1 c2VyZGF0YXMgaXMgTm9uZToKLSsgKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lk X2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKLSsgKi8KLSsgIF9fcHl4 X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLT5yZXBseV91c2Vy ZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDU4NiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0g IF9fcHl4X3RfMyA9IE5VTEw7Ci0rICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2 NF90KF9fcHl4X3ZfaWRfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDAsIDU4NiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsg IF9fcHl4X3RfNSA9IE5VTEw7Ci0rICBfX3B5eF90XzYgPSAwOwotICAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLS0gICAg X19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKLS0gICAgaWYgKGxpa2Vs eShfX3B5eF90XzMpKSB7Ci0rICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfMik7Ci0rICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewotICAgICAgIFB5T2JqZWN0KiBm dW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwotLSAgICAgIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzMpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOwotICAg ICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0gICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzIsIGZ1bmN0aW9uKTsKLSsgICAgICBfX3B5eF90XzYgPSAxOwotICAgICB9Ci0gICB9Ci0t ICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfdF8yLCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7 Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0ODUsIF9fcHl4X0wxX2Vycm9yKQotLSAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCi0rICBp ZiAoUHlGdW5jdGlvbl9DaGVjayhfX3B5eF90XzIpKSB7Ci0rICAgIFB5T2JqZWN0ICpfX3B5eF90 ZW1wWzNdID0ge19fcHl4X3RfNSwgX19weXhfdF8zLCBQeV9Ob25lfTsKLSsgICAgX19weXhfdF8x ID0gX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5 eF90XzYsIDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgNTg2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBf X3B5eF90XzUgPSAwOwotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICB9IGVsc2UKLSsgICNlbmRpZgot KyAgI2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwKLSsgIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25f Q2hlY2soX19weXhfdF8yKSkgewotKyAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5 eF90XzUsIF9fcHl4X3RfMywgUHlfTm9uZX07Ci0rICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5Q0Z1 bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5 eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODYsIF9fcHl4 X0wxX2Vycm9yKQotKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7 Ci0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8zKTsgX19weXhfdF8zID0gMDsKLSsgIH0gZWxzZQotKyAgI2VuZGlmCi0rICB7Ci0rICAgIF9f cHl4X3RfNyA9IFB5VHVwbGVfTmV3KDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzcpKSBfX1BZWF9FUlIoMCwgNTg2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNyk7Ci0rICAgIGlmIChfX3B5eF90XzUpIHsKLSsgICAgICBfX1B5eF9HSVZFUkVG KF9fcHl4X3RfNSk7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCBfX3B5eF90XzUpOyBf X3B5eF90XzUgPSBOVUxMOwotKyAgICB9Ci0rICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8zKTsK LSsgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDArX19weXhfdF82LCBfX3B5eF90XzMp OwotKyAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0rICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9u ZSk7Ci0rICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfNiwgUHlfTm9u ZSk7Ci0rICAgIF9fcHl4X3RfMyA9IDA7Ci0rICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0 X0NhbGwoX19weXhfdF8yLCBfX3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA1ODYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7 Ci0rICB9Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gIF9f cHl4X3Zfa2V5cyA9IF9fcHl4X3RfMTsKLSsgIF9fcHl4X3ZfdXNlcmRhdGFzID0gX19weXhfdF8x OwotICAgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0ODYKLS0gKiAgICAgICAgIGxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbGlzdChtYXAudmFs dWVzKCkpCi0tICogICAgICAgICBrZXlzID0gbWFwLmtleXMoKQotLSAqICAgICAgICAgaWYgbm90 IGxlbihrZXlzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAg IHJldHVybiBsaXN0Ci0tICogICAgICAgICBsaXN0LmtleXMgPSA8Y2hhcioqPm1hbGxvYyhsaXN0 Lm51bSkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODcKLSsgKiAgICAg ICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCi0rICogICAg ICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQot KyAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdID0gdXNl cmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKLSsgKiAgICAgICAgIHVzZXJkYXRhcy5hZGQo KQotICAqLwotLSAgX19weXhfdF80ID0gUHlPYmplY3RfTGVuZ3RoKF9fcHl4X3Zfa2V5cyk7IGlm ICh1bmxpa2VseShfX3B5eF90XzQgPT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VSUigwLCA0 ODYsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19weXhfdF81ID0gKCghKF9fcHl4X3RfNCAhPSAwKSkg IT0gMCk7Ci0tICBpZiAoX19weXhfdF81KSB7Ci0rICBfX3B5eF90XzggPSAoX19weXhfdl91c2Vy ZGF0YXMgPT0gUHlfTm9uZSk7Ci0rICBfX3B5eF90XzkgPSAoX19weXhfdF84ICE9IDApOwotKyAg aWYgKF9fcHl4X3RfOSkgewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDg3Ci0tICogICAgICAgICBrZXlzID0gbWFwLmtleXMoKQotLSAqICAgICAgICAgaWYgbm90 IGxlbihrZXlzKToKLS0gKiAgICAgICAgICAgICByZXR1cm4gbGlzdCAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBsaXN0LmtleXMgPSA8Y2hhcioqPm1hbGxvYyhsaXN0 Lm51bSkKLS0gKiAgICAgICAgIGZvciBpLCBrZXkgaW4gZW51bWVyYXRlKGtleXMpOgotKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTg4Ci0rICogICAgICAgICB1c2VyZGF0 YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQotKyAqICAgICAgICAg aWYgdXNlcmRhdGFzIGlzIE5vbmU6Ci0rICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQotKyAqICAgICAg ICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wCi0gICovCi0tICAgIF9fcHl4X3IgPSBf X3B5eF92X2xpc3Q7Ci0tICAgIGdvdG8gX19weXhfTDA7Ci0rICAgIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU4OCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgICBfX3B5eF90XzcgPSBOVUxMOwotKyAgICBpZiAo Q1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3Rf MikpKSB7Ci0rICAgICAgX19weXhfdF83ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsK LSsgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfNykpIHsKLSsgICAgICAgIFB5T2JqZWN0KiBmdW5j dGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwotKyAgICAgICAgX19QeXhf SU5DUkVGKF9fcHl4X3RfNyk7Ci0rICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAg ICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKLSsgICAgICB9Ci0r ICAgIH0KLSsgICAgX19weXhfdF8xID0gKF9fcHl4X3RfNykgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzcsIF9fcHl4X3ZfZGF0YSkgOiBfX1B5eF9QeU9iamVj dF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9kYXRhKTsKLSsgICAgX19QeXhfWERFQ1JF RihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 Ci0rICAgIGlmICh1bmxpa2VseShfX1B5eF9TZXRJdGVtSW50KF9fcHl4X3Zfc2VsZi0+cmVwbHlf dXNlcmRhdGEsIF9fcHl4X3ZfaWRfZGF0YSwgX19weXhfdF8xLCB1aW50NjRfdCwgMCwgX19QeXhf UHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDU4OCwgX19w eXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOwotKyAgICBfX1B5eF9E RUNSRUZfU0VUKF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF90XzEpOwotKyAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQ4NgotLSAqICAgICAgICAgbGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9s aXN0KG1hcC52YWx1ZXMoKSkKLS0gKiAgICAgICAgIGtleXMgPSBtYXAua2V5cygpCi0tICogICAg ICAgICBpZiBub3QgbGVuKGtleXMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgICAgICAgICAgcmV0dXJuIGxpc3QKLS0gKiAgICAgICAgIGxpc3Qua2V5cyA9IDxjaGFyKio+ bWFsbG9jKGxpc3QubnVtKQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTg3Ci0rICogICAgICAgICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChk YXRhKQotKyAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRf ZGF0YSwgTm9uZSkKLSsgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtp ZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCi0rICogICAgICAgICB1 c2VyZGF0YXMuYWRkKCkKLSAgKi8KLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0ODgKLS0gKiAgICAgICAgIGlmIG5vdCBsZW4oa2V5cyk6Ci0tICogICAgICAg ICAgICAgcmV0dXJuIGxpc3QKLS0gKiAgICAgICAgIGxpc3Qua2V5cyA9IDxjaGFyKio+bWFsbG9j KGxpc3QubnVtKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBmb3Ig aSwga2V5IGluIGVudW1lcmF0ZShrZXlzKToKLS0gKiAgICAgICAgICAgICBrZXkgPSBfc3RyZW5j KGtleSkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODkKLSsgKiAgICAg ICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgotKyAqICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNl cmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQotKyAqICAg ICAgICAgdXNlcmRhdGFzLmFkZCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcAotKyAqICAgICAgICAgd2l0aCBu b2dpbDoKLSAgKi8KLS0gIF9fcHl4X3ZfbGlzdC0+a2V5cyA9ICgoY2hhciAqKiltYWxsb2MoX19w eXhfdl9saXN0LT5udW0pKTsKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X25fc19hZGQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA1ODksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7Ci0rICBfX3B5eF90XzcgPSBOVUxMOwotKyAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLSsgICAgX19w eXhfdF83ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKLSsgICAgaWYgKGxpa2VseShf X3B5eF90XzcpKSB7Ci0rICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZV TkNUSU9OKF9fcHl4X3RfMik7Ci0rICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNyk7Ci0rICAg ICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4 X3RfMiwgZnVuY3Rpb24pOwotKyAgICB9Ci0rICB9Ci0rICBfX3B5eF90XzEgPSAoX19weXhfdF83 KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzcpIDogX19Q eXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA1ODksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQ4OQotLSAqICAgICAgICAgICAgIHJldHVybiBsaXN0Ci0tICogICAg ICAgICBsaXN0LmtleXMgPSA8Y2hhcioqPm1hbGxvYyhsaXN0Lm51bSkKLS0gKiAgICAgICAgIGZv ciBpLCBrZXkgaW4gZW51bWVyYXRlKGtleXMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgICAgICAgICAga2V5ID0gX3N0cmVuYyhrZXkpCi0tICogICAgICAgICAgICAgY2tl eSA9IGtleQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MAotKyAqICAg ICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVw bHlVc2VyRGF0YShkYXRhKQotKyAqICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCi0rICogICAgICAg ICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAgICAgICBlcnIgPSBtcHZf Z2V0X3Byb3BlcnR5X2FzeW5jKAotICAqLwotLSAgX19QeXhfSU5DUkVGKF9fcHl4X2ludF8wKTsK LS0gIF9fcHl4X3RfMSA9IF9fcHl4X2ludF8wOwotLSAgaWYgKGxpa2VseShQeUxpc3RfQ2hlY2tF eGFjdChfX3B5eF92X2tleXMpKSB8fCBQeVR1cGxlX0NoZWNrRXhhY3QoX19weXhfdl9rZXlzKSkg ewotLSAgICBfX3B5eF90XzIgPSBfX3B5eF92X2tleXM7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzQgPSAwOwotLSAgICBfX3B5eF90XzYgPSBOVUxMOwotLSAgfSBlbHNlIHsKLS0g ICAgX19weXhfdF80ID0gLTE7IF9fcHl4X3RfMiA9IFB5T2JqZWN0X0dldEl0ZXIoX19weXhfdl9r ZXlzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9M MV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fcHl4X3RfNiA9 IFB5X1RZUEUoX19weXhfdF8yKS0+dHBfaXRlcm5leHQ7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDQ4OSwgX19weXhfTDFfZXJyb3IpCi0tICB9Ci0tICBmb3IgKDs7KSB7 Ci0tICAgIGlmIChsaWtlbHkoIV9fcHl4X3RfNikpIHsKLS0gICAgICBpZiAobGlrZWx5KFB5TGlz dF9DaGVja0V4YWN0KF9fcHl4X3RfMikpKSB7Ci0tICAgICAgICBpZiAoX19weXhfdF80ID49IFB5 TGlzdF9HRVRfU0laRShfX3B5eF90XzIpKSBicmVhazsKLS0gICAgICAgICNpZiBDWVRIT05fQVNT VU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUwotLSAgICAgICAg X19weXhfdF8zID0gUHlMaXN0X0dFVF9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF80KTsgX19QeXhf SU5DUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfNCsrOyBpZiAodW5saWtlbHkoMCA8IDApKSBfX1BZ WF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgICAgICNlbHNlCi0tICAgICAgICBf X3B5eF90XzMgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF8yLCBfX3B5eF90XzQpOyBfX3B5eF90 XzQrKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9M MV9lcnJvcikKLS0gICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgICAgICAgI2Vu ZGlmCi0tICAgICAgfSBlbHNlIHsKLS0gICAgICAgIGlmIChfX3B5eF90XzQgPj0gUHlUdXBsZV9H RVRfU0laRShfX3B5eF90XzIpKSBicmVhazsKLS0gICAgICAgICNpZiBDWVRIT05fQVNTVU1FX1NB RkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUwotLSAgICAgICAgX19weXhf dF8zID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF90XzIsIF9fcHl4X3RfNCk7IF9fUHl4X0lOQ1JF RihfX3B5eF90XzMpOyBfX3B5eF90XzQrKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJS KDAsIDQ4OSwgX19weXhfTDFfZXJyb3IpCi0tICAgICAgICAjZWxzZQotLSAgICAgICAgX19weXhf dF8zID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF80KTsgX19weXhfdF80Kys7 IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ4OSwgX19weXhfTDFfZXJy b3IpCi0tICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gICAgICAgICNlbmRpZgot LSAgICAgIH0KLS0gICAgfSBlbHNlIHsKLS0gICAgICBfX3B5eF90XzMgPSBfX3B5eF90XzYoX19w eXhfdF8yKTsKLS0gICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIHsKLS0gICAgICAgIFB5 T2JqZWN0KiBleGNfdHlwZSA9IFB5RXJyX09jY3VycmVkKCk7Ci0tICAgICAgICBpZiAoZXhjX3R5 cGUpIHsKLS0gICAgICAgICAgaWYgKGxpa2VseShfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1h dGNoZXMoZXhjX3R5cGUsIFB5RXhjX1N0b3BJdGVyYXRpb24pKSkgUHlFcnJfQ2xlYXIoKTsKLS0g ICAgICAgICAgZWxzZSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgICAg IH0KLS0gICAgICAgIGJyZWFrOwotLSAgICAgIH0KLS0gICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8zKTsKLS0gICAgfQotLSAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X2tleSwgX19weXhf dF8zKTsKLS0gICAgX19weXhfdF8zID0gMDsKLS0gICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7 Ci0tICAgIF9fUHl4X1hERUNSRUZfU0VUKF9fcHl4X3ZfaSwgX19weXhfdF8xKTsKLS0gICAgX19w eXhfdF8zID0gX19QeXhfUHlJbnRfQWRkT2JqQyhfX3B5eF90XzEsIF9fcHl4X2ludF8xLCAxLCAw LCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9M MV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOwotLSAgICBfX3B5eF90XzEgPSBfX3B5eF90XzM7Ci0tICAgIF9fcHl4X3Rf MyA9IDA7Ci0tCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTAKLS0g KiAgICAgICAgIGxpc3Qua2V5cyA9IDxjaGFyKio+bWFsbG9jKGxpc3QubnVtKQotLSAqICAgICAg ICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6Ci0tICogICAgICAgICAgICAga2V5ID0g X3N0cmVuYyhrZXkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAg ICBja2V5ID0ga2V5Ci0tICogICAgICAgICAgICAgbGlzdC5rZXlzW2ldID0gPGNoYXIqPm1hbGxv YyhsZW4oa2V5KSArIDEpCi0tICovCi0tICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF83LCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZ WF9FUlIoMCwgNDkwLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nyk7Ci0tICAgIF9fcHl4X3RfOCA9IE5VTEw7Ci0tICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhP RFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF83KSkpIHsKLS0gICAgICBfX3B5 eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzcpOwotLSAgICAgIGlmIChsaWtlbHko X19weXhfdF84KSkgewotLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VU X0ZVTkNUSU9OKF9fcHl4X3RfNyk7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF84KTsK LS0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3RfNywgZnVuY3Rpb24pOwotLSAgICAgIH0KLS0gICAgfQotLSAgICBfX3B5eF90 XzMgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzcsIF9f cHl4X3RfOCwgX19weXhfdl9rZXkpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90 XzcsIF9fcHl4X3Zfa2V5KTsKLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90 XzggPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0OTAs IF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0tICAgIF9fUHl4X0RFQ1JFRl9T RVQoX19weXhfdl9rZXksIF9fcHl4X3RfMyk7Ci0tICAgIF9fcHl4X3RfMyA9IDA7Ci0tCi0tICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTEKLS0gKiAgICAgICAgIGZvciBp LCBrZXkgaW4gZW51bWVyYXRlKGtleXMpOgotLSAqICAgICAgICAgICAgIGtleSA9IF9zdHJlbmMo a2V5KQotLSAqICAgICAgICAgICAgIGNrZXkgPSBrZXkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqICAgICAgICAgICAgIGxpc3Qua2V5c1tpXSA9IDxjaGFyKj5tYWxsb2MobGVuKGtl eSkgKyAxKQotLSAqICAgICAgICAgICAgIHN0cmNweShsaXN0LmtleXNbaV0sIGNrZXkpCi0tICov Ci0tICAgIF9fcHl4X3RfOSA9IF9fUHl4X1B5T2JqZWN0X0FzV3JpdGFibGVTdHJpbmcoX19weXhf dl9rZXkpOyBpZiAodW5saWtlbHkoKCFfX3B5eF90XzkpICYmIFB5RXJyX09jY3VycmVkKCkpKSBf X1BZWF9FUlIoMCwgNDkxLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19weXhfdl9ja2V5ID0gX19w eXhfdF85OwotKyAgX19weXhfdF8xMCA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3Zf cHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfMTApICYmIFB5RXJyX09jY3VycmVkKCkpKSBf X1BZWF9FUlIoMCwgNTkwLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3ZfcHJvcF9jID0gX19w eXhfdF8xMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5Mgot LSAqICAgICAgICAgICAgIGtleSA9IF9zdHJlbmMoa2V5KQotLSAqICAgICAgICAgICAgIGNrZXkg PSBrZXkKLS0gKiAgICAgICAgICAgICBsaXN0LmtleXNbaV0gPSA8Y2hhcio+bWFsbG9jKGxlbihr ZXkpICsgMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIHN0 cmNweShsaXN0LmtleXNbaV0sIGNrZXkpCi0tICogICAgICAgICByZXR1cm4gbGlzdAotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MQotKyAqICAgICAgICAgdXNlcmRhdGFz LmFkZCgpCi0rICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AKLSsgKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAg ICAgICAgICBlcnIgPSBtcHZfZ2V0X3Byb3BlcnR5X2FzeW5jKAotKyAqICAgICAgICAgICAgICAg ICBzZWxmLl9jdHgsCi0gICovCi0tICAgIF9fcHl4X3RfMTAgPSBQeU9iamVjdF9MZW5ndGgoX19w eXhfdl9rZXkpOyBpZiAodW5saWtlbHkoX19weXhfdF8xMCA9PSAoKFB5X3NzaXplX3QpLTEpKSkg X19QWVhfRVJSKDAsIDQ5MiwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fcHl4X3RfMTEgPSBfX1B5 eF9QeUluZGV4X0FzU3NpemVfdChfX3B5eF92X2kpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMTEg PT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDky LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgKF9fcHl4X3ZfbGlzdC0+a2V5c1tfX3B5eF90XzExXSkg PSAoKGNoYXIgKiltYWxsb2MoKF9fcHl4X3RfMTAgKyAxKSkpOwotKyAgewotKyAgICAgICNpZmRl ZiBXSVRIX1RIUkVBRAotKyAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwotKyAgICAgIFB5X1VO QkxPQ0tfVEhSRUFEUwotKyAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLSsgICAgICAj ZW5kaWYKLSsgICAgICAvKnRyeToqLyB7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0OTMKLS0gKiAgICAgICAgICAgICBja2V5ID0ga2V5Ci0tICogICAgICAgICAg ICAgbGlzdC5rZXlzW2ldID0gPGNoYXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCi0tICogICAgICAg ICAgICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqICAgICAgICAgcmV0dXJuIGxpc3QKLS0gKiAKLSsgICAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OTIKLSsgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciog cHJvcF9jID0gcHJvcAotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAgICAgICBl cnIgPSBtcHZfZ2V0X3Byb3BlcnR5X2FzeW5jKCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKLSsgKiAgICAgICAgICAgICAgICAgaWRf ZGF0YSwKLSAgKi8KLS0gICAgX19weXhfdF8xMCA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9f cHl4X3ZfaSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8xMCA9PSAoUHlfc3NpemVfdCktMSkgJiYg UHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0OTMsIF9fcHl4X0wxX2Vycm9yKQotLSAg ICAodm9pZCkoc3RyY3B5KChfX3B5eF92X2xpc3QtPmtleXNbX19weXhfdF8xMF0pLCBfX3B5eF92 X2NrZXkpKTsKLSsgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X2dldF9wcm9wZXJ0eV9hc3luYyhf X3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfaWRfZGF0YSwgX19weXhfdl9wcm9wX2MsIE1QVl9G T1JNQVRfTk9ERSk7Ci0rICAgICAgfQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NDg5Ci0tICogICAgICAgICAgICAgcmV0dXJuIGxpc3QKLS0gKiAgICAgICAgIGxp c3Qua2V5cyA9IDxjaGFyKio+bWFsbG9jKGxpc3QubnVtKQotLSAqICAgICAgICAgZm9yIGksIGtl eSBpbiBlbnVtZXJhdGUoa2V5cyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgICAgICBrZXkgPSBfc3RyZW5jKGtleSkKLS0gKiAgICAgICAgICAgICBja2V5ID0ga2V5 Ci0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MQotKyAqICAgICAg ICAgdXNlcmRhdGFzLmFkZCgpCi0rICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9 IHByb3AKLSsgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiAgICAgICAgICAgICBlcnIgPSBtcHZfZ2V0X3Byb3BlcnR5X2FzeW5jKAotKyAqICAg ICAgICAgICAgICAgICBzZWxmLl9jdHgsCi0gICovCi0rICAgICAgLypmaW5hbGx5OiovIHsKLSsg ICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97Ci0rICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAot KyAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOwotKyAgICAgICAgICBQeV9CTE9DS19U SFJFQURTCi0rICAgICAgICAgICNlbmRpZgotKyAgICAgICAgICBnb3RvIF9fcHl4X0w2OwotKyAg ICAgICAgfQotKyAgICAgICAgX19weXhfTDY6OwotKyAgICAgIH0KLSAgIH0KLS0gIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDk0Ci0tICogICAgICAgICAgICAgbGlzdC5rZXlzW2ldID0gPGNoYXIqPm1hbGxvYyhsZW4o a2V5KSArIDEpCi0tICogICAgICAgICAgICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkKLS0g KiAgICAgICAgIHJldHVybiBsaXN0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OTgKLSsgKiAgICAgICAgICAgICAgICAg TVBWX0ZPUk1BVF9OT0RFLAotKyAqICAgICAgICAgICAgICkKLSsgKiAgICAgICAgIHJldHVybiBl cnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqIAotLSAqICAgICBjZGVmIG1wdl9u b2RlIF9wcmVwX25hdGl2ZV92YWx1ZShzZWxmLCB2YWx1ZSwgZm9ybWF0KToKLSsgKiAgICAgZGVm IHRyeV9nZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lLCBkZWZhdWx0PU5v bmUpOgotICAqLwotLSAgX19weXhfciA9IF9fcHl4X3ZfbGlzdDsKLSsgIF9fUHl4X1hERUNSRUYo X19weXhfcik7Ci0rICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vy cik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU5OCwgX19weXhfTDFf ZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF90 XzE7Ci0rICBfX3B5eF90XzEgPSAwOwotICAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODEKLS0gKiAgICAgICAgIHJldHVybiBub2RlX2xp c3QKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzQKLSsgKiAKLSsgKiAg ICAgQF9lcnJvcnMKLSsgKiAgICAgZGVmIGdldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9wLCBk YXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAiIiJH ZXRzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGFzeW5jaHJvbm91c2x5LgotICAqIAotLSAqICAg ICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbWFwKHNlbGYsIG1hcCk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGNkZWYgY2hhciogY2tleQotLSAqICAg ICAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBsaXN0Ci0gICovCi0gCi0gICAvKiBmdW5jdGlvbiBl eGl0IGNvZGUgKi8KLUBAIC0xMDU3Nyw2MTggKzExMzM0LDUzOSBAQCBzdGF0aWMgc3RydWN0IG1w dl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVw X25vZGVfbQotICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzIpOwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOwotKyAgX19QeXhfWERFQ1JF RihfX3B5eF90XzUpOwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOwotLSAgX19QeXhfWERF Q1JFRihfX3B5eF90XzgpOwotLSAgX19QeXhfV3JpdGVVbnJhaXNhYmxlKCJ2aWRjdXR0ZXIubGli cy5tcHYuQ29udGV4dC5fcHJlcF9ub2RlX21hcCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVu bywgX19weXhfZmlsZW5hbWUsIDEsIDApOwotLSAgX19weXhfciA9IDA7Ci0rICBfX1B5eF9BZGRU cmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmdldF9wcm9wZXJ0eV9hc3luYyIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19weXhf ciA9IE5VTEw7Ci0gICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfa2V5cyk7 Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfaSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zf a2V5KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdl91c2VyZGF0YXMpOwotKyAgX19QeXhfWERF Q1JFRihfX3B5eF92X3Byb3ApOwotKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0v KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk2Ci0tICogICAgICAgICByZXR1cm4g bGlzdAotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDAKLSsgKiAgICAgICAg IHJldHVybiBlcnIKLSAgKiAKLS0gKiAgICAgY2RlZiBtcHZfbm9kZSBfcHJlcF9uYXRpdmVfdmFs dWUoc2VsZiwgdmFsdWUsIGZvcm1hdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZQotLSAqICAgICAgICAgbm9kZS5mb3JtYXQgPSBm b3JtYXQKLSsgKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0 YT1Ob25lLCBkZWZhdWx0PU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgICAgICB0cnk6Ci0rICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5X2Fz eW5jKHByb3AsIGRhdGE9ZGF0YSkKLSAgKi8KLSAKLS1zdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9f cHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZShz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3Nl bGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlLCBQeU9iamVjdCAqX19weXhfdl9mb3JtYXQpIHsK LS0gIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF92X25vZGU7Ci0tICBzdHJ1Y3QgbXB2X25vZGUgX19w eXhfcjsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBlbnVtIG1wdl9mb3JtYXQg X19weXhfdF8xOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0tICBQeU9iamVjdCAq X19weXhfdF8zID0gTlVMTDsKLS0gIGludCBfX3B5eF90XzQ7Ci0tICBQeU9iamVjdCAqX19weXhf dF81ID0gTlVMTDsKLS0gIFB5X3NzaXplX3QgX19weXhfdF82OwotLSAgY2hhciBjb25zdCAqX19w eXhfdF83OwotLSAgaW50IF9fcHl4X3RfODsKLS0gIGludDY0X3QgX19weXhfdF85OwotLSAgZG91 YmxlIF9fcHl4X3RfMTA7Ci0rLyogUHl0aG9uIHdyYXBwZXIgKi8KLStzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xM3RyeV9nZXRfcHJvcGVy dHlfYXN5bmMoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5 T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTN0cnlfZ2V0X3Byb3BlcnR5X2FzeW5j KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAq X19weXhfa3dkcykgewotKyAgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCA9IDA7Ci0rICBQeU9iamVj dCAqX19weXhfdl9kYXRhID0gMDsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X2RlZmF1bHQgPSAwOwot ICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9 IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX3ByZXBfbmF0aXZlX3ZhbHVlIiwgMCk7Ci0tICBfX1B5eF9JTkNSRUYoX19weXhf dl92YWx1ZSk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk4Ci0t ICogICAgIGNkZWYgbXB2X25vZGUgX3ByZXBfbmF0aXZlX3ZhbHVlKHNlbGYsIHZhbHVlLCBmb3Jt YXQpOgotLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlCi0tICogICAgICAgICBub2RlLmZv cm1hdCA9IGZvcm1hdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6Ci0tICogICAgICAgICAgICAgdmFsdWUgPSBf c3RyZW5jKHZhbHVlKQotLSAqLwotLSAgX19weXhfdF8xID0gKChlbnVtIG1wdl9mb3JtYXQpX19Q eXhfUHlJbnRfQXNfZW51bV9fbXB2X2Zvcm1hdChfX3B5eF92X2Zvcm1hdCkpOyBpZiAodW5saWtl bHkoUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0OTgsIF9fcHl4X0wxX2Vycm9yKQot LSAgX19weXhfdl9ub2RlLmZvcm1hdCA9IF9fcHl4X3RfMTsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0OTkKLS0gKiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZQot LSAqICAgICAgICAgbm9kZS5mb3JtYXQgPSBmb3JtYXQKLS0gKiAgICAgICAgIGlmIGZvcm1hdCA9 PSBNUFZfRk9STUFUX1NUUklORzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgICAgIHZhbHVlID0gX3N0cmVuYyh2YWx1ZSkKLS0gKiAgICAgICAgICAgICBub2RlLnUu c3RyaW5nID0gPGNoYXIqPm1hbGxvYyhsZW4odmFsdWUpICsgMSkKLS0gKi8KLS0gIF9fcHl4X3Rf MiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX1NUUklORyk7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQ5OSwgX19weXhfTDFfZXJy b3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gIF9fcHl4X3RfMyA9IFB5T2JqZWN0 X1JpY2hDb21wYXJlKF9fcHl4X3ZfZm9ybWF0LCBfX3B5eF90XzIsIFB5X0VRKTsgX19QeXhfWEdP VFJFRihfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0 OTksIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7Ci0tICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8zKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNDk5LCBfX3B5eF9MMV9l cnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgaWYg KF9fcHl4X3RfNCkgewotLQotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTAwCi0tICogICAgICAgICBub2RlLmZvcm1hdCA9IGZvcm1hdAotLSAqICAgICAgICAgaWYgZm9y bWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgotLSAqICAgICAgICAgICAgIHZhbHVlID0gX3N0cmVu Yyh2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIG5v ZGUudS5zdHJpbmcgPSA8Y2hhcio+bWFsbG9jKGxlbih2YWx1ZSkgKyAxKQotLSAqICAgICAgICAg ICAgIHN0cmNweShub2RlLnUuc3RyaW5nLCB2YWx1ZSkKLS0gKi8KLS0gICAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1MDAsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19weXhfdF81ID0gTlVMTDsKLS0gICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgewotLSAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Ci0t ICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7Ci0tICAgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKLS0gICAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzUpOwotLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAg ICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0tICAgICAgfQotLSAg ICB9Ci0tICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfMiwgX19weXhfdF81LCBfX3B5eF92X3ZhbHVlKSA6IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X3ZhbHVlKTsKLS0gICAgX19QeXhfWERFQ1JF RihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MykpIF9fUFlYX0VSUigwLCA1MDAsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8zKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 Ci0tICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl92YWx1ZSwgX19weXhfdF8zKTsKLS0gICAg X19weXhfdF8zID0gMDsKLSsgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLSsgIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgidHJ5X2dldF9w cm9wZXJ0eV9hc3luYyAod3JhcHBlcikiLCAwKTsKLSsgIHsKLSsgICAgc3RhdGljIFB5T2JqZWN0 ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfcHJvcCwmX19weXhfbl9zX2RhdGEs Jl9fcHl4X25fc19kZWZhdWx0LDB9OwotKyAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCww fTsKLSsgICAgdmFsdWVzWzFdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOwotKyAgICB2YWx1ZXNb Ml0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7Ci0rICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2Rz KSkgewotKyAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKLSsgICAgICBjb25zdCBQeV9zc2l6ZV90 IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKLSsgICAgICBzd2l0Y2gg KHBvc19hcmdzKSB7Ci0rICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9J VEVNKF9fcHl4X2FyZ3MsIDIpOwotKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotKyAgICAg ICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsK LSsgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgIGNhc2UgIDE6IHZhbHVlc1sw XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0rICAgICAgICBDWVRIT05fRkFM TFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAwOiBicmVhazsKLSsgICAgICAgIGRlZmF1bHQ6IGdv dG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0rICAgICAgfQotKyAgICAgIGt3X2FyZ3MgPSBQ eURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKLSsgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0rICAg ICAgICBjYXNlICAwOgotKyAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlE aWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3Byb3ApKSAhPSAwKSkga3dfYXJn cy0tOwotKyAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotKyAgICAg ICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAgY2FzZSAgMToKLSsgICAgICAgIGlmIChr d19hcmdzID4gMCkgewotKyAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3Rf R2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZGF0YSk7Ci0rICAgICAgICAgIGlmICh2 YWx1ZSkgeyB2YWx1ZXNbMV0gPSB2YWx1ZTsga3dfYXJncy0tOyB9Ci0rICAgICAgICB9Ci0rICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAyOgotKyAgICAgICAgaWYg KGt3X2FyZ3MgPiAwKSB7Ci0rICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGlj dF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19kZWZhdWx0KTsKLSsgICAgICAgICAg aWYgKHZhbHVlKSB7IHZhbHVlc1syXSA9IHZhbHVlOyBrd19hcmdzLS07IH0KLSsgICAgICAgIH0K LSsgICAgICB9Ci0rICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewotKyAgICAgICAg aWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5 eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAidHJ5X2dldF9wcm9wZXJ0eV9hc3lu YyIpIDwgMCkpIF9fUFlYX0VSUigwLCA2MDAsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgIH0KLSsg ICAgfSBlbHNlIHsKLSsgICAgICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykp IHsKLSsgICAgICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhf YXJncywgMik7Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAy OiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOwotKyAgICAgICAg Q1lUSE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBs ZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgICAgZGVm YXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLSsgICAgICB9Ci0rICAgIH0KLSsg ICAgX19weXhfdl9wcm9wID0gdmFsdWVzWzBdOwotKyAgICBfX3B5eF92X2RhdGEgPSB2YWx1ZXNb MV07Ci0rICAgIF9fcHl4X3ZfZGVmYXVsdCA9IHZhbHVlc1syXTsKLSsgIH0KLSsgIGdvdG8gX19w eXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7Ci0rICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJv cjo7Ci0rICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgidHJ5X2dldF9wcm9wZXJ0eV9hc3lu YyIsIDAsIDEsIDMsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwg NjAwLCBfX3B5eF9MM19lcnJvcikKLSsgIF9fcHl4X0wzX2Vycm9yOjsKLSsgIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQudHJ5X2dldF9wcm9wZXJ0eV9hc3lu YyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gTlVMTDsKLSsgIF9fcHl4X0w0 X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJ0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiks IF9fcHl4X3ZfcHJvcCwgX19weXhfdl9kYXRhLCBfX3B5eF92X2RlZmF1bHQpOwotIAotLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTAxCi0tICogICAgICAgICBpZiBmb3Jt YXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6Ci0tICogICAgICAgICAgICAgdmFsdWUgPSBfc3RyZW5j KHZhbHVlKQotLSAqICAgICAgICAgICAgIG5vZGUudS5zdHJpbmcgPSA8Y2hhcio+bWFsbG9jKGxl bih2YWx1ZSkgKyAxKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAg ICAgc3RyY3B5KG5vZGUudS5zdHJpbmcsIHZhbHVlKQotLSAqICAgICAgICAgZWxpZiBmb3JtYXQg PT0gTVBWX0ZPUk1BVF9GTEFHOgotLSAqLwotLSAgICBfX3B5eF90XzYgPSBQeU9iamVjdF9MZW5n dGgoX19weXhfdl92YWx1ZSk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPT0gKChQeV9zc2l6ZV90 KS0xKSkpIF9fUFlYX0VSUigwLCA1MDEsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX3B5eF92X25v ZGUudS5zdHJpbmcgPSAoKGNoYXIgKiltYWxsb2MoKF9fcHl4X3RfNiArIDEpKSk7Ci0rICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwot KyAgcmV0dXJuIF9fcHl4X3I7Ci0rfQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTAyCi0tICogICAgICAgICAgICAgdmFsdWUgPSBfc3RyZW5jKHZhbHVlKQotLSAq ICAgICAgICAgICAgIG5vZGUudS5zdHJpbmcgPSA8Y2hhcio+bWFsbG9jKGxlbih2YWx1ZSkgKyAx KQotLSAqICAgICAgICAgICAgIHN0cmNweShub2RlLnUuc3RyaW5nLCB2YWx1ZSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1B VF9GTEFHOgotLSAqICAgICAgICAgICAgIG5vZGUudS5mbGFnID0gMSBpZiB2YWx1ZSBlbHNlIDAK LS0gKi8KLS0gICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl92 YWx1ZSk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNykgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9f UFlYX0VSUigwLCA1MDIsIF9fcHl4X0wxX2Vycm9yKQotLSAgICAodm9pZCkoc3RyY3B5KF9fcHl4 X3Zfbm9kZS51LnN0cmluZywgX19weXhfdF83KSk7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJ0cnlfZ2V0X3Byb3BlcnR5X2FzeW5j KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zf c2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSwgUHlP YmplY3QgKl9fcHl4X3ZfZGVmYXVsdCkgewotKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwot KyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBO VUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhf dF8zID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOwotKyAgUHlPYmplY3Qg Kl9fcHl4X3RfNSA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKLSsgIFB5 T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxMOwotKyAgaW50IF9fcHl4X3RfODsKLSsgIGludCBfX3B5 eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotKyAg aW50IF9fcHl4X2NsaW5lbm8gPSAwOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInRy eV9nZXRfcHJvcGVydHlfYXN5bmMiLCAwKTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ5OQotLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlCi0tICogICAg ICAgICBub2RlLmZvcm1hdCA9IGZvcm1hdAotLSAqICAgICAgICAgaWYgZm9ybWF0ID09IE1QVl9G T1JNQVRfU1RSSU5HOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAg ICAgdmFsdWUgPSBfc3RyZW5jKHZhbHVlKQotLSAqICAgICAgICAgICAgIG5vZGUudS5zdHJpbmcg PSA8Y2hhcio+bWFsbG9jKGxlbih2YWx1ZSkgKyAxKQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjYwMQotKyAqIAotKyAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3lu YyhzZWxmLCBwcm9wLCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6Ci0rICogICAgICAgICB0cnk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICByZXR1cm4gc2Vs Zi5nZXRfcHJvcGVydHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKQotKyAqICAgICAgICAgZXhjZXB0 IE1QVkVycm9yOgotICAqLwotLSAgICBnb3RvIF9fcHl4X0wzOwotLSAgfQotKyAgewotKyAgICBf X1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKLSsgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3Np Z24KLSsgICAgX19QeXhfRXhjZXB0aW9uU2F2ZSgmX19weXhfdF8xLCAmX19weXhfdF8yLCAmX19w eXhfdF8zKTsKLSsgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzEpOwotKyAgICBfX1B5eF9YR09U UkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsKLSsgICAgLyp0 cnk6Ki8gewotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwMwotLSAq ICAgICAgICAgICAgIG5vZGUudS5zdHJpbmcgPSA8Y2hhcio+bWFsbG9jKGxlbih2YWx1ZSkgKyAx KQotLSAqICAgICAgICAgICAgIHN0cmNweShub2RlLnUuc3RyaW5nLCB2YWx1ZSkKLS0gKiAgICAg ICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgICAgIG5vZGUudS5mbGFnID0gMSBpZiB2YWx1ZSBlbHNlIDAK LS0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6Ci0rICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwMgotKyAqICAgICBkZWYgdHJ5X2dldF9w cm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9wLCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6Ci0rICog ICAgICAgICB0cnk6Ci0rICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5X2Fz eW5jKHByb3AsIGRhdGE9ZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICAgICAgZXhjZXB0IE1QVkVycm9yOgotKyAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0g ICovCi0tICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBW X0ZPUk1BVF9GTEFHKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTAz LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgX19weXhf dF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMywgUHlf RVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDUwMywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhf dF8zKTsgX19weXhfdF8zID0gMDsKLS0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1 ZShfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF80IDwgMCkpIF9fUFlYX0VSUigwLCA1 MDMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7Ci0tICBpZiAoX19weXhfdF80KSB7Ci0rICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKLSsgICAgICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5X2FzeW5jKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNjAyLCBfX3B5eF9MM19lcnJvcikKLSsg ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSsgICAgICBfX3B5eF90XzUgPSBQeVR1cGxl X05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgNjAyLCBfX3B5 eF9MM19lcnJvcikKLSsgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKLSsgICAgICBfX1B5 eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKLSsgICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3ZfcHJv cCk7Ci0rICAgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzUsIDAsIF9fcHl4X3ZfcHJvcCk7 Ci0rICAgICAgX19weXhfdF82ID0gX19QeXhfUHlEaWN0X05ld1ByZXNpemVkKDEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA2MDIsIF9fcHl4X0wzX2Vycm9yKQotKyAg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgICAgIGlmIChQeURpY3RfU2V0SXRlbShf X3B5eF90XzYsIF9fcHl4X25fc19kYXRhLCBfX3B5eF92X2RhdGEpIDwgMCkgX19QWVhfRVJSKDAs IDYwMiwgX19weXhfTDNfZXJyb3IpCi0rICAgICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3Rf Q2FsbChfX3B5eF90XzQsIF9fcHl4X3RfNSwgX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMCwgNjAyLCBfX3B5eF9MM19lcnJvcikKLSsgICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF83KTsKLSsgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhf dF80ID0gMDsKLSsgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsK LSsgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSsgICAgICBf X3B5eF9yID0gX19weXhfdF83OwotKyAgICAgIF9fcHl4X3RfNyA9IDA7Ci0rICAgICAgZ290byBf X3B5eF9MN190cnlfcmV0dXJuOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTA0Ci0tICogICAgICAgICAgICAgc3RyY3B5KG5vZGUudS5zdHJpbmcsIHZhbHVlKQot LSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgotLSAqICAgICAgICAg ICAgIG5vZGUudS5mbGFnID0gMSBpZiB2YWx1ZSBlbHNlIDAgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKLS0g KiAgICAgICAgICAgICBub2RlLnUuaW50NjQgPSB2YWx1ZQotKyAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MDEKLSsgKiAKLSsgKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVy dHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lLCBkZWZhdWx0PU5vbmUpOgotKyAqICAgICAg ICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgcmV0 dXJuIHNlbGYuZ2V0X3Byb3BlcnR5X2FzeW5jKHByb3AsIGRhdGE9ZGF0YSkKLSsgKiAgICAgICAg IGV4Y2VwdCBNUFZFcnJvcjoKLSAgKi8KLS0gICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3Rf SXNUcnVlKF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtlbHkoX19weXhfdF80IDwgMCkpIF9fUFlY X0VSUigwLCA1MDQsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBpZiAoX19weXhfdF80KSB7Ci0tICAg ICAgX19weXhfdF84ID0gMTsKLS0gICAgfSBlbHNlIHsKLS0gICAgICBfX3B5eF90XzggPSAwOwot ICAgICB9Ci0tICAgIF9fcHl4X3Zfbm9kZS51LmZsYWcgPSBfX3B5eF90Xzg7Ci0rICAgIF9fcHl4 X0wzX2Vycm9yOjsKLSsgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAw OwotKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0rICAgIF9f UHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSsgICAgX19QeXhfWERFQ1JF RihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTAzCi0tICogICAgICAgICAgICAgbm9kZS51LnN0cmluZyA9IDxjaGFy Kj5tYWxsb2MobGVuKHZhbHVlKSArIDEpCi0tICogICAgICAgICAgICAgc3RyY3B5KG5vZGUudS5z dHJpbmcsIHZhbHVlKQotLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFH OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgbm9kZS51LmZs YWcgPSAxIGlmIHZhbHVlIGVsc2UgMAotLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZP Uk1BVF9JTlQ2NDoKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwMwot KyAqICAgICAgICAgdHJ5OgotKyAqICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0 eV9hc3luYyhwcm9wLCBkYXRhPWRhdGEpCi0rICogICAgICAgICBleGNlcHQgTVBWRXJyb3I6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICByZXR1cm4gZGVmYXVs dAotKyAqIAotICAqLwotLSAgICBnb3RvIF9fcHl4X0wzOwotLSAgfQotKyAgICBfX1B5eF9FcnJG ZXRjaCgmX19weXhfdF83LCAmX19weXhfdF82LCAmX19weXhfdF81KTsKLSsgICAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDYwMywgX19weXhfTDVfZXhjZXB0X2Vycm9y KQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSsgICAgX19weXhfdF84ID0gX19QeXhf UHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKF9fcHl4X3RfNywgX19weXhfdF80KTsKLSsgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICAgIF9fUHl4X0VyclJl c3RvcmUoX19weXhfdF83LCBfX3B5eF90XzYsIF9fcHl4X3RfNSk7Ci0rICAgIF9fcHl4X3RfNyA9 IDA7IF9fcHl4X3RfNiA9IDA7IF9fcHl4X3RfNSA9IDA7Ci0rICAgIGlmIChfX3B5eF90XzgpIHsK LSsgICAgICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnRy eV9nZXRfcHJvcGVydHlfYXN5bmMiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lKTsKLSsgICAgICBpZiAoX19QeXhfR2V0RXhjZXB0aW9uKCZfX3B5eF90XzUsICZf X3B5eF90XzYsICZfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDYwMywgX19weXhfTDVfZXhj ZXB0X2Vycm9yKQotKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOwotKyAgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOwotKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwNQotLSAqICAgICAgICAgZWxp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgotLSAqICAgICAgICAgICAgIG5vZGUudS5mbGFn ID0gMSBpZiB2YWx1ZSBlbHNlIDAKLS0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JN QVRfSU5UNjQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBu b2RlLnUuaW50NjQgPSB2YWx1ZQotLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1B VF9ET1VCTEU6Ci0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwNAot KyAqICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhwcm9wLCBkYXRh PWRhdGEpCi0rICogICAgICAgICBleGNlcHQgTVBWRXJyb3I6Ci0rICogICAgICAgICAgICAgcmV0 dXJuIGRlZmF1bHQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIAotKyAqICAgICBk ZWYgdHJ5X2dldF9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkZWZhdWx0PU5vbmUpOgotICAqLwotLSAg X19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRf SU5UNjQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1MDUsIF9fcHl4 X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX3B5eF90XzMgPSBQ eU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X2Zvcm1hdCwgX19weXhfdF8yLCBQeV9FUSk7IF9f UHl4X1hHT1RSRUYoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgNTA1LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOwotLSAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4 X3RfMyk7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwNSwgX19w eXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsK LS0gIGlmIChfX3B5eF90XzQpIHsKLSsgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotKyAg ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X2RlZmF1bHQpOwotKyAgICAgIF9fcHl4X3IgPSBfX3B5 eF92X2RlZmF1bHQ7Ci0rICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9 IDA7Ci0rICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICAg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0rICAgICAgZ290byBf X3B5eF9MNl9leGNlcHRfcmV0dXJuOwotKyAgICB9Ci0rICAgIGdvdG8gX19weXhfTDVfZXhjZXB0 X2Vycm9yOwotKyAgICBfX3B5eF9MNV9leGNlcHRfZXJyb3I6OwotIAotLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA2Ci0tICogICAgICAgICAgICAgbm9kZS51LmZsYWcg PSAxIGlmIHZhbHVlIGVsc2UgMAotLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1B VF9JTlQ2NDoKLS0gKiAgICAgICAgICAgICBub2RlLnUuaW50NjQgPSB2YWx1ZSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X0RPVUJMRToKLS0gKiAgICAgICAgICAgICBub2RlLnUuZG91YmxlXyA9IHZhbHVlCi0rICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDEKLSsgKiAKLSsgKiAgICAgZGVmIHRy eV9nZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lLCBkZWZhdWx0PU5vbmUp OgotKyAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAg ICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5X2FzeW5jKHByb3AsIGRhdGE9ZGF0YSkK LSsgKiAgICAgICAgIGV4Y2VwdCBNUFZFcnJvcjoKLSAgKi8KLS0gICAgX19weXhfdF85ID0gX19Q eXhfUHlJbnRfQXNfaW50NjRfdChfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5KChfX3B5eF90 XzkgPT0gKChpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA1 MDYsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX3B5eF92X25vZGUudS5pbnQ2NCA9IF9fcHl4X3Rf OTsKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwNQotLSAqICAg ICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgotLSAqICAgICAgICAgICAgIG5v ZGUudS5mbGFnID0gMSBpZiB2YWx1ZSBlbHNlIDAKLS0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09 IE1QVl9GT1JNQVRfSU5UNjQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAg ICAgICAgICBub2RlLnUuaW50NjQgPSB2YWx1ZQotLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0g TVBWX0ZPUk1BVF9ET1VCTEU6Ci0tICovCi0tICAgIGdvdG8gX19weXhfTDM7Ci0tICB9Ci0tCi0t ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA3Ci0tICogICAgICAgICBlbGlm IGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgotLSAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2 NCA9IHZhbHVlCi0tICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIG5vZGUudS5kb3Vi bGVfID0gdmFsdWUKLS0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9B UlJBWToKLS0gKi8KLS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zv cm1hdChNUFZfRk9STUFUX0RPVUJMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDAsIDUwNywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsK LS0gIF9fcHl4X3RfMiA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfZm9ybWF0LCBfX3B5 eF90XzMsIFB5X0VRKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA1MDcsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICBfX3B5eF90XzQgPSBfX1B5eF9QeU9i amVjdF9Jc1RydWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZ WF9FUlIoMCwgNTA3LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOwotLSAgaWYgKF9fcHl4X3RfNCkgewotLQotLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA4Ci0tICogICAgICAgICAgICAgbm9kZS51LmludDY0 ID0gdmFsdWUKLS0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOgot LSAqICAgICAgICAgICAgIG5vZGUudS5kb3VibGVfID0gdmFsdWUgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FS UkFZOgotLSAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3Qo dmFsdWUpCi0tICovCi0tICAgIF9fcHl4X3RfMTAgPSBfX3B5eF9QeUZsb2F0X0FzRG91YmxlKF9f cHl4X3ZfdmFsdWUpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMTAgPT0gKGRvdWJsZSktMSkgJiYg UHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA1MDgsIF9fcHl4X0wxX2Vycm9yKQotLSAg ICBfX3B5eF92X25vZGUudS5kb3VibGVfID0gX19weXhfdF8xMDsKLS0KLS0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwNwotLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0g TVBWX0ZPUk1BVF9JTlQ2NDoKLS0gKiAgICAgICAgICAgICBub2RlLnUuaW50NjQgPSB2YWx1ZQot LSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBub2RlLnUuZG91YmxlXyA9IHZhbHVl Ci0tICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6Ci0tICov Ci0tICAgIGdvdG8gX19weXhfTDM7Ci0tICB9Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTA5Ci0tICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RP VUJMRToKLS0gKiAgICAgICAgICAgICBub2RlLnUuZG91YmxlXyA9IHZhbHVlCi0tICogICAgICAg ICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBub2RlLnUubGlzdCA9IHNlbGYuX3ByZXBfbm9k ZV9saXN0KHZhbHVlKQotLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RF X01BUDoKLS0gKi8KLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zv cm1hdChNUFZfRk9STUFUX05PREVfQVJSQVkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9f UFlYX0VSUigwLCA1MDksIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Mik7Ci0tICBfX3B5eF90XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X2Zvcm1hdCwg X19weXhfdF8yLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTA5LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgX19weXhfdF80ID0gX19QeXhf UHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkg X19QWVhfRVJSKDAsIDUwOSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhf dF8zKTsgX19weXhfdF8zID0gMDsKLS0gIGlmIChfX3B5eF90XzQpIHsKLS0KLS0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxMAotLSAqICAgICAgICAgICAgIG5vZGUudS5k b3VibGVfID0gdmFsdWUKLS0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9E RV9BUlJBWToKLS0gKiAgICAgICAgICAgICBub2RlLnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9s aXN0KHZhbHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBlbGlm IGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgotLSAqICAgICAgICAgICAgIG5vZGUudS5s aXN0ID0gc2VsZi5fcHJlcF9ub2RlX21hcCh2YWx1ZSkKLS0gKi8KLS0gICAgX19weXhfdl9ub2Rl LnUubGlzdCA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fcHJlcF9ub2RlX2xpc3QoX19w eXhfdl9zZWxmLCBfX3B5eF92X3ZhbHVlKTsKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjUwOQotLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9E T1VCTEU6Ci0tICogICAgICAgICAgICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQotLSAqICAgICAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25v ZGVfbGlzdCh2YWx1ZSkKLS0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9E RV9NQVA6Ci0tICovCi0tICAgIGdvdG8gX19weXhfTDM7Ci0tICB9Ci0tCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTExCi0tICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX05PREVfQVJSQVk6Ci0tICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxm Ll9wcmVwX25vZGVfbGlzdCh2YWx1ZSkKLS0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9G T1JNQVRfTk9ERV9NQVA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg ICAgICBub2RlLnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9tYXAodmFsdWUpCi0tICogICAgICAg ICBlbHNlOgotLSAqLwotLSAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZf Zm9ybWF0KE1QVl9GT1JNQVRfTk9ERV9NQVApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9f UFlYX0VSUigwLCA1MTEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Myk7Ci0tICBfX3B5eF90XzIgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X2Zvcm1hdCwg X19weXhfdF8zLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgX19weXhfdF80ID0gX19QeXhf UHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkg X19QWVhfRVJSKDAsIDUxMSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhf dF8yKTsgX19weXhfdF8yID0gMDsKLS0gIGlmIChfX3B5eF90XzQpIHsKLS0KLS0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxMgotLSAqICAgICAgICAgICAgIG5vZGUudS5s aXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QodmFsdWUpCi0tICogICAgICAgICBlbGlmIGZvcm1h dCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgotLSAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0g c2VsZi5fcHJlcF9ub2RlX21hcCh2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgZWxzZToKLS0gKiAgICAgICAgICAgICBub2RlLmZvcm1hdCA9IE1QVl9GT1JN QVRfTk9ORQotLSAqLwotLSAgICBfX3B5eF92X25vZGUudS5saXN0ID0gKChzdHJ1Y3QgX19weXhf dnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+ X19weXhfdnRhYiktPl9wcmVwX25vZGVfbWFwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92YWx1ZSk7 Ci0tCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTEKLS0gKiAgICAg ICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKLS0gKiAgICAgICAgICAg ICBub2RlLnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0KHZhbHVlKQotLSAqICAgICAgICAg ZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX21h cCh2YWx1ZSkKLS0gKiAgICAgICAgIGVsc2U6Ci0tICovCi0tICAgIGdvdG8gX19weXhfTDM7Ci0t ICB9Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTE0Ci0tICogICAg ICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbWFwKHZhbHVlKQotLSAqICAg ICAgICAgZWxzZToKLS0gKiAgICAgICAgICAgICBub2RlLmZvcm1hdCA9IE1QVl9GT1JNQVRfTk9O RSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICByZXR1cm4gbm9kZQot LSAqIAotLSAqLwotLSAgLyplbHNlKi8gewotLSAgICBfX3B5eF92X25vZGUuZm9ybWF0ID0gTVBW X0ZPUk1BVF9OT05FOwotKyAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEpOwotKyAgICBfX1B5 eF9YR0lWRVJFRihfX3B5eF90XzIpOwotKyAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzMpOwot KyAgICBfX1B5eF9FeGNlcHRpb25SZXNldChfX3B5eF90XzEsIF9fcHl4X3RfMiwgX19weXhfdF8z KTsKLSsgICAgZ290byBfX3B5eF9MMV9lcnJvcjsKLSsgICAgX19weXhfTDdfdHJ5X3JldHVybjo7 Ci0rICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3RfMik7Ci0rICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMyk7Ci0rICAgIF9fUHl4X0V4 Y2VwdGlvblJlc2V0KF9fcHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMpOwotKyAgICBnb3Rv IF9fcHl4X0wwOwotKyAgICBfX3B5eF9MNl9leGNlcHRfcmV0dXJuOjsKLSsgICAgX19QeXhfWEdJ VkVSRUYoX19weXhfdF8xKTsKLSsgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8yKTsKLSsgICAg X19QeXhfWEdJVkVSRUYoX19weXhfdF8zKTsKLSsgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19w eXhfdF8xLCBfX3B5eF90XzIsIF9fcHl4X3RfMyk7Ci0rICAgIGdvdG8gX19weXhfTDA7Ci0gICB9 Ci0tICBfX3B5eF9MMzo7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTE1Ci0tICogICAgICAgICBlbHNlOgotLSAqICAgICAgICAgICAgIG5vZGUuZm9ybWF0ID0gTVBW X0ZPUk1BVF9OT05FCi0tICogICAgICAgICByZXR1cm4gbm9kZSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogCi0tICogICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3ZhbHVlKHNlbGYsIG1w dl9ub2RlIG5vZGUpOgotLSAqLwotLSAgX19weXhfciA9IF9fcHl4X3Zfbm9kZTsKLS0gIGdvdG8g X19weXhfTDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk2Ci0t ICogICAgICAgICByZXR1cm4gbGlzdAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjYwMAotKyAqICAgICAgICAgcmV0dXJuIGVycgotICAqIAotLSAqICAgICBjZGVmIG1wdl9u b2RlIF9wcmVwX25hdGl2ZV92YWx1ZShzZWxmLCB2YWx1ZSwgZm9ybWF0KTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlCi0tICogICAg ICAgICBub2RlLmZvcm1hdCA9IGZvcm1hdAotKyAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9h c3luYyhzZWxmLCBwcm9wLCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHRyeToKLSsgKiAgICAgICAgICAgICByZXR1cm4g c2VsZi5nZXRfcHJvcGVydHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKQotICAqLwotIAotICAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCi0gICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0rICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNCk7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7Ci0tICBfX1B5 eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0Ll9wcmVwX25hdGl2 ZV92YWx1ZSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUsIDEs IDApOwotLSAgX19QeXhfcHJldGVuZF90b19pbml0aWFsaXplKCZfX3B5eF9yKTsKLSsgIF9fUHl4 X1hERUNSRUYoX19weXhfdF82KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsKLSsgIF9f UHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQudHJ5X2dldF9wcm9w ZXJ0eV9hc3luYyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OwotKyAgX19weXhfciA9IE5VTEw7Ci0gICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9YREVDUkVGKF9f cHl4X3ZfdmFsdWUpOwotKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTE3Ci0tICogICAgICAgICByZXR1cm4gbm9kZQot Ky8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDYKLSsgKiAgICAgICAgICAgICBy ZXR1cm4gZGVmYXVsdAotICAqIAotLSAqICAgICBjZGVmIF9mcmVlX25hdGl2ZV92YWx1ZShzZWxm LCBtcHZfbm9kZSBub2RlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgaWYgbm9kZS5mb3JtYXQgaW4gKE1QVl9GT1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZPUk1BVF9O T0RFX01BUCk6Ci0tICogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVt KToKLSsgKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGVmYXVsdD1Ob25l KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgdHJ5OgotKyAqICAg ICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eShwcm9wKQotICAqLwotIAotLXN0YXRp YyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX2ZyZWVf bmF0aXZlX3ZhbHVlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKl9fcHl4X3Zfc2VsZiwgc3RydWN0IG1wdl9ub2RlIF9fcHl4X3Zfbm9kZSkgewotLSAgaW50 IF9fcHl4X3ZfaTsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLS0gIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCi0tICBpbnQgX19weXhfdF8xOwotLSAgaW50IF9fcHl4X3RfMjsKLS0g IGludCBfX3B5eF90XzM7Ci0tICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLS0gIGludCBf X3B5eF90XzU7Ci0rLyogUHl0aG9uIHdyYXBwZXIgKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNXRyeV9nZXRfcHJvcGVydHkoUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5 eF9rd2RzKTsgLypwcm90byovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMTV0cnlfZ2V0X3Byb3BlcnR5KFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgewotKyAg UHlPYmplY3QgKl9fcHl4X3ZfcHJvcCA9IDA7Ci0rICBQeU9iamVjdCAqX19weXhfdl9kZWZhdWx0 ID0gMDsKLSAgIGludCBfX3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmls ZW5hbWUgPSBOVUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9mcmVlX25hdGl2ZV92YWx1ZSIsIDApOwotKyAgUHlPYmplY3QgKl9f cHl4X3IgPSAwOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJ0cnlfZ2V0X3Byb3BlcnR5ICh3cmFwcGVyKSIsIDApOwotKyAgewot KyAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19w cm9wLCZfX3B5eF9uX3NfZGVmYXVsdCwwfTsKLSsgICAgUHlPYmplY3QqIHZhbHVlc1syXSA9IHsw LDB9OwotKyAgICB2YWx1ZXNbMV0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7Ci0rICAgIGlmICh1 bmxpa2VseShfX3B5eF9rd2RzKSkgewotKyAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKLSsgICAg ICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdz KTsKLSsgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0rICAgICAgICBjYXNlICAyOiB2YWx1ZXNb MV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOwotKyAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOwotKyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRF TShfX3B5eF9hcmdzLCAwKTsKLSsgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAg IGNhc2UgIDA6IGJyZWFrOwotKyAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBs ZV9lcnJvcjsKLSsgICAgICB9Ci0rICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3 ZHMpOwotKyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKLSsgICAgICAgIGNhc2UgIDA6Ci0rICAg ICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5 eF9rd2RzLCBfX3B5eF9uX3NfcHJvcCkpICE9IDApKSBrd19hcmdzLS07Ci0rICAgICAgICBlbHNl IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9V R0g7Ci0rICAgICAgICBjYXNlICAxOgotKyAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7Ci0rICAg ICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3 ZHMsIF9fcHl4X25fc19kZWZhdWx0KTsKLSsgICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1sx XSA9IHZhbHVlOyBrd19hcmdzLS07IH0KLSsgICAgICAgIH0KLSsgICAgICB9Ci0rICAgICAgaWYg KHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewotKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1Bh cnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1 ZXMsIHBvc19hcmdzLCAidHJ5X2dldF9wcm9wZXJ0eSIpIDwgMCkpIF9fUFlYX0VSUigwLCA2MDYs IF9fcHl4X0wzX2Vycm9yKQotKyAgICAgIH0KLSsgICAgfSBlbHNlIHsKLSsgICAgICBzd2l0Y2gg KFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpIHsKLSsgICAgICAgIGNhc2UgIDI6IHZhbHVl c1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7Ci0rICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9J VEVNKF9fcHl4X2FyZ3MsIDApOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgICBkZWZhdWx0OiBn b3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotKyAgICAgIH0KLSsgICAgfQotKyAgICBfX3B5 eF92X3Byb3AgPSB2YWx1ZXNbMF07Ci0rICAgIF9fcHl4X3ZfZGVmYXVsdCA9IHZhbHVlc1sxXTsK LSsgIH0KLSsgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7Ci0rICBfX3B5 eF9MNV9hcmd0dXBsZV9lcnJvcjo7Ci0rICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgidHJ5 X2dldF9wcm9wZXJ0eSIsIDAsIDEsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBf X1BZWF9FUlIoMCwgNjA2LCBfX3B5eF9MM19lcnJvcikKLSsgIF9fcHl4X0wzX2Vycm9yOjsKLSsg IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQudHJ5X2dldF9w cm9wZXJ0eSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwot KyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gTlVMTDsKLSsgIF9f cHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTR0cnlfZ2V0X3Byb3BlcnR5KCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiks IF9fcHl4X3ZfcHJvcCwgX19weXhfdl9kZWZhdWx0KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo1MTgKLS0gKiAKLS0gKiAgICAgY2RlZiBfZnJlZV9uYXRpdmVfdmFs dWUoc2VsZiwgbXB2X25vZGUgbm9kZSk6Ci0tICogICAgICAgICBpZiBub2RlLmZvcm1hdCBpbiAo TVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBNUFZfRk9STUFUX05PREVfTUFQKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5s aXN0Lm51bSk6Ci0tICogICAgICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKG5v ZGUudS5saXN0LnZhbHVlc1tpXSkKLS0gKi8KLS0gIHN3aXRjaCAoX19weXhfdl9ub2RlLmZvcm1h dCkgewotLSAgICBjYXNlIE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKLS0gICAgY2FzZSBNUFZfRk9S TUFUX05PREVfTUFQOgotLQotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTE5Ci0tICogICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3ZhbHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUp OgotLSAqICAgICAgICAgaWYgbm9kZS5mb3JtYXQgaW4gKE1QVl9GT1JNQVRfTk9ERV9BUlJBWSwg TVBWX0ZPUk1BVF9OT0RFX01BUCk6Ci0tICogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9k ZS51Lmxpc3QubnVtKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAg ICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlLnUubGlzdC52YWx1ZXNbaV0pCi0t ICogICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC52YWx1ZXMpCi0tICovCi0tICAgIF9fcHl4 X3RfMSA9IF9fcHl4X3Zfbm9kZS51Lmxpc3QtPm51bTsKLS0gICAgX19weXhfdF8yID0gX19weXhf dF8xOwotLSAgICBmb3IgKF9fcHl4X3RfMyA9IDA7IF9fcHl4X3RfMyA8IF9fcHl4X3RfMjsgX19w eXhfdF8zKz0xKSB7Ci0tICAgICAgX19weXhfdl9pID0gX19weXhfdF8zOwotLQotLSAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjAKLS0gKiAgICAgICAgIGlmIG5vZGUu Zm9ybWF0IGluIChNUFZfRk9STUFUX05PREVfQVJSQVksIE1QVl9GT1JNQVRfTk9ERV9NQVApOgot LSAqICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6Ci0tICogICAg ICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKG5vZGUudS5saXN0LnZhbHVlc1tp XSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGZyZWUobm9k ZS51Lmxpc3QudmFsdWVzKQotLSAqICAgICAgICAgICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9G T1JNQVRfTk9ERV9NQVA6Ci0tICovCi0tICAgICAgX19weXhfdF80ID0gKChzdHJ1Y3QgX19weXhf dnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+ X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIChfX3B5eF92X25v ZGUudS5saXN0LT52YWx1ZXNbX19weXhfdl9pXSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCA1MjAsIF9fcHl4X0wxX2Vycm9yKQotLSAgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOwotLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAw OwotLSAgICB9Ci0tCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjEK LS0gKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOgotLSAqICAg ICAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlLnUubGlzdC52YWx1ZXNb aV0pCi0tICogICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC52YWx1ZXMpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZf Rk9STUFUX05PREVfTUFQOgotLSAqICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2Rl LnUubGlzdC5udW0pOgotLSAqLwotLSAgICBmcmVlKF9fcHl4X3Zfbm9kZS51Lmxpc3QtPnZhbHVl cyk7Ci0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOwotKyAgcmV0dXJuIF9fcHl4X3I7Ci0rfQotIAotLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NTIyCi0tICogICAgICAgICAgICAgICAgIHNlbGYuX2ZyZWVf bmF0aXZlX3ZhbHVlKG5vZGUudS5saXN0LnZhbHVlc1tpXSkKLS0gKiAgICAgICAgICAgICBmcmVl KG5vZGUudS5saXN0LnZhbHVlcykKLS0gKiAgICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9PSBN UFZfRk9STUFUX05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAg ICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6Ci0tICogICAgICAg ICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXNbaV0pCi0tICovCi0tICAgIF9fcHl4 X3RfNSA9ICgoX19weXhfdl9ub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQKSAhPSAw KTsKLS0gICAgaWYgKF9fcHl4X3RfNSkgewotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE0dHJ5X2dldF9wcm9wZXJ0eShzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X2RlZmF1bHQpIHsKLSsgIFB5T2Jq ZWN0ICpfX3B5eF9yID0gTlVMTDsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0rICBQ eU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxM OwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF80 ID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9f cHl4X3RfNiA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKLSsgIGludCBf X3B5eF90Xzg7Ci0rICBpbnQgX19weXhfbGluZW5vID0gMDsKLSsgIGNvbnN0IGNoYXIgKl9fcHl4 X2ZpbGVuYW1lID0gTlVMTDsKLSsgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLSsgIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJ0cnlfZ2V0X3Byb3BlcnR5IiwgMCk7Ci0gCi0tICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyMwotLSAqICAgICAgICAgICAgIGZyZWUo bm9kZS51Lmxpc3QudmFsdWVzKQotLSAqICAgICAgICAgICAgIGlmIG5vZGUuZm9ybWF0ID09IE1Q Vl9GT1JNQVRfTk9ERV9NQVA6Ci0tICogICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5v ZGUudS5saXN0Lm51bSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg ICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5c1tpXSkKLS0gKiAgICAgICAgICAgICAg ICAgZnJlZShub2RlLnUubGlzdC5rZXlzKQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYwNwotKyAqIAotKyAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eShzZWxmLCBwcm9w LCBkZWZhdWx0PU5vbmUpOgotKyAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5KHByb3ApCi0r ICogICAgICAgICBleGNlcHQgTVBWRXJyb3I6Ci0gICovCi0tICAgICAgX19weXhfdF8xID0gX19w eXhfdl9ub2RlLnUubGlzdC0+bnVtOwotLSAgICAgIF9fcHl4X3RfMiA9IF9fcHl4X3RfMTsKLS0g ICAgICBmb3IgKF9fcHl4X3RfMyA9IDA7IF9fcHl4X3RfMyA8IF9fcHl4X3RfMjsgX19weXhfdF8z Kz0xKSB7Ci0tICAgICAgICBfX3B5eF92X2kgPSBfX3B5eF90XzM7Ci0rICB7Ci0rICAgIF9fUHl4 X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQotKyAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgot KyAgICBfX1B5eF9FeGNlcHRpb25TYXZlKCZfX3B5eF90XzEsICZfX3B5eF90XzIsICZfX3B5eF90 XzMpOwotKyAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fUHl4X1hHT1RSRUYo X19weXhfdF8yKTsKLSsgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzMpOwotKyAgICAvKnRyeToq LyB7Ci0gCi0tICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTI0Ci0t ICogICAgICAgICAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKLS0g KiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKLS0gKiAg ICAgICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5c1tpXSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0Lmtl eXMpCi0tICogICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdCkKLSsgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA4Ci0rICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5 KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9uZSk6Ci0rICogICAgICAgICB0cnk6Ci0rICogICAgICAg ICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5KHByb3ApICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgIGV4Y2VwdCBNUFZFcnJvcjoKLSsgKiAgICAgICAgICAgICBy ZXR1cm4gZGVmYXVsdAotICAqLwotLSAgICAgICAgZnJlZSgoX19weXhfdl9ub2RlLnUubGlzdC0+ a2V5c1tfX3B5eF92X2ldKSk7Ci0rICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLSsgICAg ICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5 eF92X3NlbGYpLCBfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzUpKSBfX1BZWF9FUlIoMCwgNjA4LCBfX3B5eF9MM19lcnJvcikKLSsgICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF81KTsKLSsgICAgICBfX3B5eF90XzYgPSBOVUxMOwotKyAgICAgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNSkpKSB7 Ci0rICAgICAgICBfX3B5eF90XzYgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzUpOwotKyAg ICAgICAgaWYgKGxpa2VseShfX3B5eF90XzYpKSB7Ci0rICAgICAgICAgIFB5T2JqZWN0KiBmdW5j dGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzUpOwotKyAgICAgICAgICBfX1B5 eF9JTkNSRUYoX19weXhfdF82KTsKLSsgICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsK LSsgICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzUsIGZ1bmN0aW9uKTsKLSsgICAg ICAgIH0KLSAgICAgICB9Ci0rICAgICAgX19weXhfdF80ID0gKF9fcHl4X3RfNikgPyBfX1B5eF9Q eU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF81LCBfX3B5eF90XzYsIF9fcHl4X3ZfcHJvcCkgOiBf X1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwgX19weXhfdl9wcm9wKTsKLSsgICAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICAgICAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNjA4LCBfX3B5eF9MM19lcnJvcikKLSsg ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSsgICAgICBfX1B5eF9ERUNSRUYoX19weXhf dF81KTsgX19weXhfdF81ID0gMDsKLSsgICAgICBfX3B5eF9yID0gX19weXhfdF80OwotKyAgICAg IF9fcHl4X3RfNCA9IDA7Ci0rICAgICAgZ290byBfX3B5eF9MN190cnlfcmV0dXJuOwotIAotLSAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjUKLS0gKiAgICAgICAgICAg ICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKLS0gKiAgICAgICAgICAgICAg ICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5c1tpXSkKLS0gKiAgICAgICAgICAgICAgICAgZnJl ZShub2RlLnUubGlzdC5rZXlzKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAg ICAgICAgICAgZnJlZShub2RlLnUubGlzdCkKLS0gKiAgICAgICAgIGVsaWYgbm9kZS5mb3JtYXQg PT0gTVBWX0ZPUk1BVF9TVFJJTkc6Ci0tICovCi0tICAgICAgZnJlZShfX3B5eF92X25vZGUudS5s aXN0LT5rZXlzKTsKLS0KLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTIyCi0tICogICAgICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKG5vZGUudS5s aXN0LnZhbHVlc1tpXSkKLS0gKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LnZhbHVlcykK LS0gKiAgICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKG5vZGUudS5saXN0Lm51bSk6Ci0tICogICAgICAgICAgICAgICAgICAgICBmcmVlKG5v ZGUudS5saXN0LmtleXNbaV0pCi0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjYwNwotKyAqIAotKyAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eShzZWxmLCBwcm9wLCBk ZWZhdWx0PU5vbmUpOgotKyAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5KHByb3ApCi0rICog ICAgICAgICBleGNlcHQgTVBWRXJyb3I6Ci0gICovCi0gICAgIH0KLSsgICAgX19weXhfTDNfZXJy b3I6OwotKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICAg IF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLSsgICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTI2Ci0tICogICAgICAgICAgICAgICAgICAgICBmcmVlKG5vZGUu dS5saXN0LmtleXNbaV0pCi0tICogICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5 cykKLS0gKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0KSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogICAgICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RS SU5HOgotLSAqICAgICAgICAgICAgIGZyZWUobm9kZS51LnN0cmluZykKLS0gKi8KLS0gICAgZnJl ZShfX3B5eF92X25vZGUudS5saXN0KTsKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjUxOAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA5 Ci0rICogICAgICAgICB0cnk6Ci0rICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3Bl cnR5KHByb3ApCi0rICogICAgICAgICBleGNlcHQgTVBWRXJyb3I6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotICAqIAotLSAqICAg ICBjZGVmIF9mcmVlX25hdGl2ZV92YWx1ZShzZWxmLCBtcHZfbm9kZSBub2RlKToKLS0gKiAgICAg ICAgIGlmIG5vZGUuZm9ybWF0IGluIChNUFZfRk9STUFUX05PREVfQVJSQVksIE1QVl9GT1JNQVRf Tk9ERV9NQVApOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAg Zm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKLS0gKiAgICAgICAgICAgICAgICAgc2Vs Zi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZS51Lmxpc3QudmFsdWVzW2ldKQotICAqLwotLSAgICBi cmVhazsKLS0gICAgY2FzZSBNUFZfRk9STUFUX1NUUklORzoKLSsgICAgX19QeXhfRXJyRmV0Y2go Jl9fcHl4X3RfNCwgJl9fcHl4X3RfNSwgJl9fcHl4X3RfNik7Ci0rICAgIF9fUHl4X0dldE1vZHVs ZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA2MDksIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKLSsg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0rICAgIF9fcHl4X3RfOCA9IF9fUHl4X1B5RXJy X0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyhfX3B5eF90XzQsIF9fcHl4X3RfNyk7Ci0rICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotKyAgICBfX1B5eF9FcnJSZXN0b3Jl KF9fcHl4X3RfNCwgX19weXhfdF81LCBfX3B5eF90XzYpOwotKyAgICBfX3B5eF90XzQgPSAwOyBf X3B5eF90XzUgPSAwOyBfX3B5eF90XzYgPSAwOwotKyAgICBpZiAoX19weXhfdF84KSB7Ci0rICAg ICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC50cnlfZ2V0 X3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 Ci0rICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlvbigmX19weXhfdF82LCAmX19weXhfdF81LCAm X19weXhfdF80KSA8IDApIF9fUFlYX0VSUigwLCA2MDksIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikK LSsgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSsgICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF81KTsKLSsgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSAKLS0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyOAotLSAqICAgICAgICAgICAgIGZyZWUobm9k ZS51Lmxpc3QpCi0tICogICAgICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RS SU5HOgotLSAqICAgICAgICAgICAgIGZyZWUobm9kZS51LnN0cmluZykgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 MTAKLSsgKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHkocHJvcCkKLSsgKiAg ICAgICAgIGV4Y2VwdCBNUFZFcnJvcjoKLSsgKiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdCAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0tICogICAgIGRlZiBjb21tYW5kKHNl bGYsICpjbWRsaXN0LCBhc3luY2hyb25vdXM9RmFsc2UsIGRhdGE9Tm9uZSk6Ci0rICogICAgIGRl ZiBnZXRfcHJvcGVydHkoc2VsZiwgcHJvcCk6Ci0gICovCi0tICAgIGZyZWUoX19weXhfdl9ub2Rl LnUuc3RyaW5nKTsKLSsgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotKyAgICAgIF9fUHl4 X0lOQ1JFRihfX3B5eF92X2RlZmF1bHQpOwotKyAgICAgIF9fcHl4X3IgPSBfX3B5eF92X2RlZmF1 bHQ7Ci0rICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICAg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0rICAgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICAgICAgZ290byBfX3B5eF9MNl9l eGNlcHRfcmV0dXJuOwotKyAgICB9Ci0rICAgIGdvdG8gX19weXhfTDVfZXhjZXB0X2Vycm9yOwot KyAgICBfX3B5eF9MNV9leGNlcHRfZXJyb3I6OwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTI3Ci0tICogICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qu a2V5cykKLS0gKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0KQotLSAqICAgICAgICAgZWxp ZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgICAgIGZyZWUobm9kZS51LnN0cmluZykKLSsgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwNwotICAqIAotKyAqICAgICBkZWYgdHJ5X2dl dF9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkZWZhdWx0PU5vbmUpOgotKyAqICAgICAgICAgdHJ5OiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgcmV0dXJuIHNlbGYu Z2V0X3Byb3BlcnR5KHByb3ApCi0rICogICAgICAgICBleGNlcHQgTVBWRXJyb3I6Ci0gICovCi0t ICAgIGJyZWFrOwotLSAgICBkZWZhdWx0OiBicmVhazsKLSsgICAgX19QeXhfWEdJVkVSRUYoX19w eXhfdF8xKTsKLSsgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8yKTsKLSsgICAgX19QeXhfWEdJ VkVSRUYoX19weXhfdF8zKTsKLSsgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xLCBf X3B5eF90XzIsIF9fcHl4X3RfMyk7Ci0rICAgIGdvdG8gX19weXhfTDFfZXJyb3I7Ci0rICAgIF9f cHl4X0w3X3RyeV9yZXR1cm46OwotKyAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEpOwotKyAg ICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzIpOwotKyAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90 XzMpOwotKyAgICBfX1B5eF9FeGNlcHRpb25SZXNldChfX3B5eF90XzEsIF9fcHl4X3RfMiwgX19w eXhfdF8zKTsKLSsgICAgZ290byBfX3B5eF9MMDsKLSsgICAgX19weXhfTDZfZXhjZXB0X3JldHVy bjo7Ci0rICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fUHl4X1hHSVZFUkVG KF9fcHl4X3RfMik7Ci0rICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMyk7Ci0rICAgIF9fUHl4 X0V4Y2VwdGlvblJlc2V0KF9fcHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMpOwotKyAgICBn b3RvIF9fcHl4X0wwOwotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjUxNwotLSAqICAgICAgICAgcmV0dXJuIG5vZGUKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2MDYKLSsgKiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotICAqIAot LSAqICAgICBjZGVmIF9mcmVlX25hdGl2ZV92YWx1ZShzZWxmLCBtcHZfbm9kZSBub2RlKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgaWYgbm9kZS5mb3JtYXQgaW4g KE1QVl9GT1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6Ci0tICogICAgICAg ICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKLSsgKiAgICAgZGVmIHRyeV9n ZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGVmYXVsdD1Ob25lKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAqICAgICAgICAgdHJ5OgotKyAqICAgICAgICAgICAgIHJldHVybiBzZWxm LmdldF9wcm9wZXJ0eShwcm9wKQotICAqLwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICov Ci0tICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotLSAgZ290byBf X3B5eF9MMDsKLSAgIF9fcHl4X0wxX2Vycm9yOjsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80 KTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX2Zy ZWVfbmF0aXZlX3ZhbHVlIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7Ci0tICBfX3B5eF9yID0gMDsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKLSsg IF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsK LSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQudHJ5X2dl dF9wcm9wZXJ0eSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OwotKyAgX19weXhfciA9IE5VTEw7Ci0gICBfX3B5eF9MMDo7Ci0gICBfX1B5eF9YR0lWRVJFRihf X3B5eF9yKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9f cHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MzAKLS0g KiAgICAgICAgICAgICBmcmVlKG5vZGUudS5zdHJpbmcpCi0tICogCi0tICogICAgIGRlZiBjb21t YW5kKHNlbGYsICpjbWRsaXN0LCBhc3luY2hyb25vdXM9RmFsc2UsIGRhdGE9Tm9uZSk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICIiIlNlbmQgYSBjb21tYW5kIHRv IG1wdi4KLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjEyCi0rICogICAgICAg ICAgICAgcmV0dXJuIGRlZmF1bHQKLSAgKiAKLSsgKiAgICAgZGVmIGdldF9wcm9wZXJ0eShzZWxm LCBwcm9wKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgIiIiV3Jh cHM6IG1wdl9nZXRfcHJvcGVydHkiIiIKLSsgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSAg Ki8KLSAKLSAvKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEzY29tbWFuZChQeU9iamVjdCAqX19weXhf dl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnBy b3RvKi8KLS1zdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzEyY29tbWFuZFtdID0gIlNlbmQgYSBjb21tYW5kIHRvIG1wdi5cblxuICAgICAgICBOb24t YXN5bmMgc3VjY2VzcyByZXR1cm5zIHRoZSBjb21tYW5kJ3MgcmVzcG9uc2UgZGF0YSwgb3RoZXJ3 aXNlIE5vbmVcblxuICAgICAgICBBcmd1bWVudHM6XG4gICAgICAgIEFjY2VwdHMgcGFyYW1ldGVy cyBhcyBhcmdzXG5cbiAgICAgICAgS2V5d29yZCBBcmd1bWVudHM6XG4gICAgICAgIGFzeW5jaHJv bm91czogVHJ1ZSB3aWxsIHJldHVybiByaWdodCBhd2F5LCBzdGF0dXMgY29tZXMgaW4gYXMgTVBW X0VWRU5UX0NPTU1BTkRfUkVQTFlcbiAgICAgICAgZGF0YTogT25seSB2YWxpZCBpZiBhc3luYywg Z2V0cyBzZW50IGJhY2sgYXMgcmVwbHlfdXNlcmRhdGEgaW4gdGhlIEV2ZW50XG5cbiAgICAgICAg V3JhcHM6IG1wdl9jb21tYW5kX25vZGUgYW5kIG1wdl9jb21tYW5kX25vZGVfYXN5bmNcbiAgICAg ICAgIjsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8xM2NvbW1hbmQoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7Ci0tICBQeU9iamVjdCAqX19weXhfdl9hc3lu Y2hyb25vdXMgPSAwOwotLSAgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSA9IDA7Ci0tICBQeU9iamVj dCAqX19weXhfdl9jbWRsaXN0ID0gMDsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29u c3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAw OwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzE3Z2V0X3Byb3BlcnR5KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X3Byb3ApOyAvKnByb3RvKi8KLStzdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5W10gPSAiV3JhcHM6IG1wdl9nZXRfcHJv cGVydHkiOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzE3Z2V0X3Byb3BlcnR5KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X3Byb3ApIHsKLSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLSAgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiY29tbWFu ZCAod3JhcHBlcikiLCAwKTsKLS0gIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpID4g MCkgewotLSAgICBfX3B5eF92X2NtZGxpc3QgPSBQeVR1cGxlX0dldFNsaWNlKF9fcHl4X2FyZ3Ms IDAsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOwotLSAgICBpZiAodW5saWtlbHkoIV9f cHl4X3ZfY21kbGlzdCkpIHsKLS0gICAgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsK LS0gICAgICByZXR1cm4gTlVMTDsKLS0gICAgfQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdl9j bWRsaXN0KTsKLS0gIH0gZWxzZSB7Ci0tICAgIF9fcHl4X3ZfY21kbGlzdCA9IF9fcHl4X2VtcHR5 X3R1cGxlOyBfX1B5eF9JTkNSRUYoX19weXhfZW1wdHlfdHVwbGUpOwotLSAgfQotLSAgewotLSAg ICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19hc3lu Y2hyb25vdXMsJl9fcHl4X25fc19kYXRhLDB9OwotLSAgICBQeU9iamVjdCogdmFsdWVzWzJdID0g ezAsMH07Ci0tICAgIHZhbHVlc1swXSA9ICgoUHlPYmplY3QgKilQeV9GYWxzZSk7Ci0tICAgIHZh bHVlc1sxXSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKLS0gICAgaWYgKHVubGlrZWx5KF9fcHl4 X2t3ZHMpKSB7Ci0tICAgICAgUHlfc3NpemVfdCBrd19hcmdzOwotLSAgICAgIGNvbnN0IFB5X3Nz aXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpOwotLSAgICAgIHN3 aXRjaCAocG9zX2FyZ3MpIHsKLS0gICAgICAgIGRlZmF1bHQ6Ci0tICAgICAgICBjYXNlICAwOiBi cmVhazsKLS0gICAgICB9Ci0tICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMp OwotLSAgICAgIGlmIChrd19hcmdzID4gMCAmJiBsaWtlbHkoa3dfYXJncyA8PSAyKSkgewotLSAg ICAgICAgUHlfc3NpemVfdCBpbmRleDsKLS0gICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8 IDIgJiYga3dfYXJncyA+IDA7IGluZGV4KyspIHsKLS0gICAgICAgICAgUHlPYmplY3QqIHZhbHVl ID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgKl9fcHl4X3B5YXJnbmFtZXNb aW5kZXhdKTsKLS0gICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1tpbmRleF0gPSB2YWx1ZTsg a3dfYXJncy0tOyB9Ci0tICAgICAgICB9Ci0tICAgICAgfQotLSAgICAgIGlmICh1bmxpa2VseShr d19hcmdzID4gMCkpIHsKLS0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFs S2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCAwLCAiY29t bWFuZCIpIDwgMCkpIF9fUFlYX0VSUigwLCA1MzAsIF9fcHl4X0wzX2Vycm9yKQotLSAgICAgIH0K LS0gICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpIDwgMCkgewotLSAg ICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0tICAgIH0gZWxzZSB7Ci0tICAgIH0K LS0gICAgX19weXhfdl9hc3luY2hyb25vdXMgPSB2YWx1ZXNbMF07Ci0tICAgIF9fcHl4X3ZfZGF0 YSA9IHZhbHVlc1sxXTsKLS0gIH0KLS0gIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5n X2RvbmU7Ci0tICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Ci0tICBfX1B5eF9SYWlzZUFyZ3R1 cGxlSW52YWxpZCgiY29tbWFuZCIsIDAsIDAsIDAsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cykpOyBfX1BZWF9FUlIoMCwgNTMwLCBfX3B5eF9MM19lcnJvcikKLS0gIF9fcHl4X0wzX2Vycm9y OjsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X2NtZGxpc3QpOyBfX3B5eF92X2NtZGxpc3QgPSAw OwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5jb21t YW5kIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBOVUxMOwotLSAgX19weXhf TDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMmNvbW1hbmQoKChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgX19weXhfdl9hc3lu Y2hyb25vdXMsIF9fcHl4X3ZfZGF0YSwgX19weXhfdl9jbWRsaXN0KTsKLSsgIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJnZXRfcHJvcGVydHkgKHdyYXBwZXIpIiwgMCk7Ci0rICBfX3B5eF9y ID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5 KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4 X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3Byb3ApKTsKLSAKLSAgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2NtZGxpc3QpOwotICAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0t c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MTJjb21tYW5kKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfYXN5bmNocm9ub3VzLCBQeU9iamVjdCAq X19weXhfdl9kYXRhLCBQeU9iamVjdCAqX19weXhfdl9jbWRsaXN0KSB7Ci0tICBzdHJ1Y3QgbXB2 X25vZGUgX19weXhfdl9ub2RlOwotLSAgc3RydWN0IG1wdl9ub2RlIF9fcHl4X3Zfbm9kZXJlc3Vs dDsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8xNmdldF9wcm9wZXJ0eShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3ApIHsKLSsgIHN0 cnVjdCBtcHZfbm9kZSBfX3B5eF92X3Jlc3VsdDsKLSsgIGNoYXIgY29uc3QgKl9fcHl4X3ZfcHJv cF9jOwotICAgaW50IF9fcHl4X3ZfZXJyOwotLSAgdWludDY0X3QgX19weXhfdl9kYXRhX2lkOwot LSAgUHlPYmplY3QgKl9fcHl4X3ZfcmVzdWx0ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF92 X3VzZXJkYXRhcyA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdl92ID0gTlVMTDsKLSAgIFB5 T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0g ICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSAgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBO VUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0tICB1aW50NjRfdCBfX3B5eF90 XzQ7Ci0rICBjaGFyIGNvbnN0ICpfX3B5eF90XzQ7Ci0gICBpbnQgX19weXhfdF81OwotLSAgaW50 IF9fcHl4X3RfNjsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOwotICAgaW50IF9fcHl4 X3RfNzsKLSAgIGludCBfX3B5eF90Xzg7Ci0gICBjaGFyIGNvbnN0ICpfX3B5eF90Xzk7Ci1AQCAt MTExOTgsNDEgKzExODc2LDM5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzEyY29tbWFuZChzdHJ1Y3QgX19weXhfCi0gICBQeU9iamVj dCAqX19weXhfdF8xMyA9IE5VTEw7Ci0gICBQeU9iamVjdCAqX19weXhfdF8xNCA9IE5VTEw7Ci0g ICBQeU9iamVjdCAqX19weXhfdF8xNSA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF8xNiA9 IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF8xNyA9IE5VTEw7Ci0tICBjaGFyIGNvbnN0ICpf X3B5eF90XzE4OwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFyICpfX3B5 eF9maWxlbmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiY29tbWFuZCIsIDApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoImdldF9wcm9wZXJ0eSIsIDApOwotKyAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfcHJv cCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTQ0Ci0tICogICAg ICAgICBXcmFwczogbXB2X2NvbW1hbmRfbm9kZSBhbmQgbXB2X2NvbW1hbmRfbm9kZV9hc3luYwot LSAqICAgICAgICAgIiIiCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjE0 Ci0rICogICAgIGRlZiBnZXRfcHJvcGVydHkoc2VsZiwgcHJvcCk6Ci0rICogICAgICAgICAiIiJX cmFwczogbXB2X2dldF9wcm9wZXJ0eSIiIgotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjZGVmIG1wdl9ub2RlIG5v ZGUgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZShjbWRsaXN0LCBzZWxmLl9mb3JtYXRfZm9yKGNt ZGxpc3QpKQotLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlcmVzdWx0Ci0rICogICAgICAg ICBjZGVmIG1wdl9ub2RlIHJlc3VsdAotKyAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkK LSAgKi8KLSAgICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUwotICAgaWYgKHVubGlr ZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Ci0gICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2Vs Zi0+X2N0eCAhPSAwKSkpIHsKLSAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVy cm9yKTsKLS0gICAgICBfX1BZWF9FUlIoMCwgNTQ0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBf X1BZWF9FUlIoMCwgNjE0LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgfQotICAgfQotICAgI2VuZGlm Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTQ1Ci0tICogICAgICAg ICAiIiIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MTYKLSAgKiAgICAg ICAgIGFzc2VydCBzZWxmLl9jdHgKLS0gKiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZSA9IHNl bGYuX3ByZXBfbmF0aXZlX3ZhbHVlKGNtZGxpc3QsIHNlbGYuX2Zvcm1hdF9mb3IoY21kbGlzdCkp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGNkZWYgbXB2X25vZGUg bm9kZXJlc3VsdAotKyAqICAgICAgICAgY2RlZiBtcHZfbm9kZSByZXN1bHQKLSsgKiAgICAgICAg IHByb3AgPSBfc3RyZW5jKHByb3ApICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcAotICAqICAgICAgICAgY2RlZiBp bnQgZXJyCi0gICovCi0tICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgo UHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0X2Zvcik7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU0NSwgX19weXhfTDFfZXJyb3IpCi0rICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDYxNiwgX19weXhfTDFfZXJyb3Ip Ci0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgIF9fcHl4X3RfMyA9IE5VTEw7Ci0tICBp ZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90 XzIpKSkgewotKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhv ZF9DaGVjayhfX3B5eF90XzIpKSkgewotICAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VM RihfX3B5eF90XzIpOwotICAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKLSAgICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKLUBAIC0x MTI0MSw2MjUgKzExOTE3LDMzMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMmNvbW1hbmQoc3RydWN0IF9fcHl4XwotICAgICAgIF9f UHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0gICAgIH0KLSAgIH0KLS0gIF9f cHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf MiwgX19weXhfdF8zLCBfX3B5eF92X2NtZGxpc3QpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZyhfX3B5eF90XzIsIF9fcHl4X3ZfY21kbGlzdCk7Ci0rICBfX3B5eF90XzEgPSAoX19weXhfdF8z KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhf dl9wcm9wKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X3By b3ApOwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTQ1LCBfX3B5eF9MMV9lcnJvcikK LSsgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYxNiwgX19weXhfTDFf ZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgX19weXhfdl9ub2RlID0gKChzdHJ1Y3QgX19weXhf dnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+ X19weXhfdnRhYiktPl9wcmVwX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3ZfY21k bGlzdCwgX19weXhfdF8xKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOwotKyAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3Byb3AsIF9fcHl4X3RfMSk7Ci0rICBf X3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU0 OQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYxNwotKyAqICAgICAgICAg Y2RlZiBtcHZfbm9kZSByZXN1bHQKLSsgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCi0r ICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0tICogICAgICAgICBjZGVm IHVpbnQ2NF90IGRhdGFfaWQKLS0gKiAgICAgICAgIHJlc3VsdCA9IE5vbmUgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgdHJ5OgotLSAqICAgICAgICAgICAgIGRhdGFf aWQgPSBpZChkYXRhKQotLSAqLwotLSAgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotLSAgX19weXhf dl9yZXN1bHQgPSBQeV9Ob25lOwotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjU1MAotLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBkYXRhX2lkCi0tICogICAgICAgICBy ZXN1bHQgPSBOb25lCi0tICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgICAgICAgICBkYXRhX2lkID0gaWQoZGF0YSkKLS0gKiAgICAgICAgICAgICBp ZiBub3QgYXN5bmNocm9ub3VzOgotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKi8KLS0gIC8q dHJ5OiovIHsKLSsgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3Zf cHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNCkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9f UFlYX0VSUigwLCA2MTcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdl9wcm9wX2MgPSBfX3B5 eF90XzQ7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTEKLS0g KiAgICAgICAgIHJlc3VsdCA9IE5vbmUKLS0gKiAgICAgICAgIHRyeToKLS0gKiAgICAgICAgICAg ICBkYXRhX2lkID0gaWQoZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6Ci0tICogICAgICAgICAgICAgICAgIHdpdGgg bm9naWw6Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjE5Ci0rICogICAg ICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AKLSsgKiAgICAgICAgIGNkZWYgaW50 IGVycgotKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9nZXRfcHJvcGVydHkoCi0rICogICAgICAgICAg ICAgICAgIHNlbGYuX2N0eCwKLSAgKi8KLS0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF9idWlsdGluX2lkLCBfX3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NTEsIF9fcHl4X0w0X2Vycm9yKQotLSAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfQXNfdWlu dDY0X3QoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzQgPT0gKCh1aW50NjRfdCkt MSkpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNTUxLCBfX3B5eF9MNF9lcnJv cikKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICAgIF9f cHl4X3ZfZGF0YV9pZCA9IF9fcHl4X3RfNDsKLSsgIHsKLSsgICAgICAjaWZkZWYgV0lUSF9USFJF QUQKLSsgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKLSsgICAgICBQeV9VTkJMT0NLX1RIUkVB RFMKLSsgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0rICAgICAgI2VuZGlmCi0rICAg ICAgLyp0cnk6Ki8gewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTUyCi0tICogICAgICAgICB0cnk6Ci0tICogICAgICAgICAgICAgZGF0YV9pZCA9IGlkKGRhdGEp Ci0tICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAg ICAgICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZShzZWxmLl9jdHgsICZub2RlLCAmbm9k ZXJlc3VsdCkKLSsgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MjAK LSsgKiAgICAgICAgIGNkZWYgaW50IGVycgotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAg ICAgICAgICAgICBlcnIgPSBtcHZfZ2V0X3Byb3BlcnR5KCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKLSsgKiAgICAgICAgICAgICAg ICAgcHJvcF9jLAotICAqLwotLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUo X19weXhfdl9hc3luY2hyb25vdXMpOyBpZiAodW5saWtlbHkoX19weXhfdF81IDwgMCkpIF9fUFlY X0VSUigwLCA1NTIsIF9fcHl4X0w0X2Vycm9yKQotLSAgICBfX3B5eF90XzYgPSAoKCFfX3B5eF90 XzUpICE9IDApOwotLSAgICBpZiAoX19weXhfdF82KSB7Ci0rICAgICAgICBfX3B5eF92X2VyciA9 IG1wdl9nZXRfcHJvcGVydHkoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X3Byb3BfYywgTVBW X0ZPUk1BVF9OT0RFLCAoJl9fcHl4X3ZfcmVzdWx0KSk7Ci0rICAgICAgfQotIAotLSAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTMKLS0gKiAgICAgICAgICAgICBkYXRh X2lkID0gaWQoZGF0YSkKLS0gKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgotLSAq ICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlKHNlbGYuX2N0 eCwgJm5vZGUsICZub2RlcmVzdWx0KQotLSAqICAgICAgICAgICAgICAgICB0cnk6Ci0rICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYxOQotKyAqICAgICAgICAgY2RlZiBj b25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wCi0rICogICAgICAgICBjZGVmIGludCBlcnIKLSsgKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAg ICAgICAgICBlcnIgPSBtcHZfZ2V0X3Byb3BlcnR5KAotKyAqICAgICAgICAgICAgICAgICBzZWxm Ll9jdHgsCi0gICovCi0tICAgICAgewotKyAgICAgIC8qZmluYWxseToqLyB7Ci0rICAgICAgICAv Km5vcm1hbCBleGl0OiovewotICAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAgICAg ICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7Ci0tICAgICAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwot LSAgICAgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0rICAgICAgICAgIF9fUHl4X0Zh c3RHSUxfRm9yZ2V0KCk7Ci0rICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSAgICAgICAgICAg I2VuZGlmCi0tICAgICAgICAgIC8qdHJ5OiovIHsKLS0KLS0gICAgICAgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU0Ci0tICogICAgICAgICAgICAgaWYgbm90IGFzeW5j aHJvbm91czoKLS0gKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAg ICAgICAgICAgIGVyciA9IG1wdl9jb21tYW5kX25vZGUoc2VsZi5fY3R4LCAmbm9kZSwgJm5vZGVy ZXN1bHQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAgICAg dHJ5OgotLSAqICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NvbnZlcnRfbm9kZV92YWx1 ZShub2RlcmVzdWx0KSBpZiBlcnIgPj0gMCBlbHNlIE5vbmUKLS0gKi8KLS0gICAgICAgICAgICBf X3B5eF92X2VyciA9IG1wdl9jb21tYW5kX25vZGUoX19weXhfdl9zZWxmLT5fY3R4LCAoJl9fcHl4 X3Zfbm9kZSksICgmX19weXhfdl9ub2RlcmVzdWx0KSk7Ci0tICAgICAgICAgIH0KLS0KLS0gICAg ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1MwotLSAqICAgICAgICAg ICAgIGRhdGFfaWQgPSBpZChkYXRhKQotLSAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25v dXM6Ci0tICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1wdl9jb21tYW5kX25vZGUo c2VsZi5fY3R4LCAmbm9kZSwgJm5vZGVyZXN1bHQpCi0tICogICAgICAgICAgICAgICAgIHRyeToK LS0gKi8KLS0gICAgICAgICAgLypmaW5hbGx5OiovIHsKLS0gICAgICAgICAgICAvKm5vcm1hbCBl eGl0OiovewotLSAgICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgICAgICAg ICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOwotLSAgICAgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFE UwotLSAgICAgICAgICAgICAgI2VuZGlmCi0tICAgICAgICAgICAgICBnb3RvIF9fcHl4X0w5Owot LSAgICAgICAgICAgIH0KLS0gICAgICAgICAgICBfX3B5eF9MOTo7Ci0tICAgICAgICAgIH0KLSsg ICAgICAgICAgZ290byBfX3B5eF9MNTsKLSsgICAgICAgIH0KLSsgICAgICAgIF9fcHl4X0w1OjsK LSAgICAgICB9Ci0rICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjU1NQotLSAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAg ICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZShzZWxmLl9jdHgsICZub2RlLCAmbm9kZXJl c3VsdCkKLS0gKiAgICAgICAgICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVl KG5vZGVyZXN1bHQpIGlmIGVyciA+PSAwIGVsc2UgTm9uZQotLSAqICAgICAgICAgICAgICAgICBm aW5hbGx5OgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYyNgotKyAqICAg ICAgICAgICAgICAgICAmcmVzdWx0LAotKyAqICAgICAgICAgICAgICkKLSsgKiAgICAgICAgIGlm IGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBy YWlzZSBNUFZFcnJvcihlcnIpCi0rICogICAgICAgICB0cnk6Ci0gICovCi0tICAgICAgLyp0cnk6 Ki8gewotKyAgX19weXhfdF81ID0gKChfX3B5eF92X2VyciA8IDApICE9IDApOwotKyAgaWYgKHVu bGlrZWx5KF9fcHl4X3RfNSkpIHsKLSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo1NTYKLS0gKiAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1wdl9jb21tYW5k X25vZGUoc2VsZi5fY3R4LCAmbm9kZSwgJm5vZGVyZXN1bHQpCi0tICogICAgICAgICAgICAgICAg IHRyeToKLS0gKiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jb252ZXJ0X25vZGVfdmFs dWUobm9kZXJlc3VsdCkgaWYgZXJyID49IDAgZWxzZSBOb25lICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAgICAgZmluYWxseToKLS0gKiAgICAgICAgICAgICAg ICAgICAgIHdpdGggbm9naWw6Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo2MjcKLSsgKiAgICAgICAgICAgICApCi0rICogICAgICAgICBpZiBlcnIgPCAwOgotKyAqICAg ICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICAgICAgdHJ5OgotKyAqICAgICAgICAgICAgIHYgPSBfY29udmVydF9ub2RlX3Zh bHVlKHJlc3VsdCkKLSAgKi8KLS0gICAgICAgIGlmICgoKF9fcHl4X3ZfZXJyID49IDApICE9IDAp KSB7Ci0tICAgICAgICAgIF9fcHl4X3RfMiA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2 X19jb252ZXJ0X25vZGVfdmFsdWUoX19weXhfdl9ub2RlcmVzdWx0KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTU2LCBfX3B5eF9MMTFfZXJyb3IpCi0tICAgICAgICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgICAgICAgICBfX3B5eF90XzEgPSBfX3B5eF90 XzI7Ci0tICAgICAgICAgIF9fcHl4X3RfMiA9IDA7Ci0tICAgICAgICB9IGVsc2UgewotLSAgICAg ICAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0tICAgICAgICAgIF9fcHl4X3RfMSA9IFB5X05v bmU7Ci0tICAgICAgICB9Ci0tICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfcmVzdWx0 LCBfX3B5eF90XzEpOwotLSAgICAgICAgX19weXhfdF8xID0gMDsKLSsgICAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDYyNywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9t X2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDYyNywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotKyAg ICBfX3B5eF90XzYgPSBOVUxMOwotKyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVu bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Ci0rICAgICAgX19weXhfdF82ID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKLSsgICAgICBpZiAobGlrZWx5KF9fcHl4X3Rf NikpIHsKLSsgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElP TihfX3B5eF90XzIpOwotKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNik7Ci0rICAgICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzIsIGZ1bmN0aW9uKTsKLSAgICAgICB9Ci0rICAgIH0KLSsgICAgX19weXhfdF8xID0gKF9f cHl4X3RfNikgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzYs IF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhf dF8zKTsKLSsgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotKyAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSsgICAgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjI3LCBfX3B5eF9MMV9lcnJvcikKLSsgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOwotKyAgICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOwotKyAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgICAgX19QWVhfRVJS KDAsIDYyNywgX19weXhfTDFfZXJyb3IpCi0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjU1OAotLSAqICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NvbnZl cnRfbm9kZV92YWx1ZShub2RlcmVzdWx0KSBpZiBlcnIgPj0gMCBlbHNlIE5vbmUKLS0gKiAgICAg ICAgICAgICAgICAgZmluYWxseToKLS0gKiAgICAgICAgICAgICAgICAgICAgIHdpdGggbm9naWw6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAgICAgICAgICAg ICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2RlcmVzdWx0KQotLSAqICAgICAgICAgICAgIGVs c2U6Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MjYKLSsgKiAgICAg ICAgICAgICAgICAgJnJlc3VsdCwKLSsgKiAgICAgICAgICAgICApCi0rICogICAgICAgICBpZiBl cnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgcmFp c2UgTVBWRXJyb3IoZXJyKQotKyAqICAgICAgICAgdHJ5OgotICAqLwotLSAgICAgIC8qZmluYWxs eToqLyB7Ci0tICAgICAgICAvKm5vcm1hbCBleGl0OiovewotLSAgICAgICAgICB7Ci0tICAgICAg ICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUg Kl9zYXZlOwotLSAgICAgICAgICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0tICAgICAgICAgICAg ICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0tICAgICAgICAgICAgICAjZW5kaWYKLS0gICAg ICAgICAgICAgIC8qdHJ5OiovIHsKLSsgIH0KLSAKLS0gICAgICAgICAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1OQotLSAqICAgICAgICAgICAgICAgICBmaW5hbGx5 OgotLSAqICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICAg ICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2RlcmVzdWx0KSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgZWxzZToKLS0gKiAgICAgICAgICAg ICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoZGF0YV9pZCwgTm9uZSkK LSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MjgKLSsgKiAgICAgICAgIGlm IGVyciA8IDA6Ci0rICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQotKyAqICAgICAg ICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgdiA9 IF9jb252ZXJ0X25vZGVfdmFsdWUocmVzdWx0KQotKyAqICAgICAgICAgZmluYWxseToKLSAgKi8K LS0gICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50cygoJl9fcHl4X3Zfbm9kZXJl c3VsdCkpOwotLSAgICAgICAgICAgICAgfQotKyAgLyp0cnk6Ki8gewotIAotLSAgICAgICAgICAg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1OAotLSAqICAgICAgICAgICAg ICAgICAgICAgcmVzdWx0ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlcmVzdWx0KSBpZiBlcnIg Pj0gMCBlbHNlIE5vbmUKLS0gKiAgICAgICAgICAgICAgICAgZmluYWxseToKLS0gKiAgICAgICAg ICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2RlcmVz dWx0KQotLSAqICAgICAgICAgICAgIGVsc2U6Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo2MjkKLSsgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCi0rICog ICAgICAgICB0cnk6Ci0rICogICAgICAgICAgICAgdiA9IF9jb252ZXJ0X25vZGVfdmFsdWUocmVz dWx0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBmaW5hbGx5Ogot KyAqICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0gICovCi0tICAgICAgICAgICAgICAvKmZpbmFs bHk6Ki8gewotLSAgICAgICAgICAgICAgICAvKm5vcm1hbCBleGl0OiovewotLSAgICAgICAgICAg ICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgICAgICAgICAgICAgIF9fUHl4X0Zhc3RH SUxfRm9yZ2V0KCk7Ci0tICAgICAgICAgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotLSAgICAg ICAgICAgICAgICAgICNlbmRpZgotLSAgICAgICAgICAgICAgICAgIGdvdG8gX19weXhfTDE1Owot LSAgICAgICAgICAgICAgICB9Ci0tICAgICAgICAgICAgICAgIF9fcHl4X0wxNTo7Ci0tICAgICAg ICAgICAgICB9Ci0tICAgICAgICAgIH0KLS0gICAgICAgICAgZ290byBfX3B5eF9MMTI7Ci0tICAg ICAgICB9Ci0tICAgICAgICBfX3B5eF9MMTFfZXJyb3I6OwotLSAgICAgICAgLypleGNlcHRpb24g ZXhpdDoqL3sKLS0gICAgICAgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9kZWNsYXJlCi0tICAgICAg ICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfYXNzaWduCi0tICAgICAgICAgIF9fcHl4X3RfMTAgPSAw OyBfX3B5eF90XzExID0gMDsgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTMgPSAwOyBfX3B5eF90 XzE0ID0gMDsgX19weXhfdF8xNSA9IDA7Ci0tICAgICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKLS0gICAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOwotLSAgICAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7Ci0tICAgICAgICAgIGlmIChQWV9NQUpPUl9WRVJTSU9OID49IDMpIF9fUHl4 X0V4Y2VwdGlvblN3YXAoJl9fcHl4X3RfMTMsICZfX3B5eF90XzE0LCAmX19weXhfdF8xNSk7Ci0t ICAgICAgICAgIGlmICgoUFlfTUFKT1JfVkVSU0lPTiA8IDMpIHx8IHVubGlrZWx5KF9fUHl4X0dl dEV4Y2VwdGlvbigmX19weXhfdF8xMCwgJl9fcHl4X3RfMTEsICZfX3B5eF90XzEyKSA8IDApKSBf X1B5eF9FcnJGZXRjaCgmX19weXhfdF8xMCwgJl9fcHl4X3RfMTEsICZfX3B5eF90XzEyKTsKLS0g ICAgICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzEwKTsKLS0gICAgICAgICAgX19QeXhfWEdP VFJFRihfX3B5eF90XzExKTsKLS0gICAgICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzEyKTsK LS0gICAgICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzEzKTsKLS0gICAgICAgICAgX19QeXhf WEdPVFJFRihfX3B5eF90XzE0KTsKLS0gICAgICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE1 KTsKLS0gICAgICAgICAgX19weXhfdF83ID0gX19weXhfbGluZW5vOyBfX3B5eF90XzggPSBfX3B5 eF9jbGluZW5vOyBfX3B5eF90XzkgPSBfX3B5eF9maWxlbmFtZTsKLS0gICAgICAgICAgewotLSAg ICAgICAgICAgIHsKLS0gICAgICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAg ICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwotLSAgICAgICAgICAgICAgICBQeV9VTkJM T0NLX1RIUkVBRFMKLS0gICAgICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwot LSAgICAgICAgICAgICAgICAjZW5kaWYKLS0gICAgICAgICAgICAgICAgLyp0cnk6Ki8gewotKyAg ICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2Rl X3ZhbHVlKF9fcHl4X3ZfcmVzdWx0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgNjI5LCBfX3B5eF9MOF9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 Ci0rICAgIF9fcHl4X3ZfdiA9IF9fcHl4X3RfMTsKLSsgICAgX19weXhfdF8xID0gMDsKLSsgIH0K LSAKLS0gICAgICAgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTU5Ci0tICogICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0tICogICAgICAgICAgICAgICAgICAg ICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVf Y29udGVudHMoJm5vZGVyZXN1bHQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgICAgICBlbHNlOgotLSAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJl cGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjYzMQotKyAqICAgICAgICAgICAgIHYgPSBfY29udmVydF9ub2RlX3ZhbHVl KHJlc3VsdCkKLSsgKiAgICAgICAgIGZpbmFsbHk6Ci0rICogICAgICAgICAgICAgd2l0aCBub2dp bDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgICAgICBtcHZf ZnJlZV9ub2RlX2NvbnRlbnRzKCZyZXN1bHQpCi0rICogICAgICAgICByZXR1cm4gdgotICAqLwot LSAgICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoKCZfX3B5eF92X25vZGVy ZXN1bHQpKTsKLS0gICAgICAgICAgICAgICAgfQotKyAgLypmaW5hbGx5OiovIHsKLSsgICAgLypu b3JtYWwgZXhpdDoqL3sKLSsgICAgICB7Ci0rICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAot KyAgICAgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKLSsgICAgICAgICAgUHlfVU5CTE9DS19U SFJFQURTCi0rICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLSsgICAgICAgICAg I2VuZGlmCi0rICAgICAgICAgIC8qdHJ5OiovIHsKLSAKLS0gICAgICAgICAgICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1OAotLSAqICAgICAgICAgICAgICAgICAgICAg cmVzdWx0ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlcmVzdWx0KSBpZiBlcnIgPj0gMCBlbHNl IE5vbmUKLS0gKiAgICAgICAgICAgICAgICAgZmluYWxseToKLS0gKiAgICAgICAgICAgICAgICAg ICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg ICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2RlcmVzdWx0KQotLSAq ICAgICAgICAgICAgIGVsc2U6Ci0rICAgICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjYzMgotKyAqICAgICAgICAgZmluYWxseToKLSsgKiAgICAgICAgICAgICB3aXRo IG5vZ2lsOgotKyAqICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZyZXN1 bHQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHJldHVybiB2Ci0r ICogCi0gICovCi0tICAgICAgICAgICAgICAgIC8qZmluYWxseToqLyB7Ci0tICAgICAgICAgICAg ICAgICAgLypub3JtYWwgZXhpdDoqL3sKLS0gICAgICAgICAgICAgICAgICAgICNpZmRlZiBXSVRI X1RIUkVBRAotLSAgICAgICAgICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKLS0g ICAgICAgICAgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLS0gICAgICAgICAgICAgICAgICAg ICNlbmRpZgotLSAgICAgICAgICAgICAgICAgICAgZ290byBfX3B5eF9MMjA7Ci0tICAgICAgICAg ICAgICAgICAgfQotLSAgICAgICAgICAgICAgICAgIF9fcHl4X0wyMDo7Ci0tICAgICAgICAgICAg ICAgIH0KLS0gICAgICAgICAgICB9Ci0tICAgICAgICAgIH0KLS0gICAgICAgICAgaWYgKFBZX01B Sk9SX1ZFUlNJT04gPj0gMykgewotLSAgICAgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Rf MTMpOwotLSAgICAgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTQpOwotLSAgICAgICAg ICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTUpOwotLSAgICAgICAgICAgIF9fUHl4X0V4Y2Vw dGlvblJlc2V0KF9fcHl4X3RfMTMsIF9fcHl4X3RfMTQsIF9fcHl4X3RfMTUpOwotKyAgICAgICAg ICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoKCZfX3B5eF92X3Jlc3VsdCkpOwotICAgICAgICAg ICB9Ci0tICAgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTApOwotLSAgICAgICAgICBf X1B5eF9YR0lWRVJFRihfX3B5eF90XzExKTsKLS0gICAgICAgICAgX19QeXhfWEdJVkVSRUYoX19w eXhfdF8xMik7Ci0tICAgICAgICAgIF9fUHl4X0VyclJlc3RvcmUoX19weXhfdF8xMCwgX19weXhf dF8xMSwgX19weXhfdF8xMik7Ci0tICAgICAgICAgIF9fcHl4X3RfMTAgPSAwOyBfX3B5eF90XzEx ID0gMDsgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTMgPSAwOyBfX3B5eF90XzE0ID0gMDsgX19w eXhfdF8xNSA9IDA7Ci0tICAgICAgICAgIF9fcHl4X2xpbmVubyA9IF9fcHl4X3RfNzsgX19weXhf Y2xpbmVubyA9IF9fcHl4X3RfODsgX19weXhfZmlsZW5hbWUgPSBfX3B5eF90Xzk7Ci0tICAgICAg ICAgIGdvdG8gX19weXhfTDRfZXJyb3I7Ci0tICAgICAgICB9Ci0tICAgICAgICBfX3B5eF9MMTI6 OwotLSAgICAgIH0KLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTUyCi0tICogICAgICAgICB0cnk6Ci0tICogICAgICAgICAgICAgZGF0YV9pZCA9IGlkKGRhdGEp Ci0tICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAg ICAgICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZShzZWxmLl9jdHgsICZub2RlLCAmbm9k ZXJlc3VsdCkKLSsgICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYz MQotKyAqICAgICAgICAgICAgIHYgPSBfY29udmVydF9ub2RlX3ZhbHVlKHJlc3VsdCkKLSsgKiAg ICAgICAgIGZpbmFsbHk6Ci0rICogICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRl bnRzKCZyZXN1bHQpCi0rICogICAgICAgICByZXR1cm4gdgotICAqLwotLSAgICAgIGdvdG8gX19w eXhfTDY7Ci0rICAgICAgICAgIC8qZmluYWxseToqLyB7Ci0rICAgICAgICAgICAgLypub3JtYWwg ZXhpdDoqL3sKLSsgICAgICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotKyAgICAgICAgICAg ICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKLSsgICAgICAgICAgICAgIFB5X0JMT0NLX1RIUkVB RFMKLSsgICAgICAgICAgICAgICNlbmRpZgotKyAgICAgICAgICAgICAgZ290byBfX3B5eF9MMTI7 Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICAgIF9fcHl4X0wxMjo7Ci0rICAgICAgICAgIH0K LSsgICAgICB9Ci0rICAgICAgZ290byBfX3B5eF9MOTsKLSAgICAgfQotKyAgICBfX3B5eF9MOF9l cnJvcjo7Ci0rICAgIC8qZXhjZXB0aW9uIGV4aXQ6Ki97Ci0rICAgICAgX19QeXhfUHlUaHJlYWRT dGF0ZV9kZWNsYXJlCi0rICAgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24KLSsgICAgICBf X3B5eF90XzEwID0gMDsgX19weXhfdF8xMSA9IDA7IF9fcHl4X3RfMTIgPSAwOyBfX3B5eF90XzEz ID0gMDsgX19weXhfdF8xNCA9IDA7IF9fcHl4X3RfMTUgPSAwOwotKyAgICAgIF9fUHl4X1hERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0rICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBf X3B5eF90XzMgPSAwOwotKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKLSsgICAgICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAzKSBfX1B5eF9FeGNlcHRpb25T d2FwKCZfX3B5eF90XzEzLCAmX19weXhfdF8xNCwgJl9fcHl4X3RfMTUpOwotKyAgICAgIGlmICgo UFlfTUFKT1JfVkVSU0lPTiA8IDMpIHx8IHVubGlrZWx5KF9fUHl4X0dldEV4Y2VwdGlvbigmX19w eXhfdF8xMCwgJl9fcHl4X3RfMTEsICZfX3B5eF90XzEyKSA8IDApKSBfX1B5eF9FcnJGZXRjaCgm X19weXhfdF8xMCwgJl9fcHl4X3RfMTEsICZfX3B5eF90XzEyKTsKLSsgICAgICBfX1B5eF9YR09U UkVGKF9fcHl4X3RfMTApOwotKyAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMSk7Ci0rICAg ICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzEyKTsKLSsgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4 X3RfMTMpOwotKyAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xNCk7Ci0rICAgICAgX19QeXhf WEdPVFJFRihfX3B5eF90XzE1KTsKLSsgICAgICBfX3B5eF90XzcgPSBfX3B5eF9saW5lbm87IF9f cHl4X3RfOCA9IF9fcHl4X2NsaW5lbm87IF9fcHl4X3RfOSA9IF9fcHl4X2ZpbGVuYW1lOwotKyAg ICAgIHsKLSsgICAgICAgIHsKLSsgICAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAg ICAgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKLSsgICAgICAgICAgICBQeV9VTkJMT0NLX1RI UkVBRFMKLSsgICAgICAgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0rICAgICAgICAg ICAgI2VuZGlmCi0rICAgICAgICAgICAgLyp0cnk6Ki8gewotIAotLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NTYxCi0tICogICAgICAgICAgICAgICAgICAgICAgICAgbXB2 X2ZyZWVfbm9kZV9jb250ZW50cygmbm9kZXJlc3VsdCkKLS0gKiAgICAgICAgICAgICBlbHNlOgot LSAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChk YXRhX2lkLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAg ICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgotLSAqICAgICAgICAgICAgICAgICAgICAgX3Jl cGx5X3VzZXJkYXRhc1tkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEp Ci0rICAgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMyCi0r ICogICAgICAgICBmaW5hbGx5OgotKyAqICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAg ICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoJnJlc3VsdCkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIHYKLSsgKiAKLSAgKi8KLS0gICAg LyplbHNlKi8gewotLSAgICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIo X19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU2MSwgX19weXhfTDRfZXJyb3IpCi0tICAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRf RnJvbV91aW50NjRfdChfX3B5eF92X2RhdGFfaWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykp IF9fUFlYX0VSUigwLCA1NjEsIF9fcHl4X0w0X2Vycm9yKQotLSAgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOwotLSAgICAgIF9fcHl4X3RfMTYgPSBOVUxMOwotLSAgICAgIF9fcHl4X3RfOCA9 IDA7Ci0tICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2Rf Q2hlY2soX19weXhfdF8yKSkpIHsKLS0gICAgICAgIF9fcHl4X3RfMTYgPSBQeU1ldGhvZF9HRVRf U0VMRihfX3B5eF90XzIpOwotLSAgICAgICAgaWYgKGxpa2VseShfX3B5eF90XzE2KSkgewotLSAg ICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhf dF8yKTsKLS0gICAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMTYpOwotLSAgICAgICAgICBf X1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4 X3RfMiwgZnVuY3Rpb24pOwotLSAgICAgICAgICBfX3B5eF90XzggPSAxOwotLSAgICAgICAgfQot LSAgICAgIH0KLS0gICAgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCi0tICAgICAgaWYgKFB5RnVu Y3Rpb25fQ2hlY2soX19weXhfdF8yKSkgewotLSAgICAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBb M10gPSB7X19weXhfdF8xNiwgX19weXhfdF8zLCBQeV9Ob25lfTsKLS0gICAgICAgIF9fcHl4X3Rf MSA9IF9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8yLCBfX3B5eF90ZW1wKzEtX19w eXhfdF84LCAyK19fcHl4X3RfOCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDU2MSwgX19weXhfTDRfZXJyb3IpCi0tICAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf MTYpOyBfX3B5eF90XzE2ID0gMDsKLS0gICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot LSAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICAgICAg fSBlbHNlCi0tICAgICAgI2VuZGlmCi0tICAgICAgI2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwKLS0g ICAgICBpZiAoX19QeXhfUHlGYXN0Q0Z1bmN0aW9uX0NoZWNrKF9fcHl4X3RfMikpIHsKLS0gICAg ICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4X3RfMTYsIF9fcHl4X3RfMywgUHlf Tm9uZX07Ci0tICAgICAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChf X3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5eF90XzgsIDIrX19weXhfdF84KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTYxLCBfX3B5eF9MNF9lcnJvcikKLS0gICAg ICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNik7IF9fcHl4X3RfMTYgPSAwOwotLSAgICAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8z KTsgX19weXhfdF8zID0gMDsKLS0gICAgICB9IGVsc2UKLS0gICAgICAjZW5kaWYKLS0gICAgICB7 Ci0tICAgICAgICBfX3B5eF90XzE3ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzgpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMTcpKSBfX1BZWF9FUlIoMCwgNTYxLCBfX3B5eF9MNF9lcnJvcikKLS0g ICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzE3KTsKLS0gICAgICAgIGlmIChfX3B5eF90XzE2 KSB7Ci0tICAgICAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xNik7IFB5VHVwbGVfU0VUX0lU RU0oX19weXhfdF8xNywgMCwgX19weXhfdF8xNik7IF9fcHl4X3RfMTYgPSBOVUxMOwotLSAgICAg ICAgfQotLSAgICAgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzMpOwotLSAgICAgICAgUHlUdXBs ZV9TRVRfSVRFTShfX3B5eF90XzE3LCAwK19fcHl4X3RfOCwgX19weXhfdF8zKTsKLS0gICAgICAg IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLS0gICAgICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7 Ci0tICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMTcsIDErX19weXhfdF84LCBQeV9O b25lKTsKLS0gICAgICAgIF9fcHl4X3RfMyA9IDA7Ci0tICAgICAgICBfX3B5eF90XzEgPSBfX1B5 eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMiwgX19weXhfdF8xNywgTlVMTCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU2MSwgX19weXhfTDRfZXJyb3IpCi0tICAgICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzE3KTsgX19weXhfdF8xNyA9IDA7Ci0tICAgICAgfQotLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgICAgIF9fcHl4X3ZfdXNlcmRhdGFzID0gX19weXhf dF8xOwotLSAgICAgIF9fcHl4X3RfMSA9IDA7Ci0tCi0tICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjU2MgotLSAqICAgICAgICAgICAgIGVsc2U6Ci0tICogICAgICAgICAg ICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUp Ci0tICogICAgICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgICAgICBfcmVwbHlfdXNlcmRhdGFz W2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKLS0gKiAgICAgICAg ICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCi0tICovCi0tICAgICAgX19weXhfdF82ID0gKF9fcHl4 X3ZfdXNlcmRhdGFzID09IFB5X05vbmUpOwotLSAgICAgIF9fcHl4X3RfNSA9IChfX3B5eF90XzYg IT0gMCk7Ci0tICAgICAgaWYgKF9fcHl4X3RfNSkgewotKyAgICAgICAgICAgICAgbXB2X2ZyZWVf bm9kZV9jb250ZW50cygoJl9fcHl4X3ZfcmVzdWx0KSk7Ci0rICAgICAgICAgICAgfQotIAotLSAg ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2MwotLSAqICAgICAgICAg ICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25l KQotLSAqICAgICAgICAgICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKLS0gKiAgICAgICAg ICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0YXNbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVw bHlVc2VyRGF0YShkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAg ICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQotLSAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2ls OgotKyAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzEKLSsg KiAgICAgICAgICAgICB2ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShyZXN1bHQpCi0rICogICAgICAg ICBmaW5hbGx5OgotKyAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50cygm cmVzdWx0KQotKyAqICAgICAgICAgcmV0dXJuIHYKLSAgKi8KLS0gICAgICAgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU2MywgX19weXhfTDRfZXJyb3IpCi0t ICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgICAgIF9fcHl4X3RfMTcgPSBO VUxMOwotLSAgICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotLSAgICAgICAgICBfX3B5eF90XzE3ID0gUHlNZXRo b2RfR0VUX1NFTEYoX19weXhfdF8yKTsKLS0gICAgICAgICAgaWYgKGxpa2VseShfX3B5eF90XzE3 KSkgewotLSAgICAgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzIpOwotLSAgICAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzE3KTsK LS0gICAgICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgICAgICAgIF9fUHl4 X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0tICAgICAgICAgIH0KLSsgICAgICAg ICAgICAvKmZpbmFsbHk6Ki8gewotKyAgICAgICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKLSsg ICAgICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0rICAgICAgICAgICAgICAgIF9fUHl4 X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0rICAgICAgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSsg ICAgICAgICAgICAgICAgI2VuZGlmCi0rICAgICAgICAgICAgICAgIGdvdG8gX19weXhfTDE3Owot KyAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgICAgX19weXhfTDE3OjsKLSsgICAgICAgICAg ICB9Ci0gICAgICAgICB9Ci0tICAgICAgICBfX3B5eF90XzEgPSAoX19weXhfdF8xNykgPyBfX1B5 eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzE3LCBfX3B5eF92X2RhdGEp IDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfZGF0YSk7Ci0t ICAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTcpOyBfX3B5eF90XzE3ID0gMDsKLS0gICAg ICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU2MywgX19weXhfTDRf ZXJyb3IpCi0tICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgICAgICAgaWYgKHVubGlrZWx5 KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3Vz ZXJkYXRhcywgX19weXhfdl9kYXRhX2lkLCBfX3B5eF90XzEsIHVpbnQ2NF90LCAwLCBfX1B5eF9Q eUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNTYzLCBfX3B5 eF9MNF9lcnJvcikKLS0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOwotLSAgICAgICAg X19QeXhfREVDUkVGX1NFVChfX3B5eF92X3VzZXJkYXRhcywgX19weXhfdF8xKTsKLS0gICAgICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLQotLSAgICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2MgotLSAqICAgICAgICAgICAgIGVsc2U6 Ci0tICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0 KGRhdGFfaWQsIE5vbmUpCi0tICogICAgICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25l OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgICAgICBf cmVwbHlfdXNlcmRhdGFzW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0 YSkKLS0gKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCi0tICovCi0gICAgICAgfQot LQotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjQKLS0gKiAgICAg ICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6Ci0tICogICAgICAgICAgICAgICAgICAg ICBfcmVwbHlfdXNlcmRhdGFzW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEo ZGF0YSkKLS0gKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAg ICAgICAgICAgICAgICAgIGVyciA9IG1wdl9jb21tYW5kX25vZGVfYXN5bmMoc2VsZi5fY3R4LCBk YXRhX2lkLCAmbm9kZSkKLS0gKi8KLS0gICAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9H ZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3NfYWRkKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTY0LCBfX3B5eF9MNF9lcnJvcikKLS0gICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgICBfX3B5eF90XzE3ID0gTlVMTDsKLS0gICAg ICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5 eF90XzIpKSkgewotLSAgICAgICAgX19weXhfdF8xNyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfMik7Ci0tICAgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfMTcpKSB7Ci0tICAgICAgICAgIFB5 T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwotLSAg ICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xNyk7Ci0tICAgICAgICAgIF9fUHl4X0lOQ1JF RihmdW5jdGlvbik7Ci0tICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5j dGlvbik7Ci0tICAgICAgICB9Ci0rICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgewot KyAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMyk7Ci0rICAgICAgICBfX1B5eF9YR0lW RVJFRihfX3B5eF90XzE0KTsKLSsgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTUpOwot KyAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMywgX19weXhfdF8xNCwgX19w eXhfdF8xNSk7Ci0gICAgICAgfQotLSAgICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzE3KSA/IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzE3KSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzIpOwotLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF8xNyk7IF9fcHl4X3RfMTcgPSAwOwotLSAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDU2NCwgX19weXhfTDRfZXJyb3IpCi0tICAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7Ci0tICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 Ci0tICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICAgICAg X19QeXhfWEdJVkVSRUYoX19weXhfdF8xMCk7Ci0rICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhf dF8xMSk7Ci0rICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMik7Ci0rICAgICAgX19QeXhf RXJyUmVzdG9yZShfX3B5eF90XzEwLCBfX3B5eF90XzExLCBfX3B5eF90XzEyKTsKLSsgICAgICBf X3B5eF90XzEwID0gMDsgX19weXhfdF8xMSA9IDA7IF9fcHl4X3RfMTIgPSAwOyBfX3B5eF90XzEz ID0gMDsgX19weXhfdF8xNCA9IDA7IF9fcHl4X3RfMTUgPSAwOwotKyAgICAgIF9fcHl4X2xpbmVu byA9IF9fcHl4X3RfNzsgX19weXhfY2xpbmVubyA9IF9fcHl4X3RfODsgX19weXhfZmlsZW5hbWUg PSBfX3B5eF90Xzk7Ci0rICAgICAgZ290byBfX3B5eF9MMV9lcnJvcjsKLSsgICAgfQotKyAgICBf X3B5eF9MOTo7Ci0rICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjU2NQotLSAqICAgICAgICAgICAgICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tkYXRhX2lk XSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCi0tICogICAgICAgICAgICAgICAg IHVzZXJkYXRhcy5hZGQoKQotLSAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZf Y29tbWFuZF9ub2RlX2FzeW5jKHNlbGYuX2N0eCwgZGF0YV9pZCwgJm5vZGUpCi0tICogICAgICAg ICBmaW5hbGx5OgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzMwotKyAq ICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgICAgIG1wdl9mcmVlX25v ZGVfY29udGVudHMoJnJlc3VsdCkKLSsgKiAgICAgICAgIHJldHVybiB2ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAKLSsgKiAgICAgQF9lcnJvcnMKLSAgKi8KLS0gICAgICB7Ci0t ICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgICAgICBQeVRocmVhZFN0YXRlICpf c2F2ZTsKLS0gICAgICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0tICAgICAgICAgIF9fUHl4X0Zh c3RHSUxfUmVtZW1iZXIoKTsKLS0gICAgICAgICAgI2VuZGlmCi0tICAgICAgICAgIC8qdHJ5Oiov IHsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0rICBfX1B5eF9JTkNSRUYoX19weXhfdl92 KTsKLSsgIF9fcHl4X3IgPSBfX3B5eF92X3Y7Ci0rICBnb3RvIF9fcHl4X0wwOwotIAotLSAgICAg ICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjYKLS0gKiAgICAgICAg ICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCi0tICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6 Ci0tICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlX2FzeW5jKHNl bGYuX2N0eCwgZGF0YV9pZCwgJm5vZGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgIGZpbmFsbHk6Ci0tICogICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFs dWUobm9kZSkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MTIKLSsgKiAg ICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotKyAqIAotKyAqICAgICBkZWYgZ2V0X3Byb3BlcnR5 KHNlbGYsIHByb3ApOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAi IiJXcmFwczogbXB2X2dldF9wcm9wZXJ0eSIiIgotKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAotICAqLwotLSAgICAgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X2NvbW1hbmRfbm9kZV9hc3lu YyhfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfZGF0YV9pZCwgKCZfX3B5eF92X25vZGUpKTsK LS0gICAgICAgICAgfQotIAotLSAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTY1Ci0tICogICAgICAgICAgICAgICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2RhdGFf aWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKLS0gKiAgICAgICAgICAgICAg ICAgdXNlcmRhdGFzLmFkZCgpCi0tICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1w dl9jb21tYW5kX25vZGVfYXN5bmMoc2VsZi5fY3R4LCBkYXRhX2lkLCAmbm9kZSkKLS0gKiAgICAg ICAgIGZpbmFsbHk6Ci0tICovCi0tICAgICAgICAgIC8qZmluYWxseToqLyB7Ci0tICAgICAgICAg ICAgLypub3JtYWwgZXhpdDoqL3sKLS0gICAgICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAot LSAgICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKLS0gICAgICAgICAgICAgIFB5 X0JMT0NLX1RIUkVBRFMKLS0gICAgICAgICAgICAgICNlbmRpZgotLSAgICAgICAgICAgICAgZ290 byBfX3B5eF9MMjQ7Ci0tICAgICAgICAgICAgfQotLSAgICAgICAgICAgIF9fcHl4X0wyNDo7Ci0t ICAgICAgICAgIH0KLS0gICAgICB9Ci0tICAgIH0KLS0gICAgX19weXhfTDY6OwotLSAgfQotKyAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0rICBfX3B5eF9MMV9lcnJvcjo7Ci0rICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0rICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7Ci0rICBf X1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmdldF9wcm9wZXJ0 eSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19w eXhfciA9IE5VTEw7Ci0rICBfX3B5eF9MMDo7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfdik7 Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfcHJvcCk7Ci0rICBfX1B5eF9YR0lWRVJFRihfX3B5 eF9yKTsKLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIF9fcHl4 X3I7Ci0rfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2OAotLSAq ICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZV9hc3luYyhzZWxmLl9j dHgsIGRhdGFfaWQsICZub2RlKQotLSAqICAgICAgICAgZmluYWxseToKLS0gKiAgICAgICAgICAg ICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgICAgICBpZiBlcnIgPCAwOgotLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVy cm9yKGVycikKLS0gKi8KLS0gIC8qZmluYWxseToqLyB7Ci0tICAgIC8qbm9ybWFsIGV4aXQ6Ki97 Ci0tICAgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25h dGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfbm9kZSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDU2OCwgX19weXhfTDFfZXJyb3IpCi0tICAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4 X3RfMSA9IDA7Ci0tICAgICAgZ290byBfX3B5eF9MNTsKLS0gICAgfQotLSAgICBfX3B5eF9MNF9l cnJvcjo7Ci0tICAgIC8qZXhjZXB0aW9uIGV4aXQ6Ki97Ci0tICAgICAgX19QeXhfUHlUaHJlYWRT dGF0ZV9kZWNsYXJlCi0tICAgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24KLS0gICAgICBf X3B5eF90XzE1ID0gMDsgX19weXhfdF8xNCA9IDA7IF9fcHl4X3RfMTMgPSAwOyBfX3B5eF90XzEy ID0gMDsgX19weXhfdF8xMSA9IDA7IF9fcHl4X3RfMTAgPSAwOwotLSAgICAgIF9fUHl4X1hERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLS0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMTYpOyBfX3B5eF90XzE2ID0gMDsKLS0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTcp OyBfX3B5eF90XzE3ID0gMDsKLS0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7Ci0tICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAw OwotLSAgICAgIGlmIChQWV9NQUpPUl9WRVJTSU9OID49IDMpIF9fUHl4X0V4Y2VwdGlvblN3YXAo Jl9fcHl4X3RfMTIsICZfX3B5eF90XzExLCAmX19weXhfdF8xMCk7Ci0tICAgICAgaWYgKChQWV9N QUpPUl9WRVJTSU9OIDwgMykgfHwgdW5saWtlbHkoX19QeXhfR2V0RXhjZXB0aW9uKCZfX3B5eF90 XzE1LCAmX19weXhfdF8xNCwgJl9fcHl4X3RfMTMpIDwgMCkpIF9fUHl4X0VyckZldGNoKCZfX3B5 eF90XzE1LCAmX19weXhfdF8xNCwgJl9fcHl4X3RfMTMpOwotLSAgICAgIF9fUHl4X1hHT1RSRUYo X19weXhfdF8xNSk7Ci0tICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE0KTsKLS0gICAgICBf X1B5eF9YR09UUkVGKF9fcHl4X3RfMTMpOwotLSAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8x Mik7Ci0tICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzExKTsKLS0gICAgICBfX1B5eF9YR09U UkVGKF9fcHl4X3RfMTApOwotLSAgICAgIF9fcHl4X3RfOCA9IF9fcHl4X2xpbmVubzsgX19weXhf dF83ID0gX19weXhfY2xpbmVubzsgX19weXhfdF8xOCA9IF9fcHl4X2ZpbGVuYW1lOwotLSAgICAg IHsKLS0gICAgICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJl ZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X25vZGUpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NjgsIF9fcHl4X0wyNl9lcnJvcikKLS0gICAgICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7Ci0tICAgICAgfQotLSAgICAgIGlmIChQWV9NQUpPUl9WRVJTSU9O ID49IDMpIHsKLS0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTIpOwotLSAgICAgICAg X19QeXhfWEdJVkVSRUYoX19weXhfdF8xMSk7Ci0tICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5 eF90XzEwKTsKLS0gICAgICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9fcHl4X3RfMTIsIF9fcHl4 X3RfMTEsIF9fcHl4X3RfMTApOwotLSAgICAgIH0KLS0gICAgICBfX1B5eF9YR0lWRVJFRihfX3B5 eF90XzE1KTsKLS0gICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzE0KTsKLS0gICAgICBfX1B5 eF9YR0lWRVJFRihfX3B5eF90XzEzKTsKLS0gICAgICBfX1B5eF9FcnJSZXN0b3JlKF9fcHl4X3Rf MTUsIF9fcHl4X3RfMTQsIF9fcHl4X3RfMTMpOwotLSAgICAgIF9fcHl4X3RfMTUgPSAwOyBfX3B5 eF90XzE0ID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3RfMTIgPSAwOyBfX3B5eF90XzExID0g MDsgX19weXhfdF8xMCA9IDA7Ci0tICAgICAgX19weXhfbGluZW5vID0gX19weXhfdF84OyBfX3B5 eF9jbGluZW5vID0gX19weXhfdF83OyBfX3B5eF9maWxlbmFtZSA9IF9fcHl4X3RfMTg7Ci0tICAg ICAgZ290byBfX3B5eF9MMV9lcnJvcjsKLS0gICAgICBfX3B5eF9MMjZfZXJyb3I6OwotLSAgICAg IGlmIChQWV9NQUpPUl9WRVJTSU9OID49IDMpIHsKLS0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3RfMTIpOwotLSAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMSk7Ci0tICAgICAg ICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEwKTsKLS0gICAgICAgIF9fUHl4X0V4Y2VwdGlvblJl c2V0KF9fcHl4X3RfMTIsIF9fcHl4X3RfMTEsIF9fcHl4X3RfMTApOwotLSAgICAgIH0KLS0gICAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTUpOyBfX3B5eF90XzE1ID0gMDsKLS0gICAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMTQpOyBfX3B5eF90XzE0ID0gMDsKLS0gICAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMTMpOyBfX3B5eF90XzEzID0gMDsKLS0gICAgICBfX3B5eF90XzEyID0gMDsg X19weXhfdF8xMSA9IDA7IF9fcHl4X3RfMTAgPSAwOwotLSAgICAgIGdvdG8gX19weXhfTDFfZXJy b3I7Ci0tICAgIH0KLS0gICAgX19weXhfTDU6OwotLSAgfQotLQotLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjU2OQotLSAqICAgICAgICAgZmluYWxseToKLS0gKiAgICAgICAg ICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlKQotLSAqICAgICAgICAgaWYgZXJyIDwg MDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIHJhaXNlIE1Q VkVycm9yKGVycikKLS0gKiAgICAgICAgIHJldHVybiByZXN1bHQKLS0gKi8KLS0gIF9fcHl4X3Rf NSA9ICgoX19weXhfdl9lcnIgPCAwKSAhPSAwKTsKLS0gIGlmICh1bmxpa2VseShfX3B5eF90XzUp KSB7Ci0tCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzAKLS0gKiAg ICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlKQotLSAqICAgICAgICAgaWYg ZXJyIDwgMDoKLS0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHJldHVybiByZXN1bHQKLS0gKiAKLS0gKi8K LS0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19NUFZF cnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU3MCwgX19weXhf TDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgICBfX3B5eF90XzE3 ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMTcpKSBfX1BZWF9FUlIoMCwgNTcwLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMTcpOwotLSAgICBfX3B5eF90XzMgPSBOVUxMOwotLSAgICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7 Ci0tICAgICAgX19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKLS0gICAg ICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKLS0gICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9 IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwotLSAgICAgICAgX19QeXhfSU5DUkVG KF9fcHl4X3RfMyk7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgICAg X19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKLS0gICAgICB9Ci0tICAgIH0K LS0gICAgX19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3Mo X19weXhfdF8yLCBfX3B5eF90XzMsIF9fcHl4X3RfMTcpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMTcpOwotLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Myk7IF9fcHl4X3RfMyA9IDA7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzE3KTsgX19weXhf dF8xNyA9IDA7Ci0tICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU3 MCwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gICAgX19QeXhfUmFpc2Uo X19weXhfdF8xLCAwLCAwLCAwKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4 X3RfMSA9IDA7Ci0tICAgIF9fUFlYX0VSUigwLCA1NzAsIF9fcHl4X0wxX2Vycm9yKQotLQotLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY5Ci0tICogICAgICAgICBmaW5h bGx5OgotLSAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKG5vZGUpCi0tICog ICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAg ICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQotLSAqICAgICAgICAgcmV0dXJuIHJlc3VsdAot LSAqLwotLSAgfQotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU3MQot LSAqICAgICAgICAgaWYgZXJyIDwgMDoKLS0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihl cnIpCi0tICogICAgICAgICByZXR1cm4gcmVzdWx0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAKLS0gKiAgICAgQF9lcnJvcnMKLS0gKi8KLS0gIF9fUHl4X1hERUNSRUYoX19weXhf cik7Ci0tICBfX1B5eF9JTkNSRUYoX19weXhfdl9yZXN1bHQpOwotLSAgX19weXhfciA9IF9fcHl4 X3ZfcmVzdWx0OwotLSAgZ290byBfX3B5eF9MMDsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1MzAKLS0gKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5zdHJpbmcpCi0t ICogCi0tICogICAgIGRlZiBjb21tYW5kKHNlbGYsICpjbWRsaXN0LCBhc3luY2hyb25vdXM9RmFs c2UsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg ICIiIlNlbmQgYSBjb21tYW5kIHRvIG1wdi4KLS0gKiAKLS0gKi8KLS0KLS0gIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLwotLSAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzEpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotLSAgX19QeXhfWERFQ1JFRihf X3B5eF90XzMpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE2KTsKLS0gIF9fUHl4X1hERUNS RUYoX19weXhfdF8xNyk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5Db250ZXh0LmNvbW1hbmQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2Zp bGVuYW1lKTsKLS0gIF9fcHl4X3IgPSBOVUxMOwotLSAgX19weXhfTDA6OwotLSAgX19QeXhfWERF Q1JFRihfX3B5eF92X3Jlc3VsdCk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfdXNlcmRhdGFz KTsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0tCi0tLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjU3NAotLSAqIAotLSAqICAgICBAX2Vycm9ycwotLSAqICAgICBkZWYg Z2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICIiIkdldHMgdGhlIHZhbHVlIG9mIGEgcHJvcGVy dHkgYXN5bmNocm9ub3VzbHkuCi0tICogCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjYzNgotKyAqIAotKyAqICAgICBAX2Vycm9ycwotKyAqICAgICBkZWYgc2V0X3Byb3BlcnR5 KHNlbGYsIHByb3AsIHZhbHVlPVRydWUsIGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9z ZXRfcHJvcGVydHkgYW5kIG1wdl9zZXRfcHJvcGVydHlfYXN5bmMiIiIKLSsgKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHgKLSAgKi8KLSAKLSAvKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE1Z2V0X3By b3BlcnR5X2FzeW5jKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdz LCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLwotLXN0YXRpYyBjaGFyIF9fcHl4X2Rv Y185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTRnZXRfcHJvcGVydHlfYXN5bmNbXSA9 ICJHZXRzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGFzeW5jaHJvbm91c2x5LlxuXG4gICAgICAg IEFyZ3VtZW50czpcbiAgICAgICAgcHJvcDogUHJvcGVydHkgdG8gZ2V0IHRoZSB2YWx1ZSBvZi5c blxuICAgICAgICBLZXl3b3JkIGFyZ3VtZW50czpcbiAgICAgICAgZGF0YTogVmFsdWUgdG8gYmUg cGFzc2VkIGludG8gdGhlIHJlcGx5X3VzZXJkYXRhIG9mIHRoZSByZXNwb25zZSBldmVudC5cbiAg ICAgICAgV3JhcHM6IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMiOwotLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE1Z2V0X3Byb3BlcnR5X2Fz eW5jKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVj dCAqX19weXhfa3dkcykgewotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzE5c2V0X3Byb3BlcnR5KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLwot K3N0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThz ZXRfcHJvcGVydHlbXSA9ICJXcmFwczogbXB2X3NldF9wcm9wZXJ0eSBhbmQgbXB2X3NldF9wcm9w ZXJ0eV9hc3luYyI7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMTlzZXRfcHJvcGVydHkoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlP YmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7Ci0gICBQeU9iamVjdCAq X19weXhfdl9wcm9wID0gMDsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlID0gMDsKLSsgIFB5 T2JqZWN0ICpfX3B5eF92X2FzeW5jaHJvbm91cyA9IDA7Ci0gICBQeU9iamVjdCAqX19weXhfdl9k YXRhID0gMDsKLSAgIGludCBfX3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgUHlPYmplY3Qg Kl9fcHl4X3IgPSAwOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJnZXRfcHJvcGVydHlfYXN5bmMgKHdyYXBwZXIpIiwgMCk7Ci0r ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X3Byb3BlcnR5ICh3cmFwcGVyKSIsIDAp OwotICAgewotLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9f cHl4X25fc19wcm9wLCZfX3B5eF9uX3NfZGF0YSwwfTsKLS0gICAgUHlPYmplY3QqIHZhbHVlc1sy XSA9IHswLDB9OwotLSAgICB2YWx1ZXNbMV0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7Ci0rICAg IHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3Byb3As Jl9fcHl4X25fc192YWx1ZSwmX19weXhfbl9zX2FzeW5jaHJvbm91cywmX19weXhfbl9zX2RhdGEs MH07Ci0rICAgIFB5T2JqZWN0KiB2YWx1ZXNbNF0gPSB7MCwwLDAsMH07Ci0rICAgIHZhbHVlc1sx XSA9ICgoUHlPYmplY3QgKilQeV9UcnVlKTsKLSsgICAgdmFsdWVzWzJdID0gKChQeU9iamVjdCAq KVB5X0ZhbHNlKTsKLSsgICAgdmFsdWVzWzNdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOwotICAg ICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKLSAgICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7 Ci0gICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19w eXhfYXJncyk7Ci0gICAgICAgc3dpdGNoIChwb3NfYXJncykgewotKyAgICAgICAgY2FzZSAgNDog dmFsdWVzWzNdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAzKTsKLSsgICAgICAgIENZ VEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVf R0VUX0lURU0oX19weXhfYXJncywgMik7Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0g ICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3Ms IDEpOwotICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotICAgICAgICAgY2FzZSAgMTogdmFs dWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKLUBAIC0xMTg3NSwxNSAr MTIyNTgsMzEgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMTVnZXRfcHJvcGVydHlfYXN5bmMoUHkKLSAgICAgICAgIENZVEhPTl9GQUxM VEhST1VHSDsKLSAgICAgICAgIGNhc2UgIDE6Ci0gICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsK LS0gICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19w eXhfa3dkcywgX19weXhfbl9zX2RhdGEpOwotKyAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBf X1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfdmFsdWUpOwotICAg ICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzFdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQotICAg ICAgICAgfQotKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAgY2FzZSAgMjoK LSsgICAgICAgIGlmIChrd19hcmdzID4gMCkgewotKyAgICAgICAgICBQeU9iamVjdCogdmFsdWUg PSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfYXN5bmNocm9u b3VzKTsKLSsgICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1syXSA9IHZhbHVlOyBrd19hcmdz LS07IH0KLSsgICAgICAgIH0KLSsgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAg IGNhc2UgIDM6Ci0rICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKLSsgICAgICAgICAgUHlPYmpl Y3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9z X2RhdGEpOwotKyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzNdID0gdmFsdWU7IGt3X2Fy Z3MtLTsgfQotKyAgICAgICAgfQotICAgICAgIH0KLSAgICAgICBpZiAodW5saWtlbHkoa3dfYXJn cyA+IDApKSB7Ci0tICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdv cmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJn ZXRfcHJvcGVydHlfYXN5bmMiKSA8IDApKSBfX1BZWF9FUlIoMCwgNTc0LCBfX3B5eF9MM19lcnJv cikKLSsgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19w eXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgInNldF9wcm9w ZXJ0eSIpIDwgMCkpIF9fUFlYX0VSUigwLCA2MzYsIF9fcHl4X0wzX2Vycm9yKQotICAgICAgIH0K LSAgICAgfSBlbHNlIHsKLSAgICAgICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cykpIHsKLSsgICAgICAgIGNhc2UgIDQ6IHZhbHVlc1szXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMyk7Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNl ICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOwotKyAgICAg ICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotICAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlU dXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKLSAgICAgICAgIENZVEhPTl9GQUxMVEhST1VH SDsKLSAgICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhf YXJncywgMCk7Ci1AQCAtMTE4OTIsNzAgKzEyMjkxLDgzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE1Z2V0X3Byb3BlcnR5X2FzeW5j KFB5Ci0gICAgICAgfQotICAgICB9Ci0gICAgIF9fcHl4X3ZfcHJvcCA9IHZhbHVlc1swXTsKLS0g ICAgX19weXhfdl9kYXRhID0gdmFsdWVzWzFdOwotKyAgICBfX3B5eF92X3ZhbHVlID0gdmFsdWVz WzFdOwotKyAgICBfX3B5eF92X2FzeW5jaHJvbm91cyA9IHZhbHVlc1syXTsKLSsgICAgX19weXhf dl9kYXRhID0gdmFsdWVzWzNdOwotICAgfQotICAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBh Y2tpbmdfZG9uZTsKLSAgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKLS0gIF9fUHl4X1JhaXNl QXJndHVwbGVJbnZhbGlkKCJnZXRfcHJvcGVydHlfYXN5bmMiLCAwLCAxLCAyLCBQeVR1cGxlX0dF VF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDU3NCwgX19weXhfTDNfZXJyb3IpCi0r ICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgic2V0X3Byb3BlcnR5IiwgMCwgMSwgNCwgUHlU dXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA2MzYsIF9fcHl4X0wzX2Vy cm9yKQotICAgX19weXhfTDNfZXJyb3I6OwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0 ZXIubGlicy5tcHYuQ29udGV4dC5nZXRfcHJvcGVydHlfYXN5bmMiLCBfX3B5eF9jbGluZW5vLCBf X3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2LkNvbnRleHQuc2V0X3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19w eXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRl eHQoKTsKLSAgIHJldHVybiBOVUxMOwotICAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2Rv bmU6OwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xNGdldF9wcm9wZXJ0eV9hc3luYygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X3Byb3AsIF9fcHl4X3ZfZGF0 YSk7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzE4c2V0X3Byb3BlcnR5KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfcHJvcCwgX19weXhfdl92YWx1ZSwgX19w eXhfdl9hc3luY2hyb25vdXMsIF9fcHl4X3ZfZGF0YSk7Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9f cHl4X3I7Ci0gfQotIAotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzE0Z2V0X3Byb3BlcnR5X2FzeW5jKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3ZfcHJvcCwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSkgewotLSAgdWludDY0X3QgX19weXhfdl9p ZF9kYXRhOwotLSAgUHlPYmplY3QgKl9fcHl4X3ZfdXNlcmRhdGFzID0gTlVMTDsKLS0gIGNoYXIg Y29uc3QgKl9fcHl4X3ZfcHJvcF9jOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3ZfcHJvcCwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUsIFB5T2JqZWN0ICpfX3B5eF92X2Fz eW5jaHJvbm91cywgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSkgewotKyAgZW51bSBtcHZfZm9ybWF0 IF9fcHl4X3ZfZm9ybWF0OwotKyAgc3RydWN0IG1wdl9ub2RlIF9fcHl4X3ZfdjsKLSAgIGludCBf X3B5eF92X2VycjsKLSsgIHVpbnQ2NF90IF9fcHl4X3ZfZGF0YV9pZDsKLSsgIGNoYXIgY29uc3Qg Kl9fcHl4X3ZfcHJvcF9jOwotKyAgUHlPYmplY3QgKl9fcHl4X3ZfdXNlcmRhdGFzID0gTlVMTDsK LSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCi0gICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSAgIFB5T2JqZWN0ICpfX3B5eF90 XzIgPSBOVUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0tICBQeV9oYXNoX3Qg X19weXhfdF80OwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7Ci0rICBlbnVtIG1wdl9m b3JtYXQgX19weXhfdF80OwotKyAgY2hhciBjb25zdCAqX19weXhfdF81OwotICAgaW50IF9fcHl4 X3RfNjsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxMOwotLSAgaW50IF9fcHl4X3RfODsK LS0gIGludCBfX3B5eF90Xzk7Ci0tICBjaGFyIGNvbnN0ICpfX3B5eF90XzEwOwotKyAgaW50IF9f cHl4X3RfNzsKLSsgIFB5X2hhc2hfdCBfX3B5eF90Xzg7Ci0rICBQeU9iamVjdCAqX19weXhfdF85 ID0gTlVMTDsKLSsgIGludCBfX3B5eF90XzEwOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMTEgPSBO VUxMOwotKyAgaW50IF9fcHl4X3RfMTI7Ci0rICBjaGFyIGNvbnN0ICpfX3B5eF90XzEzOwotKyAg UHlPYmplY3QgKl9fcHl4X3RfMTQgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMTUgPSBO VUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMTYgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4 X3RfMTcgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMTggPSBOVUxMOwotKyAgUHlPYmpl Y3QgKl9fcHl4X3RfMTkgPSBOVUxMOwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25z dCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7 Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0X3Byb3BlcnR5X2FzeW5jIiwgMCk7 Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X3Byb3BlcnR5IiwgMCk7Ci0gICBf X1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo1ODMKLS0gKiAgICAgICAgIGRhdGE6IFZhbHVlIHRvIGJlIHBhc3NlZCBpbnRv IHRoZSByZXBseV91c2VyZGF0YSBvZiB0aGUgcmVzcG9uc2UgZXZlbnQuCi0tICogICAgICAgICBX cmFwczogbXB2X2dldF9wcm9wZXJ0eV9hc3luYyIiIgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjYzOAotKyAqICAgICBkZWYgc2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIHZh bHVlPVRydWUsIGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKToKLSsgKiAgICAgICAgICIi IldyYXBzOiBtcHZfc2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIiCi0g ICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSAgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCi0tICogICAgICAgICBjZGVmIHVpbnQ2 NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQotKyAqICAgICAgICAgY2RlZiBtcHZf Zm9ybWF0IGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCi0gICovCi0gICAjaWZuZGVm IENZVEhPTl9XSVRIT1VUX0FTU0VSVElPTlMKLSAgIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVG bGFnKSkgewotICAgICBpZiAodW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7 Ci0gICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7Ci0tICAgICAgX19Q WVhfRVJSKDAsIDU4MywgX19weXhfTDFfZXJyb3IpCi0rICAgICAgX19QWVhfRVJSKDAsIDYzOCwg X19weXhfTDFfZXJyb3IpCi0gICAgIH0KLSAgIH0KLSAgICNlbmRpZgotIAotLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4NAotLSAqICAgICAgICAgV3JhcHM6IG1wdl9nZXRf cHJvcGVydHlfYXN5bmMiIiIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 MzkKLSsgKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3By b3BlcnR5X2FzeW5jIiIiCi0gICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0gICogICAgICAg ICBwcm9wID0gX3N0cmVuYyhwcm9wKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgICAgICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQotLSAq ICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9u ZSkKLSsgKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9y KHZhbHVlKQotKyAqICAgICAgICAgY2RlZiBtcHZfbm9kZSB2ID0gc2VsZi5fcHJlcF9uYXRpdmVf dmFsdWUodmFsdWUsIGZvcm1hdCkKLSAgKi8KLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgNTg0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE1vZHVsZUdsb2Jh bE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgNjM5LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOwotICAgX19weXhfdF8zID0gTlVMTDsKLSAgIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLUBAIC0xMTk2 OSw1MjMgKzEyMzgxLDQ4MCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8xNGdldF9wcm9wZXJ0eV9hc3luYyhzdAotICAgfQotICAgX19w eXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8y LCBfX3B5eF90XzMsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9f cHl4X3RfMiwgX19weXhfdl9wcm9wKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19w eXhfdF8zID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU4 NCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA2MzksIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0g ICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSAgIF9fUHl4X0RFQ1JF Rl9TRVQoX19weXhfdl9wcm9wLCBfX3B5eF90XzEpOwotICAgX19weXhfdF8xID0gMDsKLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODUKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2NDAKLSAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSAg KiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCi0tICogICAgICAgICBjZGVmIHVpbnQ2NF90 IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9k YXRhLCBOb25lKQotLSAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6Ci0tICovCi0tICBf X3B5eF90XzQgPSBQeU9iamVjdF9IYXNoKF9fcHl4X3ZfZGF0YSk7IGlmICh1bmxpa2VseShfX3B5 eF90XzQgPT0gKChQeV9oYXNoX3QpLTEpKSkgX19QWVhfRVJSKDAsIDU4NSwgX19weXhfTDFfZXJy b3IpCi0tICBfX3B5eF92X2lkX2RhdGEgPSAoKHVpbnQ2NF90KV9fcHl4X3RfNCk7Ci0tCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTg2Ci0tICogICAgICAgICBwcm9wID0g X3N0cmVuYyhwcm9wKQotLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2 NF90Pmhhc2goZGF0YSkKLS0gKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRh dGEuZ2V0KGlkX2RhdGEsIE5vbmUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgotLSAqICAgICAgICAgICAgIHNlbGYucmVwbHlf dXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQotKyAq ICAgICAgICAgY2RlZiBtcHZfZm9ybWF0IGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGNkZWYgbXB2X25vZGUg diA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCi0rICogICAgICAgICBj ZGVmIGludCBlcnIKLSAgKi8KLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU4NiwgX19weXhfTDFfZXJyb3IpCi0rICBf X3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92 X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0X2Zvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDY0MCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhf dF8yKTsKLS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoX19weXhfdl9p ZF9kYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTg2LCBfX3B5 eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgX19weXhfdF81ID0g TlVMTDsKLS0gIF9fcHl4X3RfNiA9IDA7Ci0rICBfX3B5eF90XzMgPSBOVUxMOwotICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkp IHsKLS0gICAgX19weXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKLS0gICAg aWYgKGxpa2VseShfX3B5eF90XzUpKSB7Ci0rICAgIF9fcHl4X3RfMyA9IFB5TWV0aG9kX0dFVF9T RUxGKF9fcHl4X3RfMik7Ci0rICAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkgewotICAgICAgIFB5 T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwotLSAg ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzMpOwotICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0gICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKLS0gICAgICBfX3B5eF90XzYgPSAxOwotLSAgICB9 Ci0tICB9Ci0tICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCi0tICBpZiAoUHlGdW5jdGlvbl9DaGVj ayhfX3B5eF90XzIpKSB7Ci0tICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4X3Rf NSwgX19weXhfdF8zLCBQeV9Ob25lfTsKLS0gICAgX19weXhfdF8xID0gX19QeXhfUHlGdW5jdGlv bl9GYXN0Q2FsbChfX3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5eF90XzYsIDIrX19weXhfdF82 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTg2LCBfX3B5eF9MMV9l cnJvcikKLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7 IF9fcHl4X3RfMyA9IDA7Ci0tICB9IGVsc2UKLS0gICNlbmRpZgotLSAgI2lmIENZVEhPTl9GQVNU X1BZQ0NBTEwKLS0gIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2soX19weXhfdF8yKSkg ewotLSAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzUsIF9fcHl4X3RfMywg UHlfTm9uZX07Ci0tICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9f cHl4X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODYsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0tICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKLS0gIH0gZWxzZQotLSAgI2VuZGlmCi0tICB7Ci0tICAgIF9fcHl4X3RfNyA9IFB5VHVwbGVf TmV3KDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwg NTg2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0tICAg IGlmIChfX3B5eF90XzUpIHsKLS0gICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNSk7IFB5VHVw bGVfU0VUX0lURU0oX19weXhfdF83LCAwLCBfX3B5eF90XzUpOyBfX3B5eF90XzUgPSBOVUxMOwot ICAgICB9Ci0tICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8zKTsKLS0gICAgUHlUdXBsZV9TRVRf SVRFTShfX3B5eF90XzcsIDArX19weXhfdF82LCBfX3B5eF90XzMpOwotLSAgICBfX1B5eF9JTkNS RUYoUHlfTm9uZSk7Ci0tICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7Ci0tICAgIFB5VHVwbGVf U0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfNiwgUHlfTm9uZSk7Ci0tICAgIF9fcHl4X3Rf MyA9IDA7Ci0tICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBf X3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1 ODYsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0gICB9Ci0rICBfX3B5eF90 XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9f cHl4X3RfMywgX19weXhfdl92YWx1ZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfMiwgX19weXhfdl92YWx1ZSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4 X3RfMyA9IDA7Ci0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NDAs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gIF9fcHl4X3ZfdXNlcmRhdGFzID0g X19weXhfdF8xOwotLSAgX19weXhfdF8xID0gMDsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1ODcKLS0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1 aW50NjRfdD5oYXNoKGRhdGEpCi0tICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3Vz ZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQotLSAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5v bmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBzZWxmLnJl cGx5X3VzZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkK LS0gKiAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQotLSAqLwotLSAgX19weXhfdF84ID0gKF9fcHl4 X3ZfdXNlcmRhdGFzID09IFB5X05vbmUpOwotLSAgX19weXhfdF85ID0gKF9fcHl4X3RfOCAhPSAw KTsKLS0gIGlmIChfX3B5eF90XzkpIHsKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjU4OAotLSAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0 YS5nZXQoaWRfZGF0YSwgTm9uZSkKLS0gKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgot LSAqICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMg PSBfUmVwbHlVc2VyRGF0YShkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgICAgICB1c2VyZGF0YXMuYWRkKCkKLS0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJv cF9jID0gcHJvcAotLSAqLwotLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf MiwgX19weXhfbl9zX1JlcGx5VXNlckRhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9f UFlYX0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8yKTsKLS0gICAgX19weXhfdF83ID0gTlVMTDsKLS0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotLSAgICAgIF9f cHl4X3RfNyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Ci0tICAgICAgaWYgKGxpa2Vs eShfX3B5eF90XzcpKSB7Ci0tICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9H RVRfRlVOQ1RJT04oX19weXhfdF8yKTsKLS0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90Xzcp OwotLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAgICAgIF9fUHl4X0RFQ1JF Rl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0tICAgICAgfQotLSAgICB9Ci0tICAgIF9fcHl4 X3RfMSA9IChfX3B5eF90XzcpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwg X19weXhfdF83LCBfX3B5eF92X2RhdGEpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzIsIF9fcHl4X3ZfZGF0YSk7Ci0tICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19w eXhfdF83ID0gMDsKLS0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg NTg4LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgICBpZiAodW5saWtl bHkoX19QeXhfU2V0SXRlbUludChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92 X2lkX2RhdGEsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0 X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQotLSAg ICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKLS0gICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92 X3VzZXJkYXRhcywgX19weXhfdF8xKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7Ci0tCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 ODcKLS0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRh dGEpCi0tICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9k YXRhLCBOb25lKQotLSAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lk X2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKLS0gKiAgICAgICAgIHVz ZXJkYXRhcy5hZGQoKQotLSAqLwotLSAgfQotKyAgX19weXhfdF80ID0gKChlbnVtIG1wdl9mb3Jt YXQpX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2Zvcm1hdChfX3B5eF90XzEpKTsgaWYgKHVubGlr ZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNjQwLCBfX3B5eF9MMV9lcnJvcikK LSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgX19weXhfdl9m b3JtYXQgPSBfX3B5eF90XzQ7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTg5Ci0tICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKLS0gKiAgICAgICAgICAg ICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRh dGEoZGF0YSkKLS0gKiAgICAgICAgIHVzZXJkYXRhcy5hZGQoKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AKLS0g KiAgICAgICAgIHdpdGggbm9naWw6Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjQxCi0rICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKQotKyAqICAgICAgICAgY2Rl ZiBtcHZfZm9ybWF0IGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCi0rICogICAgICAg ICBjZGVmIG1wdl9ub2RlIHYgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0 KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBjZGVmIGludCBlcnIK LSsgKiAgICAgICAgIGNkZWYgdWludDY0X3QgZGF0YV9pZAotICAqLwotLSAgX19weXhfdF8yID0g X19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX2Fk ZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU4OSwgX19weXhfTDFf ZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gIF9fcHl4X3RfNyA9IE5VTEw7 Ci0tICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzIpKSkgewotLSAgICBfX3B5eF90XzcgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90 XzIpOwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfNykpIHsKLS0gICAgICBQeU9iamVjdCogZnVu Y3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKLS0gICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF83KTsKLS0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAg IF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0tICAgIH0KLS0gIH0KLS0g IF9fcHl4X3RfMSA9IChfX3B5eF90XzcpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzIsIF9fcHl4X3RfNykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsK LS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLS0gIGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU4OSwgX19weXhfTDFfZXJyb3IpCi0rICBf X3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoX19weXhfdl9mb3Jt YXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NDEsIF9fcHl4X0wx X2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9ERUNSRUYoX19w eXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgIF9fcHl4X3ZfdiA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9f cHl4X3Z0YWIpLT5fcHJlcF9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X3ZhbHVl LCBfX3B5eF90XzEpOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTkwCi0tICogICAgICAg ICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVz ZXJEYXRhKGRhdGEpCi0tICogICAgICAgICB1c2VyZGF0YXMuYWRkKCkKLS0gKiAgICAgICAgIGNk ZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9nZXRf cHJvcGVydHlfYXN5bmMoCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjQ1 Ci0rICogICAgICAgICBjZGVmIHVpbnQ2NF90IGRhdGFfaWQKLSsgKiAgICAgICAgIGNkZWYgY29u c3QgY2hhciogcHJvcF9jCi0rICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wCi0rICogICAgICAgICAgICAgaWYg bm90IGFzeW5jaHJvbm91czoKLSAgKi8KLS0gIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9B c1N0cmluZyhfX3B5eF92X3Byb3ApOyBpZiAodW5saWtlbHkoKCFfX3B5eF90XzEwKSAmJiBQeUVy cl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDU5MCwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5 eF92X3Byb3BfYyA9IF9fcHl4X3RfMTA7Ci0rICAvKnRyeToqLyB7Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTkxCi0tICogICAgICAgICB1c2VyZGF0YXMuYWRkKCkK LS0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcAotLSAqICAgICAgICAg d2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAg IGVyciA9IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMoCi0tICogICAgICAgICAgICAgICAgIHNlbGYu X2N0eCwKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0NgotKyAqICAg ICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MKLSsgKiAgICAgICAgIHRyeToKLSsgKiAgICAg ICAgICAgICBwcm9wX2MgPSBwcm9wICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgotKyAqICAgICAgICAgICAgICAgICB3aXRo IG5vZ2lsOgotICAqLwotLSAgewotLSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgIFB5 VGhyZWFkU3RhdGUgKl9zYXZlOwotLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotLSAgICAgIF9f UHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLS0gICAgICAjZW5kaWYKLS0gICAgICAvKnRyeToqLyB7 Ci0rICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfcHJvcCk7 IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VS UigwLCA2NDYsIF9fcHl4X0w0X2Vycm9yKQotKyAgICBfX3B5eF92X3Byb3BfYyA9IF9fcHl4X3Rf NTsKLSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OTIKLS0g KiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcAotLSAqICAgICAgICAgd2l0 aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfZ2V0X3Byb3BlcnR5X2FzeW5jKCAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgIHNlbGYuX2N0 eCwKLS0gKiAgICAgICAgICAgICAgICAgaWRfZGF0YSwKLSsgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjY0NwotKyAqICAgICAgICAgdHJ5OgotKyAqICAgICAgICAgICAgIHBy b3BfYyA9IHByb3AKLSsgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0r ICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfc2V0X3Byb3BlcnR5KAotICAqLwotLSAg ICAgICAgX19weXhfdl9lcnIgPSBtcHZfZ2V0X3Byb3BlcnR5X2FzeW5jKF9fcHl4X3Zfc2VsZi0+ X2N0eCwgX19weXhfdl9pZF9kYXRhLCBfX3B5eF92X3Byb3BfYywgTVBWX0ZPUk1BVF9OT0RFKTsK LS0gICAgICB9Ci0rICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92 X2FzeW5jaHJvbm91cyk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAs IDY0NywgX19weXhfTDRfZXJyb3IpCi0rICAgIF9fcHl4X3RfNyA9ICgoIV9fcHl4X3RfNikgIT0g MCk7Ci0rICAgIGlmIChfX3B5eF90XzcpIHsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTkxCi0tICogICAgICAgICB1c2VyZGF0YXMuYWRkKCkKLS0gKiAgICAg ICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcAotLSAqICAgICAgICAgd2l0aCBub2dp bDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGVyciA9IG1w dl9nZXRfcHJvcGVydHlfYXN5bmMoCi0tICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKLSsg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjQ4Ci0rICogICAgICAgICAg ICAgcHJvcF9jID0gcHJvcAotKyAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6Ci0r ICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1wdl9zZXRfcHJvcGVydHkoCi0rICog ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAotICAqLwotLSAgICAgIC8qZmluYWxs eToqLyB7Ci0tICAgICAgICAvKm5vcm1hbCBleGl0OiovewotKyAgICAgIHsKLSAgICAgICAgICAg I2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0t ICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSsgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqX3Nh dmU7Ci0rICAgICAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotKyAgICAgICAgICBfX1B5eF9GYXN0 R0lMX1JlbWVtYmVyKCk7Ci0gICAgICAgICAgICNlbmRpZgotLSAgICAgICAgICBnb3RvIF9fcHl4 X0w2OwotLSAgICAgICAgfQotLSAgICAgICAgX19weXhfTDY6OwotLSAgICAgIH0KLS0gIH0KLSsg ICAgICAgICAgLyp0cnk6Ki8gewotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjU5OAotLSAqICAgICAgICAgICAgICAgICBNUFZfRk9STUFUX05PREUsCi0tICogICAgICAg ICAgICAgKQotLSAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogCi0tICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3As IGRhdGE9Tm9uZSwgZGVmYXVsdD1Ob25lKToKLSsgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NjQ5Ci0rICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91 czoKLSsgKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAgICAgICAgICAg ICAgIGVyciA9IG1wdl9zZXRfcHJvcGVydHkoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCi0rICogICAgICAgICAgICAg ICAgICAgICAgICAgcHJvcF9jLAotICAqLwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0g IF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTk4LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19weXhfciA9IF9fcHl4X3RfMTsKLS0gIF9fcHl4 X3RfMSA9IDA7Ci0tICBnb3RvIF9fcHl4X0wwOwotKyAgICAgICAgICAgIF9fcHl4X3ZfZXJyID0g bXB2X3NldF9wcm9wZXJ0eShfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcHJvcF9jLCBNUFZf Rk9STUFUX05PREUsICgmX19weXhfdl92KSk7Ci0rICAgICAgICAgIH0KLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzQKLS0gKiAKLS0gKiAgICAgQF9lcnJvcnMKLS0g KiAgICAgZGVmIGdldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9wLCBkYXRhPU5vbmUpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAiIiJHZXRzIHRoZSB2YWx1ZSBv ZiBhIHByb3BlcnR5IGFzeW5jaHJvbm91c2x5LgotLSAqIAotKyAgICAgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjQ4Ci0rICogICAgICAgICAgICAgcHJvcF9jID0gcHJv cAotKyAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6Ci0rICogICAgICAgICAgICAg ICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAg ICAgICAgICAgICAgIGVyciA9IG1wdl9zZXRfcHJvcGVydHkoCi0rICogICAgICAgICAgICAgICAg ICAgICAgICAgc2VsZi5fY3R4LAotICAqLwotKyAgICAgICAgICAvKmZpbmFsbHk6Ki8gewotKyAg ICAgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97Ci0rICAgICAgICAgICAgICAjaWZkZWYgV0lUSF9U SFJFQUQKLSsgICAgICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0rICAgICAgICAg ICAgICBQeV9CTE9DS19USFJFQURTCi0rICAgICAgICAgICAgICAjZW5kaWYKLSsgICAgICAgICAg ICAgIGdvdG8gX19weXhfTDk7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICAgIF9fcHl4X0w5 OjsKLSsgICAgICAgICAgfQotKyAgICAgIH0KLSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LwotLSAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOwot LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90Xzcp OwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5nZXRf cHJvcGVydHlfYXN5bmMiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKLS0gIF9fcHl4X3IgPSBOVUxMOwotLSAgX19weXhfTDA6OwotLSAgX19QeXhfWERFQ1JF RihfX3B5eF92X3VzZXJkYXRhcyk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfcHJvcCk7Ci0t ICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2NTUKLSsgKiAgICAgICAgICAgICAgICAgICAgICAgICAmdgotKyAqICAg ICAgICAgICAgICAgICAgICAgKQotKyAqICAgICAgICAgICAgICAgICByZXR1cm4gZXJyICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBkYXRhX2lkID0gPHVpbnQ2 NF90Pmhhc2goZGF0YSkKLSsgKiAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3Vz ZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQotKyAqLwotKyAgICAgIF9fUHl4X1hERUNSRUYoX19w eXhfcik7Ci0rICAgICAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9l cnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NTUsIF9fcHl4X0w0 X2Vycm9yKQotKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICAgIF9fcHl4X3Ig PSBfX3B5eF90XzE7Ci0rICAgICAgX19weXhfdF8xID0gMDsKLSsgICAgICBnb3RvIF9fcHl4X0wz X3JldHVybjsKLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjAwCi0tICog ICAgICAgICByZXR1cm4gZXJyCi0tICogCi0tICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5X2Fz eW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSwgZGVmYXVsdD1Ob25lKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 NDcKLSAgKiAgICAgICAgIHRyeToKLS0gKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJv cGVydHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKQotKyAqICAgICAgICAgICAgIHByb3BfYyA9IHBy b3AKLSsgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAg ICAgICAgICAgICAgICBlcnIgPSBtcHZfc2V0X3Byb3BlcnR5KAotICAqLwotKyAgICB9Ci0gCi0t LyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xN3RyeV9nZXRfcHJvcGVydHlfYXN5bmMoUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2Rz KTsgLypwcm90byovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMTd0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgewotLSAg UHlPYmplY3QgKl9fcHl4X3ZfcHJvcCA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhfdl9kYXRhID0g MDsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X2RlZmF1bHQgPSAwOwotLSAgaW50IF9fcHl4X2xpbmVu byA9IDA7Ci0tICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0tICBpbnQgX19w eXhfY2xpbmVubyA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0tICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInRyeV9nZXRf cHJvcGVydHlfYXN5bmMgKHdyYXBwZXIpIiwgMCk7Ci0tICB7Ci0tICAgIHN0YXRpYyBQeU9iamVj dCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3Byb3AsJl9fcHl4X25fc19kYXRh LCZfX3B5eF9uX3NfZGVmYXVsdCwwfTsKLS0gICAgUHlPYmplY3QqIHZhbHVlc1szXSA9IHswLDAs MH07Ci0tICAgIHZhbHVlc1sxXSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKLS0gICAgdmFsdWVz WzJdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOwotLSAgICBpZiAodW5saWtlbHkoX19weXhfa3dk cykpIHsKLS0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7Ci0tICAgICAgY29uc3QgUHlfc3NpemVf dCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7Ci0tICAgICAgc3dpdGNo IChwb3NfYXJncykgewotLSAgICAgICAgY2FzZSAgMzogdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRf SVRFTShfX3B5eF9hcmdzLCAyKTsKLS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAg ICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7 Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAxOiB2YWx1ZXNb MF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOwotLSAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgMDogYnJlYWs7Ci0tICAgICAgICBkZWZhdWx0OiBn b3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotLSAgICAgIH0KLS0gICAgICBrd19hcmdzID0g UHlEaWN0X1NpemUoX19weXhfa3dkcyk7Ci0tICAgICAgc3dpdGNoIChwb3NfYXJncykgewotLSAg ICAgICAgY2FzZSAgMDoKLS0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5 RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19wcm9wKSkgIT0gMCkpIGt3X2Fy Z3MtLTsKLS0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLS0gICAg ICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDE6Ci0tICAgICAgICBpZiAo a3dfYXJncyA+IDApIHsKLS0gICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0 X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2RhdGEpOwotLSAgICAgICAgICBpZiAo dmFsdWUpIHsgdmFsdWVzWzFdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQotLSAgICAgICAgfQotLSAg ICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgMjoKLS0gICAgICAgIGlm IChrd19hcmdzID4gMCkgewotLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURp Y3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZGVmYXVsdCk7Ci0tICAgICAgICAg IGlmICh2YWx1ZSkgeyB2YWx1ZXNbMl0gPSB2YWx1ZTsga3dfYXJncy0tOyB9Ci0tICAgICAgICB9 Ci0tICAgICAgfQotLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKLS0gICAgICAg IGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19w eXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgInRyeV9nZXRfcHJvcGVydHlfYXN5 bmMiKSA8IDApKSBfX1BZWF9FUlIoMCwgNjAwLCBfX3B5eF9MM19lcnJvcikKLSsgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1NgotKyAqICAgICAgICAgICAgICAgICAgICAg KQotKyAqICAgICAgICAgICAgICAgICByZXR1cm4gZXJyCi0rICogICAgICAgICAgICAgZGF0YV9p ZCA9IDx1aW50NjRfdD5oYXNoKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lk LCBOb25lKQotKyAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgotKyAqLwotKyAg ICBfX3B5eF90XzggPSBQeU9iamVjdF9IYXNoKF9fcHl4X3ZfZGF0YSk7IGlmICh1bmxpa2VseShf X3B5eF90XzggPT0gKChQeV9oYXNoX3QpLTEpKSkgX19QWVhfRVJSKDAsIDY1NiwgX19weXhfTDRf ZXJyb3IpCi0rICAgIF9fcHl4X3ZfZGF0YV9pZCA9ICgodWludDY0X3QpX19weXhfdF84KTsKLSsK LSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1NwotKyAqICAgICAgICAg ICAgICAgICByZXR1cm4gZXJyCi0rICogICAgICAgICAgICAgZGF0YV9pZCA9IDx1aW50NjRfdD5o YXNoKGRhdGEpCi0rICogICAgICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0 YS5nZXQoZGF0YV9pZCwgTm9uZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgotKyAqICAgICAgICAgICAgICAgICBzZWxm LnJlcGx5X3VzZXJkYXRhW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0 YSkKLSsgKi8KLSsgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5 eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNjU3LCBfX3B5eF9MNF9lcnJvcikKLSsgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fdWlu dDY0X3QoX19weXhfdl9kYXRhX2lkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgNjU3LCBfX3B5eF9MNF9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7 Ci0rICAgIF9fcHl4X3RfOSA9IE5VTEw7Ci0rICAgIF9fcHl4X3RfMTAgPSAwOwotKyAgICBpZiAo Q1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgewotKyAgICAgIF9fcHl4X3RfOSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Ci0r ICAgICAgaWYgKGxpa2VseShfX3B5eF90XzkpKSB7Ci0rICAgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKLSsgICAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzkpOwotKyAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAg ICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0rICAgICAgICBfX3B5 eF90XzEwID0gMTsKLSAgICAgICB9Ci0tICAgIH0gZWxzZSB7Ci0tICAgICAgc3dpdGNoIChQeVR1 cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKSB7Ci0tICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0g PSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOwotLSAgICAgICAgQ1lUSE9OX0ZBTExU SFJPVUdIOwotLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShf X3B5eF9hcmdzLCAxKTsKLS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNh c2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0tICAg ICAgICBicmVhazsKLS0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJy b3I7Ci0rICAgIH0KLSsgICAgI2lmIENZVEhPTl9GQVNUX1BZQ0FMTAotKyAgICBpZiAoUHlGdW5j dGlvbl9DaGVjayhfX3B5eF90XzIpKSB7Ci0rICAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10g PSB7X19weXhfdF85LCBfX3B5eF90XzMsIFB5X05vbmV9OwotKyAgICAgIF9fcHl4X3RfMSA9IF9f UHl4X1B5RnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8yLCBfX3B5eF90ZW1wKzEtX19weXhfdF8x MCwgMitfX3B5eF90XzEwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg NjU3LCBfX3B5eF9MNF9lcnJvcikKLSsgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOSk7IF9f cHl4X3RfOSA9IDA7Ci0rICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICAgIH0gZWxzZQotKyAgICAj ZW5kaWYKLSsgICAgI2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwKLSsgICAgaWYgKF9fUHl4X1B5RmFz dENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzIpKSB7Ci0rICAgICAgUHlPYmplY3QgKl9fcHl4X3Rl bXBbM10gPSB7X19weXhfdF85LCBfX3B5eF90XzMsIFB5X05vbmV9OwotKyAgICAgIF9fcHl4X3Rf MSA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9f cHl4X3RfMTAsIDIrX19weXhfdF8xMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDY1NywgX19weXhfTDRfZXJyb3IpCi0rICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzkpOyBfX3B5eF90XzkgPSAwOwotKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAg ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotKyAgICB9IGVsc2UK LSsgICAgI2VuZGlmCi0rICAgIHsKLSsgICAgICBfX3B5eF90XzExID0gUHlUdXBsZV9OZXcoMitf X3B5eF90XzEwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzExKSkgX19QWVhfRVJSKDAsIDY1Nywg X19weXhfTDRfZXJyb3IpCi0rICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMTEpOwotKyAgICAg IGlmIChfX3B5eF90XzkpIHsKLSsgICAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF85KTsgUHlU dXBsZV9TRVRfSVRFTShfX3B5eF90XzExLCAwLCBfX3B5eF90XzkpOyBfX3B5eF90XzkgPSBOVUxM OwotICAgICAgIH0KLSsgICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMyk7Ci0rICAgICAgUHlU dXBsZV9TRVRfSVRFTShfX3B5eF90XzExLCAwK19fcHl4X3RfMTAsIF9fcHl4X3RfMyk7Ci0rICAg ICAgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotKyAgICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7 Ci0rICAgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzExLCAxK19fcHl4X3RfMTAsIFB5X05v bmUpOwotKyAgICAgIF9fcHl4X3RfMyA9IDA7Ci0rICAgICAgX19weXhfdF8xID0gX19QeXhfUHlP YmplY3RfQ2FsbChfX3B5eF90XzIsIF9fcHl4X3RfMTEsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9yKQotKyAgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzExKTsgX19w eXhfdF8xMSA9IDA7Ci0gICAgIH0KLS0gICAgX19weXhfdl9wcm9wID0gdmFsdWVzWzBdOwotLSAg ICBfX3B5eF92X2RhdGEgPSB2YWx1ZXNbMV07Ci0tICAgIF9fcHl4X3ZfZGVmYXVsdCA9IHZhbHVl c1syXTsKLS0gIH0KLS0gIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7Ci0t ICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Ci0tICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxp ZCgidHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIsIDAsIDEsIDMsIFB5VHVwbGVfR0VUX1NJWkUoX19w eXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNjAwLCBfX3B5eF9MM19lcnJvcikKLS0gIF9fcHl4X0wz X2Vycm9yOjsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRl eHQudHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICBy ZXR1cm4gTlVMTDsKLS0gIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKLS0gIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZ0cnlfZ2V0 X3Byb3BlcnR5X2FzeW5jKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfcHJvcCwgX19weXhfdl9kYXRhLCBfX3B5 eF92X2RlZmF1bHQpOwotLQotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLSsgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0rICAgIF9fcHl4X3ZfdXNlcmRh dGFzID0gX19weXhfdF8xOwotKyAgICBfX3B5eF90XzEgPSAwOwotIAotLXN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE2dHJ5X2dldF9wcm9w ZXJ0eV9hc3luYyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92 X2RhdGEsIFB5T2JqZWN0ICpfX3B5eF92X2RlZmF1bHQpIHsKLS0gIFB5T2JqZWN0ICpfX3B5eF9y ID0gTlVMTDsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBQeU9iamVjdCAqX19w eXhfdF8xID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotLSAgUHlPYmpl Y3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLS0g IFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5V TEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKLS0gIGludCBfX3B5eF90Xzg7Ci0t ICBpbnQgX19weXhfbGluZW5vID0gMDsKLS0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKLS0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJ0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jIiwgMCk7Ci0rICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2NTgKLSsgKiAgICAgICAgICAgICBkYXRhX2lkID0gPHVpbnQ2 NF90Pmhhc2goZGF0YSkKLSsgKiAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3Vz ZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQotKyAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBp cyBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgICAg IHNlbGYucmVwbHlfdXNlcmRhdGFbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0 YShkYXRhKQotKyAqICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQotKyAqLwotKyAgICBfX3B5 eF90XzcgPSAoX19weXhfdl91c2VyZGF0YXMgPT0gUHlfTm9uZSk7Ci0rICAgIF9fcHl4X3RfNiA9 IChfX3B5eF90XzcgIT0gMCk7Ci0rICAgIGlmIChfX3B5eF90XzYpIHsKLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDEKLS0gKiAKLS0gKiAgICAgZGVmIHRyeV9nZXRf cHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lLCBkZWZhdWx0PU5vbmUpOgotLSAq ICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAg ICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5X2FzeW5jKHByb3AsIGRhdGE9ZGF0YSkKLS0gKiAg ICAgICAgIGV4Y2VwdCBNUFZFcnJvcjoKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjU5Ci0rICogICAgICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2Vy ZGF0YS5nZXQoZGF0YV9pZCwgTm9uZSkKLSsgKiAgICAgICAgICAgICBpZiB1c2VyZGF0YXMgaXMg Tm9uZToKLSsgKiAgICAgICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtkYXRhX2lkXSA9 IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkKLSsgKiAgICAgICAgICAgICB3 aXRoIG5vZ2lsOgotICAqLwotLSAgewotLSAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUK LS0gICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24KLS0gICAgX19QeXhfRXhjZXB0aW9uU2F2 ZSgmX19weXhfdF8xLCAmX19weXhfdF8yLCAmX19weXhfdF8zKTsKLS0gICAgX19QeXhfWEdPVFJF RihfX3B5eF90XzEpOwotLSAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fUHl4 X1hHT1RSRUYoX19weXhfdF8zKTsKLS0gICAgLyp0cnk6Ki8gewotKyAgICAgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY1OSwgX19weXhfTDRfZXJyb3IpCi0r ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICAgICAgX19weXhfdF8xMSA9IE5VTEw7 Ci0rICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9D aGVjayhfX3B5eF90XzIpKSkgewotKyAgICAgICAgX19weXhfdF8xMSA9IFB5TWV0aG9kX0dFVF9T RUxGKF9fcHl4X3RfMik7Ci0rICAgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfMTEpKSB7Ci0rICAg ICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90 XzIpOwotKyAgICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xMSk7Ci0rICAgICAgICAgIF9f UHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0rICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhf dF8yLCBmdW5jdGlvbik7Ci0rICAgICAgICB9Ci0rICAgICAgfQotKyAgICAgIF9fcHl4X3RfMSA9 IChfX3B5eF90XzExKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4 X3RfMTEsIF9fcHl4X3ZfZGF0YSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3Rf MiwgX19weXhfdl9kYXRhKTsKLSsgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5 eF90XzExID0gMDsKLSsgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA2NTksIF9fcHl4X0w0X2Vycm9yKQotKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot KyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgICAgIGlm ICh1bmxpa2VseShfX1B5eF9TZXRJdGVtSW50KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEs IF9fcHl4X3ZfZGF0YV9pZCwgX19weXhfdF8xLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJv bV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDY1OSwgX19weXhfTDRfZXJy b3IpCi0rICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7Ci0rICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF92X3VzZXJkYXRhcywgX19weXhfdF8xKTsKLSsgICAgICBfX1B5eF9ERUNSRUYo X19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjAyCi0tICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNl bGYsIHByb3AsIGRhdGE9Tm9uZSwgZGVmYXVsdD1Ob25lKToKLS0gKiAgICAgICAgIHRyeToKLS0g KiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHlfYXN5bmMocHJvcCwgZGF0YT1k YXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBleGNlcHQgTVBW RXJyb3I6Ci0tICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKLSsgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjU4Ci0rICogICAgICAgICAgICAgZGF0YV9pZCA9IDx1 aW50NjRfdD5oYXNoKGRhdGEpCi0rICogICAgICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBs eV91c2VyZGF0YS5nZXQoZGF0YV9pZCwgTm9uZSkKLSsgKiAgICAgICAgICAgICBpZiB1c2VyZGF0 YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAg ICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNl ckRhdGEoZGF0YSkKLSsgKiAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkKLSAgKi8KLS0gICAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2Jq ZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19nZXRf cHJvcGVydHlfYXN5bmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2 MDIsIF9fcHl4X0wzX2Vycm9yKQotLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAg ICAgIF9fcHl4X3RfNSA9IFB5VHVwbGVfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkp IF9fUFlYX0VSUigwLCA2MDIsIF9fcHl4X0wzX2Vycm9yKQotLSAgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzUpOwotLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3Byb3ApOwotLSAgICAgIF9f UHl4X0dJVkVSRUYoX19weXhfdl9wcm9wKTsKLS0gICAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfNSwgMCwgX19weXhfdl9wcm9wKTsKLS0gICAgICBfX3B5eF90XzYgPSBfX1B5eF9QeURpY3Rf TmV3UHJlc2l6ZWQoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDYw MiwgX19weXhfTDNfZXJyb3IpCi0tICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICAg ICAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X3RfNiwgX19weXhfbl9zX2RhdGEsIF9fcHl4X3Zf ZGF0YSkgPCAwKSBfX1BZWF9FUlIoMCwgNjAyLCBfX3B5eF9MM19lcnJvcikKLS0gICAgICBfX3B5 eF90XzcgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfNCwgX19weXhfdF81LCBfX3B5eF90 XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA2MDIsIF9fcHl4X0wz X2Vycm9yKQotLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotLSAgICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzUpOyBfX3B5eF90XzUgPSAwOwotLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBf X3B5eF90XzYgPSAwOwotLSAgICAgIF9fcHl4X3IgPSBfX3B5eF90Xzc7Ci0tICAgICAgX19weXhf dF83ID0gMDsKLS0gICAgICBnb3RvIF9fcHl4X0w3X3RyeV9yZXR1cm47Ci0rICAgIH0KLSAKLS0g ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjAxCi0tICogCi0tICogICAg IGRlZiB0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSwgZGVmYXVs dD1Ob25lKToKLS0gKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhwcm9wLCBkYXRh PWRhdGEpCi0tICogICAgICAgICBleGNlcHQgTVBWRXJyb3I6Ci0rICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2NjAKLSsgKiAgICAgICAgICAgICBpZiB1c2VyZGF0YXMgaXMg Tm9uZToKLSsgKiAgICAgICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtkYXRhX2lkXSA9 IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCi0rICogICAgICAgICAgICAgdXNlcmRh dGFzLmFkZCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICB3 aXRoIG5vZ2lsOgotKyAqICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfc2V0X3Byb3BlcnR5X2Fz eW5jKAotICAqLwotKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3NfYWRkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgNjYwLCBfX3B5eF9MNF9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMik7Ci0rICAgIF9fcHl4X3RfMTEgPSBOVUxMOwotKyAgICBpZiAoQ1lUSE9OX1VOUEFD S19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotKyAgICAg IF9fcHl4X3RfMTEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwotKyAgICAgIGlmIChs aWtlbHkoX19weXhfdF8xMSkpIHsKLSsgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0 aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwotKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3RfMTEpOwotKyAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAgICAgIF9fUHl4 X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0rICAgICAgfQotICAgICB9Ci0tICAg IF9fcHl4X0wzX2Vycm9yOjsKLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90 XzQgPSAwOwotLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0t ICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0gICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotKyAgICBfX3B5eF90XzEgPSAoX19w eXhfdF8xMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8x MSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKLSsgICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzExKTsgX19weXhfdF8xMSA9IDA7Ci0rICAgIGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDY2MCwgX19weXhfTDRfZXJyb3IpCi0rICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8y ID0gMDsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0t ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDMKLS0gKiAgICAgICAgIHRy eToKLS0gKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHlfYXN5bmMocHJvcCwg ZGF0YT1kYXRhKQotLSAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKLS0gKiAKLSsgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2MQotKyAqICAgICAgICAgICAgICAg ICBzZWxmLnJlcGx5X3VzZXJkYXRhW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRh dGEoZGF0YSkKLSsgKiAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkKLSsgKiAgICAgICAgICAg ICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAg ICAgICAgIGVyciA9IG1wdl9zZXRfcHJvcGVydHlfYXN5bmMoCi0rICogICAgICAgICAgICAgICAg ICAgICBzZWxmLl9jdHgsCi0gICovCi0tICAgIF9fUHl4X0VyckZldGNoKCZfX3B5eF90XzcsICZf X3B5eF90XzYsICZfX3B5eF90XzUpOwotLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9f cHl4X3RfNCwgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBf X1BZWF9FUlIoMCwgNjAzLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzQpOwotLSAgICBfX3B5eF90XzggPSBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlv bk1hdGNoZXMoX19weXhfdF83LCBfX3B5eF90XzQpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhf dF80KTsgX19weXhfdF80ID0gMDsKLS0gICAgX19QeXhfRXJyUmVzdG9yZShfX3B5eF90XzcsIF9f cHl4X3RfNiwgX19weXhfdF81KTsKLS0gICAgX19weXhfdF83ID0gMDsgX19weXhfdF82ID0gMDsg X19weXhfdF81ID0gMDsKLS0gICAgaWYgKF9fcHl4X3RfOCkgewotLSAgICAgIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQudHJ5X2dldF9wcm9wZXJ0eV9hc3lu YyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotLSAgICAg IGlmIChfX1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfNSwgJl9fcHl4X3RfNiwgJl9fcHl4X3Rf NykgPCAwKSBfX1BZWF9FUlIoMCwgNjAzLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCi0tICAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNSk7Ci0tICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7 Ci0tICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0rICAgIHsKLSsgICAgICAgICNpZmRl ZiBXSVRIX1RIUkVBRAotKyAgICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7Ci0rICAgICAgICBQ eV9VTkJMT0NLX1RIUkVBRFMKLSsgICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLSsg ICAgICAgICNlbmRpZgotKyAgICAgICAgLyp0cnk6Ki8gewotIAotLSAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDQKLS0gKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5n ZXRfcHJvcGVydHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKQotLSAqICAgICAgICAgZXhjZXB0IE1Q VkVycm9yOgotLSAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAKLS0gKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHkoc2VsZiwgcHJv cCwgZGVmYXVsdD1Ob25lKToKLSsgICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjY2MgotKyAqICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQotKyAqICAgICAgICAg ICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgICAgIGVyciA9IG1wdl9zZXRfcHJvcGVy dHlfYXN5bmMoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICAg ICAgICAgIHNlbGYuX2N0eCwKLSsgKiAgICAgICAgICAgICAgICAgICAgIGRhdGFfaWQsCi0gICov Ci0tICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdl9kZWZhdWx0KTsKLS0gICAgICBfX3B5eF9yID0gX19weXhfdl9kZWZhdWx0OwotLSAgICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotLSAgICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzcpOyBfX3B5eF90XzcgPSAwOwotLSAgICAgIGdvdG8gX19weXhfTDZfZXhjZXB0X3JldHVy bjsKLSsgICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jKF9fcHl4 X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9kYXRhX2lkLCBfX3B5eF92X3Byb3BfYywgTVBWX0ZPUk1B VF9OT0RFLCAoJl9fcHl4X3ZfdikpOwotKyAgICAgICAgfQotKwotKyAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2MQotKyAqICAgICAgICAgICAgICAgICBzZWxmLnJl cGx5X3VzZXJkYXRhW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkK LSsgKiAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkKLSsgKiAgICAgICAgICAgICB3aXRoIG5v Z2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgIGVy ciA9IG1wdl9zZXRfcHJvcGVydHlfYXN5bmMoCi0rICogICAgICAgICAgICAgICAgICAgICBzZWxm Ll9jdHgsCi0rICovCi0rICAgICAgICAvKmZpbmFsbHk6Ki8gewotKyAgICAgICAgICAvKm5vcm1h bCBleGl0OiovewotKyAgICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotKyAgICAgICAgICAg IF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0rICAgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwot KyAgICAgICAgICAgICNlbmRpZgotKyAgICAgICAgICAgIGdvdG8gX19weXhfTDEzOwotKyAgICAg ICAgICB9Ci0rICAgICAgICAgIF9fcHl4X0wxMzo7Ci0rICAgICAgICB9Ci0gICAgIH0KLS0gICAg Z290byBfX3B5eF9MNV9leGNlcHRfZXJyb3I7Ci0tICAgIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcjo7 Ci0rICB9Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDEKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzAKLSsgKiAgICAgICAgICAgICAg ICAgKQotKyAqICAgICAgICAgZmluYWxseToKLSsgKiAgICAgICAgICAgICBzZWxmLl9mcmVlX25h dGl2ZV92YWx1ZSh2KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBy ZXR1cm4gZXJyCi0gICogCi0tICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYs IHByb3AsIGRhdGE9Tm9uZSwgZGVmYXVsdD1Ob25lKToKLS0gKiAgICAgICAgIHRyeTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9w cm9wZXJ0eV9hc3luYyhwcm9wLCBkYXRhPWRhdGEpCi0tICogICAgICAgICBleGNlcHQgTVBWRXJy b3I6Ci0gICovCi0tICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMyk7Ci0tICAg IF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9fcHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMpOwot LSAgICBnb3RvIF9fcHl4X0wxX2Vycm9yOwotLSAgICBfX3B5eF9MN190cnlfcmV0dXJuOjsKLS0g ICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xKTsKLS0gICAgX19QeXhfWEdJVkVSRUYoX19weXhf dF8yKTsKLS0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8zKTsKLS0gICAgX19QeXhfRXhjZXB0 aW9uUmVzZXQoX19weXhfdF8xLCBfX3B5eF90XzIsIF9fcHl4X3RfMyk7Ci0tICAgIGdvdG8gX19w eXhfTDA7Ci0tICAgIF9fcHl4X0w2X2V4Y2VwdF9yZXR1cm46OwotLSAgICBfX1B5eF9YR0lWRVJF RihfX3B5eF90XzEpOwotLSAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzIpOwotLSAgICBfX1B5 eF9YR0lWRVJFRihfX3B5eF90XzMpOwotLSAgICBfX1B5eF9FeGNlcHRpb25SZXNldChfX3B5eF90 XzEsIF9fcHl4X3RfMiwgX19weXhfdF8zKTsKLS0gICAgZ290byBfX3B5eF9MMDsKLSsgIC8qZmlu YWxseToqLyB7Ci0rICAgIC8qbm9ybWFsIGV4aXQ6Ki97Ci0rICAgICAgX19weXhfdF8xID0gKChz dHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9f cHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYs IF9fcHl4X3Zfdik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3MCwg X19weXhfTDFfZXJyb3IpCi0rICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICAgICAgZ290byBfX3B5 eF9MNTsKLSsgICAgfQotKyAgICBfX3B5eF9MNF9lcnJvcjo7Ci0rICAgIC8qZXhjZXB0aW9uIGV4 aXQ6Ki97Ci0rICAgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9kZWNsYXJlCi0rICAgICAgX19QeXhf UHlUaHJlYWRTdGF0ZV9hc3NpZ24KLSsgICAgICBfX3B5eF90XzE0ID0gMDsgX19weXhfdF8xNSA9 IDA7IF9fcHl4X3RfMTYgPSAwOyBfX3B5eF90XzE3ID0gMDsgX19weXhfdF8xOCA9IDA7IF9fcHl4 X3RfMTkgPSAwOwotKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKLSsgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90XzExID0gMDsKLSsg ICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0rICAgICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotKyAgICAgIF9fUHl4X1hERUNS RUYoX19weXhfdF85KTsgX19weXhfdF85ID0gMDsKLSsgICAgICBpZiAoUFlfTUFKT1JfVkVSU0lP TiA+PSAzKSBfX1B5eF9FeGNlcHRpb25Td2FwKCZfX3B5eF90XzE3LCAmX19weXhfdF8xOCwgJl9f cHl4X3RfMTkpOwotKyAgICAgIGlmICgoUFlfTUFKT1JfVkVSU0lPTiA8IDMpIHx8IHVubGlrZWx5 KF9fUHl4X0dldEV4Y2VwdGlvbigmX19weXhfdF8xNCwgJl9fcHl4X3RfMTUsICZfX3B5eF90XzE2 KSA8IDApKSBfX1B5eF9FcnJGZXRjaCgmX19weXhfdF8xNCwgJl9fcHl4X3RfMTUsICZfX3B5eF90 XzE2KTsKLSsgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTQpOwotKyAgICAgIF9fUHl4X1hH T1RSRUYoX19weXhfdF8xNSk7Ci0rICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE2KTsKLSsg ICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTcpOwotKyAgICAgIF9fUHl4X1hHT1RSRUYoX19w eXhfdF8xOCk7Ci0rICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE5KTsKLSsgICAgICBfX3B5 eF90XzEwID0gX19weXhfbGluZW5vOyBfX3B5eF90XzEyID0gX19weXhfY2xpbmVubzsgX19weXhf dF8xMyA9IF9fcHl4X2ZpbGVuYW1lOwotKyAgICAgIHsKLSsgICAgICAgIF9fcHl4X3RfMSA9ICgo c3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilf X3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxm LCBfX3B5eF92X3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NzAs IF9fcHl4X0wxNV9lcnJvcikKLSsgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAg ICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICAgICAgfQot KyAgICAgIGlmIChQWV9NQUpPUl9WRVJTSU9OID49IDMpIHsKLSsgICAgICAgIF9fUHl4X1hHSVZF UkVGKF9fcHl4X3RfMTcpOwotKyAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xOCk7Ci0r ICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzE5KTsKLSsgICAgICAgIF9fUHl4X0V4Y2Vw dGlvblJlc2V0KF9fcHl4X3RfMTcsIF9fcHl4X3RfMTgsIF9fcHl4X3RfMTkpOwotKyAgICAgIH0K LSsgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzE0KTsKLSsgICAgICBfX1B5eF9YR0lWRVJF RihfX3B5eF90XzE1KTsKLSsgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzE2KTsKLSsgICAg ICBfX1B5eF9FcnJSZXN0b3JlKF9fcHl4X3RfMTQsIF9fcHl4X3RfMTUsIF9fcHl4X3RfMTYpOwot KyAgICAgIF9fcHl4X3RfMTQgPSAwOyBfX3B5eF90XzE1ID0gMDsgX19weXhfdF8xNiA9IDA7IF9f cHl4X3RfMTcgPSAwOyBfX3B5eF90XzE4ID0gMDsgX19weXhfdF8xOSA9IDA7Ci0rICAgICAgX19w eXhfbGluZW5vID0gX19weXhfdF8xMDsgX19weXhfY2xpbmVubyA9IF9fcHl4X3RfMTI7IF9fcHl4 X2ZpbGVuYW1lID0gX19weXhfdF8xMzsKLSsgICAgICBnb3RvIF9fcHl4X0wxX2Vycm9yOwotKyAg ICAgIF9fcHl4X0wxNV9lcnJvcjo7Ci0rICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykg ewotKyAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xNyk7Ci0rICAgICAgICBfX1B5eF9Y R0lWRVJFRihfX3B5eF90XzE4KTsKLSsgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTkp OwotKyAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xNywgX19weXhfdF8xOCwg X19weXhfdF8xOSk7Ci0rICAgICAgfQotKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNCk7 IF9fcHl4X3RfMTQgPSAwOwotKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNSk7IF9fcHl4 X3RfMTUgPSAwOwotKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNik7IF9fcHl4X3RfMTYg PSAwOwotKyAgICAgIF9fcHl4X3RfMTcgPSAwOyBfX3B5eF90XzE4ID0gMDsgX19weXhfdF8xOSA9 IDA7Ci0rICAgICAgZ290byBfX3B5eF9MMV9lcnJvcjsKLSsgICAgfQotKyAgICBfX3B5eF9MM19y ZXR1cm46IHsKLSsgICAgICBfX3B5eF90XzE5ID0gX19weXhfcjsKLSsgICAgICBfX3B5eF9yID0g MDsKLSsgICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVf bmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNjcwLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKLSsgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKLSsgICAgICBfX3B5eF9yID0gX19weXhfdF8xOTsKLSsgICAgICBfX3B5eF90XzE5 ID0gMDsKLSsgICAgICBnb3RvIF9fcHl4X0wwOwotKyAgICB9Ci0rICAgIF9fcHl4X0w1OjsKLSAg IH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDAKLS0gKiAgICAg ICAgIHJldHVybiBlcnIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzEK LSsgKiAgICAgICAgIGZpbmFsbHk6Ci0rICogICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVf dmFsdWUodikKLSsgKiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotICAqIAotLSAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9w LCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgICAgIHRyeToKLS0gKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVy dHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKQotKyAqICAgICBAX2Vycm9ycwotKyAqLwotKyAgX19Q eXhfWERFQ1JFRihfX3B5eF9yKTsKLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50 KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjcx LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgX19weXhf ciA9IF9fcHl4X3RfMTsKLSsgIF9fcHl4X3RfMSA9IDA7Ci0rICBnb3RvIF9fcHl4X0wwOwotKwot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzNgotKyAqIAotKyAqICAgICBA X2Vycm9ycwotKyAqICAgICBkZWYgc2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIHZhbHVlPVRydWUs IGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfcHJvcGVydHkgYW5kIG1wdl9zZXRf cHJvcGVydHlfYXN5bmMiIiIKLSsgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSAgKi8KLSAK LSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19weXhfTDFfZXJyb3I6OwotLSAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzQpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOwotLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzYpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOwot LSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC50cnlfZ2V0 X3Byb3BlcnR5X2FzeW5jIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMik7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0rICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfOSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOwotKyAgX19QeXhfQWRk VHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5zZXRfcHJvcGVydHkiLCBfX3B5 eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSAgIF9fcHl4X3IgPSBO VUxMOwotICAgX19weXhfTDA6OwotLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0rICBfX1B5 eF9YREVDUkVGKF9fcHl4X3ZfdXNlcmRhdGFzKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdl9w cm9wKTsKLSsgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotICAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjYwNgotLSAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0r LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3NAotICAqIAotLSAqICAgICBkZWYg dHJ5X2dldF9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkZWZhdWx0PU5vbmUpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICB0cnk6Ci0tICogICAgICAgICAgICAgcmV0dXJu IHNlbGYuZ2V0X3Byb3BlcnR5KHByb3ApCi0rICogICAgIEBfZXJyb3JzCi0rICogICAgIGRlZiBz ZXRfb3B0aW9uKHNlbGYsIHByb3AsIHZhbHVlPVRydWUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgICAgICAiIiJXcmFwczogbXB2X3NldF9vcHRpb24iIiIKLSsgKiAgICAg ICAgIGFzc2VydCBzZWxmLl9jdHgKLSAgKi8KLSAKLSAvKiBQeXRob24gd3JhcHBlciAqLwotLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE5 dHJ5X2dldF9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhf YXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOXRyeV9nZXRfcHJvcGVy dHkoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0 ICpfX3B5eF9rd2RzKSB7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMjFzZXRfb3B0aW9uKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLwotK3N0 YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjBzZXRf b3B0aW9uW10gPSAiV3JhcHM6IG1wdl9zZXRfb3B0aW9uIjsKLStzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMXNldF9vcHRpb24oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9r d2RzKSB7Ci0gICBQeU9iamVjdCAqX19weXhfdl9wcm9wID0gMDsKLS0gIFB5T2JqZWN0ICpfX3B5 eF92X2RlZmF1bHQgPSAwOwotKyAgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUgPSAwOwotICAgaW50 IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7 Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0g ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoInRyeV9nZXRfcHJvcGVydHkgKHdyYXBwZXIpIiwgMCk7Ci0rICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgic2V0X29wdGlvbiAod3JhcHBlcikiLCAwKTsKLSAgIHsKLS0gICAgc3RhdGlj IFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfcHJvcCwmX19weXhf bl9zX2RlZmF1bHQsMH07Ci0rICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNb XSA9IHsmX19weXhfbl9zX3Byb3AsJl9fcHl4X25fc192YWx1ZSwwfTsKLSAgICAgUHlPYmplY3Qq IHZhbHVlc1syXSA9IHswLDB9OwotLSAgICB2YWx1ZXNbMV0gPSAoKFB5T2JqZWN0ICopUHlfTm9u ZSk7Ci0rICAgIHZhbHVlc1sxXSA9ICgoUHlPYmplY3QgKilQeV9UcnVlKTsKLSAgICAgaWYgKHVu bGlrZWx5KF9fcHl4X2t3ZHMpKSB7Ci0gICAgICAgUHlfc3NpemVfdCBrd19hcmdzOwotICAgICAg IGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3Mp OwotQEAgLTEyNTA1LDEyICsxMjg3NCwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOXRyeV9nZXRfcHJvcGVydHkoUHlPYgotICAg ICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotICAgICAgICAgY2FzZSAgMToKLSAgICAgICAgIGlm IChrd19hcmdzID4gMCkgewotLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURp Y3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZGVmYXVsdCk7Ci0rICAgICAgICAg IFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9f cHl4X25fc192YWx1ZSk7Ci0gICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNbMV0gPSB2YWx1 ZTsga3dfYXJncy0tOyB9Ci0gICAgICAgICB9Ci0gICAgICAgfQotICAgICAgIGlmICh1bmxpa2Vs eShrd19hcmdzID4gMCkpIHsKLS0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlv bmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3Nf YXJncywgInRyeV9nZXRfcHJvcGVydHkiKSA8IDApKSBfX1BZWF9FUlIoMCwgNjA2LCBfX3B5eF9M M19lcnJvcikKLSsgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29y ZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgInNl dF9vcHRpb24iKSA8IDApKSBfX1BZWF9FUlIoMCwgNjc0LCBfX3B5eF9MM19lcnJvcikKLSAgICAg ICB9Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4 X2FyZ3MpKSB7Ci1AQCAtMTI1MjIsMjU4ICsxMjg5MSw3NCBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOXRyeV9nZXRfcHJvcGVydHko UHlPYgotICAgICAgIH0KLSAgICAgfQotICAgICBfX3B5eF92X3Byb3AgPSB2YWx1ZXNbMF07Ci0t ICAgIF9fcHl4X3ZfZGVmYXVsdCA9IHZhbHVlc1sxXTsKLSsgICAgX19weXhfdl92YWx1ZSA9IHZh bHVlc1sxXTsKLSAgIH0KLSAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7 Ci0gICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Ci0tICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52 YWxpZCgidHJ5X2dldF9wcm9wZXJ0eSIsIDAsIDEsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhf YXJncykpOyBfX1BZWF9FUlIoMCwgNjA2LCBfX3B5eF9MM19lcnJvcikKLSsgIF9fUHl4X1JhaXNl QXJndHVwbGVJbnZhbGlkKCJzZXRfb3B0aW9uIiwgMCwgMSwgMiwgUHlUdXBsZV9HRVRfU0laRShf X3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA2NzQsIF9fcHl4X0wzX2Vycm9yKQotICAgX19weXhf TDNfZXJyb3I6OwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29u dGV4dC50cnlfZ2V0X3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5 eF9maWxlbmFtZSk7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5D b250ZXh0LnNldF9vcHRpb24iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2Zp bGVuYW1lKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIE5V TEw7Ci0gICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7Ci0tICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4dHJ5X2dldF9wcm9wZXJ0 eSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5 eF92X3NlbGYpLCBfX3B5eF92X3Byb3AsIF9fcHl4X3ZfZGVmYXVsdCk7Ci0tCi0tICAvKiBmdW5j dGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAg cmV0dXJuIF9fcHl4X3I7Ci0tfQotLQotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4dHJ5X2dldF9wcm9wZXJ0eShzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X2RlZmF1bHQpIHsKLS0gIFB5T2JqZWN0 ICpfX3B5eF9yID0gTlVMTDsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBQeU9i amVjdCAqX19weXhfdF8xID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwot LSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF80ID0g TlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4 X3RfNiA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKLS0gIGludCBfX3B5 eF90Xzg7Ci0tICBpbnQgX19weXhfbGluZW5vID0gMDsKLS0gIGNvbnN0IGNoYXIgKl9fcHl4X2Zp bGVuYW1lID0gTlVMTDsKLS0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJ0cnlfZ2V0X3Byb3BlcnR5IiwgMCk7Ci0tCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA3Ci0tICogCi0tICogICAgIGRlZiB0cnlfZ2V0X3By b3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9uZSk6Ci0tICogICAgICAgICB0cnk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRf cHJvcGVydHkocHJvcCkKLS0gKiAgICAgICAgIGV4Y2VwdCBNUFZFcnJvcjoKLS0gKi8KLS0gIHsK LS0gICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9kZWNsYXJlCi0tICAgIF9fUHl4X1B5VGhyZWFkU3Rh dGVfYXNzaWduCi0tICAgIF9fUHl4X0V4Y2VwdGlvblNhdmUoJl9fcHl4X3RfMSwgJl9fcHl4X3Rf MiwgJl9fcHl4X3RfMyk7Ci0tICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19Q eXhfWEdPVFJFRihfX3B5eF90XzIpOwotLSAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7Ci0t ICAgIC8qdHJ5OiovIHsKLS0KLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjA4Ci0tICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9 Tm9uZSk6Ci0tICogICAgICAgICB0cnk6Ci0tICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0 X3Byb3BlcnR5KHByb3ApICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg IGV4Y2VwdCBNUFZFcnJvcjoKLS0gKiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotLSAqLwot LSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICAgICAgX19weXhfdF81ID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9z X2dldF9wcm9wZXJ0eSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDYw OCwgX19weXhfTDNfZXJyb3IpCi0tICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7Ci0tICAg ICAgX19weXhfdF82ID0gTlVMTDsKLS0gICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzUpKSkgewotLSAgICAgICAgX19weXhfdF82 ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF81KTsKLS0gICAgICAgIGlmIChsaWtlbHkoX19w eXhfdF82KSkgewotLSAgICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRf RlVOQ1RJT04oX19weXhfdF81KTsKLS0gICAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNik7 Ci0tICAgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgICAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdF81LCBmdW5jdGlvbik7Ci0tICAgICAgICB9Ci0tICAgICAgfQotLSAg ICAgIF9fcHl4X3RfNCA9IChfX3B5eF90XzYpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfNSwgX19weXhfdF82LCBfX3B5eF92X3Byb3ApIDogX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzUsIF9fcHl4X3ZfcHJvcCk7Ci0tICAgICAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOwotLSAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF80KSkg X19QWVhfRVJSKDAsIDYwOCwgX19weXhfTDNfZXJyb3IpCi0tICAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNCk7Ci0tICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7 Ci0tICAgICAgX19weXhfciA9IF9fcHl4X3RfNDsKLS0gICAgICBfX3B5eF90XzQgPSAwOwotLSAg ICAgIGdvdG8gX19weXhfTDdfdHJ5X3JldHVybjsKLS0KLS0gICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NjA3Ci0tICogCi0tICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5 KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9uZSk6Ci0tICogICAgICAgICB0cnk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVy dHkocHJvcCkKLS0gKiAgICAgICAgIGV4Y2VwdCBNUFZFcnJvcjoKLS0gKi8KLS0gICAgfQotLSAg ICBfX3B5eF9MM19lcnJvcjo7Ci0tICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhf dF80ID0gMDsKLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwot LSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tCi0tICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDkKLS0gKiAgICAgICAgIHRyeToKLS0g KiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHkocHJvcCkKLS0gKiAgICAgICAg IGV4Y2VwdCBNUFZFcnJvcjogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgICAgIHJldHVybiBkZWZhdWx0Ci0tICogCi0tICovCi0tICAgIF9fUHl4X0VyckZldGNoKCZf X3B5eF90XzQsICZfX3B5eF90XzUsICZfX3B5eF90XzYpOwotLSAgICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfNywgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNjA5LCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCi0tICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotLSAgICBfX3B5eF90XzggPSBfX1B5eF9QeUVycl9H aXZlbkV4Y2VwdGlvbk1hdGNoZXMoX19weXhfdF80LCBfX3B5eF90XzcpOwotLSAgICBfX1B5eF9E RUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLS0gICAgX19QeXhfRXJyUmVzdG9yZShf X3B5eF90XzQsIF9fcHl4X3RfNSwgX19weXhfdF82KTsKLS0gICAgX19weXhfdF80ID0gMDsgX19w eXhfdF81ID0gMDsgX19weXhfdF82ID0gMDsKLS0gICAgaWYgKF9fcHl4X3RfOCkgewotLSAgICAg IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQudHJ5X2dldF9w cm9wZXJ0eSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwot LSAgICAgIGlmIChfX1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfNiwgJl9fcHl4X3RfNSwgJl9f cHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgNjA5LCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCi0t ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNSk7Ci0tICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tCi0tICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYxMAotLSAqICAgICAgICAgICAgIHJldHVybiBz ZWxmLmdldF9wcm9wZXJ0eShwcm9wKQotLSAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOgotLSAq ICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAKLS0gKiAgICAgZGVmIGdldF9wcm9wZXJ0eShzZWxmLCBwcm9wKToKLS0gKi8KLS0gICAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X2Rl ZmF1bHQpOwotLSAgICAgIF9fcHl4X3IgPSBfX3B5eF92X2RlZmF1bHQ7Ci0tICAgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICAgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0tICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7 IF9fcHl4X3RfNiA9IDA7Ci0tICAgICAgZ290byBfX3B5eF9MNl9leGNlcHRfcmV0dXJuOwotLSAg ICB9Ci0tICAgIGdvdG8gX19weXhfTDVfZXhjZXB0X2Vycm9yOwotLSAgICBfX3B5eF9MNV9leGNl cHRfZXJyb3I6OwotLQotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA3 Ci0tICogCi0tICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9 Tm9uZSk6Ci0tICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHkocHJvcCkKLS0gKiAgICAgICAg IGV4Y2VwdCBNUFZFcnJvcjoKLS0gKi8KLS0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xKTsK LS0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8yKTsKLS0gICAgX19QeXhfWEdJVkVSRUYoX19w eXhfdF8zKTsKLS0gICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xLCBfX3B5eF90XzIs IF9fcHl4X3RfMyk7Ci0tICAgIGdvdG8gX19weXhfTDFfZXJyb3I7Ci0tICAgIF9fcHl4X0w3X3Ry eV9yZXR1cm46OwotLSAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEpOwotLSAgICBfX1B5eF9Y R0lWRVJFRihfX3B5eF90XzIpOwotLSAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzMpOwotLSAg ICBfX1B5eF9FeGNlcHRpb25SZXNldChfX3B5eF90XzEsIF9fcHl4X3RfMiwgX19weXhfdF8zKTsK LS0gICAgZ290byBfX3B5eF9MMDsKLS0gICAgX19weXhfTDZfZXhjZXB0X3JldHVybjo7Ci0tICAg IF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Rf Mik7Ci0tICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fUHl4X0V4Y2VwdGlv blJlc2V0KF9fcHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMpOwotLSAgICBnb3RvIF9fcHl4 X0wwOwotLSAgfQotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwNgot LSAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0tICogCi0tICogICAgIGRlZiB0cnlfZ2V0 X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgIHRyeToKLS0gKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5n ZXRfcHJvcGVydHkocHJvcCkKLS0gKi8KLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwot LSAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotLSAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzUpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOwotLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzcpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0 ZXIubGlicy5tcHYuQ29udGV4dC50cnlfZ2V0X3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19w eXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICBfX3B5eF9yID0gTlVMTDsKLS0gIF9fcHl4 X0wwOjsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotLSAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0tCi0tLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjYxMgotLSAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0t ICogCi0tICogICAgIGRlZiBnZXRfcHJvcGVydHkoc2VsZiwgcHJvcCk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfZ2V0X3Byb3BlcnR5IiIi Ci0tICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0tICovCi0tCi0tLyogUHl0aG9uIHdyYXBw ZXIgKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8yMWdldF9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfdl9wcm9wKTsgLypwcm90byovCi0tc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMGdldF9wcm9wZXJ0eVtdID0gIldyYXBzOiBtcHZfZ2V0 X3Byb3BlcnR5IjsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8yMWdldF9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9wcm9wKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0tICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImdl dF9wcm9wZXJ0eSAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjBnZXRfcHJvcGVydHkoKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVj dCAqKV9fcHl4X3ZfcHJvcCkpOwotKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8yMHNldF9vcHRpb24oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgX19weXhfdl9wcm9wLCBfX3B5 eF92X3ZhbHVlKTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjBnZXRf cHJvcGVydHkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wKSB7Ci0tICBzdHJ1Y3QgbXB2X25v ZGUgX19weXhfdl9yZXN1bHQ7Ci0tICBjaGFyIGNvbnN0ICpfX3B5eF92X3Byb3BfYzsKLStzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMHNl dF9vcHRpb24oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQeU9iamVjdCAqX19weXhfdl92 YWx1ZSkgewotKyAgZW51bSBtcHZfZm9ybWF0IF9fcHl4X3ZfZm9ybWF0OwotKyAgc3RydWN0IG1w dl9ub2RlIF9fcHl4X3ZfdjsKLSAgIGludCBfX3B5eF92X2VycjsKLS0gIFB5T2JqZWN0ICpfX3B5 eF92X3YgPSBOVUxMOwotKyAgY2hhciBjb25zdCAqX19weXhfdl9wcm9wX2M7Ci0gICBQeU9iamVj dCAqX19weXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotICAgUHlP YmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0gICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsK LSAgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOwotLSAgY2hhciBjb25zdCAqX19weXhfdF80 OwotLSAgaW50IF9fcHl4X3RfNTsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOwotKyAg ZW51bSBtcHZfZm9ybWF0IF9fcHl4X3RfNDsKLSsgIGNoYXIgY29uc3QgKl9fcHl4X3RfNTsKLSsg IGludCBfX3B5eF90XzY7Ci0gICBpbnQgX19weXhfdF83OwotLSAgaW50IF9fcHl4X3RfODsKLS0g IGNoYXIgY29uc3QgKl9fcHl4X3RfOTsKLSsgIGNoYXIgY29uc3QgKl9fcHl4X3RfODsKLSsgIFB5 T2JqZWN0ICpfX3B5eF90XzkgPSBOVUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3RfMTAgPSBOVUxM OwotICAgUHlPYmplY3QgKl9fcHl4X3RfMTEgPSBOVUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3Rf MTIgPSBOVUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3RfMTMgPSBOVUxMOwotICAgUHlPYmplY3Qg Kl9fcHl4X3RfMTQgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMTUgPSBOVUxMOwotICAg aW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5V TEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiZ2V0X3Byb3BlcnR5IiwgMCk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi c2V0X29wdGlvbiIsIDApOwotICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfcHJvcCk7Ci0gCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjE0Ci0tICogICAgIGRlZiBnZXRfcHJv cGVydHkoc2VsZiwgcHJvcCk6Ci0tICogICAgICAgICAiIiJXcmFwczogbXB2X2dldF9wcm9wZXJ0 eSIiIgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3NgotKyAqICAgICBk ZWYgc2V0X29wdGlvbihzZWxmLCBwcm9wLCB2YWx1ZT1UcnVlKToKLSsgKiAgICAgICAgICIiIldy YXBzOiBtcHZfc2V0X29wdGlvbiIiIgotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjZGVmIG1wdl9ub2RlIHJlc3Vs dAotICAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKLSsgKiAgICAgICAgIGNkZWYgbXB2 X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZhbHVlKQotICAqLwotICAgI2lmbmRl ZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05TCi0gICBpZiAodW5saWtlbHkoIVB5X09wdGltaXpl RmxhZykpIHsKLSAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkg ewotICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOwotLSAgICAgIF9f UFlYX0VSUigwLCA2MTQsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fUFlYX0VSUigwLCA2NzYs IF9fcHl4X0wxX2Vycm9yKQotICAgICB9Ci0gICB9Ci0gICAjZW5kaWYKLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MTYKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo2NzcKLSsgKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X29wdGlvbiIiIgot ICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBy ZXN1bHQKLSAgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcAot LSAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0rICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9y bWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkKLSsgKiAgICAgICAgIGNkZWYgbXB2X25vZGUg diA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCi0gICovCi0tICBfX1B5 eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDYxNiwgX19weXhfTDFfZXJyb3IpCi0r ICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY3NywgX19weXhfTDFfZXJy b3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgIF9fcHl4X3RfMyA9IE5VTEw7Ci0g ICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9f cHl4X3RfMikpKSB7Ci1AQCAtMTI3ODcsMjc1ICsxMjk3MiwyMDAgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjBnZXRfcHJvcGVydHko c3RydWN0IF8KLSAgIH0KLSAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmpl Y3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X3Byb3ApIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfcHJvcCk7Ci0gICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCA2MTYsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjc3LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7Ci0gICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfcHJvcCwgX19weXhfdF8xKTsKLSAg IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NjE3Ci0tICogICAgICAgICBjZGVmIG1wdl9ub2RlIHJlc3VsdAotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjY3OAotKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAq ICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKLS0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hh ciogcHJvcF9jID0gcHJvcCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAg ICBjZGVmIGludCBlcnIKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0tICovCi0tICBfX3B5eF90 XzQgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X3Byb3ApOyBpZiAodW5saWtlbHko KCFfX3B5eF90XzQpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNjE3LCBfX3B5 eF9MMV9lcnJvcikKLS0gIF9fcHl4X3ZfcHJvcF9jID0gX19weXhfdF80OwotLQotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYxOQotLSAqICAgICAgICAgY2RlZiBjb25zdCBj aGFyKiBwcm9wX2MgPSBwcm9wCi0rICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0ID0g c2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgY2RlZiBtcHZfbm9kZSB2ID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUodmFsdWUs IGZvcm1hdCkKLSAgKiAgICAgICAgIGNkZWYgaW50IGVycgotLSAqICAgICAgICAgd2l0aCBub2dp bDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGVyciA9IG1w dl9nZXRfcHJvcGVydHkoCi0tICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKLSAgKi8KLS0g IHsKLS0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2 ZTsKLS0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKLS0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVt YmVyKCk7Ci0tICAgICAgI2VuZGlmCi0tICAgICAgLyp0cnk6Ki8gewotKyAgX19weXhfdF8yID0g X19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19w eXhfbl9zX2Zvcm1hdF9mb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigw LCA2NzgsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICBf X3B5eF90XzMgPSBOVUxMOwotKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLSsgICAgX19weXhfdF8zID0gUHlNZXRob2Rf R0VUX1NFTEYoX19weXhfdF8yKTsKLSsgICAgaWYgKGxpa2VseShfX3B5eF90XzMpKSB7Ci0rICAg ICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7 Ci0rICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7Ci0rICAgICAgX19QeXhfSU5DUkVGKGZ1 bmN0aW9uKTsKLSsgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwot KyAgICB9Ci0rICB9Ci0rICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl92YWx1ZSkgOiBfX1B5eF9Q eU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl92YWx1ZSk7Ci0rICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCA2NzgsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsK LSsgIF9fcHl4X3RfNCA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50X0FzX2VudW1fX21w dl9mb3JtYXQoX19weXhfdF8xKSk7IGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkgX19Q WVhfRVJSKDAsIDY3OCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKLSsgIF9fcHl4X3ZfZm9ybWF0ID0gX19weXhfdF80OwotIAotLSAg ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYyMAotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3OQotKyAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMo cHJvcCkKLSsgKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRf Zm9yKHZhbHVlKQotKyAqICAgICAgICAgY2RlZiBtcHZfbm9kZSB2ID0gc2VsZi5fcHJlcF9uYXRp dmVfdmFsdWUodmFsdWUsIGZvcm1hdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAq ICAgICAgICAgY2RlZiBpbnQgZXJyCi0tICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAg ICAgICAgIGVyciA9IG1wdl9nZXRfcHJvcGVydHkoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAotLSAqICAgICAgICAgICAgICAgICBw cm9wX2MsCi0rICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYwotICAqLwotLSAgICAg ICAgX19weXhfdl9lcnIgPSBtcHZfZ2V0X3Byb3BlcnR5KF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19w eXhfdl9wcm9wX2MsIE1QVl9GT1JNQVRfTk9ERSwgKCZfX3B5eF92X3Jlc3VsdCkpOwotLSAgICAg IH0KLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChfX3B5 eF92X2Zvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3OSwg X19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIF9fcHl4X3Zf diA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fcHJlcF9uYXRpdmVfdmFsdWUoX19weXhf dl9zZWxmLCBfX3B5eF92X3ZhbHVlLCBfX3B5eF90XzEpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjYxOQotLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9w Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjgyCi0gICogICAgICAgICBj ZGVmIGludCBlcnIKLS0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfZ2V0X3Byb3BlcnR5KAotLSAqICAg ICAgICAgICAgICAgICBzZWxmLl9jdHgsCi0tICovCi0tICAgICAgLypmaW5hbGx5OiovIHsKLS0g ICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97Ci0tICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAot LSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOwotLSAgICAgICAgICBQeV9CTE9DS19U SFJFQURTCi0tICAgICAgICAgICNlbmRpZgotLSAgICAgICAgICBnb3RvIF9fcHl4X0w1OwotLSAg ICAgICAgfQotLSAgICAgICAgX19weXhfTDU6OwotLSAgICAgIH0KLS0gIH0KLS0KLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MjYKLS0gKiAgICAgICAgICAgICAgICAgJnJl c3VsdCwKLS0gKiAgICAgICAgICAgICApCi0tICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJy KQotLSAqICAgICAgICAgdHJ5OgotKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MK LSsgKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAg ICAgICAgIHByb3BfYyA9IHByb3AKLSsgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotICAqLwot LSAgX19weXhfdF81ID0gKChfX3B5eF92X2VyciA8IDApICE9IDApOwotLSAgaWYgKHVubGlrZWx5 KF9fcHl4X3RfNSkpIHsKLSsgIC8qdHJ5OiovIHsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjYyNwotLSAqICAgICAgICAgICAgICkKLS0gKiAgICAgICAgIGlmIGVy ciA8IDA6Ci0tICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 ODMKLSsgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9jCi0gICogICAgICAgICB0cnk6 Ci0tICogICAgICAgICAgICAgdiA9IF9jb252ZXJ0X25vZGVfdmFsdWUocmVzdWx0KQotKyAqICAg ICAgICAgICAgIHByb3BfYyA9IHByb3AgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgICAgIGVyciA9IG1wdl9z ZXRfb3B0aW9uKAotICAqLwotLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf MiwgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgNjI3LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7 Ci0tICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNjI3LCBfX3B5eF9MMV9lcnJvcikK LS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fcHl4X3RfNiA9IE5VTEw7Ci0t ICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF8yKSkpIHsKLS0gICAgICBfX3B5eF90XzYgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5 eF90XzIpOwotLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF82KSkgewotLSAgICAgICAgUHlPYmpl Y3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0tICAgICAg ICBfX1B5eF9JTkNSRUYoX19weXhfdF82KTsKLS0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlv bik7Ci0tICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotLSAg ICAgIH0KLS0gICAgfQotLSAgICBfX3B5eF90XzEgPSAoX19weXhfdF82KSA/IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNiwgX19weXhfdF8zKSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOwotLSAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA2MjcsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICAgIF9f UHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgICBfX1BZWF9FUlIoMCwgNjI3LCBfX3B5eF9MMV9lcnJv cikKLSsgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9wcm9w KTsgaWYgKHVubGlrZWx5KCghX19weXhfdF81KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDY4MywgX19weXhfTDRfZXJyb3IpCi0rICAgIF9fcHl4X3ZfcHJvcF9jID0gX19weXhf dF81OwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjI2Ci0tICog ICAgICAgICAgICAgICAgICZyZXN1bHQsCi0tICogICAgICAgICAgICAgKQotLSAqICAgICAgICAg aWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAg IHJhaXNlIE1QVkVycm9yKGVycikKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjY4NAotICAqICAgICAgICAgdHJ5OgotKyAqICAgICAgICAgICAgIHByb3BfYyA9IHByb3AK LSsgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICAgICAgICAgIGVyciA9IG1wdl9zZXRfb3B0aW9uKAotKyAqICAgICAgICAg ICAgICAgICAgICAgc2VsZi5fY3R4LAotICAqLwotLSAgfQotKyAgICB7Ci0rICAgICAgICAjaWZk ZWYgV0lUSF9USFJFQUQKLSsgICAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwotKyAgICAgICAg UHlfVU5CTE9DS19USFJFQURTCi0rICAgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0r ICAgICAgICAjZW5kaWYKLSsgICAgICAgIC8qdHJ5OiovIHsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MjgKLS0gKiAgICAgICAgIGlmIGVyciA8IDA6Ci0tICogICAg ICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQotLSAqICAgICAgICAgdHJ5OiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgdiA9IF9jb252ZXJ0X25vZGVfdmFs dWUocmVzdWx0KQotLSAqICAgICAgICAgZmluYWxseToKLSsgICAgICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjY4NQotKyAqICAgICAgICAgICAgIHByb3BfYyA9IHByb3AK LSsgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotKyAqICAgICAgICAgICAgICAgICBlcnIgPSBt cHZfc2V0X29wdGlvbiggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg ICAgICAgICAgICAgc2VsZi5fY3R4LAotKyAqICAgICAgICAgICAgICAgICAgICAgcHJvcF9jLAot ICAqLwotLSAgLyp0cnk6Ki8gewotKyAgICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9zZXRfb3B0 aW9uKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9wcm9wX2MsIE1QVl9GT1JNQVRfTk9ERSwg KCZfX3B5eF92X3YpKTsKLSsgICAgICAgIH0KLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjYyOQotLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKLSsg ICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2ODQKLSAgKiAgICAgICAg IHRyeToKLS0gKiAgICAgICAgICAgICB2ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShyZXN1bHQpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGZpbmFsbHk6Ci0tICogICAg ICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wCi0rICog ICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfc2V0X29wdGlvbigKLSsgKiAgICAgICAgICAgICAg ICAgICAgIHNlbGYuX2N0eCwKLSAgKi8KLS0gICAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShfX3B5eF92X3Jlc3VsdCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYyOSwgX19weXhfTDhfZXJyb3IpCi0t ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgICBfX3B5eF92X3YgPSBfX3B5eF90XzE7 Ci0tICAgIF9fcHl4X3RfMSA9IDA7Ci0rICAgICAgICAvKmZpbmFsbHk6Ki8gewotKyAgICAgICAg ICAvKm5vcm1hbCBleGl0OiovewotKyAgICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotKyAg ICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0rICAgICAgICAgICAgUHlfQkxPQ0tf VEhSRUFEUwotKyAgICAgICAgICAgICNlbmRpZgotKyAgICAgICAgICAgIGdvdG8gX19weXhfTDg7 Ci0rICAgICAgICAgIH0KLSsgICAgICAgICAgX19weXhfTDg6OwotKyAgICAgICAgfQotKyAgICB9 Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMxCi0tICog ICAgICAgICAgICAgdiA9IF9jb252ZXJ0X25vZGVfdmFsdWUocmVzdWx0KQotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5MgotKyAqICAgICAgICAgICAgICAgICApCi0gICog ICAgICAgICBmaW5hbGx5OgotLSAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250 ZW50cygmcmVzdWx0KQotLSAqICAgICAgICAgcmV0dXJuIHYKLSsgKiAgICAgICAgICAgICBzZWxm Ll9mcmVlX25hdGl2ZV92YWx1ZSh2KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgICAgICByZXR1cm4gZXJyCi0rICogCi0gICovCi0gICAvKmZpbmFsbHk6Ki8gewotICAgICAv Km5vcm1hbCBleGl0OiovewotLSAgICAgIHsKLS0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFE Ci0tICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwotLSAgICAgICAgICBQeV9VTkJMT0NL X1RIUkVBRFMKLS0gICAgICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwotLSAgICAgICAg ICAjZW5kaWYKLS0gICAgICAgICAgLyp0cnk6Ki8gewotLQotLSAgICAgICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzIKLS0gKiAgICAgICAgIGZpbmFsbHk6Ci0tICog ICAgICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9k ZV9jb250ZW50cygmcmVzdWx0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAg ICAgICByZXR1cm4gdgotLSAqIAotLSAqLwotLSAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29u dGVudHMoKCZfX3B5eF92X3Jlc3VsdCkpOwotLSAgICAgICAgICB9Ci0tCi0tICAgICAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzEKLS0gKiAgICAgICAgICAgICB2ID0g X2NvbnZlcnRfbm9kZV92YWx1ZShyZXN1bHQpCi0tICogICAgICAgICBmaW5hbGx5OgotLSAqICAg ICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50cygmcmVzdWx0KQotLSAqICAgICAg ICAgcmV0dXJuIHYKLS0gKi8KLS0gICAgICAgICAgLypmaW5hbGx5OiovIHsKLS0gICAgICAgICAg ICAvKm5vcm1hbCBleGl0OiovewotLSAgICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0t ICAgICAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOwotLSAgICAgICAgICAgICAgUHlf QkxPQ0tfVEhSRUFEUwotLSAgICAgICAgICAgICAgI2VuZGlmCi0tICAgICAgICAgICAgICBnb3Rv IF9fcHl4X0wxMjsKLS0gICAgICAgICAgICB9Ci0tICAgICAgICAgICAgX19weXhfTDEyOjsKLS0g ICAgICAgICAgfQotLSAgICAgIH0KLS0gICAgICBnb3RvIF9fcHl4X0w5OwotKyAgICAgIF9fcHl4 X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19w eXhfdl9zZWxmLCBfX3B5eF92X3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA2OTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OwotKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgICAg IGdvdG8gX19weXhfTDU7Ci0gICAgIH0KLS0gICAgX19weXhfTDhfZXJyb3I6OwotKyAgICBfX3B5 eF9MNF9lcnJvcjo7Ci0gICAgIC8qZXhjZXB0aW9uIGV4aXQ6Ki97Ci0gICAgICAgX19QeXhfUHlU aHJlYWRTdGF0ZV9kZWNsYXJlCi0gICAgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24KLS0g ICAgICBfX3B5eF90XzEwID0gMDsgX19weXhfdF8xMSA9IDA7IF9fcHl4X3RfMTIgPSAwOyBfX3B5 eF90XzEzID0gMDsgX19weXhfdF8xNCA9IDA7IF9fcHl4X3RfMTUgPSAwOwotKyAgICAgIF9fcHl4 X3RfOSA9IDA7IF9fcHl4X3RfMTAgPSAwOyBfX3B5eF90XzExID0gMDsgX19weXhfdF8xMiA9IDA7 IF9fcHl4X3RfMTMgPSAwOyBfX3B5eF90XzE0ID0gMDsKLSAgICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOwotICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKLS0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7 Ci0tICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgX19QeXhfRXhjZXB0aW9uU3dhcCgm X19weXhfdF8xMywgJl9fcHl4X3RfMTQsICZfX3B5eF90XzE1KTsKLS0gICAgICBpZiAoKFBZX01B Sk9SX1ZFUlNJT04gPCAzKSB8fCB1bmxpa2VseShfX1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3Rf MTAsICZfX3B5eF90XzExLCAmX19weXhfdF8xMikgPCAwKSkgX19QeXhfRXJyRmV0Y2goJl9fcHl4 X3RfMTAsICZfX3B5eF90XzExLCAmX19weXhfdF8xMik7Ci0rICAgICAgaWYgKFBZX01BSk9SX1ZF UlNJT04gPj0gMykgX19QeXhfRXhjZXB0aW9uU3dhcCgmX19weXhfdF8xMiwgJl9fcHl4X3RfMTMs ICZfX3B5eF90XzE0KTsKLSsgICAgICBpZiAoKFBZX01BSk9SX1ZFUlNJT04gPCAzKSB8fCB1bmxp a2VseShfX1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfOSwgJl9fcHl4X3RfMTAsICZfX3B5eF90 XzExKSA8IDApKSBfX1B5eF9FcnJGZXRjaCgmX19weXhfdF85LCAmX19weXhfdF8xMCwgJl9fcHl4 X3RfMTEpOwotKyAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF85KTsKLSAgICAgICBfX1B5eF9Y R09UUkVGKF9fcHl4X3RfMTApOwotICAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMSk7Ci0g ICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzEyKTsKLSAgICAgICBfX1B5eF9YR09UUkVGKF9f cHl4X3RfMTMpOwotICAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xNCk7Ci0tICAgICAgX19Q eXhfWEdPVFJFRihfX3B5eF90XzE1KTsKLS0gICAgICBfX3B5eF90XzcgPSBfX3B5eF9saW5lbm87 IF9fcHl4X3RfOCA9IF9fcHl4X2NsaW5lbm87IF9fcHl4X3RfOSA9IF9fcHl4X2ZpbGVuYW1lOwot KyAgICAgIF9fcHl4X3RfNiA9IF9fcHl4X2xpbmVubzsgX19weXhfdF83ID0gX19weXhfY2xpbmVu bzsgX19weXhfdF84ID0gX19weXhfZmlsZW5hbWU7Ci0gICAgICAgewotLSAgICAgICAgewotLSAg ICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUg Kl9zYXZlOwotLSAgICAgICAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotLSAgICAgICAgICAgIF9f UHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLS0gICAgICAgICAgICAjZW5kaWYKLS0gICAgICAgICAg ICAvKnRyeToqLyB7Ci0tCi0tICAgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjMyCi0tICogICAgICAgICBmaW5hbGx5OgotLSAqICAgICAgICAgICAgIHdpdGgg bm9naWw6Ci0tICogICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoJnJlc3Vs dCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmV0dXJuIHYKLS0g KiAKLS0gKi8KLS0gICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoKCZfX3B5eF92 X3Jlc3VsdCkpOwotLSAgICAgICAgICAgIH0KLS0KLS0gICAgICAgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjMxCi0tICogICAgICAgICAgICAgdiA9IF9jb252ZXJ0X25v ZGVfdmFsdWUocmVzdWx0KQotLSAqICAgICAgICAgZmluYWxseToKLS0gKiAgICAgICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAg ICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoJnJlc3VsdCkKLS0gKiAgICAgICAgIHJldHVybiB2 Ci0tICovCi0tICAgICAgICAgICAgLypmaW5hbGx5OiovIHsKLS0gICAgICAgICAgICAgIC8qbm9y bWFsIGV4aXQ6Ki97Ci0tICAgICAgICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAg ICAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOwotLSAgICAgICAgICAgICAgICBQeV9C TE9DS19USFJFQURTCi0tICAgICAgICAgICAgICAgICNlbmRpZgotLSAgICAgICAgICAgICAgICBn b3RvIF9fcHl4X0wxNzsKLS0gICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAgIF9fcHl4X0wx Nzo7Ci0tICAgICAgICAgICAgfQotLSAgICAgICAgfQotKyAgICAgICAgX19weXhfdF8xID0gKChz dHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9f cHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYs IF9fcHl4X3Zfdik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY5Miwg X19weXhfTDEwX2Vycm9yKQotKyAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAg ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAgICAgICB9Ci0g ICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgewotKyAgICAgICAgX19QeXhfWEdJVkVS RUYoX19weXhfdF8xMik7Ci0gICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEzKTsKLSAg ICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTQpOwotLSAgICAgICAgX19QeXhfWEdJVkVS RUYoX19weXhfdF8xNSk7Ci0tICAgICAgICBfX1B5eF9FeGNlcHRpb25SZXNldChfX3B5eF90XzEz LCBfX3B5eF90XzE0LCBfX3B5eF90XzE1KTsKLSsgICAgICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0 KF9fcHl4X3RfMTIsIF9fcHl4X3RfMTMsIF9fcHl4X3RfMTQpOwotICAgICAgIH0KLSsgICAgICBf X1B5eF9YR0lWRVJFRihfX3B5eF90XzkpOwotICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Rf MTApOwotICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTEpOwotLSAgICAgIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3RfMTIpOwotLSAgICAgIF9fUHl4X0VyclJlc3RvcmUoX19weXhfdF8xMCwg X19weXhfdF8xMSwgX19weXhfdF8xMik7Ci0tICAgICAgX19weXhfdF8xMCA9IDA7IF9fcHl4X3Rf MTEgPSAwOyBfX3B5eF90XzEyID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3RfMTQgPSAwOyBf X3B5eF90XzE1ID0gMDsKLS0gICAgICBfX3B5eF9saW5lbm8gPSBfX3B5eF90Xzc7IF9fcHl4X2Ns aW5lbm8gPSBfX3B5eF90Xzg7IF9fcHl4X2ZpbGVuYW1lID0gX19weXhfdF85OwotKyAgICAgIF9f UHl4X0VyclJlc3RvcmUoX19weXhfdF85LCBfX3B5eF90XzEwLCBfX3B5eF90XzExKTsKLSsgICAg ICBfX3B5eF90XzkgPSAwOyBfX3B5eF90XzEwID0gMDsgX19weXhfdF8xMSA9IDA7IF9fcHl4X3Rf MTIgPSAwOyBfX3B5eF90XzEzID0gMDsgX19weXhfdF8xNCA9IDA7Ci0rICAgICAgX19weXhfbGlu ZW5vID0gX19weXhfdF82OyBfX3B5eF9jbGluZW5vID0gX19weXhfdF83OyBfX3B5eF9maWxlbmFt ZSA9IF9fcHl4X3RfODsKLSsgICAgICBnb3RvIF9fcHl4X0wxX2Vycm9yOwotKyAgICAgIF9fcHl4 X0wxMF9lcnJvcjo7Ci0rICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgewotKyAgICAg ICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMik7Ci0rICAgICAgICBfX1B5eF9YR0lWRVJFRihf X3B5eF90XzEzKTsKLSsgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTQpOwotKyAgICAg ICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMiwgX19weXhfdF8xMywgX19weXhfdF8x NCk7Ci0rICAgICAgfQotKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsgX19weXhfdF85 ID0gMDsKLSsgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTApOyBfX3B5eF90XzEwID0gMDsK LSsgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90XzExID0gMDsKLSsgICAg ICBfX3B5eF90XzEyID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3RfMTQgPSAwOwotICAgICAg IGdvdG8gX19weXhfTDFfZXJyb3I7Ci0gICAgIH0KLS0gICAgX19weXhfTDk6OwotKyAgICBfX3B5 eF9MNTo7Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMz Ci0tICogICAgICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICAgICAgbXB2X2Zy ZWVfbm9kZV9jb250ZW50cygmcmVzdWx0KQotLSAqICAgICAgICAgcmV0dXJuIHYgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjY5MwotKyAqICAgICAgICAgZmluYWxseToKLSsgKiAgICAgICAgICAgICBzZWxmLl9mcmVlX25h dGl2ZV92YWx1ZSh2KQotKyAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0gICogCi0gICogICAgIEBfZXJyb3JzCi0gICovCi0gICBfX1B5eF9YREVDUkVG KF9fcHl4X3IpOwotLSAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfdik7Ci0tICBfX3B5eF9yID0gX19w eXhfdl92OwotKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2OTMsIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBfX3B5eF9yID0gX19weXhfdF8x OwotKyAgX19weXhfdF8xID0gMDsKLSAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjEyCi0tICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1 bHQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzQKLSAgKiAKLS0gKiAg ICAgZGVmIGdldF9wcm9wZXJ0eShzZWxmLCBwcm9wKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9nZXRfcHJvcGVydHkiIiIKLSsgKiAgICAg QF9lcnJvcnMKLSsgKiAgICAgZGVmIHNldF9vcHRpb24oc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICIiIldyYXBzOiBtcHZf c2V0X29wdGlvbiIiIgotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqLwotIAotQEAg LTEzMDY0LDEwNDcgKzEzMTc0LDc5OCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMGdldF9wcm9wZXJ0eShzdHJ1Y3QgXwotICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzEpOwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzMpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOwot LSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5nZXRfcHJv cGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsg IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuc2V0X29wdGlv biIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotICAgX19w eXhfciA9IE5VTEw7Ci0gICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfdik7 Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfcHJvcCk7Ci0gICBfX1B5eF9YR0lWRVJFRihfX3B5 eF9yKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4 X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzYKLSsvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njk2Ci0gICogCi0gICogICAgIEBfZXJyb3Jz Ci0tICogICAgIGRlZiBzZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSwgYXN5bmNo cm9ub3VzPUZhbHNlLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogICAgICAgICAiIiJXcmFwczogbXB2X3NldF9wcm9wZXJ0eSBhbmQgbXB2X3NldF9wcm9wZXJ0 eV9hc3luYyIiIgotKyAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9pbml0aWFsaXplIiIiCi0g ICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0gICovCi0gCi0gLyogUHl0aG9uIHdyYXBwZXIg Ki8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8yM3NldF9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19w eXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KLS1zdGF0aWMgY2hhciBf X3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIyc2V0X3Byb3BlcnR5W10g PSAiV3JhcHM6IG1wdl9zZXRfcHJvcGVydHkgYW5kIG1wdl9zZXRfcHJvcGVydHlfYXN5bmMiOwot LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzIzc2V0X3Byb3BlcnR5KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9h cmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgewotLSAgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCA9 IDA7Ci0tICBQeU9iamVjdCAqX19weXhfdl92YWx1ZSA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhf dl9hc3luY2hyb25vdXMgPSAwOwotLSAgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSA9IDA7Ci0tICBp bnQgX19weXhfbGluZW5vID0gMDsKLS0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVM TDsKLS0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yM2luaXRpYWxpemUoUHlPYmplY3QgKl9f cHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCi0r c3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMmlu aXRpYWxpemVbXSA9ICJXcmFwczogbXB2X2luaXRpYWxpemUiOwotK3N0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIzaW5pdGlhbGl6ZShQeU9i amVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKLSAg IFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0t ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X3Byb3BlcnR5ICh3cmFwcGVyKSIsIDAp OwotLSAgewotLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9f cHl4X25fc19wcm9wLCZfX3B5eF9uX3NfdmFsdWUsJl9fcHl4X25fc19hc3luY2hyb25vdXMsJl9f cHl4X25fc19kYXRhLDB9OwotLSAgICBQeU9iamVjdCogdmFsdWVzWzRdID0gezAsMCwwLDB9Owot LSAgICB2YWx1ZXNbMV0gPSAoKFB5T2JqZWN0ICopUHlfVHJ1ZSk7Ci0tICAgIHZhbHVlc1syXSA9 ICgoUHlPYmplY3QgKilQeV9GYWxzZSk7Ci0tICAgIHZhbHVlc1szXSA9ICgoUHlPYmplY3QgKilQ eV9Ob25lKTsKLS0gICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7Ci0tICAgICAgUHlfc3Np emVfdCBrd19hcmdzOwotLSAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxl X0dFVF9TSVpFKF9fcHl4X2FyZ3MpOwotLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKLS0gICAg ICAgIGNhc2UgIDQ6IHZhbHVlc1szXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMyk7 Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAzOiB2YWx1ZXNb Ml0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOwotLSAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRF TShfX3B5eF9hcmdzLCAxKTsKLS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAg IGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0t ICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAwOiBicmVhazsKLS0g ICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0tICAgICAgfQot LSAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKLS0gICAgICBzd2l0Y2gg KHBvc19hcmdzKSB7Ci0tICAgICAgICBjYXNlICAwOgotLSAgICAgICAgaWYgKGxpa2VseSgodmFs dWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3By b3ApKSAhPSAwKSkga3dfYXJncy0tOwotLSAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1X2FyZ3R1 cGxlX2Vycm9yOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAg MToKLS0gICAgICAgIGlmIChrd19hcmdzID4gMCkgewotLSAgICAgICAgICBQeU9iamVjdCogdmFs dWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfdmFsdWUp OwotLSAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzFdID0gdmFsdWU7IGt3X2FyZ3MtLTsg fQotLSAgICAgICAgfQotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2Fz ZSAgMjoKLS0gICAgICAgIGlmIChrd19hcmdzID4gMCkgewotLSAgICAgICAgICBQeU9iamVjdCog dmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfYXN5 bmNocm9ub3VzKTsKLS0gICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1syXSA9IHZhbHVlOyBr d19hcmdzLS07IH0KLS0gICAgICAgIH0KLS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0g ICAgICAgIGNhc2UgIDM6Ci0tICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKLS0gICAgICAgICAg UHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19w eXhfbl9zX2RhdGEpOwotLSAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzNdID0gdmFsdWU7 IGt3X2FyZ3MtLTsgfQotLSAgICAgICAgfQotLSAgICAgIH0KLS0gICAgICBpZiAodW5saWtlbHko a3dfYXJncyA+IDApKSB7Ci0tICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25h bEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2Fy Z3MsICJzZXRfcHJvcGVydHkiKSA8IDApKSBfX1BZWF9FUlIoMCwgNjM2LCBfX3B5eF9MM19lcnJv cikKLS0gICAgICB9Ci0tICAgIH0gZWxzZSB7Ci0tICAgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9T SVpFKF9fcHl4X2FyZ3MpKSB7Ci0tICAgICAgICBjYXNlICA0OiB2YWx1ZXNbM10gPSBQeVR1cGxl X0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDMpOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwot LSAgICAgICAgY2FzZSAgMzogdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdz LCAyKTsKLS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDI6IHZh bHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7Ci0tICAgICAgICBDWVRI T05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dF VF9JVEVNKF9fcHl4X2FyZ3MsIDApOwotLSAgICAgICAgYnJlYWs7Ci0tICAgICAgICBkZWZhdWx0 OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotLSAgICAgIH0KLS0gICAgfQotLSAgICBf X3B5eF92X3Byb3AgPSB2YWx1ZXNbMF07Ci0tICAgIF9fcHl4X3ZfdmFsdWUgPSB2YWx1ZXNbMV07 Ci0tICAgIF9fcHl4X3ZfYXN5bmNocm9ub3VzID0gdmFsdWVzWzJdOwotLSAgICBfX3B5eF92X2Rh dGEgPSB2YWx1ZXNbM107Ci0tICB9Ci0tICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2lu Z19kb25lOwotLSAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6OwotLSAgX19QeXhfUmFpc2VBcmd0 dXBsZUludmFsaWQoInNldF9wcm9wZXJ0eSIsIDAsIDEsIDQsIFB5VHVwbGVfR0VUX1NJWkUoX19w eXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNjM2LCBfX3B5eF9MM19lcnJvcikKLS0gIF9fcHl4X0wz X2Vycm9yOjsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRl eHQuc2V0X3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBOVUxM OwotLSAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OwotLSAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMnNldF9wcm9wZXJ0eSgoKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3Nl bGYpLCBfX3B5eF92X3Byb3AsIF9fcHl4X3ZfdmFsdWUsIF9fcHl4X3ZfYXN5bmNocm9ub3VzLCBf X3B5eF92X2RhdGEpOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImluaXRpYWxpemUg KHdyYXBwZXIpIiwgMCk7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzIyaW5pdGlhbGl6ZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4g X19weXhfcjsKLSB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMjJzZXRfcHJvcGVydHkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9w cm9wLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSwgUHlPYmplY3QgKl9fcHl4X3ZfYXN5bmNocm9u b3VzLCBQeU9iamVjdCAqX19weXhfdl9kYXRhKSB7Ci0tICBlbnVtIG1wdl9mb3JtYXQgX19weXhf dl9mb3JtYXQ7Ci0tICBzdHJ1Y3QgbXB2X25vZGUgX19weXhfdl92OwotK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIyaW5pdGlhbGl6ZShz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3Nl bGYpIHsKLSAgIGludCBfX3B5eF92X2VycjsKLS0gIHVpbnQ2NF90IF9fcHl4X3ZfZGF0YV9pZDsK LS0gIGNoYXIgY29uc3QgKl9fcHl4X3ZfcHJvcF9jOwotLSAgUHlPYmplY3QgKl9fcHl4X3ZfdXNl cmRhdGFzID0gTlVMTDsKLSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCi0gICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLS0gIFB5 T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7 Ci0tICBlbnVtIG1wdl9mb3JtYXQgX19weXhfdF80OwotLSAgY2hhciBjb25zdCAqX19weXhfdF81 OwotLSAgaW50IF9fcHl4X3RfNjsKLS0gIGludCBfX3B5eF90Xzc7Ci0tICBQeV9oYXNoX3QgX19w eXhfdF84OwotLSAgUHlPYmplY3QgKl9fcHl4X3RfOSA9IE5VTEw7Ci0tICBpbnQgX19weXhfdF8x MDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzExID0gTlVMTDsKLS0gIGludCBfX3B5eF90XzEyOwot LSAgY2hhciBjb25zdCAqX19weXhfdF8xMzsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzE0ID0gTlVM TDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzE1ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90 XzE2ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzE3ID0gTlVMTDsKLS0gIFB5T2JqZWN0 ICpfX3B5eF90XzE4ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzE5ID0gTlVMTDsKLSAg IGludCBfX3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoInNldF9wcm9wZXJ0eSIsIDApOwotLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfcHJvcCk7 Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiaW5pdGlhbGl6ZSIsIDApOwotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzOAotLSAqICAgICBkZWYgc2V0X3By b3BlcnR5KHNlbGYsIHByb3AsIHZhbHVlPVRydWUsIGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1O b25lKToKLS0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0 X3Byb3BlcnR5X2FzeW5jIiIiCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 Njk4Ci0rICogICAgIGRlZiBpbml0aWFsaXplKHNlbGYpOgotKyAqICAgICAgICAgIiIiV3JhcHM6 IG1wdl9pbml0aWFsaXplIiIiCi0gICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCi0t ICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1 ZSkKLSsgKiAgICAgICAgIGNkZWYgaW50IGVycgotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSAg Ki8KLSAgICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUwotICAgaWYgKHVubGlrZWx5 KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Ci0gICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+ X2N0eCAhPSAwKSkpIHsKLSAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9y KTsKLS0gICAgICBfX1BZWF9FUlIoMCwgNjM4LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBfX1BZ WF9FUlIoMCwgNjk4LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgfQotICAgfQotICAgI2VuZGlmCi0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjM5Ci0tICogICAgICAgICAi IiJXcmFwczogbXB2X3NldF9wcm9wZXJ0eSBhbmQgbXB2X3NldF9wcm9wZXJ0eV9hc3luYyIiIgot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwMAotICAqICAgICAgICAgYXNz ZXJ0IHNlbGYuX2N0eAotLSAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgY2RlZiBtcHZfZm9ybWF0IGZvcm1hdCA9 IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCi0tICogICAgICAgICBjZGVmIG1wdl9ub2RlIHYgPSBz ZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQotKyAqICAgICAgICAgY2RlZiBp bnQgZXJyCi0rICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogICAgICAgICAgICAgZXJyID0gbXB2X2luaXRpYWxpemUoc2VsZi5fY3R4KQotKyAq ICAgICAgICAgcmV0dXJuIGVycgotICAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShf X3B5eF90XzIsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9f UFlYX0VSUigwLCA2MzksIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Mik7Ci0tICBfX3B5eF90XzMgPSBOVUxMOwotLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAm JiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotLSAgICBfX3B5eF90XzMg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3Rf MykpIHsKLS0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04o X19weXhfdF8yKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKLS0gICAgICBfX1B5 eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBm dW5jdGlvbik7Ci0tICAgIH0KLS0gIH0KLS0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19Q eXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X3Byb3Ap IDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfcHJvcCk7Ci0t ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2MzksIF9fcHl4X0wxX2Vycm9yKQotLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhf dF8yID0gMDsKLS0gIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl9wcm9wLCBfX3B5eF90XzEpOwot LSAgX19weXhfdF8xID0gMDsKLSsgIHsKLSsgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAg ICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKLSsgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKLSsgICAg ICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0rICAgICAgI2VuZGlmCi0rICAgICAgLyp0cnk6 Ki8gewotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0MAotLSAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotLSAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkK LS0gKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZh bHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjZGVmIG1wdl9u b2RlIHYgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQotKyAgICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwMQotICAqICAgICAgICAgY2RlZiBp bnQgZXJyCi0rICogICAgICAgICB3aXRoIG5vZ2lsOgotKyAqICAgICAgICAgICAgIGVyciA9IG1w dl9pbml0aWFsaXplKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgcmV0dXJuIGVycgotKyAqIAotICAqLwotLSAgX19weXhfdF8yID0gX19QeXhfUHlP YmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX2Zv cm1hdF9mb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2NDAsIF9f cHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX3B5eF90XzMg PSBOVUxMOwotLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2Rf Q2hlY2soX19weXhfdF8yKSkpIHsKLS0gICAgX19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NFTEYo X19weXhfdF8yKTsKLS0gICAgaWYgKGxpa2VseShfX3B5eF90XzMpKSB7Ci0tICAgICAgUHlPYmpl Y3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0tICAgICAg X19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7Ci0tICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsK LS0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotLSAgICB9Ci0t ICB9Ci0tICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJn cyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl92YWx1ZSkgOiBfX1B5eF9QeU9iamVjdF9D YWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl92YWx1ZSk7Ci0tICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCA2NDAsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gIF9fcHl4 X3RfNCA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9mb3JtYXQo X19weXhfdF8xKSk7IGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAs IDY0MCwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKLS0gIF9fcHl4X3ZfZm9ybWF0ID0gX19weXhfdF80OwotKyAgICAgICAgX19weXhf dl9lcnIgPSBtcHZfaW5pdGlhbGl6ZShfX3B5eF92X3NlbGYtPl9jdHgpOwotKyAgICAgIH0KLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDEKLS0gKiAgICAgICAgIHBy b3AgPSBfc3RyZW5jKHByb3ApCi0tICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0ID0g c2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkKLS0gKiAgICAgICAgIGNkZWYgbXB2X25vZGUgdiA9IHNl bGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAwCi0r ICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0gICogICAgICAgICBjZGVmIGludCBlcnIKLS0g KiAgICAgICAgIGNkZWYgdWludDY0X3QgZGF0YV9pZAotLSAqLwotLSAgX19weXhfdF8xID0gX19Q eXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KF9fcHl4X3ZfZm9ybWF0KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjQxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19weXhfdl92ID0gKChzdHJ1Y3QgX19weXhfdnRh YnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19w eXhfdnRhYiktPl9wcmVwX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3ZfdmFsdWUs IF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK LS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDUKLS0gKiAgICAgICAg IGNkZWYgdWludDY0X3QgZGF0YV9pZAotLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9w X2MKLS0gKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgICAgIHByb3BfYyA9IHByb3AKLS0gKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9u b3VzOgotKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9pbml0aWFsaXplKHNlbGYuX2N0eCkKLSsgKiAg ICAgICAgIHJldHVybiBlcnIKLSAgKi8KLS0gIC8qdHJ5OiovIHsKLSsgICAgICAvKmZpbmFsbHk6 Ki8gewotKyAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKLSsgICAgICAgICAgI2lmZGVmIFdJVEhf VEhSRUFECi0rICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0rICAgICAgICAgIFB5 X0JMT0NLX1RIUkVBRFMKLSsgICAgICAgICAgI2VuZGlmCi0rICAgICAgICAgIGdvdG8gX19weXhf TDU7Ci0rICAgICAgICB9Ci0rICAgICAgICBfX3B5eF9MNTo7Ci0rICAgICAgfQotKyAgfQotIAot LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjQ2Ci0tICogICAgICAgICBj ZGVmIGNvbnN0IGNoYXIqIHByb3BfYwotLSAqICAgICAgICAgdHJ5OgotLSAqICAgICAgICAgICAg IHByb3BfYyA9IHByb3AgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAg ICAgIGlmIG5vdCBhc3luY2hyb25vdXM6Ci0tICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6 Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAyCi0rICogICAgICAgICB3 aXRoIG5vZ2lsOgotKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9pbml0aWFsaXplKHNlbGYuX2N0 eCkKLSsgKiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAqIAotKyAqICAgICBkZWYgd2FpdF9ldmVudChzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAqLwot LSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X3Byb3ApOyBp ZiAodW5saWtlbHkoKCFfX3B5eF90XzUpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIo MCwgNjQ2LCBfX3B5eF9MNF9lcnJvcikKLS0gICAgX19weXhfdl9wcm9wX2MgPSBfX3B5eF90XzU7 Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRf RnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA3MDIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0r ICBfX3B5eF9yID0gX19weXhfdF8xOwotKyAgX19weXhfdF8xID0gMDsKLSsgIGdvdG8gX19weXhf TDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDcKLS0gKiAg ICAgICAgIHRyeToKLS0gKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wCi0tICogICAgICAgICAg ICAgaWYgbm90IGFzeW5jaHJvbm91czogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq ICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgICAgICAgICAgZXJy ID0gbXB2X3NldF9wcm9wZXJ0eSgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo2OTYKLSsgKiAKLSsgKiAgICAgQF9lcnJvcnMKLSsgKiAgICAgZGVmIGluaXRpYWxpemUoc2Vs Zik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICIiIldyYXBzOiBt cHZfaW5pdGlhbGl6ZSIiIgotKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqLwotLSAg ICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9hc3luY2hyb25vdXMp OyBpZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlYX0VSUigwLCA2NDcsIF9fcHl4X0w0 X2Vycm9yKQotLSAgICBfX3B5eF90XzcgPSAoKCFfX3B5eF90XzYpICE9IDApOwotLSAgICBpZiAo X19weXhfdF83KSB7Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjY0OAotLSAqICAgICAgICAgICAgIHByb3BfYyA9IHByb3AKLS0gKiAgICAgICAgICAgICBpZiBu b3QgYXN5bmNocm9ub3VzOgotLSAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZf c2V0X3Byb3BlcnR5KAotLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKLS0g Ki8KLS0gICAgICB7Ci0tICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgICAgICBQ eVRocmVhZFN0YXRlICpfc2F2ZTsKLS0gICAgICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0tICAg ICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLS0gICAgICAgICAgI2VuZGlmCi0tICAg ICAgICAgIC8qdHJ5OiovIHsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19weXhf TDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotKyAgX19QeXhfQWRkVHJh Y2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5pbml0aWFsaXplIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX3B5eF9yID0gTlVMTDsK LSsgIF9fcHl4X0wwOjsKLSsgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotKyAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19weXhfcjsKLSt9Ci0gCi0tICAgICAg ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0OQotLSAqICAgICAgICAg ICAgIGlmIG5vdCBhc3luY2hyb25vdXM6Ci0tICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6 Ci0tICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfc2V0X3Byb3BlcnR5KCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f Y3R4LAotLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfYywKLSsvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzA0Ci0rICogICAgICAgICByZXR1cm4gZXJyCi0rICogCi0r ICogICAgIGRlZiB3YWl0X2V2ZW50KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICIiIldyYXBzOiBtcHZfd2FpdF9ldmVudCIiIgot KyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqLwotLSAgICAgICAgICAgIF9fcHl4X3Zf ZXJyID0gbXB2X3NldF9wcm9wZXJ0eShfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcHJvcF9j LCBNUFZfRk9STUFUX05PREUsICgmX19weXhfdl92KSk7Ci0tICAgICAgICAgIH0KLSAKLS0gICAg ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0OAotLSAqICAgICAgICAg ICAgIHByb3BfYyA9IHByb3AKLS0gKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgot LSAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfc2V0X3Byb3BlcnR5KAotLSAq ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKLS0gKi8KLS0gICAgICAgICAgLypm aW5hbGx5OiovIHsKLS0gICAgICAgICAgICAvKm5vcm1hbCBleGl0OiovewotLSAgICAgICAgICAg ICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgICAgICAgICBfX1B5eF9GYXN0R0lMX0Zvcmdl dCgpOwotLSAgICAgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotLSAgICAgICAgICAgICAgI2Vu ZGlmCi0tICAgICAgICAgICAgICBnb3RvIF9fcHl4X0w5OwotLSAgICAgICAgICAgIH0KLS0gICAg ICAgICAgICBfX3B5eF9MOTo7Ci0tICAgICAgICAgIH0KLSsvKiBQeXRob24gd3JhcHBlciAqLwot K3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzI1d2FpdF9ldmVudChQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJn cywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KLStzdGF0aWMgY2hhciBfX3B5eF9k b2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI0d2FpdF9ldmVudFtdID0gIldyYXBz OiBtcHZfd2FpdF9ldmVudCI7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMjV3YWl0X2V2ZW50KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgewotKyAgUHlPYmpl Y3QgKl9fcHl4X3ZfdGltZW91dCA9IDA7Ci0rICBpbnQgX19weXhfbGluZW5vID0gMDsKLSsgIGNv bnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSsgIGludCBfX3B5eF9jbGluZW5vID0g MDsKLSsgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgid2FpdF9ldmVudCAod3JhcHBlciki LCAwKTsKLSsgIHsKLSsgICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0g eyZfX3B5eF9uX3NfdGltZW91dCwwfTsKLSsgICAgUHlPYmplY3QqIHZhbHVlc1sxXSA9IHswfTsK LSsgICAgdmFsdWVzWzBdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOwotKyAgICBpZiAodW5saWtl bHkoX19weXhfa3dkcykpIHsKLSsgICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7Ci0rICAgICAgY29u c3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7Ci0r ICAgICAgc3dpdGNoIChwb3NfYXJncykgewotKyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKLSsgICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKLSsgICAgICAgIGNhc2UgIDA6IGJyZWFrOwotKyAgICAgICAgZGVmYXVsdDogZ290byBf X3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLSsgICAgICB9Ci0rICAgICAga3dfYXJncyA9IFB5RGlj dF9TaXplKF9fcHl4X2t3ZHMpOwotKyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKLSsgICAgICAg IGNhc2UgIDA6Ci0rICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKLSsgICAgICAgICAgUHlPYmpl Y3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9z X3RpbWVvdXQpOwotKyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzBdID0gdmFsdWU7IGt3 X2FyZ3MtLTsgfQotKyAgICAgICAgfQotKyAgICAgIH0KLSsgICAgICBpZiAodW5saWtlbHkoa3df YXJncyA+IDApKSB7Ci0rICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtl eXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3Ms ICJ3YWl0X2V2ZW50IikgPCAwKSkgX19QWVhfRVJSKDAsIDcwNCwgX19weXhfTDNfZXJyb3IpCi0r ICAgICAgfQotKyAgICB9IGVsc2UgewotKyAgICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShf X3B5eF9hcmdzKSkgewotKyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRf SVRFTShfX3B5eF9hcmdzLCAwKTsKLSsgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAg ICAgIGNhc2UgIDA6IGJyZWFrOwotKyAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0 dXBsZV9lcnJvcjsKLSAgICAgICB9Ci0rICAgIH0KLSsgICAgX19weXhfdl90aW1lb3V0ID0gdmFs dWVzWzBdOwotKyAgfQotKyAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsK LSsgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKLSsgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZh bGlkKCJ3YWl0X2V2ZW50IiwgMCwgMCwgMSwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7 IF9fUFlYX0VSUigwLCA3MDQsIF9fcHl4X0wzX2Vycm9yKQotKyAgX19weXhfTDNfZXJyb3I6Owot KyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC53YWl0X2V2 ZW50IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBOVUxMOwotKyAgX19weXhf TDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OwotKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNHdhaXRfZXZlbnQoKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgX19weXhfdl90 aW1lb3V0KTsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjU1 Ci0tICogICAgICAgICAgICAgICAgICAgICAgICAgJnYKLS0gKiAgICAgICAgICAgICAgICAgICAg ICkKLS0gKiAgICAgICAgICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogICAgICAgICAgICAgZGF0YV9pZCA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCi0t ICogICAgICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoZGF0YV9p ZCwgTm9uZSkKLS0gKi8KLS0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICAgIF9f cHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjU1LCBfX3B5eF9MNF9lcnJvcikKLS0gICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgICBfX3B5eF9yID0gX19weXhfdF8xOwotLSAg ICAgIF9fcHl4X3RfMSA9IDA7Ci0tICAgICAgZ290byBfX3B5eF9MM19yZXR1cm47Ci0rICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwot KyAgcmV0dXJuIF9fcHl4X3I7Ci0rfQotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo2NDcKLS0gKiAgICAgICAgIHRyeToKLS0gKiAgICAgICAgICAgICBwcm9wX2Mg PSBwcm9wCi0tICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAg ICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0eSgKLStzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNHdhaXRfZXZlbnQo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9z ZWxmLCBQeU9iamVjdCAqX19weXhfdl90aW1lb3V0KSB7Ci0rICBkb3VibGUgX19weXhfdl90aW1l b3V0X2Q7Ci0rICBzdHJ1Y3QgbXB2X2V2ZW50ICpfX3B5eF92X2V2ZW50OwotKyAgUHlPYmplY3Qg Kl9fcHl4X3IgPSBOVUxMOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIGRvdWJs ZSBfX3B5eF90XzE7Ci0rICBpbnQgX19weXhfdF8yOwotKyAgZG91YmxlIF9fcHl4X3RfMzsKLSsg IFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5V TEw7Ci0rICBpbnQgX19weXhfbGluZW5vID0gMDsKLSsgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVu YW1lID0gTlVMTDsKLSsgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJ3YWl0X2V2ZW50IiwgMCk7Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzA2Ci0rICogICAgIGRlZiB3YWl0X2V2ZW50KHNlbGYsIHRpbWVvdXQ9 Tm9uZSk6Ci0rICogICAgICAgICAiIiJXcmFwczogbXB2X3dhaXRfZXZlbnQiIiIKLSsgKiAgICAg ICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICAgICAgY2RlZiBkb3VibGUgdGltZW91dF9kID0gdGltZW91dCBpZiB0aW1lb3V0IGlzIG5vdCBO b25lIGVsc2UgLTEKLSsgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50KiBldmVudAotICAqLwotKyAg I2lmbmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05TCi0rICBpZiAodW5saWtlbHkoIVB5X09w dGltaXplRmxhZykpIHsKLSsgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9 IDApKSkgewotKyAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOwotKyAg ICAgIF9fUFlYX0VSUigwLCA3MDYsIF9fcHl4X0wxX2Vycm9yKQotICAgICB9Ci0rICB9Ci0rICAj ZW5kaWYKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1NgotLSAq ICAgICAgICAgICAgICAgICAgICAgKQotLSAqICAgICAgICAgICAgICAgICByZXR1cm4gZXJyCi0t ICogICAgICAgICAgICAgZGF0YV9pZCA9IDx1aW50NjRfdD5oYXNoKGRhdGEpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5 X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQotLSAqICAgICAgICAgICAgIGlmIHVzZXJkYXRh cyBpcyBOb25lOgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwNwotKyAq ICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWl0X2V2ZW50IiIiCi0rICogICAgICAgICBhc3NlcnQg c2VsZi5fY3R4Ci0rICogICAgICAgICBjZGVmIGRvdWJsZSB0aW1lb3V0X2QgPSB0aW1lb3V0IGlm IHRpbWVvdXQgaXMgbm90IE5vbmUgZWxzZSAtMSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICBjZGVmIG1wdl9ldmVudCogZXZlbnQKLSsgKiAgICAgICAgIHdpdGggbm9n aWw6Ci0gICovCi0tICAgIF9fcHl4X3RfOCA9IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRhKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfOCA9PSAoKFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIoMCwg NjU2LCBfX3B5eF9MNF9lcnJvcikKLS0gICAgX19weXhfdl9kYXRhX2lkID0gKCh1aW50NjRfdClf X3B5eF90XzgpOwotLQotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjU3 Ci0tICogICAgICAgICAgICAgICAgIHJldHVybiBlcnIKLS0gKiAgICAgICAgICAgICBkYXRhX2lk ID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKLS0gKiAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxm LnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6Ci0tICogICAgICAg ICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVw bHlVc2VyRGF0YShkYXRhKQotLSAqLwotLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9H ZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X25fc19nZXQpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9y KQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19weXhfdF8zID0gX19QeXhf UHlJbnRfRnJvbV91aW50NjRfdChfX3B5eF92X2RhdGFfaWQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9yKQotLSAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8zKTsKLS0gICAgX19weXhfdF85ID0gTlVMTDsKLS0gICAgX19weXhfdF8xMCA9 IDA7Ci0tICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0No ZWNrKF9fcHl4X3RfMikpKSB7Ci0tICAgICAgX19weXhfdF85ID0gUHlNZXRob2RfR0VUX1NFTEYo X19weXhfdF8yKTsKLS0gICAgICBpZiAobGlrZWx5KF9fcHl4X3RfOSkpIHsKLS0gICAgICAgIFB5 T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwotLSAg ICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfOSk7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoZnVu Y3Rpb24pOwotLSAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsK LS0gICAgICAgIF9fcHl4X3RfMTAgPSAxOwotLSAgICAgIH0KLS0gICAgfQotLSAgICAjaWYgQ1lU SE9OX0ZBU1RfUFlDQUxMCi0tICAgIGlmIChQeUZ1bmN0aW9uX0NoZWNrKF9fcHl4X3RfMikpIHsK LS0gICAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzksIF9fcHl4X3RfMywg UHlfTm9uZX07Ci0tICAgICAgX19weXhfdF8xID0gX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChf X3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5eF90XzEwLCAyK19fcHl4X3RfMTApOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9yKQotLSAg ICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsgX19weXhfdF85ID0gMDsKLS0gICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19w eXhfdF8zID0gMDsKLS0gICAgfSBlbHNlCi0tICAgICNlbmRpZgotLSAgICAjaWYgQ1lUSE9OX0ZB U1RfUFlDQ0FMTAotLSAgICBpZiAoX19QeXhfUHlGYXN0Q0Z1bmN0aW9uX0NoZWNrKF9fcHl4X3Rf MikpIHsKLS0gICAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzksIF9fcHl4 X3RfMywgUHlfTm9uZX07Ci0tICAgICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFz dENhbGwoX19weXhfdF8yLCBfX3B5eF90ZW1wKzEtX19weXhfdF8xMCwgMitfX3B5eF90XzEwKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjU3LCBfX3B5eF9MNF9lcnJv cikKLS0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7Ci0tICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Myk7IF9fcHl4X3RfMyA9IDA7Ci0tICAgIH0gZWxzZQotLSAgICAjZW5kaWYKLS0gICAgewotLSAg ICAgIF9fcHl4X3RfMTEgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfMTApOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMTEpKSBfX1BZWF9FUlIoMCwgNjU3LCBfX3B5eF9MNF9lcnJvcikKLS0gICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xMSk7Ci0tICAgICAgaWYgKF9fcHl4X3RfOSkgewotLSAgICAg ICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzkpOyBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMTEs IDAsIF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IE5VTEw7Ci0tICAgICAgfQotLSAgICAgIF9fUHl4 X0dJVkVSRUYoX19weXhfdF8zKTsKLS0gICAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMTEs IDArX19weXhfdF8xMCwgX19weXhfdF8zKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7 Ci0tICAgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKLS0gICAgICBQeVR1cGxlX1NFVF9JVEVN KF9fcHl4X3RfMTEsIDErX19weXhfdF8xMCwgUHlfTm9uZSk7Ci0tICAgICAgX19weXhfdF8zID0g MDsKLS0gICAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMiwgX19w eXhfdF8xMSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY1 NywgX19weXhfTDRfZXJyb3IpCi0tICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90XzExID0gMDsKLS0gICAgfQotLSAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gICAgX19weXhfdl91 c2VyZGF0YXMgPSBfX3B5eF90XzE7Ci0tICAgIF9fcHl4X3RfMSA9IDA7Ci0rICBfX3B5eF90XzIg PSAoX19weXhfdl90aW1lb3V0ICE9IFB5X05vbmUpOwotKyAgaWYgKChfX3B5eF90XzIgIT0gMCkp IHsKLSsgICAgX19weXhfdF8zID0gX19weXhfUHlGbG9hdF9Bc0RvdWJsZShfX3B5eF92X3RpbWVv dXQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoZG91YmxlKS0xKSAmJiBQeUVycl9PY2N1 cnJlZCgpKSkgX19QWVhfRVJSKDAsIDcwNywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3Rf MSA9IF9fcHl4X3RfMzsKLSsgIH0gZWxzZSB7Ci0rICAgIF9fcHl4X3RfMSA9IC0xLjA7Ci0rICB9 Ci0rICBfX3B5eF92X3RpbWVvdXRfZCA9IF9fcHl4X3RfMTsKLSAKLS0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjY1OAotLSAqICAgICAgICAgICAgIGRhdGFfaWQgPSA8dWlu dDY0X3Q+aGFzaChkYXRhKQotLSAqICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlf dXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCi0tICogICAgICAgICAgICAgaWYgdXNlcmRhdGFz IGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAg ICAgc2VsZi5yZXBseV91c2VyZGF0YVtkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJE YXRhKGRhdGEpCi0tICogICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCi0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzA5Ci0rICogICAgICAgICBjZGVmIGRvdWJsZSB0aW1l b3V0X2QgPSB0aW1lb3V0IGlmIHRpbWVvdXQgaXMgbm90IE5vbmUgZWxzZSAtMQotKyAqICAgICAg ICAgY2RlZiBtcHZfZXZlbnQqIGV2ZW50Ci0rICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgZXZlbnQgPSBtcHZfd2FpdF9l dmVudChzZWxmLl9jdHgsIHRpbWVvdXRfZCkKLSsgKiAgICAgICAgIHJldHVybiBFdmVudCgpLl9p bml0KGV2ZW50LCBzZWxmKQotICAqLwotLSAgICBfX3B5eF90XzcgPSAoX19weXhfdl91c2VyZGF0 YXMgPT0gUHlfTm9uZSk7Ci0tICAgIF9fcHl4X3RfNiA9IChfX3B5eF90XzcgIT0gMCk7Ci0tICAg IGlmIChfX3B5eF90XzYpIHsKLSsgIHsKLSsgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAg ICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKLSsgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKLSsgICAg ICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0rICAgICAgI2VuZGlmCi0rICAgICAgLyp0cnk6 Ki8gewotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTkKLS0g KiAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lk LCBOb25lKQotLSAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgotLSAqICAgICAg ICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1Jl cGx5VXNlckRhdGEoZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgICAgIHVzZXJkYXRhcy5hZGQoKQotLSAqICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0rICAg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzEwCi0rICogICAgICAgICBj ZGVmIG1wdl9ldmVudCogZXZlbnQKLSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAg ICAgICAgZXZlbnQgPSBtcHZfd2FpdF9ldmVudChzZWxmLl9jdHgsIHRpbWVvdXRfZCkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIEV2ZW50KCkuX2luaXQo ZXZlbnQsIHNlbGYpCi0rICogCi0gICovCi0tICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzIsIF9fcHl4X25fc19SZXBseVVzZXJEYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgNjU5LCBfX3B5eF9MNF9lcnJvcikKLS0gICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKLS0gICAgICBfX3B5eF90XzExID0gTlVMTDsKLS0gICAgICBpZiAo Q1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3Rf MikpKSB7Ci0tICAgICAgICBfX3B5eF90XzExID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8y KTsKLS0gICAgICAgIGlmIChsaWtlbHkoX19weXhfdF8xMSkpIHsKLS0gICAgICAgICAgUHlPYmpl Y3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0tICAgICAg ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzExKTsKLS0gICAgICAgICAgX19QeXhfSU5DUkVGKGZ1 bmN0aW9uKTsKLS0gICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9u KTsKLS0gICAgICAgIH0KLSsgICAgICAgIF9fcHl4X3ZfZXZlbnQgPSBtcHZfd2FpdF9ldmVudChf X3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfdGltZW91dF9kKTsKLSAgICAgICB9Ci0tICAgICAg X19weXhfdF8xID0gKF9fcHl4X3RfMTEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4 X3RfMiwgX19weXhfdF8xMSwgX19weXhfdl9kYXRhKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF8yLCBfX3B5eF92X2RhdGEpOwotLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF8xMSk7IF9fcHl4X3RfMTEgPSAwOwotLSAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDY1OSwgX19weXhfTDRfZXJyb3IpCi0tICAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7Ci0tICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 Ci0tICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl9zZWxmLT5yZXBs eV91c2VyZGF0YSwgX19weXhfdl9kYXRhX2lkLCBfX3B5eF90XzEsIHVpbnQ2NF90LCAwLCBfX1B5 eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNjU5LCBf X3B5eF9MNF9lcnJvcikKLS0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKLS0gICAgICBf X1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF90XzEpOwotLSAgICAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLQotLSAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTgKLS0gKiAgICAgICAgICAgICBkYXRhX2lkID0g PHVpbnQ2NF90Pmhhc2goZGF0YSkKLS0gKiAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJl cGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQotLSAqICAgICAgICAgICAgIGlmIHVzZXJk YXRhcyBpcyBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAg ICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlV c2VyRGF0YShkYXRhKQotLSAqICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQotLSAqLwotLSAg ICB9Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NjAKLS0gKiAg ICAgICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKLS0gKiAgICAgICAgICAgICAgICAgc2Vs Zi5yZXBseV91c2VyZGF0YVtkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRh dGEpCi0tICogICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgICAg ICBlcnIgPSBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jKAotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3MDkKLSsgKiAgICAgICAgIGNkZWYgZG91YmxlIHRpbWVvdXRfZCA9 IHRpbWVvdXQgaWYgdGltZW91dCBpcyBub3QgTm9uZSBlbHNlIC0xCi0rICogICAgICAgICBjZGVm IG1wdl9ldmVudCogZXZlbnQKLSsgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBldmVudCA9IG1wdl93YWl0X2V2ZW50KHNl bGYuX2N0eCwgdGltZW91dF9kKQotKyAqICAgICAgICAgcmV0dXJuIEV2ZW50KCkuX2luaXQoZXZl bnQsIHNlbGYpCi0gICovCi0tICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X25fc19hZGQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA2NjAsIF9fcHl4X0w0X2Vycm9yKQotLSAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKLS0gICAgX19weXhfdF8xMSA9IE5VTEw7Ci0tICAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Ci0t ICAgICAgX19weXhfdF8xMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Ci0tICAgICAg aWYgKGxpa2VseShfX3B5eF90XzExKSkgewotLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0g UHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYo X19weXhfdF8xMSk7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgICAg X19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKLSsgICAgICAvKmZpbmFsbHk6 Ki8gewotKyAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKLSsgICAgICAgICAgI2lmZGVmIFdJVEhf VEhSRUFECi0rICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0rICAgICAgICAgIFB5 X0JMT0NLX1RIUkVBRFMKLSsgICAgICAgICAgI2VuZGlmCi0rICAgICAgICAgIGdvdG8gX19weXhf TDU7Ci0rICAgICAgICB9Ci0rICAgICAgICBfX3B5eF9MNTo7Ci0gICAgICAgfQotLSAgICB9Ci0t ICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzExKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8yLCBfX3B5eF90XzExKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90 XzIpOwotLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90XzExID0gMDsKLS0g ICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjYwLCBfX3B5eF9MNF9l cnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKLSsgIH0KLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjY2MQotLSAqICAgICAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2RhdGFf aWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKLS0gKiAgICAgICAgICAgICB1 c2VyZGF0YXMuYWRkKCkKLS0gKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgIGVyciA9IG1wdl9zZXRfcHJvcGVy dHlfYXN5bmMoCi0tICogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCi0rICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzExCi0rICogICAgICAgICB3aXRoIG5vZ2lsOgot KyAqICAgICAgICAgICAgIGV2ZW50ID0gbXB2X3dhaXRfZXZlbnQoc2VsZi5fY3R4LCB0aW1lb3V0 X2QpCi0rICogICAgICAgICByZXR1cm4gRXZlbnQoKS5faW5pdChldmVudCwgc2VsZikgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIAotKyAqICAgICBkZWYgd2FrZXVwKHNlbGYpOgot ICAqLwotLSAgICB7Ci0tICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAgICAgIFB5VGhy ZWFkU3RhdGUgKl9zYXZlOwotLSAgICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0tICAgICAgICBf X1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0tICAgICAgICAjZW5kaWYKLS0gICAgICAgIC8qdHJ5 OiovIHsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0rICBfX3B5eF90XzQgPSBfX1B5eF9Q eU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FdmVudCkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3 MTEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0rICBfX3B5 eF90XzUgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudCAqKSgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilf X3B5eF90XzQpLT5fX3B5eF92dGFiKS0+X2luaXQoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3RfNCksIF9fcHl4X3ZfZXZlbnQsICgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIo MCwgNzExLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOwotKyAg X19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICBfX3B5eF9yID0gX19w eXhfdF81OwotKyAgX19weXhfdF81ID0gMDsKLSsgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAgICAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NjIKLS0gKiAgICAgICAgICAg ICB1c2VyZGF0YXMuYWRkKCkKLS0gKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAg ICAgICAgICAgICBlcnIgPSBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jKCAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCi0tICogICAg ICAgICAgICAgICAgICAgICBkYXRhX2lkLAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjcwNAotKyAqICAgICAgICAgcmV0dXJuIGVycgotKyAqIAotKyAqICAgICBkZWYgd2Fp dF9ldmVudChzZWxmLCB0aW1lb3V0PU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICAiIiJXcmFwczogbXB2X3dhaXRfZXZlbnQiIiIKLSsgKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHgKLSAgKi8KLS0gICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfc2V0X3By b3BlcnR5X2FzeW5jKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9kYXRhX2lkLCBfX3B5eF92 X3Byb3BfYywgTVBWX0ZPUk1BVF9OT0RFLCAoJl9fcHl4X3ZfdikpOwotLSAgICAgICAgfQotIAot LSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2MQotLSAqICAgICAg ICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1Jl cGx5VXNlckRhdGEoZGF0YSkKLS0gKiAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkKLS0gKiAg ICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgICAgICAgICAgICAgIGVyciA9IG1wdl9zZXRfcHJvcGVydHlfYXN5bmMoCi0tICogICAgICAg ICAgICAgICAgICAgICBzZWxmLl9jdHgsCi0tICovCi0tICAgICAgICAvKmZpbmFsbHk6Ki8gewot LSAgICAgICAgICAvKm5vcm1hbCBleGl0OiovewotLSAgICAgICAgICAgICNpZmRlZiBXSVRIX1RI UkVBRAotLSAgICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0tICAgICAgICAgICAg UHlfQkxPQ0tfVEhSRUFEUwotLSAgICAgICAgICAgICNlbmRpZgotLSAgICAgICAgICAgIGdvdG8g X19weXhfTDEzOwotLSAgICAgICAgICB9Ci0tICAgICAgICAgIF9fcHl4X0wxMzo7Ci0tICAgICAg ICB9Ci0tICAgIH0KLS0gIH0KLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19weXhf TDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotKyAgX19QeXhfWERFQ1JF RihfX3B5eF90XzUpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYu Q29udGV4dC53YWl0X2V2ZW50IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSk7Ci0rICBfX3B5eF9yID0gTlVMTDsKLSsgIF9fcHl4X0wwOjsKLSsgIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3IpOwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICBy ZXR1cm4gX19weXhfcjsKLSt9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjcwCi0tICogICAgICAgICAgICAgICAgICkKLS0gKiAgICAgICAgIGZpbmFsbHk6Ci0tICog ICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUodikgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmV0dXJuIGVycgotKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3MTMKLSsgKiAgICAgICAgIHJldHVybiBFdmVudCgpLl9pbml0KGV2ZW50 LCBzZWxmKQotICAqIAotKyAqICAgICBkZWYgd2FrZXVwKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAiIiJXcmFwczogbXB2X3dha2V1cCIiIgotKyAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqLwotLSAgLypmaW5hbGx5OiovIHsKLS0gICAgLypu b3JtYWwgZXhpdDoqL3sKLS0gICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3Ry dWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92 dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjcwLCBfX3B5eF9MMV9lcnJvcikKLS0g ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKLS0gICAgICBnb3RvIF9fcHl4X0w1OwotLSAgICB9Ci0tICAg IF9fcHl4X0w0X2Vycm9yOjsKLS0gICAgLypleGNlcHRpb24gZXhpdDoqL3sKLS0gICAgICBfX1B5 eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKLS0gICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2ln bgotLSAgICAgIF9fcHl4X3RfMTQgPSAwOyBfX3B5eF90XzE1ID0gMDsgX19weXhfdF8xNiA9IDA7 IF9fcHl4X3RfMTcgPSAwOyBfX3B5eF90XzE4ID0gMDsgX19weXhfdF8xOSA9IDA7Ci0tICAgICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgICAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xMSk7IF9fcHl4X3RfMTEgPSAwOwotLSAgICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Myk7IF9fcHl4X3RfMyA9IDA7Ci0tICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzkpOyBfX3B5 eF90XzkgPSAwOwotLSAgICAgIGlmIChQWV9NQUpPUl9WRVJTSU9OID49IDMpIF9fUHl4X0V4Y2Vw dGlvblN3YXAoJl9fcHl4X3RfMTcsICZfX3B5eF90XzE4LCAmX19weXhfdF8xOSk7Ci0tICAgICAg aWYgKChQWV9NQUpPUl9WRVJTSU9OIDwgMykgfHwgdW5saWtlbHkoX19QeXhfR2V0RXhjZXB0aW9u KCZfX3B5eF90XzE0LCAmX19weXhfdF8xNSwgJl9fcHl4X3RfMTYpIDwgMCkpIF9fUHl4X0VyckZl dGNoKCZfX3B5eF90XzE0LCAmX19weXhfdF8xNSwgJl9fcHl4X3RfMTYpOwotLSAgICAgIF9fUHl4 X1hHT1RSRUYoX19weXhfdF8xNCk7Ci0tICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE1KTsK LS0gICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTYpOwotLSAgICAgIF9fUHl4X1hHT1RSRUYo X19weXhfdF8xNyk7Ci0tICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE4KTsKLS0gICAgICBf X1B5eF9YR09UUkVGKF9fcHl4X3RfMTkpOwotLSAgICAgIF9fcHl4X3RfMTAgPSBfX3B5eF9saW5l bm87IF9fcHl4X3RfMTIgPSBfX3B5eF9jbGluZW5vOyBfX3B5eF90XzEzID0gX19weXhfZmlsZW5h bWU7Ci0tICAgICAgewotLSAgICAgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0 cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhf dnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfdik7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3MCwgX19weXhfTDE1X2Vycm9yKQot LSAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgICAgICBfX1B5eF9ERUNSRUYo X19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLS0gICAgICB9Ci0tICAgICAgaWYgKFBZX01BSk9S X1ZFUlNJT04gPj0gMykgewotLSAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xNyk7Ci0t ICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzE4KTsKLS0gICAgICAgIF9fUHl4X1hHSVZF UkVGKF9fcHl4X3RfMTkpOwotLSAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8x NywgX19weXhfdF8xOCwgX19weXhfdF8xOSk7Ci0tICAgICAgfQotLSAgICAgIF9fUHl4X1hHSVZF UkVGKF9fcHl4X3RfMTQpOwotLSAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTUpOwotLSAg ICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTYpOwotLSAgICAgIF9fUHl4X0VyclJlc3RvcmUo X19weXhfdF8xNCwgX19weXhfdF8xNSwgX19weXhfdF8xNik7Ci0tICAgICAgX19weXhfdF8xNCA9 IDA7IF9fcHl4X3RfMTUgPSAwOyBfX3B5eF90XzE2ID0gMDsgX19weXhfdF8xNyA9IDA7IF9fcHl4 X3RfMTggPSAwOyBfX3B5eF90XzE5ID0gMDsKLS0gICAgICBfX3B5eF9saW5lbm8gPSBfX3B5eF90 XzEwOyBfX3B5eF9jbGluZW5vID0gX19weXhfdF8xMjsgX19weXhfZmlsZW5hbWUgPSBfX3B5eF90 XzEzOwotLSAgICAgIGdvdG8gX19weXhfTDFfZXJyb3I7Ci0tICAgICAgX19weXhfTDE1X2Vycm9y OjsKLS0gICAgICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAzKSB7Ci0tICAgICAgICBfX1B5eF9Y R0lWRVJFRihfX3B5eF90XzE3KTsKLS0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTgp OwotLSAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xOSk7Ci0tICAgICAgICBfX1B5eF9F eGNlcHRpb25SZXNldChfX3B5eF90XzE3LCBfX3B5eF90XzE4LCBfX3B5eF90XzE5KTsKLS0gICAg ICB9Ci0tICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE0KTsgX19weXhfdF8xNCA9IDA7Ci0t ICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE1KTsgX19weXhfdF8xNSA9IDA7Ci0tICAgICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzE2KTsgX19weXhfdF8xNiA9IDA7Ci0tICAgICAgX19weXhf dF8xNyA9IDA7IF9fcHl4X3RfMTggPSAwOyBfX3B5eF90XzE5ID0gMDsKLS0gICAgICBnb3RvIF9f cHl4X0wxX2Vycm9yOwotLSAgICB9Ci0tICAgIF9fcHl4X0wzX3JldHVybjogewotLSAgICAgIF9f cHl4X3RfMTkgPSBfX3B5eF9yOwotLSAgICAgIF9fcHl4X3IgPSAwOwotLSAgICAgIF9fcHl4X3Rf MSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhf dl9zZWxmLCBfX3B5eF92X3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA2NzAsIF9fcHl4X0wxX2Vycm9yKQotLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot LSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgICAgIF9f cHl4X3IgPSBfX3B5eF90XzE5OwotLSAgICAgIF9fcHl4X3RfMTkgPSAwOwotLSAgICAgIGdvdG8g X19weXhfTDA7Ci0rCi0rLyogUHl0aG9uIHdyYXBwZXIgKi8KLStzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yN3dha2V1cChQeU9iamVjdCAq X19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8K LStzdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI2 d2FrZXVwW10gPSAiV3JhcHM6IG1wdl93YWtldXAiOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI3d2FrZXVwKFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgewotKyAgUHlPYmplY3Qg Kl9fcHl4X3IgPSAwOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJ3YWtldXAgKHdyYXBwZXIpIiwgMCk7Ci0rICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI2d2FrZXVwKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikp OwotKwotKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0rICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKLSsgIHJldHVybiBfX3B5eF9yOwotK30KLSsKLStzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNndha2V1cChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsK LSsgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCi0rICBpbnQgX19weXhfbGluZW5vID0gMDsKLSsgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVu YW1lID0gTlVMTDsKLSsgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJ3YWtldXAiLCAwKTsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3MTUKLSsgKiAgICAgZGVmIHdha2V1cChzZWxmKToKLSsgKiAgICAgICAgICIi IldyYXBzOiBtcHZfd2FrZXVwIiIiCi0rICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAg ICAgICAgICAgbXB2X3dha2V1cChzZWxmLl9jdHgpCi0rICovCi0rICAjaWZuZGVmIENZVEhPTl9X SVRIT1VUX0FTU0VSVElPTlMKLSsgIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgewot KyAgICBpZiAodW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7Ci0rICAgICAg UHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7Ci0rICAgICAgX19QWVhfRVJSKDAs IDcxNSwgX19weXhfTDFfZXJyb3IpCi0gICAgIH0KLS0gICAgX19weXhfTDU6OwotICAgfQotKyAg I2VuZGlmCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjcxCi0tICog ICAgICAgICBmaW5hbGx5OgotLSAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVl KHYpCi0tICogICAgICAgICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MTYKLSsgKiAgICAgICAgICIi IldyYXBzOiBtcHZfd2FrZXVwIiIiCi0rICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0rICog ICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAg ICAgICAgICAgbXB2X3dha2V1cChzZWxmLl9jdHgpCi0gICogCi0tICogICAgIEBfZXJyb3JzCi0g ICovCi0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgX19weXhfdF8xID0gX19QeXhfUHlJ bnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA2NzEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 Ci0tICBfX3B5eF9yID0gX19weXhfdF8xOwotLSAgX19weXhfdF8xID0gMDsKLS0gIGdvdG8gX19w eXhfTDA7Ci0rICB7Ci0rICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0rICAgICAgUHlUaHJlYWRT dGF0ZSAqX3NhdmU7Ci0rICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0rICAgICAgX19QeXhfRmFz dEdJTF9SZW1lbWJlcigpOwotKyAgICAgICNlbmRpZgotKyAgICAgIC8qdHJ5OiovIHsKLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzYKLSsgICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MTcKLSsgKiAgICAgICAgIGFzc2VydCBzZWxmLl9j dHgKLSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgbXB2X3dha2V1cChz ZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAKLS0gKiAgICAgQF9l cnJvcnMKLS0gKiAgICAgZGVmIHNldF9wcm9wZXJ0eShzZWxmLCBwcm9wLCB2YWx1ZT1UcnVlLCBh c3luY2hyb25vdXM9RmFsc2UsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3By b3BlcnR5X2FzeW5jIiIiCi0rICogICAgIGRlZiBzZXRfd2FrZXVwX2NhbGxiYWNrKHNlbGYsIGNh bGxiYWNrKToKLSsgKi8KLSsgICAgICAgIG1wdl93YWtldXAoX19weXhfdl9zZWxmLT5fY3R4KTsK LSsgICAgICB9Ci0rCi0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcx NgotKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAiIiIKLSsgKiAgICAgICAgIGFzc2Vy dCBzZWxmLl9jdHgKLSsgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBtcHZfd2FrZXVwKHNlbGYuX2N0eCkKLSsgKiAKLSsg Ki8KLSsgICAgICAvKmZpbmFsbHk6Ki8gewotKyAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKLSsg ICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0rICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9y Z2V0KCk7Ci0rICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSsgICAgICAgICAgI2VuZGlmCi0r ICAgICAgICAgIGdvdG8gX19weXhfTDU7Ci0rICAgICAgICB9Ci0rICAgICAgICBfX3B5eF9MNTo7 Ci0rICAgICAgfQotKyAgfQotKwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjcxMwotKyAqICAgICAgICAgcmV0dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpCi0rICog Ci0rICogICAgIGRlZiB3YWtldXAoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgICAgICIiIldyYXBzOiBtcHZfd2FrZXVwIiIiCi0gICogICAgICAgICBhc3NlcnQg c2VsZi5fY3R4Ci0gICovCi0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fcHl4 X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0rICBnb3RvIF9fcHl4X0wwOwot ICAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzIpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOwotLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzkpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzExKTsK LS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuc2V0X3By b3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0r ICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0Lndha2V1cCIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotICAgX19weXhf ciA9IE5VTEw7Ci0gICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfdXNlcmRh dGFzKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9wcm9wKTsKLSAgIF9fUHl4X1hHSVZFUkVG KF9fcHl4X3IpOwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4g X19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3NAot Ky8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MTkKLSsgKiAgICAgICAgICAgICBt cHZfd2FrZXVwKHNlbGYuX2N0eCkKLSAgKiAKLS0gKiAgICAgQF9lcnJvcnMKLS0gKiAgICAgZGVm IHNldF9vcHRpb24oc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X29wdGlvbiIiIgotKyAqICAg ICBkZWYgc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X3dha2V1cF9jYWxs YmFjayIiIgotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqLwotIAotIC8qIFB5dGhv biB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMjVzZXRfb3B0aW9uKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLwotLXN0YXRp YyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjRzZXRfb3B0 aW9uW10gPSAiV3JhcHM6IG1wdl9zZXRfb3B0aW9uIjsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNXNldF9vcHRpb24oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2Rz KSB7Ci0tICBQeU9iamVjdCAqX19weXhfdl9wcm9wID0gMDsKLS0gIFB5T2JqZWN0ICpfX3B5eF92 X3ZhbHVlID0gMDsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19w eXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI5c2V0X3dh a2V1cF9jYWxsYmFjayhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9j YWxsYmFjayk7IC8qcHJvdG8qLwotK3N0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMjhzZXRfd2FrZXVwX2NhbGxiYWNrW10gPSAiV3JhcHM6IG1wdl9z ZXRfd2FrZXVwX2NhbGxiYWNrIjsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yOXNldF93YWtldXBfY2FsbGJhY2soUHlPYmplY3QgKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2FsbGJhY2spIHsKLSAgIFB5T2JqZWN0ICpf X3B5eF9yID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgic2V0X29wdGlvbiAod3JhcHBlcikiLCAwKTsKLS0gIHsKLS0gICAg c3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfcHJvcCwm X19weXhfbl9zX3ZhbHVlLDB9OwotLSAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07Ci0t ICAgIHZhbHVlc1sxXSA9ICgoUHlPYmplY3QgKilQeV9UcnVlKTsKLS0gICAgaWYgKHVubGlrZWx5 KF9fcHl4X2t3ZHMpKSB7Ci0tICAgICAgUHlfc3NpemVfdCBrd19hcmdzOwotLSAgICAgIGNvbnN0 IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpOwotLSAg ICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKLS0gICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5 VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9V R0g7Ci0tICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4 X2FyZ3MsIDApOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAg MDogYnJlYWs7Ci0tICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9y OwotLSAgICAgIH0KLS0gICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7Ci0t ICAgICAgc3dpdGNoIChwb3NfYXJncykgewotLSAgICAgICAgY2FzZSAgMDoKLS0gICAgICAgIGlm IChsaWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMs IF9fcHl4X25fc19wcm9wKSkgIT0gMCkpIGt3X2FyZ3MtLTsKLS0gICAgICAgIGVsc2UgZ290byBf X3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0g ICAgICAgIGNhc2UgIDE6Ci0tICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKLS0gICAgICAgICAg UHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19w eXhfbl9zX3ZhbHVlKTsKLS0gICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1sxXSA9IHZhbHVl OyBrd19hcmdzLS07IH0KLS0gICAgICAgIH0KLS0gICAgICB9Ci0tICAgICAgaWYgKHVubGlrZWx5 KGt3X2FyZ3MgPiAwKSkgewotLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9u YWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19h cmdzLCAic2V0X29wdGlvbiIpIDwgMCkpIF9fUFlYX0VSUigwLCA2NzQsIF9fcHl4X0wzX2Vycm9y KQotLSAgICAgIH0KLS0gICAgfSBlbHNlIHsKLS0gICAgICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJ WkUoX19weXhfYXJncykpIHsKLS0gICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVf R0VUX0lURU0oX19weXhfYXJncywgMSk7Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0t ICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3Ms IDApOwotLSAgICAgICAgYnJlYWs7Ci0tICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2Fy Z3R1cGxlX2Vycm9yOwotLSAgICAgIH0KLS0gICAgfQotLSAgICBfX3B5eF92X3Byb3AgPSB2YWx1 ZXNbMF07Ci0tICAgIF9fcHl4X3ZfdmFsdWUgPSB2YWx1ZXNbMV07Ci0tICB9Ci0tICBnb3RvIF9f cHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOwotLSAgX19weXhfTDVfYXJndHVwbGVfZXJy b3I6OwotLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInNldF9vcHRpb24iLCAwLCAxLCAy LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDY3NCwgX19weXhf TDNfZXJyb3IpCi0tICBfX3B5eF9MM19lcnJvcjo7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnNldF9vcHRpb24iLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOwotLSAgcmV0dXJuIE5VTEw7Ci0tICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9u ZTo7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzI0c2V0X29wdGlvbigoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X3Byb3AsIF9fcHl4X3ZfdmFsdWUpOwotKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldF93YWtldXBfY2FsbGJhY2sgKHdyYXBwZXIp IiwgMCk7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzI4c2V0X3dha2V1cF9jYWxsYmFjaygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9j YWxsYmFjaykpOwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0gICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNHNldF9v cHRpb24oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQeU9iamVjdCAqX19weXhfdl92YWx1 ZSkgewotLSAgZW51bSBtcHZfZm9ybWF0IF9fcHl4X3ZfZm9ybWF0OwotLSAgc3RydWN0IG1wdl9u b2RlIF9fcHl4X3ZfdjsKLS0gIGludCBfX3B5eF92X2VycjsKLS0gIGNoYXIgY29uc3QgKl9fcHl4 X3ZfcHJvcF9jOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzI4c2V0X3dha2V1cF9jYWxsYmFjayhzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X2NhbGxiYWNrKSB7Ci0rICB1aW50NjRfdCBfX3B5eF92X25hbWU7Ci0gICBQeU9iamVjdCAqX19w eXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotICAgUHlPYmplY3Qg Kl9fcHl4X3RfMSA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKLSsgIHVp bnQ2NF90IF9fcHl4X3RfMjsKLSAgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOwotLSAgZW51 bSBtcHZfZm9ybWF0IF9fcHl4X3RfNDsKLS0gIGNoYXIgY29uc3QgKl9fcHl4X3RfNTsKLS0gIGlu dCBfX3B5eF90XzY7Ci0tICBpbnQgX19weXhfdF83OwotLSAgY2hhciBjb25zdCAqX19weXhfdF84 OwotLSAgUHlPYmplY3QgKl9fcHl4X3RfOSA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF8x MCA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF8xMSA9IE5VTEw7Ci0tICBQeU9iamVjdCAq X19weXhfdF8xMiA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF8xMyA9IE5VTEw7Ci0tICBQ eU9iamVjdCAqX19weXhfdF8xNCA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVM TDsKLSAgIGludCBfX3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5h bWUgPSBOVUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoInNldF9vcHRpb24iLCAwKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3By b3ApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldF93YWtldXBfY2FsbGJhY2si LCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzYKLS0gKiAg ICAgZGVmIHNldF9vcHRpb24oc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSk6Ci0tICogICAgICAgICAi IiJXcmFwczogbXB2X3NldF9vcHRpb24iIiIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo3MjEKLSsgKiAgICAgZGVmIHNldF93YWtldXBfY2FsbGJhY2soc2VsZiwgY2FsbGJh Y2spOgotKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrIiIiCi0g ICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCi0tICogICAgICAgICBjZGVmIG1wdl9m b3JtYXQgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkKLSsgKiAgICAgICAgIGNkZWYg dWludDY0X3QgbmFtZSA9IDx1aW50NjRfdD5pZChzZWxmKQotKyAqICAgICAgICAgc2VsZi5jYWxs YmFjayA9IGNhbGxiYWNrCi0gICovCi0gICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VSVElP TlMKLSAgIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgewotICAgICBpZiAodW5saWtl bHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7Ci0gICAgICAgUHlFcnJfU2V0Tm9uZShQ eUV4Y19Bc3NlcnRpb25FcnJvcik7Ci0tICAgICAgX19QWVhfRVJSKDAsIDY3NiwgX19weXhfTDFf ZXJyb3IpCi0rICAgICAgX19QWVhfRVJSKDAsIDcyMSwgX19weXhfTDFfZXJyb3IpCi0gICAgIH0K LSAgIH0KLSAgICNlbmRpZgotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjY3NwotLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCi0rICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzIyCi0rICogICAgICAgICAiIiJXcmFwczogbXB2 X3NldF93YWtldXBfY2FsbGJhY2siIiIKLSAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLS0g KiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9y KHZhbHVlKQotLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSB2ID0gc2VsZi5fcHJlcF9uYXRpdmVf dmFsdWUodmFsdWUsIGZvcm1hdCkKLSsgKiAgICAgICAgIGNkZWYgdWludDY0X3QgbmFtZSA9IDx1 aW50NjRfdD5pZChzZWxmKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAg ICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKLSsgKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJl YWQuc2V0KGNhbGxiYWNrKQotICAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5 eF90XzIsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlY X0VSUigwLCA2NzcsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7 Ci0tICBfX3B5eF90XzMgPSBOVUxMOwotLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1 bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotLSAgICBfX3B5eF90XzMgPSBQ eU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykp IHsKLS0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19w eXhfdF8yKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKLS0gICAgICBfX1B5eF9J TkNSRUYoZnVuY3Rpb24pOwotLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5j dGlvbik7Ci0tICAgIH0KLS0gIH0KLS0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhf UHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X3Byb3ApIDog X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfcHJvcCk7Ci0tICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NzcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhf dF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF9idWlsdGluX2lkLCAoKFB5T2Jq ZWN0ICopX19weXhfdl9zZWxmKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDcyMiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgX19QeXhfREVDUkVG X1NFVChfX3B5eF92X3Byb3AsIF9fcHl4X3RfMSk7Ci0tICBfX3B5eF90XzEgPSAwOwotKyAgX19w eXhfdF8yID0gX19QeXhfUHlJbnRfQXNfdWludDY0X3QoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5 KChfX3B5eF90XzIgPT0gKCh1aW50NjRfdCktMSkpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZ WF9FUlIoMCwgNzIyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEp OyBfX3B5eF90XzEgPSAwOwotKyAgX19weXhfdl9uYW1lID0gKCh1aW50NjRfdClfX3B5eF90XzIp OwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3OAotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyMwotICAqICAgICAgICAgYXNzZXJ0IHNlbGYu X2N0eAotLSAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKLS0gKiAgICAgICAgIGNkZWYg bXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZhbHVlKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjZGVmIG1wdl9ub2RlIHYgPSBzZWxmLl9wcmVw X25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQotLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0r ICogICAgICAgICBjZGVmIHVpbnQ2NF90IG5hbWUgPSA8dWludDY0X3Q+aWQoc2VsZikKLSsgKiAg ICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjayAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNldChjYWxsYmFjaykKLSsgKiAg ICAgICAgIHdpdGggbm9naWw6Ci0gICovCi0tICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9H ZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0X2Zv cik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY3OCwgX19weXhfTDFf ZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gIF9fcHl4X3RfMyA9IE5VTEw7 Ci0tICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzIpKSkgewotLSAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90 XzIpOwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKLS0gICAgICBQeU9iamVjdCogZnVu Y3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKLS0gICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF8zKTsKLSsgIF9fUHl4X0lOQ1JFRihfX3B5eF92X2NhbGxiYWNrKTsKLSsg IF9fUHl4X0dJVkVSRUYoX19weXhfdl9jYWxsYmFjayk7Ci0rICBfX1B5eF9HT1RSRUYoX19weXhf dl9zZWxmLT5jYWxsYmFjayk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5jYWxsYmFj ayk7Ci0rICBfX3B5eF92X3NlbGYtPmNhbGxiYWNrID0gX19weXhfdl9jYWxsYmFjazsKLSsKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjQKLSsgKiAgICAgICAgIGNkZWYg dWludDY0X3QgbmFtZSA9IDx1aW50NjRfdD5pZChzZWxmKQotKyAqICAgICAgICAgc2VsZi5jYWxs YmFjayA9IGNhbGxiYWNrCi0rICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNldChjYWxs YmFjaykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgd2l0aCBub2dp bDoKLSsgKiAgICAgICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9jdHgsIF9j X2NhbGxiYWNrLCA8dm9pZCo+bmFtZSkKLSsgKi8KLSsgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2Jq ZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLT5jYWxsYmFja3RocmVhZCwgX19weXhfbl9zX3Nl dCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDcyNCwgX19weXhfTDFf ZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgIF9fcHl4X3RfNCA9IE5VTEw7 Ci0rICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzMpKSkgewotKyAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90 XzMpOwotKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKLSsgICAgICBQeU9iamVjdCogZnVu Y3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8zKTsKLSsgICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF80KTsKLSAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAg IF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0rICAgICAgX19QeXhfREVD UkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKLSAgICAgfQotICAgfQotLSAgX19weXhfdF8x ID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5 eF90XzMsIF9fcHl4X3ZfdmFsdWUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90 XzIsIF9fcHl4X3ZfdmFsdWUpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOwotLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjc4LCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmpl Y3RfQ2FsbDJBcmdzKF9fcHl4X3RfMywgX19weXhfdF80LCBfX3B5eF92X2NhbGxiYWNrKSA6IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF92X2NhbGxiYWNrKTsKLSsg IF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgIGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcyNCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOwotLSAgX19weXhfdF80ID0gKChlbnVtIG1wdl9mb3JtYXQpX19QeXhfUHlJbnRfQXNf ZW51bV9fbXB2X2Zvcm1hdChfX3B5eF90XzEpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVk KCkpKSBfX1BZWF9FUlIoMCwgNjc4LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7Ci0tICBfX3B5eF92X2Zvcm1hdCA9IF9fcHl4X3RfNDsKLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzkKLS0gKiAgICAgICAgIHByb3AgPSBfc3Ry ZW5jKHByb3ApCi0tICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0ID0gc2VsZi5fZm9y bWF0X2Zvcih2YWx1ZSkKLS0gKiAgICAgICAgIGNkZWYgbXB2X25vZGUgdiA9IHNlbGYuX3ByZXBf bmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgICAgIGNkZWYgaW50IGVycgotLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBw cm9wX2MKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjUKLSsgKiAgICAg ICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjawotKyAqICAgICAgICAgc2VsZi5jYWxsYmFja3Ro cmVhZC5zZXQoY2FsbGJhY2spCi0rICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgbXB2X3NldF93YWtldXBfY2FsbGJhY2so c2VsZi5fY3R4LCBfY19jYWxsYmFjaywgPHZvaWQqPm5hbWUpCi0rICogCi0gICovCi0tICBfX3B5 eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoX19weXhfdl9mb3JtYXQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NzksIF9fcHl4X0wxX2Vy cm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX3B5eF92X3YgPSAoKHN0cnVj dCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhf dl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19w eXhfdl92YWx1ZSwgX19weXhfdF8xKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOwotKyAgewotKyAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotKyAgICAgIFB5VGhy ZWFkU3RhdGUgKl9zYXZlOwotKyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotKyAgICAgIF9fUHl4 X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLSsgICAgICAjZW5kaWYKLSsgICAgICAvKnRyeToqLyB7Ci0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjgyCi0tICogICAgICAgICBj ZGVmIGludCBlcnIKLS0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9jCi0tICogICAg ICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBw cm9wX2MgPSBwcm9wCi0tICogICAgICAgICAgICAgd2l0aCBub2dpbDoKLSsgICAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjYKLSsgKiAgICAgICAgIHNlbGYuY2FsbGJh Y2t0aHJlYWQuc2V0KGNhbGxiYWNrKQotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAg ICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9jdHgsIF9jX2NhbGxiYWNrLCA8 dm9pZCo+bmFtZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIAotKyAqICAgICBk ZWYgZ2V0X3dha2V1cF9waXBlKHNlbGYpOgotICAqLwotLSAgLyp0cnk6Ki8gewotKyAgICAgICAg bXB2X3NldF93YWtldXBfY2FsbGJhY2soX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fY19jYWxsYmFjaywgKCh2b2lkICopX19weXhfdl9uYW1lKSk7Ci0r ICAgICAgfQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjgzCi0t ICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYwotLSAqICAgICAgICAgdHJ5OgotLSAq ICAgICAgICAgICAgIHByb3BfYyA9IHByb3AgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0tICogICAgICAgICAgICAgICAgIGVyciA9IG1w dl9zZXRfb3B0aW9uKAotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MjUKLSsgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjawotKyAqICAgICAgICAgc2Vs Zi5jYWxsYmFja3RocmVhZC5zZXQoY2FsbGJhY2spCi0rICogICAgICAgICB3aXRoIG5vZ2lsOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgbXB2X3NldF93YWtl dXBfY2FsbGJhY2soc2VsZi5fY3R4LCBfY19jYWxsYmFjaywgPHZvaWQqPm5hbWUpCi0rICogCi0g ICovCi0tICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfcHJv cCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlY X0VSUigwLCA2ODMsIF9fcHl4X0w0X2Vycm9yKQotLSAgICBfX3B5eF92X3Byb3BfYyA9IF9fcHl4 X3RfNTsKLSsgICAgICAvKmZpbmFsbHk6Ki8gewotKyAgICAgICAgLypub3JtYWwgZXhpdDoqL3sK LSsgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0rICAgICAgICAgIF9fUHl4X0Zhc3RHSUxf Rm9yZ2V0KCk7Ci0rICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSsgICAgICAgICAgI2VuZGlm Ci0rICAgICAgICAgIGdvdG8gX19weXhfTDU7Ci0rICAgICAgICB9Ci0rICAgICAgICBfX3B5eF9M NTo7Ci0rICAgICAgfQotKyAgfQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6Njg0Ci0tICogICAgICAgICB0cnk6Ci0tICogICAgICAgICAgICAgcHJvcF9jID0gcHJv cAotLSAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3NldF9vcHRpb24oCi0tICogICAgICAg ICAgICAgICAgICAgICBzZWxmLl9jdHgsCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NzE5Ci0rICogICAgICAgICAgICAgbXB2X3dha2V1cChzZWxmLl9jdHgpCi0rICogCi0r ICogICAgIGRlZiBzZXRfd2FrZXVwX2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfd2FrZXVw X2NhbGxiYWNrIiIiCi0rICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0gICovCi0tICAgIHsK LS0gICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgICAgUHlUaHJlYWRTdGF0ZSAqX3Nh dmU7Ci0tICAgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKLS0gICAgICAgIF9fUHl4X0Zhc3RHSUxf UmVtZW1iZXIoKTsKLS0gICAgICAgICNlbmRpZgotLSAgICAgICAgLyp0cnk6Ki8gewotIAotLSAg ICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njg1Ci0tICogICAgICAg ICAgICAgcHJvcF9jID0gcHJvcAotLSAqICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0tICogICAg ICAgICAgICAgICAgIGVyciA9IG1wdl9zZXRfb3B0aW9uKCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCi0tICogICAgICAgICAg ICAgICAgICAgICBwcm9wX2MsCi0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fcHl4 X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0rICBnb3RvIF9fcHl4X0wwOwot KyAgX19weXhfTDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotKyAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzMpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotKyAg X19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5zZXRfd2FrZXVw X2NhbGxiYWNrIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 Ci0rICBfX3B5eF9yID0gTlVMTDsKLSsgIF9fcHl4X0wwOjsKLSsgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3IpOwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19w eXhfcjsKLSt9Ci0rCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyOAotKyAq ICAgICAgICAgICAgIG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJh Y2ssIDx2b2lkKj5uYW1lKQotKyAqIAotKyAqICAgICBkZWYgZ2V0X3dha2V1cF9waXBlKHNlbGYp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAiIiJXcmFwczogbXB2 X2dldF93YWtldXBfcGlwZSIiIgotKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqLwot LSAgICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9zZXRfb3B0aW9uKF9fcHl4X3Zfc2VsZi0+X2N0 eCwgX19weXhfdl9wcm9wX2MsIE1QVl9GT1JNQVRfTk9ERSwgKCZfX3B5eF92X3YpKTsKLS0gICAg ICAgIH0KLSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2ODQK LS0gKiAgICAgICAgIHRyeToKLS0gKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wCi0tICogICAg ICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgICAgICAgICBlcnIgPSBtcHZfc2V0X29wdGlvbigKLS0gKiAgICAgICAgICAgICAgICAg ICAgIHNlbGYuX2N0eCwKLSsvKiBQeXRob24gd3JhcHBlciAqLwotK3N0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMxZ2V0X3dha2V1cF9waXBl KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7 IC8qcHJvdG8qLwotK3N0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMzBnZXRfd2FrZXVwX3BpcGVbXSA9ICJXcmFwczogbXB2X2dldF93YWtldXBfcGlw ZSI7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMzFnZXRfd2FrZXVwX3BpcGUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqdW51c2VkKSB7Ci0rICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0rICBf X1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo ImdldF93YWtldXBfcGlwZSAod3JhcHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzBnZXRfd2FrZXVwX3BpcGUoKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7 Ci0rCi0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOwotKyAgcmV0dXJuIF9fcHl4X3I7Ci0rfQotKwotK3N0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMwZ2V0X3dha2V1cF9waXBl KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zf c2VsZikgewotKyAgaW50IF9fcHl4X3ZfcGlwZTsKLSsgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVM TDsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0rICBQeU9iamVjdCAqX19weXhfdF8x ID0gTlVMTDsKLSsgIGludCBfX3B5eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOwotKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotKyAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoImdldF93YWtldXBfcGlwZSIsIDApOwotKwotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczMAotKyAqICAgICBkZWYgZ2V0X3dha2V1cF9waXBl KHNlbGYpOgotKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9nZXRfd2FrZXVwX3BpcGUiIiIKLSsg KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAqICAgICAgICAgY2RlZiBpbnQgcGlwZQotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKi8K LS0gICAgICAgIC8qZmluYWxseToqLyB7Ci0tICAgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97Ci0t ICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgICAgICAgX19QeXhfRmFzdEdJ TF9Gb3JnZXQoKTsKLS0gICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCi0tICAgICAgICAgICAg I2VuZGlmCi0tICAgICAgICAgICAgZ290byBfX3B5eF9MODsKLS0gICAgICAgICAgfQotLSAgICAg ICAgICBfX3B5eF9MODo7Ci0tICAgICAgICB9Ci0rICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FT U0VSVElPTlMKLSsgIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgewotKyAgICBpZiAo dW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7Ci0rICAgICAgUHlFcnJfU2V0 Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7Ci0rICAgICAgX19QWVhfRVJSKDAsIDczMCwgX19w eXhfTDFfZXJyb3IpCi0gICAgIH0KLSAgIH0KLSsgICNlbmRpZgotIAotLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjY5MgotLSAqICAgICAgICAgICAgICAgICApCi0tICogICAg ICAgICBmaW5hbGx5OgotLSAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKHYp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHJldHVybiBlcnIKLS0g KiAKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MzIKLSsgKiAgICAgICAg IGFzc2VydCBzZWxmLl9jdHgKLSsgKiAgICAgICAgIGNkZWYgaW50IHBpcGUKLSsgKiAgICAgICAg IHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAg ICBwaXBlID0gbXB2X2dldF93YWtldXBfcGlwZShzZWxmLl9jdHgpCi0rICogICAgICAgICByZXR1 cm4gcGlwZQotICAqLwotLSAgLypmaW5hbGx5OiovIHsKLS0gICAgLypub3JtYWwgZXhpdDoqL3sK LS0gICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0 aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNjkyLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKLS0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKLS0gICAgICBnb3RvIF9fcHl4X0w1OwotLSAgICB9Ci0tICAgIF9fcHl4X0w0X2Vycm9y OjsKLS0gICAgLypleGNlcHRpb24gZXhpdDoqL3sKLS0gICAgICBfX1B5eF9QeVRocmVhZFN0YXRl X2RlY2xhcmUKLS0gICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgotLSAgICAgIF9fcHl4 X3RfOSA9IDA7IF9fcHl4X3RfMTAgPSAwOyBfX3B5eF90XzExID0gMDsgX19weXhfdF8xMiA9IDA7 IF9fcHl4X3RfMTMgPSAwOyBfX3B5eF90XzE0ID0gMDsKLS0gICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOwotLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKLS0gICAgICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAzKSBfX1B5eF9FeGNlcHRp b25Td2FwKCZfX3B5eF90XzEyLCAmX19weXhfdF8xMywgJl9fcHl4X3RfMTQpOwotLSAgICAgIGlm ICgoUFlfTUFKT1JfVkVSU0lPTiA8IDMpIHx8IHVubGlrZWx5KF9fUHl4X0dldEV4Y2VwdGlvbigm X19weXhfdF85LCAmX19weXhfdF8xMCwgJl9fcHl4X3RfMTEpIDwgMCkpIF9fUHl4X0VyckZldGNo KCZfX3B5eF90XzksICZfX3B5eF90XzEwLCAmX19weXhfdF8xMSk7Ci0tICAgICAgX19QeXhfWEdP VFJFRihfX3B5eF90XzkpOwotLSAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMCk7Ci0tICAg ICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzExKTsKLS0gICAgICBfX1B5eF9YR09UUkVGKF9fcHl4 X3RfMTIpOwotLSAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMyk7Ci0tICAgICAgX19QeXhf WEdPVFJFRihfX3B5eF90XzE0KTsKLS0gICAgICBfX3B5eF90XzYgPSBfX3B5eF9saW5lbm87IF9f cHl4X3RfNyA9IF9fcHl4X2NsaW5lbm87IF9fcHl4X3RfOCA9IF9fcHl4X2ZpbGVuYW1lOwotLSAg ICAgIHsKLS0gICAgICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5f ZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X3YpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2OTIsIF9fcHl4X0wxMF9lcnJvcikKLS0gICAgICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7Ci0tICAgICAgfQotLSAgICAgIGlmIChQWV9NQUpPUl9WRVJTSU9O ID49IDMpIHsKLS0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTIpOwotLSAgICAgICAg X19QeXhfWEdJVkVSRUYoX19weXhfdF8xMyk7Ci0tICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5 eF90XzE0KTsKLS0gICAgICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9fcHl4X3RfMTIsIF9fcHl4 X3RfMTMsIF9fcHl4X3RfMTQpOwotKyAgewotKyAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotKyAg ICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwotKyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotKyAg ICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLSsgICAgICAjZW5kaWYKLSsgICAgICAvKnRy eToqLyB7Ci0rCi0rICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzMz Ci0rICogICAgICAgICBjZGVmIGludCBwaXBlCi0rICogICAgICAgICB3aXRoIG5vZ2lsOgotKyAq ICAgICAgICAgICAgIHBpcGUgPSBtcHZfZ2V0X3dha2V1cF9waXBlKHNlbGYuX2N0eCkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIHBpcGUKLSsgKiAKLSsg Ki8KLSsgICAgICAgIF9fcHl4X3ZfcGlwZSA9IG1wdl9nZXRfd2FrZXVwX3BpcGUoX19weXhfdl9z ZWxmLT5fY3R4KTsKLSAgICAgICB9Ci0tICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF85KTsK LS0gICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEwKTsKLS0gICAgICBfX1B5eF9YR0lWRVJF RihfX3B5eF90XzExKTsKLS0gICAgICBfX1B5eF9FcnJSZXN0b3JlKF9fcHl4X3RfOSwgX19weXhf dF8xMCwgX19weXhfdF8xMSk7Ci0tICAgICAgX19weXhfdF85ID0gMDsgX19weXhfdF8xMCA9IDA7 IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90XzEyID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3Rf MTQgPSAwOwotLSAgICAgIF9fcHl4X2xpbmVubyA9IF9fcHl4X3RfNjsgX19weXhfY2xpbmVubyA9 IF9fcHl4X3RfNzsgX19weXhfZmlsZW5hbWUgPSBfX3B5eF90Xzg7Ci0tICAgICAgZ290byBfX3B5 eF9MMV9lcnJvcjsKLS0gICAgICBfX3B5eF9MMTBfZXJyb3I6OwotLSAgICAgIGlmIChQWV9NQUpP Ul9WRVJTSU9OID49IDMpIHsKLS0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTIpOwot LSAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMyk7Ci0tICAgICAgICBfX1B5eF9YR0lW RVJFRihfX3B5eF90XzE0KTsKLS0gICAgICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9fcHl4X3Rf MTIsIF9fcHl4X3RfMTMsIF9fcHl4X3RfMTQpOwotKwotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3MzIKLSsgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSsgKiAg ICAgICAgIGNkZWYgaW50IHBpcGUKLSsgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBwaXBlID0gbXB2X2dldF93YWtldXBf cGlwZShzZWxmLl9jdHgpCi0rICogICAgICAgICByZXR1cm4gcGlwZQotKyAqLwotKyAgICAgIC8q ZmluYWxseToqLyB7Ci0rICAgICAgICAvKm5vcm1hbCBleGl0OiovewotKyAgICAgICAgICAjaWZk ZWYgV0lUSF9USFJFQUQKLSsgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKLSsgICAg ICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotKyAgICAgICAgICAjZW5kaWYKLSsgICAgICAgICAgZ290 byBfX3B5eF9MNTsKLSsgICAgICAgIH0KLSsgICAgICAgIF9fcHl4X0w1OjsKLSAgICAgICB9Ci0t ICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90XzkgPSAwOwotLSAgICAgIF9f UHl4X1hERUNSRUYoX19weXhfdF8xMCk7IF9fcHl4X3RfMTAgPSAwOwotLSAgICAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xMSk7IF9fcHl4X3RfMTEgPSAwOwotLSAgICAgIF9fcHl4X3RfMTIgPSAw OyBfX3B5eF90XzEzID0gMDsgX19weXhfdF8xNCA9IDA7Ci0tICAgICAgZ290byBfX3B5eF9MMV9l cnJvcjsKLS0gICAgfQotLSAgICBfX3B5eF9MNTo7Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjkzCi0tICogICAgICAgICBmaW5hbGx5OgotLSAqICAgICAg ICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKHYpCi0tICogICAgICAgICByZXR1cm4gZXJy ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3MzQKLSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAg cGlwZSA9IG1wdl9nZXRfd2FrZXVwX3BpcGUoc2VsZi5fY3R4KQotKyAqICAgICAgICAgcmV0dXJu IHBpcGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqIAotLSAqICAgICBAX2Vycm9y cwotKyAqICAgICBkZWYgX19jaW5pdF9fKHNlbGYpOgotICAqLwotICAgX19QeXhfWERFQ1JFRihf X3B5eF9yKTsKLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJy KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjkzLCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfcGlwZSk7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDczNCwgX19weXhfTDFfZXJy b3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fcHl4X3IgPSBfX3B5eF90XzE7 Ci0gICBfX3B5eF90XzEgPSAwOwotICAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo3MjgKLSsgKiAgICAgICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxm Ll9jdHgsIF9jX2NhbGxiYWNrLCA8dm9pZCo+bmFtZSkKLSAgKiAKLS0gKiAgICAgQF9lcnJvcnMK LS0gKiAgICAgZGVmIHNldF9vcHRpb24oc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X29wdGlv biIiIgotKyAqICAgICBkZWYgZ2V0X3dha2V1cF9waXBlKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAiIiJXcmFwczogbXB2X2dldF93YWtldXBfcGlwZSIi IgotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqLwotIAotICAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCi0gICBfX3B5eF9MMV9lcnJvcjo7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMyk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250 ZXh0LnNldF9vcHRpb24iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQu Z2V0X3dha2V1cF9waXBlIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7Ci0gICBfX3B5eF9yID0gTlVMTDsKLSAgIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hERUNS RUYoX19weXhfdl9wcm9wKTsKLSAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotICAgX19QeXhf UmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5NgotKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3MzYKLSsgKiAgICAgICAgIHJldHVybiBwaXBlCi0gICogCi0tICogICAg IEBfZXJyb3JzCi0tICogICAgIGRlZiBpbml0aWFsaXplKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAiIiJXcmFwczogbXB2X2luaXRpYWxpemUiIiIKLS0g KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSsgKiAgICAgZGVmIF9fY2luaXRfXyhzZWxmKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBj dHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKQotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKi8K LSAKLSAvKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI3aW5pdGlhbGl6ZShQeU9iamVjdCAqX19weXhf dl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KLS1zdGF0 aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI2aW5pdGlh bGl6ZVtdID0gIldyYXBzOiBtcHZfaW5pdGlhbGl6ZSI7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjdpbml0aWFsaXplKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgewotLSAgUHlP YmplY3QgKl9fcHl4X3IgPSAwOwotK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzMzX19jaW5pdF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLwotK3N0YXRp YyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMzX19jaW5pdF9f KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAq X19weXhfa3dkcykgewotKyAgaW50IF9fcHl4X3I7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImluaXRpYWxpemUgKHdyYXBwZXIp IiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzI2aW5pdGlhbGl6ZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJfX2Npbml0X18gKHdyYXBwZXIpIiwgMCk7Ci0rICBpZiAodW5saWtlbHkoUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKSA+IDApKSB7Ci0rICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlk KCJfX2Npbml0X18iLCAxLCAwLCAwLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgcmV0 dXJuIC0xO30KLSsgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSAmJiB1bmxpa2VseShQeURpY3Rf U2l6ZShfX3B5eF9rd2RzKSA+IDApICYmIHVubGlrZWx5KCFfX1B5eF9DaGVja0tleXdvcmRTdHJp bmdzKF9fcHl4X2t3ZHMsICJfX2Npbml0X18iLCAwKSkpIHJldHVybiAtMTsKLSsgIF9fcHl4X3Ig PSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJfX2Npbml0X18oKChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9z ZWxmKSk7Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLXN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI2aW5pdGlhbGl6 ZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92 X3NlbGYpIHsKLS0gIGludCBfX3B5eF92X2VycjsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVM TDsKLStzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8z Ml9fY2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICpfX3B5eF92X3NlbGYpIHsKLSsgIHVpbnQ2NF90IF9fcHl4X3ZfY3R4aWQ7Ci0rICBpbnQgX19w eXhfcjsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0gICBQeU9iamVjdCAqX19weXhf dF8xID0gTlVMTDsKLSsgIHVpbnQ2NF90IF9fcHl4X3RfMjsKLSsgIGludCBfX3B5eF90XzM7Ci0r ICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBO VUxMOwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFyICpfX3B5eF9maWxl bmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiaW5pdGlhbGl6ZSIsIDApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fY2luaXRfXyIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjY5OAotLSAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKToKLS0gKiAgICAgICAgICIi IldyYXBzOiBtcHZfaW5pdGlhbGl6ZSIiIgotLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjZGVmIGludCBlcnIKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MzcKLSsgKiAKLSsgKiAgICAgZGVm IF9fY2luaXRfXyhzZWxmKToKLSsgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWlu dDY0X3Q+aWQoc2VsZikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAg d2l0aCBub2dpbDoKLSsgKiAgICAgICAgICAgICBzZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkKLSAg Ki8KLS0gICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUwotLSAgaWYgKHVubGlrZWx5 KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Ci0tICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+ X2N0eCAhPSAwKSkpIHsKLS0gICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9y KTsKLS0gICAgICBfX1BZWF9FUlIoMCwgNjk4LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgfQotLSAg fQotLSAgI2VuZGlmCi0rICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9f cHl4X2J1aWx0aW5faWQsICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNzM3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfQXNfdWludDY0 X3QoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzIgPT0gKCh1aW50NjRfdCktMSkp ICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNzM3LCBfX3B5eF9MMV9lcnJvcikK LSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgX19weXhfdl9j dHhpZCA9ICgodWludDY0X3QpX19weXhfdF8yKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3MDAKLS0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLS0gKiAgICAg ICAgIGNkZWYgaW50IGVycgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcz OAotKyAqICAgICBkZWYgX19jaW5pdF9fKHNlbGYpOgotKyAqICAgICAgICAgY2RlZiB1aW50NjRf dCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKQotICAqICAgICAgICAgd2l0aCBub2dpbDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9pbml0 aWFsaXplKHNlbGYuX2N0eCkKLS0gKiAgICAgICAgIHJldHVybiBlcnIKLSsgKiAgICAgICAgICAg ICBzZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkKLSsgKiAgICAgICAgIGlmIG5vdCBzZWxmLl9jdHg6 Ci0gICovCi0gICB7Ci0gICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi1AQCAtMTQxMTQsMjIgKzEz OTc1LDIyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzI2aW5pdGlhbGl6ZShzdHJ1Y3QgX19wCi0gICAgICAgI2VuZGlmCi0gICAgICAg Lyp0cnk6Ki8gewotIAotLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjcwMQotLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0rICAgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NzM5Ci0rICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0g PHVpbnQ2NF90PmlkKHNlbGYpCi0gICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAg ICAgIGVyciA9IG1wdl9pbml0aWFsaXplKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgcmV0dXJuIGVycgotLSAqIAotKyAqICAgICAgICAgICAgIHNl bGYuX2N0eCA9IG1wdl9jcmVhdGUoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgICAgICBpZiBub3Qgc2VsZi5fY3R4OgotKyAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9y KCJDb250ZXh0IGNyZWF0aW9uIGVycm9yIikKLSAgKi8KLS0gICAgICAgIF9fcHl4X3ZfZXJyID0g bXB2X2luaXRpYWxpemUoX19weXhfdl9zZWxmLT5fY3R4KTsKLSsgICAgICAgIF9fcHl4X3Zfc2Vs Zi0+X2N0eCA9IG1wdl9jcmVhdGUoKTsKLSAgICAgICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjcwMAotLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAot LSAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjczOAotKyAqICAgICBkZWYgX19jaW5pdF9fKHNlbGYpOgotKyAqICAgICAgICAg Y2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKQotICAqICAgICAgICAgd2l0 aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGVy ciA9IG1wdl9pbml0aWFsaXplKHNlbGYuX2N0eCkKLS0gKiAgICAgICAgIHJldHVybiBlcnIKLSsg KiAgICAgICAgICAgICBzZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkKLSsgKiAgICAgICAgIGlmIG5v dCBzZWxmLl9jdHg6Ci0gICovCi0gICAgICAgLypmaW5hbGx5OiovIHsKLSAgICAgICAgIC8qbm9y bWFsIGV4aXQ6Ki97Ci1AQCAtMTQxNDMsNjYgKzE0MDA0LDIwMCBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNmluaXRpYWxpemUoc3Ry dWN0IF9fcAotICAgICAgIH0KLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo3MDIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDAKLSAg KiAgICAgICAgIHdpdGggbm9naWw6Ci0tICogICAgICAgICAgICAgZXJyID0gbXB2X2luaXRpYWxp emUoc2VsZi5fY3R4KQotLSAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogCi0tICogICAgIGRlZiB3YWl0X2V2ZW50KHNlbGYsIHRpbWVvdXQ9Tm9u ZSk6Ci0rICogICAgICAgICAgICAgc2VsZi5fY3R4ID0gbXB2X2NyZWF0ZSgpCi0rICogICAgICAg ICBpZiBub3Qgc2VsZi5fY3R4OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAg ICAgICAgICAgcmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3IiKQotKyAqICAg ICAgICAgc2VsZi5jYWxsYmFja3RocmVhZCA9IENhbGxiYWNrVGhyZWFkKCkKLSAgKi8KLS0gIF9f UHl4X1hERUNSRUYoX19weXhfcik7Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2lu dChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcw MiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fcHl4 X3IgPSBfX3B5eF90XzE7Ci0tICBfX3B5eF90XzEgPSAwOwotLSAgZ290byBfX3B5eF9MMDsKLSsg IF9fcHl4X3RfMyA9ICgoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpICE9IDApOwotKyAgaWYg KHVubGlrZWx5KF9fcHl4X3RfMykpIHsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo2OTYKLS0gKiAKLS0gKiAgICAgQF9lcnJvcnMKLS0gKiAgICAgZGVmIGluaXRpYWxp emUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICIiIldy YXBzOiBtcHZfaW5pdGlhbGl6ZSIiIgotLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQxCi0rICogICAgICAgICAgICAg c2VsZi5fY3R4ID0gbXB2X2NyZWF0ZSgpCi0rICogICAgICAgICBpZiBub3Qgc2VsZi5fY3R4Ogot KyAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKCJDb250ZXh0IGNyZWF0aW9uIGVycm9yIikg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5jYWxsYmFja3Ro cmVhZCA9IENhbGxiYWNrVGhyZWFkKCkKLSsgKiAgICAgICAgIF9jYWxsYmFja3NbY3R4aWRdID0g c2VsZi5jYWxsYmFja3RocmVhZAotICAqLwotKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1l KF9fcHl4X3RfNCwgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgNzQxLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNCk7Ci0rICAgIF9fcHl4X3RfNSA9IE5VTEw7Ci0rICAgIGlmIChDWVRIT05fVU5QQUNL X01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKLSsgICAg ICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzQpOwotKyAgICAgIGlmIChs aWtlbHkoX19weXhfdF81KSkgewotKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNCk7Ci0rICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhf dF81KTsKLSsgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0rICAgICAgICBfX1B5eF9E RUNSRUZfU0VUKF9fcHl4X3RfNCwgZnVuY3Rpb24pOwotKyAgICAgIH0KLSsgICAgfQotKyAgICBf X3B5eF90XzEgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzQsIF9fcHl4X3RfNSwgX19weXhfa3Bfc19Db250ZXh0X2NyZWF0aW9uX2Vycm9yKSA6IF9fUHl4 X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF80LCBfX3B5eF9rcF9zX0NvbnRleHRfY3JlYXRp b25fZXJyb3IpOwotKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7 Ci0rICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDc0MSwgX19weXhf TDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICBfX1B5eF9ERUNS RUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgICAgX19QeXhfUmFpc2UoX19weXhfdF8x LCAwLCAwLCAwKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 Ci0rICAgIF9fUFlYX0VSUigwLCA3NDEsIF9fcHl4X0wxX2Vycm9yKQotIAotLSAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCi0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMSk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250 ZXh0LmluaXRpYWxpemUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKLS0gIF9fcHl4X3IgPSBOVUxMOwotLSAgX19weXhfTDA6OwotLSAgX19QeXhfWEdJVkVS RUYoX19weXhfcik7Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDAK LSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgc2VsZi5fY3R4ID0gbXB2 X2NyZWF0ZSgpCi0rICogICAgICAgICBpZiBub3Qgc2VsZi5fY3R4OiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3Jl YXRpb24gZXJyb3IiKQotKyAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZCA9IENhbGxiYWNr VGhyZWFkKCkKLSsgKi8KLSsgIH0KLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3NDIKLSsgKiAgICAgICAgIGlmIG5vdCBzZWxmLl9jdHg6Ci0rICogICAgICAgICAgICAg cmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3IiKQotKyAqICAgICAgICAgc2Vs Zi5jYWxsYmFja3RocmVhZCA9IENhbGxiYWNrVGhyZWFkKCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICAgICAgX2NhbGxiYWNrc1tjdHhpZF0gPSBzZWxmLmNhbGxiYWNrdGhy ZWFkCi0rICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gZGljdCgpCi0rICovCi0rICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX0NhbGxiYWNrVGhy ZWFkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNzQyLCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAgX19weXhfdF81ID0gTlVM TDsKLSsgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF80KSkpIHsKLSsgICAgX19weXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19w eXhfdF80KTsKLSsgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7Ci0rICAgICAgUHlPYmplY3Qq IGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNCk7Ci0rICAgICAgX19Q eXhfSU5DUkVGKF9fcHl4X3RfNSk7Ci0rICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsg ICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNCwgZnVuY3Rpb24pOwotKyAgICB9Ci0rICB9 Ci0rICBfX3B5eF90XzEgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF80LCBfX3B5eF90XzUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3Rf NCk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0rICBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3NDIsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X0dP VFJFRihfX3B5eF92X3NlbGYtPmNhbGxiYWNrdGhyZWFkKTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5 eF92X3NlbGYtPmNhbGxiYWNrdGhyZWFkKTsKLSsgIF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJl YWQgPSBfX3B5eF90XzE7Ci0rICBfX3B5eF90XzEgPSAwOwotKwotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjc0MwotKyAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKCJD b250ZXh0IGNyZWF0aW9uIGVycm9yIikKLSsgKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQg PSBDYWxsYmFja1RocmVhZCgpCi0rICogICAgICAgICBfY2FsbGJhY2tzW2N0eGlkXSA9IHNlbGYu Y2FsbGJhY2t0aHJlYWQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg c2VsZi5yZXBseV91c2VyZGF0YSA9IGRpY3QoKQotKyAqICAgICAgICAgX3JlcGx5X3VzZXJkYXRh c1tjdHhpZF0gPSBzZWxmLnJlcGx5X3VzZXJkYXRhCi0rICovCi0rICBfX3B5eF90XzEgPSBfX3B5 eF92X3NlbGYtPmNhbGxiYWNrdGhyZWFkOwotKyAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7Ci0r ICBpZiAodW5saWtlbHkoX19QeXhfU2V0SXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fY2FsbGJhY2tzLCBfX3B5eF92X2N0eGlkLCBfX3B5eF90XzEsIHVpbnQ2NF90LCAwLCBf X1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzQz LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOwotKwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0NAotKyAqICAg ICAgICAgc2VsZi5jYWxsYmFja3RocmVhZCA9IENhbGxiYWNrVGhyZWFkKCkKLSsgKiAgICAgICAg IF9jYWxsYmFja3NbY3R4aWRdID0gc2VsZi5jYWxsYmFja3RocmVhZAotKyAqICAgICAgICAgc2Vs Zi5yZXBseV91c2VyZGF0YSA9IGRpY3QoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0r ICogICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXSA9IHNlbGYucmVwbHlfdXNlcmRhdGEK LSsgKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc3RhcnQoKQotKyAqLwotKyAgX19weXhf dF8xID0gX19QeXhfUHlEaWN0X05ld1ByZXNpemVkKDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA3NDQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9HT1RSRUYo X19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdl9z ZWxmLT5yZXBseV91c2VyZGF0YSk7Ci0rICBfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhID0g X19weXhfdF8xOwotKyAgX19weXhfdF8xID0gMDsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3NDUKLSsgKiAgICAgICAgIF9jYWxsYmFja3NbY3R4aWRdID0gc2VsZi5j YWxsYmFja3RocmVhZAotKyAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IGRpY3QoKQot KyAqICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0gPSBzZWxmLnJlcGx5X3VzZXJkYXRh ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0 aHJlYWQuc3RhcnQoKQotKyAqIAotKyAqLwotKyAgX19weXhfdF8xID0gX19weXhfdl9zZWxmLT5y ZXBseV91c2VyZGF0YTsKLSsgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOwotKyAgaWYgKHVubGlr ZWx5KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5 X3VzZXJkYXRhcywgX19weXhfdl9jdHhpZCwgX19weXhfdF8xLCB1aW50NjRfdCwgMCwgX19QeXhf UHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc0NSwgX19w eXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK LSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDYKLSsgKiAgICAgICAg IHNlbGYucmVwbHlfdXNlcmRhdGEgPSBkaWN0KCkKLSsgKiAgICAgICAgIF9yZXBseV91c2VyZGF0 YXNbY3R4aWRdID0gc2VsZi5yZXBseV91c2VyZGF0YQotKyAqICAgICAgICAgc2VsZi5jYWxsYmFj a3RocmVhZC5zdGFydCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAKLSsgKiAg ICAgQF9lcnJvcnMKLSsgKi8KLSsgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfdl9zZWxmLT5jYWxsYmFja3RocmVhZCwgX19weXhfbl9zX3N0YXJ0KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNzQ2LCBfX3B5eF9MMV9lcnJvcikKLSsg IF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAgX19weXhfdF81ID0gTlVMTDsKLSsgIGlmIChD WVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNCkp KSB7Ci0rICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNCk7Ci0rICAg IGlmIChsaWtlbHkoX19weXhfdF81KSkgewotKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5 TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzQpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzUpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0rICAgICAgX19QeXhfREVD UkVGX1NFVChfX3B5eF90XzQsIGZ1bmN0aW9uKTsKLSsgICAgfQotKyAgfQotKyAgX19weXhfdF8x ID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNCwgX19w eXhfdF81KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzQpOwotKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotKyAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNzQ2LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7 Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MzYKLSsgKiAgICAgICAgIHJldHVybiBwaXBl Ci0rICogCi0rICogICAgIGRlZiBfX2Npbml0X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQo c2VsZikKLSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICovCi0rCi0rICAvKiBmdW5jdGlvbiBl eGl0IGNvZGUgKi8KLSsgIF9fcHl4X3IgPSAwOwotKyAgZ290byBfX3B5eF9MMDsKLSsgIF9fcHl4 X0wxX2Vycm9yOjsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X1hERUNS RUYoX19weXhfdF80KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKLSsgIF9fUHl4X0Fk ZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX19jaW5pdF9fIiwgX19weXhf Y2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX3B5eF9yID0gLTE7 Ci0rICBfX3B5eF9MMDo7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJl dHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzA0Ci0tICogICAgICAgICByZXR1cm4gZXJyCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjc0OQotICAqIAotLSAqICAgICBkZWYgd2FpdF9ldmVudChzZWxmLCB0aW1lb3V0PU5v bmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAiIiJXcmFwczog bXB2X3dhaXRfZXZlbnQiIiIKLSsgKiAgICAgQF9lcnJvcnMKLSsgKiAgICAgZGVmIG9ic2VydmVf cHJvcGVydHkoc2VsZiwgcHJvcCwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9vYnNlcnZlX3Byb3BlcnR5IiIiCi0gICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0gICovCi0gCi0gLyogUHl0aG9uIHdyYXBwZXIgKi8K LS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8yOXdhaXRfZXZlbnQoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2Fy Z3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCi0tc3RhdGljIGNoYXIgX19weXhf ZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yOHdhaXRfZXZlbnRbXSA9ICJXcmFw czogbXB2X3dhaXRfZXZlbnQiOwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzI5d2FpdF9ldmVudChQeU9iamVjdCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKLS0gIFB5T2Jq ZWN0ICpfX3B5eF92X3RpbWVvdXQgPSAwOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM1b2JzZXJ2ZV9wcm9wZXJ0eShQeU9iamVjdCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMp OyAvKnByb3RvKi8KLStzdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0eVtdID0gIldyYXBzOiBtcHZfb2JzZXJ2ZV9wcm9w ZXJ0eSI7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMzVvYnNlcnZlX3Byb3BlcnR5KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgewotKyAgUHlPYmplY3QgKl9f cHl4X3ZfcHJvcCA9IDA7Ci0rICBQeU9iamVjdCAqX19weXhfdl9kYXRhID0gMDsKLSAgIGludCBf X3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwot ICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotICAg X19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJ3YWl0X2V2ZW50ICh3cmFwcGVyKSIsIDApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIm9ic2VydmVfcHJvcGVydHkgKHdyYXBwZXIpIiwgMCk7Ci0gICB7Ci0tICAgIHN0YXRpYyBQ eU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3RpbWVvdXQsMH07Ci0t ICAgIFB5T2JqZWN0KiB2YWx1ZXNbMV0gPSB7MH07Ci0tICAgIHZhbHVlc1swXSA9ICgoUHlPYmpl Y3QgKilQeV9Ob25lKTsKLSsgICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1td ID0geyZfX3B5eF9uX3NfcHJvcCwmX19weXhfbl9zX2RhdGEsMH07Ci0rICAgIFB5T2JqZWN0KiB2 YWx1ZXNbMl0gPSB7MCwwfTsKLSsgICAgdmFsdWVzWzFdID0gKChQeU9iamVjdCAqKVB5X05vbmUp OwotICAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKLSAgICAgICBQeV9zc2l6ZV90IGt3 X2FyZ3M7Ci0gICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJ WkUoX19weXhfYXJncyk7Ci0gICAgICAgc3dpdGNoIChwb3NfYXJncykgewotKyAgICAgICAgY2Fz ZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKLSsgICAg ICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSAgICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5 VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0gICAgICAgICBDWVRIT05fRkFMTFRIUk9V R0g7Ci0gICAgICAgICBjYXNlICAwOiBicmVhazsKLUBAIC0xNDIxMSwxMTcgKzE0MjA2LDI5MSBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8yOXdhaXRfZXZlbnQoUHlPYmplY3QgKgotICAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShf X3B5eF9rd2RzKTsKLSAgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0gICAgICAgICBjYXNlICAw OgotKyAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1T dHIoX19weXhfa3dkcywgX19weXhfbl9zX3Byb3ApKSAhPSAwKSkga3dfYXJncy0tOwotKyAgICAg ICAgZWxzZSBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotKyAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOwotKyAgICAgICAgY2FzZSAgMToKLSAgICAgICAgIGlmIChrd19hcmdzID4gMCkg ewotLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihf X3B5eF9rd2RzLCBfX3B5eF9uX3NfdGltZW91dCk7Ci0tICAgICAgICAgIGlmICh2YWx1ZSkgeyB2 YWx1ZXNbMF0gPSB2YWx1ZTsga3dfYXJncy0tOyB9Ci0rICAgICAgICAgIFB5T2JqZWN0KiB2YWx1 ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19kYXRhKTsK LSsgICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1sxXSA9IHZhbHVlOyBrd19hcmdzLS07IH0K LSAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkg ewotLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5 eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAid2FpdF9ldmVu dCIpIDwgMCkpIF9fUFlYX0VSUigwLCA3MDQsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgICAgaWYg KHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9w eWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAib2JzZXJ2ZV9wcm9wZXJ0eSIpIDwgMCkp IF9fUFlYX0VSUigwLCA3NDksIF9fcHl4X0wzX2Vycm9yKQotICAgICAgIH0KLSAgICAgfSBlbHNl IHsKLSAgICAgICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpIHsKLS0gICAg ICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7 Ci0rICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2Fy Z3MsIDEpOwotICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgMDog YnJlYWs7Ci0rICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9f cHl4X2FyZ3MsIDApOwotKyAgICAgICAgYnJlYWs7Ci0gICAgICAgICBkZWZhdWx0OiBnb3RvIF9f cHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotICAgICAgIH0KLSAgICAgfQotLSAgICBfX3B5eF92X3Rp bWVvdXQgPSB2YWx1ZXNbMF07Ci0rICAgIF9fcHl4X3ZfcHJvcCA9IHZhbHVlc1swXTsKLSsgICAg X19weXhfdl9kYXRhID0gdmFsdWVzWzFdOwotICAgfQotICAgZ290byBfX3B5eF9MNF9hcmd1bWVu dF91bnBhY2tpbmdfZG9uZTsKLSAgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKLS0gIF9fUHl4 X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJ3YWl0X2V2ZW50IiwgMCwgMCwgMSwgUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA3MDQsIF9fcHl4X0wzX2Vycm9yKQotKyAg X19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIm9ic2VydmVfcHJvcGVydHkiLCAwLCAxLCAyLCBQ eVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDc0OSwgX19weXhfTDNf ZXJyb3IpCi0gICBfX3B5eF9MM19lcnJvcjo7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1 dHRlci5saWJzLm1wdi5Db250ZXh0LndhaXRfZXZlbnQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2LkNvbnRleHQub2JzZXJ2ZV9wcm9wZXJ0eSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7Ci0gICByZXR1cm4gTlVMTDsKLSAgIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25l OjsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf Mjh3YWl0X2V2ZW50KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfdGltZW91dCk7Ci0rICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0eSgo KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92 X3NlbGYpLCBfX3B5eF92X3Byb3AsIF9fcHl4X3ZfZGF0YSk7Ci0gCi0gICAvKiBmdW5jdGlvbiBl eGl0IGNvZGUgKi8KLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJu IF9fcHl4X3I7Ci0gfQotIAotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzI4d2FpdF9ldmVudChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Rp bWVvdXQpIHsKLS0gIGRvdWJsZSBfX3B5eF92X3RpbWVvdXRfZDsKLS0gIHN0cnVjdCBtcHZfZXZl bnQgKl9fcHl4X3ZfZXZlbnQ7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMzRvYnNlcnZlX3Byb3BlcnR5KHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3ZfcHJvcCwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSkgewotKyAgdWludDY0X3QgX19weXhf dl9pZF9kYXRhOwotKyAgUHlPYmplY3QgKl9fcHl4X3ZfdXNlcmRhdGFzID0gTlVMTDsKLSsgIGNo YXIgKl9fcHl4X3ZfcHJvcGM7Ci0rICBpbnQgX19weXhfdl9lcnI7Ci0gICBQeU9iamVjdCAqX19w eXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgZG91YmxlIF9f cHl4X3RfMTsKLS0gIGludCBfX3B5eF90XzI7Ci0tICBkb3VibGUgX19weXhfdF8zOwotKyAgUHlf aGFzaF90IF9fcHl4X3RfMTsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotKyAgUHlP YmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0gICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsK LSAgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwotKyAgaW50IF9fcHl4X3RfNjsKLSsgIFB5 T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxMOwotKyAgaW50IF9fcHl4X3RfODsKLSsgIGludCBfX3B5 eF90Xzk7Ci0rICBjaGFyICpfX3B5eF90XzEwOwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0g ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVu byA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgid2FpdF9ldmVudCIsIDApOwot KyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIm9ic2VydmVfcHJvcGVydHkiLCAwKTsKLSsg IF9fUHl4X0lOQ1JFRihfX3B5eF92X3Byb3ApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjcwNgotLSAqICAgICBkZWYgd2FpdF9ldmVudChzZWxmLCB0aW1lb3V0PU5v bmUpOgotLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWl0X2V2ZW50IiIiCi0rICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzUxCi0rICogICAgIGRlZiBvYnNlcnZlX3Byb3Bl cnR5KHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6Ci0rICogICAgICAgICAiIiJXcmFwczogbXB2X29i c2VydmVfcHJvcGVydHkiIiIKLSAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgY2RlZiBkb3VibGUgdGltZW91dF9kID0g dGltZW91dCBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGVsc2UgLTEKLS0gKiAgICAgICAgIGNkZWYg bXB2X2V2ZW50KiBldmVudAotKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVp bnQ2NF90Pmhhc2goZGF0YSkKLSsgKiAgICAgICAgIGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChk YXRhKQotICAqLwotICAgI2lmbmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05TCi0gICBpZiAo dW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKLSAgICAgaWYgKHVubGlrZWx5KCEoX19weXhf dl9zZWxmLT5fY3R4ICE9IDApKSkgewotICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0 aW9uRXJyb3IpOwotLSAgICAgIF9fUFlYX0VSUigwLCA3MDYsIF9fcHl4X0wxX2Vycm9yKQotKyAg ICAgIF9fUFlYX0VSUigwLCA3NTEsIF9fcHl4X0wxX2Vycm9yKQotICAgICB9Ci0gICB9Ci0gICAj ZW5kaWYKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDcKLS0gKiAg ICAgICAgICIiIldyYXBzOiBtcHZfd2FpdF9ldmVudCIiIgotKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc1MgotKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9vYnNlcnZlX3By b3BlcnR5IiIiCi0gICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0tICogICAgICAgICBjZGVm IGRvdWJsZSB0aW1lb3V0X2QgPSB0aW1lb3V0IGlmIHRpbWVvdXQgaXMgbm90IE5vbmUgZWxzZSAt MSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjZGVmIG1wdl9ldmVu dCogZXZlbnQKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICBjZGVmIHVpbnQ2 NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgICAgICBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKLSsgKiAg ICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUp Ci0gICovCi0tICBfX3B5eF90XzIgPSAoX19weXhfdl90aW1lb3V0ICE9IFB5X05vbmUpOwotLSAg aWYgKChfX3B5eF90XzIgIT0gMCkpIHsKLS0gICAgX19weXhfdF8zID0gX19weXhfUHlGbG9hdF9B c0RvdWJsZShfX3B5eF92X3RpbWVvdXQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoZG91 YmxlKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDcwNywgX19weXhfTDFf ZXJyb3IpCi0tICAgIF9fcHl4X3RfMSA9IF9fcHl4X3RfMzsKLS0gIH0gZWxzZSB7Ci0tICAgIF9f cHl4X3RfMSA9IC0xLjA7Ci0tICB9Ci0tICBfX3B5eF92X3RpbWVvdXRfZCA9IF9fcHl4X3RfMTsK LSsgIF9fcHl4X3RfMSA9IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfMSA9PSAoKFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIoMCwgNzUyLCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fcHl4X3ZfaWRfZGF0YSA9ICgodWludDY0X3QpX19weXhfdF8xKTsKLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDkKLS0gKiAgICAgICAgIGNk ZWYgZG91YmxlIHRpbWVvdXRfZCA9IHRpbWVvdXQgaWYgdGltZW91dCBpcyBub3QgTm9uZSBlbHNl IC0xCi0tICogICAgICAgICBjZGVmIG1wdl9ldmVudCogZXZlbnQKLS0gKiAgICAgICAgIHdpdGgg bm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBldmVu dCA9IG1wdl93YWl0X2V2ZW50KHNlbGYuX2N0eCwgdGltZW91dF9kKQotLSAqICAgICAgICAgcmV0 dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzUzCi0rICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0rICogICAgICAg ICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQotKyAqICAgICAg ICAgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlk X2RhdGEsIE5vbmUpCi0rICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKLSAgKi8KLS0g IHsKLS0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2 ZTsKLS0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKLS0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVt YmVyKCk7Ci0tICAgICAgI2VuZGlmCi0tICAgICAgLyp0cnk6Ki8gewotKyAgX19weXhfdF8xID0g UHlPYmplY3RfSGFzaChfX3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF8xID09ICgo UHlfaGFzaF90KS0xKSkpIF9fUFlYX0VSUigwLCA3NTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19w eXhfdl9pZF9kYXRhID0gKCh1aW50NjRfdClfX3B5eF90XzEpOwotIAotLSAgICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxMAotLSAqICAgICAgICAgY2RlZiBtcHZfZXZl bnQqIGV2ZW50Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIGV2ZW50 ID0gbXB2X3dhaXRfZXZlbnQoc2VsZi5fY3R4LCB0aW1lb3V0X2QpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHJldHVybiBFdmVudCgpLl9pbml0KGV2ZW50LCBzZWxm KQotLSAqIAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1NAotKyAqICAg ICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKLSsgKiAg ICAgICAgIGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQotKyAqICAgICAgICAgdXNlcmRh dGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6Ci0rICog ICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9S ZXBseVVzZXJEYXRhKGRhdGEpCi0gICovCi0tICAgICAgICBfX3B5eF92X2V2ZW50ID0gbXB2X3dh aXRfZXZlbnQoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X3RpbWVvdXRfZCk7Ci0tICAgICAg fQotLQotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDkKLS0gKiAg ICAgICAgIGNkZWYgZG91YmxlIHRpbWVvdXRfZCA9IHRpbWVvdXQgaWYgdGltZW91dCBpcyBub3Qg Tm9uZSBlbHNlIC0xCi0tICogICAgICAgICBjZGVmIG1wdl9ldmVudCogZXZlbnQKLSsgIF9fcHl4 X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLT5yZXBseV91c2Vy ZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDAsIDc1NCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsg IF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoX19weXhfdl9pZF9kYXRhKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAgX19weXhfdF81ID0gTlVMTDsKLSsg IF9fcHl4X3RfNiA9IDA7Ci0rICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQ eU1ldGhvZF9DaGVjayhfX3B5eF90XzMpKSkgewotKyAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9H RVRfU0VMRihfX3B5eF90XzMpOwotKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfNSkpIHsKLSsgICAg ICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8zKTsK LSsgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKLSsgICAgICBfX1B5eF9JTkNSRUYoZnVu Y3Rpb24pOwotKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlvbik7Ci0r ICAgICAgX19weXhfdF82ID0gMTsKLSsgICAgfQotKyAgfQotKyAgI2lmIENZVEhPTl9GQVNUX1BZ Q0FMTAotKyAgaWYgKFB5RnVuY3Rpb25fQ2hlY2soX19weXhfdF8zKSkgewotKyAgICBQeU9iamVj dCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzUsIF9fcHl4X3RfNCwgUHlfTm9uZX07Ci0rICAg IF9fcHl4X3RfMiA9IF9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8zLCBfX3B5eF90 ZW1wKzEtX19weXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDc1NCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X1hERUNSRUYoX19w eXhfdF81KTsgX19weXhfdF81ID0gMDsKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0r ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotKyAgfSBlbHNlCi0r ICAjZW5kaWYKLSsgICNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCi0rICBpZiAoX19QeXhfUHlGYXN0 Q0Z1bmN0aW9uX0NoZWNrKF9fcHl4X3RfMykpIHsKLSsgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBb M10gPSB7X19weXhfdF81LCBfX3B5eF90XzQsIFB5X05vbmV9OwotKyAgICBfX3B5eF90XzIgPSBf X1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1fX3B5eF90 XzYsIDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg NzU0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5 eF90XzUgPSAwOwotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICB9IGVsc2UKLSsgICNlbmRpZgotKyAg ewotKyAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfNik7IGlmICh1bmxpa2Vs eSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDc1NCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzcpOwotKyAgICBpZiAoX19weXhfdF81KSB7Ci0rICAgICAgX19Q eXhfR0lWRVJFRihfX3B5eF90XzUpOyBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMCwgX19w eXhfdF81KTsgX19weXhfdF81ID0gTlVMTDsKLSsgICAgfQotKyAgICBfX1B5eF9HSVZFUkVGKF9f cHl4X3RfNCk7Ci0rICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwK19fcHl4X3RfNiwg X19weXhfdF80KTsKLSsgICAgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotKyAgICBfX1B5eF9HSVZF UkVGKFB5X05vbmUpOwotKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMStfX3B5eF90 XzYsIFB5X05vbmUpOwotKyAgICBfX3B5eF90XzQgPSAwOwotKyAgICBfX3B5eF90XzIgPSBfX1B5 eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMywgX19weXhfdF83LCBOVUxMKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5 eF90XzcgPSAwOwotKyAgfQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7Ci0rICBfX3B5eF92X3VzZXJkYXRhcyA9IF9fcHl4X3RfMjsKLSsgIF9fcHl4X3RfMiA9IDA7 Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzU1Ci0rICogICAgICAg ICBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKLSsgKiAgICAgICAgIHVzZXJkYXRhcyA9 IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCi0rICogICAgICAgICBpZiB1 c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAg ICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVwbHlV c2VyRGF0YShkYXRhKQotKyAqICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gVHJ1ZQotKyAq LwotKyAgX19weXhfdF84ID0gKF9fcHl4X3ZfdXNlcmRhdGFzID09IFB5X05vbmUpOwotKyAgX19w eXhfdF85ID0gKF9fcHl4X3RfOCAhPSAwKTsKLSsgIGlmIChfX3B5eF90XzkpIHsKLSsKLSsgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1NgotKyAqICAgICAgICAgdXNlcmRh dGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKLSsgKiAgICAgICAg IGlmIHVzZXJkYXRhcyBpcyBOb25lOgotKyAqICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRh dGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVl Ci0rICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKQotKyAqLwotKyAgICBfX1B5eF9HZXRN b2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMywgX19weXhfbl9zX1JlcGx5VXNlckRhdGEpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA3NTYsIF9fcHl4X0wxX2Vycm9yKQot KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgICAgX19weXhfdF83ID0gTlVMTDsKLSsg ICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzMpKSkgewotKyAgICAgIF9fcHl4X3RfNyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfMyk7Ci0rICAgICAgaWYgKGxpa2VseShfX3B5eF90XzcpKSB7Ci0rICAgICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8zKTsKLSsgICAgICAg IF9fUHl4X0lOQ1JFRihfX3B5eF90XzcpOwotKyAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKLSsgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlvbik7Ci0rICAg ICAgfQotKyAgICB9Ci0rICAgIF9fcHl4X3RfMiA9IChfX3B5eF90XzcpID8gX19QeXhfUHlPYmpl Y3RfQ2FsbDJBcmdzKF9fcHl4X3RfMywgX19weXhfdF83LCBfX3B5eF92X2RhdGEpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzMsIF9fcHl4X3ZfZGF0YSk7Ci0rICAgIF9fUHl4 X1hERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLSsgICAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzU2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOwotKyAgICBpZiAodW5saWtlbHkoX19QeXhfU2V0SXRlbUludChfX3B5eF92X3NlbGYt PnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2lkX2RhdGEsIF9fcHl4X3RfMiwgdWludDY0X3QsIDAs IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA3 NTYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKLSsgICAg X19QeXhfREVDUkVGX1NFVChfX3B5eF92X3VzZXJkYXRhcywgX19weXhfdF8yKTsKLSsgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0rCi0rICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTUKLSsgKiAgICAgICAgIGlkX2RhdGEgPSA8dWludDY0 X3Q+aGFzaChkYXRhKQotKyAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0 YS5nZXQoaWRfZGF0YSwgTm9uZSkKLSsgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgc2VsZi5yZXBseV91 c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCi0rICog ICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlCi0rICovCi0rICB9Ci0rCi0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzU3Ci0rICogICAgICAgICBpZiB1c2VyZGF0 YXMgaXMgTm9uZToKLSsgKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFd ID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKLSsgKiAgICAgICAgIHVzZXJkYXRh cy5vYnNlcnZlZCA9IFRydWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAg ICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKLSsgKiAgICAgICAgIGNkZWYgY2hhciogcHJvcGMgPSBw cm9wCi0rICovCi0rICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3VzZXJk YXRhcywgX19weXhfbl9zX29ic2VydmVkLCBQeV9UcnVlKSA8IDApIF9fUFlYX0VSUigwLCA3NTcs IF9fcHl4X0wxX2Vycm9yKQotKwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojc1OAotKyAqICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2Vy ZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQotKyAqICAgICAgICAgdXNlcmRhdGFzLm9ic2Vy dmVkID0gVHJ1ZQotKyAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgY2RlZiBjaGFyKiBwcm9wYyA9IHByb3AKLSsg KiAgICAgICAgIGNkZWYgaW50IGVycgotKyAqLwotKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzMsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykp IF9fUFlYX0VSUigwLCA3NTgsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMyk7Ci0rICBfX3B5eF90XzcgPSBOVUxMOwotKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9E UyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzMpKSkgewotKyAgICBfX3B5eF90 XzcgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzMpOwotKyAgICBpZiAobGlrZWx5KF9fcHl4 X3RfNykpIHsKLSsgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJ T04oX19weXhfdF8zKTsKLSsgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF83KTsKLSsgICAgICBf X1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8z LCBmdW5jdGlvbik7Ci0rICAgIH0KLSsgIH0KLSsgIF9fcHl4X3RfMiA9IChfX3B5eF90XzcpID8g X19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMywgX19weXhfdF83LCBfX3B5eF92X3By b3ApIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzMsIF9fcHl4X3ZfcHJvcCk7 Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0rICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NTgsIF9fcHl4X0wxX2Vycm9yKQotKyAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19w eXhfdF8zID0gMDsKLSsgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl9wcm9wLCBfX3B5eF90XzIp OwotKyAgX19weXhfdF8yID0gMDsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3NTkKLSsgKiAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9IFRydWUKLSsgKiAgICAg ICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCi0rICogICAgICAgICBjZGVmIGNoYXIqIHByb3BjID0g cHJvcCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBjZGVmIGludCBl cnIKLSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICovCi0rICBfX3B5eF90XzEwID0gX19QeXhf UHlPYmplY3RfQXNXcml0YWJsZVN0cmluZyhfX3B5eF92X3Byb3ApOyBpZiAodW5saWtlbHkoKCFf X3B5eF90XzEwKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDc1OSwgX19weXhf TDFfZXJyb3IpCi0rICBfX3B5eF92X3Byb3BjID0gX19weXhfdF8xMDsKLSsKLSsgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NjEKLSsgKiAgICAgICAgIGNkZWYgY2hhciogcHJv cGMgPSBwcm9wCi0rICogICAgICAgICBjZGVmIGludCBlcnIKLSAgKiAgICAgICAgIHdpdGggbm9n aWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBldmVudCA9 IG1wdl93YWl0X2V2ZW50KHNlbGYuX2N0eCwgdGltZW91dF9kKQotLSAqICAgICAgICAgcmV0dXJu IEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpCi0rICogICAgICAgICAgICAgZXJyID0gbXB2X29i c2VydmVfcHJvcGVydHkoCi0rICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKLSsgKi8KLSsg IHsKLSsgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAgICBQeVRocmVhZFN0YXRlICpfc2F2 ZTsKLSsgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKLSsgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVt YmVyKCk7Ci0rICAgICAgI2VuZGlmCi0rICAgICAgLyp0cnk6Ki8gewotKwotKyAgICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc2MgotKyAqICAgICAgICAgY2RlZiBpbnQg ZXJyCi0rICogICAgICAgICB3aXRoIG5vZ2lsOgotKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9v YnNlcnZlX3Byb3BlcnR5KCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAg ICAgICAgICAgIHNlbGYuX2N0eCwKLSsgKiAgICAgICAgICAgICAgICAgaWRfZGF0YSwKLSsgKi8K LSsgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X29ic2VydmVfcHJvcGVydHkoX19weXhfdl9zZWxm LT5fY3R4LCBfX3B5eF92X2lkX2RhdGEsIF9fcHl4X3ZfcHJvcGMsIE1QVl9GT1JNQVRfTk9ERSk7 Ci0rICAgICAgfQotKwotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 NjEKLSsgKiAgICAgICAgIGNkZWYgY2hhciogcHJvcGMgPSBwcm9wCi0rICogICAgICAgICBjZGVm IGludCBlcnIKLSsgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgICAgICAgICBlcnIgPSBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eSgKLSsgKiAg ICAgICAgICAgICAgICAgc2VsZi5fY3R4LAotICAqLwotICAgICAgIC8qZmluYWxseToqLyB7Ci0g ICAgICAgICAvKm5vcm1hbCBleGl0OiovewotQEAgLTE0MzI5LDEwMSArMTQ0OTgsMjQ4IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI4 d2FpdF9ldmVudChzdHJ1Y3QgX19wCi0gICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7 Ci0gICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSAgICAgICAgICAgI2VuZGlmCi0tICAgICAg ICAgIGdvdG8gX19weXhfTDU7Ci0rICAgICAgICAgIGdvdG8gX19weXhfTDY7Ci0gICAgICAgICB9 Ci0tICAgICAgICBfX3B5eF9MNTo7Ci0rICAgICAgICBfX3B5eF9MNjo7Ci0gICAgICAgfQotICAg fQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxMQotLSAqICAgICAg ICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBldmVudCA9IG1wdl93YWl0X2V2ZW50KHNl bGYuX2N0eCwgdGltZW91dF9kKQotLSAqICAgICAgICAgcmV0dXJuIEV2ZW50KCkuX2luaXQoZXZl bnQsIHNlbGYpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo3NjgKLSsgKiAgICAgICAgICAgICAgICAgTVBWX0ZPUk1BVF9O T0RFLAotKyAqICAgICAgICAgICAgICkKLSsgKiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotICAqIAotLSAqICAgICBkZWYgd2FrZXVwKHNlbGYpOgotKyAq ICAgICBAX2Vycm9ycwotICAqLwotICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gIF9fcHl4 X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkg X19QWVhfRVJSKDAsIDcxMSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhf dF80KTsKLS0gIF9fcHl4X3RfNSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRl cl80bGlic18zbXB2X0V2ZW50ICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCAqKV9fcHl4X3RfNCktPl9fcHl4X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdF80KSwgX19weXhfdl9l dmVudCwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NSkpIF9fUFlYX0VSUigwLCA3MTEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfNSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLS0g IF9fcHl4X3IgPSBfX3B5eF90XzU7Ci0tICBfX3B5eF90XzUgPSAwOwotKyAgX19weXhfdF8yID0g X19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCA3NjgsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9f cHl4X3RfMik7Ci0rICBfX3B5eF9yID0gX19weXhfdF8yOwotKyAgX19weXhfdF8yID0gMDsKLSAg IGdvdG8gX19weXhfTDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzA0Ci0tICogICAgICAgICByZXR1cm4gZXJyCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NzQ5Ci0gICogCi0tICogICAgIGRlZiB3YWl0X2V2ZW50KHNlbGYsIHRpbWVvdXQ9 Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICIiIldyYXBz OiBtcHZfd2FpdF9ldmVudCIiIgotKyAqICAgICBAX2Vycm9ycwotKyAqICAgICBkZWYgb2JzZXJ2 ZV9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVfcHJvcGVydHkiIiIKLSAg KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSAgKi8KLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLwotICAgX19weXhfTDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIp OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzQpOwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC53YWl0X2V2ZW50IiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Nyk7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0Lm9i c2VydmVfcHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKLSAgIF9fcHl4X3IgPSBOVUxMOwotICAgX19weXhfTDA6OwotKyAgX19QeXhfWERFQ1JF RihfX3B5eF92X3VzZXJkYXRhcyk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfcHJvcCk7Ci0g ICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3MTMKLS0gKiAgICAgICAgIHJldHVybiBFdmVudCgpLl9pbml0KGV2ZW50LCBz ZWxmKQotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzEKLSAgKiAKLS0gKiAg ICAgZGVmIHdha2V1cChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAiIiIKLSsgKiAgICAgQF9lcnJvcnMKLSsgKiAgICAg ZGVmIHVub2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBkYXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl91bm9ic2VydmVfcHJvcGVydHkiIiIK LSAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSAgKi8KLSAKLSAvKiBQeXRob24gd3JhcHBl ciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzMxd2FrZXVwKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLwotLXN0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzB3YWtldXBbXSA9ICJXcmFwczogbXB2X3dha2V1cCI7 Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMzF3YWtldXAoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVj dCAqdW51c2VkKSB7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMzd1bm9ic2VydmVfcHJvcGVydHkoUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSk7IC8qcHJvdG8qLwotK3N0YXRpYyBjaGFyIF9fcHl4 X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVydHlb XSA9ICJXcmFwczogbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSI7Ci0rc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzd1bm9ic2VydmVfcHJvcGVy dHkoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSkgewotICAg UHlPYmplY3QgKl9fcHl4X3IgPSAwOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0g IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJ3YWtldXAgKHdyYXBwZXIpIiwgMCk7Ci0tICBf X3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMwd2FrZXVw KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4 X3Zfc2VsZikpOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVub2JzZXJ2ZV9wcm9w ZXJ0eSAod3JhcHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVydHkoKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVj dCAqKV9fcHl4X3ZfZGF0YSkpOwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0gICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAK LS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8zMHdha2V1cChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICpfX3B5eF92X3NlbGYpIHsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X2RhdGEpIHsKLSsgIHVpbnQ2NF90IF9fcHl4X3ZfaWRfZGF0YTsKLSsgIFB5T2JqZWN0 ICpfX3B5eF92X3VzZXJkYXRhcyA9IE5VTEw7Ci0rICBpbnQgX19weXhfdl9lcnI7Ci0gICBQeU9i amVjdCAqX19weXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAg UHlfaGFzaF90IF9fcHl4X3RfMTsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotKyAg UHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVM TDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwotKyAgaW50IF9fcHl4X3RfNjsKLSsg IFB5T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxMOwotKyAgaW50IF9fcHl4X3RfODsKLSsgIGludCBf X3B5eF90Xzk7Ci0gICBpbnQgX19weXhfbGluZW5vID0gMDsKLSAgIGNvbnN0IGNoYXIgKl9fcHl4 X2ZpbGVuYW1lID0gTlVMTDsKLSAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJ3YWtldXAiLCAwKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJ1bm9ic2VydmVfcHJvcGVydHkiLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3MTUKLS0gKiAgICAgZGVmIHdha2V1cChzZWxmKToKLS0gKiAgICAg ICAgICIiIldyYXBzOiBtcHZfd2FrZXVwIiIiCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NzczCi0rICogICAgIGRlZiB1bm9ic2VydmVfcHJvcGVydHkoc2VsZiwgZGF0YSk6 Ci0rICogICAgICAgICAiIiJXcmFwczogbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSIiIgotICAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIG1wdl93YWtldXAoc2VsZi5fY3R4 KQotKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0 YSkKLSsgKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2Rh dGEsIE5vbmUpCi0gICovCi0gICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VSVElPTlMKLSAg IGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgewotICAgICBpZiAodW5saWtlbHkoIShf X3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7Ci0gICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19B c3NlcnRpb25FcnJvcik7Ci0tICAgICAgX19QWVhfRVJSKDAsIDcxNSwgX19weXhfTDFfZXJyb3Ip Ci0rICAgICAgX19QWVhfRVJSKDAsIDc3MywgX19weXhfTDFfZXJyb3IpCi0gICAgIH0KLSAgIH0K LSAgICNlbmRpZgotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxNgot LSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAiIiIKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3NzQKLSsgKiAgICAgICAgICIiIldyYXBzOiBtcHZfdW5vYnNlcnZl X3Byb3BlcnR5IiIiCi0rICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0rICogICAgICAgICBj ZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJk YXRhLmdldChpZF9kYXRhLCBOb25lKQotKyAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIG5vdCBO b25lOgotKyAqLwotKyAgX19weXhfdF8xID0gUHlPYmplY3RfSGFzaChfX3B5eF92X2RhdGEpOyBp ZiAodW5saWtlbHkoX19weXhfdF8xID09ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlYX0VSUigwLCA3 NzQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdl9pZF9kYXRhID0gKCh1aW50NjRfdClfX3B5 eF90XzEpOwotKwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3NQotICAq ICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9k YXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKLSsgKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYu cmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBub3QgTm9uZToKLSsgKiAgICAgICAg ICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBGYWxzZQotKyAqLwotKyAgX19weXhfdF8zID0gX19Q eXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5 eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNzc1LCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotKyAgX19weXhfdF80 ID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5eF92X2lkX2RhdGEpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0rICBfX3B5eF90XzUgPSBOVUxMOwotKyAgX19weXhfdF82 ID0gMDsKLSsgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0No ZWNrKF9fcHl4X3RfMykpKSB7Ci0rICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9f cHl4X3RfMyk7Ci0rICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewotKyAgICAgIFB5T2JqZWN0 KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOwotKyAgICAgIF9f UHl4X0lOQ1JFRihfX3B5eF90XzUpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0r ICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKLSsgICAgICBfX3B5 eF90XzYgPSAxOwotKyAgICB9Ci0rICB9Ci0rICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCi0rICBp ZiAoUHlGdW5jdGlvbl9DaGVjayhfX3B5eF90XzMpKSB7Ci0rICAgIFB5T2JqZWN0ICpfX3B5eF90 ZW1wWzNdID0ge19fcHl4X3RfNSwgX19weXhfdF80LCBQeV9Ob25lfTsKLSsgICAgX19weXhfdF8y ID0gX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1fX3B5 eF90XzYsIDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgNzc1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBf X3B5eF90XzUgPSAwOwotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICB9IGVsc2UKLSsgICNlbmRpZgot KyAgI2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwKLSsgIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25f Q2hlY2soX19weXhfdF8zKSkgewotKyAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5 eF90XzUsIF9fcHl4X3RfNCwgUHlfTm9uZX07Ci0rICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Q0Z1 bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5 eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4 X0wxX2Vycm9yKQotKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7 Ci0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhf dF80KTsgX19weXhfdF80ID0gMDsKLSsgIH0gZWxzZQotKyAgI2VuZGlmCi0rICB7Ci0rICAgIF9f cHl4X3RfNyA9IFB5VHVwbGVfTmV3KDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzcpKSBfX1BZWF9FUlIoMCwgNzc1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNyk7Ci0rICAgIGlmIChfX3B5eF90XzUpIHsKLSsgICAgICBfX1B5eF9HSVZFUkVG KF9fcHl4X3RfNSk7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCBfX3B5eF90XzUpOyBf X3B5eF90XzUgPSBOVUxMOwotKyAgICB9Ci0rICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF80KTsK LSsgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDArX19weXhfdF82LCBfX3B5eF90XzQp OwotKyAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0rICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9u ZSk7Ci0rICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfNiwgUHlfTm9u ZSk7Ci0rICAgIF9fcHl4X3RfNCA9IDA7Ci0rICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0 X0NhbGwoX19weXhfdF8zLCBfX3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8yKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7 Ci0rICB9Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSsgIF9f cHl4X3ZfdXNlcmRhdGFzID0gX19weXhfdF8yOwotKyAgX19weXhfdF8yID0gMDsKLSsKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzYKLSsgKiAgICAgICAgIGNkZWYgdWlu dDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCi0rICogICAgICAgICB1c2VyZGF0 YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQotKyAqICAgICAgICAg aWYgdXNlcmRhdGFzIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0r ICogICAgICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gRmFsc2UKLSsgKiAgICAgICAgICAg ICBpZiB1c2VyZGF0YXMuY291bnRlciA8PSAwOgotKyAqLwotKyAgX19weXhfdF84ID0gKF9fcHl4 X3ZfdXNlcmRhdGFzICE9IFB5X05vbmUpOwotKyAgX19weXhfdF85ID0gKF9fcHl4X3RfOCAhPSAw KTsKLSsgIGlmIChfX3B5eF90XzkpIHsKLSsKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjc3NwotKyAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0 YS5nZXQoaWRfZGF0YSwgTm9uZSkKLSsgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBub3QgTm9u ZToKLSsgKiAgICAgICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBGYWxzZSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzLmNvdW50ZXIg PD0gMDoKLSsgKiAgICAgICAgICAgICAgICAgZGVsIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0 YV0KLSsgKi8KLSsgICAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl91c2Vy ZGF0YXMsIF9fcHl4X25fc19vYnNlcnZlZCwgUHlfRmFsc2UpIDwgMCkgX19QWVhfRVJSKDAsIDc3 NywgX19weXhfTDFfZXJyb3IpCi0rCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3NzgKLSsgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBub3QgTm9uZToKLSsgKiAgICAg ICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBGYWxzZQotKyAqICAgICAgICAgICAgIGlmIHVz ZXJkYXRhcy5jb3VudGVyIDw9IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgICAgICAgICAgZGVsIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0KLSsgKiAgICAg ICAgIGNkZWYgaW50IGVycgotKyAqLwotKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9H ZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3NfY291bnRlcik7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc3OCwgX19weXhfTDFfZXJyb3IpCi0rICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgICBfX3B5eF90XzMgPSBQeU9iamVjdF9SaWNo Q29tcGFyZShfX3B5eF90XzIsIF9fcHl4X2ludF8wLCBQeV9MRSk7IF9fUHl4X1hHT1RSRUYoX19w eXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNzc4LCBfX3B5 eF9MMV9lcnJvcikKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 Ci0rICAgIF9fcHl4X3RfOSA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzMpOyBpZiAo dW5saWtlbHkoX19weXhfdF85IDwgMCkpIF9fUFlYX0VSUigwLCA3NzgsIF9fcHl4X0wxX2Vycm9y KQotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSsgICAgaWYg KF9fcHl4X3RfOSkgewotKwotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3NzkKLSsgKiAgICAgICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBGYWxzZQotKyAqICAg ICAgICAgICAgIGlmIHVzZXJkYXRhcy5jb3VudGVyIDw9IDA6Ci0rICogICAgICAgICAgICAgICAg IGRlbCBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgICAgIGNkZWYgaW50IGVycgotKyAqICAgICAgICAgd2l0aCBub2dpbDoK LSsgKi8KLSsgICAgICBpZiAodW5saWtlbHkoX19QeXhfRGVsSXRlbUludChfX3B5eF92X3NlbGYt PnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2lkX2RhdGEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUlu dF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzc5LCBfX3B5eF9M MV9lcnJvcikKLSsKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc4 Ci0rICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgbm90IE5vbmU6Ci0rICogICAgICAgICAgICAg dXNlcmRhdGFzLm9ic2VydmVkID0gRmFsc2UKLSsgKiAgICAgICAgICAgICBpZiB1c2VyZGF0YXMu Y291bnRlciA8PSAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAg ICAgICAgIGRlbCBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdCi0rICogICAgICAgICBjZGVm IGludCBlcnIKLSsgKi8KLSsgICAgfQotKwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Nzc2Ci0rICogICAgICAgICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0 X3Q+aGFzaChkYXRhKQotKyAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0 YS5nZXQoaWRfZGF0YSwgTm9uZSkKLSsgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBub3QgTm9u ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIHVzZXJkYXRh cy5vYnNlcnZlZCA9IEZhbHNlCi0rICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzLmNvdW50ZXIg PD0gMDoKLSsgKi8KLSsgIH0KLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3ODEKLSsgKiAgICAgICAgICAgICAgICAgZGVsIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0 YV0KLSsgKiAgICAgICAgIGNkZWYgaW50IGVycgotICAqICAgICAgICAgd2l0aCBub2dpbDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIG1wdl93YWtldXAoc2Vs Zi5fY3R4KQotLSAqIAotKyAqICAgICAgICAgICAgIGVyciA9IG1wdl91bm9ic2VydmVfcHJvcGVy dHkoCi0rICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKLSAgKi8KLSAgIHsKLSAgICAgICAj aWZkZWYgV0lUSF9USFJFQUQKLUBAIC0xNDQzMywyMiArMTQ3NDksMjIgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzB3YWtldXAoc3Ry dWN0IF9fcHl4X28KLSAgICAgICAjZW5kaWYKLSAgICAgICAvKnRyeToqLyB7Ci0gCi0tICAgICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE3Ci0tICogICAgICAgICBhc3Nl cnQgc2VsZi5fY3R4Ci0rICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzgyCi0rICogICAgICAgICBjZGVmIGludCBlcnIKLSAgKiAgICAgICAgIHdpdGggbm9naWw6Ci0t ICogICAgICAgICAgICAgbXB2X3dha2V1cChzZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAKLS0gKiAgICAgZGVmIHNldF93YWtldXBfY2FsbGJhY2soc2VsZiwgY2Fs bGJhY2spOgotKyAqICAgICAgICAgICAgIGVyciA9IG1wdl91bm9ic2VydmVfcHJvcGVydHkoICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICAgICAgc2VsZi5fY3R4 LAotKyAqICAgICAgICAgICAgICAgICBpZF9kYXRhLAotICAqLwotLSAgICAgICAgbXB2X3dha2V1 cChfX3B5eF92X3NlbGYtPl9jdHgpOwotKyAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfdW5vYnNl cnZlX3Byb3BlcnR5KF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9pZF9kYXRhKTsKLSAgICAg ICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxNgotLSAq ICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAiIiIKLS0gKiAgICAgICAgIGFzc2VydCBzZWxm Ll9jdHgKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzgxCi0rICog ICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdCi0rICogICAg ICAgICBjZGVmIGludCBlcnIKLSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBtcHZfd2FrZXVwKHNlbGYuX2N0eCkKLS0g KiAKLSsgKiAgICAgICAgICAgICBlcnIgPSBtcHZfdW5vYnNlcnZlX3Byb3BlcnR5KAotKyAqICAg ICAgICAgICAgICAgICBzZWxmLl9jdHgsCi0gICovCi0gICAgICAgLypmaW5hbGx5OiovIHsKLSAg ICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97Ci1AQCAtMTQ0NTYsMTQxICsxNDc3MiwxMzQgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzB3 YWtldXAoc3RydWN0IF9fcHl4X28KLSAgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsK LSAgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotICAgICAgICAgICAjZW5kaWYKLS0gICAgICAg ICAgZ290byBfX3B5eF9MNTsKLSsgICAgICAgICAgZ290byBfX3B5eF9MNzsKLSAgICAgICAgIH0K LS0gICAgICAgIF9fcHl4X0w1OjsKLSsgICAgICAgIF9fcHl4X0w3OjsKLSAgICAgICB9Ci0gICB9 Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzEzCi0tICogICAgICAg ICByZXR1cm4gRXZlbnQoKS5faW5pdChldmVudCwgc2VsZikKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3ODYKLSsgKiAgICAgICAgICAgICAgICAgaWRfZGF0YSwKLSsgKiAg ICAgICAgICAgICApCi0rICogICAgICAgICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSAgKiAKLS0gKiAgICAgZGVmIHdha2V1cChzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAiIiIKLSsgKiAg ICAgZGVmIHNodXRkb3duKHNlbGYpOgotKyAqLwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsK LSsgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNzg2LCBfX3B5eF9MMV9lcnJvcikKLSsg IF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotKyAgX19weXhfciA9IF9fcHl4X3RfMzsKLSsgIF9f cHl4X3RfMyA9IDA7Ci0rICBnb3RvIF9fcHl4X0wwOwotKwotKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc3MQotKyAqIAotKyAqICAgICBAX2Vycm9ycwotKyAqICAgICBkZWYg dW5vYnNlcnZlX3Byb3BlcnR5KHNlbGYsIGRhdGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogICAgICAgICAiIiJXcmFwczogbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSIiIgotICAq ICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqLwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCi0tICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotLSAg Z290byBfX3B5eF9MMDsKLSAgIF9fcHl4X0wxX2Vycm9yOjsKLS0gIF9fUHl4X0FkZFRyYWNlYmFj aygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQud2FrZXVwIiwgX19weXhfY2xpbmVubywgX19w eXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7 Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf NCk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfNyk7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0 LnVub2JzZXJ2ZV9wcm9wZXJ0eSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhf ZmlsZW5hbWUpOwotICAgX19weXhfciA9IE5VTEw7Ci0gICBfX3B5eF9MMDo7Ci0rICBfX1B5eF9Y REVDUkVGKF9fcHl4X3ZfdXNlcmRhdGFzKTsKLSAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwot ICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9 Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxOQotLSAqICAgICAgICAg ICAgIG1wdl93YWtldXAoc2VsZi5fY3R4KQotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3ODgKLSsgKiAgICAgICAgIHJldHVybiBlcnIKLSAgKiAKLS0gKiAgICAgZGVmIHNldF93 YWtldXBfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgICAgICAiIiJXcmFwczogbXB2X3NldF93YWtldXBfY2FsbGJhY2siIiIKLS0g KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSsgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBpZiBzZWxmLl9jdHggPT0g TlVMTDoKLSsgKiAgICAgICAgICAgICByZXR1cm4KLSAgKi8KLSAKLSAvKiBQeXRob24gd3JhcHBl ciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzMzc2V0X3dha2V1cF9jYWxsYmFjayhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9jYWxsYmFjayk7IC8qcHJvdG8qLwotLXN0YXRpYyBjaGFyIF9fcHl4X2Rv Y185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJzZXRfd2FrZXVwX2NhbGxiYWNrW10g PSAiV3JhcHM6IG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrIjsKLS1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zM3NldF93YWtldXBfY2FsbGJh Y2soUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2FsbGJhY2spIHsK LStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8zOXNodXRkb3duKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmpl Y3QgKnVudXNlZCk7IC8qcHJvdG8qLwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM5c2h1dGRvd24oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7Ci0gICBQeU9iamVjdCAqX19weXhf ciA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoInNldF93YWtldXBfY2FsbGJhY2sgKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5 eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMyc2V0X3dha2V1 cF9jYWxsYmFjaygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9jYWxsYmFjaykpOwotKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNodXRkb3duICh3cmFwcGVyKSIsIDApOwotKyAg X19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zOHNodXRk b3duKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9f cHl4X3Zfc2VsZikpOwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0gICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS1zdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMnNl dF93YWtldXBfY2FsbGJhY2soc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9jYWxsYmFjaykgewotLSAg dWludDY0X3QgX19weXhfdl9uYW1lOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24oc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKSB7Ci0rICB1aW50NjRfdCBf X3B5eF92X2N0eGlkOwotICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAgX19QeXhfUmVm TmFubnlEZWNsYXJhdGlvbnMKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotLSAgdWlu dDY0X3QgX19weXhfdF8yOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0rICBpbnQg X19weXhfdF8xOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0rICB1aW50NjRfdCBf X3B5eF90XzM7Ci0gICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpf X3B5eF90XzUgPSBOVUxMOwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFy ICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X3dha2V1cF9jYWxsYmFjayIsIDApOwotKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNodXRkb3duIiwgMCk7Ci0gCi0tICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzIxCi0tICogICAgIGRlZiBzZXRfd2FrZXVwX2Nh bGxiYWNrKHNlbGYsIGNhbGxiYWNrKToKLS0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X3dh a2V1cF9jYWxsYmFjayIiIgotLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjZGVmIHVpbnQ2NF90IG5hbWUgPSA8dWlu dDY0X3Q+aWQoc2VsZikKLS0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjawotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4OQotKyAqIAotKyAqICAgICBkZWYg c2h1dGRvd24oc2VsZik6Ci0rICogICAgICAgICBpZiBzZWxmLl9jdHggPT0gTlVMTDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIHJldHVybgotKyAqICAgICAg ICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKQotICAqLwotLSAgI2lm bmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05TCi0tICBpZiAodW5saWtlbHkoIVB5X09wdGlt aXplRmxhZykpIHsKLS0gICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDAp KSkgewotLSAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOwotLSAgICAg IF9fUFlYX0VSUigwLCA3MjEsIF9fcHl4X0wxX2Vycm9yKQotLSAgICB9Ci0tICB9Ci0tICAjZW5k aWYKLSsgIF9fcHl4X3RfMSA9ICgoX19weXhfdl9zZWxmLT5fY3R4ID09IE5VTEwpICE9IDApOwot KyAgaWYgKF9fcHl4X3RfMSkgewotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjcyMgotLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrIiIi Ci0tICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0tICogICAgICAgICBjZGVmIHVpbnQ2NF90 IG5hbWUgPSA8dWludDY0X3Q+aWQoc2VsZikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCi0tICogICAgICAgICBzZWxmLmNh bGxiYWNrdGhyZWFkLnNldChjYWxsYmFjaykKLS0gKi8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfYnVpbHRpbl9pZCwgKChQeU9iamVjdCAqKV9fcHl4X3Zf c2VsZikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3MjIsIF9fcHl4 X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX3B5eF90XzIgPSBf X1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3Rf MiA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA3 MjIsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3Rf MSA9IDA7Ci0tICBfX3B5eF92X25hbWUgPSAoKHVpbnQ2NF90KV9fcHl4X3RfMik7Ci0tCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzIzCi0tICogICAgICAgICBhc3NlcnQg c2VsZi5fY3R4Ci0tICogICAgICAgICBjZGVmIHVpbnQ2NF90IG5hbWUgPSA8dWludDY0X3Q+aWQo c2VsZikKLS0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjayAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNldChjYWxs YmFjaykKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5MAotKyAqICAg ICBkZWYgc2h1dGRvd24oc2VsZik6Ci0rICogICAgICAgICBpZiBzZWxmLl9jdHggPT0gTlVMTDoK LSsgKiAgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKQotICAqICAg ICAgICAgd2l0aCBub2dpbDoKLSAgKi8KLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X2NhbGxiYWNr KTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdl9jYWxsYmFjayk7Ci0tICBfX1B5eF9HT1RSRUYo X19weXhfdl9zZWxmLT5jYWxsYmFjayk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5j YWxsYmFjayk7Ci0tICBfX3B5eF92X3NlbGYtPmNhbGxiYWNrID0gX19weXhfdl9jYWxsYmFjazsK LSsgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLSsgICAgX19weXhfciA9IFB5X05vbmU7IF9f UHl4X0lOQ1JFRihQeV9Ob25lKTsKLSsgICAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjQKLS0gKiAgICAgICAgIGNkZWYgdWludDY0X3Qg bmFtZSA9IDx1aW50NjRfdD5pZChzZWxmKQotLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNh bGxiYWNrCi0tICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNldChjYWxsYmFjaykgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAg ICAgICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9jdHgsIF9jX2NhbGxiYWNr LCA8dm9pZCo+bmFtZSkKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4 OQotKyAqIAotKyAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6Ci0rICogICAgICAgICBpZiBzZWxm Ll9jdHggPT0gTlVMTDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg ICAgIHJldHVybgotKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5p ZChzZWxmKQotICAqLwotLSAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92X3NlbGYtPmNhbGxiYWNrdGhyZWFkLCBfX3B5eF9uX3Nfc2V0KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNzI0LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzMpOwotLSAgX19weXhfdF80ID0gTlVMTDsKLS0gIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7Ci0t ICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7Ci0tICAgIGlmIChs aWtlbHkoX19weXhfdF80KSkgewotLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9k X0dFVF9GVU5DVElPTihfX3B5eF90XzMpOwotLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQp OwotLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKLS0gICAgfQotICAgfQotLSAgX19weXhfdF8xID0gKF9f cHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8zLCBfX3B5eF90XzQs IF9fcHl4X3ZfY2FsbGJhY2spIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzMs IF9fcHl4X3ZfY2FsbGJhY2spOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90 XzQgPSAwOwotLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNzI0LCBf X3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3MjUKLS0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjawotLSAqICAgICAgICAg c2VsZi5jYWxsYmFja3RocmVhZC5zZXQoY2FsbGJhY2spCi0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzkxCi0rICogICAgICAgICBpZiBzZWxmLl9jdHggPT0gTlVMTDoKLSsg KiAgICAgICAgICAgICByZXR1cm4KLSsgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8 dWludDY0X3Q+aWQoc2VsZikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAg ICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAgICAgICBtcHZfdGVybWluYXRlX2Rlc3Ryb3koc2Vs Zi5fY3R4KQotKyAqLwotKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF9idWlsdGluX2lkLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc5MSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5 eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FzX3VpbnQ2 NF90KF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSgoX19weXhfdF8zID09ICgodWludDY0X3QpLTEp KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDc5MSwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgIF9fcHl4X3Zf Y3R4aWQgPSAoKHVpbnQ2NF90KV9fcHl4X3RfMyk7Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzkyCi0rICogICAgICAgICAgICAgcmV0dXJuCi0rICogICAgICAgICBj ZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCi0gICogICAgICAgICB3aXRo IG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgbXB2 X3NldF93YWtldXBfY2FsbGJhY2soc2VsZi5fY3R4LCBfY19jYWxsYmFjaywgPHZvaWQqPm5hbWUp Ci0tICogCi0rICogICAgICAgICAgICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KHNlbGYuX2N0eCkK LSsgKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRvd24oKQotICAqLwotICAgewot ICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotQEAgLTE0NjAwLDIyICsxNDkwOSwyMiBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMnNl dF93YWtldXBfY2FsbGJhY2socwotICAgICAgICNlbmRpZgotICAgICAgIC8qdHJ5OiovIHsKLSAK LS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjYKLS0gKiAgICAg ICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2V0KGNhbGxiYWNrKQotKyAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5MwotKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBj dHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKQotICAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAg ICAgICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9jdHgsIF9jX2NhbGxiYWNr LCA8dm9pZCo+bmFtZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIAotLSAqICAg ICBkZWYgZ2V0X3dha2V1cF9waXBlKHNlbGYpOgotKyAqICAgICAgICAgICAgIG1wdl90ZXJtaW5h dGVfZGVzdHJveShzZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRvd24oKQotKyAqICAgICAgICAgZGVsIF9j YWxsYmFja3NbY3R4aWRdCi0gICovCi0tICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhf X3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX2NhbGxi YWNrLCAoKHZvaWQgKilfX3B5eF92X25hbWUpKTsKLSsgICAgICAgIG1wdl90ZXJtaW5hdGVfZGVz dHJveShfX3B5eF92X3NlbGYtPl9jdHgpOwotICAgICAgIH0KLSAKLS0gICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzI1Ci0tICogICAgICAgICBzZWxmLmNhbGxiYWNrID0g Y2FsbGJhY2sKLS0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2V0KGNhbGxiYWNrKQot KyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTIKLSsgKiAgICAgICAg ICAgICByZXR1cm4KLSsgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+ aWQoc2VsZikKLSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLS0gKiAgICAgICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9jdHgs IF9jX2NhbGxiYWNrLCA8dm9pZCo+bmFtZSkKLS0gKiAKLSsgKiAgICAgICAgICAgICBtcHZfdGVy bWluYXRlX2Rlc3Ryb3koc2VsZi5fY3R4KQotKyAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVh ZC5zaHV0ZG93bigpCi0gICovCi0gICAgICAgLypmaW5hbGx5OiovIHsKLSAgICAgICAgIC8qbm9y bWFsIGV4aXQ6Ki97Ci1AQCAtMTQ2MjMsMjggKzE0OTMyLDEwNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMnNldF93YWtldXBfY2Fs bGJhY2socwotICAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOwotICAgICAgICAgICBQ eV9CTE9DS19USFJFQURTCi0gICAgICAgICAgICNlbmRpZgotLSAgICAgICAgICBnb3RvIF9fcHl4 X0w1OwotKyAgICAgICAgICBnb3RvIF9fcHl4X0w2OwotICAgICAgICAgfQotLSAgICAgICAgX19w eXhfTDU6OwotKyAgICAgICAgX19weXhfTDY6OwotICAgICAgIH0KLSAgIH0KLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MTkKLS0gKiAgICAgICAgICAgICBtcHZfd2Fr ZXVwKHNlbGYuX2N0eCkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTQK LSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgbXB2X3Rlcm1pbmF0ZV9k ZXN0cm95KHNlbGYuX2N0eCkKLSsgKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRv d24oKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBkZWwgX2NhbGxi YWNrc1tjdHhpZF0KLSsgKiAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXQotKyAq LwotKyAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYt PmNhbGxiYWNrdGhyZWFkLCBfX3B5eF9uX3Nfc2h1dGRvd24pOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNCkpIF9fUFlYX0VSUigwLCA3OTQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfNCk7Ci0rICBfX3B5eF90XzUgPSBOVUxMOwotKyAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKLSsgICAgX19w eXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF80KTsKLSsgICAgaWYgKGxpa2VseShf X3B5eF90XzUpKSB7Ci0rICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZV TkNUSU9OKF9fcHl4X3RfNCk7Ci0rICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7Ci0rICAg ICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4 X3RfNCwgZnVuY3Rpb24pOwotKyAgICB9Ci0rICB9Ci0rICBfX3B5eF90XzIgPSAoX19weXhfdF81 KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF80LCBfX3B5eF90XzUpIDogX19Q eXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfNCk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlY X0VSUigwLCA3OTQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7 Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKwotKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc5NQotKyAqICAgICAgICAgICAgIG1wdl90ZXJtaW5hdGVfZGVzdHJv eShzZWxmLl9jdHgpCi0rICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNodXRkb3duKCkK LSsgKiAgICAgICAgIGRlbCBfY2FsbGJhY2tzW2N0eGlkXSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0KLSsgKiAgICAg ICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lCi0rICovCi0rICBpZiAodW5saWtlbHkoX19QeXhfRGVs SXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY2FsbGJhY2tzLCBfX3B5eF92 X2N0eGlkLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkg PCAwKSkgX19QWVhfRVJSKDAsIDc5NSwgX19weXhfTDFfZXJyb3IpCi0rCi0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk2Ci0rICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhy ZWFkLnNodXRkb3duKCkKLSsgKiAgICAgICAgIGRlbCBfY2FsbGJhY2tzW2N0eGlkXQotKyAqICAg ICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lCi0rICogICAgICAgICBzZWxm LnJlcGx5X3VzZXJkYXRhID0gTm9uZQotKyAqLwotKyAgaWYgKHVubGlrZWx5KF9fUHl4X0RlbEl0 ZW1JbnQoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcywgX19w eXhfdl9jdHhpZCwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAs IDEpIDwgMCkpIF9fUFlYX0VSUigwLCA3OTYsIF9fcHl4X0wxX2Vycm9yKQotKwotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5NwotKyAqICAgICAgICAgZGVsIF9jYWxsYmFj a3NbY3R4aWRdCi0rICogICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0KLSsgKiAg ICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBOb25lCi0rICogICAgICAgICBzZWxm Ll9jdHggPSBOVUxMCi0rICovCi0rICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0rICBfX1B5eF9H SVZFUkVGKFB5X05vbmUpOwotKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2sp OwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2spOwotKyAgX19weXhfdl9z ZWxmLT5jYWxsYmFjayA9IFB5X05vbmU7Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Nzk4Ci0rICogICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0KLSsg KiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lCi0rICogICAgICAgICBzZWxmLnJlcGx5X3Vz ZXJkYXRhID0gTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBz ZWxmLl9jdHggPSBOVUxMCi0gICogCi0tICogICAgIGRlZiBzZXRfd2FrZXVwX2NhbGxiYWNrKHNl bGYsIGNhbGxiYWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAg IiIiV3JhcHM6IG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrIiIiCi0tICogICAgICAgICBhc3NlcnQg c2VsZi5fY3R4Ci0rICovCi0rICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0rICBfX1B5eF9HSVZF UkVGKFB5X05vbmUpOwotKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRh dGEpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOwotKyAg X19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSA9IFB5X05vbmU7Ci0rCi0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk5Ci0rICogICAgICAgICBzZWxmLmNhbGxiYWNrID0g Tm9uZQotKyAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IE5vbmUKLSsgKiAgICAgICAg IHNlbGYuX2N0eCA9IE5VTEwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIAotKyAq ICAgICAjIGRlZiBvcGVuZ2xfY2JfYXBpKHNlbGYpOgotKyAqLwotKyAgX19weXhfdl9zZWxmLT5f Y3R4ID0gTlVMTDsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3ODgK LSsgKiAgICAgICAgIHJldHVybiBlcnIKLSsgKiAKLSsgKiAgICAgZGVmIHNodXRkb3duKHNlbGYp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBpZiBzZWxmLl9jdHgg PT0gTlVMTDoKLSsgKiAgICAgICAgICAgICByZXR1cm4KLSAgKi8KLSAKLSAgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLwotICAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25l KTsKLSAgIGdvdG8gX19weXhfTDA7Ci0gICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0rICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMik7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Ci0tICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnNldF93YWtldXBfY2Fs bGJhY2siLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsg IF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0 dGVyLmxpYnMubXB2LkNvbnRleHQuc2h1dGRvd24iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5l bm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSAgIF9fcHl4X3IgPSBOVUxMOwotICAgX19weXhfTDA6Owot ICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci1AQCAtMTQ2NTIsMzc0ICsxNTA0MCw0MDMgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MzJzZXRfd2FrZXVwX2NhbGxiYWNrKHMKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzI4Ci0tICogICAgICAgICAgICAgbXB2X3Nl dF93YWtldXBfY2FsbGJhY2soc2VsZi5fY3R4LCBfY19jYWxsYmFjaywgPHZvaWQqPm5hbWUpCi0r LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxMwotKyAqICAgICAjICAgICByZXR1 cm4gY3R4Ci0rICogCi0rICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5zaHV0ZG93bigpCi0gICogCi0tICog ICAgIGRlZiBnZXRfd2FrZXVwX3BpcGUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfZ2V0X3dha2V1cF9waXBlIiIiCi0tICogICAg ICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0gICovCi0gCi0gLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8z NWdldF93YWtldXBfcGlwZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5 T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KLS1zdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM0Z2V0X3dha2V1cF9waXBlW10gPSAiV3JhcHM6IG1w dl9nZXRfd2FrZXVwX3BpcGUiOwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzM1Z2V0X3dha2V1cF9waXBlKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgewotLSAgUHlPYmplY3QgKl9f cHl4X3IgPSAwOwotK3N0YXRpYyB2b2lkIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF80MV9fZGVhbGxvY19fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8K LStzdGF0aWMgdm9pZCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDFf X2RlYWxsb2NfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Ci0gICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImdldF93YWtldXBfcGlw ZSAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMzRnZXRfd2FrZXVwX3BpcGUoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7Ci0rICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18gKHdyYXBwZXIpIiwgMCk7Ci0rICBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDBfX2RlYWxsb2NfXygoKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpKTsK LSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzRnZXRfd2FrZXVwX3BpcGUo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9z ZWxmKSB7Ci0tICBpbnQgX19weXhfdl9waXBlOwotLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxM OwotK3N0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80 MF9fZGVhbGxvY19fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKl9fcHl4X3Zfc2VsZikgewotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSAgIFB5 T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7 Ci0rICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKLSAgIGludCBfX3B5eF9saW5lbm8gPSAw OwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotICAgaW50IF9fcHl4X2Ns aW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImdldF93YWtldXBfcGlw ZSIsIDApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVhbGxvY19fIiwgMCk7 Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzMwCi0tICogICAgIGRl ZiBnZXRfd2FrZXVwX3BpcGUoc2VsZik6Ci0tICogICAgICAgICAiIiJXcmFwczogbXB2X2dldF93 YWtldXBfcGlwZSIiIgotLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjZGVmIGludCBwaXBlCi0tICogICAgICAgICB3 aXRoIG5vZ2lsOgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNAotKyAq IAotKyAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6Ci0rICogICAgICAgICBzZWxmLnNodXRk b3duKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIAotKyAqIGNkZWYgdm9pZCAq X2NfZ2V0cHJvY2FkZHJlc3Modm9pZCAqY3R4LCBjb25zdCBjaGFyICpuYW1lKSB3aXRoIGdpbDoK LSAgKi8KLS0gICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUwotLSAgaWYgKHVubGlr ZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Ci0tICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2Vs Zi0+X2N0eCAhPSAwKSkpIHsKLS0gICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVy cm9yKTsKLS0gICAgICBfX1BZWF9FUlIoMCwgNzMwLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4 X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2Vs ZiksIF9fcHl4X25fc19zaHV0ZG93bik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDAsIDgxNCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK LSsgIF9fcHl4X3RfMyA9IE5VTEw7Ci0rICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotKyAgICBfX3B5eF90XzMgPSBQeU1l dGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwotKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsK LSsgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhf dF8yKTsKLSsgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKLSsgICAgICBfX1B5eF9JTkNS RUYoZnVuY3Rpb24pOwotKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlv bik7Ci0gICAgIH0KLSAgIH0KLS0gICNlbmRpZgotKyAgX19weXhfdF8xID0gKF9fcHl4X3RfMykg PyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKSA6IF9fUHl4 X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzIpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOwotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgODE0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot KyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0rICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3MzIKLS0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLS0gKiAgICAg ICAgIGNkZWYgaW50IHBpcGUKLS0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBwaXBlID0gbXB2X2dldF93YWtldXBfcGlw ZShzZWxmLl9jdHgpCi0tICogICAgICAgICByZXR1cm4gcGlwZQotLSAqLwotLSAgewotLSAgICAg ICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwotLSAgICAg IFB5X1VOQkxPQ0tfVEhSRUFEUwotLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLS0g ICAgICAjZW5kaWYKLS0gICAgICAvKnRyeToqLyB7Ci0tCi0tICAgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzMzCi0tICogICAgICAgICBjZGVmIGludCBwaXBlCi0tICog ICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIHBpcGUgPSBtcHZfZ2V0X3dha2V1 cF9waXBlKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgcmV0dXJuIHBpcGUKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MTMK LSsgKiAgICAgIyAgICAgcmV0dXJuIGN0eAotKyAqIAotKyAqICAgICBkZWYgX19kZWFsbG9jX18o c2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYuc2h1 dGRvd24oKQotICAqIAotICAqLwotLSAgICAgICAgX19weXhfdl9waXBlID0gbXB2X2dldF93YWtl dXBfcGlwZShfX3B5eF92X3NlbGYtPl9jdHgpOwotLSAgICAgIH0KLSAKLS0gICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzMyCi0tICogICAgICAgICBhc3NlcnQgc2VsZi5f Y3R4Ci0tICogICAgICAgICBjZGVmIGludCBwaXBlCi0tICogICAgICAgICB3aXRoIG5vZ2lsOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcGlwZSA9IG1wdl9n ZXRfd2FrZXVwX3BpcGUoc2VsZi5fY3R4KQotLSAqICAgICAgICAgcmV0dXJuIHBpcGUKLSsgIC8q IGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgZ290byBfX3B5eF9MMDsKLSsgIF9fcHl4X0wxX2Vy cm9yOjsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X1hERUNSRUYoX19w eXhfdF8yKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKLSsgIF9fUHl4X1dyaXRlVW5y YWlzYWJsZSgidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX19kZWFsbG9jX18iLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsKLSsgIF9fcHl4X0ww OjsKLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotK30KLSsKLSsvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxCi0rICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVsdCBf X3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKQotKyAqIGRlZiBfX3NldHN0 YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKLSAgKi8KLS0gICAgICAvKmZpbmFsbHk6 Ki8gewotLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKLS0gICAgICAgICAgI2lmZGVmIFdJVEhf VEhSRUFECi0tICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0tICAgICAgICAgIFB5 X0JMT0NLX1RIUkVBRFMKLS0gICAgICAgICAgI2VuZGlmCi0tICAgICAgICAgIGdvdG8gX19weXhf TDU7Ci0tICAgICAgICB9Ci0tICAgICAgICBfX3B5eF9MNTo7Ci0tICAgICAgfQotLSAgfQotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczNAotLSAqICAgICAgICAgd2l0 aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBwaXBlID0gbXB2X2dldF93YWtldXBfcGlwZShzZWxm Ll9jdHgpCi0tICogICAgICAgICByZXR1cm4gcGlwZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogCi0tICogICAgIGRlZiBfX2Npbml0X18oc2VsZik6Ci0rLyogUHl0aG9uIHdyYXBw ZXIgKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF80M19fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhP Tl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLwotK3N0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQzX19yZWR1Y2VfY3l0aG9u X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2Vk KSB7Ci0rICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fICh3 cmFwcGVyKSIsIDApOwotKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF80Ml9fcmVkdWNlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOwotKwotKyAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCi0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJl dHVybiBfX3B5eF9yOwotK30KLSsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF80Ml9fcmVkdWNlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQg c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9z ZWxmKSB7Ci0rICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0rICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0rICBpbnQgX19weXhf bGluZW5vID0gMDsKLSsgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSsgIGlu dCBfX3B5eF9jbGluZW5vID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3Jl ZHVjZV9jeXRob25fXyIsIDApOwotKwotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MgotKyAqIGRl ZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJubyBk ZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5vbi10cml2aWFsIF9fY2luaXRfXyIpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBf X3B5eF9zdGF0ZSk6Ci0rICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVj ZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKQotICAqLwotLSAgX19QeXhfWERFQ1JF RihfX3B5eF9yKTsKLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3Zf cGlwZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDczNCwgX19weXhf TDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2J1aWx0 aW5fVHlwZUVycm9yLCBfX3B5eF90dXBsZV9fMywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7Ci0tICBfX3B5eF9yID0gX19weXhfdF8xOwotLSAgX19weXhfdF8xID0gMDsKLS0g IGdvdG8gX19weXhfTDA7Ci0rICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOwotKyAg X19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICBfX1BZWF9FUlIoMSwg MiwgX19weXhfTDFfZXJyb3IpCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NzI4Ci0tICogICAgICAgICAgICAgbXB2X3NldF93YWtldXBfY2FsbGJhY2soc2VsZi5fY3R4 LCBfY19jYWxsYmFjaywgPHZvaWQqPm5hbWUpCi0tICogCi0tICogICAgIGRlZiBnZXRfd2FrZXVw X3BpcGUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICIi IldyYXBzOiBtcHZfZ2V0X3dha2V1cF9waXBlIiIiCi0tICogICAgICAgICBhc3NlcnQgc2VsZi5f Y3R4Ci0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCi0rICogZGVmIF9fcmVkdWNlX2N5dGhvbl9f KHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIHJhaXNlIFR5cGVF cnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18i KQotKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKLSAgKi8K LSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19weXhfTDFfZXJyb3I6OwotICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0 ZXIubGlicy5tcHYuQ29udGV4dC5nZXRfd2FrZXVwX3BpcGUiLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0 dGVyLmxpYnMubXB2LkNvbnRleHQuX19yZWR1Y2VfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5vLCBf X3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSAgIF9fcHl4X3IgPSBOVUxMOwotLSAgX19w eXhfTDA6OwotICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzM2Ci0tICogICAgICAgICByZXR1cm4gcGlwZQotLSAqIAot LSAqICAgICBkZWYgX19jaW5pdF9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCi0t ICogICAgICAgICB3aXRoIG5vZ2lsOgotKy8qICIodHJlZSBmcmFnbWVudCkiOjMKLSsgKiBkZWYg X19yZWR1Y2VfY3l0aG9uX18oc2VsZik6Ci0rICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVm YXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKQotKyAqIGRlZiBf X3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2Vf XyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikKLSAgKi8KLSAKLSAvKiBQeXRob24gd3Jh cHBlciAqLwotLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzM3X19jaW5pdF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9h cmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLwotLXN0YXRpYyBpbnQgX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM3X19jaW5pdF9fKFB5T2JqZWN0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykg ewotLSAgaW50IF9fcHl4X3I7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfNDVfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLypwcm90byovCi0rc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDVf X3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X19fcHl4X3N0YXRlKSB7Ci0rICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0gICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fY2lu aXRfXyAod3JhcHBlcikiLCAwKTsKLS0gIGlmICh1bmxpa2VseShQeVR1cGxlX0dFVF9TSVpFKF9f cHl4X2FyZ3MpID4gMCkpIHsKLS0gICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fY2lu aXRfXyIsIDEsIDAsIDAsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyByZXR1cm4gLTE7 fQotLSAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpICYmIHVubGlrZWx5KFB5RGljdF9TaXplKF9f cHl4X2t3ZHMpID4gMCkgJiYgdW5saWtlbHkoIV9fUHl4X0NoZWNrS2V5d29yZFN0cmluZ3MoX19w eXhfa3dkcywgIl9fY2luaXRfXyIsIDApKSkgcmV0dXJuIC0xOwotLSAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNl9fY2luaXRfXygoKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpKTsK LSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fICh3cmFw cGVyKSIsIDApOwotKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF80NF9fc2V0c3RhdGVfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4 X3ZfX19weXhfc3RhdGUpKTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0t c3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZfX2Np bml0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19w eXhfdl9zZWxmKSB7Ci0tICB1aW50NjRfdCBfX3B5eF92X2N0eGlkOwotLSAgaW50IF9fcHl4X3I7 Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNDRfX3NldHN0YXRlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VE IFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7Ci0rICBQeU9iamVjdCAqX19weXhfciA9 IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotICAgUHlPYmplY3QgKl9fcHl4 X3RfMSA9IE5VTEw7Ci0tICB1aW50NjRfdCBfX3B5eF90XzI7Ci0tICBpbnQgX19weXhfdF8zOwot LSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF81ID0g TlVMTDsKLSAgIGludCBfX3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmls ZW5hbWUgPSBOVUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fY2luaXRfXyIsIDApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18iLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3MzcKLS0gKiAKLS0gKiAgICAgZGVmIF9fY2luaXRfXyhzZWxmKToK LS0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2VsZikgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAg ICAgICAgICAgICBzZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkKLSsgIC8qICIodHJlZSBmcmFnbWVu dCkiOjQKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVl IHRvIG5vbi10cml2aWFsIF9fY2luaXRfXyIpCi0rICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18o c2VsZiwgX19weXhfc3RhdGUpOgotKyAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQg X19yZWR1Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotICAqLwotLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF9idWlsdGluX2lkLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDczNywgX19weXhfTDFfZXJyb3IpCi0r ICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2J1aWx0aW5fVHlwZUVycm9y LCBfX3B5eF90dXBsZV9fNCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDEsIDQsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0t ICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5s aWtlbHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkp IF9fUFlYX0VSUigwLCA3MzcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfUmFpc2UoX19weXhf dF8xLCAwLCAwLCAwKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OwotLSAgX19weXhfdl9jdHhpZCA9ICgodWludDY0X3QpX19weXhfdF8yKTsKLSsgIF9fUFlYX0VS UigxLCA0LCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo3MzgKLS0gKiAgICAgZGVmIF9fY2luaXRfXyhzZWxmKToKLS0gKiAgICAgICAgIGNk ZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2VsZikKLS0gKiAgICAgICAgIHdpdGgg bm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBzZWxm Ll9jdHggPSBtcHZfY3JlYXRlKCkKLS0gKiAgICAgICAgIGlmIG5vdCBzZWxmLl9jdHg6Ci0rICAv KiAiKHRyZWUgZnJhZ21lbnQpIjozCi0rICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgot KyAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2VfXyBkdWUgdG8gbm9u LXRyaXZpYWwgX19jaW5pdF9fIikKLSsgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBf X3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgcmFpc2Ug VHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5vbi10cml2aWFsIF9fY2lu aXRfXyIpCi0gICovCi0tICB7Ci0tICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgUHlU aHJlYWRTdGF0ZSAqX3NhdmU7Ci0tICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0tICAgICAgX19Q eXhfRmFzdEdJTF9SZW1lbWJlcigpOwotLSAgICAgICNlbmRpZgotLSAgICAgIC8qdHJ5OiovIHsK LSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MzkKLS0gKiAg ICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2VsZikKLS0gKiAgICAg ICAgIHdpdGggbm9naWw6Ci0tICogICAgICAgICAgICAgc2VsZi5fY3R4ID0gbXB2X2NyZWF0ZSgp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGlmIG5vdCBzZWxmLl9j dHg6Ci0tICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJy b3IiKQotKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0rICBfX3B5eF9MMV9lcnJvcjo7Ci0r ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1 dHRlci5saWJzLm1wdi5Db250ZXh0Ll9fc2V0c3RhdGVfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fcHl4X3IgPSBOVUxMOwotKyAg X19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKLSsgIHJldHVybiBfX3B5eF9yOwotK30KLSsKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODE2Ci0rICogICAgICAgICBzZWxmLnNodXRkb3duKCkKLSsgKiAKLSsgKiBjZGVm IHZvaWQgKl9jX2dldHByb2NhZGRyZXNzKHZvaWQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSkgd2l0 aCBnaWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgcmV0dXJuIDx2b2lk ICo+PGludHB0cl90Pig8b2JqZWN0PmN0eCkobmFtZSkKLSsgKiAKLSAgKi8KLS0gICAgICAgIF9f cHl4X3Zfc2VsZi0+X2N0eCA9IG1wdl9jcmVhdGUoKTsKLS0gICAgICB9Ci0gCi0tICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczOAotLSAqICAgICBkZWYgX19jaW5pdF9f KHNlbGYpOgotLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChz ZWxmKQotLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICAgICAgICAgIHNlbGYuX2N0eCA9IG1wdl9jcmVhdGUoKQotLSAqICAgICAgICAg aWYgbm90IHNlbGYuX2N0eDoKLStzdGF0aWMgdm9pZCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX2NfZ2V0cHJvY2FkZHJlc3Modm9pZCAqX19weXhfdl9jdHgsIGNoYXIgY29uc3QgKl9f cHl4X3ZfbmFtZSkgewotKyAgdm9pZCAqX19weXhfcjsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFy YXRpb25zCi0rICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5 eF90XzIgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0rICBQeU9iamVj dCAqX19weXhfdF80ID0gTlVMTDsKLSsgIGludHB0cl90IF9fcHl4X3RfNTsKLSsgIGludCBfX3B5 eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotKyAg aW50IF9fcHl4X2NsaW5lbm8gPSAwOwotKyAgI2lmZGVmIFdJVEhfVEhSRUFECi0rICBQeUdJTFN0 YXRlX1NUQVRFIF9fcHl4X2dpbHN0YXRlX3NhdmUgPSBfX1B5eF9QeUdJTFN0YXRlX0Vuc3VyZSgp OwotKyAgI2VuZGlmCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2NfZ2V0cHJvY2Fk ZHJlc3MiLCAwKTsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MTcK LSsgKiAKLSsgKiBjZGVmIHZvaWQgKl9jX2dldHByb2NhZGRyZXNzKHZvaWQgKmN0eCwgY29uc3Qg Y2hhciAqbmFtZSkgd2l0aCBnaWw6Ci0rICogICAgIHJldHVybiA8dm9pZCAqPjxpbnRwdHJfdD4o PG9iamVjdD5jdHgpKG5hbWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAKLSsg KiBjZGVmIHZvaWQgX2NfdXBkYXRlY2Iodm9pZCAqY3R4KSB3aXRoIGdpbDoKLSAgKi8KLS0gICAg ICAvKmZpbmFsbHk6Ki8gewotLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKLS0gICAgICAgICAg I2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0t ICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLS0gICAgICAgICAgI2VuZGlmCi0tICAgICAgICAg IGdvdG8gX19weXhfTDU7Ci0tICAgICAgICB9Ci0tICAgICAgICBfX3B5eF9MNTo7Ci0tICAgICAg fQotKyAgX19weXhfdF8yID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbmFtZSk7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDgxNywgX19weXhfTDFfZXJy b3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgIF9fUHl4X0lOQ1JFRigoKFB5T2Jq ZWN0ICopX19weXhfdl9jdHgpKTsKLSsgIF9fcHl4X3RfMyA9ICgoUHlPYmplY3QgKilfX3B5eF92 X2N0eCk7IF9fcHl4X3RfNCA9IE5VTEw7Ci0rICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7Ci0rICAgIF9fcHl4X3RfNCA9 IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7Ci0rICAgIGlmIChsaWtlbHkoX19weXhfdF80 KSkgewotKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihf X3B5eF90XzMpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOwotKyAgICAgIF9fUHl4 X0lOQ1JFRihmdW5jdGlvbik7Ci0rICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1 bmN0aW9uKTsKLSsgICAgfQotICAgfQotKyAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5 eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8zLCBfX3B5eF90XzQsIF9fcHl4X3RfMikgOiBf X1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdF8yKTsKLSsgIF9fUHl4 X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgODE3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICBfX3B5eF90 XzUgPSBfX1B5eF9QeUludF9Bc19pbnRwdHJfdChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9f cHl4X3RfNSA9PSAoKGludHB0cl90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VS UigwLCA4MTcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7Ci0rICBfX3B5eF9yID0gKCh2b2lkICopKChpbnRwdHJfdClfX3B5eF90XzUp KTsKLSsgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NzQwCi0tICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIHNlbGYu X2N0eCA9IG1wdl9jcmVhdGUoKQotLSAqICAgICAgICAgaWYgbm90IHNlbGYuX2N0eDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKCJD b250ZXh0IGNyZWF0aW9uIGVycm9yIikKLS0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQg PSBDYWxsYmFja1RocmVhZCgpCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 ODE2Ci0rICogICAgICAgICBzZWxmLnNodXRkb3duKCkKLSsgKiAKLSsgKiBjZGVmIHZvaWQgKl9j X2dldHByb2NhZGRyZXNzKHZvaWQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSkgd2l0aCBnaWw6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgcmV0dXJuIDx2b2lkICo+PGludHB0 cl90Pig8b2JqZWN0PmN0eCkobmFtZSkKLSsgKiAKLSAgKi8KLS0gIF9fcHl4X3RfMyA9ICgoIShf X3B5eF92X3NlbGYtPl9jdHggIT0gMCkpICE9IDApOwotLSAgaWYgKHVubGlrZWx5KF9fcHl4X3Rf MykpIHsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0MQotLSAq ICAgICAgICAgICAgIHNlbGYuX2N0eCA9IG1wdl9jcmVhdGUoKQotLSAqICAgICAgICAgaWYgbm90 IHNlbGYuX2N0eDoKLS0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcigiQ29udGV4dCBjcmVh dGlvbiBlcnJvciIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNl bGYuY2FsbGJhY2t0aHJlYWQgPSBDYWxsYmFja1RocmVhZCgpCi0tICogICAgICAgICBfY2FsbGJh Y2tzW2N0eGlkXSA9IHNlbGYuY2FsbGJhY2t0aHJlYWQKLS0gKi8KLS0gICAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2Vs eSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc0MSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAgICBfX3B5eF90XzUgPSBOVUxMOwotLSAgICBpZiAo Q1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3Rf NCkpKSB7Ci0tICAgICAgX19weXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF80KTsK LS0gICAgICBpZiAobGlrZWx5KF9fcHl4X3RfNSkpIHsKLS0gICAgICAgIFB5T2JqZWN0KiBmdW5j dGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzQpOwotLSAgICAgICAgX19QeXhf SU5DUkVGKF9fcHl4X3RfNSk7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAg ICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzQsIGZ1bmN0aW9uKTsKLS0gICAgICB9Ci0t ICAgIH0KLS0gICAgX19weXhfdF8xID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF80LCBfX3B5eF90XzUsIF9fcHl4X2twX3NfQ29udGV4dF9jcmVhdGlvbl9l cnJvcikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNCwgX19weXhfa3Bfc19D b250ZXh0X2NyZWF0aW9uX2Vycm9yKTsKLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBf X3B5eF90XzUgPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA3NDEsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0g ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICAgIF9fUHl4X1Jh aXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOwotLSAgICBfX1BZWF9FUlIoMCwgNzQxLCBfX3B5eF9MMV9lcnJvcikKLSsg IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19weXhfTDFfZXJyb3I6OwotKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzEpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotKyAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzMpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotKyAg X19QeXhfV3JpdGVVbnJhaXNhYmxlKCJ2aWRjdXR0ZXIubGlicy5tcHYuX2NfZ2V0cHJvY2FkZHJl c3MiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsK LSsgIF9fcHl4X3IgPSAwOwotKyAgX19weXhfTDA6OwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7Ci0rICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgIF9fUHl4X1B5R0lMU3RhdGVfUmVs ZWFzZShfX3B5eF9naWxzdGF0ZV9zYXZlKTsKLSsgICNlbmRpZgotKyAgcmV0dXJuIF9fcHl4X3I7 Ci0rfQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQwCi0tICog ICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIHNlbGYuX2N0eCA9IG1wdl9jcmVh dGUoKQotLSAqICAgICAgICAgaWYgbm90IHNlbGYuX2N0eDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKCJDb250ZXh0IGNyZWF0aW9u IGVycm9yIikKLS0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQgPSBDYWxsYmFja1RocmVh ZCgpCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxOQotKyAqICAgICByZXR1 cm4gPHZvaWQgKj48aW50cHRyX3Q+KDxvYmplY3Q+Y3R4KShuYW1lKQotKyAqIAotKyAqIGNkZWYg dm9pZCBfY191cGRhdGVjYih2b2lkICpjdHgpIHdpdGggZ2lsOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICg8b2JqZWN0PmN0eCkoKQotKyAqIAotICAqLwotLSAgfQotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0MgotLSAqICAgICAgICAgaWYg bm90IHNlbGYuX2N0eDoKLS0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcigiQ29udGV4dCBj cmVhdGlvbiBlcnJvciIpCi0tICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkID0gQ2FsbGJh Y2tUaHJlYWQoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBfY2Fs bGJhY2tzW2N0eGlkXSA9IHNlbGYuY2FsbGJhY2t0aHJlYWQKLS0gKiAgICAgICAgIHNlbGYucmVw bHlfdXNlcmRhdGEgPSBkaWN0KCkKLStzdGF0aWMgdm9pZCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fY191cGRhdGVjYih2b2lkICpfX3B5eF92X2N0eCkgewotKyAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotKyAgUHlPYmpl Y3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKLSsg IGludCBfX3B5eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOwotKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotKyAgI2lmZGVmIFdJVEhfVEhSRUFECi0r ICBQeUdJTFN0YXRlX1NUQVRFIF9fcHl4X2dpbHN0YXRlX3NhdmUgPSBfX1B5eF9QeUdJTFN0YXRl X0Vuc3VyZSgpOwotKyAgI2VuZGlmCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2Nf dXBkYXRlY2IiLCAwKTsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4 MjAKLSsgKiAKLSsgKiBjZGVmIHZvaWQgX2NfdXBkYXRlY2Iodm9pZCAqY3R4KSB3aXRoIGdpbDoK LSsgKiAgICAgKDxvYmplY3Q+Y3R4KSgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAKLSsgKiAjIGNkZWYgY2xhc3MgT3BlbkdMQ29udGV4dChvYmplY3QpOgotICAqLwotLSAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19DYWxsYmFja1RocmVh ZCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc0MiwgX19weXhfTDFf ZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLS0gIF9fcHl4X3RfNSA9IE5VTEw7 Ci0tICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNr KF9fcHl4X3RfNCkpKSB7Ci0tICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfNCk7Ci0tICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewotLSAgICAgIFB5T2JqZWN0KiBm dW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzQpOwotLSAgICAgIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzUpOwotKyAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilfX3B5eF92 X2N0eCkpOwotKyAgX19weXhfdF8yID0gKChQeU9iamVjdCAqKV9fcHl4X3ZfY3R4KTsgX19weXhf dF8zID0gTlVMTDsKLSsgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlN ZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLSsgICAgX19weXhfdF8zID0gUHlNZXRob2RfR0VU X1NFTEYoX19weXhfdF8yKTsKLSsgICAgaWYgKGxpa2VseShfX3B5eF90XzMpKSB7Ci0rICAgICAg UHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0r ICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7Ci0gICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0 aW9uKTsKLS0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNCwgZnVuY3Rpb24pOwotKyAg ICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0gICAgIH0KLSAgIH0K LS0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzQsIF9fcHl4X3RfNSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF80 KTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLS0gIGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDc0MiwgX19weXhfTDFfZXJyb3IpCi0r ICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfdF8yLCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7 Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4MjAsIF9fcHl4X0wxX2Vycm9yKQotICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19w eXhfdF80ID0gMDsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0dPVFJF RihfX3B5eF92X3NlbGYtPmNhbGxiYWNrdGhyZWFkKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF92 X3NlbGYtPmNhbGxiYWNrdGhyZWFkKTsKLS0gIF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQg PSBfX3B5eF90XzE7Ci0tICBfX3B5eF90XzEgPSAwOwotLQotLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc0MwotLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKCJDb250 ZXh0IGNyZWF0aW9uIGVycm9yIikKLS0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQgPSBD YWxsYmFja1RocmVhZCgpCi0tICogICAgICAgICBfY2FsbGJhY2tzW2N0eGlkXSA9IHNlbGYuY2Fs bGJhY2t0aHJlYWQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2Vs Zi5yZXBseV91c2VyZGF0YSA9IGRpY3QoKQotLSAqICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tj dHhpZF0gPSBzZWxmLnJlcGx5X3VzZXJkYXRhCi0tICovCi0tICBfX3B5eF90XzEgPSBfX3B5eF92 X3NlbGYtPmNhbGxiYWNrdGhyZWFkOwotLSAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7Ci0tICBp ZiAodW5saWtlbHkoX19QeXhfU2V0SXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fY2FsbGJhY2tzLCBfX3B5eF92X2N0eGlkLCBfX3B5eF90XzEsIHVpbnQ2NF90LCAwLCBfX1B5 eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzQzLCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQ0Ci0tICogICAgICAgICBzZWxmLmNhbGxi YWNrdGhyZWFkID0gQ2FsbGJhY2tUaHJlYWQoKQotLSAqICAgICAgICAgX2NhbGxiYWNrc1tjdHhp ZF0gPSBzZWxmLmNhbGxiYWNrdGhyZWFkCi0tICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRh ID0gZGljdCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIF9yZXBs eV91c2VyZGF0YXNbY3R4aWRdID0gc2VsZi5yZXBseV91c2VyZGF0YQotLSAqICAgICAgICAgc2Vs Zi5jYWxsYmFja3RocmVhZC5zdGFydCgpCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6ODE5Ci0rICogICAgIHJldHVybiA8dm9pZCAqPjxpbnRwdHJfdD4oPG9iamVjdD5jdHgp KG5hbWUpCi0rICogCi0rICogY2RlZiB2b2lkIF9jX3VwZGF0ZWNiKHZvaWQgKmN0eCkgd2l0aCBn aWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgKDxvYmplY3Q+Y3R4KSgp Ci0rICogCi0gICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9QeURpY3RfTmV3UHJlc2l6ZWQoMCk7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDc0NCwgX19weXhfTDFfZXJy b3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhf dF8xKTsKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKLS0g IF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKLS0gIF9fcHl4X3Zf c2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBfX3B5eF90XzE7Ci0tICBfX3B5eF90XzEgPSAwOwotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0NQotLSAqICAgICAgICAgX2Nh bGxiYWNrc1tjdHhpZF0gPSBzZWxmLmNhbGxiYWNrdGhyZWFkCi0tICogICAgICAgICBzZWxmLnJl cGx5X3VzZXJkYXRhID0gZGljdCgpCi0tICogICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2N0eGlk XSA9IHNlbGYucmVwbHlfdXNlcmRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq ICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zdGFydCgpCi0rICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KLSsgIGdvdG8gX19weXhfTDA7Ci0rICBfX3B5eF9MMV9lcnJvcjo7Ci0rICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0rICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0rICBfX1B5eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1 dHRlci5saWJzLm1wdi5fY191cGRhdGVjYiIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUsIDEsIDApOwotKyAgX19weXhfTDA6OwotKyAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7Ci0rICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgIF9fUHl4X1B5R0lMU3Rh dGVfUmVsZWFzZShfX3B5eF9naWxzdGF0ZV9zYXZlKTsKLSsgICNlbmRpZgotK30KLSsKLSsvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODg2Ci0rICogICAgICAgICBvYmplY3Qgb3du ZWQKLSAgKiAKLSsgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICBzZWxmLm93bmVkID0gW10KLSsgKiAgICAgICAgIHNlbGYu cGFyYW1zWzBdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQKLSAgKi8KLS0gIF9fcHl4 X3RfMSA9IF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGE7Ci0tICBfX1B5eF9JTkNSRUYoX19w eXhfdF8xKTsKLS0gIGlmICh1bmxpa2VseShfX1B5eF9TZXRJdGVtSW50KF9fcHl4X3ZfOXZpZGN1 dHRlcl80bGlic18zbXB2X19yZXBseV91c2VyZGF0YXMsIF9fcHl4X3ZfY3R4aWQsIF9fcHl4X3Rf MSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpIDwgMCkp IF9fUFlYX0VSUigwLCA3NDUsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NzQ2Ci0tICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gZGljdCgpCi0tICog ICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXSA9IHNlbGYucmVwbHlfdXNlcmRhdGEKLS0g KiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc3RhcnQoKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rLyogUHl0aG9uIHdyYXBwZXIgKi8KLStzdGF0aWMgaW50IF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfMV9faW5pdF9fKFB5T2JqZWN0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7 IC8qcHJvdG8qLwotK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz X1JlbmRlclBhcmFtc18xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7Ci0rICBpbnQgX19weXhfcjsKLSsg IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgiX19pbml0X18gKHdyYXBwZXIpIiwgMCk7Ci0rICBpZiAodW5saWtlbHkoUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKSA+IDApKSB7Ci0rICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlk KCJfX2luaXRfXyIsIDEsIDAsIDAsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyByZXR1 cm4gLTE7fQotKyAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpICYmIHVubGlrZWx5KFB5RGljdF9T aXplKF9fcHl4X2t3ZHMpID4gMCkgJiYgdW5saWtlbHkoIV9fUHl4X0NoZWNrS2V5d29yZFN0cmlu Z3MoX19weXhfa3dkcywgIl9faW5pdF9fIiwgMCkpKSByZXR1cm4gLTE7Ci0rICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19fX2luaXRfXygo KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilf X3B5eF92X3NlbGYpKTsKLSsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19QeXhf UmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19weXhfcjsKLSt9Ci0rCi0rc3Rh dGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX19f aW5pdF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJh bXMgKl9fcHl4X3Zfc2VsZikgewotKyAgaW50IF9fcHl4X3I7Ci0rICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0rICBpbnQgX19weXhf bGluZW5vID0gMDsKLSsgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSsgIGlu dCBfX3B5eF9jbGluZW5vID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2lu aXRfXyIsIDApOwotKwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4Nwot KyAqIAotKyAqICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0rICogICAgICAgICBzZWxmLm93bmVk ID0gW10gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5wYXJh bXNbMF0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJRAotICAqIAotLSAqICAgICBAX2Vy cm9ycwotICAqLwotLSAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5 eF92X3NlbGYtPmNhbGxiYWNrdGhyZWFkLCBfX3B5eF9uX3Nfc3RhcnQpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NDYsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhf R09UUkVGKF9fcHl4X3RfNCk7Ci0tICBfX3B5eF90XzUgPSBOVUxMOwotLSAgaWYgKENZVEhPTl9V TlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKLS0g ICAgX19weXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF80KTsKLS0gICAgaWYgKGxp a2VseShfX3B5eF90XzUpKSB7Ci0tICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2Rf R0VUX0ZVTkNUSU9OKF9fcHl4X3RfNCk7Ci0tICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7 Ci0tICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAgICBfX1B5eF9ERUNSRUZfU0VU KF9fcHl4X3RfNCwgZnVuY3Rpb24pOwotLSAgICB9Ci0tICB9Ci0tICBfX3B5eF90XzEgPSAoX19w eXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF80LCBfX3B5eF90XzUp IDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCA3NDYsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gUHlMaXN0 X05ldygwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgODg3LCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X0dP VFJFRihfX3B5eF92X3NlbGYtPm93bmVkKTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYt Pm93bmVkKTsKLSsgIF9fcHl4X3Zfc2VsZi0+b3duZWQgPSBfX3B5eF90XzE7Ci0rICBfX3B5eF90 XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczNgotLSAq ICAgICAgICAgcmV0dXJuIHBpcGUKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo4ODgKLSsgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotKyAqICAgICAgICAgc2VsZi5vd25l ZCA9IFtdCi0rICogICAgICAgICBzZWxmLnBhcmFtc1swXS50eXBlID0gTVBWX1JFTkRFUl9QQVJB TV9JTlZBTElEICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAKLS0gKiAgICAgZGVm IF9fY2luaXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKQotLSAqICAgICAgICAg d2l0aCBub2dpbDoKLSsgKiAgICAgY2RlZiBhZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJh bV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFsc2UpOgotKyAqLwotKyAgKF9fcHl4X3Zf c2VsZi0+cGFyYW1zWzBdKS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElEOwotKwotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4NgotKyAqICAgICAgICAgb2JqZWN0 IG93bmVkCi0rICogCi0rICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5vd25lZCA9IFtdCi0rICogICAgICAgICBz ZWxmLnBhcmFtc1swXS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElECi0gICovCi0gCi0g ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLUBAIC0xNTAyNywxMDk0ICsxNTQ0NCw0NzkgQEAg c3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZfX2Np bml0X18oc3RydWN0IF9fcHl4X29ial8KLSAgIGdvdG8gX19weXhfTDA7Ci0gICBfX3B5eF9MMV9l cnJvcjo7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNCk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7Ci0tICBfX1B5eF9BZGRUcmFj ZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0Ll9fY2luaXRfXyIsIF9fcHl4X2NsaW5l bm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlbmRlclBhcmFtcy5fX2luaXRfXyIsIF9fcHl4X2NsaW5l bm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotICAgX19weXhfciA9IC0xOwotICAg X19weXhfTDA6OwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4g X19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0OQot Ky8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTAKLSsgKiAgICAgICAgIHNlbGYu cGFyYW1zWzBdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQKLSAgKiAKLS0gKiAgICAg QF9lcnJvcnMKLS0gKiAgICAgZGVmIG9ic2VydmVfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGF0YT1O b25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgIiIiV3JhcHM6 IG1wdl9vYnNlcnZlX3Byb3BlcnR5IiIiCi0tICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0r ICogICAgIGNkZWYgYWRkX3ZvaWRwKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSB0LCB2b2lk ICpwLCBiaW50IG93bmVkPUZhbHNlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgY291bnQgPSBsZW4oc2VsZi5vd25lZCkKLSsgKiAgICAgICAgIGlmIGNvdW50ID49 IE1BWF9SRU5ERVJfUEFSQU1TOgotICAqLwotIAotLS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzlv YnNlcnZlX3Byb3BlcnR5KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9h cmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLwotLXN0YXRpYyBjaGFyIF9fcHl4 X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzhvYnNlcnZlX3Byb3BlcnR5W10g PSAiV3JhcHM6IG1wdl9vYnNlcnZlX3Byb3BlcnR5IjsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zOW9ic2VydmVfcHJvcGVydHkoUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5 eF9rd2RzKSB7Ci0tICBQeU9iamVjdCAqX19weXhfdl9wcm9wID0gMDsKLS0gIFB5T2JqZWN0ICpf X3B5eF92X2RhdGEgPSAwOwotLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0tICBjb25zdCBjaGFy ICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0tICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBQ eU9iamVjdCAqX19weXhfciA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIm9ic2VydmVfcHJvcGVydHkgKHdyYXBwZXIpIiwg MCk7Ci0tICB7Ci0tICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsm X19weXhfbl9zX3Byb3AsJl9fcHl4X25fc19kYXRhLDB9OwotLSAgICBQeU9iamVjdCogdmFsdWVz WzJdID0gezAsMH07Ci0tICAgIHZhbHVlc1sxXSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKLS0g ICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7Ci0tICAgICAgUHlfc3NpemVfdCBrd19hcmdz OwotLSAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9f cHl4X2FyZ3MpOwotLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKLS0gICAgICAgIGNhc2UgIDI6 IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7Ci0tICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxl X0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwot LSAgICAgICAgY2FzZSAgMDogYnJlYWs7Ci0tICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1 X2FyZ3R1cGxlX2Vycm9yOwotLSAgICAgIH0KLS0gICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUo X19weXhfa3dkcyk7Ci0tICAgICAgc3dpdGNoIChwb3NfYXJncykgewotLSAgICAgICAgY2FzZSAg MDoKLS0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVt U3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19wcm9wKSkgIT0gMCkpIGt3X2FyZ3MtLTsKLS0gICAg ICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLS0gICAgICAgIENZVEhPTl9G QUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDE6Ci0tICAgICAgICBpZiAoa3dfYXJncyA+IDAp IHsKLS0gICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIo X19weXhfa3dkcywgX19weXhfbl9zX2RhdGEpOwotLSAgICAgICAgICBpZiAodmFsdWUpIHsgdmFs dWVzWzFdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQotLSAgICAgICAgfQotLSAgICAgIH0KLS0gICAg ICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7Ci0tICAgICAgICBpZiAodW5saWtlbHkoX19Q eXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAs IHZhbHVlcywgcG9zX2FyZ3MsICJvYnNlcnZlX3Byb3BlcnR5IikgPCAwKSkgX19QWVhfRVJSKDAs IDc0OSwgX19weXhfTDNfZXJyb3IpCi0tICAgICAgfQotLSAgICB9IGVsc2UgewotLSAgICAgIHN3 aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgewotLSAgICAgICAgY2FzZSAgMjog dmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKLS0gICAgICAgIENZ VEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVf R0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0tICAgICAgICBicmVhazsKLS0gICAgICAgIGRlZmF1 bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0tICAgICAgfQotLSAgICB9Ci0tICAg IF9fcHl4X3ZfcHJvcCA9IHZhbHVlc1swXTsKLS0gICAgX19weXhfdl9kYXRhID0gdmFsdWVzWzFd OwotLSAgfQotLSAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKLS0gIF9f cHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKLS0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJv YnNlcnZlX3Byb3BlcnR5IiwgMCwgMSwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7 IF9fUFlYX0VSUigwLCA3NDksIF9fcHl4X0wzX2Vycm9yKQotLSAgX19weXhfTDNfZXJyb3I6Owot LSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5vYnNlcnZl X3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBOVUxMOwotLSAg X19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OwotLSAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zOG9ic2VydmVfcHJvcGVydHkoKChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxm KSwgX19weXhfdl9wcm9wLCBfX3B5eF92X2RhdGEpOwotLQotLSAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCi0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5 eF9yOwotLX0KLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8zOG9ic2VydmVfcHJvcGVydHkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9w cm9wLCBQeU9iamVjdCAqX19weXhfdl9kYXRhKSB7Ci0tICB1aW50NjRfdCBfX3B5eF92X2lkX2Rh dGE7Ci0tICBQeU9iamVjdCAqX19weXhfdl91c2VyZGF0YXMgPSBOVUxMOwotLSAgY2hhciAqX19w eXhfdl9wcm9wYzsKLS0gIGludCBfX3B5eF92X2VycjsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfdm9pZHAoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqX19weXhfdl9z ZWxmLCBlbnVtIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSBfX3B5eF92X3QsIHZvaWQgKl9fcHl4X3Zf cCwgc3RydWN0IF9fcHl4X29wdF9hcmdzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQ YXJhbXNfYWRkX3ZvaWRwICpfX3B5eF9vcHRpb25hbF9hcmdzKSB7Ci0rICBpbnQgX19weXhfdl9v d25lZCA9ICgoaW50KTApOwotKyAgUHlPYmplY3QgKl9fcHl4X3ZfY291bnQgPSBOVUxMOwotICAg UHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK LS0gIFB5X2hhc2hfdCBfX3B5eF90XzE7Ci0tICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsK LS0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9 IE5VTEw7Ci0rICBQeV9zc2l6ZV90IF9fcHl4X3RfMjsKLSsgIGludCBfX3B5eF90XzM7Ci0gICBQ eU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLSAgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxM OwotICAgaW50IF9fcHl4X3RfNjsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxMOwotLSAg aW50IF9fcHl4X3RfODsKLS0gIGludCBfX3B5eF90Xzk7Ci0tICBjaGFyICpfX3B5eF90XzEwOwot ICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9 IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgib2JzZXJ2ZV9wcm9wZXJ0eSIsIDApOwotLSAgX19QeXhfSU5DUkVGKF9fcHl4X3Zf cHJvcCk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzUxCi0tICog ICAgIGRlZiBvYnNlcnZlX3Byb3BlcnR5KHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6Ci0tICogICAg ICAgICAiIiJXcmFwczogbXB2X29ic2VydmVfcHJvcGVydHkiIiIKLS0gKiAgICAgICAgIGFzc2Vy dCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgY2Rl ZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKLS0gKiAgICAgICAgIGlk X2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQotLSAqLwotLSAgI2lmbmRlZiBDWVRIT05fV0lU SE9VVF9BU1NFUlRJT05TCi0tICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKLS0g ICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewotLSAgICAgIFB5 RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOwotLSAgICAgIF9fUFlYX0VSUigwLCA3 NTEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImFkZF92 b2lkcCIsIDApOwotKyAgaWYgKF9fcHl4X29wdGlvbmFsX2FyZ3MpIHsKLSsgICAgaWYgKF9fcHl4 X29wdGlvbmFsX2FyZ3MtPl9fcHl4X24gPiAwKSB7Ci0rICAgICAgX19weXhfdl9vd25lZCA9IF9f cHl4X29wdGlvbmFsX2FyZ3MtPm93bmVkOwotICAgICB9Ci0gICB9Ci0tICAjZW5kaWYKLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTIKLS0gKiAgICAgICAgICIiIldy YXBzOiBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eSIiIgotLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAotLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0 YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgaWRfZGF0YSA9IDx1 aW50NjRfdD5oYXNoKGRhdGEpCi0tICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3Vz ZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjg5MQotKyAqIAotKyAqICAgICBjZGVmIGFkZF92b2lkcChzZWxmLCBtcHZfcmVuZGVy X3BhcmFtX3R5cGUgdCwgdm9pZCAqcCwgYmludCBvd25lZD1GYWxzZSk6Ci0rICogICAgICAgICBj b3VudCA9IGxlbihzZWxmLm93bmVkKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgICAgICBpZiBjb3VudCA+PSBNQVhfUkVOREVSX1BBUkFNUzoKLSsgKiAgICAgICAgICAgICBp ZiBvd25lZDoKLSAgKi8KLS0gIF9fcHl4X3RfMSA9IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRh KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMSA9PSAoKFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIo MCwgNzUyLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fcHl4X3ZfaWRfZGF0YSA9ICgodWludDY0X3Qp X19weXhfdF8xKTsKLSsgIF9fcHl4X3RfMSA9IF9fcHl4X3Zfc2VsZi0+b3duZWQ7Ci0rICBfX1B5 eF9JTkNSRUYoX19weXhfdF8xKTsKLSsgIF9fcHl4X3RfMiA9IFB5T2JqZWN0X0xlbmd0aChfX3B5 eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF8yID09ICgoUHlfc3NpemVfdCktMSkpKSBfX1BZ WF9FUlIoMCwgODkxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEp OyBfX3B5eF90XzEgPSAwOwotKyAgX19weXhfdF8xID0gUHlJbnRfRnJvbVNzaXplX3QoX19weXhf dF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgODkxLCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgX19weXhfdl9jb3VudCA9 IF9fcHl4X3RfMTsKLSsgIF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzUzCi0tICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0tICogICAg ICAgICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQotLSAqICAg ICAgICAgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0 KGlkX2RhdGEsIE5vbmUpCi0tICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTIKLSsgKiAgICAgY2RlZiBhZGRfdm9p ZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFs c2UpOgotKyAqICAgICAgICAgY291bnQgPSBsZW4oc2VsZi5vd25lZCkKLSsgKiAgICAgICAgIGlm IGNvdW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICAgICAgaWYgb3duZWQ6Ci0rICogICAgICAgICAgICAgICAgIGZyZWUocCkK LSAgKi8KLS0gIF9fcHl4X3RfMSA9IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRhKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfMSA9PSAoKFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIoMCwgNzUzLCBf X3B5eF9MMV9lcnJvcikKLS0gIF9fcHl4X3ZfaWRfZGF0YSA9ICgodWludDY0X3QpX19weXhfdF8x KTsKLSsgIF9fcHl4X3RfMSA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfY291bnQsIF9f cHl4X2ludF8zMiwgUHlfR0UpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDg5MiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5 eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9f cHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwgODkyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgaWYgKF9fcHl4X3RfMykgewot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1NAotLSAqICAgICAgICAg Y2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKLS0gKiAgICAgICAg IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQotLSAqICAgICAgICAgdXNlcmRhdGFzID0g c2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotLSAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6Ci0tICogICAgICAg ICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVz ZXJEYXRhKGRhdGEpCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTMK LSsgKiAgICAgICAgIGNvdW50ID0gbGVuKHNlbGYub3duZWQpCi0rICogICAgICAgICBpZiBjb3Vu dCA+PSBNQVhfUkVOREVSX1BBUkFNUzoKLSsgKiAgICAgICAgICAgICBpZiBvd25lZDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgICAgICBmcmVlKHApCi0rICog ICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJvcigiUmVuZGVyUGFyYW1zIG92ZXJmbG93IikKLSAg Ki8KLS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxm LT5yZXBseV91c2VyZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8z KSkgX19QWVhfRVJSKDAsIDc1NCwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19w eXhfdF8zKTsKLS0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoX19weXhf dl9pZF9kYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNzU0LCBf X3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAgX19weXhfdF81 ID0gTlVMTDsKLS0gIF9fcHl4X3RfNiA9IDA7Ci0tICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RT ICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzMpKSkgewotLSAgICBfX3B5eF90XzUg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzMpOwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3Rf NSkpIHsKLS0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04o X19weXhfdF8zKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKLS0gICAgICBfX1B5 eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBm dW5jdGlvbik7Ci0tICAgICAgX19weXhfdF82ID0gMTsKLS0gICAgfQotLSAgfQotLSAgI2lmIENZ VEhPTl9GQVNUX1BZQ0FMTAotLSAgaWYgKFB5RnVuY3Rpb25fQ2hlY2soX19weXhfdF8zKSkgewot LSAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzUsIF9fcHl4X3RfNCwgUHlf Tm9uZX07Ci0tICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGwoX19weXhf dF8zLCBfX3B5eF90ZW1wKzEtX19weXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc1NCwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4 X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLS0gICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMik7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwot LSAgfSBlbHNlCi0tICAjZW5kaWYKLS0gICNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCi0tICBpZiAo X19QeXhfUHlGYXN0Q0Z1bmN0aW9uX0NoZWNrKF9fcHl4X3RfMykpIHsKLS0gICAgUHlPYmplY3Qg Kl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF81LCBfX3B5eF90XzQsIFB5X05vbmV9OwotLSAgICBf X3B5eF90XzIgPSBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3Rl bXArMS1fX3B5eF90XzYsIDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzUpOyBfX3B5eF90XzUgPSAwOwotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0g ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICB9IGVsc2UKLS0g ICNlbmRpZgotLSAgewotLSAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfNik7 IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDc1NCwgX19weXhfTDFfZXJy b3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotLSAgICBpZiAoX19weXhfdF81KSB7 Ci0tICAgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzUpOyBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfNywgMCwgX19weXhfdF81KTsgX19weXhfdF81ID0gTlVMTDsKLS0gICAgfQotLSAgICBfX1B5 eF9HSVZFUkVGKF9fcHl4X3RfNCk7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAw K19fcHl4X3RfNiwgX19weXhfdF80KTsKLS0gICAgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotLSAg ICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOwotLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3Rf NywgMStfX3B5eF90XzYsIFB5X05vbmUpOwotLSAgICBfX3B5eF90XzQgPSAwOwotLSAgICBfX3B5 eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMywgX19weXhfdF83LCBOVUxMKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJv cikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzcpOyBfX3B5eF90XzcgPSAwOwotLSAgfQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7 IF9fcHl4X3RfMyA9IDA7Ci0tICBfX3B5eF92X3VzZXJkYXRhcyA9IF9fcHl4X3RfMjsKLS0gIF9f cHl4X3RfMiA9IDA7Ci0rICAgIF9fcHl4X3RfMyA9IChfX3B5eF92X293bmVkICE9IDApOwotKyAg ICBpZiAoX19weXhfdF8zKSB7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NzU1Ci0tICogICAgICAgICBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKLS0gKiAg ICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUp Ci0tICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1 c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQotLSAqICAgICAgICAgdXNlcmRhdGFzLm9i c2VydmVkID0gVHJ1ZQotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4 OTQKLSsgKiAgICAgICAgIGlmIGNvdW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOgotKyAqICAgICAg ICAgICAgIGlmIG93bmVkOgotKyAqICAgICAgICAgICAgICAgICBmcmVlKHApICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJSZW5k ZXJQYXJhbXMgb3ZlcmZsb3ciKQotKyAqIAotICAqLwotLSAgX19weXhfdF84ID0gKF9fcHl4X3Zf dXNlcmRhdGFzID09IFB5X05vbmUpOwotLSAgX19weXhfdF85ID0gKF9fcHl4X3RfOCAhPSAwKTsK LS0gIGlmIChfX3B5eF90XzkpIHsKLSsgICAgICBmcmVlKF9fcHl4X3ZfcCk7Ci0gCi0tICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTYKLS0gKiAgICAgICAgIHVzZXJkYXRh cyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCi0tICogICAgICAgICBp ZiB1c2VyZGF0YXMgaXMgTm9uZToKLS0gKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRh W2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gVHJ1ZQot LSAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKLSsgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6ODkzCi0rICogICAgICAgICBjb3VudCA9IGxlbihzZWxmLm93bmVk KQotKyAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJBTVM6Ci0rICogICAgICAg ICAgICAgaWYgb3duZWQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAg ICAgICAgICAgZnJlZShwKQotKyAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlJlbmRl clBhcmFtcyBvdmVyZmxvdyIpCi0gICovCi0tICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF8zLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSk7IGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDAsIDc1NiwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzMpOwotLSAgICBfX3B5eF90XzcgPSBOVUxMOwotLSAgICBpZiAoQ1lUSE9OX1VO UEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7Ci0t ICAgICAgX19weXhfdF83ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKLS0gICAgICBp ZiAobGlrZWx5KF9fcHl4X3RfNykpIHsKLS0gICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5 TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOwotLSAgICAgICAgX19QeXhfSU5DUkVGKF9f cHl4X3RfNyk7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKLS0gICAgICB9Ci0gICAgIH0KLS0g ICAgX19weXhfdF8yID0gKF9fcHl4X3RfNykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19w eXhfdF8zLCBfX3B5eF90XzcsIF9fcHl4X3ZfZGF0YSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25l QXJnKF9fcHl4X3RfMywgX19weXhfdl9kYXRhKTsKLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzcpOyBfX3B5eF90XzcgPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlY X0VSUigwLCA3NTYsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICAgIGlm ICh1bmxpa2VseShfX1B5eF9TZXRJdGVtSW50KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEs IF9fcHl4X3ZfaWRfZGF0YSwgX19weXhfdF8yLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJv bV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc1NiwgX19weXhfTDFfZXJy b3IpCi0tICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOwotLSAgICBfX1B5eF9ERUNSRUZfU0VU KF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF90XzIpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8yKTsgX19weXhfdF8yID0gMDsKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjc1NQotLSAqICAgICAgICAgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCi0t ICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBO b25lKQotLSAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFd ID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKLS0gKiAgICAgICAgIHVzZXJkYXRh cy5vYnNlcnZlZCA9IFRydWUKLS0gKi8KLS0gIH0KLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3NTcKLS0gKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgotLSAq ICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBf UmVwbHlVc2VyRGF0YShkYXRhKQotLSAqICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gVHJ1 ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBwcm9wID0gX3N0cmVu Yyhwcm9wKQotLSAqICAgICAgICAgY2RlZiBjaGFyKiBwcm9wYyA9IHByb3AKLS0gKi8KLS0gIGlm IChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3Nf b2JzZXJ2ZWQsIFB5X1RydWUpIDwgMCkgX19QWVhfRVJSKDAsIDc1NywgX19weXhfTDFfZXJyb3Ip Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzU4Ci0tICogICAgICAg ICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVz ZXJEYXRhKGRhdGEpCi0tICogICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlCi0tICog ICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgICAgICBjZGVmIGNoYXIqIHByb3BjID0gcHJvcAotLSAqICAgICAgICAgY2RlZiBp bnQgZXJyCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTUKLSsgKiAg ICAgICAgICAgICBpZiBvd25lZDoKLSsgKiAgICAgICAgICAgICAgICAgZnJlZShwKQotKyAqICAg ICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlJlbmRlclBhcmFtcyBvdmVyZmxvdyIpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAKLSsgKiAgICAgICAgIHNlbGYucGFyYW1zW2Nv dW50XS50eXBlID0gdAotICAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzMsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigwLCA3NTgsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0t ICBfX3B5eF90XzcgPSBOVUxMOwotLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzMpKSkgewotLSAgICBfX3B5eF90XzcgPSBQeU1l dGhvZF9HRVRfU0VMRihfX3B5eF90XzMpOwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfNykpIHsK LS0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhf dF8zKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF83KTsKLS0gICAgICBfX1B5eF9JTkNS RUYoZnVuY3Rpb24pOwotLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlv bik7Ci0rICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3Nf UHlNUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDg5NSwg X19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAgICBfX3B5 eF90XzUgPSBOVUxMOwotKyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5 KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNCkpKSB7Ci0rICAgICAgX19weXhfdF81ID0gUHlNZXRo b2RfR0VUX1NFTEYoX19weXhfdF80KTsKLSsgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfNSkpIHsK LSsgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5 eF90XzQpOwotKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7Ci0rICAgICAgICBfX1B5 eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzQs IGZ1bmN0aW9uKTsKLSsgICAgICB9Ci0gICAgIH0KLS0gIH0KLS0gIF9fcHl4X3RfMiA9IChfX3B5 eF90XzcpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMywgX19weXhfdF83LCBf X3B5eF92X3Byb3ApIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzMsIF9fcHl4 X3ZfcHJvcCk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0t ICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NTgsIF9fcHl4X0wxX2Vy cm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhf dF8zKTsgX19weXhfdF8zID0gMDsKLS0gIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl9wcm9wLCBf X3B5eF90XzIpOwotLSAgX19weXhfdF8yID0gMDsKLSsgICAgX19weXhfdF8xID0gKF9fcHl4X3Rf NSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF80LCBfX3B5eF90XzUsIF9fcHl4 X2twX3NfUmVuZGVyUGFyYW1zX292ZXJmbG93KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF80LCBfX3B5eF9rcF9zX1JlbmRlclBhcmFtc19vdmVyZmxvdyk7Ci0rICAgIF9fUHl4 X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLSsgICAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgODk1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90 XzQgPSAwOwotKyAgICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOwotKyAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgICAgX19QWVhfRVJSKDAsIDg5 NSwgX19weXhfTDFfZXJyb3IpCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NzU5Ci0tICogICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlCi0tICogICAgICAg ICBwcm9wID0gX3N0cmVuYyhwcm9wKQotLSAqICAgICAgICAgY2RlZiBjaGFyKiBwcm9wYyA9IHBy b3AgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgY2RlZiBpbnQgZXJy Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOgotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODkyCi0rICogICAgIGNkZWYgYWRkX3ZvaWRwKHNlbGYsIG1wdl9yZW5kZXJfcGFy YW1fdHlwZSB0LCB2b2lkICpwLCBiaW50IG93bmVkPUZhbHNlKToKLSsgKiAgICAgICAgIGNvdW50 ID0gbGVuKHNlbGYub3duZWQpCi0rICogICAgICAgICBpZiBjb3VudCA+PSBNQVhfUkVOREVSX1BB UkFNUzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIGlmIG93 bmVkOgotKyAqICAgICAgICAgICAgICAgICBmcmVlKHApCi0gICovCi0tICBfX3B5eF90XzEwID0g X19QeXhfUHlPYmplY3RfQXNXcml0YWJsZVN0cmluZyhfX3B5eF92X3Byb3ApOyBpZiAodW5saWtl bHkoKCFfX3B5eF90XzEwKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDc1OSwg X19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF92X3Byb3BjID0gX19weXhfdF8xMDsKLSsgIH0KLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NjEKLS0gKiAgICAgICAgIGNk ZWYgY2hhciogcHJvcGMgPSBwcm9wCi0tICogICAgICAgICBjZGVmIGludCBlcnIKLS0gKiAgICAg ICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg ICAgICBlcnIgPSBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eSgKLS0gKiAgICAgICAgICAgICAgICAgc2Vs Zi5fY3R4LAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5NwotKyAqICAg ICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlJlbmRlclBhcmFtcyBvdmVyZmxvdyIpCi0rICog Ci0rICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudF0udHlwZSA9IHQgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEgPSBwCi0r ICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudCArIDFdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFN X0lOVkFMSUQKLSAgKi8KLS0gIHsKLS0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAgICBQ eVRocmVhZFN0YXRlICpfc2F2ZTsKLS0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKLS0gICAgICBf X1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0tICAgICAgI2VuZGlmCi0tICAgICAgLyp0cnk6Ki8g ewotKyAgX19weXhfdF8yID0gX19QeXhfUHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9jb3VudCk7 IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1 cnJlZCgpKSkgX19QWVhfRVJSKDAsIDg5NywgX19weXhfTDFfZXJyb3IpCi0rICAoX19weXhfdl9z ZWxmLT5wYXJhbXNbX19weXhfdF8yXSkudHlwZSA9IF9fcHl4X3ZfdDsKLSAKLS0gICAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NjIKLS0gKiAgICAgICAgIGNkZWYgaW50 IGVycgotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBlcnIgPSBtcHZf b2JzZXJ2ZV9wcm9wZXJ0eSggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgICAgICAgICBzZWxmLl9jdHgsCi0tICogICAgICAgICAgICAgICAgIGlkX2RhdGEsCi0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODk4Ci0rICogCi0rICogICAgICAgICBz ZWxmLnBhcmFtc1tjb3VudF0udHlwZSA9IHQKLSsgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50 XS5kYXRhID0gcCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBzZWxm LnBhcmFtc1tjb3VudCArIDFdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQKLSsgKiAg ICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQotICAqLwotLSAgICAgICAgX19weXhfdl9l cnIgPSBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eShfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfaWRf ZGF0YSwgX19weXhfdl9wcm9wYywgTVBWX0ZPUk1BVF9OT0RFKTsKLS0gICAgICB9Ci0rICBfX3B5 eF90XzIgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5eF92X2NvdW50KTsgaWYgKHVubGlr ZWx5KChfX3B5eF90XzIgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBf X1BZWF9FUlIoMCwgODk4LCBfX3B5eF9MMV9lcnJvcikKLSsgIChfX3B5eF92X3NlbGYtPnBhcmFt c1tfX3B5eF90XzJdKS5kYXRhID0gX19weXhfdl9wOwotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo3NjEKLS0gKiAgICAgICAgIGNkZWYgY2hhciogcHJvcGMgPSBw cm9wCi0tICogICAgICAgICBjZGVmIGludCBlcnIKLS0gKiAgICAgICAgIHdpdGggbm9naWw6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfb2Jz ZXJ2ZV9wcm9wZXJ0eSgKLS0gKiAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5OQotKyAqICAgICAgICAgc2VsZi5wYXJhbXNb Y291bnRdLnR5cGUgPSB0Ci0rICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudF0uZGF0YSA9IHAK LSsgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50ICsgMV0udHlwZSA9IE1QVl9SRU5ERVJfUEFS QU1fSU5WQUxJRCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBzZWxm Lm93bmVkLmFwcGVuZChvd25lZCkKLSsgKiAKLSAgKi8KLS0gICAgICAvKmZpbmFsbHk6Ki8gewot LSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKLS0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFE Ci0tICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0tICAgICAgICAgIFB5X0JMT0NL X1RIUkVBRFMKLS0gICAgICAgICAgI2VuZGlmCi0tICAgICAgICAgIGdvdG8gX19weXhfTDY7Ci0t ICAgICAgICB9Ci0tICAgICAgICBfX3B5eF9MNjo7Ci0tICAgICAgfQotLSAgfQotKyAgX19weXhf dF8xID0gX19QeXhfUHlJbnRfQWRkT2JqQyhfX3B5eF92X2NvdW50LCBfX3B5eF9pbnRfMSwgMSwg MCwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDg5OSwgX19weXhf TDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIF9fcHl4X3RfMiA9IF9f UHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8y ID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDg5 OSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKLSsgIChfX3B5eF92X3NlbGYtPnBhcmFtc1tfX3B5eF90XzJdKS50eXBlID0gTVBWX1JF TkRFUl9QQVJBTV9JTlZBTElEOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjc2OAotLSAqICAgICAgICAgICAgICAgICBNUFZfRk9STUFUX05PREUsCi0tICogICAgICAg ICAgICAgKQotLSAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTAwCi0rICogICAgICAg ICBzZWxmLnBhcmFtc1tjb3VudF0uZGF0YSA9IHAKLSsgKiAgICAgICAgIHNlbGYucGFyYW1zW2Nv dW50ICsgMV0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJRAotKyAqICAgICAgICAgc2Vs Zi5vd25lZC5hcHBlbmQob3duZWQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAK LS0gKiAgICAgQF9lcnJvcnMKLSsgKiAgICAgY2RlZiBhZGRfaW50KHNlbGYsIG1wdl9yZW5kZXJf cGFyYW1fdHlwZSB0LCBpbnQgdmFsKToKLSAgKi8KLS0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7 Ci0tICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc2OCwgX19weXhfTDFfZXJyb3IpCi0t ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF90XzI7Ci0tICBf X3B5eF90XzIgPSAwOwotLSAgZ290byBfX3B5eF9MMDsKLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5 Qm9vbF9Gcm9tTG9uZyhfX3B5eF92X293bmVkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgOTAwLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOwotKyAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfQXBwZW5kKF9fcHl4X3Zfc2VsZi0+ b3duZWQsIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPT0gKChpbnQpLTEpKSkg X19QWVhfRVJSKDAsIDkwMCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3NDkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTAKLSsgKiAg ICAgICAgIHNlbGYucGFyYW1zWzBdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQKLSAg KiAKLS0gKiAgICAgQF9lcnJvcnMKLS0gKiAgICAgZGVmIG9ic2VydmVfcHJvcGVydHkoc2VsZiwg cHJvcCwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgIiIiV3JhcHM6IG1wdl9vYnNlcnZlX3Byb3BlcnR5IiIiCi0tICogICAgICAgICBhc3NlcnQg c2VsZi5fY3R4Ci0rICogICAgIGNkZWYgYWRkX3ZvaWRwKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1f dHlwZSB0LCB2b2lkICpwLCBiaW50IG93bmVkPUZhbHNlKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICAgICAgY291bnQgPSBsZW4oc2VsZi5vd25lZCkKLSsgKiAgICAgICAg IGlmIGNvdW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOgotICAqLwotIAotICAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCi0rICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUp OwotKyAgZ290byBfX3B5eF9MMDsKLSAgIF9fcHl4X0wxX2Vycm9yOjsKLS0gIF9fUHl4X1hERUNS RUYoX19weXhfdF8yKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKLSsgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKLSAgIF9fUHl4 X1hERUNSRUYoX19weXhfdF81KTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsKLS0gIF9f UHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQub2JzZXJ2ZV9wcm9w ZXJ0eSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotLSAg X19weXhfciA9IE5VTEw7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5fUmVuZGVyUGFyYW1zLmFkZF92b2lkcCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOwotKyAgX19weXhfciA9IDA7Ci0gICBfX3B5eF9MMDo7Ci0tICBfX1B5 eF9YREVDUkVGKF9fcHl4X3ZfdXNlcmRhdGFzKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9w cm9wKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdl9jb3VudCk7Ci0gICBfX1B5eF9YR0lWRVJF RihfX3B5eF9yKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJu IF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzEK LSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTAyCi0rICogICAgICAgICBzZWxm Lm93bmVkLmFwcGVuZChvd25lZCkKLSAgKiAKLS0gKiAgICAgQF9lcnJvcnMKLS0gKiAgICAgZGVm IHVub2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBkYXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl91bm9ic2VydmVfcHJvcGVydHkiIiIKLS0g KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSsgKiAgICAgY2RlZiBhZGRfaW50KHNlbGYsIG1w dl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBpbnQgdmFsKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICAgICAgY2RlZiBpbnQgKnAgPSA8aW50ICo+bWFsbG9jKHNpemVvZihpbnQp KQotKyAqICAgICAgICAgcFswXSA9IHZhbAotICAqLwotIAotLS8qIFB5dGhvbiB3cmFwcGVyICov Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNDF1bm9ic2VydmVfcHJvcGVydHkoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfZGF0YSk7IC8qcHJvdG8qLwotLXN0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDB1bm9ic2VydmVfcHJvcGVydHlbXSA9ICJXcmFwczog bXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSI7Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDF1bm9ic2VydmVfcHJvcGVydHkoUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSkgewotLSAgUHlPYmplY3QgKl9f cHl4X3IgPSAwOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJ1bm9ic2VydmVfcHJvcGVydHkgKHdyYXBwZXIpIiwgMCk7Ci0tICBf X3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQwdW5vYnNl cnZlX3Byb3BlcnR5KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X2RhdGEpKTsKLS0KLS0g IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0tCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDB1bm9ic2VydmVfcHJvcGVydHkoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfdl9kYXRhKSB7Ci0tICB1aW50NjRfdCBfX3B5eF92X2lkX2RhdGE7 Ci0tICBQeU9iamVjdCAqX19weXhfdl91c2VyZGF0YXMgPSBOVUxMOwotLSAgaW50IF9fcHl4X3Zf ZXJyOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNf UmVuZGVyUGFyYW1zX2FkZF9pbnQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX1JlbmRlclBhcmFtcyAqX19weXhfdl9zZWxmLCBlbnVtIG1wdl9yZW5kZXJfcGFyYW1fdHlw ZSBfX3B5eF92X3QsIGludCBfX3B5eF92X3ZhbCkgewotKyAgaW50ICpfX3B5eF92X3A7Ci0gICBQ eU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwot LSAgUHlfaGFzaF90IF9fcHl4X3RfMTsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwot LSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF80ID0g TlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwotLSAgaW50IF9fcHl4X3RfNjsK LS0gIFB5T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxMOwotLSAgaW50IF9fcHl4X3RfODsKLS0gIGlu dCBfX3B5eF90Xzk7Ci0rICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSAgIGludCBfX3B5 eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotICAg aW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVu b2JzZXJ2ZV9wcm9wZXJ0eSIsIDApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImFk ZF9pbnQiLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzMK LS0gKiAgICAgZGVmIHVub2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBkYXRhKToKLS0gKiAgICAgICAg ICIiIldyYXBzOiBtcHZfdW5vYnNlcnZlX3Byb3BlcnR5IiIiCi0tICogICAgICAgICBhc3NlcnQg c2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGNkZWYg dWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCi0tICogICAgICAgICB1c2Vy ZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwMwotKyAqIAotKyAqICAgICBjZGVmIGFkZF9p bnQoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGludCB2YWwpOgotKyAqICAgICAgICAg Y2RlZiBpbnQgKnAgPSA8aW50ICo+bWFsbG9jKHNpemVvZihpbnQpKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBwWzBdID0gdmFsCi0rICogICAgICAgICBzZWxmLmFk ZF92b2lkcCh0LCBwKQotICAqLwotLSAgI2lmbmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05T Ci0tICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKLS0gICAgaWYgKHVubGlrZWx5 KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewotLSAgICAgIFB5RXJyX1NldE5vbmUoUHlF eGNfQXNzZXJ0aW9uRXJyb3IpOwotLSAgICAgIF9fUFlYX0VSUigwLCA3NzMsIF9fcHl4X0wxX2Vy cm9yKQotLSAgICB9Ci0tICB9Ci0tICAjZW5kaWYKLSsgIF9fcHl4X3ZfcCA9ICgoaW50ICopbWFs bG9jKChzaXplb2YoaW50KSkpKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3NzQKLS0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfdW5vYnNlcnZlX3Byb3BlcnR5IiIi Ci0tICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0tICogICAgICAgICBjZGVmIHVpbnQ2NF90 IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9k YXRhLCBOb25lKQotLSAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIG5vdCBOb25lOgotLSAqLwot LSAgX19weXhfdF8xID0gUHlPYmplY3RfSGFzaChfX3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHko X19weXhfdF8xID09ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlYX0VSUigwLCA3NzQsIF9fcHl4X0wx X2Vycm9yKQotLSAgX19weXhfdl9pZF9kYXRhID0gKCh1aW50NjRfdClfX3B5eF90XzEpOwotLQot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3NQotLSAqICAgICAgICAgYXNz ZXJ0IHNlbGYuX2N0eAotLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2 NF90Pmhhc2goZGF0YSkKLS0gKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRh dGEuZ2V0KGlkX2RhdGEsIE5vbmUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgIGlmIHVzZXJkYXRhcyBpcyBub3QgTm9uZToKLS0gKiAgICAgICAgICAgICB1c2VyZGF0 YXMub2JzZXJ2ZWQgPSBGYWxzZQotLSAqLwotLSAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3Rf R2V0QXR0clN0cihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF9uX3NfZ2V0KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNzc1LCBfX3B5eF9MMV9lcnJv cikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgX19weXhfdF80ID0gX19QeXhfUHlJ bnRfRnJvbV91aW50NjRfdChfX3B5eF92X2lkX2RhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfNCk7Ci0tICBfX3B5eF90XzUgPSBOVUxMOwotLSAgX19weXhfdF82ID0gMDsKLS0gIGlm IChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3Rf MykpKSB7Ci0tICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7Ci0t ICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewotLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9 IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOwotLSAgICAgIF9fUHl4X0lOQ1JFRihf X3B5eF90XzUpOwotLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgX19QeXhf REVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKLS0gICAgICBfX3B5eF90XzYgPSAxOwot LSAgICB9Ci0tICB9Ci0tICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCi0tICBpZiAoUHlGdW5jdGlv bl9DaGVjayhfX3B5eF90XzMpKSB7Ci0tICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19f cHl4X3RfNSwgX19weXhfdF80LCBQeV9Ob25lfTsKLS0gICAgX19weXhfdF8yID0gX19QeXhfUHlG dW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1fX3B5eF90XzYsIDIrX19w eXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzc1LCBfX3B5 eF9MMV9lcnJvcikKLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAw OwotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICB9IGVsc2UKLS0gICNlbmRpZgotLSAgI2lmIENZVEhP Tl9GQVNUX1BZQ0NBTEwKLS0gIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2soX19weXhf dF8zKSkgewotLSAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzUsIF9fcHl4 X3RfNCwgUHlfTm9uZX07Ci0tICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RD YWxsKF9fcHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQot LSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0tICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhf dF80ID0gMDsKLS0gIH0gZWxzZQotLSAgI2VuZGlmCi0tICB7Ci0tICAgIF9fcHl4X3RfNyA9IFB5 VHVwbGVfTmV3KDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9F UlIoMCwgNzc1LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7 Ci0tICAgIGlmIChfX3B5eF90XzUpIHsKLS0gICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNSk7 IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCBfX3B5eF90XzUpOyBfX3B5eF90XzUgPSBO VUxMOwotLSAgICB9Ci0tICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF80KTsKLS0gICAgUHlUdXBs ZV9TRVRfSVRFTShfX3B5eF90XzcsIDArX19weXhfdF82LCBfX3B5eF90XzQpOwotLSAgICBfX1B5 eF9JTkNSRUYoUHlfTm9uZSk7Ci0tICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7Ci0tICAgIFB5 VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfNiwgUHlfTm9uZSk7Ci0tICAgIF9f cHl4X3RfNCA9IDA7Ci0tICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhf dF8zLCBfX3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VS UigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK LS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0tICB9Ci0tICBf X1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gIF9fcHl4X3ZfdXNlcmRh dGFzID0gX19weXhfdF8yOwotLSAgX19weXhfdF8yID0gMDsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo3NzYKLS0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0 YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCi0tICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJl cGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQotLSAqICAgICAgICAgaWYgdXNlcmRhdGFz IGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAg ICAgdXNlcmRhdGFzLm9ic2VydmVkID0gRmFsc2UKLS0gKiAgICAgICAgICAgICBpZiB1c2VyZGF0 YXMuY291bnRlciA8PSAwOgotLSAqLwotLSAgX19weXhfdF84ID0gKF9fcHl4X3ZfdXNlcmRhdGFz ICE9IFB5X05vbmUpOwotLSAgX19weXhfdF85ID0gKF9fcHl4X3RfOCAhPSAwKTsKLS0gIGlmIChf X3B5eF90XzkpIHsKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3 NwotLSAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0 YSwgTm9uZSkKLS0gKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBub3QgTm9uZToKLS0gKiAgICAg ICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBGYWxzZSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzLmNvdW50ZXIgPD0gMDoKLS0gKiAg ICAgICAgICAgICAgICAgZGVsIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0KLS0gKi8KLS0g ICAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4 X25fc19vYnNlcnZlZCwgUHlfRmFsc2UpIDwgMCkgX19QWVhfRVJSKDAsIDc3NywgX19weXhfTDFf ZXJyb3IpCi0tCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzgKLS0g KiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBub3QgTm9uZToKLS0gKiAgICAgICAgICAgICB1c2Vy ZGF0YXMub2JzZXJ2ZWQgPSBGYWxzZQotLSAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcy5jb3Vu dGVyIDw9IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAg ICAgZGVsIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0KLS0gKiAgICAgICAgIGNkZWYgaW50 IGVycgotLSAqLwotLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3NfY291bnRlcik7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDc3OCwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzIpOwotLSAgICBfX3B5eF90XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5 eF90XzIsIF9fcHl4X2ludF8wLCBQeV9MRSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNzc4LCBfX3B5eF9MMV9lcnJvcikK LS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICAgIF9fcHl4 X3RfOSA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoX19w eXhfdF85IDwgMCkpIF9fUFlYX0VSUigwLCA3NzgsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gICAgaWYgKF9fcHl4X3RfOSkg ewotLQotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzkKLS0gKiAg ICAgICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBGYWxzZQotLSAqICAgICAgICAgICAgIGlm IHVzZXJkYXRhcy5jb3VudGVyIDw9IDA6Ci0tICogICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJl cGx5X3VzZXJkYXRhW2lkX2RhdGFdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgIGNkZWYgaW50IGVycgotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKi8KLS0gICAg ICBpZiAodW5saWtlbHkoX19QeXhfRGVsSXRlbUludChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJk YXRhLCBfX3B5eF92X2lkX2RhdGEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2 NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzc5LCBfX3B5eF9MMV9lcnJvcikKLS0K LS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc4Ci0tICogICAgICAg ICBpZiB1c2VyZGF0YXMgaXMgbm90IE5vbmU6Ci0tICogICAgICAgICAgICAgdXNlcmRhdGFzLm9i c2VydmVkID0gRmFsc2UKLS0gKiAgICAgICAgICAgICBpZiB1c2VyZGF0YXMuY291bnRlciA8PSAw OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgIGRlbCBz ZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdCi0tICogICAgICAgICBjZGVmIGludCBlcnIKLS0g Ki8KLS0gICAgfQotLQotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc2 Ci0tICogICAgICAgICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRh KQotLSAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0 YSwgTm9uZSkKLS0gKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBub3QgTm9uZTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9 IEZhbHNlCi0tICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzLmNvdW50ZXIgPD0gMDoKLS0gKi8K LS0gIH0KLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3ODEKLS0gKiAg ICAgICAgICAgICAgICAgZGVsIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0KLS0gKiAgICAg ICAgIGNkZWYgaW50IGVycgotLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl91bm9ic2VydmVfcHJvcGVy dHkoCi0tICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKLS0gKi8KLS0gIHsKLS0gICAgICAj aWZkZWYgV0lUSF9USFJFQUQKLS0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKLS0gICAgICBQ eV9VTkJMT0NLX1RIUkVBRFMKLS0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0tICAg ICAgI2VuZGlmCi0tICAgICAgLyp0cnk6Ki8gewotLQotLSAgICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjc4MgotLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0tICogICAg ICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl91bm9ic2VydmVfcHJv cGVydHkoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAgICAg c2VsZi5fY3R4LAotLSAqICAgICAgICAgICAgICAgICBpZF9kYXRhLAotLSAqLwotLSAgICAgICAg X19weXhfdl9lcnIgPSBtcHZfdW5vYnNlcnZlX3Byb3BlcnR5KF9fcHl4X3Zfc2VsZi0+X2N0eCwg X19weXhfdl9pZF9kYXRhKTsKLS0gICAgICB9Ci0tCi0tICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc4MQotLSAqICAgICAgICAgICAgICAgICBkZWwgc2VsZi5yZXBseV91 c2VyZGF0YVtpZF9kYXRhXQotLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0tICogICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAg ZXJyID0gbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSgKLS0gKiAgICAgICAgICAgICAgICAgc2VsZi5f Y3R4LAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwNAotKyAqICAgICBj ZGVmIGFkZF9pbnQoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGludCB2YWwpOgotKyAq ICAgICAgICAgY2RlZiBpbnQgKnAgPSA8aW50ICo+bWFsbG9jKHNpemVvZihpbnQpKQotKyAqICAg ICAgICAgcFswXSA9IHZhbCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAg ICBzZWxmLmFkZF92b2lkcCh0LCBwKQotKyAqIAotICAqLwotLSAgICAgIC8qZmluYWxseToqLyB7 Ci0tICAgICAgICAvKm5vcm1hbCBleGl0OiovewotLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJF QUQKLS0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKLS0gICAgICAgICAgUHlfQkxP Q0tfVEhSRUFEUwotLSAgICAgICAgICAjZW5kaWYKLS0gICAgICAgICAgZ290byBfX3B5eF9MNzsK LS0gICAgICAgIH0KLS0gICAgICAgIF9fcHl4X0w3OjsKLS0gICAgICB9Ci0tICB9Ci0rICAoX19w eXhfdl9wWzBdKSA9IF9fcHl4X3ZfdmFsOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjc4NgotLSAqICAgICAgICAgICAgICAgICBpZF9kYXRhLAotLSAqICAgICAgICAg ICAgICkKLS0gKiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwNQotKyAqICAgICAgICAg Y2RlZiBpbnQgKnAgPSA8aW50ICo+bWFsbG9jKHNpemVvZihpbnQpKQotKyAqICAgICAgICAgcFsw XSA9IHZhbAotKyAqICAgICAgICAgc2VsZi5hZGRfdm9pZHAodCwgcCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotICAqIAotLSAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6Ci0rICogICAg IGNkZWYgYWRkX3N0cmluZyhzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgY2hhciAqcyk6 Ci0gICovCi0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgX19weXhfdF8zID0gX19QeXhf UHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9f UFlYX0VSUigwLCA3ODYsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Myk7Ci0tICBfX3B5eF9yID0gX19weXhfdF8zOwotLSAgX19weXhfdF8zID0gMDsKLS0gIGdvdG8g X19weXhfTDA7Ci0rICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFi KS0+YWRkX3ZvaWRwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl90LCBfX3B5eF92X3AsIE5VTEwpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MDUsIF9fcHl4X0wxX2Vycm9y KQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3NzEKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDIKLSsgKiAgICAg ICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQotICAqIAotLSAqICAgICBAX2Vycm9ycwotLSAq ICAgICBkZWYgdW5vYnNlcnZlX3Byb3BlcnR5KHNlbGYsIGRhdGEpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAiIiJXcmFwczogbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0 eSIiIgotLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotKyAqICAgICBjZGVmIGFkZF9pbnQo c2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGludCB2YWwpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBjZGVmIGludCAqcCA9IDxpbnQgKj5tYWxsb2Moc2l6 ZW9mKGludCkpCi0rICogICAgICAgICBwWzBdID0gdmFsCi0gICovCi0gCi0gICAvKiBmdW5jdGlv biBleGl0IGNvZGUgKi8KLSsgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9u ZSk7Ci0rICBnb3RvIF9fcHl4X0wwOwotICAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERF Q1JFRihfX3B5eF90XzIpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOwotLSAgX19QeXhf WERFQ1JFRihfX3B5eF90XzQpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOwotLSAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzcpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIu bGlicy5tcHYuQ29udGV4dC51bm9ic2VydmVfcHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fcHl4X3IgPSBOVUxMOwotKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzEpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGli cy5tcHYuX1JlbmRlclBhcmFtcy5hZGRfaW50IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5v LCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX3B5eF9yID0gMDsKLSAgIF9fcHl4X0wwOjsKLS0gIF9f UHl4X1hERUNSRUYoX19weXhfdl91c2VyZGF0YXMpOwotICAgX19QeXhfWEdJVkVSRUYoX19weXhf cik7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9y OwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg4Ci0tICogICAg ICAgICByZXR1cm4gZXJyCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwNwot KyAqICAgICAgICAgc2VsZi5hZGRfdm9pZHAodCwgcCkKLSAgKiAKLS0gKiAgICAgZGVmIHNodXRk b3duKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBpZiBz ZWxmLl9jdHggPT0gTlVMTDoKLS0gKiAgICAgICAgICAgICByZXR1cm4KLSsgKiAgICAgY2RlZiBh ZGRfc3RyaW5nKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBjaGFyICpzKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgY2RlZiBjaGFyICpwID0gPGNoYXIg Kj5tYWxsb2Moc3RybGVuKHMpICsgMSkKLSsgKiAgICAgICAgIHN0cmNweShwLCBzKQotICAqLwot IAotLS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDNzaHV0ZG93bihQeU9iamVjdCAqX19weXhfdl9z ZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KLS1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80M3NodXRk b3duKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNl ZCkgewotLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJh dGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzaHV0ZG93biAod3JhcHBlciki LCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNDJzaHV0ZG93bigoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKilfX3B5eF92X3NlbGYpKTsKLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwot LSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19 Ci0tCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfNDJzaHV0ZG93bihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICpfX3B5eF92X3NlbGYpIHsKLS0gIHVpbnQ2NF90IF9fcHl4X3ZfY3R4aWQ7Ci0rc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJh bXNfYWRkX3N0cmluZyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVu ZGVyUGFyYW1zICpfX3B5eF92X3NlbGYsIGVudW0gbXB2X3JlbmRlcl9wYXJhbV90eXBlIF9fcHl4 X3ZfdCwgY2hhciAqX19weXhfdl9zKSB7Ci0rICBjaGFyICpfX3B5eF92X3A7Ci0gICBQeU9iamVj dCAqX19weXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgaW50 IF9fcHl4X3RfMTsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotLSAgdWludDY0X3Qg X19weXhfdF8zOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7Ci0tICBQeU9iamVjdCAq X19weXhfdF81ID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotICAgaW50 IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7 Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgic2h1dGRvd24iLCAwKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJhZGRfc3Ry aW5nIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg5Ci0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA4Ci0gICogCi0tICogICAgIGRl ZiBzaHV0ZG93bihzZWxmKToKLS0gKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcmV0dXJuCi0tICogICAg ICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCi0tICovCi0tICBf X3B5eF90XzEgPSAoKF9fcHl4X3Zfc2VsZi0+X2N0eCA9PSBOVUxMKSAhPSAwKTsKLS0gIGlmIChf X3B5eF90XzEpIHsKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5 MAotLSAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6Ci0tICogICAgICAgICBpZiBzZWxmLl9jdHgg PT0gTlVMTDoKLS0gKiAgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxm KQotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKi8KLS0gICAgX19QeXhfWERFQ1JFRihfX3B5 eF9yKTsKLS0gICAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLS0g ICAgZ290byBfX3B5eF9MMDsKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjc4OQotLSAqIAotLSAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6Ci0tICogICAgICAgICBp ZiBzZWxmLl9jdHggPT0gTlVMTDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgICAgIHJldHVybgotLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50 NjRfdD5pZChzZWxmKQotLSAqLwotLSAgfQotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjc5MQotLSAqICAgICAgICAgaWYgc2VsZi5fY3R4ID09IE5VTEw6Ci0tICogICAg ICAgICAgICAgcmV0dXJuCi0tICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2 NF90PmlkKHNlbGYpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHdp dGggbm9naWw6Ci0tICogICAgICAgICAgICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KHNlbGYuX2N0 eCkKLS0gKi8KLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhf YnVpbHRpbl9pZCwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA3OTEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfMik7Ci0tICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChf X3B5eF90XzIpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoKHVpbnQ2NF90KS0xKSkgJiYg UHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA3OTEsIF9fcHl4X0wxX2Vycm9yKQotLSAg X19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICBfX3B5eF92X2N0eGlk ID0gKCh1aW50NjRfdClfX3B5eF90XzMpOwotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjc5MgotLSAqICAgICAgICAgICAgIHJldHVybgotLSAqICAgICAgICAgY2RlZiB1 aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKQotLSAqICAgICAgICAgd2l0aCBub2dp bDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIG1wdl90ZXJt aW5hdGVfZGVzdHJveShzZWxmLl9jdHgpCi0tICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFk LnNodXRkb3duKCkKLS0gKi8KLS0gIHsKLS0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAg ICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKLS0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKLS0gICAg ICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0tICAgICAgI2VuZGlmCi0tICAgICAgLyp0cnk6 Ki8gewotLQotLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5Mwot LSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKQotLSAq ICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBtcHZfdGVybWluYXRlX2Rlc3Ry b3koc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBz ZWxmLmNhbGxiYWNrdGhyZWFkLnNodXRkb3duKCkKLS0gKiAgICAgICAgIGRlbCBfY2FsbGJhY2tz W2N0eGlkXQotLSAqLwotLSAgICAgICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KF9fcHl4X3Zfc2Vs Zi0+X2N0eCk7Ci0tICAgICAgfQotLQotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo3OTIKLS0gKiAgICAgICAgICAgICByZXR1cm4KLS0gKiAgICAgICAgIGNkZWYgdWlu dDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2VsZikKLS0gKiAgICAgICAgIHdpdGggbm9naWw6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBtcHZfdGVybWlu YXRlX2Rlc3Ryb3koc2VsZi5fY3R4KQotLSAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5z aHV0ZG93bigpCi0tICovCi0tICAgICAgLypmaW5hbGx5OiovIHsKLS0gICAgICAgIC8qbm9ybWFs IGV4aXQ6Ki97Ci0tICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgICAgICBfX1B5 eF9GYXN0R0lMX0ZvcmdldCgpOwotLSAgICAgICAgICBQeV9CTE9DS19USFJFQURTCi0tICAgICAg ICAgICNlbmRpZgotLSAgICAgICAgICBnb3RvIF9fcHl4X0w2OwotLSAgICAgICAgfQotLSAgICAg ICAgX19weXhfTDY6OwotLSAgICAgIH0KLS0gIH0KLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3OTQKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0tICogICAgICAgICAg ICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KHNlbGYuX2N0eCkKLS0gKiAgICAgICAgIHNlbGYuY2Fs bGJhY2t0aHJlYWQuc2h1dGRvd24oKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgICAgICBkZWwgX2NhbGxiYWNrc1tjdHhpZF0KLS0gKiAgICAgICAgIGRlbCBfcmVwbHlfdXNl cmRhdGFzW2N0eGlkXQotLSAqLwotLSAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihfX3B5eF92X3NlbGYtPmNhbGxiYWNrdGhyZWFkLCBfX3B5eF9uX3Nfc2h1dGRvd24pOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3OTQsIF9fcHl4X0wxX2Vycm9y KQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tICBfX3B5eF90XzUgPSBOVUxMOwotLSAg aWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhf dF80KSkpIHsKLS0gICAgX19weXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF80KTsK LS0gICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7Ci0tICAgICAgUHlPYmplY3QqIGZ1bmN0aW9u ID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNCk7Ci0tICAgICAgX19QeXhfSU5DUkVG KF9fcHl4X3RfNSk7Ci0tICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3RfNCwgZnVuY3Rpb24pOwotLSAgICB9Ci0tICB9Ci0tICBfX3B5 eF90XzIgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF80 LCBfX3B5eF90XzUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfNCk7Ci0tICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0tICBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3OTQsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80 ID0gMDsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLQotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5NQotLSAqICAgICAgICAgICAgIG1w dl90ZXJtaW5hdGVfZGVzdHJveShzZWxmLl9jdHgpCi0tICogICAgICAgICBzZWxmLmNhbGxiYWNr dGhyZWFkLnNodXRkb3duKCkKLS0gKiAgICAgICAgIGRlbCBfY2FsbGJhY2tzW2N0eGlkXSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRh c1tjdHhpZF0KLS0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lCi0tICovCi0tICBpZiAo dW5saWtlbHkoX19QeXhfRGVsSXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f Y2FsbGJhY2tzLCBfX3B5eF92X2N0eGlkLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91 aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc5NSwgX19weXhfTDFfZXJyb3Ip Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk2Ci0tICogICAgICAg ICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNodXRkb3duKCkKLS0gKiAgICAgICAgIGRlbCBfY2FsbGJh Y2tzW2N0eGlkXQotLSAqICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25l Ci0tICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gTm9uZQotLSAqLwotLSAgaWYgKHVu bGlrZWx5KF9fUHl4X0RlbEl0ZW1JbnQoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3Jl cGx5X3VzZXJkYXRhcywgX19weXhfdl9jdHhpZCwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zy b21fdWludDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA3OTYsIF9fcHl4X0wxX2Vy cm9yKQotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5NwotLSAqICAg ICAgICAgZGVsIF9jYWxsYmFja3NbY3R4aWRdCi0tICogICAgICAgICBkZWwgX3JlcGx5X3VzZXJk YXRhc1tjdHhpZF0KLS0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBOb25l Ci0tICogICAgICAgICBzZWxmLl9jdHggPSBOVUxMCi0rICogICAgIGNkZWYgYWRkX3N0cmluZyhz ZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgY2hhciAqcyk6Ci0rICogICAgICAgICBjZGVm IGNoYXIgKnAgPSA8Y2hhciAqPm1hbGxvYyhzdHJsZW4ocykgKyAxKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBzdHJjcHkocCwgcykKLSsgKiAgICAgICAgIHNlbGYu YWRkX3ZvaWRwKHQsIHApCi0gICovCi0tICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0tICBfX1B5 eF9HSVZFUkVGKFB5X05vbmUpOwotLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+Y2FsbGJh Y2spOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2spOwotLSAgX19weXhf dl9zZWxmLT5jYWxsYmFjayA9IFB5X05vbmU7Ci0rICBfX3B5eF92X3AgPSAoKGNoYXIgKiltYWxs b2MoKHN0cmxlbihfX3B5eF92X3MpICsgMSkpKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3OTgKLS0gKiAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlk XQotLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKLS0gKiAgICAgICAgIHNlbGYucmVw bHlfdXNlcmRhdGEgPSBOb25lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAg ICAgIHNlbGYuX2N0eCA9IE5VTEwKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5MDkKLSsgKiAgICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlw ZSB0LCBjaGFyICpzKToKLSsgKiAgICAgICAgIGNkZWYgY2hhciAqcCA9IDxjaGFyICo+bWFsbG9j KHN0cmxlbihzKSArIDEpCi0rICogICAgICAgICBzdHJjcHkocCwgcykgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5hZGRfdm9pZHAodCwgcCkKLSAgKiAKLSAg Ki8KLS0gIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLS0gIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7 Ci0tICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSk7Ci0tICBfX1B5 eF9ERUNSRUYoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSk7Ci0tICBfX3B5eF92X3NlbGYt PnJlcGx5X3VzZXJkYXRhID0gUHlfTm9uZTsKLSsgICh2b2lkKShzdHJjcHkoX19weXhfdl9wLCBf X3B5eF92X3MpKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTkK LS0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lCi0tICogICAgICAgICBzZWxmLnJlcGx5 X3VzZXJkYXRhID0gTm9uZQotLSAqICAgICAgICAgc2VsZi5fY3R4ID0gTlVMTCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTEwCi0rICogICAgICAgICBjZGVmIGNoYXIgKnAgPSA8Y2hhciAqPm1hbGxvYyhzdHJsZW4ocykg KyAxKQotKyAqICAgICAgICAgc3RyY3B5KHAsIHMpCi0rICogICAgICAgICBzZWxmLmFkZF92b2lk cCh0LCBwKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0tICogICAgIGRlZiBv cGVuZ2xfY2JfYXBpKHNlbGYpOgotKyAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6Ci0gICov Ci0tICBfX3B5eF92X3NlbGYtPl9jdHggPSBOVUxMOwotKyAgX19weXhfdF8xID0gKChzdHJ1Y3Qg X19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9f cHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3NlbGYsIF9fcHl4X3Zf dCwgX19weXhfdl9wLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgOTEwLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAg X19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg4Ci0tICogICAgICAgICByZXR1cm4gZXJyCi0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA3Ci0rICogICAgICAgICBzZWxmLmFk ZF92b2lkcCh0LCBwKQotICAqIAotLSAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgot LSAqICAgICAgICAgICAgIHJldHVybgotKyAqICAgICBjZGVmIGFkZF9zdHJpbmcoc2VsZiwgbXB2 X3JlbmRlcl9wYXJhbV90eXBlIHQsIGNoYXIgKnMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogICAgICAgICBjZGVmIGNoYXIgKnAgPSA8Y2hhciAqPm1hbGxvYyhzdHJsZW4ocykg KyAxKQotKyAqICAgICAgICAgc3RyY3B5KHAsIHMpCi0gICovCi0gCi0gICAvKiBmdW5jdGlvbiBl eGl0IGNvZGUgKi8KLSAgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7 Ci0gICBnb3RvIF9fcHl4X0wwOwotICAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JF RihfX3B5eF90XzIpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotLSAgX19QeXhfWERF Q1JFRihfX3B5eF90XzUpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5t cHYuQ29udGV4dC5zaHV0ZG93biIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhf ZmlsZW5hbWUpOwotLSAgX19weXhfciA9IE5VTEw7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf MSk7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVuZGVyUGFy YW1zLmFkZF9zdHJpbmciLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKLSsgIF9fcHl4X3IgPSAwOwotICAgX19weXhfTDA6OwotICAgX19QeXhfWEdJVkVSRUYo X19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBf X3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODAxCi0t ICogICAgICAgICBzZWxmLl9jdHggPSBOVUxMCi0tICogCi0tICogICAgIGRlZiBvcGVuZ2xfY2Jf YXBpKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjZGVm IHZvaWQgKmNiCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxMgotKyAqICAg ICAgICAgc2VsZi5hZGRfdm9pZHAodCwgcCkKLSAgKiAKLSsgKiAgICAgZGVmIF9fZGVhbGxvY19f KHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBmb3IgaSwg aiBpbiBlbnVtZXJhdGUoc2VsZi5vd25lZCk6Ci0rICogICAgICAgICAgICAgaWYgajoKLSAgKi8K LSAKLSAvKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ1b3BlbmdsX2NiX2FwaShQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KLS1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80 NW9wZW5nbF9jYl9hcGkoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9i amVjdCAqdW51c2VkKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0rc3RhdGljIHZvaWQg X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc18zX19kZWFsbG9j X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotK3N0YXRpYyB2b2lkIF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfM19fZGVhbGxvY19fKFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0t ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgib3BlbmdsX2NiX2FwaSAod3JhcHBlcikiLCAw KTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf NDRvcGVuZ2xfY2JfYXBpKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo Il9fZGVhbGxvY19fICh3cmFwcGVyKSIsIDApOwotKyAgX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzX1JlbmRlclBhcmFtc18yX19kZWFsbG9jX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmKSk7Ci0gCi0g ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ0b3BlbmdsX2NiX2FwaShzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsK LS0gIHZvaWQgKl9fcHl4X3ZfX2N0eDsKLS0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X09wZW5HTENvbnRleHQgKl9fcHl4X3ZfY3R4ID0gTlVMTDsKLS0gIFB5T2JqZWN0 ICpfX3B5eF9yID0gTlVMTDsKLStzdGF0aWMgdm9pZCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNfUmVuZGVyUGFyYW1zXzJfX2RlYWxsb2NfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpfX3B5eF92X3NlbGYpIHsKLSsgIFB5T2Jq ZWN0ICpfX3B5eF92X2kgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3ZfaiA9IE5VTEw7Ci0g ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgaW50IF9fcHl4X3RfMTsKLSsgIFB5T2Jq ZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0t ICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBO VUxMOwotKyAgUHlfc3NpemVfdCBfX3B5eF90XzM7Ci0rICBQeU9iamVjdCAqKCpfX3B5eF90XzQp KFB5T2JqZWN0ICopOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7Ci0rICBpbnQgX19w eXhfdF82OwotKyAgUHlfc3NpemVfdCBfX3B5eF90Xzc7Ci0gICBpbnQgX19weXhfbGluZW5vID0g MDsKLSAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAgIGludCBfX3B5eF9j bGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJvcGVuZ2xfY2JfYXBp IiwgMCk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODA0Ci0tICog ICAgICAgICBjZGVmIHZvaWQgKmNiCi0tICogCi0tICogICAgICAgICBfY3R4ID0gbXB2X2dldF9z dWJfYXBpKHNlbGYuX2N0eCwgTVBWX1NVQl9BUElfT1BFTkdMX0NCKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBpZiBub3QgX2N0eDoKLS0gKiAgICAgICAgICAgICBy YWlzZSBNUFZFcnJvcigiT3BlbkdMIEFQSSBub3QgYXZhaWxhYmxlIikKLS0gKi8KLS0gIF9fcHl4 X3ZfX2N0eCA9IG1wdl9nZXRfc3ViX2FwaShfX3B5eF92X3NlbGYtPl9jdHgsIE1QVl9TVUJfQVBJ X09QRU5HTF9DQik7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODA1 Ci0tICogCi0tICogICAgICAgICBfY3R4ID0gbXB2X2dldF9zdWJfYXBpKHNlbGYuX2N0eCwgTVBW X1NVQl9BUElfT1BFTkdMX0NCKQotLSAqICAgICAgICAgaWYgbm90IF9jdHg6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcigiT3BlbkdM IEFQSSBub3QgYXZhaWxhYmxlIikKLS0gKiAKLS0gKi8KLS0gIF9fcHl4X3RfMSA9ICgoIShfX3B5 eF92X19jdHggIT0gMCkpICE9IDApOwotLSAgaWYgKHVubGlrZWx5KF9fcHl4X3RfMSkpIHsKLSsg IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlYWxsb2NfXyIsIDApOwotIAotLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODA2Ci0tICogICAgICAgICBfY3R4ID0g bXB2X2dldF9zdWJfYXBpKHNlbGYuX2N0eCwgTVBWX1NVQl9BUElfT1BFTkdMX0NCKQotLSAqICAg ICAgICAgaWYgbm90IF9jdHg6Ci0tICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoIk9wZW5H TCBBUEkgbm90IGF2YWlsYWJsZSIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTMKLSAgKiAKLS0gKiAgICAgICAgIGN0 eCA9IE9wZW5HTENvbnRleHQoKQotKyAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6Ci0rICog ICAgICAgICBmb3IgaSwgaiBpbiBlbnVtZXJhdGUoc2VsZi5vd25lZCk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBpZiBqOgotKyAqICAgICAgICAgICAgICAg ICBmcmVlKHNlbGYucGFyYW1zW2ldLmRhdGEpCi0gICovCi0tICAgIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF8zLCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCA4MDYsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8zKTsKLSsgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMCk7Ci0rICBfX3B5 eF90XzEgPSBfX3B5eF9pbnRfMDsKLSsgIGlmIChsaWtlbHkoUHlMaXN0X0NoZWNrRXhhY3QoX19w eXhfdl9zZWxmLT5vd25lZCkpIHx8IFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X3NlbGYtPm93 bmVkKSkgewotKyAgICBfX3B5eF90XzIgPSBfX3B5eF92X3NlbGYtPm93bmVkOyBfX1B5eF9JTkNS RUYoX19weXhfdF8yKTsgX19weXhfdF8zID0gMDsKLSAgICAgX19weXhfdF80ID0gTlVMTDsKLS0g ICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzMpKSkgewotLSAgICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfMyk7Ci0tICAgICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7Ci0tICAgICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8zKTsKLS0gICAgICAg IF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOwotLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKLS0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlvbik7Ci0tICAg ICAgfQotLSAgICB9Ci0tICAgIF9fcHl4X3RfMiA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmpl Y3RfQ2FsbDJBcmdzKF9fcHl4X3RfMywgX19weXhfdF80LCBfX3B5eF9rcF9zX09wZW5HTF9BUElf bm90X2F2YWlsYWJsZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19w eXhfa3Bfc19PcGVuR0xfQVBJX25vdF9hdmFpbGFibGUpOwotLSAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICAgIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDgwNiwgX19weXhfTDFfZXJyb3IpCi0rICB9IGVsc2UgewotKyAgICBfX3B5 eF90XzMgPSAtMTsgX19weXhfdF8yID0gUHlPYmplY3RfR2V0SXRlcihfX3B5eF92X3NlbGYtPm93 bmVkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTEzLCBfX3B5eF9M MV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgICBfX1B5eF9SYWlzZShfX3B5eF90XzIs IDAsIDAsIDApOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsK LS0gICAgX19QWVhfRVJSKDAsIDgwNiwgX19weXhfTDFfZXJyb3IpCi0tCi0tICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MDUKLS0gKiAKLS0gKiAgICAgICAgIF9jdHggPSBt cHZfZ2V0X3N1Yl9hcGkoc2VsZi5fY3R4LCBNUFZfU1VCX0FQSV9PUEVOR0xfQ0IpCi0tICogICAg ICAgICBpZiBub3QgX2N0eDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgICAgIHJhaXNlIE1QVkVycm9yKCJPcGVuR0wgQVBJIG5vdCBhdmFpbGFibGUiKQotLSAqIAot LSAqLwotKyAgICBfX3B5eF90XzQgPSBQeV9UWVBFKF9fcHl4X3RfMiktPnRwX2l0ZXJuZXh0OyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4X0wxX2Vycm9y KQotICAgfQotKyAgZm9yICg7OykgewotKyAgICBpZiAobGlrZWx5KCFfX3B5eF90XzQpKSB7Ci0r ICAgICAgaWYgKGxpa2VseShQeUxpc3RfQ2hlY2tFeGFjdChfX3B5eF90XzIpKSkgewotKyAgICAg ICAgaWYgKF9fcHl4X3RfMyA+PSBQeUxpc3RfR0VUX1NJWkUoX19weXhfdF8yKSkgYnJlYWs7Ci0r ICAgICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lEX0JP UlJPV0VEX1JFRlMKLSsgICAgICAgIF9fcHl4X3RfNSA9IFB5TGlzdF9HRVRfSVRFTShfX3B5eF90 XzIsIF9fcHl4X3RfMyk7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzMrKzsgaWYg KHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCi0rICAg ICAgICAjZWxzZQotKyAgICAgICAgX19weXhfdF81ID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3Rf MiwgX19weXhfdF8zKTsgX19weXhfdF8zKys7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19Q WVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCi0rICAgICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF81KTsKLSsgICAgICAgICNlbmRpZgotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBpZiAo X19weXhfdF8zID49IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdF8yKSkgYnJlYWs7Ci0rICAgICAg ICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VE X1JFRlMKLSsgICAgICAgIF9fcHl4X3RfNSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfdF8yLCBf X3B5eF90XzMpOyBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsgX19weXhfdF8zKys7IGlmICh1bmxp a2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgICAg I2Vsc2UKLSsgICAgICAgIF9fcHl4X3RfNSA9IFB5U2VxdWVuY2VfSVRFTShfX3B5eF90XzIsIF9f cHl4X3RfMyk7IF9fcHl4X3RfMysrOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VS UigwLCA5MTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NSk7Ci0rICAgICAgICAjZW5kaWYKLSsgICAgICB9Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgX19w eXhfdF81ID0gX19weXhfdF80KF9fcHl4X3RfMik7Ci0rICAgICAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzUpKSB7Ci0rICAgICAgICBQeU9iamVjdCogZXhjX3R5cGUgPSBQeUVycl9PY2N1cnJlZCgp OwotKyAgICAgICAgaWYgKGV4Y190eXBlKSB7Ci0rICAgICAgICAgIGlmIChsaWtlbHkoX19QeXhf UHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGV4Y190eXBlLCBQeUV4Y19TdG9wSXRlcmF0aW9u KSkpIFB5RXJyX0NsZWFyKCk7Ci0rICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAsIDkxMywgX19w eXhfTDFfZXJyb3IpCi0rICAgICAgICB9Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7Ci0rICAgIH0KLSsgICAgX19QeXhfWERFQ1JFRl9T RVQoX19weXhfdl9qLCBfX3B5eF90XzUpOwotKyAgICBfX3B5eF90XzUgPSAwOwotKyAgICBfX1B5 eF9JTkNSRUYoX19weXhfdF8xKTsKLSsgICAgX19QeXhfWERFQ1JFRl9TRVQoX19weXhfdl9pLCBf X3B5eF90XzEpOwotKyAgICBfX3B5eF90XzUgPSBfX1B5eF9QeUludF9BZGRPYmpDKF9fcHl4X3Rf MSwgX19weXhfaW50XzEsIDEsIDAsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlY X0VSUigwLCA5MTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81 KTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fcHl4X3RfMSA9IF9fcHl4 X3RfNTsKLSsgICAgX19weXhfdF81ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo4MDgKLS0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcigiT3BlbkdMIEFQ SSBub3QgYXZhaWxhYmxlIikKLS0gKiAKLS0gKiAgICAgICAgIGN0eCA9IE9wZW5HTENvbnRleHQo KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjdHguX2N0eCA9IDxt cHZfb3BlbmdsX2NiX2NvbnRleHQqPl9jdHgKLS0gKiAKLS0gKi8KLS0gIF9fcHl4X3RfMiA9IF9f UHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X09wZW5HTENvbnRleHQpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgODA4LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90 XzIpOwotLSAgX19weXhfdl9jdHggPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X09wZW5HTENvbnRleHQgKilfX3B5eF90XzIpOwotLSAgX19weXhfdF8yID0gMDsKLS0K LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MDkKLS0gKiAKLS0gKiAgICAg ICAgIGN0eCA9IE9wZW5HTENvbnRleHQoKQotLSAqICAgICAgICAgY3R4Ll9jdHggPSA8bXB2X29w ZW5nbF9jYl9jb250ZXh0Kj5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAK LS0gKiAgICAgICAgIHJldHVybiBjdHgKLS0gKi8KLS0gIF9fcHl4X3ZfY3R4LT5fY3R4ID0gKChz dHJ1Y3QgbXB2X29wZW5nbF9jYl9jb250ZXh0ICopX19weXhfdl9fY3R4KTsKLS0KLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MTEKLS0gKiAgICAgICAgIGN0eC5fY3R4ID0g PG1wdl9vcGVuZ2xfY2JfY29udGV4dCo+X2N0eAotLSAqIAotLSAqICAgICAgICAgcmV0dXJuIGN0 eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogCi0rICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5MTQKLSAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOgot KyAqICAgICAgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOgotKyAqICAgICAg ICAgICAgIGlmIGo6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAg ICAgICAgZnJlZShzZWxmLnBhcmFtc1tpXS5kYXRhKQotKyAqIAotICAqLwotLSAgX19QeXhfWERF Q1JFRihfX3B5eF9yKTsKLS0gIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopX19weXhfdl9jdHgp KTsKLS0gIF9fcHl4X3IgPSAoKFB5T2JqZWN0ICopX19weXhfdl9jdHgpOwotLSAgZ290byBfX3B5 eF9MMDsKLSsgICAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zfaik7 IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDkxNCwgX19weXhfTDFf ZXJyb3IpCi0rICAgIGlmIChfX3B5eF90XzYpIHsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4MDEKLS0gKiAgICAgICAgIHNlbGYuX2N0eCA9IE5VTEwKLS0gKiAKLS0g KiAgICAgZGVmIG9wZW5nbF9jYl9hcGkoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgICAgIGNkZWYgdm9pZCAqY2IKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTE1Ci0rICogICAgICAgICBmb3IgaSwgaiBpbiBlbnVtZXJhdGUoc2Vs Zi5vd25lZCk6Ci0rICogICAgICAgICAgICAgaWYgajoKLSsgKiAgICAgICAgICAgICAgICAgZnJl ZShzZWxmLnBhcmFtc1tpXS5kYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICog Ci0rICogY2RlZiB2b2lkICpnZXRfcG9pbnRlcihjb25zdCBjaGFyICpuYW1lLCBvYmplY3Qgb2Jq KToKLSAgKi8KLSsgICAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5 eF92X2kpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoUHlfc3NpemVfdCktMSkgJiYgUHlF cnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA5MTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAg IGZyZWUoKF9fcHl4X3Zfc2VsZi0+cGFyYW1zW19fcHl4X3RfN10pLmRhdGEpOwotIAotLSAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0tICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJz Lm1wdi5Db250ZXh0Lm9wZW5nbF9jYl9hcGkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8s IF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fcHl4X3IgPSBOVUxMOwotLSAgX19weXhfTDA6OwotLSAg X19QeXhfWERFQ1JFRigoUHlPYmplY3QgKilfX3B5eF92X2N0eCk7Ci0tICBfX1B5eF9YR0lWRVJF RihfX3B5eF9yKTsKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJu IF9fcHl4X3I7Ci0tfQotLQotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MTMK LS0gKiAgICAgICAgIHJldHVybiBjdHgKLS0gKiAKLS0gKiAgICAgZGVmIF9fZGVhbGxvY19fKHNl bGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLnNodXRk b3duKCkKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE0Ci0rICog ICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKLSsgKiAgICAgICAgIGZvciBpLCBqIGluIGVudW1l cmF0ZShzZWxmLm93bmVkKToKLSsgKiAgICAgICAgICAgICBpZiBqOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0 YSkKLSAgKiAKLSAgKi8KLSsgICAgfQotIAotLS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGlj IHZvaWQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ3X19kZWFsbG9j X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotLXN0YXRpYyB2b2lkIF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80N19fZGVhbGxvY19fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYpIHsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18gKHdyYXBwZXIpIiwgMCk7Ci0tICBf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDZfX2RlYWxsb2NfXygoKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3Nl bGYpKTsKLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7Ci0tfQotLQotLXN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF80Nl9fZGVhbGxvY19fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgewotLSAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotLSAgUHlPYmpl Y3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKLS0g IGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fZGVhbGxvY19fIiwgMCk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODE0Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTMK LSAgKiAKLSAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOgotLSAqICAgICAgICAgc2VsZi5z aHV0ZG93bigpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAKLS0gKiBjZGVmIHZv aWQgKl9jX2dldHByb2NhZGRyZXNzKHZvaWQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSkgd2l0aCBn aWw6Ci0rICogICAgICAgICBmb3IgaSwgaiBpbiBlbnVtZXJhdGUoc2VsZi5vd25lZCk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBpZiBqOgotKyAqICAgICAg ICAgICAgICAgICBmcmVlKHNlbGYucGFyYW1zW2ldLmRhdGEpCi0gICovCi0tICBfX3B5eF90XzIg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBf X3B5eF9uX3Nfc2h1dGRvd24pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigw LCA4MTQsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBf X3B5eF90XzMgPSBOVUxMOwotLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLS0gICAgX19weXhfdF8zID0gUHlNZXRob2Rf R0VUX1NFTEYoX19weXhfdF8yKTsKLS0gICAgaWYgKGxpa2VseShfX3B5eF90XzMpKSB7Ci0tICAg ICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7 Ci0tICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7Ci0tICAgICAgX19QeXhfSU5DUkVGKGZ1 bmN0aW9uKTsKLS0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwot LSAgICB9Ci0gICB9Ci0tICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5v QXJnKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4MTQsIF9fcHl4 X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9ERUNSRUYo X19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgx MwotLSAqICAgICAgICAgcmV0dXJuIGN0eAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjkxMgotKyAqICAgICAgICAgc2VsZi5hZGRfdm9pZHAodCwgcCkKLSAgKiAKLSAgKiAg ICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogICAgICAgICBzZWxmLnNodXRkb3duKCkKLS0gKiAKLSsgKiAgICAgICAgIGZvciBpLCBqIGlu IGVudW1lcmF0ZShzZWxmLm93bmVkKToKLSsgKiAgICAgICAgICAgICBpZiBqOgotICAqLwotIAot ICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi1AQCAtMTYxMjIsMzIgKzE1OTI0LDM0IEBAIHN0 YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80Nl9fZGVh bGxvY19fKHN0cnVjdCBfX3B5eF9vCi0gICBfX3B5eF9MMV9lcnJvcjo7Ci0gICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMyk7Ci0tICBfX1B5eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5s aWJzLm1wdi5Db250ZXh0Ll9fZGVhbGxvY19fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5v LCBfX3B5eF9maWxlbmFtZSwgMSwgMCk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7Ci0r ICBfX1B5eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5fUmVuZGVyUGFyYW1z Ll9fZGVhbGxvY19fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFt ZSwgMSwgMCk7Ci0gICBfX3B5eF9MMDo7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfaSk7Ci0r ICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfaik7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRl eHQoKTsKLSB9Ci0gCi0gLyogIih0cmVlIGZyYWdtZW50KSI6MQotICAqIGRlZiBfX3JlZHVjZV9j eXRob25fXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICByYWlz ZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19j aW5pdF9fIikKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLnBhcmFtcyBjYW5ub3QgYmUg Y29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQotICAqIGRlZiBfX3Nl dHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKLSAgKi8KLSAKLSAvKiBQeXRob24g d3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzQ5X19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwg Q1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCi0tc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDlfX3JlZHVjZV9j eXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1 bnVzZWQpIHsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM19SZW5kZXJQYXJhbXNfNV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLwotK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc181 X19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQ eU9iamVjdCAqdW51c2VkKSB7Ci0gICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0gICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVk dWNlX2N5dGhvbl9fICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80OF9fcmVkdWNlX2N5dGhvbl9fKCgoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOwot KyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJh bXNfNF9fcmVkdWNlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3Zfc2VsZikpOwotIAotICAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCi0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVy biBfX3B5eF9yOwotIH0KLSAKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF80OF9fcmVkdWNlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQgc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxm KSB7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNf UmVuZGVyUGFyYW1zXzRfX3JlZHVjZV9jeXRob25fXyhDWVRIT05fVU5VU0VEIHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKl9fcHl4X3Zfc2VsZikg ewotICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJh dGlvbnMKLSAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotQEAgLTE2MTU4LDExICsxNTk2 MiwxMSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF80OF9fcmVkdWNlX2N5dGhvbl9fKENZVAotIAotICAgLyogIih0cmVlIGZyYWdtZW50 KSI6MgotICAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKLS0gKiAgICAgcmFpc2UgVHlw ZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5vbi10cml2aWFsIF9fY2luaXRf XyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9y KCJzZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3Ig cGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogZGVmIF9fc2V0c3Rh dGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgotLSAqICAgICByYWlzZSBUeXBlRXJyb3Io Im5vIGRlZmF1bHQgX19yZWR1Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikKLSsg KiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29udmVydGVkIHRv IGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQotICAqLwotLSAgX19weXhfdF8xID0gX19Q eXhfUHlPYmplY3RfQ2FsbChfX3B5eF9idWlsdGluX1R5cGVFcnJvciwgX19weXhfdHVwbGVfXzMs IE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAyLCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRp bl9UeXBlRXJyb3IsIF9fcHl4X3R1cGxlX181LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKLSAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7Ci0gICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLUBAIC0xNjE3MCwxNCArMTU5NzQsMTQg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNDhfX3JlZHVjZV9jeXRob25fXyhDWVQKLSAKLSAgIC8qICIodHJlZSBmcmFnbWVudCkiOjEK LSAgKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLS0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVl IHRvIG5vbi10cml2aWFsIF9fY2luaXRfXyIpCi0rICogICAgIHJhaXNlIFR5cGVFcnJvcigic2Vs Zi5wYXJhbXMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2ts aW5nIikKLSAgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6Ci0g ICovCi0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fcHl4X0wxX2Vycm9yOjsK LSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX19yZWR1Y2VfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2Ll9SZW5kZXJQYXJhbXMuX19yZWR1Y2VfY3l0aG9uX18iLCBfX3B5 eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSAgIF9fcHl4X3IgPSBO VUxMOwotICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKLUBAIC0xNjE4NiwyNSArMTU5OTAsMjUgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDhfX3JlZHVjZV9jeXRob25f XyhDWVQKLSAKLSAvKiAiKHRyZWUgZnJhZ21lbnQpIjozCi0gICogZGVmIF9fcmVkdWNlX2N5dGhv bl9fKHNlbGYpOgotLSAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2Vf XyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9y KCJzZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3Ig cGlja2xpbmciKQotICAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRl KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICByYWlzZSBUeXBlRXJyb3Io Im5vIGRlZmF1bHQgX19yZWR1Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikKLSsg KiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29udmVydGVkIHRv IGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQotICAqLwotIAotIC8qIFB5dGhvbiB3cmFw cGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfNTFfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLypwcm90byovCi0tc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNTFfX3NldHN0YXRlX2N5 dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0 YXRlKSB7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNfUmVuZGVyUGFyYW1zXzdfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLypwcm90byovCi0rc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzdf X3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X19fcHl4X3N0YXRlKSB7Ci0gICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0gICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0 c3RhdGVfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzUwX19zZXRzdGF0ZV9jeXRob25fXygoKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYp LCAoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOwotKyAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfNl9fc2V0c3RhdGVfY3l0 aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsK LSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNTBfX3NldHN0YXRlX2N5dGhv bl9fKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF92X19f cHl4X3N0YXRlKSB7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNfUmVuZGVyUGFyYW1zXzZfX3NldHN0YXRlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQg c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqX19w eXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7 Ci0gICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucwotICAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci1AQCAtMTYyMTQsMTEgKzE2MDE4 LDExIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzUwX19zZXRzdGF0ZV9jeXRob25fXyhDCi0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyIsIDApOwotIAotICAgLyogIih0cmVlIGZyYWdtZW50 KSI6NAotLSAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2VfXyBkdWUg dG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxm LnBhcmFtcyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xp bmciKQotICAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKLS0g KiAgICAgcmFpc2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5vbi10 cml2aWFsIF9fY2luaXRfXyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAg cmFpc2UgVHlwZUVycm9yKCJzZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0 aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0g ICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2J1aWx0aW5fVHlw ZUVycm9yLCBfX3B5eF90dXBsZV9fNCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlP YmplY3RfQ2FsbChfX3B5eF9idWlsdGluX1R5cGVFcnJvciwgX19weXhfdHVwbGVfXzYsIE5VTEwp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCA0LCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgX19QeXhfUmFpc2UoX19weXhfdF8x LCAwLCAwLCAwKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwot QEAgLTE2MjI2LDI2NzUgKzE2MDMwLDIxODcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNTBfX3NldHN0YXRlX2N5dGhvbl9fKEMKLSAK LSAgIC8qICIodHJlZSBmcmFnbWVudCkiOjMKLSAgKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2Vs Zik6Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0 byBub24tdHJpdmlhbCBfX2Npbml0X18iKQotKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYu cGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGlu ZyIpCi0gICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVm YXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKQotKyAqICAgICBy YWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRo b24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0gICovCi0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNv ZGUgKi8KLSAgIF9fcHl4X0wxX2Vycm9yOjsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsK LS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX19zZXRz dGF0ZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlbmRlclBh cmFtcy5fX3NldHN0YXRlX2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBf X3B5eF9maWxlbmFtZSk7Ci0gICBfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3IpOwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19w eXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNgotLSAq ICAgICAgICAgc2VsZi5zaHV0ZG93bigpCi0tICogCi0tICogY2RlZiB2b2lkICpfY19nZXRwcm9j YWRkcmVzcyh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUpIHdpdGggZ2lsOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIHJldHVybiA8dm9pZCAqPjxpbnRwdHJfdD4oPG9i amVjdD5jdHgpKG5hbWUpCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxNwot KyAqICAgICAgICAgICAgICAgICBmcmVlKHNlbGYucGFyYW1zW2ldLmRhdGEpCi0gICogCi0rICog Y2RlZiB2b2lkICpnZXRfcG9pbnRlcihjb25zdCBjaGFyICpuYW1lLCBvYmplY3Qgb2JqKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBjZGVmIHZvaWQgKnAKLSsgKiAgICAg aWYgUHlDYXBzdWxlX0lzVmFsaWQob2JqLCBuYW1lKToKLSAgKi8KLSAKLS1zdGF0aWMgdm9pZCAq X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfZ2V0cHJvY2FkZHJlc3Modm9pZCAqX19w eXhfdl9jdHgsIGNoYXIgY29uc3QgKl9fcHl4X3ZfbmFtZSkgewotK3N0YXRpYyB2b2lkICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9nZXRfcG9pbnRlcihjaGFyIGNvbnN0ICpfX3B5eF92 X25hbWUsIFB5T2JqZWN0ICpfX3B5eF92X29iaikgewotKyAgdm9pZCAqX19weXhfdl9wOwotICAg dm9pZCAqX19weXhfcjsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBQeU9iamVj dCAqX19weXhfdF8xID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotLSAg UHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVM TDsKLSsgIGludCBfX3B5eF90XzE7Ci0rICB2b2lkICpfX3B5eF90XzI7Ci0rICBpbnQgX19weXhf dF8zOwotKyAgaW50IF9fcHl4X3RfNDsKLSAgIGludHB0cl90IF9fcHl4X3RfNTsKLSsgIFB5T2Jq ZWN0ICpfX3B5eF90XzYgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7Ci0r ICBQeU9iamVjdCAqX19weXhfdF84ID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzkgPSBO VUxMOwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFyICpfX3B5eF9maWxl bmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICAjaWZkZWYgV0lUSF9U SFJFQUQKLS0gIFB5R0lMU3RhdGVfU1RBVEUgX19weXhfZ2lsc3RhdGVfc2F2ZSA9IF9fUHl4X1B5 R0lMU3RhdGVfRW5zdXJlKCk7Ci0tICAjZW5kaWYKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfY19nZXRwcm9jYWRkcmVzcyIsIDApOwotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjgxNwotLSAqIAotLSAqIGNkZWYgdm9pZCAqX2NfZ2V0cHJvY2FkZHJlc3Mo dm9pZCAqY3R4LCBjb25zdCBjaGFyICpuYW1lKSB3aXRoIGdpbDoKLS0gKiAgICAgcmV0dXJuIDx2 b2lkICo+PGludHB0cl90Pig8b2JqZWN0PmN0eCkobmFtZSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqIAotLSAqIGNkZWYgdm9pZCBfY191cGRhdGVjYih2b2lkICpjdHgpIHdpdGgg Z2lsOgotLSAqLwotLSAgX19weXhfdF8yID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4 X3ZfbmFtZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDgxNywgX19w eXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gIF9fUHl4X0lOQ1JF RigoKFB5T2JqZWN0ICopX19weXhfdl9jdHgpKTsKLS0gIF9fcHl4X3RfMyA9ICgoUHlPYmplY3Qg KilfX3B5eF92X2N0eCk7IF9fcHl4X3RfNCA9IE5VTEw7Ci0tICBpZiAoQ1lUSE9OX1VOUEFDS19N RVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7Ci0tICAgIF9f cHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7Ci0tICAgIGlmIChsaWtlbHko X19weXhfdF80KSkgewotLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9G VU5DVElPTihfX3B5eF90XzMpOwotLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOwotLSAg ICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzMsIGZ1bmN0aW9uKTsKLS0gICAgfQotLSAgfQotLSAgX19weXhfdF8xID0gKF9fcHl4X3Rf NCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8zLCBfX3B5eF90XzQsIF9fcHl4 X3RfMikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdF8yKTsK LS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLS0gIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgODE3LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0t ICBfX3B5eF90XzUgPSBfX1B5eF9QeUludF9Bc19pbnRwdHJfdChfX3B5eF90XzEpOyBpZiAodW5s aWtlbHkoKF9fcHl4X3RfNSA9PSAoKGludHB0cl90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkp IF9fUFlYX0VSUigwLCA4MTcsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICBfX3B5eF9yID0gKCh2b2lkICopKChpbnRwdHJfdClf X3B5eF90XzUpKTsKLS0gIGdvdG8gX19weXhfTDA7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiZ2V0X3BvaW50ZXIiLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4MTYKLS0gKiAgICAgICAgIHNlbGYuc2h1dGRvd24oKQotLSAqIAotLSAqIGNkZWYg dm9pZCAqX2NfZ2V0cHJvY2FkZHJlc3Modm9pZCAqY3R4LCBjb25zdCBjaGFyICpuYW1lKSB3aXRo IGdpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICByZXR1cm4gPHZvaWQg Kj48aW50cHRyX3Q+KDxvYmplY3Q+Y3R4KShuYW1lKQotLSAqIAotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjkxOQotKyAqIGNkZWYgdm9pZCAqZ2V0X3BvaW50ZXIoY29uc3Qg Y2hhciAqbmFtZSwgb2JqZWN0IG9iaik6Ci0rICogICAgIGNkZWYgdm9pZCAqcAotKyAqICAgICBp ZiBQeUNhcHN1bGVfSXNWYWxpZChvYmosIG5hbWUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogICAgICAgICBwID0gUHlDYXBzdWxlX0dldFBvaW50ZXIob2JqLCBuYW1lKQotKyAq ICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBpbnQpIG9yIGlzaW5zdGFuY2Uob2JqLCBsb25nKSBh bmQgb2JqOgotICAqLwotKyAgX19weXhfdF8xID0gKFB5Q2Fwc3VsZV9Jc1ZhbGlkKF9fcHl4X3Zf b2JqLCBfX3B5eF92X25hbWUpICE9IDApOwotKyAgaWYgKF9fcHl4X3RfMSkgewotIAotLSAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMyk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Ci0tICBfX1B5 eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5fY19nZXRwcm9jYWRkcmVzcyIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUsIDEsIDApOwotLSAg X19weXhfciA9IDA7Ci0tICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRl eHQoKTsKLS0gICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgX19QeXhfUHlHSUxTdGF0ZV9SZWxlYXNl KF9fcHl4X2dpbHN0YXRlX3NhdmUpOwotLSAgI2VuZGlmCi0tICByZXR1cm4gX19weXhfcjsKLS19 Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjAKLSsgKiAgICAgY2Rl ZiB2b2lkICpwCi0rICogICAgIGlmIFB5Q2Fwc3VsZV9Jc1ZhbGlkKG9iaiwgbmFtZSk6Ci0rICog ICAgICAgICBwID0gUHlDYXBzdWxlX0dldFBvaW50ZXIob2JqLCBuYW1lKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGludCkgb3IgaXNp bnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6Ci0rICogICAgICAgICBwID0gPHZvaWQgKj48aW50 cHRyX3Q+b2JqCi0rICovCi0rICAgIF9fcHl4X3RfMiA9IFB5Q2Fwc3VsZV9HZXRQb2ludGVyKF9f cHl4X3Zfb2JqLCBfX3B5eF92X25hbWUpOyBpZiAodW5saWtlbHkoX19weXhfdF8yID09ICgodm9p ZCAqKU5VTEwpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTIwLCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19weXhfdl9wID0gX19weXhfdF8yOwotIAotLS8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo4MTkKLS0gKiAgICAgcmV0dXJuIDx2b2lkICo+PGludHB0cl90 Pig8b2JqZWN0PmN0eCkobmFtZSkKLS0gKiAKLS0gKiBjZGVmIHZvaWQgX2NfdXBkYXRlY2Iodm9p ZCAqY3R4KSB3aXRoIGdpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAo PG9iamVjdD5jdHgpKCkKLS0gKiAKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjkxOQotKyAqIGNkZWYgdm9pZCAqZ2V0X3BvaW50ZXIoY29uc3QgY2hhciAqbmFtZSwgb2Jq ZWN0IG9iaik6Ci0rICogICAgIGNkZWYgdm9pZCAqcAotKyAqICAgICBpZiBQeUNhcHN1bGVfSXNW YWxpZChvYmosIG5hbWUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAg ICBwID0gUHlDYXBzdWxlX0dldFBvaW50ZXIob2JqLCBuYW1lKQotKyAqICAgICBlbGlmIGlzaW5z dGFuY2Uob2JqLCBpbnQpIG9yIGlzaW5zdGFuY2Uob2JqLCBsb25nKSBhbmQgb2JqOgotICAqLwot KyAgICBnb3RvIF9fcHl4X0wzOwotKyAgfQotIAotLXN0YXRpYyB2b2lkIF9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2X19jX3VwZGF0ZWNiKHZvaWQgKl9fcHl4X3ZfY3R4KSB7Ci0tICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0t ICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBO VUxMOwotLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0tICBjb25zdCBjaGFyICpfX3B5eF9maWxl bmFtZSA9IE5VTEw7Ci0tICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICAjaWZkZWYgV0lUSF9U SFJFQUQKLS0gIFB5R0lMU3RhdGVfU1RBVEUgX19weXhfZ2lsc3RhdGVfc2F2ZSA9IF9fUHl4X1B5 R0lMU3RhdGVfRW5zdXJlKCk7Ci0tICAjZW5kaWYKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfY191cGRhdGVjYiIsIDApOwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjkyMQotKyAqICAgICBpZiBQeUNhcHN1bGVfSXNWYWxpZChvYmosIG5hbWUpOgotKyAqICAg ICAgICAgcCA9IFB5Q2Fwc3VsZV9HZXRQb2ludGVyKG9iaiwgbmFtZSkKLSsgKiAgICAgZWxpZiBp c2luc3RhbmNlKG9iaiwgaW50KSBvciBpc2luc3RhbmNlKG9iaiwgbG9uZykgYW5kIG9iajogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcCA9IDx2b2lkICo+PGludHB0 cl90Pm9iagotKyAqICAgICBlbHNlOgotKyAqLwotKyAgX19weXhfdF8zID0gUHlJbnRfQ2hlY2so X19weXhfdl9vYmopOyAKLSsgIF9fcHl4X3RfNCA9IChfX3B5eF90XzMgIT0gMCk7Ci0rICBpZiAo IV9fcHl4X3RfNCkgewotKyAgfSBlbHNlIHsKLSsgICAgX19weXhfdF8xID0gX19weXhfdF80Owot KyAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKLSsgIH0KLSsgIF9fcHl4X3RfNCA9 IFB5TG9uZ19DaGVjayhfX3B5eF92X29iaik7IAotKyAgX19weXhfdF8zID0gKF9fcHl4X3RfNCAh PSAwKTsKLSsgIGlmIChfX3B5eF90XzMpIHsKLSsgIH0gZWxzZSB7Ci0rICAgIF9fcHl4X3RfMSA9 IF9fcHl4X3RfMzsKLSsgICAgZ290byBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU7Ci0rICB9Ci0r ICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9vYmopOyBpZiAodW5s aWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlYX0VSUigwLCA5MjEsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19weXhfdF8xID0gX19weXhfdF8zOwotKyAgX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOjsK LSsgIGlmIChsaWtlbHkoX19weXhfdF8xKSkgewotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjgyMAotLSAqIAotLSAqIGNkZWYgdm9pZCBfY191cGRhdGVjYih2b2lkICpj dHgpIHdpdGggZ2lsOgotLSAqICAgICAoPG9iamVjdD5jdHgpKCkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTIyCi0r ICogICAgICAgICBwID0gUHlDYXBzdWxlX0dldFBvaW50ZXIob2JqLCBuYW1lKQotKyAqICAgICBl bGlmIGlzaW5zdGFuY2Uob2JqLCBpbnQpIG9yIGlzaW5zdGFuY2Uob2JqLCBsb25nKSBhbmQgb2Jq OgotKyAqICAgICAgICAgcCA9IDx2b2lkICo+PGludHB0cl90Pm9iaiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgIGVsc2U6Ci0rICogICAgICAgICByYWlzZSBQeU1QVkVycm9y KCJVbmtub3duIG9yIGludmFsaWQgcG9pbnRlciBvYmplY3Q6ICVyIiAlIG9iaikKLSsgKi8KLSsg ICAgX19weXhfdF81ID0gX19QeXhfUHlJbnRfQXNfaW50cHRyX3QoX19weXhfdl9vYmopOyBpZiAo dW5saWtlbHkoKF9fcHl4X3RfNSA9PSAoKGludHB0cl90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQo KSkpIF9fUFlYX0VSUigwLCA5MjIsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF92X3AgPSAo KHZvaWQgKikoKGludHB0cl90KV9fcHl4X3RfNSkpOwotKwotKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTIxCi0rICogICAgIGlmIFB5Q2Fwc3VsZV9Jc1ZhbGlkKG9iaiwg bmFtZSk6Ci0rICogICAgICAgICBwID0gUHlDYXBzdWxlX0dldFBvaW50ZXIob2JqLCBuYW1lKQot KyAqICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBpbnQpIG9yIGlzaW5zdGFuY2Uob2JqLCBsb25n KSBhbmQgb2JqOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBwID0g PHZvaWQgKj48aW50cHRyX3Q+b2JqCi0rICogICAgIGVsc2U6Ci0rICovCi0rICAgIGdvdG8gX19w eXhfTDM7Ci0rICB9Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTI0 Ci0rICogICAgICAgICBwID0gPHZvaWQgKj48aW50cHRyX3Q+b2JqCi0rICogICAgIGVsc2U6Ci0r ICogICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJVbmtub3duIG9yIGludmFsaWQgcG9pbnRlciBv YmplY3Q6ICVyIiAlIG9iaikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBy ZXR1cm4gcAotICAqIAotLSAqIGNkZWYgY2xhc3MgT3BlbkdMQ29udGV4dChvYmplY3QpOgotICAq LwotLSAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilfX3B5eF92X2N0eCkpOwotLSAgX19weXhf dF8yID0gKChQeU9iamVjdCAqKV9fcHl4X3ZfY3R4KTsgX19weXhfdF8zID0gTlVMTDsKLS0gIGlm IChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhf dF8yKSkpIHsKLS0gICAgX19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsK LS0gICAgaWYgKGxpa2VseShfX3B5eF90XzMpKSB7Ci0tICAgICAgUHlPYmplY3QqIGZ1bmN0aW9u ID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0tICAgICAgX19QeXhfSU5DUkVG KF9fcHl4X3RfMyk7Ci0tICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotKyAgLyplbHNlKi8gewotKyAgICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNywgX19weXhfbl9zX1B5TVBWRXJyb3Ip OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA5MjQsIF9fcHl4X0wxX2Vy cm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSsgICAgX19weXhfdF84ID0gX19Q eXhfUHlTdHJpbmdfRm9ybWF0U2FmZShfX3B5eF9rcF9zX1Vua25vd25fb3JfaW52YWxpZF9wb2lu dGVyX29iamVjLCBfX3B5eF92X29iaik7IGlmICh1bmxpa2VseSghX19weXhfdF84KSkgX19QWVhf RVJSKDAsIDkyNCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90Xzgp OwotKyAgICBfX3B5eF90XzkgPSBOVUxMOwotKyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RT ICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNykpKSB7Ci0rICAgICAgX19weXhf dF85ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF83KTsKLSsgICAgICBpZiAobGlrZWx5KF9f cHl4X3RfOSkpIHsKLSsgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9G VU5DVElPTihfX3B5eF90XzcpOwotKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfOSk7Ci0r ICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAgICAgICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF90XzcsIGZ1bmN0aW9uKTsKLSsgICAgICB9Ci0gICAgIH0KLSsgICAgX19weXhfdF82 ID0gKF9fcHl4X3RfOSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF83LCBfX3B5 eF90XzksIF9fcHl4X3RfOCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNywg X19weXhfdF84KTsKLSsgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90XzkgPSAw OwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF84KTsgX19weXhfdF84ID0gMDsKLSsgICAgaWYg KHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTI0LCBfX3B5eF9MMV9lcnJvcikK LSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzcpOyBfX3B5eF90XzcgPSAwOwotKyAgICBfX1B5eF9SYWlzZShfX3B5eF90XzYsIDAsIDAsIDAp OwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSsgICAgX19Q WVhfRVJSKDAsIDkyNCwgX19weXhfTDFfZXJyb3IpCi0gICB9Ci0tICBfX3B5eF90XzEgPSAoX19w eXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMp IDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCA4MjAsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgX19weXhfTDM6OwotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxOQotLSAqICAgICByZXR1cm4g PHZvaWQgKj48aW50cHRyX3Q+KDxvYmplY3Q+Y3R4KShuYW1lKQotLSAqIAotLSAqIGNkZWYgdm9p ZCBfY191cGRhdGVjYih2b2lkICpjdHgpIHdpdGggZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogICAgICg8b2JqZWN0PmN0eCkoKQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjkyNQotKyAqICAgICBlbHNlOgotKyAqICAgICAgICAgcmFpc2UgUHlNUFZF cnJvcigiVW5rbm93biBvciBpbnZhbGlkIHBvaW50ZXIgb2JqZWN0OiAlciIgJSBvYmopCi0rICog ICAgIHJldHVybiBwICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAKLSsgKiBAY3l0 aG9uLmludGVybmFsCi0gICovCi0tCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9f cHl4X3IgPSBfX3B5eF92X3A7Ci0gICBnb3RvIF9fcHl4X0wwOwotLSAgX19weXhfTDFfZXJyb3I6 OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzIpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOwotLSAgX19QeXhfV3JpdGVVbnJhaXNh YmxlKCJ2aWRjdXR0ZXIubGlicy5tcHYuX2NfdXBkYXRlY2IiLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsKLS0gIF9fcHl4X0wwOjsKLS0gIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICBfX1B5 eF9QeUdJTFN0YXRlX1JlbGVhc2UoX19weXhfZ2lsc3RhdGVfc2F2ZSk7Ci0tICAjZW5kaWYKLS19 Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgyOAotLSAqICAgICAgICAg b2JqZWN0IHVwZGF0ZV9jYgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkx NwotKyAqICAgICAgICAgICAgICAgICBmcmVlKHNlbGYucGFyYW1zW2ldLmRhdGEpCi0gICogCi0t ICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQotLSAqICAgICAgICAgd2FybmluZ3Mud2Fy bigiT3BlbkdMQ29udGV4dCBpcyBkZXByZWNhdGVkLCBwbGVhc2Ugc3dpdGNoIHRvIFJlbmRlckNv bnRleHQiLCBEZXByZWNhdGlvbldhcm5pbmcpCi0rICogY2RlZiB2b2lkICpnZXRfcG9pbnRlcihj b25zdCBjaGFyICpuYW1lLCBvYmplY3Qgb2JqKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICBjZGVmIHZvaWQgKnAKLSsgKiAgICAgaWYgUHlDYXBzdWxlX0lzVmFsaWQob2Jq LCBuYW1lKToKLSAgKi8KLSAKLS0vKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBpbnQgX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF8xX19pbml0X18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5 eF9rd2RzKTsgLypwcm90byovCi0tc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNPcGVuR0xDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQ eU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKLS0gIGludCBfX3B5 eF9yOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfX2luaXRfXyAod3JhcHBlcikiLCAwKTsKLS0gIGlmICh1bmxpa2VseShQeVR1 cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpID4gMCkpIHsKLS0gICAgX19QeXhfUmFpc2VBcmd0dXBs ZUludmFsaWQoIl9faW5pdF9fIiwgMSwgMCwgMCwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdz KSk7IHJldHVybiAtMTt9Ci0tICBpZiAodW5saWtlbHkoX19weXhfa3dkcykgJiYgdW5saWtlbHko UHlEaWN0X1NpemUoX19weXhfa3dkcykgPiAwKSAmJiB1bmxpa2VseSghX19QeXhfQ2hlY2tLZXl3 b3JkU3RyaW5ncyhfX3B5eF9rd2RzLCAiX19pbml0X18iLCAwKSkpIHJldHVybiAtMTsKLS0gIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0X19f aW5pdF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29u dGV4dCAqKV9fcHl4X3Zfc2VsZikpOwotLQotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0r ICBfX3B5eF9MMV9lcnJvcjo7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7Ci0rICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNyk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7Ci0rICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfOSk7Ci0rICBfX1B5eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1 dHRlci5saWJzLm1wdi5nZXRfcG9pbnRlciIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUsIDEsIDApOwotKyAgX19weXhfciA9IDA7Ci0rICBfX3B5eF9MMDo7Ci0g ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0K LSAKLS1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENv bnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3Bl bkdMQ29udGV4dCAqX19weXhfdl9zZWxmKSB7Ci0tICBpbnQgX19weXhfcjsKLSsvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTI5Ci0rICogQGN5dGhvbi5pbnRlcm5hbAotKyAqIGNk ZWYgY2xhc3MgUmVuZGVyRnJhbWVJbmZvKG9iamVjdCk6Ci0rICogICAgIGNkZWYgX2Zyb21fc3Ry dWN0KHNlbGYsIG1wdl9yZW5kZXJfZnJhbWVfaW5mbyAqaW5mbyk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYucHJlc2VudCA9IGJvb2woaW5mb1swXS5mbGFn cyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19QUkVTRU5UKQotKyAqICAgICAgICAgc2VsZi5yZWRy YXcgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUkVEUkFXKQot KyAqLwotKwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTVSZW5kZXJGcmFtZUluZm9fX2Zyb21fc3RydWN0KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqX19weXhfdl9zZWxmLCBzdHJ1Y3QgbXB2X3Jl bmRlcl9mcmFtZV9pbmZvICpfX3B5eF92X2luZm8pIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF9yID0g TlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0gICBQeU9iamVjdCAqX19weXhf dF8xID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotKyAgaW50IF9fcHl4 X3RfMjsKLSAgIGludCBfX3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmls ZW5hbWUgPSBOVUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9faW5pdF9fIiwgMCk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX2Zyb21fc3RydWN0IiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODI5Ci0tICogCi0tICogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLS0gKiAgICAg ICAgIHNlbGYuaW5pdGVkID0gRmFsc2UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq ICAgICAgICAgd2FybmluZ3Mud2FybigiT3BlbkdMQ29udGV4dCBpcyBkZXByZWNhdGVkLCBwbGVh c2Ugc3dpdGNoIHRvIFJlbmRlckNvbnRleHQiLCBEZXByZWNhdGlvbldhcm5pbmcpCi0tICogCi0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTMwCi0rICogY2RlZiBjbGFzcyBS ZW5kZXJGcmFtZUluZm8ob2JqZWN0KToKLSsgKiAgICAgY2RlZiBfZnJvbV9zdHJ1Y3Qoc2VsZiwg bXB2X3JlbmRlcl9mcmFtZV9pbmZvICppbmZvKToKLSsgKiAgICAgICAgIHNlbGYucHJlc2VudCA9 IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19QUkVTRU5UKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBzZWxmLnJlZHJhdyA9IGJvb2wo aW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpCi0rICogICAgICAg ICBzZWxmLnJlcGVhdCA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5G T19SRVBFQVQpCi0gICovCi0tICBfX3B5eF92X3NlbGYtPmluaXRlZCA9IDA7Ci0rICBfX3B5eF90 XzEgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KCgoX19weXhfdl9pbmZvWzBdKS5mbGFncyAm IE1QVl9SRU5ERVJfRlJBTUVfSU5GT19QUkVTRU5UKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDkzMCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzEp OyBpZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA5MzAsIF9fcHl4X0wx X2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICBf X3B5eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoIV9fcHl4X3RfMikpKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMwLCBfX3B5eF9MMV9lcnJvcikKLSsg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJT dHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19wcmVzZW50LCBfX3B5eF90 XzEpIDwgMCkgX19QWVhfRVJSKDAsIDkzMCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4MzAKLS0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotLSAqICAgICAg ICAgc2VsZi5pbml0ZWQgPSBGYWxzZQotLSAqICAgICAgICAgd2FybmluZ3Mud2FybigiT3BlbkdM Q29udGV4dCBpcyBkZXByZWNhdGVkLCBwbGVhc2Ugc3dpdGNoIHRvIFJlbmRlckNvbnRleHQiLCBE ZXByZWNhdGlvbldhcm5pbmcpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAKLS0g KiAgICAgZGVmIGluaXRfZ2woc2VsZiwgZXh0cywgZ2V0X3Byb2NfYWRkcmVzcyk6Ci0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTMxCi0rICogICAgIGNkZWYgX2Zyb21fc3Ry dWN0KHNlbGYsIG1wdl9yZW5kZXJfZnJhbWVfaW5mbyAqaW5mbyk6Ci0rICogICAgICAgICBzZWxm LnByZXNlbnQgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUFJF U0VOVCkKLSsgKiAgICAgICAgIHNlbGYucmVkcmF3ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBW X1JFTkRFUl9GUkFNRV9JTkZPX1JFRFJBVykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAqICAgICAgICAgc2VsZi5yZXBlYXQgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVS X0ZSQU1FX0lORk9fUkVQRUFUKQotKyAqICAgICAgICAgc2VsZi5ibG9ja192c3luYyA9IGJvb2wo aW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19CTE9DS19WU1lOQykKLSAgKi8K LS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3Nfd2Fybmlu Z3MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4MzAsIF9fcHl4X0wx X2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCgoKF9fcHl4 X3ZfaW5mb1swXSkuZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUkVEUkFXKSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkzMSwgX19weXhfTDFfZXJyb3IpCi0g ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0 X0dldEF0dHJTdHIoX19weXhfdF8xLCBfX3B5eF9uX3Nfd2Fybik7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDgzMCwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5 eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA5MzEsIF9f cHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMiwgX19weXhfdHVw bGVfXzUsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4MzAs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKCgh KCFfX3B5eF90XzIpKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkz MSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgaWYgKF9fUHl4X1B5T2JqZWN0 X1NldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19yZWRyYXcs IF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjgyOAotLSAqICAgICAgICAgb2JqZWN0IHVwZGF0ZV9jYgot LSAqIAotLSAqICAgICBkZWYgX19pbml0X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLS0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKLS0gKiAgICAgICAgIHdhcm5p bmdzLndhcm4oIk9wZW5HTENvbnRleHQgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHN3aXRjaCB0byBS ZW5kZXJDb250ZXh0IiwgRGVwcmVjYXRpb25XYXJuaW5nKQotKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjkzMgotKyAqICAgICAgICAgc2VsZi5wcmVzZW50ID0gYm9vbChpbmZv WzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpCi0rICogICAgICAgICBz ZWxmLnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19S RURSQVcpCi0rICogICAgICAgICBzZWxmLnJlcGVhdCA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1Q Vl9SRU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgICAgIHNlbGYuYmxvY2tfdnN5bmMgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZf UkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMpCi0rICogICAgICAgICBzZWxmLnRhcmdldF90 aW1lID0gaW5mb1swXS50YXJnZXRfdGltZQotICAqLwotKyAgX19weXhfdF8xID0gX19QeXhfUHlJ bnRfRnJvbV91aW50NjRfdCgoKF9fcHl4X3ZfaW5mb1swXSkuZmxhZ3MgJiBNUFZfUkVOREVSX0ZS QU1FX0lORk9fUkVQRUFUKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDkzMiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIF9f cHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtlbHko X19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA5MzIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICBfX3B5eF90XzEgPSBfX1B5 eF9QeUJvb2xfRnJvbUxvbmcoKCEoIV9fcHl4X3RfMikpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgOTMyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOwotKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAq KV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19yZXBlYXQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9F UlIoMCwgOTMyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOwotIAotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX3B5eF9y ID0gMDsKLS0gIGdvdG8gX19weXhfTDA7Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTMzCi0rICogICAgICAgICBzZWxmLnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFncyAm IE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpCi0rICogICAgICAgICBzZWxmLnJlcGVhdCA9 IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpCi0rICog ICAgICAgICBzZWxmLmJsb2NrX3ZzeW5jID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRF Ul9GUkFNRV9JTkZPX0JMT0NLX1ZTWU5DKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0r ICogICAgICAgICBzZWxmLnRhcmdldF90aW1lID0gaW5mb1swXS50YXJnZXRfdGltZQotKyAqICAg ICAgICAgcmV0dXJuIHNlbGYKLSsgKi8KLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21f dWludDY0X3QoKChfX3B5eF92X2luZm9bMF0pLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZP X0JMT0NLX1ZTWU5DKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkz MywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIF9fcHl4 X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19w eXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICBfX3B5eF90XzEgPSBfX1B5eF9Q eUJvb2xfRnJvbUxvbmcoKCEoIV9fcHl4X3RfMikpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgOTMzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOwotKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAqKV9f cHl4X3Zfc2VsZiksIF9fcHl4X25fc19ibG9ja192c3luYywgX19weXhfdF8xKSA8IDApIF9fUFlY X0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTM0Ci0rICogICAgICAgICBzZWxmLnJlcGVhdCA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9S RU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpCi0rICogICAgICAgICBzZWxmLmJsb2NrX3ZzeW5jID0g Ym9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX0JMT0NLX1ZTWU5DKQot KyAqICAgICAgICAgc2VsZi50YXJnZXRfdGltZSA9IGluZm9bMF0udGFyZ2V0X3RpbWUgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIHNlbGYKLSsgKiAKLSsg Ki8KLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRfdCgoX19weXhfdl9pbmZv WzBdKS50YXJnZXRfdGltZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDkzNCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIGlm IChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBf X3B5eF9uX3NfdGFyZ2V0X3RpbWUsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTM0LCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OwotKwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzNQotKyAqICAgICAg ICAgc2VsZi5ibG9ja192c3luYyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJB TUVfSU5GT19CTE9DS19WU1lOQykKLSsgKiAgICAgICAgIHNlbGYudGFyZ2V0X3RpbWUgPSBpbmZv WzBdLnRhcmdldF90aW1lCi0rICogICAgICAgICByZXR1cm4gc2VsZiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogCi0rICogY2RlZiBjbGFzcyBSZW5kZXJDb250ZXh0KG9iamVjdCk6 Ci0rICovCi0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotKyAgX19QeXhfSU5DUkVGKCgoUHlP YmplY3QgKilfX3B5eF92X3NlbGYpKTsKLSsgIF9fcHl4X3IgPSAoKFB5T2JqZWN0ICopX19weXhf dl9zZWxmKTsKLSsgIGdvdG8gX19weXhfTDA7Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTI5Ci0rICogQGN5dGhvbi5pbnRlcm5hbAotKyAqIGNkZWYgY2xhc3MgUmVu ZGVyRnJhbWVJbmZvKG9iamVjdCk6Ci0rICogICAgIGNkZWYgX2Zyb21fc3RydWN0KHNlbGYsIG1w dl9yZW5kZXJfZnJhbWVfaW5mbyAqaW5mbyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgICAgIHNlbGYucHJlc2VudCA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5E RVJfRlJBTUVfSU5GT19QUkVTRU5UKQotKyAqICAgICAgICAgc2VsZi5yZWRyYXcgPSBib29sKGlu Zm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUkVEUkFXKQotKyAqLwotKwotKyAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0gICBfX3B5eF9MMV9lcnJvcjo7Ci0gICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5PcGVuR0xDb250ZXh0Ll9faW5pdF9f IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICBfX3B5 eF9yID0gLTE7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5k ZXJGcmFtZUluZm8uX2Zyb21fc3RydWN0IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBf X3B5eF9maWxlbmFtZSk7Ci0rICBfX3B5eF9yID0gMDsKLSAgIF9fcHl4X0wwOjsKLSsgIF9fUHl4 X1hHSVZFUkVGKF9fcHl4X3IpOwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0g ICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjgzMgotLSAqICAgICAgICAgd2FybmluZ3Mud2FybigiT3BlbkdMQ29udGV4dCBpcyBkZXBy ZWNhdGVkLCBwbGVhc2Ugc3dpdGNoIHRvIFJlbmRlckNvbnRleHQiLCBEZXByZWNhdGlvbldhcm5p bmcpCi0tICogCi0tICogICAgIGRlZiBpbml0X2dsKHNlbGYsIGV4dHMsIGdldF9wcm9jX2FkZHJl c3MpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBleHRzID0gX3N0 cmVuYyhleHRzKSBpZiBleHRzIGlzIG5vdCBOb25lIGVsc2UgTm9uZQotLSAqICAgICAgICAgY2Rl ZiBjaGFyKiBleHRzYyA9IE5VTEwKLSsvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCi0rICogZGVmIF9f cmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgIGNkZWYgdHVwbGUgc3RhdGUKLSsgKiAgICAgY2RlZiBvYmplY3QgX2RpY3QKLSAgKi8KLSAK LSAvKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF8zaW5pdF9nbChQeU9iamVjdCAqX19weXhf dl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnBy b3RvKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M09wZW5HTENvbnRleHRfM2luaXRfZ2woUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7Ci0tICBQeU9iamVjdCAqX19weXhf dl9leHRzID0gMDsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X2dldF9wcm9jX2FkZHJlc3MgPSAwOwot LSAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0tICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9 IE5VTEw7Ci0tICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fMV9fcmVkdWNlX2N5 dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVu dXNlZCk7IC8qcHJvdG8qLwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzE1UmVuZGVyRnJhbWVJbmZvXzFfX3JlZHVjZV9jeXRob25fXyhQeU9iamVjdCAq X19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKLSAgIFB5T2Jq ZWN0ICpfX3B5eF9yID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiaW5pdF9nbCAod3JhcHBlcikiLCAwKTsKLS0gIHsKLS0g ICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfZXh0 cywmX19weXhfbl9zX2dldF9wcm9jX2FkZHJlc3MsMH07Ci0tICAgIFB5T2JqZWN0KiB2YWx1ZXNb Ml0gPSB7MCwwfTsKLS0gICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7Ci0tICAgICAgUHlf c3NpemVfdCBrd19hcmdzOwotLSAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1 cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpOwotLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKLS0g ICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywg MSk7Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAxOiB2YWx1 ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOwotLSAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgMDogYnJlYWs7Ci0tICAgICAgICBkZWZhdWx0 OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotLSAgICAgIH0KLS0gICAgICBrd19hcmdz ID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7Ci0tICAgICAgc3dpdGNoIChwb3NfYXJncykgewot LSAgICAgICAgY2FzZSAgMDoKLS0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4 X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19leHRzKSkgIT0gMCkpIGt3 X2FyZ3MtLTsKLS0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLS0g ICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDE6Ci0tICAgICAgICBp ZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2Rz LCBfX3B5eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcykpICE9IDApKSBrd19hcmdzLS07Ci0tICAgICAg ICBlbHNlIHsKLS0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoImluaXRfZ2wi LCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDgzMiwgX19weXhfTDNfZXJyb3IpCi0tICAgICAg ICB9Ci0tICAgICAgfQotLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKLS0gICAg ICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywg X19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgImluaXRfZ2wiKSA8IDApKSBf X1BZWF9FUlIoMCwgODMyLCBfX3B5eF9MM19lcnJvcikKLS0gICAgICB9Ci0tICAgIH0gZWxzZSBp ZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7Ci0tICAgICAgZ290byBfX3B5 eF9MNV9hcmd0dXBsZV9lcnJvcjsKLS0gICAgfSBlbHNlIHsKLS0gICAgICB2YWx1ZXNbMF0gPSBQ eVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOwotLSAgICAgIHZhbHVlc1sxXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7Ci0tICAgIH0KLS0gICAgX19weXhfdl9leHRzID0g dmFsdWVzWzBdOwotLSAgICBfX3B5eF92X2dldF9wcm9jX2FkZHJlc3MgPSB2YWx1ZXNbMV07Ci0t ICB9Ci0tICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOwotLSAgX19weXhf TDVfYXJndHVwbGVfZXJyb3I6OwotLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoImluaXRf Z2wiLCAxLCAyLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAs IDgzMiwgX19weXhfTDNfZXJyb3IpCi0tICBfX3B5eF9MM19lcnJvcjo7Ci0tICBfX1B5eF9BZGRU cmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5PcGVuR0xDb250ZXh0LmluaXRfZ2wiLCBfX3B5 eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIE5VTEw7Ci0tICBfX3B5eF9MNF9hcmd1bWVu dF91bnBhY2tpbmdfZG9uZTo7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzT3BlbkdMQ29udGV4dF8yaW5pdF9nbCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X2V4 dHMsIF9fcHl4X3ZfZ2V0X3Byb2NfYWRkcmVzcyk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX19yZWR1Y2VfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7Ci0rICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE1UmVuZGVyRnJhbWVJbmZvX19fcmVkdWNlX2N5 dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJh bWVJbmZvICopX19weXhfdl9zZWxmKSk7Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K LSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0g fQotIAotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz T3BlbkdMQ29udGV4dF8yaW5pdF9nbChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9PcGVuR0xDb250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2V4dHMs IFB5T2JqZWN0ICpfX3B5eF92X2dldF9wcm9jX2FkZHJlc3MpIHsKLS0gIGNoYXIgKl9fcHl4X3Zf ZXh0c2M7Ci0tICBpbnQgX19weXhfdl9lcnI7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fX19yZWR1Y2VfY3l0aG9uX18o c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICpf X3B5eF92X3NlbGYpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X3N0YXRlID0gMDsKLSsgIFB5T2Jq ZWN0ICpfX3B5eF92X19kaWN0ID0gMDsKLSsgIGludCBfX3B5eF92X3VzZV9zZXRzdGF0ZTsKLSAg IFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25z Ci0gICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSAgIGludCBfX3B5eF90XzI7Ci0tICBQ eU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKLSsgIGludCBfX3B5eF90XzM7Ci0gICBQeU9iamVj dCAqX19weXhfdF80ID0gTlVMTDsKLSAgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwotLSAg aW50IF9fcHl4X3RfNjsKLS0gIGNoYXIgKl9fcHl4X3RfNzsKLSAgIGludCBfX3B5eF9saW5lbm8g PSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotICAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImluaXRfZ2wiLCAw KTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X2V4dHMpOwotLQotLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjgzMwotLSAqIAotLSAqICAgICBkZWYgaW5pdF9nbChzZWxmLCBl eHRzLCBnZXRfcHJvY19hZGRyZXNzKToKLS0gKiAgICAgICAgIGV4dHMgPSBfc3RyZW5jKGV4dHMp IGlmIGV4dHMgaXMgbm90IE5vbmUgZWxzZSBOb25lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgICAgIGNkZWYgY2hhciogZXh0c2MgPSBOVUxMCi0tICogICAgICAgICBpZiBl eHRzIGlzIG5vdCBOb25lOgotLSAqLwotLSAgX19weXhfdF8yID0gKF9fcHl4X3ZfZXh0cyAhPSBQ eV9Ob25lKTsKLS0gIGlmICgoX19weXhfdF8yICE9IDApKSB7Ci0tICAgIF9fUHl4X0dldE1vZHVs ZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgODMzLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNCk7Ci0tICAgIF9fcHl4X3RfNSA9IE5VTEw7Ci0tICAgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF80KSkp IHsKLS0gICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzQpOwotLSAg ICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewotLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9u ID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNCk7Ci0tICAgICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF81KTsKLS0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAg ICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNCwgZnVuY3Rpb24pOwotLSAgICAgIH0KLS0gICAg fQotLSAgICBfX3B5eF90XzMgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJn cyhfX3B5eF90XzQsIF9fcHl4X3RfNSwgX19weXhfdl9leHRzKSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF80LCBfX3B5eF92X2V4dHMpOwotLSAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0tICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkg X19QWVhfRVJSKDAsIDgzMywgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzMpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLS0g ICAgX19weXhfdF8xID0gX19weXhfdF8zOwotLSAgICBfX3B5eF90XzMgPSAwOwotLSAgfSBlbHNl IHsKLS0gICAgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotLSAgICBfX3B5eF90XzEgPSBQeV9Ob25l OwotLSAgfQotLSAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X2V4dHMsIF9fcHl4X3RfMSk7Ci0t ICBfX3B5eF90XzEgPSAwOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNl X2N5dGhvbl9fIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 ODM0Ci0tICogICAgIGRlZiBpbml0X2dsKHNlbGYsIGV4dHMsIGdldF9wcm9jX2FkZHJlc3MpOgot LSAqICAgICAgICAgZXh0cyA9IF9zdHJlbmMoZXh0cykgaWYgZXh0cyBpcyBub3QgTm9uZSBlbHNl IE5vbmUKLS0gKiAgICAgICAgIGNkZWYgY2hhciogZXh0c2MgPSBOVUxMICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGlmIGV4dHMgaXMgbm90IE5vbmU6Ci0tICogICAg ICAgICAgICAgZXh0c2MgPSBleHRzCi0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo1Ci0rICogICAg IGNkZWYgb2JqZWN0IF9kaWN0Ci0rICogICAgIGNkZWYgYmludCB1c2Vfc2V0c3RhdGUKLSsgKiAg ICAgc3RhdGUgPSAoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIF9kaWN0 ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKQotKyAqICAgICBpZiBfZGljdCBpcyBu b3QgTm9uZToKLSAgKi8KLS0gIF9fcHl4X3ZfZXh0c2MgPSBOVUxMOwotKyAgX19QeXhfSU5DUkVG KF9fcHl4X2VtcHR5X3R1cGxlKTsKLSsgIF9fcHl4X3Zfc3RhdGUgPSBfX3B5eF9lbXB0eV90dXBs ZTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MzUKLS0gKiAgICAg ICAgIGV4dHMgPSBfc3RyZW5jKGV4dHMpIGlmIGV4dHMgaXMgbm90IE5vbmUgZWxzZSBOb25lCi0t ICogICAgICAgICBjZGVmIGNoYXIqIGV4dHNjID0gTlVMTAotLSAqICAgICAgICAgaWYgZXh0cyBp cyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAg IGV4dHNjID0gZXh0cwotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLSsgIC8qICIodHJlZSBmcmFn bWVudCkiOjYKLSsgKiAgICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQotKyAqICAgICBzdGF0ZSA9 ICgpCi0rICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgot KyAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKLSAgKi8KLS0gIF9fcHl4X3RfMiA9IChfX3B5 eF92X2V4dHMgIT0gUHlfTm9uZSk7Ci0tICBfX3B5eF90XzYgPSAoX19weXhfdF8yICE9IDApOwot LSAgaWYgKF9fcHl4X3RfNikgewotKyAgX19weXhfdF8xID0gX19QeXhfR2V0QXR0cjMoKChQeU9i amVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19kaWN0LCBQeV9Ob25lKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIF9fcHl4X3ZfX2RpY3QgPSBfX3B5eF90XzE7Ci0rICBf X3B5eF90XzEgPSAwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 ODM2Ci0tICogICAgICAgICBjZGVmIGNoYXIqIGV4dHNjID0gTlVMTAotLSAqICAgICAgICAgaWYg ZXh0cyBpcyBub3QgTm9uZToKLS0gKiAgICAgICAgICAgICBleHRzYyA9IGV4dHMgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAg ICAgICBlcnIgPSBtcHZfb3BlbmdsX2NiX2luaXRfZ2woc2VsZi5fY3R4LCBleHRzYywgJl9jX2dl dHByb2NhZGRyZXNzLAotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6NwotKyAqICAgICBzdGF0ZSA9 ICgpCi0rICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKQotKyAq ICAgICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKLSsgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9 IFRydWUKLSAgKi8KLS0gICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfQXNXcml0YWJsZVN0 cmluZyhfX3B5eF92X2V4dHMpOyBpZiAodW5saWtlbHkoKCFfX3B5eF90XzcpICYmIFB5RXJyX09j Y3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgODM2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19weXhf dl9leHRzYyA9IF9fcHl4X3RfNzsKLSsgIF9fcHl4X3RfMiA9IChfX3B5eF92X19kaWN0ICE9IFB5 X05vbmUpOwotKyAgX19weXhfdF8zID0gKF9fcHl4X3RfMiAhPSAwKTsKLSsgIGlmIChfX3B5eF90 XzMpIHsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgzNQotLSAq ICAgICAgICAgZXh0cyA9IF9zdHJlbmMoZXh0cykgaWYgZXh0cyBpcyBub3QgTm9uZSBlbHNlIE5v bmUKLS0gKiAgICAgICAgIGNkZWYgY2hhciogZXh0c2MgPSBOVUxMCi0tICogICAgICAgICBpZiBl eHRzIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAg ICAgICAgZXh0c2MgPSBleHRzCi0tICogICAgICAgICB3aXRoIG5vZ2lsOgotKyAgICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjo4Ci0rICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18n LCBOb25lKQotKyAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKLSsgKiAgICAgICAgIHN0YXRl ICs9IChfZGljdCwpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHVz ZV9zZXRzdGF0ZSA9IFRydWUKLSsgKiAgICAgZWxzZToKLSAgKi8KLS0gIH0KLSsgICAgX19weXhf dF8xID0gUHlUdXBsZV9OZXcoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDEsIDgsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsg ICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfX2RpY3QpOwotKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4 X3ZfX2RpY3QpOwotKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMCwgX19weXhfdl9f ZGljdCk7Ci0rICAgIF9fcHl4X3RfNCA9IFB5TnVtYmVyX0luUGxhY2VBZGQoX19weXhfdl9zdGF0 ZSwgX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMSwgOCwg X19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF92X3N0YXRlLCAoKFB5T2JqZWN0KilfX3B5eF90XzQpKTsKLSsgICAgX19weXhfdF80 ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MzcKLS0gKiAg ICAgICAgIGlmIGV4dHMgaXMgbm90IE5vbmU6Ci0tICogICAgICAgICAgICAgZXh0c2MgPSBleHRz Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9pbml0X2dsKHNlbGYuX2N0eCwgZXh0 c2MsICZfY19nZXRwcm9jYWRkcmVzcywKLS0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPHZvaWQgKj5nZXRfcHJvY19hZGRyZXNzKQotKyAgICAvKiAiKHRyZWUgZnJh Z21lbnQpIjo5Ci0rICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgotKyAqICAgICAgICAgc3Rh dGUgKz0gKF9kaWN0LCkKLSsgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBlbHNlOgotKyAqICAgICAgICAgdXNlX3NldHN0 YXRlID0gRmFsc2UKLSAgKi8KLS0gIHsKLS0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAg ICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKLS0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKLS0gICAg ICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0tICAgICAgI2VuZGlmCi0tICAgICAgLyp0cnk6 Ki8gewotKyAgICBfX3B5eF92X3VzZV9zZXRzdGF0ZSA9IDE7Ci0gCi0tICAgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODM4Ci0tICogICAgICAgICAgICAgZXh0c2MgPSBl eHRzCi0tICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9v cGVuZ2xfY2JfaW5pdF9nbChzZWxmLl9jdHgsIGV4dHNjLCAmX2NfZ2V0cHJvY2FkZHJlc3MsICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgPHZvaWQgKj5nZXRfcHJvY19hZGRyZXNzKQotLSAqICAgICAgICAgaWYg ZXJyIDwgMDoKLSsgICAgLyogIih0cmVlIGZyYWdtZW50KSI6NwotKyAqICAgICBzdGF0ZSA9ICgp Ci0rICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKQotKyAqICAg ICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKLSsgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRy dWUKLSAgKi8KLS0gICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X29wZW5nbF9jYl9pbml0X2dsKF9f cHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9leHRzYywgKCZfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fY19nZXRwcm9jYWRkcmVzcyksICgodm9pZCAqKV9fcHl4X3ZfZ2V0X3Byb2NfYWRk cmVzcykpOwotLSAgICAgIH0KLSsgICAgZ290byBfX3B5eF9MMzsKLSsgIH0KLSAKLS0gICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODM3Ci0tICogICAgICAgICBpZiBleHRz IGlzIG5vdCBOb25lOgotLSAqICAgICAgICAgICAgIGV4dHNjID0gZXh0cwotLSAqICAgICAgICAg d2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAg IGVyciA9IG1wdl9vcGVuZ2xfY2JfaW5pdF9nbChzZWxmLl9jdHgsIGV4dHNjLCAmX2NfZ2V0cHJv Y2FkZHJlc3MsCi0tICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2 b2lkICo+Z2V0X3Byb2NfYWRkcmVzcykKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjExCi0rICog ICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCi0rICogICAgIGVsc2U6Ci0rICogICAgICAgICB1 c2Vfc2V0c3RhdGUgPSBGYWxzZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAg IGlmIHVzZV9zZXRzdGF0ZToKLSsgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9SZW5k ZXJGcmFtZUluZm8sICh0eXBlKHNlbGYpLCAweGQ0MWQ4Y2QsIE5vbmUpLCBzdGF0ZQotICAqLwot LSAgICAgIC8qZmluYWxseToqLyB7Ci0tICAgICAgICAvKm5vcm1hbCBleGl0OiovewotLSAgICAg ICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQo KTsKLS0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotLSAgICAgICAgICAjZW5kaWYKLS0gICAg ICAgICAgZ290byBfX3B5eF9MNjsKLS0gICAgICAgIH0KLS0gICAgICAgIF9fcHl4X0w2OjsKLS0g ICAgICB9Ci0rICAvKmVsc2UqLyB7Ci0rICAgIF9fcHl4X3ZfdXNlX3NldHN0YXRlID0gMDsKLSAg IH0KLSsgIF9fcHl4X0wzOjsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo4NDAKLS0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2NiX2luaXRfZ2woc2VsZi5f Y3R4LCBleHRzYywgJl9jX2dldHByb2NhZGRyZXNzLAotLSAqICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA8dm9pZCAqPmdldF9wcm9jX2FkZHJlc3MpCi0tICogICAgICAg ICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAg ICAgcmFpc2UgTVBWRXJyb3IoZXJyKQotLSAqIAotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIK LSsgKiAgICAgZWxzZToKLSsgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IEZhbHNlCi0rICogICAg IGlmIHVzZV9zZXRzdGF0ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAg ICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4 ZDQxZDhjZCwgTm9uZSksIHN0YXRlCi0rICogICAgIGVsc2U6Ci0gICovCi0tICBfX3B5eF90XzYg PSAoKF9fcHl4X3ZfZXJyIDwgMCkgIT0gMCk7Ci0tICBpZiAodW5saWtlbHkoX19weXhfdF82KSkg ewotKyAgX19weXhfdF8zID0gKF9fcHl4X3ZfdXNlX3NldHN0YXRlICE9IDApOwotKyAgaWYgKF9f cHl4X3RfMykgewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODQx Ci0tICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2b2lkICo+Z2V0 X3Byb2NfYWRkcmVzcykKLS0gKiAgICAgICAgIGlmIGVyciA8IDA6Ci0tICogICAgICAgICAgICAg cmFpc2UgTVBWRXJyb3IoZXJyKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogCi0t ICogICAgICAgICBzZWxmLmluaXRlZCA9IFRydWUKLSsgICAgLyogIih0cmVlIGZyYWdtZW50KSI6 MTMKLSsgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IEZhbHNlCi0rICogICAgIGlmIHVzZV9zZXRz dGF0ZToKLSsgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8s ICh0eXBlKHNlbGYpLCAweGQ0MWQ4Y2QsIE5vbmUpLCBzdGF0ZSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgIGVsc2U6Ci0rICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNr bGVfUmVuZGVyRnJhbWVJbmZvLCAodHlwZShzZWxmKSwgMHhkNDFkOGNkLCBzdGF0ZSkKLSAgKi8K LS0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzMsIF9fcHl4X25fc19NUFZF cnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDg0MSwgX19weXhf TDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgICBfX3B5eF90XzQg PSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhf dF80KSkgX19QWVhfRVJSKDAsIDg0MSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X1hERUNS RUYoX19weXhfcik7Ci0rICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBf X3B5eF9uX3NfcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyk7IGlmICh1bmxpa2VseSghX19w eXhfdF80KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNCk7Ci0tICAgIF9fcHl4X3RfNSA9IE5VTEw7Ci0tICAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsK LS0gICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzMpOwotLSAgICAg IGlmIChsaWtlbHkoX19weXhfdF81KSkgewotLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0g UHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMyk7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYo X19weXhfdF81KTsKLS0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgICBf X1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywgZnVuY3Rpb24pOwotLSAgICAgIH0KLS0gICAgfQot LSAgICBfX3B5eF90XzEgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhf X3B5eF90XzMsIF9fcHl4X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF8zLCBfX3B5eF90XzQpOwotLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7 IF9fcHl4X3RfNSA9IDA7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQg PSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4NDEsIF9f cHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQotICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7Ci0tICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7Ci0tICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgICBfX1BZWF9FUlIo MCwgODQxLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilQ eV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOwotKyAgICBfX1B5eF9HSVZFUkVG KCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOwotKyAg ICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMCwgKChQeU9iamVjdCAqKVB5X1RZUEUoKChQ eU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7Ci0rICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRf MjIyNDE5MTQ5KTsKLSsgICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRfMjIyNDE5MTQ5KTsKLSsg ICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4X2ludF8yMjI0MTkxNDkpOwot KyAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0rICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7 Ci0rICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAyLCBQeV9Ob25lKTsKLSsgICAgX19w eXhfdF81ID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhf RVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7 Ci0rICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF80KTsKLSsgICAgUHlUdXBsZV9TRVRfSVRFTShf X3B5eF90XzUsIDAsIF9fcHl4X3RfNCk7Ci0rICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsK LSsgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzUsIDEsIF9fcHl4X3RfMSk7Ci0rICAgIF9f UHl4X0lOQ1JFRihfX3B5eF92X3N0YXRlKTsKLSsgICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3N0 YXRlKTsKLSsgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzUsIDIsIF9fcHl4X3Zfc3RhdGUp OwotKyAgICBfX3B5eF90XzQgPSAwOwotKyAgICBfX3B5eF90XzEgPSAwOwotKyAgICBfX3B5eF9y ID0gX19weXhfdF81OwotKyAgICBfX3B5eF90XzUgPSAwOwotKyAgICBnb3RvIF9fcHl4X0wwOwot IAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODQwCi0tICogICAgICAg ICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9pbml0X2dsKHNlbGYuX2N0eCwgZXh0c2MsICZfY19n ZXRwcm9jYWRkcmVzcywKLS0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPHZvaWQgKj5nZXRfcHJvY19hZGRyZXNzKQotLSAqICAgICAgICAgaWYgZXJyIDwgMDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9y KGVycikKLS0gKiAKLSsgICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKLSsgKiAgICAgZWxzZToK LSsgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IEZhbHNlCi0rICogICAgIGlmIHVzZV9zZXRzdGF0 ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIF9fcHl4 X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwgTm9uZSks IHN0YXRlCi0rICogICAgIGVsc2U6Ci0gICovCi0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6ODQzCi0tICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJy KQotLSAqIAotLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAKLS0gKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwg Y2IpOgotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTUKLSsgKiAgICAgICAgIHJldHVybiBfX3B5 eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8sICh0eXBlKHNlbGYpLCAweGQ0MWQ4Y2QsIE5vbmUp LCBzdGF0ZQotKyAqICAgICBlbHNlOgotKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xl X1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwgc3RhdGUpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBf X3B5eF9zdGF0ZSk6Ci0rICogICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0 X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQotICAqLwotLSAgX19weXhfdl9zZWxmLT5pbml0ZWQg PSAxOwotKyAgLyplbHNlKi8gewotKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotKyAgICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNSwgX19weXhfbl9zX3B5eF91bnBpY2ts ZV9SZW5kZXJGcmFtZUluZm8pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigx LCAxNSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOwotKyAg ICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKLSsgICAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3Qg KilfX3B5eF92X3NlbGYpKSkpOwotKyAgICBfX1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKilQeV9U WVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOwotKyAgICBQeVR1cGxlX1NFVF9JVEVN KF9fcHl4X3RfMSwgMCwgKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zf c2VsZikpKSk7Ci0rICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMjIyNDE5MTQ5KTsKLSsgICAg X19QeXhfR0lWRVJFRihfX3B5eF9pbnRfMjIyNDE5MTQ5KTsKLSsgICAgUHlUdXBsZV9TRVRfSVRF TShfX3B5eF90XzEsIDEsIF9fcHl4X2ludF8yMjI0MTkxNDkpOwotKyAgICBfX1B5eF9JTkNSRUYo X19weXhfdl9zdGF0ZSk7Ci0rICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zdGF0ZSk7Ci0rICAg IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAyLCBfX3B5eF92X3N0YXRlKTsKLSsgICAgX19w eXhfdF80ID0gUHlUdXBsZV9OZXcoMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhf RVJSKDEsIDE1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7 Ci0rICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF81KTsKLSsgICAgUHlUdXBsZV9TRVRfSVRFTShf X3B5eF90XzQsIDAsIF9fcHl4X3RfNSk7Ci0rICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsK LSsgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQsIDEsIF9fcHl4X3RfMSk7Ci0rICAgIF9f cHl4X3RfNSA9IDA7Ci0rICAgIF9fcHl4X3RfMSA9IDA7Ci0rICAgIF9fcHl4X3IgPSBfX3B5eF90 XzQ7Ci0rICAgIF9fcHl4X3RfNCA9IDA7Ci0rICAgIGdvdG8gX19weXhfTDA7Ci0rICB9Ci0gCi0t ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODMyCi0tICogICAgICAgICB3YXJu aW5ncy53YXJuKCJPcGVuR0xDb250ZXh0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBzd2l0Y2ggdG8g UmVuZGVyQ29udGV4dCIsIERlcHJlY2F0aW9uV2FybmluZykKLS0gKiAKLS0gKiAgICAgZGVmIGlu aXRfZ2woc2VsZiwgZXh0cywgZ2V0X3Byb2NfYWRkcmVzcyk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgIGV4dHMgPSBfc3RyZW5jKGV4dHMpIGlmIGV4dHMgaXMgbm90 IE5vbmUgZWxzZSBOb25lCi0tICogICAgICAgICBjZGVmIGNoYXIqIGV4dHNjID0gTlVMTAotKyAg LyogIih0cmVlIGZyYWdtZW50KSI6MQotKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBjZGVmIHR1cGxlIHN0YXRlCi0r ICogICAgIGNkZWYgb2JqZWN0IF9kaWN0Ci0gICovCi0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNv ZGUgKi8KLS0gIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0tICBn b3RvIF9fcHl4X0wwOwotICAgX19weXhfTDFfZXJyb3I6OwotICAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzEpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOwotICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzQpOwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOwotLSAgX19QeXhfQWRkVHJh Y2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuT3BlbkdMQ29udGV4dC5pbml0X2dsIiwgX19weXhf Y2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX1B5eF9BZGRUcmFj ZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJGcmFtZUluZm8uX19yZWR1Y2VfY3l0aG9u X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSAgIF9f cHl4X3IgPSBOVUxMOwotICAgX19weXhfTDA6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2V4 dHMpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X3N0YXRlKTsKLSsgIF9fUHl4X1hERUNSRUYo X19weXhfdl9fZGljdCk7Ci0gICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLSAgIF9fUHl4X1Jl Zk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NDUKLS0gKiAgICAgICAgIHNlbGYuaW5pdGVk ID0gVHJ1ZQotLSAqIAotLSAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYudXBkYXRlX2Ni ID0gY2IKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0rLyogIih0cmVlIGZyYWdtZW50KSI6MTYK LSsgKiAgICAgZWxzZToKLSsgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9SZW5kZXJG cmFtZUluZm8sICh0eXBlKHNlbGYpLCAweGQ0MWQ4Y2QsIHN0YXRlKQotKyAqIGRlZiBfX3NldHN0 YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZShz ZWxmLCBfX3B5eF9zdGF0ZSkKLSAgKi8KLSAKLSAvKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4 dF81c2V0X3VwZGF0ZV9jYWxsYmFjayhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfdl9jYik7IC8qcHJvdG8qLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF81c2V0X3VwZGF0ZV9jYWxsYmFjayhQeU9i amVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9jYikgewotK3N0YXRpYyBQeU9i amVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE1UmVuZGVyRnJhbWVJbmZvXzNf X3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X19fcHl4X3N0YXRlKTsgLypwcm90byovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fM19fc2V0c3RhdGVfY3l0aG9u X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUp IHsKLSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X3VwZGF0ZV9jYWxsYmFjayAo d3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNPcGVuR0xDb250ZXh0XzRzZXRfdXBkYXRlX2NhbGxiYWNrKCgoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksICgo UHlPYmplY3QgKilfX3B5eF92X2NiKSk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19zZXRzdGF0ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fMl9fc2V0c3RhdGVfY3l0 aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFt ZUluZm8gKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkp OwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0gICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfNHNldF91cGRh dGVfY2FsbGJhY2soc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdM Q29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9jYikgewotK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE1UmVuZGVyRnJhbWVJbmZv XzJfX3NldHN0YXRlX2N5dGhvbl9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckZyYW1lSW5mbyAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5 eF9zdGF0ZSkgewotICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfdXBkYXRl X2NhbGxiYWNrIiwgMCk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 ODQ2Ci0tICogCi0tICogICAgIGRlZiBzZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKToKLS0g KiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBtcHZfb3BlbmdsX2Ni X3NldF91cGRhdGVfY2FsbGJhY2soc2VsZi5fY3R4LCAmX2NfdXBkYXRlY2IsIDx2b2lkICo+Y2Ip Ci0tICovCi0tICBfX1B5eF9JTkNSRUYoX19weXhfdl9jYik7Ci0tICBfX1B5eF9HSVZFUkVGKF9f cHl4X3ZfY2IpOwotLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+dXBkYXRlX2NiKTsKLS0g IF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnVwZGF0ZV9jYik7Ci0tICBfX3B5eF92X3NlbGYt PnVwZGF0ZV9jYiA9IF9fcHl4X3ZfY2I7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODQ3Ci0tICogICAgIGRlZiBzZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKToK LS0gKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKLS0gKiAgICAgICAgIHdpdGggbm9naWw6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBtcHZfb3Blbmds X2NiX3NldF91cGRhdGVfY2FsbGJhY2soc2VsZi5fY3R4LCAmX2NfdXBkYXRlY2IsIDx2b2lkICo+ Y2IpCi0tICogCi0tICovCi0tICB7Ci0tICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAg UHlUaHJlYWRTdGF0ZSAqX3NhdmU7Ci0tICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0tICAgICAg X19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwotLSAgICAgICNlbmRpZgotLSAgICAgIC8qdHJ5Oiov IHsKLS0KLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NDgKLS0g KiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0t ICogICAgICAgICAgICAgbXB2X29wZW5nbF9jYl9zZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYuX2N0 eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAqPmNiKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogCi0tICogICAgIGRlZiBkcmF3KHNlbGYsIGZibywgdywgaCk6Ci0tICovCi0tICAgICAg ICBtcHZfb3BlbmdsX2NiX3NldF91cGRhdGVfY2FsbGJhY2soX19weXhfdl9zZWxmLT5fY3R4LCAo Jl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX3VwZGF0ZWNiKSwgKCh2b2lkICopX19w eXhfdl9jYikpOwotLSAgICAgIH0KLSsgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotKyAg aW50IF9fcHl4X2xpbmVubyA9IDA7Ci0rICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5V TEw7Ci0rICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyIsIDApOwotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo4NDcKLS0gKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJhY2so c2VsZiwgY2IpOgotLSAqICAgICAgICAgc2VsZi51cGRhdGVfY2IgPSBjYgotLSAqICAgICAgICAg d2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAg IG1wdl9vcGVuZ2xfY2Jfc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLl9jdHgsICZfY191cGRhdGVj YiwgPHZvaWQgKj5jYikKLS0gKiAKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjE3Ci0rICogICAg ICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCAodHlwZShzZWxmKSwg MHhkNDFkOGNkLCBzdGF0ZSkKLSsgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5 eF9zdGF0ZSk6Ci0rICogICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0 YXRlKHNlbGYsIF9fcHl4X3N0YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICov Ci0tICAgICAgLypmaW5hbGx5OiovIHsKLS0gICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97Ci0tICAg ICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0Zvcmdl dCgpOwotLSAgICAgICAgICBQeV9CTE9DS19USFJFQURTCi0tICAgICAgICAgICNlbmRpZgotLSAg ICAgICAgICBnb3RvIF9fcHl4X0w1OwotLSAgICAgICAgfQotLSAgICAgICAgX19weXhfTDU6Owot LSAgICAgIH0KLS0gIH0KLSsgIGlmICghKGxpa2VseShQeVR1cGxlX0NoZWNrRXhhY3QoX19weXhf dl9fX3B5eF9zdGF0ZSkpfHwoKF9fcHl4X3ZfX19weXhfc3RhdGUpID09IFB5X05vbmUpfHwoUHlF cnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkV4cGVjdGVkICUuMTZzLCBnb3QgJS4yMDBzIiwg InR1cGxlIiwgUHlfVFlQRShfX3B5eF92X19fcHl4X3N0YXRlKS0+dHBfbmFtZSksIDApKSkgX19Q WVhfRVJSKDEsIDE3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0 YXRlKF9fcHl4X3Zfc2VsZiwgKChQeU9iamVjdCopX19weXhfdl9fX3B5eF9zdGF0ZSkpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFfZXJyb3IpCi0r ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg0 NQotLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCi0tICogCi0tICogICAgIGRlZiBzZXRf dXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgc2VsZi51cGRhdGVfY2IgPSBjYgotLSAqICAgICAgICAgd2l0aCBub2dpbDoK LSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjE2Ci0rICogICAgIGVsc2U6Ci0rICogICAgICAgICBy ZXR1cm4gX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCAodHlwZShzZWxmKSwgMHhkNDFk OGNkLCBzdGF0ZSkKLSsgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0 ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgX19weXhfdW5waWNrbGVf UmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCi0gICovCi0gCi0g ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9J TkNSRUYoUHlfTm9uZSk7Ci0rICBnb3RvIF9fcHl4X0wwOwotKyAgX19weXhfTDFfZXJyb3I6Owot KyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuUmVuZGVyRnJhbWVJbmZvLl9fc2V0c3RhdGVfY3l0aG9uX18iLCBfX3B5 eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fcHl4X3IgPSBO VUxMOwotKyAgX19weXhfTDA6OwotICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0v KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODUwCi0tICogICAgICAgICAgICAgbXB2 X29wZW5nbF9jYl9zZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8 dm9pZCAqPmNiKQotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTAKLSsgKiAg ICAgICAgIGJpbnQgaW5pdGVkCi0gICogCi0tICogICAgIGRlZiBkcmF3KHNlbGYsIGZibywgdywg aCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGNkZWY6Ci0tICog ICAgICAgICAgICAgaW50IGZib2MgPSBmYm8KLSsgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1w diwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgICAgICAgYXBp X3R5cGUsCi0rICogICAgICAgICAgICAgICAgICBvcGVuZ2xfaW5pdF9wYXJhbXM9Tm9uZSwKLSAg Ki8KLSAKLSAvKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF83ZHJhdyhQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAv KnByb3RvKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM09wZW5HTENvbnRleHRfN2RyYXcoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7Ci0tICBQeU9iamVjdCAqX19weXhf dl9mYm8gPSAwOwotLSAgUHlPYmplY3QgKl9fcHl4X3ZfdyA9IDA7Ci0tICBQeU9iamVjdCAqX19w eXhfdl9oID0gMDsKLStzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfMV9faW5pdF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLwotK3N0YXRpYyBp bnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xX19pbml0 X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0 ICpfX3B5eF9rd2RzKSB7Ci0rICBQeU9iamVjdCAqX19weXhfdl9tcHYgPSAwOwotKyAgUHlPYmpl Y3QgKl9fcHl4X3ZfYXBpX3R5cGUgPSAwOwotKyAgUHlPYmplY3QgKl9fcHl4X3Zfb3BlbmdsX2lu aXRfcGFyYW1zID0gMDsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X2FkdmFuY2VkX2NvbnRyb2wgPSAw OwotKyAgUHlPYmplY3QgKl9fcHl4X3ZfeDExX2Rpc3BsYXkgPSAwOwotKyAgUHlPYmplY3QgKl9f cHl4X3Zfd2xfZGlzcGxheSA9IDA7Ci0rICBQeU9iamVjdCAqX19weXhfdl9kcm1fZGlzcGxheSA9 IDA7Ci0rICBQeU9iamVjdCAqX19weXhfdl9kcm1fb3NkX3NpemUgPSAwOwotICAgaW50IF9fcHl4 X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0gICBp bnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0rICBpbnQg X19weXhfcjsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiZHJhdyAod3JhcHBlcikiLCAwKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfX2luaXRfXyAod3JhcHBlcikiLCAwKTsKLSAgIHsKLS0gICAgc3RhdGljIFB5 T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfZmJvLCZfX3B5eF9uX3Nf dywmX19weXhfbl9zX2gsMH07Ci0tICAgIFB5T2JqZWN0KiB2YWx1ZXNbM10gPSB7MCwwLDB9Owot LSAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKLS0gICAgICBQeV9zc2l6ZV90IGt3X2Fy Z3M7Ci0tICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUo X19weXhfYXJncyk7Ci0tICAgICAgc3dpdGNoIChwb3NfYXJncykgewotLSAgICAgICAgY2FzZSAg MzogdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsKLS0gICAgICAg IENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 Ci0tICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2Fy Z3MsIDApOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgMDog YnJlYWs7Ci0tICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwot LSAgICAgIH0KLS0gICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7Ci0tICAg ICAgc3dpdGNoIChwb3NfYXJncykgewotLSAgICAgICAgY2FzZSAgMDoKLS0gICAgICAgIGlmIChs aWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9f cHl4X25fc19mYm8pKSAhPSAwKSkga3dfYXJncy0tOwotLSAgICAgICAgZWxzZSBnb3RvIF9fcHl4 X0w1X2FyZ3R1cGxlX2Vycm9yOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAg ICAgY2FzZSAgMToKLS0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGlj dF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc193KSkgIT0gMCkpIGt3X2FyZ3MtLTsK LS0gICAgICAgIGVsc2UgewotLSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgi ZHJhdyIsIDEsIDMsIDMsIDEpOyBfX1BZWF9FUlIoMCwgODUwLCBfX3B5eF9MM19lcnJvcikKLS0g ICAgICAgIH0KLS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDI6 Ci0tICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMl0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0 cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfaCkpICE9IDApKSBrd19hcmdzLS07Ci0tICAgICAgICBl bHNlIHsKLS0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoImRyYXciLCAxLCAz LCAzLCAyKTsgX19QWVhfRVJSKDAsIDg1MCwgX19weXhfTDNfZXJyb3IpCi0tICAgICAgICB9Ci0t ICAgICAgfQotLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKLS0gICAgICAgIGlm ICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhf cHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgImRyYXciKSA8IDApKSBfX1BZWF9FUlIo MCwgODUwLCBfX3B5eF9MM19lcnJvcikKLS0gICAgICB9Ci0tICAgIH0gZWxzZSBpZiAoUHlUdXBs ZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAzKSB7Ci0tICAgICAgZ290byBfX3B5eF9MNV9hcmd0 dXBsZV9lcnJvcjsKLS0gICAgfSBlbHNlIHsKLS0gICAgICB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dF VF9JVEVNKF9fcHl4X2FyZ3MsIDApOwotLSAgICAgIHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lU RU0oX19weXhfYXJncywgMSk7Ci0tICAgICAgdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShf X3B5eF9hcmdzLCAyKTsKLS0gICAgfQotLSAgICBfX3B5eF92X2ZibyA9IHZhbHVlc1swXTsKLS0g ICAgX19weXhfdl93ID0gdmFsdWVzWzFdOwotLSAgICBfX3B5eF92X2ggPSB2YWx1ZXNbMl07Ci0t ICB9Ci0tICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOwotLSAgX19weXhf TDVfYXJndHVwbGVfZXJyb3I6OwotLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoImRyYXci LCAxLCAzLCAzLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDg1 MCwgX19weXhfTDNfZXJyb3IpCi0tICBfX3B5eF9MM19lcnJvcjo7Ci0tICBfX1B5eF9BZGRUcmFj ZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5PcGVuR0xDb250ZXh0LmRyYXciLCBfX3B5eF9jbGlu ZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIE5VTEw7Ci0tICBfX3B5eF9MNF9hcmd1bWVudF91bnBh Y2tpbmdfZG9uZTo7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzT3BlbkdMQ29udGV4dF82ZHJhdygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X09wZW5HTENvbnRleHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X2ZibywgX19weXhf dl93LCBfX3B5eF92X2gpOwotKyAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVz W10gPSB7Jl9fcHl4X25fc19tcHYsJl9fcHl4X25fc19hcGlfdHlwZSwmX19weXhfbl9zX29wZW5n bF9pbml0X3BhcmFtcywmX19weXhfbl9zX2FkdmFuY2VkX2NvbnRyb2wsJl9fcHl4X25fc194MTFf ZGlzcGxheSwmX19weXhfbl9zX3dsX2Rpc3BsYXksJl9fcHl4X25fc19kcm1fZGlzcGxheSwmX19w eXhfbl9zX2RybV9vc2Rfc2l6ZSwwfTsKLSsgICAgUHlPYmplY3QqIHZhbHVlc1s4XSA9IHswLDAs MCwwLDAsMCwwLDB9OwotIAotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLS0KLS1zdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRl eHRfNmRyYXcoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29u dGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9mYm8sIFB5T2JqZWN0ICpfX3B5 eF92X3csIFB5T2JqZWN0ICpfX3B5eF92X2gpIHsKLS0gIGludCBfX3B5eF92X2Zib2M7Ci0tICBp bnQgX19weXhfdl93YzsKLS0gIGludCBfX3B5eF92X2hjOwotLSAgaW50IF9fcHl4X3ZfZXJyOwot LSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlv bnMKLS0gIGludCBfX3B5eF90XzE7Ci0tICBpbnQgX19weXhfdF8yOwotLSAgUHlPYmplY3QgKl9f cHl4X3RfMyA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLS0gIFB5T2Jq ZWN0ICpfX3B5eF90XzUgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7Ci0t ICBpbnQgX19weXhfbGluZW5vID0gMDsKLS0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKLS0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJkcmF3IiwgMCk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6ODUyCi0tICogICAgIGRlZiBkcmF3KHNlbGYsIGZibywgdywgaCk6Ci0tICogICAgICAgICBj ZGVmOgotLSAqICAgICAgICAgICAgIGludCBmYm9jID0gZmJvICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBpbnQgd2MgPSB3Ci0tICogICAgICAgICAgICAgaW50 IGhjID0gaAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTUyCi0rICog ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtcHYsCi0rICogICAgICAgICAgICAgICAgICBhcGlfdHlw ZSwKLSsgKiAgICAgICAgICAgICAgICAgIG9wZW5nbF9pbml0X3BhcmFtcz1Ob25lLCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgICBhZHZhbmNlZF9jb250 cm9sPUZhbHNlLAotKyAqICAgICAgICAgICAgICAgICAgeDExX2Rpc3BsYXk9Tm9uZSwKLSAgKi8K LS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF92X2Zibyk7IGlmICh1bmxp a2VseSgoX19weXhfdF8xID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9F UlIoMCwgODUyLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fcHl4X3ZfZmJvYyA9IF9fcHl4X3RfMTsK LSsgICAgdmFsdWVzWzJdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOwotIAotLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg1MwotLSAqICAgICAgICAgY2RlZjoKLS0gKiAgICAg ICAgICAgICBpbnQgZmJvYyA9IGZibwotLSAqICAgICAgICAgICAgIGludCB3YyA9IHcgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGludCBoYyA9IGgKLS0gKiAg ICAgICAgIHdpdGggbm9naWw6Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5NTMKLSsgKiAgICAgICAgICAgICAgICAgIGFwaV90eXBlLAotKyAqICAgICAgICAgICAgICAg ICAgb3BlbmdsX2luaXRfcGFyYW1zPU5vbmUsCi0rICogICAgICAgICAgICAgICAgICBhZHZhbmNl ZF9jb250cm9sPUZhbHNlLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAg ICAgICAgICAgICB4MTFfZGlzcGxheT1Ob25lLAotKyAqICAgICAgICAgICAgICAgICAgd2xfZGlz cGxheT1Ob25lLAotICAqLwotLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4 X3Zfdyk7IGlmICh1bmxpa2VseSgoX19weXhfdF8xID09IChpbnQpLTEpICYmIFB5RXJyX09jY3Vy cmVkKCkpKSBfX1BZWF9FUlIoMCwgODUzLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fcHl4X3Zfd2Mg PSBfX3B5eF90XzE7Ci0rICAgIHZhbHVlc1szXSA9ICgoUHlPYmplY3QgKilQeV9GYWxzZSk7Ci0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODU0Ci0tICogICAgICAgICAg ICAgaW50IGZib2MgPSBmYm8KLS0gKiAgICAgICAgICAgICBpbnQgd2MgPSB3Ci0tICogICAgICAg ICAgICAgaW50IGhjID0gaCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAg ICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vcGVuZ2xfY2JfZHJhdyhz ZWxmLl9jdHgsIGZib2MsIHdjLCBoYykKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk1NAotKyAqICAgICAgICAgICAgICAgICAgb3BlbmdsX2luaXRfcGFyYW1zPU5vbmUs Ci0rICogICAgICAgICAgICAgICAgICBhZHZhbmNlZF9jb250cm9sPUZhbHNlLAotKyAqICAgICAg ICAgICAgICAgICAgeDExX2Rpc3BsYXk9Tm9uZSwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICAgICAgICAgICAgICAgd2xfZGlzcGxheT1Ob25lLAotKyAqICAgICAgICAgICAg ICAgICAgZHJtX2Rpc3BsYXk9Tm9uZSwKLSAgKi8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50 X0FzX2ludChfX3B5eF92X2gpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMSA9PSAoaW50KS0xKSAm JiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDg1NCwgX19weXhfTDFfZXJyb3IpCi0t ICBfX3B5eF92X2hjID0gX19weXhfdF8xOwotKyAgICB2YWx1ZXNbNF0gPSAoKFB5T2JqZWN0ICop UHlfTm9uZSk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODU1Ci0t ICogICAgICAgICAgICAgaW50IHdjID0gdwotLSAqICAgICAgICAgICAgIGludCBoYyA9IGgKLS0g KiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2NiX2RyYXcoc2VsZi5fY3R4LCBmYm9jLCB3Yywg aGMpCi0tICogICAgICAgICBpZiBlcnIgPCAwOgotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTU1Ci0rICogICAgICAgICAgICAgICAgICBhZHZhbmNlZF9jb250cm9sPUZh bHNlLAotKyAqICAgICAgICAgICAgICAgICAgeDExX2Rpc3BsYXk9Tm9uZSwKLSsgKiAgICAgICAg ICAgICAgICAgIHdsX2Rpc3BsYXk9Tm9uZSwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAqICAgICAgICAgICAgICAgICAgZHJtX2Rpc3BsYXk9Tm9uZSwKLSsgKiAgICAgICAgICAgICAg ICAgIGRybV9vc2Rfc2l6ZT1Ob25lCi0gICovCi0tICB7Ci0tICAgICAgI2lmZGVmIFdJVEhfVEhS RUFECi0tICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7Ci0tICAgICAgUHlfVU5CTE9DS19USFJF QURTCi0tICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwotLSAgICAgICNlbmRpZgotLSAg ICAgIC8qdHJ5OiovIHsKLSsgICAgdmFsdWVzWzVdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOwot IAotLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg1NgotLSAqICAg ICAgICAgICAgIGludCBoYyA9IGgKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0tICogICAgICAg ICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9kcmF3KHNlbGYuX2N0eCwgZmJvYywgd2MsIGhjKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBpZiBlcnIgPCAwOgotLSAq ICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKLSsgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjk1NgotKyAqICAgICAgICAgICAgICAgICAgeDExX2Rpc3BsYXk9Tm9u ZSwKLSsgKiAgICAgICAgICAgICAgICAgIHdsX2Rpc3BsYXk9Tm9uZSwKLSsgKiAgICAgICAgICAg ICAgICAgIGRybV9kaXNwbGF5PU5vbmUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgICAgICAgICAgICAgIGRybV9vc2Rfc2l6ZT1Ob25lCi0rICogICAgICAgICAgICAgICAg ICApOgotICAqLwotLSAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfb3BlbmdsX2NiX2RyYXcoX19w eXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X2Zib2MsIF9fcHl4X3Zfd2MsIF9fcHl4X3ZfaGMpOwot LSAgICAgIH0KLSsgICAgdmFsdWVzWzZdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOwotIAotLSAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NTUKLS0gKiAgICAgICAgICAg ICBpbnQgd2MgPSB3Ci0tICogICAgICAgICAgICAgaW50IGhjID0gaAotLSAqICAgICAgICAgd2l0 aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGVy ciA9IG1wdl9vcGVuZ2xfY2JfZHJhdyhzZWxmLl9jdHgsIGZib2MsIHdjLCBoYykKLS0gKiAgICAg ICAgIGlmIGVyciA8IDA6Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 NTcKLSsgKiAgICAgICAgICAgICAgICAgIHdsX2Rpc3BsYXk9Tm9uZSwKLSsgKiAgICAgICAgICAg ICAgICAgIGRybV9kaXNwbGF5PU5vbmUsCi0rICogICAgICAgICAgICAgICAgICBkcm1fb3NkX3Np emU9Tm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgICAg ICApOgotKyAqIAotICAqLwotLSAgICAgIC8qZmluYWxseToqLyB7Ci0tICAgICAgICAvKm5vcm1h bCBleGl0OiovewotLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAgICAgICAgX19Q eXhfRmFzdEdJTF9Gb3JnZXQoKTsKLS0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotLSAgICAg ICAgICAjZW5kaWYKLS0gICAgICAgICAgZ290byBfX3B5eF9MNTsKLSsgICAgdmFsdWVzWzddID0g KChQeU9iamVjdCAqKVB5X05vbmUpOwotKyAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsK LSsgICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7Ci0rICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3Nf YXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7Ci0rICAgICAgc3dpdGNoIChwb3Nf YXJncykgewotKyAgICAgICAgY2FzZSAgODogdmFsdWVzWzddID0gUHlUdXBsZV9HRVRfSVRFTShf X3B5eF9hcmdzLCA3KTsKLSsgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgIGNh c2UgIDc6IHZhbHVlc1s2XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgNik7Ci0rICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICA2OiB2YWx1ZXNbNV0gPSBQ eVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDUpOwotKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOwotKyAgICAgICAgY2FzZSAgNTogdmFsdWVzWzRdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5 eF9hcmdzLCA0KTsKLSsgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgIGNhc2Ug IDQ6IHZhbHVlc1szXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMyk7Ci0rICAgICAg ICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOwotKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OwotKyAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9h cmdzLCAxKTsKLSsgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgIGNhc2UgIDE6 IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0rICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAwOiBicmVhazsKLSsgICAgICAgIGRl ZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0rICAgICAgfQotKyAgICAgIGt3 X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKLSsgICAgICBzd2l0Y2ggKHBvc19hcmdz KSB7Ci0rICAgICAgICBjYXNlICAwOgotKyAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0g X19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX21wdikpICE9IDAp KSBrd19hcmdzLS07Ci0rICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7 Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAxOgotKyAgICAg ICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhf a3dkcywgX19weXhfbl9zX2FwaV90eXBlKSkgIT0gMCkpIGt3X2FyZ3MtLTsKLSsgICAgICAgIGVs c2UgewotKyAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAw LCAyLCA4LCAxKTsgX19QWVhfRVJSKDAsIDk1MCwgX19weXhfTDNfZXJyb3IpCi0rICAgICAgICB9 Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAyOgotKyAgICAg ICAgaWYgKGt3X2FyZ3MgPiAwKSB7Ci0rICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4 X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19vcGVuZ2xfaW5pdF9wYXJh bXMpOwotKyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzJdID0gdmFsdWU7IGt3X2FyZ3Mt LTsgfQotKyAgICAgICAgfQotKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAg Y2FzZSAgMzoKLSsgICAgICAgIGlmIChrd19hcmdzID4gMCkgewotKyAgICAgICAgICBQeU9iamVj dCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nf YWR2YW5jZWRfY29udHJvbCk7Ci0rICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNbM10gPSB2 YWx1ZTsga3dfYXJncy0tOyB9Ci0rICAgICAgICB9Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9V R0g7Ci0rICAgICAgICBjYXNlICA0OgotKyAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7Ci0rICAg ICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3 ZHMsIF9fcHl4X25fc194MTFfZGlzcGxheSk7Ci0rICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1 ZXNbNF0gPSB2YWx1ZTsga3dfYXJncy0tOyB9Ci0rICAgICAgICB9Ci0rICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICA1OgotKyAgICAgICAgaWYgKGt3X2FyZ3MgPiAw KSB7Ci0rICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3Ry KF9fcHl4X2t3ZHMsIF9fcHl4X25fc193bF9kaXNwbGF5KTsKLSsgICAgICAgICAgaWYgKHZhbHVl KSB7IHZhbHVlc1s1XSA9IHZhbHVlOyBrd19hcmdzLS07IH0KLSsgICAgICAgIH0KLSsgICAgICAg IENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgIGNhc2UgIDY6Ci0rICAgICAgICBpZiAoa3df YXJncyA+IDApIHsKLSsgICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dl dEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2RybV9kaXNwbGF5KTsKLSsgICAgICAgICAg aWYgKHZhbHVlKSB7IHZhbHVlc1s2XSA9IHZhbHVlOyBrd19hcmdzLS07IH0KLSsgICAgICAgIH0K LSsgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgIGNhc2UgIDc6Ci0rICAgICAg ICBpZiAoa3dfYXJncyA+IDApIHsKLSsgICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhf UHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2RybV9vc2Rfc2l6ZSk7Ci0r ICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNbN10gPSB2YWx1ZTsga3dfYXJncy0tOyB9Ci0g ICAgICAgICB9Ci0tICAgICAgICBfX3B5eF9MNTo7Ci0gICAgICAgfQotLSAgfQotLQotLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg1NwotLSAqICAgICAgICAgd2l0aCBub2dp bDoKLS0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2NiX2RyYXcoc2VsZi5fY3R4LCBm Ym9jLCB3YywgaGMpCi0tICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQotLSAqIAotLSAq LwotLSAgX19weXhfdF8yID0gKChfX3B5eF92X2VyciA8IDApICE9IDApOwotLSAgaWYgKHVubGlr ZWx5KF9fcHl4X3RfMikpIHsKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjg1OAotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vcGVuZ2xfY2JfZHJhdyhzZWxmLl9j dHgsIGZib2MsIHdjLCBoYykKLS0gKiAgICAgICAgIGlmIGVyciA8IDA6Ci0tICogICAgICAgICAg ICAgcmFpc2UgTVBWRXJyb3IoZXJyKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog Ci0tICogICAgIGRlZiByZXBvcnRfZmxpcChzZWxmLCB0aW1lKToKLS0gKi8KLS0gICAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1 bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDg1OCwgX19weXhfTDFfZXJyb3IpCi0t ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeUlu dF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhf RVJSKDAsIDg1OCwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUp OwotLSAgICBfX3B5eF90XzYgPSBOVUxMOwotLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RT ICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNCkpKSB7Ci0tICAgICAgX19weXhf dF82ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF80KTsKLS0gICAgICBpZiAobGlrZWx5KF9f cHl4X3RfNikpIHsKLS0gICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9G VU5DVElPTihfX3B5eF90XzQpOwotLSAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNik7Ci0t ICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF90XzQsIGZ1bmN0aW9uKTsKLSsgICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDAp KSB7Ci0rICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9f cHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJfX2luaXRf XyIpIDwgMCkpIF9fUFlYX0VSUigwLCA5NTAsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgIH0KLSsg ICAgfSBlbHNlIHsKLSsgICAgICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykp IHsKLSsgICAgICAgIGNhc2UgIDg6IHZhbHVlc1s3XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhf YXJncywgNyk7Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICA3 OiB2YWx1ZXNbNl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDYpOwotKyAgICAgICAg Q1lUSE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAgY2FzZSAgNjogdmFsdWVzWzVdID0gUHlUdXBs ZV9HRVRfSVRFTShfX3B5eF9hcmdzLCA1KTsKLSsgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsK LSsgICAgICAgIGNhc2UgIDU6IHZhbHVlc1s0XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJn cywgNCk7Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICA0OiB2 YWx1ZXNbM10gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDMpOwotKyAgICAgICAgQ1lU SE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAgY2FzZSAgMzogdmFsdWVzWzJdID0gUHlUdXBsZV9H RVRfSVRFTShfX3B5eF9hcmdzLCAyKTsKLSsgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsg ICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywg MSk7Ci0rICAgICAgICB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDAp OwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1 cGxlX2Vycm9yOwotICAgICAgIH0KLSAgICAgfQotLSAgICBfX3B5eF90XzMgPSAoX19weXhfdF82 KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzQsIF9fcHl4X3RfNiwgX19weXhf dF81KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF80LCBfX3B5eF90XzUpOwot LSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCA4NTgsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8zKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3Rf NCA9IDA7Ci0tICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMywgMCwgMCwgMCk7Ci0tICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgICBfX1BZWF9FUlIoMCwgODU4 LCBfX3B5eF9MMV9lcnJvcikKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjg1NwotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBlcnIgPSBt cHZfb3BlbmdsX2NiX2RyYXcoc2VsZi5fY3R4LCBmYm9jLCB3YywgaGMpCi0tICogICAgICAgICBp ZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAg cmFpc2UgTVBWRXJyb3IoZXJyKQotLSAqIAotLSAqLwotKyAgICBfX3B5eF92X21wdiA9IHZhbHVl c1swXTsKLSsgICAgX19weXhfdl9hcGlfdHlwZSA9IHZhbHVlc1sxXTsKLSsgICAgX19weXhfdl9v cGVuZ2xfaW5pdF9wYXJhbXMgPSB2YWx1ZXNbMl07Ci0rICAgIF9fcHl4X3ZfYWR2YW5jZWRfY29u dHJvbCA9IHZhbHVlc1szXTsKLSsgICAgX19weXhfdl94MTFfZGlzcGxheSA9IHZhbHVlc1s0XTsK LSsgICAgX19weXhfdl93bF9kaXNwbGF5ID0gdmFsdWVzWzVdOwotKyAgICBfX3B5eF92X2RybV9k aXNwbGF5ID0gdmFsdWVzWzZdOwotKyAgICBfX3B5eF92X2RybV9vc2Rfc2l6ZSA9IHZhbHVlc1s3 XTsKLSAgIH0KLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NTAKLS0g KiAgICAgICAgICAgICBtcHZfb3BlbmdsX2NiX3NldF91cGRhdGVfY2FsbGJhY2soc2VsZi5fY3R4 LCAmX2NfdXBkYXRlY2IsIDx2b2lkICo+Y2IpCi0tICogCi0tICogICAgIGRlZiBkcmF3KHNlbGYs IGZibywgdywgaCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGNk ZWY6Ci0tICogICAgICAgICAgICAgaW50IGZib2MgPSBmYm8KLS0gKi8KLS0KLS0gIC8qIGZ1bmN0 aW9uIGV4aXQgY29kZSAqLwotLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9O b25lKTsKLS0gIGdvdG8gX19weXhfTDA7Ci0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMyk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Ci0tICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7Ci0tICBf X1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5PcGVuR0xDb250ZXh0LmRyYXci LCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fcHl4 X3IgPSBOVUxMOwotLSAgX19weXhfTDA6OwotLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0r ICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOwotKyAgX19weXhfTDVfYXJn dHVwbGVfZXJyb3I6OwotKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwg MCwgMiwgOCwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA5NTAs IF9fcHl4X0wzX2Vycm9yKQotKyAgX19weXhfTDNfZXJyb3I6OwotKyAgX19QeXhfQWRkVHJhY2Vi YWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dC5fX2luaXRfXyIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotICAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0rICByZXR1cm4gLTE7Ci0r ICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7Ci0rICBfX3B5eF9yID0gX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXygoKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92 X3NlbGYpLCBfX3B5eF92X21wdiwgX19weXhfdl9hcGlfdHlwZSwgX19weXhfdl9vcGVuZ2xfaW5p dF9wYXJhbXMsIF9fcHl4X3ZfYWR2YW5jZWRfY29udHJvbCwgX19weXhfdl94MTFfZGlzcGxheSwg X19weXhfdl93bF9kaXNwbGF5LCBfX3B5eF92X2RybV9kaXNwbGF5LCBfX3B5eF92X2RybV9vc2Rf c2l6ZSk7Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg2MAotLSAqICAg ICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5NTAKLSsgKiAgICAgICAgIGJpbnQgaW5pdGVkCi0gICogCi0tICogICAgIGRl ZiByZXBvcnRfZmxpcChzZWxmLCB0aW1lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgY2RlZiBpbnQ2NF90IGN0aW1lID0gdGltZQotLSAqICAgICAgICAgd2l0aCBu b2dpbDoKLSsgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1wdiwgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgICAgICAgYXBpX3R5cGUsCi0rICogICAgICAgICAg ICAgICAgICBvcGVuZ2xfaW5pdF9wYXJhbXM9Tm9uZSwKLSAgKi8KLSAKLS0vKiBQeXRob24gd3Jh cHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzT3BlbkdMQ29udGV4dF85cmVwb3J0X2ZsaXAoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlP YmplY3QgKl9fcHl4X3ZfdGltZSk7IC8qcHJvdG8qLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF85cmVwb3J0X2ZsaXAoUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdGltZSkgewotLSAgUHlPYmpl Y3QgKl9fcHl4X3IgPSAwOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJyZXBvcnRfZmxpcCAod3JhcHBlcikiLCAwKTsKLS0gIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0Xzhy ZXBvcnRfZmxpcCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5H TENvbnRleHQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl90aW1lKSk7Ci0t Ci0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF84cmVwb3J0X2ZsaXAo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl90aW1lKSB7Ci0tICBpbnQ2NF90IF9fcHl4X3Zf Y3RpbWU7Ci0tICBpbnQgX19weXhfdl9lcnI7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7 Ci0rc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250 ZXh0X19faW5pdF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckNvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfbXB2LCBQeU9iamVjdCAq X19weXhfdl9hcGlfdHlwZSwgUHlPYmplY3QgKl9fcHl4X3Zfb3BlbmdsX2luaXRfcGFyYW1zLCBQ eU9iamVjdCAqX19weXhfdl9hZHZhbmNlZF9jb250cm9sLCBQeU9iamVjdCAqX19weXhfdl94MTFf ZGlzcGxheSwgUHlPYmplY3QgKl9fcHl4X3Zfd2xfZGlzcGxheSwgUHlPYmplY3QgKl9fcHl4X3Zf ZHJtX2Rpc3BsYXksIFB5T2JqZWN0ICpfX3B5eF92X2RybV9vc2Rfc2l6ZSkgewotKyAgc3RydWN0 IG1wdl9vcGVuZ2xfaW5pdF9wYXJhbXMgX19weXhfdl9nbF9wYXJhbXM7Ci0rICBzdHJ1Y3QgbXB2 X29wZW5nbF9kcm1fcGFyYW1zIF9fcHl4X3ZfZHJtX3BhcmFtczsKLSsgIHN0cnVjdCBtcHZfb3Bl bmdsX2RybV9vc2Rfc2l6ZSBfX3B5eF92X19kcm1fb3NkX3NpemU7Ci0rICBzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpfX3B5eF92X3BhcmFtcyA9 IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdl9hcnAgPSBOVUxMOwotKyAgaW50IF9fcHl4X3Zf ZXJyOwotKyAgaW50IF9fcHl4X3I7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAg aW50NjRfdCBfX3B5eF90XzE7Ci0tICBpbnQgX19weXhfdF8yOwotLSAgUHlPYmplY3QgKl9fcHl4 X3RfMyA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSsgIFB5T2JqZWN0 ICpfX3B5eF90XzIgPSBOVUxMOwotKyAgaW50IF9fcHl4X3RfMzsKLSAgIFB5T2JqZWN0ICpfX3B5 eF90XzQgPSBOVUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7Ci0tICBQeU9iamVj dCAqX19weXhfdF82ID0gTlVMTDsKLSsgIGludCBfX3B5eF90XzY7Ci0rICBpbnQgX19weXhfdF83 OwotKyAgY2hhciBjb25zdCAqX19weXhfdF84OwotKyAgUHlPYmplY3QgKigqX19weXhfdF85KShQ eU9iamVjdCAqKTsKLSsgIGludCBfX3B5eF90XzEwOwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7 Ci0gICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xp bmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgicmVwb3J0X2ZsaXAiLCAw KTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyIsIDApOwotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg2MQotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjk2NQotKyAqICAgICAgICAgICAgIG1wdl9vcGVuZ2xfZHJtX29z ZF9zaXplIF9kcm1fb3NkX3NpemUKLSAgKiAKLS0gKiAgICAgZGVmIHJlcG9ydF9mbGlwKHNlbGYs IHRpbWUpOgotLSAqICAgICAgICAgY2RlZiBpbnQ2NF90IGN0aW1lID0gdGltZSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAg ICAgIGVyciA9IG1wdl9vcGVuZ2xfY2JfcmVwb3J0X2ZsaXAoc2VsZi5fY3R4LCBjdGltZSkKLSsg KiAgICAgICAgIHNlbGYuX21wdiA9IG1wdiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0r ICogCi0rICogICAgICAgICBtZW1zZXQoJmdsX3BhcmFtcywgMCwgc2l6ZW9mKGdsX3BhcmFtcykp Ci0gICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Bc19pbnQ2NF90KF9fcHl4X3ZfdGlt ZSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8xID09ICgoaW50NjRfdCktMSkpICYmIFB5RXJyX09j Y3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgODYxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fcHl4X3Zf Y3RpbWUgPSBfX3B5eF90XzE7Ci0rICBpZiAoIShsaWtlbHkoKChfX3B5eF92X21wdikgPT0gUHlf Tm9uZSkgfHwgbGlrZWx5KF9fUHl4X1R5cGVUZXN0KF9fcHl4X3ZfbXB2LCBfX3B5eF9wdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCkpKSkpIF9fUFlYX0VSUigwLCA5NjUsIF9fcHl4 X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19weXhfdl9tcHY7Ci0rICBfX1B5eF9JTkNSRUYo X19weXhfdF8xKTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X0dPVFJF RihfX3B5eF92X3NlbGYtPl9tcHYpOwotKyAgX19QeXhfREVDUkVGKCgoUHlPYmplY3QgKilfX3B5 eF92X3NlbGYtPl9tcHYpKTsKLSsgIF9fcHl4X3Zfc2VsZi0+X21wdiA9ICgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3RfMSk7Ci0rICBfX3B5 eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg2Mgot LSAqICAgICBkZWYgcmVwb3J0X2ZsaXAoc2VsZiwgdGltZSk6Ci0tICogICAgICAgICBjZGVmIGlu dDY0X3QgY3RpbWUgPSB0aW1lCi0tICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9yZXBv cnRfZmxpcChzZWxmLl9jdHgsIGN0aW1lKQotLSAqICAgICAgICAgaWYgZXJyIDwgMDoKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NjcKLSsgKiAgICAgICAgIHNlbGYuX21w diA9IG1wdgotKyAqIAotKyAqICAgICAgICAgbWVtc2V0KCZnbF9wYXJhbXMsIDAsIHNpemVvZihn bF9wYXJhbXMpKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBtZW1z ZXQoJmRybV9wYXJhbXMsIDAsIHNpemVvZihkcm1fcGFyYW1zKSkKLSsgKiAgICAgICAgIG1lbXNl dCgmX2RybV9vc2Rfc2l6ZSwgMCwgc2l6ZW9mKF9kcm1fb3NkX3NpemUpKQotICAqLwotLSAgewot LSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwot LSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIo KTsKLS0gICAgICAjZW5kaWYKLS0gICAgICAvKnRyeToqLyB7Ci0rICAodm9pZCkobWVtc2V0KCgm X19weXhfdl9nbF9wYXJhbXMpLCAwLCAoc2l6ZW9mKF9fcHl4X3ZfZ2xfcGFyYW1zKSkpKTsKLSAK LS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NjMKLS0gKiAgICAg ICAgIGNkZWYgaW50NjRfdCBjdGltZSA9IHRpbWUKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0t ICogICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9yZXBvcnRfZmxpcChzZWxmLl9jdHgs IGN0aW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBpZiBlcnIg PCAwOgotLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NjgKLSsgKiAKLSsgKiAgICAgICAgIG1lbXNldCgmZ2xf cGFyYW1zLCAwLCBzaXplb2YoZ2xfcGFyYW1zKSkKLSsgKiAgICAgICAgIG1lbXNldCgmZHJtX3Bh cmFtcywgMCwgc2l6ZW9mKGRybV9wYXJhbXMpKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICBtZW1zZXQoJl9kcm1fb3NkX3NpemUsIDAsIHNpemVvZihfZHJtX29zZF9z aXplKSkKLSsgKiAKLSAgKi8KLS0gICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X29wZW5nbF9jYl9y ZXBvcnRfZmxpcChfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfY3RpbWUpOwotLSAgICAgIH0K LSsgICh2b2lkKShtZW1zZXQoKCZfX3B5eF92X2RybV9wYXJhbXMpLCAwLCAoc2l6ZW9mKF9fcHl4 X3ZfZHJtX3BhcmFtcykpKSk7Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjg2MgotLSAqICAgICBkZWYgcmVwb3J0X2ZsaXAoc2VsZiwgdGltZSk6Ci0tICogICAg ICAgICBjZGVmIGludDY0X3QgY3RpbWUgPSB0aW1lCi0tICogICAgICAgICB3aXRoIG5vZ2lsOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgZXJyID0gbXB2X29w ZW5nbF9jYl9yZXBvcnRfZmxpcChzZWxmLl9jdHgsIGN0aW1lKQotLSAqICAgICAgICAgaWYgZXJy IDwgMDoKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NjkKLSsgKiAgICAg ICAgIG1lbXNldCgmZ2xfcGFyYW1zLCAwLCBzaXplb2YoZ2xfcGFyYW1zKSkKLSsgKiAgICAgICAg IG1lbXNldCgmZHJtX3BhcmFtcywgMCwgc2l6ZW9mKGRybV9wYXJhbXMpKQotKyAqICAgICAgICAg bWVtc2V0KCZfZHJtX29zZF9zaXplLCAwLCBzaXplb2YoX2RybV9vc2Rfc2l6ZSkpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAKLSsgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQ YXJhbXMoKQotICAqLwotLSAgICAgIC8qZmluYWxseToqLyB7Ci0tICAgICAgICAvKm5vcm1hbCBl eGl0OiovewotLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAgICAgICAgX19QeXhf RmFzdEdJTF9Gb3JnZXQoKTsKLS0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotLSAgICAgICAg ICAjZW5kaWYKLS0gICAgICAgICAgZ290byBfX3B5eF9MNTsKLS0gICAgICAgIH0KLS0gICAgICAg IF9fcHl4X0w1OjsKLS0gICAgICB9Ci0tICB9Ci0rICAodm9pZCkobWVtc2V0KCgmX19weXhfdl9f ZHJtX29zZF9zaXplKSwgMCwgKHNpemVvZihfX3B5eF92X19kcm1fb3NkX3NpemUpKSkpOwotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg2NAotLSAqICAgICAgICAgd2l0 aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2NiX3JlcG9ydF9mbGlw KHNlbGYuX2N0eCwgY3RpbWUpCi0tICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3MQotKyAqICAgICAgICAgbWVtc2V0 KCZfZHJtX29zZF9zaXplLCAwLCBzaXplb2YoX2RybV9vc2Rfc2l6ZSkpCi0rICogCi0rICogICAg ICAgICBwYXJhbXMgPSBfUmVuZGVyUGFyYW1zKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqIAotKyAqICAgICAgICAgaWYgYXBpX3R5cGUgPT0gc2VsZi5BUElfT1BFTkdMOgotICAq LwotLSAgX19weXhfdF8yID0gKChfX3B5eF92X2VyciA8IDApICE9IDApOwotLSAgaWYgKHVubGlr ZWx5KF9fcHl4X3RfMikpIHsKLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0Fy ZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQ YXJhbXMpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTcxLCBfX3B5 eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgX19weXhfdl9wYXJh bXMgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJh bXMgKilfX3B5eF90XzEpOwotKyAgX19weXhfdF8xID0gMDsKLSAKLS0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjg2NQotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vcGVu Z2xfY2JfcmVwb3J0X2ZsaXAoc2VsZi5fY3R4LCBjdGltZSkKLS0gKiAgICAgICAgIGlmIGVyciA8 IDA6Ci0tICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTczCi0r ICogICAgICAgICBwYXJhbXMgPSBfUmVuZGVyUGFyYW1zKCkKLSsgKiAKLSsgKiAgICAgICAgIGlm IGFwaV90eXBlID09IHNlbGYuQVBJX09QRU5HTDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfc3RyaW5nKE1QVl9SRU5ERVJfUEFSQU1fQVBJ X1RZUEUsIE1QVl9SRU5ERVJfQVBJX1RZUEVfT1BFTkdMKQotKyAqICAgICAgICAgZWxzZToKLSsg Ki8KLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAq KV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19BUElfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgOTczLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOwotKyAgX19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhf dl9hcGlfdHlwZSwgX19weXhfdF8xLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTczLCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgX19weXhf dF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseShfX3B5 eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDk3MywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgIGlmIChsaWtlbHkoX19weXhfdF8z KSkgewotKwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTc0Ci0rICog Ci0rICogICAgICAgICBpZiBhcGlfdHlwZSA9PSBzZWxmLkFQSV9PUEVOR0w6Ci0rICogICAgICAg ICAgICAgcGFyYW1zLmFkZF9zdHJpbmcoTVBWX1JFTkRFUl9QQVJBTV9BUElfVFlQRSwgTVBWX1JF TkRFUl9BUElfVFlQRV9PUEVOR0wpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgIGVsc2U6Ci0rICogICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJvcigiVW5rbm93biBh cGlfdHlwZSAlciIgJSBhcGlfdHlwZSkKLSsgKi8KLSsgICAgX19weXhfdF8yID0gKChzdHJ1Y3Qg X19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9f cHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3N0cmluZyhfX3B5eF92X3BhcmFtcywgTVBW X1JFTkRFUl9QQVJBTV9BUElfVFlQRSwgTVBWX1JFTkRFUl9BUElfVFlQRV9PUEVOR0wpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5NzQsIF9fcHl4X0wxX2Vycm9yKQot KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Mik7IF9fcHl4X3RfMiA9IDA7Ci0rCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo5NzMKLSsgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJhbXMoKQotKyAqIAotKyAq ICAgICAgICAgaWYgYXBpX3R5cGUgPT0gc2VsZi5BUElfT1BFTkdMOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF9zdHJpbmcoTVBWX1JFTkRF Ul9QQVJBTV9BUElfVFlQRSwgTVBWX1JFTkRFUl9BUElfVFlQRV9PUEVOR0wpCi0rICogICAgICAg ICBlbHNlOgotKyAqLwotKyAgICBnb3RvIF9fcHl4X0wzOwotKyAgfQotKwotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3NgotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf c3RyaW5nKE1QVl9SRU5ERVJfUEFSQU1fQVBJX1RZUEUsIE1QVl9SRU5ERVJfQVBJX1RZUEVfT1BF TkdMKQotKyAqICAgICAgICAgZWxzZToKLSsgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9y KCJVbmtub3duIGFwaV90eXBlICVyIiAlIGFwaV90eXBlKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0gICogCi0tICogICAgIGRlZiB1bmluaXRfZ2woc2VsZik6Ci0rICogICAgICAgICBp ZiBvcGVuZ2xfaW5pdF9wYXJhbXMgaXMgbm90IE5vbmU6Ci0gICovCi0tICAgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA4NjUsIF9fcHl4X0wxX2Vycm9yKQotKyAgLypl bHNlKi8gewotKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhf bl9zX1B5TVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5 NzYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgICAg X19weXhfdF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0U2FmZShfX3B5eF9rcF9zX1Vua25vd25f YXBpX3R5cGVfciwgX19weXhfdl9hcGlfdHlwZSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkg X19QWVhfRVJSKDAsIDk3NiwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzQpOwotLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vy cik7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDg2NSwgX19weXhfTDFf ZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOwotLSAgICBfX3B5eF90XzYgPSBO VUxMOwotLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9k X0NoZWNrKF9fcHl4X3RfNCkpKSB7Ci0tICAgICAgX19weXhfdF82ID0gUHlNZXRob2RfR0VUX1NF TEYoX19weXhfdF80KTsKLS0gICAgICBpZiAobGlrZWx5KF9fcHl4X3RfNikpIHsKLS0gICAgICAg IFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzQpOwot LSAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNik7Ci0rICAgIF9fcHl4X3RfNSA9IE5VTEw7 Ci0rICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF8xKSkpIHsKLSsgICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzEpOwotKyAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewotKyAgICAgICAgUHlP YmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMSk7Ci0rICAg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKLSAgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5j dGlvbik7Ci0tICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNCwgZnVuY3Rpb24pOwot KyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzEsIGZ1bmN0aW9uKTsKLSAgICAgICB9 Ci0gICAgIH0KLS0gICAgX19weXhfdF8zID0gKF9fcHl4X3RfNikgPyBfX1B5eF9QeU9iamVjdF9D YWxsMkFyZ3MoX19weXhfdF80LCBfX3B5eF90XzYsIF9fcHl4X3RfNSkgOiBfX1B5eF9QeU9iamVj dF9DYWxsT25lQXJnKF9fcHl4X3RfNCwgX19weXhfdF81KTsKLS0gICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsg X19weXhfdF81ID0gMDsKLS0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIo MCwgODY1LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0r ICAgIF9fcHl4X3RfMiA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfMSwgX19weXhfdF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZyhfX3B5eF90XzEsIF9fcHl4X3RfNCk7Ci0rICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsg X19weXhfdF81ID0gMDsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9 IDA7Ci0tICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMywgMCwgMCwgMCk7Ci0tICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgICBfX1BZWF9FUlIoMCwgODY1LCBf X3B5eF9MMV9lcnJvcikKLSsgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgOTc2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0r ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgICBfX1B5eF9S YWlzZShfX3B5eF90XzIsIDAsIDAsIDApOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsg X19weXhfdF8yID0gMDsKLSsgICAgX19QWVhfRVJSKDAsIDk3NiwgX19weXhfTDFfZXJyb3IpCi0r ICB9Ci0rICBfX3B5eF9MMzo7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo4NjQKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0tICogICAgICAgICAgICAgZXJyID0g bXB2X29wZW5nbF9jYl9yZXBvcnRfZmxpcChzZWxmLl9jdHgsIGN0aW1lKQotLSAqICAgICAgICAg aWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAg IHJhaXNlIE1QVkVycm9yKGVycikKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5NzgKLSsgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJVbmtub3duIGFwaV90eXBl ICVyIiAlIGFwaV90eXBlKQotICAqIAotKyAqICAgICAgICAgaWYgb3BlbmdsX2luaXRfcGFyYW1z IGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAg ICAgc2VsZi5fZ2V0X3Byb2NfYWRkcmVzcyA9IG9wZW5nbF9pbml0X3BhcmFtc1siZ2V0X3Byb2Nf YWRkcmVzcyJdCi0rICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3MgPSAm X2NfZ2V0cHJvY2FkZHJlc3MKLSAgKi8KLS0gIH0KLSsgIF9fcHl4X3RfMyA9IChfX3B5eF92X29w ZW5nbF9pbml0X3BhcmFtcyAhPSBQeV9Ob25lKTsKLSsgIF9fcHl4X3RfNiA9IChfX3B5eF90XzMg IT0gMCk7Ci0rICBpZiAoX19weXhfdF82KSB7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6ODYwCi0tICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQotKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTc5Ci0gICogCi0tICogICAgIGRl ZiByZXBvcnRfZmxpcChzZWxmLCB0aW1lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgY2RlZiBpbnQ2NF90IGN0aW1lID0gdGltZQotLSAqICAgICAgICAgd2l0aCBu b2dpbDoKLSsgKiAgICAgICAgIGlmIG9wZW5nbF9pbml0X3BhcmFtcyBpcyBub3QgTm9uZToKLSsg KiAgICAgICAgICAgICBzZWxmLl9nZXRfcHJvY19hZGRyZXNzID0gb3BlbmdsX2luaXRfcGFyYW1z WyJnZXRfcHJvY19hZGRyZXNzIl0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzID0gJl9jX2dldHByb2NhZGRyZXNz Ci0rICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3NfY3R4ID0gPHZvaWQg Kj5zZWxmLl9nZXRfcHJvY19hZGRyZXNzCi0gICovCi0rICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5 T2JqZWN0X0RpY3RfR2V0SXRlbShfX3B5eF92X29wZW5nbF9pbml0X3BhcmFtcywgX19weXhfbl9z X2dldF9wcm9jX2FkZHJlc3MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigw LCA5NzksIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsg ICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzIpOwotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdl9z ZWxmLT5fZ2V0X3Byb2NfYWRkcmVzcyk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYt Pl9nZXRfcHJvY19hZGRyZXNzKTsKLSsgICAgX19weXhfdl9zZWxmLT5fZ2V0X3Byb2NfYWRkcmVz cyA9IF9fcHl4X3RfMjsKLSsgICAgX19weXhfdF8yID0gMDsKLSAKLS0gIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLwotLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsK LS0gIGdvdG8gX19weXhfTDA7Ci0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMyk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7Ci0tICBfX1B5eF9B ZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5PcGVuR0xDb250ZXh0LnJlcG9ydF9mbGlw IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICBfX3B5 eF9yID0gTlVMTDsKLS0gIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwot LSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19 Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODAKLSsgKiAgICAgICAg IGlmIG9wZW5nbF9pbml0X3BhcmFtcyBpcyBub3QgTm9uZToKLSsgKiAgICAgICAgICAgICBzZWxm Ll9nZXRfcHJvY19hZGRyZXNzID0gb3BlbmdsX2luaXRfcGFyYW1zWyJnZXRfcHJvY19hZGRyZXNz Il0KLSsgKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzcyA9ICZfY19nZXRw cm9jYWRkcmVzcyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAg Z2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3NfY3R4ID0gPHZvaWQgKj5zZWxmLl9nZXRfcHJvY19h ZGRyZXNzCi0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFN X09QRU5HTF9JTklUX1BBUkFNUywgJmdsX3BhcmFtcykKLSsgKi8KLSsgICAgX19weXhfdl9nbF9w YXJhbXMuZ2V0X3Byb2NfYWRkcmVzcyA9ICgmX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X2NfZ2V0cHJvY2FkZHJlc3MpOwotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo4NjcKLS0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCi0tICogCi0tICogICAg IGRlZiB1bmluaXRfZ2woc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKLS0gKiAgICAgICAgICAgICByZXR1cm4KLSsgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4MQotKyAqICAgICAgICAgICAgIHNl bGYuX2dldF9wcm9jX2FkZHJlc3MgPSBvcGVuZ2xfaW5pdF9wYXJhbXNbImdldF9wcm9jX2FkZHJl c3MiXQotKyAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzID0gJl9jX2dl dHByb2NhZGRyZXNzCi0rICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3Nf Y3R4ID0gPHZvaWQgKj5zZWxmLl9nZXRfcHJvY19hZGRyZXNzICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFS QU1fT1BFTkdMX0lOSVRfUEFSQU1TLCAmZ2xfcGFyYW1zKQotKyAqICAgICAgICAgaWYgYWR2YW5j ZWRfY29udHJvbDoKLSAgKi8KLSsgICAgX19weXhfdl9nbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVz c19jdHggPSAoKHZvaWQgKilfX3B5eF92X3NlbGYtPl9nZXRfcHJvY19hZGRyZXNzKTsKLSAKLS0v KiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF8xMXVuaW5pdF9nbChQeU9iamVjdCAqX19weXhf dl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KLS1zdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRl eHRfMTF1bmluaXRfZ2woUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9i amVjdCAqdW51c2VkKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0tICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVuaW5pdF9n bCAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNPcGVuR0xDb250ZXh0XzEwdW5pbml0X2dsKCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOwotKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTgyCi0rICogICAgICAgICAgICAgZ2xf cGFyYW1zLmdldF9wcm9jX2FkZHJlc3MgPSAmX2NfZ2V0cHJvY2FkZHJlc3MKLSsgKiAgICAgICAg ICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzc19jdHggPSA8dm9pZCAqPnNlbGYuX2dldF9w cm9jX2FkZHJlc3MKLSsgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJf UEFSQU1fT1BFTkdMX0lOSVRfUEFSQU1TLCAmZ2xfcGFyYW1zKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9sOgotKyAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkK LSsgKi8KLSsgICAgX19weXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFi KS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9JTklU X1BBUkFNUywgKCZfX3B5eF92X2dsX3BhcmFtcyksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA5ODIsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9 IDA7Ci0gCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTc4Ci0rICogICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJv cigiVW5rbm93biBhcGlfdHlwZSAlciIgJSBhcGlfdHlwZSkKLSsgKiAKLSsgKiAgICAgICAgIGlm IG9wZW5nbF9pbml0X3BhcmFtcyBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICAgICAgICAgIHNlbGYuX2dldF9wcm9jX2FkZHJlc3MgPSBvcGVuZ2xfaW5p dF9wYXJhbXNbImdldF9wcm9jX2FkZHJlc3MiXQotKyAqICAgICAgICAgICAgIGdsX3BhcmFtcy5n ZXRfcHJvY19hZGRyZXNzID0gJl9jX2dldHByb2NhZGRyZXNzCi0rICovCi0rICB9Ci0gCi0tc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250 ZXh0XzEwdW5pbml0X2dsKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09w ZW5HTENvbnRleHQgKl9fcHl4X3Zfc2VsZikgewotLSAgaW50IF9fcHl4X3ZfZXJyOwotLSAgUHlP YmplY3QgKl9fcHl4X3IgPSBOVUxMOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0g IGludCBfX3B5eF90XzE7Ci0tICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKLS0gIFB5T2Jq ZWN0ICpfX3B5eF90XzMgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7Ci0t ICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwot LSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVuaW5pdF9nbCIsIDApOwot LQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg2OAotLSAqIAotLSAqICAg ICBkZWYgdW5pbml0X2dsKHNlbGYpOgotLSAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcmV0dXJuCi0tICog ICAgICAgICB3aXRoIG5vZ2lsOgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojk4MwotKyAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9IDx2 b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVzcwotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf dm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMpCi0r ICogICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9sOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9BRFZB TkNFRF9DT05UUk9MLCAxKQotKyAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6Ci0gICovCi0tICBf X3B5eF90XzEgPSAoKCEoX19weXhfdl9zZWxmLT5pbml0ZWQgIT0gMCkpICE9IDApOwotLSAgaWYg KF9fcHl4X3RfMSkgewotKyAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4 X3ZfYWR2YW5jZWRfY29udHJvbCk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhf RVJSKDAsIDk4MywgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19weXhfdF82KSB7Ci0gCi0tICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NjkKLS0gKiAgICAgZGVmIHVuaW5p dF9nbChzZWxmKToKLS0gKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKLS0gKiAgICAgICAg ICAgICByZXR1cm4gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgd2l0 aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2NiX3VuaW5pdF9nbChz ZWxmLl9jdHgpCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODQKLSsg KiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0lO SVRfUEFSQU1TLCAmZ2xfcGFyYW1zKQotKyAqICAgICAgICAgaWYgYWR2YW5jZWRfY29udHJvbDoK LSsgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VE X0NPTlRST0wsIDEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGlm IHgxMV9kaXNwbGF5OgotKyAqICAgICAgICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rp c3BsYXkKLSAgKi8KLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gICAgX19weXhfciA9 IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLS0gICAgZ290byBfX3B5eF9MMDsKLSsg ICAgX19weXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX2lu dChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9BRFZBTkNFRF9DT05UUk9MLCAxKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTg0LCBfX3B5eF9MMV9lcnJv cikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODY4Ci0tICogCi0tICogICAgIGRlZiB1bmluaXRfZ2woc2VsZik6Ci0tICogICAg ICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgICAgICByZXR1cm4KLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODMKLSsgKiAgICAgICAgICAgICBnbF9wYXJh bXMuZ2V0X3Byb2NfYWRkcmVzc19jdHggPSA8dm9pZCAqPnNlbGYuX2dldF9wcm9jX2FkZHJlc3MK LSsgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdM X0lOSVRfUEFSQU1TLCAmZ2xfcGFyYW1zKQotKyAqICAgICAgICAgaWYgYWR2YW5jZWRfY29udHJv bDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIHBhcmFtcy5h ZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkKLSsgKiAgICAgICAg IGlmIHgxMV9kaXNwbGF5OgotICAqLwotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjg3MAotLSAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgotLSAqICAg ICAgICAgICAgIHJldHVybgotLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vcGVuZ2xfY2JfdW5pbml0 X2dsKHNlbGYuX2N0eCkKLS0gKiAgICAgICAgIGlmIGVyciA8IDA6Ci0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTg1Ci0rICogICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9s OgotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5D RURfQ09OVFJPTCwgMSkKLSsgKiAgICAgICAgIGlmIHgxMV9kaXNwbGF5OiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFf ZGlzcGxheQotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJB TV9YMTFfRElTUExBWSwgZ2V0X3BvaW50ZXIoIkRpc3BsYXkiLCB4MTFfZGlzcGxheSkpCi0gICov Ci0tICB7Ci0tICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgUHlUaHJlYWRTdGF0ZSAq X3NhdmU7Ci0tICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0tICAgICAgX19QeXhfRmFzdEdJTF9S ZW1lbWJlcigpOwotLSAgICAgICNlbmRpZgotLSAgICAgIC8qdHJ5OiovIHsKLSsgIF9fcHl4X3Rf NiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X3gxMV9kaXNwbGF5KTsgaWYgKHVubGlr ZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgOTg1LCBfX3B5eF9MMV9lcnJvcikKLSsg IGlmIChfX3B5eF90XzYpIHsKLSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4NzEKLS0gKiAgICAgICAgICAgICByZXR1cm4KLS0gKiAgICAgICAgIHdpdGggbm9n aWw6Ci0tICogICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl91bmluaXRfZ2woc2VsZi5f Y3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBpZiBlcnIgPCAw OgotLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKLSsgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk4NgotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50 KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkKLSsgKiAgICAgICAgIGlmIHgx MV9kaXNwbGF5OgotKyAqICAgICAgICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3Bs YXkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIHBhcmFtcy5h ZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwgZ2V0X3BvaW50ZXIoIkRpc3Bs YXkiLCB4MTFfZGlzcGxheSkpCi0rICogICAgICAgICBpZiB3bF9kaXNwbGF5OgotICAqLwotLSAg ICAgICAgX19weXhfdl9lcnIgPSBtcHZfb3BlbmdsX2NiX3VuaW5pdF9nbChfX3B5eF92X3NlbGYt Pl9jdHgpOwotLSAgICAgIH0KLSsgICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfeDExX2Rpc3BsYXkp OwotKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3ZfeDExX2Rpc3BsYXkpOwotKyAgICBfX1B5eF9H T1RSRUYoX19weXhfdl9zZWxmLT5feDExX2Rpc3BsYXkpOwotKyAgICBfX1B5eF9ERUNSRUYoX19w eXhfdl9zZWxmLT5feDExX2Rpc3BsYXkpOwotKyAgICBfX3B5eF92X3NlbGYtPl94MTFfZGlzcGxh eSA9IF9fcHl4X3ZfeDExX2Rpc3BsYXk7Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjg3MAotLSAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgotLSAqICAg ICAgICAgICAgIHJldHVybgotLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vcGVuZ2xfY2JfdW5pbml0 X2dsKHNlbGYuX2N0eCkKLS0gKiAgICAgICAgIGlmIGVyciA8IDA6Ci0rICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODcKLSsgKiAgICAgICAgIGlmIHgxMV9kaXNwbGF5Ogot KyAqICAgICAgICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkKLSsgKiAgICAg ICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJU1BMQVksIGdl dF9wb2ludGVyKCJEaXNwbGF5IiwgeDExX2Rpc3BsYXkpKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgICAgICBpZiB3bF9kaXNwbGF5OgotKyAqICAgICAgICAgICAgIHNlbGYu X3dsX2Rpc3BsYXkgPSB3bF9kaXNwbGF5Ci0rICovCi0rICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0 IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilf X3B5eF92X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBW X1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Z2V0X3BvaW50ZXIoKChjaGFyIGNvbnN0ICopIkRpc3BsYXkiKSwgX19weXhfdl94MTFfZGlzcGxh eSksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5ODcsIF9f cHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0rCi0rICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5ODUKLSsgKiAgICAgICAgIGlmIGFkdmFuY2VkX2NvbnRyb2w6 Ci0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9BRFZBTkNF RF9DT05UUk9MLCAxKQotKyAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBzZWxmLl94MTFfZGlzcGxheSA9IHgxMV9k aXNwbGF5Ci0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFN X1gxMV9ESVNQTEFZLCBnZXRfcG9pbnRlcigiRGlzcGxheSIsIHgxMV9kaXNwbGF5KSkKLSAgKi8K LS0gICAgICAvKmZpbmFsbHk6Ki8gewotLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKLS0gICAg ICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0 KCk7Ci0tICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLS0gICAgICAgICAgI2VuZGlmCi0tICAg ICAgICAgIGdvdG8gX19weXhfTDY7Ci0tICAgICAgICB9Ci0tICAgICAgICBfX3B5eF9MNjo7Ci0t ICAgICAgfQotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg3 MgotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfb3Bl bmdsX2NiX3VuaW5pdF9nbChzZWxmLl9jdHgpCi0tICogICAgICAgICBpZiBlcnIgPCAwOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3Io ZXJyKQotLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjk4OAotKyAqICAgICAgICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5 ID0geDExX2Rpc3BsYXkKLSsgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5E RVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2ludGVyKCJEaXNwbGF5IiwgeDExX2Rpc3BsYXkp KQotKyAqICAgICAgICAgaWYgd2xfZGlzcGxheTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNwbGF5Ci0rICogICAg ICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdl dF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCi0gICovCi0tICBfX3B5eF90XzEg PSAoKF9fcHl4X3ZfZXJyIDwgMCkgIT0gMCk7Ci0tICBpZiAodW5saWtlbHkoX19weXhfdF8xKSkg ewotKyAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zfd2xfZGlzcGxh eSk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDk4OCwgX19weXhf TDFfZXJyb3IpCi0rICBpZiAoX19weXhfdF82KSB7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo4NzMKLS0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2Ni X3VuaW5pdF9nbChzZWxmLl9jdHgpCi0tICogICAgICAgICBpZiBlcnIgPCAwOgotLSAqICAgICAg ICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQotLSAqIAotKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTg5Ci0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lk cChNUFZfUkVOREVSX1BBUkFNX1gxMV9ESVNQTEFZLCBnZXRfcG9pbnRlcigiRGlzcGxheSIsIHgx MV9kaXNwbGF5KSkKLSsgKiAgICAgICAgIGlmIHdsX2Rpc3BsYXk6Ci0rICogICAgICAgICAgICAg c2VsZi5fd2xfZGlzcGxheSA9IHdsX2Rpc3BsYXkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9XTF9E SVNQTEFZLCBnZXRfcG9pbnRlcigid2xfZGlzcGxheSIsIHdsX2Rpc3BsYXkpKQotKyAqICAgICAg ICAgaWYgZHJtX2Rpc3BsYXk6Ci0gICovCi0tICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF8zLCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykp IF9fUFlYX0VSUigwLCA4NzMsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8zKTsKLS0gICAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9l cnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA4NzMsIF9fcHl4X0wx X2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLS0gICAgX19weXhfdF81ID0g TlVMTDsKLS0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhv ZF9DaGVjayhfX3B5eF90XzMpKSkgewotLSAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9T RUxGKF9fcHl4X3RfMyk7Ci0tICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7Ci0tICAgICAg ICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8zKTsK LS0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOwotLSAgICAgICAgX19QeXhfSU5DUkVG KGZ1bmN0aW9uKTsKLS0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlv bik7Ci0tICAgICAgfQotLSAgICB9Ci0tICAgIF9fcHl4X3RfMiA9IChfX3B5eF90XzUpID8gX19Q eXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMywgX19weXhfdF81LCBfX3B5eF90XzQpIDog X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzMsIF9fcHl4X3RfNCk7Ci0tICAgIF9f UHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLS0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICAgIGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDg3MywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0lOQ1JFRihf X3B5eF92X3dsX2Rpc3BsYXkpOwotKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfd2xfZGlzcGxh eSk7Ci0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPl93bF9kaXNwbGF5KTsKLSsgICAg X19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+X3dsX2Rpc3BsYXkpOwotKyAgICBfX3B5eF92X3Nl bGYtPl93bF9kaXNwbGF5ID0gX19weXhfdl93bF9kaXNwbGF5OwotKwotKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTkwCi0rICogICAgICAgICBpZiB3bF9kaXNwbGF5Ogot KyAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNwbGF5Ci0rICogICAgICAg ICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9w b2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgICAgIGlmIGRybV9kaXNwbGF5OgotKyAqICAgICAgICAgICAgIGRybV9w YXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpCi0rICovCi0rICAgIF9fcHl4X3Rf MiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5k ZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92 X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9XTF9ESVNQTEFZLCBfX3B5eF9mXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9nZXRfcG9pbnRlcigoKGNoYXIgY29uc3QgKikid2xfZGlzcGxheSIpLCBfX3B5 eF92X3dsX2Rpc3BsYXkpLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgOTkwLCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7 Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgICBfX1B5 eF9SYWlzZShfX3B5eF90XzIsIDAsIDAsIDApOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKLS0gICAgX19QWVhfRVJSKDAsIDg3MywgX19weXhfTDFfZXJyb3Ip Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NzIKLS0gKiAgICAg ICAgIHdpdGggbm9naWw6Ci0tICogICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl91bmlu aXRfZ2woc2VsZi5fY3R4KQotLSAqICAgICAgICAgaWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKLS0gKiAg ICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjk4OAotKyAqICAgICAgICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rp c3BsYXkKLSsgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1f WDExX0RJU1BMQVksIGdldF9wb2ludGVyKCJEaXNwbGF5IiwgeDExX2Rpc3BsYXkpKQotKyAqICAg ICAgICAgaWYgd2xfZGlzcGxheTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNwbGF5Ci0rICogICAgICAgICAgICAg cGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9wb2ludGVy KCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCi0gICovCi0gICB9Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODc0Ci0tICogICAgICAgICBpZiBlcnIgPCAwOgotLSAq ICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKLS0gKiAgICAgICAgIHNlbGYuaW5pdGVk ID0gRmFsc2UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIAotLSAqICAgICBkZWYg X19kZWFsbG9jX18oc2VsZik6Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTkxCi0rICogICAgICAgICAgICAgc2VsZi5fd2xfZGlzcGxheSA9IHdsX2Rpc3BsYXkKLSsgKiAg ICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fV0xfRElTUExBWSwg Z2V0X3BvaW50ZXIoIndsX2Rpc3BsYXkiLCB3bF9kaXNwbGF5KSkKLSsgKiAgICAgICAgIGlmIGRy bV9kaXNwbGF5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAg ZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAtMSkKLSsgKiAgICAgICAgICAg ICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKLSAg Ki8KLS0gIF9fcHl4X3Zfc2VsZi0+aW5pdGVkID0gMDsKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5 T2JqZWN0X0lzVHJ1ZShfX3B5eF92X2RybV9kaXNwbGF5KTsgaWYgKHVubGlrZWx5KF9fcHl4X3Rf NiA8IDApKSBfX1BZWF9FUlIoMCwgOTkxLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX3B5eF90 XzYpIHsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NjcKLS0gKiAg ICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCi0tICogCi0tICogICAgIGRlZiB1bmluaXRf Z2woc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGlmIG5v dCBzZWxmLmluaXRlZDoKLS0gKiAgICAgICAgICAgICByZXR1cm4KLSsgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk5MgotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9p ZHAoTVBWX1JFTkRFUl9QQVJBTV9XTF9ESVNQTEFZLCBnZXRfcG9pbnRlcigid2xfZGlzcGxheSIs IHdsX2Rpc3BsYXkpKQotKyAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6Ci0rICogICAgICAgICAg ICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAtMSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRy bV9kaXNwbGF5LmdldCgiY3J0Y19pZCIsIC0xKQotKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMu Y29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkKLSAgKi8K LSsgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2RybV9k aXNwbGF5LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgOTkyLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7 Ci0rICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90 dXBsZV9fNywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5 MiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgICAgX19weXhfdF83ID0g X19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09 IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTkyLCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0r ICAgIF9fcHl4X3ZfZHJtX3BhcmFtcy5mZCA9IF9fcHl4X3RfNzsKLSAKLS0gIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLwotLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25l KTsKLS0gIGdvdG8gX19weXhfTDA7Ci0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0tICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7Ci0tICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5PcGVuR0xDb250ZXh0LnVuaW5pdF9n bCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotLSAgX19w eXhfciA9IE5VTEw7Ci0tICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsK LS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0t fQotLQotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NzYKLS0gKiAgICAgICAg IHNlbGYuaW5pdGVkID0gRmFsc2UKLS0gKiAKLS0gKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLnVuaW5pdF9n bCgpCi0tICogCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTMKLSsg KiAgICAgICAgIGlmIGRybV9kaXNwbGF5OgotKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMuZmQg PSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpCi0rICogICAgICAgICAgICAgZHJtX3BhcmFtcy5j cnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNvbm5lY3Rvcl9pZCA9IGRy bV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpCi0rICogICAgICAgICAgICAgYXJwID0g ZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVxdWVzdF9wdHIiLCBOb25lKQotICAqLwotKyAgICBf X3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfZHJtX2Rpc3BsYXks IF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5 OTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgICAg X19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzEsIF9fcHl4X3R1cGxlX184 LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTkzLCBfX3B5 eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgICBfX3B5eF90XzcgPSBfX1B5eF9Q eUludF9Bc19pbnQoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzcgPT0gKGludCkt MSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA5OTMsIF9fcHl4X0wxX2Vycm9y KQotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgICAgX19w eXhfdl9kcm1fcGFyYW1zLmNydGNfaWQgPSBfX3B5eF90Xzc7Ci0gCi0tLyogUHl0aG9uIHdyYXBw ZXIgKi8KLS1zdGF0aWMgdm9pZCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVu R0xDb250ZXh0XzEzX19kZWFsbG9jX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8q LwotLXN0YXRpYyB2b2lkIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENv bnRleHRfMTNfX2RlYWxsb2NfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Ci0tICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVh bGxvY19fICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzT3BlbkdMQ29udGV4dF8xMl9fZGVhbGxvY19fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOwotLQotLSAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsK LS19Ci0tCi0tc3RhdGljIHZvaWQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3Bl bkdMQ29udGV4dF8xMl9fZGVhbGxvY19fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X09wZW5HTENvbnRleHQgKl9fcHl4X3Zfc2VsZikgewotLSAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMiA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKLS0gIGlu dCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxM OwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fZGVhbGxvY19fIiwgMCk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6ODc3Ci0tICogCi0tICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKLS0gKiAgICAg ICAgIHNlbGYudW5pbml0X2dsKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIAot LSAqIERFRiBNQVhfUkVOREVSX1BBUkFNUyA9IDMyCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5OTQKLSsgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rp c3BsYXkuZ2V0KCJmZCIsIC0xKQotKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9 IGRybV9kaXNwbGF5LmdldCgiY3J0Y19pZCIsIC0xKQotKyAqICAgICAgICAgICAgIGRybV9wYXJh bXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNw bGF5LmdldCgiYXRvbWljX3JlcXVlc3RfcHRyIiwgTm9uZSkKLSsgKiAgICAgICAgICAgICBpZiBh cnAgaXMgbm90IE5vbmU6Ci0gICovCi0tICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfdW5pbml0X2dsKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgODc3LCBfX3B5eF9MMV9lcnJv cikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgX19weXhfdF8zID0gTlVMTDsKLS0g IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfMikpKSB7Ci0tICAgIF9fcHl4X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7 Ci0tICAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkgewotLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlv biA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwotLSAgICAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzMpOwotLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKLS0gICAgfQotLSAgfQotLSAgX19w eXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3Rf MiwgX19weXhfdF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzIpOwotLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgODc3LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgICAg X19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2RybV9kaXNwbGF5 LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg OTk0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICAg IF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90dXBsZV9f OSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5NCwgX19w eXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgICAgX19weXhfdF83ID0gX19QeXhf UHlJbnRfQXNfaW50KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09IChpbnQp LTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTk0LCBfX3B5eF9MMV9lcnJv cikKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICAgIF9f cHl4X3ZfZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBfX3B5eF90Xzc7Ci0gCi0tICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODc2Ci0tICogICAgICAgICBzZWxmLmluaXRlZCA9 IEZhbHNlCi0tICogCi0tICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi51bmluaXRfZ2woKQotLSAqIAotKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk1Ci0rICogICAgICAgICAgICAg ZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpCi0rICog ICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNv bm5lY3Rvcl9pZCIsIC0xKQotKyAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgi YXRvbWljX3JlcXVlc3RfcHRyIiwgTm9uZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKLSsgKiAgICAgICAgICAgICAgICAg ZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0 X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQotICAqLwotKyAgICBfX3B5eF90XzEg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfZHJtX2Rpc3BsYXksIF9fcHl4X25f c19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5OTUsIF9fcHl4 X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgICAgX19weXhfdF8y ID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzEsIF9fcHl4X3R1cGxlX18xMCwgTlVMTCk7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk5NSwgX19weXhfTDFfZXJy b3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgICAgX19weXhfdl9hcnAgPSBfX3B5eF90XzI7Ci0r ICAgIF9fcHl4X3RfMiA9IDA7Ci0gCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIGdv dG8gX19weXhfTDA7Ci0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMyk7Ci0tICBfX1B5eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5P cGVuR0xDb250ZXh0Ll9fZGVhbGxvY19fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBf X3B5eF9maWxlbmFtZSwgMSwgMCk7Ci0tICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKLS19Ci0tCi0tLyogIih0cmVlIGZyYWdtZW50KSI6MQotLSAqIGRlZiBf X3JlZHVjZV9jeXRob25fXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq ICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEg UHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQotLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9f KHNlbGYsIF9fcHl4X3N0YXRlKToKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjk5NgotKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rp c3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkKLSsgKiAgICAgICAgICAgICBhcnAgPSBkcm1f ZGlzcGxheS5nZXQoImF0b21pY19yZXF1ZXN0X3B0ciIsIE5vbmUpCi0rICogICAgICAgICAgICAg aWYgYXJwIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAg ICAgICAgICAgICAgIGRybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gPF9kcm1Nb2RlQXRv bWljUmVxICoqPmdldF9wb2ludGVyKGFycCwgImRybU1vZGVBdG9taWNSZXEqIikKLSsgKiAgICAg ICAgICAgICBkcm1fcGFyYW1zLnJlbmRlcl9mZCA9IGRybV9kaXNwbGF5LmdldCgicmVuZGVyX2Zk IiwgLTEpCi0gICovCi0rICAgIF9fcHl4X3RfNiA9IChfX3B5eF92X2FycCAhPSBQeV9Ob25lKTsK LSsgICAgX19weXhfdF8zID0gKF9fcHl4X3RfNiAhPSAwKTsKLSsgICAgaWYgKF9fcHl4X3RfMykg ewotIAotLS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzE1X19yZWR1Y2VfY3l0aG9uX18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsg Lypwcm90byovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNPcGVuR0xDb250ZXh0XzE1X19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zf c2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7Ci0tICBQeU9iamVjdCAqX19w eXhfciA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fICh3cmFwcGVyKSIsIDApOwotLSAgX19w eXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTRf X3JlZHVjZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X09wZW5HTENvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19w eXhfcjsKLS19Ci0tCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNPcGVuR0xDb250ZXh0XzE0X19yZWR1Y2VfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpfX3B5 eF92X3NlbGYpIHsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLS0gIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCi0tICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLS0gIGludCBf X3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwot LSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo Il9fcmVkdWNlX2N5dGhvbl9fIiwgMCk7Ci0tCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoyCi0t ICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgotLSAqICAgICByYWlzZSBUeXBlRXJyb3Io InNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlj a2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogZGVmIF9fc2V0c3RhdGVf Y3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgotLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNl bGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xp bmciKQotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTcKLSsgKiAg ICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5nZXQoImF0b21pY19yZXF1ZXN0X3B0ciIsIE5v bmUpCi0rICogICAgICAgICAgICAgaWYgYXJwIGlzIG5vdCBOb25lOgotKyAqICAgICAgICAgICAg ICAgICBkcm1fcGFyYW1zLmF0b21pY19yZXF1ZXN0X3B0ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAq Kj5nZXRfcG9pbnRlcihhcnAsICJkcm1Nb2RlQXRvbWljUmVxKiIpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLnJlbmRlcl9mZCA9IGRybV9k aXNwbGF5LmdldCgicmVuZGVyX2ZkIiwgLTEpCi0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF92 b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAmZHJtX3BhcmFtcykKLSAgKi8KLS0g IF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3Is IF9fcHl4X3R1cGxlX182LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0g IF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKLS0gIF9fUFlYX0VSUigxLCAyLCBfX3B5eF9MMV9lcnJvcikK LSsgICAgICBfX3B5eF90XzggPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X2FycCk7 IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfOCkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VS UigwLCA5OTcsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fcHl4X3ZfZHJtX3BhcmFtcy5hdG9t aWNfcmVxdWVzdF9wdHIgPSAoKHN0cnVjdCBfZHJtTW9kZUF0b21pY1JlcSAqKilfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9nZXRfcG9pbnRlcihfX3B5eF90XzgsIF9fcHl4X2twX3NfZHJt TW9kZUF0b21pY1JlcSkpOwotIAotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MQotLSAqIGRlZiBf X3JlZHVjZV9jeXRob25fXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq ICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEg UHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQotLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9f KHNlbGYsIF9fcHl4X3N0YXRlKToKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTk2Ci0rICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1f ZGlzcGxheS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0xKQotKyAqICAgICAgICAgICAgIGFycCA9IGRy bV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVlc3RfcHRyIiwgTm9uZSkKLSsgKiAgICAgICAgICAg ICBpZiBhcnAgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVB dG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQotKyAqICAg ICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJf ZmQiLCAtMSkKLSAgKi8KLSsgICAgfQotIAotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0t ICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5PcGVuR0xDb250ZXh0Ll9fcmVkdWNl X2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 Ci0tICBfX3B5eF9yID0gTlVMTDsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotLSAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0tCi0t LyogIih0cmVlIGZyYWdtZW50KSI6MwotLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToK LS0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0 byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKLS0gKiBkZWYgX19zZXRzdGF0ZV9jeXRo b25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBh IFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjk5OAotKyAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKLSsg KiAgICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1v ZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQotKyAq ICAgICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5k ZXJfZmQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAg IHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9EUk1fRElTUExBWSwgJmRybV9wYXJh bXMpCi0rICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6Ci0gICovCi0rICAgIF9fcHl4X3RfMiA9 IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19weXhfbl9z X2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk5OCwgX19weXhf TDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgICBfX3B5eF90XzEg PSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMiwgX19weXhfdHVwbGVfXzExLCBOVUxMKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTk4LCBfX3B5eF9MMV9lcnJv cikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9Bc19p bnQoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzcgPT0gKGludCktMSkgJiYgUHlF cnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA5OTgsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgICAgX19weXhfdl9kcm1f cGFyYW1zLnJlbmRlcl9mZCA9IF9fcHl4X3RfNzsKLSAKLS0vKiBQeXRob24gd3JhcHBlciAqLwot LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdM Q29udGV4dF8xN19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlP YmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTdfX3NldHN0 YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19f cHl4X3N0YXRlKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0tICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVf Y3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF8xNl9fc2V0c3RhdGVfY3l0aG9uX18oKChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICopX19weXhf dl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsKLS0KLS0gIC8qIGZ1 bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0t ICByZXR1cm4gX19weXhfcjsKLS19Ci0tCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzE2X19zZXRzdGF0ZV9jeXRob25fXyhD WVRIT05fVU5VU0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5H TENvbnRleHQgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfdl9f X3B5eF9zdGF0ZSkgewotLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotLSAgX19QeXhfUmVm TmFubnlEZWNsYXJhdGlvbnMKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotLSAgaW50 IF9fcHl4X2xpbmVubyA9IDA7Ci0tICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7 Ci0tICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgiX19zZXRzdGF0ZV9jeXRob25fXyIsIDApOwotLQotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6 NAotLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVk IHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQotLSAqIGRlZiBfX3NldHN0YXRlX2N5 dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKLS0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxm Ll9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5n IikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTk5Ci0rICogICAgICAgICAgICAgICAgIGRybV9wYXJhbXMuYXRvbWlj X3JlcXVlc3RfcHRyID0gPF9kcm1Nb2RlQXRvbWljUmVxICoqPmdldF9wb2ludGVyKGFycCwgImRy bU1vZGVBdG9taWNSZXEqIikKLSsgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLnJlbmRlcl9mZCA9 IGRybV9kaXNwbGF5LmdldCgicmVuZGVyX2ZkIiwgLTEpCi0rICogICAgICAgICAgICAgcGFyYW1z LmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAmZHJtX3BhcmFtcykgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgaWYgZHJtX29zZF9zaXplOgot KyAqICAgICAgICAgICAgIF9kcm1fb3NkX3NpemUud2lkdGgsIF9kcm1fb3NkX3NpemUuaGVpZ2h0 ID0gZHJtX29zZF9zaXplCi0gICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxs KF9fcHl4X2J1aWx0aW5fVHlwZUVycm9yLCBfX3B5eF90dXBsZV9fNywgTlVMTCk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDAp OwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICBfX1BZWF9F UlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4 X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92 X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRF Ul9QQVJBTV9EUk1fRElTUExBWSwgKCZfX3B5eF92X2RybV9wYXJhbXMpLCBOVUxMKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTk5LCBfX3B5eF9MMV9lcnJvcikKLSsg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEp OyBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MwotLSAqIGRlZiBf X3JlZHVjZV9jeXRob25fXyhzZWxmKToKLS0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9j dHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikK LS0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHgg Y2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKLSsg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MQotKyAqICAgICAgICAgICAg IHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNwbGF5Ci0rICogICAgICAgICAgICAgcGFyYW1zLmFk ZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNw bGF5Iiwgd2xfZGlzcGxheSkpCi0rICogICAgICAgICBpZiBkcm1fZGlzcGxheTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMuZmQgPSBkcm1f ZGlzcGxheS5nZXQoImZkIiwgLTEpCi0rICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jcnRjX2lk ID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpCi0gICovCi0rICB9Ci0gCi0tICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X0wxX2Vycm9yOjsKLS0gIF9fUHl4X1hERUNS RUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2 Lk9wZW5HTENvbnRleHQuX19zZXRzdGF0ZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotLSAgX19weXhfciA9IE5VTEw7Ci0tICBfX1B5eF9Y R0lWRVJFRihfX3B5eF9yKTsKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAg cmV0dXJuIF9fcHl4X3I7Ci0tfQotLQotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo4ODYKLS0gKiAgICAgICAgIG9iamVjdCBvd25lZAotLSAqIAotLSAqICAgICBkZWYgX19pbml0 X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYu b3duZWQgPSBbXQotLSAqICAgICAgICAgc2VsZi5wYXJhbXNbMF0udHlwZSA9IE1QVl9SRU5ERVJf UEFSQU1fSU5WQUxJRAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDAK LSsgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLnJlbmRlcl9mZCA9IGRybV9kaXNwbGF5LmdldCgi cmVuZGVyX2ZkIiwgLTEpCi0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVO REVSX1BBUkFNX0RSTV9ESVNQTEFZLCAmZHJtX3BhcmFtcykKLSsgKiAgICAgICAgIGlmIGRybV9v c2Rfc2l6ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIF9k cm1fb3NkX3NpemUud2lkdGgsIF9kcm1fb3NkX3NpemUuaGVpZ2h0ID0gZHJtX29zZF9zaXplCi0r ICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0Rf U0laRSwgJl9kcm1fb3NkX3NpemUpCi0gICovCi0rICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVj dF9Jc1RydWUoX19weXhfdl9kcm1fb3NkX3NpemUpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwg MCkpIF9fUFlYX0VSUigwLCAxMDAwLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX3B5eF90XzMp IHsKLSAKLS0vKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc18xX19pbml0X18oUHlPYmplY3QgKl9fcHl4 X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypw cm90byovCi0tc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVu ZGVyUGFyYW1zXzFfX2luaXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19w eXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKLS0gIGludCBfX3B5eF9yOwotLSAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X2luaXRfXyAod3JhcHBlcikiLCAwKTsKLS0gIGlmICh1bmxpa2VseShQeVR1cGxlX0dFVF9TSVpF KF9fcHl4X2FyZ3MpID4gMCkpIHsKLS0gICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9f aW5pdF9fIiwgMSwgMCwgMCwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IHJldHVybiAt MTt9Ci0tICBpZiAodW5saWtlbHkoX19weXhfa3dkcykgJiYgdW5saWtlbHkoUHlEaWN0X1NpemUo X19weXhfa3dkcykgPiAwKSAmJiB1bmxpa2VseSghX19QeXhfQ2hlY2tLZXl3b3JkU3RyaW5ncyhf X3B5eF9rd2RzLCAiX19pbml0X18iLCAwKSkpIHJldHVybiAtMTsKLS0gIF9fcHl4X3IgPSBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX19faW5pdF9fKCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4 X3Zfc2VsZikpOwotLQotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLS0KLS1zdGF0aWMg aW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfX19pbml0 X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAq X19weXhfdl9zZWxmKSB7Ci0tICBpbnQgX19weXhfcjsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFy YXRpb25zCi0tICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLS0gIGludCBfX3B5eF9saW5l bm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9f cHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9f IiwgMCk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODg3Ci0tICog Ci0tICogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLS0gKiAgICAgICAgIHNlbGYub3duZWQgPSBb XSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLnBhcmFtc1sw XS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElECi0rICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDAxCi0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChN UFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAmZHJtX3BhcmFtcykKLSsgKiAgICAgICAgIGlm IGRybV9vc2Rfc2l6ZToKLSsgKiAgICAgICAgICAgICBfZHJtX29zZF9zaXplLndpZHRoLCBfZHJt X29zZF9zaXplLmhlaWdodCA9IGRybV9vc2Rfc2l6ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RS TV9PU0RfU0laRSwgJl9kcm1fb3NkX3NpemUpCi0gICogCi0gICovCi0tICBfX3B5eF90XzEgPSBQ eUxpc3RfTmV3KDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4ODcs IF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9H SVZFUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5vd25lZCk7 Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5vd25lZCk7Ci0tICBfX3B5eF92X3NlbGYt Pm93bmVkID0gX19weXhfdF8xOwotLSAgX19weXhfdF8xID0gMDsKLS0KLS0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4ODgKLS0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgot LSAqICAgICAgICAgc2VsZi5vd25lZCA9IFtdCi0tICogICAgICAgICBzZWxmLnBhcmFtc1swXS50 eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElEICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAKLS0gKiAgICAgY2RlZiBhZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90 eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFsc2UpOgotLSAqLwotLSAgKF9fcHl4X3Zfc2Vs Zi0+cGFyYW1zWzBdKS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElEOwotKyAgICBpZiAo KGxpa2VseShQeVR1cGxlX0NoZWNrRXhhY3QoX19weXhfdl9kcm1fb3NkX3NpemUpKSkgfHwgKFB5 TGlzdF9DaGVja0V4YWN0KF9fcHl4X3ZfZHJtX29zZF9zaXplKSkpIHsKLSsgICAgICBQeU9iamVj dCogc2VxdWVuY2UgPSBfX3B5eF92X2RybV9vc2Rfc2l6ZTsKLSsgICAgICBQeV9zc2l6ZV90IHNp emUgPSBfX1B5eF9QeVNlcXVlbmNlX1NJWkUoc2VxdWVuY2UpOwotKyAgICAgIGlmICh1bmxpa2Vs eShzaXplICE9IDIpKSB7Ci0rICAgICAgICBpZiAoc2l6ZSA+IDIpIF9fUHl4X1JhaXNlVG9vTWFu eVZhbHVlc0Vycm9yKDIpOwotKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA+PSAwKSBfX1B5eF9SYWlz ZU5lZWRNb3JlVmFsdWVzRXJyb3Ioc2l6ZSk7Ci0rICAgICAgICBfX1BZWF9FUlIoMCwgMTAwMSwg X19weXhfTDFfZXJyb3IpCi0rICAgICAgfQotKyAgICAgICNpZiBDWVRIT05fQVNTVU1FX1NBRkVf TUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUwotKyAgICAgIGlmIChsaWtlbHko UHlUdXBsZV9DaGVja0V4YWN0KHNlcXVlbmNlKSkpIHsKLSsgICAgICAgIF9fcHl4X3RfMSA9IFB5 VHVwbGVfR0VUX0lURU0oc2VxdWVuY2UsIDApOyAKLSsgICAgICAgIF9fcHl4X3RfMiA9IFB5VHVw bGVfR0VUX0lURU0oc2VxdWVuY2UsIDEpOyAKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgX19w eXhfdF8xID0gUHlMaXN0X0dFVF9JVEVNKHNlcXVlbmNlLCAwKTsgCi0rICAgICAgICBfX3B5eF90 XzIgPSBQeUxpc3RfR0VUX0lURU0oc2VxdWVuY2UsIDEpOyAKLSsgICAgICB9Ci0rICAgICAgX19Q eXhfSU5DUkVGKF9fcHl4X3RfMSk7Ci0rICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMik7Ci0r ICAgICAgI2Vsc2UKLSsgICAgICBfX3B5eF90XzEgPSBQeVNlcXVlbmNlX0lURU0oc2VxdWVuY2Us IDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9M MV9lcnJvcikKLSsgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgICAgICBfX3B5eF90 XzIgPSBQeVNlcXVlbmNlX0lURU0oc2VxdWVuY2UsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKLSsgICAgICAjZW5kaWYKLSsgICAgfSBlbHNlIHsKLSsgICAgICBQeV9z c2l6ZV90IGluZGV4ID0gLTE7Ci0rICAgICAgX19weXhfdF80ID0gUHlPYmplY3RfR2V0SXRlcihf X3B5eF92X2RybV9vc2Rfc2l6ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDAsIDEwMDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQp OwotKyAgICAgIF9fcHl4X3RfOSA9IFB5X1RZUEUoX19weXhfdF80KS0+dHBfaXRlcm5leHQ7Ci0r ICAgICAgaW5kZXggPSAwOyBfX3B5eF90XzEgPSBfX3B5eF90XzkoX19weXhfdF80KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBnb3RvIF9fcHl4X0wxMV91bnBhY2tpbmdfZmFpbGVkOwotKyAg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICAgIGluZGV4ID0gMTsgX19weXhfdF8y ID0gX19weXhfdF85KF9fcHl4X3RfNCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgZ290byBf X3B5eF9MMTFfdW5wYWNraW5nX2ZhaWxlZDsKLSsgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKLSsgICAgICBpZiAoX19QeXhfSXRlcm5leHRVbnBhY2tFbmRDaGVjayhfX3B5eF90XzkoX19w eXhfdF80KSwgMikgPCAwKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCi0rICAg ICAgX19weXhfdF85ID0gTlVMTDsKLSsgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19w eXhfdF80ID0gMDsKLSsgICAgICBnb3RvIF9fcHl4X0wxMl91bnBhY2tpbmdfZG9uZTsKLSsgICAg ICBfX3B5eF9MMTFfdW5wYWNraW5nX2ZhaWxlZDo7Ci0rICAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICAgICAgX19weXhfdF85ID0gTlVMTDsKLSsgICAgICBp ZiAoX19QeXhfSXRlckZpbmlzaCgpID09IDApIF9fUHl4X1JhaXNlTmVlZE1vcmVWYWx1ZXNFcnJv cihpbmRleCk7Ci0rICAgICAgX19QWVhfRVJSKDAsIDEwMDEsIF9fcHl4X0wxX2Vycm9yKQotKyAg ICAgIF9fcHl4X0wxMl91bnBhY2tpbmdfZG9uZTo7Ci0rICAgIH0KLSsgICAgX19weXhfdF83ID0g X19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09 IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhf TDFfZXJyb3IpCi0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwot KyAgICBfX3B5eF90XzEwID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMik7IGlmICh1bmxp a2VseSgoX19weXhfdF8xMCA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDEwMDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKLSsgICAgX19weXhfdl9fZHJtX29zZF9zaXplLndpZHRoID0gX19w eXhfdF83OwotKyAgICBfX3B5eF92X19kcm1fb3NkX3NpemUuaGVpZ2h0ID0gX19weXhfdF8xMDsK LSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4ODYKLS0gKiAgICAgICAg IG9iamVjdCBvd25lZAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAw MgotKyAqICAgICAgICAgaWYgZHJtX29zZF9zaXplOgotKyAqICAgICAgICAgICAgIF9kcm1fb3Nk X3NpemUud2lkdGgsIF9kcm1fb3NkX3NpemUuaGVpZ2h0ID0gZHJtX29zZF9zaXplCi0rICogICAg ICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwg Jl9kcm1fb3NkX3NpemUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAKLS0gKiAg ICAgZGVmIF9faW5pdF9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgICAgICBzZWxmLm93bmVkID0gW10KLS0gKiAgICAgICAgIHNlbGYucGFyYW1zWzBdLnR5cGUg PSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQKLSsgKiAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJf Y29udGV4dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2Ll9jdHgsIHBhcmFtcy5wYXJhbXMp Ci0gICovCi0rICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1 dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19weXhfdnRh YiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9EUk1fT1NEX1NJ WkUsICgmX19weXhfdl9fZHJtX29zZF9zaXplKSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDEwMDIsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9 IDA7Ci0gCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X3IgPSAwOwotLSAg Z290byBfX3B5eF9MMDsKLS0gIF9fcHl4X0wxX2Vycm9yOjsKLS0gIF9fUHl4X1hERUNSRUYoX19w eXhfdF8xKTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9SZW5k ZXJQYXJhbXMuX19pbml0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2Zp bGVuYW1lKTsKLS0gIF9fcHl4X3IgPSAtMTsKLS0gIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotLQotLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTAKLS0gKiAgICAgICAgIHNlbGYucGFyYW1zWzBd LnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQKLS0gKiAKLS0gKiAgICAgY2RlZiBhZGRf dm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9 RmFsc2UpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjb3VudCA9 IGxlbihzZWxmLm93bmVkKQotLSAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJB TVM6Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDAwCi0rICogICAg ICAgICAgICAgZHJtX3BhcmFtcy5yZW5kZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJlbmRlcl9m ZCIsIC0xKQotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJB TV9EUk1fRElTUExBWSwgJmRybV9wYXJhbXMpCi0rICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBfZHJtX29zZF9z aXplLndpZHRoLCBfZHJtX29zZF9zaXplLmhlaWdodCA9IGRybV9vc2Rfc2l6ZQotKyAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9EUk1fT1NEX1NJWkUsICZf ZHJtX29zZF9zaXplKQotICAqLwotLQotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF92b2lkcChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpfX3B5eF92X3NlbGYsIGVudW0g bXB2X3JlbmRlcl9wYXJhbV90eXBlIF9fcHl4X3ZfdCwgdm9pZCAqX19weXhfdl9wLCBzdHJ1Y3Qg X19weXhfb3B0X2FyZ3NfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRf dm9pZHAgKl9fcHl4X29wdGlvbmFsX2FyZ3MpIHsKLS0gIGludCBfX3B5eF92X293bmVkID0gKChp bnQpMCk7Ci0tICBQeU9iamVjdCAqX19weXhfdl9jb3VudCA9IE5VTEw7Ci0tICBQeU9iamVjdCAq X19weXhfciA9IE5VTEw7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgUHlPYmpl Y3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0tICBQeV9zc2l6ZV90IF9fcHl4X3RfMjsKLS0gIGludCBf X3B5eF90XzM7Ci0tICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpf X3B5eF90XzUgPSBOVUxMOwotLSAgaW50IF9fcHl4X3RfNjsKLS0gIGludCBfX3B5eF9saW5lbm8g PSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImFkZF92b2lkcCIs IDApOwotLSAgaWYgKF9fcHl4X29wdGlvbmFsX2FyZ3MpIHsKLS0gICAgaWYgKF9fcHl4X29wdGlv bmFsX2FyZ3MtPl9fcHl4X24gPiAwKSB7Ci0tICAgICAgX19weXhfdl9vd25lZCA9IF9fcHl4X29w dGlvbmFsX2FyZ3MtPm93bmVkOwotLSAgICB9Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6ODkxCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTAwNAotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJB TV9EUk1fT1NEX1NJWkUsICZfZHJtX29zZF9zaXplKQotICAqIAotLSAqICAgICBjZGVmIGFkZF92 b2lkcChzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgdm9pZCAqcCwgYmludCBvd25lZD1G YWxzZSk6Ci0tICogICAgICAgICBjb3VudCA9IGxlbihzZWxmLm93bmVkKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBpZiBjb3VudCA+PSBNQVhfUkVOREVSX1BBUkFN UzoKLS0gKiAgICAgICAgICAgICBpZiBvd25lZDoKLS0gKi8KLS0gIF9fcHl4X3RfMSA9IF9fcHl4 X3Zfc2VsZi0+b3duZWQ7Ci0tICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKLS0gIF9fcHl4X3Rf MiA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF8yID09 ICgoUHlfc3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMCwgODkxLCBfX3B5eF9MMV9lcnJvcikKLS0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgX19weXhfdF8xID0g UHlJbnRfRnJvbVNzaXplX3QoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgODkxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOwotLSAgX19weXhfdl9jb3VudCA9IF9fcHl4X3RfMTsKLS0gIF9fcHl4X3RfMSA9IDA7Ci0t Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODkyCi0tICogICAgIGNkZWYg YWRkX3ZvaWRwKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSB0LCB2b2lkICpwLCBiaW50IG93 bmVkPUZhbHNlKToKLS0gKiAgICAgICAgIGNvdW50ID0gbGVuKHNlbGYub3duZWQpCi0tICogICAg ICAgICBpZiBjb3VudCA+PSBNQVhfUkVOREVSX1BBUkFNUzogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgICAgIGlmIG93bmVkOgotLSAqICAgICAgICAgICAgICAgICBm cmVlKHApCi0tICovCi0tICBfX3B5eF90XzEgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92 X2NvdW50LCBfX3B5eF9pbnRfMzIsIFB5X0dFKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzEpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4OTIsIF9fcHl4X0wxX2Vycm9y KQotLSAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1 bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDg5MiwgX19weXhfTDFfZXJyb3Ip Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLS0gIGlmIChfX3B5 eF90XzMpIHsKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5Mwot LSAqICAgICAgICAgY291bnQgPSBsZW4oc2VsZi5vd25lZCkKLS0gKiAgICAgICAgIGlmIGNvdW50 ID49IE1BWF9SRU5ERVJfUEFSQU1TOgotLSAqICAgICAgICAgICAgIGlmIG93bmVkOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgIGZyZWUocCkKLS0gKiAg ICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJSZW5kZXJQYXJhbXMgb3ZlcmZsb3ciKQotKyAq ICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2NyZWF0ZSgmc2VsZi5fY3R4LCBzZWxm Ll9tcHYuX2N0eCwgcGFyYW1zLnBhcmFtcykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAqICAgICAgICAgaWYgZXJyIDwgMDoKLSsgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihl cnIpCi0gICovCi0tICAgIF9fcHl4X3RfMyA9IChfX3B5eF92X293bmVkICE9IDApOwotLSAgICBp ZiAoX19weXhfdF8zKSB7Ci0rICBfX3B5eF92X2VyciA9IG1wdl9yZW5kZXJfY29udGV4dF9jcmVh dGUoKCZfX3B5eF92X3NlbGYtPl9jdHgpLCBfX3B5eF92X3NlbGYtPl9tcHYtPl9jdHgsIF9fcHl4 X3ZfcGFyYW1zLT5wYXJhbXMpOwotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4OTQKLS0gKiAgICAgICAgIGlmIGNvdW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOgot LSAqICAgICAgICAgICAgIGlmIG93bmVkOgotLSAqICAgICAgICAgICAgICAgICBmcmVlKHApICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVy cm9yKCJSZW5kZXJQYXJhbXMgb3ZlcmZsb3ciKQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwMDUKLSAgKiAKLSsgKiAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4 dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2Ll9jdHgsIHBhcmFtcy5wYXJhbXMpCi0rICog ICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAg ICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQotKyAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBU cnVlCi0gICovCi0tICAgICAgZnJlZShfX3B5eF92X3ApOwotLQotLSAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTMKLS0gKiAgICAgICAgIGNvdW50ID0gbGVuKHNlbGYu b3duZWQpCi0tICogICAgICAgICBpZiBjb3VudCA+PSBNQVhfUkVOREVSX1BBUkFNUzoKLS0gKiAg ICAgICAgICAgICBpZiBvd25lZDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgICAgICAgICBmcmVlKHApCi0tICogICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJvcigi UmVuZGVyUGFyYW1zIG92ZXJmbG93IikKLS0gKi8KLS0gICAgfQotKyAgX19weXhfdF8zID0gKChf X3B5eF92X2VyciA8IDApICE9IDApOwotKyAgaWYgKHVubGlrZWx5KF9fcHl4X3RfMykpIHsKLSAK LS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5NQotLSAqICAgICAgICAg ICAgIGlmIG93bmVkOgotLSAqICAgICAgICAgICAgICAgICBmcmVlKHApCi0tICogICAgICAgICAg ICAgcmFpc2UgUHlNUFZFcnJvcigiUmVuZGVyUGFyYW1zIG92ZXJmbG93IikgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTAwNgotKyAqICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2NyZWF0ZSgmc2VsZi5f Y3R4LCBzZWxmLl9tcHYuX2N0eCwgcGFyYW1zLnBhcmFtcykKLSsgKiAgICAgICAgIGlmIGVyciA8 IDA6Ci0rICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBzZWxmLmluaXRlZCA9IFRydWUKLSAgKiAKLS0gKiAg ICAgICAgIHNlbGYucGFyYW1zW2NvdW50XS50eXBlID0gdAotICAqLwotLSAgICBfX1B5eF9HZXRN b2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX1B5TVBWRXJyb3IpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA4OTUsIF9fcHl4X0wxX2Vycm9yKQotKyAg ICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhfbl9zX01QVkVycm9y KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTAwNiwgX19weXhfTDFf ZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICBfX3B5eF90XzQgPSBf X1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF80 KSkgX19QWVhfRVJSKDAsIDEwMDYsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF80KTsKLSAgICAgX19weXhfdF81ID0gTlVMTDsKLS0gICAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzQpKSkgewotLSAg ICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNCk7Ci0rICAgIGlmIChD WVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8x KSkpIHsKLSsgICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzEpOwot ICAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewotLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0 aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNCk7Ci0rICAgICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8xKTsKLSAgICAgICAg IF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOwotICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKLS0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF80LCBmdW5jdGlvbik7Ci0rICAg ICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMSwgZnVuY3Rpb24pOwotICAgICAgIH0KLSAg ICAgfQotLSAgICBfX3B5eF90XzEgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwy QXJncyhfX3B5eF90XzQsIF9fcHl4X3RfNSwgX19weXhfa3Bfc19SZW5kZXJQYXJhbXNfb3ZlcmZs b3cpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X2twX3NfUmVu ZGVyUGFyYW1zX292ZXJmbG93KTsKLSsgICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5 eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8xLCBfX3B5eF90XzUsIF9fcHl4X3RfNCkgOiBf X1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMSwgX19weXhfdF80KTsKLSAgICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotLSAgICBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4OTUsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4 X3RfNCA9IDA7Ci0tICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7Ci0rICAgIGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwMDYsIF9fcHl4X0wxX2Vycm9y KQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICAgIF9fUFlYX0VSUigwLCA4OTUsIF9fcHl4X0wxX2Vy cm9yKQotKyAgICBfX1B5eF9SYWlzZShfX3B5eF90XzIsIDAsIDAsIDApOwotKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgICAgX19QWVhfRVJSKDAsIDEwMDYs IF9fcHl4X0wxX2Vycm9yKQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6ODkyCi0tICogICAgIGNkZWYgYWRkX3ZvaWRwKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlw ZSB0LCB2b2lkICpwLCBiaW50IG93bmVkPUZhbHNlKToKLS0gKiAgICAgICAgIGNvdW50ID0gbGVu KHNlbGYub3duZWQpCi0tICogICAgICAgICBpZiBjb3VudCA+PSBNQVhfUkVOREVSX1BBUkFNUzog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGlmIG93bmVkOgot LSAqICAgICAgICAgICAgICAgICBmcmVlKHApCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDA1Ci0rICogCi0rICogICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRl eHRfY3JlYXRlKCZzZWxmLl9jdHgsIHNlbGYuX21wdi5fY3R4LCBwYXJhbXMucGFyYW1zKQotKyAq ICAgICAgICAgaWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKLSsgKiAgICAgICAgIHNlbGYuaW5pdGVkID0g VHJ1ZQotICAqLwotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojg5NwotLSAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlJlbmRlclBhcmFtcyBvdmVy ZmxvdyIpCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAwNwotKyAqICAg ICAgICAgaWYgZXJyIDwgMDoKLSsgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCi0r ICogICAgICAgICBzZWxmLmluaXRlZCA9IFRydWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqIAotLSAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLnR5cGUgPSB0ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50XS5kYXRh ID0gcAotLSAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnQgKyAxXS50eXBlID0gTVBWX1JFTkRF Ul9QQVJBTV9JTlZBTElECi0rICogICAgIEBfZXJyb3JzCi0gICovCi0tICBfX3B5eF90XzIgPSBf X1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5eF92X2NvdW50KTsgaWYgKHVubGlrZWx5KChfX3B5 eF90XzIgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIo MCwgODk3LCBfX3B5eF9MMV9lcnJvcikKLS0gIChfX3B5eF92X3NlbGYtPnBhcmFtc1tfX3B5eF90 XzJdKS50eXBlID0gX19weXhfdl90OwotKyAgX19weXhfdl9zZWxmLT5pbml0ZWQgPSAxOwotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5OAotKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk1MAotKyAqICAgICAgICAgYmludCBpbml0ZWQKLSAgKiAK LS0gKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50XS50eXBlID0gdAotLSAqICAgICAgICAgc2Vs Zi5wYXJhbXNbY291bnRdLmRhdGEgPSBwICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50ICsgMV0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1f SU5WQUxJRAotLSAqICAgICAgICAgc2VsZi5vd25lZC5hcHBlbmQob3duZWQpCi0tICovCi0tICBf X3B5eF90XzIgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5eF92X2NvdW50KTsgaWYgKHVu bGlrZWx5KChfX3B5eF90XzIgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkp KSBfX1BZWF9FUlIoMCwgODk4LCBfX3B5eF9MMV9lcnJvcikKLS0gIChfX3B5eF92X3NlbGYtPnBh cmFtc1tfX3B5eF90XzJdKS5kYXRhID0gX19weXhfdl9wOwotLQotLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjg5OQotLSAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLnR5 cGUgPSB0Ci0tICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudF0uZGF0YSA9IHAKLS0gKiAgICAg ICAgIHNlbGYucGFyYW1zW2NvdW50ICsgMV0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJ RCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLm93bmVkLmFw cGVuZChvd25lZCkKLS0gKiAKLS0gKi8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0FkZE9i akMoX19weXhfdl9jb3VudCwgX19weXhfaW50XzEsIDEsIDAsIDApOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4OTksIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7Ci0tICBfX3B5eF90XzIgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChf X3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoUHlfc3NpemVfdCktMSkgJiYg UHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4OTksIF9fcHl4X0wxX2Vycm9yKQotLSAg X19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICAoX19weXhfdl9zZWxm LT5wYXJhbXNbX19weXhfdF8yXSkudHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJRDsKLS0K LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDAKLS0gKiAgICAgICAgIHNl bGYucGFyYW1zW2NvdW50XS5kYXRhID0gcAotLSAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnQg KyAxXS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElECi0tICogICAgICAgICBzZWxmLm93 bmVkLmFwcGVuZChvd25lZCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIAotLSAq ICAgICBjZGVmIGFkZF9pbnQoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGludCB2YWwp OgotLSAqLwotLSAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKF9fcHl4X3Zfb3du ZWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MDAsIF9fcHl4X0wx X2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX3B5eF90XzYgPSBfX1B5 eF9QeU9iamVjdF9BcHBlbmQoX19weXhfdl9zZWxmLT5vd25lZCwgX19weXhfdF8xKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfNiA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMCwgOTAwLCBfX3B5eF9M MV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLQot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5MAotLSAqICAgICAgICAgc2Vs Zi5wYXJhbXNbMF0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJRAotLSAqIAotLSAqICAg ICBjZGVmIGFkZF92b2lkcChzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgdm9pZCAqcCwg YmludCBvd25lZD1GYWxzZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAg ICAgIGNvdW50ID0gbGVuKHNlbGYub3duZWQpCi0tICogICAgICAgICBpZiBjb3VudCA+PSBNQVhf UkVOREVSX1BBUkFNUzoKLSsgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1wdiwgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgICAgICAgYXBpX3R5cGUsCi0rICog ICAgICAgICAgICAgICAgICBvcGVuZ2xfaW5pdF9wYXJhbXM9Tm9uZSwKLSAgKi8KLSAKLSAgIC8q IGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JF RihQeV9Ob25lKTsKLSsgIF9fcHl4X3IgPSAwOwotICAgZ290byBfX3B5eF9MMDsKLSAgIF9fcHl4 X0wxX2Vycm9yOjsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X1hERUNS RUYoX19weXhfdF8yKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKLSAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF81KTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMu bXB2Ll9SZW5kZXJQYXJhbXMuYWRkX3ZvaWRwIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5v LCBfX3B5eF9maWxlbmFtZSk7Ci0tICBfX3B5eF9yID0gMDsKLSsgIF9fUHl4X0FkZFRyYWNlYmFj aygidmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckNvbnRleHQuX19pbml0X18iLCBfX3B5eF9jbGlu ZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fcHl4X3IgPSAtMTsKLSAg IF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9jb3VudCk7Ci0tICBfX1B5eF9Y R0lWRVJFRihfX3B5eF9yKTsKLSsgIF9fUHl4X1hERUNSRUYoKFB5T2JqZWN0ICopX19weXhfdl9w YXJhbXMpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X2FycCk7Ci0gICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTAyCi0tICogICAgICAgICBzZWxmLm93bmVkLmFwcGVu ZChvd25lZCkKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAxMAotICAqIAot LSAqICAgICBjZGVmIGFkZF9pbnQoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGludCB2 YWwpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjZGVmIGludCAq cCA9IDxpbnQgKj5tYWxsb2Moc2l6ZW9mKGludCkpCi0tICogICAgICAgICBwWzBdID0gdmFsCi0r ICogICAgIEBfZXJyb3JzCi0rICogICAgIGRlZiBzZXRfaWNjX3Byb2ZpbGUoc2VsZiwgaWNjX2Js b2IpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBjZGVmOgotKyAq ICAgICAgICAgICAgIG1wdl9yZW5kZXJfcGFyYW0gcGFyYW0KLSAgKi8KLSAKLS1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRf aW50KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMg Kl9fcHl4X3Zfc2VsZiwgZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgX19weXhfdl90LCBpbnQg X19weXhfdl92YWwpIHsKLS0gIGludCAqX19weXhfdl9wOwotKy8qIFB5dGhvbiB3cmFwcGVyICov Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5k ZXJDb250ZXh0XzNzZXRfaWNjX3Byb2ZpbGUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfaWNjX2Jsb2IpOyAvKnByb3RvKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfM3NldF9pY2NfcHJvZmls ZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9pY2NfYmxvYikgewot KyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK LSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfaWNjX3Byb2ZpbGUgKHdyYXBwZXIp IiwgMCk7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVu ZGVyQ29udGV4dF8yc2V0X2ljY19wcm9maWxlKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilf X3B5eF92X2ljY19ibG9iKSk7Ci0rCi0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIF9fcHl4X3I7Ci0rfQotKwot K3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVy Q29udGV4dF8yc2V0X2ljY19wcm9maWxlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfaWNj X2Jsb2IpIHsKLSsgIHN0cnVjdCBtcHZfcmVuZGVyX3BhcmFtIF9fcHl4X3ZfcGFyYW07Ci0rICBz dHJ1Y3QgbXB2X2J5dGVfYXJyYXkgX19weXhfdl92YWw7Ci0rICBpbnQgX19weXhfdl9lcnI7Ci0g ICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9u cwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0rICBpbnQgX19weXhfdF8xOwotKyAg aW50IF9fcHl4X3RfMjsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOwotKyAgUHlPYmpl Y3QgKl9fcHl4X3RfNCA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKLSsg IGNoYXIgKl9fcHl4X3RfNjsKLSsgIFB5X3NzaXplX3QgX19weXhfdF83OwotICAgaW50IF9fcHl4 X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0gICBp bnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiYWRk X2ludCIsIDApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldF9pY2NfcHJvZmls ZSIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwMwotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMTYKLSsgKiAgICAgICAgICAgICBp bnQgZXJyCi0gICogCi0tICogICAgIGNkZWYgYWRkX2ludChzZWxmLCBtcHZfcmVuZGVyX3BhcmFt X3R5cGUgdCwgaW50IHZhbCk6Ci0tICogICAgICAgICBjZGVmIGludCAqcCA9IDxpbnQgKj5tYWxs b2Moc2l6ZW9mKGludCkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg IHBbMF0gPSB2YWwKLS0gKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApCi0rICogICAgICAg ICBpZiBub3QgaXNpbnN0YW5jZShpY2NfYmxvYiwgYnl0ZXMpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJvcigiaWNjX2Jsb2Igc2hv dWxkIGJlIGEgYnl0ZXMgaW5zdGFuY2UiKQotKyAqICAgICAgICAgdmFsLmRhdGEgPSA8dm9pZCAq PjxjaGFyICo+aWNjX2Jsb2IKLSAgKi8KLS0gIF9fcHl4X3ZfcCA9ICgoaW50ICopbWFsbG9jKChz aXplb2YoaW50KSkpKTsKLSsgIF9fcHl4X3RfMSA9IFB5Qnl0ZXNfQ2hlY2soX19weXhfdl9pY2Nf YmxvYik7IAotKyAgX19weXhfdF8yID0gKCghKF9fcHl4X3RfMSAhPSAwKSkgIT0gMCk7Ci0rICBp ZiAodW5saWtlbHkoX19weXhfdF8yKSkgewotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjkwNAotLSAqICAgICBjZGVmIGFkZF9pbnQoc2VsZiwgbXB2X3JlbmRlcl9wYXJh bV90eXBlIHQsIGludCB2YWwpOgotLSAqICAgICAgICAgY2RlZiBpbnQgKnAgPSA8aW50ICo+bWFs bG9jKHNpemVvZihpbnQpKQotLSAqICAgICAgICAgcFswXSA9IHZhbCAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLmFkZF92b2lkcCh0LCBwKQotKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAxNwotICAqIAotKyAqICAgICAgICAgaWYg bm90IGlzaW5zdGFuY2UoaWNjX2Jsb2IsIGJ5dGVzKToKLSsgKiAgICAgICAgICAgICByYWlzZSBQ eU1QVkVycm9yKCJpY2NfYmxvYiBzaG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHZhbC5kYXRhID0gPHZvaWQgKj48Y2hh ciAqPmljY19ibG9iCi0rICogICAgICAgICB2YWwuc2l6ZSA9IGxlbihpY2NfYmxvYikKLSAgKi8K LS0gIChfX3B5eF92X3BbMF0pID0gX19weXhfdl92YWw7Ci0rICAgIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3NfUHlNUFZFcnJvcik7IGlmICh1bmxpa2VseSgh X19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwMTcsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF80KTsKLSsgICAgX19weXhfdF81ID0gTlVMTDsKLSsgICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzQp KSkgewotKyAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNCk7Ci0r ICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7Ci0rICAgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF80KTsKLSsgICAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzUpOwotKyAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAg ICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF80LCBmdW5jdGlvbik7Ci0rICAgICAgfQotKyAg ICB9Ci0rICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfNCwgX19weXhfdF81LCBfX3B5eF9rcF9zX2ljY19ibG9iX3Nob3VsZF9iZV9h X2J5dGVzX2luc3RhKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF80LCBfX3B5 eF9rcF9zX2ljY19ibG9iX3Nob3VsZF9iZV9hX2J5dGVzX2luc3RhKTsKLSsgICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotKyAgICBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCAxMDE3LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQg PSAwOwotKyAgICBfX1B5eF9SYWlzZShfX3B5eF90XzMsIDAsIDAsIDApOwotKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSsgICAgX19QWVhfRVJSKDAsIDEwMTcs IF9fcHl4X0wxX2Vycm9yKQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjkwNQotLSAqICAgICAgICAgY2RlZiBpbnQgKnAgPSA8aW50ICo+bWFsbG9jKHNpemVvZihpbnQp KQotLSAqICAgICAgICAgcFswXSA9IHZhbAotLSAqICAgICAgICAgc2VsZi5hZGRfdm9pZHAodCwg cCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTAxNgotKyAqICAgICAgICAgICAgIGludCBlcnIKLSAgKiAKLS0gKiAg ICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBjaGFyICpz KToKLSsgKiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGljY19ibG9iLCBieXRlcyk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9y KCJpY2NfYmxvYiBzaG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIpCi0rICogICAgICAgICB2YWwu ZGF0YSA9IDx2b2lkICo+PGNoYXIgKj5pY2NfYmxvYgotICAqLwotLSAgX19weXhfdF8xID0gKChz dHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFt cyAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3NlbGYsIF9f cHl4X3ZfdCwgX19weXhfdl9wLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgOTA1LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICB9Ci0gCi0t ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTAyCi0tICogICAgICAgICBzZWxm Lm93bmVkLmFwcGVuZChvd25lZCkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDE4Ci0rICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpY2NfYmxvYiwgYnl0ZXMpOgot KyAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoImljY19ibG9iIHNob3VsZCBiZSBhIGJ5 dGVzIGluc3RhbmNlIikKLSsgKiAgICAgICAgIHZhbC5kYXRhID0gPHZvaWQgKj48Y2hhciAqPmlj Y19ibG9iICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHZhbC5zaXpl ID0gbGVuKGljY19ibG9iKQotICAqIAotLSAqICAgICBjZGVmIGFkZF9pbnQoc2VsZiwgbXB2X3Jl bmRlcl9wYXJhbV90eXBlIHQsIGludCB2YWwpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgICAgICBjZGVmIGludCAqcCA9IDxpbnQgKj5tYWxsb2Moc2l6ZW9mKGludCkpCi0t ICogICAgICAgICBwWzBdID0gdmFsCi0gICovCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVj dF9Bc1dyaXRhYmxlU3RyaW5nKF9fcHl4X3ZfaWNjX2Jsb2IpOyBpZiAodW5saWtlbHkoKCFfX3B5 eF90XzYpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMTAxOCwgX19weXhfTDFf ZXJyb3IpCi0rICBfX3B5eF92X3ZhbC5kYXRhID0gKCh2b2lkICopKChjaGFyICopX19weXhfdF82 KSk7Ci0gCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X3IgPSBQeV9Ob25l OyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0tICBnb3RvIF9fcHl4X0wwOwotLSAgX19weXhfTDFf ZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAgX19QeXhfQWRkVHJhY2Vi YWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlbmRlclBhcmFtcy5hZGRfaW50IiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICBfX3B5eF9yID0gMDsKLS0g IF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotLSAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0tCi0tLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwNwotLSAqICAgICAgICAgc2VsZi5hZGRfdm9pZHAo dCwgcCkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDE5Ci0rICogICAg ICAgICAgICAgcmFpc2UgUHlNUFZFcnJvcigiaWNjX2Jsb2Igc2hvdWxkIGJlIGEgYnl0ZXMgaW5z dGFuY2UiKQotKyAqICAgICAgICAgdmFsLmRhdGEgPSA8dm9pZCAqPjxjaGFyICo+aWNjX2Jsb2IK LSsgKiAgICAgICAgIHZhbC5zaXplID0gbGVuKGljY19ibG9iKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0gICogCi0tICogICAgIGNkZWYgYWRkX3N0cmluZyhzZWxmLCBtcHZfcmVuZGVy X3BhcmFtX3R5cGUgdCwgY2hhciAqcyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgIGNkZWYgY2hhciAqcCA9IDxjaGFyICo+bWFsbG9jKHN0cmxlbihzKSArIDEpCi0t ICogICAgICAgICBzdHJjcHkocCwgcykKLSsgKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVO REVSX1BBUkFNX0lDQ19QUk9GSUxFCi0gICovCi0rICBfX3B5eF90XzcgPSBQeU9iamVjdF9MZW5n dGgoX19weXhfdl9pY2NfYmxvYik7IGlmICh1bmxpa2VseShfX3B5eF90XzcgPT0gKChQeV9zc2l6 ZV90KS0xKSkpIF9fUFlYX0VSUigwLCAxMDE5LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3Zf dmFsLnNpemUgPSBfX3B5eF90Xzc7Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRkX3N0cmluZyhzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpfX3B5eF92X3NlbGYsIGVu dW0gbXB2X3JlbmRlcl9wYXJhbV90eXBlIF9fcHl4X3ZfdCwgY2hhciAqX19weXhfdl9zKSB7Ci0t ICBjaGFyICpfX3B5eF92X3A7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0tICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0t ICBpbnQgX19weXhfbGluZW5vID0gMDsKLS0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKLS0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJhZGRfc3RyaW5nIiwgMCk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTA4Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyMQot KyAqICAgICAgICAgdmFsLnNpemUgPSBsZW4oaWNjX2Jsb2IpCi0rICogCi0rICogICAgICAgICBw YXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JQ0NfUFJPRklMRSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAotICAqIAotLSAqICAg ICBjZGVmIGFkZF9zdHJpbmcoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGNoYXIgKnMp OgotLSAqICAgICAgICAgY2RlZiBjaGFyICpwID0gPGNoYXIgKj5tYWxsb2Moc3RybGVuKHMpICsg MSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc3RyY3B5KHAsIHMp Ci0tICogICAgICAgICBzZWxmLmFkZF92b2lkcCh0LCBwKQotICAqLwotLSAgX19weXhfdl9wID0g KChjaGFyICopbWFsbG9jKChzdHJsZW4oX19weXhfdl9zKSArIDEpKSk7Ci0rICBfX3B5eF92X3Bh cmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lDQ19QUk9GSUxFOwotIAotLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwOQotLSAqICAgICBjZGVmIGFkZF9zdHJpbmcoc2Vs ZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGNoYXIgKnMpOgotLSAqICAgICAgICAgY2RlZiBj aGFyICpwID0gPGNoYXIgKj5tYWxsb2Moc3RybGVuKHMpICsgMSkKLS0gKiAgICAgICAgIHN0cmNw eShwLCBzKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLmFk ZF92b2lkcCh0LCBwKQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjIK LSsgKiAKLSsgKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lDQ19QUk9G SUxFCi0rICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0gICogCi0rICogICAgICAgICB3aXRoIG5vZ2lsOgotICAqLwotLSAgKHZvaWQpKHN0 cmNweShfX3B5eF92X3AsIF9fcHl4X3ZfcykpOwotKyAgX19weXhfdl9wYXJhbS5kYXRhID0gKCZf X3B5eF92X3ZhbCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTEw Ci0tICogICAgICAgICBjZGVmIGNoYXIgKnAgPSA8Y2hhciAqPm1hbGxvYyhzdHJsZW4ocykgKyAx KQotLSAqICAgICAgICAgc3RyY3B5KHAsIHMpCi0tICogICAgICAgICBzZWxmLmFkZF92b2lkcCh0 LCBwKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTAyNAotKyAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZ2YWwKLSAgKiAK LS0gKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOgotKyAqICAgICAgICAgd2l0aCBub2dpbDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9y ZW5kZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKHNlbGYuX2N0eCwgcGFyYW0pCi0rICogICAgICAg ICByZXR1cm4gZXJyCi0gICovCi0tICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3Ry dWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmLT5f X3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl90LCBfX3B5eF92X3As IE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MTAsIF9fcHl4 X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9ERUNSRUYo X19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgIHsKLSsgICAgICAjaWZkZWYgV0lUSF9USFJF QUQKLSsgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKLSsgICAgICBQeV9VTkJMT0NLX1RIUkVB RFMKLSsgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0rICAgICAgI2VuZGlmCi0rICAg ICAgLyp0cnk6Ki8gewotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkw NwotLSAqICAgICAgICAgc2VsZi5hZGRfdm9pZHAodCwgcCkKLSsgICAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI1Ci0rICogCi0rICogICAgICAgICB3aXRoIG5vZ2ls OgotKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9zZXRfcGFyYW1ldGVy KHNlbGYuX2N0eCwgcGFyYW0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAg ICAgIHJldHVybiBlcnIKLSAgKiAKLS0gKiAgICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1wdl9y ZW5kZXJfcGFyYW1fdHlwZSB0LCBjaGFyICpzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICAgICAgY2RlZiBjaGFyICpwID0gPGNoYXIgKj5tYWxsb2Moc3RybGVuKHMpICsg MSkKLS0gKiAgICAgICAgIHN0cmNweShwLCBzKQotICAqLwotKyAgICAgICAgX19weXhfdl9lcnIg PSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3BhcmFtZXRlcihfX3B5eF92X3NlbGYtPl9jdHgsIF9f cHl4X3ZfcGFyYW0pOwotKyAgICAgIH0KLSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwot LSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLS0gIGdvdG8gX19w eXhfTDA7Ci0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7 Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVuZGVyUGFyYW1z LmFkZF9zdHJpbmciLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1l KTsKLS0gIF9fcHl4X3IgPSAwOwotLSAgX19weXhfTDA6OwotLSAgX19QeXhfWEdJVkVSRUYoX19w eXhfcik7Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5 eF9yOwotLX0KLS0KLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTEyCi0tICog ICAgICAgICBzZWxmLmFkZF92b2lkcCh0LCBwKQotLSAqIAotLSAqICAgICBkZWYgX19kZWFsbG9j X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGZvciBp LCBqIGluIGVudW1lcmF0ZShzZWxmLm93bmVkKToKLS0gKiAgICAgICAgICAgICBpZiBqOgotLSAq LwotLQotLS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIHZvaWQgX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc18zX19kZWFsbG9jX18oUHlPYmplY3QgKl9f cHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotLXN0YXRpYyB2b2lkIF9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfM19fZGVhbGxvY19fKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYpIHsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18gKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzJfX2RlYWxsb2NfXygoKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92 X3NlbGYpKTsKLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7Ci0tfQotLQotLXN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfMl9fZGVhbGxvY19fKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKl9fcHl4X3Zfc2VsZikgewot LSAgUHlPYmplY3QgKl9fcHl4X3ZfaSA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdl9qID0g TlVMTDsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBQeU9iamVjdCAqX19weXhf dF8xID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotLSAgUHlfc3NpemVf dCBfX3B5eF90XzM7Ci0tICBQeU9iamVjdCAqKCpfX3B5eF90XzQpKFB5T2JqZWN0ICopOwotLSAg UHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7Ci0tICBpbnQgX19weXhfdF82OwotLSAgUHlfc3Np emVfdCBfX3B5eF90Xzc7Ci0tICBpbnQgX19weXhfbGluZW5vID0gMDsKLS0gIGNvbnN0IGNoYXIg Kl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLS0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlYWxsb2NfXyIsIDApOwotLQotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxMwotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDI0Ci0rICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAotICAq IAotLSAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6Ci0tICogICAgICAgICBmb3IgaSwgaiBp biBlbnVtZXJhdGUoc2VsZi5vd25lZCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgICAgICBpZiBqOgotLSAqICAgICAgICAgICAgICAgICBmcmVlKHNlbGYucGFyYW1z W2ldLmRhdGEpCi0rICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJh bWV0ZXIoc2VsZi5fY3R4LCBwYXJhbSkKLSsgKiAgICAgICAgIHJldHVybiBlcnIKLSAgKi8KLS0g IF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMCk7Ci0tICBfX3B5eF90XzEgPSBfX3B5eF9pbnRfMDsK LS0gIGlmIChsaWtlbHkoUHlMaXN0X0NoZWNrRXhhY3QoX19weXhfdl9zZWxmLT5vd25lZCkpIHx8 IFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X3NlbGYtPm93bmVkKSkgewotLSAgICBfX3B5eF90 XzIgPSBfX3B5eF92X3NlbGYtPm93bmVkOyBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsgX19weXhf dF8zID0gMDsKLS0gICAgX19weXhfdF80ID0gTlVMTDsKLS0gIH0gZWxzZSB7Ci0tICAgIF9fcHl4 X3RfMyA9IC0xOyBfX3B5eF90XzIgPSBQeU9iamVjdF9HZXRJdGVyKF9fcHl4X3Zfc2VsZi0+b3du ZWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4X0wx X2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19weXhfdF80ID0g UHlfVFlQRShfX3B5eF90XzIpLT50cF9pdGVybmV4dDsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgOTEzLCBfX3B5eF9MMV9lcnJvcikKLS0gIH0KLS0gIGZvciAoOzspIHsK LS0gICAgaWYgKGxpa2VseSghX19weXhfdF80KSkgewotLSAgICAgIGlmIChsaWtlbHkoUHlMaXN0 X0NoZWNrRXhhY3QoX19weXhfdF8yKSkpIHsKLS0gICAgICAgIGlmIChfX3B5eF90XzMgPj0gUHlM aXN0X0dFVF9TSVpFKF9fcHl4X3RfMikpIGJyZWFrOwotLSAgICAgICAgI2lmIENZVEhPTl9BU1NV TUVfU0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCi0tICAgICAgICBf X3B5eF90XzUgPSBQeUxpc3RfR0VUX0lURU0oX19weXhfdF8yLCBfX3B5eF90XzMpOyBfX1B5eF9J TkNSRUYoX19weXhfdF81KTsgX19weXhfdF8zKys7IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlY X0VSUigwLCA5MTMsIF9fcHl4X0wxX2Vycm9yKQotLSAgICAgICAgI2Vsc2UKLS0gICAgICAgIF9f cHl4X3RfNSA9IFB5U2VxdWVuY2VfSVRFTShfX3B5eF90XzIsIF9fcHl4X3RfMyk7IF9fcHl4X3Rf MysrOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4X0wx X2Vycm9yKQotLSAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7Ci0tICAgICAgICAjZW5k aWYKLS0gICAgICB9IGVsc2UgewotLSAgICAgICAgaWYgKF9fcHl4X3RfMyA+PSBQeVR1cGxlX0dF VF9TSVpFKF9fcHl4X3RfMikpIGJyZWFrOwotLSAgICAgICAgI2lmIENZVEhPTl9BU1NVTUVfU0FG RV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCi0tICAgICAgICBfX3B5eF90 XzUgPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF8zKTsgX19QeXhfSU5DUkVG KF9fcHl4X3RfNSk7IF9fcHl4X3RfMysrOyBpZiAodW5saWtlbHkoMCA8IDApKSBfX1BZWF9FUlIo MCwgOTEzLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgICAgICNlbHNlCi0tICAgICAgICBfX3B5eF90 XzUgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF8yLCBfX3B5eF90XzMpOyBfX3B5eF90XzMrKzsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgOTEzLCBfX3B5eF9MMV9lcnJv cikKLS0gICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOwotLSAgICAgICAgI2VuZGlmCi0t ICAgICAgfQotLSAgICB9IGVsc2UgewotLSAgICAgIF9fcHl4X3RfNSA9IF9fcHl4X3RfNChfX3B5 eF90XzIpOwotLSAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF81KSkgewotLSAgICAgICAgUHlP YmplY3QqIGV4Y190eXBlID0gUHlFcnJfT2NjdXJyZWQoKTsKLS0gICAgICAgIGlmIChleGNfdHlw ZSkgewotLSAgICAgICAgICBpZiAobGlrZWx5KF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0 Y2hlcyhleGNfdHlwZSwgUHlFeGNfU3RvcEl0ZXJhdGlvbikpKSBQeUVycl9DbGVhcigpOwotLSAg ICAgICAgICBlbHNlIF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIC8q ZmluYWxseToqLyB7Ci0rICAgICAgICAvKm5vcm1hbCBleGl0OiovewotKyAgICAgICAgICAjaWZk ZWYgV0lUSF9USFJFQUQKLSsgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKLSsgICAg ICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotKyAgICAgICAgICAjZW5kaWYKLSsgICAgICAgICAgZ290 byBfX3B5eF9MNjsKLSAgICAgICAgIH0KLS0gICAgICAgIGJyZWFrOwotKyAgICAgICAgX19weXhf TDY6OwotICAgICAgIH0KLS0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKLS0gICAgfQot LSAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X2osIF9fcHl4X3RfNSk7Ci0tICAgIF9fcHl4 X3RfNSA9IDA7Ci0tICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOwotLSAgICBfX1B5eF9YREVD UkVGX1NFVChfX3B5eF92X2ksIF9fcHl4X3RfMSk7Ci0tICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5 SW50X0FkZE9iakMoX19weXhfdF8xLCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCi0tICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzUpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsKLS0g ICAgX19weXhfdF8xID0gX19weXhfdF81OwotLSAgICBfX3B5eF90XzUgPSAwOwotLQotLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE0Ci0tICogICAgIGRlZiBfX2RlYWxs b2NfXyhzZWxmKToKLS0gKiAgICAgICAgIGZvciBpLCBqIGluIGVudW1lcmF0ZShzZWxmLm93bmVk KToKLS0gKiAgICAgICAgICAgICBpZiBqOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkKLS0gKiAKLS0gKi8K LS0gICAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zfaik7IGlmICh1 bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDkxNCwgX19weXhfTDFfZXJyb3Ip Ci0tICAgIGlmIChfX3B5eF90XzYpIHsKLS0KLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTE1Ci0tICogICAgICAgICBmb3IgaSwgaiBpbiBlbnVtZXJhdGUoc2VsZi5v d25lZCk6Ci0tICogICAgICAgICAgICAgaWYgajoKLS0gKiAgICAgICAgICAgICAgICAgZnJlZShz ZWxmLnBhcmFtc1tpXS5kYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogCi0t ICogY2RlZiB2b2lkICpnZXRfcG9pbnRlcihjb25zdCBjaGFyICpuYW1lLCBvYmplY3Qgb2JqKToK LS0gKi8KLS0gICAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5eF92 X2kpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoUHlfc3NpemVfdCktMSkgJiYgUHlFcnJf T2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA5MTUsIF9fcHl4X0wxX2Vycm9yKQotLSAgICAgIGZy ZWUoKF9fcHl4X3Zfc2VsZi0+cGFyYW1zW19fcHl4X3RfN10pLmRhdGEpOwotLQotLSAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTQKLS0gKiAgICAgZGVmIF9fZGVhbGxv Y19fKHNlbGYpOgotLSAqICAgICAgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQp OgotLSAqICAgICAgICAgICAgIGlmIGo6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgICAgICAgICAgZnJlZShzZWxmLnBhcmFtc1tpXS5kYXRhKQotLSAqIAotLSAqLwot LSAgICB9Ci0rICB9Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 MTMKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI2Ci0rICogICAgICAg ICB3aXRoIG5vZ2lsOgotKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9z ZXRfcGFyYW1ldGVyKHNlbGYuX2N0eCwgcGFyYW0pCi0rICogICAgICAgICByZXR1cm4gZXJyICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAKLS0gKiAgICAgZGVmIF9fZGVhbGxvY19f KHNlbGYpOgotLSAqICAgICAgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgaWYgajoKLS0gKiAg ICAgICAgICAgICAgICAgZnJlZShzZWxmLnBhcmFtc1tpXS5kYXRhKQotKyAqICAgICBAX2Vycm9y cwotICAqLwotLSAgfQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgIF9fUHl4X1hE RUNSRUYoX19weXhfcik7Ci0rICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5 eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDEwMjYsIF9f cHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0rICBfX3B5eF9yID0g X19weXhfdF8zOwotKyAgX19weXhfdF8zID0gMDsKLSsgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTEyCi0tICogICAgICAgICBzZWxmLmFk ZF92b2lkcCh0LCBwKQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMTAK LSAgKiAKLS0gKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogICAgICAgICBmb3IgaSwgaiBpbiBlbnVtZXJhdGUoc2VsZi5vd25lZCk6 Ci0tICogICAgICAgICAgICAgaWYgajoKLSsgKiAgICAgQF9lcnJvcnMKLSsgKiAgICAgZGVmIHNl dF9pY2NfcHJvZmlsZShzZWxmLCBpY2NfYmxvYik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiAgICAgICAgIGNkZWY6Ci0rICogICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJhbSBw YXJhbQotICAqLwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBnb3RvIF9fcHl4 X0wwOwotICAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwot LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMp OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzUpOwotLSAgX19QeXhfV3JpdGVVbnJhaXNhYmxlKCJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlbmRl clBhcmFtcy5fX2RlYWxsb2NfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhf ZmlsZW5hbWUsIDEsIDApOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5t cHYuUmVuZGVyQ29udGV4dC5zZXRfaWNjX3Byb2ZpbGUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fcHl4X3IgPSBOVUxMOwotICAgX19weXhfTDA6 OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2kpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF92 X2opOwotKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKLSsgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAiKHRyZWUgZnJhZ21l bnQpIjoxCi0tICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90 IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKLS0gKiBkZWYg X19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6Ci0rLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwMjkKLSsgKiAKLSsgKiAgICAgQF9lcnJvcnMKLSsgKiAgICAg ZGVmIHNldF9hbWJpZW50X2xpZ2h0KHNlbGYsIGx1eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgICAgIGNkZWY6Ci0rICogICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJh bSBwYXJhbQotICAqLwotIAotIC8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzVfX3JlZHVj ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0 ICp1bnVzZWQpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfNV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgewotK3N0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF81c2V0X2FtYmllbnRfbGlnaHQoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3ZfbHV4KTsgLypwcm90byovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzVzZXRfYW1iaWVudF9saWdodChQeU9iamVj dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9sdXgpIHsKLSAgIFB5T2JqZWN0ICpf X3B5eF9yID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7Ci0tICBf X3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc180 X19yZWR1Y2VfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmKSk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgic2V0X2FtYmllbnRfbGlnaHQgKHdyYXBwZXIpIiwgMCk7Ci0rICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF80c2V0X2FtYmll bnRfbGlnaHQoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJD b250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfbHV4KSk7Ci0gCi0g ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc180X19yZWR1Y2VfY3l0aG9u X18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f UmVuZGVyUGFyYW1zICpfX3B5eF92X3NlbGYpIHsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNHNldF9hbWJpZW50X2xpZ2h0 KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfbHV4KSB7Ci0rICBzdHJ1Y3QgbXB2X3JlbmRl cl9wYXJhbSBfX3B5eF92X3BhcmFtOwotKyAgaW50IF9fcHl4X3ZfdmFsOwotKyAgaW50IF9fcHl4 X3ZfZXJyOwotICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotKyAgaW50IF9fcHl4 X3RfMTsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotICAgaW50IF9fcHl4X2xpbmVu byA9IDA7Ci0gICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0gICBpbnQgX19w eXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2Vf Y3l0aG9uX18iLCAwKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfYW1iaWVu dF9saWdodCIsIDApOwotIAotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MgotLSAqIGRlZiBfX3Jl ZHVjZV9jeXRob25fXyhzZWxmKToKLS0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLnBhcmFt cyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18o c2VsZiwgX19weXhfc3RhdGUpOgotLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1z IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAzNQotKyAqICAgICAgICAgICAg IGludCBlcnIKLSsgKiAKLSsgKiAgICAgICAgIHZhbCA9IGx1eCAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9BTUJJ RU5UX0xJR0hUCi0rICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAotICAqLwotLSAgX19weXhf dF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF9idWlsdGluX1R5cGVFcnJvciwgX19weXhf dHVwbGVfXzgsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAy LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19QeXhf UmFpc2UoX19weXhfdF8xLCAwLCAwLCAwKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOwotLSAgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19w eXhfdF8xID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3ZfbHV4KTsgaWYgKHVubGlrZWx5KChf X3B5eF90XzEgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAx MDM1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3ZfdmFsID0gX19weXhfdF8xOwotIAotLSAg LyogIih0cmVlIGZyYWdtZW50KSI6MQotLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNl bGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNr bGluZyIpCi0tICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMzYKLSsgKiAKLSsgKiAgICAg ICAgIHZhbCA9IGx1eAotKyAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1f QU1CSUVOVF9MSUdIVCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBw YXJhbS5kYXRhID0gJnZhbAotKyAqIAotICAqLwotKyAgX19weXhfdl9wYXJhbS50eXBlID0gTVBW X1JFTkRFUl9QQVJBTV9BTUJJRU5UX0xJR0hUOwotIAotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCi0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0t ICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVuZGVyUGFyYW1zLl9f cmVkdWNlX2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7Ci0tICBfX3B5eF9yID0gTlVMTDsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwot LSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19 Ci0tCi0tLyogIih0cmVlIGZyYWdtZW50KSI6MwotLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhz ZWxmKToKLS0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29u dmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQotLSAqIGRlZiBfX3NldHN0 YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252 ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTAzNwotKyAqICAgICAgICAgdmFsID0gbHV4Ci0rICogICAg ICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9BTUJJRU5UX0xJR0hUCi0rICogICAg ICAgICBwYXJhbS5kYXRhID0gJnZhbCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog Ci0rICogICAgICAgICB3aXRoIG5vZ2lsOgotICAqLwotKyAgX19weXhfdl9wYXJhbS5kYXRhID0g KCZfX3B5eF92X3ZhbCk7Ci0gCi0tLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfN19fc2V0 c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zf X19weXhfc3RhdGUpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfN19fc2V0c3RhdGVfY3l0aG9uX18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKLS0g IFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0t ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyAod3JhcHBl cikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNf UmVuZGVyUGFyYW1zXzZfX3NldHN0YXRlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmpl Y3QgKilfX3B5eF92X19fcHl4X3N0YXRlKSk7Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTAzOQotKyAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZ2YWwKLSsgKiAKLSsgKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAg ICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3BhcmFtZXRlcihzZWxmLl9jdHgs IHBhcmFtKQotKyAqICAgICAgICAgcmV0dXJuIGVycgotKyAqLwotKyAgewotKyAgICAgICNpZmRl ZiBXSVRIX1RIUkVBRAotKyAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwotKyAgICAgIFB5X1VO QkxPQ0tfVEhSRUFEUwotKyAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLSsgICAgICAj ZW5kaWYKLSsgICAgICAvKnRyeToqLyB7Ci0gCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K LS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0t fQotKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNDAKLSsgKiAK LSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRl cl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4LCBwYXJhbSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmV0dXJuIGVycgotKyAqIAotKyAqLwotKyAgICAg ICAgX19weXhfdl9lcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3BhcmFtZXRlcihfX3B5eF92 X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW0pOwotKyAgICAgIH0KLSAKLS1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfNl9fc2V0 c3RhdGVfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVM TDsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBQeU9iamVjdCAqX19weXhfdF8x ID0gTlVMTDsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18iLCAwKTsKLSsgICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAzOQotKyAqICAgICAgICAgcGFyYW0uZGF0 YSA9ICZ2YWwKLSsgKiAKLSsgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0 X3BhcmFtZXRlcihzZWxmLl9jdHgsIHBhcmFtKQotKyAqICAgICAgICAgcmV0dXJuIGVycgotKyAq LwotKyAgICAgIC8qZmluYWxseToqLyB7Ci0rICAgICAgICAvKm5vcm1hbCBleGl0OiovewotKyAg ICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3Jn ZXQoKTsKLSsgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotKyAgICAgICAgICAjZW5kaWYKLSsg ICAgICAgICAgZ290byBfX3B5eF9MNTsKLSsgICAgICAgIH0KLSsgICAgICAgIF9fcHl4X0w1OjsK LSsgICAgICB9Ci0rICB9Ci0gCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0Ci0tICogICAgIHJh aXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhv biBvYmplY3QgZm9yIHBpY2tsaW5nIikKLS0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxm LCBfX3B5eF9zdGF0ZSk6Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fu bm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwNDEKLSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgZXJyID0g bXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4LCBwYXJhbSkKLSsgKiAg ICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIAotKyAq ICAgICBkZWYgZ2V0X25leHRfZnJhbWVfaW5mbyhzZWxmKToKLSAgKi8KLS0gIF9fcHl4X3RfMSA9 IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3IsIF9fcHl4X3R1cGxl X185LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgNCwgX19w eXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X1JhaXNl KF9fcHl4X3RfMSwgMCwgMCwgMCk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKLS0gIF9fUFlYX0VSUigxLCA0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X1hE RUNSRUYoX19weXhfcik7Ci0rICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5 eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwNDEsIF9f cHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICBfX3B5eF9yID0g X19weXhfdF8yOwotKyAgX19weXhfdF8yID0gMDsKLSsgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAv KiAiKHRyZWUgZnJhZ21lbnQpIjozCi0tICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgot LSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQg dG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0tICogZGVmIF9fc2V0c3RhdGVfY3l0 aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZlcnRlZCB0 byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDI5Ci0rICogCi0rICogICAgIEBfZXJyb3JzCi0rICogICAgIGRlZiBz ZXRfYW1iaWVudF9saWdodChzZWxmLCBsdXgpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICBjZGVmOgotKyAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfcGFyYW0gcGFy YW0KLSAgKi8KLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19weXhfTDFfZXJy b3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlbmRlclBhcmFtcy5fX3NldHN0YXRlX2N5dGhvbl9fIiwg X19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMik7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJz Lm1wdi5SZW5kZXJDb250ZXh0LnNldF9hbWJpZW50X2xpZ2h0IiwgX19weXhfY2xpbmVubywgX19w eXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0gICBfX3B5eF9yID0gTlVMTDsKLSsgIF9fcHl4 X0wwOjsKLSAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotICAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjkxNwotLSAqICAgICAgICAgICAgICAgICBmcmVlKHNlbGYucGFy YW1zW2ldLmRhdGEpCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNDMKLSsg KiAgICAgICAgIHJldHVybiBlcnIKLSAgKiAKLS0gKiBjZGVmIHZvaWQgKmdldF9wb2ludGVyKGNv bnN0IGNoYXIgKm5hbWUsIG9iamVjdCBvYmopOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgIGNkZWYgdm9pZCAqcAotLSAqICAgICBpZiBQeUNhcHN1bGVfSXNWYWxpZChvYmos IG5hbWUpOgotKyAqICAgICBkZWYgZ2V0X25leHRfZnJhbWVfaW5mbyhzZWxmKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgY2RlZjoKLSsgKiAgICAgICAgICAgICBt cHZfcmVuZGVyX2ZyYW1lX2luZm8gaW5mbwotICAqLwotIAotLXN0YXRpYyB2b2lkICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9nZXRfcG9pbnRlcihjaGFyIGNvbnN0ICpfX3B5eF92X25h bWUsIFB5T2JqZWN0ICpfX3B5eF92X29iaikgewotLSAgdm9pZCAqX19weXhfdl9wOwotLSAgdm9p ZCAqX19weXhfcjsKLSsvKiBQeXRob24gd3JhcHBlciAqLwotK3N0YXRpYyBQeU9iamVjdCAqX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF83Z2V0X25leHRfZnJh bWVfaW5mbyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1 bnVzZWQpOyAvKnByb3RvKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfN2dldF9uZXh0X2ZyYW1lX2luZm8oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7Ci0rICBQeU9i amVjdCAqX19weXhfciA9IDA7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoImdldF9uZXh0X2ZyYW1lX2luZm8gKHdyYXBwZXIpIiwg MCk7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVy Q29udGV4dF82Z2V0X25leHRfZnJhbWVfaW5mbygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKLSsKLSsgIC8qIGZ1 bmN0aW9uIGV4aXQgY29kZSAqLwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0r ICByZXR1cm4gX19weXhfcjsKLSt9Ci0rCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzZnZXRfbmV4dF9mcmFtZV9pbmZvKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4 X3Zfc2VsZikgewotKyAgc3RydWN0IG1wdl9yZW5kZXJfZnJhbWVfaW5mbyBfX3B5eF92X2luZm87 Ci0rICBzdHJ1Y3QgbXB2X3JlbmRlcl9wYXJhbSBfX3B5eF92X3BhcmFtOwotKyAgaW50IF9fcHl4 X3ZfZXJyOwotKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKLSAgIGludCBfX3B5eF90XzE7Ci0tICB2b2lkICpfX3B5eF90XzI7Ci0tICBp bnQgX19weXhfdF8zOwotLSAgaW50IF9fcHl4X3RfNDsKLS0gIGludHB0cl90IF9fcHl4X3RfNTsK LS0gIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNyA9 IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF84ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5 eF90XzkgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0rICBQeU9iamVj dCAqX19weXhfdF8zID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOwotKyAg UHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7Ci0gICBpbnQgX19weXhfbGluZW5vID0gMDsKLSAg IGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAgIGludCBfX3B5eF9jbGluZW5v ID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJnZXRfcG9pbnRlciIsIDApOwot LQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxOQotLSAqIGNkZWYgdm9p ZCAqZ2V0X3BvaW50ZXIoY29uc3QgY2hhciAqbmFtZSwgb2JqZWN0IG9iaik6Ci0tICogICAgIGNk ZWYgdm9pZCAqcAotLSAqICAgICBpZiBQeUNhcHN1bGVfSXNWYWxpZChvYmosIG5hbWUpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBwID0gUHlDYXBzdWxlX0dldFBv aW50ZXIob2JqLCBuYW1lKQotLSAqICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBpbnQpIG9yIGlz aW5zdGFuY2Uob2JqLCBsb25nKSBhbmQgb2JqOgotLSAqLwotLSAgX19weXhfdF8xID0gKFB5Q2Fw c3VsZV9Jc1ZhbGlkKF9fcHl4X3Zfb2JqLCBfX3B5eF92X25hbWUpICE9IDApOwotLSAgaWYgKF9f cHl4X3RfMSkgewotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImdldF9uZXh0X2ZyYW1l X2luZm8iLCAwKTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjky MAotLSAqICAgICBjZGVmIHZvaWQgKnAKLS0gKiAgICAgaWYgUHlDYXBzdWxlX0lzVmFsaWQob2Jq LCBuYW1lKToKLS0gKiAgICAgICAgIHAgPSBQeUNhcHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgZWxpZiBpc2luc3RhbmNlKG9i aiwgaW50KSBvciBpc2luc3RhbmNlKG9iaiwgbG9uZykgYW5kIG9iajoKLS0gKiAgICAgICAgIHAg PSA8dm9pZCAqPjxpbnRwdHJfdD5vYmoKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDQ4Ci0rICogICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJhbSBwYXJhbQotKyAqIAot KyAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9JTkZP ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHBhcmFtLmRhdGEgPSAm aW5mbwotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKi8KLS0gICAgX19weXhfdF8yID0gUHlD YXBzdWxlX0dldFBvaW50ZXIoX19weXhfdl9vYmosIF9fcHl4X3ZfbmFtZSk7IGlmICh1bmxpa2Vs eShfX3B5eF90XzIgPT0gKCh2b2lkICopTlVMTCkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlY X0VSUigwLCA5MjAsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX3B5eF92X3AgPSBfX3B5eF90XzI7 Ci0rICBfX3B5eF92X3BhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX05FWFRfRlJBTUVfSU5G TzsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxOQotLSAqIGNk ZWYgdm9pZCAqZ2V0X3BvaW50ZXIoY29uc3QgY2hhciAqbmFtZSwgb2JqZWN0IG9iaik6Ci0tICog ICAgIGNkZWYgdm9pZCAqcAotLSAqICAgICBpZiBQeUNhcHN1bGVfSXNWYWxpZChvYmosIG5hbWUp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBwID0gUHlDYXBzdWxl X0dldFBvaW50ZXIob2JqLCBuYW1lKQotLSAqICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBpbnQp IG9yIGlzaW5zdGFuY2Uob2JqLCBsb25nKSBhbmQgb2JqOgotKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwNDkKLSsgKiAKLSsgKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZf UkVOREVSX1BBUkFNX05FWFRfRlJBTUVfSU5GTwotKyAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZp bmZvICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHdpdGggbm9naWw6 Ci0rICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2dldF9pbmZvKHNlbGYu X2N0eCwgcGFyYW0pCi0gICovCi0tICAgIGdvdG8gX19weXhfTDM7Ci0tICB9Ci0rICBfX3B5eF92 X3BhcmFtLmRhdGEgPSAoJl9fcHl4X3ZfaW5mbyk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTIxCi0tICogICAgIGlmIFB5Q2Fwc3VsZV9Jc1ZhbGlkKG9iaiwgbmFt ZSk6Ci0tICogICAgICAgICBwID0gUHlDYXBzdWxlX0dldFBvaW50ZXIob2JqLCBuYW1lKQotLSAq ICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBpbnQpIG9yIGlzaW5zdGFuY2Uob2JqLCBsb25nKSBh bmQgb2JqOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBwID0gPHZv aWQgKj48aW50cHRyX3Q+b2JqCi0tICogICAgIGVsc2U6Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTA1MAotKyAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJf UEFSQU1fTkVYVF9GUkFNRV9JTkZPCi0rICogICAgICAgICBwYXJhbS5kYXRhID0gJmluZm8KLSsg KiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0X2luZm8oc2VsZi5fY3R4LCBw YXJhbSkKLSsgKiAgICAgICAgIGlmIGVyciA8IDA6Ci0gICovCi0tICBfX3B5eF90XzMgPSBQeUlu dF9DaGVjayhfX3B5eF92X29iaik7IAotLSAgX19weXhfdF80ID0gKF9fcHl4X3RfMyAhPSAwKTsK LS0gIGlmICghX19weXhfdF80KSB7Ci0tICB9IGVsc2UgewotLSAgICBfX3B5eF90XzEgPSBfX3B5 eF90XzQ7Ci0tICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOwotLSAgfQotLSAgX19w eXhfdF80ID0gUHlMb25nX0NoZWNrKF9fcHl4X3Zfb2JqKTsgCi0tICBfX3B5eF90XzMgPSAoX19w eXhfdF80ICE9IDApOwotLSAgaWYgKF9fcHl4X3RfMykgewotLSAgfSBlbHNlIHsKLS0gICAgX19w eXhfdF8xID0gX19weXhfdF8zOwotLSAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsK LS0gIH0KLS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X29iaik7 IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDkyMSwgX19weXhfTDFf ZXJyb3IpCi0tICBfX3B5eF90XzEgPSBfX3B5eF90XzM7Ci0tICBfX3B5eF9MNF9ib29sX2Jpbm9w X2RvbmU6OwotLSAgaWYgKGxpa2VseShfX3B5eF90XzEpKSB7Ci0rICB7Ci0rICAgICAgI2lmZGVm IFdJVEhfVEhSRUFECi0rICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7Ci0rICAgICAgUHlfVU5C TE9DS19USFJFQURTCi0rICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwotKyAgICAgICNl bmRpZgotKyAgICAgIC8qdHJ5OiovIHsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjkyMgotLSAqICAgICAgICAgcCA9IFB5Q2Fwc3VsZV9HZXRQb2ludGVyKG9iaiwg bmFtZSkKLS0gKiAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgaW50KSBvciBpc2luc3RhbmNlKG9i aiwgbG9uZykgYW5kIG9iajoKLS0gKiAgICAgICAgIHAgPSA8dm9pZCAqPjxpbnRwdHJfdD5vYmog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBlbHNlOgotLSAqICAgICAgICAg cmFpc2UgUHlNUFZFcnJvcigiVW5rbm93biBvciBpbnZhbGlkIHBvaW50ZXIgb2JqZWN0OiAlciIg JSBvYmopCi0rICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MQot KyAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZpbmZvCi0rICogICAgICAgICB3aXRoIG5vZ2lsOgot KyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhzZWxmLl9j dHgsIHBhcmFtKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBpZiBl cnIgPCAwOgotKyAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKLSAgKi8KLS0gICAg X19weXhfdF81ID0gX19QeXhfUHlJbnRfQXNfaW50cHRyX3QoX19weXhfdl9vYmopOyBpZiAodW5s aWtlbHkoKF9fcHl4X3RfNSA9PSAoKGludHB0cl90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkp IF9fUFlYX0VSUigwLCA5MjIsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX3B5eF92X3AgPSAoKHZv aWQgKikoKGludHB0cl90KV9fcHl4X3RfNSkpOwotKyAgICAgICAgX19weXhfdl9lcnIgPSBtcHZf cmVuZGVyX2NvbnRleHRfZ2V0X2luZm8oX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X3BhcmFt KTsKLSsgICAgICB9Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 MjEKLS0gKiAgICAgaWYgUHlDYXBzdWxlX0lzVmFsaWQob2JqLCBuYW1lKToKLS0gKiAgICAgICAg IHAgPSBQeUNhcHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCi0tICogICAgIGVsaWYgaXNpbnN0 YW5jZShvYmosIGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHAgPSA8dm9pZCAqPjxpbnRwdHJfdD5v YmoKLS0gKiAgICAgZWxzZToKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTA1MAotKyAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9G UkFNRV9JTkZPCi0rICogICAgICAgICBwYXJhbS5kYXRhID0gJmluZm8KLSsgKiAgICAgICAgIHdp dGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBl cnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0X2luZm8oc2VsZi5fY3R4LCBwYXJhbSkKLSsgKiAg ICAgICAgIGlmIGVyciA8IDA6Ci0gICovCi0tICAgIGdvdG8gX19weXhfTDM7Ci0rICAgICAgLypm aW5hbGx5OiovIHsKLSsgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97Ci0rICAgICAgICAgICNpZmRl ZiBXSVRIX1RIUkVBRAotKyAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOwotKyAgICAg ICAgICBQeV9CTE9DS19USFJFQURTCi0rICAgICAgICAgICNlbmRpZgotKyAgICAgICAgICBnb3Rv IF9fcHl4X0w1OwotKyAgICAgICAgfQotKyAgICAgICAgX19weXhfTDU6OwotKyAgICAgIH0KLSAg IH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjQKLS0gKiAgICAg ICAgIHAgPSA8dm9pZCAqPjxpbnRwdHJfdD5vYmoKLS0gKiAgICAgZWxzZToKLS0gKiAgICAgICAg IHJhaXNlIFB5TVBWRXJyb3IoIlVua25vd24gb3IgaW52YWxpZCBwb2ludGVyIG9iamVjdDogJXIi ICUgb2JqKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIHJldHVybiBwCi0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MgotKyAqICAgICAgICAgd2l0 aCBub2dpbDoKLSsgKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0X2lu Zm8oc2VsZi5fY3R4LCBwYXJhbSkKLSsgKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCi0g ICogCi0gICovCi0tICAvKmVsc2UqLyB7Ci0tICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF83LCBfX3B5eF9uX3NfUHlNUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF83 KSkgX19QWVhfRVJSKDAsIDkyNCwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOwotLSAgICBfX3B5eF90XzggPSBfX1B5eF9QeVN0cmluZ19Gb3JtYXRTYWZlKF9f cHl4X2twX3NfVW5rbm93bl9vcl9pbnZhbGlkX3BvaW50ZXJfb2JqZWMsIF9fcHl4X3Zfb2JqKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBfX1BZWF9FUlIoMCwgOTI0LCBfX3B5eF9MMV9lcnJv cikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfOCk7Ci0tICAgIF9fcHl4X3RfOSA9IE5VTEw7 Ci0tICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF83KSkpIHsKLS0gICAgICBfX3B5eF90XzkgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzcpOwotLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF85KSkgewotLSAgICAgICAgUHlP YmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNyk7Ci0tICAg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF85KTsKLS0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5j dGlvbik7Ci0tICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNywgZnVuY3Rpb24pOwot LSAgICAgIH0KLS0gICAgfQotLSAgICBfX3B5eF90XzYgPSAoX19weXhfdF85KSA/IF9fUHl4X1B5 T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzcsIF9fcHl4X3RfOSwgX19weXhfdF84KSA6IF9fUHl4 X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF83LCBfX3B5eF90XzgpOwotLSAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzgpOyBfX3B5eF90XzggPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9f UFlYX0VSUigwLCA5MjQsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0tICAg IF9fUHl4X1JhaXNlKF9fcHl4X3RfNiwgMCwgMCwgMCk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOwotLSAgICBfX1BZWF9FUlIoMCwgOTI0LCBfX3B5eF9MMV9l cnJvcikKLS0gIH0KLS0gIF9fcHl4X0wzOjsKLSsgIF9fcHl4X3RfMSA9ICgoX19weXhfdl9lcnIg PCAwKSAhPSAwKTsKLSsgIGlmICh1bmxpa2VseShfX3B5eF90XzEpKSB7Ci0gCi0tICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTI1Ci0tICogICAgIGVsc2U6Ci0tICogICAgICAg ICByYWlzZSBQeU1QVkVycm9yKCJVbmtub3duIG9yIGludmFsaWQgcG9pbnRlciBvYmplY3Q6ICVy IiAlIG9iaikKLS0gKiAgICAgcmV0dXJuIHAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MwotKyAqICAgICAgICAg ICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhzZWxmLl9jdHgsIHBhcmFtKQot KyAqICAgICAgICAgaWYgZXJyIDwgMDoKLSsgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihl cnIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAKLS0gKiBAY3l0aG9uLmludGVy bmFsCi0rICogICAgICAgICByZXR1cm4gUmVuZGVyRnJhbWVJbmZvKCkuX2Zyb21fc3RydWN0KCZp bmZvKQotICAqLwotLSAgX19weXhfciA9IF9fcHl4X3ZfcDsKLS0gIGdvdG8gX19weXhfTDA7Ci0r ICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8zLCBfX3B5eF9uX3NfTVBWRXJy b3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMDUzLCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0rICAgIF9fcHl4X3RfNCA9 IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzQpKSBfX1BZWF9FUlIoMCwgMTA1MywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzQpOwotKyAgICBfX3B5eF90XzUgPSBOVUxMOwotKyAgICBpZiAoQ1lUSE9OX1VO UEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7Ci0r ICAgICAgX19weXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKLSsgICAgICBp ZiAobGlrZWx5KF9fcHl4X3RfNSkpIHsKLSsgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5 TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOwotKyAgICAgICAgX19QeXhfSU5DUkVGKF9f cHl4X3RfNSk7Ci0rICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAgICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKLSsgICAgICB9Ci0rICAgIH0KLSsg ICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19w eXhfdF8zLCBfX3B5eF90XzUsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfMywgX19weXhfdF80KTsKLSsgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBf X3B5eF90XzUgPSAwOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKLSsgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTA1MywgX19w eXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSsgICAgX19QeXhfUmFpc2UoX19weXhf dF8yLCAwLCAwLCAwKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9 IDA7Ci0rICAgIF9fUFlYX0VSUigwLCAxMDUzLCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTcKLS0gKiAgICAgICAgICAgICAgICAgZnJl ZShzZWxmLnBhcmFtc1tpXS5kYXRhKQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTA1MgotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAgICAgICBlcnIg PSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0X2luZm8oc2VsZi5fY3R4LCBwYXJhbSkKLSsgKiAgICAg ICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAg ICAgICByYWlzZSBNUFZFcnJvcihlcnIpCi0gICogCi0tICogY2RlZiB2b2lkICpnZXRfcG9pbnRl cihjb25zdCBjaGFyICpuYW1lLCBvYmplY3Qgb2JqKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqICAgICBjZGVmIHZvaWQgKnAKLS0gKiAgICAgaWYgUHlDYXBzdWxlX0lzVmFsaWQo b2JqLCBuYW1lKToKLS0gKi8KLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19w eXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOwotLSAgX19QeXhfWERF Q1JFRihfX3B5eF90XzcpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOwotLSAgX19QeXhf WERFQ1JFRihfX3B5eF90XzkpOwotLSAgX19QeXhfV3JpdGVVbnJhaXNhYmxlKCJ2aWRjdXR0ZXIu bGlicy5tcHYuZ2V0X3BvaW50ZXIiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lLCAxLCAwKTsKLS0gIF9fcHl4X3IgPSAwOwotLSAgX19weXhfTDA6OwotLSAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0tCi0t LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkyOQotLSAqIEBjeXRob24uaW50ZXJu YWwKLS0gKiBjZGVmIGNsYXNzIFJlbmRlckZyYW1lSW5mbyhvYmplY3QpOgotLSAqICAgICBjZGVm IF9mcm9tX3N0cnVjdChzZWxmLCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKmluZm8pOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLnByZXNlbnQgPSBib29sKGlu Zm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUFJFU0VOVCkKLS0gKiAgICAgICAg IHNlbGYucmVkcmF3ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZP X1JFRFJBVykKLS0gKi8KLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzE1UmVuZGVyRnJhbWVJbmZvX19mcm9tX3N0cnVjdChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKl9fcHl4X3Zfc2VsZiwgc3Ry dWN0IG1wdl9yZW5kZXJfZnJhbWVfaW5mbyAqX19weXhfdl9pbmZvKSB7Ci0tICBQeU9iamVjdCAq X19weXhfciA9IE5VTEw7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgUHlPYmpl Y3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0tICBpbnQgX19weXhfdF8yOwotLSAgaW50IF9fcHl4X2xp bmVubyA9IDA7Ci0tICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0tICBpbnQg X19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2Zyb21f c3RydWN0IiwgMCk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTMw Ci0tICogY2RlZiBjbGFzcyBSZW5kZXJGcmFtZUluZm8ob2JqZWN0KToKLS0gKiAgICAgY2RlZiBf ZnJvbV9zdHJ1Y3Qoc2VsZiwgbXB2X3JlbmRlcl9mcmFtZV9pbmZvICppbmZvKToKLS0gKiAgICAg ICAgIHNlbGYucHJlc2VudCA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVf SU5GT19QUkVTRU5UKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBz ZWxmLnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19S RURSQVcpCi0tICogICAgICAgICBzZWxmLnJlcGVhdCA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1Q Vl9SRU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpCi0tICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9Q eUludF9Gcm9tX3VpbnQ2NF90KCgoX19weXhfdl9pbmZvWzBdKS5mbGFncyAmIE1QVl9SRU5ERVJf RlJBTUVfSU5GT19QUkVTRU5UKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDkzMCwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0g IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtl bHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA5MzAsIF9fcHl4X0wxX2Vycm9yKQotLSAg X19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICBfX3B5eF90XzEgPSBf X1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoIV9fcHl4X3RfMikpKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMwLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOwotLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVj dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19wcmVzZW50LCBfX3B5eF90XzEpIDwgMCkgX19Q WVhfRVJSKDAsIDkzMCwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5MzEKLS0gKiAgICAgY2RlZiBfZnJvbV9zdHJ1Y3Qoc2VsZiwgbXB2X3JlbmRlcl9mcmFtZV9p bmZvICppbmZvKToKLS0gKiAgICAgICAgIHNlbGYucHJlc2VudCA9IGJvb2woaW5mb1swXS5mbGFn cyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19QUkVTRU5UKQotLSAqICAgICAgICAgc2VsZi5yZWRy YXcgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUkVEUkFXKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLnJlcGVhdCA9IGJv b2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpCi0tICogICAg ICAgICBzZWxmLmJsb2NrX3ZzeW5jID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9G UkFNRV9JTkZPX0JMT0NLX1ZTWU5DKQotLSAqLwotLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRf RnJvbV91aW50NjRfdCgoKF9fcHl4X3ZfaW5mb1swXSkuZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1F X0lORk9fUkVEUkFXKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkz MSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fcHl4 X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19w eXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA5MzEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9Q eUJvb2xfRnJvbUxvbmcoKCEoIV9fcHl4X3RfMikpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOwotLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAqKV9f cHl4X3Zfc2VsZiksIF9fcHl4X25fc19yZWRyYXcsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIo MCwgOTMxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOwotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMgot LSAqICAgICAgICAgc2VsZi5wcmVzZW50ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRF Ul9GUkFNRV9JTkZPX1BSRVNFTlQpCi0tICogICAgICAgICBzZWxmLnJlZHJhdyA9IGJvb2woaW5m b1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpCi0tICogICAgICAgICBz ZWxmLnJlcGVhdCA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19S RVBFQVQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYuYmxv Y2tfdnN5bmMgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxP Q0tfVlNZTkMpCi0tICogICAgICAgICBzZWxmLnRhcmdldF90aW1lID0gaW5mb1swXS50YXJnZXRf dGltZQotLSAqLwotLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCgoKF9f cHl4X3ZfaW5mb1swXSkuZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUkVQRUFUKSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkzMiwgX19weXhfTDFfZXJyb3Ip Ci0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2Jq ZWN0X0lzVHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlY X0VSUigwLCA5MzIsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEo IV9fcHl4X3RfMikpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMy LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgaWYgKF9f UHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4 X25fc19yZXBlYXQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMyLCBfX3B5eF9MMV9l cnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLQotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMwotLSAqICAgICAgICAgc2VsZi5y ZWRyYXcgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUkVEUkFX KQotLSAqICAgICAgICAgc2VsZi5yZXBlYXQgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVO REVSX0ZSQU1FX0lORk9fUkVQRUFUKQotLSAqICAgICAgICAgc2VsZi5ibG9ja192c3luYyA9IGJv b2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19CTE9DS19WU1lOQykgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi50YXJnZXRfdGltZSA9 IGluZm9bMF0udGFyZ2V0X3RpbWUKLS0gKiAgICAgICAgIHJldHVybiBzZWxmCi0gICovCi0tICBf X3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KCgoX19weXhfdl9pbmZvWzBdKS5m bGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19CTE9DS19WU1lOQykpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUo X19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgOTMz LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOwotLSAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKCghKCFfX3B5eF90XzIp KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkzMywgX19weXhfTDFf ZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIGlmIChfX1B5eF9QeU9iamVj dF9TZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfYmxvY2tf dnN5bmMsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMzLCBfX3B5eF9MMV9lcnJvcikK LS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgfQotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzNAotLSAqICAgICAgICAgc2VsZi5y ZXBlYXQgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUkVQRUFU KQotLSAqICAgICAgICAgc2VsZi5ibG9ja192c3luYyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1Q Vl9SRU5ERVJfRlJBTUVfSU5GT19CTE9DS19WU1lOQykKLS0gKiAgICAgICAgIHNlbGYudGFyZ2V0 X3RpbWUgPSBpbmZvWzBdLnRhcmdldF90aW1lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgICAgIHJldHVybiBzZWxmCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTA1NQotKyAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKLSAgKiAKLS0g Ki8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRfdCgoX19weXhfdl9pbmZv WzBdKS50YXJnZXRfdGltZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDkzNCwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIGlm IChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBf X3B5eF9uX3NfdGFyZ2V0X3RpbWUsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTM0LCBf X3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OwotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzNQotLSAqICAgICAg ICAgc2VsZi5ibG9ja192c3luYyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJB TUVfSU5GT19CTE9DS19WU1lOQykKLS0gKiAgICAgICAgIHNlbGYudGFyZ2V0X3RpbWUgPSBpbmZv WzBdLnRhcmdldF90aW1lCi0tICogICAgICAgICByZXR1cm4gc2VsZiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICByZXR1cm4gUmVuZGVyRnJhbWVJbmZvKCkuX2Zyb21f c3RydWN0KCZpbmZvKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0tICogY2Rl ZiBjbGFzcyBSZW5kZXJDb250ZXh0KG9iamVjdCk6Ci0rICogICAgIGRlZiBzZXRfdXBkYXRlX2Nh bGxiYWNrKHNlbGYsIGNiKToKLSAgKi8KLSAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICBf X1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOwotLSAgX19weXhfciA9ICgo UHlPYmplY3QgKilfX3B5eF92X3NlbGYpOwotKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3Rf Q2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyRnJhbWVJbmZvKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDEwNTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICBf X3B5eF90XzMgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9SZW5kZXJGcmFtZUluZm8gKikoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckZyYW1lSW5mbyAqKV9fcHl4X3RfMiktPl9fcHl4X3Z0YWIpLT5fZnJvbV9zdHJ1 Y3QoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUlu Zm8gKilfX3B5eF90XzIpLCAoJl9fcHl4X3ZfaW5mbykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MykpIF9fUFlYX0VSUigwLCAxMDU1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0r ICBfX3B5eF9yID0gX19weXhfdF8zOwotKyAgX19weXhfdF8zID0gMDsKLSAgIGdvdG8gX19weXhf TDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTI5Ci0tICogQGN5 dGhvbi5pbnRlcm5hbAotLSAqIGNkZWYgY2xhc3MgUmVuZGVyRnJhbWVJbmZvKG9iamVjdCk6Ci0t ICogICAgIGNkZWYgX2Zyb21fc3RydWN0KHNlbGYsIG1wdl9yZW5kZXJfZnJhbWVfaW5mbyAqaW5m byk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYucHJlc2Vu dCA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19QUkVTRU5UKQot LSAqICAgICAgICAgc2VsZi5yZWRyYXcgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVS X0ZSQU1FX0lORk9fUkVEUkFXKQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwNDMKLSsgKiAgICAgICAgIHJldHVybiBlcnIKLSsgKiAKLSsgKiAgICAgZGVmIGdldF9uZXh0 X2ZyYW1lX2luZm8oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAg ICAgIGNkZWY6Ci0rICogICAgICAgICAgICAgbXB2X3JlbmRlcl9mcmFtZV9pbmZvIGluZm8KLSAg Ki8KLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19weXhfTDFfZXJyb3I6Owot LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuUmVuZGVyRnJhbWVJbmZvLl9mcm9tX3N0cnVjdCIsIF9fcHl4X2NsaW5l bm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotLSAgX19weXhfciA9IDA7Ci0rICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0r ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7 Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0 LmdldF9uZXh0X2ZyYW1lX2luZm8iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lKTsKLSsgIF9fcHl4X3IgPSBOVUxMOwotICAgX19weXhfTDA6OwotICAgX19QeXhf WEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAg IHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAiKHRyZWUgZnJhZ21lbnQpIjoxCi0tICogZGVm IF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogICAgIGNkZWYgdHVwbGUgc3RhdGUKLS0gKiAgICAgY2RlZiBvYmplY3QgX2RpY3QKLSsvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1NwotKyAqICAgICAgICAgcmV0dXJuIFJl bmRlckZyYW1lSW5mbygpLl9mcm9tX3N0cnVjdCgmaW5mbykKLSsgKiAKLSsgKiAgICAgZGVmIHNl dF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICB3aXRoIG5vZ2lsOgotKyAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29u dGV4dF9zZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAq PmNiKQotICAqLwotIAotIC8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fMV9fcmVkdWNl X2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3Qg KnVudXNlZCk7IC8qcHJvdG8qLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzE1UmVuZGVyRnJhbWVJbmZvXzFfX3JlZHVjZV9jeXRob25fXyhQeU9iamVj dCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKLStzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfOXNldF91cGRhdGVfY2FsbGJhY2soUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfY2IpOyAvKnByb3RvKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfOXNldF91cGRhdGVfY2FsbGJhY2soUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2IpIHsKLSAgIFB5T2JqZWN0 ICpfX3B5eF9yID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7Ci0t ICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE1UmVuZGVyRnJhbWVJ bmZvX19fcmVkdWNlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfUmVuZGVyRnJhbWVJbmZvICopX19weXhfdl9zZWxmKSk7Ci0rICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgic2V0X3VwZGF0ZV9jYWxsYmFjayAod3JhcHBlcikiLCAwKTsKLSsgIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0Xzhz ZXRfdXBkYXRlX2NhbGxiYWNrKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X2Ni KSk7Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLXN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE1UmVuZGVyRnJhbWVJbmZvX19fcmVk dWNlX2N5dGhvbl9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckZyYW1lSW5mbyAqX19weXhfdl9zZWxmKSB7Ci0tICBQeU9iamVjdCAqX19weXhfdl9zdGF0ZSA9 IDA7Ci0tICBQeU9iamVjdCAqX19weXhfdl9fZGljdCA9IDA7Ci0tICBpbnQgX19weXhfdl91c2Vf c2V0c3RhdGU7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNSZW5kZXJDb250ZXh0XzhzZXRfdXBkYXRlX2NhbGxiYWNrKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfY2IpIHsKLSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLS0g IGludCBfX3B5eF90XzI7Ci0tICBpbnQgX19weXhfdF8zOwotLSAgUHlPYmplY3QgKl9fcHl4X3Rf NCA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKLS0gIGludCBfX3B5eF9s aW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50 IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVk dWNlX2N5dGhvbl9fIiwgMCk7Ci0tCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo1Ci0tICogICAg IGNkZWYgb2JqZWN0IF9kaWN0Ci0tICogICAgIGNkZWYgYmludCB1c2Vfc2V0c3RhdGUKLS0gKiAg ICAgc3RhdGUgPSAoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIF9kaWN0 ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKQotLSAqICAgICBpZiBfZGljdCBpcyBu b3QgTm9uZToKLS0gKi8KLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF9lbXB0eV90dXBsZSk7Ci0tICBf X3B5eF92X3N0YXRlID0gX19weXhfZW1wdHlfdHVwbGU7Ci0tCi0tICAvKiAiKHRyZWUgZnJhZ21l bnQpIjo2Ci0tICogICAgIGNkZWYgYmludCB1c2Vfc2V0c3RhdGUKLS0gKiAgICAgc3RhdGUgPSAo KQotLSAqICAgICBfZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKLS0g KiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpCi0tICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9H ZXRBdHRyMygoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX2RpY3QsIFB5X05v bmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9l cnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19weXhfdl9fZGljdCA9IF9f cHl4X3RfMTsKLS0gIF9fcHl4X3RfMSA9IDA7Ci0tCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3 Ci0tICogICAgIHN0YXRlID0gKCkKLS0gKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2Rp Y3RfXycsIE5vbmUpCi0tICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQotLSAqICAgICAg ICAgdXNlX3NldHN0YXRlID0gVHJ1ZQotLSAqLwotLSAgX19weXhfdF8yID0gKF9fcHl4X3ZfX2Rp Y3QgIT0gUHlfTm9uZSk7Ci0tICBfX3B5eF90XzMgPSAoX19weXhfdF8yICE9IDApOwotLSAgaWYg KF9fcHl4X3RfMykgewotLQotLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo4Ci0tICogICAgIF9k aWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKQotLSAqICAgICBpZiBfZGljdCBp cyBub3QgTm9uZToKLS0gKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUKLS0gKiAgICAg ZWxzZToKLS0gKi8KLS0gICAgX19weXhfdF8xID0gUHlUdXBsZV9OZXcoMSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDgsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfX2RpY3QpOwot LSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3ZfX2RpY3QpOwotLSAgICBQeVR1cGxlX1NFVF9JVEVN KF9fcHl4X3RfMSwgMCwgX19weXhfdl9fZGljdCk7Ci0tICAgIF9fcHl4X3RfNCA9IFB5TnVtYmVy X0luUGxhY2VBZGQoX19weXhfdl9zdGF0ZSwgX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzQpKSBfX1BZWF9FUlIoMSwgOCwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzQpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKLS0gICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3N0YXRlLCAoKFB5T2JqZWN0KilfX3B5 eF90XzQpKTsKLS0gICAgX19weXhfdF80ID0gMDsKLS0KLS0gICAgLyogIih0cmVlIGZyYWdtZW50 KSI6OQotLSAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKLS0gKiAgICAgICAgIHN0YXRlICs9 IChfZGljdCwpCi0tICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgZWxzZToKLS0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9 IEZhbHNlCi0tICovCi0tICAgIF9fcHl4X3ZfdXNlX3NldHN0YXRlID0gMTsKLS0KLS0gICAgLyog Iih0cmVlIGZyYWdtZW50KSI6NwotLSAqICAgICBzdGF0ZSA9ICgpCi0tICogICAgIF9kaWN0ID0g Z2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKQotLSAqICAgICBpZiBfZGljdCBpcyBub3Qg Tm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc3RhdGUgKz0g KF9kaWN0LCkKLS0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUKLS0gKi8KLS0gICAgZ290 byBfX3B5eF9MMzsKLS0gIH0KLS0KLS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjExCi0tICogICAg ICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCi0tICogICAgIGVsc2U6Ci0tICogICAgICAgICB1c2Vf c2V0c3RhdGUgPSBGYWxzZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGlm IHVzZV9zZXRzdGF0ZToKLS0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9SZW5kZXJG cmFtZUluZm8sICh0eXBlKHNlbGYpLCAweGQ0MWQ4Y2QsIE5vbmUpLCBzdGF0ZQotLSAqLwotLSAg LyplbHNlKi8gewotLSAgICBfX3B5eF92X3VzZV9zZXRzdGF0ZSA9IDA7Ci0tICB9Ci0tICBfX3B5 eF9MMzo7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X3VwZGF0ZV9jYWxsYmFj ayIsIDApOwotIAotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKLS0gKiAgICAgZWxzZToKLS0g KiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IEZhbHNlCi0tICogICAgIGlmIHVzZV9zZXRzdGF0ZTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3Vu cGlja2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwgTm9uZSksIHN0 YXRlCi0tICogICAgIGVsc2U6Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA1OAotKyAqIAotKyAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6Ci0r ICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3NldF91cGRhdGVfY2FsbGJhY2soc2VsZi5f Y3R4LCAmX2NfdXBkYXRlY2IsIDx2b2lkICo+Y2IpCi0rICogICAgICAgICBzZWxmLnVwZGF0ZV9j YiA9IGNiCi0gICovCi0tICBfX3B5eF90XzMgPSAoX19weXhfdl91c2Vfc2V0c3RhdGUgIT0gMCk7 Ci0tICBpZiAoX19weXhfdF8zKSB7Ci0rICB7Ci0rICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0r ICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7Ci0rICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0r ICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwotKyAgICAgICNlbmRpZgotKyAgICAgIC8q dHJ5OiovIHsKLSAKLS0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKLS0gKiAgICAgICAgIHVz ZV9zZXRzdGF0ZSA9IEZhbHNlCi0tICogICAgIGlmIHVzZV9zZXRzdGF0ZToKLS0gKiAgICAgICAg IHJldHVybiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8sICh0eXBlKHNlbGYpLCAweGQ0 MWQ4Y2QsIE5vbmUpLCBzdGF0ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAg IGVsc2U6Ci0tICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZv LCAodHlwZShzZWxmKSwgMHhkNDFkOGNkLCBzdGF0ZSkKLSsgICAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDU5Ci0rICogICAgIGRlZiBzZXRfdXBkYXRlX2NhbGxiYWNr KHNlbGYsIGNiKToKLSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgbXB2 X3JlbmRlcl9jb250ZXh0X3NldF91cGRhdGVfY2FsbGJhY2soc2VsZi5fY3R4LCAmX2NfdXBkYXRl Y2IsIDx2b2lkICo+Y2IpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAg IHNlbGYudXBkYXRlX2NiID0gY2IKLSsgKiAKLSAgKi8KLS0gICAgX19QeXhfWERFQ1JFRihfX3B5 eF9yKTsKLS0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25f c19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF80KTsKLS0gICAgX19weXhfdF8xID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopUHlfVFlQ RSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKLS0gICAgX19QeXhfR0lWRVJFRigoKFB5 T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKLS0gICAgUHlU dXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDAsICgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpKSkpOwotLSAgICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzIyMjQx OTE0OSk7Ci0tICAgIF9fUHl4X0dJVkVSRUYoX19weXhfaW50XzIyMjQxOTE0OSk7Ci0tICAgIFB5 VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAxLCBfX3B5eF9pbnRfMjIyNDE5MTQ5KTsKLS0gICAg X19QeXhfSU5DUkVGKFB5X05vbmUpOwotLSAgICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOwotLSAg ICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMiwgUHlfTm9uZSk7Ci0tICAgIF9fcHl4X3Rf NSA9IFB5VHVwbGVfTmV3KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigx LCAxMywgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOwotLSAg ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNCk7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF81LCAwLCBfX3B5eF90XzQpOwotLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Ci0tICAg IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF81LCAxLCBfX3B5eF90XzEpOwotLSAgICBfX1B5eF9J TkNSRUYoX19weXhfdl9zdGF0ZSk7Ci0tICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zdGF0ZSk7 Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF81LCAyLCBfX3B5eF92X3N0YXRlKTsKLS0g ICAgX19weXhfdF80ID0gMDsKLS0gICAgX19weXhfdF8xID0gMDsKLS0gICAgX19weXhfciA9IF9f cHl4X3RfNTsKLS0gICAgX19weXhfdF81ID0gMDsKLS0gICAgZ290byBfX3B5eF9MMDsKLSsgICAg ICAgIG1wdl9yZW5kZXJfY29udGV4dF9zZXRfdXBkYXRlX2NhbGxiYWNrKF9fcHl4X3Zfc2VsZi0+ X2N0eCwgKCZfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY191cGRhdGVjYiksICgodm9p ZCAqKV9fcHl4X3ZfY2IpKTsKLSsgICAgICB9Ci0gCi0tICAgIC8qICIodHJlZSBmcmFnbWVudCki OjEyCi0tICogICAgIGVsc2U6Ci0tICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBGYWxzZQotLSAq ICAgICBpZiB1c2Vfc2V0c3RhdGU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8sICh0eXBlKHNlbGYp LCAweGQ0MWQ4Y2QsIE5vbmUpLCBzdGF0ZQotLSAqICAgICBlbHNlOgotKyAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU4Ci0rICogCi0rICogICAgIGRlZiBzZXRfdXBk YXRlX2NhbGxiYWNrKHNlbGYsIGNiKToKLSsgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRf c2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLl9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQgKj5jYikK LSsgKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKLSAgKi8KLSsgICAgICAvKmZpbmFsbHk6 Ki8gewotKyAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKLSsgICAgICAgICAgI2lmZGVmIFdJVEhf VEhSRUFECi0rICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0rICAgICAgICAgIFB5 X0JMT0NLX1RIUkVBRFMKLSsgICAgICAgICAgI2VuZGlmCi0rICAgICAgICAgIGdvdG8gX19weXhf TDU7Ci0rICAgICAgICB9Ci0rICAgICAgICBfX3B5eF9MNTo7Ci0rICAgICAgfQotICAgfQotIAot LSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTUKLS0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBp Y2tsZV9SZW5kZXJGcmFtZUluZm8sICh0eXBlKHNlbGYpLCAweGQ0MWQ4Y2QsIE5vbmUpLCBzdGF0 ZQotLSAqICAgICBlbHNlOgotLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1JlbmRl ckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwgc3RhdGUpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9z dGF0ZSk6Ci0tICogICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRl KHNlbGYsIF9fcHl4X3N0YXRlKQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwNjAKLSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgbXB2X3JlbmRl cl9jb250ZXh0X3NldF91cGRhdGVfY2FsbGJhY2soc2VsZi5fY3R4LCAmX2NfdXBkYXRlY2IsIDx2 b2lkICo+Y2IpCi0rICogICAgICAgICBzZWxmLnVwZGF0ZV9jYiA9IGNiICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAKLSsgKiAgICAgZGVmIHVwZGF0ZShzZWxmKToKLSAgKi8KLS0g IC8qZWxzZSovIHsKLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gICAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzUsIF9fcHl4X25fc19weXhfdW5waWNrbGVfUmVuZGVy RnJhbWVJbmZvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMSwgMTUsIF9f cHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKLS0gICAgX19weXhf dF8xID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDEsIDE1LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0t ICAgIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhf dl9zZWxmKSkpKTsKLS0gICAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5 T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKLS0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzEsIDAsICgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkp OwotLSAgICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzIyMjQxOTE0OSk7Ci0tICAgIF9fUHl4X0dJ VkVSRUYoX19weXhfaW50XzIyMjQxOTE0OSk7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF8xLCAxLCBfX3B5eF9pbnRfMjIyNDE5MTQ5KTsKLS0gICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zf c3RhdGUpOwotLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc3RhdGUpOwotLSAgICBQeVR1cGxl X1NFVF9JVEVNKF9fcHl4X3RfMSwgMiwgX19weXhfdl9zdGF0ZSk7Ci0tICAgIF9fcHl4X3RfNCA9 IFB5VHVwbGVfTmV3KDIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCAx NSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAgICBf X1B5eF9HSVZFUkVGKF9fcHl4X3RfNSk7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF80 LCAwLCBfX3B5eF90XzUpOwotLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Ci0tICAgIFB5 VHVwbGVfU0VUX0lURU0oX19weXhfdF80LCAxLCBfX3B5eF90XzEpOwotLSAgICBfX3B5eF90XzUg PSAwOwotLSAgICBfX3B5eF90XzEgPSAwOwotLSAgICBfX3B5eF9yID0gX19weXhfdF80OwotLSAg ICBfX3B5eF90XzQgPSAwOwotLSAgICBnb3RvIF9fcHl4X0wwOwotLSAgfQotKyAgX19QeXhfSU5D UkVGKF9fcHl4X3ZfY2IpOwotKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X2NiKTsKLSsgIF9fUHl4 X0dPVFJFRihfX3B5eF92X3NlbGYtPnVwZGF0ZV9jYik7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhf dl9zZWxmLT51cGRhdGVfY2IpOwotKyAgX19weXhfdl9zZWxmLT51cGRhdGVfY2IgPSBfX3B5eF92 X2NiOwotIAotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MQotLSAqIGRlZiBfX3JlZHVjZV9jeXRo b25fXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBjZGVmIHR1 cGxlIHN0YXRlCi0tICogICAgIGNkZWYgb2JqZWN0IF9kaWN0Ci0rICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA1NwotKyAqICAgICAgICAgcmV0dXJuIFJlbmRlckZyYW1lSW5m bygpLl9mcm9tX3N0cnVjdCgmaW5mbykKLSsgKiAKLSsgKiAgICAgZGVmIHNldF91cGRhdGVfY2Fs bGJhY2soc2VsZiwgY2IpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAg ICB3aXRoIG5vZ2lsOgotKyAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9zZXRfdXBk YXRlX2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAqPmNiKQotICAqLwot IAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Ci0t ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1 dHRlci5saWJzLm1wdi5SZW5kZXJGcmFtZUluZm8uX19yZWR1Y2VfY3l0aG9uX18iLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fcHl4X3IgPSBOVUxM OwotLSAgX19weXhfTDA6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X3N0YXRlKTsKLS0gIF9f UHl4X1hERUNSRUYoX19weXhfdl9fZGljdCk7Ci0rICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhf SU5DUkVGKFB5X05vbmUpOwotICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAi KHRyZWUgZnJhZ21lbnQpIjoxNgotLSAqICAgICBlbHNlOgotLSAqICAgICAgICAgcmV0dXJuIF9f cHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwgc3Rh dGUpCi0tICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZy YW1lSW5mb19fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQotKy8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDYyCi0rICogICAgICAgICBzZWxmLnVwZGF0ZV9jYiA9IGNiCi0r ICogCi0rICogICAgIGRlZiB1cGRhdGUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiAgICAgICAgIGNkZWYgdWludDY0X3QgcmV0Ci0rICogICAgICAgICB3aXRoIG5vZ2ls OgotICAqLwotIAotIC8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fM19fc2V0c3RhdGVf Y3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf c3RhdGUpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xNVJlbmRlckZyYW1lSW5mb18zX19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVj dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgewotK3N0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF8xMXVwZGF0ZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0 ICp1bnVzZWQpOyAvKnByb3RvKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTF1cGRhdGUoUHlPYmplY3QgKl9fcHl4X3Zf c2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7Ci0gICBQeU9iamVjdCAqX19w eXhfciA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7Ci0tICBf X3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE1UmVuZGVyRnJhbWVJbmZv XzJfX3NldHN0YXRlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfUmVuZGVyRnJhbWVJbmZvICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4 X3ZfX19weXhfc3RhdGUpKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJ1cGRhdGUg KHdyYXBwZXIpIiwgMCk7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzUmVuZGVyQ29udGV4dF8xMHVwZGF0ZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKLSAKLSAgIC8qIGZ1 bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0g ICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fMl9fc2V0c3RhdGVfY3l0aG9uX18o c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7Ci0rc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEw dXBkYXRlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRl eHQgKl9fcHl4X3Zfc2VsZikgewotKyAgdWludDY0X3QgX19weXhfdl9yZXQ7Ci0gICBQeU9iamVj dCAqX19weXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotICAgUHlP YmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0gICBpbnQgX19weXhfbGluZW5vID0gMDsKLSAgIGNv bnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAgIGludCBfX3B5eF9jbGluZW5vID0g MDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fIiwg MCk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgidXBkYXRlIiwgMCk7Ci0gCi0tICAv KiAiKHRyZWUgZnJhZ21lbnQpIjoxNwotLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xl X1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwgc3RhdGUpCi0tICogZGVm IF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgotLSAqICAgICBfX3B5eF91 bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZShzZWxmLCBfX3B5eF9zdGF0ZSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwNjQKLSsgKiAgICAgZGVmIHVwZGF0ZShzZWxmKToKLSsgKiAgICAgICAgIGNkZWYg dWludDY0X3QgcmV0Ci0rICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3VwZGF0 ZShzZWxmLl9jdHgpCi0rICogICAgICAgICByZXR1cm4gcmV0Ci0gICovCi0tICBpZiAoIShsaWtl bHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5eF92X19f cHl4X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJF eHBlY3RlZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5X1RZUEUoX19weXhfdl9fX3B5 eF9zdGF0ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFfZXJyb3Ip Ci0tICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBp Y2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZShfX3B5eF92X3NlbGYsICgoUHlPYmplY3Qq KV9fcHl4X3ZfX19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMSwgMTcsIF9fcHl4X0wxX2Vycm9yKQotKyAgewotKyAgICAgICNpZmRlZiBXSVRIX1RIUkVB RAotKyAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwotKyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFE UwotKyAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLSsgICAgICAjZW5kaWYKLSsgICAg ICAvKnRyeToqLyB7Ci0rCi0rICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTA2NQotKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCByZXQKLSsgKiAgICAgICAgIHdpdGgg bm9naWw6Ci0rICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3VwZGF0ZShz ZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHJldHVy biByZXQKLSsgKiAKLSsgKi8KLSsgICAgICAgIF9fcHl4X3ZfcmV0ID0gbXB2X3JlbmRlcl9jb250 ZXh0X3VwZGF0ZShfX3B5eF92X3NlbGYtPl9jdHgpOwotKyAgICAgIH0KLSsKLSsgICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2NAotKyAqICAgICBkZWYgdXBkYXRlKHNl bGYpOgotKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCByZXQKLSsgKiAgICAgICAgIHdpdGggbm9n aWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICByZXQgPSBt cHZfcmVuZGVyX2NvbnRleHRfdXBkYXRlKHNlbGYuX2N0eCkKLSsgKiAgICAgICAgIHJldHVybiBy ZXQKLSsgKi8KLSsgICAgICAvKmZpbmFsbHk6Ki8gewotKyAgICAgICAgLypub3JtYWwgZXhpdDoq L3sKLSsgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0rICAgICAgICAgIF9fUHl4X0Zhc3RH SUxfRm9yZ2V0KCk7Ci0rICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSsgICAgICAgICAgI2Vu ZGlmCi0rICAgICAgICAgIGdvdG8gX19weXhfTDU7Ci0rICAgICAgICB9Ci0rICAgICAgICBfX3B5 eF9MNTo7Ci0rICAgICAgfQotKyAgfQotKwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwNjYKLSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgcmV0 ID0gbXB2X3JlbmRlcl9jb250ZXh0X3VwZGF0ZShzZWxmLl9jdHgpCi0rICogICAgICAgICByZXR1 cm4gcmV0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAKLSsgKiAgICAgQF9lcnJv cnMKLSsgKi8KLSsgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0rICBfX3B5eF90XzEgPSBfX1B5 eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfcmV0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMTA2NiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwot KyAgX19weXhfciA9IF9fcHl4X3RfMTsKLSsgIF9fcHl4X3RfMSA9IDA7Ci0rICBnb3RvIF9fcHl4 X0wwOwotIAotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTYKLS0gKiAgICAgZWxzZToKLS0gKiAg ICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8sICh0eXBlKHNlbGYp LCAweGQ0MWQ4Y2QsIHN0YXRlKQotLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9f cHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBfX3B5eF91 bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZShzZWxmLCBfX3B5eF9zdGF0ZSkKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDYyCi0rICogICAgICAgICBzZWxm LnVwZGF0ZV9jYiA9IGNiCi0rICogCi0rICogICAgIGRlZiB1cGRhdGUoc2VsZik6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGNkZWYgdWludDY0X3QgcmV0Ci0rICog ICAgICAgICB3aXRoIG5vZ2lsOgotICAqLwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICov Ci0tICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotLSAgZ290byBf X3B5eF9MMDsKLSAgIF9fcHl4X0wxX2Vycm9yOjsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8x KTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckZyYW1l SW5mby5fX3NldHN0YXRlX2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBf X3B5eF9maWxlbmFtZSk7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5SZW5kZXJDb250ZXh0LnVwZGF0ZSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19w eXhfZmlsZW5hbWUpOwotICAgX19weXhfciA9IE5VTEw7Ci0gICBfX3B5eF9MMDo7Ci0gICBfX1B5 eF9YR0lWRVJFRihfX3B5eF9yKTsKLUBAIC0xODkwMiw5OCArMTgyMTgsODAgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9f Ml9fc2V0c3RhdGVfY3kKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTUwCi0tICogICAgICAgICBiaW50IGluaXRlZAotKy8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY5Ci0gICogCi0tICogICAgIGRlZiBfX2lu aXRfXyhzZWxmLCBtcHYsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg ICAgICAgICAgIGFwaV90eXBlLAotLSAqICAgICAgICAgICAgICAgICAgb3BlbmdsX2luaXRfcGFy YW1zPU5vbmUsCi0rICogICAgIEBfZXJyb3JzCi0rICogICAgIGRlZiByZW5kZXIoc2VsZiwgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgICAgIG9wZW5nbF9mYm89 Tm9uZSwKLSsgKiAgICAgICAgICAgICAgICBmbGlwX3k9RmFsc2UsCi0gICovCi0gCi0gLyogUHl0 aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfMV9faW5pdF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLwotLXN0YXRp YyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xX19p bml0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2Jq ZWN0ICpfX3B5eF9rd2RzKSB7Ci0tICBQeU9iamVjdCAqX19weXhfdl9tcHYgPSAwOwotLSAgUHlP YmplY3QgKl9fcHl4X3ZfYXBpX3R5cGUgPSAwOwotLSAgUHlPYmplY3QgKl9fcHl4X3Zfb3Blbmds X2luaXRfcGFyYW1zID0gMDsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X2FkdmFuY2VkX2NvbnRyb2wg PSAwOwotLSAgUHlPYmplY3QgKl9fcHl4X3ZfeDExX2Rpc3BsYXkgPSAwOwotLSAgUHlPYmplY3Qg Kl9fcHl4X3Zfd2xfZGlzcGxheSA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhfdl9kcm1fZGlzcGxh eSA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhfdl9kcm1fb3NkX3NpemUgPSAwOwotK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8x M3JlbmRlcihQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlP YmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIoUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2Rz KSB7Ci0rICBQeU9iamVjdCAqX19weXhfdl9vcGVuZ2xfZmJvID0gMDsKLSsgIFB5T2JqZWN0ICpf X3B5eF92X2ZsaXBfeSA9IDA7Ci0rICBQeU9iamVjdCAqX19weXhfdl9kZXB0aCA9IDA7Ci0rICBQ eU9iamVjdCAqX19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUgPSAwOwotKyAgUHlPYmplY3Qg Kl9fcHl4X3Zfc2tpcF9yZW5kZXJpbmcgPSAwOwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0g ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVu byA9IDA7Ci0tICBpbnQgX19weXhfcjsKLSsgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLSAgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19pbml0X18gKHdyYXBwZXIpIiwgMCk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi cmVuZGVyICh3cmFwcGVyKSIsIDApOwotICAgewotLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5 eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19tcHYsJl9fcHl4X25fc19hcGlfdHlwZSwmX19w eXhfbl9zX29wZW5nbF9pbml0X3BhcmFtcywmX19weXhfbl9zX2FkdmFuY2VkX2NvbnRyb2wsJl9f cHl4X25fc194MTFfZGlzcGxheSwmX19weXhfbl9zX3dsX2Rpc3BsYXksJl9fcHl4X25fc19kcm1f ZGlzcGxheSwmX19weXhfbl9zX2RybV9vc2Rfc2l6ZSwwfTsKLS0gICAgUHlPYmplY3QqIHZhbHVl c1s4XSA9IHswLDAsMCwwLDAsMCwwLDB9OwotLQotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTUyCi0tICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtcHYsCi0tICogICAg ICAgICAgICAgICAgICBhcGlfdHlwZSwKLS0gKiAgICAgICAgICAgICAgICAgIG9wZW5nbF9pbml0 X3BhcmFtcz1Ob25lLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAg ICAgICAgICBhZHZhbmNlZF9jb250cm9sPUZhbHNlLAotLSAqICAgICAgICAgICAgICAgICAgeDEx X2Rpc3BsYXk9Tm9uZSwKLS0gKi8KLS0gICAgdmFsdWVzWzJdID0gKChQeU9iamVjdCAqKVB5X05v bmUpOwotKyAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4 X25fc19vcGVuZ2xfZmJvLCZfX3B5eF9uX3NfZmxpcF95LCZfX3B5eF9uX3NfZGVwdGgsJl9fcHl4 X25fc19ibG9ja19mb3JfdGFyZ2V0X3RpbWUsJl9fcHl4X25fc19za2lwX3JlbmRlcmluZywwfTsK LSsgICAgUHlPYmplY3QqIHZhbHVlc1s1XSA9IHswLDAsMCwwLDB9OwotIAotLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTUzCi0tICogICAgICAgICAgICAgICAgICBhcGlf dHlwZSwKLS0gKiAgICAgICAgICAgICAgICAgIG9wZW5nbF9pbml0X3BhcmFtcz1Ob25lLAotLSAq ICAgICAgICAgICAgICAgICAgYWR2YW5jZWRfY29udHJvbD1GYWxzZSwgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgICAgICAgeDExX2Rpc3BsYXk9Tm9uZSwKLS0g KiAgICAgICAgICAgICAgICAgIHdsX2Rpc3BsYXk9Tm9uZSwKLSsgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwNzAKLSsgKiAgICAgQF9lcnJvcnMKLSsgKiAgICAgZGVmIHJl bmRlcihzZWxmLAotKyAqICAgICAgICAgICAgICAgIG9wZW5nbF9mYm89Tm9uZSwgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgICAgIGZsaXBfeT1GYWxzZSwKLSsg KiAgICAgICAgICAgICAgICBkZXB0aD1Ob25lLAotICAqLwotLSAgICB2YWx1ZXNbM10gPSAoKFB5 T2JqZWN0ICopUHlfRmFsc2UpOwotKyAgICB2YWx1ZXNbMF0gPSAoKFB5T2JqZWN0ICopUHlfTm9u ZSk7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTQKLS0gKiAg ICAgICAgICAgICAgICAgIG9wZW5nbF9pbml0X3BhcmFtcz1Ob25lLAotLSAqICAgICAgICAgICAg ICAgICAgYWR2YW5jZWRfY29udHJvbD1GYWxzZSwKLS0gKiAgICAgICAgICAgICAgICAgIHgxMV9k aXNwbGF5PU5vbmUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAg ICAgICAgIHdsX2Rpc3BsYXk9Tm9uZSwKLS0gKiAgICAgICAgICAgICAgICAgIGRybV9kaXNwbGF5 PU5vbmUsCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDcxCi0rICog ICAgIGRlZiByZW5kZXIoc2VsZiwKLSsgKiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUs Ci0rICogICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgZGVwdGg9Tm9uZSwKLSsgKiAgICAgICAgICAgICAg ICBibG9ja19mb3JfdGFyZ2V0X3RpbWU9VHJ1ZSwKLSAgKi8KLS0gICAgdmFsdWVzWzRdID0gKChQ eU9iamVjdCAqKVB5X05vbmUpOwotKyAgICB2YWx1ZXNbMV0gPSAoKFB5T2JqZWN0ICopUHlfRmFs c2UpOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTU1Ci0tICog ICAgICAgICAgICAgICAgICBhZHZhbmNlZF9jb250cm9sPUZhbHNlLAotLSAqICAgICAgICAgICAg ICAgICAgeDExX2Rpc3BsYXk9Tm9uZSwKLS0gKiAgICAgICAgICAgICAgICAgIHdsX2Rpc3BsYXk9 Tm9uZSwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgICAgICAg ZHJtX2Rpc3BsYXk9Tm9uZSwKLS0gKiAgICAgICAgICAgICAgICAgIGRybV9vc2Rfc2l6ZT1Ob25l Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDcyCi0rICogICAgICAg ICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLAotKyAqICAgICAgICAgICAgICAgIGZsaXBfeT1GYWxz ZSwKLSsgKiAgICAgICAgICAgICAgICBkZXB0aD1Ob25lLCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgYmxvY2tfZm9yX3RhcmdldF90aW1lPVRydWUsCi0r ICogICAgICAgICAgICAgICAgc2tpcF9yZW5kZXJpbmc9RmFsc2UpOgotICAqLwotLSAgICB2YWx1 ZXNbNV0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7Ci0rICAgIHZhbHVlc1syXSA9ICgoUHlPYmpl Y3QgKilQeV9Ob25lKTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojk1NgotLSAqICAgICAgICAgICAgICAgICAgeDExX2Rpc3BsYXk9Tm9uZSwKLS0gKiAgICAgICAg ICAgICAgICAgIHdsX2Rpc3BsYXk9Tm9uZSwKLS0gKiAgICAgICAgICAgICAgICAgIGRybV9kaXNw bGF5PU5vbmUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAg ICAgIGRybV9vc2Rfc2l6ZT1Ob25lCi0tICogICAgICAgICAgICAgICAgICApOgotKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MwotKyAqICAgICAgICAgICAgICAgIGZs aXBfeT1GYWxzZSwKLSsgKiAgICAgICAgICAgICAgICBkZXB0aD1Ob25lLAotKyAqICAgICAgICAg ICAgICAgIGJsb2NrX2Zvcl90YXJnZXRfdGltZT1UcnVlLCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgc2tpcF9yZW5kZXJpbmc9RmFsc2UpOgotKyAqIAot ICAqLwotLSAgICB2YWx1ZXNbNl0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7Ci0rICAgIHZhbHVl c1szXSA9ICgoUHlPYmplY3QgKilQeV9UcnVlKTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjk1NwotLSAqICAgICAgICAgICAgICAgICAgd2xfZGlzcGxheT1Ob25l LAotLSAqICAgICAgICAgICAgICAgICAgZHJtX2Rpc3BsYXk9Tm9uZSwKLS0gKiAgICAgICAgICAg ICAgICAgIGRybV9vc2Rfc2l6ZT1Ob25lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgICAgICAgICAgICk6Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDc0Ci0rICogICAgICAgICAgICAgICAgZGVwdGg9Tm9uZSwKLSsgKiAgICAgICAgICAg ICAgICBibG9ja19mb3JfdGFyZ2V0X3RpbWU9VHJ1ZSwKLSsgKiAgICAgICAgICAgICAgICBza2lw X3JlbmRlcmluZz1GYWxzZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAKLSsg KiAgICAgICAgIGNkZWY6Ci0gICovCi0tICAgIHZhbHVlc1s3XSA9ICgoUHlPYmplY3QgKilQeV9O b25lKTsKLSsgICAgdmFsdWVzWzRdID0gKChQeU9iamVjdCAqKVB5X0ZhbHNlKTsKLSAgICAgaWYg KHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7Ci0gICAgICAgUHlfc3NpemVfdCBrd19hcmdzOwotICAg ICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2Fy Z3MpOwotICAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKLS0gICAgICAgIGNhc2UgIDg6IHZhbHVl c1s3XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgNyk7Ci0tICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICA3OiB2YWx1ZXNbNl0gPSBQeVR1cGxlX0dFVF9J VEVNKF9fcHl4X2FyZ3MsIDYpOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAg ICAgY2FzZSAgNjogdmFsdWVzWzVdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCA1KTsK LS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSAgICAgICAgIGNhc2UgIDU6IHZhbHVlc1s0 XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgNCk7Ci0gICAgICAgICBDWVRIT05fRkFM TFRIUk9VR0g7Ci0gICAgICAgICBjYXNlICA0OiB2YWx1ZXNbM10gPSBQeVR1cGxlX0dFVF9JVEVN KF9fcHl4X2FyZ3MsIDMpOwotQEAgLTE5MDEwLDYyICsxODMwOCw0MCBAQCBzdGF0aWMgaW50IF9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMV9faW5pdF9fKFB5 T2JqZWN0ICpfXwotICAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKLSAg ICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0gICAgICAgICBjYXNlICAwOgotLSAgICAgICAgaWYg KGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywg X19weXhfbl9zX21wdikpICE9IDApKSBrd19hcmdzLS07Ci0tICAgICAgICBlbHNlIGdvdG8gX19w eXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0rICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKLSsgICAg ICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dk cywgX19weXhfbl9zX29wZW5nbF9mYm8pOwotKyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVz WzBdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQotKyAgICAgICAgfQotICAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOwotICAgICAgICAgY2FzZSAgMToKLS0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVl c1sxXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19hcGlf dHlwZSkpICE9IDApKSBrd19hcmdzLS07Ci0tICAgICAgICBlbHNlIHsKLS0gICAgICAgICAgX19Q eXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwgMiwgOCwgMSk7IF9fUFlYX0VS UigwLCA5NTAsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7Ci0r ICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4 X2t3ZHMsIF9fcHl4X25fc19mbGlwX3kpOwotKyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVz WzFdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQotICAgICAgICAgfQotICAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOwotICAgICAgICAgY2FzZSAgMjoKLSAgICAgICAgIGlmIChrd19hcmdzID4gMCkg ewotLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihf X3B5eF9rd2RzLCBfX3B5eF9uX3Nfb3BlbmdsX2luaXRfcGFyYW1zKTsKLSsgICAgICAgICAgUHlP YmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhf bl9zX2RlcHRoKTsKLSAgICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1syXSA9IHZhbHVlOyBr d19hcmdzLS07IH0KLSAgICAgICAgIH0KLSAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSAg ICAgICAgIGNhc2UgIDM6Ci0gICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKLS0gICAgICAgICAg UHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19w eXhfbl9zX2FkdmFuY2VkX2NvbnRyb2wpOwotKyAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBf X1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfYmxvY2tfZm9yX3Rh cmdldF90aW1lKTsKLSAgICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1szXSA9IHZhbHVlOyBr d19hcmdzLS07IH0KLSAgICAgICAgIH0KLSAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSAg ICAgICAgIGNhc2UgIDQ6Ci0gICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKLS0gICAgICAgICAg UHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19w eXhfbl9zX3gxMV9kaXNwbGF5KTsKLSsgICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhf UHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3NraXBfcmVuZGVyaW5nKTsK LSAgICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1s0XSA9IHZhbHVlOyBrd19hcmdzLS07IH0K LSAgICAgICAgIH0KLS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2Ug IDU6Ci0tICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKLS0gICAgICAgICAgUHlPYmplY3QqIHZh bHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3dsX2Rp c3BsYXkpOwotLSAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzVdID0gdmFsdWU7IGt3X2Fy Z3MtLTsgfQotLSAgICAgICAgfQotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAg ICAgY2FzZSAgNjoKLS0gICAgICAgIGlmIChrd19hcmdzID4gMCkgewotLSAgICAgICAgICBQeU9i amVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9u X3NfZHJtX2Rpc3BsYXkpOwotLSAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzZdID0gdmFs dWU7IGt3X2FyZ3MtLTsgfQotLSAgICAgICAgfQotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OwotLSAgICAgICAgY2FzZSAgNzoKLS0gICAgICAgIGlmIChrd19hcmdzID4gMCkgewotLSAgICAg ICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2Rz LCBfX3B5eF9uX3NfZHJtX29zZF9zaXplKTsKLS0gICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVl c1s3XSA9IHZhbHVlOyBrd19hcmdzLS07IH0KLS0gICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAg aWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewotLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4 X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2 YWx1ZXMsIHBvc19hcmdzLCAiX19pbml0X18iKSA8IDApKSBfX1BZWF9FUlIoMCwgOTUwLCBfX3B5 eF9MM19lcnJvcikKLSsgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5 d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywg InJlbmRlciIpIDwgMCkpIF9fUFlYX0VSUigwLCAxMDY5LCBfX3B5eF9MM19lcnJvcikKLSAgICAg ICB9Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4 X2FyZ3MpKSB7Ci0tICAgICAgICBjYXNlICA4OiB2YWx1ZXNbN10gPSBQeVR1cGxlX0dFVF9JVEVN KF9fcHl4X2FyZ3MsIDcpOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAg Y2FzZSAgNzogdmFsdWVzWzZdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCA2KTsKLS0g ICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDY6IHZhbHVlc1s1XSA9 IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgNSk7Ci0tICAgICAgICBDWVRIT05fRkFMTFRI Uk9VR0g7Ci0gICAgICAgICBjYXNlICA1OiB2YWx1ZXNbNF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9f cHl4X2FyZ3MsIDQpOwotICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotICAgICAgICAgY2Fz ZSAgNDogdmFsdWVzWzNdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAzKTsKLUBAIC0x OTA3MywzNiArMTgzNDksMzUgQEAgc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNSZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX18KLSAgICAgICAgIGNh c2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7Ci0gICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0gICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQ eVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOwotLSAgICAgICAgdmFsdWVzWzBdID0gUHlU dXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKLS0gICAgICAgIGJyZWFrOwotKyAgICAgICAg Q1lUSE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBs ZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKLSsgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsK LSsgICAgICAgIGNhc2UgIDA6IGJyZWFrOwotICAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9M NV9hcmd0dXBsZV9lcnJvcjsKLSAgICAgICB9Ci0gICAgIH0KLS0gICAgX19weXhfdl9tcHYgPSB2 YWx1ZXNbMF07Ci0tICAgIF9fcHl4X3ZfYXBpX3R5cGUgPSB2YWx1ZXNbMV07Ci0tICAgIF9fcHl4 X3Zfb3BlbmdsX2luaXRfcGFyYW1zID0gdmFsdWVzWzJdOwotLSAgICBfX3B5eF92X2FkdmFuY2Vk X2NvbnRyb2wgPSB2YWx1ZXNbM107Ci0tICAgIF9fcHl4X3ZfeDExX2Rpc3BsYXkgPSB2YWx1ZXNb NF07Ci0tICAgIF9fcHl4X3Zfd2xfZGlzcGxheSA9IHZhbHVlc1s1XTsKLS0gICAgX19weXhfdl9k cm1fZGlzcGxheSA9IHZhbHVlc1s2XTsKLS0gICAgX19weXhfdl9kcm1fb3NkX3NpemUgPSB2YWx1 ZXNbN107Ci0tICB9Ci0tICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOwot KyAgICBfX3B5eF92X29wZW5nbF9mYm8gPSB2YWx1ZXNbMF07Ci0rICAgIF9fcHl4X3ZfZmxpcF95 ID0gdmFsdWVzWzFdOwotKyAgICBfX3B5eF92X2RlcHRoID0gdmFsdWVzWzJdOwotKyAgICBfX3B5 eF92X2Jsb2NrX2Zvcl90YXJnZXRfdGltZSA9IHZhbHVlc1szXTsKLSsgICAgX19weXhfdl9za2lw X3JlbmRlcmluZyA9IHZhbHVlc1s0XTsKLSsgIH0KLSsgIGdvdG8gX19weXhfTDRfYXJndW1lbnRf dW5wYWNraW5nX2RvbmU7Ci0gICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Ci0tICBfX1B5eF9S YWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAwLCAyLCA4LCBQeVR1cGxlX0dFVF9TSVpF KF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDk1MCwgX19weXhfTDNfZXJyb3IpCi0rICBfX1B5 eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgicmVuZGVyIiwgMCwgMCwgNSwgUHlUdXBsZV9HRVRfU0la RShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCAxMDY5LCBfX3B5eF9MM19lcnJvcikKLSAgIF9f cHl4X0wzX2Vycm9yOjsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2 LlJlbmRlckNvbnRleHQuX19pbml0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2 LlJlbmRlckNvbnRleHQucmVuZGVyIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5 eF9maWxlbmFtZSk7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVy biAtMTsKLSsgIHJldHVybiBOVUxMOwotICAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2Rv bmU6OwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfX19pbml0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9SZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxmKSwgX19weXhfdl9tcHYsIF9fcHl4X3ZfYXBp X3R5cGUsIF9fcHl4X3Zfb3BlbmdsX2luaXRfcGFyYW1zLCBfX3B5eF92X2FkdmFuY2VkX2NvbnRy b2wsIF9fcHl4X3ZfeDExX2Rpc3BsYXksIF9fcHl4X3Zfd2xfZGlzcGxheSwgX19weXhfdl9kcm1f ZGlzcGxheSwgX19weXhfdl9kcm1fb3NkX3NpemUpOwotKyAgX19weXhfciA9IF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTJyZW5kZXIoKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxm KSwgX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF92X2ZsaXBfeSwgX19weXhfdl9kZXB0aCwgX19w eXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUsIF9fcHl4X3Zfc2tpcF9yZW5kZXJpbmcpOwotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk1MAotLSAqICAgICAgICAgYmlu dCBpbml0ZWQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY5Ci0gICog Ci0tICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtcHYsICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLS0gKiAgICAgICAgICAgICAgICAgIGFwaV90eXBlLAotLSAqICAgICAgICAgICAgICAg ICAgb3BlbmdsX2luaXRfcGFyYW1zPU5vbmUsCi0rICogICAgIEBfZXJyb3JzCi0rICogICAgIGRl ZiByZW5kZXIoc2VsZiwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg ICAgICAgIG9wZW5nbF9mYm89Tm9uZSwKLSsgKiAgICAgICAgICAgICAgICBmbGlwX3k9RmFsc2Us Ci0gICovCi0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLUBAIC0xOTExMCw3ODYgKzE4 Mzg1LDYyNiBAQCBzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfMV9faW5pdF9fKFB5T2JqZWN0ICpfXwotICAgcmV0dXJuIF9fcHl4X3I7Ci0g fQotIAotLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVy Q29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9S ZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X21wdiwgUHlPYmpl Y3QgKl9fcHl4X3ZfYXBpX3R5cGUsIFB5T2JqZWN0ICpfX3B5eF92X29wZW5nbF9pbml0X3BhcmFt cywgUHlPYmplY3QgKl9fcHl4X3ZfYWR2YW5jZWRfY29udHJvbCwgUHlPYmplY3QgKl9fcHl4X3Zf eDExX2Rpc3BsYXksIFB5T2JqZWN0ICpfX3B5eF92X3dsX2Rpc3BsYXksIFB5T2JqZWN0ICpfX3B5 eF92X2RybV9kaXNwbGF5LCBQeU9iamVjdCAqX19weXhfdl9kcm1fb3NkX3NpemUpIHsKLS0gIHN0 cnVjdCBtcHZfb3BlbmdsX2luaXRfcGFyYW1zIF9fcHl4X3ZfZ2xfcGFyYW1zOwotLSAgc3RydWN0 IG1wdl9vcGVuZ2xfZHJtX3BhcmFtcyBfX3B5eF92X2RybV9wYXJhbXM7Ci0tICBzdHJ1Y3QgbXB2 X29wZW5nbF9kcm1fb3NkX3NpemUgX19weXhfdl9fZHJtX29zZF9zaXplOwotK3N0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJl bmRlcihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0 ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X29wZW5nbF9mYm8sIFB5T2JqZWN0ICpf X3B5eF92X2ZsaXBfeSwgUHlPYmplY3QgKl9fcHl4X3ZfZGVwdGgsIFB5T2JqZWN0ICpfX3B5eF92 X2Jsb2NrX2Zvcl90YXJnZXRfdGltZSwgUHlPYmplY3QgKl9fcHl4X3Zfc2tpcF9yZW5kZXJpbmcp IHsKLSsgIHN0cnVjdCBtcHZfb3BlbmdsX2ZibyBfX3B5eF92X2ZibzsKLSAgIHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKl9fcHl4X3ZfcGFyYW1z ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X2FycCA9IE5VTEw7Ci0tICBpbnQgX19weXhf dl9lcnI7Ci0tICBpbnQgX19weXhfcjsKLSsgIGludCBfX3B5eF92X3JldDsKLSsgIFB5T2JqZWN0 ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0gICBQeU9i amVjdCAqX19weXhfdF8xID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwot KyAgaW50IF9fcHl4X3RfMjsKLSAgIGludCBfX3B5eF90XzM7Ci0gICBQeU9iamVjdCAqX19weXhf dF80ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwotKyAgaW50IF9fcHl4 X3RfNTsKLSAgIGludCBfX3B5eF90XzY7Ci0tICBpbnQgX19weXhfdF83OwotLSAgY2hhciBjb25z dCAqX19weXhfdF84OwotLSAgUHlPYmplY3QgKigqX19weXhfdF85KShQeU9iamVjdCAqKTsKLS0g IGludCBfX3B5eF90XzEwOwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFy ICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18iLCAwKTsKLSsgIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJyZW5kZXIiLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5NjUKLS0gKiAgICAgICAgICAgICBtcHZfb3BlbmdsX2RybV9vc2Rfc2l6 ZSBfZHJtX29zZF9zaXplCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3 OQotKyAqICAgICAgICAgICAgIG1wdl9vcGVuZ2xfZmJvIGZibwotICAqIAotLSAqICAgICAgICAg c2VsZi5fbXB2ID0gbXB2ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAg IHBhcmFtcyA9IF9SZW5kZXJQYXJhbXMoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0g ICogCi0tICogICAgICAgICBtZW1zZXQoJmdsX3BhcmFtcywgMCwgc2l6ZW9mKGdsX3BhcmFtcykp Ci0rICogICAgICAgICBpZiBvcGVuZ2xfZmJvOgotICAqLwotLSAgaWYgKCEobGlrZWx5KCgoX19w eXhfdl9tcHYpID09IFB5X05vbmUpIHx8IGxpa2VseShfX1B5eF9UeXBlVGVzdChfX3B5eF92X21w diwgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpKSkpKSBfX1BZWF9F UlIoMCwgOTY1LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fcHl4X3RfMSA9IF9fcHl4X3ZfbXB2Owot LSAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7 Ci0tICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5fbXB2KTsKLS0gIF9fUHl4X0RFQ1JFRigo KFB5T2JqZWN0ICopX19weXhfdl9zZWxmLT5fbXB2KSk7Ci0tICBfX3B5eF92X3NlbGYtPl9tcHYg PSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5 eF90XzEpOwotKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmpl Y3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcykpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDc5LCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgX19weXhfdl9wYXJhbXMgPSAoKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5 eF90XzEpOwotICAgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5NjcKLS0gKiAgICAgICAgIHNlbGYuX21wdiA9IG1wdgotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODEKLSsgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5k ZXJQYXJhbXMoKQotICAqIAotLSAqICAgICAgICAgbWVtc2V0KCZnbF9wYXJhbXMsIDAsIHNpemVv ZihnbF9wYXJhbXMpKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBt ZW1zZXQoJmRybV9wYXJhbXMsIDAsIHNpemVvZihkcm1fcGFyYW1zKSkKLS0gKiAgICAgICAgIG1l bXNldCgmX2RybV9vc2Rfc2l6ZSwgMCwgc2l6ZW9mKF9kcm1fb3NkX3NpemUpKQotKyAqICAgICAg ICAgaWYgb3BlbmdsX2ZibzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAg ICAgICAgIG1lbXNldCgmZmJvLCAwLCBzaXplb2YoZmJvKSkKLSsgKiAgICAgICAgICAgICBmYm8u ZmJvID0gb3BlbmdsX2Ziby5nZXQoImZibyIsIDApIG9yIDAKLSAgKi8KLS0gICh2b2lkKShtZW1z ZXQoKCZfX3B5eF92X2dsX3BhcmFtcyksIDAsIChzaXplb2YoX19weXhfdl9nbF9wYXJhbXMpKSkp OwotKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zfb3BlbmdsX2Zi byk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDEwODEsIF9fcHl4 X0wxX2Vycm9yKQotKyAgaWYgKF9fcHl4X3RfMikgewotIAotLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjk2OAotLSAqIAotLSAqICAgICAgICAgbWVtc2V0KCZnbF9wYXJhbXMs IDAsIHNpemVvZihnbF9wYXJhbXMpKQotLSAqICAgICAgICAgbWVtc2V0KCZkcm1fcGFyYW1zLCAw LCBzaXplb2YoZHJtX3BhcmFtcykpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgIG1lbXNldCgmX2RybV9vc2Rfc2l6ZSwgMCwgc2l6ZW9mKF9kcm1fb3NkX3NpemUpKQot KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4MgotICAqIAotKyAqICAg ICAgICAgaWYgb3BlbmdsX2ZibzoKLSsgKiAgICAgICAgICAgICBtZW1zZXQoJmZibywgMCwgc2l6 ZW9mKGZibykpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBm Ym8uZmJvID0gb3BlbmdsX2Ziby5nZXQoImZibyIsIDApIG9yIDAKLSsgKiAgICAgICAgICAgICBm Ym8udyA9IG9wZW5nbF9mYm9bInciXQotICAqLwotLSAgKHZvaWQpKG1lbXNldCgoJl9fcHl4X3Zf ZHJtX3BhcmFtcyksIDAsIChzaXplb2YoX19weXhfdl9kcm1fcGFyYW1zKSkpKTsKLSsgICAgKHZv aWQpKG1lbXNldCgoJl9fcHl4X3ZfZmJvKSwgMCwgKHNpemVvZihfX3B5eF92X2ZibykpKSk7Ci0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTY5Ci0tICogICAgICAgICBt ZW1zZXQoJmdsX3BhcmFtcywgMCwgc2l6ZW9mKGdsX3BhcmFtcykpCi0tICogICAgICAgICBtZW1z ZXQoJmRybV9wYXJhbXMsIDAsIHNpemVvZihkcm1fcGFyYW1zKSkKLS0gKiAgICAgICAgIG1lbXNl dCgmX2RybV9vc2Rfc2l6ZSwgMCwgc2l6ZW9mKF9kcm1fb3NkX3NpemUpKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogCi0tICogICAgICAgICBwYXJhbXMgPSBfUmVuZGVyUGFyYW1z KCkKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODMKLSsgKiAgICAg ICAgIGlmIG9wZW5nbF9mYm86Ci0rICogICAgICAgICAgICAgbWVtc2V0KCZmYm8sIDAsIHNpemVv ZihmYm8pKQotKyAqICAgICAgICAgICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJvLmdldCgiZmJvIiwg MCkgb3IgMCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgZmJv LncgPSBvcGVuZ2xfZmJvWyJ3Il0KLSsgKiAgICAgICAgICAgICBmYm8uaCA9IG9wZW5nbF9mYm9b ImgiXQotICAqLwotLSAgKHZvaWQpKG1lbXNldCgoJl9fcHl4X3ZfX2RybV9vc2Rfc2l6ZSksIDAs IChzaXplb2YoX19weXhfdl9fZHJtX29zZF9zaXplKSkpKTsKLSsgICAgX19weXhfdF8xID0gX19Q eXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X29wZW5nbF9mYm8sIF9fcHl4X25fc19nZXQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9l cnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fcHl4X3RfNCA9IF9f UHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8xLCBfX3B5eF90dXBsZV9fMTIsIE5VTEwpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikK LSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1Ry dWUoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwg MTA4MywgX19weXhfTDFfZXJyb3IpCi0rICAgIGlmICghX19weXhfdF8yKSB7Ci0rICAgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICAgIH0gZWxzZSB7Ci0rICAg ICAgX19weXhfdF81ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfNCk7IGlmICh1bmxpa2Vs eSgoX19weXhfdF81ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIo MCwgMTA4MywgX19weXhfTDFfZXJyb3IpCi0rICAgICAgX19weXhfdF8zID0gX19weXhfdF81Owot KyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotKyAgICAgIGdv dG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOwotKyAgICB9Ci0rICAgIF9fcHl4X3RfMyA9IDA7 Ci0rICAgIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7Ci0rICAgIF9fcHl4X3ZfZmJvLmZibyA9 IF9fcHl4X3RfMzsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzEK LS0gKiAgICAgICAgIG1lbXNldCgmX2RybV9vc2Rfc2l6ZSwgMCwgc2l6ZW9mKF9kcm1fb3NkX3Np emUpKQotLSAqIAotLSAqICAgICAgICAgcGFyYW1zID0gX1JlbmRlclBhcmFtcygpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAKLS0gKiAgICAgICAgIGlmIGFwaV90eXBlID09IHNl bGYuQVBJX09QRU5HTDoKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEw ODQKLSsgKiAgICAgICAgICAgICBtZW1zZXQoJmZibywgMCwgc2l6ZW9mKGZibykpCi0rICogICAg ICAgICAgICAgZmJvLmZibyA9IG9wZW5nbF9mYm8uZ2V0KCJmYm8iLCAwKSBvciAwCi0rICogICAg ICAgICAgICAgZmJvLncgPSBvcGVuZ2xfZmJvWyJ3Il0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICAgICAgICAgIGZiby5oID0gb3BlbmdsX2Zib1siaCJdCi0rICogICAgICAg ICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8uZ2V0KCJpbnRlcm5hbF9mb3Jt YXQiLCAwKSBvciAwCi0gICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9B cmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk3MSwgX19w eXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fcHl4X3ZfcGFy YW1zID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zICopX19weXhfdF8xKTsKLS0gIF9fcHl4X3RfMSA9IDA7Ci0rICAgIF9fcHl4X3RfNCA9IF9f UHl4X1B5T2JqZWN0X0RpY3RfR2V0SXRlbShfX3B5eF92X29wZW5nbF9mYm8sIF9fcHl4X25fc193 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTA4NCwgX19weXhfTDFf ZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAgICBfX3B5eF90XzMgPSBf X1B5eF9QeUludF9Bc19pbnQoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0g KGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDg0LCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0r ICAgIF9fcHl4X3ZfZmJvLncgPSBfX3B5eF90XzM7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTczCi0tICogICAgICAgICBwYXJhbXMgPSBfUmVuZGVyUGFyYW1zKCkK LS0gKiAKLS0gKiAgICAgICAgIGlmIGFwaV90eXBlID09IHNlbGYuQVBJX09QRU5HTDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfc3RyaW5n KE1QVl9SRU5ERVJfUEFSQU1fQVBJX1RZUEUsIE1QVl9SRU5ERVJfQVBJX1RZUEVfT1BFTkdMKQot LSAqICAgICAgICAgZWxzZToKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwODUKLSsgKiAgICAgICAgICAgICBmYm8uZmJvID0gb3BlbmdsX2Ziby5nZXQoImZibyIsIDAp IG9yIDAKLSsgKiAgICAgICAgICAgICBmYm8udyA9IG9wZW5nbF9mYm9bInciXQotKyAqICAgICAg ICAgICAgIGZiby5oID0gb3BlbmdsX2Zib1siaCJdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiAgICAgICAgICAgICBmYm8uaW50ZXJuYWxfZm9ybWF0ID0gb3BlbmdsX2Ziby5nZXQo ImludGVybmFsX2Zvcm1hdCIsIDApIG9yIDAKLSsgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3Zv aWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZibykKLSAgKi8KLS0gIF9fcHl4X3Rf MSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiks IF9fcHl4X25fc19BUElfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgOTczLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot LSAgX19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9hcGlfdHlwZSwgX19w eXhfdF8xLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTczLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgX19weXhfdF8zID0gX19QeXhfUHlP YmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19Q WVhfRVJSKDAsIDk3MywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKLS0gIGlmIChsaWtlbHkoX19weXhfdF8zKSkgewotKyAgICBfX3B5 eF90XzQgPSBfX1B5eF9QeU9iamVjdF9EaWN0X0dldEl0ZW0oX19weXhfdl9vcGVuZ2xfZmJvLCBf X3B5eF9uX3NfaCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwODUs IF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSsgICAgX19w eXhfdF8zID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfNCk7IGlmICh1bmxpa2VseSgoX19w eXhfdF8zID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMTA4 NSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90 XzQgPSAwOwotKyAgICBfX3B5eF92X2Ziby5oID0gX19weXhfdF8zOwotIAotLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTc0Ci0tICogCi0tICogICAgICAgICBpZiBhcGlf dHlwZSA9PSBzZWxmLkFQSV9PUEVOR0w6Ci0tICogICAgICAgICAgICAgcGFyYW1zLmFkZF9zdHJp bmcoTVBWX1JFTkRFUl9QQVJBTV9BUElfVFlQRSwgTVBWX1JFTkRFUl9BUElfVFlQRV9PUEVOR0wp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGVsc2U6Ci0tICogICAg ICAgICAgICAgcmFpc2UgUHlNUFZFcnJvcigiVW5rbm93biBhcGlfdHlwZSAlciIgJSBhcGlfdHlw ZSkKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODYKLSsgKiAgICAg ICAgICAgICBmYm8udyA9IG9wZW5nbF9mYm9bInciXQotKyAqICAgICAgICAgICAgIGZiby5oID0g b3BlbmdsX2Zib1siaCJdCi0rICogICAgICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9w ZW5nbF9mYm8uZ2V0KCJpbnRlcm5hbF9mb3JtYXQiLCAwKSBvciAwICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJf UEFSQU1fT1BFTkdMX0ZCTywgJmZibykKLSsgKiAgICAgICAgIGlmIGZsaXBfeToKLSAgKi8KLS0g ICAgX19weXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3N0 cmluZyhfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9BUElfVFlQRSwgTVBWX1JFTkRF Ul9BUElfVFlQRV9PUEVOR0wpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigw LCA5NzQsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0g ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0rICAgIF9fcHl4X3Rf NCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF9u X3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19w eXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAgICBfX3B5eF90 XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfNCwgX19weXhfdHVwbGVfXzEzLCBOVUxM KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFf ZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICBfX1B5eF9ERUNSRUYo X19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhf RVJSKDAsIDEwODYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBpZiAoIV9fcHl4X3RfMikgewotKyAg ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgICB9IGVsc2Ug ewotKyAgICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzEpOyBpZiAo dW5saWtlbHkoKF9fcHl4X3RfNSA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19Q WVhfRVJSKDAsIDEwODYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fcHl4X3RfMyA9IF9fcHl4 X3RfNTsKLSsgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsg ICAgICBnb3RvIF9fcHl4X0w2X2Jvb2xfYmlub3BfZG9uZTsKLSsgICAgfQotKyAgICBfX3B5eF90 XzMgPSAwOwotKyAgICBfX3B5eF9MNl9ib29sX2Jpbm9wX2RvbmU6OwotKyAgICBfX3B5eF92X2Zi by5pbnRlcm5hbF9mb3JtYXQgPSBfX3B5eF90XzM7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5NzMKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwODcKLSsgKiAgICAgICAgICAgICBmYm8uaCA9IG9wZW5nbF9mYm9bImgiXQotKyAqICAg ICAgICAgICAgIGZiby5pbnRlcm5hbF9mb3JtYXQgPSBvcGVuZ2xfZmJvLmdldCgiaW50ZXJuYWxf Zm9ybWF0IiwgMCkgb3IgMAotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JF TkRFUl9QQVJBTV9PUEVOR0xfRkJPLCAmZmJvKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICBpZiBmbGlwX3k6Ci0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQo TVBWX1JFTkRFUl9QQVJBTV9GTElQX1ksIDEpCi0rICovCi0rICAgIF9fcHl4X3RfMSA9ICgoc3Ry dWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMg KilfX3B5eF92X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywg TVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfRkJPLCAoJl9fcHl4X3ZfZmJvKSwgTlVMTCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwODcsIF9fcHl4X0wxX2Vycm9yKQot KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7Ci0rCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDgxCi0gICogICAgICAgICBwYXJhbXMgPSBfUmVuZGVyUGFyYW1zKCkKLSAgKiAKLS0g KiAgICAgICAgIGlmIGFwaV90eXBlID09IHNlbGYuQVBJX09QRU5HTDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfc3RyaW5nKE1QVl9SRU5E RVJfUEFSQU1fQVBJX1RZUEUsIE1QVl9SRU5ERVJfQVBJX1RZUEVfT1BFTkdMKQotLSAqICAgICAg ICAgZWxzZToKLSsgKiAgICAgICAgIGlmIG9wZW5nbF9mYm86ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBtZW1zZXQoJmZibywgMCwgc2l6ZW9mKGZibykpCi0r ICogICAgICAgICAgICAgZmJvLmZibyA9IG9wZW5nbF9mYm8uZ2V0KCJmYm8iLCAwKSBvciAwCi0g ICovCi0tICAgIGdvdG8gX19weXhfTDM7Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTc2Ci0tICogICAgICAgICAgICAgcGFyYW1zLmFkZF9zdHJpbmcoTVBW X1JFTkRFUl9QQVJBTV9BUElfVFlQRSwgTVBWX1JFTkRFUl9BUElfVFlQRV9PUEVOR0wpCi0tICog ICAgICAgICBlbHNlOgotLSAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlVua25vd24g YXBpX3R5cGUgJXIiICUgYXBpX3R5cGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAKLS0gKiAgICAgICAgIGlmIG9wZW5nbF9pbml0X3BhcmFtcyBpcyBub3QgTm9uZToKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg4Ci0rICogICAgICAgICAgICAgZmJv LmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8uZ2V0KCJpbnRlcm5hbF9mb3JtYXQiLCAwKSBv ciAwCi0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09Q RU5HTF9GQk8sICZmYm8pCi0rICogICAgICAgICBpZiBmbGlwX3k6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BB UkFNX0ZMSVBfWSwgMSkKLSsgKiAgICAgICAgIGlmIGRlcHRoIGlzIG5vdCBOb25lOgotICAqLwot LSAgLyplbHNlKi8gewotLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwg X19weXhfbl9zX1B5TVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA5NzYsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3Rf SXNUcnVlKF9fcHl4X3ZfZmxpcF95KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZ WF9FUlIoMCwgMTA4OCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19weXhfdF8yKSB7Ci0rCi0r ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg5Ci0rICogICAgICAgICAg ICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCi0r ICogICAgICAgICBpZiBmbGlwX3k6Ci0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBW X1JFTkRFUl9QQVJBTV9GTElQX1ksIDEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgICAgIGlmIGRlcHRoIGlzIG5vdCBOb25lOgotKyAqICAgICAgICAgICAgIHBhcmFtcy5h ZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIGRlcHRoKQotKyAqLwotKyAgICBfX3B5eF90 XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVu ZGVyUGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4X3Zf cGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDEwODksIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKLS0gICAgX19weXhfdF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0U2Fm ZShfX3B5eF9rcF9zX1Vua25vd25fYXBpX3R5cGVfciwgX19weXhfdl9hcGlfdHlwZSk7IGlmICh1 bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDk3NiwgX19weXhfTDFfZXJyb3IpCi0t ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAgICBfX3B5eF90XzUgPSBOVUxMOwotLSAg ICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9f cHl4X3RfMSkpKSB7Ci0tICAgICAgX19weXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhf dF8xKTsKLS0gICAgICBpZiAobGlrZWx5KF9fcHl4X3RfNSkpIHsKLS0gICAgICAgIFB5T2JqZWN0 KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzEpOwotLSAgICAgICAg X19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24p OwotLSAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzEsIGZ1bmN0aW9uKTsKLS0gICAg ICB9Ci0tICAgIH0KLS0gICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVj dF9DYWxsMkFyZ3MoX19weXhfdF8xLCBfX3B5eF90XzUsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9i amVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMSwgX19weXhfdF80KTsKLS0gICAgX19QeXhfWERFQ1JF RihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKLS0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgOTc2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7 Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgICBfX1B5 eF9SYWlzZShfX3B5eF90XzIsIDAsIDAsIDApOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKLS0gICAgX19QWVhfRVJSKDAsIDk3NiwgX19weXhfTDFfZXJyb3Ip Ci0rCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg4Ci0rICogICAg ICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8uZ2V0KCJpbnRlcm5hbF9m b3JtYXQiLCAwKSBvciAwCi0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVO REVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCi0rICogICAgICAgICBpZiBmbGlwX3k6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChN UFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKLSsgKiAgICAgICAgIGlmIGRlcHRoIGlzIG5vdCBO b25lOgotKyAqLwotICAgfQotLSAgX19weXhfTDM6OwotIAotLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjk3OAotLSAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlVu a25vd24gYXBpX3R5cGUgJXIiICUgYXBpX3R5cGUpCi0tICogCi0tICogICAgICAgICBpZiBvcGVu Z2xfaW5pdF9wYXJhbXMgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgICAgICAgICBzZWxmLl9nZXRfcHJvY19hZGRyZXNzID0gb3BlbmdsX2luaXRfcGFy YW1zWyJnZXRfcHJvY19hZGRyZXNzIl0KLS0gKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3By b2NfYWRkcmVzcyA9ICZfY19nZXRwcm9jYWRkcmVzcwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwOTAKLSsgKiAgICAgICAgIGlmIGZsaXBfeToKLSsgKiAgICAgICAgICAg ICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKLSsgKiAgICAgICAg IGlmIGRlcHRoIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9ERVBUSCwgZGVwdGgp Ci0rICogICAgICAgICBpZiBub3QgYmxvY2tfZm9yX3RhcmdldF90aW1lOgotICAqLwotLSAgX19w eXhfdF8zID0gKF9fcHl4X3Zfb3BlbmdsX2luaXRfcGFyYW1zICE9IFB5X05vbmUpOwotLSAgX19w eXhfdF82ID0gKF9fcHl4X3RfMyAhPSAwKTsKLSsgIF9fcHl4X3RfMiA9IChfX3B5eF92X2RlcHRo ICE9IFB5X05vbmUpOwotKyAgX19weXhfdF82ID0gKF9fcHl4X3RfMiAhPSAwKTsKLSAgIGlmIChf X3B5eF90XzYpIHsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3 OQotLSAqIAotLSAqICAgICAgICAgaWYgb3BlbmdsX2luaXRfcGFyYW1zIGlzIG5vdCBOb25lOgot LSAqICAgICAgICAgICAgIHNlbGYuX2dldF9wcm9jX2FkZHJlc3MgPSBvcGVuZ2xfaW5pdF9wYXJh bXNbImdldF9wcm9jX2FkZHJlc3MiXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3MgPSAmX2NfZ2V0cHJvY2FkZHJl c3MKLS0gKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzc19jdHggPSA8dm9p ZCAqPnNlbGYuX2dldF9wcm9jX2FkZHJlc3MKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwOTEKLSsgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVS X1BBUkFNX0ZMSVBfWSwgMSkKLSsgKiAgICAgICAgIGlmIGRlcHRoIGlzIG5vdCBOb25lOgotKyAq ICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIGRlcHRo KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBpZiBub3QgYmxvY2tf Zm9yX3RhcmdldF90aW1lOgotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5E RVJfUEFSQU1fQkxPQ0tfRk9SX1RBUkdFVF9USU1FLCAwKQotICAqLwotLSAgICBfX3B5eF90XzIg PSBfX1B5eF9QeU9iamVjdF9EaWN0X0dldEl0ZW0oX19weXhfdl9vcGVuZ2xfaW5pdF9wYXJhbXMs IF9fcHl4X25fc19nZXRfcHJvY19hZGRyZXNzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgOTc5LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMik7Ci0tICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8yKTsKLS0gICAgX19QeXhfR09UUkVG KF9fcHl4X3Zfc2VsZi0+X2dldF9wcm9jX2FkZHJlc3MpOwotLSAgICBfX1B5eF9ERUNSRUYoX19w eXhfdl9zZWxmLT5fZ2V0X3Byb2NfYWRkcmVzcyk7Ci0tICAgIF9fcHl4X3Zfc2VsZi0+X2dldF9w cm9jX2FkZHJlc3MgPSBfX3B5eF90XzI7Ci0tICAgIF9fcHl4X3RfMiA9IDA7Ci0rICAgIF9fcHl4 X3RfMyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF92X2RlcHRoKTsgaWYgKHVubGlrZWx5KChf X3B5eF90XzMgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAx MDkxLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRh YnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFy YW1zLT5fX3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJB TV9ERVBUSCwgX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgMTA5MSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot KyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAKLS0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4MAotLSAqICAgICAgICAgaWYgb3Blbmds X2luaXRfcGFyYW1zIGlzIG5vdCBOb25lOgotLSAqICAgICAgICAgICAgIHNlbGYuX2dldF9wcm9j X2FkZHJlc3MgPSBvcGVuZ2xfaW5pdF9wYXJhbXNbImdldF9wcm9jX2FkZHJlc3MiXQotLSAqICAg ICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzID0gJl9jX2dldHByb2NhZGRyZXNz ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBnbF9wYXJhbXMu Z2V0X3Byb2NfYWRkcmVzc19jdHggPSA8dm9pZCAqPnNlbGYuX2dldF9wcm9jX2FkZHJlc3MKLS0g KiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0lO SVRfUEFSQU1TLCAmZ2xfcGFyYW1zKQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTA5MAotKyAqICAgICAgICAgaWYgZmxpcF95OgotKyAqICAgICAgICAgICAgIHBhcmFt cy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fRkxJUF9ZLCAxKQotKyAqICAgICAgICAgaWYgZGVw dGggaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAg ICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0RFUFRILCBkZXB0aCkKLSsgKiAg ICAgICAgIGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0X3RpbWU6Ci0gICovCi0tICAgIF9fcHl4X3Zf Z2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3MgPSAoJl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2X19jX2dldHByb2NhZGRyZXNzKTsKLSsgIH0KLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjk4MQotLSAqICAgICAgICAgICAgIHNlbGYuX2dldF9wcm9jX2FkZHJl c3MgPSBvcGVuZ2xfaW5pdF9wYXJhbXNbImdldF9wcm9jX2FkZHJlc3MiXQotLSAqICAgICAgICAg ICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzID0gJl9jX2dldHByb2NhZGRyZXNzCi0tICog ICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3NfY3R4ID0gPHZvaWQgKj5zZWxm Ll9nZXRfcHJvY19hZGRyZXNzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAg ICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0lOSVRfUEFS QU1TLCAmZ2xfcGFyYW1zKQotLSAqICAgICAgICAgaWYgYWR2YW5jZWRfY29udHJvbDoKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkyCi0rICogICAgICAgICBpZiBkZXB0 aCBpcyBub3QgTm9uZToKLSsgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVS X1BBUkFNX0RFUFRILCBkZXB0aCkKLSsgKiAgICAgICAgIGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0 X3RpbWU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBwYXJh bXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0JMT0NLX0ZPUl9UQVJHRVRfVElNRSwgMCkKLSsg KiAgICAgICAgIGlmIHNraXBfcmVuZGVyaW5nOgotICAqLwotLSAgICBfX3B5eF92X2dsX3BhcmFt cy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9ICgodm9pZCAqKV9fcHl4X3Zfc2VsZi0+X2dldF9wcm9j X2FkZHJlc3MpOwotKyAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zf YmxvY2tfZm9yX3RhcmdldF90aW1lKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZ WF9FUlIoMCwgMTA5MiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSAoKCFfX3B5eF90 XzYpICE9IDApOwotKyAgaWYgKF9fcHl4X3RfMikgewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTgyCi0tICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9j X2FkZHJlc3MgPSAmX2NfZ2V0cHJvY2FkZHJlc3MKLS0gKiAgICAgICAgICAgICBnbF9wYXJhbXMu Z2V0X3Byb2NfYWRkcmVzc19jdHggPSA8dm9pZCAqPnNlbGYuX2dldF9wcm9jX2FkZHJlc3MKLS0g KiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0lO SVRfUEFSQU1TLCAmZ2xfcGFyYW1zKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9sOgotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf aW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkKLSsgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTMKLSsgKiAgICAgICAgICAgICBwYXJhbXMuYWRk X2ludChNUFZfUkVOREVSX1BBUkFNX0RFUFRILCBkZXB0aCkKLSsgKiAgICAgICAgIGlmIG5vdCBi bG9ja19mb3JfdGFyZ2V0X3RpbWU6Ci0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBW X1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGlmIHNraXBfcmVuZGVyaW5nOgotKyAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fU0tJUF9SRU5ERVJJTkcsIDEpCi0g ICovCi0tICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19weXhfdnRhYikt PmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9Q QVJBTVMsICgmX19weXhfdl9nbF9wYXJhbXMpLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgOTgyLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OwotKyAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5h ZGRfaW50KF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0JMT0NLX0ZPUl9UQVJHRVRf VElNRSwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwOTMsIF9f cHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5NzgKLS0gKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9y KCJVbmtub3duIGFwaV90eXBlICVyIiAlIGFwaV90eXBlKQotLSAqIAotLSAqICAgICAgICAgaWYg b3BlbmdsX2luaXRfcGFyYW1zIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgICAgICAgICAgc2VsZi5fZ2V0X3Byb2NfYWRkcmVzcyA9IG9wZW5nbF9pbml0 X3BhcmFtc1siZ2V0X3Byb2NfYWRkcmVzcyJdCi0tICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdl dF9wcm9jX2FkZHJlc3MgPSAmX2NfZ2V0cHJvY2FkZHJlc3MKLSsgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwOTIKLSsgKiAgICAgICAgIGlmIGRlcHRoIGlzIG5vdCBOb25l OgotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQVEgs IGRlcHRoKQotKyAqICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90YXJnZXRfdGltZTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1Q Vl9SRU5ERVJfUEFSQU1fQkxPQ0tfRk9SX1RBUkdFVF9USU1FLCAwKQotKyAqICAgICAgICAgaWYg c2tpcF9yZW5kZXJpbmc6Ci0gICovCi0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTgzCi0tICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJl c3NfY3R4ID0gPHZvaWQgKj5zZWxmLl9nZXRfcHJvY19hZGRyZXNzCi0tICogICAgICAgICAgICAg cGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9JTklUX1BBUkFNUywgJmds X3BhcmFtcykKLS0gKiAgICAgICAgIGlmIGFkdmFuY2VkX2NvbnRyb2w6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVS X1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpCi0tICogICAgICAgICBpZiB4MTFfZGlzcGxheToK LSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDk0Ci0rICogICAgICAgICBp ZiBub3QgYmxvY2tfZm9yX3RhcmdldF90aW1lOgotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf aW50KE1QVl9SRU5ERVJfUEFSQU1fQkxPQ0tfRk9SX1RBUkdFVF9USU1FLCAwKQotKyAqICAgICAg ICAgaWYgc2tpcF9yZW5kZXJpbmc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX1NLSVBfUkVOREVSSU5H LCAxKQotKyAqIAotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9f cHl4X3ZfYWR2YW5jZWRfY29udHJvbCk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19Q WVhfRVJSKDAsIDk4MywgX19weXhfTDFfZXJyb3IpCi0tICBpZiAoX19weXhfdF82KSB7Ci0rICBf X3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9za2lwX3JlbmRlcmluZyk7 IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDEwOTQsIF9fcHl4X0wx X2Vycm9yKQotKyAgaWYgKF9fcHl4X3RfMikgewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTg0Ci0tICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZf UkVOREVSX1BBUkFNX09QRU5HTF9JTklUX1BBUkFNUywgJmdsX3BhcmFtcykKLS0gKiAgICAgICAg IGlmIGFkdmFuY2VkX2NvbnRyb2w6Ci0tICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBW X1JFTkRFUl9QQVJBTV9BRFZBTkNFRF9DT05UUk9MLCAxKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogICAgICAgICBpZiB4MTFfZGlzcGxheToKLS0gKiAgICAgICAgICAgICBzZWxm Ll94MTFfZGlzcGxheSA9IHgxMV9kaXNwbGF5Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDk1Ci0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRF Ul9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCi0rICogICAgICAgICBpZiBza2lwX3Jl bmRlcmluZzoKLSsgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFN X1NLSVBfUkVOREVSSU5HLCAxKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogCi0r ICogICAgICAgICB3aXRoIG5vZ2lsOgotICAqLwotLSAgICBfX3B5eF90XzIgPSAoKHN0cnVjdCBf X3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19w eXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVO REVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCA5ODQsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0r ICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGli c18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF9p bnQoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1fU0tJUF9SRU5ERVJJTkcsIDEpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDk1LCBfX3B5eF9MMV9lcnJv cikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTgzCi0tICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3Nf Y3R4ID0gPHZvaWQgKj5zZWxmLl9nZXRfcHJvY19hZGRyZXNzCi0tICogICAgICAgICAgICAgcGFy YW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9JTklUX1BBUkFNUywgJmdsX3Bh cmFtcykKLS0gKiAgICAgICAgIGlmIGFkdmFuY2VkX2NvbnRyb2w6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BB UkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpCi0tICogICAgICAgICBpZiB4MTFfZGlzcGxheToKLSsg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTQKLSsgKiAgICAgICAgIGlm IG5vdCBibG9ja19mb3JfdGFyZ2V0X3RpbWU6Ci0rICogICAgICAgICAgICAgcGFyYW1zLmFkZF9p bnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCi0rICogICAgICAg ICBpZiBza2lwX3JlbmRlcmluZzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fU0tJUF9SRU5ERVJJTkcs IDEpCi0rICogCi0gICovCi0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTg1Ci0tICogICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9sOgotLSAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkK LS0gKiAgICAgICAgIGlmIHgxMV9kaXNwbGF5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgICAgICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheQotLSAqICAg ICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwg Z2V0X3BvaW50ZXIoIkRpc3BsYXkiLCB4MTFfZGlzcGxheSkpCi0rICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA5NwotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1Q Vl9SRU5ERVJfUEFSQU1fU0tJUF9SRU5ERVJJTkcsIDEpCi0rICogCi0rICogICAgICAgICB3aXRo IG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgcmV0 ID0gbXB2X3JlbmRlcl9jb250ZXh0X3JlbmRlcihzZWxmLl9jdHgsIHBhcmFtcy5wYXJhbXMpCi0r ICogICAgICAgICByZXR1cm4gcmV0Ci0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVj dF9Jc1RydWUoX19weXhfdl94MTFfZGlzcGxheSk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAw KSkgX19QWVhfRVJSKDAsIDk4NSwgX19weXhfTDFfZXJyb3IpCi0tICBpZiAoX19weXhfdF82KSB7 Ci0rICB7Ci0rICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0rICAgICAgUHlUaHJlYWRTdGF0ZSAq X3NhdmU7Ci0rICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0rICAgICAgX19QeXhfRmFzdEdJTF9S ZW1lbWJlcigpOwotKyAgICAgICNlbmRpZgotKyAgICAgIC8qdHJ5OiovIHsKLSAKLS0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4NgotLSAqICAgICAgICAgICAgIHBhcmFt cy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkKLS0gKiAgICAg ICAgIGlmIHgxMV9kaXNwbGF5OgotLSAqICAgICAgICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0g eDExX2Rpc3BsYXkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAg IHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwgZ2V0X3BvaW50 ZXIoIkRpc3BsYXkiLCB4MTFfZGlzcGxheSkpCi0tICogICAgICAgICBpZiB3bF9kaXNwbGF5Ogot KyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTgKLSsgKiAKLSsg KiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9j b250ZXh0X3JlbmRlcihzZWxmLl9jdHgsIHBhcmFtcy5wYXJhbXMpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHJldHVybiByZXQKLSsgKiAKLSAgKi8KLS0gICAgX19Q eXhfSU5DUkVGKF9fcHl4X3ZfeDExX2Rpc3BsYXkpOwotLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4 X3ZfeDExX2Rpc3BsYXkpOwotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5feDExX2Rp c3BsYXkpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5feDExX2Rpc3BsYXkpOwot LSAgICBfX3B5eF92X3NlbGYtPl94MTFfZGlzcGxheSA9IF9fcHl4X3ZfeDExX2Rpc3BsYXk7Ci0r ICAgICAgICBfX3B5eF92X3JldCA9IG1wdl9yZW5kZXJfY29udGV4dF9yZW5kZXIoX19weXhfdl9z ZWxmLT5fY3R4LCBfX3B5eF92X3BhcmFtcy0+cGFyYW1zKTsKLSsgICAgICB9Ci0gCi0tICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODcKLS0gKiAgICAgICAgIGlmIHgxMV9k aXNwbGF5OgotLSAqICAgICAgICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkK LS0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJ U1BMQVksIGdldF9wb2ludGVyKCJEaXNwbGF5IiwgeDExX2Rpc3BsYXkpKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBpZiB3bF9kaXNwbGF5OgotLSAqICAgICAgICAg ICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNwbGF5Ci0rICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwOTcKLSsgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChN UFZfUkVOREVSX1BBUkFNX1NLSVBfUkVOREVSSU5HLCAxKQotKyAqIAotKyAqICAgICAgICAgd2l0 aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIHJl dCA9IG1wdl9yZW5kZXJfY29udGV4dF9yZW5kZXIoc2VsZi5fY3R4LCBwYXJhbXMucGFyYW1zKQot KyAqICAgICAgICAgcmV0dXJuIHJldAotICAqLwotLSAgICBfX3B5eF90XzIgPSAoKHN0cnVjdCBf X3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19w eXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9wYXJhbXMsIE1QVl9S RU5ERVJfUEFSQU1fWDExX0RJU1BMQVksIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X2dl dF9wb2ludGVyKCgoY2hhciBjb25zdCAqKSJEaXNwbGF5IiksIF9fcHl4X3ZfeDExX2Rpc3BsYXkp LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTg3LCBfX3B5 eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgICAgIC8qZmluYWxseToqLyB7Ci0r ICAgICAgICAvKm5vcm1hbCBleGl0OiovewotKyAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQK LSsgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKLSsgICAgICAgICAgUHlfQkxPQ0tf VEhSRUFEUwotKyAgICAgICAgICAjZW5kaWYKLSsgICAgICAgICAgZ290byBfX3B5eF9MMTQ7Ci0r ICAgICAgICB9Ci0rICAgICAgICBfX3B5eF9MMTQ6OwotKyAgICAgIH0KLSsgIH0KLSAKLS0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4NQotLSAqICAgICAgICAgaWYgYWR2 YW5jZWRfY29udHJvbDoKLS0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVS X1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpCi0tICogICAgICAgICBpZiB4MTFfZGlzcGxheTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIHNlbGYuX3gxMV9k aXNwbGF5ID0geDExX2Rpc3BsYXkKLS0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1Q Vl9SRU5ERVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2ludGVyKCJEaXNwbGF5IiwgeDExX2Rp c3BsYXkpKQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTkKLSsgKiAg ICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250 ZXh0X3JlbmRlcihzZWxmLl9jdHgsIHBhcmFtcy5wYXJhbXMpCi0rICogICAgICAgICByZXR1cm4g cmV0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAKLSsgKiAgICAgZGVmIHJlcG9y dF9zd2FwKHNlbGYpOgotICAqLwotLSAgfQotKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLSsg IF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfcmV0KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA5OSwgX19weXhfTDFfZXJyb3IpCi0rICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF90XzE7Ci0rICBfX3B5 eF90XzEgPSAwOwotKyAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5ODgKLS0gKiAgICAgICAgICAgICBzZWxmLl94MTFfZGlzcGxheSA9IHgx MV9kaXNwbGF5Ci0tICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BB UkFNX1gxMV9ESVNQTEFZLCBnZXRfcG9pbnRlcigiRGlzcGxheSIsIHgxMV9kaXNwbGF5KSkKLS0g KiAgICAgICAgIGlmIHdsX2Rpc3BsYXk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgICAgICBzZWxmLl93bF9kaXNwbGF5ID0gd2xfZGlzcGxheQotLSAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9XTF9ESVNQTEFZLCBnZXRfcG9p bnRlcigid2xfZGlzcGxheSIsIHdsX2Rpc3BsYXkpKQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwNjkKLSsgKiAKLSsgKiAgICAgQF9lcnJvcnMKLSsgKiAgICAgZGVmIHJl bmRlcihzZWxmLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAg ICAgb3BlbmdsX2Zibz1Ob25lLAotKyAqICAgICAgICAgICAgICAgIGZsaXBfeT1GYWxzZSwKLSAg Ki8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X3dsX2Rpc3Bs YXkpOyBpZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlYX0VSUigwLCA5ODgsIF9fcHl4 X0wxX2Vycm9yKQotLSAgaWYgKF9fcHl4X3RfNikgewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTg5Ci0tICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChN UFZfUkVOREVSX1BBUkFNX1gxMV9ESVNQTEFZLCBnZXRfcG9pbnRlcigiRGlzcGxheSIsIHgxMV9k aXNwbGF5KSkKLS0gKiAgICAgICAgIGlmIHdsX2Rpc3BsYXk6Ci0tICogICAgICAgICAgICAgc2Vs Zi5fd2xfZGlzcGxheSA9IHdsX2Rpc3BsYXkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9XTF9ESVNQ TEFZLCBnZXRfcG9pbnRlcigid2xfZGlzcGxheSIsIHdsX2Rpc3BsYXkpKQotLSAqICAgICAgICAg aWYgZHJtX2Rpc3BsYXk6Ci0tICovCi0tICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3dsX2Rpc3Bs YXkpOwotLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfd2xfZGlzcGxheSk7Ci0tICAgIF9fUHl4 X0dPVFJFRihfX3B5eF92X3NlbGYtPl93bF9kaXNwbGF5KTsKLS0gICAgX19QeXhfREVDUkVGKF9f cHl4X3Zfc2VsZi0+X3dsX2Rpc3BsYXkpOwotLSAgICBfX3B5eF92X3NlbGYtPl93bF9kaXNwbGF5 ID0gX19weXhfdl93bF9kaXNwbGF5OwotKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0rICBf X3B5eF9MMV9lcnJvcjo7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNCk7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJz Lm1wdi5SZW5kZXJDb250ZXh0LnJlbmRlciIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOwotKyAgX19weXhfciA9IE5VTEw7Ci0rICBfX3B5eF9MMDo7Ci0rICBf X1B5eF9YREVDUkVGKChQeU9iamVjdCAqKV9fcHl4X3ZfcGFyYW1zKTsKLSsgIF9fUHl4X1hHSVZF UkVGKF9fcHl4X3IpOwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1 cm4gX19weXhfcjsKLSt9Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5OTAKLS0gKiAgICAgICAgIGlmIHdsX2Rpc3BsYXk6Ci0tICogICAgICAgICAgICAgc2VsZi5f d2xfZGlzcGxheSA9IHdsX2Rpc3BsYXkKLS0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRw KE1QVl9SRU5ERVJfUEFSQU1fV0xfRElTUExBWSwgZ2V0X3BvaW50ZXIoIndsX2Rpc3BsYXkiLCB3 bF9kaXNwbGF5KSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgaWYg ZHJtX2Rpc3BsYXk6Ci0tICogICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5 LmdldCgiZmQiLCAtMSkKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwMQot KyAqICAgICAgICAgcmV0dXJuIHJldAotKyAqIAotKyAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2Vs Zik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHdpdGggbm9naWw6 Ci0rICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3JlcG9ydF9zd2FwKHNlbGYuX2N0 eCkKLSAgKi8KLS0gICAgX19weXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92 dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BM QVksIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X2dldF9wb2ludGVyKCgoY2hhciBjb25z dCAqKSJ3bF9kaXNwbGF5IiksIF9fcHl4X3Zfd2xfZGlzcGxheSksIE5VTEwpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTAsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9f cHl4X3RfMiA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 ODgKLS0gKiAgICAgICAgICAgICBzZWxmLl94MTFfZGlzcGxheSA9IHgxMV9kaXNwbGF5Ci0tICog ICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1gxMV9ESVNQTEFZ LCBnZXRfcG9pbnRlcigiRGlzcGxheSIsIHgxMV9kaXNwbGF5KSkKLS0gKiAgICAgICAgIGlmIHds X2Rpc3BsYXk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBz ZWxmLl93bF9kaXNwbGF5ID0gd2xfZGlzcGxheQotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf dm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9XTF9ESVNQTEFZLCBnZXRfcG9pbnRlcigid2xfZGlzcGxh eSIsIHdsX2Rpc3BsYXkpKQotLSAqLwotLSAgfQotKy8qIFB5dGhvbiB3cmFwcGVyICovCi0rc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250 ZXh0XzE1cmVwb3J0X3N3YXAoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQ eU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE1cmVwb3J0X3N3YXAoUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7Ci0rICBQ eU9iamVjdCAqX19weXhfciA9IDA7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJlcG9ydF9zd2FwICh3cmFwcGVyKSIsIDApOwot KyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfMTRyZXBvcnRfc3dhcCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5OTEKLS0gKiAgICAgICAgICAgICBzZWxmLl93bF9kaXNwbGF5ID0g d2xfZGlzcGxheQotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9Q QVJBTV9XTF9ESVNQTEFZLCBnZXRfcG9pbnRlcigid2xfZGlzcGxheSIsIHdsX2Rpc3BsYXkpKQot LSAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIsIC0x KQotLSAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5LmdldCgi Y3J0Y19pZCIsIC0xKQotLSAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVl KF9fcHl4X3ZfZHJtX2Rpc3BsYXkpOyBpZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlY X0VSUigwLCA5OTEsIF9fcHl4X0wxX2Vycm9yKQotLSAgaWYgKF9fcHl4X3RfNikgewotKyAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCi0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsK LSsgIHJldHVybiBfX3B5eF9yOwotK30KLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjk5MgotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRF Ul9QQVJBTV9XTF9ESVNQTEFZLCBnZXRfcG9pbnRlcigid2xfZGlzcGxheSIsIHdsX2Rpc3BsYXkp KQotLSAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6Ci0tICogICAgICAgICAgICAgZHJtX3BhcmFt cy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5Lmdl dCgiY3J0Y19pZCIsIC0xKQotLSAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lk ID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkKLS0gKi8KLS0gICAgX19weXhf dF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2RybV9kaXNwbGF5LCBfX3B5 eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTkyLCBf X3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fcHl4 X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90dXBsZV9fMTAsIE5V TEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5OTIsIF9fcHl4X0wx X2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5SW50 X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoaW50KS0xKSAm JiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDk5MiwgX19weXhfTDFfZXJyb3IpCi0t ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgICBfX3B5eF92 X2RybV9wYXJhbXMuZmQgPSBfX3B5eF90Xzc7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE0cmVwb3J0X3N3YXAoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9z ZWxmKSB7Ci0rICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0rICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJlcG9ydF9zd2FwIiwg MCk7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTMKLS0gKiAg ICAgICAgIGlmIGRybV9kaXNwbGF5OgotLSAqICAgICAgICAgICAgIGRybV9wYXJhbXMuZmQgPSBk cm1fZGlzcGxheS5nZXQoImZkIiwgLTEpCi0tICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jcnRj X2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNvbm5lY3Rvcl9pZCA9IGRybV9k aXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpCi0tICogICAgICAgICAgICAgYXJwID0gZHJt X2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVxdWVzdF9wdHIiLCBOb25lKQotKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMDIKLSsgKiAKLSsgKiAgICAgZGVmIHJlcG9ydF9zd2Fw KHNlbGYpOgotKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9yZXBvcnRfc3dhcChzZWxm Ll9jdHgpCi0rICogCi0gICovCi0tICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0 dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5MywgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxs KF9fcHl4X3RfMSwgX19weXhfdHVwbGVfXzExLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgOTkzLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OwotLSAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdF8yKTsgaWYgKHVu bGlrZWx5KChfX3B5eF90XzcgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlY X0VSUigwLCA5OTMsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKLS0gICAgX19weXhfdl9kcm1fcGFyYW1zLmNydGNfaWQgPSBfX3B5 eF90Xzc7Ci0rICB7Ci0rICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0rICAgICAgUHlUaHJlYWRT dGF0ZSAqX3NhdmU7Ci0rICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0rICAgICAgX19QeXhfRmFz dEdJTF9SZW1lbWJlcigpOwotKyAgICAgICNlbmRpZgotKyAgICAgIC8qdHJ5OiovIHsKLSAKLS0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5NAotLSAqICAgICAgICAgICAg IGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpCi0tICogICAgICAgICAg ICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpCi0t ICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQo ImNvbm5lY3Rvcl9pZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAg ICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVxdWVzdF9wdHIiLCBOb25l KQotLSAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKLSsgICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTAzCi0rICogICAgIGRlZiByZXBvcnRfc3dhcChz ZWxmKToKLSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgbXB2X3JlbmRl cl9jb250ZXh0X3JlcG9ydF9zd2FwKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqIAotKyAqICAgICBkZWYgZnJlZShzZWxmKToKLSAgKi8KLS0gICAgX19weXhfdF8y ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2RybV9kaXNwbGF5LCBfX3B5eF9u X3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTk0LCBfX3B5 eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fcHl4X3Rf MSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90dXBsZV9fMTIsIE5VTEwp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5OTQsIF9fcHl4X0wxX2Vy cm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5SW50X0Fz X2ludChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoaW50KS0xKSAmJiBQ eUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDk5NCwgX19weXhfTDFfZXJyb3IpCi0tICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgICBfX3B5eF92X2Ry bV9wYXJhbXMuY29ubmVjdG9yX2lkID0gX19weXhfdF83OwotKyAgICAgICAgbXB2X3JlbmRlcl9j b250ZXh0X3JlcG9ydF9zd2FwKF9fcHl4X3Zfc2VsZi0+X2N0eCk7Ci0rICAgICAgfQotIAotLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk1Ci0tICogICAgICAgICAgICAg ZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpCi0tICog ICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNv bm5lY3Rvcl9pZCIsIC0xKQotLSAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgi YXRvbWljX3JlcXVlc3RfcHRyIiwgTm9uZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKLS0gKiAgICAgICAgICAgICAgICAg ZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0 X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQotKyAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTAyCi0rICogCi0rICogICAgIGRlZiByZXBvcnRfc3dhcChz ZWxmKToKLSsgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfcmVwb3J0X3N3YXAoc2VsZi5f Y3R4KQotKyAqIAotICAqLwotLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRy U3RyKF9fcHl4X3ZfZHJtX2Rpc3BsYXksIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5OTUsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbChf X3B5eF90XzEsIF9fcHl4X3R1cGxlX18xMywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDk5NSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK LS0gICAgX19weXhfdl9hcnAgPSBfX3B5eF90XzI7Ci0tICAgIF9fcHl4X3RfMiA9IDA7Ci0rICAg ICAgLypmaW5hbGx5OiovIHsKLSsgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97Ci0rICAgICAgICAg ICNpZmRlZiBXSVRIX1RIUkVBRAotKyAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOwot KyAgICAgICAgICBQeV9CTE9DS19USFJFQURTCi0rICAgICAgICAgICNlbmRpZgotKyAgICAgICAg ICBnb3RvIF9fcHl4X0w1OwotKyAgICAgICAgfQotKyAgICAgICAgX19weXhfTDU6OwotKyAgICAg IH0KLSsgIH0KLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5Ngot LSAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0 KCJjb25uZWN0b3JfaWQiLCAtMSkKLS0gKiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5n ZXQoImF0b21pY19yZXF1ZXN0X3B0ciIsIE5vbmUpCi0tICogICAgICAgICAgICAgaWYgYXJwIGlz IG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAg ICAgIGRybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gPF9kcm1Nb2RlQXRvbWljUmVxICoq PmdldF9wb2ludGVyKGFycCwgImRybU1vZGVBdG9taWNSZXEqIikKLS0gKiAgICAgICAgICAgICBk cm1fcGFyYW1zLnJlbmRlcl9mZCA9IGRybV9kaXNwbGF5LmdldCgicmVuZGVyX2ZkIiwgLTEpCi0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwMQotKyAqICAgICAgICAgcmV0 dXJuIHJldAotKyAqIAotKyAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAg ICAgbXB2X3JlbmRlcl9jb250ZXh0X3JlcG9ydF9zd2FwKHNlbGYuX2N0eCkKLSAgKi8KLS0gICAg X19weXhfdF82ID0gKF9fcHl4X3ZfYXJwICE9IFB5X05vbmUpOwotLSAgICBfX3B5eF90XzMgPSAo X19weXhfdF82ICE9IDApOwotLSAgICBpZiAoX19weXhfdF8zKSB7Ci0gCi0tICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5NwotLSAqICAgICAgICAgICAgIGFycCA9IGRy bV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVlc3RfcHRyIiwgTm9uZSkKLS0gKiAgICAgICAgICAg ICBpZiBhcnAgaXMgbm90IE5vbmU6Ci0tICogICAgICAgICAgICAgICAgIGRybV9wYXJhbXMuYXRv bWljX3JlcXVlc3RfcHRyID0gPF9kcm1Nb2RlQXRvbWljUmVxICoqPmdldF9wb2ludGVyKGFycCwg ImRybU1vZGVBdG9taWNSZXEqIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJf ZmQiLCAtMSkKLS0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFS QU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1zKQotLSAqLwotLSAgICAgIF9fcHl4X3RfOCA9IF9f UHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfYXJwKTsgaWYgKHVubGlrZWx5KCghX19weXhf dF84KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDk5NywgX19weXhfTDFfZXJy b3IpCi0tICAgICAgX19weXhfdl9kcm1fcGFyYW1zLmF0b21pY19yZXF1ZXN0X3B0ciA9ICgoc3Ry dWN0IF9kcm1Nb2RlQXRvbWljUmVxICoqKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X2dl dF9wb2ludGVyKF9fcHl4X3RfOCwgX19weXhfa3Bfc19kcm1Nb2RlQXRvbWljUmVxKSk7Ci0rICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNS RUYoUHlfTm9uZSk7Ci0rICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLSsgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIF9fcHl4X3I7Ci0rfQotIAotLSAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTYKLS0gKiAgICAgICAgICAgICBkcm1f cGFyYW1zLmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEp Ci0tICogICAgICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVxdWVzdF9w dHIiLCBOb25lKQotLSAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgICAgICBkcm1fcGFyYW1zLmF0b21p Y19yZXF1ZXN0X3B0ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5nZXRfcG9pbnRlcihhcnAsICJk cm1Nb2RlQXRvbWljUmVxKiIpCi0tICogICAgICAgICAgICAgZHJtX3BhcmFtcy5yZW5kZXJfZmQg PSBkcm1fZGlzcGxheS5nZXQoInJlbmRlcl9mZCIsIC0xKQotKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTA1Ci0rICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3Jl cG9ydF9zd2FwKHNlbGYuX2N0eCkKLSsgKiAKLSsgKiAgICAgZGVmIGZyZWUoc2VsZik6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoK LSsgKiAgICAgICAgICAgICByZXR1cm4KLSAgKi8KLS0gICAgfQotIAotLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk4Ci0tICogICAgICAgICAgICAgaWYgYXJwIGlzIG5v dCBOb25lOgotLSAqICAgICAgICAgICAgICAgICBkcm1fcGFyYW1zLmF0b21pY19yZXF1ZXN0X3B0 ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5nZXRfcG9pbnRlcihhcnAsICJkcm1Nb2RlQXRvbWlj UmVxKiIpCi0tICogICAgICAgICAgICAgZHJtX3BhcmFtcy5yZW5kZXJfZmQgPSBkcm1fZGlzcGxh eS5nZXQoInJlbmRlcl9mZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZ LCAmZHJtX3BhcmFtcykKLS0gKiAgICAgICAgIGlmIGRybV9vc2Rfc2l6ZToKLS0gKi8KLS0gICAg X19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2RybV9kaXNwbGF5 LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg OTk4LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAg IF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90dXBsZV9f MTQsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5OTgsIF9f cHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICAgIF9fcHl4X3RfNyA9IF9fUHl4 X1B5SW50X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoaW50 KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDk5OCwgX19weXhfTDFfZXJy b3IpCi0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgICBf X3B5eF92X2RybV9wYXJhbXMucmVuZGVyX2ZkID0gX19weXhfdF83OwotKy8qIFB5dGhvbiB3cmFw cGVyICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNSZW5kZXJDb250ZXh0XzE3ZnJlZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5V U0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTdmcmVlKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgewotKyAgUHlP YmplY3QgKl9fcHl4X3IgPSAwOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJmcmVlICh3cmFwcGVyKSIsIDApOwotKyAgX19weXhf ciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTZmcmVl KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAq KV9fcHl4X3Zfc2VsZikpOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTk5Ci0tICogICAgICAgICAgICAgICAgIGRybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRy ID0gPF9kcm1Nb2RlQXRvbWljUmVxICoqPmdldF9wb2ludGVyKGFycCwgImRybU1vZGVBdG9taWNS ZXEqIikKLS0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLnJlbmRlcl9mZCA9IGRybV9kaXNwbGF5 LmdldCgicmVuZGVyX2ZkIiwgLTEpCi0tICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChN UFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAmZHJtX3BhcmFtcykgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgaWYgZHJtX29zZF9zaXplOgotLSAqICAgICAgICAg ICAgIF9kcm1fb3NkX3NpemUud2lkdGgsIF9kcm1fb3NkX3NpemUuaGVpZ2h0ID0gZHJtX29zZF9z aXplCi0tICovCi0tICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19weXhf dnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9EUk1fRElT UExBWSwgKCZfX3B5eF92X2RybV9wYXJhbXMpLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgOTk5LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OwotKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKLSsgIHJldHVybiBfX3B5eF9yOwotK30KLSAKLS0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjk5MQotLSAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkg PSB3bF9kaXNwbGF5Ci0tICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVS X1BBUkFNX1dMX0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkp Ci0tICogICAgICAgICBpZiBkcm1fZGlzcGxheTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICAgICAgICAgIGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwg LTEpCi0tICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0 KCJjcnRjX2lkIiwgLTEpCi0tICovCi0tICB9Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE2ZnJlZShzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYpIHsK LSsgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCi0rICBpbnQgX19weXhfdF8xOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImZy ZWUiLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDAwCi0t ICogICAgICAgICAgICAgZHJtX3BhcmFtcy5yZW5kZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJl bmRlcl9mZCIsIC0xKQotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRF Ul9QQVJBTV9EUk1fRElTUExBWSwgJmRybV9wYXJhbXMpCi0tICogICAgICAgICBpZiBkcm1fb3Nk X3NpemU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBfZHJt X29zZF9zaXplLndpZHRoLCBfZHJtX29zZF9zaXplLmhlaWdodCA9IGRybV9vc2Rfc2l6ZQotLSAq ICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9EUk1fT1NEX1NJ WkUsICZfZHJtX29zZF9zaXplKQotLSAqLwotLSAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3Rf SXNUcnVlKF9fcHl4X3ZfZHJtX29zZF9zaXplKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDAp KSBfX1BZWF9FUlIoMCwgMTAwMCwgX19weXhfTDFfZXJyb3IpCi0tICBpZiAoX19weXhfdF8zKSB7 Ci0tCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDAxCi0tICogICAg ICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAm ZHJtX3BhcmFtcykKLS0gKiAgICAgICAgIGlmIGRybV9vc2Rfc2l6ZToKLS0gKiAgICAgICAgICAg ICBfZHJtX29zZF9zaXplLndpZHRoLCBfZHJtX29zZF9zaXplLmhlaWdodCA9IGRybV9vc2Rfc2l6 ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcGFyYW1zLmFk ZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgJl9kcm1fb3NkX3NpemUpCi0t ICogCi0tICovCi0tICAgIGlmICgobGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X2Ry bV9vc2Rfc2l6ZSkpKSB8fCAoUHlMaXN0X0NoZWNrRXhhY3QoX19weXhfdl9kcm1fb3NkX3NpemUp KSkgewotLSAgICAgIFB5T2JqZWN0KiBzZXF1ZW5jZSA9IF9fcHl4X3ZfZHJtX29zZF9zaXplOwot LSAgICAgIFB5X3NzaXplX3Qgc2l6ZSA9IF9fUHl4X1B5U2VxdWVuY2VfU0laRShzZXF1ZW5jZSk7 Ci0tICAgICAgaWYgKHVubGlrZWx5KHNpemUgIT0gMikpIHsKLS0gICAgICAgIGlmIChzaXplID4g MikgX19QeXhfUmFpc2VUb29NYW55VmFsdWVzRXJyb3IoMik7Ci0tICAgICAgICBlbHNlIGlmIChz aXplID49IDApIF9fUHl4X1JhaXNlTmVlZE1vcmVWYWx1ZXNFcnJvcihzaXplKTsKLS0gICAgICAg IF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgICB9Ci0tICAgICAgI2lm IENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZT Ci0tICAgICAgaWYgKGxpa2VseShQeVR1cGxlX0NoZWNrRXhhY3Qoc2VxdWVuY2UpKSkgewotLSAg ICAgICAgX19weXhfdF8xID0gUHlUdXBsZV9HRVRfSVRFTShzZXF1ZW5jZSwgMCk7IAotLSAgICAg ICAgX19weXhfdF8yID0gUHlUdXBsZV9HRVRfSVRFTShzZXF1ZW5jZSwgMSk7IAotLSAgICAgIH0g ZWxzZSB7Ci0tICAgICAgICBfX3B5eF90XzEgPSBQeUxpc3RfR0VUX0lURU0oc2VxdWVuY2UsIDAp OyAKLS0gICAgICAgIF9fcHl4X3RfMiA9IFB5TGlzdF9HRVRfSVRFTShzZXF1ZW5jZSwgMSk7IAot LSAgICAgIH0KLS0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKLS0gICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF8yKTsKLS0gICAgICAjZWxzZQotLSAgICAgIF9fcHl4X3RfMSA9IFB5U2Vx dWVuY2VfSVRFTShzZXF1ZW5jZSwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDEwMDEsIF9fcHl4X0wxX2Vycm9yKQotLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOwotLSAgICAgIF9fcHl4X3RfMiA9IFB5U2VxdWVuY2VfSVRFTShzZXF1ZW5jZSwgMSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwMDEsIF9fcHl4X0wxX2Vycm9y KQotLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgICAgICNlbmRpZgotLSAgICB9 IGVsc2UgewotLSAgICAgIFB5X3NzaXplX3QgaW5kZXggPSAtMTsKLS0gICAgICBfX3B5eF90XzQg PSBQeU9iamVjdF9HZXRJdGVyKF9fcHl4X3ZfZHJtX29zZF9zaXplKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCi0tICAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tICAgICAgX19weXhfdF85ID0gUHlfVFlQRShfX3B5eF90 XzQpLT50cF9pdGVybmV4dDsKLS0gICAgICBpbmRleCA9IDA7IF9fcHl4X3RfMSA9IF9fcHl4X3Rf OShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIGdvdG8gX19weXhfTDExX3Vu cGFja2luZ19mYWlsZWQ7Ci0tICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgICAg aW5kZXggPSAxOyBfX3B5eF90XzIgPSBfX3B5eF90XzkoX19weXhfdF80KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBnb3RvIF9fcHl4X0wxMV91bnBhY2tpbmdfZmFpbGVkOwotLSAgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgICAgIGlmIChfX1B5eF9JdGVybmV4dFVucGFja0Vu ZENoZWNrKF9fcHl4X3RfOShfX3B5eF90XzQpLCAyKSA8IDApIF9fUFlYX0VSUigwLCAxMDAxLCBf X3B5eF9MMV9lcnJvcikKLS0gICAgICBfX3B5eF90XzkgPSBOVUxMOwotLSAgICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgICAgIGdvdG8gX19weXhfTDEyX3Vu cGFja2luZ19kb25lOwotLSAgICAgIF9fcHl4X0wxMV91bnBhY2tpbmdfZmFpbGVkOjsKLS0gICAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLS0gICAgICBfX3B5eF90 XzkgPSBOVUxMOwotLSAgICAgIGlmIChfX1B5eF9JdGVyRmluaXNoKCkgPT0gMCkgX19QeXhfUmFp c2VOZWVkTW9yZVZhbHVlc0Vycm9yKGluZGV4KTsKLS0gICAgICBfX1BZWF9FUlIoMCwgMTAwMSwg X19weXhfTDFfZXJyb3IpCi0tICAgICAgX19weXhfTDEyX3VucGFja2luZ19kb25lOjsKLS0gICAg fQotLSAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdF8xKTsgaWYgKHVu bGlrZWx5KChfX3B5eF90XzcgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlY X0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7Ci0tICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeUludF9Bc19pbnQo X19weXhfdF8yKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzEwID09IChpbnQpLTEpICYmIFB5RXJy X09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgICBfX3B5eF92X19kcm1f b3NkX3NpemUud2lkdGggPSBfX3B5eF90Xzc7Ci0tICAgIF9fcHl4X3ZfX2RybV9vc2Rfc2l6ZS5o ZWlnaHQgPSBfX3B5eF90XzEwOwotLQotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTAwMgotLSAqICAgICAgICAgaWYgZHJtX29zZF9zaXplOgotLSAqICAgICAgICAgICAg IF9kcm1fb3NkX3NpemUud2lkdGgsIF9kcm1fb3NkX3NpemUuaGVpZ2h0ID0gZHJtX29zZF9zaXpl Ci0tICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9P U0RfU0laRSwgJl9kcm1fb3NkX3NpemUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTA2Ci0gICogCi0tICogICAgICAg ICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfY3JlYXRlKCZzZWxmLl9jdHgsIHNlbGYuX21wdi5f Y3R4LCBwYXJhbXMucGFyYW1zKQotKyAqICAgICBkZWYgZnJlZShzZWxmKToKLSsgKiAgICAgICAg IGlmIG5vdCBzZWxmLmluaXRlZDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICAgICAgICAgIHJldHVybgotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKi8KLS0gICAgX19w eXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9f cHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgKCZfX3B5eF92X19k cm1fb3NkX3NpemUpLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgMTAwMiwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwot LSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgIF9fcHl4X3Rf MSA9ICgoIShfX3B5eF92X3NlbGYtPmluaXRlZCAhPSAwKSkgIT0gMCk7Ci0rICBpZiAoX19weXhf dF8xKSB7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDAwCi0t ICogICAgICAgICAgICAgZHJtX3BhcmFtcy5yZW5kZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJl bmRlcl9mZCIsIC0xKQotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRF Ul9QQVJBTV9EUk1fRElTUExBWSwgJmRybV9wYXJhbXMpCi0tICogICAgICAgICBpZiBkcm1fb3Nk X3NpemU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBfZHJt X29zZF9zaXplLndpZHRoLCBfZHJtX29zZF9zaXplLmhlaWdodCA9IGRybV9vc2Rfc2l6ZQotLSAq ICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9EUk1fT1NEX1NJ WkUsICZfZHJtX29zZF9zaXplKQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTEwNwotKyAqICAgICBkZWYgZnJlZShzZWxmKToKLSsgKiAgICAgICAgIGlmIG5vdCBzZWxm LmluaXRlZDoKLSsgKiAgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICAgICAgd2l0aCBub2dpbDoKLSsgKiAgICAgICAgICAgICBtcHZfcmVuZGVy X2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCi0gICovCi0tICB9Ci0rICAgIF9fUHl4X1hERUNSRUYo X19weXhfcik7Ci0rICAgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7 Ci0rICAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTAwNAotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9Q QVJBTV9EUk1fT1NEX1NJWkUsICZfZHJtX29zZF9zaXplKQotKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTEwNgotICAqIAotLSAqICAgICAgICAgZXJyID0gbXB2X3JlbmRl cl9jb250ZXh0X2NyZWF0ZSgmc2VsZi5fY3R4LCBzZWxmLl9tcHYuX2N0eCwgcGFyYW1zLnBhcmFt cykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgaWYgZXJyIDwgMDoK LS0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCi0rICogICAgIGRlZiBmcmVlKHNl bGYpOgotKyAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgcmV0dXJuCi0rICogICAgICAgICB3aXRoIG5vZ2ls OgotICAqLwotLSAgX19weXhfdl9lcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfY3JlYXRlKCgmX19w eXhfdl9zZWxmLT5fY3R4KSwgX19weXhfdl9zZWxmLT5fbXB2LT5fY3R4LCBfX3B5eF92X3BhcmFt cy0+cGFyYW1zKTsKLSsgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDA1Ci0tICogCi0tICogICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfY3JlYXRl KCZzZWxmLl9jdHgsIHNlbGYuX21wdi5fY3R4LCBwYXJhbXMucGFyYW1zKQotLSAqICAgICAgICAg aWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAg IHJhaXNlIE1QVkVycm9yKGVycikKLS0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0gVHJ1ZQotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDgKLSsgKiAgICAgICAgIGlmIG5v dCBzZWxmLmluaXRlZDoKLSsgKiAgICAgICAgICAgICByZXR1cm4KLSsgKiAgICAgICAgIHdpdGgg bm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAgICBtcHZf cmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCi0rICogICAgICAgICBzZWxmLmluaXRlZCA9 IEZhbHNlCi0gICovCi0tICBfX3B5eF90XzMgPSAoKF9fcHl4X3ZfZXJyIDwgMCkgIT0gMCk7Ci0t ICBpZiAodW5saWtlbHkoX19weXhfdF8zKSkgewotKyAgewotKyAgICAgICNpZmRlZiBXSVRIX1RI UkVBRAotKyAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwotKyAgICAgIFB5X1VOQkxPQ0tfVEhS RUFEUwotKyAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLSsgICAgICAjZW5kaWYKLSsg ICAgICAvKnRyeToqLyB7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDA2Ci0tICogICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfY3JlYXRlKCZzZWxm Ll9jdHgsIHNlbGYuX21wdi5fY3R4LCBwYXJhbXMucGFyYW1zKQotLSAqICAgICAgICAgaWYgZXJy IDwgMDoKLS0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0gVHJ1ZQotKyAgICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDkKLSsgKiAgICAgICAgICAgICBy ZXR1cm4KLSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgICAgICAgICAgbXB2X3JlbmRl cl9jb250ZXh0X2ZyZWUoc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0r ICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCi0gICogCi0gICovCi0tICAgIF9fUHl4X0dl dE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDA2LCBfX3B5eF9MMV9lcnJvcikKLS0g ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50 X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9F UlIoMCwgMTAwNiwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQp OwotLSAgICBfX3B5eF90XzUgPSBOVUxMOwotLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RT ICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMSkpKSB7Ci0tICAgICAgX19weXhf dF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8xKTsKLS0gICAgICBpZiAobGlrZWx5KF9f cHl4X3RfNSkpIHsKLS0gICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9G VU5DVElPTihfX3B5eF90XzEpOwotLSAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7Ci0t ICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF90XzEsIGZ1bmN0aW9uKTsKLSsgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVl KF9fcHl4X3Zfc2VsZi0+X2N0eCk7Ci0gICAgICAgfQotLSAgICB9Ci0tICAgIF9fcHl4X3RfMiA9 IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMSwgX19weXhf dF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzEsIF9f cHl4X3RfNCk7Ci0tICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsK LS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICAgIGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwMDYsIF9fcHl4X0wxX2Vycm9yKQot LSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7Ci0tICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMiwgMCwgMCwgMCk7 Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgICBfX1BZ WF9FUlIoMCwgMTAwNiwgX19weXhfTDFfZXJyb3IpCi0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDA1Ci0tICogCi0tICogICAgICAgICBlcnIgPSBtcHZfcmVuZGVy X2NvbnRleHRfY3JlYXRlKCZzZWxmLl9jdHgsIHNlbGYuX21wdi5fY3R4LCBwYXJhbXMucGFyYW1z KQotLSAqICAgICAgICAgaWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKLS0gKiAgICAgICAgIHNlbGYuaW5p dGVkID0gVHJ1ZQotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTA4 Ci0rICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6Ci0rICogICAgICAgICAgICAgcmV0dXJu Ci0rICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0r ICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X2ZyZWUoc2VsZi5fY3R4KQotKyAqICAg ICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQotICAqLwotKyAgICAgIC8qZmluYWxseToqLyB7Ci0r ICAgICAgICAvKm5vcm1hbCBleGl0OiovewotKyAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQK LSsgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKLSsgICAgICAgICAgUHlfQkxPQ0tf VEhSRUFEUwotKyAgICAgICAgICAjZW5kaWYKLSsgICAgICAgICAgZ290byBfX3B5eF9MNjsKLSsg ICAgICAgIH0KLSsgICAgICAgIF9fcHl4X0w2OjsKLSsgICAgICB9Ci0gICB9Ci0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAwNwotLSAqICAgICAgICAgaWYgZXJyIDwg MDoKLS0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCi0tICogICAgICAgICBzZWxm LmluaXRlZCA9IFRydWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTAKLSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0r ICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X2ZyZWUoc2VsZi5fY3R4KQotKyAqICAg ICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0g ICogCi0tICogICAgIEBfZXJyb3JzCi0rICogICAgIGRlZiBjbG9zZShzZWxmKToKLSAgKi8KLS0g IF9fcHl4X3Zfc2VsZi0+aW5pdGVkID0gMTsKLSsgIF9fcHl4X3Zfc2VsZi0+aW5pdGVkID0gMDsK LSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTAKLS0gKiAgICAgICAg IGJpbnQgaW5pdGVkCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwNQot KyAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9yZXBvcnRfc3dhcChzZWxmLl9jdHgp Ci0gICogCi0tICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtcHYsICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAgICAgIGFwaV90eXBlLAotLSAqICAgICAgICAg ICAgICAgICAgb3BlbmdsX2luaXRfcGFyYW1zPU5vbmUsCi0rICogICAgIGRlZiBmcmVlKHNlbGYp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBpZiBub3Qgc2VsZi5p bml0ZWQ6Ci0rICogICAgICAgICAgICAgcmV0dXJuCi0gICovCi0gCi0gICAvKiBmdW5jdGlvbiBl eGl0IGNvZGUgKi8KLS0gIF9fcHl4X3IgPSAwOwotLSAgZ290byBfX3B5eF9MMDsKLS0gIF9fcHl4 X0wxX2Vycm9yOjsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X1hERUNS RUYoX19weXhfdF8yKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKLS0gIF9fUHl4X1hE RUNSRUYoX19weXhfdF81KTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMu bXB2LlJlbmRlckNvbnRleHQuX19pbml0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8s IF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fcHl4X3IgPSAtMTsKLSsgIF9fcHl4X3IgPSBQeV9Ob25l OyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0gICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9YREVDUkVG KChQeU9iamVjdCAqKV9fcHl4X3ZfcGFyYW1zKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9h cnApOwotKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTAxMAotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMTEyCi0rICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCi0gICogCi0tICogICAgIEBf ZXJyb3JzCi0tICogICAgIGRlZiBzZXRfaWNjX3Byb2ZpbGUoc2VsZiwgaWNjX2Jsb2IpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBjZGVmOgotLSAqICAgICAgICAg ICAgIG1wdl9yZW5kZXJfcGFyYW0gcGFyYW0KLSsgKiAgICAgZGVmIGNsb3NlKHNlbGYpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6 Ci0rICogICAgICAgICAgICAgcmV0dXJuCi0gICovCi0gCi0gLyogUHl0aG9uIHdyYXBwZXIgKi8K LS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfM3NldF9pY2NfcHJvZmlsZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVj dCAqX19weXhfdl9pY2NfYmxvYik7IC8qcHJvdG8qLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8zc2V0X2ljY19wcm9maWxl KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2ljY19ibG9iKSB7Ci0r c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJD b250ZXh0XzE5Y2xvc2UoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9i amVjdCAqdW51c2VkKTsgLypwcm90byovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE5Y2xvc2UoUHlPYmplY3QgKl9fcHl4 X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7Ci0gICBQeU9iamVjdCAq X19weXhfciA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoInNldF9pY2NfcHJvZmlsZSAod3JhcHBlcikiLCAwKTsKLS0gIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJz ZXRfaWNjX3Byb2ZpbGUoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9S ZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfaWNjX2Js b2IpKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjbG9zZSAod3JhcHBlcikiLCAw KTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJD b250ZXh0XzE4Y2xvc2UoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9S ZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxmKSk7Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNv ZGUgKi8KLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4 X3I7Ci0gfQotIAotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzUmVuZGVyQ29udGV4dF8yc2V0X2ljY19wcm9maWxlKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfaWNjX2Jsb2IpIHsKLS0gIHN0cnVjdCBtcHZfcmVuZGVyX3BhcmFtIF9fcHl4X3Zf cGFyYW07Ci0tICBzdHJ1Y3QgbXB2X2J5dGVfYXJyYXkgX19weXhfdl92YWw7Ci0tICBpbnQgX19w eXhfdl9lcnI7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNSZW5kZXJDb250ZXh0XzE4Y2xvc2Uoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmKSB7Ci0gICBQeU9iamVjdCAqX19w eXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotICAgaW50IF9fcHl4 X3RfMTsKLS0gIGludCBfX3B5eF90XzI7Ci0tICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsK LS0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9 IE5VTEw7Ci0tICBjaGFyICpfX3B5eF90XzY7Ci0tICBQeV9zc2l6ZV90IF9fcHl4X3RfNzsKLS0g IGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoInNldF9pY2NfcHJvZmlsZSIsIDApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoImNsb3NlIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTAxNgotLSAqICAgICAgICAgICAgIGludCBlcnIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTEzCi0gICogCi0tICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpY2Nf YmxvYiwgYnl0ZXMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAg ICAgcmFpc2UgUHlNUFZFcnJvcigiaWNjX2Jsb2Igc2hvdWxkIGJlIGEgYnl0ZXMgaW5zdGFuY2Ui KQotLSAqICAgICAgICAgdmFsLmRhdGEgPSA8dm9pZCAqPjxjaGFyICo+aWNjX2Jsb2IKLS0gKi8K LS0gIF9fcHl4X3RfMSA9IFB5Qnl0ZXNfQ2hlY2soX19weXhfdl9pY2NfYmxvYik7IAotLSAgX19w eXhfdF8yID0gKCghKF9fcHl4X3RfMSAhPSAwKSkgIT0gMCk7Ci0tICBpZiAodW5saWtlbHkoX19w eXhfdF8yKSkgewotLQotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAx NwotLSAqIAotLSAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaWNjX2Jsb2IsIGJ5dGVzKToK LS0gKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJpY2NfYmxvYiBzaG91bGQgYmUgYSBi eXRlcyBpbnN0YW5jZSIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg IHZhbC5kYXRhID0gPHZvaWQgKj48Y2hhciAqPmljY19ibG9iCi0tICogICAgICAgICB2YWwuc2l6 ZSA9IGxlbihpY2NfYmxvYikKLS0gKi8KLS0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShf X3B5eF90XzQsIF9fcHl4X25fc19QeU1QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgMTAxNywgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOwotLSAgICBfX3B5eF90XzUgPSBOVUxMOwotLSAgICBpZiAoQ1lUSE9OX1VOUEFD S19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNCkpKSB7Ci0tICAg ICAgX19weXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF80KTsKLS0gICAgICBpZiAo bGlrZWx5KF9fcHl4X3RfNSkpIHsKLS0gICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0 aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzQpOwotLSAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3RfNSk7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgICAgX19QeXhf REVDUkVGX1NFVChfX3B5eF90XzQsIGZ1bmN0aW9uKTsKLS0gICAgICB9Ci0tICAgIH0KLS0gICAg X19weXhfdF8zID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhf dF80LCBfX3B5eF90XzUsIF9fcHl4X2twX3NfaWNjX2Jsb2Jfc2hvdWxkX2JlX2FfYnl0ZXNfaW5z dGEpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X2twX3NfaWNj X2Jsb2Jfc2hvdWxkX2JlX2FfYnl0ZXNfaW5zdGEpOwotLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0tICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDEwMTcsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8zKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICAg IF9fUHl4X1JhaXNlKF9fcHl4X3RfMywgMCwgMCwgMCk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgICBfX1BZWF9FUlIoMCwgMTAxNywgX19weXhfTDFf ZXJyb3IpCi0tCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDE2Ci0t ICogICAgICAgICAgICAgaW50IGVycgotLSAqIAotLSAqICAgICAgICAgaWYgbm90IGlzaW5zdGFu Y2UoaWNjX2Jsb2IsIGJ5dGVzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoImljY19ibG9iIHNob3VsZCBiZSBhIGJ5dGVzIGlu c3RhbmNlIikKLS0gKiAgICAgICAgIHZhbC5kYXRhID0gPHZvaWQgKj48Y2hhciAqPmljY19ibG9i Ci0tICovCi0tICB9Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAx OAotLSAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaWNjX2Jsb2IsIGJ5dGVzKToKLS0gKiAg ICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJpY2NfYmxvYiBzaG91bGQgYmUgYSBieXRlcyBp bnN0YW5jZSIpCi0tICogICAgICAgICB2YWwuZGF0YSA9IDx2b2lkICo+PGNoYXIgKj5pY2NfYmxv YiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICB2YWwuc2l6ZSA9IGxl bihpY2NfYmxvYikKLS0gKiAKLS0gKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0Fz V3JpdGFibGVTdHJpbmcoX19weXhfdl9pY2NfYmxvYik7IGlmICh1bmxpa2VseSgoIV9fcHl4X3Rf NikgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDE4LCBfX3B5eF9MMV9lcnJv cikKLS0gIF9fcHl4X3ZfdmFsLmRhdGEgPSAoKHZvaWQgKikoKGNoYXIgKilfX3B5eF90XzYpKTsK LS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDE5Ci0tICogICAgICAg ICAgICAgcmFpc2UgUHlNUFZFcnJvcigiaWNjX2Jsb2Igc2hvdWxkIGJlIGEgYnl0ZXMgaW5zdGFu Y2UiKQotLSAqICAgICAgICAgdmFsLmRhdGEgPSA8dm9pZCAqPjxjaGFyICo+aWNjX2Jsb2IKLS0g KiAgICAgICAgIHZhbC5zaXplID0gbGVuKGljY19ibG9iKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogCi0tICogICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9J Q0NfUFJPRklMRQotKyAqICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0rICogICAgICAgICBpZiBub3Qg c2VsZi5pbml0ZWQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAg ICByZXR1cm4KLSsgKiAgICAgICAgIHdpdGggbm9naWw6Ci0gICovCi0tICBfX3B5eF90XzcgPSBQ eU9iamVjdF9MZW5ndGgoX19weXhfdl9pY2NfYmxvYik7IGlmICh1bmxpa2VseShfX3B5eF90Xzcg PT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VSUigwLCAxMDE5LCBfX3B5eF9MMV9lcnJvcikK LS0gIF9fcHl4X3ZfdmFsLnNpemUgPSBfX3B5eF90Xzc7Ci0rICBfX3B5eF90XzEgPSAoKCEoX19w eXhfdl9zZWxmLT5pbml0ZWQgIT0gMCkpICE9IDApOwotKyAgaWYgKF9fcHl4X3RfMSkgewotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjEKLS0gKiAgICAgICAgIHZh bC5zaXplID0gbGVuKGljY19ibG9iKQotLSAqIAotLSAqICAgICAgICAgcGFyYW0udHlwZSA9IE1Q Vl9SRU5ERVJfUEFSQU1fSUNDX1BST0ZJTEUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZ2YWwKLS0gKiAKLSsgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExMTQKLSsgKiAgICAgZGVmIGNsb3NlKHNlbGYpOgotKyAqICAg ICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgotKyAqICAgICAgICAgICAgIHJldHVybiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICB3aXRoIG5vZ2lsOgotKyAqICAgICAg ICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0eCkKLSAgKi8KLS0gIF9fcHl4 X3ZfcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSUNDX1BST0ZJTEU7Ci0rICAgIF9fUHl4 X1hERUNSRUYoX19weXhfcik7Ci0rICAgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYo UHlfTm9uZSk7Ci0rICAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTAyMgotLSAqIAotLSAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9S RU5ERVJfUEFSQU1fSUNDX1BST0ZJTEUKLS0gKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExMTMKLSAgKiAKLSsgKiAgICAgZGVmIGNsb3NlKHNlbGYpOgotKyAqICAgICAg ICAgaWYgbm90IHNlbGYuaW5pdGVkOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgICAgICAgICAgcmV0dXJuCi0gICogICAgICAgICB3aXRoIG5vZ2lsOgotICAqLwotLSAgX19w eXhfdl9wYXJhbS5kYXRhID0gKCZfX3B5eF92X3ZhbCk7Ci0rICB9Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyNAotLSAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZ2 YWwKLS0gKiAKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE1Ci0rICog ICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6Ci0rICogICAgICAgICAgICAgcmV0dXJuCi0gICog ICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAg ICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4 LCBwYXJhbSkKLS0gKiAgICAgICAgIHJldHVybiBlcnIKLSsgKiAgICAgICAgICAgICBtcHZfcmVu ZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCi0rICogICAgICAgICBzZWxmLmluaXRlZCA9IEZh bHNlCi0gICovCi0gICB7Ci0gICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi1AQCAtMTk4OTksMjIg KzE5MDE0LDIyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzUmVuZGVyQ29udGV4dF8yc2V0X2ljY19wcm9maWxlCi0gICAgICAgI2VuZGlmCi0gICAg ICAgLyp0cnk6Ki8gewotIAotLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwMjUKLS0gKiAKLSsgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMTE2Ci0rICogICAgICAgICAgICAgcmV0dXJuCi0gICogICAgICAgICB3aXRoIG5vZ2lsOgot LSAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKHNl bGYuX2N0eCwgcGFyYW0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg IHJldHVybiBlcnIKLSsgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxm Ll9jdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYuaW5p dGVkID0gRmFsc2UKLSAgKiAKLSAgKi8KLS0gICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X3JlbmRl cl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X3BhcmFt KTsKLSsgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKF9fcHl4X3Zfc2VsZi0+X2N0eCk7 Ci0gICAgICAgfQotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDI0Ci0tICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAotLSAqIAotKyAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE1Ci0rICogICAgICAgICBpZiBub3Qgc2VsZi5p bml0ZWQ6Ci0rICogICAgICAgICAgICAgcmV0dXJuCi0gICogICAgICAgICB3aXRoIG5vZ2lsOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgZXJyID0gbXB2X3Jl bmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4LCBwYXJhbSkKLS0gKiAgICAgICAg IHJldHVybiBlcnIKLSsgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxm Ll9jdHgpCi0rICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCi0gICovCi0gICAgICAgLypm aW5hbGx5OiovIHsKLSAgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97Ci1AQCAtMTk5MjgsMTQ4NSAr MTkwNDMsMTUwNSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfMnNldF9pY2NfcHJvZmlsZQotICAgICAgIH0KLSAgIH0KLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI2Ci0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExNwotICAqICAgICAgICAgd2l0aCBub2dpbDoKLS0g KiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3BhcmFtZXRlcihzZWxm Ll9jdHgsIHBhcmFtKQotLSAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X2ZyZWUoc2VsZi5f Y3R4KQotKyAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0gICogCi0tICogICAgIEBfZXJyb3JzCi0rICogICAgIGRlZiBfX2RlYWxsb2Nf XyhzZWxmKToKLSAgKi8KLS0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICBfX3B5eF90XzMg PSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDAsIDEwMjYsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVG KF9fcHl4X3RfMyk7Ci0tICBfX3B5eF9yID0gX19weXhfdF8zOwotLSAgX19weXhfdF8zID0gMDsK LS0gIGdvdG8gX19weXhfTDA7Ci0rICBfX3B5eF92X3NlbGYtPmluaXRlZCA9IDA7Ci0gCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAxMAotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExMTIKLSsgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UK LSAgKiAKLS0gKiAgICAgQF9lcnJvcnMKLS0gKiAgICAgZGVmIHNldF9pY2NfcHJvZmlsZShzZWxm LCBpY2NfYmxvYik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGNk ZWY6Ci0tICogICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJhbSBwYXJhbQotKyAqICAgICBkZWYg Y2xvc2Uoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGlm IG5vdCBzZWxmLmluaXRlZDoKLSsgKiAgICAgICAgICAgICByZXR1cm4KLSAgKi8KLSAKLSAgIC8q IGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERF Q1JFRihfX3B5eF90XzMpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotLSAgX19QeXhf WERFQ1JFRihfX3B5eF90XzUpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGli cy5tcHYuUmVuZGVyQ29udGV4dC5zZXRfaWNjX3Byb2ZpbGUiLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fcHl4X3IgPSBOVUxMOwotKyAgX19weXhf ciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLSAgIF9fcHl4X0wwOjsKLSAgIF9f UHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwMjkKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExOQotKyAq ICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQotKyAqIAotKyAqICAgICBkZWYgX19kZWFsbG9j X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYu Y2xvc2UoKQotICAqIAotLSAqICAgICBAX2Vycm9ycwotLSAqICAgICBkZWYgc2V0X2FtYmllbnRf bGlnaHQoc2VsZiwgbHV4KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgY2RlZjoKLS0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX3BhcmFtIHBhcmFtCi0gICovCi0g Ci0gLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNXNldF9hbWJpZW50X2xpZ2h0KFB5T2Jq ZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2x1eCk7IC8qcHJvdG8qLwotLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29u dGV4dF81c2V0X2FtYmllbnRfbGlnaHQoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfbHV4KSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0rc3RhdGljIHZvaWQg X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yMV9fZGVhbGxv Y19fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KLStzdGF0aWMgdm9pZCBfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzIxX19kZWFsbG9jX18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK LS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfYW1iaWVudF9saWdodCAod3JhcHBl cikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNS ZW5kZXJDb250ZXh0XzRzZXRfYW1iaWVudF9saWdodCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0 ICopX19weXhfdl9sdXgpKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlYWxs b2NfXyAod3JhcHBlcikiLCAwKTsKLSsgIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfMjBfX2RlYWxsb2NfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKLSAKLSAgIC8qIGZ1 bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0t ICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzRzZXRfYW1iaWVudF9saWdodChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2x1eCkgewotLSAgc3RydWN0IG1wdl9yZW5kZXJfcGFy YW0gX19weXhfdl9wYXJhbTsKLS0gIGludCBfX3B5eF92X3ZhbDsKLS0gIGludCBfX3B5eF92X2Vy cjsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLStzdGF0aWMgdm9pZCBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzIwX19kZWFsbG9jX18oc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9z ZWxmKSB7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgaW50IF9fcHl4X3RfMTsK LSsgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3RfMiA9 IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKLSAgIGludCBfX3B5eF9saW5l bm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotICAgaW50IF9f cHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldF9hbWJp ZW50X2xpZ2h0IiwgMCk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9j X18iLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM1Ci0t ICogICAgICAgICAgICAgaW50IGVycgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExMjAKLSAgKiAKLS0gKiAgICAgICAgIHZhbCA9IGx1eCAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9BTUJJ RU5UX0xJR0hUCi0tICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAotKyAqICAgICBkZWYgX19k ZWFsbG9jX18oc2VsZik6Ci0rICogICAgICAgICBzZWxmLmNsb3NlKCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqIAotKyAqIGNkZWYgY2xhc3MgT3BlbkdMUmVuZGVyQ29udGV4dChS ZW5kZXJDb250ZXh0KToKLSAgKi8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0FzX2ludChf X3B5eF92X2x1eCk7IGlmICh1bmxpa2VseSgoX19weXhfdF8xID09IChpbnQpLTEpICYmIFB5RXJy X09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMTAzNSwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5 eF92X3ZhbCA9IF9fcHl4X3RfMTsKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0 dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19jbG9zZSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExMjAsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICBfX3B5eF90XzMgPSBOVUxMOwotKyAgaWYg KENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8y KSkpIHsKLSsgICAgX19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKLSsg ICAgaWYgKGxpa2VseShfX3B5eF90XzMpKSB7Ci0rICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0g UHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0rICAgICAgX19QeXhfSU5DUkVGKF9f cHl4X3RfMyk7Ci0rICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAgICBfX1B5eF9E RUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotKyAgICB9Ci0rICB9Ci0rICBfX3B5eF90 XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBf X3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7Ci0rICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTIwLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9 IDA7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAKLS0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM2Ci0rICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTExOQotKyAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQot ICAqIAotLSAqICAgICAgICAgdmFsID0gbHV4Ci0tICogICAgICAgICBwYXJhbS50eXBlID0gTVBW X1JFTkRFUl9QQVJBTV9BTUJJRU5UX0xJR0hUICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsCi0rICogICAgIGRlZiBfX2RlYWxsb2NfXyhz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5jbG9z ZSgpCi0gICogCi0gICovCi0tICBfX3B5eF92X3BhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFN X0FNQklFTlRfTElHSFQ7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTAzNwotLSAqICAgICAgICAgdmFsID0gbHV4Ci0tICogICAgICAgICBwYXJhbS50eXBlID0gTVBW X1JFTkRFUl9QQVJBTV9BTUJJRU5UX0xJR0hUCi0tICogICAgICAgICBwYXJhbS5kYXRhID0gJnZh bCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogCi0tICogICAgICAgICB3aXRoIG5v Z2lsOgotLSAqLwotLSAgX19weXhfdl9wYXJhbS5kYXRhID0gKCZfX3B5eF92X3ZhbCk7Ci0rICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIGdvdG8gX19weXhfTDA7Ci0rICBfX3B5eF9MMV9l cnJvcjo7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMik7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0rICBfX1B5eF9Xcml0ZVVu cmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0Ll9fZGVhbGxvY19fIiwg X19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSwgMSwgMCk7Ci0rICBf X3B5eF9MMDo7Ci0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSt9Ci0gCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAzOQotLSAqICAgICAgICAgcGFyYW0u ZGF0YSA9ICZ2YWwKLS0gKiAKLS0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRf c2V0X3BhcmFtZXRlcihzZWxmLl9jdHgsIHBhcmFtKQotLSAqICAgICAgICAgcmV0dXJuIGVycgot Ky8qICIodHJlZSBmcmFnbWVudCkiOjEKLSsgKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJz ZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2ts aW5nIikKLSsgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6Ci0g ICovCi0tICB7Ci0tICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgUHlUaHJlYWRTdGF0 ZSAqX3NhdmU7Ci0tICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0tICAgICAgX19QeXhfRmFzdEdJ TF9SZW1lbWJlcigpOwotLSAgICAgICNlbmRpZgotLSAgICAgIC8qdHJ5OiovIHsKLSAKLS0gICAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDQwCi0tICogCi0tICogICAg ICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4 dF9zZXRfcGFyYW1ldGVyKHNlbGYuX2N0eCwgcGFyYW0pICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLS0gKiAgICAgICAgIHJldHVybiBlcnIKLS0gKiAKLS0gKi8KLS0gICAgICAgIF9fcHl4 X3ZfZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoX19weXhfdl9zZWxmLT5f Y3R4LCBfX3B5eF92X3BhcmFtKTsKLS0gICAgICB9Ci0rLyogUHl0aG9uIHdyYXBwZXIgKi8KLStz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNv bnRleHRfMjNfX3JlZHVjZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05f VU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KLStzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjNfX3JlZHVjZV9j eXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1 bnVzZWQpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55RGVj bGFyYXRpb25zCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9u X18gKHdyYXBwZXIpIiwgMCk7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzUmVuZGVyQ29udGV4dF8yMl9fcmVkdWNlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikp OwotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM5Ci0tICog ICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAotLSAqIAotLSAqICAgICAgICAgd2l0aCBub2dpbDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9y ZW5kZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKHNlbGYuX2N0eCwgcGFyYW0pCi0tICogICAgICAg ICByZXR1cm4gZXJyCi0tICovCi0tICAgICAgLypmaW5hbGx5OiovIHsKLS0gICAgICAgIC8qbm9y bWFsIGV4aXQ6Ki97Ci0tICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgICAgICBf X1B5eF9GYXN0R0lMX0ZvcmdldCgpOwotLSAgICAgICAgICBQeV9CTE9DS19USFJFQURTCi0tICAg ICAgICAgICNlbmRpZgotLSAgICAgICAgICBnb3RvIF9fcHl4X0w1OwotLSAgICAgICAgfQotLSAg ICAgICAgX19weXhfTDU6OwotLSAgICAgIH0KLS0gIH0KLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19weXhf cjsKLSt9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0MQotLSAq ICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2Nv bnRleHRfc2V0X3BhcmFtZXRlcihzZWxmLl9jdHgsIHBhcmFtKQotLSAqICAgICAgICAgcmV0dXJu IGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogCi0tICogICAgIGRlZiBnZXRf bmV4dF9mcmFtZV9pbmZvKHNlbGYpOgotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yMl9fcmVkdWNlX2N5dGhvbl9fKENZVEhP Tl9VTlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29u dGV4dCAqX19weXhfdl9zZWxmKSB7Ci0rICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0rICBf X1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7 Ci0rICBpbnQgX19weXhfbGluZW5vID0gMDsKLSsgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1l ID0gTlVMTDsKLSsgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyIsIDApOwotKwotKyAgLyogIih0cmVlIGZyYWdt ZW50KSI6MgotKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKLSsgKiAgICAgcmFpc2Ug VHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmpl Y3QgZm9yIHBpY2tsaW5nIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIGRlZiBf X3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKLSsgKiAgICAgcmFpc2UgVHlw ZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3Qg Zm9yIHBpY2tsaW5nIikKLSAgKi8KLS0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICBfX3B5 eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwNDEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX3B5eF9yID0gX19weXhfdF8yOwotLSAgX19weXhfdF8y ID0gMDsKLS0gIGdvdG8gX19weXhfTDA7Ci0rICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9D YWxsKF9fcHl4X2J1aWx0aW5fVHlwZUVycm9yLCBfX3B5eF90dXBsZV9fMTQsIE5VTEwpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAyLCBfX3B5eF9MMV9lcnJvcikKLSsg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgX19QeXhfUmFpc2UoX19weXhfdF8xLCAwLCAw LCAwKTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgX19Q WVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwMjkKLS0gKiAKLS0gKiAgICAgQF9lcnJvcnMKLS0gKiAgICAgZGVmIHNl dF9hbWJpZW50X2xpZ2h0KHNlbGYsIGx1eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgICAgIGNkZWY6Ci0tICogICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJhbSBwYXJh bQotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MQotKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICByYWlzZSBUeXBlRXJy b3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3Ig cGlja2xpbmciKQotKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRl KToKLSAgKi8KLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19weXhfTDFfZXJy b3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dC5zZXRfYW1iaWVudF9saWdodCIsIF9f cHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzEpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5t cHYuUmVuZGVyQ29udGV4dC5fX3JlZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotICAgX19weXhfciA9IE5VTEw7Ci0tICBfX3B5eF9M MDo7Ci0gICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDQzCi0tICogICAgICAgICByZXR1cm4gZXJyCi0tICogCi0tICog ICAgIGRlZiBnZXRfbmV4dF9mcmFtZV9pbmZvKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogICAgICAgICBjZGVmOgotLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfZnJh bWVfaW5mbyBpbmZvCi0rLyogIih0cmVlIGZyYWdtZW50KSI6MwotKyAqIGRlZiBfX3JlZHVjZV9j eXRob25fXyhzZWxmKToKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90 IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKLSsgKiBkZWYg X19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJl IGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKLSAgKi8KLSAKLSAv KiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF83Z2V0X25leHRfZnJhbWVfaW5mbyhQeU9iamVj dCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3Rv Ki8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfN2dldF9uZXh0X2ZyYW1lX2luZm8oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwg Q1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzI1X19zZXRzdGF0ZV9j eXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9z dGF0ZSk7IC8qcHJvdG8qLwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yNV9fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKLSAgIFB5T2Jq ZWN0ICpfX3B5eF9yID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0X25leHRfZnJhbWVfaW5mbyAod3JhcHBlcikiLCAw KTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJD b250ZXh0XzZnZXRfbmV4dF9mcmFtZV9pbmZvKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOwotKyAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7Ci0r ICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF8yNF9fc2V0c3RhdGVfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4 X3ZfX19weXhfc3RhdGUpKTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0t c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJD b250ZXh0XzZnZXRfbmV4dF9mcmFtZV9pbmZvKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4X3Zfc2VsZikgewotLSAgc3RydWN0IG1wdl9y ZW5kZXJfZnJhbWVfaW5mbyBfX3B5eF92X2luZm87Ci0tICBzdHJ1Y3QgbXB2X3JlbmRlcl9wYXJh bSBfX3B5eF92X3BhcmFtOwotLSAgaW50IF9fcHl4X3ZfZXJyOwotK3N0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yNF9fc2V0c3Rh dGVfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmpl Y3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKLSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsK LSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBpbnQgX19weXhfdF8xOwotLSAgUHlP YmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsK LS0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9 IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSAgIGludCBfX3B5eF9saW5l bm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotICAgaW50IF9f cHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImdldF9uZXh0 X2ZyYW1lX2luZm8iLCAwKTsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDQ4Ci0tICogICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJhbSBwYXJhbQotLSAqIAotLSAq ICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9JTkZPICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmaW5m bwotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKi8KLS0gIF9fcHl4X3ZfcGFyYW0udHlwZSA9 IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9JTkZPOwotLQotLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwNDkKLS0gKiAKLS0gKiAgICAgICAgIHBhcmFtLnR5cGUgPSBN UFZfUkVOREVSX1BBUkFNX05FWFRfRlJBTUVfSU5GTwotLSAqICAgICAgICAgcGFyYW0uZGF0YSA9 ICZpbmZvICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHdpdGggbm9n aWw6Ci0tICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2dldF9pbmZvKHNl bGYuX2N0eCwgcGFyYW0pCi0tICovCi0tICBfX3B5eF92X3BhcmFtLmRhdGEgPSAoJl9fcHl4X3Zf aW5mbyk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25f XyIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTAKLS0g KiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX05FWFRfRlJBTUVfSU5GTwot LSAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZpbmZvCi0tICogICAgICAgICB3aXRoIG5vZ2lsOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgZXJyID0gbXB2X3Jl bmRlcl9jb250ZXh0X2dldF9pbmZvKHNlbGYuX2N0eCwgcGFyYW0pCi0tICogICAgICAgICBpZiBl cnIgPCAwOgotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6NAotKyAqICAgICByYWlzZSBUeXBlRXJy b3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3Ig cGlja2xpbmciKQotKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRl KToKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRl ZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotICAqLwotLSAgewotLSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgIFB5 VGhyZWFkU3RhdGUgKl9zYXZlOwotLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotLSAgICAgIF9f UHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLS0gICAgICAjZW5kaWYKLS0gICAgICAvKnRyeToqLyB7 Ci0rICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2J1aWx0aW5fVHlwZUVy cm9yLCBfX3B5eF90dXBsZV9fMTUsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigxLCA0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OwotKyAgX19QeXhfUmFpc2UoX19weXhfdF8xLCAwLCAwLCAwKTsKLSsgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vy cm9yKQotIAotLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTEK LS0gKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmaW5mbwotLSAqICAgICAgICAgd2l0aCBub2dpbDoK LS0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0X2luZm8oc2VsZi5f Y3R4LCBwYXJhbSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgaWYg ZXJyIDwgMDoKLS0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCi0rICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjozCi0rICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgotKyAqICAg ICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0 aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQotKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNl bGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBy YWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9u IG9iamVjdCBmb3IgcGlja2xpbmciKQotICAqLwotLSAgICAgICAgX19weXhfdl9lcnIgPSBtcHZf cmVuZGVyX2NvbnRleHRfZ2V0X2luZm8oX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X3BhcmFt KTsKLS0gICAgICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwNTAKLS0gKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX05FWFRfRlJB TUVfSU5GTwotLSAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZpbmZvCi0tICogICAgICAgICB3aXRo IG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgZXJy ID0gbXB2X3JlbmRlcl9jb250ZXh0X2dldF9pbmZvKHNlbGYuX2N0eCwgcGFyYW0pCi0tICogICAg ICAgICBpZiBlcnIgPCAwOgotLSAqLwotLSAgICAgIC8qZmluYWxseToqLyB7Ci0tICAgICAgICAv Km5vcm1hbCBleGl0OiovewotLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAgICAg ICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKLS0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwot LSAgICAgICAgICAjZW5kaWYKLS0gICAgICAgICAgZ290byBfX3B5eF9MNTsKLS0gICAgICAgIH0K LS0gICAgICAgIF9fcHl4X0w1OjsKLS0gICAgICB9Ci0tICB9Ci0rICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KLSsgIF9fcHl4X0wxX2Vycm9yOjsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8x KTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckNvbnRl eHQuX19zZXRzdGF0ZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19w eXhfZmlsZW5hbWUpOwotKyAgX19weXhfciA9IE5VTEw7Ci0rICBfX1B5eF9YR0lWRVJFRihfX3B5 eF9yKTsKLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIF9fcHl4 X3I7Ci0rfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTIKLS0g KiAgICAgICAgIHdpdGggbm9naWw6Ci0tICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9j b250ZXh0X2dldF9pbmZvKHNlbGYuX2N0eCwgcGFyYW0pCi0tICogICAgICAgICBpZiBlcnIgPCAw OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcmFpc2UgTVBW RXJyb3IoZXJyKQotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTIzCi0gICog Ci0rICogY2RlZiBjbGFzcyBPcGVuR0xSZW5kZXJDb250ZXh0KFJlbmRlckNvbnRleHQpOgotKyAq ICAgICBkZWYgX19pbml0X18oc2VsZiwgbXB2LCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICAgICAgICAgICBnZXRfcHJvY19hZGRyZXNzLAotKyAqICAgICAgICAgICAg ICAgICAgKmFyZ3MsICoqa3dhcmdzKToKLSAgKi8KLS0gIF9fcHl4X3RfMSA9ICgoX19weXhfdl9l cnIgPCAwKSAhPSAwKTsKLS0gIGlmICh1bmxpa2VseShfX3B5eF90XzEpKSB7Ci0gCi0tICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDUzCi0tICogICAgICAgICAgICAgZXJy ID0gbXB2X3JlbmRlcl9jb250ZXh0X2dldF9pbmZvKHNlbGYuX2N0eCwgcGFyYW0pCi0tICogICAg ICAgICBpZiBlcnIgPCAwOgotLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIAotLSAqICAgICAgICAgcmV0dXJuIFJlbmRl ckZyYW1lSW5mbygpLl9mcm9tX3N0cnVjdCgmaW5mbykKLS0gKi8KLS0gICAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZShfX3B5eF90XzMsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDEwNTMsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gICAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJv bV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigw LCAxMDUzLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0t ICAgIF9fcHl4X3RfNSA9IE5VTEw7Ci0tICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg dW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKLS0gICAgICBfX3B5eF90XzUg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzMpOwotLSAgICAgIGlmIChsaWtlbHkoX19weXhf dF81KSkgewotLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfMyk7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKLS0gICAg ICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfMywgZnVuY3Rpb24pOwotLSAgICAgIH0KLSsvKiBQeXRob24gd3JhcHBlciAqLwotK3N0 YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29u dGV4dF8xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2Fy Z3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCi0rc3RhdGljIGludCBfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9f cHl4X2t3ZHMpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X21wdiA9IDA7Ci0rICBQeU9iamVjdCAq X19weXhfdl9nZXRfcHJvY19hZGRyZXNzID0gMDsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X2FyZ3Mg PSAwOwotKyAgUHlPYmplY3QgKl9fcHl4X3Zfa3dhcmdzID0gMDsKLSsgIGludCBfX3B5eF9saW5l bm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotKyAgaW50IF9f cHl4X2NsaW5lbm8gPSAwOwotKyAgaW50IF9fcHl4X3I7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xh cmF0aW9ucwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fICh3cmFwcGVy KSIsIDApOwotKyAgX19weXhfdl9rd2FyZ3MgPSBQeURpY3RfTmV3KCk7IGlmICh1bmxpa2VseSgh X19weXhfdl9rd2FyZ3MpKSByZXR1cm4gLTE7Ci0rICBfX1B5eF9HT1RSRUYoX19weXhfdl9rd2Fy Z3MpOwotKyAgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgPiAyKSB7Ci0rICAgIF9f cHl4X3ZfYXJncyA9IFB5VHVwbGVfR2V0U2xpY2UoX19weXhfYXJncywgMiwgUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKSk7Ci0rICAgIGlmICh1bmxpa2VseSghX19weXhfdl9hcmdzKSkgewot KyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF92X2t3YXJncyk7IF9fcHl4X3Zfa3dhcmdzID0gMDsK LSsgICAgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgICAgICByZXR1cm4gLTE7 Ci0gICAgIH0KLS0gICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9D YWxsMkFyZ3MoX19weXhfdF8zLCBfX3B5eF90XzUsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVj dF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdF80KTsKLS0gICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKLS0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgMTA1MywgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwot LSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gICAgX19QeXhf UmFpc2UoX19weXhfdF8yLCAwLCAwLCAwKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7Ci0tICAgIF9fUFlYX0VSUigwLCAxMDUzLCBfX3B5eF9MMV9lcnJvcikK LSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3ZfYXJncyk7Ci0rICB9IGVsc2UgewotKyAgICBfX3B5 eF92X2FyZ3MgPSBfX3B5eF9lbXB0eV90dXBsZTsgX19QeXhfSU5DUkVGKF9fcHl4X2VtcHR5X3R1 cGxlKTsKLSsgIH0KLSsgIHsKLSsgICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1l c1tdID0geyZfX3B5eF9uX3NfbXB2LCZfX3B5eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcywwfTsKLSsg ICAgUHlPYmplY3QqIHZhbHVlc1syXSA9IHswLDB9OwotKyAgICBpZiAodW5saWtlbHkoX19weXhf a3dkcykpIHsKLSsgICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7Ci0rICAgICAgY29uc3QgUHlfc3Np emVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7Ci0rICAgICAgc3dp dGNoIChwb3NfYXJncykgewotKyAgICAgICAgZGVmYXVsdDoKLSsgICAgICAgIGNhc2UgIDI6IHZh bHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7Ci0rICAgICAgICBDWVRI T05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dF VF9JVEVNKF9fcHl4X2FyZ3MsIDApOwotKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotKyAg ICAgICAgY2FzZSAgMDogYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGt3X2FyZ3MgPSBQeURpY3Rf U2l6ZShfX3B5eF9rd2RzKTsKLSsgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0rICAgICAgICBj YXNlICAwOgotKyAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dl dEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX21wdikpICE9IDApKSBrd19hcmdzLS07Ci0r ICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0rICAgICAgICBDWVRI T05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAxOgotKyAgICAgICAgaWYgKGxpa2VseSgo dmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9z X2dldF9wcm9jX2FkZHJlc3MpKSAhPSAwKSkga3dfYXJncy0tOwotKyAgICAgICAgZWxzZSB7Ci0r ICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDAsIDIsIDIs IDEpOyBfX1BZWF9FUlIoMCwgMTEyMywgX19weXhfTDNfZXJyb3IpCi0rICAgICAgICB9Ci0rICAg ICAgfQotKyAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKLSsgICAgICAgIGNvbnN0 IFB5X3NzaXplX3QgdXNlZF9wb3NfYXJncyA9IChwb3NfYXJncyA8IDIpID8gcG9zX2FyZ3MgOiAy OwotKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5 eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCBfX3B5eF92X2t3YXJncywgdmFsdWVzLCB1c2VkX3Bv c19hcmdzLCAiX19pbml0X18iKSA8IDApKSBfX1BZWF9FUlIoMCwgMTEyMywgX19weXhfTDNfZXJy b3IpCi0rICAgICAgfQotKyAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cykgPCAyKSB7Ci0rICAgICAgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLSsgICAgfSBl bHNlIHsKLSsgICAgICB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDAp OwotKyAgICAgIHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7Ci0r ICAgIH0KLSsgICAgX19weXhfdl9tcHYgPSB2YWx1ZXNbMF07Ci0rICAgIF9fcHl4X3ZfZ2V0X3By b2NfYWRkcmVzcyA9IHZhbHVlc1sxXTsKLSsgIH0KLSsgIGdvdG8gX19weXhfTDRfYXJndW1lbnRf dW5wYWNraW5nX2RvbmU7Ci0rICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Ci0rICBfX1B5eF9S YWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAwLCAyLCAyLCBQeVR1cGxlX0dFVF9TSVpF KF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDExMjMsIF9fcHl4X0wzX2Vycm9yKQotKyAgX19w eXhfTDNfZXJyb3I6OwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3ZfYXJncyk7IF9fcHl4X3ZfYXJn cyA9IDA7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdl9rd2FyZ3MpOyBfX3B5eF92X2t3YXJncyA9 IDA7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5PcGVuR0xSZW5k ZXJDb250ZXh0Ll9faW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSk7Ci0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiAt MTsKLSsgIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKLSsgIF9fcHl4X3IgPSBf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0X19faW5p dF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVy Q29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfbXB2LCBfX3B5eF92X2dldF9wcm9jX2Fk ZHJlc3MsIF9fcHl4X3ZfYXJncywgX19weXhfdl9rd2FyZ3MpOwotIAotLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MgotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0g KiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0X2luZm8oc2VsZi5fY3R4 LCBwYXJhbSkKLS0gKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLS0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCi0rICAvKiBmdW5jdGlv biBleGl0IGNvZGUgKi8KLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdl9hcmdzKTsKLSsgIF9fUHl4 X1hERUNSRUYoX19weXhfdl9rd2FyZ3MpOwotKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7Ci0rICByZXR1cm4gX19weXhfcjsKLSt9Ci0rCi0rc3RhdGljIGludCBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQgKl9fcHl4 X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfbXB2LCBQeU9iamVjdCAqX19weXhfdl9nZXRfcHJv Y19hZGRyZXNzLCBQeU9iamVjdCAqX19weXhfdl9hcmdzLCBQeU9iamVjdCAqX19weXhfdl9rd2Fy Z3MpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X2luaXRfcGFyYW1zID0gTlVMTDsKLSsgIGludCBf X3B5eF9yOwotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIFB5T2JqZWN0ICpfX3B5 eF90XzEgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0rICBQeU9iamVj dCAqX19weXhfdF8zID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOwotKyAg aW50IF9fcHl4X2xpbmVubyA9IDA7Ci0rICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5V TEw7Ci0rICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX19pbml0X18iLCAwKTsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTI3Ci0rICogICAgICAgICAgICAgICAgICAqYXJncywgKiprd2FyZ3MpOgotKyAqICAg ICAgICAgaW5pdF9wYXJhbXMgPSB7Ci0rICogICAgICAgICAgICAgImdldF9wcm9jX2FkZHJlc3Mi OiBnZXRfcHJvY19hZGRyZXNzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAg ICAgIH0KLSsgKiAgICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0X18oc2VsZiwgbXB2LCBSZW5k ZXJDb250ZXh0LkFQSV9PUEVOR0wsCi0rICovCi0rICBfX3B5eF90XzEgPSBfX1B5eF9QeURpY3Rf TmV3UHJlc2l6ZWQoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEx MjcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBpZiAo UHlEaWN0X1NldEl0ZW0oX19weXhfdF8xLCBfX3B5eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcywgX19w eXhfdl9nZXRfcHJvY19hZGRyZXNzKSA8IDApIF9fUFlYX0VSUigwLCAxMTI3LCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fcHl4X3ZfaW5pdF9wYXJhbXMgPSAoKFB5T2JqZWN0KilfX3B5eF90XzEpOwot KyAgX19weXhfdF8xID0gMDsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMTI5Ci0rICogICAgICAgICAgICAgImdldF9wcm9jX2FkZHJlc3MiOiBnZXRfcHJvY19hZGRy ZXNzCi0rICogICAgICAgICB9Ci0rICogICAgICAgICBSZW5kZXJDb250ZXh0Ll9faW5pdF9fKHNl bGYsIG1wdiwgUmVuZGVyQ29udGV4dC5BUElfT1BFTkdMLCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfcGFyYW1zLCAq YXJncywgKiprd2FyZ3MpCi0gICogCi0gICovCi0tICB9Ci0rICBfX3B5eF90XzEgPSBfX1B5eF9Q eU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUmVuZGVyQ29udGV4dCksIF9fcHl4X25fc19pbml0KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEyOSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJD b250ZXh0KSwgX19weXhfbl9zX0FQSV9PUEVOR0wpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCAxMTI5LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTUKLS0g KiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCi0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTEzMAotKyAqICAgICAgICAgfQotKyAqICAgICAgICAgUmVuZGVyQ29u dGV4dC5fX2luaXRfXyhzZWxmLCBtcHYsIFJlbmRlckNvbnRleHQuQVBJX09QRU5HTCwKLSsgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXJhbXMsICphcmdzLCAqKmt3YXJn cykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqIAotLSAqICAgICAgICAgcmV0dXJu IFJlbmRlckZyYW1lSW5mbygpLl9mcm9tX3N0cnVjdCgmaW5mbykgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6Ci0rICovCi0rICBf X3B5eF90XzMgPSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZ WF9FUlIoMCwgMTEyOSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8z KTsKLSsgIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7Ci0rICBfX1B5 eF9HSVZFUkVGKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsKLSsgIFB5VHVwbGVfU0VUX0lU RU0oX19weXhfdF8zLCAwLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7Ci0rICBfX1B5eF9J TkNSRUYoX19weXhfdl9tcHYpOwotKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X21wdik7Ci0rICBQ eVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMSwgX19weXhfdl9tcHYpOwotKyAgX19QeXhfR0lW RVJFRihfX3B5eF90XzIpOwotKyAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDIsIF9fcHl4 X3RfMik7Ci0rICBfX1B5eF9JTkNSRUYoX19weXhfdl9pbml0X3BhcmFtcyk7Ci0rICBfX1B5eF9H SVZFUkVGKF9fcHl4X3ZfaW5pdF9wYXJhbXMpOwotKyAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzMsIDMsIF9fcHl4X3ZfaW5pdF9wYXJhbXMpOwotKyAgX19weXhfdF8yID0gMDsKLSsKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTI5Ci0rICogICAgICAgICAgICAgImdl dF9wcm9jX2FkZHJlc3MiOiBnZXRfcHJvY19hZGRyZXNzCi0rICogICAgICAgICB9Ci0rICogICAg ICAgICBSZW5kZXJDb250ZXh0Ll9faW5pdF9fKHNlbGYsIG1wdiwgUmVuZGVyQ29udGV4dC5BUElf T1BFTkdMLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGluaXRfcGFyYW1zLCAqYXJncywgKiprd2FyZ3MpCi0gICogCi0tICog ICAgIGRlZiBzZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKToKLSAgKi8KLS0gIF9fUHl4X1hE RUNSRUYoX19weXhfcik7Ci0tICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9Bcmco KChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFt ZUluZm8pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTA1NSwgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBQeU51bWJlcl9BZGQoX19weXhfdF8zLCBfX3B5 eF92X2FyZ3MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTI5LCBf X3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgX19weXhfdF8z ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy RnJhbWVJbmZvICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJGcmFtZUluZm8gKilfX3B5eF90XzIpLT5fX3B5eF92dGFiKS0+X2Zyb21fc3RydWN0KCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICopX19w eXhfdF8yKSwgKCZfX3B5eF92X2luZm8pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZ WF9FUlIoMCwgMTA1NSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8z KTsgX19weXhfdF8zID0gMDsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMTMwCi0rICogICAgICAgICB9Ci0rICogICAgICAgICBSZW5kZXJDb250ZXh0Ll9faW5pdF9f KHNlbGYsIG1wdiwgUmVuZGVyQ29udGV4dC5BUElfT1BFTkdMLAotKyAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbml0X3BhcmFtcywgKmFyZ3MsICoqa3dhcmdzKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogCi0rICogY2xhc3MgQ2FsbGJhY2tUaHJlYWQoVGhyZWFk KToKLSsgKi8KLSsgIF9fcHl4X3RfMyA9IFB5RGljdF9Db3B5KF9fcHl4X3Zfa3dhcmdzKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTEzMCwgX19weXhfTDFfZXJyb3Ip Ci0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTI5Ci0rICogICAgICAgICAgICAgImdldF9wcm9jX2FkZHJlc3MiOiBn ZXRfcHJvY19hZGRyZXNzCi0rICogICAgICAgICB9Ci0rICogICAgICAgICBSZW5kZXJDb250ZXh0 Ll9faW5pdF9fKHNlbGYsIG1wdiwgUmVuZGVyQ29udGV4dC5BUElfT1BFTkdMLCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu aXRfcGFyYW1zLCAqYXJncywgKiprd2FyZ3MpCi0rICogCi0rICovCi0rICBfX3B5eF90XzQgPSBf X1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMTI5LCBfX3B5eF9MMV9lcnJvcikK LSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKLS0gIF9fcHl4X3IgPSBfX3B5eF90XzM7Ci0tICBfX3B5eF90XzMgPSAwOwotLSAgZ290byBf X3B5eF9MMDsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotKyAg X19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0MwotLSAqICAgICAgICAgcmV0dXJuIGVycgotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMjMKLSAgKiAKLS0gKiAgICAgZGVm IGdldF9uZXh0X2ZyYW1lX2luZm8oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgICAgIGNkZWY6Ci0tICogICAgICAgICAgICAgbXB2X3JlbmRlcl9mcmFtZV9pbmZv IGluZm8KLSsgKiBjZGVmIGNsYXNzIE9wZW5HTFJlbmRlckNvbnRleHQoUmVuZGVyQ29udGV4dCk6 Ci0rICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtcHYsICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgICAgICAgICAgICAgIGdldF9wcm9jX2FkZHJlc3MsCi0rICogICAgICAg ICAgICAgICAgICAqYXJncywgKiprd2FyZ3MpOgotICAqLwotIAotICAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCi0rICBfX3B5eF9yID0gMDsKLSsgIGdvdG8gX19weXhfTDA7Ci0gICBfX3B5eF9M MV9lcnJvcjo7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMik7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0gICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7Ci0tICBfX1B5eF9B ZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0LmdldF9uZXh0X2Zy YW1lX2luZm8iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsK LS0gIF9fcHl4X3IgPSBOVUxMOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGli cy5tcHYuT3BlbkdMUmVuZGVyQ29udGV4dC5fX2luaXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19weXhfciA9IC0xOwotICAgX19weXhfTDA6 OwotLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zf aW5pdF9wYXJhbXMpOwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1 cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEw NTcKLS0gKiAgICAgICAgIHJldHVybiBSZW5kZXJGcmFtZUluZm8oKS5fZnJvbV9zdHJ1Y3QoJmlu Zm8pCi0tICogCi0tICogICAgIGRlZiBzZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAg ICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLl9j dHgsICZfY191cGRhdGVjYiwgPHZvaWQgKj5jYikKLSsvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCi0r ICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0 ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0rICogZGVmIF9fc2V0c3RhdGVf Y3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgotICAqLwotIAotIC8qIFB5dGhvbiB3cmFwcGVy ICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNS ZW5kZXJDb250ZXh0XzlzZXRfdXBkYXRlX2NhbGxiYWNrKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF92X2NiKTsgLypwcm90byovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzlzZXRfdXBkYXRlX2Nh bGxiYWNrKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2NiKSB7Ci0r c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xS ZW5kZXJDb250ZXh0XzNfX3JlZHVjZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBD WVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KLStzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5HTFJlbmRlckNvbnRleHRf M19fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKnVudXNlZCkgewotICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRf dXBkYXRlX2NhbGxiYWNrICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfOHNldF91cGRhdGVfY2FsbGJhY2so KChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICop X19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfY2IpKTsKLSsgIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKLSsgIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250 ZXh0XzJfX3JlZHVjZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKLSAKLSAgIC8qIGZ1 bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0g ICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzhzZXRfdXBkYXRlX2NhbGxiYWNrKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4 X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2IpIHsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5HTFJlbmRlckNvbnRleHRfMl9fcmVkdWNl X2N5dGhvbl9fKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmKSB7Ci0gICBQeU9iamVjdCAq X19weXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoInNldF91cGRhdGVfY2FsbGJhY2siLCAwKTsKLSsgIFB5T2Jq ZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0rICBjb25z dCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0rICBpbnQgX19weXhfY2xpbmVubyA9IDA7 Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18iLCAwKTsK LSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU4Ci0tICogCi0tICog ICAgIGRlZiBzZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKToKLS0gKiAgICAgICAgIHdpdGgg bm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBtcHZf cmVuZGVyX2NvbnRleHRfc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLl9jdHgsICZfY191cGRhdGVj YiwgPHZvaWQgKj5jYikKLS0gKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKLSsgIC8qICIo dHJlZSBmcmFnbWVudCkiOjIKLSsgKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6Ci0rICog ICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQ eXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6Ci0rICogICAg IHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRo b24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0gICovCi0tICB7Ci0tICAgICAgI2lmZGVmIFdJVEhf VEhSRUFECi0tICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7Ci0tICAgICAgUHlfVU5CTE9DS19U SFJFQURTCi0tICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwotLSAgICAgICNlbmRpZgot LSAgICAgIC8qdHJ5OiovIHsKLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19w eXhfYnVpbHRpbl9UeXBlRXJyb3IsIF9fcHl4X3R1cGxlX18xNiwgTlVMTCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOwot KyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICBfX1BZWF9FUlIo MSwgMiwgX19weXhfTDFfZXJyb3IpCi0gCi0tICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTA1OQotLSAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBj Yik6Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJf Y29udGV4dF9zZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9p ZCAqPmNiKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLnVw ZGF0ZV9jYiA9IGNiCi0tICogCi0tICovCi0tICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfc2V0 X3VwZGF0ZV9jYWxsYmFjayhfX3B5eF92X3NlbGYtPl9jdHgsICgmX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX2NfdXBkYXRlY2IpLCAoKHZvaWQgKilfX3B5eF92X2NiKSk7Ci0tICAgICAg fQotLQotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU4Ci0tICog Ci0tICogICAgIGRlZiBzZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKToKLS0gKiAgICAgICAg IHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAg ICBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLl9jdHgsICZfY191 cGRhdGVjYiwgPHZvaWQgKj5jYikKLS0gKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKLS0g Ki8KLS0gICAgICAvKmZpbmFsbHk6Ki8gewotLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKLS0g ICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9y Z2V0KCk7Ci0tICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLS0gICAgICAgICAgI2VuZGlmCi0t ICAgICAgICAgIGdvdG8gX19weXhfTDU7Ci0tICAgICAgICB9Ci0tICAgICAgICBfX3B5eF9MNTo7 Ci0tICAgICAgfQotLSAgfQotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwNjAKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0tICogICAgICAgICAgICAgbXB2X3JlbmRl cl9jb250ZXh0X3NldF91cGRhdGVfY2FsbGJhY2soc2VsZi5fY3R4LCAmX2NfdXBkYXRlY2IsIDx2 b2lkICo+Y2IpCi0tICogICAgICAgICBzZWxmLnVwZGF0ZV9jYiA9IGNiICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAKLS0gKiAgICAgZGVmIHVwZGF0ZShzZWxmKToKLS0gKi8KLS0g IF9fUHl4X0lOQ1JFRihfX3B5eF92X2NiKTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdl9jYik7 Ci0tICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT51cGRhdGVfY2IpOwotLSAgX19QeXhfREVD UkVGKF9fcHl4X3Zfc2VsZi0+dXBkYXRlX2NiKTsKLS0gIF9fcHl4X3Zfc2VsZi0+dXBkYXRlX2Ni ID0gX19weXhfdl9jYjsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDU3Ci0tICogICAgICAgICByZXR1cm4gUmVuZGVyRnJhbWVJbmZvKCkuX2Zyb21fc3RydWN0KCZp bmZvKQotLSAqIAotLSAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0tICog ICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3NldF91cGRhdGVfY2FsbGJhY2soc2VsZi5f Y3R4LCAmX2NfdXBkYXRlY2IsIDx2b2lkICo+Y2IpCi0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox Ci0rICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252 ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0rICogZGVmIF9fc2V0c3Rh dGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgotICAqLwotIAotICAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCi0tICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUp OwotKyAgX19weXhfTDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotKyAg X19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuT3BlbkdMUmVuZGVyQ29udGV4 dC5fX3JlZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhf ZmlsZW5hbWUpOwotKyAgX19weXhfciA9IE5VTEw7Ci0gICBfX1B5eF9YR0lWRVJFRihfX3B5eF9y KTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7 Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDYyCi0tICogICAg ICAgICBzZWxmLnVwZGF0ZV9jYiA9IGNiCi0tICogCi0tICogICAgIGRlZiB1cGRhdGUoc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGNkZWYgdWludDY0X3Qg cmV0Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOgotKy8qICIodHJlZSBmcmFnbWVudCkiOjMKLSsg KiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6Ci0rICogICAgIHJhaXNlIFR5cGVFcnJvcigi c2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNr bGluZyIpCi0rICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIHJhaXNlIFR5cGVFcnJvcigic2Vs Zi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGlu ZyIpCi0gICovCi0gCi0gLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTF1cGRhdGUoUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypw cm90byovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNSZW5kZXJDb250ZXh0XzExdXBkYXRlKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9V TlVTRUQgUHlPYmplY3QgKnVudXNlZCkgewotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF81X19zZXRzdGF0ZV9jeXRo b25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0 ZSk7IC8qcHJvdG8qLwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF81X19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVj dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgewotICAgUHlP YmplY3QgKl9fcHl4X3IgPSAwOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJ1cGRhdGUgKHdyYXBwZXIpIiwgMCk7Ci0tICBfX3B5 eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMHVw ZGF0ZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRl eHQgKilfX3B5eF92X3NlbGYpKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3Nl dHN0YXRlX2N5dGhvbl9fICh3cmFwcGVyKSIsIDApOwotKyAgX19weXhfciA9IF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5HTFJlbmRlckNvbnRleHRfNF9fc2V0c3RhdGVfY3l0 aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5k ZXJDb250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfc3Rh dGUpKTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEwdXBk YXRlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQg Kl9fcHl4X3Zfc2VsZikgewotLSAgdWludDY0X3QgX19weXhfdl9yZXQ7Ci0rc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0 XzRfX3NldHN0YXRlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmLCBDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7Ci0gICBQeU9iamVjdCAq X19weXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotICAgUHlPYmpl Y3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0gICBpbnQgX19weXhfbGluZW5vID0gMDsKLSAgIGNvbnN0 IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAgIGludCBfX3B5eF9jbGluZW5vID0gMDsK LS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJ1cGRhdGUiLCAwKTsKLS0KLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY0Ci0tICogICAgIGRlZiB1cGRhdGUoc2Vs Zik6Ci0tICogICAgICAgICBjZGVmIHVpbnQ2NF90IHJldAotLSAqICAgICAgICAgd2l0aCBub2dp bDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIHJldCA9IG1w dl9yZW5kZXJfY29udGV4dF91cGRhdGUoc2VsZi5fY3R4KQotLSAqICAgICAgICAgcmV0dXJuIHJl dAotLSAqLwotLSAgewotLSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgIFB5VGhyZWFk U3RhdGUgKl9zYXZlOwotLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotLSAgICAgIF9fUHl4X0Zh c3RHSUxfUmVtZW1iZXIoKTsKLS0gICAgICAjZW5kaWYKLS0gICAgICAvKnRyeToqLyB7Ci0tCi0t ICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2NQotLSAqICAgICAg ICAgY2RlZiB1aW50NjRfdCByZXQKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0tICogICAgICAg ICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3VwZGF0ZShzZWxmLl9jdHgpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHJldHVybiByZXQKLS0gKiAKLS0gKi8K LS0gICAgICAgIF9fcHl4X3ZfcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3VwZGF0ZShfX3B5eF92 X3NlbGYtPl9jdHgpOwotLSAgICAgIH0KLS0KLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTA2NAotLSAqICAgICBkZWYgdXBkYXRlKHNlbGYpOgotLSAqICAgICAgICAg Y2RlZiB1aW50NjRfdCByZXQKLS0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICByZXQgPSBtcHZfcmVuZGVyX2NvbnRleHRf dXBkYXRlKHNlbGYuX2N0eCkKLS0gKiAgICAgICAgIHJldHVybiByZXQKLS0gKi8KLS0gICAgICAv KmZpbmFsbHk6Ki8gewotLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKLS0gICAgICAgICAgI2lm ZGVmIFdJVEhfVEhSRUFECi0tICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0tICAg ICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLS0gICAgICAgICAgI2VuZGlmCi0tICAgICAgICAgIGdv dG8gX19weXhfTDU7Ci0tICAgICAgICB9Ci0tICAgICAgICBfX3B5eF9MNTo7Ci0tICAgICAgfQot LSAgfQotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18i LCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY2Ci0tICog ICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIHJldCA9IG1wdl9yZW5kZXJfY29u dGV4dF91cGRhdGUoc2VsZi5fY3R4KQotLSAqICAgICAgICAgcmV0dXJuIHJldCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogCi0tICogICAgIEBfZXJyb3JzCi0rICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjo0Ci0rICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBi ZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0rICogZGVmIF9f c2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgotKyAqICAgICByYWlzZSBUeXBl RXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBm b3IgcGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICovCi0tICBfX1B5 eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50 NjRfdChfX3B5eF92X3JldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDEwNjYsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2Fs bChfX3B5eF9idWlsdGluX1R5cGVFcnJvciwgX19weXhfdHVwbGVfXzE3LCBOVUxMKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCi0gICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF90XzE7Ci0tICBfX3B5 eF90XzEgPSAwOwotLSAgZ290byBfX3B5eF9MMDsKLSsgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwg MCwgMCwgMCk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsg IF9fUFlYX0VSUigxLCA0LCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDYyCi0tICogICAgICAgICBzZWxmLnVwZGF0ZV9jYiA9IGNiCi0t ICogCi0tICogICAgIGRlZiB1cGRhdGUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgcmV0Ci0tICogICAgICAgICB3aXRoIG5vZ2ls OgotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MwotKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhz ZWxmKToKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZl cnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKLSsgKiBkZWYgX19zZXRzdGF0 ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRl ZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKLSAgKi8KLSAKLSAgIC8qIGZ1bmN0 aW9uIGV4aXQgY29kZSAqLwotICAgX19weXhfTDFfZXJyb3I6OwotICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzEpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVu ZGVyQ29udGV4dC51cGRhdGUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2Zp bGVuYW1lKTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Lk9wZW5H TFJlbmRlckNvbnRleHQuX19zZXRzdGF0ZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotICAgX19weXhfciA9IE5VTEw7Ci0tICBfX3B5eF9M MDo7Ci0gICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDY5Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExMzMKLSAgKiAKLS0gKiAgICAgQF9lcnJvcnMKLS0gKiAgICAgZGVmIHJlbmRlcihzZWxmLCAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgb3BlbmdsX2Zi bz1Ob25lLAotLSAqICAgICAgICAgICAgICAgIGZsaXBfeT1GYWxzZSwKLSsgKiBjbGFzcyBDYWxs YmFja1RocmVhZChUaHJlYWQpOgotKyAqICAgICBkZWYgX19pbml0X18oc2VsZik6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQot KyAqICAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCi0gICovCi0gCi0gLyogUHl0aG9uIHdyYXBw ZXIgKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfMTNyZW5kZXIoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCi0tc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEz cmVuZGVyKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9i amVjdCAqX19weXhfa3dkcykgewotLSAgUHlPYmplY3QgKl9fcHl4X3Zfb3BlbmdsX2ZibyA9IDA7 Ci0tICBQeU9iamVjdCAqX19weXhfdl9mbGlwX3kgPSAwOwotLSAgUHlPYmplY3QgKl9fcHl4X3Zf ZGVwdGggPSAwOwotLSAgUHlPYmplY3QgKl9fcHl4X3ZfYmxvY2tfZm9yX3RhcmdldF90aW1lID0g MDsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X3NraXBfcmVuZGVyaW5nID0gMDsKLS0gIGludCBfX3B5 eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAg aW50IF9fcHl4X2NsaW5lbm8gPSAwOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMV9faW5pdF9fKFB5T2JqZWN0ICpfX3B5 eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCi0rc3RhdGljIFB5TWV0 aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRf MV9faW5pdF9fID0geyJfX2luaXRfXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8xX19pbml0X18sIE1FVEhfTywgMH07Ci0rc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1Ro cmVhZF8xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYpIHsKLSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFy YXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgicmVuZGVyICh3cmFwcGVyKSIs IDApOwotLSAgewotLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7 Jl9fcHl4X25fc19vcGVuZ2xfZmJvLCZfX3B5eF9uX3NfZmxpcF95LCZfX3B5eF9uX3NfZGVwdGgs Jl9fcHl4X25fc19ibG9ja19mb3JfdGFyZ2V0X3RpbWUsJl9fcHl4X25fc19za2lwX3JlbmRlcmlu ZywwfTsKLS0gICAgUHlPYmplY3QqIHZhbHVlc1s1XSA9IHswLDAsMCwwLDB9OwotKyAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fICh3cmFwcGVyKSIsIDApOwotKyAgX19weXhf ciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkX19faW5p dF9fKF9fcHl4X3NlbGYsICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsKLSAKLS0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNzAKLS0gKiAgICAgQF9lcnJvcnMKLS0g KiAgICAgZGVmIHJlbmRlcihzZWxmLAotLSAqICAgICAgICAgICAgICAgIG9wZW5nbF9mYm89Tm9u ZSwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgICAgIGZsaXBf eT1GYWxzZSwKLS0gKiAgICAgICAgICAgICAgICBkZXB0aD1Ob25lLAotLSAqLwotLSAgICB2YWx1 ZXNbMF0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7Ci0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIF9fcHl4X3I7 Ci0rfQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MQotLSAq ICAgICBkZWYgcmVuZGVyKHNlbGYsCi0tICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25l LAotLSAqICAgICAgICAgICAgICAgIGZsaXBfeT1GYWxzZSwgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgICAgICAgIGRlcHRoPU5vbmUsCi0tICogICAgICAgICAgICAg ICAgYmxvY2tfZm9yX3RhcmdldF90aW1lPVRydWUsCi0tICovCi0tICAgIHZhbHVlc1sxXSA9ICgo UHlPYmplY3QgKilQeV9GYWxzZSk7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF9fX2luaXRfXyhDWVRIT05fVU5VU0VEIFB5 T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Ci0rICBQeU9iamVj dCAqX19weXhfciA9IE5VTEw7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgUHlP YmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsK LSsgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOwotKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7 Ci0rICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0rICBpbnQgX19weXhfY2xp bmVubyA9IDA7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18iLCAwKTsK LSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNzIKLS0gKiAgICAg ICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUsCi0tICogICAgICAgICAgICAgICAgZmxpcF95PUZh bHNlLAotLSAqICAgICAgICAgICAgICAgIGRlcHRoPU5vbmUsICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAgICBibG9ja19mb3JfdGFyZ2V0X3RpbWU9VHJ1ZSwK LS0gKiAgICAgICAgICAgICAgICBza2lwX3JlbmRlcmluZz1GYWxzZSk6Ci0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzNAotKyAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRo cmVhZCk6Ci0rICogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSsgKiAgICAgICAgIFRocmVhZC5f X2luaXRfXyhzZWxmKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBz ZWxmLmRhZW1vbiA9IFRydWUKLSsgKiAgICAgICAgIHNlbGYubG9jayA9IFNlbWFwaG9yZSgpCi0g ICovCi0tICAgIHZhbHVlc1syXSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKLSsgIF9fUHl4X0dl dE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfVGhyZWFkKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTEzNCwgX19weXhfTDFfZXJyb3IpCi0rICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoX19weXhfdF8yLCBfX3B5eF9uX3NfaW5pdCk7IGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDAsIDExMzQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfMyk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsK LSsgIF9fcHl4X3RfMiA9IE5VTEw7Ci0rICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVu bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7Ci0rICAgIF9fcHl4X3RfMiA9IFB5 TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7Ci0rICAgIGlmIChsaWtlbHkoX19weXhfdF8yKSkg ewotKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5 eF90XzMpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOwotKyAgICAgIF9fUHl4X0lO Q1JFRihmdW5jdGlvbik7Ci0rICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0 aW9uKTsKLSsgICAgfQotKyAgfQotKyAgX19weXhfdF8xID0gKF9fcHl4X3RfMikgPyBfX1B5eF9Q eU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8zLCBfX3B5eF90XzIsIF9fcHl4X3Zfc2VsZikgOiBf X1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdl9zZWxmKTsKLSsgIF9f UHl4X1hERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgIGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMzQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8z ID0gMDsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MwotLSAqICAgICAgICAgICAg ICAgIGZsaXBfeT1GYWxzZSwKLS0gKiAgICAgICAgICAgICAgICBkZXB0aD1Ob25lLAotLSAqICAg ICAgICAgICAgICAgIGJsb2NrX2Zvcl90YXJnZXRfdGltZT1UcnVlLCAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgc2tpcF9yZW5kZXJpbmc9RmFsc2UpOgot LSAqIAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzUKLSsgKiAgICAg ZGVmIF9faW5pdF9fKHNlbGYpOgotKyAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0r ICogICAgICAgICBzZWxmLmRhZW1vbiA9IFRydWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICAgICAgc2VsZi5sb2NrID0gU2VtYXBob3JlKCkKLSsgKiAgICAgICAgIHNlbGYu bG9jay5hY3F1aXJlKFRydWUpCi0gICovCi0tICAgIHZhbHVlc1szXSA9ICgoUHlPYmplY3QgKilQ eV9UcnVlKTsKLSsgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwg X19weXhfbl9zX2RhZW1vbiwgUHlfVHJ1ZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTEzNSwgX19weXhf TDFfZXJyb3IpCi0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDc0 Ci0tICogICAgICAgICAgICAgICAgZGVwdGg9Tm9uZSwKLS0gKiAgICAgICAgICAgICAgICBibG9j a19mb3JfdGFyZ2V0X3RpbWU9VHJ1ZSwKLS0gKiAgICAgICAgICAgICAgICBza2lwX3JlbmRlcmlu Zz1GYWxzZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAKLS0gKiAgICAgICAg IGNkZWY6Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzNgotKyAqICAg ICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0rICogICAgICAgICBzZWxmLmRhZW1vbiA9IFRy dWUKLSsgKiAgICAgICAgIHNlbGYubG9jayA9IFNlbWFwaG9yZSgpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCi0rICogICAg ICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQotICAqLwotLSAgICB2YWx1ZXNbNF0gPSAoKFB5T2Jq ZWN0ICopUHlfRmFsc2UpOwotLSAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKLS0gICAg ICBQeV9zc2l6ZV90IGt3X2FyZ3M7Ci0tICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9 IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7Ci0tICAgICAgc3dpdGNoIChwb3NfYXJncykg ewotLSAgICAgICAgY2FzZSAgNTogdmFsdWVzWzRdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9h cmdzLCA0KTsKLS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDQ6 IHZhbHVlc1szXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMyk7Ci0tICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxl X0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwot LSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdz LCAxKTsKLS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDE6IHZh bHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0tICAgICAgICBDWVRI T05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAwOiBicmVhazsKLS0gICAgICAgIGRlZmF1 bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0tICAgICAgfQotLSAgICAgIGt3X2Fy Z3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKLS0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7 Ci0tICAgICAgICBjYXNlICAwOgotLSAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7Ci0tICAgICAg ICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMs IF9fcHl4X25fc19vcGVuZ2xfZmJvKTsKLS0gICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1sw XSA9IHZhbHVlOyBrd19hcmdzLS07IH0KLS0gICAgICAgIH0KLS0gICAgICAgIENZVEhPTl9GQUxM VEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDE6Ci0tICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsK LS0gICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19w eXhfa3dkcywgX19weXhfbl9zX2ZsaXBfeSk7Ci0tICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1 ZXNbMV0gPSB2YWx1ZTsga3dfYXJncy0tOyB9Ci0tICAgICAgICB9Ci0tICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAyOgotLSAgICAgICAgaWYgKGt3X2FyZ3MgPiAw KSB7Ci0tICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3Ry KF9fcHl4X2t3ZHMsIF9fcHl4X25fc19kZXB0aCk7Ci0tICAgICAgICAgIGlmICh2YWx1ZSkgeyB2 YWx1ZXNbMl0gPSB2YWx1ZTsga3dfYXJncy0tOyB9Ci0tICAgICAgICB9Ci0tICAgICAgICBDWVRI T05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAzOgotLSAgICAgICAgaWYgKGt3X2FyZ3Mg PiAwKSB7Ci0tICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVt U3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19ibG9ja19mb3JfdGFyZ2V0X3RpbWUpOwotLSAgICAg ICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzNdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQotLSAgICAg ICAgfQotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgNDoKLS0g ICAgICAgIGlmIChrd19hcmdzID4gMCkgewotLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBf X1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nfc2tpcF9yZW5kZXJp bmcpOwotLSAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzRdID0gdmFsdWU7IGt3X2FyZ3Mt LTsgfQotLSAgICAgICAgfQotLSAgICAgIH0KLS0gICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+ IDApKSB7Ci0tICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRz KF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJyZW5k ZXIiKSA8IDApKSBfX1BZWF9FUlIoMCwgMTA2OSwgX19weXhfTDNfZXJyb3IpCi0tICAgICAgfQot LSAgICB9IGVsc2UgewotLSAgICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdz KSkgewotLSAgICAgICAgY2FzZSAgNTogdmFsdWVzWzRdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5 eF9hcmdzLCA0KTsKLS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2Ug IDQ6IHZhbHVlc1szXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMyk7Ci0tICAgICAg ICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OwotLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9h cmdzLCAxKTsKLS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDE6 IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0tICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAwOiBicmVhazsKLS0gICAgICAgIGRl ZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0tICAgICAgfQotKyAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzMsIF9fcHl4X25fc19TZW1hcGhvcmUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTM2LCBfX3B5eF9MMV9lcnJvcikK LSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotKyAgX19weXhfdF8yID0gTlVMTDsKLSsgIGlm IChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhf dF8zKSkpIHsKLSsgICAgX19weXhfdF8yID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsK LSsgICAgaWYgKGxpa2VseShfX3B5eF90XzIpKSB7Ci0rICAgICAgUHlPYmplY3QqIGZ1bmN0aW9u ID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMyk7Ci0rICAgICAgX19QeXhfSU5DUkVG KF9fcHl4X3RfMik7Ci0rICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywgZnVuY3Rpb24pOwotICAgICB9Ci0tICAgIF9fcHl4X3Zf b3BlbmdsX2ZibyA9IHZhbHVlc1swXTsKLS0gICAgX19weXhfdl9mbGlwX3kgPSB2YWx1ZXNbMV07 Ci0tICAgIF9fcHl4X3ZfZGVwdGggPSB2YWx1ZXNbMl07Ci0tICAgIF9fcHl4X3ZfYmxvY2tfZm9y X3RhcmdldF90aW1lID0gdmFsdWVzWzNdOwotLSAgICBfX3B5eF92X3NraXBfcmVuZGVyaW5nID0g dmFsdWVzWzRdOwotICAgfQotLSAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9u ZTsKLS0gIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKLS0gIF9fUHl4X1JhaXNlQXJndHVwbGVJ bnZhbGlkKCJyZW5kZXIiLCAwLCAwLCA1LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsg X19QWVhfRVJSKDAsIDEwNjksIF9fcHl4X0wzX2Vycm9yKQotLSAgX19weXhfTDNfZXJyb3I6Owot LSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dC5y ZW5kZXIiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsg IF9fcHl4X3RfMSA9IChfX3B5eF90XzIpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzMsIF9fcHl4X3RfMikgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8zKTsK LSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgIGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMzYsIF9fcHl4X0wxX2Vycm9yKQotKyAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19w eXhfdF8zID0gMDsKLSsgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2Vs ZiwgX19weXhfbl9zX2xvY2ssIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMTEzNiwgX19w eXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK LSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTM3Ci0rICogICAgICAg ICBzZWxmLmRhZW1vbiA9IFRydWUKLSsgKiAgICAgICAgIHNlbGYubG9jayA9IFNlbWFwaG9yZSgp Ci0rICogICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQotKyAqICAgICAgICAg c2VsZi5pc3NodXRkb3duID0gRmFsc2UKLSsgKi8KLSsgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2Jq ZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfbG9jayk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDExMzcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3RfMywgX19weXhfbl9zX2FjcXVpcmUpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCAxMTM3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJF RihfX3B5eF90XzIpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7 Ci0rICBfX3B5eF90XzMgPSBOVUxMOwotKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBs aWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLSsgICAgX19weXhfdF8zID0gUHlN ZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKLSsgICAgaWYgKGxpa2VseShfX3B5eF90XzMpKSB7 Ci0rICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4 X3RfMik7Ci0rICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7Ci0rICAgICAgX19QeXhfSU5D UkVGKGZ1bmN0aW9uKTsKLSsgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rp b24pOwotKyAgICB9Ci0rICB9Ci0rICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5 T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgUHlfVHJ1ZSkgOiBfX1B5eF9Q eU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgUHlfVHJ1ZSk7Ci0rICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxMTM3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0rICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTM4Ci0rICogICAgICAgICBzZWxmLmxvY2sgPSBTZW1h cGhvcmUoKQotKyAqICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoVHJ1ZSkKLSsgKiAgICAgICAg IHNlbGYuY2FsbGJhY2sgPSBOb25lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IEZhbHNlCi0rICogCi0rICovCi0rICBpZiAoX19QeXhf UHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jYWxsYmFjaywgUHlf Tm9uZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTEzOCwgX19weXhfTDFfZXJyb3IpCi0rCi0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzOQotKyAqICAgICAgICAgc2VsZi5sb2Nr LmFjcXVpcmUoVHJ1ZSkKLSsgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lCi0rICogICAg ICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogCi0rICogICAgIGRlZiBzaHV0ZG93bihzZWxmKToKLSsgKi8KLSsgIGlmIChfX1B5eF9Q eU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2lzc2h1dGRvd24sIFB5 X0ZhbHNlKSA8IDApIF9fUFlYX0VSUigwLCAxMTM5LCBfX3B5eF9MMV9lcnJvcikKLSsKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTMzCi0rICogCi0rICogY2xhc3MgQ2Fs bGJhY2tUaHJlYWQoVGhyZWFkKToKLSsgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikK LSsgKiAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQotKyAqLwotKwotKyAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCi0rICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUp OwotKyAgZ290byBfX3B5eF9MMDsKLSsgIF9fcHl4X0wxX2Vycm9yOjsKLSsgIF9fUHl4X1hERUNS RUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKLSsgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8zKTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMu bXB2LkNhbGxiYWNrVGhyZWFkLl9faW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5v LCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX3B5eF9yID0gTlVMTDsKLSsgIF9fcHl4X0wwOjsKLSsg IF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7Ci0tICByZXR1cm4gTlVMTDsKLS0gIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25l OjsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJD b250ZXh0XzEycmVuZGVyKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3Zfb3BlbmdsX2ZibywgX19weXhf dl9mbGlwX3ksIF9fcHl4X3ZfZGVwdGgsIF9fcHl4X3ZfYmxvY2tfZm9yX3RhcmdldF90aW1lLCBf X3B5eF92X3NraXBfcmVuZGVyaW5nKTsKLSsgIHJldHVybiBfX3B5eF9yOwotK30KLSAKLS0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY5Ci0rLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExNDEKLSsgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IEZhbHNl Ci0gICogCi0tICogICAgIEBfZXJyb3JzCi0tICogICAgIGRlZiByZW5kZXIoc2VsZiwgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgICAgIG9wZW5nbF9mYm89Tm9u ZSwKLS0gKiAgICAgICAgICAgICAgICBmbGlwX3k9RmFsc2UsCi0rICogICAgIGRlZiBzaHV0ZG93 bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5p c3NodXRkb3duID0gVHJ1ZQotKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKLSAgKi8K LSAKLSsvKiBQeXRob24gd3JhcHBlciAqLwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfM3NodXRkb3duKFB5T2JqZWN0ICpf X3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCi0rc3RhdGljIFB5 TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJl YWRfM3NodXRkb3duID0geyJzaHV0ZG93biIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8zc2h1dGRvd24sIE1FVEhfTywgMH07Ci0r c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFj a1RocmVhZF8zc2h1dGRvd24oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55RGVj bGFyYXRpb25zCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2h1dGRvd24gKHdyYXBw ZXIpIiwgMCk7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0 Q2FsbGJhY2tUaHJlYWRfMnNodXRkb3duKF9fcHl4X3NlbGYsICgoUHlPYmplY3QgKilfX3B5eF92 X3NlbGYpKTsKLSsKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEy cmVuZGVyKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRl eHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfb3BlbmdsX2ZibywgUHlPYmplY3Qg Kl9fcHl4X3ZfZmxpcF95LCBQeU9iamVjdCAqX19weXhfdl9kZXB0aCwgUHlPYmplY3QgKl9fcHl4 X3ZfYmxvY2tfZm9yX3RhcmdldF90aW1lLCBQeU9iamVjdCAqX19weXhfdl9za2lwX3JlbmRlcmlu ZykgewotLSAgc3RydWN0IG1wdl9vcGVuZ2xfZmJvIF9fcHl4X3ZfZmJvOwotLSAgc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqX19weXhfdl9wYXJh bXMgPSBOVUxMOwotLSAgaW50IF9fcHl4X3ZfcmV0OwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMnNodXRkb3duKENZVEhP Tl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsK LSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCi0gICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLS0gIGludCBfX3B5eF90XzI7Ci0t ICBpbnQgX19weXhfdF8zOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7Ci0tICBpbnQg X19weXhfdF81OwotLSAgaW50IF9fcHl4X3RfNjsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBO VUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0gICBpbnQgX19weXhfbGluZW5v ID0gMDsKLSAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAgIGludCBfX3B5 eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJyZW5kZXIiLCAw KTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzaHV0ZG93biIsIDApOwotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNzkKLS0gKiAgICAgICAgICAgICBt cHZfb3BlbmdsX2ZibyBmYm8KLS0gKiAKLS0gKiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJh bXMoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTE0MgotICAqIAotLSAqICAgICAgICAgaWYgb3BlbmdsX2ZibzoKLSsg KiAgICAgZGVmIHNodXRkb3duKHNlbGYpOgotKyAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0g VHJ1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBzZWxmLmNhbGxi YWNrID0gTm9uZQotKyAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQotICAqLwotLSAgX19w eXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcykpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDc5LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOwotLSAgX19weXhfdl9wYXJhbXMgPSAoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF90XzEpOwotLSAgX19w eXhfdF8xID0gMDsKLSsgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2Vs ZiwgX19weXhfbl9zX2lzc2h1dGRvd24sIFB5X1RydWUpIDwgMCkgX19QWVhfRVJSKDAsIDExNDIs IF9fcHl4X0wxX2Vycm9yKQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwODEKLS0gKiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJhbXMoKQotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDMKLSsgKiAgICAgZGVmIHNodXRkb3duKHNlbGYp OgotKyAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gVHJ1ZQotKyAqICAgICAgICAgc2VsZi5j YWxsYmFjayA9IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg c2VsZi5sb2NrLnJlbGVhc2UoKQotICAqIAotLSAqICAgICAgICAgaWYgb3BlbmdsX2ZibzogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIG1lbXNldCgmZmJvLCAw LCBzaXplb2YoZmJvKSkKLS0gKiAgICAgICAgICAgICBmYm8uZmJvID0gb3BlbmdsX2Ziby5nZXQo ImZibyIsIDApIG9yIDAKLSAgKi8KLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1 ZShfX3B5eF92X29wZW5nbF9mYm8pOyBpZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlY X0VSUigwLCAxMDgxLCBfX3B5eF9MMV9lcnJvcikKLS0gIGlmIChfX3B5eF90XzIpIHsKLSsgIGlm IChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NhbGxi YWNrLCBQeV9Ob25lKSA8IDApIF9fUFlYX0VSUigwLCAxMTQzLCBfX3B5eF9MMV9lcnJvcikKLSAK LS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODIKLSsgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ0Ci0rICogICAgICAgICBzZWxmLmlzc2h1dGRv d24gPSBUcnVlCi0rICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQotKyAqICAgICAgICAg c2VsZi5sb2NrLnJlbGVhc2UoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0t ICogICAgICAgICBpZiBvcGVuZ2xfZmJvOgotLSAqICAgICAgICAgICAgIG1lbXNldCgmZmJvLCAw LCBzaXplb2YoZmJvKSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAg ICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJvLmdldCgiZmJvIiwgMCkgb3IgMAotLSAqICAgICAgICAg ICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdCi0tICovCi0tICAgICh2b2lkKShtZW1zZXQoKCZf X3B5eF92X2ZibyksIDAsIChzaXplb2YoX19weXhfdl9mYm8pKSkpOwotLQotLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4MwotLSAqICAgICAgICAgaWYgb3BlbmdsX2Zi bzoKLS0gKiAgICAgICAgICAgICBtZW1zZXQoJmZibywgMCwgc2l6ZW9mKGZibykpCi0tICogICAg ICAgICAgICAgZmJvLmZibyA9IG9wZW5nbF9mYm8uZ2V0KCJmYm8iLCAwKSBvciAwICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBmYm8udyA9IG9wZW5nbF9mYm9b InciXQotLSAqICAgICAgICAgICAgIGZiby5oID0gb3BlbmdsX2Zib1siaCJdCi0rICogICAgIGRl ZiBjYWxsKHNlbGYpOgotICAqLwotLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3Zfb3BlbmdsX2ZibywgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2Fs bChfX3B5eF90XzEsIF9fcHl4X3R1cGxlX18xNSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhf dF80KSkgX19QWVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RS RUYoX19weXhfdF80KTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9 IDA7Ci0tICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzQpOyBp ZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9l cnJvcikKLS0gICAgaWYgKCFfX3B5eF90XzIpIHsKLS0gICAgICBfX1B5eF9ERUNSRUYoX19weXhf dF80KTsgX19weXhfdF80ID0gMDsKLS0gICAgfSBlbHNlIHsKLS0gICAgICBfX3B5eF90XzUgPSBf X1B5eF9QeUludF9Bc19pbnQoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzUgPT0g KGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9M MV9lcnJvcikKLS0gICAgICBfX3B5eF90XzMgPSBfX3B5eF90XzU7Ci0tICAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICAgICAgZ290byBfX3B5eF9MNF9ib29s X2Jpbm9wX2RvbmU7Ci0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3Zfc2VsZiwgX19weXhfbl9zX2xvY2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9f UFlYX0VSUigwLCAxMTQ0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzIpOwotKyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzIs IF9fcHl4X25fc19yZWxlYXNlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIo MCwgMTE0NCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgX19weXhfdF8yID0g TlVMTDsKLSsgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0No ZWNrKF9fcHl4X3RfMykpKSB7Ci0rICAgIF9fcHl4X3RfMiA9IFB5TWV0aG9kX0dFVF9TRUxGKF9f cHl4X3RfMyk7Ci0rICAgIGlmIChsaWtlbHkoX19weXhfdF8yKSkgewotKyAgICAgIFB5T2JqZWN0 KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOwotKyAgICAgIF9f UHl4X0lOQ1JFRihfX3B5eF90XzIpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0r ICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKLSAgICAgfQotLSAg ICBfX3B5eF90XzMgPSAwOwotLSAgICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OwotLSAgICBf X3B5eF92X2Ziby5mYm8gPSBfX3B5eF90XzM7Ci0tCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDg0Ci0tICogICAgICAgICAgICAgbWVtc2V0KCZmYm8sIDAsIHNpemVv ZihmYm8pKQotLSAqICAgICAgICAgICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJvLmdldCgiZmJvIiwg MCkgb3IgMAotLSAqICAgICAgICAgICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBmYm8uaCA9IG9wZW5nbF9mYm9b ImgiXQotLSAqICAgICAgICAgICAgIGZiby5pbnRlcm5hbF9mb3JtYXQgPSBvcGVuZ2xfZmJvLmdl dCgiaW50ZXJuYWxfZm9ybWF0IiwgMCkgb3IgMAotLSAqLwotLSAgICBfX3B5eF90XzQgPSBfX1B5 eF9QeU9iamVjdF9EaWN0X0dldEl0ZW0oX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF9uX3Nfdyk7 IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwODQsIF9fcHl4X0wxX2Vy cm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLS0gICAgX19weXhfdF8zID0gX19Q eXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfNCk7IGlmICh1bmxpa2VseSgoX19weXhfdF8zID09IChp bnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMTA4NCwgX19weXhfTDFf ZXJyb3IpCi0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAg ICBfX3B5eF92X2Ziby53ID0gX19weXhfdF8zOwotLQotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTA4NQotLSAqICAgICAgICAgICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJv LmdldCgiZmJvIiwgMCkgb3IgMAotLSAqICAgICAgICAgICAgIGZiby53ID0gb3BlbmdsX2Zib1si dyJdCi0tICogICAgICAgICAgICAgZmJvLmggPSBvcGVuZ2xfZmJvWyJoIl0gICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGZiby5pbnRlcm5hbF9mb3JtYXQgPSBv cGVuZ2xfZmJvLmdldCgiaW50ZXJuYWxfZm9ybWF0IiwgMCkgb3IgMAotLSAqICAgICAgICAgICAg IHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfRkJPLCAmZmJvKQotLSAq LwotLSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9EaWN0X0dldEl0ZW0oX19weXhfdl9v cGVuZ2xfZmJvLCBfX3B5eF9uX3NfaCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhf RVJSKDAsIDEwODUsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKLS0gICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfNCk7IGlmICh1 bmxpa2VseSgoX19weXhfdF8zID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZ WF9FUlIoMCwgMTA4NSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgICBfX3B5eF92X2Ziby5oID0gX19weXhfdF8zOwotKyAg fQotKyAgX19weXhfdF8xID0gKF9fcHl4X3RfMikgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfMywgX19weXhfdF8yKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90 XzMpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMp OyBfX3B5eF90XzMgPSAwOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9 IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg2Ci0tICog ICAgICAgICAgICAgZmJvLncgPSBvcGVuZ2xfZmJvWyJ3Il0KLS0gKiAgICAgICAgICAgICBmYm8u aCA9IG9wZW5nbF9mYm9bImgiXQotLSAqICAgICAgICAgICAgIGZiby5pbnRlcm5hbF9mb3JtYXQg PSBvcGVuZ2xfZmJvLmdldCgiaW50ZXJuYWxfZm9ybWF0IiwgMCkgb3IgMCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVO REVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCi0tICogICAgICAgICBpZiBmbGlwX3k6Ci0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQotKyAqICAgICAgICAgc2VsZi5p c3NodXRkb3duID0gRmFsc2UKLSsgKiAKLSsgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBU cnVlCi0rICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQotICAqLwotLSAgICBfX3B5eF90 XzQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfb3BlbmdsX2ZibywgX19weXhf bl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwODYsIF9f cHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLS0gICAgX19weXhf dF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzQsIF9fcHl4X3R1cGxlX18xNiwgTlVM TCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwODYsIF9fcHl4X0wx X2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2Jq ZWN0X0lzVHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlY X0VSUigwLCAxMDg2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgaWYgKCFfX3B5eF90XzIpIHsKLS0g ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLS0gICAgfSBlbHNl IHsKLS0gICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdF8xKTsgaWYg KHVubGlrZWx5KChfX3B5eF90XzUgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9f UFlYX0VSUigwLCAxMDg2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgICBfX3B5eF90XzMgPSBfX3B5 eF90XzU7Ci0tICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0t ICAgICAgZ290byBfX3B5eF9MNl9ib29sX2Jpbm9wX2RvbmU7Ci0tICAgIH0KLS0gICAgX19weXhf dF8zID0gMDsKLS0gICAgX19weXhfTDZfYm9vbF9iaW5vcF9kb25lOjsKLS0gICAgX19weXhfdl9m Ym8uaW50ZXJuYWxfZm9ybWF0ID0gX19weXhfdF8zOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA4NwotLSAqICAgICAgICAgICAgIGZiby5oID0gb3BlbmdsX2Zi b1siaCJdCi0tICogICAgICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8u Z2V0KCJpbnRlcm5hbF9mb3JtYXQiLCAwKSBvciAwCi0tICogICAgICAgICAgICAgcGFyYW1zLmFk ZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGlmIGZsaXBfeToKLS0gKiAgICAgICAgICAgICBw YXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKLS0gKi8KLS0gICAgX19w eXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9f cHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICgmX19weXhfdl9mYm8p LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA4NywgX19w eXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLwotKyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLSsgIGdv dG8gX19weXhfTDA7Ci0rICBfX3B5eF9MMV9lcnJvcjo7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0rICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMyk7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxs YmFja1RocmVhZC5zaHV0ZG93biIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhf ZmlsZW5hbWUpOwotKyAgX19weXhfciA9IE5VTEw7Ci0rICBfX3B5eF9MMDo7Ci0rICBfX1B5eF9Y R0lWRVJFRihfX3B5eF9yKTsKLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAg cmV0dXJuIF9fcHl4X3I7Ci0rfQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTA4MQotLSAqICAgICAgICAgcGFyYW1zID0gX1JlbmRlclBhcmFtcygpCi0rLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDYKLSsgKiAgICAgICAgIHNlbGYubG9jay5y ZWxlYXNlKCkKLSsgKiAKLSsgKiAgICAgZGVmIGNhbGwoc2VsZik6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKLSAgKiAKLS0gKiAg ICAgICAgIGlmIG9wZW5nbF9mYm86ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgICAgICBtZW1zZXQoJmZibywgMCwgc2l6ZW9mKGZibykpCi0tICogICAgICAgICAgICAg ZmJvLmZibyA9IG9wZW5nbF9mYm8uZ2V0KCJmYm8iLCAwKSBvciAwCi0gICovCi0tICB9Ci0gCi0t ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4OAotLSAqICAgICAgICAgICAg IGZiby5pbnRlcm5hbF9mb3JtYXQgPSBvcGVuZ2xfZmJvLmdldCgiaW50ZXJuYWxfZm9ybWF0Iiwg MCkgb3IgMAotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJB TV9PUEVOR0xfRkJPLCAmZmJvKQotLSAqICAgICAgICAgaWYgZmxpcF95OiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRF Ul9QQVJBTV9GTElQX1ksIDEpCi0tICogICAgICAgICBpZiBkZXB0aCBpcyBub3QgTm9uZToKLS0g Ki8KLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X2ZsaXBfeSk7 IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDEwODgsIF9fcHl4X0wx X2Vycm9yKQotLSAgaWYgKF9fcHl4X3RfMikgewotKy8qIFB5dGhvbiB3cmFwcGVyICovCi0rc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1Ro cmVhZF81Y2FsbChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7 IC8qcHJvdG8qLwotK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzVjYWxsID0geyJjYWxsIiwgKFB5Q0Z1bmN0aW9uKV9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzVjYWxsLCBNRVRI X08sIDB9OwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzE0Q2FsbGJhY2tUaHJlYWRfNWNhbGwoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X3NlbGYpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLSsgIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiY2FsbCAod3Jh cHBlcikiLCAwKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTRDYWxsYmFja1RocmVhZF80Y2FsbChfX3B5eF9zZWxmLCAoKFB5T2JqZWN0ICopX19weXhfdl9z ZWxmKSk7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg5Ci0t ICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9G Qk8sICZmYm8pCi0tICogICAgICAgICBpZiBmbGlwX3k6Ci0tICogICAgICAgICAgICAgcGFyYW1z LmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9GTElQX1ksIDEpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgIGlmIGRlcHRoIGlzIG5vdCBOb25lOgotLSAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIGRlcHRoKQotLSAqLwot LSAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRf aW50KF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwODksIF9fcHl4X0wxX2Vycm9yKQotLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7Ci0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fUHl4X1Jl Zk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIF9fcHl4X3I7Ci0rfQotIAotLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4OAotLSAqICAgICAgICAgICAgIGZi by5pbnRlcm5hbF9mb3JtYXQgPSBvcGVuZ2xfZmJvLmdldCgiaW50ZXJuYWxfZm9ybWF0IiwgMCkg b3IgMAotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9P UEVOR0xfRkJPLCAmZmJvKQotLSAqICAgICAgICAgaWYgZmxpcF95OiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9Q QVJBTV9GTElQX1ksIDEpCi0tICogICAgICAgICBpZiBkZXB0aCBpcyBub3QgTm9uZToKLS0gKi8K LS0gIH0KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NENhbGxiYWNrVGhyZWFkXzRjYWxsKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsK LSsgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0rICBQeU9iamVjdCAqX19weXhfdF8xID0g TlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4 X3RfMyA9IE5VTEw7Ci0rICBpbnQgX19weXhfbGluZW5vID0gMDsKLSsgIGNvbnN0IGNoYXIgKl9f cHl4X2ZpbGVuYW1lID0gTlVMTDsKLSsgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLSsgIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjYWxsIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA5MAotLSAqICAgICAgICAgaWYgZmxpcF95OgotLSAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fRkxJUF9ZLCAxKQotLSAqICAg ICAgICAgaWYgZGVwdGggaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0RFUFRILCBk ZXB0aCkKLS0gKiAgICAgICAgIGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0X3RpbWU6Ci0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0NwotKyAqIAotKyAqICAgICBkZWYgY2Fs bChzZWxmKToKLSsgKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqIAotKyAqICAgICBkZWYgc2V0KHNlbGYsIGNhbGxiYWNrKToKLSAg Ki8KLS0gIF9fcHl4X3RfMiA9IChfX3B5eF92X2RlcHRoICE9IFB5X05vbmUpOwotLSAgX19weXhf dF82ID0gKF9fcHl4X3RfMiAhPSAwKTsKLS0gIGlmIChfX3B5eF90XzYpIHsKLSsgIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfbG9j ayk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExNDcsIF9fcHl4X0wx X2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICBfX3B5eF90XzMgPSBfX1B5 eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfMiwgX19weXhfbl9zX3JlbGVhc2UpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTQ3LCBfX3B5eF9MMV9lcnJvcikK LSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7Ci0rICBfX3B5eF90XzIgPSBOVUxMOwotKyAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKLSsgICAg X19weXhfdF8yID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKLSsgICAgaWYgKGxpa2Vs eShfX3B5eF90XzIpKSB7Ci0rICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VU X0ZVTkNUSU9OKF9fcHl4X3RfMyk7Ci0rICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMik7Ci0r ICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfMywgZnVuY3Rpb24pOwotKyAgICB9Ci0rICB9Ci0rICBfX3B5eF90XzEgPSAoX19weXhf dF8yKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF90XzIpIDog X19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMyk7Ci0rICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCAxMTQ3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAKLS0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTEKLS0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2lu dChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKLS0gKiAgICAgICAgIGlmIGRlcHRoIGlzIG5v dCBOb25lOgotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1f REVQVEgsIGRlcHRoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBp ZiBub3QgYmxvY2tfZm9yX3RhcmdldF90aW1lOgotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf aW50KE1QVl9SRU5ERVJfUEFSQU1fQkxPQ0tfRk9SX1RBUkdFVF9USU1FLCAwKQotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDYKLSsgKiAgICAgICAgIHNlbGYubG9jay5y ZWxlYXNlKCkKLSsgKiAKLSsgKiAgICAgZGVmIGNhbGwoc2VsZik6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKLSsgKiAKLSAgKi8K LS0gICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3ZfZGVwdGgpOyBpZiAo dW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19Q WVhfRVJSKDAsIDEwOTEsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX3B5eF90XzEgPSAoKHN0cnVj dCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICop X19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4X3ZfcGFyYW1zLCBNUFZf UkVOREVSX1BBUkFNX0RFUFRILCBfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxMDkxLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwot IAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5MAotLSAqICAgICAg ICAgaWYgZmxpcF95OgotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJf UEFSQU1fRkxJUF9ZLCAxKQotLSAqICAgICAgICAgaWYgZGVwdGggaXMgbm90IE5vbmU6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChN UFZfUkVOREVSX1BBUkFNX0RFUFRILCBkZXB0aCkKLS0gKiAgICAgICAgIGlmIG5vdCBibG9ja19m b3JfdGFyZ2V0X3RpbWU6Ci0tICovCi0tICB9Ci0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K LSsgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0rICBnb3RvIF9f cHl4X0wwOwotKyAgX19weXhfTDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEp OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzMpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tU aHJlYWQuY2FsbCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OwotKyAgX19weXhfciA9IE5VTEw7Ci0rICBfX3B5eF9MMDo7Ci0rICBfX1B5eF9YR0lWRVJFRihf X3B5eF9yKTsKLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIF9f cHl4X3I7Ci0rfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTIK LS0gKiAgICAgICAgIGlmIGRlcHRoIGlzIG5vdCBOb25lOgotLSAqICAgICAgICAgICAgIHBhcmFt cy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIGRlcHRoKQotLSAqICAgICAgICAgaWYg bm90IGJsb2NrX2Zvcl90YXJnZXRfdGltZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQkxPQ0tfRk9S X1RBUkdFVF9USU1FLCAwKQotLSAqICAgICAgICAgaWYgc2tpcF9yZW5kZXJpbmc6Ci0rLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDkKLSsgKiAgICAgICAgIHNlbGYubG9jay5y ZWxlYXNlKCkKLSsgKiAKLSsgKiAgICAgZGVmIHNldChzZWxmLCBjYWxsYmFjayk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFj awotKyAqIAotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4 X3ZfYmxvY2tfZm9yX3RhcmdldF90aW1lKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBf X1BZWF9FUlIoMCwgMTA5MiwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF90XzIgPSAoKCFfX3B5 eF90XzYpICE9IDApOwotLSAgaWYgKF9fcHl4X3RfMikgewotIAotLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5MwotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50 KE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIGRlcHRoKQotLSAqICAgICAgICAgaWYgbm90IGJsb2Nr X2Zvcl90YXJnZXRfdGltZToKLS0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVO REVSX1BBUkFNX0JMT0NLX0ZPUl9UQVJHRVRfVElNRSwgMCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgaWYgc2tpcF9yZW5kZXJpbmc6Ci0tICogICAgICAgICAgICAg cGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkKLS0gKi8K LS0gICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRk X2ludChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJ TUUsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDkzLCBfX3B5 eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLQotLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA5MgotLSAqICAgICAgICAgaWYgZGVwdGggaXMgbm90IE5vbmU6 Ci0tICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9ERVBUSCwg ZGVwdGgpCi0tICogICAgICAgICBpZiBub3QgYmxvY2tfZm9yX3RhcmdldF90aW1lOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBW X1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCi0tICogICAgICAgICBpZiBz a2lwX3JlbmRlcmluZzoKLS0gKi8KLS0gIH0KLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDk0Ci0tICogICAgICAgICBpZiBub3QgYmxvY2tfZm9yX3RhcmdldF90aW1l OgotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQkxPQ0tf Rk9SX1RBUkdFVF9USU1FLCAwKQotLSAqICAgICAgICAgaWYgc2tpcF9yZW5kZXJpbmc6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChN UFZfUkVOREVSX1BBUkFNX1NLSVBfUkVOREVSSU5HLCAxKQotLSAqIAotLSAqLwotLSAgX19weXhf dF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zfc2tpcF9yZW5kZXJpbmcpOyBpZiAo dW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCAxMDk0LCBfX3B5eF9MMV9lcnJv cikKLS0gIGlmIChfX3B5eF90XzIpIHsKLS0KLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwOTUKLS0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVS X1BBUkFNX0JMT0NLX0ZPUl9UQVJHRVRfVElNRSwgMCkKLS0gKiAgICAgICAgIGlmIHNraXBfcmVu ZGVyaW5nOgotLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1f U0tJUF9SRU5ERVJJTkcsIDEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAKLS0g KiAgICAgICAgIHdpdGggbm9naWw6Ci0tICovCi0tICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9f cHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5 eF92X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5E RVJfUEFSQU1fU0tJUF9SRU5ERVJJTkcsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCAxMDk1LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLQot LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NAotLSAqICAgICAgICAg aWYgbm90IGJsb2NrX2Zvcl90YXJnZXRfdGltZToKLS0gKiAgICAgICAgICAgICBwYXJhbXMuYWRk X2ludChNUFZfUkVOREVSX1BBUkFNX0JMT0NLX0ZPUl9UQVJHRVRfVElNRSwgMCkKLS0gKiAgICAg ICAgIGlmIHNraXBfcmVuZGVyaW5nOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklO RywgMSkKLS0gKiAKLS0gKi8KLS0gIH0KLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDk3Ci0tICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9Q QVJBTV9TS0lQX1JFTkRFUklORywgMSkKLS0gKiAKLS0gKiAgICAgICAgIHdpdGggbm9naWw6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICByZXQgPSBtcHZfcmVu ZGVyX2NvbnRleHRfcmVuZGVyKHNlbGYuX2N0eCwgcGFyYW1zLnBhcmFtcykKLS0gKiAgICAgICAg IHJldHVybiByZXQKLS0gKi8KLSsvKiBQeXRob24gd3JhcHBlciAqLwotK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfN3NldChQ eU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5 eF9rd2RzKTsgLypwcm90byovCi0rc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfN3NldCA9IHsic2V0IiwgKFB5Q0Z1bmN0 aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfN3NldCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09S RFMsIDB9OwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzE0Q2FsbGJhY2tUaHJlYWRfN3NldChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9f cHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7Ci0rICBQeU9iamVjdCAqX19weXhfdl9z ZWxmID0gMDsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X2NhbGxiYWNrID0gMDsKLSsgIGludCBfX3B5 eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotKyAg aW50IF9fcHl4X2NsaW5lbm8gPSAwOwotKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotKyAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJz ZXQgKHdyYXBwZXIpIiwgMCk7Ci0gICB7Ci0tICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAg ICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7Ci0tICAgICAgUHlfVU5CTE9DS19USFJFQURTCi0tICAg ICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwotLSAgICAgICNlbmRpZgotLSAgICAgIC8qdHJ5 OiovIHsKLS0KLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDk4 Ci0tICogCi0tICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIHJldCA9IG1w dl9yZW5kZXJfY29udGV4dF9yZW5kZXIoc2VsZi5fY3R4LCBwYXJhbXMucGFyYW1zKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICByZXR1cm4gcmV0Ci0tICogCi0tICov Ci0tICAgICAgICBfX3B5eF92X3JldCA9IG1wdl9yZW5kZXJfY29udGV4dF9yZW5kZXIoX19weXhf dl9zZWxmLT5fY3R4LCBfX3B5eF92X3BhcmFtcy0+cGFyYW1zKTsKLSsgICAgc3RhdGljIFB5T2Jq ZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3Nfc2VsZiwmX19weXhfbl9zX2Nh bGxiYWNrLDB9OwotKyAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07Ci0rICAgIGlmICh1 bmxpa2VseShfX3B5eF9rd2RzKSkgewotKyAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKLSsgICAg ICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdz KTsKLSsgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0rICAgICAgICBjYXNlICAyOiB2YWx1ZXNb MV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOwotKyAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOwotKyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRF TShfX3B5eF9hcmdzLCAwKTsKLSsgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAg IGNhc2UgIDA6IGJyZWFrOwotKyAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBs ZV9lcnJvcjsKLSAgICAgICB9Ci0tCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwOTcKLS0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BB UkFNX1NLSVBfUkVOREVSSU5HLCAxKQotLSAqIAotLSAqICAgICAgICAgd2l0aCBub2dpbDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIHJldCA9IG1wdl9yZW5k ZXJfY29udGV4dF9yZW5kZXIoc2VsZi5fY3R4LCBwYXJhbXMucGFyYW1zKQotLSAqICAgICAgICAg cmV0dXJuIHJldAotLSAqLwotLSAgICAgIC8qZmluYWxseToqLyB7Ci0tICAgICAgICAvKm5vcm1h bCBleGl0OiovewotLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gICAgICAgICAgX19Q eXhfRmFzdEdJTF9Gb3JnZXQoKTsKLS0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotLSAgICAg ICAgICAjZW5kaWYKLS0gICAgICAgICAgZ290byBfX3B5eF9MMTQ7Ci0rICAgICAga3dfYXJncyA9 IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOwotKyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKLSsg ICAgICAgIGNhc2UgIDA6Ci0rICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9Q eURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nfc2VsZikpICE9IDApKSBrd19h cmdzLS07Ci0rICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0rICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAxOgotKyAgICAgICAgaWYg KGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywg X19weXhfbl9zX2NhbGxiYWNrKSkgIT0gMCkpIGt3X2FyZ3MtLTsKLSsgICAgICAgIGVsc2Ugewot KyAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgic2V0IiwgMSwgMiwgMiwgMSk7 IF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9MM19lcnJvcikKLSAgICAgICAgIH0KLS0gICAgICAg IF9fcHl4X0wxNDo7Ci0gICAgICAgfQotKyAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkp IHsKLSsgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19w eXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgInNldCIpIDwg MCkpIF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9MM19lcnJvcikKLSsgICAgICB9Ci0rICAgIH0g ZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7Ci0rICAgICAgZ290 byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLSsgICAgfSBlbHNlIHsKLSsgICAgICB2YWx1ZXNb MF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOwotKyAgICAgIHZhbHVlc1sxXSA9 IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7Ci0rICAgIH0KLSsgICAgX19weXhfdl9z ZWxmID0gdmFsdWVzWzBdOwotKyAgICBfX3B5eF92X2NhbGxiYWNrID0gdmFsdWVzWzFdOwotICAg fQotKyAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKLSsgIF9fcHl4X0w1 X2FyZ3R1cGxlX2Vycm9yOjsKLSsgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJzZXQiLCAx LCAyLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDExNDks IF9fcHl4X0wzX2Vycm9yKQotKyAgX19weXhfTDNfZXJyb3I6OwotKyAgX19QeXhfQWRkVHJhY2Vi YWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQuc2V0IiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKLSsgIHJldHVybiBOVUxMOwotKyAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNr aW5nX2RvbmU6OwotKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NENhbGxiYWNrVGhyZWFkXzZzZXQoX19weXhfc2VsZiwgX19weXhfdl9zZWxmLCBfX3B5eF92X2Nh bGxiYWNrKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDk5Ci0t ICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIHJldCA9IG1wdl9yZW5kZXJf Y29udGV4dF9yZW5kZXIoc2VsZi5fY3R4LCBwYXJhbXMucGFyYW1zKQotLSAqICAgICAgICAgcmV0 dXJuIHJldCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIF9f cHl4X3I7Ci0rfQotKwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNnNldChDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5 eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9jYWxsYmFj aykgewotKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotKyAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKLSsgIGludCBfX3B5eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOwotKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotKyAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoInNldCIsIDApOwotKwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExNTAKLSAgKiAKLS0gKiAgICAgZGVmIHJlcG9ydF9zd2FwKHNlbGYpOgot KyAqICAgICBkZWYgc2V0KHNlbGYsIGNhbGxiYWNrKToKLSsgKiAgICAgICAgIHNlbGYuY2FsbGJh Y2sgPSBjYWxsYmFjayAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogCi0rICogICAg IGRlZiBydW4oc2VsZik6Ci0gICovCi0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgX19w eXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9yZXQpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDk5LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19weXhfciA9IF9fcHl4X3RfMTsKLS0gIF9fcHl4X3Rf MSA9IDA7Ci0tICBnb3RvIF9fcHl4X0wwOwotKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJT dHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2ssIF9fcHl4X3ZfY2FsbGJhY2spIDwg MCkgX19QWVhfRVJSKDAsIDExNTAsIF9fcHl4X0wxX2Vycm9yKQotIAotLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTQ5Ci0rICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCi0rICogCi0rICog ICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKLSAgKiAKLS0gKiAgICAgQF9l cnJvcnMKLS0gKiAgICAgZGVmIHJlbmRlcihzZWxmLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLAotLSAqICAgICAgICAgICAg ICAgIGZsaXBfeT1GYWxzZSwKLSAgKi8KLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwot KyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLSsgIGdvdG8gX19w eXhfTDA7Ci0gICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7 Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0LnJlbmRlciIsIF9fcHl4X2NsaW5lbm8sIF9f cHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQuc2V0IiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0gICBfX3B5eF9yID0gTlVMTDsKLSAgIF9fcHl4X0ww OjsKLS0gIF9fUHl4X1hERUNSRUYoKFB5T2JqZWN0ICopX19weXhfdl9wYXJhbXMpOwotICAgX19Q eXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsK LSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTEwMQotLSAqICAgICAgICAgcmV0dXJuIHJldAotKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTUyCi0rICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sK LSAgKiAKLS0gKiAgICAgZGVmIHJlcG9ydF9zd2FwKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIG1wdl9y ZW5kZXJfY29udGV4dF9yZXBvcnRfc3dhcChzZWxmLl9jdHgpCi0rICogICAgIGRlZiBydW4oc2Vs Zik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHdoaWxlIG5vdCBz ZWxmLmlzc2h1dGRvd246Ci0rICogICAgICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoVHJ1ZSkK LSAgKi8KLSAKLSAvKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNXJlcG9ydF9zd2FwKFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8q cHJvdG8qLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF8xNXJlcG9ydF9zd2FwKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgewotK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfOXJ1bihQeU9iamVjdCAq X19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotK3N0YXRpYyBQ eU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhy ZWFkXzlydW4gPSB7InJ1biIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTRDYWxsYmFja1RocmVhZF85cnVuLCBNRVRIX08sIDB9OwotK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfOXJ1bihQ eU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotICAgUHlPYmpl Y3QgKl9fcHl4X3IgPSAwOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJyZXBvcnRfc3dhcCAod3JhcHBlcikiLCAwKTsKLS0gIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE0 cmVwb3J0X3N3YXAoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJDb250ZXh0ICopX19weXhfdl9zZWxmKSk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgicnVuICh3cmFwcGVyKSIsIDApOwotKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzhydW4oX19weXhfc2VsZiwgKChQeU9iamVjdCAq KV9fcHl4X3Zfc2VsZikpOwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0gICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNv bnRleHRfMTRyZXBvcnRfc3dhcChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9SZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYpIHsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzhydW4oQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotICAg UHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK LS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJyZXBvcnRfc3dhcCIsIDApOwotKyAgUHlP YmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0rICBpbnQgX19weXhfdF8yOwotKyAgaW50IF9fcHl4 X3RfMzsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4 X3RfNSA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKLSsgIFB5T2JqZWN0 ICpfX3B5eF90XzcgPSBOVUxMOwotKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0rICBjb25zdCBj aGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0rICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0r ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgicnVuIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwMgotLSAqIAotLSAqICAgICBkZWYgcmVwb3J0X3N3 YXAoc2VsZik6Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3JlcG9ydF9zd2FwKHNl bGYuX2N0eCkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTUzCi0gICog Ci0rICogICAgIGRlZiBydW4oc2VsZik6Ci0rICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3No dXRkb3duOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgc2Vs Zi5sb2NrLmFjcXVpcmUoVHJ1ZSkKLSsgKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhz ZWxmLmNhbGxiYWNrKSBpZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9uZQotICAqLwotLSAgewotLSAg ICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwotLSAg ICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsK LS0gICAgICAjZW5kaWYKLS0gICAgICAvKnRyeToqLyB7Ci0rICB3aGlsZSAoMSkgewotKyAgICBf X3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhf bl9zX2lzc2h1dGRvd24pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAx MTUzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAg IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtl bHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCAxMTUzLCBfX3B5eF9MMV9lcnJvcikKLSsg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICAgIF9fcHl4X3Rf MyA9ICgoIV9fcHl4X3RfMikgIT0gMCk7Ci0rICAgIGlmICghX19weXhfdF8zKSBicmVhazsKLSAK LS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTAzCi0tICogICAg IGRlZiByZXBvcnRfc3dhcChzZWxmKToKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0tICogICAg ICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3JlcG9ydF9zd2FwKHNlbGYuX2N0eCkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTE1NAotKyAqICAgICBkZWYgcnVuKHNlbGYpOgotKyAqICAgICAgICAgd2hpbGUgbm90 IHNlbGYuaXNzaHV0ZG93bjoKLSsgKiAgICAgICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVl KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgc2VsZi5tcHZf Y2FsbGJhY2soc2VsZi5jYWxsYmFjaykgaWYgc2VsZi5jYWxsYmFjayBlbHNlIE5vbmUKLSAgKiAK LS0gKiAgICAgZGVmIGZyZWUoc2VsZik6Ci0gICovCi0tICAgICAgICBtcHZfcmVuZGVyX2NvbnRl eHRfcmVwb3J0X3N3YXAoX19weXhfdl9zZWxmLT5fY3R4KTsKLS0gICAgICB9Ci0tCi0tICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDIKLS0gKiAKLS0gKiAgICAgZGVm IHJlcG9ydF9zd2FwKHNlbGYpOgotLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9yZXBv cnRfc3dhcChzZWxmLl9jdHgpCi0rICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0 dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfbG9jayk7IGlmICh1bmxpa2VseSghX19weXhf dF80KSkgX19QWVhfRVJSKDAsIDExNTQsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF80KTsKLSsgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF90XzQsIF9fcHl4X25fc19hY3F1aXJlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUp KSBfX1BZWF9FUlIoMCwgMTE1NCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzUpOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsK LSsgICAgX19weXhfdF80ID0gTlVMTDsKLSsgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAm JiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkpIHsKLSsgICAgICBfX3B5eF90XzQg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzUpOwotKyAgICAgIGlmIChsaWtlbHkoX19weXhf dF80KSkgewotKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfNSk7Ci0rICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsKLSsgICAg ICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0rICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfNSwgZnVuY3Rpb24pOwotKyAgICAgIH0KLSsgICAgfQotKyAgICBfX3B5eF90XzEgPSAo X19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzUsIF9fcHl4X3Rf NCwgUHlfVHJ1ZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwgUHlfVHJ1 ZSk7Ci0rICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgICAg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE1NCwgX19weXhfTDFfZXJy b3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF81KTsgX19weXhfdF81ID0gMDsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7Ci0rCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTU1Ci0rICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3NodXRkb3duOgotKyAqICAgICAgICAg ICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCi0rICogICAgICAgICAgICAgc2VsZi5tcHZfY2Fs bGJhY2soc2VsZi5jYWxsYmFjaykgaWYgc2VsZi5jYWxsYmFjayBlbHNlIE5vbmUgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotICAqIAotKyAqICAgICBkZWYgbXB2X2NhbGxiYWNrKHNlbGYs IGNhbGxiYWNrKToKLSAgKi8KLS0gICAgICAvKmZpbmFsbHk6Ki8gewotLSAgICAgICAgLypub3Jt YWwgZXhpdDoqL3sKLS0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECi0tICAgICAgICAgIF9f UHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Ci0tICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLS0gICAg ICAgICAgI2VuZGlmCi0tICAgICAgICAgIGdvdG8gX19weXhfTDU7Ci0rICAgIF9fcHl4X3RfNSA9 IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY2FsbGJh Y2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAxMTU1LCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7Ci0rICAgIF9fcHl4X3RfMyA9 IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzUpOyBpZiAodW5saWtlbHkoX19weXhfdF8z IDwgMCkpIF9fUFlYX0VSUigwLCAxMTU1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0rICAgIGlmIChfX3B5eF90XzMpIHsKLSsg ICAgICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwg X19weXhfbl9zX21wdl9jYWxsYmFjayk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhf RVJSKDAsIDExNTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzQpOwotKyAgICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhf dl9zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9f UFlYX0VSUigwLCAxMTU1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKLSsgICAgICBfX3B5eF90XzcgPSBOVUxMOwotKyAgICAgIGlmIChDWVRIT05fVU5Q QUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNCkpKSB7Ci0rICAg ICAgICBfX3B5eF90XzcgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzQpOwotKyAgICAgICAg aWYgKGxpa2VseShfX3B5eF90XzcpKSB7Ci0rICAgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9 IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzQpOwotKyAgICAgICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF83KTsKLSsgICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAg ICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzQsIGZ1bmN0aW9uKTsKLSAgICAgICAgIH0K LS0gICAgICAgIF9fcHl4X0w1OjsKLSAgICAgICB9Ci0rICAgICAgX19weXhfdF81ID0gKF9fcHl4 X3RfNykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF80LCBfX3B5eF90XzcsIF9f cHl4X3RfNikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNCwgX19weXhfdF82 KTsKLSsgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0rICAg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICAgICAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMTE1NSwgX19weXhfTDFfZXJyb3IpCi0r ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7Ci0rICAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICAgICAgX19weXhfdF8xID0gX19weXhfdF81OwotKyAg ICAgIF9fcHl4X3RfNSA9IDA7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgX19QeXhfSU5DUkVGKFB5 X05vbmUpOwotKyAgICAgIF9fcHl4X3RfMSA9IFB5X05vbmU7Ci0rICAgIH0KLSsgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwMQotLSAqICAgICAgICAgcmV0dXJuIHJldAotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTIKLSsgKiAgICAgICAgIHNlbGYu Y2FsbGJhY2sgPSBjYWxsYmFjawotICAqIAotLSAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0t ICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3JlcG9ydF9zd2FwKHNlbGYuX2N0eCkK LSsgKiAgICAgZGVmIHJ1bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNzaHV0ZG93bjoKLSsgKiAgICAgICAgICAgICBzZWxm LmxvY2suYWNxdWlyZShUcnVlKQotICAqLwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICov Ci0gICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotKyAgZ290byBf X3B5eF9MMDsKLSsgIF9fcHl4X0wxX2Vycm9yOjsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8x KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhf dF81KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKLSsgIF9fUHl4X1hERUNSRUYoX19w eXhfdF83KTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNhbGxi YWNrVGhyZWFkLnJ1biIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOwotKyAgX19weXhfciA9IE5VTEw7Ci0rICBfX3B5eF9MMDo7Ci0gICBfX1B5eF9YR0lWRVJF RihfX3B5eF9yKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJu IF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTA1 Ci0tICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3JlcG9ydF9zd2FwKHNlbGYuX2N0 eCkKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1NwotKyAqICAgICAgICAg ICAgIHNlbGYubXB2X2NhbGxiYWNrKHNlbGYuY2FsbGJhY2spIGlmIHNlbGYuY2FsbGJhY2sgZWxz ZSBOb25lCi0gICogCi0tICogICAgIGRlZiBmcmVlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6Ci0tICogICAgICAgICAg ICAgcmV0dXJuCi0rICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICB0cnk6Ci0rICogICAgICAgICAg ICAgY2FsbGJhY2soKQotICAqLwotIAotIC8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE3 ZnJlZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVz ZWQpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTdmcmVlKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgewotK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTFtcHZfY2FsbGJhY2so UHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19w eXhfa3dkcyk7IC8qcHJvdG8qLwotK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzExbXB2X2NhbGxiYWNrID0geyJtcHZf Y2FsbGJhY2siLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3Jkcylf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8xMW1wdl9jYWxs YmFjaywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9OwotK3N0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTFtcHZfY2Fs bGJhY2soUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVj dCAqX19weXhfa3dkcykgewotKyAgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfdl9zZWxm ID0gMDsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X2NhbGxiYWNrID0gMDsKLSsgIGludCBfX3B5eF9s aW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotKyAgaW50 IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJmcmVl ICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfMTZmcmVlKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOwotKyAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIm1wdl9jYWxsYmFjayAod3JhcHBlcikiLCAwKTsKLSsgIHsKLSsg ICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3Nfc2Vs ZiwmX19weXhfbl9zX2NhbGxiYWNrLDB9OwotKyAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAs MH07Ci0rICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgewotKyAgICAgIFB5X3NzaXplX3Qg a3dfYXJnczsKLSsgICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKTsKLSsgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0rICAgICAgICBj YXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOwotKyAg ICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKLSsgICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKLSsgICAgICAgIGNhc2UgIDA6IGJyZWFrOwotKyAgICAgICAgZGVmYXVsdDogZ290byBf X3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLSsgICAgICB9Ci0rICAgICAga3dfYXJncyA9IFB5RGlj dF9TaXplKF9fcHl4X2t3ZHMpOwotKyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKLSsgICAgICAg IGNhc2UgIDA6Ci0rICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3Rf R2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nfc2VsZikpICE9IDApKSBrd19hcmdzLS07 Ci0rICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0rICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAxOgotKyAgICAgICAgaWYgKGxpa2Vs eSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhf bl9zX2NhbGxiYWNrKSkgIT0gMCkpIGt3X2FyZ3MtLTsKLSsgICAgICAgIGVsc2UgewotKyAgICAg ICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgibXB2X2NhbGxiYWNrIiwgMSwgMiwgMiwg MSk7IF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MM19lcnJvcikKLSsgICAgICAgIH0KLSsgICAg ICB9Ci0rICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewotKyAgICAgICAgaWYgKHVu bGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFy Z25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAibXB2X2NhbGxiYWNrIikgPCAwKSkgX19QWVhf RVJSKDAsIDExNTcsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgIH0KLSsgICAgfSBlbHNlIGlmIChQ eVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9IDIpIHsKLSsgICAgICBnb3RvIF9fcHl4X0w1 X2FyZ3R1cGxlX2Vycm9yOwotKyAgICB9IGVsc2UgewotKyAgICAgIHZhbHVlc1swXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0rICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9H RVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKLSsgICAgfQotKyAgICBfX3B5eF92X3NlbGYgPSB2YWx1 ZXNbMF07Ci0rICAgIF9fcHl4X3ZfY2FsbGJhY2sgPSB2YWx1ZXNbMV07Ci0rICB9Ci0rICBnb3Rv IF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOwotKyAgX19weXhfTDVfYXJndHVwbGVf ZXJyb3I6OwotKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIm1wdl9jYWxsYmFjayIsIDEs IDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMTE1Nywg X19weXhfTDNfZXJyb3IpCi0rICBfX3B5eF9MM19lcnJvcjo7Ci0rICBfX1B5eF9BZGRUcmFjZWJh Y2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1RocmVhZC5tcHZfY2FsbGJhY2siLCBfX3B5 eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIE5VTEw7Ci0rICBfX3B5eF9MNF9hcmd1bWVu dF91bnBhY2tpbmdfZG9uZTo7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTBtcHZfY2FsbGJhY2soX19weXhfc2VsZiwgX19weXhf dl9zZWxmLCBfX3B5eF92X2NhbGxiYWNrKTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsK LSB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNSZW5kZXJDb250ZXh0XzE2ZnJlZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9SZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYpIHsKLStzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxi YWNrKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2FsbGJhY2spIHsKLSsgIFB5 T2JqZWN0ICpfX3B5eF92X2UgPSBOVUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwot ICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIGludCBfX3B5eF90XzE7Ci0tICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZnJlZSIsIDApOwotKyAgUHlPYmplY3QgKl9fcHl4X3Rf MSA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpf X3B5eF90XzMgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7Ci0rICBQeU9i amVjdCAqX19weXhfdF81ID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOwot KyAgaW50IF9fcHl4X3RfNzsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzggPSBOVUxMOwotKyAgUHlP YmplY3QgKl9fcHl4X3RfOSA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF8xMCA9IE5VTEw7 Ci0rICBQeU9iamVjdCAqX19weXhfdF8xMSA9IE5VTEw7Ci0rICBpbnQgX19weXhfbGluZW5vID0g MDsKLSsgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSsgIGludCBfX3B5eF9j bGluZW5vID0gMDsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJtcHZfY2FsbGJhY2si LCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTA2Ci0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1OAotICAqIAotLSAqICAgICBkZWYg ZnJlZShzZWxmKToKLS0gKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIHJldHVybgotLSAqICAgICAgICAgd2l0 aCBub2dpbDoKLSsgKiAgICAgZGVmIG1wdl9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6Ci0rICog ICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICAg ICBjYWxsYmFjaygpCi0rICogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICovCi0t ICBfX3B5eF90XzEgPSAoKCEoX19weXhfdl9zZWxmLT5pbml0ZWQgIT0gMCkpICE9IDApOwotLSAg aWYgKF9fcHl4X3RfMSkgewotKyAgewotKyAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUK LSsgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24KLSsgICAgX19QeXhfRXhjZXB0aW9uU2F2 ZSgmX19weXhfdF8xLCAmX19weXhfdF8yLCAmX19weXhfdF8zKTsKLSsgICAgX19QeXhfWEdPVFJF RihfX3B5eF90XzEpOwotKyAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fUHl4 X1hHT1RSRUYoX19weXhfdF8zKTsKLSsgICAgLyp0cnk6Ki8gewotIAotLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwNwotLSAqICAgICBkZWYgZnJlZShzZWxmKToKLS0g KiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKLS0gKiAgICAgICAgICAgICByZXR1cm4gICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAg ICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCi0rICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTkKLSsgKiAgICAgZGVmIG1wdl9jYWxs YmFjayhzZWxmLCBjYWxsYmFjayk6Ci0rICogICAgICAgICB0cnk6Ci0rICogICAgICAgICAgICAg Y2FsbGJhY2soKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBleGNl cHQgRXhjZXB0aW9uIGFzIGU6Ci0rICogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgicHlt cHYgZXJyb3IgZHVyaW5nIGNhbGxiYWNrOiAlc1xuIiAlIGUpCi0gICovCi0tICAgIF9fUHl4X1hE RUNSRUYoX19weXhfcik7Ci0tICAgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlf Tm9uZSk7Ci0tICAgIGdvdG8gX19weXhfTDA7Ci0rICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zf Y2FsbGJhY2spOwotKyAgICAgIF9fcHl4X3RfNSA9IF9fcHl4X3ZfY2FsbGJhY2s7IF9fcHl4X3Rf NiA9IE5VTEw7Ci0rICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQ eU1ldGhvZF9DaGVjayhfX3B5eF90XzUpKSkgewotKyAgICAgICAgX19weXhfdF82ID0gUHlNZXRo b2RfR0VUX1NFTEYoX19weXhfdF81KTsKLSsgICAgICAgIGlmIChsaWtlbHkoX19weXhfdF82KSkg ewotKyAgICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04o X19weXhfdF81KTsKLSsgICAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNik7Ci0rICAgICAg ICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0rICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQo X19weXhfdF81LCBmdW5jdGlvbik7Ci0rICAgICAgICB9Ci0rICAgICAgfQotKyAgICAgIF9fcHl4 X3RfNCA9IChfX3B5eF90XzYpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzUs IF9fcHl4X3RfNikgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF81KTsKLSsgICAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICAgICAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTE1OSwgX19weXhfTDNfZXJyb3IpCi0r ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0rICAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0rICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9f cHl4X3RfNCA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTA2Ci0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTgKLSAgKiAK LS0gKiAgICAgZGVmIGZyZWUoc2VsZik6Ci0tICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICByZXR1cm4KLS0g KiAgICAgICAgIHdpdGggbm9naWw6Ci0rICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2Fs bGJhY2spOgotKyAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0r ICogICAgICAgICAgICAgY2FsbGJhY2soKQotKyAqICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBh cyBlOgotICAqLwotLSAgfQotKyAgICB9Ci0rICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKLSsgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIg PSAwOwotKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICAg IGdvdG8gX19weXhfTDhfdHJ5X2VuZDsKLSsgICAgX19weXhfTDNfZXJyb3I6OwotKyAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLSsgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYp OyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExMDgKLS0gKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKLS0gKiAgICAgICAgICAgICBy ZXR1cm4KLS0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCi0t ICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCi0tICovCi0tICB7Ci0tICAgICAgI2lmZGVm IFdJVEhfVEhSRUFECi0tICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7Ci0tICAgICAgUHlfVU5C TE9DS19USFJFQURTCi0tICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwotLSAgICAgICNl bmRpZgotLSAgICAgIC8qdHJ5OiovIHsKLS0KLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTA5Ci0tICogICAgICAgICAgICAgcmV0dXJuCi0tICogICAgICAgICB3 aXRoIG5vZ2lsOgotLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYu X2N0eCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi5pbml0 ZWQgPSBGYWxzZQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2MAot KyAqICAgICAgICAgdHJ5OgotKyAqICAgICAgICAgICAgIGNhbGxiYWNrKCkKLSsgKiAgICAgICAg IGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInB5bXB2IGVycm9yIGR1cmluZyBjYWxsYmFj azogJXNcbiIgJSBlKQotICAqIAotICAqLwotLSAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X2Zy ZWUoX19weXhfdl9zZWxmLT5fY3R4KTsKLS0gICAgICB9Ci0rICAgIF9fcHl4X3RfNyA9IF9fUHl4 X1B5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoKChQeU9iamVjdCAqKSgmKChQeVR5cGVPYmplY3QqKVB5 RXhjX0V4Y2VwdGlvbilbMF0pKSk7Ci0rICAgIGlmIChfX3B5eF90XzcpIHsKLSsgICAgICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1RocmVhZC5tcHZfY2Fs bGJhY2siLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsg ICAgICBpZiAoX19QeXhfR2V0RXhjZXB0aW9uKCZfX3B5eF90XzQsICZfX3B5eF90XzUsICZfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNjAsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKLSsg ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSsgICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF81KTsKLSsgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSsgICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF81KTsKLSsgICAgICBfX3B5eF92X2UgPSBfX3B5eF90XzU7Ci0gCi0tICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDgKLS0gKiAgICAgICAgIGlmIG5v dCBzZWxmLmluaXRlZDoKLS0gKiAgICAgICAgICAgICByZXR1cm4KLS0gKiAgICAgICAgIHdpdGgg bm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBtcHZf cmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCi0tICogICAgICAgICBzZWxmLmluaXRlZCA9 IEZhbHNlCi0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNjEKLSsg KiAgICAgICAgICAgICBjYWxsYmFjaygpCi0rICogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFz IGU6Ci0rICogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgicHltcHYgZXJyb3IgZHVyaW5n IGNhbGxiYWNrOiAlc1xuIiAlIGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAK LSsgKiBjZGVmIHZvaWQgX2NfY2FsbGJhY2sodm9pZCogZCkgd2l0aCBnaWw6Ci0gICovCi0tICAg ICAgLypmaW5hbGx5OiovIHsKLS0gICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97Ci0tICAgICAgICAg ICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOwot LSAgICAgICAgICBQeV9CTE9DS19USFJFQURTCi0tICAgICAgICAgICNlbmRpZgotLSAgICAgICAg ICBnb3RvIF9fcHl4X0w2OwotKyAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhf dF85LCBfX3B5eF9uX3Nfc3lzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzkpKSBfX1BZWF9FUlIo MCwgMTE2MSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQotKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzkpOwotKyAgICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3RfOSwgX19weXhfbl9zX3N0ZGVycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xMCkpIF9f UFlYX0VSUigwLCAxMTYxLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCi0rICAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMTApOwotKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90 XzkgPSAwOwotKyAgICAgIF9fcHl4X3RfOSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19w eXhfdF8xMCwgX19weXhfbl9zX3dyaXRlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzkpKSBfX1BZ WF9FUlIoMCwgMTE2MSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQotKyAgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzkpOwotKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEwKTsgX19weXhfdF8x MCA9IDA7Ci0rICAgICAgX19weXhfdF8xMCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdFNhZmUoX19w eXhfa3Bfc19weW1wdl9lcnJvcl9kdXJpbmdfY2FsbGJhY2tfcywgX19weXhfdl9lKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEwKSkgX19QWVhfRVJSKDAsIDExNjEsIF9fcHl4X0w1X2V4Y2VwdF9l cnJvcikKLSsgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xMCk7Ci0rICAgICAgX19weXhfdF8x MSA9IE5VTEw7Ci0rICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlN ZXRob2RfQ2hlY2soX19weXhfdF85KSkpIHsKLSsgICAgICAgIF9fcHl4X3RfMTEgPSBQeU1ldGhv ZF9HRVRfU0VMRihfX3B5eF90XzkpOwotKyAgICAgICAgaWYgKGxpa2VseShfX3B5eF90XzExKSkg ewotKyAgICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04o X19weXhfdF85KTsKLSsgICAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMTEpOwotKyAgICAg ICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAgICAgICAgICBfX1B5eF9ERUNSRUZfU0VU KF9fcHl4X3RfOSwgZnVuY3Rpb24pOwotICAgICAgICAgfQotLSAgICAgICAgX19weXhfTDY6Owot ICAgICAgIH0KLS0gIH0KLSsgICAgICBfX3B5eF90XzggPSAoX19weXhfdF8xMSkgPyBfX1B5eF9Q eU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF85LCBfX3B5eF90XzExLCBfX3B5eF90XzEwKSA6IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF85LCBfX3B5eF90XzEwKTsKLSsgICAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90XzExID0gMDsKLSsgICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8xMCk7IF9fcHl4X3RfMTAgPSAwOwotKyAgICAgIGlmICh1bmxpa2VseSgh X19weXhfdF84KSkgX19QWVhfRVJSKDAsIDExNjEsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKLSsg ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF84KTsKLSsgICAgICBfX1B5eF9ERUNSRUYoX19weXhf dF85KTsgX19weXhfdF85ID0gMDsKLSsgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF84KTsgX19w eXhfdF84ID0gMDsKLSsgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9 IDA7Ci0rICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotKyAg ICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSsgICAgICBnb3Rv IF9fcHl4X0w0X2V4Y2VwdGlvbl9oYW5kbGVkOwotKyAgICB9Ci0rICAgIGdvdG8gX19weXhfTDVf ZXhjZXB0X2Vycm9yOwotKyAgICBfX3B5eF9MNV9leGNlcHRfZXJyb3I6OwotIAotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTAKLS0gKiAgICAgICAgIHdpdGggbm9naWw6 Ci0tICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X2ZyZWUoc2VsZi5fY3R4KQotLSAq ICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU4Ci0gICogCi0tICog ICAgIGRlZiBjbG9zZShzZWxmKToKLSsgKiAgICAgZGVmIG1wdl9jYWxsYmFjayhzZWxmLCBjYWxs YmFjayk6Ci0rICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgICAgICAgICBjYWxsYmFjaygpCi0rICogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFz IGU6Ci0gICovCi0tICBfX3B5eF92X3NlbGYtPmluaXRlZCA9IDA7Ci0rICAgIF9fUHl4X1hHSVZF UkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9f UHl4X1hHSVZFUkVGKF9fcHl4X3RfMyk7Ci0rICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9fcHl4 X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMpOwotKyAgICBnb3RvIF9fcHl4X0wxX2Vycm9yOwot KyAgICBfX3B5eF9MNF9leGNlcHRpb25faGFuZGxlZDo7Ci0rICAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3RfMSk7Ci0rICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3RfMyk7Ci0rICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9fcHl4X3RfMSwg X19weXhfdF8yLCBfX3B5eF90XzMpOwotKyAgICBfX3B5eF9MOF90cnlfZW5kOjsKLSsgIH0KLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTA1Ci0tICogICAgICAgICAg ICAgbXB2X3JlbmRlcl9jb250ZXh0X3JlcG9ydF9zd2FwKHNlbGYuX2N0eCkKLSsgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU3Ci0rICogICAgICAgICAgICAgc2VsZi5tcHZf Y2FsbGJhY2soc2VsZi5jYWxsYmFjaykgaWYgc2VsZi5jYWxsYmFjayBlbHNlIE5vbmUKLSAgKiAK LS0gKiAgICAgZGVmIGZyZWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKLS0gKiAgICAgICAgICAgICByZXR1cm4KLSsg KiAgICAgZGVmIG1wdl9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHRyeToKLSsgKiAgICAgICAgICAgICBjYWxsYmFjaygp Ci0gICovCi0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fcHl4X3IgPSBQeV9O b25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0rICBnb3RvIF9fcHl4X0wwOwotKyAgX19weXhf TDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotKyAgX19QeXhfWERFQ1JF RihfX3B5eF90XzUpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOwotKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzgpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzkpOwotKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzEwKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xMSk7Ci0rICBf X1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1RocmVhZC5tcHZf Y2FsbGJhY2siLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsK LSsgIF9fcHl4X3IgPSBOVUxMOwotICAgX19weXhfTDA6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5 eF92X2UpOwotICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTExMgotLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxz ZQotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTYzCi0rICogICAgICAgICAg ICAgc3lzLnN0ZGVyci53cml0ZSgicHltcHYgZXJyb3IgZHVyaW5nIGNhbGxiYWNrOiAlc1xuIiAl IGUpCi0gICogCi0tICogICAgIGRlZiBjbG9zZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgotLSAqICAgICAgICAgICAg IHJldHVybgotKyAqIGNkZWYgdm9pZCBfY19jYWxsYmFjayh2b2lkKiBkKSB3aXRoIGdpbDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBjZGVmIHVpbnQ2NF90IG5hbWUgPSA8 dWludDY0X3Q+ZAotKyAqICAgICBjYWxsYmFjayA9IF9jYWxsYmFja3MuZ2V0KG5hbWUpCi0gICov Ci0gCi0tLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTljbG9zZShQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KLS1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNv bnRleHRfMTljbG9zZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2Jq ZWN0ICp1bnVzZWQpIHsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLS0gIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiY2xvc2UgKHdy YXBwZXIpIiwgMCk7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF8xOGNsb3NlKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOwotLQotLSAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCi0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJl dHVybiBfX3B5eF9yOwotLX0KLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYpIHsKLS0gIFB5 T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLStzdGF0aWMgdm9pZCBfX3B5eF9mXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fY19jYWxsYmFjayh2b2lkICpfX3B5eF92X2QpIHsKLSsgIHVpbnQ2NF90IF9f cHl4X3ZfbmFtZTsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X2NhbGxiYWNrID0gTlVMTDsKLSAgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBpbnQgX19weXhfdF8xOwotLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoImNsb3NlIiwgMCk7Ci0rICBQeU9iamVjdCAqX19weXhfdF8xID0g TlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4 X3RfMyA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLSsgIGludCBfX3B5 eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotKyAg aW50IF9fcHl4X2NsaW5lbm8gPSAwOwotKyAgI2lmZGVmIFdJVEhfVEhSRUFECi0rICBQeUdJTFN0 YXRlX1NUQVRFIF9fcHl4X2dpbHN0YXRlX3NhdmUgPSBfX1B5eF9QeUdJTFN0YXRlX0Vuc3VyZSgp OwotKyAgI2VuZGlmCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2NfY2FsbGJhY2si LCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTEzCi0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2NAotICAqIAotLSAqICAgICBkZWYg Y2xvc2Uoc2VsZik6Ci0tICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICByZXR1cm4KLS0gKiAgICAgICAgIHdp dGggbm9naWw6Ci0rICogY2RlZiB2b2lkIF9jX2NhbGxiYWNrKHZvaWQqIGQpIHdpdGggZ2lsOgot KyAqICAgICBjZGVmIHVpbnQ2NF90IG5hbWUgPSA8dWludDY0X3Q+ZCAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgIGNhbGxiYWNrID0gX2NhbGxiYWNrcy5nZXQobmFtZSkKLSsg KiAgICAgY2FsbGJhY2suY2FsbCgpCi0gICovCi0tICBfX3B5eF90XzEgPSAoKCEoX19weXhfdl9z ZWxmLT5pbml0ZWQgIT0gMCkpICE9IDApOwotLSAgaWYgKF9fcHl4X3RfMSkgewotKyAgX19weXhf dl9uYW1lID0gKCh1aW50NjRfdClfX3B5eF92X2QpOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTExNAotLSAqICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0tICogICAg ICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6Ci0tICogICAgICAgICAgICAgcmV0dXJuICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHdpdGggbm9naWw6Ci0tICogICAgICAg ICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X2ZyZWUoc2VsZi5fY3R4KQotKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNjUKLSsgKiBjZGVmIHZvaWQgX2NfY2FsbGJhY2sodm9p ZCogZCkgd2l0aCBnaWw6Ci0rICogICAgIGNkZWYgdWludDY0X3QgbmFtZSA9IDx1aW50NjRfdD5k Ci0rICogICAgIGNhbGxiYWNrID0gX2NhbGxiYWNrcy5nZXQobmFtZSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqICAgICBjYWxsYmFjay5jYWxsKCkKLSAgKi8KLS0gICAgX19QeXhf WERFQ1JFRihfX3B5eF9yKTsKLS0gICAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQ eV9Ob25lKTsKLS0gICAgZ290byBfX3B5eF9MMDsKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2Jq ZWN0X0dldEF0dHJTdHIoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NhbGxiYWNrcywg X19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEx NjUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICBfX3B5 eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfbmFtZSk7IGlmICh1bmxp a2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDExNjUsIF9fcHl4X0wxX2Vycm9yKQotKyAg X19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0rICBfX3B5eF90XzQgPSBOVUxMOwotKyAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkp IHsKLSsgICAgX19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKLSsgICAg aWYgKGxpa2VseShfX3B5eF90XzQpKSB7Ci0rICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0rICAgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3RfNCk7Ci0rICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotKyAgICB9Ci0rICB9Ci0rICBfX3B5eF90XzEg PSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4 X3RfNCwgX19weXhfdF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBf X3B5eF90XzMpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwot KyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTY1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7Ci0rICBfX3B5eF92X2NhbGxiYWNrID0gX19weXhfdF8xOwotKyAgX19weXhfdF8x ID0gMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTMKLS0g KiAKLS0gKiAgICAgZGVmIGNsb3NlKHNlbGYpOgotLSAqICAgICAgICAgaWYgbm90IHNlbGYuaW5p dGVkOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcmV0dXJu Ci0tICogICAgICAgICB3aXRoIG5vZ2lsOgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExNjYKLSsgKiAgICAgY2RlZiB1aW50NjRfdCBuYW1lID0gPHVpbnQ2NF90PmQKLSsg KiAgICAgY2FsbGJhY2sgPSBfY2FsbGJhY2tzLmdldChuYW1lKQotKyAqICAgICBjYWxsYmFjay5j YWxsKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqLwotKyAgX19weXhfdF8yID0g X19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2NhbGxiYWNrLCBfX3B5eF9uX3NfY2Fs bCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExNjYsIF9fcHl4X0wx X2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICBfX3B5eF90XzMgPSBOVUxM OwotKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF8yKSkpIHsKLSsgICAgX19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhf dF8yKTsKLSsgICAgaWYgKGxpa2VseShfX3B5eF90XzMpKSB7Ci0rICAgICAgUHlPYmplY3QqIGZ1 bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0rICAgICAgX19QeXhf SU5DUkVGKF9fcHl4X3RfMyk7Ci0rICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAg ICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotKyAgICB9Ci0gICB9Ci0r ICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfdF8yLCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7 Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTY2LCBfX3B5eF9MMV9lcnJvcikKLSsg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9f cHl4X3RfMiA9IDA7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK LSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE1Ci0tICogICAgICAg ICBpZiBub3Qgc2VsZi5pbml0ZWQ6Ci0tICogICAgICAgICAgICAgcmV0dXJuCi0tICogICAgICAg ICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAg ICAgbXB2X3JlbmRlcl9jb250ZXh0X2ZyZWUoc2VsZi5fY3R4KQotLSAqICAgICAgICAgc2VsZi5p bml0ZWQgPSBGYWxzZQotLSAqLwotLSAgewotLSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAg ICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwotLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwotLSAg ICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKLS0gICAgICAjZW5kaWYKLS0gICAgICAvKnRy eToqLyB7Ci0tCi0tICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEx NgotLSAqICAgICAgICAgICAgIHJldHVybgotLSAqICAgICAgICAgd2l0aCBub2dpbDoKLS0gKiAg ICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKLS0gKiAK LS0gKi8KLS0gICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKF9fcHl4X3Zfc2VsZi0+X2N0 eCk7Ci0tICAgICAgfQotLQotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMTE1Ci0tICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6Ci0tICogICAgICAgICAgICAg cmV0dXJuCi0tICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X2ZyZWUoc2VsZi5fY3R4KQot LSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQotLSAqLwotLSAgICAgIC8qZmluYWxseToq LyB7Ci0tICAgICAgICAvKm5vcm1hbCBleGl0OiovewotLSAgICAgICAgICAjaWZkZWYgV0lUSF9U SFJFQUQKLS0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKLS0gICAgICAgICAgUHlf QkxPQ0tfVEhSRUFEUwotLSAgICAgICAgICAjZW5kaWYKLS0gICAgICAgICAgZ290byBfX3B5eF9M NjsKLS0gICAgICAgIH0KLS0gICAgICAgIF9fcHl4X0w2OjsKLS0gICAgICB9Ci0tICB9Ci0tCi0t ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExNwotLSAqICAgICAgICAgd2l0 aCBub2dpbDoKLS0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9j dHgpCi0tICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAKLS0gKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOgotLSAqLwotLSAg X19weXhfdl9zZWxmLT5pbml0ZWQgPSAwOwotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExMTIKLS0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKLS0gKiAKLS0g KiAgICAgZGVmIGNsb3NlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6Ci0tICogICAgICAgICAgICAgcmV0dXJuCi0tICov Ci0tCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X3IgPSBQeV9Ob25lOyBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0tICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9YR0lWRVJFRihf X3B5eF9yKTsKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9f cHl4X3I7Ci0tfQotLQotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE5Ci0t ICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCi0tICogCi0tICogICAgIGRlZiBfX2RlYWxs b2NfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2Vs Zi5jbG9zZSgpCi0tICogCi0tICovCi0tCi0tLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMg dm9pZCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzIxX19k ZWFsbG9jX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotLXN0YXRpYyB2b2lk IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjFfX2RlYWxs b2NfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVhbGxvY19fICh3cmFwcGVy KSIsIDApOwotLSAgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF8yMF9fZGVhbGxvY19fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOwotLQotLSAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCi0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS19Ci0tCi0tc3RhdGlj IHZvaWQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yMF9f ZGVhbGxvY19fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNv bnRleHQgKl9fcHl4X3Zfc2VsZikgewotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0g IFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5V TEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKLS0gIGludCBfX3B5eF9saW5lbm8g PSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVhbGxvY19f IiwgMCk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEyMAotLSAq IAotLSAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6Ci0tICogICAgICAgICBzZWxmLmNsb3Nl KCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIAotLSAqIGNkZWYgY2xhc3MgT3Bl bkdMUmVuZGVyQ29udGV4dChSZW5kZXJDb250ZXh0KToKLS0gKi8KLS0gIF9fcHl4X3RfMiA9IF9f UHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4 X25fc19jbG9zZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExMjAs IF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX3B5eF90 XzMgPSBOVUxMOwotLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRo b2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLS0gICAgX19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NF TEYoX19weXhfdF8yKTsKLS0gICAgaWYgKGxpa2VseShfX3B5eF90XzMpKSB7Ci0tICAgICAgUHlP YmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0tICAg ICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7Ci0tICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKLS0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotLSAgICB9 Ci0tICB9Ci0tICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxP bmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9f cHl4X3RfMik7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0t ICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTIwLCBfX3B5eF9MMV9l cnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE5Ci0t ICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCi0tICogCi0tICogICAgIGRlZiBfX2RlYWxs b2NfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2Vs Zi5jbG9zZSgpCi0tICogCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2 MwotKyAqICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInB5bXB2IGVycm9yIGR1cmluZyBj YWxsYmFjazogJXNcbiIgJSBlKQotKyAqIAotKyAqIGNkZWYgdm9pZCBfY19jYWxsYmFjayh2b2lk KiBkKSB3aXRoIGdpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBjZGVm IHVpbnQ2NF90IG5hbWUgPSA8dWludDY0X3Q+ZAotKyAqICAgICBjYWxsYmFjayA9IF9jYWxsYmFj a3MuZ2V0KG5hbWUpCi0gICovCi0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLUBAIC0y MTQxNSw3NzQgKzIwNTUwLDEyNDQgQEAgc3RhdGljIHZvaWQgX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yMF9fZGVhbGxvY19fKHN0cnVjdAotICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzEpOwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzMpOwotLSAgX19QeXhfV3JpdGVVbnJhaXNhYmxlKCJ2aWRjdXR0 ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dC5fX2RlYWxsb2NfXyIsIF9fcHl4X2NsaW5lbm8sIF9f cHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUsIDEsIDApOwotKyAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzQpOwotKyAgX19QeXhfV3JpdGVVbnJhaXNhYmxlKCJ2aWRjdXR0ZXIubGlicy5tcHYuX2Nf Y2FsbGJhY2siLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAx LCAwKTsKLSAgIF9fcHl4X0wwOjsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdl9jYWxsYmFjayk7 Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgICNpZmRlZiBXSVRIX1RIUkVB RAotKyAgX19QeXhfUHlHSUxTdGF0ZV9SZWxlYXNlKF9fcHl4X2dpbHN0YXRlX3NhdmUpOwotKyAg I2VuZGlmCi0gfQotIAotIC8qICIodHJlZSBmcmFnbWVudCkiOjEKLS0gKiBkZWYgX19yZWR1Y2Vf Y3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgcmFp c2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBv YmplY3QgZm9yIHBpY2tsaW5nIikKLS0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBf X3B5eF9zdGF0ZSk6Ci0rICogZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQoX19w eXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCi0r ICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotICAqLwotIAotIC8qIFB5dGhvbiB3cmFw cGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNSZW5kZXJDb250ZXh0XzIzX19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCi0tc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzIz X19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQ eU9iamVjdCAqdW51c2VkKSB7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN19fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQoUHlPYmplY3QgKl9f cHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8q cHJvdG8qLwotK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83X19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCA9IHsiX19weXhfdW5waWNrbGVf RW5kT2ZGaWxlUmVhY2hlZCIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtl eXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X19weXhfdW5waWNrbGVfRW5k T2ZGaWxlUmVhY2hlZCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9OwotK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfX3B5eF91bnBpY2tsZV9F bmRPZkZpbGVSZWFjaGVkKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJn cywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5 cGUgPSAwOwotKyAgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtOwotKyAgUHlPYmplY3QgKl9f cHl4X3ZfX19weXhfc3RhdGUgPSAwOwotKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0rICBjb25z dCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0rICBpbnQgX19weXhfY2xpbmVubyA9IDA7 Ci0gICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9u cwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fICh3cmFw cGVyKSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfMjJfX3JlZHVjZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKLSsgIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVk ICh3cmFwcGVyKSIsIDApOwotKyAgewotKyAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFy Z25hbWVzW10gPSB7Jl9fcHl4X25fc19weXhfdHlwZSwmX19weXhfbl9zX3B5eF9jaGVja3N1bSwm X19weXhfbl9zX3B5eF9zdGF0ZSwwfTsKLSsgICAgUHlPYmplY3QqIHZhbHVlc1szXSA9IHswLDAs MH07Ci0rICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgewotKyAgICAgIFB5X3NzaXplX3Qg a3dfYXJnczsKLSsgICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKTsKLSsgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0rICAgICAgICBj YXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOwotKyAg ICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKLSsgICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKLSsgICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMCk7Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNl ICAwOiBicmVhazsKLSsgICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJy b3I7Ci0rICAgICAgfQotKyAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsK LSsgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0rICAgICAgICBjYXNlICAwOgotKyAgICAgICAg aWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dk cywgX19weXhfbl9zX3B5eF90eXBlKSkgIT0gMCkpIGt3X2FyZ3MtLTsKLSsgICAgICAgIGVsc2Ug Z290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLSsgICAgICAgIENZVEhPTl9GQUxMVEhST1VH SDsKLSsgICAgICAgIGNhc2UgIDE6Ci0rICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBf X1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X2NoZWNrc3Vt KSkgIT0gMCkpIGt3X2FyZ3MtLTsKLSsgICAgICAgIGVsc2UgewotKyAgICAgICAgICBfX1B5eF9S YWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCIsIDEs IDMsIDMsIDEpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCi0rICAgICAgICB9Ci0r ICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAyOgotKyAgICAgICAg aWYgKGxpa2VseSgodmFsdWVzWzJdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dk cywgX19weXhfbl9zX3B5eF9zdGF0ZSkpICE9IDApKSBrd19hcmdzLS07Ci0rICAgICAgICBlbHNl IHsKLSsgICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3VucGlja2xl X0VuZE9mRmlsZVJlYWNoZWQiLCAxLCAzLCAzLCAyKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wz X2Vycm9yKQotKyAgICAgICAgfQotKyAgICAgIH0KLSsgICAgICBpZiAodW5saWtlbHkoa3dfYXJn cyA+IDApKSB7Ci0rICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdv cmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJf X3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkIikgPCAwKSkgX19QWVhfRVJSKDEsIDEsIF9f cHl4X0wzX2Vycm9yKQotKyAgICAgIH0KLSsgICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpF KF9fcHl4X2FyZ3MpICE9IDMpIHsKLSsgICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9y OwotKyAgICB9IGVsc2UgewotKyAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMCk7Ci0rICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9h cmdzLCAxKTsKLSsgICAgICB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3Ms IDIpOwotKyAgICB9Ci0rICAgIF9fcHl4X3ZfX19weXhfdHlwZSA9IHZhbHVlc1swXTsKLSsgICAg X19weXhfdl9fX3B5eF9jaGVja3N1bSA9IF9fUHl4X1B5SW50X0FzX2xvbmcodmFsdWVzWzFdKTsg aWYgKHVubGlrZWx5KChfX3B5eF92X19fcHl4X2NoZWNrc3VtID09IChsb25nKS0xKSAmJiBQeUVy cl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQotKyAgICBfX3B5 eF92X19fcHl4X3N0YXRlID0gdmFsdWVzWzJdOwotKyAgfQotKyAgZ290byBfX3B5eF9MNF9hcmd1 bWVudF91bnBhY2tpbmdfZG9uZTsKLSsgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKLSsgIF9f UHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVk IiwgMSwgMywgMywgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigxLCAx LCBfX3B5eF9MM19lcnJvcikKLSsgIF9fcHl4X0wzX2Vycm9yOjsKLSsgIF9fUHl4X0FkZFRyYWNl YmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQi LCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIE5VTEw7Ci0rICBfX3B5eF9MNF9h cmd1bWVudF91bnBhY2tpbmdfZG9uZTo7Ci0rICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzZfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkKF9fcHl4X3NlbGYs IF9fcHl4X3ZfX19weXhfdHlwZSwgX19weXhfdl9fX3B5eF9jaGVja3N1bSwgX19weXhfdl9fX3B5 eF9zdGF0ZSk7Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8y Ml9fcmVkdWNlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmKSB7Ci0rc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNl9fcHl4X3VucGlja2xlX0Vu ZE9mRmlsZVJlYWNoZWQoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9i amVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgewotKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf UGlja2xlRXJyb3IgPSAwOwotKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfcmVzdWx0ID0gMDsK LSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCi0tICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSsgIGludCBfX3B5eF90XzE7Ci0r ICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBO VUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhf dF81ID0gTlVMTDsKLSsgIGludCBfX3B5eF90XzY7Ci0gICBpbnQgX19weXhfbGluZW5vID0gMDsK LSAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAgIGludCBfX3B5eF9jbGlu ZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25f XyIsIDApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX0Vu ZE9mRmlsZVJlYWNoZWQiLCAwKTsKLSAKLS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjIKLS0gKiBk ZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigic2Vs Zi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGlu ZyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiBkZWYgX19zZXRzdGF0ZV9jeXRo b25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5f Y3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIp Ci0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0Ci0rICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1Bp Y2tsZUVycm9yCi0rICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotKyAqICAgICBpZiBf X3B5eF9jaGVja3N1bSAhPSAweDU2YmU5YjY6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNr bGVFcnJvcgotKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJs ZSBjaGVja3N1bXMgKCVzIHZzIDB4NTZiZTliNiA9IChlcnJvciwgcmVhc29uKSkiICUgX19weXhf Y2hlY2tzdW0pCi0gICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4 X2J1aWx0aW5fVHlwZUVycm9yLCBfX3B5eF90dXBsZV9fMTcsIE5VTEwpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAyLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOwotLSAgX19QeXhfUmFpc2UoX19weXhfdF8xLCAwLCAwLCAwKTsKLS0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgX19QWVhfRVJSKDEs IDIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gKChfX3B5eF92X19fcHl4X2NoZWNr c3VtICE9IDB4NTZiZTliNikgIT0gMCk7Ci0rICBpZiAoX19weXhfdF8xKSB7Ci0gCi0tICAvKiAi KHRyZWUgZnJhZ21lbnQpIjoxCi0tICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5f Y3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIp Ci0tICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgotKyAgICAv KiAiKHRyZWUgZnJhZ21lbnQpIjo1Ci0rICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAot KyAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweDU2YmU5YjY6Ci0rICogICAgICAgICBmcm9t IHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3Io IkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4NTZiZTliNiA9IChlcnJvciwgcmVhc29u KSkiICUgX19weXhfY2hlY2tzdW0pCi0rICogICAgIF9fcHl4X3Jlc3VsdCA9IEVuZE9mRmlsZVJl YWNoZWQuX19uZXdfXyhfX3B5eF90eXBlKQotICAqLwotKyAgICBfX3B5eF90XzIgPSBQeUxpc3Rf TmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fUHl4X0lOQ1JF RihfX3B5eF9uX3NfUGlja2xlRXJyb3IpOwotKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X25fc19Q aWNrbGVFcnJvcik7Ci0rICAgIFB5TGlzdF9TRVRfSVRFTShfX3B5eF90XzIsIDAsIF9fcHl4X25f c19QaWNrbGVFcnJvcik7Ci0rICAgIF9fcHl4X3RfMyA9IF9fUHl4X0ltcG9ydChfX3B5eF9uX3Nf cGlja2xlLCBfX3B5eF90XzIsIC0xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwot KyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgICAgX19weXhf dF8yID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzMsIF9fcHl4X25fc19QaWNrbGVFcnJvcik7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9y KQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3RfMik7Ci0rICAgIF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IgPSBfX3B5eF90XzI7Ci0rICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLwotLSAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwot LSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dC5f X3JlZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUpOwotLSAgX19weXhfciA9IE5VTEw7Ci0tICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsK LS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0t fQotLQotLS8qICIodHJlZSBmcmFnbWVudCkiOjMKLS0gKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18o c2VsZik6Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252 ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0tICogZGVmIF9fc2V0c3Rh dGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0 ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0rICAgIC8qICIodHJlZSBmcmFn bWVudCkiOjYKLSsgKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHg1NmJlOWI2OgotKyAqICAg ICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9y Ci0rICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNr c3VtcyAoJXMgdnMgMHg1NmJlOWI2ID0gKGVycm9yLCByZWFzb24pKSIgJSBfX3B5eF9jaGVja3N1 bSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBfX3B5eF9yZXN1bHQgPSBF bmRPZkZpbGVSZWFjaGVkLl9fbmV3X18oX19weXhfdHlwZSkKLSsgKiAgICAgaWYgX19weXhfc3Rh dGUgaXMgbm90IE5vbmU6Ci0gICovCi0rICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21f bG9uZyhfX3B5eF92X19fcHl4X2NoZWNrc3VtKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzIpOwotKyAgICBfX3B5eF90XzQgPSBfX1B5eF9QeVN0cmluZ19Gb3JtYXQoX19weXhfa3Bfc19J bmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHg1NiwgX19weXhfdF8yKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzQpOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhf dF8yID0gMDsKLSsgICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IpOwot KyAgICBfX3B5eF90XzIgPSBfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yOyBfX3B5eF90XzUgPSBO VUxMOwotKyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9k X0NoZWNrKF9fcHl4X3RfMikpKSB7Ci0rICAgICAgX19weXhfdF81ID0gUHlNZXRob2RfR0VUX1NF TEYoX19weXhfdF8yKTsKLSsgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfNSkpIHsKLSsgICAgICAg IFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwot KyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7Ci0rICAgICAgICBfX1B5eF9JTkNSRUYo ZnVuY3Rpb24pOwotKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9u KTsKLSsgICAgICB9Ci0rICAgIH0KLSsgICAgX19weXhfdF8zID0gKF9fcHl4X3RfNSkgPyBfX1B5 eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzUsIF9fcHl4X3RfNCkgOiBf X1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF80KTsKLSsgICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotKyAgICBfX1B5eF9ERUNSRUYo X19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzMpOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsg ICAgX19QeXhfUmFpc2UoX19weXhfdF8zLCAwLCAwLCAwKTsKLSsgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rICAgIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9l cnJvcikKLSAKLS0vKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yNV9fc2V0c3RhdGVfY3l0 aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3Rh dGUpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjVfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7Ci0tICBQeU9iamVj dCAqX19weXhfciA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7 Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29u dGV4dF8yNF9fc2V0c3RhdGVfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9f cHl4X3ZfX19weXhfc3RhdGUpKTsKLSsgICAgLyogIih0cmVlIGZyYWdtZW50KSI6NAotKyAqICAg ICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgotKyAqICAgICBjZGVmIG9iamVjdCBfX3B5 eF9yZXN1bHQKLSsgKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHg1NmJlOWI2OiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlj a2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKLSsgKiAgICAgICAgIHJhaXNlIF9fcHl4X1Bp Y2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDU2YmU5YjYgPSAoZXJy b3IsIHJlYXNvbikpIiAlIF9fcHl4X2NoZWNrc3VtKQotKyAqLwotKyAgfQotIAotLSAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCi0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0g IHJldHVybiBfX3B5eF9yOwotLX0KLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjcKLSsgKiAgICAg ICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgot KyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1 bXMgKCVzIHZzIDB4NTZiZTliNiA9IChlcnJvciwgcmVhc29uKSkiICUgX19weXhfY2hlY2tzdW0p Ci0rICogICAgIF9fcHl4X3Jlc3VsdCA9IEVuZE9mRmlsZVJlYWNoZWQuX19uZXdfXyhfX3B5eF90 eXBlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGlmIF9fcHl4X3N0YXRl IGlzIG5vdCBOb25lOgotKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hl ZF9fc2V0X3N0YXRlKDxFbmRPZkZpbGVSZWFjaGVkPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRl KQotKyAqLwotKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2Jq ZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQp LCBfX3B5eF9uX3NfbmV3KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwg NywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgIF9fcHl4 X3RfNCA9IE5VTEw7Ci0rICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotKyAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRf U0VMRihfX3B5eF90XzIpOwotKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKLSsgICAgICBQ eU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKLSsg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsKLSsgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rp b24pOwotKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0rICAg IH0KLSsgIH0KLSsgIF9fcHl4X3RfMyA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2Fs bDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF92X19fcHl4X3R5cGUpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfX19weXhfdHlwZSk7Ci0rICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dP VFJFRihfX3B5eF90XzMpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9 IDA7Ci0rICBfX3B5eF92X19fcHl4X3Jlc3VsdCA9IF9fcHl4X3RfMzsKLSsgIF9fcHl4X3RfMyA9 IDA7Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNSZW5kZXJDb250ZXh0XzI0X19zZXRzdGF0ZV9jeXRob25fXyhDWVRIT05fVU5VU0VEIHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4X3Zf c2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgewotLSAg UHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK LS0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7 Ci0tICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0tICBpbnQgX19weXhfY2xp bmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRo b25fXyIsIDApOwotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6OAotKyAqICAgICAgICAgcmFpc2Ug X19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4NTZiZTli NiA9IChlcnJvciwgcmVhc29uKSkiICUgX19weXhfY2hlY2tzdW0pCi0rICogICAgIF9fcHl4X3Jl c3VsdCA9IEVuZE9mRmlsZVJlYWNoZWQuX19uZXdfXyhfX3B5eF90eXBlKQotKyAqICAgICBpZiBf X3B5eF9zdGF0ZSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKDxFbmRP ZkZpbGVSZWFjaGVkPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQotKyAqICAgICByZXR1cm4g X19weXhfcmVzdWx0Ci0rICovCi0rICBfX3B5eF90XzEgPSAoX19weXhfdl9fX3B5eF9zdGF0ZSAh PSBQeV9Ob25lKTsKLSsgIF9fcHl4X3RfNiA9IChfX3B5eF90XzEgIT0gMCk7Ci0rICBpZiAoX19w eXhfdF82KSB7Ci0gCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0Ci0tICogICAgIHJhaXNlIFR5 cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0 IGZvciBwaWNrbGluZyIpCi0tICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhf c3RhdGUpOgotLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29u dmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjkKLSsgKiAgICAgX19weXhf cmVzdWx0ID0gRW5kT2ZGaWxlUmVhY2hlZC5fX25ld19fKF9fcHl4X3R5cGUpCi0rICogICAgIGlm IF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgotKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfRW5k T2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKDxFbmRPZkZpbGVSZWFjaGVkPiBfX3B5eF9yZXN1bHQs IF9fcHl4X3N0YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIHJldHVy biBfX3B5eF9yZXN1bHQKLSsgKiBjZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRf X3NldF9zdGF0ZShFbmRPZkZpbGVSZWFjaGVkIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3Rh dGUpOgotICAqLwotLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF9idWls dGluX1R5cGVFcnJvciwgX19weXhfdHVwbGVfXzE4LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKLS0gIF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7Ci0tICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLS0gIF9fUFlYX0VSUigxLCA0LCBf X3B5eF9MMV9lcnJvcikKLSsgICAgaWYgKCEobGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5 eF92X19fcHl4X3N0YXRlKSl8fCgoX19weXhfdl9fX3B5eF9zdGF0ZSkgPT0gUHlfTm9uZSl8fChQ eUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiRXhwZWN0ZWQgJS4xNnMsIGdvdCAlLjIwMHMi LCAidHVwbGUiLCBQeV9UWVBFKF9fcHl4X3ZfX19weXhfc3RhdGUpLT50cF9uYW1lKSwgMCkpKSBf X1BZWF9FUlIoMSwgOSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMyA9IF9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3Nl dF9zdGF0ZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmls ZVJlYWNoZWQgKilfX3B5eF92X19fcHl4X3Jlc3VsdCksICgoUHlPYmplY3QqKV9fcHl4X3ZfX19w eXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgOSwgX19w eXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSAKLS0gIC8qICIodHJlZSBmcmFnbWVu dCkiOjMKLS0gKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6Ci0tICogICAgIHJhaXNlIFR5 cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0 IGZvciBwaWNrbGluZyIpCi0tICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhf c3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIHJhaXNlIFR5cGVF cnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZv ciBwaWNrbGluZyIpCi0rICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKLSsgKiAgICAgICAgIHJh aXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDU2 YmU5YjYgPSAoZXJyb3IsIHJlYXNvbikpIiAlIF9fcHl4X2NoZWNrc3VtKQotKyAqICAgICBfX3B5 eF9yZXN1bHQgPSBFbmRPZkZpbGVSZWFjaGVkLl9fbmV3X18oX19weXhfdHlwZSkKLSsgKiAgICAg aWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZSg8 RW5kT2ZGaWxlUmVhY2hlZD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLSsgKiAgICAgcmV0 dXJuIF9fcHl4X3Jlc3VsdAotKyAqLwotKyAgfQotKwotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6 MTAKLSsgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6Ci0rICogICAgICAgICBfX3B5 eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoPEVuZE9mRmlsZVJlYWNoZWQ+ IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCi0rICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIGNkZWYgX19weXhfdW5waWNrbGVfRW5k T2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKEVuZE9mRmlsZVJlYWNoZWQgX19weXhfcmVzdWx0LCB0 dXBsZSBfX3B5eF9zdGF0ZSk6Ci0rICogICAgIF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0 YXRlWzBdOyBfX3B5eF9yZXN1bHQucmVhc29uID0gX19weXhfc3RhdGVbMV0KLSsgKi8KLSsgIF9f UHl4X1hERUNSRUYoX19weXhfcik7Ci0rICBfX1B5eF9JTkNSRUYoX19weXhfdl9fX3B5eF9yZXN1 bHQpOwotKyAgX19weXhfciA9IF9fcHl4X3ZfX19weXhfcmVzdWx0OwotKyAgZ290byBfX3B5eF9M MDsKLSsKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjEKLSsgKiBkZWYgX19weXhfdW5waWNrbGVf RW5kT2ZGaWxlUmVhY2hlZChfX3B5eF90eXBlLCBsb25nIF9fcHl4X2NoZWNrc3VtLCBfX3B5eF9z dGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgY2RlZiBvYmplY3Qg X19weXhfUGlja2xlRXJyb3IKLSsgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0Ci0gICov Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fcHl4X0wxX2Vycm9yOjsKLS0g IF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0 dGVyLmxpYnMubXB2LlJlbmRlckNvbnRleHQuX19zZXRzdGF0ZV9jeXRob25fXyIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19QeXhfWERFQ1JFRihf X3B5eF90XzIpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOwotKyAgX19QeXhfWERFQ1JF RihfX3B5eF90XzQpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOwotKyAgX19QeXhfQWRk VHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVh Y2hlZCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotICAg X19weXhfciA9IE5VTEw7Ci0rICBfX3B5eF9MMDo7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zf X19weXhfUGlja2xlRXJyb3IpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3Vs dCk7Ci0gICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTIzCi0tICogCi0tICogY2RlZiBjbGFzcyBPcGVuR0xSZW5kZXJD b250ZXh0KFJlbmRlckNvbnRleHQpOgotLSAqICAgICBkZWYgX19pbml0X18oc2VsZiwgbXB2LCAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAgICBnZXRfcHJv Y19hZGRyZXNzLAotLSAqICAgICAgICAgICAgICAgICAgKmFyZ3MsICoqa3dhcmdzKToKLSsvKiAi KHRyZWUgZnJhZ21lbnQpIjoxMQotKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxl UmVhY2hlZF9fc2V0X3N0YXRlKDxFbmRPZkZpbGVSZWFjaGVkPiBfX3B5eF9yZXN1bHQsIF9fcHl4 X3N0YXRlKQotKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0rICogY2RlZiBfX3B5eF91bnBp Y2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoRW5kT2ZGaWxlUmVhY2hlZCBfX3B5eF9y ZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAqICAgICBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0 LnJlYXNvbiA9IF9fcHl4X3N0YXRlWzFdCi0rICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAy IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6Ci0gICovCi0gCi0tLyogUHl0 aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xOU9wZW5HTFJlbmRlckNvbnRleHRfMV9faW5pdF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLwot LXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVy Q29udGV4dF8xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7Ci0tICBQeU9iamVjdCAqX19weXhfdl9tcHYg PSAwOwotLSAgUHlPYmplY3QgKl9fcHl4X3ZfZ2V0X3Byb2NfYWRkcmVzcyA9IDA7Ci0tICBQeU9i amVjdCAqX19weXhfdl9hcmdzID0gMDsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X2t3YXJncyA9IDA7 Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91 bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqX19weXhfdl9fX3B5eF9yZXN1bHQs IFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7Ci0rICBQeU9iamVjdCAqX19weXhfciA9 IE5VTEw7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgUHlPYmplY3QgKl9fcHl4 X3RfMSA9IE5VTEw7Ci0rICBpbnQgX19weXhfdF8yOwotKyAgUHlfc3NpemVfdCBfX3B5eF90XzM7 Ci0rICBpbnQgX19weXhfdF80OwotKyAgaW50IF9fcHl4X3RfNTsKLSsgIFB5T2JqZWN0ICpfX3B5 eF90XzYgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7Ci0rICBQeU9iamVj dCAqX19weXhfdF84ID0gTlVMTDsKLSAgIGludCBfX3B5eF9saW5lbm8gPSAwOwotICAgY29uc3Qg Y2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwot LSAgaW50IF9fcHl4X3I7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhf dl9rd2FyZ3MgPSBQeURpY3RfTmV3KCk7IGlmICh1bmxpa2VseSghX19weXhfdl9rd2FyZ3MpKSBy ZXR1cm4gLTE7Ci0tICBfX1B5eF9HT1RSRUYoX19weXhfdl9rd2FyZ3MpOwotLSAgaWYgKFB5VHVw bGVfR0VUX1NJWkUoX19weXhfYXJncykgPiAyKSB7Ci0tICAgIF9fcHl4X3ZfYXJncyA9IFB5VHVw bGVfR2V0U2xpY2UoX19weXhfYXJncywgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7 Ci0tICAgIGlmICh1bmxpa2VseSghX19weXhfdl9hcmdzKSkgewotLSAgICAgIF9fUHl4X0RFQ1JF RihfX3B5eF92X2t3YXJncyk7IF9fcHl4X3Zfa3dhcmdzID0gMDsKLS0gICAgICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKLS0gICAgICByZXR1cm4gLTE7Ci0tICAgIH0KLS0gICAgX19Q eXhfR09UUkVGKF9fcHl4X3ZfYXJncyk7Ci0tICB9IGVsc2UgewotLSAgICBfX3B5eF92X2FyZ3Mg PSBfX3B5eF9lbXB0eV90dXBsZTsgX19QeXhfSU5DUkVGKF9fcHl4X2VtcHR5X3R1cGxlKTsKLSsg IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFj aGVkX19zZXRfc3RhdGUiLCAwKTsKLSsKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjEyCi0rICog ICAgIHJldHVybiBfX3B5eF9yZXN1bHQKLSsgKiBjZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmls ZVJlYWNoZWRfX3NldF9zdGF0ZShFbmRPZkZpbGVSZWFjaGVkIF9fcHl4X3Jlc3VsdCwgdHVwbGUg X19weXhfc3RhdGUpOgotKyAqICAgICBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9zdGF0ZVsw XTsgX19weXhfcmVzdWx0LnJlYXNvbiA9IF9fcHl4X3N0YXRlWzFdICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIo X19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKLSsgKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2Rp Y3RfXy51cGRhdGUoX19weXhfc3RhdGVbMl0pCi0rICovCi0rICBpZiAodW5saWtlbHkoX19weXhf dl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgewotKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNf VHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsKLSsg ICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKLSAgIH0KLS0gIHsKLS0gICAgc3Rh dGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfbXB2LCZfX3B5 eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcywwfTsKLS0gICAgUHlPYmplY3QqIHZhbHVlc1syXSA9IHsw LDB9OwotLSAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKLS0gICAgICBQeV9zc2l6ZV90 IGt3X2FyZ3M7Ci0tICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VU X1NJWkUoX19weXhfYXJncyk7Ci0tICAgICAgc3dpdGNoIChwb3NfYXJncykgewotLSAgICAgICAg ZGVmYXVsdDoKLS0gICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0o X19weXhfYXJncywgMSk7Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBj YXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOwotLSAg ICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgMDogYnJlYWs7Ci0tICAg ICAgfQotLSAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKLS0gICAgICBz d2l0Y2ggKHBvc19hcmdzKSB7Ci0tICAgICAgICBjYXNlICAwOgotLSAgICAgICAgaWYgKGxpa2Vs eSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhf bl9zX21wdikpICE9IDApKSBrd19hcmdzLS07Ci0tICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVf YXJndHVwbGVfZXJyb3I7Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBj YXNlICAxOgotLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dl dEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2dldF9wcm9jX2FkZHJlc3MpKSAhPSAwKSkg a3dfYXJncy0tOwotLSAgICAgICAgZWxzZSB7Ci0tICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVw bGVJbnZhbGlkKCJfX2luaXRfXyIsIDAsIDIsIDIsIDEpOyBfX1BZWF9FUlIoMCwgMTEyMywgX19w eXhfTDNfZXJyb3IpCi0tICAgICAgICB9Ci0tICAgICAgfQotKyAgX19weXhfdF8xID0gX19QeXhf R2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAwLCBsb25nLCAxLCBfX1B5eF9Q eUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK LSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF92X19f cHl4X3Jlc3VsdC0+ZXJyb3IpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0 LT5lcnJvcik7Ci0rICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+ZXJyb3IgPSBfX3B5eF90XzE7Ci0r ICBfX3B5eF90XzEgPSAwOwotKyAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0g UHlfTm9uZSkpIHsKLSsgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25l VHlwZScgb2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7Ci0rICAgIF9fUFlYX0VSUigxLCAx MiwgX19weXhfTDFfZXJyb3IpCi0rICB9Ci0rICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50 X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDEsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21f bG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEy LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgX19QeXhf R0lWRVJFRihfX3B5eF90XzEpOwotKyAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0 LT5yZWFzb24pOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5yZWFzb24p OwotKyAgX19weXhfdl9fX3B5eF9yZXN1bHQtPnJlYXNvbiA9IF9fcHl4X3RfMTsKLSsgIF9fcHl4 X3RfMSA9IDA7Ci0rCi0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMwotKyAqIGNkZWYgX19weXhf dW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKEVuZE9mRmlsZVJlYWNoZWQgX19w eXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6Ci0rICogICAgIF9fcHl4X3Jlc3VsdC5lcnJv ciA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQucmVhc29uID0gX19weXhfc3RhdGVbMV0K LSsgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0 LCAnX19kaWN0X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg X19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVsyXSkKLSsgKi8KLSsgIGlm ICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7Ci0rICAgIFB5RXJy X1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJvYmplY3Qgb2YgdHlwZSAnTm9uZVR5cGUnIGhh cyBubyBsZW4oKSIpOwotKyAgICBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQotKyAg fQotKyAgX19weXhfdF8zID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF92X19fcHl4X3N0YXRlKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfMyA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDEs IDEzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNCA9ICgoX19weXhfdF8zID4gMikgIT0g MCk7Ci0rICBpZiAoX19weXhfdF80KSB7Ci0rICB9IGVsc2UgewotKyAgICBfX3B5eF90XzIgPSBf X3B5eF90XzQ7Ci0rICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOwotKyAgfQotKyAg X19weXhfdF80ID0gX19QeXhfSGFzQXR0cigoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9yZXN1 bHQpLCBfX3B5eF9uX3NfZGljdCk7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPT0gKChpbnQpLTEp KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNSA9IChfX3B5 eF90XzQgIT0gMCk7Ci0rICBfX3B5eF90XzIgPSBfX3B5eF90XzU7Ci0rICBfX3B5eF9MNF9ib29s X2Jpbm9wX2RvbmU6OwotKyAgaWYgKF9fcHl4X3RfMikgewotKwotKyAgICAvKiAiKHRyZWUgZnJh Z21lbnQpIjoxNAotKyAqICAgICBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9zdGF0ZVswXTsg X19weXhfcmVzdWx0LnJlYXNvbiA9IF9fcHl4X3N0YXRlWzFdCi0rICogICAgIGlmIGxlbihfX3B5 eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6Ci0rICog ICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzJdKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICovCi0rICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5 T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfcmVzdWx0KSwgX19w eXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxNCwg X19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgICBfX3B5 eF90XzcgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNiwgX19weXhfbl9zX3Vw ZGF0ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0rICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotKyAgICBpZiAodW5saWtlbHkoX19weXhfdl9f X3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgewotKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U eXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOwotKyAg ICAgIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCi0rICAgIH0KLSsgICAgX19weXhf dF82ID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAyLCBsb25n LCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOwotKyAgICBfX3B5eF90XzggPSBOVUxMOwotKyAgICBpZiAoQ1lUSE9OX1VO UEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzcpKSkgewotKyAg ICAgIF9fcHl4X3RfOCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNyk7Ci0rICAgICAgaWYg KGxpa2VseShfX3B5eF90XzgpKSB7Ci0rICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1l dGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF83KTsKLSsgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzgpOwotKyAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAgICAgIF9fUHl4 X0RFQ1JFRl9TRVQoX19weXhfdF83LCBmdW5jdGlvbik7Ci0rICAgICAgfQotKyAgICB9Ci0rICAg IF9fcHl4X3RfMSA9IChfX3B5eF90XzgpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4 X3RfNywgX19weXhfdF84LCBfX3B5eF90XzYpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzcsIF9fcHl4X3RfNik7Ci0rICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsgX19w eXhfdF84ID0gMDsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7 Ci0rICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKLSsKLSsgICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKLSsgKiBj ZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZShFbmRPZkZpbGVS ZWFjaGVkIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgotKyAqICAgICBfX3B5eF9y ZXN1bHQuZXJyb3IgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LnJlYXNvbiA9IF9fcHl4 X3N0YXRlWzFdCi0rICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9f cHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbMl0pCi0r ICovCi0rICB9Ci0rCi0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMQotKyAqICAgICAgICAgX19w eXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKDxFbmRPZkZpbGVSZWFjaGVk PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQotKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0 Ci0rICogY2RlZiBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoRW5k T2ZGaWxlUmVhY2hlZCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9z dGF0ZVswXTsgX19weXhfcmVzdWx0LnJlYXNvbiA9IF9fcHl4X3N0YXRlWzFdCi0rICogICAgIGlm IGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9f Jyk6Ci0rICovCi0rCi0rICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSsgIF9fcHl4X3IgPSBQ eV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0rICBnb3RvIF9fcHl4X0wwOwotKyAgX19w eXhfTDFfZXJyb3I6OwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzYpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOwotKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzgpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGli cy5tcHYuX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlIiwgX19weXhf Y2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX3B5eF9yID0gMDsK LSsgIF9fcHl4X0wwOjsKLSsgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotKyAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7Ci0rICByZXR1cm4gX19weXhfcjsKLSt9Ci0rCi0rLyogIih0 cmVlIGZyYWdtZW50KSI6MQotKyAqIGRlZiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlKF9fcHl4 X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgotKyAq ICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKLSsgKi8KLSsKLSsvKiBQeXRob24gd3JhcHBl ciAqLwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2Xzlf X3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAq X19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KLStzdGF0aWMgUHlN ZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOV9fcHl4X3VucGlja2xl X0xvZ01lc3NhZ2UgPSB7Il9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UiLCAoUHlDRnVuY3Rpb24p KHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfOV9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdP UkRTLCAwfTsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl85X19weXhfdW5waWNrbGVfTG9nTWVzc2FnZShQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7Ci0rICBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF90eXBlID0gMDsKLSsgIGxvbmcgX19weXhfdl9fX3B5eF9jaGVja3N1bTsKLSsg IFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlID0gMDsKLSsgIGludCBfX3B5eF9saW5lbm8g PSAwOwotKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotKyAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOwotKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotKyAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBp Y2tsZV9Mb2dNZXNzYWdlICh3cmFwcGVyKSIsIDApOwotKyAgewotKyAgICBzdGF0aWMgUHlPYmpl Y3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19weXhfdHlwZSwmX19weXhfbl9z X3B5eF9jaGVja3N1bSwmX19weXhfbl9zX3B5eF9zdGF0ZSwwfTsKLSsgICAgUHlPYmplY3QqIHZh bHVlc1szXSA9IHswLDAsMH07Ci0rICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgewotKyAg ICAgIFB5X3NzaXplX3Qga3dfYXJnczsKLSsgICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdz ID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKLSsgICAgICBzd2l0Y2ggKHBvc19hcmdz KSB7Ci0rICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4 X2FyZ3MsIDIpOwotKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAgY2FzZSAg MjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKLSsgICAgICAg IENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 Ci0rICAgICAgICBjYXNlICAwOiBicmVhazsKLSsgICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhf TDVfYXJndHVwbGVfZXJyb3I7Ci0rICAgICAgfQotKyAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6 ZShfX3B5eF9rd2RzKTsKLSsgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0rICAgICAgICBjYXNl ICAwOgotKyAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0 ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF90eXBlKSkgIT0gMCkpIGt3X2FyZ3MtLTsK LSsgICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLSsgICAgICAgIENZ VEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgIGNhc2UgIDE6Ci0rICAgICAgICBpZiAobGlrZWx5 KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9u X3NfcHl4X2NoZWNrc3VtKSkgIT0gMCkpIGt3X2FyZ3MtLTsKLSsgICAgICAgIGVsc2UgewotKyAg ICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfTG9nTWVz c2FnZSIsIDEsIDMsIDMsIDEpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCi0rICAg ICAgICB9Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAyOgot KyAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzJdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIo X19weXhfa3dkcywgX19weXhfbl9zX3B5eF9zdGF0ZSkpICE9IDApKSBrd19hcmdzLS07Ci0rICAg ICAgICBlbHNlIHsKLSsgICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4 X3VucGlja2xlX0xvZ01lc3NhZ2UiLCAxLCAzLCAzLCAyKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4 X0wzX2Vycm9yKQotKyAgICAgICAgfQotKyAgICAgIH0KLSAgICAgICBpZiAodW5saWtlbHkoa3df YXJncyA+IDApKSB7Ci0tICAgICAgICBjb25zdCBQeV9zc2l6ZV90IHVzZWRfcG9zX2FyZ3MgPSAo cG9zX2FyZ3MgPCAyKSA/IHBvc19hcmdzIDogMjsKLS0gICAgICAgIGlmICh1bmxpa2VseShfX1B5 eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgX19w eXhfdl9rd2FyZ3MsIHZhbHVlcywgdXNlZF9wb3NfYXJncywgIl9faW5pdF9fIikgPCAwKSkgX19Q WVhfRVJSKDAsIDExMjMsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgICAgaWYgKHVubGlrZWx5KF9f UHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAw LCB2YWx1ZXMsIHBvc19hcmdzLCAiX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSIpIDwgMCkpIF9f UFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKLSAgICAgICB9Ci0tICAgIH0gZWxzZSBpZiAo UHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSA8IDIpIHsKLSsgICAgfSBlbHNlIGlmIChQeVR1 cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9IDMpIHsKLSAgICAgICBnb3RvIF9fcHl4X0w1X2Fy Z3R1cGxlX2Vycm9yOwotICAgICB9IGVsc2UgewotICAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVf R0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0gICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRf SVRFTShfX3B5eF9hcmdzLCAxKTsKLSsgICAgICB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVN KF9fcHl4X2FyZ3MsIDIpOwotICAgICB9Ci0tICAgIF9fcHl4X3ZfbXB2ID0gdmFsdWVzWzBdOwot LSAgICBfX3B5eF92X2dldF9wcm9jX2FkZHJlc3MgPSB2YWx1ZXNbMV07Ci0rICAgIF9fcHl4X3Zf X19weXhfdHlwZSA9IHZhbHVlc1swXTsKLSsgICAgX19weXhfdl9fX3B5eF9jaGVja3N1bSA9IF9f UHl4X1B5SW50X0FzX2xvbmcodmFsdWVzWzFdKTsgaWYgKHVubGlrZWx5KChfX3B5eF92X19fcHl4 X2NoZWNrc3VtID09IChsb25nKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDEs IDEsIF9fcHl4X0wzX2Vycm9yKQotKyAgICBfX3B5eF92X19fcHl4X3N0YXRlID0gdmFsdWVzWzJd OwotICAgfQotICAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKLSAgIF9f cHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKLS0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJf X2luaXRfXyIsIDAsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9F UlIoMCwgMTEyMywgX19weXhfTDNfZXJyb3IpCi0rICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxp ZCgiX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSIsIDEsIDMsIDMsIFB5VHVwbGVfR0VUX1NJWkUo X19weXhfYXJncykpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCi0gICBfX3B5eF9M M19lcnJvcjo7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdl9hcmdzKTsgX19weXhfdl9hcmdzID0g MDsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X2t3YXJncyk7IF9fcHl4X3Zfa3dhcmdzID0gMDsK LS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Lk9wZW5HTFJlbmRlckNv bnRleHQuX19pbml0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3Vu cGlja2xlX0xvZ01lc3NhZ2UiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2Zp bGVuYW1lKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIC0x OwotKyAgcmV0dXJuIE5VTEw7Ci0gICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7 Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVu ZGVyQ29udGV4dF9fX2luaXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X09wZW5HTFJlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X21wdiwgX19w eXhfdl9nZXRfcHJvY19hZGRyZXNzLCBfX3B5eF92X2FyZ3MsIF9fcHl4X3Zfa3dhcmdzKTsKLSsg IF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOF9fcHl4X3VucGlja2xl X0xvZ01lc3NhZ2UoX19weXhfc2VsZiwgX19weXhfdl9fX3B5eF90eXBlLCBfX3B5eF92X19fcHl4 X2NoZWNrc3VtLCBfX3B5eF92X19fcHl4X3N0YXRlKTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2FyZ3MpOwotLSAgX19QeXhfWERFQ1JF RihfX3B5eF92X2t3YXJncyk7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAg IHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xOU9wZW5HTFJlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfdl9tcHYsIFB5T2JqZWN0ICpfX3B5eF92X2dldF9wcm9jX2FkZHJl c3MsIFB5T2JqZWN0ICpfX3B5eF92X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF92X2t3YXJncykgewot LSAgUHlPYmplY3QgKl9fcHl4X3ZfaW5pdF9wYXJhbXMgPSBOVUxMOwotLSAgaW50IF9fcHl4X3I7 Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOF9fcHl4 X3VucGlja2xlX0xvZ01lc3NhZ2UoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3Vt LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgewotKyAgUHlPYmplY3QgKl9fcHl4X3Zf X19weXhfUGlja2xlRXJyb3IgPSAwOwotKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfcmVzdWx0 ID0gMDsKLSsgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55RGVj bGFyYXRpb25zCi0tICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSsgIGludCBfX3B5eF90 XzE7Ci0gICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKLSAgIFB5T2JqZWN0ICpfX3B5eF90 XzMgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7Ci0rICBQeU9iamVjdCAq X19weXhfdF81ID0gTlVMTDsKLSsgIGludCBfX3B5eF90XzY7Ci0gICBpbnQgX19weXhfbGluZW5v ID0gMDsKLSAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAgIGludCBfX3B5 eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyIs IDApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX0xvZ01l c3NhZ2UiLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTI3 Ci0tICogICAgICAgICAgICAgICAgICAqYXJncywgKiprd2FyZ3MpOgotLSAqICAgICAgICAgaW5p dF9wYXJhbXMgPSB7Ci0tICogICAgICAgICAgICAgImdldF9wcm9jX2FkZHJlc3MiOiBnZXRfcHJv Y19hZGRyZXNzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIH0KLS0g KiAgICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0X18oc2VsZiwgbXB2LCBSZW5kZXJDb250ZXh0 LkFQSV9PUEVOR0wsCi0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0Ci0rICogICAgIGNkZWYgb2Jq ZWN0IF9fcHl4X1BpY2tsZUVycm9yCi0rICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAot KyAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweDg3NzRmYWU6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBh cyBfX3B5eF9QaWNrbGVFcnJvcgotKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3Io IkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ODc3NGZhZSA9IChsZXZlbCwgbG9nX2xl dmVsLCBwcmVmaXgsIHRleHQpKSIgJSBfX3B5eF9jaGVja3N1bSkKLSAgKi8KLS0gIF9fcHl4X3Rf MSA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgMTEyNywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKLS0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF90XzEsIF9fcHl4X25fc19nZXRf cHJvY19hZGRyZXNzLCBfX3B5eF92X2dldF9wcm9jX2FkZHJlc3MpIDwgMCkgX19QWVhfRVJSKDAs IDExMjcsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19weXhfdl9pbml0X3BhcmFtcyA9ICgoUHlPYmpl Y3QqKV9fcHl4X3RfMSk7Ci0tICBfX3B5eF90XzEgPSAwOwotKyAgX19weXhfdF8xID0gKChfX3B5 eF92X19fcHl4X2NoZWNrc3VtICE9IDB4ODc3NGZhZSkgIT0gMCk7Ci0rICBpZiAoX19weXhfdF8x KSB7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEyOQotLSAqICAg ICAgICAgICAgICJnZXRfcHJvY19hZGRyZXNzIjogZ2V0X3Byb2NfYWRkcmVzcwotLSAqICAgICAg ICAgfQotLSAqICAgICAgICAgUmVuZGVyQ29udGV4dC5fX2luaXRfXyhzZWxmLCBtcHYsIFJlbmRl ckNvbnRleHQuQVBJX09QRU5HTCwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BhcmFtcywgKmFyZ3MsICoqa3dhcmdz KQotLSAqIAotKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo1Ci0rICogICAgIGNkZWYgb2JqZWN0 IF9fcHl4X3Jlc3VsdAotKyAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweDg3NzRmYWU6Ci0r ICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xl RXJyb3IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmFpc2UgX19w eXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ODc3NGZhZSA9 IChsZXZlbCwgbG9nX2xldmVsLCBwcmVmaXgsIHRleHQpKSIgJSBfX3B5eF9jaGVja3N1bSkKLSsg KiAgICAgX19weXhfcmVzdWx0ID0gTG9nTWVzc2FnZS5fX25ld19fKF9fcHl4X3R5cGUpCi0gICov Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilf X3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCksIF9fcHl4X25f c19pbml0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEyOSwgX19w eXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fcHl4X3RfMiA9 IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSwgX19weXhfbl9zX0FQSV9PUEVOR0wpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTI5LCBfX3B5eF9MMV9lcnJv cikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgICBfX3B5eF90XzIgPSBQeUxpc3Rf TmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fUHl4X0lOQ1JF RihfX3B5eF9uX3NfUGlja2xlRXJyb3IpOwotKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X25fc19Q aWNrbGVFcnJvcik7Ci0rICAgIFB5TGlzdF9TRVRfSVRFTShfX3B5eF90XzIsIDAsIF9fcHl4X25f c19QaWNrbGVFcnJvcik7Ci0rICAgIF9fcHl4X3RfMyA9IF9fUHl4X0ltcG9ydChfX3B5eF9uX3Nf cGlja2xlLCBfX3B5eF90XzIsIC0xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwot KyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgICAgX19weXhf dF8yID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzMsIF9fcHl4X25fc19QaWNrbGVFcnJvcik7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9y KQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3RfMik7Ci0rICAgIF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IgPSBfX3B5eF90XzI7Ci0rICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTMwCi0tICogICAgICAgICB9Ci0tICogICAgICAgICBSZW5kZXJDb250 ZXh0Ll9faW5pdF9fKHNlbGYsIG1wdiwgUmVuZGVyQ29udGV4dC5BUElfT1BFTkdMLAotLSAqICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BhcmFtcywgKmFyZ3MsICoqa3dhcmdz KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogCi0tICogY2xhc3MgQ2FsbGJhY2tU aHJlYWQoVGhyZWFkKToKLSsgICAgLyogIih0cmVlIGZyYWdtZW50KSI6NgotKyAqICAgICBpZiBf X3B5eF9jaGVja3N1bSAhPSAweDg3NzRmYWU6Ci0rICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBv cnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKLSsgKiAgICAgICAgIHJhaXNlIF9f cHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDg3NzRmYWUg PSAobGV2ZWwsIGxvZ19sZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19weXhfY2hlY2tzdW0pICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgX19weXhfcmVzdWx0ID0gTG9nTWVz c2FnZS5fX25ld19fKF9fcHl4X3R5cGUpCi0rICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBO b25lOgotICAqLwotLSAgX19weXhfdF8zID0gUHlUdXBsZV9OZXcoNCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDExMjksIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhf R09UUkVGKF9fcHl4X3RfMyk7Ci0tICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKV9fcHl4X3Zf c2VsZikpOwotLSAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7Ci0t ICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMCwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2Vs ZikpOwotLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfbXB2KTsKLS0gIF9fUHl4X0dJVkVSRUYoX19w eXhfdl9tcHYpOwotLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDEsIF9fcHl4X3ZfbXB2 KTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8yKTsKLS0gIFB5VHVwbGVfU0VUX0lURU0oX19w eXhfdF8zLCAyLCBfX3B5eF90XzIpOwotLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfaW5pdF9wYXJh bXMpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X2luaXRfcGFyYW1zKTsKLS0gIFB5VHVwbGVf U0VUX0lURU0oX19weXhfdF8zLCAzLCBfX3B5eF92X2luaXRfcGFyYW1zKTsKLS0gIF9fcHl4X3Rf MiA9IDA7Ci0rICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21fbG9uZyhfX3B5eF92X19f cHl4X2NoZWNrc3VtKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNiwg X19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgICBfX3B5 eF90XzQgPSBfX1B5eF9QeVN0cmluZ19Gb3JtYXQoX19weXhfa3Bfc19JbmNvbXBhdGlibGVfY2hl Y2tzdW1zX3NfdnNfMHg4NywgX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBf X1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzQpOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgICAg X19QeXhfSU5DUkVGKF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IpOwotKyAgICBfX3B5eF90XzIg PSBfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yOyBfX3B5eF90XzUgPSBOVUxMOwotKyAgICBpZiAo Q1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3Rf MikpKSB7Ci0rICAgICAgX19weXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsK LSsgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfNSkpIHsKLSsgICAgICAgIFB5T2JqZWN0KiBmdW5j dGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwotKyAgICAgICAgX19QeXhf SU5DUkVGKF9fcHl4X3RfNSk7Ci0rICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAg ICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKLSsgICAgICB9Ci0r ICAgIH0KLSsgICAgX19weXhfdF8zID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzUsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9D YWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF80KTsKLSsgICAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzUpOyBfX3B5eF90XzUgPSAwOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19w eXhfdF80ID0gMDsKLSsgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwg NiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotKyAgICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsgICAgX19QeXhfUmFpc2Uo X19weXhfdF8zLCAwLCAwLCAwKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4 X3RfMyA9IDA7Ci0rICAgIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTI5Ci0tICogICAgICAgICAgICAgImdl dF9wcm9jX2FkZHJlc3MiOiBnZXRfcHJvY19hZGRyZXNzCi0tICogICAgICAgICB9Ci0tICogICAg ICAgICBSZW5kZXJDb250ZXh0Ll9faW5pdF9fKHNlbGYsIG1wdiwgUmVuZGVyQ29udGV4dC5BUElf T1BFTkdMLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGluaXRfcGFyYW1zLCAqYXJncywgKiprd2FyZ3MpCi0tICogCi0rICAg IC8qICIodHJlZSBmcmFnbWVudCkiOjQKLSsgKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xl RXJyb3IKLSsgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0Ci0rICogICAgIGlmIF9fcHl4 X2NoZWNrc3VtICE9IDB4ODc3NGZhZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVy cm9yCi0rICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNo ZWNrc3VtcyAoJXMgdnMgMHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZpeCwgdGV4 dCkpIiAlIF9fcHl4X2NoZWNrc3VtKQotICAqLwotLSAgX19weXhfdF8yID0gUHlOdW1iZXJfQWRk KF9fcHl4X3RfMywgX19weXhfdl9hcmdzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgMTEyOSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotKyAgfQotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzAKLS0gKiAgICAgICAgIH0K LS0gKiAgICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0X18oc2VsZiwgbXB2LCBSZW5kZXJDb250 ZXh0LkFQSV9PUEVOR0wsCi0tICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRf cGFyYW1zLCAqYXJncywgKiprd2FyZ3MpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g KiAKLS0gKiBjbGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOgotKyAgLyogIih0cmVlIGZyYWdt ZW50KSI6NwotKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9f cHl4X1BpY2tsZUVycm9yCi0rICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5j b21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWws IHByZWZpeCwgdGV4dCkpIiAlIF9fcHl4X2NoZWNrc3VtKQotKyAqICAgICBfX3B5eF9yZXN1bHQg PSBMb2dNZXNzYWdlLl9fbmV3X18oX19weXhfdHlwZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKLSsgKiAgICAgICAgIF9f cHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19weXhfcmVz dWx0LCBfX3B5eF9zdGF0ZSkKLSAgKi8KLS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0Nh bGwoX19weXhfdF8xLCBfX3B5eF90XzIsIF9fcHl4X3Zfa3dhcmdzKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTEyOSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90 XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSksIF9fcHl4X25fc19uZXcpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgX19weXhfdF80ID0gTlVMTDsKLSsgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7 Ci0rICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Ci0rICAgIGlm IChsaWtlbHkoX19weXhfdF80KSkgewotKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0 aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzQpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0rICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKLSsgICAgfQotKyAgfQotKyAgX19weXhfdF8zID0g KF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90 XzQsIF9fcHl4X3ZfX19weXhfdHlwZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfMiwgX19weXhfdl9fX3B5eF90eXBlKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKLSsgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEs IDcsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4 X3RfMyA9IDA7Ci0rICBfX3B5eF92X19fcHl4X3Jlc3VsdCA9IF9fcHl4X3RfMzsKLSsgIF9fcHl4 X3RfMyA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEyMwot LSAqIAotLSAqIGNkZWYgY2xhc3MgT3BlbkdMUmVuZGVyQ29udGV4dChSZW5kZXJDb250ZXh0KToK LS0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1wdiwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqICAgICAgICAgICAgICAgICAgZ2V0X3Byb2NfYWRkcmVzcywKLS0gKiAgICAgICAg ICAgICAgICAgICphcmdzLCAqKmt3YXJncyk6Ci0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo4Ci0r ICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3Vt cyAoJXMgdnMgMHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZpeCwgdGV4dCkpIiAl IF9fcHl4X2NoZWNrc3VtKQotKyAqICAgICBfX3B5eF9yZXN1bHQgPSBMb2dNZXNzYWdlLl9fbmV3 X18oX19weXhfdHlwZSkKLSsgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0xvZ01l c3NhZ2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkK LSsgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAotICAqLwotKyAgX19weXhfdF8xID0gKF9fcHl4 X3ZfX19weXhfc3RhdGUgIT0gUHlfTm9uZSk7Ci0rICBfX3B5eF90XzYgPSAoX19weXhfdF8xICE9 IDApOwotKyAgaWYgKF9fcHl4X3RfNikgewotIAotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICov Ci0tICBfX3B5eF9yID0gMDsKLS0gIGdvdG8gX19weXhfTDA7Ci0tICBfX3B5eF9MMV9lcnJvcjo7 Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Mik7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5PcGVuR0xSZW5kZXJDb250ZXh0Ll9faW5pdF9fIiwgX19weXhf Y2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICBfX3B5eF9yID0gLTE7 Ci0tICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfaW5pdF9wYXJhbXMpOwot LSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19 Ci0tCi0tLyogIih0cmVlIGZyYWdtZW50KSI6MQotLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICByYWlzZSBUeXBlRXJy b3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3Ig cGlja2xpbmciKQotLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRl KToKLSsgICAgLyogIih0cmVlIGZyYWdtZW50KSI6OQotKyAqICAgICBfX3B5eF9yZXN1bHQgPSBM b2dNZXNzYWdlLl9fbmV3X18oX19weXhfdHlwZSkKLSsgKiAgICAgaWYgX19weXhfc3RhdGUgaXMg bm90IE5vbmU6Ci0rICogICAgICAgICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3Rh dGUoPExvZ01lc3NhZ2U+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAotKyAqIGNkZWYgX19w eXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKExvZ01lc3NhZ2UgX19weXhfcmVzdWx0 LCB0dXBsZSBfX3B5eF9zdGF0ZSk6Ci0gICovCi0rICAgIGlmICghKGxpa2VseShQeVR1cGxlX0No ZWNrRXhhY3QoX19weXhfdl9fX3B5eF9zdGF0ZSkpfHwoKF9fcHl4X3ZfX19weXhfc3RhdGUpID09 IFB5X05vbmUpfHwoUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkV4cGVjdGVkICUuMTZz LCBnb3QgJS4yMDBzIiwgInR1cGxlIiwgUHlfVFlQRShfX3B5eF92X19fcHl4X3N0YXRlKS0+dHBf bmFtZSksIDApKSkgX19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90 XzMgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9Mb2dNZXNz YWdlX19zZXRfc3RhdGUoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9M b2dNZXNzYWdlICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCAoKFB5T2JqZWN0KilfX3B5eF92X19f cHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDksIF9f cHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0gCi0tLyogUHl0aG9uIHdyYXBwZXIg Ki8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9w ZW5HTFJlbmRlckNvbnRleHRfM19fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLwotLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29u dGV4dF8zX19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqdW51c2VkKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0tICBf X1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo Il9fcmVkdWNlX2N5dGhvbl9fICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5HTFJlbmRlckNvbnRleHRfMl9fcmVkdWNlX2N5 dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVu ZGVyQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOwotLQotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCi0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9y OwotLX0KLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xOU9wZW5HTFJlbmRlckNvbnRleHRfMl9fcmVkdWNlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQg c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4 dCAqX19weXhfdl9zZWxmKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0tICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0t ICBpbnQgX19weXhfbGluZW5vID0gMDsKLS0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKLS0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyIsIDApOwotKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQp Ijo4Ci0rICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNo ZWNrc3VtcyAoJXMgdnMgMHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZpeCwgdGV4 dCkpIiAlIF9fcHl4X2NoZWNrc3VtKQotKyAqICAgICBfX3B5eF9yZXN1bHQgPSBMb2dNZXNzYWdl Ll9fbmV3X18oX19weXhfdHlwZSkKLSsgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIF9fcHl4X3VucGlja2xl X0xvZ01lc3NhZ2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19weXhfcmVzdWx0LCBfX3B5eF9z dGF0ZSkKLSsgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAotKyAqLwotKyAgfQotIAotLSAgLyog Iih0cmVlIGZyYWdtZW50KSI6MgotLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKLS0g KiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBh IFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKLS0gKiAg ICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5 dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjEwCi0r ICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgotKyAqICAgICAgICAgX19weXhfdW5w aWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKDxMb2dNZXNzYWdlPiBfX3B5eF9yZXN1bHQsIF9f cHl4X3N0YXRlKQotKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiBjZGVmIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0 ZShMb2dNZXNzYWdlIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgotKyAqICAgICBf X3B5eF9yZXN1bHQubGV2ZWwgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LmxvZ19sZXZl bCA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQucHJlZml4ID0gX19weXhfc3RhdGVbMl07 IF9fcHl4X3Jlc3VsdC50ZXh0ID0gX19weXhfc3RhdGVbM10KLSAgKi8KLS0gIF9fcHl4X3RfMSA9 IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3IsIF9fcHl4X3R1cGxl X18xOSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDIsIF9f cHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9SYWlz ZShfX3B5eF90XzEsIDAsIDAsIDApOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4 X3RfMSA9IDA7Ci0tICBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9Y REVDUkVGKF9fcHl4X3IpOwotKyAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsK LSsgIF9fcHl4X3IgPSBfX3B5eF92X19fcHl4X3Jlc3VsdDsKLSsgIGdvdG8gX19weXhfTDA7Ci0g Ci0gICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCi0tICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNl bGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIHJhaXNlIFR5cGVFcnJv cigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBw aWNrbGluZyIpCi0tICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUp OgotKyAqIGRlZiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlKF9fcHl4X3R5cGUsIGxvbmcgX19w eXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgotKyAqICAgICBjZGVmIG9iamVj dCBfX3B5eF9yZXN1bHQKLSAgKi8KLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAg X19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAgX19QeXhf QWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuT3BlbkdMUmVuZGVyQ29udGV4dC5fX3Jl ZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzMpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotKyAgX19QeXhfWERFQ1JFRihf X3B5eF90XzUpOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19w eXhfdW5waWNrbGVfTG9nTWVzc2FnZSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19w eXhfZmlsZW5hbWUpOwotICAgX19weXhfciA9IE5VTEw7Ci0rICBfX3B5eF9MMDo7Ci0rICBfX1B5 eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IpOwotKyAgX19QeXhfWERFQ1JFRihf X3B5eF92X19fcHl4X3Jlc3VsdCk7Ci0gICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLSAgIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAot LS8qICIodHJlZSBmcmFnbWVudCkiOjMKLS0gKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6 Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQg dG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0tICogZGVmIF9fc2V0c3RhdGVfY3l0 aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8g YSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0rLyogIih0cmVlIGZyYWdtZW50KSI6MTEK LSsgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZSg8TG9nTWVz c2FnZT4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLSsgKiAgICAgcmV0dXJuIF9fcHl4X3Jl c3VsdAotKyAqIGNkZWYgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKExvZ01l c3NhZ2UgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgX19weXhfcmVzdWx0LmxldmVsID0gX19weXhfc3RhdGVbMF07 IF9fcHl4X3Jlc3VsdC5sb2dfbGV2ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LnBy ZWZpeCA9IF9fcHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNd Ci0rICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3Vs dCwgJ19fZGljdF9fJyk6Ci0gICovCi0gCi0tLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5HTFJlbmRlckNv bnRleHRfNV9fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5HTFJlbmRlckNvbnRleHRfNV9fc2V0 c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zf X19weXhfc3RhdGUpIHsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKLS0gIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0 ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0XzRfX3NldHN0YXRlX2N5dGhvbl9f KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29u dGV4dCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4X3N0YXRlKSk7 Ci0tCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0tfQotLQotLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF80X19z ZXRzdGF0ZV9jeXRob25fXyhDWVRIT05fVU5VU0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgewotK3N0YXRpYyBQeU9iamVjdCAq X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9f c2V0X3N0YXRlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3Nh Z2UgKl9fcHl4X3ZfX19weXhfcmVzdWx0LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkg ewotICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJh dGlvbnMKLSAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotKyAgaW50IF9fcHl4X3RfMjsK LSsgIFB5X3NzaXplX3QgX19weXhfdF8zOwotKyAgaW50IF9fcHl4X3RfNDsKLSsgIGludCBfX3B5 eF90XzU7Ci0rICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5 eF90XzcgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfOCA9IE5VTEw7Ci0gICBpbnQgX19w eXhfbGluZW5vID0gMDsKLSAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAg IGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X3NldHN0YXRlX2N5dGhvbl9fIiwgMCk7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlIiwgMCk7Ci0gCi0tICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjo0Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5v dCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0tICogZGVm IF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgotLSAqICAgICByYWlzZSBU eXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVj dCBmb3IgcGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxMgotKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0rICogY2RlZiBf X3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoTG9nTWVzc2FnZSBfX3B5eF9yZXN1 bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKLSsgKiAgICAgX19weXhfcmVzdWx0LmxldmVsID0gX19w eXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5sb2dfbGV2ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19w eXhfcmVzdWx0LnByZWZpeCA9IF9fcHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQudGV4dCA9IF9f cHl4X3N0YXRlWzNdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgaWYgbGVu KF9fcHl4X3N0YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToK LSsgKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbNF0p Ci0gICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2J1aWx0aW5f VHlwZUVycm9yLCBfX3B5eF90dXBsZV9fMjAsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigxLCA0LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmICh1bmxpa2VseShfX3B5 eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7Ci0rICAgIFB5RXJyX1NldFN0cmluZyhQeUV4 Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOwot KyAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgfQotKyAgX19weXhfdF8x ID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAwLCBsb25nLCAx LCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKLS0gIF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7Ci0tICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLS0gIF9fUFlYX0VSUigxLCA0LCBfX3B5 eF9MMV9lcnJvcikKLS0KLS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjMKLS0gKiBkZWYgX19yZWR1 Y2VfY3l0aG9uX18oc2VsZik6Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNh bm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0tICog ZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5v dCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0tICovCi0t Ci0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X0wxX2Vycm9yOjsKLS0gIF9f UHl4X1hERUNSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2Lk9wZW5HTFJlbmRlckNvbnRleHQuX19zZXRzdGF0ZV9jeXRob25fXyIsIF9fcHl4 X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotLSAgX19weXhfciA9IE5V TEw7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9HT1RSRUYoX19weXhf dl9fX3B5eF9yZXN1bHQtPmxldmVsKTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF92X19fcHl4X3Jl c3VsdC0+bGV2ZWwpOwotKyAgX19weXhfdl9fX3B5eF9yZXN1bHQtPmxldmVsID0gX19weXhfdF8x OwotKyAgX19weXhfdF8xID0gMDsKLSsgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRl ID09IFB5X05vbmUpKSB7Ci0rICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICIn Tm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOwotKyAgICBfX1BZWF9FUlIo MSwgMTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgfQotKyAgX19weXhfdF8xID0gX19QeXhfR2V0SXRl bUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAxLCBsb25nLCAxLCBfX1B5eF9QeUludF9G cm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigx LCAxMiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIF9f UHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF92X19fcHl4X3Jl c3VsdC0+bG9nX2xldmVsKTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+ bG9nX2xldmVsKTsKLSsgIF9fcHl4X3ZfX19weXhfcmVzdWx0LT5sb2dfbGV2ZWwgPSBfX3B5eF90 XzE7Ci0rICBfX3B5eF90XzEgPSAwOwotKyAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3Rh dGUgPT0gUHlfTm9uZSkpIHsKLSsgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwg IidOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7Ci0rICAgIF9fUFlYX0VS UigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0rICB9Ci0rICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJ dGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDIsIGxvbmcsIDEsIF9fUHl4X1B5SW50 X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAg X19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwotKyAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhf cmVzdWx0LT5wcmVmaXgpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5w cmVmaXgpOwotKyAgX19weXhfdl9fX3B5eF9yZXN1bHQtPnByZWZpeCA9IF9fcHl4X3RfMTsKLSsg IF9fcHl4X3RfMSA9IDA7Ci0rICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQ eV9Ob25lKSkgewotKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVU eXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsKLSsgICAgX19QWVhfRVJSKDEsIDEy LCBfX3B5eF9MMV9lcnJvcikKLSsgIH0KLSsgIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRf VHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMywgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9s b25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9H SVZFUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQt PnRleHQpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT50ZXh0KTsKLSsg IF9fcHl4X3ZfX19weXhfcmVzdWx0LT50ZXh0ID0gX19weXhfdF8xOwotKyAgX19weXhfdF8xID0g MDsKLSsKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjEzCi0rICogY2RlZiBfX3B5eF91bnBpY2ts ZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoTG9nTWVzc2FnZSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9f cHl4X3N0YXRlKToKLSsgKiAgICAgX19weXhfcmVzdWx0LmxldmVsID0gX19weXhfc3RhdGVbMF07 IF9fcHl4X3Jlc3VsdC5sb2dfbGV2ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LnBy ZWZpeCA9IF9fcHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNd Ci0rICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3Vs dCwgJ19fZGljdF9fJyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAg IF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbNF0pCi0rICovCi0rICBp ZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgewotKyAgICBQeUVy cl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAib2JqZWN0IG9mIHR5cGUgJ05vbmVUeXBlJyBo YXMgbm8gbGVuKCkiKTsKLSsgICAgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKLSsg IH0KLSsgIF9fcHl4X3RfMyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdl9fX3B5eF9zdGF0ZSk7 IGlmICh1bmxpa2VseShfX3B5eF90XzMgPT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VSUigx LCAxMywgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzQgPSAoKF9fcHl4X3RfMyA+IDQpICE9 IDApOwotKyAgaWYgKF9fcHl4X3RfNCkgewotKyAgfSBlbHNlIHsKLSsgICAgX19weXhfdF8yID0g X19weXhfdF80OwotKyAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKLSsgIH0KLSsg IF9fcHl4X3RfNCA9IF9fUHl4X0hhc0F0dHIoKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfcmVz dWx0KSwgX19weXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoX19weXhfdF80ID09ICgoaW50KS0x KSkpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzUgPSAoX19w eXhfdF80ICE9IDApOwotKyAgX19weXhfdF8yID0gX19weXhfdF81OwotKyAgX19weXhfTDRfYm9v bF9iaW5vcF9kb25lOjsKLSsgIGlmIChfX3B5eF90XzIpIHsKLSsKLSsgICAgLyogIih0cmVlIGZy YWdtZW50KSI6MTQKLSsgKiAgICAgX19weXhfcmVzdWx0LmxldmVsID0gX19weXhfc3RhdGVbMF07 IF9fcHl4X3Jlc3VsdC5sb2dfbGV2ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LnBy ZWZpeCA9IF9fcHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNd Ci0rICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3Vs dCwgJ19fZGljdF9fJyk6Ci0rICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRl KF9fcHl4X3N0YXRlWzRdKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICovCi0rICAg IF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4 X3ZfX19weXhfcmVzdWx0KSwgX19weXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NikpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzYpOwotKyAgICBfX3B5eF90XzcgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3RfNiwgX19weXhfbl9zX3VwZGF0ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19Q WVhfRVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nyk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotKyAgICBp ZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgewotKyAgICAgIFB5 RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qg c3Vic2NyaXB0YWJsZSIpOwotKyAgICAgIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3Ip Ci0rICAgIH0KLSsgICAgX19weXhfdF82ID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92 X19fcHl4X3N0YXRlLCA0LCBsb25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJy b3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgICBfX3B5eF90XzggPSBOVUxM OwotKyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVj ayhfX3B5eF90XzcpKSkgewotKyAgICAgIF9fcHl4X3RfOCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9f cHl4X3RfNyk7Ci0rICAgICAgaWYgKGxpa2VseShfX3B5eF90XzgpKSB7Ci0rICAgICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF83KTsKLSsgICAg ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzgpOwotKyAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0 aW9uKTsKLSsgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF83LCBmdW5jdGlvbik7Ci0r ICAgICAgfQotKyAgICB9Ci0rICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzgpID8gX19QeXhfUHlP YmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNywgX19weXhfdF84LCBfX3B5eF90XzYpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzcsIF9fcHl4X3RfNik7Ci0rICAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF84KTsgX19weXhfdF84ID0gMDsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotKyAgICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsKLSsgICAgLyogIih0cmVl IGZyYWdtZW50KSI6MTMKLSsgKiBjZGVmIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9z dGF0ZShMb2dNZXNzYWdlIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgotKyAqICAg ICBfX3B5eF9yZXN1bHQubGV2ZWwgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LmxvZ19s ZXZlbCA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQucHJlZml4ID0gX19weXhfc3RhdGVb Ml07IF9fcHl4X3Jlc3VsdC50ZXh0ID0gX19weXhfc3RhdGVbM10KLSsgKiAgICAgaWYgbGVuKF9f cHl4X3N0YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGlj dF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkKLSsgKi8KLSsgIH0KLSsKLSsgIC8qICIodHJlZSBm cmFnbWVudCkiOjExCi0rICogICAgICAgICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRf c3RhdGUoPExvZ01lc3NhZ2U+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCi0rICogICAgIHJl dHVybiBfX3B5eF9yZXN1bHQKLSsgKiBjZGVmIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3Nl dF9zdGF0ZShMb2dNZXNzYWdlIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIF9fcHl4X3Jlc3VsdC5sZXZlbCA9IF9f cHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubG9nX2xldmVsID0gX19weXhfc3RhdGVbMV07IF9f cHl4X3Jlc3VsdC5wcmVmaXggPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnRleHQgPSBf X3B5eF9zdGF0ZVszXQotKyAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0 cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgotKyAqLwotKwotKyAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCi0rICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwot KyAgZ290byBfX3B5eF9MMDsKLSsgIF9fcHl4X0wxX2Vycm9yOjsKLSsgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKLSsgIF9fUHl4X1hERUNS RUYoX19weXhfdF83KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsKLSsgIF9fUHl4X0Fk ZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2Vf X3NldF9zdGF0ZSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OwotKyAgX19weXhfciA9IDA7Ci0rICBfX3B5eF9MMDo7Ci0gICBfX1B5eF9YR0lWRVJFRihfX3B5 eF9yKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4 X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTMzCi0tICog Ci0tICogY2xhc3MgQ2FsbGJhY2tUaHJlYWQoVGhyZWFkKToKLS0gKiAgICAgZGVmIF9faW5pdF9f KHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBUaHJlYWQu X19pbml0X18oc2VsZikKLS0gKiAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQotKy8qICIodHJl ZSBmcmFnbWVudCkiOjEKLSsgKiBkZWYgX19weXhfdW5waWNrbGVfUHJvcGVydHkoX19weXhfdHlw ZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCi0rICogICAg IGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotICAqLwotIAotIC8qIFB5dGhvbiB3cmFwcGVyICov Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxs YmFja1RocmVhZF8xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8xX19pbml0X18gPSB7Il9faW5pdF9f IiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNr VGhyZWFkXzFfX2luaXRfXywgTUVUSF9PLCAwfTsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzFfX2luaXRfXyhQeU9iamVj dCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzExX19weXhfdW5waWNrbGVfUHJvcGVy dHkoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAq X19weXhfa3dkcyk7IC8qcHJvdG8qLwotK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xMV9fcHl4X3VucGlja2xlX1Byb3BlcnR5ID0geyJfX3B5eF91 bnBpY2tsZV9Qcm9wZXJ0eSIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtl eXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMV9fcHl4X3VucGlja2xlX1By b3BlcnR5LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgMH07Ci0rc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTFfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0 eShQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpf X3B5eF9rd2RzKSB7Ci0rICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF90eXBlID0gMDsKLSsgIGxv bmcgX19weXhfdl9fX3B5eF9jaGVja3N1bTsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0 YXRlID0gMDsKLSsgIGludCBfX3B5eF9saW5lbm8gPSAwOwotKyAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOwotKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgUHlPYmplY3Qg Kl9fcHl4X3IgPSAwOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3Ig PSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF9fX2luaXRf XyhfX3B5eF9zZWxmLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7Ci0rICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfUHJvcGVydHkgKHdyYXBwZXIpIiwgMCk7 Ci0rICB7Ci0rICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19w eXhfbl9zX3B5eF90eXBlLCZfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCZfX3B5eF9uX3NfcHl4X3N0 YXRlLDB9OwotKyAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCwwfTsKLSsgICAgaWYgKHVu bGlrZWx5KF9fcHl4X2t3ZHMpKSB7Ci0rICAgICAgUHlfc3NpemVfdCBrd19hcmdzOwotKyAgICAg IGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3Mp OwotKyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKLSsgICAgICAgIGNhc2UgIDM6IHZhbHVlc1sy XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7Ci0rICAgICAgICBDWVRIT05fRkFM TFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVN KF9fcHl4X2FyZ3MsIDEpOwotKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAg Y2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKLSsg ICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgIGNhc2UgIDA6IGJyZWFrOwotKyAg ICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLSsgICAgICB9Ci0r ICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOwotKyAgICAgIHN3aXRjaCAo cG9zX2FyZ3MpIHsKLSsgICAgICAgIGNhc2UgIDA6Ci0rICAgICAgICBpZiAobGlrZWx5KCh2YWx1 ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4 X3R5cGUpKSAhPSAwKSkga3dfYXJncy0tOwotKyAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1X2Fy Z3R1cGxlX2Vycm9yOwotKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAgY2Fz ZSAgMToKLSsgICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGljdF9HZXRJ dGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhfY2hlY2tzdW0pKSAhPSAwKSkga3dfYXJn cy0tOwotKyAgICAgICAgZWxzZSB7Ci0rICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZh bGlkKCJfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSIsIDEsIDMsIDMsIDEpOyBfX1BZWF9FUlIoMSwg MSwgX19weXhfTDNfZXJyb3IpCi0rICAgICAgICB9Ci0rICAgICAgICBDWVRIT05fRkFMTFRIUk9V R0g7Ci0rICAgICAgICBjYXNlICAyOgotKyAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzJdID0g X19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF9zdGF0ZSkp ICE9IDApKSBrd19hcmdzLS07Ci0rICAgICAgICBlbHNlIHsKLSsgICAgICAgICAgX19QeXhfUmFp c2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3VucGlja2xlX1Byb3BlcnR5IiwgMSwgMywgMywgMik7 IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKLSsgICAgICAgIH0KLSsgICAgICB9Ci0r ICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewotKyAgICAgICAgaWYgKHVubGlrZWx5 KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVz LCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAiX19weXhfdW5waWNrbGVfUHJvcGVydHkiKSA8IDApKSBf X1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCi0rICAgICAgfQotKyAgICB9IGVsc2UgaWYg KFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0gMykgewotKyAgICAgIGdvdG8gX19weXhf TDVfYXJndHVwbGVfZXJyb3I7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgdmFsdWVzWzBdID0gUHlU dXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKLSsgICAgICB2YWx1ZXNbMV0gPSBQeVR1cGxl X0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOwotKyAgICAgIHZhbHVlc1syXSA9IFB5VHVwbGVfR0VU X0lURU0oX19weXhfYXJncywgMik7Ci0rICAgIH0KLSsgICAgX19weXhfdl9fX3B5eF90eXBlID0g dmFsdWVzWzBdOwotKyAgICBfX3B5eF92X19fcHl4X2NoZWNrc3VtID0gX19QeXhfUHlJbnRfQXNf bG9uZyh2YWx1ZXNbMV0pOyBpZiAodW5saWtlbHkoKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gPT0g KGxvbmcpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNf ZXJyb3IpCi0rICAgIF9fcHl4X3ZfX19weXhfc3RhdGUgPSB2YWx1ZXNbMl07Ci0rICB9Ci0rICBn b3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOwotKyAgX19weXhfTDVfYXJndHVw bGVfZXJyb3I6OwotKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3VucGlja2xl X1Byb3BlcnR5IiwgMSwgMywgMywgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlY X0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKLSsgIF9fcHl4X0wzX2Vycm9yOjsKLSsgIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX1Byb3BlcnR5 IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiBOVUxMOwotKyAgX19weXhfTDRf YXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OwotKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xMF9fcHl4X3VucGlja2xlX1Byb3BlcnR5KF9fcHl4X3NlbGYsIF9fcHl4 X3ZfX19weXhfdHlwZSwgX19weXhfdl9fX3B5eF9jaGVja3N1bSwgX19weXhfdl9fX3B5eF9zdGF0 ZSk7Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLSAgIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLXN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfX19pbml0 X18oQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zf c2VsZikgewotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEwX19weXhfdW5waWNrbGVfUHJvcGVydHkoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhf c2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2No ZWNrc3VtLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgewotKyAgUHlPYmplY3QgKl9f cHl4X3ZfX19weXhfUGlja2xlRXJyb3IgPSAwOwotKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf cmVzdWx0ID0gMDsKLSAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCi0tICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKLSsgIGludCBf X3B5eF90XzE7Ci0gICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKLSAgIFB5T2JqZWN0ICpf X3B5eF90XzMgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7Ci0rICBQeU9i amVjdCAqX19weXhfdF81ID0gTlVMTDsKLSsgIGludCBfX3B5eF90XzY7Ci0gICBpbnQgX19weXhf bGluZW5vID0gMDsKLSAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAgIGlu dCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2lu aXRfXyIsIDApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xl X1Byb3BlcnR5IiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTEzNAotLSAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6Ci0tICogICAgIGRlZiBfX2lu aXRfXyhzZWxmKToKLS0gKiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLmRhZW1vbiA9IFRydWUKLS0gKiAg ICAgICAgIHNlbGYubG9jayA9IFNlbWFwaG9yZSgpCi0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0 Ci0rICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCi0rICogICAgIGNkZWYgb2Jq ZWN0IF9fcHl4X3Jlc3VsdAotKyAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweDA1NzJkMTE6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGZyb20gcGlja2xlIGlt cG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgotKyAqICAgICAgICAgcmFpc2Ug X19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4MDU3MmQx MSA9IChkYXRhLCBuYW1lKSkiICUgX19weXhfY2hlY2tzdW0pCi0gICovCi0tICBfX1B5eF9HZXRN b2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX1RocmVhZCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExMzQsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3RfMiwgX19weXhfbl9zX2luaXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MykpIF9fUFlYX0VSUigwLCAxMTM0LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0t ICBfX3B5eF90XzIgPSBOVUxMOwotLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzMpKSkgewotLSAgICBfX3B5eF90XzIgPSBQeU1l dGhvZF9HRVRfU0VMRihfX3B5eF90XzMpOwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMikpIHsK LS0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhf dF8zKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKLS0gICAgICBfX1B5eF9JTkNS RUYoZnVuY3Rpb24pOwotLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlv bik7Ci0tICAgIH0KLS0gIH0KLS0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzIpID8gX19QeXhfUHlP YmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMywgX19weXhfdF8yLCBfX3B5eF92X3NlbGYpIDogX19Q eXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzMsIF9fcHl4X3Zfc2VsZik7Ci0tICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTM0LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgIF9fcHl4 X3RfMSA9ICgoX19weXhfdl9fX3B5eF9jaGVja3N1bSAhPSAweDA1NzJkMTEpICE9IDApOwotKyAg aWYgKF9fcHl4X3RfMSkgewotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExMzUKLS0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotLSAqICAgICAgICAgVGhyZWFkLl9f aW5pdF9fKHNlbGYpCi0tICogICAgICAgICBzZWxmLmRhZW1vbiA9IFRydWUgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi5sb2NrID0gU2VtYXBob3JlKCkKLS0g KiAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCi0tICovCi0tICBpZiAoX19QeXhfUHlP YmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19kYWVtb24sIFB5X1RydWUp IDwgMCkgX19QWVhfRVJSKDAsIDExMzUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjo1Ci0rICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotKyAqICAgICBp ZiBfX3B5eF9jaGVja3N1bSAhPSAweDA1NzJkMTE6Ci0rICogICAgICAgICBmcm9tIHBpY2tsZSBp bXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0 aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4MDU3MmQxMSA9IChkYXRhLCBuYW1lKSkiICUgX19weXhf Y2hlY2tzdW0pCi0rICogICAgIF9fcHl4X3Jlc3VsdCA9IFByb3BlcnR5Ll9fbmV3X18oX19weXhf dHlwZSkKLSsgKi8KLSsgICAgX19weXhfdF8yID0gUHlMaXN0X05ldygxKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOwotKyAgICBfX1B5eF9JTkNSRUYoX19weXhfbl9zX1BpY2tsZUVy cm9yKTsKLSsgICAgX19QeXhfR0lWRVJFRihfX3B5eF9uX3NfUGlja2xlRXJyb3IpOwotKyAgICBQ eUxpc3RfU0VUX0lURU0oX19weXhfdF8yLCAwLCBfX3B5eF9uX3NfUGlja2xlRXJyb3IpOwotKyAg ICBfX3B5eF90XzMgPSBfX1B5eF9JbXBvcnQoX19weXhfbl9zX3BpY2tsZSwgX19weXhfdF8yLCAt MSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vy cm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0rICAgIF9fcHl4X3RfMiA9IF9fUHl4X0ltcG9ydEZy b20oX19weXhfdF8zLCBfX3B5eF9uX3NfUGlja2xlRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7Ci0rICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOwotKyAgICBfX3B5eF92 X19fcHl4X1BpY2tsZUVycm9yID0gX19weXhfdF8yOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8yKTsgX19weXhfdF8yID0gMDsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4 X3RfMyA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzNgot LSAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0tICogICAgICAgICBzZWxmLmRhZW1v biA9IFRydWUKLS0gKiAgICAgICAgIHNlbGYubG9jayA9IFNlbWFwaG9yZSgpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCi0t ICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQotKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQp Ijo2Ci0rICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4MDU3MmQxMToKLSsgKiAgICAgICAg IGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgotKyAq ICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMg KCVzIHZzIDB4MDU3MmQxMSA9IChkYXRhLCBuYW1lKSkiICUgX19weXhfY2hlY2tzdW0pICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgX19weXhfcmVzdWx0ID0gUHJvcGVydHku X19uZXdfXyhfX3B5eF90eXBlKQotKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToK LSAgKi8KLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8zLCBfX3B5eF9uX3Nf U2VtYXBob3JlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTEzNiwg X19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gIF9fcHl4X3Rf MiA9IE5VTEw7Ci0tICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0 aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7Ci0tICAgIF9fcHl4X3RfMiA9IFB5TWV0aG9kX0dFVF9T RUxGKF9fcHl4X3RfMyk7Ci0tICAgIGlmIChsaWtlbHkoX19weXhfdF8yKSkgewotLSAgICAgIFB5 T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOwotLSAg ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOwotLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlv bik7Ci0tICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKLSsgICAg X19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9sb25nKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0p OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJv cikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fcHl4X3RfNCA9IF9fUHl4 X1B5U3RyaW5nX0Zvcm1hdChfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18w eDA1LCBfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCA2 LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0rICAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgICBfX1B5eF9JTkNSRUYo X19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcik7Ci0rICAgIF9fcHl4X3RfMiA9IF9fcHl4X3ZfX19w eXhfUGlja2xlRXJyb3I7IF9fcHl4X3RfNSA9IE5VTEw7Ci0rICAgIGlmIChDWVRIT05fVU5QQUNL X01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLSsgICAg ICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwotKyAgICAgIGlmIChs aWtlbHkoX19weXhfdF81KSkgewotKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0rICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhf dF81KTsKLSsgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0rICAgICAgICBfX1B5eF9E RUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotKyAgICAgIH0KLSAgICAgfQotKyAgICBf X3B5eF90XzMgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzIsIF9fcHl4X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfdF8yLCBfX3B5eF90XzQpOwotKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4 X3RfNSA9IDA7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwot KyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9l cnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0rICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgICBfX1B5eF9SYWlzZShfX3B5eF90XzMsIDAs IDAsIDApOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSsg ICAgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQotKwotKyAgICAvKiAiKHRyZWUgZnJh Z21lbnQpIjo0Ci0rICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCi0rICogICAg IGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotKyAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAw eDA1NzJkMTE6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGZyb20g cGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgotKyAqICAgICAg ICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZz IDB4MDU3MmQxMSA9IChkYXRhLCBuYW1lKSkiICUgX19weXhfY2hlY2tzdW0pCi0rICovCi0gICB9 Ci0tICBfX3B5eF90XzEgPSAoX19weXhfdF8yKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8zLCBfX3B5eF90XzIpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3Rf Myk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTM2LCBfX3B5eF9MMV9lcnJvcikK LS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7 IF9fcHl4X3RfMyA9IDA7Ci0tICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92 X3NlbGYsIF9fcHl4X25fc19sb2NrLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDExMzYs IF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9 IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzNwotLSAqICAg ICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCi0tICogICAgICAgICBzZWxmLmxvY2sgPSBTZW1hcGhv cmUoKQotLSAqICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoVHJ1ZSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKLS0gKiAgICAg ICAgIHNlbGYuaXNzaHV0ZG93biA9IEZhbHNlCi0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3Ci0r ICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xl RXJyb3IKLSsgKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUg Y2hlY2tzdW1zICglcyB2cyAweDA1NzJkMTEgPSAoZGF0YSwgbmFtZSkpIiAlIF9fcHl4X2NoZWNr c3VtKQotKyAqICAgICBfX3B5eF9yZXN1bHQgPSBQcm9wZXJ0eS5fX25ld19fKF9fcHl4X3R5cGUp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgaWYgX19weXhfc3RhdGUgaXMg bm90IE5vbmU6Ci0rICogICAgICAgICBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRl KDxQcm9wZXJ0eT4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLSAgKi8KLS0gIF9fcHl4X3Rf MyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfbG9j ayk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDExMzcsIF9fcHl4X0wx X2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICBfX3B5eF90XzIgPSBfX1B5 eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfMywgX19weXhfbl9zX2FjcXVpcmUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTM3LCBfX3B5eF9MMV9lcnJvcikK LSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9f cHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSksIF9fcHl4X25fc19uZXcp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA3LCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Myk7IF9fcHl4X3RfMyA9IDA7Ci0tICBfX3B5eF90XzMgPSBOVUxMOwotKyAgX19weXhfdF80ID0g TlVMTDsKLSAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0No ZWNrKF9fcHl4X3RfMikpKSB7Ci0tICAgIF9fcHl4X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9f cHl4X3RfMik7Ci0tICAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkgewotKyAgICBfX3B5eF90XzQg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwotKyAgICBpZiAobGlrZWx5KF9fcHl4X3Rf NCkpIHsKLSAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04o X19weXhfdF8yKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKLSsgICAgICBfX1B5 eF9JTkNSRUYoX19weXhfdF80KTsKLSAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotICAg ICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0gICAgIH0KLSAgIH0K LS0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfMiwgX19weXhfdF8zLCBQeV9UcnVlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8yLCBQeV9UcnVlKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMzcs IF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBfX3B5eF90 XzMgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9f cHl4X3RfNCwgX19weXhfdl9fX3B5eF90eXBlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8yLCBfX3B5eF92X19fcHl4X3R5cGUpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOwotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMSwgNywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICBfX3B5eF92X19fcHl4X3Jlc3VsdCA9IF9f cHl4X3RfMzsKLSsgIF9fcHl4X3RfMyA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTEzOAotLSAqICAgICAgICAgc2VsZi5sb2NrID0gU2VtYXBob3JlKCkKLS0g KiAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCi0tICogICAgICAgICBzZWxmLmNhbGxi YWNrID0gTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxm Lmlzc2h1dGRvd24gPSBGYWxzZQotLSAqIAotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6OAotKyAq ICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMg KCVzIHZzIDB4MDU3MmQxMSA9IChkYXRhLCBuYW1lKSkiICUgX19weXhfY2hlY2tzdW0pCi0rICog ICAgIF9fcHl4X3Jlc3VsdCA9IFByb3BlcnR5Ll9fbmV3X18oX19weXhfdHlwZSkKLSsgKiAgICAg aWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoPFByb3BlcnR5 PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQotKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0 Ci0gICovCi0tICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9f cHl4X25fc19jYWxsYmFjaywgUHlfTm9uZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTEzOCwgX19weXhf TDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSAoX19weXhfdl9fX3B5eF9zdGF0ZSAhPSBQeV9Ob25l KTsKLSsgIF9fcHl4X3RfNiA9IChfX3B5eF90XzEgIT0gMCk7Ci0rICBpZiAoX19weXhfdF82KSB7 Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzOQotLSAqICAgICAg ICAgc2VsZi5sb2NrLmFjcXVpcmUoVHJ1ZSkKLS0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBO b25lCi0tICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogCi0tICogICAgIGRlZiBzaHV0ZG93bihzZWxmKToKLSsgICAgLyog Iih0cmVlIGZyYWdtZW50KSI6OQotKyAqICAgICBfX3B5eF9yZXN1bHQgPSBQcm9wZXJ0eS5fX25l d19fKF9fcHl4X3R5cGUpCi0rICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgotKyAq ICAgICAgICAgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZSg8UHJvcGVydHk+IF9f cHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAotKyAqIGNkZWYgX19weXhfdW5waWNrbGVfUHJvcGVy dHlfX3NldF9zdGF0ZShQcm9wZXJ0eSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToK LSAgKi8KLS0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19w eXhfbl9zX2lzc2h1dGRvd24sIFB5X0ZhbHNlKSA8IDApIF9fUFlYX0VSUigwLCAxMTM5LCBfX3B5 eF9MMV9lcnJvcikKLSsgICAgaWYgKCEobGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92 X19fcHl4X3N0YXRlKSl8fCgoX19weXhfdl9fX3B5eF9zdGF0ZSkgPT0gUHlfTm9uZSl8fChQeUVy cl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiRXhwZWN0ZWQgJS4xNnMsIGdvdCAlLjIwMHMiLCAi dHVwbGUiLCBQeV9UWVBFKF9fcHl4X3ZfX19weXhfc3RhdGUpLT50cF9uYW1lKSwgMCkpKSBfX1BZ WF9FUlIoMSwgOSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMyA9IF9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoKChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3Zf X19weXhfcmVzdWx0KSwgKChQeU9iamVjdCopX19weXhfdl9fX3B5eF9zdGF0ZSkpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA5LCBfX3B5eF9MMV9lcnJvcikKLSsgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBf X3B5eF90XzMgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx MzMKLS0gKiAKLS0gKiBjbGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOgotLSAqICAgICBkZWYg X19pbml0X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg IFRocmVhZC5fX2luaXRfXyhzZWxmKQotLSAqICAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCi0r ICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKLSsgKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2ts ZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDA1NzJkMTEgPSAoZGF0YSwg bmFtZSkpIiAlIF9fcHl4X2NoZWNrc3VtKQotKyAqICAgICBfX3B5eF9yZXN1bHQgPSBQcm9wZXJ0 eS5fX25ld19fKF9fcHl4X3R5cGUpCi0rICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25l OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBfX3B5eF91bnBpY2ts ZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKDxQcm9wZXJ0eT4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0 ZSkKLSsgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAotICAqLwotKyAgfQotIAotLSAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCi0tICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5 X05vbmUpOwotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTAKLSsgKiAgICAgaWYgX19weXhfc3Rh dGUgaXMgbm90IE5vbmU6Ci0rICogICAgICAgICBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0 X3N0YXRlKDxQcm9wZXJ0eT4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLSsgKiAgICAgcmV0 dXJuIF9fcHl4X3Jlc3VsdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogY2RlZiBf X3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKFByb3BlcnR5IF9fcHl4X3Jlc3VsdCwg dHVwbGUgX19weXhfc3RhdGUpOgotKyAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0 YXRlWzBdOyBfX3B5eF9yZXN1bHQubmFtZSA9IF9fcHl4X3N0YXRlWzFdCi0rICovCi0rICBfX1B5 eF9YREVDUkVGKF9fcHl4X3IpOwotKyAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0 KTsKLSsgIF9fcHl4X3IgPSBfX3B5eF92X19fcHl4X3Jlc3VsdDsKLSAgIGdvdG8gX19weXhfTDA7 Ci0rCi0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCi0rICogZGVmIF9fcHl4X3VucGlja2xlX1By b3BlcnR5KF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRlKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNr bGVFcnJvcgotKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKLSsgKi8KLSsKLSsgIC8q IGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERF Q1JFRihfX3B5eF90XzEpOwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzMpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGli cy5tcHYuQ2FsbGJhY2tUaHJlYWQuX19pbml0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5l bm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKLSsgIF9f UHl4X1hERUNSRUYoX19weXhfdF81KTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX1Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0gICBfX3B5eF9yID0gTlVMTDsKLSAgIF9fcHl4X0ww OjsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcik7Ci0rICBfX1B5 eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKLSAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4 X3IpOwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhf cjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDEKLS0gKiAg ICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IEZhbHNlCi0tICogCi0tICogICAgIGRlZiBzaHV0ZG93 bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi5p c3NodXRkb3duID0gVHJ1ZQotLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKLSsvKiAi KHRyZWUgZnJhZ21lbnQpIjoxMQotKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfUHJvcGVydHlf X3NldF9zdGF0ZSg8UHJvcGVydHk+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCi0rICogICAg IHJldHVybiBfX3B5eF9yZXN1bHQKLSsgKiBjZGVmIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19z ZXRfc3RhdGUoUHJvcGVydHkgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5 eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0Lm5hbWUgPSBfX3B5eF9zdGF0ZVsxXQotKyAqICAgICBp ZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3Rf XycpOgotICAqLwotIAotLS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8zc2h1dGRvd24o UHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8K LS1zdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRD YWxsYmFja1RocmVhZF8zc2h1dGRvd24gPSB7InNodXRkb3duIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzNzaHV0ZG93biwgTUVU SF9PLCAwfTsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xNENhbGxiYWNrVGhyZWFkXzNzaHV0ZG93bihQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZikgewotLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotLSAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzaHV0 ZG93biAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8yc2h1dGRvd24oX19weXhfc2VsZiwgKChQeU9iamVj dCAqKV9fcHl4X3Zfc2VsZikpOwotLQotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotLX0KLS0K LS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxi YWNrVGhyZWFkXzJzaHV0ZG93bihDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQ eU9iamVjdCAqX19weXhfdl9zZWxmKSB7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpfX3B5eF92X19fcHl4 X3Jlc3VsdCwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKLSAgIFB5T2JqZWN0ICpf X3B5eF9yID0gTlVMTDsKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0gICBQeU9iamVj dCAqX19weXhfdF8xID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotLSAg UHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0rICBpbnQgX19weXhfdF8yOwotKyAgUHlfc3Np emVfdCBfX3B5eF90XzM7Ci0rICBpbnQgX19weXhfdF80OwotKyAgaW50IF9fcHl4X3RfNTsKLSsg IFB5T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5V TEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF84ID0gTlVMTDsKLSAgIGludCBfX3B5eF9saW5lbm8g PSAwOwotICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotICAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNodXRkb3duIiwg MCk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MgotLSAqIAot LSAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6Ci0tICogICAgICAgICBzZWxmLmlzc2h1dGRvd24g PSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYuY2Fs bGJhY2sgPSBOb25lCi0tICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCi0tICovCi0tICBp ZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19pc3No dXRkb3duLCBQeV9UcnVlKSA8IDApIF9fUFlYX0VSUigwLCAxMTQyLCBfX3B5eF9MMV9lcnJvcikK LSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9f c2V0X3N0YXRlIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTE0MwotLSAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6Ci0tICogICAgICAgICBzZWxmLmlzc2h1 dGRvd24gPSBUcnVlCi0tICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCi0tICog Ci0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgotKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0 Ci0rICogY2RlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKFByb3BlcnR5IF9f cHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgotKyAqICAgICBfX3B5eF9yZXN1bHQuZGF0 YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubmFtZSA9IF9fcHl4X3N0YXRlWzFdICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+ IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKLSsgKiAgICAgICAgIF9f cHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbMl0pCi0gICovCi0tICBpZiAo X19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jYWxsYmFj aywgUHlfTm9uZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE0MywgX19weXhfTDFfZXJyb3IpCi0tCi0t ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0NAotLSAqICAgICAgICAgc2Vs Zi5pc3NodXRkb3duID0gVHJ1ZQotLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKLS0g KiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqIAotLSAqICAgICBkZWYgY2FsbChzZWxmKToKLS0gKi8KLS0gIF9fcHl4X3RfMiA9IF9f UHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfbG9jayk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExNDQsIF9fcHl4X0wxX2Vycm9y KQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX3B5eF90XzMgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfMiwgX19weXhfbl9zX3JlbGVhc2UpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTQ0LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7Ci0tICBfX3B5eF90XzIgPSBOVUxMOwotLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKLS0gICAgX19weXhf dF8yID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKLS0gICAgaWYgKGxpa2VseShfX3B5 eF90XzIpKSB7Ci0tICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfMyk7Ci0tICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMik7Ci0tICAgICAg X19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Rf MywgZnVuY3Rpb24pOwotLSAgICB9Ci0rICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0 ZSA9PSBQeV9Ob25lKSkgewotKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAi J05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsKLSsgICAgX19QWVhfRVJS KDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKLSAgIH0KLS0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzIp ID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzMsIF9fcHl4X3RfMikgOiBfX1B5 eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8zKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhf dF8yKTsgX19weXhfdF8yID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDExNDQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfR2V0SXRl bUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAwLCBsb25nLCAxLCBfX1B5eF9QeUludF9G cm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigx LCAxMiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Ci0r ICBfX1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPmRhdGEpOwotKyAgX19QeXhfREVD UkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5kYXRhKTsKLSsgIF9fcHl4X3ZfX19weXhfcmVzdWx0 LT5kYXRhID0gX19weXhfdF8xOwotKyAgX19weXhfdF8xID0gMDsKLSsgIGlmICh1bmxpa2VseShf X3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7Ci0rICAgIFB5RXJyX1NldFN0cmluZyhQ eUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIp OwotKyAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgfQotKyAgX19weXhf dF8xID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAxLCBsb25n LCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X0dPVFJF RihfX3B5eF92X19fcHl4X3Jlc3VsdC0+bmFtZSk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdl9f X3B5eF9yZXN1bHQtPm5hbWUpOwotKyAgX19weXhfdl9fX3B5eF9yZXN1bHQtPm5hbWUgPSBfX3B5 eF90XzE7Ci0rICBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExNDEKLS0gKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IEZhbHNlCi0tICog Ci0tICogICAgIGRlZiBzaHV0ZG93bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gVHJ1ZQotLSAqICAgICAgICAgc2VsZi5j YWxsYmFjayA9IE5vbmUKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjEzCi0rICogY2RlZiBfX3B5 eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKFByb3BlcnR5IF9fcHl4X3Jlc3VsdCwgdHVw bGUgX19weXhfc3RhdGUpOgotKyAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRl WzBdOyBfX3B5eF9yZXN1bHQubmFtZSA9IF9fcHl4X3N0YXRlWzFdCi0rICogICAgIGlmIGxlbihf X3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2Rp Y3RfXy51cGRhdGUoX19weXhfc3RhdGVbMl0pCi0gICovCi0rICBpZiAodW5saWtlbHkoX19weXhf dl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgewotKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNf VHlwZUVycm9yLCAib2JqZWN0IG9mIHR5cGUgJ05vbmVUeXBlJyBoYXMgbm8gbGVuKCkiKTsKLSsg ICAgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKLSsgIH0KLSsgIF9fcHl4X3RfMyA9 IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdl9fX3B5eF9zdGF0ZSk7IGlmICh1bmxpa2VseShfX3B5 eF90XzMgPT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJy b3IpCi0rICBfX3B5eF90XzQgPSAoKF9fcHl4X3RfMyA+IDIpICE9IDApOwotKyAgaWYgKF9fcHl4 X3RfNCkgewotKyAgfSBlbHNlIHsKLSsgICAgX19weXhfdF8yID0gX19weXhfdF80OwotKyAgICBn b3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKLSsgIH0KLSsgIF9fcHl4X3RfNCA9IF9fUHl4 X0hhc0F0dHIoKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfcmVzdWx0KSwgX19weXhfbl9zX2Rp Y3QpOyBpZiAodW5saWtlbHkoX19weXhfdF80ID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigxLCAx MywgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzUgPSAoX19weXhfdF80ICE9IDApOwotKyAg X19weXhfdF8yID0gX19weXhfdF81OwotKyAgX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKLSsg IGlmIChfX3B5eF90XzIpIHsKLSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19w eXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLS0gIGdvdG8gX19weXhfTDA7 Ci0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0tICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0t ICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1RocmVhZC5z aHV0ZG93biIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwot LSAgX19weXhfciA9IE5VTEw7Ci0tICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9YR0lWRVJFRihfX3B5 eF9yKTsKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4 X3I7Ci0tfQotLQotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ2Ci0tICog ICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCi0tICogCi0tICogICAgIGRlZiBjYWxsKHNlbGYp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLmxvY2sucmVs ZWFzZSgpCi0tICogCi0rICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjE0Ci0rICogICAgIF9fcHl4 X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5uYW1lID0gX19weXhf c3RhdGVbMV0KLSsgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19w eXhfcmVzdWx0LCAnX19kaWN0X18nKToKLSsgKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3Rf Xy51cGRhdGUoX19weXhfc3RhdGVbMl0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAg Ki8KLSsgICAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0 ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNik7Ci0rICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0 dHJTdHIoX19weXhfdF82LCBfX3B5eF9uX3NfdXBkYXRlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzcpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYo X19weXhfdF83KTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7 Ci0rICAgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7Ci0r ICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2JqZWN0 IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7Ci0rICAgICAgX19QWVhfRVJSKDEsIDE0LCBfX3B5eF9M MV9lcnJvcikKLSsgICAgfQotKyAgICBfX3B5eF90XzYgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxl KF9fcHl4X3ZfX19weXhfc3RhdGUsIDIsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywg MCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5 eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICAgIF9fcHl4X3Rf OCA9IE5VTEw7Ci0rICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0 aG9kX0NoZWNrKF9fcHl4X3RfNykpKSB7Ci0rICAgICAgX19weXhfdF84ID0gUHlNZXRob2RfR0VU X1NFTEYoX19weXhfdF83KTsKLSsgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfOCkpIHsKLSsgICAg ICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90Xzcp OwotKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfOCk7Ci0rICAgICAgICBfX1B5eF9JTkNS RUYoZnVuY3Rpb24pOwotKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzcsIGZ1bmN0 aW9uKTsKLSsgICAgICB9Ci0rICAgIH0KLSsgICAgX19weXhfdF8xID0gKF9fcHl4X3RfOCkgPyBf X1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF83LCBfX3B5eF90XzgsIF9fcHl4X3RfNikg OiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNywgX19weXhfdF82KTsKLSsgICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOwotKyAgICBfX1B5eF9ERUNS RUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSsgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7 Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLS8qIFB5 dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF81Y2FsbChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlP YmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwotLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5 eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzVjYWxsID0geyJj YWxsIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxi YWNrVGhyZWFkXzVjYWxsLCBNRVRIX08sIDB9OwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNWNhbGwoUHlPYmplY3QgKl9f cHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKLS0gIFB5T2JqZWN0ICpfX3B5eF9y ID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiY2FsbCAod3JhcHBlcikiLCAwKTsKLS0gIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF80Y2FsbChfX3B5eF9zZWxmLCAo KFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7Ci0tCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7 Ci0tfQotLQotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzE0Q2FsbGJhY2tUaHJlYWRfNGNhbGwoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxM OwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzEg PSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19w eXhfdF8zID0gTlVMTDsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAq X19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoImNhbGwiLCAwKTsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTQ3Ci0tICogCi0tICogICAgIGRlZiBjYWxsKHNlbGYpOgot LSAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogCi0tICogICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJhY2spOgotKyAgICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxMwotKyAqIGNkZWYgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9z dGF0ZShQcm9wZXJ0eSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKLSsgKiAgICAg X19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0Lm5hbWUgPSBf X3B5eF9zdGF0ZVsxXQotKyAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0 cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzJd KQotICAqLwotLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92 X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgMTE0NywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK LS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF8yLCBfX3B5 eF9uX3NfcmVsZWFzZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDEx NDcsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICBfX1B5 eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gIF9fcHl4X3RfMiA9IE5VTEw7 Ci0tICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzMpKSkgewotLSAgICBfX3B5eF90XzIgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90 XzMpOwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMikpIHsKLS0gICAgICBQeU9iamVjdCogZnVu Y3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8zKTsKLS0gICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF8yKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAg IF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlvbik7Ci0tICAgIH0KLSAgIH0KLS0g IF9fcHl4X3RfMSA9IChfX3B5eF90XzIpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzMsIF9fcHl4X3RfMikgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8zKTsK LS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gIGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNDcsIF9fcHl4X0wxX2Vycm9yKQotLSAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19w eXhfdF8zID0gMDsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDYKLS0gKiAgICAgICAg IHNlbGYubG9jay5yZWxlYXNlKCkKLS0gKiAKLS0gKiAgICAgZGVmIGNhbGwoc2VsZik6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkK LS0gKiAKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjExCi0rICogICAgICAgICBfX3B5eF91bnBp Y2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKDxQcm9wZXJ0eT4gX19weXhfcmVzdWx0LCBfX3B5eF9z dGF0ZSkKLSsgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAotKyAqIGNkZWYgX19weXhfdW5waWNr bGVfUHJvcGVydHlfX3NldF9zdGF0ZShQcm9wZXJ0eSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4 X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBfX3B5eF9yZXN1 bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubmFtZSA9IF9fcHl4X3N0YXRl WzFdCi0rICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jl c3VsdCwgJ19fZGljdF9fJyk6Ci0gICovCi0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K LUBAIC0yMjE5MCw0MyArMjE3OTUsNDUgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF80Y2FsbChDWVRIT05fVU4KLSAgIGdv dG8gX19weXhfTDA7Ci0gICBfX3B5eF9MMV9lcnJvcjo7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMyk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxs YmFja1RocmVhZC5jYWxsIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7Ci0tICBfX3B5eF9yID0gTlVMTDsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsK LSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF84 KTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlj a2xlX1Byb3BlcnR5X19zZXRfc3RhdGUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKLSsgIF9fcHl4X3IgPSAwOwotICAgX19weXhfTDA6OwotICAgX19QeXhf WEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAg IHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTE0OQotLSAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQotLSAqIAotLSAqICAgICBk ZWYgc2V0KHNlbGYsIGNhbGxiYWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq ICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCi0tICogCi0rLyogIih0cmVlIGZyYWdt ZW50KSI6MQotKyAqIGRlZiBfX3B5eF91bnBpY2tsZV9FdmVudChfX3B5eF90eXBlLCBsb25nIF9f cHl4X2NoZWNrc3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKLSsgKiAgICAgY2RlZiBvYmpl Y3QgX19weXhfcmVzdWx0Ci0gICovCi0gCi0gLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFk XzdzZXQoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVj dCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLwotLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzdzZXQgPSB7InNldCIsIChQ eUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzdzZXQsIE1FVEhfVkFSQVJHU3xNRVRI X0tFWVdPUkRTLCAwfTsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzdzZXQoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgewotLSAgUHlPYmplY3QgKl9f cHl4X3Zfc2VsZiA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhfdl9jYWxsYmFjayA9IDA7Ci0rc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfX3B5eF91bnBp Y2tsZV9FdmVudChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5 T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCi0rc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4 X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX19weXhfdW5waWNrbGVfRXZlbnQgPSB7Il9f cHl4X3VucGlja2xlX0V2ZW50IiwgKFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRo S2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX19weXhfdW5waWNrbGVf RXZlbnQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfTsKLStzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19fcHl4X3VucGlja2xlX0V2ZW50KFB5 T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4 X2t3ZHMpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5cGUgPSAwOwotKyAgbG9uZyBf X3B5eF92X19fcHl4X2NoZWNrc3VtOwotKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUg PSAwOwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFyICpfX3B5eF9maWxl bmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBQeU9iamVjdCAqX19w eXhfciA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoInNldCAod3JhcHBlcikiLCAwKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfX3B5eF91bnBpY2tsZV9FdmVudCAod3JhcHBlcikiLCAwKTsKLSAgIHsKLS0g ICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3Nfc2Vs ZiwmX19weXhfbl9zX2NhbGxiYWNrLDB9OwotLSAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAs MH07Ci0rICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhf bl9zX3B5eF90eXBlLCZfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCZfX3B5eF9uX3NfcHl4X3N0YXRl LDB9OwotKyAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCwwfTsKLSAgICAgaWYgKHVubGlr ZWx5KF9fcHl4X2t3ZHMpKSB7Ci0gICAgICAgUHlfc3NpemVfdCBrd19hcmdzOwotICAgICAgIGNv bnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpOwot ICAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKLSsgICAgICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9 IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7Ci0rICAgICAgICBDWVRIT05fRkFMTFRI Uk9VR0g7Ci0gICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9f cHl4X2FyZ3MsIDEpOwotICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotICAgICAgICAgY2Fz ZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKLUBAIC0y MjIzNywyMDcgKzIxODQ0LDM3OCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzdzZXQoUHlPYmplY3QgKgotICAgICAgIGt3 X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKLSAgICAgICBzd2l0Y2ggKHBvc19hcmdz KSB7Ci0gICAgICAgICBjYXNlICAwOgotLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0g X19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3NlbGYpKSAhPSAw KSkga3dfYXJncy0tOwotKyAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlE aWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF90eXBlKSkgIT0gMCkpIGt3 X2FyZ3MtLTsKLSAgICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLSAg ICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSAgICAgICAgIGNhc2UgIDE6Ci0tICAgICAgICBp ZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2Rz LCBfX3B5eF9uX3NfY2FsbGJhY2spKSAhPSAwKSkga3dfYXJncy0tOwotKyAgICAgICAgaWYgKGxp a2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19w eXhfbl9zX3B5eF9jaGVja3N1bSkpICE9IDApKSBrd19hcmdzLS07Ci0gICAgICAgICBlbHNlIHsK LS0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInNldCIsIDEsIDIsIDIsIDEp OyBfX1BZWF9FUlIoMCwgMTE0OSwgX19weXhfTDNfZXJyb3IpCi0rICAgICAgICAgIF9fUHl4X1Jh aXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9FdmVudCIsIDEsIDMsIDMsIDEpOyBf X1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCi0rICAgICAgICB9Ci0rICAgICAgICBDWVRI T05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICBjYXNlICAyOgotKyAgICAgICAgaWYgKGxpa2VseSgo dmFsdWVzWzJdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9z X3B5eF9zdGF0ZSkpICE9IDApKSBrd19hcmdzLS07Ci0rICAgICAgICBlbHNlIHsKLSsgICAgICAg ICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3VucGlja2xlX0V2ZW50IiwgMSwg MywgMywgMik7IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKLSAgICAgICAgIH0KLSAg ICAgICB9Ci0gICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewotLSAgICAgICAgaWYg KHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9w eWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0IikgPCAwKSkgX19QWVhfRVJSKDAs IDExNDksIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNl T3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMs IHBvc19hcmdzLCAiX19weXhfdW5waWNrbGVfRXZlbnQiKSA8IDApKSBfX1BZWF9FUlIoMSwgMSwg X19weXhfTDNfZXJyb3IpCi0gICAgICAgfQotLSAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJ WkUoX19weXhfYXJncykgIT0gMikgewotKyAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUo X19weXhfYXJncykgIT0gMykgewotICAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7 Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5 eF9hcmdzLCAwKTsKLSAgICAgICB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2Fy Z3MsIDEpOwotKyAgICAgIHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywg Mik7Ci0gICAgIH0KLS0gICAgX19weXhfdl9zZWxmID0gdmFsdWVzWzBdOwotLSAgICBfX3B5eF92 X2NhbGxiYWNrID0gdmFsdWVzWzFdOwotKyAgICBfX3B5eF92X19fcHl4X3R5cGUgPSB2YWx1ZXNb MF07Ci0rICAgIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gPSBfX1B5eF9QeUludF9Bc19sb25nKHZh bHVlc1sxXSk7IGlmICh1bmxpa2VseSgoX19weXhfdl9fX3B5eF9jaGVja3N1bSA9PSAobG9uZykt MSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikK LSsgICAgX19weXhfdl9fX3B5eF9zdGF0ZSA9IHZhbHVlc1syXTsKLSAgIH0KLSAgIGdvdG8gX19w eXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7Ci0gICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJv cjo7Ci0tICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgic2V0IiwgMSwgMiwgMiwgUHlUdXBs ZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9MM19lcnJv cikKLSsgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9FdmVudCIs IDEsIDMsIDMsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMSwgMSwg X19weXhfTDNfZXJyb3IpCi0gICBfX3B5eF9MM19lcnJvcjo7Ci0tICBfX1B5eF9BZGRUcmFjZWJh Y2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1RocmVhZC5zZXQiLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSsgIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX0V2ZW50IiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKLSAgIHJldHVybiBOVUxMOwotICAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5n X2RvbmU6OwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENh bGxiYWNrVGhyZWFkXzZzZXQoX19weXhfc2VsZiwgX19weXhfdl9zZWxmLCBfX3B5eF92X2NhbGxi YWNrKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTJfX3B5 eF91bnBpY2tsZV9FdmVudChfX3B5eF9zZWxmLCBfX3B5eF92X19fcHl4X3R5cGUsIF9fcHl4X3Zf X19weXhfY2hlY2tzdW0sIF9fcHl4X3ZfX19weXhfc3RhdGUpOwotIAotICAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCi0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVy biBfX3B5eF9yOwotIH0KLSAKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzZzZXQoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAq X19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2Fs bGJhY2spIHsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMl9fcHl4X3VucGlja2xlX0V2ZW50KENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3Nl bGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5cGUsIGxvbmcgX19weXhfdl9fX3B5eF9jaGVj a3N1bSwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKLSsgIFB5T2JqZWN0ICpfX3B5 eF92X19fcHl4X1BpY2tsZUVycm9yID0gMDsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3Jl c3VsdCA9IDA7Ci0gICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucwotKyAgaW50IF9fcHl4X3RfMTsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzIg PSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19w eXhfdF80ID0gTlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwotKyAgaW50IF9f cHl4X3RfNjsKLSAgIGludCBfX3B5eF9saW5lbm8gPSAwOwotICAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoInNldCIsIDApOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fcHl4X3VucGlja2xlX0V2ZW50IiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTE1MAotLSAqIAotLSAqICAgICBkZWYgc2V0KHNlbGYsIGNhbGxiYWNr KToKLS0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjayAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogCi0tICogICAgIGRlZiBydW4oc2VsZik6Ci0rICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjo0Ci0rICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCi0rICog ICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotKyAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAh PSAweGRhMzhjMjU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIGZy b20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgotKyAqICAg ICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVz IHZzIDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJvciwgaWQsIHJlcGx5X3VzZXJkYXRhKSkiICUgX19w eXhfY2hlY2tzdW0pCi0gICovCi0tICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5 eF92X3NlbGYsIF9fcHl4X25fc19jYWxsYmFjaywgX19weXhfdl9jYWxsYmFjaykgPCAwKSBfX1BZ WF9FUlIoMCwgMTE1MCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSAoKF9fcHl4X3Zf X19weXhfY2hlY2tzdW0gIT0gMHhkYTM4YzI1KSAhPSAwKTsKLSsgIGlmIChfX3B5eF90XzEpIHsK LSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ5Ci0tICogICAgICAg ICBzZWxmLmxvY2sucmVsZWFzZSgpCi0tICogCi0tICogICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJh Y2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLmNhbGxi YWNrID0gY2FsbGJhY2sKLS0gKiAKLSsgICAgLyogIih0cmVlIGZyYWdtZW50KSI6NQotKyAqICAg ICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKLSsgKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0g MHhkYTM4YzI1OgotKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFz IF9fcHl4X1BpY2tsZUVycm9yICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAg ICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2 cyAweGRhMzhjMjUgPSAoZGF0YSwgZXJyb3IsIGlkLCByZXBseV91c2VyZGF0YSkpIiAlIF9fcHl4 X2NoZWNrc3VtKQotKyAqICAgICBfX3B5eF9yZXN1bHQgPSBFdmVudC5fX25ld19fKF9fcHl4X3R5 cGUpCi0gICovCi0rICAgIF9fcHl4X3RfMiA9IFB5TGlzdF9OZXcoMSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKLSsgICAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19QaWNrbGVFcnJv cik7Ci0rICAgIF9fUHl4X0dJVkVSRUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsKLSsgICAgUHlM aXN0X1NFVF9JVEVNKF9fcHl4X3RfMiwgMCwgX19weXhfbl9zX1BpY2tsZUVycm9yKTsKLSsgICAg X19weXhfdF8zID0gX19QeXhfSW1wb3J0KF9fcHl4X25fc19waWNrbGUsIF9fcHl4X3RfMiwgLTEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJv cikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgICBfX3B5eF90XzIgPSBfX1B5eF9JbXBvcnRGcm9t KF9fcHl4X3RfMywgX19weXhfbl9zX1BpY2tsZUVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOwotKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKLSsgICAgX19weXhfdl9f X3B5eF9QaWNrbGVFcnJvciA9IF9fcHl4X3RfMjsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Mik7IF9fcHl4X3RfMiA9IDA7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOwotIAotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX3B5eF9yID0gUHlf Tm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2 Ci0rICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4ZGEzOGMyNToKLSsgKiAgICAgICAgIGZy b20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgotKyAqICAg ICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVz IHZzIDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJvciwgaWQsIHJlcGx5X3VzZXJkYXRhKSkiICUgX19w eXhfY2hlY2tzdW0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgX19weXhf cmVzdWx0ID0gRXZlbnQuX19uZXdfXyhfX3B5eF90eXBlKQotKyAqICAgICBpZiBfX3B5eF9zdGF0 ZSBpcyBub3QgTm9uZToKLSsgKi8KLSsgICAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9s b25nKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9f UFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Mik7Ci0rICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdChfX3B5eF9rcF9zX0lu Y29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGRhLCBfX3B5eF90XzIpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNCk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOwotKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcik7Ci0r ICAgIF9fcHl4X3RfMiA9IF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3I7IF9fcHl4X3RfNSA9IE5V TEw7Ci0rICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2Rf Q2hlY2soX19weXhfdF8yKSkpIHsKLSsgICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VM RihfX3B5eF90XzIpOwotKyAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewotKyAgICAgICAg UHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0r ICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKLSsgICAgICAgIF9fUHl4X0lOQ1JFRihm dW5jdGlvbik7Ci0rICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24p OwotKyAgICAgIH0KLSsgICAgfQotKyAgICBfX3B5eF90XzMgPSAoX19weXhfdF81KSA/IF9fUHl4 X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNSwgX19weXhfdF80KSA6IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzQpOwotKyAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0rICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykp IF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMyk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAg ICBfX1B5eF9SYWlzZShfX3B5eF90XzMsIDAsIDAsIDApOwotKyAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSsgICAgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vy cm9yKQotKwotKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0Ci0rICogICAgIGNkZWYgb2JqZWN0 IF9fcHl4X1BpY2tsZUVycm9yCi0rICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotKyAq ICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweGRhMzhjMjU6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBf X3B5eF9QaWNrbGVFcnJvcgotKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIklu Y29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJvciwgaWQs IHJlcGx5X3VzZXJkYXRhKSkiICUgX19weXhfY2hlY2tzdW0pCi0rICovCi0rICB9Ci0rCi0rICAv KiAiKHRyZWUgZnJhZ21lbnQpIjo3Ci0rICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlj a2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKLSsgKiAgICAgICAgIHJhaXNlIF9fcHl4X1Bp Y2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGRhMzhjMjUgPSAoZGF0 YSwgZXJyb3IsIGlkLCByZXBseV91c2VyZGF0YSkpIiAlIF9fcHl4X2NoZWNrc3VtKQotKyAqICAg ICBfX3B5eF9yZXN1bHQgPSBFdmVudC5fX25ld19fKF9fcHl4X3R5cGUpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6Ci0rICog ICAgICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKDxFdmVudD4gX19weXhfcmVz dWx0LCBfX3B5eF9zdGF0ZSkKLSsgKi8KLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudCksIF9fcHl4X25fc19uZXcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VS UigxLCA3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAg X19weXhfdF80ID0gTlVMTDsKLSsgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5 KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Ci0rICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9k X0dFVF9TRUxGKF9fcHl4X3RfMik7Ci0rICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgewotKyAg ICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIp OwotKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihm dW5jdGlvbik7Ci0rICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsK LSsgICAgfQotKyAgfQotKyAgX19weXhfdF8zID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVj dF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3ZfX19weXhfdHlwZSkgOiBf X1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9fX3B5eF90eXBlKTsK LSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgIGlmICh1bmxp a2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhf dF8yID0gMDsKLSsgIF9fcHl4X3ZfX19weXhfcmVzdWx0ID0gX19weXhfdF8zOwotKyAgX19weXhf dF8zID0gMDsKLSsKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKLSsgKiAgICAgICAgIHJhaXNl IF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGRhMzhj MjUgPSAoZGF0YSwgZXJyb3IsIGlkLCByZXBseV91c2VyZGF0YSkpIiAlIF9fcHl4X2NoZWNrc3Vt KQotKyAqICAgICBfX3B5eF9yZXN1bHQgPSBFdmVudC5fX25ld19fKF9fcHl4X3R5cGUpCi0rICog ICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKDxFdmVudD4g X19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLSsgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAot KyAqLwotKyAgX19weXhfdF8xID0gKF9fcHl4X3ZfX19weXhfc3RhdGUgIT0gUHlfTm9uZSk7Ci0r ICBfX3B5eF90XzYgPSAoX19weXhfdF8xICE9IDApOwotKyAgaWYgKF9fcHl4X3RfNikgewotKwot KyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo5Ci0rICogICAgIF9fcHl4X3Jlc3VsdCA9IEV2ZW50 Ll9fbmV3X18oX19weXhfdHlwZSkKLSsgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6 Ci0rICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKDxFdmVudD4gX19w eXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0rICogY2RlZiBfX3B5eF91bnBpY2tsZV9FdmVudF9f c2V0X3N0YXRlKEV2ZW50IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgotKyAqLwot KyAgICBpZiAoIShsaWtlbHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3RhdGUp KXx8KChfX3B5eF92X19fcHl4X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQeUV4 Y19UeXBlRXJyb3IsICJFeHBlY3RlZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5X1RZ UEUoX19weXhfdl9fX3B5eF9zdGF0ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCA5LCBf X3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8zID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZSgoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCAoKFB5 T2JqZWN0KilfX3B5eF92X19fcHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkg X19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8zKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rCi0r ICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKLSsgKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2ts ZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGRhMzhjMjUgPSAoZGF0YSwg ZXJyb3IsIGlkLCByZXBseV91c2VyZGF0YSkpIiAlIF9fcHl4X2NoZWNrc3VtKQotKyAqICAgICBf X3B5eF9yZXN1bHQgPSBFdmVudC5fX25ld19fKF9fcHl4X3R5cGUpCi0rICogICAgIGlmIF9fcHl4 X3N0YXRlIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAg ICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKDxFdmVudD4gX19weXhfcmVzdWx0 LCBfX3B5eF9zdGF0ZSkKLSsgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAotKyAqLwotKyAgfQot KwotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTAKLSsgKiAgICAgaWYgX19weXhfc3RhdGUgaXMg bm90IE5vbmU6Ci0rICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKDxF dmVudD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLSsgKiAgICAgcmV0dXJuIF9fcHl4X3Jl c3VsdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogY2RlZiBfX3B5eF91bnBpY2ts ZV9FdmVudF9fc2V0X3N0YXRlKEV2ZW50IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUp OgotKyAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1 bHQuZXJyb3IgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LmlkID0gX19weXhfc3RhdGVb Ml07IF9fcHl4X3Jlc3VsdC5yZXBseV91c2VyZGF0YSA9IF9fcHl4X3N0YXRlWzNdCi0rICovCi0r ICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotKyAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfX19weXhf cmVzdWx0KTsKLSsgIF9fcHl4X3IgPSBfX3B5eF92X19fcHl4X3Jlc3VsdDsKLSAgIGdvdG8gX19w eXhfTDA7Ci0rCi0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCi0rICogZGVmIF9fcHl4X3VucGlj a2xlX0V2ZW50KF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRlKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9Q aWNrbGVFcnJvcgotKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKLSsgKi8KLSsKLSsg IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhf QWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQuc2V0IiwgX19w eXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMik7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Ci0rICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNCk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7Ci0rICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9FdmVudCIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotICAgX19weXhf ciA9IE5VTEw7Ci0gICBfX3B5eF9MMDo7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhf UGlja2xlRXJyb3IpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdCk7Ci0g ICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTUyCi0tICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKLS0g KiAKLS0gKiAgICAgZGVmIHJ1bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNzaHV0ZG93bjoKLS0gKiAgICAgICAgICAgICBz ZWxmLmxvY2suYWNxdWlyZShUcnVlKQotKy8qICIodHJlZSBmcmFnbWVudCkiOjExCi0rICogICAg ICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKDxFdmVudD4gX19weXhfcmVzdWx0 LCBfX3B5eF9zdGF0ZSkKLSsgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAotKyAqIGNkZWYgX19w eXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShFdmVudCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9f cHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBfX3B5eF9y ZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9z dGF0ZVsxXTsgX19weXhfcmVzdWx0LmlkID0gX19weXhfc3RhdGVbMl07IF9fcHl4X3Jlc3VsdC5y ZXBseV91c2VyZGF0YSA9IF9fcHl4X3N0YXRlWzNdCi0rICogICAgIGlmIGxlbihfX3B5eF9zdGF0 ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6Ci0gICovCi0gCi0t LyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzlydW4oUHlPYmplY3QgKl9fcHl4X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlNZXRob2REZWYg X19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF85cnVuID0g eyJydW4iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2Fs bGJhY2tUaHJlYWRfOXJ1biwgTUVUSF9PLCAwfTsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzlydW4oUHlPYmplY3QgKl9f cHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKLS0gIFB5T2JqZWN0ICpfX3B5eF9y ID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgicnVuICh3cmFwcGVyKSIsIDApOwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzhydW4oX19weXhfc2VsZiwgKChQ eU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOwotLQotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICov Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwot LX0KLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NENhbGxiYWNrVGhyZWFkXzhydW4oQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdl9fX3B5eF9yZXN1 bHQsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7Ci0gICBQeU9iamVjdCAqX19weXhf ciA9IE5VTEw7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotICAgUHlPYmplY3QgKl9f cHl4X3RfMSA9IE5VTEw7Ci0gICBpbnQgX19weXhfdF8yOwotLSAgaW50IF9fcHl4X3RfMzsKLS0g IFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5V TEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90 XzcgPSBOVUxMOwotKyAgZW51bSBtcHZfZXZlbnRfaWQgX19weXhfdF8zOwotKyAgaW50IF9fcHl4 X3RfNDsKLSsgIFB5X3NzaXplX3QgX19weXhfdF81OwotKyAgaW50IF9fcHl4X3RfNjsKLSsgIGlu dCBfX3B5eF90Xzc7Ci0rICBQeU9iamVjdCAqX19weXhfdF84ID0gTlVMTDsKLSsgIFB5T2JqZWN0 ICpfX3B5eF90XzkgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4X3RfMTAgPSBOVUxMOwotICAg aW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5V TEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgicnVuIiwgMCk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTE1MwotLSAqIAotLSAqICAgICBkZWYgcnVuKHNlbGYpOgotLSAqICAgICAgICAgd2hpbGUgbm90 IHNlbGYuaXNzaHV0ZG93bjogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCi0tICogICAgICAgICAgICAgc2VsZi5tcHZf Y2FsbGJhY2soc2VsZi5jYWxsYmFjaykgaWYgc2VsZi5jYWxsYmFjayBlbHNlIE5vbmUKLS0gKi8K LS0gIHdoaWxlICgxKSB7Ci0tICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfaXNzaHV0ZG93bik7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNTMsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVl KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDEx NTMsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKLS0gICAgX19weXhfdF8zID0gKCghX19weXhfdF8yKSAhPSAwKTsKLS0gICAgaWYg KCFfX3B5eF90XzMpIGJyZWFrOwotKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4 X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUiLCAwKTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExNTQKLS0gKiAgICAgZGVmIHJ1bihzZWxmKToKLS0gKiAgICAg ICAgIHdoaWxlIG5vdCBzZWxmLmlzc2h1dGRvd246Ci0tICogICAgICAgICAgICAgc2VsZi5sb2Nr LmFjcXVpcmUoVHJ1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAg ICAgIHNlbGYubXB2X2NhbGxiYWNrKHNlbGYuY2FsbGJhY2spIGlmIHNlbGYuY2FsbGJhY2sgZWxz ZSBOb25lCi0tICogCi0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgotKyAqICAgICByZXR1cm4g X19weXhfcmVzdWx0Ci0rICogY2RlZiBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKEV2 ZW50IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgotKyAqICAgICBfX3B5eF9yZXN1 bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9zdGF0 ZVsxXTsgX19weXhfcmVzdWx0LmlkID0gX19weXhfc3RhdGVbMl07IF9fcHl4X3Jlc3VsdC5yZXBs eV91c2VyZGF0YSA9IF9fcHl4X3N0YXRlWzNdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0 LCAnX19kaWN0X18nKToKLSsgKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUo X19weXhfc3RhdGVbNF0pCi0gICovCi0tICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfbG9jayk7IGlmICh1bmxpa2VseSghX19w eXhfdF80KSkgX19QWVhfRVJSKDAsIDExNTQsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF80KTsKLS0gICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihfX3B5eF90XzQsIF9fcHl4X25fc19hY3F1aXJlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzUpKSBfX1BZWF9FUlIoMCwgMTE1NCwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzUpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKLS0gICAgX19weXhfdF80ID0gTlVMTDsKLS0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9E UyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkpIHsKLS0gICAgICBfX3B5eF90 XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzUpOwotLSAgICAgIGlmIChsaWtlbHkoX19w eXhfdF80KSkgewotLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZV TkNUSU9OKF9fcHl4X3RfNSk7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsKLSsg IGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7Ci0rICAgIFB5 RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qg c3Vic2NyaXB0YWJsZSIpOwotKyAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQot KyAgfQotKyAgX19weXhfdF8xID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4 X3N0YXRlLCAwLCBsb25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0r ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsK LSsgIF9fUHl4X0dPVFJFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+ZGF0YSk7Ci0rICBfX1B5eF9E RUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPmRhdGEpOwotKyAgX19weXhfdl9fX3B5eF9yZXN1 bHQtPmRhdGEgPSBfX3B5eF90XzE7Ci0rICBfX3B5eF90XzEgPSAwOwotKyAgaWYgKHVubGlrZWx5 KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKLSsgICAgUHlFcnJfU2V0U3RyaW5n KFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxl Iik7Ci0rICAgIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0rICB9Ci0rICBfX3B5 eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDEsIGxv bmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOwotKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3Rf MSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVk KCkpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+ZXJyb3Ig PSBfX3B5eF90XzI7Ci0rICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9O b25lKSkgewotKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBl JyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsKLSsgICAgX19QWVhfRVJSKDEsIDEyLCBf X3B5eF9MMV9lcnJvcikKLSsgIH0KLSsgIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVw bGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMiwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25n LCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9f cHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBfX3B5eF90XzMg PSAoKGVudW0gbXB2X2V2ZW50X2lkKV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9ldmVudF9pZChf X3B5eF90XzEpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMSwg MTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3Rf MSA9IDA7Ci0rICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+aWQgPSBfX3B5eF90XzM7Ci0rICBpZiAo dW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgewotKyAgICBQeUVycl9T ZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNj cmlwdGFibGUiKTsKLSsgICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKLSsgIH0K LSsgIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0 ZSwgMywgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Ci0rICBf X1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnJlcGx5X3VzZXJkYXRhKTsKLSsgIF9f UHl4X0RFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+cmVwbHlfdXNlcmRhdGEpOwotKyAgX19w eXhfdl9fX3B5eF9yZXN1bHQtPnJlcGx5X3VzZXJkYXRhID0gX19weXhfdF8xOwotKyAgX19weXhf dF8xID0gMDsKLSsKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjEzCi0rICogY2RlZiBfX3B5eF91 bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKEV2ZW50IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhf c3RhdGUpOgotKyAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5 eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LmlkID0gX19weXhf c3RhdGVbMl07IF9fcHl4X3Jlc3VsdC5yZXBseV91c2VyZGF0YSA9IF9fcHl4X3N0YXRlWzNdCi0r ICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwg J19fZGljdF9fJyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIF9f cHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbNF0pCi0rICovCi0rICBpZiAo dW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgewotKyAgICBQeUVycl9T ZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAib2JqZWN0IG9mIHR5cGUgJ05vbmVUeXBlJyBoYXMg bm8gbGVuKCkiKTsKLSsgICAgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKLSsgIH0K LSsgIF9fcHl4X3RfNSA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdl9fX3B5eF9zdGF0ZSk7IGlm ICh1bmxpa2VseShfX3B5eF90XzUgPT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VSUigxLCAx MywgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSAoKF9fcHl4X3RfNSA+IDQpICE9IDAp OwotKyAgaWYgKF9fcHl4X3RfNikgewotKyAgfSBlbHNlIHsKLSsgICAgX19weXhfdF80ID0gX19w eXhfdF82OwotKyAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKLSsgIH0KLSsgIF9f cHl4X3RfNiA9IF9fUHl4X0hhc0F0dHIoKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfcmVzdWx0 KSwgX19weXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoX19weXhfdF82ID09ICgoaW50KS0xKSkp IF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzcgPSAoX19weXhf dF82ICE9IDApOwotKyAgX19weXhfdF80ID0gX19weXhfdF83OwotKyAgX19weXhfTDRfYm9vbF9i aW5vcF9kb25lOjsKLSsgIGlmIChfX3B5eF90XzQpIHsKLSsKLSsgICAgLyogIih0cmVlIGZyYWdt ZW50KSI6MTQKLSsgKiAgICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsgX19w eXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMV07IF9fcHl4X3Jlc3VsdC5pZCA9IF9fcHl4 X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQucmVwbHlfdXNlcmRhdGEgPSBfX3B5eF9zdGF0ZVszXQot KyAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQs ICdfX2RpY3RfXycpOgotKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShf X3B5eF9zdGF0ZVs0XSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqLwotKyAgICBf X3B5eF90XzggPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92 X19fcHl4X3Jlc3VsdCksIF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90Xzgp KSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF84KTsKLSsgICAgX19weXhfdF85ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5 eF90XzgsIF9fcHl4X25fc191cGRhdGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlY X0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90Xzkp OwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF84KTsgX19weXhfdF84ID0gMDsKLSsgICAgaWYg KHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKLSsgICAgICBQeUVy cl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1 YnNjcmlwdGFibGUiKTsKLSsgICAgICBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQot KyAgICB9Ci0rICAgIF9fcHl4X3RfOCA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9f X3B5eF9zdGF0ZSwgNCwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9y KQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF84KTsKLSsgICAgX19weXhfdF8xMCA9IE5VTEw7 Ci0rICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNr KF9fcHl4X3RfOSkpKSB7Ci0rICAgICAgX19weXhfdF8xMCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9f cHl4X3RfOSk7Ci0rICAgICAgaWYgKGxpa2VseShfX3B5eF90XzEwKSkgewotKyAgICAgICAgUHlP YmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfOSk7Ci0rICAg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xMCk7Ci0gICAgICAgICBfX1B5eF9JTkNSRUYoZnVu Y3Rpb24pOwotLSAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzUsIGZ1bmN0aW9uKTsK LSsgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF85LCBmdW5jdGlvbik7Ci0gICAgICAg fQotICAgICB9Ci0tICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3Rf Q2FsbDJBcmdzKF9fcHl4X3RfNSwgX19weXhfdF80LCBQeV9UcnVlKSA6IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoX19weXhfdF81LCBQeV9UcnVlKTsKLS0gICAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCAxMTU0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8xID0gKF9fcHl4 X3RfMTApID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfOSwgX19weXhfdF8xMCwg X19weXhfdF84KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF85LCBfX3B5eF90 XzgpOwotKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTApOyBfX3B5eF90XzEwID0gMDsKLSsg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7Ci0rICAgIGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKLSAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBf X3B5eF90XzUgPSAwOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF85KTsgX19weXhfdF85ID0g MDsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU1Ci0tICogICAgICAgICB3aGls ZSBub3Qgc2VsZi5pc3NodXRkb3duOgotLSAqICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJl KFRydWUpCi0tICogICAgICAgICAgICAgc2VsZi5tcHZfY2FsbGJhY2soc2VsZi5jYWxsYmFjaykg aWYgc2VsZi5jYWxsYmFjayBlbHNlIE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqIAotLSAqICAgICBkZWYgbXB2X2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrKToKLSsgICAgLyog Iih0cmVlIGZyYWdtZW50KSI6MTMKLSsgKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRf c3RhdGUoRXZlbnQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6Ci0rICogICAgIF9f cHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9f cHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQuaWQgPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVz dWx0LnJlcGx5X3VzZXJkYXRhID0gX19weXhfc3RhdGVbM10KLSsgKiAgICAgaWYgbGVuKF9fcHl4 X3N0YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9f LnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkKLSAgKi8KLS0gICAgX19weXhfdF81ID0gX19QeXhfUHlP YmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jYWxsYmFjayk7IGlmICh1 bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDExNTUsIF9fcHl4X0wxX2Vycm9yKQot LSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKLS0gICAgX19weXhfdF8zID0gX19QeXhfUHlP YmplY3RfSXNUcnVlKF9fcHl4X3RfNSk7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19Q WVhfRVJSKDAsIDExNTUsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9ERUNSRUYoX19weXhf dF81KTsgX19weXhfdF81ID0gMDsKLS0gICAgaWYgKF9fcHl4X3RfMykgewotLSAgICAgIF9fcHl4 X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3Nf bXB2X2NhbGxiYWNrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTE1 NSwgX19weXhfTDFfZXJyb3IpCi0tICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tICAg ICAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9f cHl4X25fc19jYWxsYmFjayk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDExNTUsIF9fcHl4X0wxX2Vycm9yKQotLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwot LSAgICAgIF9fcHl4X3RfNyA9IE5VTEw7Ci0tICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9E UyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKLS0gICAgICAgIF9fcHl4 X3RfNyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNCk7Ci0tICAgICAgICBpZiAobGlrZWx5 KF9fcHl4X3RfNykpIHsKLS0gICAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2Rf R0VUX0ZVTkNUSU9OKF9fcHl4X3RfNCk7Ci0tICAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzcpOwotLSAgICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgICAgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3RfNCwgZnVuY3Rpb24pOwotLSAgICAgICAgfQotLSAgICAgIH0K LS0gICAgICBfX3B5eF90XzUgPSAoX19weXhfdF83KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJn cyhfX3B5eF90XzQsIF9fcHl4X3RfNywgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxP bmVBcmcoX19weXhfdF80LCBfX3B5eF90XzYpOwotLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF83KTsgX19weXhfdF83ID0gMDsKLS0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19w eXhfdF82ID0gMDsKLS0gICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigw LCAxMTU1LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsK LS0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLS0gICAgICBf X3B5eF90XzEgPSBfX3B5eF90XzU7Ci0tICAgICAgX19weXhfdF81ID0gMDsKLS0gICAgfSBlbHNl IHsKLS0gICAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0tICAgICAgX19weXhfdF8xID0gUHlf Tm9uZTsKLS0gICAgfQotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTUyCi0t ICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKLS0gKiAKLS0gKiAgICAgZGVmIHJ1 bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgd2hpbGUg bm90IHNlbGYuaXNzaHV0ZG93bjoKLS0gKiAgICAgICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShU cnVlKQotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKLSsgKiAgICAgICAgIF9fcHl4X3VucGlj a2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQot KyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0rICogY2RlZiBfX3B5eF91bnBpY2tsZV9FdmVu dF9fc2V0X3N0YXRlKEV2ZW50IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19w eXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9y ZXN1bHQuaWQgPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnJlcGx5X3VzZXJkYXRhID0g X19weXhfc3RhdGVbM10KLSsgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDQgYW5kIGhhc2F0 dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKLSAgKi8KLSAKLSAgIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLwotQEAgLTIyNDQ1LDQ1ICsyMjIyMyw0NSBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzhydW4oQ1lUSE9O X1VOVQotICAgZ290byBfX3B5eF9MMDsKLSAgIF9fcHl4X0wxX2Vycm9yOjsKLSAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKLS0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF81KTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKLS0gIF9f UHl4X1hERUNSRUYoX19weXhfdF83KTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2LkNhbGxiYWNrVGhyZWFkLnJ1biIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVu bywgX19weXhfZmlsZW5hbWUpOwotLSAgX19weXhfciA9IE5VTEw7Ci0rICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfOCk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOSk7Ci0rICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMTApOwotKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5t cHYuX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotKyAgX19weXhfciA9IDA7Ci0gICBfX3B5eF9MMDo7 Ci0gICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTU3Ci0tICogICAgICAgICAgICAgc2VsZi5tcHZfY2FsbGJhY2soc2Vs Zi5jYWxsYmFjaykgaWYgc2VsZi5jYWxsYmFjayBlbHNlIE5vbmUKLS0gKiAKLS0gKiAgICAgZGVm IG1wdl9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgICAgIHRyeToKLS0gKiAgICAgICAgICAgICBjYWxsYmFjaygpCi0rLyogIih0 cmVlIGZyYWdtZW50KSI6MQotKyAqIGRlZiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8o X19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9y Ci0rICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotICAqLwotIAotIC8qIFB5dGhvbiB3 cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTRDYWxsYmFja1RocmVhZF8xMW1wdl9jYWxsYmFjayhQeU9iamVjdCAqX19weXhfc2VsZiwg UHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCi0t c3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2Fs bGJhY2tUaHJlYWRfMTFtcHZfY2FsbGJhY2sgPSB7Im1wdl9jYWxsYmFjayIsIChQeUNGdW5jdGlv bikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzExbXB2X2NhbGxiYWNrLCBNRVRIX1ZBUkFSR1N8TUVU SF9LRVlXT1JEUywgMH07Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8xMW1wdl9jYWxsYmFjayhQeU9iamVjdCAqX19weXhf c2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7Ci0tICBD WVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYgPSAwOwotLSAgUHlPYmplY3QgKl9f cHl4X3ZfY2FsbGJhY2sgPSAwOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzE1X19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvKFB5T2JqZWN0ICpf X3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAv KnByb3RvKi8KLStzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTVfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8gPSB7Il9fcHl4X3VucGlja2xl X1JlbmRlckZyYW1lSW5mbyIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtl eXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNV9fcHl4X3VucGlja2xlX1Jl bmRlckZyYW1lSW5mbywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9OwotK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE1X19weXhfdW5waWNrbGVf UmVuZGVyRnJhbWVJbmZvKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJn cywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKLSsgIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5 cGUgPSAwOwotKyAgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtOwotKyAgUHlPYmplY3QgKl9f cHl4X3ZfX19weXhfc3RhdGUgPSAwOwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25z dCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7 Ci0gICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9u cwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIm1wdl9jYWxsYmFjayAod3JhcHBlciki LCAwKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBpY2tsZV9SZW5k ZXJGcmFtZUluZm8gKHdyYXBwZXIpIiwgMCk7Ci0gICB7Ci0tICAgIHN0YXRpYyBQeU9iamVjdCAq Kl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3NlbGYsJl9fcHl4X25fc19jYWxsYmFj aywwfTsKLS0gICAgUHlPYmplY3QqIHZhbHVlc1syXSA9IHswLDB9OwotKyAgICBzdGF0aWMgUHlP YmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19weXhfdHlwZSwmX19weXhf bl9zX3B5eF9jaGVja3N1bSwmX19weXhfbl9zX3B5eF9zdGF0ZSwwfTsKLSsgICAgUHlPYmplY3Qq IHZhbHVlc1szXSA9IHswLDAsMH07Ci0gICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgewot ICAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKLSAgICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19h cmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKLSAgICAgICBzd2l0Y2ggKHBvc19h cmdzKSB7Ci0rICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9f cHl4X2FyZ3MsIDIpOwotKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotICAgICAgICAgY2Fz ZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKLSAgICAg ICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSAgICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5 VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Ci1AQCAtMjI0OTQsNjA2OCArMjIyNzIsMjM3 MCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENh bGxiYWNrVGhyZWFkXzExbXB2X2NhbGxiYWNrKAotICAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6 ZShfX3B5eF9rd2RzKTsKLSAgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0gICAgICAgICBjYXNl ICAwOgotLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0 ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3NlbGYpKSAhPSAwKSkga3dfYXJncy0tOwotKyAg ICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19w eXhfa3dkcywgX19weXhfbl9zX3B5eF90eXBlKSkgIT0gMCkpIGt3X2FyZ3MtLTsKLSAgICAgICAg IGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLSAgICAgICAgIENZVEhPTl9GQUxM VEhST1VHSDsKLSAgICAgICAgIGNhc2UgIDE6Ci0tICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNb MV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfY2FsbGJh Y2spKSAhPSAwKSkga3dfYXJncy0tOwotKyAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0g X19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF9jaGVja3N1 bSkpICE9IDApKSBrd19hcmdzLS07Ci0gICAgICAgICBlbHNlIHsKLS0gICAgICAgICAgX19QeXhf UmFpc2VBcmd0dXBsZUludmFsaWQoIm1wdl9jYWxsYmFjayIsIDEsIDIsIDIsIDEpOyBfX1BZWF9F UlIoMCwgMTE1NywgX19weXhfTDNfZXJyb3IpCi0rICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVw bGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8iLCAxLCAzLCAzLCAxKTsg X19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgICAgfQotKyAgICAgICAgQ1lU SE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAgY2FzZSAgMjoKLSsgICAgICAgIGlmIChsaWtlbHko KHZhbHVlc1syXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25f c19weXhfc3RhdGUpKSAhPSAwKSkga3dfYXJncy0tOwotKyAgICAgICAgZWxzZSB7Ci0rICAgICAg ICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFt ZUluZm8iLCAxLCAzLCAzLCAyKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQotICAg ICAgICAgfQotICAgICAgIH0KLSAgICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7Ci0t ICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3 ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJtcHZfY2FsbGJhY2si KSA8IDApKSBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDNfZXJyb3IpCi0rICAgICAgICBpZiAo dW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5 YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFt ZUluZm8iKSA8IDApKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCi0gICAgICAgfQot LSAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0gMikgewotKyAg ICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0gMykgewotICAgICAg IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgdmFs dWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKLSAgICAgICB2YWx1ZXNb MV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOwotKyAgICAgIHZhbHVlc1syXSA9 IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7Ci0gICAgIH0KLS0gICAgX19weXhfdl9z ZWxmID0gdmFsdWVzWzBdOwotLSAgICBfX3B5eF92X2NhbGxiYWNrID0gdmFsdWVzWzFdOwotKyAg ICBfX3B5eF92X19fcHl4X3R5cGUgPSB2YWx1ZXNbMF07Ci0rICAgIF9fcHl4X3ZfX19weXhfY2hl Y2tzdW0gPSBfX1B5eF9QeUludF9Bc19sb25nKHZhbHVlc1sxXSk7IGlmICh1bmxpa2VseSgoX19w eXhfdl9fX3B5eF9jaGVja3N1bSA9PSAobG9uZyktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9f UFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKLSsgICAgX19weXhfdl9fX3B5eF9zdGF0ZSA9 IHZhbHVlc1syXTsKLSAgIH0KLSAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2Rv bmU7Ci0gICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Ci0tICBfX1B5eF9SYWlzZUFyZ3R1cGxl SW52YWxpZCgibXB2X2NhbGxiYWNrIiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKSk7IF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MM19lcnJvcikKLSsgIF9fUHl4X1JhaXNl QXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8iLCAxLCAzLCAz LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wz X2Vycm9yKQotICAgX19weXhfTDNfZXJyb3I6OwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQubXB2X2NhbGxiYWNrIiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8iLCBfX3B5 eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSAgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOwotICAgcmV0dXJuIE5VTEw7Ci0gICBfX3B5eF9MNF9hcmd1bWVu dF91bnBhY2tpbmdfZG9uZTo7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTBtcHZfY2FsbGJhY2soX19weXhfc2VsZiwgX19weXhf dl9zZWxmLCBfX3B5eF92X2NhbGxiYWNrKTsKLSsgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTRfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8oX19weXhfc2Vs ZiwgX19weXhfdl9fX3B5eF90eXBlLCBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBfX3B5eF92X19f cHl4X3N0YXRlKTsKLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotICAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVh ZF8xMG1wdl9jYWxsYmFjayhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2NhbGxi YWNrKSB7Ci0tICBQeU9iamVjdCAqX19weXhfdl9lID0gTlVMTDsKLStzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9fcHl4X3VucGlja2xlX1JlbmRlckZy YW1lSW5mbyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF90eXBlLCBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIFB5T2JqZWN0ICpf X3B5eF92X19fcHl4X3N0YXRlKSB7Ci0rICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9QaWNrbGVF cnJvciA9IDA7Ci0rICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9yZXN1bHQgPSAwOwotICAgUHlP YmplY3QgKl9fcHl4X3IgPSBOVUxMOwotICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0g IFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotKyAgaW50IF9fcHl4X3RfMTsKLSAgIFB5T2Jq ZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotICAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0g ICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLSAgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBO VUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7Ci0tICBpbnQgX19weXhfdF83Owot LSAgUHlPYmplY3QgKl9fcHl4X3RfOCA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF85ID0g TlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzEwID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5 eF90XzExID0gTlVMTDsKLSsgIGludCBfX3B5eF90XzY7Ci0gICBpbnQgX19weXhfbGluZW5vID0g MDsKLSAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAgIGludCBfX3B5eF9j bGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJtcHZfY2FsbGJhY2si LCAwKTsKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBpY2tsZV9SZW5k ZXJGcmFtZUluZm8iLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMTU4Ci0tICogCi0tICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgot LSAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAg ICAgICAgY2FsbGJhY2soKQotLSAqICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotKyAg LyogIih0cmVlIGZyYWdtZW50KSI6NAotKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVF cnJvcgotKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKLSsgKiAgICAgaWYgX19weXhf Y2hlY2tzdW0gIT0gMHhkNDFkOGNkOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJy b3IKLSsgKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hl Y2tzdW1zICglcyB2cyAweGQ0MWQ4Y2QgPSAoKSkiICUgX19weXhfY2hlY2tzdW0pCi0gICovCi0t ICB7Ci0tICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQotLSAgICBfX1B5eF9QeVRocmVh ZFN0YXRlX2Fzc2lnbgotLSAgICBfX1B5eF9FeGNlcHRpb25TYXZlKCZfX3B5eF90XzEsICZfX3B5 eF90XzIsICZfX3B5eF90XzMpOwotLSAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAg IF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzMp OwotLSAgICAvKnRyeToqLyB7Ci0rICBfX3B5eF90XzEgPSAoKF9fcHl4X3ZfX19weXhfY2hlY2tz dW0gIT0gMHhkNDFkOGNkKSAhPSAwKTsKLSsgIGlmIChfX3B5eF90XzEpIHsKLSAKLS0gICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1OQotLSAqICAgICBkZWYgbXB2X2Nh bGxiYWNrKHNlbGYsIGNhbGxiYWNrKToKLS0gKiAgICAgICAgIHRyeToKLS0gKiAgICAgICAgICAg ICBjYWxsYmFjaygpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGV4 Y2VwdCBFeGNlcHRpb24gYXMgZToKLS0gKiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJw eW1wdiBlcnJvciBkdXJpbmcgY2FsbGJhY2s6ICVzXG4iICUgZSkKLSsgICAgLyogIih0cmVlIGZy YWdtZW50KSI6NQotKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKLSsgKiAgICAgaWYg X19weXhfY2hlY2tzdW0gIT0gMHhkNDFkOGNkOgotKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1w b3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGli bGUgY2hlY2tzdW1zICglcyB2cyAweGQ0MWQ4Y2QgPSAoKSkiICUgX19weXhfY2hlY2tzdW0pCi0r ICogICAgIF9fcHl4X3Jlc3VsdCA9IFJlbmRlckZyYW1lSW5mby5fX25ld19fKF9fcHl4X3R5cGUp Ci0gICovCi0tICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfY2FsbGJhY2spOwotLSAgICAgIF9f cHl4X3RfNSA9IF9fcHl4X3ZfY2FsbGJhY2s7IF9fcHl4X3RfNiA9IE5VTEw7Ci0tICAgICAgaWYg KENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90 XzUpKSkgewotLSAgICAgICAgX19weXhfdF82ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF81 KTsKLS0gICAgICAgIGlmIChsaWtlbHkoX19weXhfdF82KSkgewotLSAgICAgICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF81KTsKLS0gICAgICAg ICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNik7Ci0tICAgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5j dGlvbik7Ci0tICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF81LCBmdW5jdGlvbik7 Ci0tICAgICAgICB9Ci0tICAgICAgfQotLSAgICAgIF9fcHl4X3RfNCA9IChfX3B5eF90XzYpID8g X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzUsIF9fcHl4X3RfNikgOiBfX1B5eF9Q eU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF81KTsKLS0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBf X1BZWF9FUlIoMCwgMTE1OSwgX19weXhfTDNfZXJyb3IpCi0tICAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNCk7Ci0tICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7 Ci0tICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICAgIF9f cHl4X3RfMiA9IFB5TGlzdF9OZXcoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK LSsgICAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19QaWNrbGVFcnJvcik7Ci0rICAgIF9fUHl4X0dJ VkVSRUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsKLSsgICAgUHlMaXN0X1NFVF9JVEVNKF9fcHl4 X3RfMiwgMCwgX19weXhfbl9zX1BpY2tsZUVycm9yKTsKLSsgICAgX19weXhfdF8zID0gX19QeXhf SW1wb3J0KF9fcHl4X25fc19waWNrbGUsIF9fcHl4X3RfMiwgLTEpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIg PSAwOwotKyAgICBfX3B5eF90XzIgPSBfX1B5eF9JbXBvcnRGcm9tKF9fcHl4X3RfMywgX19weXhf bl9zX1BpY2tsZUVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwg NSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotKyAgICBf X1B5eF9JTkNSRUYoX19weXhfdF8yKTsKLSsgICAgX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvciA9 IF9fcHl4X3RfMjsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotIAotLSAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU4Ci0tICogCi0tICogICAgIGRl ZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgotLSAqICAgICAgICAgdHJ5OiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgY2FsbGJhY2soKQotLSAqICAg ICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2 Ci0rICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4ZDQxZDhjZDoKLSsgKiAgICAgICAgIGZy b20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgotKyAqICAg ICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVz IHZzIDB4ZDQxZDhjZCA9ICgpKSIgJSBfX3B5eF9jaGVja3N1bSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAqICAgICBfX3B5eF9yZXN1bHQgPSBSZW5kZXJGcmFtZUluZm8uX19uZXdf XyhfX3B5eF90eXBlKQotKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKLSAgKi8K LSsgICAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9sb25nKF9fcHl4X3ZfX19weXhfY2hl Y2tzdW0pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICAgIF9fcHl4X3RfNCA9 IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdChfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNf c192c18weGQ0LCBfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VS UigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0r ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgICBfX1B5eF9J TkNSRUYoX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcik7Ci0rICAgIF9fcHl4X3RfMiA9IF9fcHl4 X3ZfX19weXhfUGlja2xlRXJyb3I7IF9fcHl4X3RfNSA9IE5VTEw7Ci0rICAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsK LSsgICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwotKyAgICAg IGlmIChsaWtlbHkoX19weXhfdF81KSkgewotKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0g UHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0rICAgICAgICBfX1B5eF9JTkNSRUYo X19weXhfdF81KTsKLSsgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0rICAgICAgICBf X1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotKyAgICAgIH0KLSAgICAgfQot LSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICAgIF9fUHl4 X1hERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgICBnb3RvIF9fcHl4X0w4X3RyeV9lbmQ7Ci0t ICAgIF9fcHl4X0wzX2Vycm9yOjsKLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5 eF90XzQgPSAwOwotKyAgICBfX3B5eF90XzMgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2Jq ZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzQpOwotICAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0tICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3Rf NCA9IDA7Ci0rICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDYsIF9f cHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0rICAgIF9fUHl4X1JhaXNlKF9fcHl4 X3RfMywgMCwgMCwgMCk7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMg PSAwOwotKyAgICBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCi0gCi0tICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTYwCi0tICogICAgICAgICB0cnk6Ci0tICog ICAgICAgICAgICAgY2FsbGJhY2soKQotLSAqICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBl OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgc3lzLnN0ZGVy ci53cml0ZSgicHltcHYgZXJyb3IgZHVyaW5nIGNhbGxiYWNrOiAlc1xuIiAlIGUpCi0tICogCi0r ICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKLSsgKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlj a2xlRXJyb3IKLSsgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0Ci0rICogICAgIGlmIF9f cHl4X2NoZWNrc3VtICE9IDB4ZDQxZDhjZDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2ts ZUVycm9yCi0rICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxl IGNoZWNrc3VtcyAoJXMgdnMgMHhkNDFkOGNkID0gKCkpIiAlIF9fcHl4X2NoZWNrc3VtKQotICAq LwotLSAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUVycl9FeGNlcHRpb25NYXRjaGVzKCgoUHlPYmpl Y3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOwotLSAgICBpZiAo X19weXhfdF83KSB7Ci0tICAgICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5t cHYuQ2FsbGJhY2tUaHJlYWQubXB2X2NhbGxiYWNrIiwgX19weXhfY2xpbmVubywgX19weXhfbGlu ZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlvbigmX19w eXhfdF80LCAmX19weXhfdF81LCAmX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTYwLCBf X3B5eF9MNV9leGNlcHRfZXJyb3IpCi0tICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0t ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7Ci0tICAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNik7Ci0tICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7Ci0tICAgICAgX19weXhfdl9l ID0gX19weXhfdF81OwotKyAgfQotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTYxCi0tICogICAgICAgICAgICAgY2FsbGJhY2soKQotLSAqICAgICAgICAgZXhj ZXB0IEV4Y2VwdGlvbiBhcyBlOgotLSAqICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInB5 bXB2IGVycm9yIGR1cmluZyBjYWxsYmFjazogJXNcbiIgJSBlKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogCi0tICogY2RlZiB2b2lkIF9jX2NhbGxiYWNrKHZvaWQqIGQpIHdpdGgg Z2lsOgotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6NwotKyAqICAgICAgICAgZnJvbSBwaWNrbGUg aW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCi0rICogICAgICAgICByYWlz ZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhkNDFk OGNkID0gKCkpIiAlIF9fcHl4X2NoZWNrc3VtKQotKyAqICAgICBfX3B5eF9yZXN1bHQgPSBSZW5k ZXJGcmFtZUluZm8uX19uZXdfXyhfX3B5eF90eXBlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgotKyAqICAgICAgICAgX19w eXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoPFJlbmRlckZyYW1lSW5mbz4g X19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLSAgKi8KLS0gICAgICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfOSwgX19weXhfbl9zX3N5cyk7IGlmICh1bmxpa2VseSghX19weXhf dF85KSkgX19QWVhfRVJSKDAsIDExNjEsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKLS0gICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF85KTsKLS0gICAgICBfX3B5eF90XzEwID0gX19QeXhfUHlPYmpl Y3RfR2V0QXR0clN0cihfX3B5eF90XzksIF9fcHl4X25fc19zdGRlcnIpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMTApKSBfX1BZWF9FUlIoMCwgMTE2MSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQot LSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEwKTsKLS0gICAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF85KTsgX19weXhfdF85ID0gMDsKLS0gICAgICBfX3B5eF90XzkgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKF9fcHl4X3RfMTAsIF9fcHl4X25fc193cml0ZSk7IGlmICh1bmxpa2VseSgh X19weXhfdF85KSkgX19QWVhfRVJSKDAsIDExNjEsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKLS0g ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF85KTsKLS0gICAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8xMCk7IF9fcHl4X3RfMTAgPSAwOwotLSAgICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeVN0cmlu Z19Gb3JtYXRTYWZlKF9fcHl4X2twX3NfcHltcHZfZXJyb3JfZHVyaW5nX2NhbGxiYWNrX3MsIF9f cHl4X3ZfZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xMCkpIF9fUFlYX0VSUigwLCAxMTYxLCBf X3B5eF9MNV9leGNlcHRfZXJyb3IpCi0tICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMTApOwot LSAgICAgIF9fcHl4X3RfMTEgPSBOVUxMOwotLSAgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhP RFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfOSkpKSB7Ci0tICAgICAgICBfX3B5 eF90XzExID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF85KTsKLS0gICAgICAgIGlmIChsaWtl bHkoX19weXhfdF8xMSkpIHsKLS0gICAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfOSk7Ci0tICAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzExKTsKLS0gICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAgICAgICAg X19QeXhfREVDUkVGX1NFVChfX3B5eF90XzksIGZ1bmN0aW9uKTsKLS0gICAgICAgIH0KLS0gICAg ICB9Ci0tICAgICAgX19weXhfdF84ID0gKF9fcHl4X3RfMTEpID8gX19QeXhfUHlPYmplY3RfQ2Fs bDJBcmdzKF9fcHl4X3RfOSwgX19weXhfdF8xMSwgX19weXhfdF8xMCkgOiBfX1B5eF9QeU9iamVj dF9DYWxsT25lQXJnKF9fcHl4X3RfOSwgX19weXhfdF8xMCk7Ci0tICAgICAgX19QeXhfWERFQ1JF RihfX3B5eF90XzExKTsgX19weXhfdF8xMSA9IDA7Ci0tICAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMTApOyBfX3B5eF90XzEwID0gMDsKLS0gICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfOCkp IF9fUFlYX0VSUigwLCAxMTYxLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCi0tICAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfOCk7Ci0tICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4 X3RfOSA9IDA7Ci0tICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7 Ci0tICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgICAg IF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLS0gICAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tICAgICAgZ290byBfX3B5eF9MNF9l eGNlcHRpb25faGFuZGxlZDsKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJG cmFtZUluZm8pLCBfX3B5eF9uX3NfbmV3KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMSwgNywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK LSsgIF9fcHl4X3RfNCA9IE5VTEw7Ci0rICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotKyAgICBfX3B5eF90XzQgPSBQeU1l dGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwotKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsK LSsgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhf dF8yKTsKLSsgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsKLSsgICAgICBfX1B5eF9JTkNS RUYoZnVuY3Rpb24pOwotKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlv bik7Ci0gICAgIH0KLS0gICAgZ290byBfX3B5eF9MNV9leGNlcHRfZXJyb3I7Ci0tICAgIF9fcHl4 X0w1X2V4Y2VwdF9lcnJvcjo7Ci0rICB9Ci0rICBfX3B5eF90XzMgPSAoX19weXhfdF80KSA/IF9f UHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdl9fX3B5 eF90eXBlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X19f cHl4X3R5cGUpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwot KyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgNywgX19weXhfTDFfZXJy b3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgX19weXhfdl9fX3B5eF9yZXN1bHQgPSBfX3B5eF90XzM7 Ci0rICBfX3B5eF90XzMgPSAwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTE1OAotLSAqIAotLSAqICAgICBkZWYgbXB2X2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNr KToKLS0gKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgICAgIGNhbGxiYWNrKCkKLS0gKiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToK LSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKLSsgKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2ts ZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGQ0MWQ4Y2QgPSAoKSkiICUg X19weXhfY2hlY2tzdW0pCi0rICogICAgIF9fcHl4X3Jlc3VsdCA9IFJlbmRlckZyYW1lSW5mby5f X25ld19fKF9fcHl4X3R5cGUpCi0rICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBfX3B5eF91bnBpY2tsZV9S ZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZSg8UmVuZGVyRnJhbWVJbmZvPiBfX3B5eF9yZXN1bHQs IF9fcHl4X3N0YXRlKQotKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0rICovCi0rICBfX3B5 eF90XzEgPSAoX19weXhfdl9fX3B5eF9zdGF0ZSAhPSBQeV9Ob25lKTsKLSsgIF9fcHl4X3RfNiA9 IChfX3B5eF90XzEgIT0gMCk7Ci0rICBpZiAoX19weXhfdF82KSB7Ci0rCi0rICAgIC8qICIodHJl ZSBmcmFnbWVudCkiOjkKLSsgKiAgICAgX19weXhfcmVzdWx0ID0gUmVuZGVyRnJhbWVJbmZvLl9f bmV3X18oX19weXhfdHlwZSkKLSsgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6Ci0r ICogICAgICAgICBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZSg8UmVu ZGVyRnJhbWVJbmZvPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKLSsgKiBjZGVmIF9fcHl4 X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKFJlbmRlckZyYW1lSW5mbyBfX3B5 eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKLSsgKi8KLSsgICAgaWYgKCEobGlrZWx5KFB5 VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X19fcHl4X3N0YXRlKSl8fCgoX19weXhfdl9fX3B5eF9z dGF0ZSkgPT0gUHlfTm9uZSl8fChQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiRXhwZWN0 ZWQgJS4xNnMsIGdvdCAlLjIwMHMiLCAidHVwbGUiLCBQeV9UWVBFKF9fcHl4X3ZfX19weXhfc3Rh dGUpLT50cF9uYW1lKSwgMCkpKSBfX1BZWF9FUlIoMSwgOSwgX19weXhfTDFfZXJyb3IpCi0rICAg IF9fcHl4X3RfMyA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlja2xl X1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCAoKFB5 T2JqZWN0KilfX3B5eF92X19fcHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkg X19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8zKTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rCi0r ICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKLSsgKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2ts ZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGQ0MWQ4Y2QgPSAoKSkiICUg X19weXhfY2hlY2tzdW0pCi0rICogICAgIF9fcHl4X3Jlc3VsdCA9IFJlbmRlckZyYW1lSW5mby5f X25ld19fKF9fcHl4X3R5cGUpCi0rICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBfX3B5eF91bnBpY2tsZV9S ZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZSg8UmVuZGVyRnJhbWVJbmZvPiBfX3B5eF9yZXN1bHQs IF9fcHl4X3N0YXRlKQotKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0gICovCi0tICAgIF9f UHl4X1hHSVZFUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMik7 Ci0tICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fUHl4X0V4Y2VwdGlvblJl c2V0KF9fcHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMpOwotLSAgICBnb3RvIF9fcHl4X0wx X2Vycm9yOwotLSAgICBfX3B5eF9MNF9leGNlcHRpb25faGFuZGxlZDo7Ci0tICAgIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMik7Ci0tICAg IF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9f cHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMpOwotLSAgICBfX3B5eF9MOF90cnlfZW5kOjsK LSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU3Ci0tICog ICAgICAgICAgICAgc2VsZi5tcHZfY2FsbGJhY2soc2VsZi5jYWxsYmFjaykgaWYgc2VsZi5jYWxs YmFjayBlbHNlIE5vbmUKLS0gKiAKLS0gKiAgICAgZGVmIG1wdl9jYWxsYmFjayhzZWxmLCBjYWxs YmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHRyeToKLS0g KiAgICAgICAgICAgICBjYWxsYmFjaygpCi0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMAotKyAq ICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKLSsgKiAgICAgICAgIF9fcHl4X3VucGlj a2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKDxSZW5kZXJGcmFtZUluZm8+IF9fcHl4X3Jl c3VsdCwgX19weXhfc3RhdGUpCi0rICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIGNkZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJ bmZvX19zZXRfc3RhdGUoUmVuZGVyRnJhbWVJbmZvIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhf c3RhdGUpOgotKyAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMCBhbmQgaGFzYXR0cihfX3B5 eF9yZXN1bHQsICdfX2RpY3RfXycpOgotKyAqLwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsK LSsgIF9fUHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdCk7Ci0rICBfX3B5eF9yID0gX19w eXhfdl9fX3B5eF9yZXN1bHQ7Ci0rICBnb3RvIF9fcHl4X0wwOwotKwotKyAgLyogIih0cmVlIGZy YWdtZW50KSI6MQotKyAqIGRlZiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8oX19weXhf dHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0rICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCi0rICog ICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotICAqLwotIAotICAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCi0tICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwot LSAgZ290byBfX3B5eF9MMDsKLSAgIF9fcHl4X0wxX2Vycm9yOjsKLSsgIF9fUHl4X1hERUNSRUYo X19weXhfdF8yKTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKLSAgIF9fUHl4X1hERUNS RUYoX19weXhfdF80KTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKLS0gIF9fUHl4X1hE RUNSRUYoX19weXhfdF82KTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsKLS0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF85KTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xMCk7Ci0tICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0 ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQubXB2X2NhbGxiYWNrIiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0rICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8iLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSAgIF9fcHl4X3IgPSBOVUxM OwotICAgX19weXhfTDA6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2UpOwotKyAgX19QeXhf WERFQ1JFRihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yKTsKLSsgIF9fUHl4X1hERUNSRUYoX19w eXhfdl9fX3B5eF9yZXN1bHQpOwotICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0gICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0v KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2MwotLSAqICAgICAgICAgICAgIHN5 cy5zdGRlcnIud3JpdGUoInB5bXB2IGVycm9yIGR1cmluZyBjYWxsYmFjazogJXNcbiIgJSBlKQot LSAqIAotLSAqIGNkZWYgdm9pZCBfY19jYWxsYmFjayh2b2lkKiBkKSB3aXRoIGdpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBjZGVmIHVpbnQ2NF90IG5hbWUgPSA8dWlu dDY0X3Q+ZAotLSAqICAgICBjYWxsYmFjayA9IF9jYWxsYmFja3MuZ2V0KG5hbWUpCi0rLyogIih0 cmVlIGZyYWdtZW50KSI6MTEKLSsgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1l SW5mb19fc2V0X3N0YXRlKDxSZW5kZXJGcmFtZUluZm8+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3Rh dGUpCi0rICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKLSsgKiBjZGVmIF9fcHl4X3VucGlja2xl X1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKFJlbmRlckZyYW1lSW5mbyBfX3B5eF9yZXN1bHQs IHR1cGxlIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICBpZiBsZW4oX19weXhfc3RhdGUpID4gMCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2Rp Y3RfXycpOgotKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9z dGF0ZVswXSkKLSAgKi8KLSAKLS1zdGF0aWMgdm9pZCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fY19jYWxsYmFjayh2b2lkICpfX3B5eF92X2QpIHsKLS0gIHVpbnQ2NF90IF9fcHl4X3Zf bmFtZTsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X2NhbGxiYWNrID0gTlVMTDsKLStzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlja2xlX1JlbmRl ckZyYW1lSW5mb19fc2V0X3N0YXRlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckZyYW1lSW5mbyAqX19weXhfdl9fX3B5eF9yZXN1bHQsIFB5T2JqZWN0ICpfX3B5 eF92X19fcHl4X3N0YXRlKSB7Ci0rICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0gICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0t ICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBO VUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7Ci0rICBpbnQgX19weXhfdF8xOwot KyAgUHlfc3NpemVfdCBfX3B5eF90XzI7Ci0rICBpbnQgX19weXhfdF8zOwotKyAgaW50IF9fcHl4 X3RfNDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwotKyAgUHlPYmplY3QgKl9fcHl4 X3RfNiA9IE5VTEw7Ci0rICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKLSsgIFB5T2JqZWN0 ICpfX3B5eF90XzggPSBOVUxMOwotICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0gICBjb25zdCBj aGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0t ICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gIFB5R0lMU3RhdGVfU1RBVEUgX19weXhfZ2lsc3RhdGVf c2F2ZSA9IF9fUHl4X1B5R0lMU3RhdGVfRW5zdXJlKCk7Ci0tICAjZW5kaWYKLS0gIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfY19jYWxsYmFjayIsIDApOwotKyAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlIiwg MCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2NAotLSAqIAot LSAqIGNkZWYgdm9pZCBfY19jYWxsYmFjayh2b2lkKiBkKSB3aXRoIGdpbDoKLS0gKiAgICAgY2Rl ZiB1aW50NjRfdCBuYW1lID0gPHVpbnQ2NF90PmQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICBjYWxsYmFjayA9IF9jYWxsYmFja3MuZ2V0KG5hbWUpCi0tICogICAgIGNhbGxi YWNrLmNhbGwoKQotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKLSsgKiAgICAgcmV0dXJuIF9f cHl4X3Jlc3VsdAotKyAqIGNkZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRf c3RhdGUoUmVuZGVyRnJhbWVJbmZvIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgot KyAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQs ICdfX2RpY3RfXycpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBf X3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzBdKQotICAqLwotLSAgX19w eXhfdl9uYW1lID0gKCh1aW50NjRfdClfX3B5eF92X2QpOwotKyAgaWYgKHVubGlrZWx5KF9fcHl4 X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKLSsgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhj X1R5cGVFcnJvciwgIm9iamVjdCBvZiB0eXBlICdOb25lVHlwZScgaGFzIG5vIGxlbigpIik7Ci0r ICAgIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0rICB9Ci0rICBfX3B5eF90XzIg PSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X3ZfX19weXhfc3RhdGUpOyBpZiAodW5saWtlbHkoX19w eXhfdF8yID09ICgoUHlfc3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19weXhfdF8zID0gKChfX3B5eF90XzIgPiAwKSAhPSAwKTsKLSsgIGlmIChfX3B5 eF90XzMpIHsKLSsgIH0gZWxzZSB7Ci0rICAgIF9fcHl4X3RfMSA9IF9fcHl4X3RfMzsKLSsgICAg Z290byBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU7Ci0rICB9Ci0rICBfX3B5eF90XzMgPSBfX1B5 eF9IYXNBdHRyKCgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4X3Jlc3VsdCksIF9fcHl4X25fc19k aWN0KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMSwg MTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF80ID0gKF9fcHl4X3RfMyAhPSAwKTsKLSsg IF9fcHl4X3RfMSA9IF9fcHl4X3RfNDsKLSsgIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7Ci0r ICBpZiAoX19weXhfdF8xKSB7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTE2NQotLSAqIGNkZWYgdm9pZCBfY19jYWxsYmFjayh2b2lkKiBkKSB3aXRoIGdpbDoKLS0g KiAgICAgY2RlZiB1aW50NjRfdCBuYW1lID0gPHVpbnQ2NF90PmQKLS0gKiAgICAgY2FsbGJhY2sg PSBfY2FsbGJhY2tzLmdldChuYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgIGNhbGxiYWNrLmNhbGwoKQotKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMwotKyAqIGNk ZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoUmVuZGVyRnJhbWVJ bmZvIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgotKyAqICAgICBpZiBsZW4oX19w eXhfc3RhdGUpID4gMCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgotKyAq ICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVswXSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqLwotLSAgX19weXhfdF8yID0gX19QeXhfUHlP YmplY3RfR2V0QXR0clN0cihfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY2FsbGJhY2tz LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MTE2NSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gIF9f cHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoX19weXhfdl9uYW1lKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTE2NSwgX19weXhfTDFfZXJyb3IpCi0t ICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gIF9fcHl4X3RfNCA9IE5VTEw7Ci0tICBpZiAo Q1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgewotLSAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwotLSAg ICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKLS0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQ eU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF80KTsKLS0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0rICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5 T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfcmVzdWx0KSwgX19w eXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxMywg X19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgICBfX3B5 eF90XzcgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNiwgX19weXhfbl9zX3Vw ZGF0ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0rICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotKyAgICBpZiAodW5saWtlbHkoX19weXhfdl9f X3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgewotKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U eXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOwotKyAg ICAgIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCi0gICAgIH0KLS0gIH0KLS0gIF9f cHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf MiwgX19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzIsIF9fcHl4X3RfMyk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3Rf NCA9IDA7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gIGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNjUsIF9fcHl4X0wxX2Vycm9y KQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKLS0gIF9fcHl4X3ZfY2FsbGJhY2sgPSBfX3B5eF90XzE7Ci0tICBf X3B5eF90XzEgPSAwOwotKyAgICBfX3B5eF90XzYgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9f cHl4X3ZfX19weXhfc3RhdGUsIDAsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwg MCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICAgIF9fcHl4X3RfOCA9 IE5VTEw7Ci0rICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9k X0NoZWNrKF9fcHl4X3RfNykpKSB7Ci0rICAgICAgX19weXhfdF84ID0gUHlNZXRob2RfR0VUX1NF TEYoX19weXhfdF83KTsKLSsgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfOCkpIHsKLSsgICAgICAg IFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzcpOwot KyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfOCk7Ci0rICAgICAgICBfX1B5eF9JTkNSRUYo ZnVuY3Rpb24pOwotKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzcsIGZ1bmN0aW9u KTsKLSsgICAgICB9Ci0rICAgIH0KLSsgICAgX19weXhfdF81ID0gKF9fcHl4X3RfOCkgPyBfX1B5 eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF83LCBfX3B5eF90XzgsIF9fcHl4X3RfNikgOiBf X1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNywgX19weXhfdF82KTsKLSsgICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOwotKyAgICBfX1B5eF9ERUNSRUYo X19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSsgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUp KSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF81KTsKLSsgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0r ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotIAotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNjYKLS0gKiAgICAgY2RlZiB1aW50NjRfdCBu YW1lID0gPHVpbnQ2NF90PmQKLS0gKiAgICAgY2FsbGJhY2sgPSBfY2FsbGJhY2tzLmdldChuYW1l KQotLSAqICAgICBjYWxsYmFjay5jYWxsKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgotKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0 Ci0rICogY2RlZiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZShSZW5k ZXJGcmFtZUluZm8gX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6Ci0rICogICAgIGlm IGxlbihfX3B5eF9zdGF0ZSkgPiAwIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9f Jyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIF9fcHl4X3Jlc3Vs dC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbMF0pCi0gICovCi0tICBfX3B5eF90XzIgPSBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfY2FsbGJhY2ssIF9fcHl4X25fc19jYWxs KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTE2NiwgX19weXhfTDFf ZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gIF9fcHl4X3RfMyA9IE5VTEw7 Ci0tICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzIpKSkgewotLSAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90 XzIpOwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKLS0gICAgICBQeU9iamVjdCogZnVu Y3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKLS0gICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF8zKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAg IF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0tICAgIH0KLSAgIH0KLS0g IF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsK LS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gIGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNjYsIF9fcHl4X0wxX2Vycm9yKQotLSAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19w eXhfdF8yID0gMDsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNjMKLS0gKiAgICAgICAg ICAgICBzeXMuc3RkZXJyLndyaXRlKCJweW1wdiBlcnJvciBkdXJpbmcgY2FsbGJhY2s6ICVzXG4i ICUgZSkKLS0gKiAKLS0gKiBjZGVmIHZvaWQgX2NfY2FsbGJhY2sodm9pZCogZCkgd2l0aCBnaWw6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgY2RlZiB1aW50NjRfdCBuYW1l ID0gPHVpbnQ2NF90PmQKLS0gKiAgICAgY2FsbGJhY2sgPSBfY2FsbGJhY2tzLmdldChuYW1lKQot KyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKLSsgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1Jl bmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKDxSZW5kZXJGcmFtZUluZm8+IF9fcHl4X3Jlc3VsdCwg X19weXhfc3RhdGUpCi0rICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKLSsgKiBjZGVmIF9fcHl4 X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKFJlbmRlckZyYW1lSW5mbyBfX3B5 eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1 bHQsICdfX2RpY3RfXycpOgotKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0 ZShfX3B5eF9zdGF0ZVswXSkKLSAgKi8KLSAKLSAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwot KyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLSAgIGdvdG8gX19w eXhfTDA7Ci0gICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7 Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Myk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9Xcml0ZVVucmFpc2Fi bGUoInZpZGN1dHRlci5saWJzLm1wdi5fY19jYWxsYmFjayIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUsIDEsIDApOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzUpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzcpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOwotKyAgX19QeXhfQWRkVHJhY2Vi YWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19z ZXRfc3RhdGUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsK LSsgIF9fcHl4X3IgPSAwOwotICAgX19weXhfTDA6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF92 X2NhbGxiYWNrKTsKLSsgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotICAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7Ci0tICAjaWZkZWYgV0lUSF9USFJFQUQKLS0gIF9fUHl4X1B5R0lM U3RhdGVfUmVsZWFzZShfX3B5eF9naWxzdGF0ZV9zYXZlKTsKLSsgIHJldHVybiBfX3B5eF9yOwot K30KLStzdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2 X0VuZE9mRmlsZVJlYWNoZWQgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRP ZkZpbGVSZWFjaGVkOwotKwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqYSwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqaykgewotKyAgc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqcDsKLSsg IFB5T2JqZWN0ICpvOwotKyAgaWYgKGxpa2VseSgodC0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0lT X0FCU1RSQUNUKSA9PSAwKSkgewotKyAgICBvID0gKCp0LT50cF9hbGxvYykodCwgMCk7Ci0rICB9 IGVsc2UgewotKyAgICBvID0gKFB5T2JqZWN0ICopIFB5QmFzZU9iamVjdF9UeXBlLnRwX25ldyh0 LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7Ci0rICB9Ci0rICBpZiAodW5saWtlbHkoIW8pKSByZXR1 cm4gMDsKLSsgIHAgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Vu ZE9mRmlsZVJlYWNoZWQgKilvKTsKLSsgIHAtPl9fcHl4X3Z0YWIgPSBfX3B5eF92dGFicHRyXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkOwotKyAgcC0+cmVhc29uID0gUHlf Tm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotKyAgcC0+ZXJyb3IgPSBQeV9Ob25lOyBQeV9JTkNS RUYoUHlfTm9uZSk7Ci0rICByZXR1cm4gbzsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgX19weXhfdHBf ZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZChQeU9iamVjdCAq bykgewotKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxl UmVhY2hlZCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRP ZkZpbGVSZWFjaGVkICopbzsKLSsgICNpZiBDWVRIT05fVVNFX1RQX0ZJTkFMSVpFCi0rICBpZiAo dW5saWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUoUHlfVFlQRShvKSwgUHlfVFBGTEFHU19IQVZFX0ZJ TkFMSVpFKSAmJiBQeV9UWVBFKG8pLT50cF9maW5hbGl6ZSkgJiYgIV9QeUdDX0ZJTkFMSVpFRChv KSkgewotKyAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKG8pKSByZXR1 cm47Ci0rICB9Ci0gICAjZW5kaWYKLSsgIFB5T2JqZWN0X0dDX1VuVHJhY2sobyk7Ci0rICBQeV9D TEVBUihwLT5yZWFzb24pOwotKyAgUHlfQ0xFQVIocC0+ZXJyb3IpOwotKyAgKCpQeV9UWVBFKG8p LT50cF9mcmVlKShvKTsKLSB9Ci0gCi0tLyogIih0cmVlIGZyYWdtZW50KSI6MQotLSAqIGRlZiBf X3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkKF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hl Y2tzdW0sIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgotLSAqICAgICBjZGVmIG9iamVjdCBfX3B5 eF9yZXN1bHQKLS0gKi8KLStzdGF0aWMgaW50IF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKFB5T2JqZWN0ICpvLCB2aXNpdHByb2Mgdiwgdm9p ZCAqYSkgewotKyAgaW50IGU7Ci0rICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FbmRPZkZpbGVSZWFjaGVkICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKilvOwotKyAgaWYgKHAtPnJlYXNvbikgewotKyAg ICBlID0gKCp2KShwLT5yZWFzb24sIGEpOyBpZiAoZSkgcmV0dXJuIGU7Ci0rICB9Ci0rICBpZiAo cC0+ZXJyb3IpIHsKLSsgICAgZSA9ICgqdikocC0+ZXJyb3IsIGEpOyBpZiAoZSkgcmV0dXJuIGU7 Ci0rICB9Ci0rICByZXR1cm4gMDsKLSt9Ci0gCi0tLyogUHl0aG9uIHdyYXBwZXIgKi8KLS1zdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X19weXhfdW5waWNr bGVfRW5kT2ZGaWxlUmVhY2hlZChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCi0tc3RhdGljIFB5TWV0aG9k RGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfX3B5eF91bnBpY2tsZV9FbmRP ZkZpbGVSZWFjaGVkID0geyJfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkIiwgKFB5Q0Z1 bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzdfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkLCBNRVRIX1ZBUkFS R1N8TUVUSF9LRVlXT1JEUywgMH07Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN19fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQoUHlPYmplY3Qg Kl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykg ewotLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSA9IDA7Ci0tICBsb25nIF9fcHl4X3Zf X19weXhfY2hlY2tzdW07Ci0tICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSA9IDA7Ci0t ICBpbnQgX19weXhfbGluZW5vID0gMDsKLS0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKLS0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0g MDsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCAod3JhcHBlcikiLCAwKTsK LS0gIHsKLS0gICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5 eF9uX3NfcHl4X3R5cGUsJl9fcHl4X25fc19weXhfY2hlY2tzdW0sJl9fcHl4X25fc19weXhfc3Rh dGUsMH07Ci0tICAgIFB5T2JqZWN0KiB2YWx1ZXNbM10gPSB7MCwwLDB9OwotLSAgICBpZiAodW5s aWtlbHkoX19weXhfa3dkcykpIHsKLS0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7Ci0tICAgICAg Y29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7 Ci0tICAgICAgc3dpdGNoIChwb3NfYXJncykgewotLSAgICAgICAgY2FzZSAgMzogdmFsdWVzWzJd ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsKLS0gICAgICAgIENZVEhPTl9GQUxM VEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0o X19weXhfYXJncywgMSk7Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBj YXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOwotLSAg ICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgMDogYnJlYWs7Ci0tICAg ICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotLSAgICAgIH0KLS0g ICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7Ci0tICAgICAgc3dpdGNoIChw b3NfYXJncykgewotLSAgICAgICAgY2FzZSAgMDoKLS0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVl c1swXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhf dHlwZSkpICE9IDApKSBrd19hcmdzLS07Ci0tICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJn dHVwbGVfZXJyb3I7Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNl ICAxOgotLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0 ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF9jaGVja3N1bSkpICE9IDApKSBrd19hcmdz LS07Ci0tICAgICAgICBlbHNlIHsKLS0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFs aWQoIl9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQiLCAxLCAzLCAzLCAxKTsgX19QWVhf RVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQotLSAgICAgICAgfQotLSAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgMjoKLS0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVl c1syXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhf c3RhdGUpKSAhPSAwKSkga3dfYXJncy0tOwotLSAgICAgICAgZWxzZSB7Ci0tICAgICAgICAgIF9f UHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVk IiwgMSwgMywgMywgMik7IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKLS0gICAgICAg IH0KLS0gICAgICB9Ci0tICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewotLSAgICAg ICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBf X3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAiX19weXhfdW5waWNrbGVfRW5k T2ZGaWxlUmVhY2hlZCIpIDwgMCkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKLS0g ICAgICB9Ci0tICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAz KSB7Ci0tICAgICAgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLS0gICAgfSBlbHNlIHsK LS0gICAgICB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOwotLSAg ICAgIHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7Ci0tICAgICAg dmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsKLS0gICAgfQotLSAg ICBfX3B5eF92X19fcHl4X3R5cGUgPSB2YWx1ZXNbMF07Ci0tICAgIF9fcHl4X3ZfX19weXhfY2hl Y2tzdW0gPSBfX1B5eF9QeUludF9Bc19sb25nKHZhbHVlc1sxXSk7IGlmICh1bmxpa2VseSgoX19w eXhfdl9fX3B5eF9jaGVja3N1bSA9PSAobG9uZyktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9f UFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKLS0gICAgX19weXhfdl9fX3B5eF9zdGF0ZSA9 IHZhbHVlc1syXTsKLS0gIH0KLS0gIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2Rv bmU7Ci0tICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Ci0tICBfX1B5eF9SYWlzZUFyZ3R1cGxl SW52YWxpZCgiX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCIsIDEsIDMsIDMsIFB5VHVw bGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3Ip Ci0tICBfX3B5eF9MM19lcnJvcjo7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5s aWJzLm1wdi5fX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkIiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKLS0gIHJldHVybiBOVUxMOwotLSAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5n X2RvbmU6OwotLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl82X19w eXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZChfX3B5eF9zZWxmLCBfX3B5eF92X19fcHl4X3R5 cGUsIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIF9fcHl4X3ZfX19weXhfc3RhdGUpOwotLQotLSAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKLS0gIHJldHVybiBfX3B5eF9yOwotK3N0YXRpYyBpbnQgX19weXhfdHBfY2xlYXJfOXZpZGN1 dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQoUHlPYmplY3QgKm8pIHsKLSsgIFB5T2Jq ZWN0KiB0bXA7Ci0rICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRP ZkZpbGVSZWFjaGVkICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0VuZE9mRmlsZVJlYWNoZWQgKilvOwotKyAgdG1wID0gKChQeU9iamVjdCopcC0+cmVhc29uKTsK LSsgIHAtPnJlYXNvbiA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLSsgIFB5X1hERUNS RUYodG1wKTsKLSsgIHRtcCA9ICgoUHlPYmplY3QqKXAtPmVycm9yKTsKLSsgIHAtPmVycm9yID0g UHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotKyAgUHlfWERFQ1JFRih0bXApOwotKyAgcmV0 dXJuIDA7Ci0gfQotIAotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzZfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkKENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5cGUsIGxvbmcgX19w eXhfdl9fX3B5eF9jaGVja3N1bSwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKLS0g IFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yID0gMDsKLS0gIFB5T2JqZWN0ICpf X3B5eF92X19fcHl4X3Jlc3VsdCA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0t ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgaW50IF9fcHl4X3RfMTsKLS0gIFB5T2Jq ZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0t ICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBO VUxMOwotLSAgaW50IF9fcHl4X3RfNjsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29u c3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAw OwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX0VuZE9mRmls ZVJlYWNoZWQiLCAwKTsKLS0KLS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjQKLS0gKiAgICAgY2Rl ZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKLS0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVz dWx0Ci0tICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4NTZiZTliNjogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVy cm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCi0tICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVF cnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHg1NmJlOWI2ID0gKGVycm9yLCBy ZWFzb24pKSIgJSBfX3B5eF9jaGVja3N1bSkKLS0gKi8KLS0gIF9fcHl4X3RfMSA9ICgoX19weXhf dl9fX3B5eF9jaGVja3N1bSAhPSAweDU2YmU5YjYpICE9IDApOwotLSAgaWYgKF9fcHl4X3RfMSkg ewotLQotLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo1Ci0tICogICAgIGNkZWYgb2JqZWN0IF9f cHl4X3Jlc3VsdAotLSAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweDU2YmU5YjY6Ci0tICog ICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJy b3IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmFpc2UgX19weXhf UGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4NTZiZTliNiA9IChl cnJvciwgcmVhc29uKSkiICUgX19weXhfY2hlY2tzdW0pCi0tICogICAgIF9fcHl4X3Jlc3VsdCA9 IEVuZE9mRmlsZVJlYWNoZWQuX19uZXdfXyhfX3B5eF90eXBlKQotLSAqLwotLSAgICBfX3B5eF90 XzIgPSBQeUxpc3RfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigx LCA1LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAg IF9fUHl4X0lOQ1JFRihfX3B5eF9uX3NfUGlja2xlRXJyb3IpOwotLSAgICBfX1B5eF9HSVZFUkVG KF9fcHl4X25fc19QaWNrbGVFcnJvcik7Ci0tICAgIFB5TGlzdF9TRVRfSVRFTShfX3B5eF90XzIs IDAsIF9fcHl4X25fc19QaWNrbGVFcnJvcik7Ci0tICAgIF9fcHl4X3RfMyA9IF9fUHl4X0ltcG9y dChfX3B5eF9uX3NfcGlja2xlLCBfX3B5eF90XzIsIC0xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsK LS0gICAgX19weXhfdF8yID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzMsIF9fcHl4X25fc19Q aWNrbGVFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9f cHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19QeXhf SU5DUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IgPSBfX3B5 eF90XzI7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0KLS0gICAgLyogIih0 cmVlIGZyYWdtZW50KSI6NgotLSAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweDU2YmU5YjY6 Ci0tICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlj a2xlRXJyb3IKLS0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGli bGUgY2hlY2tzdW1zICglcyB2cyAweDU2YmU5YjYgPSAoZXJyb3IsIHJlYXNvbikpIiAlIF9fcHl4 X2NoZWNrc3VtKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIF9fcHl4X3Jl c3VsdCA9IEVuZE9mRmlsZVJlYWNoZWQuX19uZXdfXyhfX3B5eF90eXBlKQotLSAqICAgICBpZiBf X3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKLS0gKi8KLS0gICAgX19weXhfdF8yID0gX19QeXhfUHlJ bnRfRnJvbV9sb25nKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0pOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7Ci0tICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdChfX3B5 eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDU2LCBfX3B5eF90XzIpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLS0g ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOwotLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9fX3B5eF9QaWNrbGVF cnJvcik7Ci0tICAgIF9fcHl4X3RfMiA9IF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3I7IF9fcHl4 X3RfNSA9IE5VTEw7Ci0tICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLS0gICAgICBfX3B5eF90XzUgPSBQeU1ldGhv ZF9HRVRfU0VMRihfX3B5eF90XzIpOwotLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewot LSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4 X3RfMik7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKLS0gICAgICAgIF9fUHl4 X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwg ZnVuY3Rpb24pOwotLSAgICAgIH0KLS0gICAgfQotLSAgICBfX3B5eF90XzMgPSAoX19weXhfdF81 KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNSwgX19weXhf dF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzQpOwot LSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0tICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIg PSAwOwotLSAgICBfX1B5eF9SYWlzZShfX3B5eF90XzMsIDAsIDAsIDApOwotLSAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gICAgX19QWVhfRVJSKDEsIDYsIF9f cHl4X0wxX2Vycm9yKQotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkX3JlYXNvbihQeU9iamVjdCAqbywgQ1lUSE9O X1VOVVNFRCB2b2lkICp4KSB7Ci0rICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF82cmVhc29uXzFfX2dldF9fKG8pOwotK30KLSAKLS0gICAg LyogIih0cmVlIGZyYWdtZW50KSI6NAotLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVF cnJvcgotLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKLS0gKiAgICAgaWYgX19weXhf Y2hlY2tzdW0gIT0gMHg1NmJlOWI2OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJy b3IKLS0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hl Y2tzdW1zICglcyB2cyAweDU2YmU5YjYgPSAoZXJyb3IsIHJlYXNvbikpIiAlIF9fcHl4X2NoZWNr c3VtKQotLSAqLwotK3N0YXRpYyBpbnQgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTZFbmRPZkZpbGVSZWFjaGVkX3JlYXNvbihQeU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZ VEhPTl9VTlVTRUQgdm9pZCAqeCkgewotKyAgaWYgKHYpIHsKLSsgICAgcmV0dXJuIF9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfNnJlYXNvbl8zX19zZXRf XyhvLCB2KTsKLSAgIH0KLS0KLS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjcKLS0gKiAgICAgICAg IGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgotLSAq ICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMg KCVzIHZzIDB4NTZiZTliNiA9IChlcnJvciwgcmVhc29uKSkiICUgX19weXhfY2hlY2tzdW0pCi0t ICogICAgIF9fcHl4X3Jlc3VsdCA9IEVuZE9mRmlsZVJlYWNoZWQuX19uZXdfXyhfX3B5eF90eXBl KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGlmIF9fcHl4X3N0YXRlIGlz IG5vdCBOb25lOgotLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9f c2V0X3N0YXRlKDxFbmRPZkZpbGVSZWFjaGVkPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQot LSAqLwotLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0 ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpLCBf X3B5eF9uX3NfbmV3KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNywg X19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gIF9fcHl4X3Rf NCA9IE5VTEw7Ci0tICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhv ZF9DaGVjayhfX3B5eF90XzIpKSkgewotLSAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VM RihfX3B5eF90XzIpOwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKLS0gICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKLS0gICAg ICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsKLS0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24p OwotLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7Ci0tICAgIH0K LSsgIGVsc2UgewotKyAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2 RW5kT2ZGaWxlUmVhY2hlZF82cmVhc29uXzVfX2RlbF9fKG8pOwotICAgfQotLSAgX19weXhfdF8z ID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5 eF90XzQsIF9fcHl4X3ZfX19weXhfdHlwZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9f cHl4X3RfMiwgX19weXhfdl9fX3B5eF90eXBlKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDEsIDcsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gIF9fcHl4X3ZfX19weXhf cmVzdWx0ID0gX19weXhfdF8zOwotLSAgX19weXhfdF8zID0gMDsKLS0KLS0gIC8qICIodHJlZSBm cmFnbWVudCkiOjgKLS0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBh dGlibGUgY2hlY2tzdW1zICglcyB2cyAweDU2YmU5YjYgPSAoZXJyb3IsIHJlYXNvbikpIiAlIF9f cHl4X2NoZWNrc3VtKQotLSAqICAgICBfX3B5eF9yZXN1bHQgPSBFbmRPZkZpbGVSZWFjaGVkLl9f bmV3X18oX19weXhfdHlwZSkKLS0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0Vu ZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZSg8RW5kT2ZGaWxlUmVhY2hlZD4gX19weXhfcmVzdWx0 LCBfX3B5eF9zdGF0ZSkKLS0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAotLSAqLwotLSAgX19w eXhfdF8xID0gKF9fcHl4X3ZfX19weXhfc3RhdGUgIT0gUHlfTm9uZSk7Ci0tICBfX3B5eF90XzYg PSAoX19weXhfdF8xICE9IDApOwotLSAgaWYgKF9fcHl4X3RfNikgewotK30KLSAKLS0gICAgLyog Iih0cmVlIGZyYWdtZW50KSI6OQotLSAqICAgICBfX3B5eF9yZXN1bHQgPSBFbmRPZkZpbGVSZWFj aGVkLl9fbmV3X18oX19weXhfdHlwZSkKLS0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5v bmU6Ci0tICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3Rh dGUoPEVuZE9mRmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAotLSAqIGNk ZWYgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKEVuZE9mRmlsZVJl YWNoZWQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6Ci0tICovCi0tICAgIGlmICgh KGxpa2VseShQeVR1cGxlX0NoZWNrRXhhY3QoX19weXhfdl9fX3B5eF9zdGF0ZSkpfHwoKF9fcHl4 X3ZfX19weXhfc3RhdGUpID09IFB5X05vbmUpfHwoUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJv ciwgIkV4cGVjdGVkICUuMTZzLCBnb3QgJS4yMDBzIiwgInR1cGxlIiwgUHlfVFlQRShfX3B5eF92 X19fcHl4X3N0YXRlKS0+dHBfbmFtZSksIDApKSkgX19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vy cm9yKQotLSAgICBfX3B5eF90XzMgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5 eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICopX19weXhfdl9fX3B5eF9y ZXN1bHQpLCAoKFB5T2JqZWN0KilfX3B5eF92X19fcHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8zKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3Rf MyA9IDA7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfZXJyb3IoUHlPYmplY3QgKm8sIENZVEhPTl9VTlVTRUQg dm9pZCAqeCkgewotKyAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVu ZE9mRmlsZVJlYWNoZWRfNWVycm9yXzFfX2dldF9fKG8pOwotK30KLSAKLS0gICAgLyogIih0cmVl IGZyYWdtZW50KSI6OAotLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29t cGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4NTZiZTliNiA9IChlcnJvciwgcmVhc29uKSkiICUg X19weXhfY2hlY2tzdW0pCi0tICogICAgIF9fcHl4X3Jlc3VsdCA9IEVuZE9mRmlsZVJlYWNoZWQu X19uZXdfXyhfX3B5eF90eXBlKQotLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgX19weXhfdW5waWNrbGVf RW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKDxFbmRPZkZpbGVSZWFjaGVkPiBfX3B5eF9yZXN1 bHQsIF9fcHl4X3N0YXRlKQotLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0tICovCi0rc3Rh dGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJl YWNoZWRfZXJyb3IoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2LCBDWVRIT05fVU5VU0VEIHZvaWQg KngpIHsKLSsgIGlmICh2KSB7Ci0rICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkXzVlcnJvcl8zX19zZXRfXyhvLCB2KTsKLSsgIH0KLSsg IGVsc2UgewotKyAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5k T2ZGaWxlUmVhY2hlZF81ZXJyb3JfNV9fZGVsX18obyk7Ci0gICB9Ci0tCi0tICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxMAotLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKLS0gKiAg ICAgICAgIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZSg8RW5kT2ZG aWxlUmVhY2hlZD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLS0gKiAgICAgcmV0dXJuIF9f cHl4X3Jlc3VsdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogY2RlZiBfX3B5eF91 bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoRW5kT2ZGaWxlUmVhY2hlZCBfX3B5 eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKLS0gKiAgICAgX19weXhfcmVzdWx0LmVycm9y ID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5yZWFzb24gPSBfX3B5eF9zdGF0ZVsxXQot LSAqLwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF92 X19fcHl4X3Jlc3VsdCk7Ci0tICBfX3B5eF9yID0gX19weXhfdl9fX3B5eF9yZXN1bHQ7Ci0tICBn b3RvIF9fcHl4X0wwOwotLQotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MQotLSAqIGRlZiBfX3B5 eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkKF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tz dW0sIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBj ZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgotLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9y ZXN1bHQKLS0gKi8KLS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19weXhfTDFf ZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotLSAgX19QeXhfWERFQ1JFRihf X3B5eF90XzMpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotLSAgX19QeXhfWERFQ1JF RihfX3B5eF90XzUpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYu X19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xp bmVubywgX19weXhfZmlsZW5hbWUpOwotLSAgX19weXhfciA9IE5VTEw7Ci0tICBfX3B5eF9MMDo7 Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IpOwotLSAgX19QeXhf WERFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdCk7Ci0tICBfX1B5eF9YR0lWRVJFRihfX3B5eF9y KTsKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7 Ci0gfQotIAotLS8qICIodHJlZSBmcmFnbWVudCkiOjExCi0tICogICAgICAgICBfX3B5eF91bnBp Y2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoPEVuZE9mRmlsZVJlYWNoZWQ+IF9fcHl4 X3Jlc3VsdCwgX19weXhfc3RhdGUpCi0tICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKLS0gKiBj ZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZShFbmRPZkZpbGVS ZWFjaGVkIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgIF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzBd OyBfX3B5eF9yZXN1bHQucmVhc29uID0gX19weXhfc3RhdGVbMV0KLS0gKiAgICAgaWYgbGVuKF9f cHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKLS0g Ki8KLStzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNt cHZfRW5kT2ZGaWxlUmVhY2hlZFtdID0gewotKyAgeyJfX3JlZHVjZV9jeXRob25fXyIsIChQeUNG dW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVk XzFfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9LAotKyAgeyJfX3NldHN0YXRlX2N5 dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVu ZE9mRmlsZVJlYWNoZWRfM19fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhfTywgMH0sCi0rICB7MCwg MCwgMCwgMH0KLSt9OwotIAotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKl9fcHl4 X3ZfX19weXhfcmVzdWx0LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgewotLSAgUHlP YmplY3QgKl9fcHl4X3IgPSBOVUxMOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0g IFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotLSAgaW50IF9fcHl4X3RfMjsKLS0gIFB5X3Nz aXplX3QgX19weXhfdF8zOwotLSAgaW50IF9fcHl4X3RfNDsKLS0gIGludCBfX3B5eF90XzU7Ci0t ICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzcgPSBO VUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfOCA9IE5VTEw7Ci0tICBpbnQgX19weXhfbGluZW5v ID0gMDsKLS0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLS0gIGludCBfX3B5 eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBp Y2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUiLCAwKTsKLStzdGF0aWMgc3RydWN0IFB5 R2V0U2V0RGVmIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJl YWNoZWRbXSA9IHsKLSsgIHsoY2hhciAqKSJyZWFzb24iLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfcmVhc29uLCBfX3B5eF9zZXRwcm9wXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfcmVhc29uLCAoY2hhciAqKTAs IDB9LAotKyAgeyhjaGFyICopImVycm9yIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkX2Vycm9yLCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfZXJyb3IsIChjaGFyICopMCwgMH0sCi0rICB7 MCwgMCwgMCwgMCwgMH0KLSt9OwotIAotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKLS0gKiAg ICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAotLSAqIGNkZWYgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxl UmVhY2hlZF9fc2V0X3N0YXRlKEVuZE9mRmlsZVJlYWNoZWQgX19weXhfcmVzdWx0LCB0dXBsZSBf X3B5eF9zdGF0ZSk6Ci0tICogICAgIF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzBd OyBfX3B5eF9yZXN1bHQucmVhc29uID0gX19weXhfc3RhdGVbMV0gICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihf X3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgotLSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGlj dF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVsyXSkKLS0gKi8KLS0gIGlmICh1bmxpa2VseShfX3B5eF92 X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7Ci0tICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U eXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOwotLSAg ICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQotLSAgfQotLSAgX19weXhfdF8xID0g X19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAwLCBsb25nLCAxLCBf X1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0dPVFJFRihfX3B5 eF92X19fcHl4X3Jlc3VsdC0+ZXJyb3IpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3ZfX19weXhf cmVzdWx0LT5lcnJvcik7Ci0tICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+ZXJyb3IgPSBfX3B5eF90 XzE7Ci0tICBfX3B5eF90XzEgPSAwOwotLSAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3Rh dGUgPT0gUHlfTm9uZSkpIHsKLS0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwg IidOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7Ci0tICAgIF9fUFlYX0VS UigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0tICB9Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJ dGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDEsIGxvbmcsIDEsIF9fUHl4X1B5SW50 X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAg X19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwotLSAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhf cmVzdWx0LT5yZWFzb24pOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5y ZWFzb24pOwotLSAgX19weXhfdl9fX3B5eF9yZXN1bHQtPnJlYXNvbiA9IF9fcHl4X3RfMTsKLS0g IF9fcHl4X3RfMSA9IDA7Ci0rc3RhdGljIFB5VHlwZU9iamVjdCBfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkID0gewotKyAgUHlWYXJPYmplY3RfSEVBRF9J TklUKDAsIDApCi0rICAidmlkY3V0dGVyLmxpYnMubXB2LkVuZE9mRmlsZVJlYWNoZWQiLCAvKnRw X25hbWUqLwotKyAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0VuZE9mRmlsZVJlYWNoZWQpLCAvKnRwX2Jhc2ljc2l6ZSovCi0rICAwLCAvKnRwX2l0ZW1zaXpl Ki8KLSsgIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJl YWNoZWQsIC8qdHBfZGVhbGxvYyovCi0rICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMGI0 Ci0rICAwLCAvKnRwX3ByaW50Ki8KLSsgICNlbmRpZgotKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49 IDB4MDMwODAwYjQKLSsgIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQqLwotKyAgI2VuZGlmCi0r ICAwLCAvKnRwX2dldGF0dHIqLwotKyAgMCwgLyp0cF9zZXRhdHRyKi8KLSsgICNpZiBQWV9NQUpP Ul9WRVJTSU9OIDwgMwotKyAgMCwgLyp0cF9jb21wYXJlKi8KLSsgICNlbmRpZgotKyAgI2lmIFBZ X01BSk9SX1ZFUlNJT04gPj0gMwotKyAgMCwgLyp0cF9hc19hc3luYyovCi0rICAjZW5kaWYKLSsg IDAsIC8qdHBfcmVwciovCi0rICAwLCAvKnRwX2FzX251bWJlciovCi0rICAwLCAvKnRwX2FzX3Nl cXVlbmNlKi8KLSsgIDAsIC8qdHBfYXNfbWFwcGluZyovCi0rICAwLCAvKnRwX2hhc2gqLwotKyAg MCwgLyp0cF9jYWxsKi8KLSsgIDAsIC8qdHBfc3RyKi8KLSsgIDAsIC8qdHBfZ2V0YXR0cm8qLwot KyAgMCwgLyp0cF9zZXRhdHRybyovCi0rICAwLCAvKnRwX2FzX2J1ZmZlciovCi0rICBQeV9UUEZM QUdTX0RFRkFVTFR8UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5X1RQRkxBR1NfQ0hFQ0tU WVBFU3xQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1NfQkFTRVRZUEV8UHlfVFBG TEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KLSsgICJEYXRhIGZpZWxkIGZvciBNUFZfRVZFTlRf RU5EX0ZJTEUgZXZlbnRzXG5cbiAgICBXcmFwczogbXB2X2V2ZW50X2VuZF9maWxlXG4gICAgIiwg Lyp0cF9kb2MqLwotKyAgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0Vu ZE9mRmlsZVJlYWNoZWQsIC8qdHBfdHJhdmVyc2UqLwotKyAgX19weXhfdHBfY2xlYXJfOXZpZGN1 dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQsIC8qdHBfY2xlYXIqLwotKyAgMCwgLyp0 cF9yaWNoY29tcGFyZSovCi0rICAwLCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KLSsgIDAsIC8qdHBf aXRlciovCi0rICAwLCAvKnRwX2l0ZXJuZXh0Ki8KLSsgIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRl cl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQsIC8qdHBfbWV0aG9kcyovCi0rICAwLCAvKnRw X21lbWJlcnMqLwotKyAgX19weXhfZ2V0c2V0c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZG aWxlUmVhY2hlZCwgLyp0cF9nZXRzZXQqLwotKyAgMCwgLyp0cF9iYXNlKi8KLSsgIDAsIC8qdHBf ZGljdCovCi0rICAwLCAvKnRwX2Rlc2NyX2dldCovCi0rICAwLCAvKnRwX2Rlc2NyX3NldCovCi0r ICAwLCAvKnRwX2RpY3RvZmZzZXQqLwotKyAgMCwgLyp0cF9pbml0Ki8KLSsgIDAsIC8qdHBfYWxs b2MqLwotKyAgX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFj aGVkLCAvKnRwX25ldyovCi0rICAwLCAvKnRwX2ZyZWUqLwotKyAgMCwgLyp0cF9pc19nYyovCi0r ICAwLCAvKnRwX2Jhc2VzKi8KLSsgIDAsIC8qdHBfbXJvKi8KLSsgIDAsIC8qdHBfY2FjaGUqLwot KyAgMCwgLyp0cF9zdWJjbGFzc2VzKi8KLSsgIDAsIC8qdHBfd2Vha2xpc3QqLwotKyAgMCwgLyp0 cF9kZWwqLwotKyAgMCwgLyp0cF92ZXJzaW9uX3RhZyovCi0rICAjaWYgUFlfVkVSU0lPTl9IRVgg Pj0gMHgwMzA0MDBhMQotKyAgMCwgLyp0cF9maW5hbGl6ZSovCi0rICAjZW5kaWYKLSsgICNpZiBQ WV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGIxICYmICghQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZ IHx8IFBZUFlfVkVSU0lPTl9OVU0gPj0gMHgwNzAzMDgwMCkKLSsgIDAsIC8qdHBfdmVjdG9yY2Fs bCovCi0rICAjZW5kaWYKLSsgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZ X1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAotKyAgMCwgLyp0cF9wcmludCovCi0rICAjZW5kaWYK LSsgICNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgJiYgUFlfVkVSU0lPTl9IRVggPj0gMHgw MzA5MDAwMAotKyAgMCwgLyp0cF9weXB5X2ZsYWdzKi8KLSsgICNlbmRpZgotK307Ci0rc3RhdGlj IHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl IF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZTsKLSAKLS0gIC8q ICIodHJlZSBmcmFnbWVudCkiOjEzCi0tICogY2RlZiBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVS ZWFjaGVkX19zZXRfc3RhdGUoRW5kT2ZGaWxlUmVhY2hlZCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9f cHl4X3N0YXRlKToKLS0gKiAgICAgX19weXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMF07 IF9fcHl4X3Jlc3VsdC5yZWFzb24gPSBfX3B5eF9zdGF0ZVsxXQotLSAqICAgICBpZiBsZW4oX19w eXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0 X18udXBkYXRlKF9fcHl4X3N0YXRlWzJdKQotLSAqLwotLSAgaWYgKHVubGlrZWx5KF9fcHl4X3Zf X19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKLS0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5 cGVFcnJvciwgIm9iamVjdCBvZiB0eXBlICdOb25lVHlwZScgaGFzIG5vIGxlbigpIik7Ci0tICAg IF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCi0tICB9Ci0tICBfX3B5eF90XzMgPSBQ eVR1cGxlX0dFVF9TSVpFKF9fcHl4X3ZfX19weXhfc3RhdGUpOyBpZiAodW5saWtlbHkoX19weXhf dF8zID09ICgoUHlfc3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9y KQotLSAgX19weXhfdF80ID0gKChfX3B5eF90XzMgPiAyKSAhPSAwKTsKLS0gIGlmIChfX3B5eF90 XzQpIHsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNt cHZfTG9nTWVzc2FnZShQeVR5cGVPYmplY3QgKnQsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmEs IENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKLSsgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKnA7Ci0rICBQeU9iamVjdCAqbzsKLSsgIGlmIChs aWtlbHkoKHQtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19JU19BQlNUUkFDVCkgPT0gMCkpIHsKLSsg ICAgbyA9ICgqdC0+dHBfYWxsb2MpKHQsIDApOwotICAgfSBlbHNlIHsKLS0gICAgX19weXhfdF8y ID0gX19weXhfdF80OwotLSAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKLSsgICAg byA9IChQeU9iamVjdCAqKSBQeUJhc2VPYmplY3RfVHlwZS50cF9uZXcodCwgX19weXhfZW1wdHlf dHVwbGUsIDApOwotICAgfQotLSAgX19weXhfdF80ID0gX19QeXhfSGFzQXR0cigoKFB5T2JqZWN0 ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7IGlmICh1bmxpa2VseShf X3B5eF90XzQgPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikK LS0gIF9fcHl4X3RfNSA9IChfX3B5eF90XzQgIT0gMCk7Ci0tICBfX3B5eF90XzIgPSBfX3B5eF90 XzU7Ci0tICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OwotLSAgaWYgKF9fcHl4X3RfMikgewot KyAgaWYgKHVubGlrZWx5KCFvKSkgcmV0dXJuIDA7Ci0rICBwID0gKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopbyk7Ci0rICBwLT5fX3B5eF92dGFi ID0gX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZTsKLSsgIHAt PnByZWZpeCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLSsgIHAtPmxldmVsID0gUHlf Tm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotKyAgcC0+dGV4dCA9IFB5X05vbmU7IFB5X0lOQ1JF RihQeV9Ob25lKTsKLSsgIHAtPmxvZ19sZXZlbCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25l KTsKLSsgIHJldHVybiBvOwotK30KLSAKLS0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTQKLS0g KiAgICAgX19weXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5y ZWFzb24gPSBfX3B5eF9zdGF0ZVsxXQotLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMiBh bmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgotLSAqICAgICAgICAgX19weXhf cmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVsyXSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotLSAqLwotLSAgICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRy U3RyKCgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4X3Jlc3VsdCksIF9fcHl4X25fc19kaWN0KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9y KQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gICAgX19weXhfdF83ID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzYsIF9fcHl4X25fc191cGRhdGUpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCi0tICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsg X19weXhfdF82ID0gMDsKLS0gICAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0g UHlfTm9uZSkpIHsKLS0gICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05v bmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsKLS0gICAgICBfX1BZWF9FUlIo MSwgMTQsIF9fcHl4X0wxX2Vycm9yKQotLSAgICB9Ci0tICAgIF9fcHl4X3RfNiA9IF9fUHl4X0dl dEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMiwgbG9uZywgMSwgX19QeXhfUHlJ bnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK LS0gICAgX19weXhfdF84ID0gTlVMTDsKLS0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAm JiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF83KSkpIHsKLS0gICAgICBfX3B5eF90Xzgg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzcpOwotLSAgICAgIGlmIChsaWtlbHkoX19weXhf dF84KSkgewotLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfNyk7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF84KTsKLS0gICAg ICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfNywgZnVuY3Rpb24pOwotLSAgICAgIH0KLS0gICAgfQotLSAgICBfX3B5eF90XzEgPSAo X19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzcsIF9fcHl4X3Rf OCwgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF83LCBfX3B5 eF90XzYpOwotLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7Ci0t ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotLSAgICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCi0tICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsg X19weXhfdF83ID0gMDsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9 IDA7Ci0rc3RhdGljIHZvaWQgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZf TG9nTWVzc2FnZShQeU9iamVjdCAqbykgewotKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Mb2dNZXNzYWdlICopbzsKLSsgICNpZiBDWVRIT05fVVNFX1RQX0ZJTkFMSVpF Ci0rICBpZiAodW5saWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUoUHlfVFlQRShvKSwgUHlfVFBGTEFH U19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9UWVBFKG8pLT50cF9maW5hbGl6ZSkgJiYgIV9QeUdDX0ZJ TkFMSVpFRChvKSkgewotKyAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9j KG8pKSByZXR1cm47Ci0rICB9Ci0rICAjZW5kaWYKLSsgIFB5T2JqZWN0X0dDX1VuVHJhY2sobyk7 Ci0rICBQeV9DTEVBUihwLT5wcmVmaXgpOwotKyAgUHlfQ0xFQVIocC0+bGV2ZWwpOwotKyAgUHlf Q0xFQVIocC0+dGV4dCk7Ci0rICBQeV9DTEVBUihwLT5sb2dfbGV2ZWwpOwotKyAgKCpQeV9UWVBF KG8pLT50cF9mcmVlKShvKTsKLSt9Ci0gCi0tICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjEzCi0t ICogY2RlZiBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoRW5kT2ZG aWxlUmVhY2hlZCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKLS0gKiAgICAgX19w eXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5yZWFzb24gPSBf X3B5eF9zdGF0ZVsxXQotLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0 cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzJd KQotLSAqLwotK3N0YXRpYyBpbnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2UoUHlPYmplY3QgKm8sIHZpc2l0cHJvYyB2LCB2b2lkICphKSB7Ci0rICBp bnQgZTsKLSsgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3Nh Z2UgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2Fn ZSAqKW87Ci0rICBpZiAocC0+cHJlZml4KSB7Ci0rICAgIGUgPSAoKnYpKHAtPnByZWZpeCwgYSk7 IGlmIChlKSByZXR1cm4gZTsKLSsgIH0KLSsgIGlmIChwLT5sZXZlbCkgewotKyAgICBlID0gKCp2 KShwLT5sZXZlbCwgYSk7IGlmIChlKSByZXR1cm4gZTsKLSsgIH0KLSsgIGlmIChwLT50ZXh0KSB7 Ci0rICAgIGUgPSAoKnYpKHAtPnRleHQsIGEpOyBpZiAoZSkgcmV0dXJuIGU7Ci0rICB9Ci0rICBp ZiAocC0+bG9nX2xldmVsKSB7Ci0rICAgIGUgPSAoKnYpKHAtPmxvZ19sZXZlbCwgYSk7IGlmIChl KSByZXR1cm4gZTsKLSAgIH0KLSsgIHJldHVybiAwOwotK30KLSAKLS0gIC8qICIodHJlZSBmcmFn bWVudCkiOjExCi0tICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19z ZXRfc3RhdGUoPEVuZE9mRmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCi0t ICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKLS0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0VuZE9m RmlsZVJlYWNoZWRfX3NldF9zdGF0ZShFbmRPZkZpbGVSZWFjaGVkIF9fcHl4X3Jlc3VsdCwgdHVw bGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIF9f cHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQucmVhc29uID0g X19weXhfc3RhdGVbMV0KLS0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0 dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKLS0gKi8KLStzdGF0aWMgaW50IF9fcHl4X3Rw X2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKFB5T2JqZWN0ICpvKSB7Ci0r ICBQeU9iamVjdCogdG1wOwotKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfTG9nTWVzc2FnZSAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Mb2dNZXNzYWdlICopbzsKLSsgIHRtcCA9ICgoUHlPYmplY3QqKXAtPnByZWZpeCk7Ci0rICBw LT5wcmVmaXggPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0rICBQeV9YREVDUkVGKHRt cCk7Ci0rICB0bXAgPSAoKFB5T2JqZWN0KilwLT5sZXZlbCk7Ci0rICBwLT5sZXZlbCA9IFB5X05v bmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLSsgIFB5X1hERUNSRUYodG1wKTsKLSsgIHRtcCA9ICgo UHlPYmplY3QqKXAtPnRleHQpOwotKyAgcC0+dGV4dCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9O b25lKTsKLSsgIFB5X1hERUNSRUYodG1wKTsKLSsgIHRtcCA9ICgoUHlPYmplY3QqKXAtPmxvZ19s ZXZlbCk7Ci0rICBwLT5sb2dfbGV2ZWwgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0r ICBQeV9YREVDUkVGKHRtcCk7Ci0rICByZXR1cm4gMDsKLSt9Ci0gCi0tICAvKiBmdW5jdGlvbiBl eGl0IGNvZGUgKi8KLS0gIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7 Ci0tICBnb3RvIF9fcHl4X0wwOwotLSAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JF RihfX3B5eF90XzEpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOwotLSAgX19QeXhfWERF Q1JFRihfX3B5eF90XzcpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOwotLSAgX19QeXhf QWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfRW5kT2ZGaWxl UmVhY2hlZF9fc2V0X3N0YXRlIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSk7Ci0tICBfX3B5eF9yID0gMDsKLS0gIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hHSVZF UkVGKF9fcHl4X3IpOwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1 cm4gX19weXhfcjsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEwTG9nTWVzc2FnZV9wcmVmaXgoUHlPYmplY3QgKm8sIENZVEhPTl9VTlVTRUQg dm9pZCAqeCkgewotKyAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExv Z01lc3NhZ2VfNnByZWZpeF8xX19nZXRfXyhvKTsKLSB9Ci0gCi0tLyogIih0cmVlIGZyYWdtZW50 KSI6MQotLSAqIGRlZiBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoKF9fcHl4X3R5cGUsIGxv bmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgotLSAqICAgICBjZGVm IG9iamVjdCBfX3B5eF9yZXN1bHQKLS0gKi8KLS0KLS0vKiBQeXRob24gd3JhcHBlciAqLwotLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzlfX3B5eF91bnBp Y2tsZV9JbnB1dERpc3BhdGNoKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhf YXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KLS1zdGF0aWMgUHlNZXRob2RE ZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOV9fcHl4X3VucGlja2xlX0lucHV0 RGlzcGF0Y2ggPSB7Il9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2giLCAoUHlDRnVuY3Rpb24p KHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfOV9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2gsIE1FVEhfVkFSQVJHU3xNRVRIX0tF WVdPUkRTLCAwfTsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl85X19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaChQeU9iamVjdCAqX19weXhfc2VsZiwg UHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7Ci0tICBQeU9iamVj dCAqX19weXhfdl9fX3B5eF90eXBlID0gMDsKLS0gIGxvbmcgX19weXhfdl9fX3B5eF9jaGVja3N1 bTsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlID0gMDsKLS0gIGludCBfX3B5eF9s aW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50 IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwotLSAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5 eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoICh3cmFwcGVyKSIsIDApOwotLSAgewotLSAgICBzdGF0 aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19weXhfdHlwZSwm X19weXhfbl9zX3B5eF9jaGVja3N1bSwmX19weXhfbl9zX3B5eF9zdGF0ZSwwfTsKLS0gICAgUHlP YmplY3QqIHZhbHVlc1szXSA9IHswLDAsMH07Ci0tICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2Rz KSkgewotLSAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKLS0gICAgICBjb25zdCBQeV9zc2l6ZV90 IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKLS0gICAgICBzd2l0Y2gg KHBvc19hcmdzKSB7Ci0tICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9J VEVNKF9fcHl4X2FyZ3MsIDIpOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAg ICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsK LS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1sw XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0tICAgICAgICBDWVRIT05fRkFM TFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAwOiBicmVhazsKLS0gICAgICAgIGRlZmF1bHQ6IGdv dG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0tICAgICAgfQotLSAgICAgIGt3X2FyZ3MgPSBQ eURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKLS0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0tICAg ICAgICBjYXNlICAwOgotLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlE aWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF90eXBlKSkgIT0gMCkpIGt3 X2FyZ3MtLTsKLS0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLS0g ICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDE6Ci0tICAgICAgICBp ZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2Rz LCBfX3B5eF9uX3NfcHl4X2NoZWNrc3VtKSkgIT0gMCkpIGt3X2FyZ3MtLTsKLS0gICAgICAgIGVs c2UgewotLSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNr bGVfSW5wdXREaXNwYXRjaCIsIDEsIDMsIDMsIDEpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNf ZXJyb3IpCi0tICAgICAgICB9Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAg ICBjYXNlICAyOgotLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzJdID0gX19QeXhfUHlEaWN0 X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF9zdGF0ZSkpICE9IDApKSBrd19h cmdzLS07Ci0tICAgICAgICBlbHNlIHsKLS0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUlu dmFsaWQoIl9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2giLCAxLCAzLCAzLCAyKTsgX19QWVhf RVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQotLSAgICAgICAgfQotLSAgICAgIH0KLS0gICAgICBp ZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7Ci0tICAgICAgICBpZiAodW5saWtlbHkoX19QeXhf UGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZh bHVlcywgcG9zX2FyZ3MsICJfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoIikgPCAwKSkgX19Q WVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQotLSAgICAgIH0KLS0gICAgfSBlbHNlIGlmIChQ eVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9IDMpIHsKLS0gICAgICBnb3RvIF9fcHl4X0w1 X2FyZ3R1cGxlX2Vycm9yOwotLSAgICB9IGVsc2UgewotLSAgICAgIHZhbHVlc1swXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0tICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9H RVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKLS0gICAgICB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9J VEVNKF9fcHl4X2FyZ3MsIDIpOwotLSAgICB9Ci0tICAgIF9fcHl4X3ZfX19weXhfdHlwZSA9IHZh bHVlc1swXTsKLS0gICAgX19weXhfdl9fX3B5eF9jaGVja3N1bSA9IF9fUHl4X1B5SW50X0FzX2xv bmcodmFsdWVzWzFdKTsgaWYgKHVubGlrZWx5KChfX3B5eF92X19fcHl4X2NoZWNrc3VtID09IChs b25nKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vy cm9yKQotLSAgICBfX3B5eF92X19fcHl4X3N0YXRlID0gdmFsdWVzWzJdOwotK3N0YXRpYyBpbnQg X19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX3ByZWZpeChQ eU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgewotKyAgaWYg KHYpIHsKLSsgICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01l c3NhZ2VfNnByZWZpeF8zX19zZXRfXyhvLCB2KTsKLSsgIH0KLSsgIGVsc2UgewotKyAgICByZXR1 cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzVf X2RlbF9fKG8pOwotICAgfQotLSAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9u ZTsKLS0gIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKLS0gIF9fUHl4X1JhaXNlQXJndHVwbGVJ bnZhbGlkKCJfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoIiwgMSwgMywgMywgUHlUdXBsZV9H RVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKLS0g IF9fcHl4X0wzX2Vycm9yOjsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMu bXB2Ll9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2giLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OwotLSAgcmV0dXJuIE5VTEw7Ci0tICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7 Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhfX3B5eF91bnBp Y2tsZV9JbnB1dERpc3BhdGNoKF9fcHl4X3NlbGYsIF9fcHl4X3ZfX19weXhfdHlwZSwgX19weXhf dl9fX3B5eF9jaGVja3N1bSwgX19weXhfdl9fX3B5eF9zdGF0ZSk7Ci0tCi0tICAvKiBmdW5jdGlv biBleGl0IGNvZGUgKi8KLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0 dXJuIF9fcHl4X3I7Ci0gfQotIAotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzhfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoKENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5cGUsIGxvbmcg X19weXhfdl9fX3B5eF9jaGVja3N1bSwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsK LS0gIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yID0gMDsKLS0gIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X3Jlc3VsdCA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7 Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgaW50IF9fcHl4X3RfMTsKLS0gIFB5 T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7 Ci0tICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzUg PSBOVUxMOwotLSAgaW50IF9fcHl4X3RfNjsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAg Y29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8g PSAwOwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX0lucHV0 RGlzcGF0Y2giLCAwKTsKLS0KLS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjQKLS0gKiAgICAgY2Rl ZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKLS0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVz dWx0Ci0tICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4YmY2NDFhOTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVy cm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCi0tICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVF cnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhiZjY0MWE5ID0gKGFyZzAsIHR5 cGUpKSIgJSBfX3B5eF9jaGVja3N1bSkKLS0gKi8KLS0gIF9fcHl4X3RfMSA9ICgoX19weXhfdl9f X3B5eF9jaGVja3N1bSAhPSAweGJmNjQxYTkpICE9IDApOwotLSAgaWYgKF9fcHl4X3RfMSkgewot LQotLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo1Ci0tICogICAgIGNkZWYgb2JqZWN0IF9fcHl4 X3Jlc3VsdAotLSAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweGJmNjQxYTk6Ci0tICogICAg ICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3Ig ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlj a2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4YmY2NDFhOSA9IChhcmcw LCB0eXBlKSkiICUgX19weXhfY2hlY2tzdW0pCi0tICogICAgIF9fcHl4X3Jlc3VsdCA9IElucHV0 RGlzcGF0Y2guX19uZXdfXyhfX3B5eF90eXBlKQotLSAqLwotLSAgICBfX3B5eF90XzIgPSBQeUxp c3RfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA1LCBfX3B5 eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fUHl4X0lO Q1JFRihfX3B5eF9uX3NfUGlja2xlRXJyb3IpOwotLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X25f c19QaWNrbGVFcnJvcik7Ci0tICAgIFB5TGlzdF9TRVRfSVRFTShfX3B5eF90XzIsIDAsIF9fcHl4 X25fc19QaWNrbGVFcnJvcik7Ci0tICAgIF9fcHl4X3RfMyA9IF9fUHl4X0ltcG9ydChfX3B5eF9u X3NfcGlja2xlLCBfX3B5eF90XzIsIC0xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZ WF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMp OwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gICAgX19w eXhfdF8yID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzMsIF9fcHl4X25fc19QaWNrbGVFcnJv cik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vy cm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19QeXhfSU5DUkVGKF9f cHl4X3RfMik7Ci0tICAgIF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IgPSBfX3B5eF90XzI7Ci0t ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0KLS0gICAgLyogIih0cmVlIGZyYWdt ZW50KSI6NgotLSAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweGJmNjQxYTk6Ci0tICogICAg ICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IK LS0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tz dW1zICglcyB2cyAweGJmNjQxYTkgPSAoYXJnMCwgdHlwZSkpIiAlIF9fcHl4X2NoZWNrc3VtKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIF9fcHl4X3Jlc3VsdCA9IElucHV0 RGlzcGF0Y2guX19uZXdfXyhfX3B5eF90eXBlKQotLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBu b3QgTm9uZToKLS0gKi8KLS0gICAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9sb25nKF9f cHl4X3ZfX19weXhfY2hlY2tzdW0pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VS UigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0t ICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdChfX3B5eF9rcF9zX0luY29tcGF0 aWJsZV9jaGVja3N1bXNfc192c18weGJmLCBfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNCkpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNCk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OwotLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcik7Ci0tICAgIF9f cHl4X3RfMiA9IF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3I7IF9fcHl4X3RfNSA9IE5VTEw7Ci0t ICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF8yKSkpIHsKLS0gICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5 eF90XzIpOwotLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewotLSAgICAgICAgUHlPYmpl Y3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0tICAgICAg ICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKLS0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlv bik7Ci0tICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotLSAg ICAgIH0KLS0gICAgfQotLSAgICBfX3B5eF90XzMgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzQpOwotLSAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlY X0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7 Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgICBfX1B5 eF9SYWlzZShfX3B5eF90XzMsIDAsIDAsIDApOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8z KTsgX19weXhfdF8zID0gMDsKLS0gICAgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQot K3N0YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBM b2dNZXNzYWdlX2xldmVsKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKLSsg IHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZl bF8xX19nZXRfXyhvKTsKLSt9Ci0gCi0tICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKLS0gKiAg ICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKLS0gKiAgICAgY2RlZiBvYmplY3QgX19w eXhfcmVzdWx0Ci0tICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4YmY2NDFhOTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBp Y2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCi0tICogICAgICAgICByYWlzZSBfX3B5eF9Q aWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhiZjY0MWE5ID0gKGFy ZzAsIHR5cGUpKSIgJSBfX3B5eF9jaGVja3N1bSkKLS0gKi8KLStzdGF0aWMgaW50IF9fcHl4X3Nl dHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9sZXZlbChQeU9iamVjdCAq bywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgewotKyAgaWYgKHYpIHsKLSsg ICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxl dmVsXzNfX3NldF9fKG8sIHYpOwotICAgfQotLQotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6Nwot LSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2ts ZUVycm9yCi0tICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxl IGNoZWNrc3VtcyAoJXMgdnMgMHhiZjY0MWE5ID0gKGFyZzAsIHR5cGUpKSIgJSBfX3B5eF9jaGVj a3N1bSkKLS0gKiAgICAgX19weXhfcmVzdWx0ID0gSW5wdXREaXNwYXRjaC5fX25ld19fKF9fcHl4 X3R5cGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgaWYgX19weXhfc3Rh dGUgaXMgbm90IE5vbmU6Ci0tICogICAgICAgICBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNo X19zZXRfc3RhdGUoPElucHV0RGlzcGF0Y2g+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCi0t ICovCi0tICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3Qg KilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCksIF9fcHl4 X25fc19uZXcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA3LCBfX3B5 eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgX19weXhfdF80ID0g TlVMTDsKLS0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0No ZWNrKF9fcHl4X3RfMikpKSB7Ci0tICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9f cHl4X3RfMik7Ci0tICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgewotLSAgICAgIFB5T2JqZWN0 KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwotLSAgICAgIF9f UHl4X0lOQ1JFRihfX3B5eF90XzQpOwotLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0t ICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKLS0gICAgfQotKyAg ZWxzZSB7Ci0rICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dN ZXNzYWdlXzVsZXZlbF81X19kZWxfXyhvKTsKLSAgIH0KLS0gIF9fcHl4X3RfMyA9IChfX3B5eF90 XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5 eF92X19fcHl4X3R5cGUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9f cHl4X3ZfX19weXhfdHlwZSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3Rf NCA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA3LCBfX3B5 eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICBfX3B5eF92X19fcHl4X3Jlc3VsdCA9IF9f cHl4X3RfMzsKLS0gIF9fcHl4X3RfMyA9IDA7Ci0tCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo4 Ci0tICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNr c3VtcyAoJXMgdnMgMHhiZjY0MWE5ID0gKGFyZzAsIHR5cGUpKSIgJSBfX3B5eF9jaGVja3N1bSkK LS0gKiAgICAgX19weXhfcmVzdWx0ID0gSW5wdXREaXNwYXRjaC5fX25ld19fKF9fcHl4X3R5cGUp Ci0tICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogICAgICAgICBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoX19zZXRf c3RhdGUoPElucHV0RGlzcGF0Y2g+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCi0tICogICAg IHJldHVybiBfX3B5eF9yZXN1bHQKLS0gKi8KLS0gIF9fcHl4X3RfMSA9IChfX3B5eF92X19fcHl4 X3N0YXRlICE9IFB5X05vbmUpOwotLSAgX19weXhfdF82ID0gKF9fcHl4X3RfMSAhPSAwKTsKLS0g IGlmIChfX3B5eF90XzYpIHsKLSt9Ci0gCi0tICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjkKLS0g KiAgICAgX19weXhfcmVzdWx0ID0gSW5wdXREaXNwYXRjaC5fX25ld19fKF9fcHl4X3R5cGUpCi0t ICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgotLSAqICAgICAgICAgX19weXhfdW5w aWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0X3N0YXRlKDxJbnB1dERpc3BhdGNoPiBfX3B5eF9yZXN1 bHQsIF9fcHl4X3N0YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIHJl dHVybiBfX3B5eF9yZXN1bHQKLS0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2hf X3NldF9zdGF0ZShJbnB1dERpc3BhdGNoIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUp OgotLSAqLwotLSAgICBpZiAoIShsaWtlbHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfX19w eXhfc3RhdGUpKXx8KChfX3B5eF92X19fcHl4X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJyX0Zv cm1hdChQeUV4Y19UeXBlRXJyb3IsICJFeHBlY3RlZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0dXBs ZSIsIFB5X1RZUEUoX19weXhfdl9fX3B5eF9zdGF0ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlYX0VS UigxLCA5LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19weXhfdF8zID0gX19weXhfZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0X3N0YXRlKCgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqKV9f cHl4X3ZfX19weXhfcmVzdWx0KSwgKChQeU9iamVjdCopX19weXhfdl9fX3B5eF9zdGF0ZSkpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA5LCBfX3B5eF9MMV9lcnJvcikK LS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX3RleHQoUHlPYmplY3QgKm8sIENZVEhPTl9V TlVTRUQgdm9pZCAqeCkgewotKyAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfNHRleHRfMV9fZ2V0X18obyk7Ci0rfQotIAotLSAgICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjo4Ci0tICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21w YXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhiZjY0MWE5ID0gKGFyZzAsIHR5cGUpKSIgJSBfX3B5 eF9jaGVja3N1bSkKLS0gKiAgICAgX19weXhfcmVzdWx0ID0gSW5wdXREaXNwYXRjaC5fX25ld19f KF9fcHl4X3R5cGUpCi0tICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBfX3B5eF91bnBpY2tsZV9JbnB1dERp c3BhdGNoX19zZXRfc3RhdGUoPElucHV0RGlzcGF0Y2g+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3Rh dGUpCi0tICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKLS0gKi8KLStzdGF0aWMgaW50IF9fcHl4 X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV90ZXh0KFB5T2JqZWN0 ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Ci0rICBpZiAodikgewot KyAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80 dGV4dF8zX19zZXRfXyhvLCB2KTsKLSAgIH0KLSsgIGVsc2UgewotKyAgICByZXR1cm4gX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF81X19kZWxfXyhvKTsK LSsgIH0KLSt9Ci0gCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMAotLSAqICAgICBpZiBfX3B5 eF9zdGF0ZSBpcyBub3QgTm9uZToKLS0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0lucHV0RGlz cGF0Y2hfX3NldF9zdGF0ZSg8SW5wdXREaXNwYXRjaD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0 ZSkKLS0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogY2RlZiBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUoSW5w dXREaXNwYXRjaCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKLS0gKiAgICAgX19w eXhfcmVzdWx0LmFyZzAgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LnR5cGUgPSBfX3B5 eF9zdGF0ZVsxXQotLSAqLwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gIF9fUHl4X0lO Q1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdCk7Ci0tICBfX3B5eF9yID0gX19weXhfdl9fX3B5eF9y ZXN1bHQ7Ci0tICBnb3RvIF9fcHl4X0wwOwotLQotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MQot LSAqIGRlZiBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoKF9fcHl4X3R5cGUsIGxvbmcgX19w eXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgotLSAqICAgICBjZGVmIG9iamVj dCBfX3B5eF9yZXN1bHQKLS0gKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9sb2dfbGV2ZWwoUHlPYmplY3QgKm8sIENZ VEhPTl9VTlVTRUQgdm9pZCAqeCkgewotKyAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF8xX19nZXRfXyhvKTsKLSt9Ci0gCi0tICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X0wxX2Vycm9yOjsKLS0gIF9fUHl4X1hE RUNSRUYoX19weXhfdF8yKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKLS0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF80KTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKLS0gIF9f UHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX0lucHV0 RGlzcGF0Y2giLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsK LS0gIF9fcHl4X3IgPSBOVUxMOwotLSAgX19weXhfTDA6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5 eF92X19fcHl4X1BpY2tsZUVycm9yKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9y ZXN1bHQpOwotLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Ci0tICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBfX3B5eF9yOwotK3N0YXRpYyBpbnQgX19weXhfc2V0 cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX2xvZ19sZXZlbChQeU9iamVj dCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgewotKyAgaWYgKHYpIHsK LSsgICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2Vf OWxvZ19sZXZlbF8zX19zZXRfXyhvLCB2KTsKLSsgIH0KLSsgIGVsc2UgewotKyAgICByZXR1cm4g X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsXzVf X2RlbF9fKG8pOwotKyAgfQotIH0KLSAKLS0vKiAiKHRyZWUgZnJhZ21lbnQpIjoxMQotLSAqICAg ICAgICAgX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0X3N0YXRlKDxJbnB1dERpc3Bh dGNoPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQotLSAqICAgICByZXR1cm4gX19weXhfcmVz dWx0Ci0tICogY2RlZiBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUoSW5w dXREaXNwYXRjaCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBfX3B5eF9yZXN1bHQuYXJnMCA9IF9fcHl4X3N0YXRl WzBdOyBfX3B5eF9yZXN1bHQudHlwZSA9IF9fcHl4X3N0YXRlWzFdCi0tICogICAgIGlmIGxlbihf X3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6Ci0t ICovCi0rc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2VbXSA9IHsKLSsgIHsiX19yZWR1Y2VfY3l0aG9uX18iLCAoUHlDRnVuY3Rp b24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV8xX19yZWR1Y2Vf Y3l0aG9uX18sIE1FVEhfTk9BUkdTLCAwfSwKLSsgIHsiX19zZXRzdGF0ZV9jeXRob25fXyIsIChQ eUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzNf X3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAotKyAgezAsIDAsIDAsIDB9Ci0rfTsKLSAK LS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Vu cGlja2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICpfX3B5eF92X19fcHl4X3Jlc3VsdCwgUHlPYmpl Y3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsK LS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBQeU9iamVjdCAqX19weXhfdF8xID0g TlVMTDsKLS0gIGludCBfX3B5eF90XzI7Ci0tICBQeV9zc2l6ZV90IF9fcHl4X3RfMzsKLS0gIGlu dCBfX3B5eF90XzQ7Ci0tICBpbnQgX19weXhfdF81OwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNiA9 IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5 eF90XzggPSBOVUxMOwotLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0tICBjb25zdCBjaGFyICpf X3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0tICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0 X3N0YXRlIiwgMCk7Ci0rc3RhdGljIHN0cnVjdCBQeUdldFNldERlZiBfX3B5eF9nZXRzZXRzXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlW10gPSB7Ci0rICB7KGNoYXIgKikicHJlZml4 IiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX3ByZWZp eCwgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX3ByZWZp eCwgKGNoYXIgKikwLCAwfSwKLSsgIHsoY2hhciAqKSJsZXZlbCIsIF9fcHl4X2dldHByb3BfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9sZXZlbCwgX19weXhfc2V0cHJvcF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX2xldmVsLCAoY2hhciAqKTAsIDB9LAotKyAg eyhjaGFyICopInRleHQiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExv Z01lc3NhZ2VfdGV4dCwgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dN ZXNzYWdlX3RleHQsIChjaGFyICopMCwgMH0sCi0rICB7KGNoYXIgKikibG9nX2xldmVsIiwgX19w eXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX2xvZ19sZXZlbCwg X19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX2xvZ19sZXZl bCwgKGNoYXIgKikwLCAwfSwKLSsgIHswLCAwLCAwLCAwLCAwfQotK307Ci0gCi0tICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxMgotLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0tICogY2RlZiBf X3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUoSW5wdXREaXNwYXRjaCBfX3B5 eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKLS0gKiAgICAgX19weXhfcmVzdWx0LmFyZzAg PSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LnR5cGUgPSBfX3B5eF9zdGF0ZVsxXSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAy IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6Ci0tICogICAgICAgICBfX3B5 eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzJdKQotLSAqLwotLSAgaWYgKHVu bGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKLS0gICAgUHlFcnJfU2V0 U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBzdWJzY3Jp cHRhYmxlIik7Ci0tICAgIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0rc3RhdGlj IFB5VHlwZU9iamVjdCBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl ID0gewotKyAgUHlWYXJPYmplY3RfSEVBRF9JTklUKDAsIDApCi0rICAidmlkY3V0dGVyLmxpYnMu bXB2LkxvZ01lc3NhZ2UiLCAvKnRwX25hbWUqLwotKyAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UpLCAvKnRwX2Jhc2ljc2l6ZSovCi0rICAw LCAvKnRwX2l0ZW1zaXplKi8KLSsgIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2UsIC8qdHBfZGVhbGxvYyovCi0rICAjaWYgUFlfVkVSU0lPTl9IRVggPCAw eDAzMDgwMGI0Ci0rICAwLCAvKnRwX3ByaW50Ki8KLSsgICNlbmRpZgotKyAgI2lmIFBZX1ZFUlNJ T05fSEVYID49IDB4MDMwODAwYjQKLSsgIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQqLwotKyAg I2VuZGlmCi0rICAwLCAvKnRwX2dldGF0dHIqLwotKyAgMCwgLyp0cF9zZXRhdHRyKi8KLSsgICNp ZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotKyAgMCwgLyp0cF9jb21wYXJlKi8KLSsgICNlbmRpZgot KyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotKyAgMCwgLyp0cF9hc19hc3luYyovCi0rICAj ZW5kaWYKLSsgIDAsIC8qdHBfcmVwciovCi0rICAwLCAvKnRwX2FzX251bWJlciovCi0rICAwLCAv KnRwX2FzX3NlcXVlbmNlKi8KLSsgIDAsIC8qdHBfYXNfbWFwcGluZyovCi0rICAwLCAvKnRwX2hh c2gqLwotKyAgMCwgLyp0cF9jYWxsKi8KLSsgIDAsIC8qdHBfc3RyKi8KLSsgIDAsIC8qdHBfZ2V0 YXR0cm8qLwotKyAgMCwgLyp0cF9zZXRhdHRybyovCi0rICAwLCAvKnRwX2FzX2J1ZmZlciovCi0r ICBQeV9UUEZMQUdTX0RFRkFVTFR8UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5X1RQRkxB R1NfQ0hFQ0tUWVBFU3xQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1NfQkFTRVRZ UEV8UHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KLSsgICJEYXRhIGZpZWxkIGZvciBN UFZfRVZFTlRfTE9HX01FU1NBR0UgZXZlbnRzLlxuXG4gICAgV3JhcHM6IG1wdl9ldmVudF9sb2df bWVzc2FnZVxuICAgICIsIC8qdHBfZG9jKi8KLSsgIF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLCAvKnRwX3RyYXZlcnNlKi8KLSsgIF9fcHl4X3RwX2Ns ZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLCAvKnRwX2NsZWFyKi8KLSsgIDAs IC8qdHBfcmljaGNvbXBhcmUqLwotKyAgMCwgLyp0cF93ZWFrbGlzdG9mZnNldCovCi0rICAwLCAv KnRwX2l0ZXIqLwotKyAgMCwgLyp0cF9pdGVybmV4dCovCi0rICBfX3B5eF9tZXRob2RzXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLCAvKnRwX21ldGhvZHMqLwotKyAgMCwgLyp0cF9t ZW1iZXJzKi8KLSsgIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3Nh Z2UsIC8qdHBfZ2V0c2V0Ki8KLSsgIDAsIC8qdHBfYmFzZSovCi0rICAwLCAvKnRwX2RpY3QqLwot KyAgMCwgLyp0cF9kZXNjcl9nZXQqLwotKyAgMCwgLyp0cF9kZXNjcl9zZXQqLwotKyAgMCwgLyp0 cF9kaWN0b2Zmc2V0Ki8KLSsgIDAsIC8qdHBfaW5pdCovCi0rICAwLCAvKnRwX2FsbG9jKi8KLSsg IF9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSwgLyp0cF9uZXcq LwotKyAgMCwgLyp0cF9mcmVlKi8KLSsgIDAsIC8qdHBfaXNfZ2MqLwotKyAgMCwgLyp0cF9iYXNl cyovCi0rICAwLCAvKnRwX21ybyovCi0rICAwLCAvKnRwX2NhY2hlKi8KLSsgIDAsIC8qdHBfc3Vi Y2xhc3NlcyovCi0rICAwLCAvKnRwX3dlYWtsaXN0Ki8KLSsgIDAsIC8qdHBfZGVsKi8KLSsgIDAs IC8qdHBfdmVyc2lvbl90YWcqLwotKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEK LSsgIDAsIC8qdHBfZmluYWxpemUqLwotKyAgI2VuZGlmCi0rICAjaWYgUFlfVkVSU0lPTl9IRVgg Pj0gMHgwMzA4MDBiMSAmJiAoIUNZVEhPTl9DT01QSUxJTkdfSU5fUFlQWSB8fCBQWVBZX1ZFUlNJ T05fTlVNID49IDB4MDcwMzA4MDApCi0rICAwLCAvKnRwX3ZlY3RvcmNhbGwqLwotKyAgI2VuZGlm Ci0rICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNCAmJiBQWV9WRVJTSU9OX0hFWCA8 IDB4MDMwOTAwMDAKLSsgIDAsIC8qdHBfcHJpbnQqLwotKyAgI2VuZGlmCi0rICAjaWYgQ1lUSE9O X0NPTVBJTElOR19JTl9QWVBZICYmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwOTAwMDAKLSsgIDAs IC8qdHBfcHlweV9mbGFncyovCi0rICAjZW5kaWYKLSt9OwotK3N0YXRpYyBzdHJ1Y3QgX19weXhf dnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgX19weXhfdnRhYmxlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eTsKLSsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkoUHlUeXBlT2JqZWN0ICp0LCBD WVRIT05fVU5VU0VEIFB5T2JqZWN0ICphLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICprKSB7Ci0r ICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqcDsKLSsg IFB5T2JqZWN0ICpvOwotKyAgaWYgKGxpa2VseSgodC0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0lT X0FCU1RSQUNUKSA9PSAwKSkgewotKyAgICBvID0gKCp0LT50cF9hbGxvYykodCwgMCk7Ci0rICB9 IGVsc2UgewotKyAgICBvID0gKFB5T2JqZWN0ICopIFB5QmFzZU9iamVjdF9UeXBlLnRwX25ldyh0 LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7Ci0gICB9Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJ dGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDAsIGxvbmcsIDEsIF9fUHl4X1B5SW50 X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAg X19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwotLSAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhf cmVzdWx0LT5hcmcwKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+YXJn MCk7Ci0tICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+YXJnMCA9IF9fcHl4X3RfMTsKLS0gIF9fcHl4 X3RfMSA9IDA7Ci0tICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25l KSkgewotLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBv YmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsKLS0gICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5 eF9MMV9lcnJvcikKLSsgIGlmICh1bmxpa2VseSghbykpIHJldHVybiAwOwotKyAgcCA9ICgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilvKTsKLSsgIHAt Pl9fcHl4X3Z0YWIgPSBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eTsKLSsgIHAtPm5hbWUgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0rICBwLT5kYXRh ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotKyAgcmV0dXJuIG87Ci0rfQotKwotK3N0 YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5 KFB5T2JqZWN0ICpvKSB7Ci0rICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Qcm9wZXJ0eSAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Q cm9wZXJ0eSAqKW87Ci0rICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5BTElaRQotKyAgaWYgKHVubGlr ZWx5KFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQRkxBR1NfSEFWRV9GSU5BTEla RSkgJiYgUHlfVFlQRShvKS0+dHBfZmluYWxpemUpICYmICFfUHlHQ19GSU5BTElaRUQobykpIHsK LSsgICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhvKSkgcmV0dXJuOwot ICAgfQotLSAgX19weXhfdF8xID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4 X3N0YXRlLCAxLCBsb25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0t ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsK LS0gIF9fUHl4X0dPVFJFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+dHlwZSk7Ci0tICBfX1B5eF9E RUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnR5cGUpOwotLSAgX19weXhfdl9fX3B5eF9yZXN1 bHQtPnR5cGUgPSBfX3B5eF90XzE7Ci0tICBfX3B5eF90XzEgPSAwOwotKyAgI2VuZGlmCi0rICBQ eU9iamVjdF9HQ19VblRyYWNrKG8pOwotKyAgUHlfQ0xFQVIocC0+bmFtZSk7Ci0rICBQeV9DTEVB UihwLT5kYXRhKTsKLSsgICgqUHlfVFlQRShvKS0+dHBfZnJlZSkobyk7Ci0rfQotIAotLSAgLyog Iih0cmVlIGZyYWdtZW50KSI6MTMKLS0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0 Y2hfX3NldF9zdGF0ZShJbnB1dERpc3BhdGNoIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3Rh dGUpOgotLSAqICAgICBfX3B5eF9yZXN1bHQuYXJnMCA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9y ZXN1bHQudHlwZSA9IF9fcHl4X3N0YXRlWzFdCi0tICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkg PiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUo X19weXhfc3RhdGVbMl0pCi0tICovCi0tICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0 ZSA9PSBQeV9Ob25lKSkgewotLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAi b2JqZWN0IG9mIHR5cGUgJ05vbmVUeXBlJyBoYXMgbm8gbGVuKCkiKTsKLS0gICAgX19QWVhfRVJS KDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKLStzdGF0aWMgaW50IF9fcHl4X3RwX3RyYXZlcnNlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eShQeU9iamVjdCAqbywgdmlzaXRwcm9jIHYsIHZv aWQgKmEpIHsKLSsgIGludCBlOwotKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfUHJvcGVydHkgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUHJvcGVydHkgKilvOwotKyAgaWYgKHAtPm5hbWUpIHsKLSsgICAgZSA9ICgqdikocC0+bmFt ZSwgYSk7IGlmIChlKSByZXR1cm4gZTsKLSAgIH0KLS0gIF9fcHl4X3RfMyA9IFB5VHVwbGVfR0VU X1NJWkUoX19weXhfdl9fX3B5eF9zdGF0ZSk7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPT0gKChQ eV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5 eF90XzQgPSAoKF9fcHl4X3RfMyA+IDIpICE9IDApOwotLSAgaWYgKF9fcHl4X3RfNCkgewotLSAg fSBlbHNlIHsKLS0gICAgX19weXhfdF8yID0gX19weXhfdF80OwotLSAgICBnb3RvIF9fcHl4X0w0 X2Jvb2xfYmlub3BfZG9uZTsKLSsgIGlmIChwLT5kYXRhKSB7Ci0rICAgIGUgPSAoKnYpKHAtPmRh dGEsIGEpOyBpZiAoZSkgcmV0dXJuIGU7Ci0gICB9Ci0tICBfX3B5eF90XzQgPSBfX1B5eF9IYXNB dHRyKCgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4X3Jlc3VsdCksIF9fcHl4X25fc19kaWN0KTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfNCA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMSwgMTMsIF9f cHl4X0wxX2Vycm9yKQotLSAgX19weXhfdF81ID0gKF9fcHl4X3RfNCAhPSAwKTsKLS0gIF9fcHl4 X3RfMiA9IF9fcHl4X3RfNTsKLS0gIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7Ci0tICBpZiAo X19weXhfdF8yKSB7Ci0rICByZXR1cm4gMDsKLSt9Ci0gCi0tICAgIC8qICIodHJlZSBmcmFnbWVu dCkiOjE0Ci0tICogICAgIF9fcHl4X3Jlc3VsdC5hcmcwID0gX19weXhfc3RhdGVbMF07IF9fcHl4 X3Jlc3VsdC50eXBlID0gX19weXhfc3RhdGVbMV0KLS0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRl KSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKLS0gKiAgICAgICAg IF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbMl0pICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKi8KLS0gICAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3Rf R2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3Nf ZGljdCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5eF9M MV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICAgIF9fcHl4X3RfNyA9 IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF82LCBfX3B5eF9uX3NfdXBkYXRlKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9y KQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tICAgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0 YXRlID09IFB5X05vbmUpKSB7Ci0tICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv ciwgIidOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7Ci0tICAgICAgX19Q WVhfRVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgfQotLSAgICBfX3B5eF90XzYgPSBf X1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDIsIGxvbmcsIDEsIF9f UHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNik7Ci0tICAgIF9fcHl4X3RfOCA9IE5VTEw7Ci0tICAgIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNykpKSB7Ci0tICAgICAgX19w eXhfdF84ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF83KTsKLS0gICAgICBpZiAobGlrZWx5 KF9fcHl4X3RfOCkpIHsKLS0gICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dF VF9GVU5DVElPTihfX3B5eF90XzcpOwotLSAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfOCk7 Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzcsIGZ1bmN0aW9uKTsKLS0gICAgICB9Ci0tICAgIH0KLS0gICAgX19weXhf dF8xID0gKF9fcHl4X3RfOCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF83LCBf X3B5eF90XzgsIF9fcHl4X3RfNikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3Rf NywgX19weXhfdF82KTsKLS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90Xzgg PSAwOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0gICAg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9y KQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOwotK3N0YXRpYyBpbnQgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18z bXB2X1Byb3BlcnR5KFB5T2JqZWN0ICpvKSB7Ci0rICBQeU9iamVjdCogdG1wOwotKyAgc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKnAgPSAoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilvOwotKyAgdG1wID0gKChQ eU9iamVjdCopcC0+bmFtZSk7Ci0rICBwLT5uYW1lID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05v bmUpOwotKyAgUHlfWERFQ1JFRih0bXApOwotKyAgdG1wID0gKChQeU9iamVjdCopcC0+ZGF0YSk7 Ci0rICBwLT5kYXRhID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotKyAgUHlfWERFQ1JF Rih0bXApOwotKyAgcmV0dXJuIDA7Ci0rfQotIAotLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox MwotLSAqIGNkZWYgX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0X3N0YXRlKElucHV0 RGlzcGF0Y2ggX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6Ci0tICogICAgIF9fcHl4 X3Jlc3VsdC5hcmcwID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC50eXBlID0gX19weXhf c3RhdGVbMV0KLS0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19w eXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq ICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVsyXSkKLS0g Ki8KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2 XzhQcm9wZXJ0eV9uYW1lKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKLSsg IHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRuYW1lXzFf X2dldF9fKG8pOwotK30KLSsKLStzdGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80 bGlic18zbXB2XzhQcm9wZXJ0eV9uYW1lKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9O X1VOVVNFRCB2b2lkICp4KSB7Ci0rICBpZiAodikgewotKyAgICByZXR1cm4gX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV8zX19zZXRfXyhvLCB2KTsKLSsgIH0K LSsgIGVsc2UgewotKyAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQ cm9wZXJ0eV80bmFtZV81X19kZWxfXyhvKTsKLSAgIH0KLSt9Ci0gCi0tICAvKiAiKHRyZWUgZnJh Z21lbnQpIjoxMQotLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0 X3N0YXRlKDxJbnB1dERpc3BhdGNoPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQotLSAqICAg ICByZXR1cm4gX19weXhfcmVzdWx0Ci0tICogY2RlZiBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3Bh dGNoX19zZXRfc3RhdGUoSW5wdXREaXNwYXRjaCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0 YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBfX3B5eF9yZXN1bHQu YXJnMCA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQudHlwZSA9IF9fcHl4X3N0YXRlWzFd Ci0tICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3Vs dCwgJ19fZGljdF9fJyk6Ci0tICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfZGF0YShQeU9iamVjdCAqbywgQ1lUSE9OX1VO VVNFRCB2b2lkICp4KSB7Ci0rICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzhQcm9wZXJ0eV80ZGF0YV8xX19nZXRfXyhvKTsKLSt9Ci0gCi0tICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KLS0gIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0t ICBnb3RvIF9fcHl4X0wwOwotLSAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihf X3B5eF90XzEpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOwotLSAgX19QeXhfWERFQ1JF RihfX3B5eF90XzcpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOwotLSAgX19QeXhfQWRk VHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRj aF9fc2V0X3N0YXRlIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFt ZSk7Ci0tICBfX3B5eF9yID0gMDsKLS0gIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3IpOwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19w eXhfcjsKLStzdGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQ cm9wZXJ0eV9kYXRhKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9OX1VOVVNFRCB2b2lk ICp4KSB7Ci0rICBpZiAodikgewotKyAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzhQcm9wZXJ0eV80ZGF0YV8zX19zZXRfXyhvLCB2KTsKLSsgIH0KLSsgIGVsc2Ugewot KyAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80ZGF0 YV81X19kZWxfXyhvKTsKLSsgIH0KLSB9Ci0gCi0tLyogIih0cmVlIGZyYWdtZW50KSI6MQotLSAq IGRlZiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlKF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hl Y2tzdW0sIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgotLSAqICAgICBjZGVmIG9iamVjdCBfX3B5 eF9yZXN1bHQKLS0gKi8KLStzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWV0aG9kc185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUHJvcGVydHlbXSA9IHsKLSsgIHsiX19yZWR1Y2VfY3l0aG9uX18iLCAo UHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV8xX19y ZWR1Y2VfY3l0aG9uX18sIE1FVEhfTk9BUkdTLCAwfSwKLSsgIHsiX19zZXRzdGF0ZV9jeXRob25f XyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5 XzNfX3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAotKyAgezAsIDAsIDAsIDB9Ci0rfTsK LSAKLS0vKiBQeXRob24gd3JhcHBlciAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzExX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZShQeU9iamVjdCAq X19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsg Lypwcm90byovCi0tc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGli c18zbXB2XzExX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSA9IHsiX19weXhfdW5waWNrbGVfTG9n TWVzc2FnZSIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMV9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2Us IE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfTsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMV9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UoUHlP YmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhf a3dkcykgewotLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSA9IDA7Ci0tICBsb25nIF9f cHl4X3ZfX19weXhfY2hlY2tzdW07Ci0tICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSA9 IDA7Ci0tICBpbnQgX19weXhfbGluZW5vID0gMDsKLS0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVu YW1lID0gTlVMTDsKLS0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIFB5T2JqZWN0ICpfX3B5 eF9yID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSAod3JhcHBlcikiLCAwKTsK LS0gIHsKLS0gICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5 eF9uX3NfcHl4X3R5cGUsJl9fcHl4X25fc19weXhfY2hlY2tzdW0sJl9fcHl4X25fc19weXhfc3Rh dGUsMH07Ci0tICAgIFB5T2JqZWN0KiB2YWx1ZXNbM10gPSB7MCwwLDB9OwotLSAgICBpZiAodW5s aWtlbHkoX19weXhfa3dkcykpIHsKLS0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7Ci0tICAgICAg Y29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7 Ci0tICAgICAgc3dpdGNoIChwb3NfYXJncykgewotLSAgICAgICAgY2FzZSAgMzogdmFsdWVzWzJd ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsKLS0gICAgICAgIENZVEhPTl9GQUxM VEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0o X19weXhfYXJncywgMSk7Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBj YXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOwotLSAg ICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgMDogYnJlYWs7Ci0tICAg ICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotLSAgICAgIH0KLS0g ICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7Ci0tICAgICAgc3dpdGNoIChw b3NfYXJncykgewotLSAgICAgICAgY2FzZSAgMDoKLS0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVl c1swXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhf dHlwZSkpICE9IDApKSBrd19hcmdzLS07Ci0tICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJn dHVwbGVfZXJyb3I7Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNl ICAxOgotLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0 ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF9jaGVja3N1bSkpICE9IDApKSBrd19hcmdz LS07Ci0tICAgICAgICBlbHNlIHsKLS0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFs aWQoIl9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UiLCAxLCAzLCAzLCAxKTsgX19QWVhfRVJSKDEs IDEsIF9fcHl4X0wzX2Vycm9yKQotLSAgICAgICAgfQotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOwotLSAgICAgICAgY2FzZSAgMjoKLS0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1syXSA9 IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhfc3RhdGUp KSAhPSAwKSkga3dfYXJncy0tOwotLSAgICAgICAgZWxzZSB7Ci0tICAgICAgICAgIF9fUHl4X1Jh aXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlIiwgMSwgMywgMywg Mik7IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKLS0gICAgICAgIH0KLS0gICAgICB9 Ci0tICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewotLSAgICAgICAgaWYgKHVubGlr ZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25h bWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAiX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSIpIDwg MCkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKLS0gICAgICB9Ci0tICAgIH0gZWxz ZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAzKSB7Ci0tICAgICAgZ290byBf X3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLS0gICAgfSBlbHNlIHsKLS0gICAgICB2YWx1ZXNbMF0g PSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOwotLSAgICAgIHZhbHVlc1sxXSA9IFB5 VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7Ci0tICAgICAgdmFsdWVzWzJdID0gUHlUdXBs ZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsKLS0gICAgfQotLSAgICBfX3B5eF92X19fcHl4X3R5 cGUgPSB2YWx1ZXNbMF07Ci0tICAgIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gPSBfX1B5eF9QeUlu dF9Bc19sb25nKHZhbHVlc1sxXSk7IGlmICh1bmxpa2VseSgoX19weXhfdl9fX3B5eF9jaGVja3N1 bSA9PSAobG9uZyktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigxLCAxLCBfX3B5 eF9MM19lcnJvcikKLS0gICAgX19weXhfdl9fX3B5eF9zdGF0ZSA9IHZhbHVlc1syXTsKLStzdGF0 aWMgc3RydWN0IFB5R2V0U2V0RGVmIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18zbXB2 X1Byb3BlcnR5W10gPSB7Ci0rICB7KGNoYXIgKikibmFtZSIsIF9fcHl4X2dldHByb3BfOXZpZGN1 dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9uYW1lLCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl84UHJvcGVydHlfbmFtZSwgKGNoYXIgKikwLCAwfSwKLSsgIHsoY2hhciAqKSJk YXRhIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X2RhdGEs IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9kYXRhLCAoY2hh ciAqKTAsIDB9LAotKyAgezAsIDAsIDAsIDAsIDB9Ci0rfTsKLSsKLStzdGF0aWMgUHlUeXBlT2Jq ZWN0IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ID0gewotKyAgUHlW YXJPYmplY3RfSEVBRF9JTklUKDAsIDApCi0rICAidmlkY3V0dGVyLmxpYnMubXB2LlByb3BlcnR5 IiwgLyp0cF9uYW1lKi8KLSsgIHNpemVvZihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Qcm9wZXJ0eSksIC8qdHBfYmFzaWNzaXplKi8KLSsgIDAsIC8qdHBfaXRlbXNpemUq LwotKyAgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHksIC8q dHBfZGVhbGxvYyovCi0rICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMGI0Ci0rICAwLCAv KnRwX3ByaW50Ki8KLSsgICNlbmRpZgotKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAw YjQKLSsgIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQqLwotKyAgI2VuZGlmCi0rICAwLCAvKnRw X2dldGF0dHIqLwotKyAgMCwgLyp0cF9zZXRhdHRyKi8KLSsgICNpZiBQWV9NQUpPUl9WRVJTSU9O IDwgMwotKyAgMCwgLyp0cF9jb21wYXJlKi8KLSsgICNlbmRpZgotKyAgI2lmIFBZX01BSk9SX1ZF UlNJT04gPj0gMwotKyAgMCwgLyp0cF9hc19hc3luYyovCi0rICAjZW5kaWYKLSsgIDAsIC8qdHBf cmVwciovCi0rICAwLCAvKnRwX2FzX251bWJlciovCi0rICAwLCAvKnRwX2FzX3NlcXVlbmNlKi8K LSsgIDAsIC8qdHBfYXNfbWFwcGluZyovCi0rICAwLCAvKnRwX2hhc2gqLwotKyAgMCwgLyp0cF9j YWxsKi8KLSsgIDAsIC8qdHBfc3RyKi8KLSsgIDAsIC8qdHBfZ2V0YXR0cm8qLwotKyAgMCwgLyp0 cF9zZXRhdHRybyovCi0rICAwLCAvKnRwX2FzX2J1ZmZlciovCi0rICBQeV9UUEZMQUdTX0RFRkFV TFR8UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5X1RQRkxBR1NfQ0hFQ0tUWVBFU3xQeV9U UEZMQUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1NfQkFTRVRZUEV8UHlfVFBGTEFHU19IQVZF X0dDLCAvKnRwX2ZsYWdzKi8KLSsgICJEYXRhIGZpZWxkIGZvciBNUFZfRVZFTlRfUFJPUEVSVFlf Q0hBTkdFIGFuZCBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZLlxuXG4gICAgV3JhcHM6IG1w dl9ldmVudF9wcm9wZXJ0eVxuICAgICIsIC8qdHBfZG9jKi8KLSsgIF9fcHl4X3RwX3RyYXZlcnNl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSwgLyp0cF90cmF2ZXJzZSovCi0rICBfX3B5 eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHksIC8qdHBfY2xlYXIqLwot KyAgMCwgLyp0cF9yaWNoY29tcGFyZSovCi0rICAwLCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KLSsg IDAsIC8qdHBfaXRlciovCi0rICAwLCAvKnRwX2l0ZXJuZXh0Ki8KLSsgIF9fcHl4X21ldGhvZHNf OXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5LCAvKnRwX21ldGhvZHMqLwotKyAgMCwgLyp0 cF9tZW1iZXJzKi8KLSsgIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3Bl cnR5LCAvKnRwX2dldHNldCovCi0rICAwLCAvKnRwX2Jhc2UqLwotKyAgMCwgLyp0cF9kaWN0Ki8K LSsgIDAsIC8qdHBfZGVzY3JfZ2V0Ki8KLSsgIDAsIC8qdHBfZGVzY3Jfc2V0Ki8KLSsgIDAsIC8q dHBfZGljdG9mZnNldCovCi0rICAwLCAvKnRwX2luaXQqLwotKyAgMCwgLyp0cF9hbGxvYyovCi0r ICBfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5LCAvKnRwX25ldyov Ci0rICAwLCAvKnRwX2ZyZWUqLwotKyAgMCwgLyp0cF9pc19nYyovCi0rICAwLCAvKnRwX2Jhc2Vz Ki8KLSsgIDAsIC8qdHBfbXJvKi8KLSsgIDAsIC8qdHBfY2FjaGUqLwotKyAgMCwgLyp0cF9zdWJj bGFzc2VzKi8KLSsgIDAsIC8qdHBfd2Vha2xpc3QqLwotKyAgMCwgLyp0cF9kZWwqLwotKyAgMCwg Lyp0cF92ZXJzaW9uX3RhZyovCi0rICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA0MDBhMQot KyAgMCwgLyp0cF9maW5hbGl6ZSovCi0rICAjZW5kaWYKLSsgICNpZiBQWV9WRVJTSU9OX0hFWCA+ PSAweDAzMDgwMGIxICYmICghQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZIHx8IFBZUFlfVkVSU0lP Tl9OVU0gPj0gMHgwNzAzMDgwMCkKLSsgIDAsIC8qdHBfdmVjdG9yY2FsbCovCi0rICAjZW5kaWYK LSsgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVYIDwg MHgwMzA5MDAwMAotKyAgMCwgLyp0cF9wcmludCovCi0rICAjZW5kaWYKLSsgICNpZiBDWVRIT05f Q09NUElMSU5HX0lOX1BZUFkgJiYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA5MDAwMAotKyAgMCwg Lyp0cF9weXB5X2ZsYWdzKi8KLSsgICNlbmRpZgotK307Ci0rc3RhdGljIHN0cnVjdCBfX3B5eF92 dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCBfX3B5eF92dGFibGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0V2ZW50OwotKwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudChQeVR5cGVPYmplY3QgKnQsIENZVEhPTl9VTlVT RUQgUHlPYmplY3QgKmEsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKLSsgIHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpwOwotKyAgUHlPYmplY3QgKm87 Ci0rICBpZiAobGlrZWx5KCh0LT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QpID09 IDApKSB7Ci0rICAgIG8gPSAoKnQtPnRwX2FsbG9jKSh0LCAwKTsKLSsgIH0gZWxzZSB7Ci0rICAg IG8gPSAoUHlPYmplY3QgKikgUHlCYXNlT2JqZWN0X1R5cGUudHBfbmV3KHQsIF9fcHl4X2VtcHR5 X3R1cGxlLCAwKTsKLSAgIH0KLS0gIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2Rv bmU7Ci0tICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Ci0tICBfX1B5eF9SYWlzZUFyZ3R1cGxl SW52YWxpZCgiX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSIsIDEsIDMsIDMsIFB5VHVwbGVfR0VU X1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCi0tICBf X3B5eF9MM19lcnJvcjo7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5fX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5v LCBfX3B5eF9maWxlbmFtZSk7Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0g IHJldHVybiBOVUxMOwotLSAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OwotLSAg X19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMF9fcHl4X3VucGlja2xl X0xvZ01lc3NhZ2UoX19weXhfc2VsZiwgX19weXhfdl9fX3B5eF90eXBlLCBfX3B5eF92X19fcHl4 X2NoZWNrc3VtLCBfX3B5eF92X19fcHl4X3N0YXRlKTsKLSsgIGlmICh1bmxpa2VseSghbykpIHJl dHVybiAwOwotKyAgcCA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RXZlbnQgKilvKTsKLSsgIHAtPl9fcHl4X3Z0YWIgPSBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FdmVudDsKLSsgIHAtPmRhdGEgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9u ZSk7Ci0rICBwLT5yZXBseV91c2VyZGF0YSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsK LSsgIHJldHVybiBvOwotK30KLSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLStzdGF0aWMg dm9pZCBfX3B5eF90cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudChQeU9iamVj dCAqbykgewotKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQg KnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilvOwot KyAgI2lmIENZVEhPTl9VU0VfVFBfRklOQUxJWkUKLSsgIGlmICh1bmxpa2VseShQeVR5cGVfSGFz RmVhdHVyZShQeV9UWVBFKG8pLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmIFB5X1RZUEUo byktPnRwX2ZpbmFsaXplKSAmJiAhX1B5R0NfRklOQUxJWkVEKG8pKSB7Ci0rICAgIGlmIChQeU9i amVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2MobykpIHJldHVybjsKLSsgIH0KLSsgICNlbmRp ZgotKyAgUHlPYmplY3RfR0NfVW5UcmFjayhvKTsKLSsgIFB5X0NMRUFSKHAtPmRhdGEpOwotKyAg UHlfQ0xFQVIocC0+cmVwbHlfdXNlcmRhdGEpOwotKyAgKCpQeV9UWVBFKG8pLT50cF9mcmVlKShv KTsKLSB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9f cHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5cGUsIGxvbmcgX19weXhfdl9fX3B5 eF9jaGVja3N1bSwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKLS0gIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yID0gMDsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X19f cHl4X3Jlc3VsdCA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0tICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgaW50IF9fcHl4X3RfMTsKLS0gIFB5T2JqZWN0ICpfX3B5 eF90XzIgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0tICBQeU9iamVj dCAqX19weXhfdF80ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwotLSAg aW50IF9fcHl4X3RfNjsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAq X19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UiLCAwKTsK LStzdGF0aWMgaW50IF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVu dChQeU9iamVjdCAqbywgdmlzaXRwcm9jIHYsIHZvaWQgKmEpIHsKLSsgIGludCBlOwotKyAgc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKnAgPSAoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilvOwotKyAgaWYgKHAtPmRhdGEp IHsKLSsgICAgZSA9ICgqdikocC0+ZGF0YSwgYSk7IGlmIChlKSByZXR1cm4gZTsKLSsgIH0KLSsg IGlmIChwLT5yZXBseV91c2VyZGF0YSkgewotKyAgICBlID0gKCp2KShwLT5yZXBseV91c2VyZGF0 YSwgYSk7IGlmIChlKSByZXR1cm4gZTsKLSsgIH0KLSsgIHJldHVybiAwOwotK30KLSAKLS0gIC8q ICIodHJlZSBmcmFnbWVudCkiOjQKLS0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJy b3IKLS0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0Ci0tICogICAgIGlmIF9fcHl4X2No ZWNrc3VtICE9IDB4ODc3NGZhZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9y Ci0tICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNr c3VtcyAoJXMgdnMgMHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZpeCwgdGV4dCkp IiAlIF9fcHl4X2NoZWNrc3VtKQotLSAqLwotLSAgX19weXhfdF8xID0gKChfX3B5eF92X19fcHl4 X2NoZWNrc3VtICE9IDB4ODc3NGZhZSkgIT0gMCk7Ci0tICBpZiAoX19weXhfdF8xKSB7Ci0rc3Rh dGljIGludCBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQoUHlPYmpl Y3QgKm8pIHsKLSsgIFB5T2JqZWN0KiB0bXA7Ci0rICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FdmVudCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FdmVudCAqKW87Ci0rICB0bXAgPSAoKFB5T2JqZWN0KilwLT5kYXRhKTsKLSsgIHAt PmRhdGEgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0rICBQeV9YREVDUkVGKHRtcCk7 Ci0rICB0bXAgPSAoKFB5T2JqZWN0KilwLT5yZXBseV91c2VyZGF0YSk7Ci0rICBwLT5yZXBseV91 c2VyZGF0YSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLSsgIFB5X1hERUNSRUYodG1w KTsKLSsgIHJldHVybiAwOwotK30KLSAKLS0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6NQotLSAq ICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKLS0gKiAgICAgaWYgX19weXhfY2hlY2tzdW0g IT0gMHg4Nzc0ZmFlOgotLSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9y IGFzIF9fcHl4X1BpY2tsZUVycm9yICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICgl cyB2cyAweDg3NzRmYWUgPSAobGV2ZWwsIGxvZ19sZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19w eXhfY2hlY2tzdW0pCi0tICogICAgIF9fcHl4X3Jlc3VsdCA9IExvZ01lc3NhZ2UuX19uZXdfXyhf X3B5eF90eXBlKQotLSAqLwotLSAgICBfX3B5eF90XzIgPSBQeUxpc3RfTmV3KDEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikKLS0gICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9uX3NfUGlj a2xlRXJyb3IpOwotLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X25fc19QaWNrbGVFcnJvcik7Ci0t ICAgIFB5TGlzdF9TRVRfSVRFTShfX3B5eF90XzIsIDAsIF9fcHl4X25fc19QaWNrbGVFcnJvcik7 Ci0tICAgIF9fcHl4X3RfMyA9IF9fUHl4X0ltcG9ydChfX3B5eF9uX3NfcGlja2xlLCBfX3B5eF90 XzIsIC0xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhf TDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gICAgX19weXhfdF8yID0gX19QeXhfSW1w b3J0RnJvbShfX3B5eF90XzMsIF9fcHl4X25fc19QaWNrbGVFcnJvcik7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9f cHl4X3ZfX19weXhfUGlja2xlRXJyb3IgPSBfX3B5eF90XzI7Ci0tICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsg X19weXhfdF8zID0gMDsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRl cl80bGlic18zbXB2XzVFdmVudF9lcnJvcl9zdHIoUHlPYmplY3QgKm8sIENZVEhPTl9VTlVTRUQg dm9pZCAqeCkgewotKyAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZl bnRfOWVycm9yX3N0cl8xX19nZXRfXyhvKTsKLSt9Ci0gCi0tICAgIC8qICIodHJlZSBmcmFnbWVu dCkiOjYKLS0gKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHg4Nzc0ZmFlOgotLSAqICAgICAg ICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCi0t ICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3Vt cyAoJXMgdnMgMHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZpeCwgdGV4dCkpIiAl IF9fcHl4X2NoZWNrc3VtKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIF9f cHl4X3Jlc3VsdCA9IExvZ01lc3NhZ2UuX19uZXdfXyhfX3B5eF90eXBlKQotLSAqICAgICBpZiBf X3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKLS0gKi8KLS0gICAgX19weXhfdF8yID0gX19QeXhfUHlJ bnRfRnJvbV9sb25nKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0pOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7Ci0tICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdChfX3B5 eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDg3LCBfX3B5eF90XzIpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLS0g ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOwotLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9fX3B5eF9QaWNrbGVF cnJvcik7Ci0tICAgIF9fcHl4X3RfMiA9IF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3I7IF9fcHl4 X3RfNSA9IE5VTEw7Ci0tICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLS0gICAgICBfX3B5eF90XzUgPSBQeU1ldGhv ZF9HRVRfU0VMRihfX3B5eF90XzIpOwotLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewot LSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4 X3RfMik7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKLS0gICAgICAgIF9fUHl4 X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwg ZnVuY3Rpb24pOwotLSAgICAgIH0KLS0gICAgfQotLSAgICBfX3B5eF90XzMgPSAoX19weXhfdF81 KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNSwgX19weXhf dF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzQpOwot LSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0tICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIg PSAwOwotLSAgICBfX1B5eF9SYWlzZShfX3B5eF90XzMsIDAsIDAsIDApOwotLSAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gICAgX19QWVhfRVJSKDEsIDYsIF9f cHl4X0wxX2Vycm9yKQotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50X25hbWUoUHlPYmplY3QgKm8sIENZVEhPTl9VTlVTRUQgdm9pZCAq eCkgewotKyAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5h bWVfMV9fZ2V0X18obyk7Ci0rfQotIAotLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0Ci0tICog ICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCi0tICogICAgIGNkZWYgb2JqZWN0IF9f cHl4X3Jlc3VsdAotLSAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweDg3NzRmYWU6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQ aWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgotLSAqICAgICAgICAgcmFpc2UgX19weXhf UGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ODc3NGZhZSA9IChs ZXZlbCwgbG9nX2xldmVsLCBwcmVmaXgsIHRleHQpKSIgJSBfX3B5eF9jaGVja3N1bSkKLS0gKi8K LS0gIH0KLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF9pZChQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Ci0rICBy ZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yaWRfMV9fZ2V0X18o byk7Ci0rfQotIAotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6NwotLSAqICAgICAgICAgZnJvbSBw aWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCi0tICogICAgICAg ICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMg MHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZpeCwgdGV4dCkpIiAlIF9fcHl4X2No ZWNrc3VtKQotLSAqICAgICBfX3B5eF9yZXN1bHQgPSBMb2dNZXNzYWdlLl9fbmV3X18oX19weXhf dHlwZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBpZiBfX3B5eF9zdGF0 ZSBpcyBub3QgTm9uZToKLS0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3Nl dF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLS0gKi8KLS0g IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKSwgX19weXhfbl9zX25ldyk7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9y KQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX3B5eF90XzQgPSBOVUxMOwotLSAg aWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhf dF8yKSkpIHsKLS0gICAgX19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsK LS0gICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7Ci0tICAgICAgUHlPYmplY3QqIGZ1bmN0aW9u ID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0tICAgICAgX19QeXhfSU5DUkVG KF9fcHl4X3RfNCk7Ci0tICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotLSAgICB9Ci0rc3RhdGljIGludCBf X3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfaWQoUHlPYmplY3QgKm8s IFB5T2JqZWN0ICp2LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKLSsgIGlmICh2KSB7Ci0rICAg IHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8zX19zZXRf XyhvLCB2KTsKLSAgIH0KLS0gIF9fcHl4X3RfMyA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmpl Y3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF92X19fcHl4X3R5cGUpIDog X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfX19weXhfdHlwZSk7 Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA3LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7Ci0tICBfX3B5eF92X19fcHl4X3Jlc3VsdCA9IF9fcHl4X3RfMzsKLS0gIF9fcHl4 X3RfMyA9IDA7Ci0tCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo4Ci0tICogICAgICAgICByYWlz ZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHg4Nzc0 ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZpeCwgdGV4dCkpIiAlIF9fcHl4X2NoZWNrc3Vt KQotLSAqICAgICBfX3B5eF9yZXN1bHQgPSBMb2dNZXNzYWdlLl9fbmV3X18oX19weXhfdHlwZSkK LS0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0 ZSg8TG9nTWVzc2FnZT4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLS0gKiAgICAgcmV0dXJu IF9fcHl4X3Jlc3VsdAotLSAqLwotLSAgX19weXhfdF8xID0gKF9fcHl4X3ZfX19weXhfc3RhdGUg IT0gUHlfTm9uZSk7Ci0tICBfX3B5eF90XzYgPSAoX19weXhfdF8xICE9IDApOwotLSAgaWYgKF9f cHl4X3RfNikgewotLQotLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo5Ci0tICogICAgIF9fcHl4 X3Jlc3VsdCA9IExvZ01lc3NhZ2UuX19uZXdfXyhfX3B5eF90eXBlKQotLSAqICAgICBpZiBfX3B5 eF9zdGF0ZSBpcyBub3QgTm9uZToKLS0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0xvZ01lc3Nh Z2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0t ICogY2RlZiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoTG9nTWVzc2FnZSBf X3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKLS0gKi8KLS0gICAgaWYgKCEobGlrZWx5 KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X19fcHl4X3N0YXRlKSl8fCgoX19weXhfdl9fX3B5 eF9zdGF0ZSkgPT0gUHlfTm9uZSl8fChQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiRXhw ZWN0ZWQgJS4xNnMsIGdvdCAlLjIwMHMiLCAidHVwbGUiLCBQeV9UWVBFKF9fcHl4X3ZfX19weXhf c3RhdGUpLT50cF9uYW1lKSwgMCkpKSBfX1BZWF9FUlIoMSwgOSwgX19weXhfTDFfZXJyb3IpCi0t ICAgIF9fcHl4X3RfMyA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlj a2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X19fcHl4X3Jlc3VsdCksICgoUHlPYmplY3Qq KV9fcHl4X3ZfX19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMSwgOSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwot LSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0KLS0gICAgLyog Iih0cmVlIGZyYWdtZW50KSI6OAotLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3Io IkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ODc3NGZhZSA9IChsZXZlbCwgbG9nX2xl dmVsLCBwcmVmaXgsIHRleHQpKSIgJSBfX3B5eF9jaGVja3N1bSkKLS0gKiAgICAgX19weXhfcmVz dWx0ID0gTG9nTWVzc2FnZS5fX25ld19fKF9fcHl4X3R5cGUpCi0tICogICAgIGlmIF9fcHl4X3N0 YXRlIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAg ICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoPExvZ01lc3NhZ2U+IF9fcHl4 X3Jlc3VsdCwgX19weXhfc3RhdGUpCi0tICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKLS0gKi8K LSsgIGVsc2UgewotKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJv ciwgIl9fZGVsX18iKTsKLSsgICAgcmV0dXJuIC0xOwotICAgfQotLQotLSAgLyogIih0cmVlIGZy YWdtZW50KSI6MTAKLS0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6Ci0tICogICAg ICAgICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoPExvZ01lc3NhZ2U+IF9f cHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCi0tICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIGNkZWYgX19weXhfdW5waWNrbGVfTG9nTWVz c2FnZV9fc2V0X3N0YXRlKExvZ01lc3NhZ2UgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0 ZSk6Ci0tICogICAgIF9fcHl4X3Jlc3VsdC5sZXZlbCA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9y ZXN1bHQubG9nX2xldmVsID0gX19weXhfc3RhdGVbMV07IF9fcHl4X3Jlc3VsdC5wcmVmaXggPSBf X3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnRleHQgPSBfX3B5eF9zdGF0ZVszXQotLSAqLwot LSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X19fcHl4 X3Jlc3VsdCk7Ci0tICBfX3B5eF9yID0gX19weXhfdl9fX3B5eF9yZXN1bHQ7Ci0tICBnb3RvIF9f cHl4X0wwOwotLQotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MQotLSAqIGRlZiBfX3B5eF91bnBp Y2tsZV9Mb2dNZXNzYWdlKF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0 YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBjZGVmIG9iamVjdCBf X3B5eF9QaWNrbGVFcnJvcgotLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKLS0gKi8K LS0KLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwotLSAgX19weXhfTDFfZXJyb3I6OwotLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOwot LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUp OwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNr bGVfTG9nTWVzc2FnZSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOwotLSAgX19weXhfciA9IE5VTEw7Ci0tICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9YREVDUkVG KF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X19f cHl4X3Jlc3VsdCk7Ci0tICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLS0gIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICIodHJl ZSBmcmFnbWVudCkiOjExCi0tICogICAgICAgICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19z ZXRfc3RhdGUoPExvZ01lc3NhZ2U+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCi0tICogICAg IHJldHVybiBfX3B5eF9yZXN1bHQKLS0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2Vf X3NldF9zdGF0ZShMb2dNZXNzYWdlIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIF9fcHl4X3Jlc3VsdC5sZXZlbCA9 IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubG9nX2xldmVsID0gX19weXhfc3RhdGVbMV07 IF9fcHl4X3Jlc3VsdC5wcmVmaXggPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnRleHQg PSBfX3B5eF9zdGF0ZVszXQotLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFz YXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgotLSAqLwotLQotLXN0YXRpYyBQeU9iamVj dCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfTG9nTWVzc2Fn ZV9fc2V0X3N0YXRlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01l c3NhZ2UgKl9fcHl4X3ZfX19weXhfcmVzdWx0LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0 ZSkgewotLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwotLSAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotLSAgaW50IF9fcHl4X3Rf MjsKLS0gIFB5X3NzaXplX3QgX19weXhfdF8zOwotLSAgaW50IF9fcHl4X3RfNDsKLS0gIGludCBf X3B5eF90XzU7Ci0tICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpf X3B5eF90XzcgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfOCA9IE5VTEw7Ci0tICBpbnQg X19weXhfbGluZW5vID0gMDsKLS0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsK LS0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUiLCAwKTsKLStzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9lcnJvcihQ eU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Ci0rICByZXR1cm4gX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF81ZXJyb3JfMV9fZ2V0X18obyk7Ci0rfQotIAot LSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKLS0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAot LSAqIGNkZWYgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKExvZ01lc3NhZ2Ug X19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6Ci0tICogICAgIF9fcHl4X3Jlc3VsdC5s ZXZlbCA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubG9nX2xldmVsID0gX19weXhfc3Rh dGVbMV07IF9fcHl4X3Jlc3VsdC5wcmVmaXggPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0 LnRleHQgPSBfX3B5eF9zdGF0ZVszXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19f ZGljdF9fJyk6Ci0tICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4 X3N0YXRlWzRdKQotLSAqLwotLSAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0g UHlfTm9uZSkpIHsKLS0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25l VHlwZScgb2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7Ci0tICAgIF9fUFlYX0VSUigxLCAx MiwgX19weXhfTDFfZXJyb3IpCi0rc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl81RXZlbnRfZXJyb3IoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2LCBDWVRIT05f VU5VU0VEIHZvaWQgKngpIHsKLSsgIGlmICh2KSB7Ci0rICAgIHJldHVybiBfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzVlcnJvcl8zX19zZXRfXyhvLCB2KTsKLSAgIH0KLS0g IF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwg MCwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5 eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPmxldmVsKTsKLS0gIF9fUHl4X0RFQ1JFRihf X3B5eF92X19fcHl4X3Jlc3VsdC0+bGV2ZWwpOwotLSAgX19weXhfdl9fX3B5eF9yZXN1bHQtPmxl dmVsID0gX19weXhfdF8xOwotLSAgX19weXhfdF8xID0gMDsKLS0gIGlmICh1bmxpa2VseShfX3B5 eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7Ci0tICAgIFB5RXJyX1NldFN0cmluZyhQeUV4 Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOwot LSAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgZWxzZSB7Ci0rICAgIFB5 RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLCAiX19kZWxfXyIpOwotKyAg ICByZXR1cm4gLTE7Ci0gICB9Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxl KF9fcHl4X3ZfX19weXhfc3RhdGUsIDEsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywg MCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5 eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19QeXhfR0lWRVJF RihfX3B5eF90XzEpOwotLSAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5sb2df bGV2ZWwpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5sb2dfbGV2ZWwp OwotLSAgX19weXhfdl9fX3B5eF9yZXN1bHQtPmxvZ19sZXZlbCA9IF9fcHl4X3RfMTsKLS0gIF9f cHl4X3RfMSA9IDA7Ci0tICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9O b25lKSkgewotLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBl JyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsKLS0gICAgX19QWVhfRVJSKDEsIDEyLCBf X3B5eF9MMV9lcnJvcikKLSt9Ci0rCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfZGF0YShQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNF RCB2b2lkICp4KSB7Ci0rICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF80ZGF0YV8xX19nZXRfXyhvKTsKLSt9Ci0rCi0rc3RhdGljIGludCBfX3B5eF9zZXRwcm9w Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfZGF0YShQeU9iamVjdCAqbywgUHlPYmplY3Qg KnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgewotKyAgaWYgKHYpIHsKLSsgICAgcmV0dXJuIF9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfM19fc2V0X18obywgdik7 Ci0gICB9Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19w eXhfc3RhdGUsIDIsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikK LS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEp OwotLSAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5wcmVmaXgpOwotLSAgX19Q eXhfREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5wcmVmaXgpOwotLSAgX19weXhfdl9fX3B5 eF9yZXN1bHQtPnByZWZpeCA9IF9fcHl4X3RfMTsKLS0gIF9fcHl4X3RfMSA9IDA7Ci0tICBpZiAo dW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgewotLSAgICBQeUVycl9T ZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNj cmlwdGFibGUiKTsKLS0gICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKLSsgIGVs c2UgewotKyAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80 ZGF0YV81X19kZWxfXyhvKTsKLSAgIH0KLS0gIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRf VHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMywgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9s b25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIs IF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9H SVZFUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQt PnRleHQpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT50ZXh0KTsKLS0g IF9fcHl4X3ZfX19weXhfcmVzdWx0LT50ZXh0ID0gX19weXhfdF8xOwotLSAgX19weXhfdF8xID0g MDsKLSt9Ci0gCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMwotLSAqIGNkZWYgX19weXhfdW5w aWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKExvZ01lc3NhZ2UgX19weXhfcmVzdWx0LCB0dXBs ZSBfX3B5eF9zdGF0ZSk6Ci0tICogICAgIF9fcHl4X3Jlc3VsdC5sZXZlbCA9IF9fcHl4X3N0YXRl WzBdOyBfX3B5eF9yZXN1bHQubG9nX2xldmVsID0gX19weXhfc3RhdGVbMV07IF9fcHl4X3Jlc3Vs dC5wcmVmaXggPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnRleHQgPSBfX3B5eF9zdGF0 ZVszXQotLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0cihfX3B5eF9y ZXN1bHQsICdfX2RpY3RfXycpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAg ICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzRdKQotLSAqLwot LSAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKLS0gICAg UHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm9iamVjdCBvZiB0eXBlICdOb25lVHlw ZScgaGFzIG5vIGxlbigpIik7Ci0tICAgIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3Ip Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 RXZlbnRfcmVwbHlfdXNlcmRhdGEoUHlPYmplY3QgKm8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkg ewotKyAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBs eV91c2VyZGF0YV8xX19nZXRfXyhvKTsKLSt9Ci0rCi0rc3RhdGljIGludCBfX3B5eF9zZXRwcm9w Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfcmVwbHlfdXNlcmRhdGEoUHlPYmplY3QgKm8s IFB5T2JqZWN0ICp2LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKLSsgIGlmICh2KSB7Ci0rICAg IHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVwbHlfdXNl cmRhdGFfM19fc2V0X18obywgdik7Ci0gICB9Ci0tICBfX3B5eF90XzMgPSBQeVR1cGxlX0dFVF9T SVpFKF9fcHl4X3ZfX19weXhfc3RhdGUpOyBpZiAodW5saWtlbHkoX19weXhfdF8zID09ICgoUHlf c3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19weXhf dF80ID0gKChfX3B5eF90XzMgPiA0KSAhPSAwKTsKLS0gIGlmIChfX3B5eF90XzQpIHsKLS0gIH0g ZWxzZSB7Ci0tICAgIF9fcHl4X3RfMiA9IF9fcHl4X3RfNDsKLS0gICAgZ290byBfX3B5eF9MNF9i b29sX2Jpbm9wX2RvbmU7Ci0rICBlbHNlIHsKLSsgICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV81X19kZWxfXyhvKTsKLSAgIH0K LS0gIF9fcHl4X3RfNCA9IF9fUHl4X0hhc0F0dHIoKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhf cmVzdWx0KSwgX19weXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoX19weXhfdF80ID09ICgoaW50 KS0xKSkpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF90XzUgPSAo X19weXhfdF80ICE9IDApOwotLSAgX19weXhfdF8yID0gX19weXhfdF81OwotLSAgX19weXhfTDRf Ym9vbF9iaW5vcF9kb25lOjsKLS0gIGlmIChfX3B5eF90XzIpIHsKLSt9Ci0gCi0tICAgIC8qICIo dHJlZSBmcmFnbWVudCkiOjE0Ci0tICogICAgIF9fcHl4X3Jlc3VsdC5sZXZlbCA9IF9fcHl4X3N0 YXRlWzBdOyBfX3B5eF9yZXN1bHQubG9nX2xldmVsID0gX19weXhfc3RhdGVbMV07IF9fcHl4X3Jl c3VsdC5wcmVmaXggPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnRleHQgPSBfX3B5eF9z dGF0ZVszXQotLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0cihfX3B5 eF9yZXN1bHQsICdfX2RpY3RfXycpOgotLSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9f LnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq LwotLSAgICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3Qg KilfX3B5eF92X19fcHl4X3Jlc3VsdCksIF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF82KTsKLS0gICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihfX3B5eF90XzYsIF9fcHl4X25fc191cGRhdGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NykpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsK LS0gICAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKLS0g ICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3Qg aXMgbm90IHN1YnNjcmlwdGFibGUiKTsKLS0gICAgICBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wx X2Vycm9yKQotLSAgICB9Ci0tICAgIF9fcHl4X3RfNiA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUo X19weXhfdl9fX3B5eF9zdGF0ZSwgNCwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAw LCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4 X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gICAgX19weXhfdF84 ID0gTlVMTDsKLS0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRo b2RfQ2hlY2soX19weXhfdF83KSkpIHsKLS0gICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRf U0VMRihfX3B5eF90XzcpOwotLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF84KSkgewotLSAgICAg ICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNyk7 Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF84KTsKLS0gICAgICAgIF9fUHl4X0lOQ1JF RihmdW5jdGlvbik7Ci0tICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNywgZnVuY3Rp b24pOwotLSAgICAgIH0KLS0gICAgfQotLSAgICBfX3B5eF90XzEgPSAoX19weXhfdF84KSA/IF9f UHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdF82KSA6 IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF83LCBfX3B5eF90XzYpOwotLSAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7Ci0tICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsK LS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rc3RhdGljIFB5 TWV0aG9kRGVmIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50W10gPSB7 Ci0rICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl81RXZlbnRfMV9fcmVkdWNlX2N5dGhvbl9fLCBNRVRIX05PQVJHUywgMH0s Ci0rICB7Il9fc2V0c3RhdGVfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF8zX19zZXRzdGF0ZV9jeXRob25fXywgTUVUSF9PLCAwfSwK LSsgIHswLCAwLCAwLCAwfQotK307Ci0gCi0tICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjEzCi0t ICogY2RlZiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoTG9nTWVzc2FnZSBf X3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKLS0gKiAgICAgX19weXhfcmVzdWx0Lmxl dmVsID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5sb2dfbGV2ZWwgPSBfX3B5eF9zdGF0 ZVsxXTsgX19weXhfcmVzdWx0LnByZWZpeCA9IF9fcHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQu dGV4dCA9IF9fcHl4X3N0YXRlWzNdCi0tICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiA0IGFu ZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhf c3RhdGVbNF0pCi0tICovCi0tICB9Ci0rc3RhdGljIHN0cnVjdCBQeUdldFNldERlZiBfX3B5eF9n ZXRzZXRzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudFtdID0gewotKyAgeyhjaGFyICopImVy cm9yX3N0ciIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9lcnJv cl9zdHIsIDAsIChjaGFyICopIm1wdl9lcnJvcl9zdHJpbmcgb2YgdGhlIGVycm9yIHByb2VwcnR5 IiwgMH0sCi0rICB7KGNoYXIgKikibmFtZSIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGli c18zbXB2XzVFdmVudF9uYW1lLCAwLCAoY2hhciAqKSJtcHZfZXZlbnRfbmFtZSBvZiB0aGUgZXZl bnQgaWQiLCAwfSwKLSsgIHsoY2hhciAqKSJpZCIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80 bGlic18zbXB2XzVFdmVudF9pZCwgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZf NUV2ZW50X2lkLCAoY2hhciAqKTAsIDB9LAotKyAgeyhjaGFyICopImVycm9yIiwgX19weXhfZ2V0 cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2Vycm9yLCBfX3B5eF9zZXRwcm9wXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfZXJyb3IsIChjaGFyICopMCwgMH0sCi0rICB7KGNo YXIgKikiZGF0YSIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9k YXRhLCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfZGF0YSwgKGNo YXIgKikwLCAwfSwKLSsgIHsoY2hhciAqKSJyZXBseV91c2VyZGF0YSIsIF9fcHl4X2dldHByb3Bf OXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9yZXBseV91c2VyZGF0YSwgX19weXhfc2V0cHJv cF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X3JlcGx5X3VzZXJkYXRhLCAoY2hhciAqKTAs IDB9LAotKyAgezAsIDAsIDAsIDAsIDB9Ci0rfTsKLSAKLS0gIC8qICIodHJlZSBmcmFnbWVudCki OjExCi0tICogICAgICAgICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoPExv Z01lc3NhZ2U+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCi0tICogICAgIHJldHVybiBfX3B5 eF9yZXN1bHQKLS0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZShM b2dNZXNzYWdlIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIF9fcHl4X3Jlc3VsdC5sZXZlbCA9IF9fcHl4X3N0YXRl WzBdOyBfX3B5eF9yZXN1bHQubG9nX2xldmVsID0gX19weXhfc3RhdGVbMV07IF9fcHl4X3Jlc3Vs dC5wcmVmaXggPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnRleHQgPSBfX3B5eF9zdGF0 ZVszXQotLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0cihfX3B5eF9y ZXN1bHQsICdfX2RpY3RfXycpOgotLSAqLwotK3N0YXRpYyBQeVR5cGVPYmplY3QgX19weXhfdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgPSB7Ci0rICBQeVZhck9iamVjdF9IRUFEX0lO SVQoMCwgMCkKLSsgICJ2aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQiLCAvKnRwX25hbWUqLwotKyAg c2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KSwgLyp0 cF9iYXNpY3NpemUqLwotKyAgMCwgLyp0cF9pdGVtc2l6ZSovCi0rICBfX3B5eF90cF9kZWFsbG9j Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCwgLyp0cF9kZWFsbG9jKi8KLSsgICNpZiBQWV9W RVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKLSsgIDAsIC8qdHBfcHJpbnQqLwotKyAgI2VuZGlmCi0r ICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAotKyAgMCwgLyp0cF92ZWN0b3JjYWxs X29mZnNldCovCi0rICAjZW5kaWYKLSsgIDAsIC8qdHBfZ2V0YXR0ciovCi0rICAwLCAvKnRwX3Nl dGF0dHIqLwotKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0rICAwLCAvKnRwX2NvbXBhcmUq LwotKyAgI2VuZGlmCi0rICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0rICAwLCAvKnRwX2Fz X2FzeW5jKi8KLSsgICNlbmRpZgotKyAgMCwgLyp0cF9yZXByKi8KLSsgIDAsIC8qdHBfYXNfbnVt YmVyKi8KLSsgIDAsIC8qdHBfYXNfc2VxdWVuY2UqLwotKyAgMCwgLyp0cF9hc19tYXBwaW5nKi8K LSsgIDAsIC8qdHBfaGFzaCovCi0rICAwLCAvKnRwX2NhbGwqLwotKyAgMCwgLyp0cF9zdHIqLwot KyAgMCwgLyp0cF9nZXRhdHRybyovCi0rICAwLCAvKnRwX3NldGF0dHJvKi8KLSsgIDAsIC8qdHBf YXNfYnVmZmVyKi8KLSsgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0hBVkVfVkVSU0lP Tl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVJ8UHlf VFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLwotKyAgIldy YXBzOiBtcHZfZXZlbnQiLCAvKnRwX2RvYyovCi0rICBfX3B5eF90cF90cmF2ZXJzZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRXZlbnQsIC8qdHBfdHJhdmVyc2UqLwotKyAgX19weXhfdHBfY2xlYXJf OXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50LCAvKnRwX2NsZWFyKi8KLSsgIDAsIC8qdHBfcmlj aGNvbXBhcmUqLwotKyAgMCwgLyp0cF93ZWFrbGlzdG9mZnNldCovCi0rICAwLCAvKnRwX2l0ZXIq LwotKyAgMCwgLyp0cF9pdGVybmV4dCovCi0rICBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FdmVudCwgLyp0cF9tZXRob2RzKi8KLSsgIDAsIC8qdHBfbWVtYmVycyovCi0rICBf X3B5eF9nZXRzZXRzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCwgLyp0cF9nZXRzZXQqLwot KyAgMCwgLyp0cF9iYXNlKi8KLSsgIDAsIC8qdHBfZGljdCovCi0rICAwLCAvKnRwX2Rlc2NyX2dl dCovCi0rICAwLCAvKnRwX2Rlc2NyX3NldCovCi0rICAwLCAvKnRwX2RpY3RvZmZzZXQqLwotKyAg MCwgLyp0cF9pbml0Ki8KLSsgIDAsIC8qdHBfYWxsb2MqLwotKyAgX19weXhfdHBfbmV3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9FdmVudCwgLyp0cF9uZXcqLwotKyAgMCwgLyp0cF9mcmVlKi8KLSsg IDAsIC8qdHBfaXNfZ2MqLwotKyAgMCwgLyp0cF9iYXNlcyovCi0rICAwLCAvKnRwX21ybyovCi0r ICAwLCAvKnRwX2NhY2hlKi8KLSsgIDAsIC8qdHBfc3ViY2xhc3NlcyovCi0rICAwLCAvKnRwX3dl YWtsaXN0Ki8KLSsgIDAsIC8qdHBfZGVsKi8KLSsgIDAsIC8qdHBfdmVyc2lvbl90YWcqLwotKyAg I2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEKLSsgIDAsIC8qdHBfZmluYWxpemUqLwot KyAgI2VuZGlmCi0rICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMSAmJiAoIUNZVEhP Tl9DT01QSUxJTkdfSU5fUFlQWSB8fCBQWVBZX1ZFUlNJT05fTlVNID49IDB4MDcwMzA4MDApCi0r ICAwLCAvKnRwX3ZlY3RvcmNhbGwqLwotKyAgI2VuZGlmCi0rICAjaWYgUFlfVkVSU0lPTl9IRVgg Pj0gMHgwMzA4MDBiNCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwOTAwMDAKLSsgIDAsIC8qdHBf cHJpbnQqLwotKyAgI2VuZGlmCi0rICAjaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZICYmIFBZ X1ZFUlNJT05fSEVYID49IDB4MDMwOTAwMDAKLSsgIDAsIC8qdHBfcHlweV9mbGFncyovCi0rICAj ZW5kaWYKLSt9OwotK3N0YXRpYyBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQ7Ci0gCi0tICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fcHl4X3IgPSBQeV9Ob25l OyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Ci0tICBnb3RvIF9fcHl4X0wwOwotLSAgX19weXhfTDFf ZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwotLSAgX19QeXhfWERFQ1JFRihf X3B5eF90XzYpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOwotLSAgX19QeXhfWERFQ1JF RihfX3B5eF90XzgpOwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYu X19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlIiwgX19weXhfY2xpbmVubywgX19w eXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICBfX3B5eF9yID0gMDsKLS0gIF9fcHl4X0ww OjsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Rw X25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dChQeVR5cGVPYmplY3QgKnQsIENZVEhP Tl9VTlVTRUQgUHlPYmplY3QgKmEsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKLSsgIHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKnA7Ci0rICBQeU9i amVjdCAqbzsKLSsgIGlmIChsaWtlbHkoKHQtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19JU19BQlNU UkFDVCkgPT0gMCkpIHsKLSsgICAgbyA9ICgqdC0+dHBfYWxsb2MpKHQsIDApOwotKyAgfSBlbHNl IHsKLSsgICAgbyA9IChQeU9iamVjdCAqKSBQeUJhc2VPYmplY3RfVHlwZS50cF9uZXcodCwgX19w eXhfZW1wdHlfdHVwbGUsIDApOwotKyAgfQotKyAgaWYgKHVubGlrZWx5KCFvKSkgcmV0dXJuIDA7 Ci0rICBwID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICopbyk7Ci0rICBwLT5fX3B5eF92dGFiID0gX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dDsKLSsgIHAtPmNhbGxiYWNrID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05v bmUpOwotKyAgcC0+Y2FsbGJhY2t0aHJlYWQgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7 Ci0rICBwLT5yZXBseV91c2VyZGF0YSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLSsg IGlmICh1bmxpa2VseShfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzNf X2Npbml0X18obywgX19weXhfZW1wdHlfdHVwbGUsIE5VTEwpIDwgMCkpIGdvdG8gYmFkOwotKyAg cmV0dXJuIG87Ci0rICBiYWQ6Ci0rICBQeV9ERUNSRUYobyk7IG8gPSAwOwotKyAgcmV0dXJuIE5V TEw7Ci0gfQotIAotLS8qICIodHJlZSBmcmFnbWVudCkiOjEKLS0gKiBkZWYgX19weXhfdW5waWNr bGVfUHJvcGVydHkoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGNkZWYgb2JqZWN0IF9fcHl4 X1BpY2tsZUVycm9yCi0tICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotLSAqLwotLQot LS8qIFB5dGhvbiB3cmFwcGVyICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eShQeU9iamVjdCAqX19weXhf c2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90 byovCi0tc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzX19weXhfdW5waWNrbGVfUHJvcGVydHkgPSB7Il9fcHl4X3VucGlja2xlX1Byb3BlcnR5Iiwg KFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzX19weXhfdW5waWNrbGVfUHJvcGVydHksIE1FVEhfVkFSQVJH U3xNRVRIX0tFWVdPUkRTLCAwfTsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM19fcHl4X3VucGlja2xlX1Byb3BlcnR5KFB5T2JqZWN0ICpfX3B5eF9z ZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKLS0gIFB5 T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5cGUgPSAwOwotLSAgbG9uZyBfX3B5eF92X19fcHl4X2No ZWNrc3VtOwotLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUgPSAwOwotLSAgaW50IF9f cHl4X2xpbmVubyA9IDA7Ci0tICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0t ICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IDA7Ci0tICBf X1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo Il9fcHl4X3VucGlja2xlX1Byb3BlcnR5ICh3cmFwcGVyKSIsIDApOwotK3N0YXRpYyB2b2lkIF9f cHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQoUHlPYmplY3QgKm8p IHsKLSsgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKnAg PSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKW87Ci0r ICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5BTElaRQotKyAgaWYgKHVubGlrZWx5KFB5VHlwZV9IYXNG ZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkgJiYgUHlfVFlQRShv KS0+dHBfZmluYWxpemUpICYmICFfUHlHQ19GSU5BTElaRUQobykpIHsKLSsgICAgaWYgKFB5T2Jq ZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhvKSkgcmV0dXJuOwotKyAgfQotKyAgI2VuZGlm Ci0rICBQeU9iamVjdF9HQ19VblRyYWNrKG8pOwotICAgewotLSAgICBzdGF0aWMgUHlPYmplY3Qg KipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19weXhfdHlwZSwmX19weXhfbl9zX3B5 eF9jaGVja3N1bSwmX19weXhfbl9zX3B5eF9zdGF0ZSwwfTsKLS0gICAgUHlPYmplY3QqIHZhbHVl c1szXSA9IHswLDAsMH07Ci0tICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgewotLSAgICAg IFB5X3NzaXplX3Qga3dfYXJnczsKLS0gICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdzID0g UHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKLS0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7 Ci0tICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2Fy Z3MsIDIpOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgMjog dmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKLS0gICAgICAgIENZ VEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVf R0VUX0lURU0oX19weXhfYXJncywgMCk7Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0t ICAgICAgICBjYXNlICAwOiBicmVhazsKLS0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVf YXJndHVwbGVfZXJyb3I7Ci0tICAgICAgfQotLSAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShf X3B5eF9rd2RzKTsKLS0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Ci0tICAgICAgICBjYXNlICAw OgotLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1T dHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF90eXBlKSkgIT0gMCkpIGt3X2FyZ3MtLTsKLS0g ICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLS0gICAgICAgIENZVEhP Tl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDE6Ci0tICAgICAgICBpZiAobGlrZWx5KCh2 YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nf cHl4X2NoZWNrc3VtKSkgIT0gMCkpIGt3X2FyZ3MtLTsKLS0gICAgICAgIGVsc2UgewotLSAgICAg ICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfUHJvcGVydHki LCAxLCAzLCAzLCAxKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQotLSAgICAgICAg fQotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgMjoKLS0gICAg ICAgIGlmIChsaWtlbHkoKHZhbHVlc1syXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4 X2t3ZHMsIF9fcHl4X25fc19weXhfc3RhdGUpKSAhPSAwKSkga3dfYXJncy0tOwotLSAgICAgICAg ZWxzZSB7Ci0tICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBp Y2tsZV9Qcm9wZXJ0eSIsIDEsIDMsIDMsIDIpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJy b3IpCi0tICAgICAgICB9Ci0tICAgICAgfQotLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4g MCkpIHsKLS0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMo X19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9fcHl4 X3VucGlja2xlX1Byb3BlcnR5IikgPCAwKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9y KQotLSAgICAgIH0KLS0gICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3Mp ICE9IDMpIHsKLS0gICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotLSAgICB9IGVs c2UgewotLSAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7 Ci0tICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKLS0g ICAgICB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOwotLSAgICB9 Ci0tICAgIF9fcHl4X3ZfX19weXhfdHlwZSA9IHZhbHVlc1swXTsKLS0gICAgX19weXhfdl9fX3B5 eF9jaGVja3N1bSA9IF9fUHl4X1B5SW50X0FzX2xvbmcodmFsdWVzWzFdKTsgaWYgKHVubGlrZWx5 KChfX3B5eF92X19fcHl4X2NoZWNrc3VtID09IChsb25nKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgp KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQotLSAgICBfX3B5eF92X19fcHl4X3N0 YXRlID0gdmFsdWVzWzJdOwotKyAgICBQeU9iamVjdCAqZXR5cGUsICpldmFsLCAqZXRiOwotKyAg ICBQeUVycl9GZXRjaCgmZXR5cGUsICZldmFsLCAmZXRiKTsKLSsgICAgX19QeXhfU0VUX1JFRkNO VChvLCBQeV9SRUZDTlQobykgKyAxKTsKLSsgICAgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzQxX19kZWFsbG9jX18obyk7Ci0rICAgIF9fUHl4X1NFVF9SRUZDTlQobywg UHlfUkVGQ05UKG8pIC0gMSk7Ci0rICAgIFB5RXJyX1Jlc3RvcmUoZXR5cGUsIGV2YWwsIGV0Yik7 Ci0gICB9Ci0tICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOwotLSAgX19w eXhfTDVfYXJndHVwbGVfZXJyb3I6OwotLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9f cHl4X3VucGlja2xlX1Byb3BlcnR5IiwgMSwgMywgMywgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKSk7IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKLS0gIF9fcHl4X0wzX2Vycm9y OjsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlj a2xlX1Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFt ZSk7Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiBOVUxMOwot LSAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OwotLSAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMl9fcHl4X3VucGlja2xlX1Byb3BlcnR5KF9fcHl4 X3NlbGYsIF9fcHl4X3ZfX19weXhfdHlwZSwgX19weXhfdl9fX3B5eF9jaGVja3N1bSwgX19weXhf dl9fX3B5eF9zdGF0ZSk7Ci0rICBQeV9DTEVBUihwLT5jYWxsYmFjayk7Ci0rICBQeV9DTEVBUihw LT5jYWxsYmFja3RocmVhZCk7Ci0rICBQeV9DTEVBUihwLT5yZXBseV91c2VyZGF0YSk7Ci0rICAo KlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOwotK30KLSAKLS0gIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhf cjsKLStzdGF0aWMgaW50IF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0KFB5T2JqZWN0ICpvLCB2aXNpdHByb2Mgdiwgdm9pZCAqYSkgewotKyAgaW50IGU7Ci0r ICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpwID0gKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilvOwotKyAgaWYg KHAtPmNhbGxiYWNrKSB7Ci0rICAgIGUgPSAoKnYpKHAtPmNhbGxiYWNrLCBhKTsgaWYgKGUpIHJl dHVybiBlOwotKyAgfQotKyAgaWYgKHAtPmNhbGxiYWNrdGhyZWFkKSB7Ci0rICAgIGUgPSAoKnYp KHAtPmNhbGxiYWNrdGhyZWFkLCBhKTsgaWYgKGUpIHJldHVybiBlOwotKyAgfQotKyAgaWYgKHAt PnJlcGx5X3VzZXJkYXRhKSB7Ci0rICAgIGUgPSAoKnYpKHAtPnJlcGx5X3VzZXJkYXRhLCBhKTsg aWYgKGUpIHJldHVybiBlOwotKyAgfQotKyAgcmV0dXJuIDA7Ci0gfQotIAotLXN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEyX19weXhfdW5waWNrbGVfUHJv cGVydHkoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF9zdGF0ZSkgewotLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfUGlja2xlRXJy b3IgPSAwOwotLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfcmVzdWx0ID0gMDsKLS0gIFB5T2Jq ZWN0ICpfX3B5eF9yID0gTlVMTDsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBp bnQgX19weXhfdF8xOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0tICBQeU9iamVj dCAqX19weXhfdF8zID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOwotLSAg UHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7Ci0tICBpbnQgX19weXhfdF82OwotLSAgaW50IF9f cHl4X2xpbmVubyA9IDA7Ci0tICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0t ICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19weXhfdW5waWNrbGVfUHJvcGVydHkiLCAwKTsKLS0KLS0gIC8qICIodHJlZSBmcmFnbWVudCki OjQKLS0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKLS0gKiAgICAgY2RlZiBv YmplY3QgX19weXhfcmVzdWx0Ci0tICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4MDU3MmQx MTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgZnJvbSBwaWNrbGUg aW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCi0tICogICAgICAgICByYWlz ZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHgwNTcy ZDExID0gKGRhdGEsIG5hbWUpKSIgJSBfX3B5eF9jaGVja3N1bSkKLS0gKi8KLS0gIF9fcHl4X3Rf MSA9ICgoX19weXhfdl9fX3B5eF9jaGVja3N1bSAhPSAweDA1NzJkMTEpICE9IDApOwotLSAgaWYg KF9fcHl4X3RfMSkgewotK3N0YXRpYyBpbnQgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQoUHlPYmplY3QgKm8pIHsKLSsgIFB5T2JqZWN0KiB0bXA7Ci0rICBzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpwID0gKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilvOwotKyAgdG1wID0gKChQ eU9iamVjdCopcC0+Y2FsbGJhY2spOwotKyAgcC0+Y2FsbGJhY2sgPSBQeV9Ob25lOyBQeV9JTkNS RUYoUHlfTm9uZSk7Ci0rICBQeV9YREVDUkVGKHRtcCk7Ci0rICB0bXAgPSAoKFB5T2JqZWN0Kilw LT5jYWxsYmFja3RocmVhZCk7Ci0rICBwLT5jYWxsYmFja3RocmVhZCA9IFB5X05vbmU7IFB5X0lO Q1JFRihQeV9Ob25lKTsKLSsgIFB5X1hERUNSRUYodG1wKTsKLSsgIHRtcCA9ICgoUHlPYmplY3Qq KXAtPnJlcGx5X3VzZXJkYXRhKTsKLSsgIHAtPnJlcGx5X3VzZXJkYXRhID0gUHlfTm9uZTsgUHlf SU5DUkVGKFB5X05vbmUpOwotKyAgUHlfWERFQ1JFRih0bXApOwotKyAgcmV0dXJuIDA7Ci0rfQot IAotLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo1Ci0tICogICAgIGNkZWYgb2JqZWN0IF9fcHl4 X3Jlc3VsdAotLSAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweDA1NzJkMTE6Ci0tICogICAg ICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3Ig ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlj a2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4MDU3MmQxMSA9IChkYXRh LCBuYW1lKSkiICUgX19weXhfY2hlY2tzdW0pCi0tICogICAgIF9fcHl4X3Jlc3VsdCA9IFByb3Bl cnR5Ll9fbmV3X18oX19weXhfdHlwZSkKLS0gKi8KLS0gICAgX19weXhfdF8yID0gUHlMaXN0X05l dygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFf ZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgICBfX1B5eF9JTkNSRUYo X19weXhfbl9zX1BpY2tsZUVycm9yKTsKLS0gICAgX19QeXhfR0lWRVJFRihfX3B5eF9uX3NfUGlj a2xlRXJyb3IpOwotLSAgICBQeUxpc3RfU0VUX0lURU0oX19weXhfdF8yLCAwLCBfX3B5eF9uX3Nf UGlja2xlRXJyb3IpOwotLSAgICBfX3B5eF90XzMgPSBfX1B5eF9JbXBvcnQoX19weXhfbl9zX3Bp Y2tsZSwgX19weXhfdF8yLCAtMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDEsIDUsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0g ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICAgIF9fcHl4X3Rf MiA9IF9fUHl4X0ltcG9ydEZyb20oX19weXhfdF8zLCBfX3B5eF9uX3NfUGlja2xlRXJyb3IpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikK LS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzIpOwotLSAgICBfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yID0gX19weXhfdF8yOwotLSAgICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRw cm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9hcGlfdmVyc2lvbihQeU9iamVjdCAq bywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Ci0rICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzExYXBpX3ZlcnNpb25fMV9fZ2V0X18obyk7Ci0rfQotIAot LSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2Ci0tICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9 IDB4MDU3MmQxMToKLS0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBh cyBfX3B5eF9QaWNrbGVFcnJvcgotLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3Io IkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4MDU3MmQxMSA9IChkYXRhLCBuYW1lKSki ICUgX19weXhfY2hlY2tzdW0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAg X19weXhfcmVzdWx0ID0gUHJvcGVydHkuX19uZXdfXyhfX3B5eF90eXBlKQotLSAqICAgICBpZiBf X3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKLS0gKi8KLS0gICAgX19weXhfdF8yID0gX19QeXhfUHlJ bnRfRnJvbV9sb25nKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0pOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7Ci0tICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdChfX3B5 eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDA1LCBfX3B5eF90XzIpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLS0g ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOwotLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9fX3B5eF9QaWNrbGVF cnJvcik7Ci0tICAgIF9fcHl4X3RfMiA9IF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3I7IF9fcHl4 X3RfNSA9IE5VTEw7Ci0tICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLS0gICAgICBfX3B5eF90XzUgPSBQeU1ldGhv ZF9HRVRfU0VMRihfX3B5eF90XzIpOwotLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewot LSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4 X3RfMik7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKLS0gICAgICAgIF9fUHl4 X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwg ZnVuY3Rpb24pOwotLSAgICAgIH0KLS0gICAgfQotLSAgICBfX3B5eF90XzMgPSAoX19weXhfdF81 KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNSwgX19weXhf dF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzQpOwot LSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0tICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIg PSAwOwotLSAgICBfX1B5eF9SYWlzZShfX3B5eF90XzMsIDAsIDAsIDApOwotLSAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gICAgX19QWVhfRVJSKDEsIDYsIF9f cHl4X0wxX2Vycm9yKQotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfbmFtZShQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lk ICp4KSB7Ci0rICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzRuYW1lXzFfX2dldF9fKG8pOwotK30KLSAKLS0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6NAot LSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgotLSAqICAgICBjZGVmIG9iamVj dCBfX3B5eF9yZXN1bHQKLS0gKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHgwNTcyZDExOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBv cnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKLS0gKiAgICAgICAgIHJhaXNlIF9f cHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDA1NzJkMTEg PSAoZGF0YSwgbmFtZSkpIiAlIF9fcHl4X2NoZWNrc3VtKQotLSAqLwotLSAgfQotK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfdGlt ZShQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Ci0rICByZXR1cm4gX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1lXzFfX2dldF9fKG8pOwotK30K LSAKLS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjcKLS0gKiAgICAgICAgIGZyb20gcGlja2xlIGlt cG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgotLSAqICAgICAgICAgcmFpc2Ug X19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4MDU3MmQx MSA9IChkYXRhLCBuYW1lKSkiICUgX19weXhfY2hlY2tzdW0pCi0tICogICAgIF9fcHl4X3Jlc3Vs dCA9IFByb3BlcnR5Ll9fbmV3X18oX19weXhfdHlwZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKLS0gKiAgICAgICAgIF9f cHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoPFByb3BlcnR5PiBfX3B5eF9yZXN1bHQs IF9fcHl4X3N0YXRlKQotLSAqLwotLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cigoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3Bl cnR5KSwgX19weXhfbl9zX25ldyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDEsIDcsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBf X3B5eF90XzQgPSBOVUxMOwotLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLS0gICAgX19weXhfdF80ID0gUHlNZXRob2Rf R0VUX1NFTEYoX19weXhfdF8yKTsKLS0gICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7Ci0tICAg ICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7 Ci0tICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7Ci0tICAgICAgX19QeXhfSU5DUkVGKGZ1 bmN0aW9uKTsKLS0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwot LSAgICB9Ci0tICB9Ci0tICBfX3B5eF90XzMgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdl9fX3B5eF90eXBlKSA6IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X19fcHl4X3R5cGUpOwot LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgNywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5 eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOwotLSAgX19weXhfdl9fX3B5eF9yZXN1bHQgPSBfX3B5eF90XzM7Ci0tICBfX3B5eF90 XzMgPSAwOwotK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0W10gPSB7Ci0rICB7InJlcXVlc3RfZXZlbnQiLCAoUHlDRnVuY3Rpb24p KHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMXJlcXVlc3RfZXZlbnQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRT LCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X3JlcXVlc3RfZXZlbnR9 LAotKyAgeyJzZXRfbG9nX2xldmVsIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8zc2V0X2xvZ19sZXZlbCwgTUVUSF9PLCBfX3B5eF9kb2NfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzJzZXRfbG9nX2xldmVsfSwKLSsgIHsibG9hZF9j b25maWciLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzVsb2FkX2NvbmZpZywgTUVUSF9PLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzRsb2FkX2NvbmZpZ30sCi0rICB7Il9mb3JtYXRfZm9yIiwgKFB5Q0Z1bmN0aW9u KV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF83X2Zvcm1hdF9mb3IsIE1F VEhfTywgMH0sCi0rICB7ImNvbW1hbmQiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlv bldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOWNv bW1hbmQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kfSwKLSsgIHsiZ2V0X3Byb3BlcnR5X2FzeW5jIiwg KFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExZ2V0X3Byb3BlcnR5X2FzeW5jLCBNRVRIX1ZB UkFSR1N8TUVUSF9LRVlXT1JEUywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8xMGdldF9wcm9wZXJ0eV9hc3luY30sCi0rICB7InRyeV9nZXRfcHJvcGVydHlfYXN5bmMi LCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTN0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jLCBN RVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgMH0sCi0rICB7InRyeV9nZXRfcHJvcGVydHkiLCAo UHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTV0cnlfZ2V0X3Byb3BlcnR5LCBNRVRIX1ZBUkFS R1N8TUVUSF9LRVlXT1JEUywgMH0sCi0rICB7ImdldF9wcm9wZXJ0eSIsIChQeUNGdW5jdGlvbilf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTdnZXRfcHJvcGVydHksIE1F VEhfTywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNmdldF9wcm9w ZXJ0eX0sCi0rICB7InNldF9wcm9wZXJ0eSIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0 aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8x OXNldF9wcm9wZXJ0eSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9fcHl4X2RvY185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHl9LAotKyAgeyJzZXRfb3B0 aW9uIiwgKFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIxc2V0X29wdGlvbiwgTUVUSF9WQVJB UkdTfE1FVEhfS0VZV09SRFMsIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMjBzZXRfb3B0aW9ufSwKLSsgIHsiaW5pdGlhbGl6ZSIsIChQeUNGdW5jdGlvbilfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjNpbml0aWFsaXplLCBNRVRIX05PQVJH UywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMmluaXRpYWxpemV9 LAotKyAgeyJ3YWl0X2V2ZW50IiwgKFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRo S2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI1d2FpdF9l dmVudCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9fcHl4X2RvY185dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMjR3YWl0X2V2ZW50fSwKLSsgIHsid2FrZXVwIiwgKFB5Q0Z1bmN0 aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yN3dha2V1cCwgTUVU SF9OT0FSR1MsIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjZ3YWtl dXB9LAotKyAgeyJzZXRfd2FrZXVwX2NhbGxiYWNrIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yOXNldF93YWtldXBfY2FsbGJhY2ssIE1FVEhf TywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yOHNldF93YWtldXBf Y2FsbGJhY2t9LAotKyAgeyJnZXRfd2FrZXVwX3BpcGUiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMxZ2V0X3dha2V1cF9waXBlLCBNRVRIX05P QVJHUywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93YWtl dXBfcGlwZX0sCi0rICB7Im9ic2VydmVfcHJvcGVydHkiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQ eUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMzVvYnNlcnZlX3Byb3BlcnR5LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX19w eXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNG9ic2VydmVfcHJvcGVydHl9 LAotKyAgeyJ1bm9ic2VydmVfcHJvcGVydHkiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM3dW5vYnNlcnZlX3Byb3BlcnR5LCBNRVRIX08sIF9f cHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVy dHl9LAotKyAgeyJzaHV0ZG93biIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMzlzaHV0ZG93biwgTUVUSF9OT0FSR1MsIDB9LAotKyAgeyJfX3Jl ZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfNDNfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9LAotKyAgeyJf X3NldHN0YXRlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF80NV9fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhfTywgMH0sCi0rICB7 MCwgMCwgMCwgMH0KLSt9OwotIAotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6OAotLSAqICAgICAg ICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZz IDB4MDU3MmQxMSA9IChkYXRhLCBuYW1lKSkiICUgX19weXhfY2hlY2tzdW0pCi0tICogICAgIF9f cHl4X3Jlc3VsdCA9IFByb3BlcnR5Ll9fbmV3X18oX19weXhfdHlwZSkKLS0gKiAgICAgaWYgX19w eXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoPFByb3BlcnR5PiBfX3B5 eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQotLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0tICov Ci0tICBfX3B5eF90XzEgPSAoX19weXhfdl9fX3B5eF9zdGF0ZSAhPSBQeV9Ob25lKTsKLS0gIF9f cHl4X3RfNiA9IChfX3B5eF90XzEgIT0gMCk7Ci0tICBpZiAoX19weXhfdF82KSB7Ci0rc3RhdGlj IHN0cnVjdCBQeUdldFNldERlZiBfX3B5eF9nZXRzZXRzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0W10gPSB7Ci0rICB7KGNoYXIgKikiYXBpX3ZlcnNpb24iLCBfX3B5eF9nZXRwcm9wXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9hcGlfdmVyc2lvbiwgMCwgKGNoYXIgKikwLCAw fSwKLSsgIHsoY2hhciAqKSJuYW1lIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfbmFtZSwgMCwgKGNoYXIgKikiVW5pcXVlIG5hbWUgZm9yIGV2ZXJ5IGNvbnRl eHQgY3JlYXRlZC5cblxuICAgICAgICBXcmFwczogbXB2X2NsaWVudF9uYW1lXG4gICAgICAgICIs IDB9LAotKyAgeyhjaGFyICopInRpbWUiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF90aW1lLCAwLCAoY2hhciAqKSJJbnRlcm5hbCBtcHYgY2xpZW50IHRpbWUu XG5cbiAgICAgICAgSGFzIGFuIGFyYml0cmFyeSBzdGFydCBvZmZzZXQsIGJ1dCB3aWxsIG5ldmVy IHdyYXAgb3IgZ28gYmFja3dhcmRzLlxuXG4gICAgICAgIFdyYXBzOiBtcHZfZ2V0X3RpbWVfdXNc biAgICAgICAgIiwgMH0sCi0rICB7MCwgMCwgMCwgMCwgMH0KLSt9OwotIAotLSAgICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjo5Ci0tICogICAgIF9fcHl4X3Jlc3VsdCA9IFByb3BlcnR5Ll9fbmV3X18o X19weXhfdHlwZSkKLS0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6Ci0tICogICAg ICAgICBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKDxQcm9wZXJ0eT4gX19weXhf cmVzdWx0LCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICByZXR1cm4gX19weXhfcmVzdWx0Ci0tICogY2RlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9f c2V0X3N0YXRlKFByb3BlcnR5IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgotLSAq LwotLSAgICBpZiAoIShsaWtlbHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3Rh dGUpKXx8KChfX3B5eF92X19fcHl4X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQ eUV4Y19UeXBlRXJyb3IsICJFeHBlY3RlZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5 X1RZUEUoX19weXhfdl9fX3B5eF9zdGF0ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCA5 LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19weXhfdF8zID0gX19weXhfZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZSgoKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdl9fX3B5eF9yZXN1 bHQpLCAoKFB5T2JqZWN0KilfX3B5eF92X19fcHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8zKSkgX19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8zKTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7Ci0rc3RhdGljIFB5VHlwZU9iamVjdCBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ID0gewotKyAgUHlWYXJPYmplY3RfSEVBRF9JTklUKDAsIDApCi0rICAidmlkY3V0 dGVyLmxpYnMubXB2LkNvbnRleHQiLCAvKnRwX25hbWUqLwotKyAgc2l6ZW9mKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpLCAvKnRwX2Jhc2ljc2l6ZSovCi0r ICAwLCAvKnRwX2l0ZW1zaXplKi8KLSsgIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQsIC8qdHBfZGVhbGxvYyovCi0rICAjaWYgUFlfVkVSU0lPTl9IRVggPCAw eDAzMDgwMGI0Ci0rICAwLCAvKnRwX3ByaW50Ki8KLSsgICNlbmRpZgotKyAgI2lmIFBZX1ZFUlNJ T05fSEVYID49IDB4MDMwODAwYjQKLSsgIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQqLwotKyAg I2VuZGlmCi0rICAwLCAvKnRwX2dldGF0dHIqLwotKyAgMCwgLyp0cF9zZXRhdHRyKi8KLSsgICNp ZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotKyAgMCwgLyp0cF9jb21wYXJlKi8KLSsgICNlbmRpZgot KyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotKyAgMCwgLyp0cF9hc19hc3luYyovCi0rICAj ZW5kaWYKLSsgIDAsIC8qdHBfcmVwciovCi0rICAwLCAvKnRwX2FzX251bWJlciovCi0rICAwLCAv KnRwX2FzX3NlcXVlbmNlKi8KLSsgIDAsIC8qdHBfYXNfbWFwcGluZyovCi0rICAwLCAvKnRwX2hh c2gqLwotKyAgMCwgLyp0cF9jYWxsKi8KLSsgIDAsIC8qdHBfc3RyKi8KLSsgIDAsIC8qdHBfZ2V0 YXR0cm8qLwotKyAgMCwgLyp0cF9zZXRhdHRybyovCi0rICAwLCAvKnRwX2FzX2J1ZmZlciovCi0r ICBQeV9UUEZMQUdTX0RFRkFVTFR8UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5X1RQRkxB R1NfQ0hFQ0tUWVBFU3xQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1NfQkFTRVRZ UEV8UHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KLSsgICJCYXNlIGNsYXNzIHdyYXBw aW5nIGEgY29udGV4dCB0byBpbnRlcmFjdCB3aXRoIG1wdi5cblxuICAgIEFzc3VtZSBhbGwgY2Fs bHMgY2FuIHJhaXNlIE1QVkVycm9yLlxuXG4gICAgV3JhcHM6IG1wdl9jcmVhdGUsIG1wdl9kZXN0 cm95IGFuZCBhbGwgbXB2X2hhbmRsZSByZWxhdGVkIGNhbGxzXG4gICAgIiwgLyp0cF9kb2MqLwot KyAgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIC8qdHBf dHJhdmVyc2UqLwotKyAgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQsIC8qdHBfY2xlYXIqLwotKyAgMCwgLyp0cF9yaWNoY29tcGFyZSovCi0rICAwLCAvKnRwX3dl YWtsaXN0b2Zmc2V0Ki8KLSsgIDAsIC8qdHBfaXRlciovCi0rICAwLCAvKnRwX2l0ZXJuZXh0Ki8K LSsgIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIC8qdHBfbWV0 aG9kcyovCi0rICAwLCAvKnRwX21lbWJlcnMqLwotKyAgX19weXhfZ2V0c2V0c185dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCwgLyp0cF9nZXRzZXQqLwotKyAgMCwgLyp0cF9iYXNlKi8KLSsg IDAsIC8qdHBfZGljdCovCi0rICAwLCAvKnRwX2Rlc2NyX2dldCovCi0rICAwLCAvKnRwX2Rlc2Ny X3NldCovCi0rICAwLCAvKnRwX2RpY3RvZmZzZXQqLwotKyAgMCwgLyp0cF9pbml0Ki8KLSsgIDAs IC8qdHBfYWxsb2MqLwotKyAgX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0LCAvKnRwX25ldyovCi0rICAwLCAvKnRwX2ZyZWUqLwotKyAgMCwgLyp0cF9pc19nYyovCi0r ICAwLCAvKnRwX2Jhc2VzKi8KLSsgIDAsIC8qdHBfbXJvKi8KLSsgIDAsIC8qdHBfY2FjaGUqLwot KyAgMCwgLyp0cF9zdWJjbGFzc2VzKi8KLSsgIDAsIC8qdHBfd2Vha2xpc3QqLwotKyAgMCwgLyp0 cF9kZWwqLwotKyAgMCwgLyp0cF92ZXJzaW9uX3RhZyovCi0rICAjaWYgUFlfVkVSU0lPTl9IRVgg Pj0gMHgwMzA0MDBhMQotKyAgMCwgLyp0cF9maW5hbGl6ZSovCi0rICAjZW5kaWYKLSsgICNpZiBQ WV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGIxICYmICghQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZ IHx8IFBZUFlfVkVSU0lPTl9OVU0gPj0gMHgwNzAzMDgwMCkKLSsgIDAsIC8qdHBfdmVjdG9yY2Fs bCovCi0rICAjZW5kaWYKLSsgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZ X1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAotKyAgMCwgLyp0cF9wcmludCovCi0rICAjZW5kaWYK LSsgICNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgJiYgUFlfVkVSU0lPTl9IRVggPj0gMHgw MzA5MDAwMAotKyAgMCwgLyp0cF9weXB5X2ZsYWdzKi8KLSsgICNlbmRpZgotK307Ci0rc3RhdGlj IHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtczsKLSAK LS0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6OAotLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlj a2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4MDU3MmQxMSA9IChkYXRh LCBuYW1lKSkiICUgX19weXhfY2hlY2tzdW0pCi0tICogICAgIF9fcHl4X3Jlc3VsdCA9IFByb3Bl cnR5Ll9fbmV3X18oX19weXhfdHlwZSkKLS0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5v bmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIF9fcHl4X3VucGlj a2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoPFByb3BlcnR5PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0 YXRlKQotLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0tICovCi0rc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMoUHlUeXBl T2JqZWN0ICp0LCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICphLCBDWVRIT05fVU5VU0VEIFB5T2Jq ZWN0ICprKSB7Ci0rICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVu ZGVyUGFyYW1zICpwOwotKyAgUHlPYmplY3QgKm87Ci0rICBpZiAobGlrZWx5KCh0LT50cF9mbGFn cyAmIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QpID09IDApKSB7Ci0rICAgIG8gPSAoKnQtPnRwX2Fs bG9jKSh0LCAwKTsKLSsgIH0gZWxzZSB7Ci0rICAgIG8gPSAoUHlPYmplY3QgKikgUHlCYXNlT2Jq ZWN0X1R5cGUudHBfbmV3KHQsIF9fcHl4X2VtcHR5X3R1cGxlLCAwKTsKLSAgIH0KLSsgIGlmICh1 bmxpa2VseSghbykpIHJldHVybiAwOwotKyAgcCA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKW8pOwotKyAgcC0+X19weXhfdnRhYiA9IF9f cHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXM7Ci0rICBwLT5v d25lZCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLSsgIHJldHVybiBvOwotK30KLSAK LS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEwCi0tICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5v dCBOb25lOgotLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZSg8 UHJvcGVydHk+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCi0tICogICAgIHJldHVybiBfX3B5 eF9yZXN1bHQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIGNkZWYgX19weXhfdW5w aWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShQcm9wZXJ0eSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9f cHl4X3N0YXRlKToKLS0gKiAgICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsg X19weXhfcmVzdWx0Lm5hbWUgPSBfX3B5eF9zdGF0ZVsxXQotLSAqLwotLSAgX19QeXhfWERFQ1JF RihfX3B5eF9yKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdCk7Ci0tICBf X3B5eF9yID0gX19weXhfdl9fX3B5eF9yZXN1bHQ7Ci0tICBnb3RvIF9fcHl4X0wwOwotK3N0YXRp YyB2b2lkIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJh bXMoUHlPYmplY3QgKm8pIHsKLSsgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X19SZW5kZXJQYXJhbXMgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX1JlbmRlclBhcmFtcyAqKW87Ci0rICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5BTElaRQot KyAgaWYgKHVubGlrZWx5KFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQRkxBR1Nf SEFWRV9GSU5BTElaRSkgJiYgUHlfVFlQRShvKS0+dHBfZmluYWxpemUpICYmICFfUHlHQ19GSU5B TElaRUQobykpIHsKLSsgICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhv KSkgcmV0dXJuOwotKyAgfQotKyAgI2VuZGlmCi0rICBQeU9iamVjdF9HQ19VblRyYWNrKG8pOwot KyAgewotKyAgICBQeU9iamVjdCAqZXR5cGUsICpldmFsLCAqZXRiOwotKyAgICBQeUVycl9GZXRj aCgmZXR5cGUsICZldmFsLCAmZXRiKTsKLSsgICAgX19QeXhfU0VUX1JFRkNOVChvLCBQeV9SRUZD TlQobykgKyAxKTsKLSsgICAgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRl clBhcmFtc18zX19kZWFsbG9jX18obyk7Ci0rICAgIF9fUHl4X1NFVF9SRUZDTlQobywgUHlfUkVG Q05UKG8pIC0gMSk7Ci0rICAgIFB5RXJyX1Jlc3RvcmUoZXR5cGUsIGV2YWwsIGV0Yik7Ci0rICB9 Ci0rICBQeV9DTEVBUihwLT5vd25lZCk7Ci0rICAoKlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOwot K30KLSAKLS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEKLS0gKiBkZWYgX19weXhfdW5waWNrbGVf UHJvcGVydHkoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1Bp Y2tsZUVycm9yCi0tICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotLSAqLwotK3N0YXRp YyBpbnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJh bXMoUHlPYmplY3QgKm8sIHZpc2l0cHJvYyB2LCB2b2lkICphKSB7Ci0rICBpbnQgZTsKLSsgIHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKnAgPSAo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKW87 Ci0rICBpZiAocC0+b3duZWQpIHsKLSsgICAgZSA9ICgqdikocC0+b3duZWQsIGEpOyBpZiAoZSkg cmV0dXJuIGU7Ci0rICB9Ci0rICByZXR1cm4gMDsKLSt9Ci0gCi0tICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KLS0gIF9fcHl4X0wxX2Vycm9yOjsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8y KTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhf dF80KTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFj aygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX1Byb3BlcnR5IiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICBfX3B5eF9yID0gTlVMTDsK LS0gIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9QaWNrbGVFcnJv cik7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKLS0gIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3IpOwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICBy ZXR1cm4gX19weXhfcjsKLStzdGF0aWMgaW50IF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fUmVuZGVyUGFyYW1zKFB5T2JqZWN0ICpvKSB7Ci0rICBQeU9iamVjdCogdG1wOwot KyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAq cCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z ICopbzsKLSsgIHRtcCA9ICgoUHlPYmplY3QqKXAtPm93bmVkKTsKLSsgIHAtPm93bmVkID0gUHlf Tm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotKyAgUHlfWERFQ1JFRih0bXApOwotKyAgcmV0dXJu IDA7Ci0gfQotIAotLS8qICIodHJlZSBmcmFnbWVudCkiOjExCi0tICogICAgICAgICBfX3B5eF91 bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKDxQcm9wZXJ0eT4gX19weXhfcmVzdWx0LCBfX3B5 eF9zdGF0ZSkKLS0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAotLSAqIGNkZWYgX19weXhfdW5w aWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShQcm9wZXJ0eSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9f cHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBfX3B5eF9y ZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubmFtZSA9IF9fcHl4X3N0 YXRlWzFdCi0tICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4 X3Jlc3VsdCwgJ19fZGljdF9fJyk6Ci0tICovCi0rc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21l dGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXNbXSA9IHsKLSsgIHsiX19y ZWR1Y2VfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzX1JlbmRlclBhcmFtc181X19yZWR1Y2VfY3l0aG9uX18sIE1FVEhfTk9BUkdTLCAwfSwK LSsgIHsiX19zZXRzdGF0ZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzdfX3NldHN0YXRlX2N5dGhvbl9fLCBNRVRI X08sIDB9LAotKyAgezAsIDAsIDAsIDB9Ci0rfTsKLSAKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3Rh dGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4 X3ZfX19weXhfcmVzdWx0LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgewotLSAgUHlP YmplY3QgKl9fcHl4X3IgPSBOVUxMOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0g IFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwotLSAgaW50IF9fcHl4X3RfMjsKLS0gIFB5X3Nz aXplX3QgX19weXhfdF8zOwotLSAgaW50IF9fcHl4X3RfNDsKLS0gIGludCBfX3B5eF90XzU7Ci0t ICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzcgPSBO VUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfOCA9IE5VTEw7Ci0tICBpbnQgX19weXhfbGluZW5v ID0gMDsKLS0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLS0gIGludCBfX3B5 eF9jbGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBp Y2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlIiwgMCk7Ci0rc3RhdGljIFB5VHlwZU9iamVjdCBfX3B5 eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zID0gewotKyAgUHlWYXJP YmplY3RfSEVBRF9JTklUKDAsIDApCi0rICAidmlkY3V0dGVyLmxpYnMubXB2Ll9SZW5kZXJQYXJh bXMiLCAvKnRwX25hbWUqLwotKyAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X19SZW5kZXJQYXJhbXMpLCAvKnRwX2Jhc2ljc2l6ZSovCi0rICAwLCAvKnRwX2l0 ZW1zaXplKi8KLSsgIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5k ZXJQYXJhbXMsIC8qdHBfZGVhbGxvYyovCi0rICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgw MGI0Ci0rICAwLCAvKnRwX3ByaW50Ki8KLSsgICNlbmRpZgotKyAgI2lmIFBZX1ZFUlNJT05fSEVY ID49IDB4MDMwODAwYjQKLSsgIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQqLwotKyAgI2VuZGlm Ci0rICAwLCAvKnRwX2dldGF0dHIqLwotKyAgMCwgLyp0cF9zZXRhdHRyKi8KLSsgICNpZiBQWV9N QUpPUl9WRVJTSU9OIDwgMwotKyAgMCwgLyp0cF9jb21wYXJlKi8KLSsgICNlbmRpZgotKyAgI2lm IFBZX01BSk9SX1ZFUlNJT04gPj0gMwotKyAgMCwgLyp0cF9hc19hc3luYyovCi0rICAjZW5kaWYK LSsgIDAsIC8qdHBfcmVwciovCi0rICAwLCAvKnRwX2FzX251bWJlciovCi0rICAwLCAvKnRwX2Fz X3NlcXVlbmNlKi8KLSsgIDAsIC8qdHBfYXNfbWFwcGluZyovCi0rICAwLCAvKnRwX2hhc2gqLwot KyAgMCwgLyp0cF9jYWxsKi8KLSsgIDAsIC8qdHBfc3RyKi8KLSsgIDAsIC8qdHBfZ2V0YXR0cm8q LwotKyAgMCwgLyp0cF9zZXRhdHRybyovCi0rICAwLCAvKnRwX2FzX2J1ZmZlciovCi0rICBQeV9U UEZMQUdTX0RFRkFVTFR8UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5X1RQRkxBR1NfQ0hF Q0tUWVBFU3xQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1NfQkFTRVRZUEV8UHlf VFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KLSsgIDAsIC8qdHBfZG9jKi8KLSsgIF9fcHl4 X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zLCAvKnRwX3Ry YXZlcnNlKi8KLSsgIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zLCAvKnRwX2NsZWFyKi8KLSsgIDAsIC8qdHBfcmljaGNvbXBhcmUqLwotKyAgMCwgLyp0 cF93ZWFrbGlzdG9mZnNldCovCi0rICAwLCAvKnRwX2l0ZXIqLwotKyAgMCwgLyp0cF9pdGVybmV4 dCovCi0rICBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z LCAvKnRwX21ldGhvZHMqLwotKyAgMCwgLyp0cF9tZW1iZXJzKi8KLSsgIDAsIC8qdHBfZ2V0c2V0 Ki8KLSsgIDAsIC8qdHBfYmFzZSovCi0rICAwLCAvKnRwX2RpY3QqLwotKyAgMCwgLyp0cF9kZXNj cl9nZXQqLwotKyAgMCwgLyp0cF9kZXNjcl9zZXQqLwotKyAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8K LSsgIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfMV9faW5p dF9fLCAvKnRwX2luaXQqLwotKyAgMCwgLyp0cF9hbGxvYyovCi0rICBfX3B5eF90cF9uZXdfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMsIC8qdHBfbmV3Ki8KLSsgIDAsIC8qdHBf ZnJlZSovCi0rICAwLCAvKnRwX2lzX2djKi8KLSsgIDAsIC8qdHBfYmFzZXMqLwotKyAgMCwgLyp0 cF9tcm8qLwotKyAgMCwgLyp0cF9jYWNoZSovCi0rICAwLCAvKnRwX3N1YmNsYXNzZXMqLwotKyAg MCwgLyp0cF93ZWFrbGlzdCovCi0rICAwLCAvKnRwX2RlbCovCi0rICAwLCAvKnRwX3ZlcnNpb25f dGFnKi8KLSsgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCi0rICAwLCAvKnRwX2Zp bmFsaXplKi8KLSsgICNlbmRpZgotKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEg JiYgKCFDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgfHwgUFlQWV9WRVJTSU9OX05VTSA+PSAweDA3 MDMwODAwKQotKyAgMCwgLyp0cF92ZWN0b3JjYWxsKi8KLSsgICNlbmRpZgotKyAgI2lmIFBZX1ZF UlNJT05fSEVYID49IDB4MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAwCi0r ICAwLCAvKnRwX3ByaW50Ki8KLSsgICNlbmRpZgotKyAgI2lmIENZVEhPTl9DT01QSUxJTkdfSU5f UFlQWSAmJiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDkwMDAwCi0rICAwLCAvKnRwX3B5cHlfZmxh Z3MqLwotKyAgI2VuZGlmCi0rfTsKLStzdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyBfX3B5eF92dGFibGVfOXZpZGN1dHRl cl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbzsKLSAKLS0gIC8qICIodHJlZSBmcmFnbWVudCki OjEyCi0tICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKLS0gKiBjZGVmIF9fcHl4X3VucGlja2xl X1Byb3BlcnR5X19zZXRfc3RhdGUoUHJvcGVydHkgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9z dGF0ZSk6Ci0tICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4 X3Jlc3VsdC5uYW1lID0gX19weXhfc3RhdGVbMV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1 bHQsICdfX2RpY3RfXycpOgotLSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0 ZShfX3B5eF9zdGF0ZVsyXSkKLS0gKi8KLS0gIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0 YXRlID09IFB5X05vbmUpKSB7Ci0tICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3Is ICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOwotLSAgICBfX1BZWF9F UlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQotLSAgfQotLSAgX19weXhfdF8xID0gX19QeXhfR2V0 SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAwLCBsb25nLCAxLCBfX1B5eF9QeUlu dF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0g IF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF92X19fcHl4 X3Jlc3VsdC0+ZGF0YSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPmRh dGEpOwotLSAgX19weXhfdl9fX3B5eF9yZXN1bHQtPmRhdGEgPSBfX3B5eF90XzE7Ci0tICBfX3B5 eF90XzEgPSAwOwotLSAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9u ZSkpIHsKLS0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScg b2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7Ci0tICAgIF9fUFlYX0VSUigxLCAxMiwgX19w eXhfTDFfZXJyb3IpCi0rc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80 bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyhQeVR5cGVPYmplY3QgKnQsIENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKmEsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKLSsgIHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqcDsKLSsgIFB5T2Jq ZWN0ICpvOwotKyAgaWYgKGxpa2VseSgodC0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0lTX0FCU1RS QUNUKSA9PSAwKSkgewotKyAgICBvID0gKCp0LT50cF9hbGxvYykodCwgMCk7Ci0rICB9IGVsc2Ug ewotKyAgICBvID0gKFB5T2JqZWN0ICopIFB5QmFzZU9iamVjdF9UeXBlLnRwX25ldyh0LCBfX3B5 eF9lbXB0eV90dXBsZSwgMCk7Ci0gICB9Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50 X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDEsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21f bG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEy LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19QeXhf R0lWRVJFRihfX3B5eF90XzEpOwotLSAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0 LT5uYW1lKTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+bmFtZSk7Ci0t ICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+bmFtZSA9IF9fcHl4X3RfMTsKLS0gIF9fcHl4X3RfMSA9 IDA7Ci0rICBpZiAodW5saWtlbHkoIW8pKSByZXR1cm4gMDsKLSsgIHAgPSAoKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqKW8pOwotKyAgcC0+ X19weXhfdnRhYiA9IF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZy YW1lSW5mbzsKLSsgIHJldHVybiBvOwotK30KLSAKLS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEz Ci0tICogY2RlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKFByb3BlcnR5IF9f cHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgotLSAqICAgICBfX3B5eF9yZXN1bHQuZGF0 YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubmFtZSA9IF9fcHl4X3N0YXRlWzFdCi0t ICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwg J19fZGljdF9fJyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIF9f cHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbMl0pCi0tICovCi0tICBpZiAo dW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgewotLSAgICBQeUVycl9T ZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAib2JqZWN0IG9mIHR5cGUgJ05vbmVUeXBlJyBoYXMg bm8gbGVuKCkiKTsKLS0gICAgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKLS0gIH0K LS0gIF9fcHl4X3RfMyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdl9fX3B5eF9zdGF0ZSk7IGlm ICh1bmxpa2VseShfX3B5eF90XzMgPT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VSUigxLCAx MywgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF90XzQgPSAoKF9fcHl4X3RfMyA+IDIpICE9IDAp OwotLSAgaWYgKF9fcHl4X3RfNCkgewotLSAgfSBlbHNlIHsKLS0gICAgX19weXhfdF8yID0gX19w eXhfdF80OwotLSAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKLStzdGF0aWMgdm9p ZCBfX3B5eF90cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8o UHlPYmplY3QgKm8pIHsKLSsgICNpZiBDWVRIT05fVVNFX1RQX0ZJTkFMSVpFCi0rICBpZiAodW5s aWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUoUHlfVFlQRShvKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFM SVpFKSAmJiBQeV9UWVBFKG8pLT50cF9maW5hbGl6ZSkgJiYgKCFQeVR5cGVfSVNfR0MoUHlfVFlQ RShvKSkgfHwgIV9QeUdDX0ZJTkFMSVpFRChvKSkpIHsKLSsgICAgaWYgKFB5T2JqZWN0X0NhbGxG aW5hbGl6ZXJGcm9tRGVhbGxvYyhvKSkgcmV0dXJuOwotICAgfQotLSAgX19weXhfdF80ID0gX19Q eXhfSGFzQXR0cigoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3Nf ZGljdCk7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDEs IDEzLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fcHl4X3RfNSA9IChfX3B5eF90XzQgIT0gMCk7Ci0t ICBfX3B5eF90XzIgPSBfX3B5eF90XzU7Ci0tICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6Owot LSAgaWYgKF9fcHl4X3RfMikgewotKyAgI2VuZGlmCi0rICAoKlB5X1RZUEUobyktPnRwX2ZyZWUp KG8pOwotK30KLSAKLS0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTQKLS0gKiAgICAgX19weXhf cmVzdWx0LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0Lm5hbWUgPSBfX3B5eF9z dGF0ZVsxXQotLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5 eF9yZXN1bHQsICdfX2RpY3RfXycpOgotLSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9f LnVwZGF0ZShfX3B5eF9zdGF0ZVsyXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq LwotLSAgICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3Qg KilfX3B5eF92X19fcHl4X3Jlc3VsdCksIF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF82KTsKLS0gICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihfX3B5eF90XzYsIF9fcHl4X25fc191cGRhdGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NykpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsK LS0gICAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKLS0g ICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3Qg aXMgbm90IHN1YnNjcmlwdGFibGUiKTsKLS0gICAgICBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wx X2Vycm9yKQotLSAgICB9Ci0tICAgIF9fcHl4X3RfNiA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUo X19weXhfdl9fX3B5eF9zdGF0ZSwgMiwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAw LCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4 X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gICAgX19weXhfdF84 ID0gTlVMTDsKLS0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRo b2RfQ2hlY2soX19weXhfdF83KSkpIHsKLS0gICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRf U0VMRihfX3B5eF90XzcpOwotLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF84KSkgewotLSAgICAg ICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNyk7 Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF84KTsKLS0gICAgICAgIF9fUHl4X0lOQ1JF RihmdW5jdGlvbik7Ci0tICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNywgZnVuY3Rp b24pOwotLSAgICAgIH0KLS0gICAgfQotLSAgICBfX3B5eF90XzEgPSAoX19weXhfdF84KSA/IF9f UHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdF82KSA6 IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF83LCBfX3B5eF90XzYpOwotLSAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7Ci0tICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsK LS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rc3RhdGljIFB5 TWV0aG9kRGVmIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1l SW5mb1tdID0gewotKyAgeyJfX3JlZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fMV9fcmVkdWNlX2N5dGhv bl9fLCBNRVRIX05PQVJHUywgMH0sCi0rICB7Il9fc2V0c3RhdGVfY3l0aG9uX18iLCAoUHlDRnVu Y3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE1UmVuZGVyRnJhbWVJbmZvXzNf X3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAotKyAgezAsIDAsIDAsIDB9Ci0rfTsKLSAK LS0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKLS0gKiBjZGVmIF9fcHl4X3VucGlja2xlX1By b3BlcnR5X19zZXRfc3RhdGUoUHJvcGVydHkgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0 ZSk6Ci0tICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jl c3VsdC5uYW1lID0gX19weXhfc3RhdGVbMV0KLS0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+ IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShf X3B5eF9zdGF0ZVsyXSkKLS0gKi8KLS0gIH0KLS0KLS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEx Ci0tICogICAgICAgICBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKDxQcm9wZXJ0 eT4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLS0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3Vs dAotLSAqIGNkZWYgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShQcm9wZXJ0eSBf X3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9y ZXN1bHQubmFtZSA9IF9fcHl4X3N0YXRlWzFdCi0tICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkg PiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6Ci0tICovCi0rc3RhdGlj IFB5VHlwZU9iamVjdCBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFt ZUluZm8gPSB7Ci0rICBQeVZhck9iamVjdF9IRUFEX0lOSVQoMCwgMCkKLSsgICJ2aWRjdXR0ZXIu bGlicy5tcHYuUmVuZGVyRnJhbWVJbmZvIiwgLyp0cF9uYW1lKi8KLSsgIHNpemVvZihzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8pLCAvKnRwX2Jh c2ljc2l6ZSovCi0rICAwLCAvKnRwX2l0ZW1zaXplKi8KLSsgIF9fcHl4X3RwX2RlYWxsb2NfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbywgLyp0cF9kZWFsbG9jKi8KLSsgICNp ZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKLSsgIDAsIC8qdHBfcHJpbnQqLwotKyAgI2Vu ZGlmCi0rICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAotKyAgMCwgLyp0cF92ZWN0 b3JjYWxsX29mZnNldCovCi0rICAjZW5kaWYKLSsgIDAsIC8qdHBfZ2V0YXR0ciovCi0rICAwLCAv KnRwX3NldGF0dHIqLwotKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0rICAwLCAvKnRwX2Nv bXBhcmUqLwotKyAgI2VuZGlmCi0rICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0rICAwLCAv KnRwX2FzX2FzeW5jKi8KLSsgICNlbmRpZgotKyAgMCwgLyp0cF9yZXByKi8KLSsgIDAsIC8qdHBf YXNfbnVtYmVyKi8KLSsgIDAsIC8qdHBfYXNfc2VxdWVuY2UqLwotKyAgMCwgLyp0cF9hc19tYXBw aW5nKi8KLSsgIDAsIC8qdHBfaGFzaCovCi0rICAwLCAvKnRwX2NhbGwqLwotKyAgMCwgLyp0cF9z dHIqLwotKyAgMCwgLyp0cF9nZXRhdHRybyovCi0rICAwLCAvKnRwX3NldGF0dHJvKi8KLSsgIDAs IC8qdHBfYXNfYnVmZmVyKi8KLSsgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0hBVkVf VkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZG RVJ8UHlfVFBGTEFHU19CQVNFVFlQRSwgLyp0cF9mbGFncyovCi0rICAwLCAvKnRwX2RvYyovCi0r ICAwLCAvKnRwX3RyYXZlcnNlKi8KLSsgIDAsIC8qdHBfY2xlYXIqLwotKyAgMCwgLyp0cF9yaWNo Y29tcGFyZSovCi0rICAwLCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KLSsgIDAsIC8qdHBfaXRlciov Ci0rICAwLCAvKnRwX2l0ZXJuZXh0Ki8KLSsgIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGli c18zbXB2X1JlbmRlckZyYW1lSW5mbywgLyp0cF9tZXRob2RzKi8KLSsgIDAsIC8qdHBfbWVtYmVy cyovCi0rICAwLCAvKnRwX2dldHNldCovCi0rICAwLCAvKnRwX2Jhc2UqLwotKyAgMCwgLyp0cF9k aWN0Ki8KLSsgIDAsIC8qdHBfZGVzY3JfZ2V0Ki8KLSsgIDAsIC8qdHBfZGVzY3Jfc2V0Ki8KLSsg IDAsIC8qdHBfZGljdG9mZnNldCovCi0rICAwLCAvKnRwX2luaXQqLwotKyAgMCwgLyp0cF9hbGxv YyovCi0rICBfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5m bywgLyp0cF9uZXcqLwotKyAgMCwgLyp0cF9mcmVlKi8KLSsgIDAsIC8qdHBfaXNfZ2MqLwotKyAg MCwgLyp0cF9iYXNlcyovCi0rICAwLCAvKnRwX21ybyovCi0rICAwLCAvKnRwX2NhY2hlKi8KLSsg IDAsIC8qdHBfc3ViY2xhc3NlcyovCi0rICAwLCAvKnRwX3dlYWtsaXN0Ki8KLSsgIDAsIC8qdHBf ZGVsKi8KLSsgIDAsIC8qdHBfdmVyc2lvbl90YWcqLwotKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49 IDB4MDMwNDAwYTEKLSsgIDAsIC8qdHBfZmluYWxpemUqLwotKyAgI2VuZGlmCi0rICAjaWYgUFlf VkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMSAmJiAoIUNZVEhPTl9DT01QSUxJTkdfSU5fUFlQWSB8 fCBQWVBZX1ZFUlNJT05fTlVNID49IDB4MDcwMzA4MDApCi0rICAwLCAvKnRwX3ZlY3RvcmNhbGwq LwotKyAgI2VuZGlmCi0rICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNCAmJiBQWV9W RVJTSU9OX0hFWCA8IDB4MDMwOTAwMDAKLSsgIDAsIC8qdHBfcHJpbnQqLwotKyAgI2VuZGlmCi0r ICAjaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZICYmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMw OTAwMDAKLSsgIDAsIC8qdHBfcHlweV9mbGFncyovCi0rICAjZW5kaWYKLSt9OwotIAotLSAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVG KFB5X05vbmUpOwotLSAgZ290byBfX3B5eF9MMDsKLS0gIF9fcHl4X0wxX2Vycm9yOjsKLS0gIF9f UHl4X1hERUNSRUYoX19weXhfdF8xKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKLS0g IF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsK LS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xl X1Byb3BlcnR5X19zZXRfc3RhdGUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lKTsKLS0gIF9fcHl4X3IgPSAwOwotLSAgX19weXhfTDA6OwotLSAgX19QeXhfWEdJ VkVSRUYoX19weXhfcik7Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJl dHVybiBfX3B5eF9yOwotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VOVVNFRCBQ eU9iamVjdCAqYSwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqaykgewotKyAgc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqcDsKLSsgIFB5T2JqZWN0 ICpvOwotKyAgaWYgKGxpa2VseSgodC0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0lTX0FCU1RSQUNU KSA9PSAwKSkgewotKyAgICBvID0gKCp0LT50cF9hbGxvYykodCwgMCk7Ci0rICB9IGVsc2Ugewot KyAgICBvID0gKFB5T2JqZWN0ICopIFB5QmFzZU9iamVjdF9UeXBlLnRwX25ldyh0LCBfX3B5eF9l bXB0eV90dXBsZSwgMCk7Ci0rICB9Ci0rICBpZiAodW5saWtlbHkoIW8pKSByZXR1cm4gMDsKLSsg IHAgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRl eHQgKilvKTsKLSsgIHAtPl9tcHYgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKilQeV9Ob25lKTsgUHlfSU5DUkVGKFB5X05vbmUpOwotKyAgcC0+dXBk YXRlX2NiID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotKyAgcC0+X3gxMV9kaXNwbGF5 ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotKyAgcC0+X3dsX2Rpc3BsYXkgPSBQeV9O b25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0rICBwLT5fZ2V0X3Byb2NfYWRkcmVzcyA9IFB5X05v bmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLSsgIHJldHVybiBvOwotIH0KLSAKLS0vKiAiKHRyZWUg ZnJhZ21lbnQpIjoxCi0tICogZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50KF9fcHl4X3R5cGUsIGxv bmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgotLSAqICAgICBjZGVm IG9iamVjdCBfX3B5eF9yZXN1bHQKLS0gKi8KLS0KLS0vKiBQeXRob24gd3JhcHBlciAqLwotLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE1X19weXhfdW5w aWNrbGVfRXZlbnQoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQ eU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLwotLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5 eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNV9fcHl4X3VucGlja2xlX0V2ZW50ID0geyJf X3B5eF91bnBpY2tsZV9FdmVudCIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0 aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNV9fcHl4X3VucGlja2xl X0V2ZW50LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgMH07Ci0tc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVfX3B5eF91bnBpY2tsZV9FdmVudChQ eU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5 eF9rd2RzKSB7Ci0tICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF90eXBlID0gMDsKLS0gIGxvbmcg X19weXhfdl9fX3B5eF9jaGVja3N1bTsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRl ID0gMDsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmls ZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgUHlPYmplY3QgKl9f cHl4X3IgPSAwOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBpY2tsZV9FdmVudCAod3JhcHBlcikiLCAwKTsKLStz dGF0aWMgdm9pZCBfX3B5eF90cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJD b250ZXh0KFB5T2JqZWN0ICpvKSB7Ci0rICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJDb250ZXh0ICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilvOwotKyAgI2lmIENZVEhPTl9VU0VfVFBfRklOQUxJ WkUKLSsgIGlmICh1bmxpa2VseShQeVR5cGVfSGFzRmVhdHVyZShQeV9UWVBFKG8pLCBQeV9UUEZM QUdTX0hBVkVfRklOQUxJWkUpICYmIFB5X1RZUEUobyktPnRwX2ZpbmFsaXplKSAmJiAhX1B5R0Nf RklOQUxJWkVEKG8pKSB7Ci0rICAgIGlmIChQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxs b2MobykpIHJldHVybjsKLSsgIH0KLSsgICNlbmRpZgotKyAgUHlPYmplY3RfR0NfVW5UcmFjayhv KTsKLSAgIHsKLS0gICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZf X3B5eF9uX3NfcHl4X3R5cGUsJl9fcHl4X25fc19weXhfY2hlY2tzdW0sJl9fcHl4X25fc19weXhf c3RhdGUsMH07Ci0tICAgIFB5T2JqZWN0KiB2YWx1ZXNbM10gPSB7MCwwLDB9OwotLSAgICBpZiAo dW5saWtlbHkoX19weXhfa3dkcykpIHsKLS0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7Ci0tICAg ICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cyk7Ci0tICAgICAgc3dpdGNoIChwb3NfYXJncykgewotLSAgICAgICAgY2FzZSAgMzogdmFsdWVz WzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsKLS0gICAgICAgIENZVEhPTl9G QUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lU RU0oX19weXhfYXJncywgMSk7Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAg ICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOwot LSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgMDogYnJlYWs7Ci0t ICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotLSAgICAgIH0K LS0gICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7Ci0tICAgICAgc3dpdGNo IChwb3NfYXJncykgewotLSAgICAgICAgY2FzZSAgMDoKLS0gICAgICAgIGlmIChsaWtlbHkoKHZh bHVlc1swXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19w eXhfdHlwZSkpICE9IDApKSBrd19hcmdzLS07Ci0tICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVf YXJndHVwbGVfZXJyb3I7Ci0tICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICBj YXNlICAxOgotLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dl dEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF9jaGVja3N1bSkpICE9IDApKSBrd19h cmdzLS07Ci0tICAgICAgICBlbHNlIHsKLS0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUlu dmFsaWQoIl9fcHl4X3VucGlja2xlX0V2ZW50IiwgMSwgMywgMywgMSk7IF9fUFlYX0VSUigxLCAx LCBfX3B5eF9MM19lcnJvcikKLS0gICAgICAgIH0KLS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VH SDsKLS0gICAgICAgIGNhc2UgIDI6Ci0tICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMl0gPSBf X1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X3N0YXRlKSkg IT0gMCkpIGt3X2FyZ3MtLTsKLS0gICAgICAgIGVsc2UgewotLSAgICAgICAgICBfX1B5eF9SYWlz ZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfRXZlbnQiLCAxLCAzLCAzLCAyKTsgX19Q WVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQotLSAgICAgICAgfQotLSAgICAgIH0KLS0gICAg ICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7Ci0tICAgICAgICBpZiAodW5saWtlbHkoX19Q eXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAs IHZhbHVlcywgcG9zX2FyZ3MsICJfX3B5eF91bnBpY2tsZV9FdmVudCIpIDwgMCkpIF9fUFlYX0VS UigxLCAxLCBfX3B5eF9MM19lcnJvcikKLS0gICAgICB9Ci0tICAgIH0gZWxzZSBpZiAoUHlUdXBs ZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAzKSB7Ci0tICAgICAgZ290byBfX3B5eF9MNV9hcmd0 dXBsZV9lcnJvcjsKLS0gICAgfSBlbHNlIHsKLS0gICAgICB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dF VF9JVEVNKF9fcHl4X2FyZ3MsIDApOwotLSAgICAgIHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lU RU0oX19weXhfYXJncywgMSk7Ci0tICAgICAgdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShf X3B5eF9hcmdzLCAyKTsKLS0gICAgfQotLSAgICBfX3B5eF92X19fcHl4X3R5cGUgPSB2YWx1ZXNb MF07Ci0tICAgIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gPSBfX1B5eF9QeUludF9Bc19sb25nKHZh bHVlc1sxXSk7IGlmICh1bmxpa2VseSgoX19weXhfdl9fX3B5eF9jaGVja3N1bSA9PSAobG9uZykt MSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikK LS0gICAgX19weXhfdl9fX3B5eF9zdGF0ZSA9IHZhbHVlc1syXTsKLSsgICAgUHlPYmplY3QgKmV0 eXBlLCAqZXZhbCwgKmV0YjsKLSsgICAgUHlFcnJfRmV0Y2goJmV0eXBlLCAmZXZhbCwgJmV0Yik7 Ci0rICAgIF9fUHl4X1NFVF9SRUZDTlQobywgUHlfUkVGQ05UKG8pICsgMSk7Ci0rICAgIF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjFfX2RlYWxsb2NfXyhv KTsKLSsgICAgX19QeXhfU0VUX1JFRkNOVChvLCBQeV9SRUZDTlQobykgLSAxKTsKLSsgICAgUHlF cnJfUmVzdG9yZShldHlwZSwgZXZhbCwgZXRiKTsKLSAgIH0KLS0gIGdvdG8gX19weXhfTDRfYXJn dW1lbnRfdW5wYWNraW5nX2RvbmU7Ci0tICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Ci0tICBf X1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfRXZlbnQiLCAxLCAzLCAz LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wz X2Vycm9yKQotLSAgX19weXhfTDNfZXJyb3I6OwotLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfRXZlbnQiLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOwotLSAgcmV0dXJuIE5VTEw7Ci0tICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9u ZTo7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X19weXhf dW5waWNrbGVfRXZlbnQoX19weXhfc2VsZiwgX19weXhfdl9fX3B5eF90eXBlLCBfX3B5eF92X19f cHl4X2NoZWNrc3VtLCBfX3B5eF92X19fcHl4X3N0YXRlKTsKLS0KLS0gIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4g X19weXhfcjsKLSsgIFB5X0NMRUFSKHAtPl9tcHYpOwotKyAgUHlfQ0xFQVIocC0+dXBkYXRlX2Ni KTsKLSsgIFB5X0NMRUFSKHAtPl94MTFfZGlzcGxheSk7Ci0rICBQeV9DTEVBUihwLT5fd2xfZGlz cGxheSk7Ci0rICBQeV9DTEVBUihwLT5fZ2V0X3Byb2NfYWRkcmVzcyk7Ci0rICAoKlB5X1RZUEUo byktPnRwX2ZyZWUpKG8pOwotIH0KLSAKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xNF9fcHl4X3VucGlja2xlX0V2ZW50KENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5cGUsIGxvbmcgX19w eXhfdl9fX3B5eF9jaGVja3N1bSwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKLS0g IFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yID0gMDsKLS0gIFB5T2JqZWN0ICpf X3B5eF92X19fcHl4X3Jlc3VsdCA9IDA7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0t ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgaW50IF9fcHl4X3RfMTsKLS0gIFB5T2Jq ZWN0ICpfX3B5eF90XzIgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Ci0t ICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBO VUxMOwotLSAgaW50IF9fcHl4X3RfNjsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29u c3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAw OwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX0V2ZW50Iiwg MCk7Ci0tCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0Ci0tICogICAgIGNkZWYgb2JqZWN0IF9f cHl4X1BpY2tsZUVycm9yCi0tICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotLSAqICAg ICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweGRhMzhjMjU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLS0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5 eF9QaWNrbGVFcnJvcgotLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29t cGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJvciwgaWQsIHJl cGx5X3VzZXJkYXRhKSkiICUgX19weXhfY2hlY2tzdW0pCi0tICovCi0tICBfX3B5eF90XzEgPSAo KF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gIT0gMHhkYTM4YzI1KSAhPSAwKTsKLS0gIGlmIChfX3B5 eF90XzEpIHsKLStzdGF0aWMgaW50IF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9SZW5kZXJDb250ZXh0KFB5T2JqZWN0ICpvLCB2aXNpdHByb2Mgdiwgdm9pZCAqYSkgewot KyAgaW50IGU7Ci0rICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJDb250ZXh0ICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Jl bmRlckNvbnRleHQgKilvOwotKyAgaWYgKHAtPl9tcHYpIHsKLSsgICAgZSA9ICgqdikoKChQeU9i amVjdCAqKXAtPl9tcHYpLCBhKTsgaWYgKGUpIHJldHVybiBlOwotKyAgfQotKyAgaWYgKHAtPnVw ZGF0ZV9jYikgewotKyAgICBlID0gKCp2KShwLT51cGRhdGVfY2IsIGEpOyBpZiAoZSkgcmV0dXJu IGU7Ci0rICB9Ci0rICBpZiAocC0+X3gxMV9kaXNwbGF5KSB7Ci0rICAgIGUgPSAoKnYpKHAtPl94 MTFfZGlzcGxheSwgYSk7IGlmIChlKSByZXR1cm4gZTsKLSsgIH0KLSsgIGlmIChwLT5fd2xfZGlz cGxheSkgewotKyAgICBlID0gKCp2KShwLT5fd2xfZGlzcGxheSwgYSk7IGlmIChlKSByZXR1cm4g ZTsKLSsgIH0KLSsgIGlmIChwLT5fZ2V0X3Byb2NfYWRkcmVzcykgewotKyAgICBlID0gKCp2KShw LT5fZ2V0X3Byb2NfYWRkcmVzcywgYSk7IGlmIChlKSByZXR1cm4gZTsKLSsgIH0KLSsgIHJldHVy biAwOwotK30KLSAKLS0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6NQotLSAqICAgICBjZGVmIG9i amVjdCBfX3B5eF9yZXN1bHQKLS0gKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHhkYTM4YzI1 OgotLSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1Bp Y2tsZUVycm9yICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHJhaXNl IF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGRhMzhj MjUgPSAoZGF0YSwgZXJyb3IsIGlkLCByZXBseV91c2VyZGF0YSkpIiAlIF9fcHl4X2NoZWNrc3Vt KQotLSAqICAgICBfX3B5eF9yZXN1bHQgPSBFdmVudC5fX25ld19fKF9fcHl4X3R5cGUpCi0tICov Ci0tICAgIF9fcHl4X3RfMiA9IFB5TGlzdF9OZXcoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKLS0gICAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19QaWNrbGVFcnJvcik7Ci0tICAg IF9fUHl4X0dJVkVSRUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsKLS0gICAgUHlMaXN0X1NFVF9J VEVNKF9fcHl4X3RfMiwgMCwgX19weXhfbl9zX1BpY2tsZUVycm9yKTsKLS0gICAgX19weXhfdF8z ID0gX19QeXhfSW1wb3J0KF9fcHl4X25fc19waWNrbGUsIF9fcHl4X3RfMiwgLTEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikKLS0gICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOwotLSAgICBfX3B5eF90XzIgPSBfX1B5eF9JbXBvcnRGcm9tKF9fcHl4X3Rf MywgX19weXhfbl9zX1BpY2tsZUVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIp OwotLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKLS0gICAgX19weXhfdl9fX3B5eF9QaWNr bGVFcnJvciA9IF9fcHl4X3RfMjsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwot LQotLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2Ci0tICogICAgIGlmIF9fcHl4X2NoZWNrc3Vt ICE9IDB4ZGEzOGMyNToKLS0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJv ciBhcyBfX3B5eF9QaWNrbGVFcnJvcgotLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJy b3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJv ciwgaWQsIHJlcGx5X3VzZXJkYXRhKSkiICUgX19weXhfY2hlY2tzdW0pICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgX19weXhfcmVzdWx0ID0gRXZlbnQuX19uZXdfXyhfX3B5 eF90eXBlKQotLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKLS0gKi8KLS0gICAg X19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9sb25nKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0p OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJv cikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fcHl4X3RfNCA9IF9fUHl4 X1B5U3RyaW5nX0Zvcm1hdChfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18w eGRhLCBfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCA2 LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tICAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgICBfX1B5eF9JTkNSRUYo X19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcik7Ci0tICAgIF9fcHl4X3RfMiA9IF9fcHl4X3ZfX19w eXhfUGlja2xlRXJyb3I7IF9fcHl4X3RfNSA9IE5VTEw7Ci0tICAgIGlmIChDWVRIT05fVU5QQUNL X01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLS0gICAg ICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwotLSAgICAgIGlmIChs aWtlbHkoX19weXhfdF81KSkgewotLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0tICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhf dF81KTsKLS0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgICBfX1B5eF9E RUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotLSAgICAgIH0KLS0gICAgfQotLSAgICBf X3B5eF90XzMgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzIsIF9fcHl4X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfdF8yLCBfX3B5eF90XzQpOwotLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4 X3RfNSA9IDA7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwot LSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9l cnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgICBfX1B5eF9SYWlzZShfX3B5eF90XzMsIDAs IDAsIDApOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0g ICAgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQotLQotLSAgICAvKiAiKHRyZWUgZnJh Z21lbnQpIjo0Ci0tICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCi0tICogICAg IGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotLSAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAw eGRhMzhjMjU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGZyb20g cGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgotLSAqICAgICAg ICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZz IDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJvciwgaWQsIHJlcGx5X3VzZXJkYXRhKSkiICUgX19weXhf Y2hlY2tzdW0pCi0tICovCi0tICB9Ci0tCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3Ci0tICog ICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJy b3IKLS0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hl Y2tzdW1zICglcyB2cyAweGRhMzhjMjUgPSAoZGF0YSwgZXJyb3IsIGlkLCByZXBseV91c2VyZGF0 YSkpIiAlIF9fcHl4X2NoZWNrc3VtKQotLSAqICAgICBfX3B5eF9yZXN1bHQgPSBFdmVudC5fX25l d19fKF9fcHl4X3R5cGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgaWYg X19weXhfc3RhdGUgaXMgbm90IE5vbmU6Ci0tICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FdmVu dF9fc2V0X3N0YXRlKDxFdmVudD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLS0gKi8KLS0g IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCksIF9fcHl4X25fc19uZXcpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA3LCBfX3B5eF9MMV9lcnJvcikKLS0g IF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgX19weXhfdF80ID0gTlVMTDsKLS0gIGlmIChD WVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikp KSB7Ci0tICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Ci0tICAg IGlmIChsaWtlbHkoX19weXhfdF80KSkgewotLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5 TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwotLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzQpOwotLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgX19QeXhfREVD UkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKLS0gICAgfQotLSAgfQotLSAgX19weXhfdF8z ID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5 eF90XzQsIF9fcHl4X3ZfX19weXhfdHlwZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9f cHl4X3RfMiwgX19weXhfdl9fX3B5eF90eXBlKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDEsIDcsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gIF9fcHl4X3ZfX19weXhf cmVzdWx0ID0gX19weXhfdF8zOwotLSAgX19weXhfdF8zID0gMDsKLS0KLS0gIC8qICIodHJlZSBm cmFnbWVudCkiOjgKLS0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBh dGlibGUgY2hlY2tzdW1zICglcyB2cyAweGRhMzhjMjUgPSAoZGF0YSwgZXJyb3IsIGlkLCByZXBs eV91c2VyZGF0YSkpIiAlIF9fcHl4X2NoZWNrc3VtKQotLSAqICAgICBfX3B5eF9yZXN1bHQgPSBF dmVudC5fX25ld19fKF9fcHl4X3R5cGUpCi0tICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBO b25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBfX3B5eF91bnBp Y2tsZV9FdmVudF9fc2V0X3N0YXRlKDxFdmVudD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkK LS0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAotLSAqLwotLSAgX19weXhfdF8xID0gKF9fcHl4 X3ZfX19weXhfc3RhdGUgIT0gUHlfTm9uZSk7Ci0tICBfX3B5eF90XzYgPSAoX19weXhfdF8xICE9 IDApOwotLSAgaWYgKF9fcHl4X3RfNikgewotLQotLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo5 Ci0tICogICAgIF9fcHl4X3Jlc3VsdCA9IEV2ZW50Ll9fbmV3X18oX19weXhfdHlwZSkKLS0gKiAg ICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6Ci0tICogICAgICAgICBfX3B5eF91bnBpY2ts ZV9FdmVudF9fc2V0X3N0YXRlKDxFdmVudD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0t ICogY2RlZiBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKEV2ZW50IF9fcHl4X3Jlc3Vs dCwgdHVwbGUgX19weXhfc3RhdGUpOgotLSAqLwotLSAgICBpZiAoIShsaWtlbHkoUHlUdXBsZV9D aGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5eF92X19fcHl4X3N0YXRlKSA9 PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJFeHBlY3RlZCAlLjE2 cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5X1RZUEUoX19weXhfdl9fX3B5eF9zdGF0ZSktPnRw X25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCA5LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19weXhf dF8zID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfRXZlbnRf X3NldF9zdGF0ZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50 ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCAoKFB5T2JqZWN0KilfX3B5eF92X19fcHl4X3N0YXRl KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vy cm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tCi0tICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgK LS0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tz dW1zICglcyB2cyAweGRhMzhjMjUgPSAoZGF0YSwgZXJyb3IsIGlkLCByZXBseV91c2VyZGF0YSkp IiAlIF9fcHl4X2NoZWNrc3VtKQotLSAqICAgICBfX3B5eF9yZXN1bHQgPSBFdmVudC5fX25ld19f KF9fcHl4X3R5cGUpCi0tICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9f c2V0X3N0YXRlKDxFdmVudD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLS0gKiAgICAgcmV0 dXJuIF9fcHl4X3Jlc3VsdAotLSAqLwotLSAgfQotK3N0YXRpYyBpbnQgX19weXhfdHBfY2xlYXJf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQoUHlPYmplY3QgKm8pIHsKLSsgIFB5 T2JqZWN0KiB0bXA7Ci0rICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9S ZW5kZXJDb250ZXh0ICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X1JlbmRlckNvbnRleHQgKilvOwotKyAgdG1wID0gKChQeU9iamVjdCopcC0+X21wdik7Ci0rICBw LT5fbXB2ID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICopUHlfTm9uZSk7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLSsgIFB5X1hERUNSRUYodG1wKTsKLSsg IHRtcCA9ICgoUHlPYmplY3QqKXAtPnVwZGF0ZV9jYik7Ci0rICBwLT51cGRhdGVfY2IgPSBQeV9O b25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0rICBQeV9YREVDUkVGKHRtcCk7Ci0rICB0bXAgPSAo KFB5T2JqZWN0KilwLT5feDExX2Rpc3BsYXkpOwotKyAgcC0+X3gxMV9kaXNwbGF5ID0gUHlfTm9u ZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotKyAgUHlfWERFQ1JFRih0bXApOwotKyAgdG1wID0gKChQ eU9iamVjdCopcC0+X3dsX2Rpc3BsYXkpOwotKyAgcC0+X3dsX2Rpc3BsYXkgPSBQeV9Ob25lOyBQ eV9JTkNSRUYoUHlfTm9uZSk7Ci0rICBQeV9YREVDUkVGKHRtcCk7Ci0rICB0bXAgPSAoKFB5T2Jq ZWN0KilwLT5fZ2V0X3Byb2NfYWRkcmVzcyk7Ci0rICBwLT5fZ2V0X3Byb2NfYWRkcmVzcyA9IFB5 X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLSsgIFB5X1hERUNSRUYodG1wKTsKLSsgIHJldHVy biAwOwotK30KLSAKLS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEwCi0tICogICAgIGlmIF9fcHl4 X3N0YXRlIGlzIG5vdCBOb25lOgotLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfRXZlbnRfX3Nl dF9zdGF0ZSg8RXZlbnQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCi0tICogICAgIHJldHVy biBfX3B5eF9yZXN1bHQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIGNkZWYgX19w eXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShFdmVudCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9f cHl4X3N0YXRlKToKLS0gKiAgICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsg X19weXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMV07IF9fcHl4X3Jlc3VsdC5pZCA9IF9f cHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQucmVwbHlfdXNlcmRhdGEgPSBfX3B5eF9zdGF0ZVsz XQotLSAqLwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5 eF92X19fcHl4X3Jlc3VsdCk7Ci0tICBfX3B5eF9yID0gX19weXhfdl9fX3B5eF9yZXN1bHQ7Ci0t ICBnb3RvIF9fcHl4X0wwOwotK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0W10gPSB7Ci0rICB7InNldF9pY2NfcHJvZmls ZSIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJD b250ZXh0XzNzZXRfaWNjX3Byb2ZpbGUsIE1FVEhfTywgMH0sCi0rICB7InNldF9hbWJpZW50X2xp Z2h0IiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfNXNldF9hbWJpZW50X2xpZ2h0LCBNRVRIX08sIDB9LAotKyAgeyJnZXRfbmV4dF9m cmFtZV9pbmZvIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfN2dldF9uZXh0X2ZyYW1lX2luZm8sIE1FVEhfTk9BUkdTLCAwfSwKLSsg IHsic2V0X3VwZGF0ZV9jYWxsYmFjayIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzlzZXRfdXBkYXRlX2NhbGxiYWNrLCBNRVRIX08s IDB9LAotKyAgeyJ1cGRhdGUiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMXVwZGF0ZSwgTUVUSF9OT0FSR1MsIDB9LAotKyAgeyJy ZW5kZXIiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEzcmVuZGVyLCBNRVRI X1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgMH0sCi0rICB7InJlcG9ydF9zd2FwIiwgKFB5Q0Z1bmN0 aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTVyZXBv cnRfc3dhcCwgTUVUSF9OT0FSR1MsIDB9LAotKyAgeyJmcmVlIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTdmcmVlLCBNRVRIX05P QVJHUywgMH0sCi0rICB7ImNsb3NlIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTljbG9zZSwgTUVUSF9OT0FSR1MsIDB9LAotKyAg eyJfX3JlZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzIzX19yZWR1Y2VfY3l0aG9uX18sIE1FVEhfTk9BUkdT LCAwfSwKLSsgIHsiX19zZXRzdGF0ZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzI1X19zZXRzdGF0ZV9jeXRob25f XywgTUVUSF9PLCAwfSwKLSsgIHswLCAwLCAwLCAwfQotK307Ci0gCi0tICAvKiAiKHRyZWUgZnJh Z21lbnQpIjoxCi0tICogZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50KF9fcHl4X3R5cGUsIGxvbmcg X19weXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgotLSAqICAgICBjZGVmIG9i amVjdCBfX3B5eF9yZXN1bHQKLS0gKi8KLStzdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgPSB7Ci0rICBQeVZhck9iamVjdF9I RUFEX0lOSVQoMCwgMCkKLSsgICJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dCIsIC8q dHBfbmFtZSovCi0rICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyQ29udGV4dCksIC8qdHBfYmFzaWNzaXplKi8KLSsgIDAsIC8qdHBfaXRlbXNpemUq LwotKyAgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dCwgLyp0cF9kZWFsbG9jKi8KLSsgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKLSsg IDAsIC8qdHBfcHJpbnQqLwotKyAgI2VuZGlmCi0rICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgw MzA4MDBiNAotKyAgMCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCi0rICAjZW5kaWYKLSsgIDAs IC8qdHBfZ2V0YXR0ciovCi0rICAwLCAvKnRwX3NldGF0dHIqLwotKyAgI2lmIFBZX01BSk9SX1ZF UlNJT04gPCAzCi0rICAwLCAvKnRwX2NvbXBhcmUqLwotKyAgI2VuZGlmCi0rICAjaWYgUFlfTUFK T1JfVkVSU0lPTiA+PSAzCi0rICAwLCAvKnRwX2FzX2FzeW5jKi8KLSsgICNlbmRpZgotKyAgMCwg Lyp0cF9yZXByKi8KLSsgIDAsIC8qdHBfYXNfbnVtYmVyKi8KLSsgIDAsIC8qdHBfYXNfc2VxdWVu Y2UqLwotKyAgMCwgLyp0cF9hc19tYXBwaW5nKi8KLSsgIDAsIC8qdHBfaGFzaCovCi0rICAwLCAv KnRwX2NhbGwqLwotKyAgMCwgLyp0cF9zdHIqLwotKyAgMCwgLyp0cF9nZXRhdHRybyovCi0rICAw LCAvKnRwX3NldGF0dHJvKi8KLSsgIDAsIC8qdHBfYXNfYnVmZmVyKi8KLSsgIFB5X1RQRkxBR1Nf REVGQVVMVHxQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVT fFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdT X0hBVkVfR0MsIC8qdHBfZmxhZ3MqLwotKyAgMCwgLyp0cF9kb2MqLwotKyAgX19weXhfdHBfdHJh dmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBfdHJhdmVyc2Uq LwotKyAgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQs IC8qdHBfY2xlYXIqLwotKyAgMCwgLyp0cF9yaWNoY29tcGFyZSovCi0rICAwLCAvKnRwX3dlYWts aXN0b2Zmc2V0Ki8KLSsgIDAsIC8qdHBfaXRlciovCi0rICAwLCAvKnRwX2l0ZXJuZXh0Ki8KLSsg IF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBf bWV0aG9kcyovCi0rICAwLCAvKnRwX21lbWJlcnMqLwotKyAgMCwgLyp0cF9nZXRzZXQqLwotKyAg MCwgLyp0cF9iYXNlKi8KLSsgIDAsIC8qdHBfZGljdCovCi0rICAwLCAvKnRwX2Rlc2NyX2dldCov Ci0rICAwLCAvKnRwX2Rlc2NyX3NldCovCi0rICAwLCAvKnRwX2RpY3RvZmZzZXQqLwotKyAgX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xX19pbml0X18sIC8q dHBfaW5pdCovCi0rICAwLCAvKnRwX2FsbG9jKi8KLSsgIF9fcHl4X3RwX25ld185dmlkY3V0dGVy XzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgLyp0cF9uZXcqLwotKyAgMCwgLyp0cF9mcmVlKi8K LSsgIDAsIC8qdHBfaXNfZ2MqLwotKyAgMCwgLyp0cF9iYXNlcyovCi0rICAwLCAvKnRwX21ybyov Ci0rICAwLCAvKnRwX2NhY2hlKi8KLSsgIDAsIC8qdHBfc3ViY2xhc3NlcyovCi0rICAwLCAvKnRw X3dlYWtsaXN0Ki8KLSsgIDAsIC8qdHBfZGVsKi8KLSsgIDAsIC8qdHBfdmVyc2lvbl90YWcqLwot KyAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEKLSsgIDAsIC8qdHBfZmluYWxpemUq LwotKyAgI2VuZGlmCi0rICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMSAmJiAoIUNZ VEhPTl9DT01QSUxJTkdfSU5fUFlQWSB8fCBQWVBZX1ZFUlNJT05fTlVNID49IDB4MDcwMzA4MDAp Ci0rICAwLCAvKnRwX3ZlY3RvcmNhbGwqLwotKyAgI2VuZGlmCi0rICAjaWYgUFlfVkVSU0lPTl9I RVggPj0gMHgwMzA4MDBiNCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwOTAwMDAKLSsgIDAsIC8q dHBfcHJpbnQqLwotKyAgI2VuZGlmCi0rICAjaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZICYm IFBZX1ZFUlNJT05fSEVYID49IDB4MDMwOTAwMDAKLSsgIDAsIC8qdHBfcHlweV9mbGFncyovCi0r ICAjZW5kaWYKLSt9OwotIAotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX3B5eF9M MV9lcnJvcjo7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMyk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNSk7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5fX3B5eF91bnBpY2tsZV9FdmVudCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19w eXhfZmlsZW5hbWUpOwotLSAgX19weXhfciA9IE5VTEw7Ci0tICBfX3B5eF9MMDo7Ci0tICBfX1B5 eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IpOwotLSAgX19QeXhfWERFQ1JFRihf X3B5eF92X19fcHl4X3Jlc3VsdCk7Ci0tICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKLS0gIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0rc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRl ckNvbnRleHQoUHlUeXBlT2JqZWN0ICp0LCBQeU9iamVjdCAqYSwgUHlPYmplY3QgKmspIHsKLSsg IFB5T2JqZWN0ICpvID0gX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJD b250ZXh0KHQsIGEsIGspOwotKyAgaWYgKHVubGlrZWx5KCFvKSkgcmV0dXJuIDA7Ci0rICByZXR1 cm4gbzsKLSB9Ci0gCi0tLyogIih0cmVlIGZyYWdtZW50KSI6MTEKLS0gKiAgICAgICAgIF9fcHl4 X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0 YXRlKQotLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0tICogY2RlZiBfX3B5eF91bnBpY2ts ZV9FdmVudF9fc2V0X3N0YXRlKEV2ZW50IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIF9fcHl4X3Jlc3VsdC5kYXRh ID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzFdOyBf X3B5eF9yZXN1bHQuaWQgPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnJlcGx5X3VzZXJk YXRhID0gX19weXhfc3RhdGVbM10KLS0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDQgYW5k IGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKLS0gKi8KLStzdGF0aWMgUHlNZXRo b2REZWYgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29u dGV4dFtdID0gewotKyAgeyJfX3JlZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0XzNfX3JlZHVjZV9j eXRob25fXywgTUVUSF9OT0FSR1MsIDB9LAotKyAgeyJfX3NldHN0YXRlX2N5dGhvbl9fIiwgKFB5 Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5HTFJlbmRlckNv bnRleHRfNV9fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhfTywgMH0sCi0rICB7MCwgMCwgMCwgMH0K LSt9OwotIAotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdl9fX3B5eF9yZXN1bHQsIFB5T2JqZWN0ICpfX3B5 eF92X19fcHl4X3N0YXRlKSB7Ci0tICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Ci0tICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0t ICBpbnQgX19weXhfdF8yOwotLSAgZW51bSBtcHZfZXZlbnRfaWQgX19weXhfdF8zOwotLSAgaW50 IF9fcHl4X3RfNDsKLS0gIFB5X3NzaXplX3QgX19weXhfdF81OwotLSAgaW50IF9fcHl4X3RfNjsK LS0gIGludCBfX3B5eF90Xzc7Ci0tICBQeU9iamVjdCAqX19weXhfdF84ID0gTlVMTDsKLS0gIFB5 T2JqZWN0ICpfX3B5eF90XzkgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfMTAgPSBOVUxM OwotLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0tICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFt ZSA9IE5VTEw7Ci0tICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZSIsIDApOwotK3N0YXRp YyBQeVR5cGVPYmplY3QgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVu ZGVyQ29udGV4dCA9IHsKLSsgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgwLCAwKQotKyAgInZpZGN1 dHRlci5saWJzLm1wdi5PcGVuR0xSZW5kZXJDb250ZXh0IiwgLyp0cF9uYW1lKi8KLSsgIHNpemVv ZihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250 ZXh0KSwgLyp0cF9iYXNpY3NpemUqLwotKyAgMCwgLyp0cF9pdGVtc2l6ZSovCi0rICBfX3B5eF90 cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LCAvKnRwX2RlYWxs b2MqLwotKyAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBiNAotKyAgMCwgLyp0cF9wcmlu dCovCi0rICAjZW5kaWYKLSsgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0Ci0rICAw LCAvKnRwX3ZlY3RvcmNhbGxfb2Zmc2V0Ki8KLSsgICNlbmRpZgotKyAgMCwgLyp0cF9nZXRhdHRy Ki8KLSsgIDAsIC8qdHBfc2V0YXR0ciovCi0rICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLSsg IDAsIC8qdHBfY29tcGFyZSovCi0rICAjZW5kaWYKLSsgICNpZiBQWV9NQUpPUl9WRVJTSU9OID49 IDMKLSsgIDAsIC8qdHBfYXNfYXN5bmMqLwotKyAgI2VuZGlmCi0rICAwLCAvKnRwX3JlcHIqLwot KyAgMCwgLyp0cF9hc19udW1iZXIqLwotKyAgMCwgLyp0cF9hc19zZXF1ZW5jZSovCi0rICAwLCAv KnRwX2FzX21hcHBpbmcqLwotKyAgMCwgLyp0cF9oYXNoKi8KLSsgIDAsIC8qdHBfY2FsbCovCi0r ICAwLCAvKnRwX3N0ciovCi0rICAwLCAvKnRwX2dldGF0dHJvKi8KLSsgIDAsIC8qdHBfc2V0YXR0 cm8qLwotKyAgMCwgLyp0cF9hc19idWZmZXIqLwotKyAgUHlfVFBGTEFHU19ERUZBVUxUfFB5X1RQ RkxBR1NfSEFWRV9WRVJTSU9OX1RBR3xQeV9UUEZMQUdTX0NIRUNLVFlQRVN8UHlfVFBGTEFHU19I QVZFX05FV0JVRkZFUnxQeV9UUEZMQUdTX0JBU0VUWVBFfFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0 cF9mbGFncyovCi0rICAwLCAvKnRwX2RvYyovCi0rICBfX3B5eF90cF90cmF2ZXJzZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgLyp0cF90cmF2ZXJzZSovCi0rICBfX3B5eF90 cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgLyp0cF9jbGVhciov Ci0rICAwLCAvKnRwX3JpY2hjb21wYXJlKi8KLSsgIDAsIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwot KyAgMCwgLyp0cF9pdGVyKi8KLSsgIDAsIC8qdHBfaXRlcm5leHQqLwotKyAgX19weXhfbWV0aG9k c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCwgLyp0cF9tZXRob2Rz Ki8KLSsgIDAsIC8qdHBfbWVtYmVycyovCi0rICAwLCAvKnRwX2dldHNldCovCi0rICAwLCAvKnRw X2Jhc2UqLwotKyAgMCwgLyp0cF9kaWN0Ki8KLSsgIDAsIC8qdHBfZGVzY3JfZ2V0Ki8KLSsgIDAs IC8qdHBfZGVzY3Jfc2V0Ki8KLSsgIDAsIC8qdHBfZGljdG9mZnNldCovCi0rICBfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0XzFfX2luaXRfXywgLyp0 cF9pbml0Ki8KLSsgIDAsIC8qdHBfYWxsb2MqLwotKyAgX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LCAvKnRwX25ldyovCi0rICAwLCAvKnRwX2Zy ZWUqLwotKyAgMCwgLyp0cF9pc19nYyovCi0rICAwLCAvKnRwX2Jhc2VzKi8KLSsgIDAsIC8qdHBf bXJvKi8KLSsgIDAsIC8qdHBfY2FjaGUqLwotKyAgMCwgLyp0cF9zdWJjbGFzc2VzKi8KLSsgIDAs IC8qdHBfd2Vha2xpc3QqLwotKyAgMCwgLyp0cF9kZWwqLwotKyAgMCwgLyp0cF92ZXJzaW9uX3Rh ZyovCi0rICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA0MDBhMQotKyAgMCwgLyp0cF9maW5h bGl6ZSovCi0rICAjZW5kaWYKLSsgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGIxICYm ICghQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZIHx8IFBZUFlfVkVSU0lPTl9OVU0gPj0gMHgwNzAz MDgwMCkKLSsgIDAsIC8qdHBfdmVjdG9yY2FsbCovCi0rICAjZW5kaWYKLSsgICNpZiBQWV9WRVJT SU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAotKyAg MCwgLyp0cF9wcmludCovCi0rICAjZW5kaWYKLSsgICNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZ UFkgJiYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA5MDAwMAotKyAgMCwgLyp0cF9weXB5X2ZsYWdz Ki8KLSsgICNlbmRpZgotK307Ci0gCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgotLSAqICAg ICByZXR1cm4gX19weXhfcmVzdWx0Ci0tICogY2RlZiBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0 X3N0YXRlKEV2ZW50IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgotLSAqICAgICBf X3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQuZXJyb3IgPSBf X3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LmlkID0gX19weXhfc3RhdGVbMl07IF9fcHl4X3Jl c3VsdC5yZXBseV91c2VyZGF0YSA9IF9fcHl4X3N0YXRlWzNdICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19w eXhfcmVzdWx0LCAnX19kaWN0X18nKToKLS0gKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3Rf Xy51cGRhdGUoX19weXhfc3RhdGVbNF0pCi0tICovCi0tICBpZiAodW5saWtlbHkoX19weXhfdl9f X3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgewotLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlw ZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsKLS0gICAg X19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKLS0gIH0KLS0gIF9fcHl4X3RfMSA9IF9f UHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMCwgbG9uZywgMSwgX19Q eXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7Ci0tICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Ci0tICBfX1B5eF9HT1RSRUYoX19weXhf dl9fX3B5eF9yZXN1bHQtPmRhdGEpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3ZfX19weXhfcmVz dWx0LT5kYXRhKTsKLS0gIF9fcHl4X3ZfX19weXhfcmVzdWx0LT5kYXRhID0gX19weXhfdF8xOwot LSAgX19weXhfdF8xID0gMDsKLS0gIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09 IFB5X05vbmUpKSB7Ci0tICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9u ZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOwotLSAgICBfX1BZWF9FUlIoMSwg MTIsIF9fcHl4X0wxX2Vycm9yKQotLSAgfQotLSAgX19weXhfdF8xID0gX19QeXhfR2V0SXRlbUlu dF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAxLCBsb25nLCAxLCBfX1B5eF9QeUludF9Gcm9t X2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAx MiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fcHl4 X3RfMiA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4 X3RfMiA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDEsIDEyLCBf X3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OwotLSAgX19weXhfdl9fX3B5eF9yZXN1bHQtPmVycm9yID0gX19weXhfdF8yOwotLSAgaWYgKHVu bGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKLS0gICAgUHlFcnJfU2V0 U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBzdWJzY3Jp cHRhYmxlIik7Ci0tICAgIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0tICB9Ci0t ICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUs IDIsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19weXhfdF8zID0gKChlbnVtIG1wdl9ldmVudF9pZClf X1B5eF9QeUludF9Bc19lbnVtX19tcHZfZXZlbnRfaWQoX19weXhfdF8xKSk7IGlmICh1bmxpa2Vs eShQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKLS0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgX19weXhfdl9fX3B5 eF9yZXN1bHQtPmlkID0gX19weXhfdF8zOwotLSAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhf c3RhdGUgPT0gUHlfTm9uZSkpIHsKLS0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv ciwgIidOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7Ci0tICAgIF9fUFlY X0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0tICB9Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9H ZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDMsIGxvbmcsIDEsIF9fUHl4X1B5 SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot LSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwotLSAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19w eXhfcmVzdWx0LT5yZXBseV91c2VyZGF0YSk7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdl9fX3B5 eF9yZXN1bHQtPnJlcGx5X3VzZXJkYXRhKTsKLS0gIF9fcHl4X3ZfX19weXhfcmVzdWx0LT5yZXBs eV91c2VyZGF0YSA9IF9fcHl4X3RfMTsKLS0gIF9fcHl4X3RfMSA9IDA7Ci0rc3RhdGljIHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vy cm9ycyAqX19weXhfZnJlZWxpc3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0 cnVjdF9fX2Vycm9yc1s4XTsKLStzdGF0aWMgaW50IF9fcHl4X2ZyZWVjb3VudF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzID0gMDsKLSAKLS0gIC8qICIo dHJlZSBmcmFnbWVudCkiOjEzCi0tICogY2RlZiBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0 YXRlKEV2ZW50IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgotLSAqICAgICBfX3B5 eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5 eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LmlkID0gX19weXhfc3RhdGVbMl07IF9fcHl4X3Jlc3Vs dC5yZXBseV91c2VyZGF0YSA9IF9fcHl4X3N0YXRlWzNdCi0tICogICAgIGlmIGxlbihfX3B5eF9z dGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51 cGRhdGUoX19weXhfc3RhdGVbNF0pCi0tICovCi0tICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5 eF9zdGF0ZSA9PSBQeV9Ob25lKSkgewotLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVy cm9yLCAib2JqZWN0IG9mIHR5cGUgJ05vbmVUeXBlJyBoYXMgbm8gbGVuKCkiKTsKLS0gICAgX19Q WVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKLS0gIH0KLS0gIF9fcHl4X3RfNSA9IFB5VHVw bGVfR0VUX1NJWkUoX19weXhfdl9fX3B5eF9zdGF0ZSk7IGlmICh1bmxpa2VseShfX3B5eF90XzUg PT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCi0t ICBfX3B5eF90XzYgPSAoKF9fcHl4X3RfNSA+IDQpICE9IDApOwotLSAgaWYgKF9fcHl4X3RfNikg ewotK3N0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f X3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMoUHlUeXBlT2JqZWN0ICp0LCBDWVRIT05fVU5VU0VE IFB5T2JqZWN0ICphLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICprKSB7Ci0rICBQeU9iamVjdCAq bzsKLSsgIGlmIChDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRIT04gJiYgbGlrZWx5KChfX3B5eF9m cmVlY291bnRfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9y cyA+IDApICYgKHQtPnRwX2Jhc2ljc2l6ZSA9PSBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzKSkpKSB7Ci0rICAg IG8gPSAoUHlPYmplY3QqKV9fcHl4X2ZyZWVsaXN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5 eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnNbLS1fX3B5eF9mcmVlY291bnRfOXZpZGN1dHRlcl80bGli c18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9yc107Ci0rICAgIG1lbXNldChvLCAwLCBz aXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVf c3RydWN0X19fZXJyb3JzKSk7Ci0rICAgICh2b2lkKSBQeU9iamVjdF9JTklUKG8sIHQpOwotKyAg ICBQeU9iamVjdF9HQ19UcmFjayhvKTsKLSAgIH0gZWxzZSB7Ci0tICAgIF9fcHl4X3RfNCA9IF9f cHl4X3RfNjsKLS0gICAgZ290byBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU7Ci0rICAgIG8gPSAo KnQtPnRwX2FsbG9jKSh0LCAwKTsKLSsgICAgaWYgKHVubGlrZWx5KCFvKSkgcmV0dXJuIDA7Ci0g ICB9Ci0tICBfX3B5eF90XzYgPSBfX1B5eF9IYXNBdHRyKCgoUHlPYmplY3QgKilfX3B5eF92X19f cHl4X3Jlc3VsdCksIF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA9PSAo KGludCktMSkpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19weXhfdF83 ID0gKF9fcHl4X3RfNiAhPSAwKTsKLS0gIF9fcHl4X3RfNCA9IF9fcHl4X3RfNzsKLS0gIF9fcHl4 X0w0X2Jvb2xfYmlub3BfZG9uZTo7Ci0tICBpZiAoX19weXhfdF80KSB7Ci0tCi0tICAgIC8qICIo dHJlZSBmcmFnbWVudCkiOjE0Ci0tICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3Rh dGVbMF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQu aWQgPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnJlcGx5X3VzZXJkYXRhID0gX19weXhf c3RhdGVbM10KLS0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19w eXhfcmVzdWx0LCAnX19kaWN0X18nKToKLS0gKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3Rf Xy51cGRhdGUoX19weXhfc3RhdGVbNF0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0g Ki8KLS0gICAgX19weXhfdF84ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0 ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7IGlmICh1bmxpa2VseSgh X19weXhfdF84KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhf R09UUkVGKF9fcHl4X3RfOCk7Ci0tICAgIF9fcHl4X3RfOSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0 dHJTdHIoX19weXhfdF84LCBfX3B5eF9uX3NfdXBkYXRlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzkpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYo X19weXhfdF85KTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7 Ci0tICAgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7Ci0t ICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2JqZWN0 IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7Ci0tICAgICAgX19QWVhfRVJSKDEsIDE0LCBfX3B5eF9M MV9lcnJvcikKLS0gICAgfQotLSAgICBfX3B5eF90XzggPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxl KF9fcHl4X3ZfX19weXhfc3RhdGUsIDQsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywg MCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF84KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5 eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfOCk7Ci0tICAgIF9fcHl4X3Rf MTAgPSBOVUxMOwotLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzkpKSkgewotLSAgICAgIF9fcHl4X3RfMTAgPSBQeU1ldGhvZF9H RVRfU0VMRihfX3B5eF90XzkpOwotLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF8xMCkpIHsKLS0g ICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90 XzkpOwotLSAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMTApOwotLSAgICAgICAgX19QeXhf SU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF85LCBm dW5jdGlvbik7Ci0tICAgICAgfQotLSAgICB9Ci0tICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzEw KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzksIF9fcHl4X3RfMTAsIF9fcHl4 X3RfOCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfOSwgX19weXhfdF84KTsK LS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEwKTsgX19weXhfdF8xMCA9IDA7Ci0tICAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOwotLSAgICBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF85KTsgX19weXhf dF85ID0gMDsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0r ICByZXR1cm4gbzsKLSt9Ci0gCi0tICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjEzCi0tICogY2Rl ZiBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKEV2ZW50IF9fcHl4X3Jlc3VsdCwgdHVw bGUgX19weXhfc3RhdGUpOgotLSAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRl WzBdOyBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0Lmlk ID0gX19weXhfc3RhdGVbMl07IF9fcHl4X3Jlc3VsdC5yZXBseV91c2VyZGF0YSA9IF9fcHl4X3N0 YXRlWzNdCi0tICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4 X3Jlc3VsdCwgJ19fZGljdF9fJyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAg ICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbNF0pCi0tICov Ci0rc3RhdGljIHZvaWQgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19w eXhfc2NvcGVfc3RydWN0X19fZXJyb3JzKFB5T2JqZWN0ICpvKSB7Ci0rICBzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKnAg PSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3Ry dWN0X19fZXJyb3JzICopbzsKLSsgIFB5T2JqZWN0X0dDX1VuVHJhY2sobyk7Ci0rICBQeV9DTEVB UihwLT5fX3B5eF92X2ZuKTsKLSsgIGlmIChDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRIT04gJiYg KChfX3B5eF9mcmVlY291bnRfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVj dF9fX2Vycm9ycyA8IDgpICYgKFB5X1RZUEUobyktPnRwX2Jhc2ljc2l6ZSA9PSBzaXplb2Yoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19f ZXJyb3JzKSkpKSB7Ci0rICAgIF9fcHl4X2ZyZWVsaXN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f X3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnNbX19weXhfZnJlZWNvdW50Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMrK10gPSAoKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqKW8p OwotKyAgfSBlbHNlIHsKLSsgICAgKCpQeV9UWVBFKG8pLT50cF9mcmVlKShvKTsKLSAgIH0KLSt9 Ci0gCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMQotLSAqICAgICAgICAgX19weXhfdW5waWNr bGVfRXZlbnRfX3NldF9zdGF0ZSg8RXZlbnQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCi0t ICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKLS0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50 X19zZXRfc3RhdGUoRXZlbnQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5 eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMV07IF9fcHl4X3Jl c3VsdC5pZCA9IF9fcHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQucmVwbHlfdXNlcmRhdGEgPSBf X3B5eF9zdGF0ZVszXQotLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0 cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgotLSAqLwotLQotLSAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCi0tICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwot LSAgZ290byBfX3B5eF9MMDsKLS0gIF9fcHl4X0wxX2Vycm9yOjsKLS0gIF9fUHl4X1hERUNSRUYo X19weXhfdF8xKTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsKLS0gIF9fUHl4X1hERUNS RUYoX19weXhfdF85KTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xMCk7Ci0tICBfX1B5eF9B ZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0 X3N0YXRlIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0t ICBfX3B5eF9yID0gMDsKLS0gIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Ip OwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsK LStzdGF0aWMgaW50IF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5 eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMoUHlPYmplY3QgKm8sIHZpc2l0cHJvYyB2LCB2b2lkICph KSB7Ci0rICBpbnQgZTsKLSsgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKilvOwotKyAgaWYg KHAtPl9fcHl4X3ZfZm4pIHsKLSsgICAgZSA9ICgqdikocC0+X19weXhfdl9mbiwgYSk7IGlmIChl KSByZXR1cm4gZTsKLSsgIH0KLSsgIHJldHVybiAwOwotIH0KLSAKLS0vKiAiKHRyZWUgZnJhZ21l bnQpIjoxCi0tICogZGVmIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyhfX3B5eF90eXBl LCBsb25nIF9fcHl4X2NoZWNrc3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKLS0gKiAgICAg Y2RlZiBvYmplY3QgX19weXhfcmVzdWx0Ci0tICovCi0tCi0tLyogUHl0aG9uIHdyYXBwZXIgKi8K LS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xN19fcHl4 X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyhQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCi0tc3RhdGljIFB5 TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE3X19weXhfdW5waWNr bGVfUmVuZGVyRnJhbWVJbmZvID0geyJfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8iLCAo UHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTdfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8sIE1FVEhf VkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfTsKLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xN19fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyhQeU9i amVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9r d2RzKSB7Ci0tICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF90eXBlID0gMDsKLS0gIGxvbmcgX19w eXhfdl9fX3B5eF9jaGVja3N1bTsKLS0gIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlID0g MDsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5h bWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotLSAgUHlPYmplY3QgKl9fcHl4 X3IgPSAwOwotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8gKHdyYXBwZXIpIiwg MCk7Ci0tICB7Ci0tICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsm X19weXhfbl9zX3B5eF90eXBlLCZfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCZfX3B5eF9uX3NfcHl4 X3N0YXRlLDB9OwotLSAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCwwfTsKLS0gICAgaWYg KHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7Ci0tICAgICAgUHlfc3NpemVfdCBrd19hcmdzOwotLSAg ICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2Fy Z3MpOwotLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKLS0gICAgICAgIGNhc2UgIDM6IHZhbHVl c1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7Ci0tICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7Ci0tICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9J VEVNKF9fcHl4X2FyZ3MsIDEpOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAg ICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsK LS0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgIGNhc2UgIDA6IGJyZWFrOwot LSAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLS0gICAgICB9 Ci0tICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOwotLSAgICAgIHN3aXRj aCAocG9zX2FyZ3MpIHsKLS0gICAgICAgIGNhc2UgIDA6Ci0tICAgICAgICBpZiAobGlrZWx5KCh2 YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nf cHl4X3R5cGUpKSAhPSAwKSkga3dfYXJncy0tOwotLSAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1 X2FyZ3R1cGxlX2Vycm9yOwotLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotLSAgICAgICAg Y2FzZSAgMToKLS0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGljdF9H ZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhfY2hlY2tzdW0pKSAhPSAwKSkga3df YXJncy0tOwotLSAgICAgICAgZWxzZSB7Ci0tICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJ bnZhbGlkKCJfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8iLCAxLCAzLCAzLCAxKTsgX19Q WVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQotLSAgICAgICAgfQotLSAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOwotLSAgICAgICAgY2FzZSAgMjoKLS0gICAgICAgIGlmIChsaWtlbHkoKHZh bHVlc1syXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19w eXhfc3RhdGUpKSAhPSAwKSkga3dfYXJncy0tOwotLSAgICAgICAgZWxzZSB7Ci0tICAgICAgICAg IF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUlu Zm8iLCAxLCAzLCAzLCAyKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQotLSAgICAg ICAgfQotLSAgICAgIH0KLS0gICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7Ci0tICAg ICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMs IF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJfX3B5eF91bnBpY2tsZV9S ZW5kZXJGcmFtZUluZm8iKSA8IDApKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCi0t ICAgICAgfQotLSAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0g MykgewotLSAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci0tICAgIH0gZWxzZSB7 Ci0tICAgICAgdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKLS0g ICAgICB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOwotLSAgICAg IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7Ci0tICAgIH0KLS0g ICAgX19weXhfdl9fX3B5eF90eXBlID0gdmFsdWVzWzBdOwotLSAgICBfX3B5eF92X19fcHl4X2No ZWNrc3VtID0gX19QeXhfUHlJbnRfQXNfbG9uZyh2YWx1ZXNbMV0pOyBpZiAodW5saWtlbHkoKF9f cHl4X3ZfX19weXhfY2hlY2tzdW0gPT0gKGxvbmcpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBf X1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCi0tICAgIF9fcHl4X3ZfX19weXhfc3RhdGUg PSB2YWx1ZXNbMl07Ci0tICB9Ci0tICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19k b25lOwotLSAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6OwotLSAgX19QeXhfUmFpc2VBcmd0dXBs ZUludmFsaWQoIl9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyIsIDEsIDMsIDMsIFB5VHVw bGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3Ip Ci0tICBfX3B5eF9MM19lcnJvcjo7Ci0tICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5s aWJzLm1wdi5fX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8iLCBfX3B5eF9jbGluZW5vLCBf X3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOwotLSAgcmV0dXJuIE5VTEw7Ci0tICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdf ZG9uZTo7Ci0tICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2X19w eXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvKF9fcHl4X3NlbGYsIF9fcHl4X3ZfX19weXhfdHlw ZSwgX19weXhfdl9fX3B5eF9jaGVja3N1bSwgX19weXhfdl9fX3B5eF9zdGF0ZSk7Ci0tCi0tICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OwotLSAgcmV0dXJuIF9fcHl4X3I7Ci0rc3RhdGljIGludCBfX3B5eF90cF9jbGVhcl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzKFB5T2JqZWN0ICpvKSB7 Ci0rICBQeU9iamVjdCogdG1wOwotKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICpwID0gKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqKW87Ci0r ICB0bXAgPSAoKFB5T2JqZWN0KilwLT5fX3B5eF92X2ZuKTsKLSsgIHAtPl9fcHl4X3ZfZm4gPSBQ eV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0rICBQeV9YREVDUkVGKHRtcCk7Ci0rICByZXR1 cm4gMDsKLSB9Ci0gCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTZfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8oQ1lUSE9OX1VOVVNFRCBQeU9i amVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5 eF92X19fcHl4X2NoZWNrc3VtLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgewotLSAg UHlPYmplY3QgKl9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IgPSAwOwotLSAgUHlPYmplY3QgKl9f cHl4X3ZfX19weXhfcmVzdWx0ID0gMDsKLS0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKLS0g IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBpbnQgX19weXhfdF8xOwotLSAgUHlPYmpl Y3QgKl9fcHl4X3RfMiA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKLS0g IFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5V TEw7Ci0tICBpbnQgX19weXhfdF82OwotLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0tICBjb25z dCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0tICBpbnQgX19weXhfY2xpbmVubyA9IDA7 Ci0tICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfUmVuZGVyRnJh bWVJbmZvIiwgMCk7Ci0tCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0Ci0tICogICAgIGNkZWYg b2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCi0tICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3Vs dAotLSAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweGQ0MWQ4Y2Q6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJv ciBhcyBfX3B5eF9QaWNrbGVFcnJvcgotLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJy b3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZDQxZDhjZCA9ICgpKSIgJSBfX3B5 eF9jaGVja3N1bSkKLS0gKi8KLS0gIF9fcHl4X3RfMSA9ICgoX19weXhfdl9fX3B5eF9jaGVja3N1 bSAhPSAweGQ0MWQ4Y2QpICE9IDApOwotLSAgaWYgKF9fcHl4X3RfMSkgewotLQotLSAgICAvKiAi KHRyZWUgZnJhZ21lbnQpIjo1Ci0tICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotLSAq ICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweGQ0MWQ4Y2Q6Ci0tICogICAgICAgICBmcm9tIHBp Y2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIklu Y29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZDQxZDhjZCA9ICgpKSIgJSBfX3B5eF9jaGVj a3N1bSkKLS0gKiAgICAgX19weXhfcmVzdWx0ID0gUmVuZGVyRnJhbWVJbmZvLl9fbmV3X18oX19w eXhfdHlwZSkKLS0gKi8KLS0gICAgX19weXhfdF8yID0gUHlMaXN0X05ldygxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgICBfX1B5eF9JTkNSRUYoX19weXhfbl9zX1BpY2ts ZUVycm9yKTsKLS0gICAgX19QeXhfR0lWRVJFRihfX3B5eF9uX3NfUGlja2xlRXJyb3IpOwotLSAg ICBQeUxpc3RfU0VUX0lURU0oX19weXhfdF8yLCAwLCBfX3B5eF9uX3NfUGlja2xlRXJyb3IpOwot LSAgICBfX3B5eF90XzMgPSBfX1B5eF9JbXBvcnQoX19weXhfbl9zX3BpY2tsZSwgX19weXhfdF8y LCAtMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wx X2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICAgIF9fcHl4X3RfMiA9IF9fUHl4X0ltcG9y dEZyb20oX19weXhfdF8zLCBfX3B5eF9uX3NfUGlja2xlRXJyb3IpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOwotLSAgICBfX3B5 eF92X19fcHl4X1BpY2tsZUVycm9yID0gX19weXhfdF8yOwotLSAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8yKTsgX19weXhfdF8yID0gMDsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7Ci0rc3RhdGljIFB5VHlwZU9iamVjdCBfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgPSB7Ci0rICBQeVZhck9iamVj dF9IRUFEX0lOSVQoMCwgMCkKLSsgICJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfc2NvcGVfc3Ry dWN0X19fZXJyb3JzIiwgLyp0cF9uYW1lKi8KLSsgIHNpemVvZihzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMpLCAvKnRwX2Jh c2ljc2l6ZSovCi0rICAwLCAvKnRwX2l0ZW1zaXplKi8KLSsgIF9fcHl4X3RwX2RlYWxsb2NfOXZp ZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycywgLyp0cF9kZWFs bG9jKi8KLSsgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKLSsgIDAsIC8qdHBfcHJp bnQqLwotKyAgI2VuZGlmCi0rICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAotKyAg MCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCi0rICAjZW5kaWYKLSsgIDAsIC8qdHBfZ2V0YXR0 ciovCi0rICAwLCAvKnRwX3NldGF0dHIqLwotKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0r ICAwLCAvKnRwX2NvbXBhcmUqLwotKyAgI2VuZGlmCi0rICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+ PSAzCi0rICAwLCAvKnRwX2FzX2FzeW5jKi8KLSsgICNlbmRpZgotKyAgMCwgLyp0cF9yZXByKi8K LSsgIDAsIC8qdHBfYXNfbnVtYmVyKi8KLSsgIDAsIC8qdHBfYXNfc2VxdWVuY2UqLwotKyAgMCwg Lyp0cF9hc19tYXBwaW5nKi8KLSsgIDAsIC8qdHBfaGFzaCovCi0rICAwLCAvKnRwX2NhbGwqLwot KyAgMCwgLyp0cF9zdHIqLwotKyAgMCwgLyp0cF9nZXRhdHRybyovCi0rICAwLCAvKnRwX3NldGF0 dHJvKi8KLSsgIDAsIC8qdHBfYXNfYnVmZmVyKi8KLSsgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9U UEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1Nf SEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KLSsgIDAsIC8q dHBfZG9jKi8KLSsgIF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5 eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMsIC8qdHBfdHJhdmVyc2UqLwotKyAgX19weXhfdHBfY2xl YXJfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycywgLyp0 cF9jbGVhciovCi0rICAwLCAvKnRwX3JpY2hjb21wYXJlKi8KLSsgIDAsIC8qdHBfd2Vha2xpc3Rv ZmZzZXQqLwotKyAgMCwgLyp0cF9pdGVyKi8KLSsgIDAsIC8qdHBfaXRlcm5leHQqLwotKyAgMCwg Lyp0cF9tZXRob2RzKi8KLSsgIDAsIC8qdHBfbWVtYmVycyovCi0rICAwLCAvKnRwX2dldHNldCov Ci0rICAwLCAvKnRwX2Jhc2UqLwotKyAgMCwgLyp0cF9kaWN0Ki8KLSsgIDAsIC8qdHBfZGVzY3Jf Z2V0Ki8KLSsgIDAsIC8qdHBfZGVzY3Jfc2V0Ki8KLSsgIDAsIC8qdHBfZGljdG9mZnNldCovCi0r ICAwLCAvKnRwX2luaXQqLwotKyAgMCwgLyp0cF9hbGxvYyovCi0rICBfX3B5eF90cF9uZXdfOXZp ZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycywgLyp0cF9uZXcq LwotKyAgMCwgLyp0cF9mcmVlKi8KLSsgIDAsIC8qdHBfaXNfZ2MqLwotKyAgMCwgLyp0cF9iYXNl cyovCi0rICAwLCAvKnRwX21ybyovCi0rICAwLCAvKnRwX2NhY2hlKi8KLSsgIDAsIC8qdHBfc3Vi Y2xhc3NlcyovCi0rICAwLCAvKnRwX3dlYWtsaXN0Ki8KLSsgIDAsIC8qdHBfZGVsKi8KLSsgIDAs IC8qdHBfdmVyc2lvbl90YWcqLwotKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEK LSsgIDAsIC8qdHBfZmluYWxpemUqLwotKyAgI2VuZGlmCi0rICAjaWYgUFlfVkVSU0lPTl9IRVgg Pj0gMHgwMzA4MDBiMSAmJiAoIUNZVEhPTl9DT01QSUxJTkdfSU5fUFlQWSB8fCBQWVBZX1ZFUlNJ T05fTlVNID49IDB4MDcwMzA4MDApCi0rICAwLCAvKnRwX3ZlY3RvcmNhbGwqLwotKyAgI2VuZGlm Ci0rICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNCAmJiBQWV9WRVJTSU9OX0hFWCA8 IDB4MDMwOTAwMDAKLSsgIDAsIC8qdHBfcHJpbnQqLwotKyAgI2VuZGlmCi0rICAjaWYgQ1lUSE9O X0NPTVBJTElOR19JTl9QWVBZICYmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwOTAwMDAKLSsgIDAs IC8qdHBfcHlweV9mbGFncyovCi0rICAjZW5kaWYKLSt9OwotIAotLSAgICAvKiAiKHRyZWUgZnJh Z21lbnQpIjo2Ci0tICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4ZDQxZDhjZDoKLS0gKiAg ICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJv cgotLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVj a3N1bXMgKCVzIHZzIDB4ZDQxZDhjZCA9ICgpKSIgJSBfX3B5eF9jaGVja3N1bSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBfX3B5eF9yZXN1bHQgPSBSZW5kZXJGcmFtZUlu Zm8uX19uZXdfXyhfX3B5eF90eXBlKQotLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9u ZToKLS0gKi8KLS0gICAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9sb25nKF9fcHl4X3Zf X19weXhfY2hlY2tzdW0pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA2 LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9f cHl4X3RfNCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdChfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9j aGVja3N1bXNfc192c18weGQ0LCBfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNCk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAg ICBfX1B5eF9JTkNSRUYoX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcik7Ci0tICAgIF9fcHl4X3Rf MiA9IF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3I7IF9fcHl4X3RfNSA9IE5VTEw7Ci0tICAgIGlm IChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhf dF8yKSkpIHsKLS0gICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIp OwotLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewotLSAgICAgICAgUHlPYmplY3QqIGZ1 bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7Ci0tICAgICAgICBfX1B5 eF9JTkNSRUYoX19weXhfdF81KTsKLS0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0t ICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOwotLSAgICAgIH0K LS0gICAgfQotLSAgICBfX3B5eF90XzMgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0Nh bGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzQpOwotLSAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBf X3B5eF90XzQgPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigx LCA2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgICBfX1B5eF9SYWlz ZShfX3B5eF90XzMsIDAsIDAsIDApOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19w eXhfdF8zID0gMDsKLS0gICAgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQotK3N0YXRp YyBQeU1ldGhvZERlZiBfX3B5eF9tZXRob2RzW10gPSB7Ci0rICB7MCwgMCwgMCwgMH0KLSt9Owot IAotLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0Ci0tICogICAgIGNkZWYgb2JqZWN0IF9fcHl4 X1BpY2tsZUVycm9yCi0tICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotLSAqICAgICBp ZiBfX3B5eF9jaGVja3N1bSAhPSAweGQ0MWQ4Y2Q6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9Q aWNrbGVFcnJvcgotLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0 aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZDQxZDhjZCA9ICgpKSIgJSBfX3B5eF9jaGVja3N1bSkK LS0gKi8KLS0gIH0KLSsjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0rI2lmIENZVEhPTl9QRVA0 ODlfTVVMVElfUEhBU0VfSU5JVAotK3N0YXRpYyBQeU9iamVjdCogX19weXhfcHltb2RfY3JlYXRl KFB5T2JqZWN0ICpzcGVjLCBQeU1vZHVsZURlZiAqZGVmKTsgLypwcm90byovCi0rc3RhdGljIGlu dCBfX3B5eF9weW1vZF9leGVjX21wdihQeU9iamVjdCogbW9kdWxlKTsgLypwcm90byovCi0rc3Rh dGljIFB5TW9kdWxlRGVmX1Nsb3QgX19weXhfbW9kdWxlZGVmX3Nsb3RzW10gPSB7Ci0rICB7UHlf bW9kX2NyZWF0ZSwgKHZvaWQqKV9fcHl4X3B5bW9kX2NyZWF0ZX0sCi0rICB7UHlfbW9kX2V4ZWMs ICh2b2lkKilfX3B5eF9weW1vZF9leGVjX21wdn0sCi0rICB7MCwgTlVMTH0KLSt9OwotKyNlbmRp ZgotIAotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6NwotLSAqICAgICAgICAgZnJvbSBwaWNrbGUg aW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCi0tICogICAgICAgICByYWlz ZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhkNDFk OGNkID0gKCkpIiAlIF9fcHl4X2NoZWNrc3VtKQotLSAqICAgICBfX3B5eF9yZXN1bHQgPSBSZW5k ZXJGcmFtZUluZm8uX19uZXdfXyhfX3B5eF90eXBlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgotLSAqICAgICAgICAgX19w eXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoPFJlbmRlckZyYW1lSW5mbz4g X19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLS0gKi8KLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5 T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJGcmFtZUluZm8pLCBfX3B5eF9uX3NfbmV3KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKLS0gIF9fcHl4X3RfNCA9IE5VTEw7Ci0tICBpZiAoQ1lUSE9OX1VOUEFD S19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotLSAgICBf X3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwotLSAgICBpZiAobGlrZWx5 KF9fcHl4X3RfNCkpIHsKLS0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRf RlVOQ1RJT04oX19weXhfdF8yKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsKLS0g ICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19w eXhfdF8yLCBmdW5jdGlvbik7Ci0tICAgIH0KLS0gIH0KLS0gIF9fcHl4X3RfMyA9IChfX3B5eF90 XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5 eF92X19fcHl4X3R5cGUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9f cHl4X3ZfX19weXhfdHlwZSk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3Rf NCA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA3LCBfX3B5 eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICBfX3B5eF92X19fcHl4X3Jlc3VsdCA9IF9f cHl4X3RfMzsKLS0gIF9fcHl4X3RfMyA9IDA7Ci0tCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo4 Ci0tICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNr c3VtcyAoJXMgdnMgMHhkNDFkOGNkID0gKCkpIiAlIF9fcHl4X2NoZWNrc3VtKQotLSAqICAgICBf X3B5eF9yZXN1bHQgPSBSZW5kZXJGcmFtZUluZm8uX19uZXdfXyhfX3B5eF90eXBlKQotLSAqICAg ICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUo PFJlbmRlckZyYW1lSW5mbz4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLS0gKiAgICAgcmV0 dXJuIF9fcHl4X3Jlc3VsdAotLSAqLwotLSAgX19weXhfdF8xID0gKF9fcHl4X3ZfX19weXhfc3Rh dGUgIT0gUHlfTm9uZSk7Ci0tICBfX3B5eF90XzYgPSAoX19weXhfdF8xICE9IDApOwotLSAgaWYg KF9fcHl4X3RfNikgewotLQotLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo5Ci0tICogICAgIF9f cHl4X3Jlc3VsdCA9IFJlbmRlckZyYW1lSW5mby5fX25ld19fKF9fcHl4X3R5cGUpCi0tICogICAg IGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgotLSAqICAgICAgICAgX19weXhfdW5waWNrbGVf UmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoPFJlbmRlckZyYW1lSW5mbz4gX19weXhfcmVzdWx0 LCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICByZXR1 cm4gX19weXhfcmVzdWx0Ci0tICogY2RlZiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9f X3NldF9zdGF0ZShSZW5kZXJGcmFtZUluZm8gX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0 ZSk6Ci0tICovCi0tICAgIGlmICghKGxpa2VseShQeVR1cGxlX0NoZWNrRXhhY3QoX19weXhfdl9f X3B5eF9zdGF0ZSkpfHwoKF9fcHl4X3ZfX19weXhfc3RhdGUpID09IFB5X05vbmUpfHwoUHlFcnJf Rm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkV4cGVjdGVkICUuMTZzLCBnb3QgJS4yMDBzIiwgInR1 cGxlIiwgUHlfVFlQRShfX3B5eF92X19fcHl4X3N0YXRlKS0+dHBfbmFtZSksIDApKSkgX19QWVhf RVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX3B5eF90XzMgPSBfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0 ZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5m byAqKV9fcHl4X3ZfX19weXhfcmVzdWx0KSwgKChQeU9iamVjdCopX19weXhfdl9fX3B5eF9zdGF0 ZSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA5LCBfX3B5eF9MMV9l cnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLQotLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo4 Ci0tICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNr c3VtcyAoJXMgdnMgMHhkNDFkOGNkID0gKCkpIiAlIF9fcHl4X2NoZWNrc3VtKQotLSAqICAgICBf X3B5eF9yZXN1bHQgPSBSZW5kZXJGcmFtZUluZm8uX19uZXdfXyhfX3B5eF90eXBlKQotLSAqICAg ICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUo PFJlbmRlckZyYW1lSW5mbz4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKLS0gKiAgICAgcmV0 dXJuIF9fcHl4X3Jlc3VsdAotLSAqLwotLSAgfQotLQotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6 MTAKLS0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6Ci0tICogICAgICAgICBfX3B5 eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZSg8UmVuZGVyRnJhbWVJbmZvPiBf X3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQotLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiBjZGVmIF9fcHl4X3VucGlja2xlX1JlbmRl ckZyYW1lSW5mb19fc2V0X3N0YXRlKFJlbmRlckZyYW1lSW5mbyBfX3B5eF9yZXN1bHQsIHR1cGxl IF9fcHl4X3N0YXRlKToKLS0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDAgYW5kIGhhc2F0 dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKLS0gKi8KLS0gIF9fUHl4X1hERUNSRUYoX19w eXhfcik7Ci0tICBfX1B5eF9JTkNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQpOwotLSAgX19weXhf ciA9IF9fcHl4X3ZfX19weXhfcmVzdWx0OwotLSAgZ290byBfX3B5eF9MMDsKLS0KLS0gIC8qICIo dHJlZSBmcmFnbWVudCkiOjEKLS0gKiBkZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZv KF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRlKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJv cgotLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKLS0gKi8KLS0KLS0gIC8qIGZ1bmN0 aW9uIGV4aXQgY29kZSAqLwotLSAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihf X3B5eF90XzIpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOwotLSAgX19QeXhfWERFQ1JF RihfX3B5eF90XzQpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOwotLSAgX19QeXhfQWRk VHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJ bmZvIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICBf X3B5eF9yID0gTlVMTDsKLS0gIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9f X3B5eF9QaWNrbGVFcnJvcik7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0 KTsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0tCi0tLyogIih0cmVlIGZyYWdtZW50 KSI6MTEKLS0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0 YXRlKDxSZW5kZXJGcmFtZUluZm8+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCi0tICogICAg IHJldHVybiBfX3B5eF9yZXN1bHQKLS0gKiBjZGVmIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1l SW5mb19fc2V0X3N0YXRlKFJlbmRlckZyYW1lSW5mbyBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4 X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBpZiBsZW4oX19w eXhfc3RhdGUpID4gMCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgotLSAq ICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVswXSkKLS0g Ki8KLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19f cHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqX19weXhfdl9fX3B5eF9yZXN1 bHQsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7Ci0tICBQeU9iamVjdCAqX19weXhf ciA9IE5VTEw7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgaW50IF9fcHl4X3Rf MTsKLS0gIFB5X3NzaXplX3QgX19weXhfdF8yOwotLSAgaW50IF9fcHl4X3RfMzsKLS0gIGludCBf X3B5eF90XzQ7Ci0tICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpf X3B5eF90XzYgPSBOVUxMOwotLSAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7Ci0tICBQeU9i amVjdCAqX19weXhfdF84ID0gTlVMTDsKLS0gIGludCBfX3B5eF9saW5lbm8gPSAwOwotLSAgY29u c3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwotLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAw OwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX1JlbmRlckZy YW1lSW5mb19fc2V0X3N0YXRlIiwgMCk7Ci0tCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgot LSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0tICogY2RlZiBfX3B5eF91bnBpY2tsZV9SZW5k ZXJGcmFtZUluZm9fX3NldF9zdGF0ZShSZW5kZXJGcmFtZUluZm8gX19weXhfcmVzdWx0LCB0dXBs ZSBfX3B5eF9zdGF0ZSk6Ci0tICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAwIGFuZCBoYXNh dHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVb MF0pCi0tICovCi0tICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25l KSkgewotLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAib2JqZWN0IG9mIHR5 cGUgJ05vbmVUeXBlJyBoYXMgbm8gbGVuKCkiKTsKLS0gICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5 eF9MMV9lcnJvcikKLS0gIH0KLS0gIF9fcHl4X3RfMiA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhf dl9fX3B5eF9zdGF0ZSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPT0gKChQeV9zc2l6ZV90KS0x KSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF90XzMgPSAoKF9f cHl4X3RfMiA+IDApICE9IDApOwotLSAgaWYgKF9fcHl4X3RfMykgewotLSAgfSBlbHNlIHsKLS0g ICAgX19weXhfdF8xID0gX19weXhfdF8zOwotLSAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3Bf ZG9uZTsKLS0gIH0KLS0gIF9fcHl4X3RfMyA9IF9fUHl4X0hhc0F0dHIoKChQeU9iamVjdCAqKV9f cHl4X3ZfX19weXhfcmVzdWx0KSwgX19weXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoX19weXhf dF8zID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCi0tICBf X3B5eF90XzQgPSAoX19weXhfdF8zICE9IDApOwotLSAgX19weXhfdF8xID0gX19weXhfdF80Owot LSAgX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKLS0gIGlmIChfX3B5eF90XzEpIHsKLS0KLS0g ICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKLS0gKiBjZGVmIF9fcHl4X3VucGlja2xlX1JlbmRl ckZyYW1lSW5mb19fc2V0X3N0YXRlKFJlbmRlckZyYW1lSW5mbyBfX3B5eF9yZXN1bHQsIHR1cGxl IF9fcHl4X3N0YXRlKToKLS0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDAgYW5kIGhhc2F0 dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKLS0gKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5f X2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbMF0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKi8KLS0gICAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5 T2JqZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKLS0gICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5T2JqZWN0 X0dldEF0dHJTdHIoX19weXhfdF82LCBfX3B5eF9uX3NfdXBkYXRlKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF83KTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3Rf NiA9IDA7Ci0tICAgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUp KSB7Ci0tICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScg b2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7Ci0tICAgICAgX19QWVhfRVJSKDEsIDEzLCBf X3B5eF9MMV9lcnJvcikKLS0gICAgfQotLSAgICBfX3B5eF90XzYgPSBfX1B5eF9HZXRJdGVtSW50 X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDAsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21f bG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEz LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICAgIF9f cHl4X3RfOCA9IE5VTEw7Ci0tICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5 KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNykpKSB7Ci0tICAgICAgX19weXhfdF84ID0gUHlNZXRo b2RfR0VUX1NFTEYoX19weXhfdF83KTsKLS0gICAgICBpZiAobGlrZWx5KF9fcHl4X3RfOCkpIHsK LS0gICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5 eF90XzcpOwotLSAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfOCk7Ci0tICAgICAgICBfX1B5 eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90Xzcs IGZ1bmN0aW9uKTsKLS0gICAgICB9Ci0tICAgIH0KLS0gICAgX19weXhfdF81ID0gKF9fcHl4X3Rf OCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF83LCBfX3B5eF90XzgsIF9fcHl4 X3RfNikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNywgX19weXhfdF82KTsK LS0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOwotLSAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0gICAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzUpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF81KTsKLS0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3Rf NyA9IDA7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotLQot LSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgotLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0 Ci0tICogY2RlZiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZShSZW5k ZXJGcmFtZUluZm8gX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6Ci0tICogICAgIGlm IGxlbihfX3B5eF9zdGF0ZSkgPiAwIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9f Jyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIF9fcHl4X3Jlc3Vs dC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbMF0pCi0tICovCi0tICB9Ci0tCi0tICAvKiAi KHRyZWUgZnJhZ21lbnQpIjoxMQotLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfUmVuZGVyRnJh bWVJbmZvX19zZXRfc3RhdGUoPFJlbmRlckZyYW1lSW5mbz4gX19weXhfcmVzdWx0LCBfX3B5eF9z dGF0ZSkKLS0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAotLSAqIGNkZWYgX19weXhfdW5waWNr bGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoUmVuZGVyRnJhbWVJbmZvIF9fcHl4X3Jlc3Vs dCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAwIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19f ZGljdF9fJyk6Ci0tICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4 X3N0YXRlWzBdKQotLSAqLwotLQotLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi0tICBfX3B5 eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotLSAgZ290byBfX3B5eF9MMDsK LS0gIF9fcHl4X0wxX2Vycm9yOjsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKLS0gIF9f UHl4X1hERUNSRUYoX19weXhfdF82KTsKLS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsKLS0g IF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsKLS0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0 dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlIiwg X19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICBfX3B5eF9y ID0gMDsKLS0gIF9fcHl4X0wwOjsKLS0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOwotLSAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gX19weXhfcjsKLS19Ci0tc3Rh dGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZp bGVSZWFjaGVkIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVh Y2hlZDsKLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJz XzNtcHZfRW5kT2ZGaWxlUmVhY2hlZChQeVR5cGVPYmplY3QgKnQsIENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKmEsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKLS0gIHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKnA7Ci0tICBQeU9iamVj dCAqbzsKLS0gIGlmIChsaWtlbHkoKHQtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19JU19BQlNUUkFD VCkgPT0gMCkpIHsKLS0gICAgbyA9ICgqdC0+dHBfYWxsb2MpKHQsIDApOwotLSAgfSBlbHNlIHsK LS0gICAgbyA9IChQeU9iamVjdCAqKSBQeUJhc2VPYmplY3RfVHlwZS50cF9uZXcodCwgX19weXhf ZW1wdHlfdHVwbGUsIDApOwotLSAgfQotLSAgaWYgKHVubGlrZWx5KCFvKSkgcmV0dXJuIDA7Ci0t ICBwID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVS ZWFjaGVkICopbyk7Ci0tICBwLT5fX3B5eF92dGFiID0gX19weXhfdnRhYnB0cl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZDsKLS0gIHAtPnJlYXNvbiA9IFB5X05vbmU7IFB5 X0lOQ1JFRihQeV9Ob25lKTsKLS0gIHAtPmVycm9yID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05v bmUpOwotLSAgcmV0dXJuIG87Ci0tfQotLQotLXN0YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxsb2Nf OXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQoUHlPYmplY3QgKm8pIHsKLS0g IHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQg KnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVh Y2hlZCAqKW87Ci0tICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5BTElaRQotLSAgaWYgKHVubGlrZWx5 KFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkg JiYgUHlfVFlQRShvKS0+dHBfZmluYWxpemUpICYmICFfUHlHQ19GSU5BTElaRUQobykpIHsKLS0g ICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhvKSkgcmV0dXJuOwotLSAg fQotK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX19weXhfbW9kdWxlZGVmID0gewotKyAgICBQ eU1vZHVsZURlZl9IRUFEX0lOSVQsCi0rICAgICJtcHYiLAotKyAgICBfX3B5eF9rX3B5bXB2X1B5 dGhvbl93cmFwcGVyX2Zvcl9saWJtcHYsIC8qIG1fZG9jICovCi0rICAjaWYgQ1lUSE9OX1BFUDQ4 OV9NVUxUSV9QSEFTRV9JTklUCi0rICAgIDAsIC8qIG1fc2l6ZSAqLwotKyAgI2Vsc2UKLSsgICAg LTEsIC8qIG1fc2l6ZSAqLwotICAgI2VuZGlmCi0tICBQeU9iamVjdF9HQ19VblRyYWNrKG8pOwot LSAgUHlfQ0xFQVIocC0+cmVhc29uKTsKLS0gIFB5X0NMRUFSKHAtPmVycm9yKTsKLS0gICgqUHlf VFlQRShvKS0+dHBfZnJlZSkobyk7Ci0tfQotKyAgICBfX3B5eF9tZXRob2RzIC8qIG1fbWV0aG9k cyAqLywKLSsgICNpZiBDWVRIT05fUEVQNDg5X01VTFRJX1BIQVNFX0lOSVQKLSsgICAgX19weXhf bW9kdWxlZGVmX3Nsb3RzLCAvKiBtX3Nsb3RzICovCi0rICAjZWxzZQotKyAgICBOVUxMLCAvKiBt X3JlbG9hZCAqLwotKyAgI2VuZGlmCi0rICAgIE5VTEwsIC8qIG1fdHJhdmVyc2UgKi8KLSsgICAg TlVMTCwgLyogbV9jbGVhciAqLwotKyAgICBOVUxMIC8qIG1fZnJlZSAqLwotK307Ci0rI2VuZGlm Ci0rI2lmbmRlZiBDWVRIT05fU01BTExfQ09ERQotKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLSsg ICAgI2RlZmluZSBDWVRIT05fU01BTExfQ09ERQotKyNlbGlmIGRlZmluZWQoX19HTlVDX18pICYm IChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gMykp Ci0rICAgICNkZWZpbmUgQ1lUSE9OX1NNQUxMX0NPREUgX19hdHRyaWJ1dGVfXygoY29sZCkpCi0r I2Vsc2UKLSsgICAgI2RlZmluZSBDWVRIT05fU01BTExfQ09ERQotKyNlbmRpZgotKyNlbmRpZgot IAotLXN0YXRpYyBpbnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0Vu ZE9mRmlsZVJlYWNoZWQoUHlPYmplY3QgKm8sIHZpc2l0cHJvYyB2LCB2b2lkICphKSB7Ci0tICBp bnQgZTsKLS0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmls ZVJlYWNoZWQgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5k T2ZGaWxlUmVhY2hlZCAqKW87Ci0tICBpZiAocC0+cmVhc29uKSB7Ci0tICAgIGUgPSAoKnYpKHAt PnJlYXNvbiwgYSk7IGlmIChlKSByZXR1cm4gZTsKLS0gIH0KLS0gIGlmIChwLT5lcnJvcikgewot LSAgICBlID0gKCp2KShwLT5lcnJvciwgYSk7IGlmIChlKSByZXR1cm4gZTsKLS0gIH0KLS0gIHJl dHVybiAwOwotLX0KLS0KLS1zdGF0aWMgaW50IF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKFB5T2JqZWN0ICpvKSB7Ci0tICBQeU9iamVjdCogdG1w OwotLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVh Y2hlZCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZp bGVSZWFjaGVkICopbzsKLS0gIHRtcCA9ICgoUHlPYmplY3QqKXAtPnJlYXNvbik7Ci0tICBwLT5y ZWFzb24gPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0tICBQeV9YREVDUkVGKHRtcCk7 Ci0tICB0bXAgPSAoKFB5T2JqZWN0KilwLT5lcnJvcik7Ci0tICBwLT5lcnJvciA9IFB5X05vbmU7 IFB5X0lOQ1JFRihQeV9Ob25lKTsKLS0gIFB5X1hERUNSRUYodG1wKTsKLS0gIHJldHVybiAwOwot LX0KLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18z bXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9yZWFzb24oUHlPYmplY3QgKm8sIENZVEhPTl9VTlVTRUQg dm9pZCAqeCkgewotLSAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVu ZE9mRmlsZVJlYWNoZWRfNnJlYXNvbl8xX19nZXRfXyhvKTsKLS19Ci0tCi0tc3RhdGljIGludCBf X3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfcmVh c29uKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Ci0t ICBpZiAodikgewotLSAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2 RW5kT2ZGaWxlUmVhY2hlZF82cmVhc29uXzNfX3NldF9fKG8sIHYpOwotLSAgfQotLSAgZWxzZSB7 Ci0tICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVS ZWFjaGVkXzZyZWFzb25fNV9fZGVsX18obyk7Ci0tICB9Ci0tfQotLQotLXN0YXRpYyBQeU9iamVj dCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVk X2Vycm9yKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKLS0gIHJldHVybiBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkXzVlcnJvcl8x X19nZXRfXyhvKTsKLS19Ci0tCi0tc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfZXJyb3IoUHlPYmplY3QgKm8sIFB5T2JqZWN0 ICp2LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKLS0gIGlmICh2KSB7Ci0tICAgIHJldHVybiBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkXzVlcnJvcl8z X19zZXRfXyhvLCB2KTsKLS0gIH0KLS0gIGVsc2UgewotLSAgICByZXR1cm4gX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF81ZXJyb3JfNV9fZGVsX18obyk7 Ci0tICB9Ci0tfQotLQotLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkW10gPSB7Ci0tICB7Il9fcmVkdWNlX2N5dGhv bl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9m RmlsZVJlYWNoZWRfMV9fcmVkdWNlX2N5dGhvbl9fLCBNRVRIX05PQVJHUywgMH0sCi0tICB7Il9f c2V0c3RhdGVfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF8zX19zZXRzdGF0ZV9jeXRob25fXywgTUVUSF9PLCAw fSwKLS0gIHswLCAwLCAwLCAwfQotLX07Ci0tCi0tc3RhdGljIHN0cnVjdCBQeUdldFNldERlZiBf X3B5eF9nZXRzZXRzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkW10gPSB7 Ci0tICB7KGNoYXIgKikicmVhc29uIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTZFbmRPZkZpbGVSZWFjaGVkX3JlYXNvbiwgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkX3JlYXNvbiwgKGNoYXIgKikwLCAwfSwKLS0gIHso Y2hhciAqKSJlcnJvciIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5k T2ZGaWxlUmVhY2hlZF9lcnJvciwgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTZFbmRPZkZpbGVSZWFjaGVkX2Vycm9yLCAoY2hhciAqKTAsIDB9LAotLSAgezAsIDAsIDAsIDAs IDB9Ci0tfTsKLS0KLS1zdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgPSB7Ci0tICBQeVZhck9iamVjdF9IRUFEX0lOSVQo MCwgMCkKLS0gICJ2aWRjdXR0ZXIubGlicy5tcHYuRW5kT2ZGaWxlUmVhY2hlZCIsIC8qdHBfbmFt ZSovCi0tICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5k T2ZGaWxlUmVhY2hlZCksIC8qdHBfYmFzaWNzaXplKi8KLS0gIDAsIC8qdHBfaXRlbXNpemUqLwot LSAgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hl ZCwgLyp0cF9kZWFsbG9jKi8KLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKLS0g IDAsIC8qdHBfcHJpbnQqLwotLSAgI2VuZGlmCi0tICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgw MzA4MDBiNAotLSAgMCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCi0tICAjZW5kaWYKLS0gIDAs IC8qdHBfZ2V0YXR0ciovCi0tICAwLCAvKnRwX3NldGF0dHIqLwotLSAgI2lmIFBZX01BSk9SX1ZF UlNJT04gPCAzCi0tICAwLCAvKnRwX2NvbXBhcmUqLwotLSAgI2VuZGlmCi0tICAjaWYgUFlfTUFK T1JfVkVSU0lPTiA+PSAzCi0tICAwLCAvKnRwX2FzX2FzeW5jKi8KLS0gICNlbmRpZgotLSAgMCwg Lyp0cF9yZXByKi8KLS0gIDAsIC8qdHBfYXNfbnVtYmVyKi8KLS0gIDAsIC8qdHBfYXNfc2VxdWVu Y2UqLwotLSAgMCwgLyp0cF9hc19tYXBwaW5nKi8KLS0gIDAsIC8qdHBfaGFzaCovCi0tICAwLCAv KnRwX2NhbGwqLwotLSAgMCwgLyp0cF9zdHIqLwotLSAgMCwgLyp0cF9nZXRhdHRybyovCi0tICAw LCAvKnRwX3NldGF0dHJvKi8KLS0gIDAsIC8qdHBfYXNfYnVmZmVyKi8KLS0gIFB5X1RQRkxBR1Nf REVGQVVMVHxQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVT fFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdT X0hBVkVfR0MsIC8qdHBfZmxhZ3MqLwotLSAgIkRhdGEgZmllbGQgZm9yIE1QVl9FVkVOVF9FTkRf RklMRSBldmVudHNcblxuICAgIFdyYXBzOiBtcHZfZXZlbnRfZW5kX2ZpbGVcbiAgICAiLCAvKnRw X2RvYyovCi0tICBfX3B5eF90cF90cmF2ZXJzZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZG aWxlUmVhY2hlZCwgLyp0cF90cmF2ZXJzZSovCi0tICBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCwgLyp0cF9jbGVhciovCi0tICAwLCAvKnRwX3Jp Y2hjb21wYXJlKi8KLS0gIDAsIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotLSAgMCwgLyp0cF9pdGVy Ki8KLS0gIDAsIC8qdHBfaXRlcm5leHQqLwotLSAgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRs aWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCwgLyp0cF9tZXRob2RzKi8KLS0gIDAsIC8qdHBfbWVt YmVycyovCi0tICBfX3B5eF9nZXRzZXRzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVS ZWFjaGVkLCAvKnRwX2dldHNldCovCi0tICAwLCAvKnRwX2Jhc2UqLwotLSAgMCwgLyp0cF9kaWN0 Ki8KLS0gIDAsIC8qdHBfZGVzY3JfZ2V0Ki8KLS0gIDAsIC8qdHBfZGVzY3Jfc2V0Ki8KLS0gIDAs IC8qdHBfZGljdG9mZnNldCovCi0tICAwLCAvKnRwX2luaXQqLwotLSAgMCwgLyp0cF9hbGxvYyov Ci0tICBfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQs IC8qdHBfbmV3Ki8KLS0gIDAsIC8qdHBfZnJlZSovCi0tICAwLCAvKnRwX2lzX2djKi8KLS0gIDAs IC8qdHBfYmFzZXMqLwotLSAgMCwgLyp0cF9tcm8qLwotLSAgMCwgLyp0cF9jYWNoZSovCi0tICAw LCAvKnRwX3N1YmNsYXNzZXMqLwotLSAgMCwgLyp0cF93ZWFrbGlzdCovCi0tICAwLCAvKnRwX2Rl bCovCi0tICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAw eDAzMDQwMGExCi0tICAwLCAvKnRwX2ZpbmFsaXplKi8KLS0gICNlbmRpZgotLSAgI2lmIFBZX1ZF UlNJT05fSEVYID49IDB4MDMwODAwYjEKLS0gIDAsIC8qdHBfdmVjdG9yY2FsbCovCi0tICAjZW5k aWYKLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVY IDwgMHgwMzA5MDAwMAotLSAgMCwgLyp0cF9wcmludCovCi0tICAjZW5kaWYKLS19OwotLXN0YXRp YyBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNw YXRjaCBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2g7Ci0t Ci0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0lu cHV0RGlzcGF0Y2goUHlUeXBlT2JqZWN0ICp0LCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICphLCBD WVRIT05fVU5VU0VEIFB5T2JqZWN0ICprKSB7Ci0tICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICpwOwotLSAgUHlPYmplY3QgKm87Ci0tICBpZiAo bGlrZWx5KCh0LT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QpID09IDApKSB7Ci0t ICAgIG8gPSAoKnQtPnRwX2FsbG9jKSh0LCAwKTsKLS0gIH0gZWxzZSB7Ci0tICAgIG8gPSAoUHlP YmplY3QgKikgUHlCYXNlT2JqZWN0X1R5cGUudHBfbmV3KHQsIF9fcHl4X2VtcHR5X3R1cGxlLCAw KTsKLS0gIH0KLS0gIGlmICh1bmxpa2VseSghbykpIHJldHVybiAwOwotLSAgcCA9ICgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqKW8pOwotLSAg cC0+X19weXhfdnRhYiA9IF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0 RGlzcGF0Y2g7Ci0tICBwLT5hcmcwID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotLSAg cC0+dHlwZSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLS0gIHJldHVybiBvOwotLX0K LS0KLS1zdGF0aWMgdm9pZCBfX3B5eF90cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9J bnB1dERpc3BhdGNoKFB5T2JqZWN0ICpvKSB7Ci0tICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKilvOwotLSAgI2lmIENZVEhPTl9VU0VfVFBf RklOQUxJWkUKLS0gIGlmICh1bmxpa2VseShQeVR5cGVfSGFzRmVhdHVyZShQeV9UWVBFKG8pLCBQ eV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmIFB5X1RZUEUobyktPnRwX2ZpbmFsaXplKSAmJiAh X1B5R0NfRklOQUxJWkVEKG8pKSB7Ci0tICAgIGlmIChQeU9iamVjdF9DYWxsRmluYWxpemVyRnJv bURlYWxsb2MobykpIHJldHVybjsKLS0gIH0KLS0gICNlbmRpZgotLSAgUHlPYmplY3RfR0NfVW5U cmFjayhvKTsKLS0gIFB5X0NMRUFSKHAtPmFyZzApOwotLSAgUHlfQ0xFQVIocC0+dHlwZSk7Ci0t ICAoKlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOwotLX0KLS0KLS1zdGF0aWMgaW50IF9fcHl4X3Rw X3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoKFB5T2JqZWN0ICpv LCB2aXNpdHByb2Mgdiwgdm9pZCAqYSkgewotLSAgaW50IGU7Ci0tICBzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICpwID0gKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKilvOwotLSAgaWYgKHAtPmFy ZzApIHsKLS0gICAgZSA9ICgqdikocC0+YXJnMCwgYSk7IGlmIChlKSByZXR1cm4gZTsKLS0gIH0K LS0gIGlmIChwLT50eXBlKSB7Ci0tICAgIGUgPSAoKnYpKHAtPnR5cGUsIGEpOyBpZiAoZSkgcmV0 dXJuIGU7Ci0tICB9Ci0tICByZXR1cm4gMDsKLS19Ci0tCi0tc3RhdGljIGludCBfX3B5eF90cF9j bGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaChQeU9iamVjdCAqbykgewot LSAgUHlPYmplY3QqIHRtcDsKLS0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0lucHV0RGlzcGF0Y2ggKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfSW5wdXREaXNwYXRjaCAqKW87Ci0tICB0bXAgPSAoKFB5T2JqZWN0KilwLT5hcmcwKTsK LS0gIHAtPmFyZzAgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0tICBQeV9YREVDUkVG KHRtcCk7Ci0tICB0bXAgPSAoKFB5T2JqZWN0KilwLT50eXBlKTsKLS0gIHAtPnR5cGUgPSBQeV9O b25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0tICBQeV9YREVDUkVGKHRtcCk7Ci0tICByZXR1cm4g MDsKLS19Ci0tCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfYXJnMChQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2 b2lkICp4KSB7Ci0tICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5w dXREaXNwYXRjaF80YXJnMF8xX19nZXRfXyhvKTsKLS19Ci0tCi0tc3RhdGljIGludCBfX3B5eF9z ZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfYXJnMChQeU9iamVj dCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgewotLSAgaWYgKHYpIHsK LS0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0 Y2hfNGFyZzBfM19fc2V0X18obywgdik7Ci0tICB9Ci0tICBlbHNlIHsKLS0gICAgcmV0dXJuIF9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNGFyZzBfNV9fZGVs X18obyk7Ci0tICB9Ci0tfQotLQotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoX3R5cGUoUHlPYmplY3QgKm8sIENZVEhP Tl9VTlVTRUQgdm9pZCAqeCkgewotLSAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfMV9fZ2V0X18obyk7Ci0tfQotLQotLXN0YXRpYyBp bnQgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoX3R5 cGUoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKLS0g IGlmICh2KSB7Ci0tICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJ bnB1dERpc3BhdGNoXzR0eXBlXzNfX3NldF9fKG8sIHYpOwotLSAgfQotLSAgZWxzZSB7Ci0tICAg IHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzR0 eXBlXzVfX2RlbF9fKG8pOwotLSAgfQotLX0KLS0KLS1zdGF0aWMgUHlNZXRob2REZWYgX19weXhf bWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaFtdID0gewotLSAgeyJf X3JlZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNJbnB1dERpc3BhdGNoXzFfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9 LAotLSAgeyJfX3NldHN0YXRlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfM19fc2V0c3RhdGVfY3l0aG9uX18sIE1F VEhfTywgMH0sCi0tICB7MCwgMCwgMCwgMH0KLS19OwotLQotLXN0YXRpYyBzdHJ1Y3QgUHlHZXRT ZXREZWYgX19weXhfZ2V0c2V0c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaFtd ID0gewotLSAgeyhjaGFyICopImFyZzAiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM0lucHV0RGlzcGF0Y2hfYXJnMCwgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNJbnB1dERpc3BhdGNoX2FyZzAsIChjaGFyICopMCwgMH0sCi0tICB7KGNoYXIgKiki dHlwZSIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRj aF90eXBlLCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0 Y2hfdHlwZSwgKGNoYXIgKikwLCAwfSwKLS0gIHswLCAwLCAwLCAwLCAwfQotLX07Ci0tCi0tc3Rh dGljIFB5VHlwZU9iamVjdCBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERp c3BhdGNoID0gewotLSAgUHlWYXJPYmplY3RfSEVBRF9JTklUKDAsIDApCi0tICAidmlkY3V0dGVy LmxpYnMubXB2LklucHV0RGlzcGF0Y2giLCAvKnRwX25hbWUqLwotLSAgc2l6ZW9mKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2gpLCAvKnRwX2Jhc2lj c2l6ZSovCi0tICAwLCAvKnRwX2l0ZW1zaXplKi8KLS0gIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1 dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2gsIC8qdHBfZGVhbGxvYyovCi0tICAjaWYgUFlf VkVSU0lPTl9IRVggPCAweDAzMDgwMGI0Ci0tICAwLCAvKnRwX3ByaW50Ki8KLS0gICNlbmRpZgot LSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQKLS0gIDAsIC8qdHBfdmVjdG9yY2Fs bF9vZmZzZXQqLwotLSAgI2VuZGlmCi0tICAwLCAvKnRwX2dldGF0dHIqLwotLSAgMCwgLyp0cF9z ZXRhdHRyKi8KLS0gICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotLSAgMCwgLyp0cF9jb21wYXJl Ki8KLS0gICNlbmRpZgotLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotLSAgMCwgLyp0cF9h c19hc3luYyovCi0tICAjZW5kaWYKLS0gIDAsIC8qdHBfcmVwciovCi0tICAwLCAvKnRwX2FzX251 bWJlciovCi0tICAwLCAvKnRwX2FzX3NlcXVlbmNlKi8KLS0gIDAsIC8qdHBfYXNfbWFwcGluZyov Ci0tICAwLCAvKnRwX2hhc2gqLwotLSAgMCwgLyp0cF9jYWxsKi8KLS0gIDAsIC8qdHBfc3RyKi8K LS0gIDAsIC8qdHBfZ2V0YXR0cm8qLwotLSAgMCwgLyp0cF9zZXRhdHRybyovCi0tICAwLCAvKnRw X2FzX2J1ZmZlciovCi0tICBQeV9UUEZMQUdTX0RFRkFVTFR8UHlfVFBGTEFHU19IQVZFX1ZFUlNJ T05fVEFHfFB5X1RQRkxBR1NfQ0hFQ0tUWVBFU3xQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSfFB5 X1RQRkxBR1NfQkFTRVRZUEV8UHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KLS0gICJE YXRhIGZpZWxkIGZvciBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENIIGV2ZW50cy5cblxu ICAgIFdyYXBzOiBtcHZfZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3BhdGNoXG4gICAgIiwgLyp0cF9k b2MqLwotLSAgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlz cGF0Y2gsIC8qdHBfdHJhdmVyc2UqLwotLSAgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGli c18zbXB2X0lucHV0RGlzcGF0Y2gsIC8qdHBfY2xlYXIqLwotLSAgMCwgLyp0cF9yaWNoY29tcGFy ZSovCi0tICAwLCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KLS0gIDAsIC8qdHBfaXRlciovCi0tICAw LCAvKnRwX2l0ZXJuZXh0Ki8KLS0gIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2 X0lucHV0RGlzcGF0Y2gsIC8qdHBfbWV0aG9kcyovCi0tICAwLCAvKnRwX21lbWJlcnMqLwotLSAg X19weXhfZ2V0c2V0c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCwgLyp0cF9n ZXRzZXQqLwotLSAgMCwgLyp0cF9iYXNlKi8KLS0gIDAsIC8qdHBfZGljdCovCi0tICAwLCAvKnRw X2Rlc2NyX2dldCovCi0tICAwLCAvKnRwX2Rlc2NyX3NldCovCi0tICAwLCAvKnRwX2RpY3RvZmZz ZXQqLwotLSAgMCwgLyp0cF9pbml0Ki8KLS0gIDAsIC8qdHBfYWxsb2MqLwotLSAgX19weXhfdHBf bmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoLCAvKnRwX25ldyovCi0tICAw LCAvKnRwX2ZyZWUqLwotLSAgMCwgLyp0cF9pc19nYyovCi0tICAwLCAvKnRwX2Jhc2VzKi8KLS0g IDAsIC8qdHBfbXJvKi8KLS0gIDAsIC8qdHBfY2FjaGUqLwotLSAgMCwgLyp0cF9zdWJjbGFzc2Vz Ki8KLS0gIDAsIC8qdHBfd2Vha2xpc3QqLwotLSAgMCwgLyp0cF9kZWwqLwotLSAgMCwgLyp0cF92 ZXJzaW9uX3RhZyovCi0tICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA0MDBhMQotLSAgMCwg Lyp0cF9maW5hbGl6ZSovCi0tICAjZW5kaWYKLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAz MDgwMGIxCi0tICAwLCAvKnRwX3ZlY3RvcmNhbGwqLwotLSAgI2VuZGlmCi0tICAjaWYgUFlfVkVS U0lPTl9IRVggPj0gMHgwMzA4MDBiNCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwOTAwMDAKLS0g IDAsIC8qdHBfcHJpbnQqLwotLSAgI2VuZGlmCi0tfTsKLS1zdGF0aWMgc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgX19weXhfdnRhYmxlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlOwotLQotLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKFB5VHlwZU9iamVjdCAq dCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqYSwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqaykg ewotLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAq cDsKLS0gIFB5T2JqZWN0ICpvOwotLSAgaWYgKGxpa2VseSgodC0+dHBfZmxhZ3MgJiBQeV9UUEZM QUdTX0lTX0FCU1RSQUNUKSA9PSAwKSkgewotLSAgICBvID0gKCp0LT50cF9hbGxvYykodCwgMCk7 Ci0tICB9IGVsc2UgewotLSAgICBvID0gKFB5T2JqZWN0ICopIFB5QmFzZU9iamVjdF9UeXBlLnRw X25ldyh0LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7Ci0tICB9Ci0tICBpZiAodW5saWtlbHkoIW8p KSByZXR1cm4gMDsKLS0gIHAgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2UgKilvKTsKLS0gIHAtPl9fcHl4X3Z0YWIgPSBfX3B5eF92dGFicHRyXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlOwotLSAgcC0+cHJlZml4ID0gUHlfTm9uZTsg UHlfSU5DUkVGKFB5X05vbmUpOwotLSAgcC0+bGV2ZWwgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlf Tm9uZSk7Ci0tICBwLT50ZXh0ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotLSAgcC0+ bG9nX2xldmVsID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotLSAgcmV0dXJuIG87Ci0t fQotLQotLXN0YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2 X0xvZ01lc3NhZ2UoUHlPYmplY3QgKm8pIHsKLS0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKW87Ci0tICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5BTEla RQotLSAgaWYgKHVubGlrZWx5KFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQRkxB R1NfSEFWRV9GSU5BTElaRSkgJiYgUHlfVFlQRShvKS0+dHBfZmluYWxpemUpICYmICFfUHlHQ19G SU5BTElaRUQobykpIHsKLS0gICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxv YyhvKSkgcmV0dXJuOwotLSAgfQotLSAgI2VuZGlmCi0tICBQeU9iamVjdF9HQ19VblRyYWNrKG8p OwotLSAgUHlfQ0xFQVIocC0+cHJlZml4KTsKLS0gIFB5X0NMRUFSKHAtPmxldmVsKTsKLS0gIFB5 X0NMRUFSKHAtPnRleHQpOwotLSAgUHlfQ0xFQVIocC0+bG9nX2xldmVsKTsKLS0gICgqUHlfVFlQ RShvKS0+dHBfZnJlZSkobyk7Ci0tfQotLQotLXN0YXRpYyBpbnQgX19weXhfdHBfdHJhdmVyc2Vf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UoUHlPYmplY3QgKm8sIHZpc2l0cHJvYyB2 LCB2b2lkICphKSB7Ci0tICBpbnQgZTsKLS0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0xvZ01lc3NhZ2UgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfTG9nTWVzc2FnZSAqKW87Ci0tICBpZiAocC0+cHJlZml4KSB7Ci0tICAgIGUgPSAo KnYpKHAtPnByZWZpeCwgYSk7IGlmIChlKSByZXR1cm4gZTsKLS0gIH0KLS0gIGlmIChwLT5sZXZl bCkgewotLSAgICBlID0gKCp2KShwLT5sZXZlbCwgYSk7IGlmIChlKSByZXR1cm4gZTsKLS0gIH0K LS0gIGlmIChwLT50ZXh0KSB7Ci0tICAgIGUgPSAoKnYpKHAtPnRleHQsIGEpOyBpZiAoZSkgcmV0 dXJuIGU7Ci0tICB9Ci0tICBpZiAocC0+bG9nX2xldmVsKSB7Ci0tICAgIGUgPSAoKnYpKHAtPmxv Z19sZXZlbCwgYSk7IGlmIChlKSByZXR1cm4gZTsKLS0gIH0KLS0gIHJldHVybiAwOwotLX0KLS0K LS1zdGF0aWMgaW50IF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlKFB5T2JqZWN0ICpvKSB7Ci0tICBQeU9iamVjdCogdG1wOwotLSAgc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqcCA9IChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopbzsKLS0gIHRtcCA9ICgoUHlPYmpl Y3QqKXAtPnByZWZpeCk7Ci0tICBwLT5wcmVmaXggPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9u ZSk7Ci0tICBQeV9YREVDUkVGKHRtcCk7Ci0tICB0bXAgPSAoKFB5T2JqZWN0KilwLT5sZXZlbCk7 Ci0tICBwLT5sZXZlbCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLS0gIFB5X1hERUNS RUYodG1wKTsKLS0gIHRtcCA9ICgoUHlPYmplY3QqKXAtPnRleHQpOwotLSAgcC0+dGV4dCA9IFB5 X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLS0gIFB5X1hERUNSRUYodG1wKTsKLS0gIHRtcCA9 ICgoUHlPYmplY3QqKXAtPmxvZ19sZXZlbCk7Ci0tICBwLT5sb2dfbGV2ZWwgPSBQeV9Ob25lOyBQ eV9JTkNSRUYoUHlfTm9uZSk7Ci0tICBQeV9YREVDUkVGKHRtcCk7Ci0tICByZXR1cm4gMDsKLS19 Ci0tCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfcHJlZml4KFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngp IHsKLS0gIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdl XzZwcmVmaXhfMV9fZ2V0X18obyk7Ci0tfQotLQotLXN0YXRpYyBpbnQgX19weXhfc2V0cHJvcF85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX3ByZWZpeChQeU9iamVjdCAqbywgUHlP YmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgewotLSAgaWYgKHYpIHsKLS0gICAgcmV0 dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8z X19zZXRfXyhvLCB2KTsKLS0gIH0KLS0gIGVsc2UgewotLSAgICByZXR1cm4gX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzVfX2RlbF9fKG8pOwotLSAg fQotLX0KLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGli c18zbXB2XzEwTG9nTWVzc2FnZV9sZXZlbChQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lk ICp4KSB7Ci0tICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVz c2FnZV81bGV2ZWxfMV9fZ2V0X18obyk7Ci0tfQotLQotLXN0YXRpYyBpbnQgX19weXhfc2V0cHJv cF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX2xldmVsKFB5T2JqZWN0ICpvLCBQ eU9iamVjdCAqdiwgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Ci0tICBpZiAodikgewotLSAgICBy ZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxf M19fc2V0X18obywgdik7Ci0tICB9Ci0tICBlbHNlIHsKLS0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzVfX2RlbF9fKG8pOwotLSAg fQotLX0KLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGli c18zbXB2XzEwTG9nTWVzc2FnZV90ZXh0KFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQg KngpIHsKLS0gIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzR0ZXh0XzFfX2dldF9fKG8pOwotLX0KLS0KLS1zdGF0aWMgaW50IF9fcHl4X3NldHByb3Bf OXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV90ZXh0KFB5T2JqZWN0ICpvLCBQeU9i amVjdCAqdiwgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Ci0tICBpZiAodikgewotLSAgICByZXR1 cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF8zX19z ZXRfXyhvLCB2KTsKLS0gIH0KLS0gIGVsc2UgewotLSAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF81X19kZWxfXyhvKTsKLS0gIH0KLS19 Ci0tCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfbG9nX2xldmVsKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQg KngpIHsKLS0gIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzlsb2dfbGV2ZWxfMV9fZ2V0X18obyk7Ci0tfQotLQotLXN0YXRpYyBpbnQgX19weXhfc2V0 cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX2xvZ19sZXZlbChQeU9iamVj dCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgewotLSAgaWYgKHYpIHsK LS0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2Vf OWxvZ19sZXZlbF8zX19zZXRfXyhvLCB2KTsKLS0gIH0KLS0gIGVsc2UgewotLSAgICByZXR1cm4g X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsXzVf X2RlbF9fKG8pOwotLSAgfQotLX0KLS0KLS1zdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWV0aG9k c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZVtdID0gewotLSAgeyJfX3JlZHVjZV9j eXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBM b2dNZXNzYWdlXzFfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9LAotLSAgeyJfX3Nl dHN0YXRlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xMExvZ01lc3NhZ2VfM19fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhfTywgMH0sCi0tICB7 MCwgMCwgMCwgMH0KLS19OwotLQotLXN0YXRpYyBzdHJ1Y3QgUHlHZXRTZXREZWYgX19weXhfZ2V0 c2V0c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZVtdID0gewotLSAgeyhjaGFyICop InByZWZpeCIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2Fn ZV9wcmVmaXgsIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2Fn ZV9wcmVmaXgsIChjaGFyICopMCwgMH0sCi0tICB7KGNoYXIgKikibGV2ZWwiLCBfX3B5eF9nZXRw cm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfbGV2ZWwsIF9fcHl4X3NldHBy b3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9sZXZlbCwgKGNoYXIgKikwLCAw fSwKLS0gIHsoY2hhciAqKSJ0ZXh0IiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTBMb2dNZXNzYWdlX3RleHQsIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEwTG9nTWVzc2FnZV90ZXh0LCAoY2hhciAqKTAsIDB9LAotLSAgeyhjaGFyICopImxvZ19sZXZl bCIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9sb2df bGV2ZWwsIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9s b2dfbGV2ZWwsIChjaGFyICopMCwgMH0sCi0tICB7MCwgMCwgMCwgMCwgMH0KLS19OwotLQotLXN0 YXRpYyBQeVR5cGVPYmplY3QgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVz c2FnZSA9IHsKLS0gIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgwLCAwKQotLSAgInZpZGN1dHRlci5s aWJzLm1wdi5Mb2dNZXNzYWdlIiwgLyp0cF9uYW1lKi8KLS0gIHNpemVvZihzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKSwgLyp0cF9iYXNpY3NpemUqLwot LSAgMCwgLyp0cF9pdGVtc2l6ZSovCi0tICBfX3B5eF90cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Mb2dNZXNzYWdlLCAvKnRwX2RlYWxsb2MqLwotLSAgI2lmIFBZX1ZFUlNJT05fSEVY IDwgMHgwMzA4MDBiNAotLSAgMCwgLyp0cF9wcmludCovCi0tICAjZW5kaWYKLS0gICNpZiBQWV9W RVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0Ci0tICAwLCAvKnRwX3ZlY3RvcmNhbGxfb2Zmc2V0Ki8K LS0gICNlbmRpZgotLSAgMCwgLyp0cF9nZXRhdHRyKi8KLS0gIDAsIC8qdHBfc2V0YXR0ciovCi0t ICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLS0gIDAsIC8qdHBfY29tcGFyZSovCi0tICAjZW5k aWYKLS0gICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKLS0gIDAsIC8qdHBfYXNfYXN5bmMqLwot LSAgI2VuZGlmCi0tICAwLCAvKnRwX3JlcHIqLwotLSAgMCwgLyp0cF9hc19udW1iZXIqLwotLSAg MCwgLyp0cF9hc19zZXF1ZW5jZSovCi0tICAwLCAvKnRwX2FzX21hcHBpbmcqLwotLSAgMCwgLyp0 cF9oYXNoKi8KLS0gIDAsIC8qdHBfY2FsbCovCi0tICAwLCAvKnRwX3N0ciovCi0tICAwLCAvKnRw X2dldGF0dHJvKi8KLS0gIDAsIC8qdHBfc2V0YXR0cm8qLwotLSAgMCwgLyp0cF9hc19idWZmZXIq LwotLSAgUHlfVFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBR3xQeV9U UEZMQUdTX0NIRUNLVFlQRVN8UHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUnxQeV9UUEZMQUdTX0JB U0VUWVBFfFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCi0tICAiRGF0YSBmaWVsZCBm b3IgTVBWX0VWRU5UX0xPR19NRVNTQUdFIGV2ZW50cy5cblxuICAgIFdyYXBzOiBtcHZfZXZlbnRf bG9nX21lc3NhZ2VcbiAgICAiLCAvKnRwX2RvYyovCi0tICBfX3B5eF90cF90cmF2ZXJzZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSwgLyp0cF90cmF2ZXJzZSovCi0tICBfX3B5eF90 cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSwgLyp0cF9jbGVhciovCi0t ICAwLCAvKnRwX3JpY2hjb21wYXJlKi8KLS0gIDAsIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotLSAg MCwgLyp0cF9pdGVyKi8KLS0gIDAsIC8qdHBfaXRlcm5leHQqLwotLSAgX19weXhfbWV0aG9kc185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSwgLyp0cF9tZXRob2RzKi8KLS0gIDAsIC8q dHBfbWVtYmVycyovCi0tICBfX3B5eF9nZXRzZXRzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlLCAvKnRwX2dldHNldCovCi0tICAwLCAvKnRwX2Jhc2UqLwotLSAgMCwgLyp0cF9kaWN0 Ki8KLS0gIDAsIC8qdHBfZGVzY3JfZ2V0Ki8KLS0gIDAsIC8qdHBfZGVzY3Jfc2V0Ki8KLS0gIDAs IC8qdHBfZGljdG9mZnNldCovCi0tICAwLCAvKnRwX2luaXQqLwotLSAgMCwgLyp0cF9hbGxvYyov Ci0tICBfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UsIC8qdHBf bmV3Ki8KLS0gIDAsIC8qdHBfZnJlZSovCi0tICAwLCAvKnRwX2lzX2djKi8KLS0gIDAsIC8qdHBf YmFzZXMqLwotLSAgMCwgLyp0cF9tcm8qLwotLSAgMCwgLyp0cF9jYWNoZSovCi0tICAwLCAvKnRw X3N1YmNsYXNzZXMqLwotLSAgMCwgLyp0cF93ZWFrbGlzdCovCi0tICAwLCAvKnRwX2RlbCovCi0t ICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDQw MGExCi0tICAwLCAvKnRwX2ZpbmFsaXplKi8KLS0gICNlbmRpZgotLSAgI2lmIFBZX1ZFUlNJT05f SEVYID49IDB4MDMwODAwYjEKLS0gIDAsIC8qdHBfdmVjdG9yY2FsbCovCi0tICAjZW5kaWYKLS0g ICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgw MzA5MDAwMAotLSAgMCwgLyp0cF9wcmludCovCi0tICAjZW5kaWYKLS19OwotLXN0YXRpYyBzdHJ1 Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgX19weXhf dnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eTsKLS0KLS1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkoUHlUeXBlT2Jq ZWN0ICp0LCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICphLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0 ICprKSB7Ci0tICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eSAqcDsKLS0gIFB5T2JqZWN0ICpvOwotLSAgaWYgKGxpa2VseSgodC0+dHBfZmxhZ3MgJiBQeV9U UEZMQUdTX0lTX0FCU1RSQUNUKSA9PSAwKSkgewotLSAgICBvID0gKCp0LT50cF9hbGxvYykodCwg MCk7Ci0tICB9IGVsc2UgewotLSAgICBvID0gKFB5T2JqZWN0ICopIFB5QmFzZU9iamVjdF9UeXBl LnRwX25ldyh0LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7Ci0tICB9Ci0tICBpZiAodW5saWtlbHko IW8pKSByZXR1cm4gMDsKLS0gIHAgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X1Byb3BlcnR5ICopbyk7Ci0tICBwLT5fX3B5eF92dGFiID0gX19weXhfdnRhYnB0cl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHk7Ci0tICBwLT5uYW1lID0gUHlfTm9uZTsgUHlf SU5DUkVGKFB5X05vbmUpOwotLSAgcC0+ZGF0YSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25l KTsKLS0gIHJldHVybiBvOwotLX0KLS0KLS1zdGF0aWMgdm9pZCBfX3B5eF90cF9kZWFsbG9jXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eShQeU9iamVjdCAqbykgewotLSAgc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKnAgPSAoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilvOwotLSAgI2lmIENZVEhPTl9V U0VfVFBfRklOQUxJWkUKLS0gIGlmICh1bmxpa2VseShQeVR5cGVfSGFzRmVhdHVyZShQeV9UWVBF KG8pLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmIFB5X1RZUEUobyktPnRwX2ZpbmFsaXpl KSAmJiAhX1B5R0NfRklOQUxJWkVEKG8pKSB7Ci0tICAgIGlmIChQeU9iamVjdF9DYWxsRmluYWxp emVyRnJvbURlYWxsb2MobykpIHJldHVybjsKLS0gIH0KLS0gICNlbmRpZgotLSAgUHlPYmplY3Rf R0NfVW5UcmFjayhvKTsKLS0gIFB5X0NMRUFSKHAtPm5hbWUpOwotLSAgUHlfQ0xFQVIocC0+ZGF0 YSk7Ci0tICAoKlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOwotLX0KLS0KLS1zdGF0aWMgaW50IF9f cHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eShQeU9iamVjdCAq bywgdmlzaXRwcm9jIHYsIHZvaWQgKmEpIHsKLS0gIGludCBlOwotLSAgc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKnAgPSAoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilvOwotLSAgaWYgKHAtPm5hbWUpIHsKLS0g ICAgZSA9ICgqdikocC0+bmFtZSwgYSk7IGlmIChlKSByZXR1cm4gZTsKLS0gIH0KLS0gIGlmIChw LT5kYXRhKSB7Ci0tICAgIGUgPSAoKnYpKHAtPmRhdGEsIGEpOyBpZiAoZSkgcmV0dXJuIGU7Ci0t ICB9Ci0tICByZXR1cm4gMDsKLS19Ci0tCi0tc3RhdGljIGludCBfX3B5eF90cF9jbGVhcl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkoUHlPYmplY3QgKm8pIHsKLS0gIFB5T2JqZWN0KiB0 bXA7Ci0tICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAq cCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKW87 Ci0tICB0bXAgPSAoKFB5T2JqZWN0KilwLT5uYW1lKTsKLS0gIHAtPm5hbWUgPSBQeV9Ob25lOyBQ eV9JTkNSRUYoUHlfTm9uZSk7Ci0tICBQeV9YREVDUkVGKHRtcCk7Ci0tICB0bXAgPSAoKFB5T2Jq ZWN0KilwLT5kYXRhKTsKLS0gIHAtPmRhdGEgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7 Ci0tICBQeV9YREVDUkVGKHRtcCk7Ci0tICByZXR1cm4gMDsKLS19Ci0tCi0tc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfbmFtZShQ eU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Ci0tICByZXR1cm4gX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV8xX19nZXRfXyhvKTsKLS19Ci0t Ci0tc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVy dHlfbmFtZShQeU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkg ewotLSAgaWYgKHYpIHsKLS0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl84UHJvcGVydHlfNG5hbWVfM19fc2V0X18obywgdik7Ci0tICB9Ci0tICBlbHNlIHsKLS0gICAg cmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVfNV9f ZGVsX18obyk7Ci0tICB9Ci0tfQotLQotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X2RhdGEoUHlPYmplY3QgKm8sIENZVEhPTl9V TlVTRUQgdm9pZCAqeCkgewotLSAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl84UHJvcGVydHlfNGRhdGFfMV9fZ2V0X18obyk7Ci0tfQotLQotLXN0YXRpYyBpbnQgX19weXhf c2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X2RhdGEoUHlPYmplY3QgKm8s IFB5T2JqZWN0ICp2LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKLS0gIGlmICh2KSB7Ci0tICAg IHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzNf X3NldF9fKG8sIHYpOwotLSAgfQotLSAgZWxzZSB7Ci0tICAgIHJldHVybiBfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzVfX2RlbF9fKG8pOwotLSAgfQotLX0K LS0KLS1zdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNt cHZfUHJvcGVydHlbXSA9IHsKLS0gIHsiX19yZWR1Y2VfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24p X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV8xX19yZWR1Y2VfY3l0aG9u X18sIE1FVEhfTk9BUkdTLCAwfSwKLS0gIHsiX19zZXRzdGF0ZV9jeXRob25fXyIsIChQeUNGdW5j dGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzNfX3NldHN0YXRl X2N5dGhvbl9fLCBNRVRIX08sIDB9LAotLSAgezAsIDAsIDAsIDB9Ci0tfTsKLS0KLS1zdGF0aWMg c3RydWN0IFB5R2V0U2V0RGVmIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18zbXB2X1By b3BlcnR5W10gPSB7Ci0tICB7KGNoYXIgKikibmFtZSIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRl cl80bGlic18zbXB2XzhQcm9wZXJ0eV9uYW1lLCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl84UHJvcGVydHlfbmFtZSwgKGNoYXIgKikwLCAwfSwKLS0gIHsoY2hhciAqKSJkYXRh IiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X2RhdGEsIF9f cHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9kYXRhLCAoY2hhciAq KTAsIDB9LAotLSAgezAsIDAsIDAsIDAsIDB9Ci0tfTsKLS0KLS1zdGF0aWMgUHlUeXBlT2JqZWN0 IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ID0gewotLSAgUHlWYXJP YmplY3RfSEVBRF9JTklUKDAsIDApCi0tICAidmlkY3V0dGVyLmxpYnMubXB2LlByb3BlcnR5Iiwg Lyp0cF9uYW1lKi8KLS0gIHNpemVvZihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eSksIC8qdHBfYmFzaWNzaXplKi8KLS0gIDAsIC8qdHBfaXRlbXNpemUqLwot LSAgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHksIC8qdHBf ZGVhbGxvYyovCi0tICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMGI0Ci0tICAwLCAvKnRw X3ByaW50Ki8KLS0gICNlbmRpZgotLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQK LS0gIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQqLwotLSAgI2VuZGlmCi0tICAwLCAvKnRwX2dl dGF0dHIqLwotLSAgMCwgLyp0cF9zZXRhdHRyKi8KLS0gICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwg MwotLSAgMCwgLyp0cF9jb21wYXJlKi8KLS0gICNlbmRpZgotLSAgI2lmIFBZX01BSk9SX1ZFUlNJ T04gPj0gMwotLSAgMCwgLyp0cF9hc19hc3luYyovCi0tICAjZW5kaWYKLS0gIDAsIC8qdHBfcmVw ciovCi0tICAwLCAvKnRwX2FzX251bWJlciovCi0tICAwLCAvKnRwX2FzX3NlcXVlbmNlKi8KLS0g IDAsIC8qdHBfYXNfbWFwcGluZyovCi0tICAwLCAvKnRwX2hhc2gqLwotLSAgMCwgLyp0cF9jYWxs Ki8KLS0gIDAsIC8qdHBfc3RyKi8KLS0gIDAsIC8qdHBfZ2V0YXR0cm8qLwotLSAgMCwgLyp0cF9z ZXRhdHRybyovCi0tICAwLCAvKnRwX2FzX2J1ZmZlciovCi0tICBQeV9UUEZMQUdTX0RFRkFVTFR8 UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5X1RQRkxBR1NfQ0hFQ0tUWVBFU3xQeV9UUEZM QUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1NfQkFTRVRZUEV8UHlfVFBGTEFHU19IQVZFX0dD LCAvKnRwX2ZsYWdzKi8KLS0gICJEYXRhIGZpZWxkIGZvciBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hB TkdFIGFuZCBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZLlxuXG4gICAgV3JhcHM6IG1wdl9l dmVudF9wcm9wZXJ0eVxuICAgICIsIC8qdHBfZG9jKi8KLS0gIF9fcHl4X3RwX3RyYXZlcnNlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSwgLyp0cF90cmF2ZXJzZSovCi0tICBfX3B5eF90 cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHksIC8qdHBfY2xlYXIqLwotLSAg MCwgLyp0cF9yaWNoY29tcGFyZSovCi0tICAwLCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KLS0gIDAs IC8qdHBfaXRlciovCi0tICAwLCAvKnRwX2l0ZXJuZXh0Ki8KLS0gIF9fcHl4X21ldGhvZHNfOXZp ZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5LCAvKnRwX21ldGhvZHMqLwotLSAgMCwgLyp0cF9t ZW1iZXJzKi8KLS0gIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5 LCAvKnRwX2dldHNldCovCi0tICAwLCAvKnRwX2Jhc2UqLwotLSAgMCwgLyp0cF9kaWN0Ki8KLS0g IDAsIC8qdHBfZGVzY3JfZ2V0Ki8KLS0gIDAsIC8qdHBfZGVzY3Jfc2V0Ki8KLS0gIDAsIC8qdHBf ZGljdG9mZnNldCovCi0tICAwLCAvKnRwX2luaXQqLwotLSAgMCwgLyp0cF9hbGxvYyovCi0tICBf X3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5LCAvKnRwX25ldyovCi0t ICAwLCAvKnRwX2ZyZWUqLwotLSAgMCwgLyp0cF9pc19nYyovCi0tICAwLCAvKnRwX2Jhc2VzKi8K LS0gIDAsIC8qdHBfbXJvKi8KLS0gIDAsIC8qdHBfY2FjaGUqLwotLSAgMCwgLyp0cF9zdWJjbGFz c2VzKi8KLS0gIDAsIC8qdHBfd2Vha2xpc3QqLwotLSAgMCwgLyp0cF9kZWwqLwotLSAgMCwgLyp0 cF92ZXJzaW9uX3RhZyovCi0tICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA0MDBhMQotLSAg MCwgLyp0cF9maW5hbGl6ZSovCi0tICAjZW5kaWYKLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAw eDAzMDgwMGIxCi0tICAwLCAvKnRwX3ZlY3RvcmNhbGwqLwotLSAgI2VuZGlmCi0tICAjaWYgUFlf VkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwOTAwMDAK LS0gIDAsIC8qdHBfcHJpbnQqLwotLSAgI2VuZGlmCi0tfTsKLS1zdGF0aWMgc3RydWN0IF9fcHl4 X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50IF9fcHl4X3Z0YWJsZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQ7Ci0tCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9u ZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqYSwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqaykgewotLSAgc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKnA7Ci0tICBQeU9iamVjdCAq bzsKLS0gIGlmIChsaWtlbHkoKHQtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19JU19BQlNUUkFDVCkg PT0gMCkpIHsKLS0gICAgbyA9ICgqdC0+dHBfYWxsb2MpKHQsIDApOwotLSAgfSBlbHNlIHsKLS0g ICAgbyA9IChQeU9iamVjdCAqKSBQeUJhc2VPYmplY3RfVHlwZS50cF9uZXcodCwgX19weXhfZW1w dHlfdHVwbGUsIDApOwotLSAgfQotLSAgaWYgKHVubGlrZWx5KCFvKSkgcmV0dXJuIDA7Ci0tICBw ID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKW8pOwot LSAgcC0+X19weXhfdnRhYiA9IF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2 ZW50OwotLSAgcC0+ZGF0YSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLS0gIHAtPnJl cGx5X3VzZXJkYXRhID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotLSAgcmV0dXJuIG87 Ci0tfQotLQotLXN0YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18z bXB2X0V2ZW50KFB5T2JqZWN0ICpvKSB7Ci0tICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FdmVudCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCAqKW87Ci0tICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5BTElaRQotLSAgaWYgKHVu bGlrZWx5KFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQRkxBR1NfSEFWRV9GSU5B TElaRSkgJiYgUHlfVFlQRShvKS0+dHBfZmluYWxpemUpICYmICFfUHlHQ19GSU5BTElaRUQobykp IHsKLS0gICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhvKSkgcmV0dXJu OwotLSAgfQotLSAgI2VuZGlmCi0tICBQeU9iamVjdF9HQ19VblRyYWNrKG8pOwotLSAgUHlfQ0xF QVIocC0+ZGF0YSk7Ci0tICBQeV9DTEVBUihwLT5yZXBseV91c2VyZGF0YSk7Ci0tICAoKlB5X1RZ UEUobyktPnRwX2ZyZWUpKG8pOwotLX0KLS0KLS1zdGF0aWMgaW50IF9fcHl4X3RwX3RyYXZlcnNl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudChQeU9iamVjdCAqbywgdmlzaXRwcm9jIHYsIHZv aWQgKmEpIHsKLS0gIGludCBlOwotLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRXZlbnQgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RXZlbnQgKilvOwotLSAgaWYgKHAtPmRhdGEpIHsKLS0gICAgZSA9ICgqdikocC0+ZGF0YSwgYSk7 IGlmIChlKSByZXR1cm4gZTsKLS0gIH0KLS0gIGlmIChwLT5yZXBseV91c2VyZGF0YSkgewotLSAg ICBlID0gKCp2KShwLT5yZXBseV91c2VyZGF0YSwgYSk7IGlmIChlKSByZXR1cm4gZTsKLS0gIH0K LS0gIHJldHVybiAwOwotLX0KLS0KLS1zdGF0aWMgaW50IF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FdmVudChQeU9iamVjdCAqbykgewotLSAgUHlPYmplY3QqIHRtcDsKLS0g IHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpwID0gKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopbzsKLS0gIHRtcCA9ICgo UHlPYmplY3QqKXAtPmRhdGEpOwotLSAgcC0+ZGF0YSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9O b25lKTsKLS0gIFB5X1hERUNSRUYodG1wKTsKLS0gIHRtcCA9ICgoUHlPYmplY3QqKXAtPnJlcGx5 X3VzZXJkYXRhKTsKLS0gIHAtPnJlcGx5X3VzZXJkYXRhID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5 X05vbmUpOwotLSAgUHlfWERFQ1JFRih0bXApOwotLSAgcmV0dXJuIDA7Ci0tfQotLQotLXN0YXRp YyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2Vy cm9yX3N0cihQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Ci0tICByZXR1cm4g X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF85ZXJyb3Jfc3RyXzFfX2dldF9f KG8pOwotLX0KLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80 bGlic18zbXB2XzVFdmVudF9uYW1lKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngp IHsKLS0gIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRuYW1l XzFfX2dldF9fKG8pOwotLX0KLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZp ZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9pZChQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2 b2lkICp4KSB7Ci0tICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF8yaWRfMV9fZ2V0X18obyk7Ci0tfQotLQotLXN0YXRpYyBpbnQgX19weXhfc2V0cHJvcF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2lkKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lU SE9OX1VOVVNFRCB2b2lkICp4KSB7Ci0tICBpZiAodikgewotLSAgICByZXR1cm4gX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yaWRfM19fc2V0X18obywgdik7Ci0tICB9Ci0t ICBlbHNlIHsKLS0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3Is ICJfX2RlbF9fIik7Ci0tICAgIHJldHVybiAtMTsKLS0gIH0KLS19Ci0tCi0tc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfZXJyb3IoUHlP YmplY3QgKm8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgewotLSAgcmV0dXJuIF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVycm9yXzFfX2dldF9fKG8pOwotLX0KLS0KLS1z dGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9lcnJv cihQeU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgewotLSAg aWYgKHYpIHsKLS0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZl bnRfNWVycm9yXzNfX3NldF9fKG8sIHYpOwotLSAgfQotLSAgZWxzZSB7Ci0tICAgIFB5RXJyX1Nl dFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLCAiX19kZWxfXyIpOwotLSAgICByZXR1 cm4gLTE7Ci0tICB9Ci0tfQotLQotLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2RhdGEoUHlPYmplY3QgKm8sIENZVEhPTl9VTlVTRUQg dm9pZCAqeCkgewotLSAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZl bnRfNGRhdGFfMV9fZ2V0X18obyk7Ci0tfQotLQotLXN0YXRpYyBpbnQgX19weXhfc2V0cHJvcF85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2RhdGEoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2 LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKLS0gIGlmICh2KSB7Ci0tICAgIHJldHVybiBfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzNfX3NldF9fKG8sIHYpOwot LSAgfQotLSAgZWxzZSB7Ci0tICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50XzRkYXRhXzVfX2RlbF9fKG8pOwotLSAgfQotLX0KLS0KLS1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9yZXBseV91c2Vy ZGF0YShQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Ci0tICByZXR1cm4gX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzFfX2dl dF9fKG8pOwotLX0KLS0KLS1zdGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGli c18zbXB2XzVFdmVudF9yZXBseV91c2VyZGF0YShQeU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZ VEhPTl9VTlVTRUQgdm9pZCAqeCkgewotLSAgaWYgKHYpIHsKLS0gICAgcmV0dXJuIF9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV8zX19zZXRfXyhv LCB2KTsKLS0gIH0KLS0gIGVsc2UgewotLSAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzVfX2RlbF9fKG8pOwotLSAgfQotLX0K LS0KLS1zdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNt cHZfRXZlbnRbXSA9IHsKLS0gIHsiX19yZWR1Y2VfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24pX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xX19yZWR1Y2VfY3l0aG9uX18sIE1F VEhfTk9BUkdTLCAwfSwKLS0gIHsiX19zZXRzdGF0ZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzNfX3NldHN0YXRlX2N5dGhvbl9f LCBNRVRIX08sIDB9LAotLSAgezAsIDAsIDAsIDB9Ci0tfTsKLS0KLS1zdGF0aWMgc3RydWN0IFB5 R2V0U2V0RGVmIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50W10gPSB7 Ci0tICB7KGNoYXIgKikiZXJyb3Jfc3RyIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50X2Vycm9yX3N0ciwgMCwgKGNoYXIgKikibXB2X2Vycm9yX3N0cmluZyBvZiB0 aGUgZXJyb3IgcHJvZXBydHkiLCAwfSwKLS0gIHsoY2hhciAqKSJuYW1lIiwgX19weXhfZ2V0cHJv cF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X25hbWUsIDAsIChjaGFyICopIm1wdl9ldmVu dF9uYW1lIG9mIHRoZSBldmVudCBpZCIsIDB9LAotLSAgeyhjaGFyICopImlkIiwgX19weXhfZ2V0 cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2lkLCBfX3B5eF9zZXRwcm9wXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfaWQsIChjaGFyICopMCwgMH0sCi0tICB7KGNoYXIgKiki ZXJyb3IiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfZXJyb3Is IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9lcnJvciwgKGNoYXIg KikwLCAwfSwKLS0gIHsoY2hhciAqKSJkYXRhIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfNUV2ZW50X2RhdGEsIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2 XzVFdmVudF9kYXRhLCAoY2hhciAqKTAsIDB9LAotLSAgeyhjaGFyICopInJlcGx5X3VzZXJkYXRh IiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X3JlcGx5X3VzZXJk YXRhLCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfcmVwbHlfdXNl cmRhdGEsIChjaGFyICopMCwgMH0sCi0tICB7MCwgMCwgMCwgMCwgMH0KLS19OwotLQotLXN0YXRp YyBQeVR5cGVPYmplY3QgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgPSB7 Ci0tICBQeVZhck9iamVjdF9IRUFEX0lOSVQoMCwgMCkKLS0gICJ2aWRjdXR0ZXIubGlicy5tcHYu RXZlbnQiLCAvKnRwX25hbWUqLwotLSAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0V2ZW50KSwgLyp0cF9iYXNpY3NpemUqLwotLSAgMCwgLyp0cF9pdGVtc2l6 ZSovCi0tICBfX3B5eF90cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCwgLyp0 cF9kZWFsbG9jKi8KLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKLS0gIDAsIC8q dHBfcHJpbnQqLwotLSAgI2VuZGlmCi0tICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBi NAotLSAgMCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCi0tICAjZW5kaWYKLS0gIDAsIC8qdHBf Z2V0YXR0ciovCi0tICAwLCAvKnRwX3NldGF0dHIqLwotLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04g PCAzCi0tICAwLCAvKnRwX2NvbXBhcmUqLwotLSAgI2VuZGlmCi0tICAjaWYgUFlfTUFKT1JfVkVS U0lPTiA+PSAzCi0tICAwLCAvKnRwX2FzX2FzeW5jKi8KLS0gICNlbmRpZgotLSAgMCwgLyp0cF9y ZXByKi8KLS0gIDAsIC8qdHBfYXNfbnVtYmVyKi8KLS0gIDAsIC8qdHBfYXNfc2VxdWVuY2UqLwot LSAgMCwgLyp0cF9hc19tYXBwaW5nKi8KLS0gIDAsIC8qdHBfaGFzaCovCi0tICAwLCAvKnRwX2Nh bGwqLwotLSAgMCwgLyp0cF9zdHIqLwotLSAgMCwgLyp0cF9nZXRhdHRybyovCi0tICAwLCAvKnRw X3NldGF0dHJvKi8KLS0gIDAsIC8qdHBfYXNfYnVmZmVyKi8KLS0gIFB5X1RQRkxBR1NfREVGQVVM VHxQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQ RkxBR1NfSEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVf R0MsIC8qdHBfZmxhZ3MqLwotLSAgIldyYXBzOiBtcHZfZXZlbnQiLCAvKnRwX2RvYyovCi0tICBf X3B5eF90cF90cmF2ZXJzZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQsIC8qdHBfdHJhdmVy c2UqLwotLSAgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50LCAvKnRw X2NsZWFyKi8KLS0gIDAsIC8qdHBfcmljaGNvbXBhcmUqLwotLSAgMCwgLyp0cF93ZWFrbGlzdG9m ZnNldCovCi0tICAwLCAvKnRwX2l0ZXIqLwotLSAgMCwgLyp0cF9pdGVybmV4dCovCi0tICBfX3B5 eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCwgLyp0cF9tZXRob2RzKi8KLS0g IDAsIC8qdHBfbWVtYmVycyovCi0tICBfX3B5eF9nZXRzZXRzXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9FdmVudCwgLyp0cF9nZXRzZXQqLwotLSAgMCwgLyp0cF9iYXNlKi8KLS0gIDAsIC8qdHBfZGlj dCovCi0tICAwLCAvKnRwX2Rlc2NyX2dldCovCi0tICAwLCAvKnRwX2Rlc2NyX3NldCovCi0tICAw LCAvKnRwX2RpY3RvZmZzZXQqLwotLSAgMCwgLyp0cF9pbml0Ki8KLS0gIDAsIC8qdHBfYWxsb2Mq LwotLSAgX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCwgLyp0cF9uZXcq LwotLSAgMCwgLyp0cF9mcmVlKi8KLS0gIDAsIC8qdHBfaXNfZ2MqLwotLSAgMCwgLyp0cF9iYXNl cyovCi0tICAwLCAvKnRwX21ybyovCi0tICAwLCAvKnRwX2NhY2hlKi8KLS0gIDAsIC8qdHBfc3Vi Y2xhc3NlcyovCi0tICAwLCAvKnRwX3dlYWtsaXN0Ki8KLS0gIDAsIC8qdHBfZGVsKi8KLS0gIDAs IC8qdHBfdmVyc2lvbl90YWcqLwotLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEK LS0gIDAsIC8qdHBfZmluYWxpemUqLwotLSAgI2VuZGlmCi0tICAjaWYgUFlfVkVSU0lPTl9IRVgg Pj0gMHgwMzA4MDBiMQotLSAgMCwgLyp0cF92ZWN0b3JjYWxsKi8KLS0gICNlbmRpZgotLSAgI2lm IFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkw MDAwCi0tICAwLCAvKnRwX3ByaW50Ki8KLS0gICNlbmRpZgotLX07Ci0tc3RhdGljIHN0cnVjdCBf X3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0IF9fcHl4X3Z0YWJs ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dDsKLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dChQeVR5cGVPYmplY3QgKnQs IENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmEsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsK LS0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKnA7Ci0t ICBQeU9iamVjdCAqbzsKLS0gIGlmIChsaWtlbHkoKHQtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19J U19BQlNUUkFDVCkgPT0gMCkpIHsKLS0gICAgbyA9ICgqdC0+dHBfYWxsb2MpKHQsIDApOwotLSAg fSBlbHNlIHsKLS0gICAgbyA9IChQeU9iamVjdCAqKSBQeUJhc2VPYmplY3RfVHlwZS50cF9uZXco dCwgX19weXhfZW1wdHlfdHVwbGUsIDApOwotLSAgfQotLSAgaWYgKHVubGlrZWx5KCFvKSkgcmV0 dXJuIDA7Ci0tICBwID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICopbyk7Ci0tICBwLT5fX3B5eF92dGFiID0gX19weXhfdnRhYnB0cl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dDsKLS0gIHAtPmNhbGxiYWNrID0gUHlfTm9uZTsgUHlfSU5DUkVG KFB5X05vbmUpOwotLSAgcC0+Y2FsbGJhY2t0aHJlYWQgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlf Tm9uZSk7Ci0tICBwLT5yZXBseV91c2VyZGF0YSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25l KTsKLS0gIGlmICh1bmxpa2VseShfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMzdfX2Npbml0X18obywgX19weXhfZW1wdHlfdHVwbGUsIE5VTEwpIDwgMCkpIGdvdG8gYmFk OwotLSAgcmV0dXJuIG87Ci0tICBiYWQ6Ci0tICBQeV9ERUNSRUYobyk7IG8gPSAwOwotLSAgcmV0 dXJuIE5VTEw7Ci0tfQotLQotLXN0YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQoUHlPYmplY3QgKm8pIHsKLS0gIHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKW87Ci0tICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5B TElaRQotLSAgaWYgKHVubGlrZWx5KFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQ RkxBR1NfSEFWRV9GSU5BTElaRSkgJiYgUHlfVFlQRShvKS0+dHBfZmluYWxpemUpICYmICFfUHlH Q19GSU5BTElaRUQobykpIHsKLS0gICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVh bGxvYyhvKSkgcmV0dXJuOwotLSAgfQotLSAgI2VuZGlmCi0tICBQeU9iamVjdF9HQ19VblRyYWNr KG8pOwotLSAgewotLSAgICBQeU9iamVjdCAqZXR5cGUsICpldmFsLCAqZXRiOwotLSAgICBQeUVy cl9GZXRjaCgmZXR5cGUsICZldmFsLCAmZXRiKTsKLS0gICAgX19QeXhfU0VUX1JFRkNOVChvLCBQ eV9SRUZDTlQobykgKyAxKTsKLS0gICAgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzQ3X19kZWFsbG9jX18obyk7Ci0tICAgIF9fUHl4X1NFVF9SRUZDTlQobywgUHlfUkVG Q05UKG8pIC0gMSk7Ci0tICAgIFB5RXJyX1Jlc3RvcmUoZXR5cGUsIGV2YWwsIGV0Yik7Ci0tICB9 Ci0tICBQeV9DTEVBUihwLT5jYWxsYmFjayk7Ci0tICBQeV9DTEVBUihwLT5jYWxsYmFja3RocmVh ZCk7Ci0tICBQeV9DTEVBUihwLT5yZXBseV91c2VyZGF0YSk7Ci0tICAoKlB5X1RZUEUobyktPnRw X2ZyZWUpKG8pOwotLX0KLS0KLS1zdGF0aWMgaW50IF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0KFB5T2JqZWN0ICpvLCB2aXNpdHByb2Mgdiwgdm9pZCAqYSkg ewotLSAgaW50IGU7Ci0tICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKilvOwotLSAgaWYgKHAtPmNhbGxiYWNrKSB7Ci0tICAgIGUgPSAoKnYpKHAtPmNhbGxiYWNr LCBhKTsgaWYgKGUpIHJldHVybiBlOwotLSAgfQotLSAgaWYgKHAtPmNhbGxiYWNrdGhyZWFkKSB7 Ci0tICAgIGUgPSAoKnYpKHAtPmNhbGxiYWNrdGhyZWFkLCBhKTsgaWYgKGUpIHJldHVybiBlOwot LSAgfQotLSAgaWYgKHAtPnJlcGx5X3VzZXJkYXRhKSB7Ci0tICAgIGUgPSAoKnYpKHAtPnJlcGx5 X3VzZXJkYXRhLCBhKTsgaWYgKGUpIHJldHVybiBlOwotLSAgfQotLSAgcmV0dXJuIDA7Ci0tfQot LQotLXN0YXRpYyBpbnQgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQoUHlPYmplY3QgKm8pIHsKLS0gIFB5T2JqZWN0KiB0bXA7Ci0tICBzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilvOwotLSAgdG1wID0gKChQeU9iamVjdCopcC0+ Y2FsbGJhY2spOwotLSAgcC0+Y2FsbGJhY2sgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7 Ci0tICBQeV9YREVDUkVGKHRtcCk7Ci0tICB0bXAgPSAoKFB5T2JqZWN0KilwLT5jYWxsYmFja3Ro cmVhZCk7Ci0tICBwLT5jYWxsYmFja3RocmVhZCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25l KTsKLS0gIFB5X1hERUNSRUYodG1wKTsKLS0gIHRtcCA9ICgoUHlPYmplY3QqKXAtPnJlcGx5X3Vz ZXJkYXRhKTsKLS0gIHAtPnJlcGx5X3VzZXJkYXRhID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05v bmUpOwotLSAgUHlfWERFQ1JFRih0bXApOwotLSAgcmV0dXJuIDA7Ci0tfQotLQotLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfYXBp X3ZlcnNpb24oUHlPYmplY3QgKm8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgewotLSAgcmV0dXJu IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMWFwaV92ZXJzaW9uXzFf X2dldF9fKG8pOwotLX0KLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0X25hbWUoUHlPYmplY3QgKm8sIENZVEhPTl9VTlVTRUQg dm9pZCAqeCkgewotLSAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF80bmFtZV8xX19nZXRfXyhvKTsKLS19Ci0tCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9n ZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF90aW1lKFB5T2JqZWN0ICpvLCBD WVRIT05fVU5VU0VEIHZvaWQgKngpIHsKLS0gIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfNHRpbWVfMV9fZ2V0X18obyk7Ci0tfQotLQotLXN0YXRpYyBQeU1l dGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0W10gPSB7 Ci0tICB7InN1c3BlbmQiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzFzdXNwZW5kLCBNRVRIX05PQVJHUywgX19weXhfZG9jXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF9zdXNwZW5kfSwKLS0gIHsicmVzdW1lIiwgKFB5Q0Z1bmN0aW9u KV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zcmVzdW1lLCBNRVRIX05P QVJHUywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8ycmVzdW1lfSwK LS0gIHsicmVxdWVzdF9ldmVudCIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0 aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF81cmVxdWVz dF9ldmVudCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9fcHl4X2RvY185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfNHJlcXVlc3RfZXZlbnR9LAotLSAgeyJzZXRfbG9nX2xldmVs IiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF83 c2V0X2xvZ19sZXZlbCwgTUVUSF9PLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzZzZXRfbG9nX2xldmVsfSwKLS0gIHsibG9hZF9jb25maWciLCAoUHlDRnVuY3Rpb24p X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzlsb2FkX2NvbmZpZywgTUVU SF9PLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhsb2FkX2NvbmZp Z30sCi0tICB7Il9mb3JtYXRfZm9yIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8xMV9mb3JtYXRfZm9yLCBNRVRIX08sIDB9LAotLSAgeyJjb21t YW5kIiwgKFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEzY29tbWFuZCwgTUVUSF9WQVJBUkdT fE1FVEhfS0VZV09SRFMsIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MTJjb21tYW5kfSwKLS0gIHsiZ2V0X3Byb3BlcnR5X2FzeW5jIiwgKFB5Q0Z1bmN0aW9uKSh2b2lk KikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzE1Z2V0X3Byb3BlcnR5X2FzeW5jLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JE UywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNGdldF9wcm9wZXJ0 eV9hc3luY30sCi0tICB7InRyeV9nZXRfcHJvcGVydHlfYXN5bmMiLCAoUHlDRnVuY3Rpb24pKHZv aWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMTd0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jLCBNRVRIX1ZBUkFSR1N8TUVUSF9L RVlXT1JEUywgMH0sCi0tICB7InRyeV9nZXRfcHJvcGVydHkiLCAoUHlDRnVuY3Rpb24pKHZvaWQq KShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMTl0cnlfZ2V0X3Byb3BlcnR5LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywg MH0sCi0tICB7ImdldF9wcm9wZXJ0eSIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMjFnZXRfcHJvcGVydHksIE1FVEhfTywgX19weXhfZG9jXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMGdldF9wcm9wZXJ0eX0sCi0tICB7InNldF9w cm9wZXJ0eSIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yM3NldF9wcm9wZXJ0eSwgTUVU SF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMjJzZXRfcHJvcGVydHl9LAotLSAgeyJzZXRfb3B0aW9uIiwgKFB5Q0Z1bmN0aW9u KSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzI1c2V0X29wdGlvbiwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMs IF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjRzZXRfb3B0aW9ufSwK LS0gIHsiaW5pdGlhbGl6ZSIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMjdpbml0aWFsaXplLCBNRVRIX05PQVJHUywgX19weXhfZG9jXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNmluaXRpYWxpemV9LAotLSAgeyJ3YWl0X2V2ZW50 IiwgKFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI5d2FpdF9ldmVudCwgTUVUSF9WQVJBUkdT fE1FVEhfS0VZV09SRFMsIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf Mjh3YWl0X2V2ZW50fSwKLS0gIHsid2FrZXVwIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMXdha2V1cCwgTUVUSF9OT0FSR1MsIF9fcHl4X2Rv Y185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzB3YWtldXB9LAotLSAgeyJzZXRfd2Fr ZXVwX2NhbGxiYWNrIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8zM3NldF93YWtldXBfY2FsbGJhY2ssIE1FVEhfTywgX19weXhfZG9jXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMnNldF93YWtldXBfY2FsbGJhY2t9LAotLSAgeyJn ZXRfd2FrZXVwX3BpcGUiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzM1Z2V0X3dha2V1cF9waXBlLCBNRVRIX05PQVJHUywgX19weXhfZG9jXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNGdldF93YWtldXBfcGlwZX0sCi0tICB7Im9i c2VydmVfcHJvcGVydHkiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3 b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzlvYnNlcnZlX3By b3BlcnR5LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX19weXhfZG9jXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8zOG9ic2VydmVfcHJvcGVydHl9LAotLSAgeyJ1bm9ic2VydmVf cHJvcGVydHkiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzQxdW5vYnNlcnZlX3Byb3BlcnR5LCBNRVRIX08sIF9fcHl4X2RvY185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfNDB1bm9ic2VydmVfcHJvcGVydHl9LAotLSAgeyJzaHV0ZG93 biIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf NDNzaHV0ZG93biwgTUVUSF9OT0FSR1MsIDB9LAotLSAgeyJvcGVuZ2xfY2JfYXBpIiwgKFB5Q0Z1 bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80NW9wZW5nbF9j Yl9hcGksIE1FVEhfTk9BUkdTLCAwfSwKLS0gIHsiX19yZWR1Y2VfY3l0aG9uX18iLCAoUHlDRnVu Y3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ5X19yZWR1Y2Vf Y3l0aG9uX18sIE1FVEhfTk9BUkdTLCAwfSwKLS0gIHsiX19zZXRzdGF0ZV9jeXRob25fXyIsIChQ eUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNTFfX3Nl dHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAotLSAgezAsIDAsIDAsIDB9Ci0tfTsKLS0KLS1z dGF0aWMgc3RydWN0IFB5R2V0U2V0RGVmIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHRbXSA9IHsKLS0gIHsoY2hhciAqKSJhcGlfdmVyc2lvbiIsIF9fcHl4X2dldHBy b3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X2FwaV92ZXJzaW9uLCAwLCAoY2hhciAq KTAsIDB9LAotLSAgeyhjaGFyICopIm5hbWUiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF9uYW1lLCAwLCAoY2hhciAqKSJVbmlxdWUgbmFtZSBmb3IgZXZlcnkg Y29udGV4dCBjcmVhdGVkLlxuXG4gICAgICAgIFdyYXBzOiBtcHZfY2xpZW50X25hbWVcbiAgICAg ICAgIiwgMH0sCi0tICB7KGNoYXIgKikidGltZSIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0X3RpbWUsIDAsIChjaGFyICopIkludGVybmFsIG1wdiBjbGllbnQg dGltZS5cblxuICAgICAgICBIYXMgYW4gYXJiaXRyYXJ5IHN0YXJ0IG9mZnNldCwgYnV0IHdpbGwg bmV2ZXIgd3JhcCBvciBnbyBiYWNrd2FyZHMuXG5cbiAgICAgICAgV3JhcHM6IG1wdl9nZXRfdGlt ZV91c1xuICAgICAgICAiLCAwfSwKLS0gIHswLCAwLCAwLCAwLCAwfQotLX07Ci0tCi0tc3RhdGlj IFB5VHlwZU9iamVjdCBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ID0g ewotLSAgUHlWYXJPYmplY3RfSEVBRF9JTklUKDAsIDApCi0tICAidmlkY3V0dGVyLmxpYnMubXB2 LkNvbnRleHQiLCAvKnRwX25hbWUqLwotLSAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQpLCAvKnRwX2Jhc2ljc2l6ZSovCi0tICAwLCAvKnRwX2l0 ZW1zaXplKi8KLS0gIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQsIC8qdHBfZGVhbGxvYyovCi0tICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMGI0Ci0t ICAwLCAvKnRwX3ByaW50Ki8KLS0gICNlbmRpZgotLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4 MDMwODAwYjQKLS0gIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQqLwotLSAgI2VuZGlmCi0tICAw LCAvKnRwX2dldGF0dHIqLwotLSAgMCwgLyp0cF9zZXRhdHRyKi8KLS0gICNpZiBQWV9NQUpPUl9W RVJTSU9OIDwgMwotLSAgMCwgLyp0cF9jb21wYXJlKi8KLS0gICNlbmRpZgotLSAgI2lmIFBZX01B Sk9SX1ZFUlNJT04gPj0gMwotLSAgMCwgLyp0cF9hc19hc3luYyovCi0tICAjZW5kaWYKLS0gIDAs IC8qdHBfcmVwciovCi0tICAwLCAvKnRwX2FzX251bWJlciovCi0tICAwLCAvKnRwX2FzX3NlcXVl bmNlKi8KLS0gIDAsIC8qdHBfYXNfbWFwcGluZyovCi0tICAwLCAvKnRwX2hhc2gqLwotLSAgMCwg Lyp0cF9jYWxsKi8KLS0gIDAsIC8qdHBfc3RyKi8KLS0gIDAsIC8qdHBfZ2V0YXR0cm8qLwotLSAg MCwgLyp0cF9zZXRhdHRybyovCi0tICAwLCAvKnRwX2FzX2J1ZmZlciovCi0tICBQeV9UUEZMQUdT X0RFRkFVTFR8UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5X1RQRkxBR1NfQ0hFQ0tUWVBF U3xQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1NfQkFTRVRZUEV8UHlfVFBGTEFH U19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KLS0gICJCYXNlIGNsYXNzIHdyYXBwaW5nIGEgY29udGV4 dCB0byBpbnRlcmFjdCB3aXRoIG1wdi5cblxuICAgIEFzc3VtZSBhbGwgY2FsbHMgY2FuIHJhaXNl IE1QVkVycm9yLlxuXG4gICAgV3JhcHM6IG1wdl9jcmVhdGUsIG1wdl9kZXN0cm95IGFuZCBhbGwg bXB2X2hhbmRsZSByZWxhdGVkIGNhbGxzXG4gICAgIiwgLyp0cF9kb2MqLwotLSAgX19weXhfdHBf dHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIC8qdHBfdHJhdmVyc2UqLwot LSAgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIC8qdHBfY2xl YXIqLwotLSAgMCwgLyp0cF9yaWNoY29tcGFyZSovCi0tICAwLCAvKnRwX3dlYWtsaXN0b2Zmc2V0 Ki8KLS0gIDAsIC8qdHBfaXRlciovCi0tICAwLCAvKnRwX2l0ZXJuZXh0Ki8KLS0gIF9fcHl4X21l dGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIC8qdHBfbWV0aG9kcyovCi0tICAw LCAvKnRwX21lbWJlcnMqLwotLSAgX19weXhfZ2V0c2V0c185dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dCwgLyp0cF9nZXRzZXQqLwotLSAgMCwgLyp0cF9iYXNlKi8KLS0gIDAsIC8qdHBfZGlj dCovCi0tICAwLCAvKnRwX2Rlc2NyX2dldCovCi0tICAwLCAvKnRwX2Rlc2NyX3NldCovCi0tICAw LCAvKnRwX2RpY3RvZmZzZXQqLwotLSAgMCwgLyp0cF9pbml0Ki8KLS0gIDAsIC8qdHBfYWxsb2Mq LwotLSAgX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCAvKnRwX25l dyovCi0tICAwLCAvKnRwX2ZyZWUqLwotLSAgMCwgLyp0cF9pc19nYyovCi0tICAwLCAvKnRwX2Jh c2VzKi8KLS0gIDAsIC8qdHBfbXJvKi8KLS0gIDAsIC8qdHBfY2FjaGUqLwotLSAgMCwgLyp0cF9z dWJjbGFzc2VzKi8KLS0gIDAsIC8qdHBfd2Vha2xpc3QqLwotLSAgMCwgLyp0cF9kZWwqLwotLSAg MCwgLyp0cF92ZXJzaW9uX3RhZyovCi0tICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA0MDBh MQotLSAgMCwgLyp0cF9maW5hbGl6ZSovCi0tICAjZW5kaWYKLS0gICNpZiBQWV9WRVJTSU9OX0hF WCA+PSAweDAzMDgwMGIxCi0tICAwLCAvKnRwX3ZlY3RvcmNhbGwqLwotLSAgI2VuZGlmCi0tICAj aWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMw OTAwMDAKLS0gIDAsIC8qdHBfcHJpbnQqLwotLSAgI2VuZGlmCi0tfTsKLS0KLS1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dChQ eVR5cGVPYmplY3QgKnQsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmEsIENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKmspIHsKLS0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X09wZW5HTENvbnRleHQgKnA7Ci0tICBQeU9iamVjdCAqbzsKLS0gIGlmIChsaWtlbHkoKHQtPnRw X2ZsYWdzICYgUHlfVFBGTEFHU19JU19BQlNUUkFDVCkgPT0gMCkpIHsKLS0gICAgbyA9ICgqdC0+ dHBfYWxsb2MpKHQsIDApOwotLSAgfSBlbHNlIHsKLS0gICAgbyA9IChQeU9iamVjdCAqKSBQeUJh c2VPYmplY3RfVHlwZS50cF9uZXcodCwgX19weXhfZW1wdHlfdHVwbGUsIDApOwotLSAgfQotLSAg aWYgKHVubGlrZWx5KCFvKSkgcmV0dXJuIDA7Ci0tICBwID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICopbyk7Ci0tICBwLT51cGRhdGVfY2Ig PSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0tICByZXR1cm4gbzsKLS19Ci0tCi0tc3Rh dGljIHZvaWQgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29u dGV4dChQeU9iamVjdCAqbykgewotLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfT3BlbkdMQ29udGV4dCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9PcGVuR0xDb250ZXh0ICopbzsKLS0gICNpZiBDWVRIT05fVVNFX1RQX0ZJTkFMSVpF Ci0tICBpZiAodW5saWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUoUHlfVFlQRShvKSwgUHlfVFBGTEFH U19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9UWVBFKG8pLT50cF9maW5hbGl6ZSkgJiYgIV9QeUdDX0ZJ TkFMSVpFRChvKSkgewotLSAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9j KG8pKSByZXR1cm47Ci0tICB9Ci0tICAjZW5kaWYKLS0gIFB5T2JqZWN0X0dDX1VuVHJhY2sobyk7 Ci0tICB7Ci0tICAgIFB5T2JqZWN0ICpldHlwZSwgKmV2YWwsICpldGI7Ci0tICAgIFB5RXJyX0Zl dGNoKCZldHlwZSwgJmV2YWwsICZldGIpOwotLSAgICBfX1B5eF9TRVRfUkVGQ05UKG8sIFB5X1JF RkNOVChvKSArIDEpOwotLSAgICBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVu R0xDb250ZXh0XzEzX19kZWFsbG9jX18obyk7Ci0tICAgIF9fUHl4X1NFVF9SRUZDTlQobywgUHlf UkVGQ05UKG8pIC0gMSk7Ci0tICAgIFB5RXJyX1Jlc3RvcmUoZXR5cGUsIGV2YWwsIGV0Yik7Ci0t ICB9Ci0tICBQeV9DTEVBUihwLT51cGRhdGVfY2IpOwotLSAgKCpQeV9UWVBFKG8pLT50cF9mcmVl KShvKTsKLS19Ci0tCi0tc3RhdGljIGludCBfX3B5eF90cF90cmF2ZXJzZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfT3BlbkdMQ29udGV4dChQeU9iamVjdCAqbywgdmlzaXRwcm9jIHYsIHZvaWQgKmEp IHsKLS0gIGludCBlOwotLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf T3BlbkdMQ29udGV4dCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9PcGVuR0xDb250ZXh0ICopbzsKLS0gIGlmIChwLT51cGRhdGVfY2IpIHsKLS0gICAgZSA9ICgq dikocC0+dXBkYXRlX2NiLCBhKTsgaWYgKGUpIHJldHVybiBlOwotLSAgfQotLSAgcmV0dXJuIDA7 Ci0tfQotLQotLXN0YXRpYyBpbnQgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2 X09wZW5HTENvbnRleHQoUHlPYmplY3QgKm8pIHsKLS0gIFB5T2JqZWN0KiB0bXA7Ci0tICBzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpwID0gKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQgKilvOwot LSAgdG1wID0gKChQeU9iamVjdCopcC0+dXBkYXRlX2NiKTsKLS0gIHAtPnVwZGF0ZV9jYiA9IFB5 X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLS0gIFB5X1hERUNSRUYodG1wKTsKLS0gIHJldHVy biAwOwotLX0KLS0KLS1zdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWV0aG9kc185dmlkY3V0dGVy XzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dFtdID0gewotLSAgeyJpbml0X2dsIiwgKFB5Q0Z1bmN0 aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF8zaW5pdF9nbCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZ V09SRFMsIDB9LAotLSAgeyJzZXRfdXBkYXRlX2NhbGxiYWNrIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfNXNldF91cGRhdGVfY2Fs bGJhY2ssIE1FVEhfTywgMH0sCi0tICB7ImRyYXciLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNG dW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVu R0xDb250ZXh0XzdkcmF3LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgMH0sCi0tICB7InJl cG9ydF9mbGlwIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M09wZW5HTENvbnRleHRfOXJlcG9ydF9mbGlwLCBNRVRIX08sIDB9LAotLSAgeyJ1bmluaXRfZ2wi LCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29u dGV4dF8xMXVuaW5pdF9nbCwgTUVUSF9OT0FSR1MsIDB9LAotLSAgeyJfX3JlZHVjZV9jeXRob25f XyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xD b250ZXh0XzE1X19yZWR1Y2VfY3l0aG9uX18sIE1FVEhfTk9BUkdTLCAwfSwKLS0gIHsiX19zZXRz dGF0ZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNPcGVuR0xDb250ZXh0XzE3X19zZXRzdGF0ZV9jeXRob25fXywgTUVUSF9PLCAwfSwKLS0g IHswLCAwLCAwLCAwfQotLX07Ci0tCi0tc3RhdGljIFB5VHlwZU9iamVjdCBfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ID0gewotLSAgUHlWYXJPYmplY3RfSEVB RF9JTklUKDAsIDApCi0tICAidmlkY3V0dGVyLmxpYnMubXB2Lk9wZW5HTENvbnRleHQiLCAvKnRw X25hbWUqLwotLSAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X09wZW5HTENvbnRleHQpLCAvKnRwX2Jhc2ljc2l6ZSovCi0tICAwLCAvKnRwX2l0ZW1zaXplKi8K LS0gIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQs IC8qdHBfZGVhbGxvYyovCi0tICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMGI0Ci0tICAw LCAvKnRwX3ByaW50Ki8KLS0gICNlbmRpZgotLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMw ODAwYjQKLS0gIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQqLwotLSAgI2VuZGlmCi0tICAwLCAv KnRwX2dldGF0dHIqLwotLSAgMCwgLyp0cF9zZXRhdHRyKi8KLS0gICNpZiBQWV9NQUpPUl9WRVJT SU9OIDwgMwotLSAgMCwgLyp0cF9jb21wYXJlKi8KLS0gICNlbmRpZgotLSAgI2lmIFBZX01BSk9S X1ZFUlNJT04gPj0gMwotLSAgMCwgLyp0cF9hc19hc3luYyovCi0tICAjZW5kaWYKLS0gIDAsIC8q dHBfcmVwciovCi0tICAwLCAvKnRwX2FzX251bWJlciovCi0tICAwLCAvKnRwX2FzX3NlcXVlbmNl Ki8KLS0gIDAsIC8qdHBfYXNfbWFwcGluZyovCi0tICAwLCAvKnRwX2hhc2gqLwotLSAgMCwgLyp0 cF9jYWxsKi8KLS0gIDAsIC8qdHBfc3RyKi8KLS0gIDAsIC8qdHBfZ2V0YXR0cm8qLwotLSAgMCwg Lyp0cF9zZXRhdHRybyovCi0tICAwLCAvKnRwX2FzX2J1ZmZlciovCi0tICBQeV9UUEZMQUdTX0RF RkFVTFR8UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5X1RQRkxBR1NfQ0hFQ0tUWVBFU3xQ eV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1NfQkFTRVRZUEV8UHlfVFBGTEFHU19I QVZFX0dDLCAvKnRwX2ZsYWdzKi8KLS0gIDAsIC8qdHBfZG9jKi8KLS0gIF9fcHl4X3RwX3RyYXZl cnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0LCAvKnRwX3RyYXZlcnNlKi8K LS0gIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0LCAv KnRwX2NsZWFyKi8KLS0gIDAsIC8qdHBfcmljaGNvbXBhcmUqLwotLSAgMCwgLyp0cF93ZWFrbGlz dG9mZnNldCovCi0tICAwLCAvKnRwX2l0ZXIqLwotLSAgMCwgLyp0cF9pdGVybmV4dCovCi0tICBf X3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0LCAvKnRwX21l dGhvZHMqLwotLSAgMCwgLyp0cF9tZW1iZXJzKi8KLS0gIDAsIC8qdHBfZ2V0c2V0Ki8KLS0gIDAs IC8qdHBfYmFzZSovCi0tICAwLCAvKnRwX2RpY3QqLwotLSAgMCwgLyp0cF9kZXNjcl9nZXQqLwot LSAgMCwgLyp0cF9kZXNjcl9zZXQqLwotLSAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8KLS0gIF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMV9faW5pdF9fLCAvKnRw X2luaXQqLwotLSAgMCwgLyp0cF9hbGxvYyovCi0tICBfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80 bGlic18zbXB2X09wZW5HTENvbnRleHQsIC8qdHBfbmV3Ki8KLS0gIDAsIC8qdHBfZnJlZSovCi0t ICAwLCAvKnRwX2lzX2djKi8KLS0gIDAsIC8qdHBfYmFzZXMqLwotLSAgMCwgLyp0cF9tcm8qLwot LSAgMCwgLyp0cF9jYWNoZSovCi0tICAwLCAvKnRwX3N1YmNsYXNzZXMqLwotLSAgMCwgLyp0cF93 ZWFrbGlzdCovCi0tICAwLCAvKnRwX2RlbCovCi0tICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KLS0g ICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCi0tICAwLCAvKnRwX2ZpbmFsaXplKi8K LS0gICNlbmRpZgotLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEKLS0gIDAsIC8q dHBfdmVjdG9yY2FsbCovCi0tICAjZW5kaWYKLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAz MDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAotLSAgMCwgLyp0cF9wcmludCov Ci0tICAjZW5kaWYKLS19OwotLXN0YXRpYyBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGli c18zbXB2X19SZW5kZXJQYXJhbXM7Ci0tCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdf OXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMoUHlUeXBlT2JqZWN0ICp0LCBDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICphLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICprKSB7Ci0tICBz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpwOwot LSAgUHlPYmplY3QgKm87Ci0tICBpZiAobGlrZWx5KCh0LT50cF9mbGFncyAmIFB5X1RQRkxBR1Nf SVNfQUJTVFJBQ1QpID09IDApKSB7Ci0tICAgIG8gPSAoKnQtPnRwX2FsbG9jKSh0LCAwKTsKLS0g IH0gZWxzZSB7Ci0tICAgIG8gPSAoUHlPYmplY3QgKikgUHlCYXNlT2JqZWN0X1R5cGUudHBfbmV3 KHQsIF9fcHl4X2VtcHR5X3R1cGxlLCAwKTsKLS0gIH0KLS0gIGlmICh1bmxpa2VseSghbykpIHJl dHVybiAwOwotLSAgcCA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X1JlbmRlclBhcmFtcyAqKW8pOwotLSAgcC0+X19weXhfdnRhYiA9IF9fcHl4X3Z0YWJwdHJfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXM7Ci0tICBwLT5vd25lZCA9IFB5X05vbmU7 IFB5X0lOQ1JFRihQeV9Ob25lKTsKLS0gIHJldHVybiBvOwotLX0KLS0KLS1zdGF0aWMgdm9pZCBf X3B5eF90cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKFB5T2Jq ZWN0ICpvKSB7Ci0tICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVu ZGVyUGFyYW1zICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19S ZW5kZXJQYXJhbXMgKilvOwotLSAgI2lmIENZVEhPTl9VU0VfVFBfRklOQUxJWkUKLS0gIGlmICh1 bmxpa2VseShQeVR5cGVfSGFzRmVhdHVyZShQeV9UWVBFKG8pLCBQeV9UUEZMQUdTX0hBVkVfRklO QUxJWkUpICYmIFB5X1RZUEUobyktPnRwX2ZpbmFsaXplKSAmJiAhX1B5R0NfRklOQUxJWkVEKG8p KSB7Ci0tICAgIGlmIChQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2MobykpIHJldHVy bjsKLS0gIH0KLS0gICNlbmRpZgotLSAgUHlPYmplY3RfR0NfVW5UcmFjayhvKTsKLS0gIHsKLS0g ICAgUHlPYmplY3QgKmV0eXBlLCAqZXZhbCwgKmV0YjsKLS0gICAgUHlFcnJfRmV0Y2goJmV0eXBl LCAmZXZhbCwgJmV0Yik7Ci0tICAgIF9fUHl4X1NFVF9SRUZDTlQobywgUHlfUkVGQ05UKG8pICsg MSk7Ci0tICAgIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNf M19fZGVhbGxvY19fKG8pOwotLSAgICBfX1B5eF9TRVRfUkVGQ05UKG8sIFB5X1JFRkNOVChvKSAt IDEpOwotLSAgICBQeUVycl9SZXN0b3JlKGV0eXBlLCBldmFsLCBldGIpOwotLSAgfQotLSAgUHlf Q0xFQVIocC0+b3duZWQpOwotLSAgKCpQeV9UWVBFKG8pLT50cF9mcmVlKShvKTsKLS19Ci0tCi0t c3RhdGljIGludCBfX3B5eF90cF90cmF2ZXJzZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRl clBhcmFtcyhQeU9iamVjdCAqbywgdmlzaXRwcm9jIHYsIHZvaWQgKmEpIHsKLS0gIGludCBlOwot LSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAq cCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z ICopbzsKLS0gIGlmIChwLT5vd25lZCkgewotLSAgICBlID0gKCp2KShwLT5vd25lZCwgYSk7IGlm IChlKSByZXR1cm4gZTsKLS0gIH0KLS0gIHJldHVybiAwOwotLX0KLS0KLS1zdGF0aWMgaW50IF9f cHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKFB5T2JqZWN0 ICpvKSB7Ci0tICBQeU9iamVjdCogdG1wOwotLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopbzsKLS0gIHRtcCA9ICgoUHlPYmplY3QqKXAt Pm93bmVkKTsKLS0gIHAtPm93bmVkID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotLSAg UHlfWERFQ1JFRih0bXApOwotLSAgcmV0dXJuIDA7Ci0tfQotLQotLXN0YXRpYyBQeU1ldGhvZERl ZiBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zW10gPSB7 Ci0tICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfNV9fcmVkdWNlX2N5dGhvbl9fLCBNRVRIX05P QVJHUywgMH0sCi0tICB7Il9fc2V0c3RhdGVfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24pX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc183X19zZXRzdGF0ZV9jeXRo b25fXywgTUVUSF9PLCAwfSwKLS0gIHswLCAwLCAwLCAwfQotLX07Ci0tCi0tc3RhdGljIFB5VHlw ZU9iamVjdCBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zID0g ewotLSAgUHlWYXJPYmplY3RfSEVBRF9JTklUKDAsIDApCi0tICAidmlkY3V0dGVyLmxpYnMubXB2 Ll9SZW5kZXJQYXJhbXMiLCAvKnRwX25hbWUqLwotLSAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMpLCAvKnRwX2Jhc2ljc2l6ZSovCi0t ICAwLCAvKnRwX2l0ZW1zaXplKi8KLS0gIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGli c18zbXB2X19SZW5kZXJQYXJhbXMsIC8qdHBfZGVhbGxvYyovCi0tICAjaWYgUFlfVkVSU0lPTl9I RVggPCAweDAzMDgwMGI0Ci0tICAwLCAvKnRwX3ByaW50Ki8KLS0gICNlbmRpZgotLSAgI2lmIFBZ X1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQKLS0gIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQq LwotLSAgI2VuZGlmCi0tICAwLCAvKnRwX2dldGF0dHIqLwotLSAgMCwgLyp0cF9zZXRhdHRyKi8K LS0gICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotLSAgMCwgLyp0cF9jb21wYXJlKi8KLS0gICNl bmRpZgotLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotLSAgMCwgLyp0cF9hc19hc3luYyov Ci0tICAjZW5kaWYKLS0gIDAsIC8qdHBfcmVwciovCi0tICAwLCAvKnRwX2FzX251bWJlciovCi0t ICAwLCAvKnRwX2FzX3NlcXVlbmNlKi8KLS0gIDAsIC8qdHBfYXNfbWFwcGluZyovCi0tICAwLCAv KnRwX2hhc2gqLwotLSAgMCwgLyp0cF9jYWxsKi8KLS0gIDAsIC8qdHBfc3RyKi8KLS0gIDAsIC8q dHBfZ2V0YXR0cm8qLwotLSAgMCwgLyp0cF9zZXRhdHRybyovCi0tICAwLCAvKnRwX2FzX2J1ZmZl ciovCi0tICBQeV9UUEZMQUdTX0RFRkFVTFR8UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5 X1RQRkxBR1NfQ0hFQ0tUWVBFU3xQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1Nf QkFTRVRZUEV8UHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KLS0gIDAsIC8qdHBfZG9j Ki8KLS0gIF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zLCAvKnRwX3RyYXZlcnNlKi8KLS0gIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fUmVuZGVyUGFyYW1zLCAvKnRwX2NsZWFyKi8KLS0gIDAsIC8qdHBfcmljaGNvbXBhcmUq LwotLSAgMCwgLyp0cF93ZWFrbGlzdG9mZnNldCovCi0tICAwLCAvKnRwX2l0ZXIqLwotLSAgMCwg Lyp0cF9pdGVybmV4dCovCi0tICBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f UmVuZGVyUGFyYW1zLCAvKnRwX21ldGhvZHMqLwotLSAgMCwgLyp0cF9tZW1iZXJzKi8KLS0gIDAs IC8qdHBfZ2V0c2V0Ki8KLS0gIDAsIC8qdHBfYmFzZSovCi0tICAwLCAvKnRwX2RpY3QqLwotLSAg MCwgLyp0cF9kZXNjcl9nZXQqLwotLSAgMCwgLyp0cF9kZXNjcl9zZXQqLwotLSAgMCwgLyp0cF9k aWN0b2Zmc2V0Ki8KLS0gIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQ YXJhbXNfMV9faW5pdF9fLCAvKnRwX2luaXQqLwotLSAgMCwgLyp0cF9hbGxvYyovCi0tICBfX3B5 eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMsIC8qdHBfbmV3Ki8K LS0gIDAsIC8qdHBfZnJlZSovCi0tICAwLCAvKnRwX2lzX2djKi8KLS0gIDAsIC8qdHBfYmFzZXMq LwotLSAgMCwgLyp0cF9tcm8qLwotLSAgMCwgLyp0cF9jYWNoZSovCi0tICAwLCAvKnRwX3N1YmNs YXNzZXMqLwotLSAgMCwgLyp0cF93ZWFrbGlzdCovCi0tICAwLCAvKnRwX2RlbCovCi0tICAwLCAv KnRwX3ZlcnNpb25fdGFnKi8KLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCi0t ICAwLCAvKnRwX2ZpbmFsaXplKi8KLS0gICNlbmRpZgotLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49 IDB4MDMwODAwYjEKLS0gIDAsIC8qdHBfdmVjdG9yY2FsbCovCi0tICAjZW5kaWYKLS0gICNpZiBQ WV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAw MAotLSAgMCwgLyp0cF9wcmludCovCi0tICAjZW5kaWYKLS19OwotLXN0YXRpYyBzdHJ1Y3QgX19w eXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvIF9fcHl4 X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvOwotLQotLXN0YXRp YyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFt ZUluZm8oUHlUeXBlT2JqZWN0ICp0LCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICphLCBDWVRIT05f VU5VU0VEIFB5T2JqZWN0ICprKSB7Ci0tICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKnA7Ci0tICBQeU9iamVjdCAqbzsKLS0gIGlmIChsaWtl bHkoKHQtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19JU19BQlNUUkFDVCkgPT0gMCkpIHsKLS0gICAg byA9ICgqdC0+dHBfYWxsb2MpKHQsIDApOwotLSAgfSBlbHNlIHsKLS0gICAgbyA9IChQeU9iamVj dCAqKSBQeUJhc2VPYmplY3RfVHlwZS50cF9uZXcodCwgX19weXhfZW1wdHlfdHVwbGUsIDApOwot LSAgfQotLSAgaWYgKHVubGlrZWx5KCFvKSkgcmV0dXJuIDA7Ci0tICBwID0gKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKilvKTsKLS0gIHAt Pl9fcHl4X3Z0YWIgPSBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJG cmFtZUluZm87Ci0tICByZXR1cm4gbzsKLS19Ci0tCi0tc3RhdGljIHZvaWQgX19weXhfdHBfZGVh bGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvKFB5T2JqZWN0ICpvKSB7 Ci0tICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5BTElaRQotLSAgaWYgKHVubGlrZWx5KFB5VHlwZV9I YXNGZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkgJiYgUHlfVFlQ RShvKS0+dHBfZmluYWxpemUpICYmICghUHlUeXBlX0lTX0dDKFB5X1RZUEUobykpIHx8ICFfUHlH Q19GSU5BTElaRUQobykpKSB7Ci0tICAgIGlmIChQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURl YWxsb2MobykpIHJldHVybjsKLS0gIH0KLS0gICNlbmRpZgotLSAgKCpQeV9UWVBFKG8pLT50cF9m cmVlKShvKTsKLS19Ci0tCi0tc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21ldGhvZHNfOXZpZGN1 dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mb1tdID0gewotLSAgeyJfX3JlZHVjZV9jeXRo b25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5k ZXJGcmFtZUluZm9fMV9fcmVkdWNlX2N5dGhvbl9fLCBNRVRIX05PQVJHUywgMH0sCi0tICB7Il9f c2V0c3RhdGVfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzE1UmVuZGVyRnJhbWVJbmZvXzNfX3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9 LAotLSAgezAsIDAsIDAsIDB9Ci0tfTsKLS0KLS1zdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyA9IHsKLS0gIFB5VmFyT2Jq ZWN0X0hFQURfSU5JVCgwLCAwKQotLSAgInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJGcmFtZUlu Zm8iLCAvKnRwX25hbWUqLwotLSAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyksIC8qdHBfYmFzaWNzaXplKi8KLS0gIDAsIC8qdHBf aXRlbXNpemUqLwotLSAgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVu ZGVyRnJhbWVJbmZvLCAvKnRwX2RlYWxsb2MqLwotLSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgw MzA4MDBiNAotLSAgMCwgLyp0cF9wcmludCovCi0tICAjZW5kaWYKLS0gICNpZiBQWV9WRVJTSU9O X0hFWCA+PSAweDAzMDgwMGI0Ci0tICAwLCAvKnRwX3ZlY3RvcmNhbGxfb2Zmc2V0Ki8KLS0gICNl bmRpZgotLSAgMCwgLyp0cF9nZXRhdHRyKi8KLS0gIDAsIC8qdHBfc2V0YXR0ciovCi0tICAjaWYg UFlfTUFKT1JfVkVSU0lPTiA8IDMKLS0gIDAsIC8qdHBfY29tcGFyZSovCi0tICAjZW5kaWYKLS0g ICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKLS0gIDAsIC8qdHBfYXNfYXN5bmMqLwotLSAgI2Vu ZGlmCi0tICAwLCAvKnRwX3JlcHIqLwotLSAgMCwgLyp0cF9hc19udW1iZXIqLwotLSAgMCwgLyp0 cF9hc19zZXF1ZW5jZSovCi0tICAwLCAvKnRwX2FzX21hcHBpbmcqLwotLSAgMCwgLyp0cF9oYXNo Ki8KLS0gIDAsIC8qdHBfY2FsbCovCi0tICAwLCAvKnRwX3N0ciovCi0tICAwLCAvKnRwX2dldGF0 dHJvKi8KLS0gIDAsIC8qdHBfc2V0YXR0cm8qLwotLSAgMCwgLyp0cF9hc19idWZmZXIqLwotLSAg UHlfVFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBR3xQeV9UUEZMQUdT X0NIRUNLVFlQRVN8UHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUnxQeV9UUEZMQUdTX0JBU0VUWVBF LCAvKnRwX2ZsYWdzKi8KLS0gIDAsIC8qdHBfZG9jKi8KLS0gIDAsIC8qdHBfdHJhdmVyc2UqLwot LSAgMCwgLyp0cF9jbGVhciovCi0tICAwLCAvKnRwX3JpY2hjb21wYXJlKi8KLS0gIDAsIC8qdHBf d2Vha2xpc3RvZmZzZXQqLwotLSAgMCwgLyp0cF9pdGVyKi8KLS0gIDAsIC8qdHBfaXRlcm5leHQq LwotLSAgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZv LCAvKnRwX21ldGhvZHMqLwotLSAgMCwgLyp0cF9tZW1iZXJzKi8KLS0gIDAsIC8qdHBfZ2V0c2V0 Ki8KLS0gIDAsIC8qdHBfYmFzZSovCi0tICAwLCAvKnRwX2RpY3QqLwotLSAgMCwgLyp0cF9kZXNj cl9nZXQqLwotLSAgMCwgLyp0cF9kZXNjcl9zZXQqLwotLSAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8K LS0gIDAsIC8qdHBfaW5pdCovCi0tICAwLCAvKnRwX2FsbG9jKi8KLS0gIF9fcHl4X3RwX25ld185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLCAvKnRwX25ldyovCi0tICAwLCAv KnRwX2ZyZWUqLwotLSAgMCwgLyp0cF9pc19nYyovCi0tICAwLCAvKnRwX2Jhc2VzKi8KLS0gIDAs IC8qdHBfbXJvKi8KLS0gIDAsIC8qdHBfY2FjaGUqLwotLSAgMCwgLyp0cF9zdWJjbGFzc2VzKi8K LS0gIDAsIC8qdHBfd2Vha2xpc3QqLwotLSAgMCwgLyp0cF9kZWwqLwotLSAgMCwgLyp0cF92ZXJz aW9uX3RhZyovCi0tICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA0MDBhMQotLSAgMCwgLyp0 cF9maW5hbGl6ZSovCi0tICAjZW5kaWYKLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgw MGIxCi0tICAwLCAvKnRwX3ZlY3RvcmNhbGwqLwotLSAgI2VuZGlmCi0tICAjaWYgUFlfVkVSU0lP Tl9IRVggPj0gMHgwMzA4MDBiNCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwOTAwMDAKLS0gIDAs IC8qdHBfcHJpbnQqLwotLSAgI2VuZGlmCi0tfTsKLS0KLS1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dChQeVR5cGVPYmplY3Qg KnQsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmEsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmsp IHsKLS0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRl eHQgKnA7Ci0tICBQeU9iamVjdCAqbzsKLS0gIGlmIChsaWtlbHkoKHQtPnRwX2ZsYWdzICYgUHlf VFBGTEFHU19JU19BQlNUUkFDVCkgPT0gMCkpIHsKLS0gICAgbyA9ICgqdC0+dHBfYWxsb2MpKHQs IDApOwotLSAgfSBlbHNlIHsKLS0gICAgbyA9IChQeU9iamVjdCAqKSBQeUJhc2VPYmplY3RfVHlw ZS50cF9uZXcodCwgX19weXhfZW1wdHlfdHVwbGUsIDApOwotLSAgfQotLSAgaWYgKHVubGlrZWx5 KCFvKSkgcmV0dXJuIDA7Ci0tICBwID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJDb250ZXh0ICopbyk7Ci0tICBwLT5fbXB2ID0gKChzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopUHlfTm9uZSk7IFB5X0lOQ1JFRihQ eV9Ob25lKTsKLS0gIHAtPnVwZGF0ZV9jYiA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsK LS0gIHAtPl94MTFfZGlzcGxheSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLS0gIHAt Pl93bF9kaXNwbGF5ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotLSAgcC0+X2dldF9w cm9jX2FkZHJlc3MgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0tICByZXR1cm4gbzsK LS19Ci0tCi0tc3RhdGljIHZvaWQgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyQ29udGV4dChQeU9iamVjdCAqbykgewotLSAgc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopbzsKLS0gICNpZiBDWVRIT05fVVNF X1RQX0ZJTkFMSVpFCi0tICBpZiAodW5saWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUoUHlfVFlQRShv KSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9UWVBFKG8pLT50cF9maW5hbGl6ZSkg JiYgIV9QeUdDX0ZJTkFMSVpFRChvKSkgewotLSAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXpl ckZyb21EZWFsbG9jKG8pKSByZXR1cm47Ci0tICB9Ci0tICAjZW5kaWYKLS0gIFB5T2JqZWN0X0dD X1VuVHJhY2sobyk7Ci0tICB7Ci0tICAgIFB5T2JqZWN0ICpldHlwZSwgKmV2YWwsICpldGI7Ci0t ICAgIFB5RXJyX0ZldGNoKCZldHlwZSwgJmV2YWwsICZldGIpOwotLSAgICBfX1B5eF9TRVRfUkVG Q05UKG8sIFB5X1JFRkNOVChvKSArIDEpOwotLSAgICBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNSZW5kZXJDb250ZXh0XzIxX19kZWFsbG9jX18obyk7Ci0tICAgIF9fUHl4X1NFVF9S RUZDTlQobywgUHlfUkVGQ05UKG8pIC0gMSk7Ci0tICAgIFB5RXJyX1Jlc3RvcmUoZXR5cGUsIGV2 YWwsIGV0Yik7Ci0tICB9Ci0tICBQeV9DTEVBUihwLT5fbXB2KTsKLS0gIFB5X0NMRUFSKHAtPnVw ZGF0ZV9jYik7Ci0tICBQeV9DTEVBUihwLT5feDExX2Rpc3BsYXkpOwotLSAgUHlfQ0xFQVIocC0+ X3dsX2Rpc3BsYXkpOwotLSAgUHlfQ0xFQVIocC0+X2dldF9wcm9jX2FkZHJlc3MpOwotLSAgKCpQ eV9UWVBFKG8pLT50cF9mcmVlKShvKTsKLS19Ci0tCi0tc3RhdGljIGludCBfX3B5eF90cF90cmF2 ZXJzZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dChQeU9iamVjdCAqbywgdmlz aXRwcm9jIHYsIHZvaWQgKmEpIHsKLS0gIGludCBlOwotLSAgc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopbzsKLS0gIGlmIChwLT5fbXB2KSB7 Ci0tICAgIGUgPSAoKnYpKCgoUHlPYmplY3QgKilwLT5fbXB2KSwgYSk7IGlmIChlKSByZXR1cm4g ZTsKLS0gIH0KLS0gIGlmIChwLT51cGRhdGVfY2IpIHsKLS0gICAgZSA9ICgqdikocC0+dXBkYXRl X2NiLCBhKTsgaWYgKGUpIHJldHVybiBlOwotLSAgfQotLSAgaWYgKHAtPl94MTFfZGlzcGxheSkg ewotLSAgICBlID0gKCp2KShwLT5feDExX2Rpc3BsYXksIGEpOyBpZiAoZSkgcmV0dXJuIGU7Ci0t ICB9Ci0tICBpZiAocC0+X3dsX2Rpc3BsYXkpIHsKLS0gICAgZSA9ICgqdikocC0+X3dsX2Rpc3Bs YXksIGEpOyBpZiAoZSkgcmV0dXJuIGU7Ci0tICB9Ci0tICBpZiAocC0+X2dldF9wcm9jX2FkZHJl c3MpIHsKLS0gICAgZSA9ICgqdikocC0+X2dldF9wcm9jX2FkZHJlc3MsIGEpOyBpZiAoZSkgcmV0 dXJuIGU7Ci0tICB9Ci0tICByZXR1cm4gMDsKLS19Ci0tCi0tc3RhdGljIGludCBfX3B5eF90cF9j bGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dChQeU9iamVjdCAqbykgewot LSAgUHlPYmplY3QqIHRtcDsKLS0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckNvbnRleHQgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfUmVuZGVyQ29udGV4dCAqKW87Ci0tICB0bXAgPSAoKFB5T2JqZWN0KilwLT5fbXB2KTsK LS0gIHAtPl9tcHYgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKilQeV9Ob25lKTsgUHlfSU5DUkVGKFB5X05vbmUpOwotLSAgUHlfWERFQ1JFRih0bXAp OwotLSAgdG1wID0gKChQeU9iamVjdCopcC0+dXBkYXRlX2NiKTsKLS0gIHAtPnVwZGF0ZV9jYiA9 IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLS0gIFB5X1hERUNSRUYodG1wKTsKLS0gIHRt cCA9ICgoUHlPYmplY3QqKXAtPl94MTFfZGlzcGxheSk7Ci0tICBwLT5feDExX2Rpc3BsYXkgPSBQ eV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0tICBQeV9YREVDUkVGKHRtcCk7Ci0tICB0bXAg PSAoKFB5T2JqZWN0KilwLT5fd2xfZGlzcGxheSk7Ci0tICBwLT5fd2xfZGlzcGxheSA9IFB5X05v bmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLS0gIFB5X1hERUNSRUYodG1wKTsKLS0gIHRtcCA9ICgo UHlPYmplY3QqKXAtPl9nZXRfcHJvY19hZGRyZXNzKTsKLS0gIHAtPl9nZXRfcHJvY19hZGRyZXNz ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotLSAgUHlfWERFQ1JFRih0bXApOwotLSAg cmV0dXJuIDA7Ci0tfQotLQotLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0W10gPSB7Ci0tICB7InNldF9pY2NfcHJvZmls ZSIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJD b250ZXh0XzNzZXRfaWNjX3Byb2ZpbGUsIE1FVEhfTywgMH0sCi0tICB7InNldF9hbWJpZW50X2xp Z2h0IiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfNXNldF9hbWJpZW50X2xpZ2h0LCBNRVRIX08sIDB9LAotLSAgeyJnZXRfbmV4dF9m cmFtZV9pbmZvIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfN2dldF9uZXh0X2ZyYW1lX2luZm8sIE1FVEhfTk9BUkdTLCAwfSwKLS0g IHsic2V0X3VwZGF0ZV9jYWxsYmFjayIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzlzZXRfdXBkYXRlX2NhbGxiYWNrLCBNRVRIX08s IDB9LAotLSAgeyJ1cGRhdGUiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMXVwZGF0ZSwgTUVUSF9OT0FSR1MsIDB9LAotLSAgeyJy ZW5kZXIiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEzcmVuZGVyLCBNRVRI X1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgMH0sCi0tICB7InJlcG9ydF9zd2FwIiwgKFB5Q0Z1bmN0 aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTVyZXBv cnRfc3dhcCwgTUVUSF9OT0FSR1MsIDB9LAotLSAgeyJmcmVlIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTdmcmVlLCBNRVRIX05P QVJHUywgMH0sCi0tICB7ImNsb3NlIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTljbG9zZSwgTUVUSF9OT0FSR1MsIDB9LAotLSAg eyJfX3JlZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzIzX19yZWR1Y2VfY3l0aG9uX18sIE1FVEhfTk9BUkdT LCAwfSwKLS0gIHsiX19zZXRzdGF0ZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzI1X19zZXRzdGF0ZV9jeXRob25f XywgTUVUSF9PLCAwfSwKLS0gIHswLCAwLCAwLCAwfQotLX07Ci0tCi0tc3RhdGljIFB5VHlwZU9i amVjdCBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ID0gewot LSAgUHlWYXJPYmplY3RfSEVBRF9JTklUKDAsIDApCi0tICAidmlkY3V0dGVyLmxpYnMubXB2LlJl bmRlckNvbnRleHQiLCAvKnRwX25hbWUqLwotLSAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQpLCAvKnRwX2Jhc2ljc2l6ZSovCi0tICAw LCAvKnRwX2l0ZW1zaXplKi8KLS0gIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckNvbnRleHQsIC8qdHBfZGVhbGxvYyovCi0tICAjaWYgUFlfVkVSU0lPTl9IRVgg PCAweDAzMDgwMGI0Ci0tICAwLCAvKnRwX3ByaW50Ki8KLS0gICNlbmRpZgotLSAgI2lmIFBZX1ZF UlNJT05fSEVYID49IDB4MDMwODAwYjQKLS0gIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQqLwot LSAgI2VuZGlmCi0tICAwLCAvKnRwX2dldGF0dHIqLwotLSAgMCwgLyp0cF9zZXRhdHRyKi8KLS0g ICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotLSAgMCwgLyp0cF9jb21wYXJlKi8KLS0gICNlbmRp ZgotLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotLSAgMCwgLyp0cF9hc19hc3luYyovCi0t ICAjZW5kaWYKLS0gIDAsIC8qdHBfcmVwciovCi0tICAwLCAvKnRwX2FzX251bWJlciovCi0tICAw LCAvKnRwX2FzX3NlcXVlbmNlKi8KLS0gIDAsIC8qdHBfYXNfbWFwcGluZyovCi0tICAwLCAvKnRw X2hhc2gqLwotLSAgMCwgLyp0cF9jYWxsKi8KLS0gIDAsIC8qdHBfc3RyKi8KLS0gIDAsIC8qdHBf Z2V0YXR0cm8qLwotLSAgMCwgLyp0cF9zZXRhdHRybyovCi0tICAwLCAvKnRwX2FzX2J1ZmZlciov Ci0tICBQeV9UUEZMQUdTX0RFRkFVTFR8UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5X1RQ RkxBR1NfQ0hFQ0tUWVBFU3xQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1NfQkFT RVRZUEV8UHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KLS0gIDAsIC8qdHBfZG9jKi8K LS0gIF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0 LCAvKnRwX3RyYXZlcnNlKi8KLS0gIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9SZW5kZXJDb250ZXh0LCAvKnRwX2NsZWFyKi8KLS0gIDAsIC8qdHBfcmljaGNvbXBhcmUqLwot LSAgMCwgLyp0cF93ZWFrbGlzdG9mZnNldCovCi0tICAwLCAvKnRwX2l0ZXIqLwotLSAgMCwgLyp0 cF9pdGVybmV4dCovCi0tICBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJDb250ZXh0LCAvKnRwX21ldGhvZHMqLwotLSAgMCwgLyp0cF9tZW1iZXJzKi8KLS0gIDAsIC8q dHBfZ2V0c2V0Ki8KLS0gIDAsIC8qdHBfYmFzZSovCi0tICAwLCAvKnRwX2RpY3QqLwotLSAgMCwg Lyp0cF9kZXNjcl9nZXQqLwotLSAgMCwgLyp0cF9kZXNjcl9zZXQqLwotLSAgMCwgLyp0cF9kaWN0 b2Zmc2V0Ki8KLS0gIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfMV9faW5pdF9fLCAvKnRwX2luaXQqLwotLSAgMCwgLyp0cF9hbGxvYyovCi0tICBfX3B5eF90 cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBfbmV3Ki8KLS0g IDAsIC8qdHBfZnJlZSovCi0tICAwLCAvKnRwX2lzX2djKi8KLS0gIDAsIC8qdHBfYmFzZXMqLwot LSAgMCwgLyp0cF9tcm8qLwotLSAgMCwgLyp0cF9jYWNoZSovCi0tICAwLCAvKnRwX3N1YmNsYXNz ZXMqLwotLSAgMCwgLyp0cF93ZWFrbGlzdCovCi0tICAwLCAvKnRwX2RlbCovCi0tICAwLCAvKnRw X3ZlcnNpb25fdGFnKi8KLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCi0tICAw LCAvKnRwX2ZpbmFsaXplKi8KLS0gICNlbmRpZgotLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4 MDMwODAwYjEKLS0gIDAsIC8qdHBfdmVjdG9yY2FsbCovCi0tICAjZW5kaWYKLS0gICNpZiBQWV9W RVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAot LSAgMCwgLyp0cF9wcmludCovCi0tICAjZW5kaWYKLS19OwotLQotLXN0YXRpYyBQeU9iamVjdCAq X19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0KFB5 VHlwZU9iamVjdCAqdCwgUHlPYmplY3QgKmEsIFB5T2JqZWN0ICprKSB7Ci0tICBQeU9iamVjdCAq byA9IF9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCh0LCBh LCBrKTsKLS0gIGlmICh1bmxpa2VseSghbykpIHJldHVybiAwOwotLSAgcmV0dXJuIG87Ci0tfQot LQotLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9PcGVuR0xSZW5kZXJDb250ZXh0W10gPSB7Ci0tICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5 Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5HTFJlbmRlckNv bnRleHRfM19fcmVkdWNlX2N5dGhvbl9fLCBNRVRIX05PQVJHUywgMH0sCi0tICB7Il9fc2V0c3Rh dGVfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzE5T3BlbkdMUmVuZGVyQ29udGV4dF81X19zZXRzdGF0ZV9jeXRob25fXywgTUVUSF9PLCAwfSwK LS0gIHswLCAwLCAwLCAwfQotLX07Ci0tCi0tc3RhdGljIFB5VHlwZU9iamVjdCBfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0ID0gewotLSAgUHlWYXJP YmplY3RfSEVBRF9JTklUKDAsIDApCi0tICAidmlkY3V0dGVyLmxpYnMubXB2Lk9wZW5HTFJlbmRl ckNvbnRleHQiLCAvKnRwX25hbWUqLwotLSAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQpLCAvKnRwX2Jhc2ljc2l6ZSovCi0t ICAwLCAvKnRwX2l0ZW1zaXplKi8KLS0gIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGli c18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBfZGVhbGxvYyovCi0tICAjaWYgUFlfVkVSU0lPTl9I RVggPCAweDAzMDgwMGI0Ci0tICAwLCAvKnRwX3ByaW50Ki8KLS0gICNlbmRpZgotLSAgI2lmIFBZ X1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQKLS0gIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQq LwotLSAgI2VuZGlmCi0tICAwLCAvKnRwX2dldGF0dHIqLwotLSAgMCwgLyp0cF9zZXRhdHRyKi8K LS0gICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotLSAgMCwgLyp0cF9jb21wYXJlKi8KLS0gICNl bmRpZgotLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotLSAgMCwgLyp0cF9hc19hc3luYyov Ci0tICAjZW5kaWYKLS0gIDAsIC8qdHBfcmVwciovCi0tICAwLCAvKnRwX2FzX251bWJlciovCi0t ICAwLCAvKnRwX2FzX3NlcXVlbmNlKi8KLS0gIDAsIC8qdHBfYXNfbWFwcGluZyovCi0tICAwLCAv KnRwX2hhc2gqLwotLSAgMCwgLyp0cF9jYWxsKi8KLS0gIDAsIC8qdHBfc3RyKi8KLS0gIDAsIC8q dHBfZ2V0YXR0cm8qLwotLSAgMCwgLyp0cF9zZXRhdHRybyovCi0tICAwLCAvKnRwX2FzX2J1ZmZl ciovCi0tICBQeV9UUEZMQUdTX0RFRkFVTFR8UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5 X1RQRkxBR1NfQ0hFQ0tUWVBFU3xQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1Nf QkFTRVRZUEV8UHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KLS0gIDAsIC8qdHBfZG9j Ki8KLS0gIF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250 ZXh0LCAvKnRwX3RyYXZlcnNlKi8KLS0gIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9SZW5kZXJDb250ZXh0LCAvKnRwX2NsZWFyKi8KLS0gIDAsIC8qdHBfcmljaGNvbXBhcmUq LwotLSAgMCwgLyp0cF93ZWFrbGlzdG9mZnNldCovCi0tICAwLCAvKnRwX2l0ZXIqLwotLSAgMCwg Lyp0cF9pdGVybmV4dCovCi0tICBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9P cGVuR0xSZW5kZXJDb250ZXh0LCAvKnRwX21ldGhvZHMqLwotLSAgMCwgLyp0cF9tZW1iZXJzKi8K LS0gIDAsIC8qdHBfZ2V0c2V0Ki8KLS0gIDAsIC8qdHBfYmFzZSovCi0tICAwLCAvKnRwX2RpY3Qq LwotLSAgMCwgLyp0cF9kZXNjcl9nZXQqLwotLSAgMCwgLyp0cF9kZXNjcl9zZXQqLwotLSAgMCwg Lyp0cF9kaWN0b2Zmc2V0Ki8KLS0gIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9w ZW5HTFJlbmRlckNvbnRleHRfMV9faW5pdF9fLCAvKnRwX2luaXQqLwotLSAgMCwgLyp0cF9hbGxv YyovCi0tICBfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNv bnRleHQsIC8qdHBfbmV3Ki8KLS0gIDAsIC8qdHBfZnJlZSovCi0tICAwLCAvKnRwX2lzX2djKi8K LS0gIDAsIC8qdHBfYmFzZXMqLwotLSAgMCwgLyp0cF9tcm8qLwotLSAgMCwgLyp0cF9jYWNoZSov Ci0tICAwLCAvKnRwX3N1YmNsYXNzZXMqLwotLSAgMCwgLyp0cF93ZWFrbGlzdCovCi0tICAwLCAv KnRwX2RlbCovCi0tICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KLS0gICNpZiBQWV9WRVJTSU9OX0hF WCA+PSAweDAzMDQwMGExCi0tICAwLCAvKnRwX2ZpbmFsaXplKi8KLS0gICNlbmRpZgotLSAgI2lm IFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEKLS0gIDAsIC8qdHBfdmVjdG9yY2FsbCovCi0t ICAjZW5kaWYKLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJ T05fSEVYIDwgMHgwMzA5MDAwMAotLSAgMCwgLyp0cF9wcmludCovCi0tICAjZW5kaWYKLS19Owot LQotLXN0YXRpYyBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9z Y29wZV9zdHJ1Y3RfX19lcnJvcnMgKl9fcHl4X2ZyZWVsaXN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnNbOF07Ci0tc3RhdGljIGludCBfX3B5eF9mcmVl Y291bnRfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyA9 IDA7Ci0tCi0tc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18z bXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyhQeVR5cGVPYmplY3QgKnQsIENZVEhPTl9V TlVTRUQgUHlPYmplY3QgKmEsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKLS0gIFB5T2Jq ZWN0ICpvOwotLSAgaWYgKENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTiAmJiBsaWtlbHkoKF9f cHl4X2ZyZWVjb3VudF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19f ZXJyb3JzID4gMCkgJiAodC0+dHBfYmFzaWNzaXplID09IHNpemVvZihzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMpKSkpIHsK LS0gICAgbyA9IChQeU9iamVjdCopX19weXhfZnJlZWxpc3RfOXZpZGN1dHRlcl80bGlic18zbXB2 X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9yc1stLV9fcHl4X2ZyZWVjb3VudF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzXTsKLS0gICAgbWVtc2V0KG8s IDAsIHNpemVvZihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9z Y29wZV9zdHJ1Y3RfX19lcnJvcnMpKTsKLS0gICAgKHZvaWQpIFB5T2JqZWN0X0lOSVQobywgdCk7 Ci0tICAgIFB5T2JqZWN0X0dDX1RyYWNrKG8pOwotLSAgfSBlbHNlIHsKLS0gICAgbyA9ICgqdC0+ dHBfYWxsb2MpKHQsIDApOwotLSAgICBpZiAodW5saWtlbHkoIW8pKSByZXR1cm4gMDsKLS0gIH0K LS0gIHJldHVybiBvOwotLX0KLS0KLS1zdGF0aWMgdm9pZCBfX3B5eF90cF9kZWFsbG9jXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMoUHlPYmplY3QgKm8p IHsKLS0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3Bl X3N0cnVjdF9fX2Vycm9ycyAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKilvOwotLSAgUHlPYmplY3RfR0NfVW5U cmFjayhvKTsKLS0gIFB5X0NMRUFSKHAtPl9fcHl4X3ZfZm4pOwotLSAgaWYgKENZVEhPTl9DT01Q SUxJTkdfSU5fQ1BZVEhPTiAmJiAoKF9fcHl4X2ZyZWVjb3VudF85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzIDwgOCkgJiAoUHlfVFlQRShvKS0+dHBfYmFz aWNzaXplID09IHNpemVvZihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f X3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMpKSkpIHsKLS0gICAgX19weXhfZnJlZWxpc3RfOXZp ZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9yc1tfX3B5eF9mcmVl Y291bnRfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycysr XSA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVf c3RydWN0X19fZXJyb3JzICopbyk7Ci0tICB9IGVsc2UgewotLSAgICAoKlB5X1RZUEUobyktPnRw X2ZyZWUpKG8pOwotLSAgfQotLX0KLS0KLS1zdGF0aWMgaW50IF9fcHl4X3RwX3RyYXZlcnNlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMoUHlPYmplY3Qg Km8sIHZpc2l0cHJvYyB2LCB2b2lkICphKSB7Ci0tICBpbnQgZTsKLS0gIHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqcCA9 IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1 Y3RfX19lcnJvcnMgKilvOwotLSAgaWYgKHAtPl9fcHl4X3ZfZm4pIHsKLS0gICAgZSA9ICgqdiko cC0+X19weXhfdl9mbiwgYSk7IGlmIChlKSByZXR1cm4gZTsKLS0gIH0KLS0gIHJldHVybiAwOwot LX0KLS0KLS1zdGF0aWMgaW50IF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f X3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMoUHlPYmplY3QgKm8pIHsKLS0gIFB5T2JqZWN0KiB0 bXA7Ci0tICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29w ZV9zdHJ1Y3RfX19lcnJvcnMgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICopbzsKLS0gIHRtcCA9ICgoUHlPYmpl Y3QqKXAtPl9fcHl4X3ZfZm4pOwotLSAgcC0+X19weXhfdl9mbiA9IFB5X05vbmU7IFB5X0lOQ1JF RihQeV9Ob25lKTsKLS0gIFB5X1hERUNSRUYodG1wKTsKLS0gIHJldHVybiAwOwotLX0KLS0KLS1z dGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4 X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyA9IHsKLS0gIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgwLCAw KQotLSAgInZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMiLCAv KnRwX25hbWUqLwotLSAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyksIC8qdHBfYmFzaWNzaXplKi8KLS0gIDAs IC8qdHBfaXRlbXNpemUqLwotLSAgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNt cHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzLCAvKnRwX2RlYWxsb2MqLwotLSAgI2lmIFBZ X1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBiNAotLSAgMCwgLyp0cF9wcmludCovCi0tICAjZW5kaWYK LS0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0Ci0tICAwLCAvKnRwX3ZlY3RvcmNh bGxfb2Zmc2V0Ki8KLS0gICNlbmRpZgotLSAgMCwgLyp0cF9nZXRhdHRyKi8KLS0gIDAsIC8qdHBf c2V0YXR0ciovCi0tICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLS0gIDAsIC8qdHBfY29tcGFy ZSovCi0tICAjZW5kaWYKLS0gICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKLS0gIDAsIC8qdHBf YXNfYXN5bmMqLwotLSAgI2VuZGlmCi0tICAwLCAvKnRwX3JlcHIqLwotLSAgMCwgLyp0cF9hc19u dW1iZXIqLwotLSAgMCwgLyp0cF9hc19zZXF1ZW5jZSovCi0tICAwLCAvKnRwX2FzX21hcHBpbmcq LwotLSAgMCwgLyp0cF9oYXNoKi8KLS0gIDAsIC8qdHBfY2FsbCovCi0tICAwLCAvKnRwX3N0ciov Ci0tICAwLCAvKnRwX2dldGF0dHJvKi8KLS0gIDAsIC8qdHBfc2V0YXR0cm8qLwotLSAgMCwgLyp0 cF9hc19idWZmZXIqLwotLSAgUHlfVFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9WRVJT SU9OX1RBR3xQeV9UUEZMQUdTX0NIRUNLVFlQRVN8UHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUnxQ eV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLwotLSAgMCwgLyp0cF9kb2MqLwotLSAgX19w eXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9f X2Vycm9ycywgLyp0cF90cmF2ZXJzZSovCi0tICBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzLCAvKnRwX2NsZWFyKi8KLS0gIDAs IC8qdHBfcmljaGNvbXBhcmUqLwotLSAgMCwgLyp0cF93ZWFrbGlzdG9mZnNldCovCi0tICAwLCAv KnRwX2l0ZXIqLwotLSAgMCwgLyp0cF9pdGVybmV4dCovCi0tICAwLCAvKnRwX21ldGhvZHMqLwot LSAgMCwgLyp0cF9tZW1iZXJzKi8KLS0gIDAsIC8qdHBfZ2V0c2V0Ki8KLS0gIDAsIC8qdHBfYmFz ZSovCi0tICAwLCAvKnRwX2RpY3QqLwotLSAgMCwgLyp0cF9kZXNjcl9nZXQqLwotLSAgMCwgLyp0 cF9kZXNjcl9zZXQqLwotLSAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8KLS0gIDAsIC8qdHBfaW5pdCov Ci0tICAwLCAvKnRwX2FsbG9jKi8KLS0gIF9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNt cHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzLCAvKnRwX25ldyovCi0tICAwLCAvKnRwX2Zy ZWUqLwotLSAgMCwgLyp0cF9pc19nYyovCi0tICAwLCAvKnRwX2Jhc2VzKi8KLS0gIDAsIC8qdHBf bXJvKi8KLS0gIDAsIC8qdHBfY2FjaGUqLwotLSAgMCwgLyp0cF9zdWJjbGFzc2VzKi8KLS0gIDAs IC8qdHBfd2Vha2xpc3QqLwotLSAgMCwgLyp0cF9kZWwqLwotLSAgMCwgLyp0cF92ZXJzaW9uX3Rh ZyovCi0tICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA0MDBhMQotLSAgMCwgLyp0cF9maW5h bGl6ZSovCi0tICAjZW5kaWYKLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGIxCi0t ICAwLCAvKnRwX3ZlY3RvcmNhbGwqLwotLSAgI2VuZGlmCi0tICAjaWYgUFlfVkVSU0lPTl9IRVgg Pj0gMHgwMzA4MDBiNCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwOTAwMDAKLS0gIDAsIC8qdHBf cHJpbnQqLwotLSAgI2VuZGlmCi0tfTsKLS0KLS1zdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWV0 aG9kc1tdID0gewotLSAgezAsIDAsIDAsIDB9Ci0tfTsKLS0KLS0jaWYgUFlfTUFKT1JfVkVSU0lP TiA+PSAzCi0tI2lmIENZVEhPTl9QRVA0ODlfTVVMVElfUEhBU0VfSU5JVAotLXN0YXRpYyBQeU9i amVjdCogX19weXhfcHltb2RfY3JlYXRlKFB5T2JqZWN0ICpzcGVjLCBQeU1vZHVsZURlZiAqZGVm KTsgLypwcm90byovCi0tc3RhdGljIGludCBfX3B5eF9weW1vZF9leGVjX21wdihQeU9iamVjdCog bW9kdWxlKTsgLypwcm90byovCi0tc3RhdGljIFB5TW9kdWxlRGVmX1Nsb3QgX19weXhfbW9kdWxl ZGVmX3Nsb3RzW10gPSB7Ci0tICB7UHlfbW9kX2NyZWF0ZSwgKHZvaWQqKV9fcHl4X3B5bW9kX2Ny ZWF0ZX0sCi0tICB7UHlfbW9kX2V4ZWMsICh2b2lkKilfX3B5eF9weW1vZF9leGVjX21wdn0sCi0t ICB7MCwgTlVMTH0KLS19OwotLSNlbmRpZgotLQotLXN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYg X19weXhfbW9kdWxlZGVmID0gewotLSAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0tICAgICJt cHYiLAotLSAgICBfX3B5eF9rX3B5bXB2X1B5dGhvbl93cmFwcGVyX2Zvcl9saWJtcHYsIC8qIG1f ZG9jICovCi0tICAjaWYgQ1lUSE9OX1BFUDQ4OV9NVUxUSV9QSEFTRV9JTklUCi0tICAgIDAsIC8q IG1fc2l6ZSAqLwotLSAgI2Vsc2UKLS0gICAgLTEsIC8qIG1fc2l6ZSAqLwotLSAgI2VuZGlmCi0t ICAgIF9fcHl4X21ldGhvZHMgLyogbV9tZXRob2RzICovLAotLSAgI2lmIENZVEhPTl9QRVA0ODlf TVVMVElfUEhBU0VfSU5JVAotLSAgICBfX3B5eF9tb2R1bGVkZWZfc2xvdHMsIC8qIG1fc2xvdHMg Ki8KLS0gICNlbHNlCi0tICAgIE5VTEwsIC8qIG1fcmVsb2FkICovCi0tICAjZW5kaWYKLS0gICAg TlVMTCwgLyogbV90cmF2ZXJzZSAqLwotLSAgICBOVUxMLCAvKiBtX2NsZWFyICovCi0tICAgIE5V TEwgLyogbV9mcmVlICovCi0tfTsKLS0jZW5kaWYKLS0jaWZuZGVmIENZVEhPTl9TTUFMTF9DT0RF Ci0tI2lmIGRlZmluZWQoX19jbGFuZ19fKQotLSAgICAjZGVmaW5lIENZVEhPTl9TTUFMTF9DT0RF Ci0tI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18g PT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSkKLS0gICAgI2RlZmluZSBDWVRIT05fU01BTExf Q09ERSBfX2F0dHJpYnV0ZV9fKChjb2xkKSkKLS0jZWxzZQotLSAgICAjZGVmaW5lIENZVEhPTl9T TUFMTF9DT0RFCi0tI2VuZGlmCi0tI2VuZGlmCi0tCi0tc3RhdGljIF9fUHl4X1N0cmluZ1RhYkVu dHJ5IF9fcHl4X3N0cmluZ190YWJbXSA9IHsKLS0gIHsmX19weXhfa3Bfc18wXzNfMCwgX19weXhf a18wXzNfMCwgc2l6ZW9mKF9fcHl4X2tfMF8zXzApLCAwLCAwLCAxLCAwfSwKLS0gIHsmX19weXhf bl9zX0FQSV9PUEVOR0wsIF9fcHl4X2tfQVBJX09QRU5HTCwgc2l6ZW9mKF9fcHl4X2tfQVBJX09Q RU5HTCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9rcF9zX0FuZHJlX0QsIF9fcHl4X2tfQW5k cmVfRCwgc2l6ZW9mKF9fcHl4X2tfQW5kcmVfRCksIDAsIDAsIDEsIDB9LAotLSAgeyZfX3B5eF9u X3NfQ0FQSV9NQUpPUiwgX19weXhfa19DQVBJX01BSk9SLCBzaXplb2YoX19weXhfa19DQVBJX01B Sk9SKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19DQVBJX01JTk9SLCBfX3B5eF9rX0NB UElfTUlOT1IsIHNpemVvZihfX3B5eF9rX0NBUElfTUlOT1IpLCAwLCAwLCAxLCAxfSwKLS0gIHsm X19weXhfbl9zX0NhbGxiYWNrVGhyZWFkLCBfX3B5eF9rX0NhbGxiYWNrVGhyZWFkLCBzaXplb2Yo X19weXhfa19DYWxsYmFja1RocmVhZCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfQ2Fs bGJhY2tUaHJlYWRfX19pbml0LCBfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX19faW5pdCwgc2l6ZW9m KF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfX19pbml0KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4 X25fc19DYWxsYmFja1RocmVhZF9jYWxsLCBfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX2NhbGwsIHNp emVvZihfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX2NhbGwpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19w eXhfbl9zX0NhbGxiYWNrVGhyZWFkX21wdl9jYWxsYmFjaywgX19weXhfa19DYWxsYmFja1RocmVh ZF9tcHZfY2FsbGJhY2ssIHNpemVvZihfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX21wdl9jYWxsYmFj ayksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWRfcnVuLCBfX3B5 eF9rX0NhbGxiYWNrVGhyZWFkX3J1biwgc2l6ZW9mKF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfcnVu KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19DYWxsYmFja1RocmVhZF9zZXQsIF9fcHl4 X2tfQ2FsbGJhY2tUaHJlYWRfc2V0LCBzaXplb2YoX19weXhfa19DYWxsYmFja1RocmVhZF9zZXQp LCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX3NodXRkb3duLCBf X3B5eF9rX0NhbGxiYWNrVGhyZWFkX3NodXRkb3duLCBzaXplb2YoX19weXhfa19DYWxsYmFja1Ro cmVhZF9zaHV0ZG93biksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfQ29udGV4dCwgX19w eXhfa19Db250ZXh0LCBzaXplb2YoX19weXhfa19Db250ZXh0KSwgMCwgMCwgMSwgMX0sCi0tICB7 Jl9fcHl4X2twX3NfQ29udGV4dF9jcmVhdGlvbl9lcnJvciwgX19weXhfa19Db250ZXh0X2NyZWF0 aW9uX2Vycm9yLCBzaXplb2YoX19weXhfa19Db250ZXh0X2NyZWF0aW9uX2Vycm9yKSwgMCwgMCwg MSwgMH0sCi0tICB7Jl9fcHl4X25fc19EZXByZWNhdGlvbldhcm5pbmcsIF9fcHl4X2tfRGVwcmVj YXRpb25XYXJuaW5nLCBzaXplb2YoX19weXhfa19EZXByZWNhdGlvbldhcm5pbmcpLCAwLCAwLCAx LCAxfSwKLS0gIHsmX19weXhfbl9zX0VPRlJlYXNvbnMsIF9fcHl4X2tfRU9GUmVhc29ucywgc2l6 ZW9mKF9fcHl4X2tfRU9GUmVhc29ucyksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfRW5k T2ZGaWxlUmVhY2hlZCwgX19weXhfa19FbmRPZkZpbGVSZWFjaGVkLCBzaXplb2YoX19weXhfa19F bmRPZkZpbGVSZWFjaGVkKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19FcnJvcnMsIF9f cHl4X2tfRXJyb3JzLCBzaXplb2YoX19weXhfa19FcnJvcnMpLCAwLCAwLCAxLCAxfSwKLS0gIHsm X19weXhfbl9zX0V2ZW50LCBfX3B5eF9rX0V2ZW50LCBzaXplb2YoX19weXhfa19FdmVudCksIDAs IDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfRXZlbnRzLCBfX3B5eF9rX0V2ZW50cywgc2l6ZW9m KF9fcHl4X2tfRXZlbnRzKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19JbXBvcnRFcnJv ciwgX19weXhfa19JbXBvcnRFcnJvciwgc2l6ZW9mKF9fcHl4X2tfSW1wb3J0RXJyb3IpLCAwLCAw LCAxLCAxfSwKLS0gIHsmX19weXhfa3Bfc19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHgw NSwgX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHgwNSwgc2l6ZW9mKF9fcHl4 X2tfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4MDUpLCAwLCAwLCAxLCAwfSwKLS0gIHsm X19weXhfa3Bfc19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHg1NiwgX19weXhfa19JbmNv bXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHg1Niwgc2l6ZW9mKF9fcHl4X2tfSW5jb21wYXRpYmxl X2NoZWNrc3Vtc19zX3ZzXzB4NTYpLCAwLCAwLCAxLCAwfSwKLS0gIHsmX19weXhfa3Bfc19JbmNv bXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHg4NywgX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tz dW1zX3NfdnNfMHg4Nywgc2l6ZW9mKF9fcHl4X2tfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3Zz XzB4ODcpLCAwLCAwLCAxLCAwfSwKLS0gIHsmX19weXhfa3Bfc19JbmNvbXBhdGlibGVfY2hlY2tz dW1zX3NfdnNfMHhiZiwgX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHhiZiwg c2l6ZW9mKF9fcHl4X2tfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4YmYpLCAwLCAwLCAx LCAwfSwKLS0gIHsmX19weXhfa3Bfc19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHhkNCwg X19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHhkNCwgc2l6ZW9mKF9fcHl4X2tf SW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4ZDQpLCAwLCAwLCAxLCAwfSwKLS0gIHsmX19w eXhfa3Bfc19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHhkYSwgX19weXhfa19JbmNvbXBh dGlibGVfY2hlY2tzdW1zX3NfdnNfMHhkYSwgc2l6ZW9mKF9fcHl4X2tfSW5jb21wYXRpYmxlX2No ZWNrc3Vtc19zX3ZzXzB4ZGEpLCAwLCAwLCAxLCAwfSwKLS0gIHsmX19weXhfbl9zX0lucHV0RGlz cGF0Y2gsIF9fcHl4X2tfSW5wdXREaXNwYXRjaCwgc2l6ZW9mKF9fcHl4X2tfSW5wdXREaXNwYXRj aCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9rcF9zX0tub3duX3Bvc3NpYmxlX3ZhbHVlc19m b3JfRW5kT2ZGLCBfX3B5eF9rX0tub3duX3Bvc3NpYmxlX3ZhbHVlc19mb3JfRW5kT2ZGLCBzaXpl b2YoX19weXhfa19Lbm93bl9wb3NzaWJsZV92YWx1ZXNfZm9yX0VuZE9mRiksIDAsIDAsIDEsIDB9 LAotLSAgeyZfX3B5eF9uX3NfTG9nTGV2ZWxzLCBfX3B5eF9rX0xvZ0xldmVscywgc2l6ZW9mKF9f cHl4X2tfTG9nTGV2ZWxzKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19Mb2dNZXNzYWdl LCBfX3B5eF9rX0xvZ01lc3NhZ2UsIHNpemVvZihfX3B5eF9rX0xvZ01lc3NhZ2UpLCAwLCAwLCAx LCAxfSwKLS0gIHsmX19weXhfbl9zX01JTl9DQVBJX01JTk9SLCBfX3B5eF9rX01JTl9DQVBJX01J Tk9SLCBzaXplb2YoX19weXhfa19NSU5fQ0FQSV9NSU5PUiksIDAsIDAsIDEsIDF9LAotLSAgeyZf X3B5eF9uX3NfTVBWRXJyb3IsIF9fcHl4X2tfTVBWRXJyb3IsIHNpemVvZihfX3B5eF9rX01QVkVy cm9yKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19NUFZFcnJvcl9fX2luaXQsIF9fcHl4 X2tfTVBWRXJyb3JfX19pbml0LCBzaXplb2YoX19weXhfa19NUFZFcnJvcl9fX2luaXQpLCAwLCAw LCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX09wZW5HTENvbnRleHQsIF9fcHl4X2tfT3BlbkdMQ29u dGV4dCwgc2l6ZW9mKF9fcHl4X2tfT3BlbkdMQ29udGV4dCksIDAsIDAsIDEsIDF9LAotLSAgeyZf X3B5eF9rcF9zX09wZW5HTENvbnRleHRfaXNfZGVwcmVjYXRlZF9wbGVhLCBfX3B5eF9rX09wZW5H TENvbnRleHRfaXNfZGVwcmVjYXRlZF9wbGVhLCBzaXplb2YoX19weXhfa19PcGVuR0xDb250ZXh0 X2lzX2RlcHJlY2F0ZWRfcGxlYSksIDAsIDAsIDEsIDB9LAotLSAgeyZfX3B5eF9uX3NfT3BlbkdM UmVuZGVyQ29udGV4dCwgX19weXhfa19PcGVuR0xSZW5kZXJDb250ZXh0LCBzaXplb2YoX19weXhf a19PcGVuR0xSZW5kZXJDb250ZXh0KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X2twX3NfT3Bl bkdMX0FQSV9ub3RfYXZhaWxhYmxlLCBfX3B5eF9rX09wZW5HTF9BUElfbm90X2F2YWlsYWJsZSwg c2l6ZW9mKF9fcHl4X2tfT3BlbkdMX0FQSV9ub3RfYXZhaWxhYmxlKSwgMCwgMCwgMSwgMH0sCi0t ICB7Jl9fcHl4X25fc19QaWNrbGVFcnJvciwgX19weXhfa19QaWNrbGVFcnJvciwgc2l6ZW9mKF9f cHl4X2tfUGlja2xlRXJyb3IpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX1Byb3BlcnR5 LCBfX3B5eF9rX1Byb3BlcnR5LCBzaXplb2YoX19weXhfa19Qcm9wZXJ0eSksIDAsIDAsIDEsIDF9 LAotLSAgeyZfX3B5eF9uX3NfUHlNUFZFcnJvciwgX19weXhfa19QeU1QVkVycm9yLCBzaXplb2Yo X19weXhfa19QeU1QVkVycm9yKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19SRVFVSVJF RF9DQVBJX01BSk9SLCBfX3B5eF9rX1JFUVVJUkVEX0NBUElfTUFKT1IsIHNpemVvZihfX3B5eF9r X1JFUVVJUkVEX0NBUElfTUFKT1IpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX1JlbmRl ckNvbnRleHQsIF9fcHl4X2tfUmVuZGVyQ29udGV4dCwgc2l6ZW9mKF9fcHl4X2tfUmVuZGVyQ29u dGV4dCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfUmVuZGVyUGFyYW1zLCBfX3B5eF9r X1JlbmRlclBhcmFtcywgc2l6ZW9mKF9fcHl4X2tfUmVuZGVyUGFyYW1zKSwgMCwgMCwgMSwgMX0s Ci0tICB7Jl9fcHl4X2twX3NfUmVuZGVyUGFyYW1zX292ZXJmbG93LCBfX3B5eF9rX1JlbmRlclBh cmFtc19vdmVyZmxvdywgc2l6ZW9mKF9fcHl4X2tfUmVuZGVyUGFyYW1zX292ZXJmbG93KSwgMCwg MCwgMSwgMH0sCi0tICB7Jl9fcHl4X25fc19SZXBseVVzZXJEYXRhLCBfX3B5eF9rX1JlcGx5VXNl ckRhdGEsIHNpemVvZihfX3B5eF9rX1JlcGx5VXNlckRhdGEpLCAwLCAwLCAxLCAxfSwKLS0gIHsm X19weXhfbl9zX1JlcGx5VXNlckRhdGFfX19pbml0LCBfX3B5eF9rX1JlcGx5VXNlckRhdGFfX19p bml0LCBzaXplb2YoX19weXhfa19SZXBseVVzZXJEYXRhX19faW5pdCksIDAsIDAsIDEsIDF9LAot LSAgeyZfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YV9hZGQsIF9fcHl4X2tfUmVwbHlVc2VyRGF0YV9h ZGQsIHNpemVvZihfX3B5eF9rX1JlcGx5VXNlckRhdGFfYWRkKSwgMCwgMCwgMSwgMX0sCi0tICB7 Jl9fcHl4X25fc19SZXBseVVzZXJEYXRhX3JlbW92ZSwgX19weXhfa19SZXBseVVzZXJEYXRhX3Jl bW92ZSwgc2l6ZW9mKF9fcHl4X2tfUmVwbHlVc2VyRGF0YV9yZW1vdmUpLCAwLCAwLCAxLCAxfSwK LS0gIHsmX19weXhfbl9zX1NlbWFwaG9yZSwgX19weXhfa19TZW1hcGhvcmUsIHNpemVvZihfX3B5 eF9rX1NlbWFwaG9yZSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9rcF9zX1NldF9vZl9rbm93 bl9lcnJvcl9jb2Rlc19mcm9tX01wLCBfX3B5eF9rX1NldF9vZl9rbm93bl9lcnJvcl9jb2Rlc19m cm9tX01wLCBzaXplb2YoX19weXhfa19TZXRfb2Zfa25vd25fZXJyb3JfY29kZXNfZnJvbV9NcCks IDAsIDAsIDEsIDB9LAotLSAgeyZfX3B5eF9rcF9zX1NldF9vZl9rbm93bl92YWx1ZXNfZm9yX0V2 ZW50X2lkLCBfX3B5eF9rX1NldF9vZl9rbm93bl92YWx1ZXNfZm9yX0V2ZW50X2lkLCBzaXplb2Yo X19weXhfa19TZXRfb2Zfa25vd25fdmFsdWVzX2Zvcl9FdmVudF9pZCksIDAsIDAsIDEsIDB9LAot LSAgeyZfX3B5eF9uX3NfVGhyZWFkLCBfX3B5eF9rX1RocmVhZCwgc2l6ZW9mKF9fcHl4X2tfVGhy ZWFkKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19UeXBlRXJyb3IsIF9fcHl4X2tfVHlw ZUVycm9yLCBzaXplb2YoX19weXhfa19UeXBlRXJyb3IpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19w eXhfbl9zX1VQREFURV9GUkFNRSwgX19weXhfa19VUERBVEVfRlJBTUUsIHNpemVvZihfX3B5eF9r X1VQREFURV9GUkFNRSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfVW5pY29kZURlY29k ZUVycm9yLCBfX3B5eF9rX1VuaWNvZGVEZWNvZGVFcnJvciwgc2l6ZW9mKF9fcHl4X2tfVW5pY29k ZURlY29kZUVycm9yKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19Vbmljb2RlRW5jb2Rl RXJyb3IsIF9fcHl4X2tfVW5pY29kZUVuY29kZUVycm9yLCBzaXplb2YoX19weXhfa19Vbmljb2Rl RW5jb2RlRXJyb3IpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfa3Bfc19Vbmtub3duX2FwaV90 eXBlX3IsIF9fcHl4X2tfVW5rbm93bl9hcGlfdHlwZV9yLCBzaXplb2YoX19weXhfa19Vbmtub3du X2FwaV90eXBlX3IpLCAwLCAwLCAxLCAwfSwKLS0gIHsmX19weXhfa3Bfc19Vbmtub3duX29yX2lu dmFsaWRfcG9pbnRlcl9vYmplYywgX19weXhfa19Vbmtub3duX29yX2ludmFsaWRfcG9pbnRlcl9v YmplYywgc2l6ZW9mKF9fcHl4X2tfVW5rbm93bl9vcl9pbnZhbGlkX3BvaW50ZXJfb2JqZWMpLCAw LCAwLCAxLCAwfSwKLS0gIHsmX19weXhfbl9zX2Fib3J0ZWQsIF9fcHl4X2tfYWJvcnRlZCwgc2l6 ZW9mKF9fcHl4X2tfYWJvcnRlZCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfYWNxdWly ZSwgX19weXhfa19hY3F1aXJlLCBzaXplb2YoX19weXhfa19hY3F1aXJlKSwgMCwgMCwgMSwgMX0s Ci0tICB7Jl9fcHl4X25fc19hZGQsIF9fcHl4X2tfYWRkLCBzaXplb2YoX19weXhfa19hZGQpLCAw LCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2FkdmFuY2VkX2NvbnRyb2wsIF9fcHl4X2tfYWR2 YW5jZWRfY29udHJvbCwgc2l6ZW9mKF9fcHl4X2tfYWR2YW5jZWRfY29udHJvbCksIDAsIDAsIDEs IDF9LAotLSAgeyZfX3B5eF9uX3NfYW9faW5pdF9mYWlsZWQsIF9fcHl4X2tfYW9faW5pdF9mYWls ZWQsIHNpemVvZihfX3B5eF9rX2FvX2luaXRfZmFpbGVkKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9f cHl4X25fc19hcGlfdHlwZSwgX19weXhfa19hcGlfdHlwZSwgc2l6ZW9mKF9fcHl4X2tfYXBpX3R5 cGUpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2FwcGVuZCwgX19weXhfa19hcHBlbmQs IHNpemVvZihfX3B5eF9rX2FwcGVuZCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfYXN5 bmNocm9ub3VzLCBfX3B5eF9rX2FzeW5jaHJvbm91cywgc2l6ZW9mKF9fcHl4X2tfYXN5bmNocm9u b3VzKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19hdG9taWNfcmVxdWVzdF9wdHIsIF9f cHl4X2tfYXRvbWljX3JlcXVlc3RfcHRyLCBzaXplb2YoX19weXhfa19hdG9taWNfcmVxdWVzdF9w dHIpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2F1ZGlvX3JlY29uZmlnLCBfX3B5eF9r X2F1ZGlvX3JlY29uZmlnLCBzaXplb2YoX19weXhfa19hdWRpb19yZWNvbmZpZyksIDAsIDAsIDEs IDF9LAotLSAgeyZfX3B5eF9uX3NfYXV0aG9yLCBfX3B5eF9rX2F1dGhvciwgc2l6ZW9mKF9fcHl4 X2tfYXV0aG9yKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19ibG9ja19mb3JfdGFyZ2V0 X3RpbWUsIF9fcHl4X2tfYmxvY2tfZm9yX3RhcmdldF90aW1lLCBzaXplb2YoX19weXhfa19ibG9j a19mb3JfdGFyZ2V0X3RpbWUpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2Jsb2NrX3Zz eW5jLCBfX3B5eF9rX2Jsb2NrX3ZzeW5jLCBzaXplb2YoX19weXhfa19ibG9ja192c3luYyksIDAs IDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfY2FsbCwgX19weXhfa19jYWxsLCBzaXplb2YoX19w eXhfa19jYWxsKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19jYWxsYmFjaywgX19weXhf a19jYWxsYmFjaywgc2l6ZW9mKF9fcHl4X2tfY2FsbGJhY2spLCAwLCAwLCAxLCAxfSwKLS0gIHsm X19weXhfbl9zX2NoYXB0ZXJfY2hhbmdlLCBfX3B5eF9rX2NoYXB0ZXJfY2hhbmdlLCBzaXplb2Yo X19weXhfa19jaGFwdGVyX2NoYW5nZSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfY2xp ZW50X21lc3NhZ2UsIF9fcHl4X2tfY2xpZW50X21lc3NhZ2UsIHNpemVvZihfX3B5eF9rX2NsaWVu dF9tZXNzYWdlKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19jbGluZV9pbl90cmFjZWJh Y2ssIF9fcHl4X2tfY2xpbmVfaW5fdHJhY2ViYWNrLCBzaXplb2YoX19weXhfa19jbGluZV9pbl90 cmFjZWJhY2spLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2Nsb3NlLCBfX3B5eF9rX2Ns b3NlLCBzaXplb2YoX19weXhfa19jbG9zZSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3Nf Y29kZSwgX19weXhfa19jb2RlLCBzaXplb2YoX19weXhfa19jb2RlKSwgMCwgMCwgMSwgMX0sCi0t ICB7Jl9fcHl4X25fc19jb21tYW5kX2Vycm9yLCBfX3B5eF9rX2NvbW1hbmRfZXJyb3IsIHNpemVv ZihfX3B5eF9rX2NvbW1hbmRfZXJyb3IpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2Nv bW1hbmRfcmVwbHksIF9fcHl4X2tfY29tbWFuZF9yZXBseSwgc2l6ZW9mKF9fcHl4X2tfY29tbWFu ZF9yZXBseSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfY29ubmVjdG9yX2lkLCBfX3B5 eF9rX2Nvbm5lY3Rvcl9pZCwgc2l6ZW9mKF9fcHl4X2tfY29ubmVjdG9yX2lkKSwgMCwgMCwgMSwg MX0sCi0tICB7Jl9fcHl4X25fc19jb3VudGVyLCBfX3B5eF9rX2NvdW50ZXIsIHNpemVvZihfX3B5 eF9rX2NvdW50ZXIpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2NydGNfaWQsIF9fcHl4 X2tfY3J0Y19pZCwgc2l6ZW9mKF9fcHl4X2tfY3J0Y19pZCksIDAsIDAsIDEsIDF9LAotLSAgeyZf X3B5eF9uX3NfZGFlbW9uLCBfX3B5eF9rX2RhZW1vbiwgc2l6ZW9mKF9fcHl4X2tfZGFlbW9uKSwg MCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19kYXRhLCBfX3B5eF9rX2RhdGEsIHNpemVvZihf X3B5eF9rX2RhdGEpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2RlYnVnLCBfX3B5eF9r X2RlYnVnLCBzaXplb2YoX19weXhfa19kZWJ1ZyksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9u X3NfZGVjb2RlLCBfX3B5eF9rX2RlY29kZSwgc2l6ZW9mKF9fcHl4X2tfZGVjb2RlKSwgMCwgMCwg MSwgMX0sCi0tICB7Jl9fcHl4X25fc19kZWZhdWx0LCBfX3B5eF9rX2RlZmF1bHQsIHNpemVvZihf X3B5eF9rX2RlZmF1bHQpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2RlcHRoLCBfX3B5 eF9rX2RlcHRoLCBzaXplb2YoX19weXhfa19kZXB0aCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5 eF9uX3NfZGljdCwgX19weXhfa19kaWN0LCBzaXplb2YoX19weXhfa19kaWN0KSwgMCwgMCwgMSwg MX0sCi0tICB7Jl9fcHl4X25fc19kb2MsIF9fcHl4X2tfZG9jLCBzaXplb2YoX19weXhfa19kb2Mp LCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfa3Bfc19kcm1Nb2RlQXRvbWljUmVxLCBfX3B5eF9r X2RybU1vZGVBdG9taWNSZXEsIHNpemVvZihfX3B5eF9rX2RybU1vZGVBdG9taWNSZXEpLCAwLCAw LCAxLCAwfSwKLS0gIHsmX19weXhfbl9zX2RybV9kaXNwbGF5LCBfX3B5eF9rX2RybV9kaXNwbGF5 LCBzaXplb2YoX19weXhfa19kcm1fZGlzcGxheSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9u X3NfZHJtX29zZF9zaXplLCBfX3B5eF9rX2RybV9vc2Rfc2l6ZSwgc2l6ZW9mKF9fcHl4X2tfZHJt X29zZF9zaXplKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19lLCBfX3B5eF9rX2UsIHNp emVvZihfX3B5eF9rX2UpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2VfaSwgX19weXhf a19lX2ksIHNpemVvZihfX3B5eF9rX2VfaSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3Nf ZW5hYmxlLCBfX3B5eF9rX2VuYWJsZSwgc2l6ZW9mKF9fcHl4X2tfZW5hYmxlKSwgMCwgMCwgMSwg MX0sCi0tICB7Jl9fcHl4X25fc19lbmNvZGUsIF9fcHl4X2tfZW5jb2RlLCBzaXplb2YoX19weXhf a19lbmNvZGUpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2VuZF9maWxlLCBfX3B5eF9r X2VuZF9maWxlLCBzaXplb2YoX19weXhfa19lbmRfZmlsZSksIDAsIDAsIDEsIDF9LAotLSAgeyZf X3B5eF9uX3NfZW51bWVyYXRlLCBfX3B5eF9rX2VudW1lcmF0ZSwgc2l6ZW9mKF9fcHl4X2tfZW51 bWVyYXRlKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19lb2YsIF9fcHl4X2tfZW9mLCBz aXplb2YoX19weXhfa19lb2YpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2Vycl9jLCBf X3B5eF9rX2Vycl9jLCBzaXplb2YoX19weXhfa19lcnJfYyksIDAsIDAsIDEsIDF9LAotLSAgeyZf X3B5eF9uX3NfZXJyb3IsIF9fcHl4X2tfZXJyb3IsIHNpemVvZihfX3B5eF9rX2Vycm9yKSwgMCwg MCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19lcnJvcnMsIF9fcHl4X2tfZXJyb3JzLCBzaXplb2Yo X19weXhfa19lcnJvcnMpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2Vycm9yc19sb2Nh bHNfd3JhcHBlZCwgX19weXhfa19lcnJvcnNfbG9jYWxzX3dyYXBwZWQsIHNpemVvZihfX3B5eF9r X2Vycm9yc19sb2NhbHNfd3JhcHBlZCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfZXZl bnQsIF9fcHl4X2tfZXZlbnQsIHNpemVvZihfX3B5eF9rX2V2ZW50KSwgMCwgMCwgMSwgMX0sCi0t ICB7Jl9fcHl4X25fc19leHRzLCBfX3B5eF9rX2V4dHMsIHNpemVvZihfX3B5eF9rX2V4dHMpLCAw LCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2ZhdGFsLCBfX3B5eF9rX2ZhdGFsLCBzaXplb2Yo X19weXhfa19mYXRhbCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfZmJvLCBfX3B5eF9r X2Zibywgc2l6ZW9mKF9fcHl4X2tfZmJvKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19m ZCwgX19weXhfa19mZCwgc2l6ZW9mKF9fcHl4X2tfZmQpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19w eXhfbl9zX2ZpbGVfbG9hZGVkLCBfX3B5eF9rX2ZpbGVfbG9hZGVkLCBzaXplb2YoX19weXhfa19m aWxlX2xvYWRlZCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfZmxpcF95LCBfX3B5eF9r X2ZsaXBfeSwgc2l6ZW9mKF9fcHl4X2tfZmxpcF95KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4 X25fc19mbiwgX19weXhfa19mbiwgc2l6ZW9mKF9fcHl4X2tfZm4pLCAwLCAwLCAxLCAxfSwKLS0g IHsmX19weXhfbl9zX2Zvcm1hdF9mb3IsIF9fcHl4X2tfZm9ybWF0X2Zvciwgc2l6ZW9mKF9fcHl4 X2tfZm9ybWF0X2ZvciksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfZ2V0LCBfX3B5eF9r X2dldCwgc2l6ZW9mKF9fcHl4X2tfZ2V0KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19n ZXRfcHJvY19hZGRyZXNzLCBfX3B5eF9rX2dldF9wcm9jX2FkZHJlc3MsIHNpemVvZihfX3B5eF9r X2dldF9wcm9jX2FkZHJlc3MpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2dldF9wcm9w ZXJ0eSwgX19weXhfa19nZXRfcHJvcGVydHksIHNpemVvZihfX3B5eF9rX2dldF9wcm9wZXJ0eSks IDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5X2FzeW5jLCBfX3B5eF9r X2dldF9wcm9wZXJ0eV9hc3luYywgc2l6ZW9mKF9fcHl4X2tfZ2V0X3Byb3BlcnR5X2FzeW5jKSwg MCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19nZXRfcHJvcGVydHlfcmVwbHksIF9fcHl4X2tf Z2V0X3Byb3BlcnR5X3JlcGx5LCBzaXplb2YoX19weXhfa19nZXRfcHJvcGVydHlfcmVwbHkpLCAw LCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2dldHN0YXRlLCBfX3B5eF9rX2dldHN0YXRlLCBz aXplb2YoX19weXhfa19nZXRzdGF0ZSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfaCwg X19weXhfa19oLCBzaXplb2YoX19weXhfa19oKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X2tw X3NfaWNjX2Jsb2Jfc2hvdWxkX2JlX2FfYnl0ZXNfaW5zdGEsIF9fcHl4X2tfaWNjX2Jsb2Jfc2hv dWxkX2JlX2FfYnl0ZXNfaW5zdGEsIHNpemVvZihfX3B5eF9rX2ljY19ibG9iX3Nob3VsZF9iZV9h X2J5dGVzX2luc3RhKSwgMCwgMCwgMSwgMH0sCi0tICB7Jl9fcHl4X25fc19pZCwgX19weXhfa19p ZCwgc2l6ZW9mKF9fcHl4X2tfaWQpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2lkbGUs IF9fcHl4X2tfaWRsZSwgc2l6ZW9mKF9fcHl4X2tfaWRsZSksIDAsIDAsIDEsIDF9LAotLSAgeyZf X3B5eF9uX3NfaW1wb3J0LCBfX3B5eF9rX2ltcG9ydCwgc2l6ZW9mKF9fcHl4X2tfaW1wb3J0KSwg MCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19pbmZvLCBfX3B5eF9rX2luZm8sIHNpemVvZihf X3B5eF9rX2luZm8pLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX2luaXQsIF9fcHl4X2tf aW5pdCwgc2l6ZW9mKF9fcHl4X2tfaW5pdCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3Nf aW5pdGlhbGl6ZSwgX19weXhfa19pbml0aWFsaXplLCBzaXplb2YoX19weXhfa19pbml0aWFsaXpl KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19pbnRlcm5hbF9mb3JtYXQsIF9fcHl4X2tf aW50ZXJuYWxfZm9ybWF0LCBzaXplb2YoX19weXhfa19pbnRlcm5hbF9mb3JtYXQpLCAwLCAwLCAx LCAxfSwKLS0gIHsmX19weXhfbl9zX2ludmFsaWRfcGFyYW1ldGVyLCBfX3B5eF9rX2ludmFsaWRf cGFyYW1ldGVyLCBzaXplb2YoX19weXhfa19pbnZhbGlkX3BhcmFtZXRlciksIDAsIDAsIDEsIDF9 LAotLSAgeyZfX3B5eF9uX3NfaXNfcHkzLCBfX3B5eF9rX2lzX3B5Mywgc2l6ZW9mKF9fcHl4X2tf aXNfcHkzKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19pc3NodXRkb3duLCBfX3B5eF9r X2lzc2h1dGRvd24sIHNpemVvZihfX3B5eF9rX2lzc2h1dGRvd24pLCAwLCAwLCAxLCAxfSwKLS0g IHsmX19weXhfbl9zX2ssIF9fcHl4X2tfaywgc2l6ZW9mKF9fcHl4X2tfayksIDAsIDAsIDEsIDF9 LAotLSAgeyZfX3B5eF9uX3Nfa2V5cywgX19weXhfa19rZXlzLCBzaXplb2YoX19weXhfa19rZXlz KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19rdywgX19weXhfa19rdywgc2l6ZW9mKF9f cHl4X2tfa3cpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfa3Bfc19saWJtcHZfdmVyc2lvbl9p c19pbmNvcnJlY3RfUmVxdSwgX19weXhfa19saWJtcHZfdmVyc2lvbl9pc19pbmNvcnJlY3RfUmVx dSwgc2l6ZW9mKF9fcHl4X2tfbGlibXB2X3ZlcnNpb25faXNfaW5jb3JyZWN0X1JlcXUpLCAwLCAw LCAxLCAwfSwKLS0gIHsmX19weXhfbl9zX2xvYWRfY29uZmlnLCBfX3B5eF9rX2xvYWRfY29uZmln LCBzaXplb2YoX19weXhfa19sb2FkX2NvbmZpZyksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9u X3NfbG9hZGluZ19mYWlsZWQsIF9fcHl4X2tfbG9hZGluZ19mYWlsZWQsIHNpemVvZihfX3B5eF9r X2xvYWRpbmdfZmFpbGVkKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19sb2NrLCBfX3B5 eF9rX2xvY2ssIHNpemVvZihfX3B5eF9rX2xvY2spLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhf bl9zX2xvZ19tZXNzYWdlLCBfX3B5eF9rX2xvZ19tZXNzYWdlLCBzaXplb2YoX19weXhfa19sb2df bWVzc2FnZSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfbWFpbiwgX19weXhfa19tYWlu LCBzaXplb2YoX19weXhfa19tYWluKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19tZXRh Y2xhc3MsIF9fcHl4X2tfbWV0YWNsYXNzLCBzaXplb2YoX19weXhfa19tZXRhY2xhc3MpLCAwLCAw LCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX21ldGFkYXRhX3VwZGF0ZSwgX19weXhfa19tZXRhZGF0 YV91cGRhdGUsIHNpemVvZihfX3B5eF9rX21ldGFkYXRhX3VwZGF0ZSksIDAsIDAsIDEsIDF9LAot LSAgeyZfX3B5eF9uX3NfbW9kdWxlLCBfX3B5eF9rX21vZHVsZSwgc2l6ZW9mKF9fcHl4X2tfbW9k dWxlKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19tcHYsIF9fcHl4X2tfbXB2LCBzaXpl b2YoX19weXhfa19tcHYpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX21wdl9jYWxsYmFj aywgX19weXhfa19tcHZfY2FsbGJhY2ssIHNpemVvZihfX3B5eF9rX21wdl9jYWxsYmFjayksIDAs IDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfbmFtZSwgX19weXhfa19uYW1lLCBzaXplb2YoX19w eXhfa19uYW1lKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19uZXcsIF9fcHl4X2tfbmV3 LCBzaXplb2YoX19weXhfa19uZXcpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX25vLCBf X3B5eF9rX25vLCBzaXplb2YoX19weXhfa19ubyksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9r cF9zX25vX2RlZmF1bHRfX19yZWR1Y2VfX19kdWVfdG9fbm9uLCBfX3B5eF9rX25vX2RlZmF1bHRf X19yZWR1Y2VfX19kdWVfdG9fbm9uLCBzaXplb2YoX19weXhfa19ub19kZWZhdWx0X19fcmVkdWNl X19fZHVlX3RvX25vbiksIDAsIDAsIDEsIDB9LAotLSAgeyZfX3B5eF9uX3Nfbm9tZW0sIF9fcHl4 X2tfbm9tZW0sIHNpemVvZihfX3B5eF9rX25vbWVtKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4 X25fc19ub25lLCBfX3B5eF9rX25vbmUsIHNpemVvZihfX3B5eF9rX25vbmUpLCAwLCAwLCAxLCAx fSwKLS0gIHsmX19weXhfbl9zX25vdF9mb3VuZCwgX19weXhfa19ub3RfZm91bmQsIHNpemVvZihf X3B5eF9rX25vdF9mb3VuZCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3Nfbm90X2ltcGxl bWVudGVkLCBfX3B5eF9rX25vdF9pbXBsZW1lbnRlZCwgc2l6ZW9mKF9fcHl4X2tfbm90X2ltcGxl bWVudGVkKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19ub3RoaW5nX3RvX3BsYXksIF9f cHl4X2tfbm90aGluZ190b19wbGF5LCBzaXplb2YoX19weXhfa19ub3RoaW5nX3RvX3BsYXkpLCAw LCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX29iamVjdCwgX19weXhfa19vYmplY3QsIHNpemVv ZihfX3B5eF9rX29iamVjdCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3Nfb2JzZXJ2ZV9w cm9wZXJ0eSwgX19weXhfa19vYnNlcnZlX3Byb3BlcnR5LCBzaXplb2YoX19weXhfa19vYnNlcnZl X3Byb3BlcnR5KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19vYnNlcnZlZCwgX19weXhf a19vYnNlcnZlZCwgc2l6ZW9mKF9fcHl4X2tfb2JzZXJ2ZWQpLCAwLCAwLCAxLCAxfSwKLS0gIHsm X19weXhfbl9zX29wZW5nbCwgX19weXhfa19vcGVuZ2wsIHNpemVvZihfX3B5eF9rX29wZW5nbCks IDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3Nfb3BlbmdsX2ZibywgX19weXhfa19vcGVuZ2xf ZmJvLCBzaXplb2YoX19weXhfa19vcGVuZ2xfZmJvKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4 X25fc19vcGVuZ2xfaW5pdF9wYXJhbXMsIF9fcHl4X2tfb3BlbmdsX2luaXRfcGFyYW1zLCBzaXpl b2YoX19weXhfa19vcGVuZ2xfaW5pdF9wYXJhbXMpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhf bl9zX29wdGlvbl9lcnJvciwgX19weXhfa19vcHRpb25fZXJyb3IsIHNpemVvZihfX3B5eF9rX29w dGlvbl9lcnJvciksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3Nfb3B0aW9uX2Zvcm1hdCwg X19weXhfa19vcHRpb25fZm9ybWF0LCBzaXplb2YoX19weXhfa19vcHRpb25fZm9ybWF0KSwgMCwg MCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19wYXVzZSwgX19weXhfa19wYXVzZSwgc2l6ZW9mKF9f cHl4X2tfcGF1c2UpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3BpY2tsZSwgX19weXhf a19waWNrbGUsIHNpemVvZihfX3B5eF9rX3BpY2tsZSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5 eF9uX3NfcGxheWJhY2tfcmVzdGFydCwgX19weXhfa19wbGF5YmFja19yZXN0YXJ0LCBzaXplb2Yo X19weXhfa19wbGF5YmFja19yZXN0YXJ0KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19w cmVwYXJlLCBfX3B5eF9rX3ByZXBhcmUsIHNpemVvZihfX3B5eF9rX3ByZXBhcmUpLCAwLCAwLCAx LCAxfSwKLS0gIHsmX19weXhfbl9zX3ByZXNlbnQsIF9fcHl4X2tfcHJlc2VudCwgc2l6ZW9mKF9f cHl4X2tfcHJlc2VudCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfcHJvcCwgX19weXhf a19wcm9wLCBzaXplb2YoX19weXhfa19wcm9wKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25f c19wcm9wZXJ0eV9jaGFuZ2UsIF9fcHl4X2tfcHJvcGVydHlfY2hhbmdlLCBzaXplb2YoX19weXhf a19wcm9wZXJ0eV9jaGFuZ2UpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3Byb3BlcnR5 X2Vycm9yLCBfX3B5eF9rX3Byb3BlcnR5X2Vycm9yLCBzaXplb2YoX19weXhfa19wcm9wZXJ0eV9l cnJvciksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfcHJvcGVydHlfZm9ybWF0LCBfX3B5 eF9rX3Byb3BlcnR5X2Zvcm1hdCwgc2l6ZW9mKF9fcHl4X2tfcHJvcGVydHlfZm9ybWF0KSwgMCwg MCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19wcm9wZXJ0eV91bmF2YWlsYWJsZSwgX19weXhfa19w cm9wZXJ0eV91bmF2YWlsYWJsZSwgc2l6ZW9mKF9fcHl4X2tfcHJvcGVydHlfdW5hdmFpbGFibGUp LCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfa3Bfc19weW1wdl9lcnJvcl9kdXJpbmdfY2FsbGJh Y2tfcywgX19weXhfa19weW1wdl9lcnJvcl9kdXJpbmdfY2FsbGJhY2tfcywgc2l6ZW9mKF9fcHl4 X2tfcHltcHZfZXJyb3JfZHVyaW5nX2NhbGxiYWNrX3MpLCAwLCAwLCAxLCAwfSwKLS0gIHsmX19w eXhfbl9zX3B5eF9QaWNrbGVFcnJvciwgX19weXhfa19weXhfUGlja2xlRXJyb3IsIHNpemVvZihf X3B5eF9rX3B5eF9QaWNrbGVFcnJvciksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfcHl4 X2NoZWNrc3VtLCBfX3B5eF9rX3B5eF9jaGVja3N1bSwgc2l6ZW9mKF9fcHl4X2tfcHl4X2NoZWNr c3VtKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19weXhfcmVzdWx0LCBfX3B5eF9rX3B5 eF9yZXN1bHQsIHNpemVvZihfX3B5eF9rX3B5eF9yZXN1bHQpLCAwLCAwLCAxLCAxfSwKLS0gIHsm X19weXhfbl9zX3B5eF9zdGF0ZSwgX19weXhfa19weXhfc3RhdGUsIHNpemVvZihfX3B5eF9rX3B5 eF9zdGF0ZSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfcHl4X3R5cGUsIF9fcHl4X2tf cHl4X3R5cGUsIHNpemVvZihfX3B5eF9rX3B5eF90eXBlKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9f cHl4X25fc19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCwgX19weXhfa19weXhfdW5waWNr bGVfRW5kT2ZGaWxlUmVhY2hlZCwgc2l6ZW9mKF9fcHl4X2tfcHl4X3VucGlja2xlX0VuZE9mRmls ZVJlYWNoZWQpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3B5eF91bnBpY2tsZV9FdmVu dCwgX19weXhfa19weXhfdW5waWNrbGVfRXZlbnQsIHNpemVvZihfX3B5eF9rX3B5eF91bnBpY2ts ZV9FdmVudCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfcHl4X3VucGlja2xlX0lucHV0 RGlzcGF0Y2gsIF9fcHl4X2tfcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2gsIHNpemVvZihfX3B5 eF9rX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4 X25fc19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgX19weXhfa19weXhfdW5waWNrbGVfTG9nTWVz c2FnZSwgc2l6ZW9mKF9fcHl4X2tfcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UpLCAwLCAwLCAxLCAx fSwKLS0gIHsmX19weXhfbl9zX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgX19weXhfa19weXhfdW5w aWNrbGVfUHJvcGVydHksIHNpemVvZihfX3B5eF9rX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSksIDAs IDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywg X19weXhfa19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCBzaXplb2YoX19weXhfa19weXhf dW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19w eXhfdnRhYmxlLCBfX3B5eF9rX3B5eF92dGFibGUsIHNpemVvZihfX3B5eF9rX3B5eF92dGFibGUp LCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3F1YWxuYW1lLCBfX3B5eF9rX3F1YWxuYW1l LCBzaXplb2YoX19weXhfa19xdWFsbmFtZSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3Nf cXVldWVfZnVsbCwgX19weXhfa19xdWV1ZV9mdWxsLCBzaXplb2YoX19weXhfa19xdWV1ZV9mdWxs KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19xdWl0LCBfX3B5eF9rX3F1aXQsIHNpemVv ZihfX3B5eF9rX3F1aXQpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3JhbmdlLCBfX3B5 eF9rX3JhbmdlLCBzaXplb2YoX19weXhfa19yYW5nZSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5 eF9uX3NfcmVkcmF3LCBfX3B5eF9rX3JlZHJhdywgc2l6ZW9mKF9fcHl4X2tfcmVkcmF3KSwgMCwg MCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19yZWR1Y2UsIF9fcHl4X2tfcmVkdWNlLCBzaXplb2Yo X19weXhfa19yZWR1Y2UpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3JlZHVjZV9jeXRo b24sIF9fcHl4X2tfcmVkdWNlX2N5dGhvbiwgc2l6ZW9mKF9fcHl4X2tfcmVkdWNlX2N5dGhvbiks IDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfcmVkdWNlX2V4LCBfX3B5eF9rX3JlZHVjZV9l eCwgc2l6ZW9mKF9fcHl4X2tfcmVkdWNlX2V4KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25f c19yZWxlYXNlLCBfX3B5eF9rX3JlbGVhc2UsIHNpemVvZihfX3B5eF9rX3JlbGVhc2UpLCAwLCAw LCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3JlbW92ZSwgX19weXhfa19yZW1vdmUsIHNpemVvZihf X3B5eF9rX3JlbW92ZSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfcmVuZGVyLCBfX3B5 eF9rX3JlbmRlciwgc2l6ZW9mKF9fcHl4X2tfcmVuZGVyKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9f cHl4X25fc19yZW5kZXJfZmQsIF9fcHl4X2tfcmVuZGVyX2ZkLCBzaXplb2YoX19weXhfa19yZW5k ZXJfZmQpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3JlcGVhdCwgX19weXhfa19yZXBl YXQsIHNpemVvZihfX3B5eF9rX3JlcGVhdCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3Nf cmVxdWVzdF9ldmVudCwgX19weXhfa19yZXF1ZXN0X2V2ZW50LCBzaXplb2YoX19weXhfa19yZXF1 ZXN0X2V2ZW50KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19ydW4sIF9fcHl4X2tfcnVu LCBzaXplb2YoX19weXhfa19ydW4pLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3MsIF9f cHl4X2tfcywgc2l6ZW9mKF9fcHl4X2tfcyksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3Nf c2NyaXB0X2lucHV0X2Rpc3BhdGNoLCBfX3B5eF9rX3NjcmlwdF9pbnB1dF9kaXNwYXRjaCwgc2l6 ZW9mKF9fcHl4X2tfc2NyaXB0X2lucHV0X2Rpc3BhdGNoKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9f cHl4X25fc19zZWVrLCBfX3B5eF9rX3NlZWssIHNpemVvZihfX3B5eF9rX3NlZWspLCAwLCAwLCAx LCAxfSwKLS0gIHsmX19weXhfbl9zX3NlbGYsIF9fcHl4X2tfc2VsZiwgc2l6ZW9mKF9fcHl4X2tf c2VsZiksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9rcF9zX3NlbGZfX2N0eF9jYW5ub3RfYmVf Y29udmVydGVkX3RvLCBfX3B5eF9rX3NlbGZfX2N0eF9jYW5ub3RfYmVfY29udmVydGVkX3RvLCBz aXplb2YoX19weXhfa19zZWxmX19jdHhfY2Fubm90X2JlX2NvbnZlcnRlZF90byksIDAsIDAsIDEs IDB9LAotLSAgeyZfX3B5eF9rcF9zX3NlbGZfcGFyYW1zX2Nhbm5vdF9iZV9jb252ZXJ0ZWQsIF9f cHl4X2tfc2VsZl9wYXJhbXNfY2Fubm90X2JlX2NvbnZlcnRlZCwgc2l6ZW9mKF9fcHl4X2tfc2Vs Zl9wYXJhbXNfY2Fubm90X2JlX2NvbnZlcnRlZCksIDAsIDAsIDEsIDB9LAotLSAgeyZfX3B5eF9u X3Nfc2V0LCBfX3B5eF9rX3NldCwgc2l6ZW9mKF9fcHl4X2tfc2V0KSwgMCwgMCwgMSwgMX0sCi0t ICB7Jl9fcHl4X25fc19zZXRfYW1iaWVudF9saWdodCwgX19weXhfa19zZXRfYW1iaWVudF9saWdo dCwgc2l6ZW9mKF9fcHl4X2tfc2V0X2FtYmllbnRfbGlnaHQpLCAwLCAwLCAxLCAxfSwKLS0gIHsm X19weXhfbl9zX3NldF9pY2NfcHJvZmlsZSwgX19weXhfa19zZXRfaWNjX3Byb2ZpbGUsIHNpemVv ZihfX3B5eF9rX3NldF9pY2NfcHJvZmlsZSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3Nf c2V0X2xvZ19sZXZlbCwgX19weXhfa19zZXRfbG9nX2xldmVsLCBzaXplb2YoX19weXhfa19zZXRf bG9nX2xldmVsKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19zZXRfb3B0aW9uLCBfX3B5 eF9rX3NldF9vcHRpb24sIHNpemVvZihfX3B5eF9rX3NldF9vcHRpb24pLCAwLCAwLCAxLCAxfSwK LS0gIHsmX19weXhfbl9zX3NldF9wcm9wZXJ0eSwgX19weXhfa19zZXRfcHJvcGVydHksIHNpemVv ZihfX3B5eF9rX3NldF9wcm9wZXJ0eSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3Nfc2V0 X3Byb3BlcnR5X3JlcGx5LCBfX3B5eF9rX3NldF9wcm9wZXJ0eV9yZXBseSwgc2l6ZW9mKF9fcHl4 X2tfc2V0X3Byb3BlcnR5X3JlcGx5KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19zZXRz dGF0ZSwgX19weXhfa19zZXRzdGF0ZSwgc2l6ZW9mKF9fcHl4X2tfc2V0c3RhdGUpLCAwLCAwLCAx LCAxfSwKLS0gIHsmX19weXhfbl9zX3NldHN0YXRlX2N5dGhvbiwgX19weXhfa19zZXRzdGF0ZV9j eXRob24sIHNpemVvZihfX3B5eF9rX3NldHN0YXRlX2N5dGhvbiksIDAsIDAsIDEsIDF9LAotLSAg eyZfX3B5eF9uX3Nfc2h1dGRvd24sIF9fcHl4X2tfc2h1dGRvd24sIHNpemVvZihfX3B5eF9rX3No dXRkb3duKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19za2lwX3JlbmRlcmluZywgX19w eXhfa19za2lwX3JlbmRlcmluZywgc2l6ZW9mKF9fcHl4X2tfc2tpcF9yZW5kZXJpbmcpLCAwLCAw LCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3N0YXJ0LCBfX3B5eF9rX3N0YXJ0LCBzaXplb2YoX19w eXhfa19zdGFydCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3Nfc3RhcnRfZmlsZSwgX19w eXhfa19zdGFydF9maWxlLCBzaXplb2YoX19weXhfa19zdGFydF9maWxlKSwgMCwgMCwgMSwgMX0s Ci0tICB7Jl9fcHl4X25fc19zdGRlcnIsIF9fcHl4X2tfc3RkZXJyLCBzaXplb2YoX19weXhfa19z dGRlcnIpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3N0cmRlYywgX19weXhfa19zdHJk ZWMsIHNpemVvZihfX3B5eF9rX3N0cmRlYyksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3Nf c3RyZGVjX2VyciwgX19weXhfa19zdHJkZWNfZXJyLCBzaXplb2YoX19weXhfa19zdHJkZWNfZXJy KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc19zdHJlbmMsIF9fcHl4X2tfc3RyZW5jLCBz aXplb2YoX19weXhfa19zdHJlbmMpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3N0cmlj dCwgX19weXhfa19zdHJpY3QsIHNpemVvZihfX3B5eF9rX3N0cmljdCksIDAsIDAsIDEsIDF9LAot LSAgeyZfX3B5eF9rcF9zX3N0cmluZ3NvdXJjZSwgX19weXhfa19zdHJpbmdzb3VyY2UsIHNpemVv ZihfX3B5eF9rX3N0cmluZ3NvdXJjZSksIDAsIDAsIDEsIDB9LAotLSAgeyZfX3B5eF9uX3Nfc3Vj Y2VzcywgX19weXhfa19zdWNjZXNzLCBzaXplb2YoX19weXhfa19zdWNjZXNzKSwgMCwgMCwgMSwg MX0sCi0tICB7Jl9fcHl4X25fc19zdXJyb2dhdGVlc2NhcGUsIF9fcHl4X2tfc3Vycm9nYXRlZXNj YXBlLCBzaXplb2YoX19weXhfa19zdXJyb2dhdGVlc2NhcGUpLCAwLCAwLCAxLCAxfSwKLS0gIHsm X19weXhfbl9zX3N5cywgX19weXhfa19zeXMsIHNpemVvZihfX3B5eF9rX3N5cyksIDAsIDAsIDEs IDF9LAotLSAgeyZfX3B5eF9uX3NfdGFyZ2V0X3RpbWUsIF9fcHl4X2tfdGFyZ2V0X3RpbWUsIHNp emVvZihfX3B5eF9rX3RhcmdldF90aW1lKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc190 ZXN0LCBfX3B5eF9rX3Rlc3QsIHNpemVvZihfX3B5eF9rX3Rlc3QpLCAwLCAwLCAxLCAxfSwKLS0g IHsmX19weXhfbl9zX3RocmVhZGluZywgX19weXhfa190aHJlYWRpbmcsIHNpemVvZihfX3B5eF9r X3RocmVhZGluZyksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfdGljaywgX19weXhfa190 aWNrLCBzaXplb2YoX19weXhfa190aWNrKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc190 aW1lb3V0LCBfX3B5eF9rX3RpbWVvdXQsIHNpemVvZihfX3B5eF9rX3RpbWVvdXQpLCAwLCAwLCAx LCAxfSwKLS0gIHsmX19weXhfbl9zX3RyYWNlLCBfX3B5eF9rX3RyYWNlLCBzaXplb2YoX19weXhf a190cmFjZSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfdHJhY2tzX2NoYW5nZWQsIF9f cHl4X2tfdHJhY2tzX2NoYW5nZWQsIHNpemVvZihfX3B5eF9rX3RyYWNrc19jaGFuZ2VkKSwgMCwg MCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc190cmFja3Nfc3dpdGNoZWQsIF9fcHl4X2tfdHJhY2tz X3N3aXRjaGVkLCBzaXplb2YoX19weXhfa190cmFja3Nfc3dpdGNoZWQpLCAwLCAwLCAxLCAxfSwK LS0gIHsmX19weXhfbl9zX3VuaW5pdF9nbCwgX19weXhfa191bmluaXRfZ2wsIHNpemVvZihfX3B5 eF9rX3VuaW5pdF9nbCksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfdW5pbml0aWFsaXpl ZCwgX19weXhfa191bmluaXRpYWxpemVkLCBzaXplb2YoX19weXhfa191bmluaXRpYWxpemVkKSwg MCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc191bmtub3duX2Zvcm1hdCwgX19weXhfa191bmtu b3duX2Zvcm1hdCwgc2l6ZW9mKF9fcHl4X2tfdW5rbm93bl9mb3JtYXQpLCAwLCAwLCAxLCAxfSwK LS0gIHsmX19weXhfbl9zX3Vub2JzZXJ2ZV9wcm9wZXJ0eSwgX19weXhfa191bm9ic2VydmVfcHJv cGVydHksIHNpemVvZihfX3B5eF9rX3Vub2JzZXJ2ZV9wcm9wZXJ0eSksIDAsIDAsIDEsIDF9LAot LSAgeyZfX3B5eF9uX3NfdW5wYXVzZSwgX19weXhfa191bnBhdXNlLCBzaXplb2YoX19weXhfa191 bnBhdXNlKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc191bnN1cHBvcnRlZCwgX19weXhf a191bnN1cHBvcnRlZCwgc2l6ZW9mKF9fcHl4X2tfdW5zdXBwb3J0ZWQpLCAwLCAwLCAxLCAxfSwK LS0gIHsmX19weXhfbl9zX3VwZGF0ZSwgX19weXhfa191cGRhdGUsIHNpemVvZihfX3B5eF9rX3Vw ZGF0ZSksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9rcF9zX3V0Zl84LCBfX3B5eF9rX3V0Zl84 LCBzaXplb2YoX19weXhfa191dGZfOCksIDAsIDAsIDEsIDB9LAotLSAgeyZfX3B5eF9uX3Nfdiwg X19weXhfa192LCBzaXplb2YoX19weXhfa192KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25f c192YWx1ZSwgX19weXhfa192YWx1ZSwgc2l6ZW9mKF9fcHl4X2tfdmFsdWUpLCAwLCAwLCAxLCAx fSwKLS0gIHsmX19weXhfbl9zX3ZhbHVlcywgX19weXhfa192YWx1ZXMsIHNpemVvZihfX3B5eF9r X3ZhbHVlcyksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3NfdmVyc2lvbiwgX19weXhfa192 ZXJzaW9uLCBzaXplb2YoX19weXhfa192ZXJzaW9uKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4 X25fc192ZXJzaW9uX2luZm8sIF9fcHl4X2tfdmVyc2lvbl9pbmZvLCBzaXplb2YoX19weXhfa192 ZXJzaW9uX2luZm8pLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3ZpZGN1dHRlcl9saWJz X21wdiwgX19weXhfa192aWRjdXR0ZXJfbGlic19tcHYsIHNpemVvZihfX3B5eF9rX3ZpZGN1dHRl cl9saWJzX21wdiksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJz X3B5bXB2X21wdl9weXgsIF9fcHl4X2tfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgc2l6 ZW9mKF9fcHl4X2tfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCksIDAsIDAsIDEsIDB9LAot LSAgeyZfX3B5eF9uX3NfdmlkZW9fcmVjb25maWcsIF9fcHl4X2tfdmlkZW9fcmVjb25maWcsIHNp emVvZihfX3B5eF9rX3ZpZGVvX3JlY29uZmlnKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25f c192b19pbml0X2ZhaWxlZCwgX19weXhfa192b19pbml0X2ZhaWxlZCwgc2l6ZW9mKF9fcHl4X2tf dm9faW5pdF9mYWlsZWQpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3csIF9fcHl4X2tf dywgc2l6ZW9mKF9fcHl4X2tfdyksIDAsIDAsIDEsIDF9LAotLSAgeyZfX3B5eF9uX3Nfd2Fybiwg X19weXhfa193YXJuLCBzaXplb2YoX19weXhfa193YXJuKSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9f cHl4X25fc193YXJuaW5ncywgX19weXhfa193YXJuaW5ncywgc2l6ZW9mKF9fcHl4X2tfd2Fybmlu Z3MpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3dsX2Rpc3BsYXksIF9fcHl4X2tfd2xf ZGlzcGxheSwgc2l6ZW9mKF9fcHl4X2tfd2xfZGlzcGxheSksIDAsIDAsIDEsIDF9LAotLSAgeyZf X3B5eF9uX3Nfd3JhcHBlZCwgX19weXhfa193cmFwcGVkLCBzaXplb2YoX19weXhfa193cmFwcGVk KSwgMCwgMCwgMSwgMX0sCi0tICB7Jl9fcHl4X25fc193cml0ZSwgX19weXhfa193cml0ZSwgc2l6 ZW9mKF9fcHl4X2tfd3JpdGUpLCAwLCAwLCAxLCAxfSwKLS0gIHsmX19weXhfbl9zX3gxMV9kaXNw bGF5LCBfX3B5eF9rX3gxMV9kaXNwbGF5LCBzaXplb2YoX19weXhfa194MTFfZGlzcGxheSksIDAs IDAsIDEsIDF9LAotLSAgezAsIDAsIDAsIDAsIDAsIDAsIDB9Ci0tfTsKLS1zdGF0aWMgQ1lUSE9O X1NNQUxMX0NPREUgaW50IF9fUHl4X0luaXRDYWNoZWRCdWlsdGlucyh2b2lkKSB7Ci0tICBfX3B5 eF9idWlsdGluX0ltcG9ydEVycm9yID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX0lt cG9ydEVycm9yKTsgaWYgKCFfX3B5eF9idWlsdGluX0ltcG9ydEVycm9yKSBfX1BZWF9FUlIoMCwg NDQsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19weXhfYnVpbHRpbl9vYmplY3QgPSBfX1B5eF9HZXRC dWlsdGluTmFtZShfX3B5eF9uX3Nfb2JqZWN0KTsgaWYgKCFfX3B5eF9idWlsdGluX29iamVjdCkg X19QWVhfRVJSKDAsIDM0NiwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF9idWlsdGluX1VuaWNv ZGVEZWNvZGVFcnJvciA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19Vbmljb2RlRGVj b2RlRXJyb3IpOyBpZiAoIV9fcHl4X2J1aWx0aW5fVW5pY29kZURlY29kZUVycm9yKSBfX1BZWF9F UlIoMCwgNTgsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19weXhfYnVpbHRpbl9Vbmljb2RlRW5jb2Rl RXJyb3IgPSBfX1B5eF9HZXRCdWlsdGluTmFtZShfX3B5eF9uX3NfVW5pY29kZUVuY29kZUVycm9y KTsgaWYgKCFfX3B5eF9idWlsdGluX1VuaWNvZGVFbmNvZGVFcnJvcikgX19QWVhfRVJSKDAsIDY2 LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fcHl4X2J1aWx0aW5fcmFuZ2UgPSBfX1B5eF9HZXRCdWls dGluTmFtZShfX3B5eF9uX3NfcmFuZ2UpOyBpZiAoIV9fcHl4X2J1aWx0aW5fcmFuZ2UpIF9fUFlY X0VSUigwLCAyMjIsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19weXhfYnVpbHRpbl9pZCA9IF9fUHl4 X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19pZCk7IGlmICghX19weXhfYnVpbHRpbl9pZCkgX19Q WVhfRVJSKDAsIDMwMywgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF9idWlsdGluX2VudW1lcmF0 ZSA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19lbnVtZXJhdGUpOyBpZiAoIV9fcHl4 X2J1aWx0aW5fZW51bWVyYXRlKSBfX1BZWF9FUlIoMCwgNDc1LCBfX3B5eF9MMV9lcnJvcikKLS0g IF9fcHl4X2J1aWx0aW5fVHlwZUVycm9yID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9z X1R5cGVFcnJvcik7IGlmICghX19weXhfYnVpbHRpbl9UeXBlRXJyb3IpIF9fUFlYX0VSUigxLCAy LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fcHl4X2J1aWx0aW5fRGVwcmVjYXRpb25XYXJuaW5nID0g X19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX0RlcHJlY2F0aW9uV2FybmluZyk7IGlmICgh X19weXhfYnVpbHRpbl9EZXByZWNhdGlvbldhcm5pbmcpIF9fUFlYX0VSUigwLCA4MzAsIF9fcHl4 X0wxX2Vycm9yKQotLSAgcmV0dXJuIDA7Ci0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICByZXR1cm4g LTE7Ci0tfQotLQotLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfSW5pdENhY2hl ZENvbnN0YW50cyh2b2lkKSB7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fUHl4X0luaXRDYWNoZWRDb25zdGFudHMiLCAwKTsK LS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTkKLS0gKiAKLS0gKiBk ZWYgX2Vycm9ycyhmbik6Ci0tICogICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgdiA9IGZuKCprLCAqKmt3KQotLSAqICAg ICAgICAgaWYgdiA8IDA6Ci0tICovCi0tICBfX3B5eF90dXBsZV8gPSBQeVR1cGxlX1BhY2soMywg X19weXhfbl9zX2ssIF9fcHl4X25fc19rdywgX19weXhfbl9zX3YpOyBpZiAodW5saWtlbHkoIV9f cHl4X3R1cGxlXykpIF9fUFlYX0VSUigwLCAzMTksIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhf R09UUkVGKF9fcHl4X3R1cGxlXyk7Ci0tICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlXyk7Ci0t ICBfX3B5eF9jb2Rlb2JqX18yID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDAsIDAsIDMs IDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFN8Q09fVkFSQVJHU3xDT19WQVJLRVlXT1JEUywg X19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwg X19weXhfdHVwbGVfLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3dyYXBwZWQsIDMx OSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzIpKSBf X1BZWF9FUlIoMCwgMzE5LCBfX3B5eF9MMV9lcnJvcikKLS0KLS0gIC8qICIodHJlZSBmcmFnbWVu dCkiOjIKLS0gKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6Ci0tICogICAgIHJhaXNlIFR5 cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0 X18iKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogZGVmIF9fc2V0c3RhdGVfY3l0 aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgotLSAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRl ZmF1bHQgX19yZWR1Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikKLS0gKi8KLS0g IF9fcHl4X3R1cGxlX18zID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2twX3Nfbm9fZGVmYXVsdF9f X3JlZHVjZV9fX2R1ZV90b19ub24pOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18zKSkgX19Q WVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxl X18zKTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzMpOwotLQotLSAgLyogIih0cmVl IGZyYWdtZW50KSI6NAotLSAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1 Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikKLS0gKiBkZWYgX19zZXRzdGF0ZV9j eXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8g ZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICovCi0tICBfX3B5eF90dXBsZV9fNCA9IFB5VHVwbGVf UGFjaygxLCBfX3B5eF9rcF9zX25vX2RlZmF1bHRfX19yZWR1Y2VfX19kdWVfdG9fbm9uKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNCkpIF9fUFlYX0VSUigxLCA0LCBfX3B5eF9MMV9lcnJv cikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNCk7Ci0tICBfX1B5eF9HSVZFUkVGKF9f cHl4X3R1cGxlX180KTsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4 MzAKLS0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotLSAqICAgICAgICAgc2VsZi5pbml0ZWQg PSBGYWxzZQotLSAqICAgICAgICAgd2FybmluZ3Mud2FybigiT3BlbkdMQ29udGV4dCBpcyBkZXBy ZWNhdGVkLCBwbGVhc2Ugc3dpdGNoIHRvIFJlbmRlckNvbnRleHQiLCBEZXByZWNhdGlvbldhcm5p bmcpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAKLS0gKiAgICAgZGVmIGluaXRf Z2woc2VsZiwgZXh0cywgZ2V0X3Byb2NfYWRkcmVzcyk6Ci0tICovCi0tICBfX3B5eF90dXBsZV9f NSA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9rcF9zX09wZW5HTENvbnRleHRfaXNfZGVwcmVjYXRl ZF9wbGVhLCBfX3B5eF9idWlsdGluX0RlcHJlY2F0aW9uV2FybmluZyk7IGlmICh1bmxpa2VseSgh X19weXhfdHVwbGVfXzUpKSBfX1BZWF9FUlIoMCwgODMwLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f UHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNSk7Ci0tICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxl X181KTsKLS0KLS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjIKLS0gKiBkZWYgX19yZWR1Y2VfY3l0 aG9uX18oc2VsZik6Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBi ZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5 eF9zdGF0ZSk6Ci0tICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBj b252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0tICovCi0tICBfX3B5 eF90dXBsZV9fNiA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9rcF9zX3NlbGZfX2N0eF9jYW5ub3Rf YmVfY29udmVydGVkX3RvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNikpIF9fUFlYX0VS UigxLCAyLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNik7 Ci0tICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX182KTsKLS0KLS0gIC8qICIodHJlZSBmcmFn bWVudCkiOjQKLS0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNv bnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKLS0gKiBkZWYgX19zZXRz dGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6Ci0tICogICAgIHJhaXNlIFR5cGVFcnJv cigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBw aWNrbGluZyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKi8KLS0gIF9fcHl4X3R1 cGxlX183ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5vdF9iZV9j b252ZXJ0ZWRfdG8pOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX183KSkgX19QWVhfRVJSKDEs IDQsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX183KTsKLS0g IF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzcpOwotLQotLSAgLyogIih0cmVlIGZyYWdtZW50 KSI6MgotLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKLS0gKiAgICAgcmFpc2UgVHlw ZUVycm9yKCJzZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVj dCBmb3IgcGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogZGVmIF9f c2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgotLSAqICAgICByYWlzZSBUeXBl RXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0 IGZvciBwaWNrbGluZyIpCi0tICovCi0tICBfX3B5eF90dXBsZV9fOCA9IFB5VHVwbGVfUGFjaygx LCBfX3B5eF9rcF9zX3NlbGZfcGFyYW1zX2Nhbm5vdF9iZV9jb252ZXJ0ZWQpOyBpZiAodW5saWtl bHkoIV9fcHl4X3R1cGxlX184KSkgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQotLSAg X19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX184KTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVw bGVfXzgpOwotLQotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6NAotLSAqICAgICByYWlzZSBUeXBl RXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0 IGZvciBwaWNrbGluZyIpCi0tICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhf c3RhdGUpOgotLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBj b252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKi8KLS0gIF9fcHl4X3R1cGxlX185ID0gUHlUdXBsZV9QYWNrKDEs IF9fcHl4X2twX3Nfc2VsZl9wYXJhbXNfY2Fubm90X2JlX2NvbnZlcnRlZCk7IGlmICh1bmxpa2Vs eSghX19weXhfdHVwbGVfXzkpKSBfX1BZWF9FUlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCi0tICBf X1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzkpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBs ZV9fOSk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTkyCi0tICog ICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVks IGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCi0tICogICAgICAgICBpZiBk cm1fZGlzcGxheToKLS0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXku Z2V0KCJmZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAg ICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpCi0t ICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQo ImNvbm5lY3Rvcl9pZCIsIC0xKQotLSAqLwotLSAgX19weXhfdHVwbGVfXzEwID0gUHlUdXBsZV9Q YWNrKDIsIF9fcHl4X25fc19mZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90dXBsZV9fMTApKSBfX1BZWF9FUlIoMCwgOTkyLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4 X0dPVFJFRihfX3B5eF90dXBsZV9fMTApOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9f MTApOwotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MwotLSAqICAg ICAgICAgaWYgZHJtX2Rpc3BsYXk6Ci0tICogICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRy bV9kaXNwbGF5LmdldCgiZmQiLCAtMSkKLS0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNf aWQgPSBkcm1fZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rp c3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkKLS0gKiAgICAgICAgICAgICBhcnAgPSBkcm1f ZGlzcGxheS5nZXQoImF0b21pY19yZXF1ZXN0X3B0ciIsIE5vbmUpCi0tICovCi0tICBfX3B5eF90 dXBsZV9fMTEgPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9zX2NydGNfaWQsIF9fcHl4X2ludF9u ZWdfMSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzExKSkgX19QWVhfRVJSKDAsIDk5Mywg X19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzExKTsKLS0gIF9f UHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzExKTsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5OTQKLS0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rp c3BsYXkuZ2V0KCJmZCIsIC0xKQotLSAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9 IGRybV9kaXNwbGF5LmdldCgiY3J0Y19pZCIsIC0xKQotLSAqICAgICAgICAgICAgIGRybV9wYXJh bXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNw bGF5LmdldCgiYXRvbWljX3JlcXVlc3RfcHRyIiwgTm9uZSkKLS0gKiAgICAgICAgICAgICBpZiBh cnAgaXMgbm90IE5vbmU6Ci0tICovCi0tICBfX3B5eF90dXBsZV9fMTIgPSBQeVR1cGxlX1BhY2so MiwgX19weXhfbl9zX2Nvbm5lY3Rvcl9pZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90dXBsZV9fMTIpKSBfX1BZWF9FUlIoMCwgOTk0LCBfX3B5eF9MMV9lcnJvcikKLS0g IF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTIpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF90 dXBsZV9fMTIpOwotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5NQot LSAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5LmdldCgiY3J0 Y19pZCIsIC0xKQotLSAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJt X2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkKLS0gKiAgICAgICAgICAgICBhcnAgPSBk cm1fZGlzcGxheS5nZXQoImF0b21pY19yZXF1ZXN0X3B0ciIsIE5vbmUpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6Ci0tICog ICAgICAgICAgICAgICAgIGRybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gPF9kcm1Nb2Rl QXRvbWljUmVxICoqPmdldF9wb2ludGVyKGFycCwgImRybU1vZGVBdG9taWNSZXEqIikKLS0gKi8K LS0gIF9fcHl4X3R1cGxlX18xMyA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfYXRvbWljX3Jl cXVlc3RfcHRyLCBQeV9Ob25lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMTMpKSBfX1BZ WF9FUlIoMCwgOTk1LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBs ZV9fMTMpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTMpOwotLQotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5OAotLSAqICAgICAgICAgICAgIGlmIGFycCBp cyBub3QgTm9uZToKLS0gKiAgICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVz dF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0 b21pY1JlcSoiKQotLSAqICAgICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVyX2ZkID0gZHJtX2Rp c3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9EUk1fRElT UExBWSwgJmRybV9wYXJhbXMpCi0tICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6Ci0tICovCi0t ICBfX3B5eF90dXBsZV9fMTQgPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9zX3JlbmRlcl9mZCwg X19weXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMTQpKSBfX1BZWF9F UlIoMCwgOTk4LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9f MTQpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTQpOwotLQotLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODMKLS0gKiAgICAgICAgIGlmIG9wZW5nbF9mYm86 Ci0tICogICAgICAgICAgICAgbWVtc2V0KCZmYm8sIDAsIHNpemVvZihmYm8pKQotLSAqICAgICAg ICAgICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJvLmdldCgiZmJvIiwgMCkgb3IgMCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgZmJvLncgPSBvcGVuZ2xfZmJvWyJ3 Il0KLS0gKiAgICAgICAgICAgICBmYm8uaCA9IG9wZW5nbF9mYm9bImgiXQotLSAqLwotLSAgX19w eXhfdHVwbGVfXzE1ID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19mYm8sIF9fcHl4X2ludF8w KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMTUpKSBfX1BZWF9FUlIoMCwgMTA4MywgX19w eXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzE1KTsKLS0gIF9fUHl4 X0dJVkVSRUYoX19weXhfdHVwbGVfXzE1KTsKLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDg2Ci0tICogICAgICAgICAgICAgZmJvLncgPSBvcGVuZ2xfZmJvWyJ3Il0K LS0gKiAgICAgICAgICAgICBmYm8uaCA9IG9wZW5nbF9mYm9bImgiXQotLSAqICAgICAgICAgICAg IGZiby5pbnRlcm5hbF9mb3JtYXQgPSBvcGVuZ2xfZmJvLmdldCgiaW50ZXJuYWxfZm9ybWF0Iiwg MCkgb3IgMCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAgICAgcGFy YW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCi0tICogICAg ICAgICBpZiBmbGlwX3k6Ci0tICovCi0tICBfX3B5eF90dXBsZV9fMTYgPSBQeVR1cGxlX1BhY2so MiwgX19weXhfbl9zX2ludGVybmFsX2Zvcm1hdCwgX19weXhfaW50XzApOyBpZiAodW5saWtlbHko IV9fcHl4X3R1cGxlX18xNikpIF9fUFlYX0VSUigwLCAxMDg2LCBfX3B5eF9MMV9lcnJvcikKLS0g IF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTYpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF90 dXBsZV9fMTYpOwotLQotLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MgotLSAqIGRlZiBfX3JlZHVj ZV9jeXRob25fXyhzZWxmKToKLS0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fu bm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYs IF9fcHl4X3N0YXRlKToKLS0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90 IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKLS0gKi8KLS0g IF9fcHl4X3R1cGxlX18xNyA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9rcF9zX3NlbGZfX2N0eF9j YW5ub3RfYmVfY29udmVydGVkX3RvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMTcpKSBf X1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdHVw bGVfXzE3KTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzE3KTsKLS0KLS0gIC8qICIo dHJlZSBmcmFnbWVudCkiOjQKLS0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fu bm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKLS0gKiBk ZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6Ci0tICogICAgIHJhaXNl IFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2Jq ZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKi8KLS0g IF9fcHl4X3R1cGxlX18xOCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9rcF9zX3NlbGZfX2N0eF9j YW5ub3RfYmVfY29udmVydGVkX3RvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMTgpKSBf X1BZWF9FUlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdHVw bGVfXzE4KTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzE4KTsKLS0KLS0gIC8qICIo dHJlZSBmcmFnbWVudCkiOjIKLS0gKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6Ci0tICog ICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQ eXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6Ci0tICogICAg IHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRo b24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0tICovCi0tICBfX3B5eF90dXBsZV9fMTkgPSBQeVR1 cGxlX1BhY2soMSwgX19weXhfa3Bfc19zZWxmX19jdHhfY2Fubm90X2JlX2NvbnZlcnRlZF90byk7 IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE5KSkgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wx X2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18xOSk7Ci0tICBfX1B5eF9HSVZF UkVGKF9fcHl4X3R1cGxlX18xOSk7Ci0tCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0Ci0tICog ICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQ eXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0tICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18o c2VsZiwgX19weXhfc3RhdGUpOgotLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBj YW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICovCi0tICBfX3B5eF90dXBsZV9fMjAgPSBQeVR1 cGxlX1BhY2soMSwgX19weXhfa3Bfc19zZWxmX19jdHhfY2Fubm90X2JlX2NvbnZlcnRlZF90byk7 IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzIwKSkgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wx X2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18yMCk7Ci0tICBfX1B5eF9HSVZF UkVGKF9fcHl4X3R1cGxlX18yMCk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTIKLS0gKiAgICAgdm9pZCBQeUV2YWxfSW5pdFRocmVhZHMoKQotLSAqIAotLSAqIF9p c19weTMgPSBzeXMudmVyc2lvbl9pbmZvID49ICgzLCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqIF9zdHJkZWNfZXJyID0gInN1cnJvZ2F0ZWVzY2FwZSIgaWYgX2lzX3B5MyBlbHNl ICJzdHJpY3QiCi0tICogIyBtcHYgLT4gUHl0aG9uCi0tICovCi0tICBfX3B5eF90dXBsZV9fMjEg PSBQeVR1cGxlX1BhY2soMSwgX19weXhfaW50XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxl X18yMSkpIF9fUFlYX0VSUigwLCA1MiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYo X19weXhfdHVwbGVfXzIxKTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzIxKTsKLS0K LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NQotLSAqIF9zdHJkZWNfZXJy ID0gInN1cnJvZ2F0ZWVzY2FwZSIgaWYgX2lzX3B5MyBlbHNlICJzdHJpY3QiCi0tICogIyBtcHYg LT4gUHl0aG9uCi0tICogZGVmIF9zdHJkZWMocyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgdHJ5OgotLSAqICAgICAgICAgcmV0dXJuIHMuZGVjb2RlKCJ1dGYtOCIsIF9z dHJkZWNfZXJyKQotLSAqLwotLSAgX19weXhfdHVwbGVfXzIyID0gUHlUdXBsZV9QYWNrKDEsIF9f cHl4X25fc19zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjIpKSBfX1BZWF9FUlIoMCwg NTUsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18yMik7Ci0t ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18yMik7Ci0tICBfX3B5eF9jb2Rlb2JqX18yMyA9 IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8Q09f TkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMjIsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9u X3Nfc3RyZGVjLCA1NSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2Nv ZGVvYmpfXzIzKSkgX19QWVhfRVJSKDAsIDU1LCBfX3B5eF9MMV9lcnJvcikKLS0KLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MwotLSAqIAotLSAqICMgUHl0aG9uIC0+IG1w dgotLSAqIGRlZiBfc3RyZW5jKHMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgIHRyeToKLS0gKiAgICAgICAgIHJldHVybiBzLmVuY29kZSgidXRmLTgiLCBfc3RyZGVjX2Vy cikKLS0gKi8KLS0gIF9fcHl4X3R1cGxlX18yNCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nf cyk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzI0KSkgX19QWVhfRVJSKDAsIDYzLCBfX3B5 eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMjQpOwotLSAgX19QeXhf R0lWRVJFRihfX3B5eF90dXBsZV9fMjQpOwotLSAgX19weXhfY29kZW9ial9fMjUgPSAoUHlPYmpl Y3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FM UywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfdHVwbGVfXzI0LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUs IF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3N0cmVu YywgNjMsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18y NSkpIF9fUFlYX0VSUigwLCA2MywgX19weXhfTDFfZXJyb3IpCi0tCi0tICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzE4Ci0tICogCi0tICogCi0tICogZGVmIF9lcnJvcnMoZm4p OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGRlZiB3cmFwcGVkKCprLCAq Kmt3KToKLS0gKiAgICAgICAgIHYgPSBmbigqaywgKiprdykKLS0gKi8KLS0gIF9fcHl4X3R1cGxl X18yNiA9IFB5VHVwbGVfUGFjaygzLCBfX3B5eF9uX3NfZm4sIF9fcHl4X25fc193cmFwcGVkLCBf X3B5eF9uX3Nfd3JhcHBlZCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzI2KSkgX19QWVhf RVJSKDAsIDMxOCwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVf XzI2KTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzI2KTsKLS0gIF9fcHl4X2NvZGVv YmpfXzI3ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDMsIDAsIENPX09QVElN SVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwg X19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18yNiwgX19weXhfZW1wdHlfdHVwbGUsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgs IF9fcHl4X25fc19lcnJvcnMsIDMxOCwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHko IV9fcHl4X2NvZGVvYmpfXzI3KSkgX19QWVhfRVJSKDAsIDMxOCwgX19weXhfTDFfZXJyb3IpCi0t Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI5Ci0tICogICAgIGNvZGUg PSBOb25lCi0tICogCi0tICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi5jb2RlID0gZQotLSAqICAgICAgICAg Y2RlZiBjb25zdCBjaGFyKiBlcnJfYwotLSAqLwotLSAgX19weXhfdHVwbGVfXzI4ID0gUHlUdXBs ZV9QYWNrKDQsIF9fcHl4X25fc19zZWxmLCBfX3B5eF9uX3NfZSwgX19weXhfbl9zX2Vycl9jLCBf X3B5eF9uX3NfZV9pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjgpKSBfX1BZWF9FUlIo MCwgMzI5LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMjgp OwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMjgpOwotLSAgX19weXhfY29kZW9ial9f MjkgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgNCwgMCwgQ09fT1BUSU1JWkVE fENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzI4LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhf ZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19w eXhfbl9zX2luaXQsIDMyOSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4 X2NvZGVvYmpfXzI5KSkgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDFfZXJyb3IpCi0tCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ2Ci0tICogY2RlZiBfcmVwbHlfdXNl cmRhdGFzID0gZGljdCgpCi0tICogCi0tICogY2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBkZWYgX19pbml0X18oc2VsZiwg ZGF0YSk6Ci0tICogICAgICAgICBzZWxmLmNvdW50ZXIgPSAwCi0tICovCi0tICBfX3B5eF90dXBs ZV9fMzAgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfYnVpbHRpbl9vYmplY3QpOyBpZiAodW5saWtl bHkoIV9fcHl4X3R1cGxlX18zMCkpIF9fUFlYX0VSUigwLCAzNDYsIF9fcHl4X0wxX2Vycm9yKQot LSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18zMCk7Ci0tICBfX1B5eF9HSVZFUkVGKF9fcHl4 X3R1cGxlX18zMCk7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ3 Ci0tICogCi0tICogY2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KToKLS0gKiAgICAgZGVmIF9f aW5pdF9fKHNlbGYsIGRhdGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAg ICAgICBzZWxmLmNvdW50ZXIgPSAwCi0tICogICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCi0tICov Ci0tICBfX3B5eF90dXBsZV9fMzEgPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9zX3NlbGYsIF9f cHl4X25fc19kYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMzEpKSBfX1BZWF9FUlIo MCwgMzQ3LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMzEp OwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMzEpOwotLSAgX19weXhfY29kZW9ial9f MzIgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgMiwgMCwgQ09fT1BUSU1JWkVE fENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzMxLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhf ZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19w eXhfbl9zX2luaXQsIDM0NywgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4 X2NvZGVvYmpfXzMyKSkgX19QWVhfRVJSKDAsIDM0NywgX19weXhfTDFfZXJyb3IpCi0tCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzUyCi0tICogICAgICAgICBzZWxmLm9i c2VydmVkID0gRmFsc2UKLS0gKiAKLS0gKiAgICAgZGVmIGFkZChzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi5jb3VudGVyICs9IDEKLS0gKiAKLS0g Ki8KLS0gIF9fcHl4X3R1cGxlX18zMyA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nfc2VsZik7 IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzMzKSkgX19QWVhfRVJSKDAsIDM1MiwgX19weXhf TDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzMzKTsKLS0gIF9fUHl4X0dJ VkVSRUYoX19weXhfdHVwbGVfXzMzKTsKLS0gIF9fcHl4X2NvZGVvYmpfXzM0ID0gKFB5T2JqZWN0 KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMs IF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUs IF9fcHl4X3R1cGxlX18zMywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19hZGQsIDM1 MiwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzM0KSkg X19QWVhfRVJSKDAsIDM1MiwgX19weXhfTDFfZXJyb3IpCi0tCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MzU1Ci0tICogICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMQotLSAq IAotLSAqICAgICBkZWYgcmVtb3ZlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgICAgICBzZWxmLmNvdW50ZXIgLT0gMQotLSAqIAotLSAqLwotLSAgX19weXhfdHVw bGVfXzM1ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90dXBsZV9fMzUpKSBfX1BZWF9FUlIoMCwgMzU1LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f UHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMzUpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBs ZV9fMzUpOwotLSAgX19weXhfY29kZW9ial9fMzYgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9O ZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0 ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzM1 LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0 dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3JlbW92ZSwgMzU1LCBfX3B5eF9lbXB0 eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMzYpKSBfX1BZWF9FUlIoMCwg MzU1LCBfX3B5eF9MMV9lcnJvcikKLS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTMzCi0tICogCi0tICogY2xhc3MgQ2FsbGJhY2tUaHJlYWQoVGhyZWFkKToKLS0gKiAg ICAgZGVmIF9faW5pdF9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKLS0gKiAgICAgICAgIHNlbGYuZGFlbW9uID0g VHJ1ZQotLSAqLwotLSAgX19weXhfdHVwbGVfXzM3ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25f c19zZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMzcpKSBfX1BZWF9FUlIoMCwgMTEz MywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzM3KTsKLS0g IF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzM3KTsKLS0gIF9fcHl4X2NvZGVvYmpfXzM4ID0g KFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxDT19O RVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X3R1cGxlX18zNywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5 X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25f c19pbml0LCAxMTMzLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29k ZW9ial9fMzgpKSBfX1BZWF9FUlIoMCwgMTEzMywgX19weXhfTDFfZXJyb3IpCi0tCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQotLSAqICAgICAgICAgc2VsZi5pc3No dXRkb3duID0gRmFsc2UKLS0gKiAKLS0gKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVl Ci0tICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQotLSAqLwotLSAgX19weXhfdHVwbGVf XzM5ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90dXBsZV9fMzkpKSBfX1BZWF9FUlIoMCwgMTE0MSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5 eF9HT1RSRUYoX19weXhfdHVwbGVfXzM5KTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVf XzM5KTsKLS0gIF9fcHl4X2NvZGVvYmpfXzQwID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3 KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVz LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18zOSwg X19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRl cl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19zaHV0ZG93biwgMTE0MSwgX19weXhfZW1w dHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzQwKSkgX19QWVhfRVJSKDAs IDExNDEsIF9fcHl4X0wxX2Vycm9yKQotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExNDYKLS0gKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKLS0gKiAKLS0gKiAg ICAgZGVmIGNhbGwoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAg ICAgIHNlbGYubG9jay5yZWxlYXNlKCkKLS0gKiAKLS0gKi8KLS0gIF9fcHl4X3R1cGxlX180MSA9 IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nfc2VsZik7IGlmICh1bmxpa2VseSghX19weXhfdHVw bGVfXzQxKSkgX19QWVhfRVJSKDAsIDExNDYsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09U UkVGKF9fcHl4X3R1cGxlX180MSk7Ci0tICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX180MSk7 Ci0tICBfX3B5eF9jb2Rlb2JqX180MiA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAw LCAxLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDEsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGli c19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfY2FsbCwgMTE0NiwgX19weXhfZW1wdHlfYnl0ZXMp OyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzQyKSkgX19QWVhfRVJSKDAsIDExNDYsIF9f cHl4X0wxX2Vycm9yKQotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx NDkKLS0gKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKLS0gKiAKLS0gKiAgICAgZGVmIHNl dChzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAg ICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjawotLSAqIAotLSAqLwotLSAgX19weXhfdHVwbGVf XzQzID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2sp OyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX180MykpIF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5 eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNDMpOwotLSAgX19QeXhf R0lWRVJFRihfX3B5eF90dXBsZV9fNDMpOwotLSAgX19weXhfY29kZW9ial9fNDQgPSAoUHlPYmpl Y3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgMiwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FM UywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfdHVwbGVfXzQzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUs IF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3NldCwg MTE0OSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzQ0 KSkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQotLQotLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNTIKLS0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBj YWxsYmFjawotLSAqIAotLSAqICAgICBkZWYgcnVuKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3NodXRkb3duOgotLSAqICAg ICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCi0tICovCi0tICBfX3B5eF90dXBsZV9f NDUgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3R1cGxlX180NSkpIF9fUFlYX0VSUigwLCAxMTUyLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4 X0dPVFJFRihfX3B5eF90dXBsZV9fNDUpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9f NDUpOwotLSAgX19weXhfY29kZW9ial9fNDYgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXco MSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMs IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzQ1LCBf X3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVy X2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3J1biwgMTE1MiwgX19weXhfZW1wdHlfYnl0 ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzQ2KSkgX19QWVhfRVJSKDAsIDExNTIs IF9fcHl4X0wxX2Vycm9yKQotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExNTcKLS0gKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBp ZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9uZQotLSAqIAotLSAqICAgICBkZWYgbXB2X2NhbGxiYWNr KHNlbGYsIGNhbGxiYWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAg ICAgdHJ5OgotLSAqICAgICAgICAgICAgIGNhbGxiYWNrKCkKLS0gKi8KLS0gIF9fcHl4X3R1cGxl X180NyA9IFB5VHVwbGVfUGFjaygzLCBfX3B5eF9uX3Nfc2VsZiwgX19weXhfbl9zX2NhbGxiYWNr LCBfX3B5eF9uX3NfZSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzQ3KSkgX19QWVhfRVJS KDAsIDExNTcsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX180 Nyk7Ci0tICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX180Nyk7Ci0tICBfX3B5eF9jb2Rlb2Jq X180OCA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygyLCAwLCAzLCAwLCBDT19PUFRJTUla RUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDcsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBf X3B5eF9uX3NfbXB2X2NhbGxiYWNrLCAxMTU3LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxp a2VseSghX19weXhfY29kZW9ial9fNDgpKSBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDFfZXJy b3IpCi0tCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCi0tICogZGVmIF9fcHl4X3VucGlja2xl X0VuZE9mRmlsZVJlYWNoZWQoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhf c3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGNkZWYgb2JqZWN0 IF9fcHl4X1BpY2tsZUVycm9yCi0tICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotLSAq LwotLSAgX19weXhfdHVwbGVfXzQ5ID0gUHlUdXBsZV9QYWNrKDUsIF9fcHl4X25fc19weXhfdHlw ZSwgX19weXhfbl9zX3B5eF9jaGVja3N1bSwgX19weXhfbl9zX3B5eF9zdGF0ZSwgX19weXhfbl9z X3B5eF9QaWNrbGVFcnJvciwgX19weXhfbl9zX3B5eF9yZXN1bHQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3R1cGxlX180OSkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4 X0dPVFJFRihfX3B5eF90dXBsZV9fNDkpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9f NDkpOwotLSAgX19weXhfY29kZW9ial9fNTAgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXco MywgMCwgNSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMs IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzQ5LCBf X3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3Nfc3RyaW5nc291 cmNlLCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQsIDEsIF9fcHl4X2Vt cHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX181MCkpIF9fUFlYX0VSUigx LCAxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fcHl4X3R1cGxlX181MSA9IFB5VHVwbGVfUGFjayg1 LCBfX3B5eF9uX3NfcHl4X3R5cGUsIF9fcHl4X25fc19weXhfY2hlY2tzdW0sIF9fcHl4X25fc19w eXhfc3RhdGUsIF9fcHl4X25fc19weXhfUGlja2xlRXJyb3IsIF9fcHl4X25fc19weXhfcmVzdWx0 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNTEpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhf TDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzUxKTsKLS0gIF9fUHl4X0dJ VkVSRUYoX19weXhfdHVwbGVfXzUxKTsKLS0gIF9fcHl4X2NvZGVvYmpfXzUyID0gKFB5T2JqZWN0 KilfX1B5eF9QeUNvZGVfTmV3KDMsIDAsIDUsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMs IF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUs IF9fcHl4X3R1cGxlX181MSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF9rcF9zX3N0cmluZ3NvdXJjZSwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9JbnB1dERpc3Bh dGNoLCAxLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9f NTIpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF90dXBsZV9fNTMg PSBQeVR1cGxlX1BhY2soNSwgX19weXhfbl9zX3B5eF90eXBlLCBfX3B5eF9uX3NfcHl4X2NoZWNr c3VtLCBfX3B5eF9uX3NfcHl4X3N0YXRlLCBfX3B5eF9uX3NfcHl4X1BpY2tsZUVycm9yLCBfX3B5 eF9uX3NfcHl4X3Jlc3VsdCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzUzKSkgX19QWVhf RVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX181 Myk7Ci0tICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX181Myk7Ci0tICBfX3B5eF9jb2Rlb2Jq X181NCA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygzLCAwLCA1LCAwLCBDT19PUFRJTUla RUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNTMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc19zdHJpbmdzb3VyY2UsIF9fcHl4X25fc19weXhfdW5w aWNrbGVfTG9nTWVzc2FnZSwgMSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9f cHl4X2NvZGVvYmpfXzU0KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19w eXhfdHVwbGVfXzU1ID0gUHlUdXBsZV9QYWNrKDUsIF9fcHl4X25fc19weXhfdHlwZSwgX19weXhf bl9zX3B5eF9jaGVja3N1bSwgX19weXhfbl9zX3B5eF9zdGF0ZSwgX19weXhfbl9zX3B5eF9QaWNr bGVFcnJvciwgX19weXhfbl9zX3B5eF9yZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxl X181NSkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihf X3B5eF90dXBsZV9fNTUpOwotLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fNTUpOwotLSAg X19weXhfY29kZW9ial9fNTYgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMywgMCwgNSwg MCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzU1LCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3Nfc3RyaW5nc291cmNlLCBfX3B5 eF9uX3NfcHl4X3VucGlja2xlX1Byb3BlcnR5LCAxLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1 bmxpa2VseSghX19weXhfY29kZW9ial9fNTYpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJy b3IpCi0tICBfX3B5eF90dXBsZV9fNTcgPSBQeVR1cGxlX1BhY2soNSwgX19weXhfbl9zX3B5eF90 eXBlLCBfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCBfX3B5eF9uX3NfcHl4X3N0YXRlLCBfX3B5eF9u X3NfcHl4X1BpY2tsZUVycm9yLCBfX3B5eF9uX3NfcHl4X3Jlc3VsdCk7IGlmICh1bmxpa2VseSgh X19weXhfdHVwbGVfXzU3KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19Q eXhfR09UUkVGKF9fcHl4X3R1cGxlX181Nyk7Ci0tICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxl X181Nyk7Ci0tICBfX3B5eF9jb2Rlb2JqX181OCA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05l dygzLCAwLCA1LCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRl cywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNTcs IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc19zdHJpbmdz b3VyY2UsIF9fcHl4X25fc19weXhfdW5waWNrbGVfRXZlbnQsIDEsIF9fcHl4X2VtcHR5X2J5dGVz KTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX181OCkpIF9fUFlYX0VSUigxLCAxLCBfX3B5 eF9MMV9lcnJvcikKLS0gIF9fcHl4X3R1cGxlX181OSA9IFB5VHVwbGVfUGFjayg1LCBfX3B5eF9u X3NfcHl4X3R5cGUsIF9fcHl4X25fc19weXhfY2hlY2tzdW0sIF9fcHl4X25fc19weXhfc3RhdGUs IF9fcHl4X25fc19weXhfUGlja2xlRXJyb3IsIF9fcHl4X25fc19weXhfcmVzdWx0KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90dXBsZV9fNTkpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3Ip Ci0tICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzU5KTsKLS0gIF9fUHl4X0dJVkVSRUYoX19w eXhfdHVwbGVfXzU5KTsKLS0gIF9fcHl4X2NvZGVvYmpfXzYwID0gKFB5T2JqZWN0KilfX1B5eF9Q eUNvZGVfTmV3KDMsIDAsIDUsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2Vt cHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1 cGxlX181OSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9z X3N0cmluZ3NvdXJjZSwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8sIDEs IF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX182MCkpIF9f UFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOwotLSAgcmV0dXJuIDA7Ci0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiAtMTsKLS19Ci0tCi0tc3RhdGljIENZVEhP Tl9TTUFMTF9DT0RFIGludCBfX1B5eF9Jbml0R2xvYmFscyh2b2lkKSB7Ci0tICBpZiAoX19QeXhf SW5pdFN0cmluZ3MoX19weXhfc3RyaW5nX3RhYikgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhf TDFfZXJyb3IpOwotLSAgX19weXhfaW50XzAgPSBQeUludF9Gcm9tTG9uZygwKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF9pbnRfMCkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f cHl4X2ludF8xID0gUHlJbnRfRnJvbUxvbmcoMSk7IGlmICh1bmxpa2VseSghX19weXhfaW50XzEp KSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF9pbnRfMyA9IFB5SW50 X0Zyb21Mb25nKDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8zKSkgX19QWVhfRVJSKDAsIDEs IF9fcHl4X0wxX2Vycm9yKQotLSAgX19weXhfaW50XzkgPSBQeUludF9Gcm9tTG9uZyg5KTsgaWYg KHVubGlrZWx5KCFfX3B5eF9pbnRfOSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikK LS0gIF9fcHl4X2ludF8zMiA9IFB5SW50X0Zyb21Mb25nKDMyKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF9pbnRfMzIpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF9pbnRf NTcxMzE2OSA9IFB5SW50X0Zyb21Mb25nKDU3MTMxNjlMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9p bnRfNTcxMzE2OSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fcHl4X2lu dF85MDk1ODI2MiA9IFB5SW50X0Zyb21Mb25nKDkwOTU4MjYyTCk7IGlmICh1bmxpa2VseSghX19w eXhfaW50XzkwOTU4MjYyKSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19w eXhfaW50XzE0MjAzNjkxMCA9IFB5SW50X0Zyb21Mb25nKDE0MjAzNjkxMEwpOyBpZiAodW5saWtl bHkoIV9fcHl4X2ludF8xNDIwMzY5MTApKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3Ip Ci0tICBfX3B5eF9pbnRfMjAwNjg4MDQxID0gUHlJbnRfRnJvbUxvbmcoMjAwNjg4MDQxTCk7IGlm ICh1bmxpa2VseSghX19weXhfaW50XzIwMDY4ODA0MSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9M MV9lcnJvcikKLS0gIF9fcHl4X2ludF8yMjI0MTkxNDkgPSBQeUludF9Gcm9tTG9uZygyMjI0MTkx NDlMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfMjIyNDE5MTQ5KSkgX19QWVhfRVJSKDAsIDEs IF9fcHl4X0wxX2Vycm9yKQotLSAgX19weXhfaW50XzIyODgyMjA1MyA9IFB5SW50X0Zyb21Mb25n KDIyODgyMjA1M0wpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8yMjg4MjIwNTMpKSBfX1BZWF9F UlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF9pbnRfbmVnXzEgPSBQeUludF9Gcm9t TG9uZygtMSk7IGlmICh1bmxpa2VseSghX19weXhfaW50X25lZ18xKSkgX19QWVhfRVJSKDAsIDEs IF9fcHl4X0wxX2Vycm9yKQotLSAgcmV0dXJuIDA7Ci0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBy ZXR1cm4gLTE7Ci0tfQotLQotLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfbW9k aW5pdF9nbG9iYWxfaW5pdF9jb2RlKHZvaWQpOyAvKnByb3RvKi8KLS1zdGF0aWMgQ1lUSE9OX1NN QUxMX0NPREUgaW50IF9fUHl4X21vZGluaXRfdmFyaWFibGVfZXhwb3J0X2NvZGUodm9pZCk7IC8q cHJvdG8qLwotLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfbW9kaW5pdF9mdW5j dGlvbl9leHBvcnRfY29kZSh2b2lkKTsgLypwcm90byovCi0tc3RhdGljIENZVEhPTl9TTUFMTF9D T0RFIGludCBfX1B5eF9tb2Rpbml0X3R5cGVfaW5pdF9jb2RlKHZvaWQpOyAvKnByb3RvKi8KLS1z dGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X21vZGluaXRfdHlwZV9pbXBvcnRfY29k ZSh2b2lkKTsgLypwcm90byovCi0tc3RhdGljIENZVEhPTl9TTUFMTF9DT0RFIGludCBfX1B5eF9t b2Rpbml0X3ZhcmlhYmxlX2ltcG9ydF9jb2RlKHZvaWQpOyAvKnByb3RvKi8KLS1zdGF0aWMgQ1lU SE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X21vZGluaXRfZnVuY3Rpb25faW1wb3J0X2NvZGUodm9p ZCk7IC8qcHJvdG8qLwotLQotLXN0YXRpYyBpbnQgX19QeXhfbW9kaW5pdF9nbG9iYWxfaW5pdF9j b2RlKHZvaWQpIHsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19QeXhfbW9kaW5pdF9nbG9iYWxfaW5pdF9jb2RlIiwgMCk7Ci0t ICAvKi0tLSBHbG9iYWwgaW5pdCBjb2RlIC0tLSovCi0tICBfX3B5eF92Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fY2FsbGJhY2tzID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwotLSAgX19w eXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcyA9IFB5X05vbmU7IFB5 X0lOQ1JFRihQeV9Ob25lKTsKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAg cmV0dXJuIDA7Ci0tfQotLQotLXN0YXRpYyBpbnQgX19QeXhfbW9kaW5pdF92YXJpYWJsZV9leHBv cnRfY29kZSh2b2lkKSB7Ci0tICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fUHl4X21vZGluaXRfdmFyaWFibGVfZXhwb3J0X2NvZGUi LCAwKTsKLS0gIC8qLS0tIFZhcmlhYmxlIGV4cG9ydCBjb2RlIC0tLSovCi0tICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJldHVybiAwOwotLX0KLS0KLS1zdGF0aWMgaW50IF9f UHl4X21vZGluaXRfZnVuY3Rpb25fZXhwb3J0X2NvZGUodm9pZCkgewotLSAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX1B5eF9tb2Rp bml0X2Z1bmN0aW9uX2V4cG9ydF9jb2RlIiwgMCk7Ci0tICAvKi0tLSBGdW5jdGlvbiBleHBvcnQg Y29kZSAtLS0qLwotLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4g MDsKLS19Ci0tCi0tc3RhdGljIGludCBfX1B5eF9tb2Rpbml0X3R5cGVfaW5pdF9jb2RlKHZvaWQp IHsKLS0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0tICBpbnQgX19weXhfbGluZW5vID0g MDsKLS0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLS0gIGludCBfX3B5eF9j bGluZW5vID0gMDsKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX1B5eF9tb2Rpbml0 X3R5cGVfaW5pdF9jb2RlIiwgMCk7Ci0tICAvKi0tLSBUeXBlIGluaXQgY29kZSAtLS0qLwotLSAg X19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCA9ICZf X3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQ7Ci0tICBf X3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQuX2luaXQg PSAoUHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F bmRPZkZpbGVSZWFjaGVkICosIHN0cnVjdCBtcHZfZXZlbnRfZW5kX2ZpbGUgKikpX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkX19pbml0OwotLSAgaWYgKFB5 VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVh Y2hlZCkgPCAwKSBfX1BZWF9FUlIoMCwgMTU2LCBfX3B5eF9MMV9lcnJvcikKLS0gICNpZiBQWV9W RVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKLS0gIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0VuZE9mRmlsZVJlYWNoZWQudHBfcHJpbnQgPSAwOwotLSAgI2VuZGlmCi0tICBpZiAoKENZ VEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYmIGxpa2Vs eSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZC50cF9k aWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJl YWNoZWQudHBfZ2V0YXR0cm8gPT0gUHlPYmplY3RfR2VuZXJpY0dldEF0dHIpKSB7Ci0tICAgIF9f cHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQudHBfZ2V0YXR0 cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0cjsKLS0gIH0KLS0gIGlmIChfX1B5eF9T ZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hl ZC50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVS ZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9fcHl4X0wxX2Vycm9yKQotLSAgaWYgKFB5 T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX0VuZE9mRmlsZVJlYWNoZWQsIChQeU9i amVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVk KSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9fcHl4X0wxX2Vycm9yKQotLSAgaWYgKF9fUHl4X3Nl dHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F bmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9fcHl4X0wxX2Vycm9yKQot LSAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgPSAm X19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZDsKLS0gIF9f cHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggPSAmX19weXhf dnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoOwotLSAgX19weXhfdnRh YmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoLl9pbml0ID0gKFB5T2JqZWN0 ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRj aCAqLCBzdHJ1Y3QgbXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCAqKSlfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfX2luaXQ7Ci0tICBpZiAoUHlUeXBl X1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoKSA8 IDApIF9fUFlYX0VSUigwLCAxNjksIF9fcHl4X0wxX2Vycm9yKQotLSAgI2lmIFBZX1ZFUlNJT05f SEVYIDwgMHgwMzA4MDBCMQotLSAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5w dXREaXNwYXRjaC50cF9wcmludCA9IDA7Ci0tICAjZW5kaWYKLS0gIGlmICgoQ1lUSE9OX1VTRV9U WVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoLnRwX2RpY3RvZmZzZXQgJiYg X19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaC50cF9nZXRhdHRy byA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKLS0gICAgX19weXhfdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaC50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0 X0dlbmVyaWNHZXRBdHRyOwotLSAgfQotLSAgaWYgKF9fUHl4X1NldFZ0YWJsZShfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoLnRwX2RpY3QsIF9fcHl4X3Z0YWJw dHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2gpIDwgMCkgX19QWVhfRVJSKDAs IDE2OSwgX19weXhfTDFfZXJyb3IpCi0tICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBf X3B5eF9uX3NfSW5wdXREaXNwYXRjaCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2gpIDwgMCkgX19QWVhfRVJSKDAsIDE2OSwgX19weXhf TDFfZXJyb3IpCi0tICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2gpIDwgMCkgX19QWVhfRVJSKDAs IDE2OSwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfSW5wdXREaXNwYXRjaCA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1 dERpc3BhdGNoOwotLSAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVz c2FnZSA9ICZfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2U7Ci0t ICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UuX2luaXQgPSAo UHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlICosIHN0cnVjdCBtcHZfZXZlbnRfbG9nX21lc3NhZ2UgKikpX19weXhfZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX19pbml0OwotLSAgaWYgKFB5VHlwZV9SZWFkeSgm X19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSkgPCAwKSBfX1BZWF9F UlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikKLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMw ODAwQjEKLS0gIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UudHBf cHJpbnQgPSAwOwotLSAgI2VuZGlmCi0tICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBD WVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZS50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UudHBfZ2V0YXR0cm8gPT0gUHlPYmplY3RfR2VuZXJp Y0dldEF0dHIpKSB7Ci0tICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01l c3NhZ2UudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0cjsKLS0gIH0K LS0gIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf TG9nTWVzc2FnZS50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9M b2dNZXNzYWdlKSA8IDApIF9fUFlYX0VSUigwLCAxODIsIF9fcHl4X0wxX2Vycm9yKQotLSAgaWYg KFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX0xvZ01lc3NhZ2UsIChQeU9iamVj dCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKSA8IDApIF9f UFlYX0VSUigwLCAxODIsIF9fcHl4X0wxX2Vycm9yKQotLSAgaWYgKF9fUHl4X3NldHVwX3JlZHVj ZSgoUHlPYmplY3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl KSA8IDApIF9fUFlYX0VSUigwLCAxODIsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19weXhfcHR5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgPSAmX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZTsKLS0gIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGli c18zbXB2X1Byb3BlcnR5ID0gJl9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJv cGVydHk7Ci0tICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5Ll9p bml0ID0gKFB5T2JqZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUHJvcGVydHkgKiwgc3RydWN0IG1wdl9ldmVudF9wcm9wZXJ0eSAqKSlfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfX2luaXQ7Ci0tICBpZiAoUHlUeXBlX1JlYWR5KCZf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSkgPCAwKSBfX1BZWF9FUlIo MCwgMjQzLCBfX3B5eF9MMV9lcnJvcikKLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAw QjEKLS0gIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5LnRwX3ByaW50 ID0gMDsKLS0gICNlbmRpZgotLSAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9O X1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X1Byb3BlcnR5LnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUHJvcGVydHkudHBfZ2V0YXR0cm8gPT0gUHlPYmplY3RfR2VuZXJpY0dldEF0dHIp KSB7Ci0tICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5LnRwX2dl dGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7Ci0tICB9Ci0tICBpZiAoX19Q eXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5LnRw X2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSA8IDAp IF9fUFlYX0VSUigwLCAyNDMsIF9fcHl4X0wxX2Vycm9yKQotLSAgaWYgKFB5T2JqZWN0X1NldEF0 dHIoX19weXhfbSwgX19weXhfbl9zX1Byb3BlcnR5LCAoUHlPYmplY3QgKikmX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpIDwgMCkgX19QWVhfRVJSKDAsIDI0MywgX19w eXhfTDFfZXJyb3IpCi0tICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSA8IDApIF9fUFlYX0VSUigwLCAy NDMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X1Byb3BlcnR5ID0gJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5Owot LSAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgPSAmX19weXhfdnRh YmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudDsKLS0gIF9fcHl4X3Z0YWJsZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRXZlbnQuX2RhdGEgPSAoUHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqLCBzdHJ1Y3QgbXB2X2V2ZW50ICopKV9f cHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9fZGF0YTsKLS0gIF9fcHl4X3Z0YWJs ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQuX2luaXQgPSAoUHlPYmplY3QgKigqKShzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqLCBzdHJ1Y3QgbXB2X2V2 ZW50ICosIFB5T2JqZWN0ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9f aW5pdDsKLS0gIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0V2ZW50KSA8IDApIF9fUFlYX0VSUigwLCAyNTYsIF9fcHl4X0wxX2Vycm9yKQotLSAgI2lm IFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQotLSAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRXZlbnQudHBfcHJpbnQgPSAwOwotLSAgI2VuZGlmCi0tICBpZiAoKENZVEhPTl9V U0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYmIGxpa2VseSghX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQudHBfZGljdG9mZnNldCAmJiBfX3B5 eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC50cF9nZXRhdHRybyA9PSBQeU9iamVj dF9HZW5lcmljR2V0QXR0cikpIHsKLS0gICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRXZlbnQudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0cjsKLS0g IH0KLS0gIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRXZlbnQudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZl bnQpIDwgMCkgX19QWVhfRVJSKDAsIDI1NiwgX19weXhfTDFfZXJyb3IpCi0tICBpZiAoUHlPYmpl Y3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfRXZlbnQsIChQeU9iamVjdCAqKSZfX3B5eF90 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCkgPCAwKSBfX1BZWF9FUlIoMCwgMjU2LCBf X3B5eF9MMV9lcnJvcikKLS0gIGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpIDwgMCkgX19QWVhfRVJSKDAsIDI1 NiwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RXZlbnQgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQ7Ci0tICBfX3B5 eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ID0gJl9fcHl4X3Z0YWJsZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dDsKLS0gIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dC5fcHJlcF9ub2RlX2xpc3QgPSAoc3RydWN0IG1wdl9ub2RlX2xp c3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICos IFB5T2JqZWN0ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVw X25vZGVfbGlzdDsKLS0gIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dC5fcHJlcF9ub2RlX21hcCA9IChzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqKCopKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKiwgUHlPYmplY3QgKikpX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9tYXA7Ci0tICBfX3B5 eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQuX3ByZXBfbmF0aXZlX3ZhbHVl ID0gKHN0cnVjdCBtcHZfbm9kZSAoKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKSlfX3B5eF9mXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9uYXRpdmVfdmFsdWU7Ci0tICBfX3B5eF92dGFi bGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQuX2ZyZWVfbmF0aXZlX3ZhbHVlID0gKFB5 T2JqZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCAqLCBzdHJ1Y3QgbXB2X25vZGUpKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0X19mcmVlX25hdGl2ZV92YWx1ZTsKLS0gIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDM1OSwgX19w eXhfTDFfZXJyb3IpCi0tICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCi0tICBfX3B5 eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LnRwX3ByaW50ID0gMDsKLS0gICNl bmRpZgotLSAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVf TE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQudHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0LnRwX2dldGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgewotLSAgICBfX3B5 eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LnRwX2dldGF0dHJvID0gX19QeXhf UHlPYmplY3RfR2VuZXJpY0dldEF0dHI7Ci0tICB9Ci0tICBpZiAoX19QeXhfU2V0VnRhYmxlKF9f cHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQudHBfZGljdCwgX19weXhfdnRh YnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMzU5 LCBfX3B5eF9MMV9lcnJvcikKLS0gIGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4 X25fc19Db250ZXh0LCAoUHlPYmplY3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMzU5LCBfX3B5eF9MMV9lcnJvcikKLS0gIGlm IChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMzU5LCBfX3B5eF9MMV9lcnJvcikK LS0gIF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ID0gJl9fcHl4X3R5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQ7Ci0tICBpZiAoUHlUeXBlX1JlYWR5KCZf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0KSA8IDApIF9fUFlY X0VSUigwLCA4MjIsIF9fcHl4X0wxX2Vycm9yKQotLSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgw MzA4MDBCMQotLSAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4 dC50cF9wcmludCA9IDA7Ci0tICAjZW5kaWYKLS0gIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RT ICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0LnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dC50cF9nZXRhdHRybyA9PSBQeU9i amVjdF9HZW5lcmljR2V0QXR0cikpIHsKLS0gICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfT3BlbkdMQ29udGV4dC50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNH ZXRBdHRyOwotLSAgfQotLSAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9z X09wZW5HTENvbnRleHQsIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9PcGVuR0xDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCA4MjIsIF9fcHl4X0wxX2Vycm9y KQotLSAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCA4MjIsIF9f cHl4X0wxX2Vycm9yKQotLSAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5H TENvbnRleHQgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4 dDsKLS0gIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMg PSAmX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zOwotLSAg X19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zLmFkZF92b2lk cCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X19SZW5kZXJQYXJhbXMgKiwgZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5cGUsIHZvaWQgKiwgc3Ry dWN0IF9fcHl4X29wdF9hcmdzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNf YWRkX3ZvaWRwICpfX3B5eF9vcHRpb25hbF9hcmdzKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM19SZW5kZXJQYXJhbXNfYWRkX3ZvaWRwOwotLSAgX19weXhfdnRhYmxlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zLmFkZF9pbnQgPSAoUHlPYmplY3QgKigqKShzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICosIGVudW0g bXB2X3JlbmRlcl9wYXJhbV90eXBlLCBpbnQpKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzX1JlbmRlclBhcmFtc19hZGRfaW50OwotLSAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fUmVuZGVyUGFyYW1zLmFkZF9zdHJpbmcgPSAoUHlPYmplY3QgKigqKShzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICosIGVudW0gbXB2 X3JlbmRlcl9wYXJhbV90eXBlLCBjaGFyICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzX1JlbmRlclBhcmFtc19hZGRfc3RyaW5nOwotLSAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhf dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcykgPCAwKSBfX1BZWF9FUlIo MCwgODgxLCBfX3B5eF9MMV9lcnJvcikKLS0gICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAw QjEKLS0gIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMudHBf cHJpbnQgPSAwOwotLSAgI2VuZGlmCi0tICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBD WVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMudHBfZ2V0YXR0cm8gPT0gUHlPYmplY3Rf R2VuZXJpY0dldEF0dHIpKSB7Ci0tICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X19SZW5kZXJQYXJhbXMudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0 cjsKLS0gIH0KLS0gIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKSA8IDApIF9fUFlYX0VSUigwLCA4ODEsIF9fcHl4X0wx X2Vycm9yKQotLSAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX1JlbmRl clBhcmFtcywgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19S ZW5kZXJQYXJhbXMpIDwgMCkgX19QWVhfRVJSKDAsIDg4MSwgX19weXhfTDFfZXJyb3IpCi0tICBp ZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X19SZW5kZXJQYXJhbXMpIDwgMCkgX19QWVhfRVJSKDAsIDg4MSwgX19weXhfTDFf ZXJyb3IpCi0tICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFt cyA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zOwotLSAg X19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvID0gJl9f cHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvOwotLSAgX19w eXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8uX2Zyb21fc3Ry dWN0ID0gKFB5T2JqZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyRnJhbWVJbmZvICosIHN0cnVjdCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKikpX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fX2Zyb21fc3RydWN0 OwotLSAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyRnJhbWVJbmZvKSA8IDApIF9fUFlYX0VSUigwLCA5MjgsIF9fcHl4X0wxX2Vycm9yKQot LSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQotLSAgX19weXhfdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX3ByaW50ID0gMDsKLS0gICNlbmRpZgot LSAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQ KSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1l SW5mby50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Jl bmRlckZyYW1lSW5mby50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsK LS0gICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRw X2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7Ci0tICB9Ci0tICBpZiAo X19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZy YW1lSW5mby50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJGcmFtZUluZm8pIDwgMCkgX19QWVhfRVJSKDAsIDkyOCwgX19weXhfTDFfZXJyb3IpCi0tICBp ZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbykgPCAwKSBfX1BZWF9FUlIoMCwgOTI4LCBfX3B5eF9M MV9lcnJvcikKLS0gIF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFt ZUluZm8gPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZv OwotLSAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgOTM3LCBfX3B5eF9MMV9lcnJvcikKLS0g ICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKLS0gIF9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X1JlbmRlckNvbnRleHQudHBfcHJpbnQgPSAwOwotLSAgI2VuZGlmCi0tICBp ZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYm IGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dC50 cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNv bnRleHQudHBfZ2V0YXR0cm8gPT0gUHlPYmplY3RfR2VuZXJpY0dldEF0dHIpKSB7Ci0tICAgIF9f cHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQudHBfZ2V0YXR0cm8g PSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0cjsKLS0gIH0KLS0gIGlmIChQeU9iamVjdF9T ZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19SZW5kZXJDb250ZXh0LCAoUHlPYmplY3QgKikmX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZWF9F UlIoMCwgOTM3LCBfX3B5eF9MMV9lcnJvcikKLS0gIGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5 T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCkg PCAwKSBfX1BZWF9FUlIoMCwgOTM3LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ID0gJl9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X1JlbmRlckNvbnRleHQ7Ci0tICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2Jhc2UgPSBfX3B5eF9wdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dDsKLS0gIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQpIDwgMCkgX19Q WVhfRVJSKDAsIDExMjIsIF9fcHl4X0wxX2Vycm9yKQotLSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwg MHgwMzA4MDBCMQotLSAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVu ZGVyQ29udGV4dC50cF9wcmludCA9IDA7Ci0tICAjZW5kaWYKLS0gIGlmICgoQ1lUSE9OX1VTRV9U WVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2RpY3RvZmZz ZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4 dC50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKLS0gICAgX19weXhf dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dC50cF9nZXRhdHRy byA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOwotLSAgfQotLSAgaWYgKFB5T2JqZWN0 X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX09wZW5HTFJlbmRlckNvbnRleHQsIChQeU9iamVj dCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0 KSA8IDApIF9fUFlYX0VSUigwLCAxMTIyLCBfX3B5eF9MMV9lcnJvcikKLS0gIGlmIChfX1B5eF9z ZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf T3BlbkdMUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMTEyMiwgX19weXhfTDFfZXJy b3IpCi0tICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29u dGV4dCA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250 ZXh0OwotLSAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzKSA8IDApIF9fUFlYX0VSUigwLCAzMTgsIF9f cHl4X0wxX2Vycm9yKQotLSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQotLSAgX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3Jz LnRwX3ByaW50ID0gMDsKLS0gICNlbmRpZgotLSAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMg JiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycy50cF9kaWN0b2Zmc2V0 ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9f X2Vycm9ycy50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKLS0gICAg X19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJy b3JzLnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHJOb0RpY3Q7Ci0t ICB9Ci0tICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3Ry dWN0X19fZXJyb3JzID0gJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Nj b3BlX3N0cnVjdF9fX2Vycm9yczsKLS0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwot LSAgcmV0dXJuIDA7Ci0tICBfX3B5eF9MMV9lcnJvcjo7Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKLS0gIHJldHVybiAtMTsKLS19Ci0tCi0tc3RhdGljIGludCBfX1B5eF9tb2Rp bml0X3R5cGVfaW1wb3J0X2NvZGUodm9pZCkgewotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlv bnMKLS0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX1B5eF9tb2Rpbml0X3R5cGVfaW1w b3J0X2NvZGUiLCAwKTsKLS0gIC8qLS0tIFR5cGUgaW1wb3J0IGNvZGUgLS0tKi8KLS0gIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotLSAgcmV0dXJuIDA7Ci0tfQotLQotLXN0YXRpYyBp bnQgX19QeXhfbW9kaW5pdF92YXJpYWJsZV9pbXBvcnRfY29kZSh2b2lkKSB7Ci0tICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fUHl4 X21vZGluaXRfdmFyaWFibGVfaW1wb3J0X2NvZGUiLCAwKTsKLS0gIC8qLS0tIFZhcmlhYmxlIGlt cG9ydCBjb2RlIC0tLSovCi0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLS0gIHJl dHVybiAwOwotLX0KLS0KLS1zdGF0aWMgaW50IF9fUHl4X21vZGluaXRfZnVuY3Rpb25faW1wb3J0 X2NvZGUodm9pZCkgewotLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLS0gIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfX1B5eF9tb2Rpbml0X2Z1bmN0aW9uX2ltcG9ydF9jb2RlIiwg MCk7Ci0tICAvKi0tLSBGdW5jdGlvbiBpbXBvcnQgY29kZSAtLS0qLwotLSAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7Ci0tICByZXR1cm4gMDsKLS19Ci0tCi0tCi0tI2lmbmRlZiBDWVRI T05fTk9fUFlJTklUX0VYUE9SVAotLSNkZWZpbmUgX19QeXhfUHlNT0RJTklUX0ZVTkMgUHlNT0RJ TklUX0ZVTkMKLS0jZWxpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotLSNpZmRlZiBfX2NwbHVzcGx1 cwotLSNkZWZpbmUgX19QeXhfUHlNT0RJTklUX0ZVTkMgZXh0ZXJuICJDIiB2b2lkCi0tI2Vsc2UK LS0jZGVmaW5lIF9fUHl4X1B5TU9ESU5JVF9GVU5DIHZvaWQKLS0jZW5kaWYKLS0jZWxzZQotLSNp ZmRlZiBfX2NwbHVzcGx1cwotLSNkZWZpbmUgX19QeXhfUHlNT0RJTklUX0ZVTkMgZXh0ZXJuICJD IiBQeU9iamVjdCAqCi0tI2Vsc2UKLS0jZGVmaW5lIF9fUHl4X1B5TU9ESU5JVF9GVU5DIFB5T2Jq ZWN0ICoKLS0jZW5kaWYKLS0jZW5kaWYKLS0KLS0KLS0jaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMK LS1fX1B5eF9QeU1PRElOSVRfRlVOQyBpbml0bXB2KHZvaWQpIENZVEhPTl9TTUFMTF9DT0RFOyAv KnByb3RvKi8KLS1fX1B5eF9QeU1PRElOSVRfRlVOQyBpbml0bXB2KHZvaWQpCi0tI2Vsc2UKLS1f X1B5eF9QeU1PRElOSVRfRlVOQyBQeUluaXRfbXB2KHZvaWQpIENZVEhPTl9TTUFMTF9DT0RFOyAv KnByb3RvKi8KLS1fX1B5eF9QeU1PRElOSVRfRlVOQyBQeUluaXRfbXB2KHZvaWQpCi0tI2lmIENZ VEhPTl9QRVA0ODlfTVVMVElfUEhBU0VfSU5JVAotLXsKLS0gIHJldHVybiBQeU1vZHVsZURlZl9J bml0KCZfX3B5eF9tb2R1bGVkZWYpOwotLX0KLS1zdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50 IF9fUHl4X2NoZWNrX3NpbmdsZV9pbnRlcnByZXRlcih2b2lkKSB7Ci0tICAgICNpZiBQWV9WRVJT SU9OX0hFWCA+PSAweDAzMDcwMEExCi0tICAgIHN0YXRpYyBQWV9JTlQ2NF9UIG1haW5faW50ZXJw cmV0ZXJfaWQgPSAtMTsKLS0gICAgUFlfSU5UNjRfVCBjdXJyZW50X2lkID0gUHlJbnRlcnByZXRl clN0YXRlX0dldElEKFB5VGhyZWFkU3RhdGVfR2V0KCktPmludGVycCk7Ci0tICAgIGlmIChtYWlu X2ludGVycHJldGVyX2lkID09IC0xKSB7Ci0tICAgICAgICBtYWluX2ludGVycHJldGVyX2lkID0g Y3VycmVudF9pZDsKLS0gICAgICAgIHJldHVybiAodW5saWtlbHkoY3VycmVudF9pZCA9PSAtMSkp ID8gLTEgOiAwOwotLSAgICB9IGVsc2UgaWYgKHVubGlrZWx5KG1haW5faW50ZXJwcmV0ZXJfaWQg IT0gY3VycmVudF9pZCkpCi0tICAgICNlbHNlCi0tICAgIHN0YXRpYyBQeUludGVycHJldGVyU3Rh dGUgKm1haW5faW50ZXJwcmV0ZXIgPSBOVUxMOwotLSAgICBQeUludGVycHJldGVyU3RhdGUgKmN1 cnJlbnRfaW50ZXJwcmV0ZXIgPSBQeVRocmVhZFN0YXRlX0dldCgpLT5pbnRlcnA7Ci0tICAgIGlm ICghbWFpbl9pbnRlcnByZXRlcikgewotLSAgICAgICAgbWFpbl9pbnRlcnByZXRlciA9IGN1cnJl bnRfaW50ZXJwcmV0ZXI7Ci0tICAgIH0gZWxzZSBpZiAodW5saWtlbHkobWFpbl9pbnRlcnByZXRl ciAhPSBjdXJyZW50X2ludGVycHJldGVyKSkKLS0gICAgI2VuZGlmCi0tICAgIHsKLS0gICAgICAg IFB5RXJyX1NldFN0cmluZygKLS0gICAgICAgICAgICBQeUV4Y19JbXBvcnRFcnJvciwKLS0gICAg ICAgICAgICAiSW50ZXJwcmV0ZXIgY2hhbmdlIGRldGVjdGVkIC0gdGhpcyBtb2R1bGUgY2FuIG9u bHkgYmUgbG9hZGVkIGludG8gb25lIGludGVycHJldGVyIHBlciBwcm9jZXNzLiIpOwotLSAgICAg ICAgcmV0dXJuIC0xOwotLSAgICB9Ci0tICAgIHJldHVybiAwOwotLX0KLS1zdGF0aWMgQ1lUSE9O X1NNQUxMX0NPREUgaW50IF9fUHl4X2NvcHlfc3BlY190b19tb2R1bGUoUHlPYmplY3QgKnNwZWMs IFB5T2JqZWN0ICptb2RkaWN0LCBjb25zdCBjaGFyKiBmcm9tX25hbWUsIGNvbnN0IGNoYXIqIHRv X25hbWUsIGludCBhbGxvd19ub25lKSB7Ci0tICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5T2JqZWN0 X0dldEF0dHJTdHJpbmcoc3BlYywgZnJvbV9uYW1lKTsKLS0gICAgaW50IHJlc3VsdCA9IDA7Ci0t ICAgIGlmIChsaWtlbHkodmFsdWUpKSB7Ci0tICAgICAgICBpZiAoYWxsb3dfbm9uZSB8fCB2YWx1 ZSAhPSBQeV9Ob25lKSB7Ci0tICAgICAgICAgICAgcmVzdWx0ID0gUHlEaWN0X1NldEl0ZW1TdHJp bmcobW9kZGljdCwgdG9fbmFtZSwgdmFsdWUpOwotLSAgICAgICAgfQotLSAgICAgICAgUHlfREVD UkVGKHZhbHVlKTsKLS0gICAgfSBlbHNlIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhj X0F0dHJpYnV0ZUVycm9yKSkgewotLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLS0gICAgfSBlbHNl IHsKLS0gICAgICAgIHJlc3VsdCA9IC0xOwotLSAgICB9Ci0tICAgIHJldHVybiByZXN1bHQ7Ci0t fQotLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBQeU9iamVjdCogX19weXhfcHltb2RfY3JlYXRl KFB5T2JqZWN0ICpzcGVjLCBDWVRIT05fVU5VU0VEIFB5TW9kdWxlRGVmICpkZWYpIHsKLS0gICAg UHlPYmplY3QgKm1vZHVsZSA9IE5VTEwsICptb2RkaWN0LCAqbW9kbmFtZTsKLS0gICAgaWYgKF9f UHl4X2NoZWNrX3NpbmdsZV9pbnRlcnByZXRlcigpKQotLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0t ICAgIGlmIChfX3B5eF9tKQotLSAgICAgICAgcmV0dXJuIF9fUHl4X05ld1JlZihfX3B5eF9tKTsK LS0gICAgbW9kbmFtZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoc3BlYywgIm5hbWUiKTsKLS0g ICAgaWYgKHVubGlrZWx5KCFtb2RuYW1lKSkgZ290byBiYWQ7Ci0tICAgIG1vZHVsZSA9IFB5TW9k dWxlX05ld09iamVjdChtb2RuYW1lKTsKLS0gICAgUHlfREVDUkVGKG1vZG5hbWUpOwotLSAgICBp ZiAodW5saWtlbHkoIW1vZHVsZSkpIGdvdG8gYmFkOwotLSAgICBtb2RkaWN0ID0gUHlNb2R1bGVf R2V0RGljdChtb2R1bGUpOwotLSAgICBpZiAodW5saWtlbHkoIW1vZGRpY3QpKSBnb3RvIGJhZDsK LS0gICAgaWYgKHVubGlrZWx5KF9fUHl4X2NvcHlfc3BlY190b19tb2R1bGUoc3BlYywgbW9kZGlj dCwgImxvYWRlciIsICJfX2xvYWRlcl9fIiwgMSkgPCAwKSkgZ290byBiYWQ7Ci0tICAgIGlmICh1 bmxpa2VseShfX1B5eF9jb3B5X3NwZWNfdG9fbW9kdWxlKHNwZWMsIG1vZGRpY3QsICJvcmlnaW4i LCAiX19maWxlX18iLCAxKSA8IDApKSBnb3RvIGJhZDsKLS0gICAgaWYgKHVubGlrZWx5KF9fUHl4 X2NvcHlfc3BlY190b19tb2R1bGUoc3BlYywgbW9kZGljdCwgInBhcmVudCIsICJfX3BhY2thZ2Vf XyIsIDEpIDwgMCkpIGdvdG8gYmFkOwotLSAgICBpZiAodW5saWtlbHkoX19QeXhfY29weV9zcGVj X3RvX21vZHVsZShzcGVjLCBtb2RkaWN0LCAic3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMiLCAi X19wYXRoX18iLCAwKSA8IDApKSBnb3RvIGJhZDsKLS0gICAgcmV0dXJuIG1vZHVsZTsKLS1iYWQ6 Ci0tICAgIFB5X1hERUNSRUYobW9kdWxlKTsKLS0gICAgcmV0dXJuIE5VTEw7Ci0tfQotLQotLQot LXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19weXhfcHltb2RfZXhlY19tcHYoUHlPYmpl Y3QgKl9fcHl4X3B5aW5pdF9tb2R1bGUpCi0tI2VuZGlmCi0tI2VuZGlmCi0tewotLSAgUHlPYmpl Y3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0tICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKLS0g IGludCBfX3B5eF90XzM7Ci0tICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKLS0gIGludCBf X3B5eF90XzU7Ci0tICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKLS0gIFB5T2JqZWN0ICpf X3B5eF90XzcgPSBOVUxMOwotLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0tICBjb25zdCBjaGFy ICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0tICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0tICBf X1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotLSAgI2lmIENZVEhPTl9QRVA0ODlfTVVMVElfUEhB U0VfSU5JVAotLSAgaWYgKF9fcHl4X20pIHsKLS0gICAgaWYgKF9fcHl4X20gPT0gX19weXhfcHlp bml0X21vZHVsZSkgcmV0dXJuIDA7Ci0tICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1l RXJyb3IsICJNb2R1bGUgJ21wdicgaGFzIGFscmVhZHkgYmVlbiBpbXBvcnRlZC4gUmUtaW5pdGlh bGlzYXRpb24gaXMgbm90IHN1cHBvcnRlZC4iKTsKLS0gICAgcmV0dXJuIC0xOwotLSAgfQotLSAg I2VsaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0tICBpZiAoX19weXhfbSkgcmV0dXJuIF9fUHl4 X05ld1JlZihfX3B5eF9tKTsKLS0gICNlbmRpZgotLSAgI2lmIENZVEhPTl9SRUZOQU5OWQotLV9f UHl4X1JlZk5hbm55ID0gX19QeXhfUmVmTmFubnlJbXBvcnRBUEkoInJlZm5hbm55Iik7Ci0taWYg KCFfX1B5eF9SZWZOYW5ueSkgewotLSAgUHlFcnJfQ2xlYXIoKTsKLS0gIF9fUHl4X1JlZk5hbm55 ID0gX19QeXhfUmVmTmFubnlJbXBvcnRBUEkoIkN5dGhvbi5SdW50aW1lLnJlZm5hbm55Iik7Ci0t ICBpZiAoIV9fUHl4X1JlZk5hbm55KQotLSAgICAgIFB5X0ZhdGFsRXJyb3IoImZhaWxlZCB0byBp bXBvcnQgJ3JlZm5hbm55JyBtb2R1bGUiKTsKLS19Ci0tI2VuZGlmCi0tICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19QeXhfUHlNT0RJTklUX0ZVTkMgUHlJbml0X21wdih2b2lkKSIsIDAp OwotLSAgaWYgKF9fUHl4X2NoZWNrX2JpbmFyeV92ZXJzaW9uKCkgPCAwKSBfX1BZWF9FUlIoMCwg MSwgX19weXhfTDFfZXJyb3IpCi0tICAjaWZkZWYgX19QeHlfUHlGcmFtZV9Jbml0aWFsaXplX09m ZnNldHMKLS0gIF9fUHh5X1B5RnJhbWVfSW5pdGlhbGl6ZV9PZmZzZXRzKCk7Ci0tICAjZW5kaWYK LS0gIF9fcHl4X2VtcHR5X3R1cGxlID0gUHlUdXBsZV9OZXcoMCk7IGlmICh1bmxpa2VseSghX19w eXhfZW1wdHlfdHVwbGUpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5 eF9lbXB0eV9ieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoIiIsIDApOyBpZiAodW5s aWtlbHkoIV9fcHl4X2VtcHR5X2J5dGVzKSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9y KQotLSAgX19weXhfZW1wdHlfdW5pY29kZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgi IiwgMCk7IGlmICh1bmxpa2VseSghX19weXhfZW1wdHlfdW5pY29kZSkpIF9fUFlYX0VSUigwLCAx LCBfX3B5eF9MMV9lcnJvcikKLS0gICNpZmRlZiBfX1B5eF9DeUZ1bmN0aW9uX1VTRUQKLS0gIGlm IChfX3B5eF9DeUZ1bmN0aW9uX2luaXQoKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9l cnJvcikKLS0gICNlbmRpZgotLSAgI2lmZGVmIF9fUHl4X0Z1c2VkRnVuY3Rpb25fVVNFRAotLSAg aWYgKF9fcHl4X0Z1c2VkRnVuY3Rpb25faW5pdCgpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4 X0wxX2Vycm9yKQotLSAgI2VuZGlmCi0tICAjaWZkZWYgX19QeXhfQ29yb3V0aW5lX1VTRUQKLS0g IGlmIChfX3B5eF9Db3JvdXRpbmVfaW5pdCgpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wx X2Vycm9yKQotLSAgI2VuZGlmCi0tICAjaWZkZWYgX19QeXhfR2VuZXJhdG9yX1VTRUQKLS0gIGlm IChfX3B5eF9HZW5lcmF0b3JfaW5pdCgpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vy cm9yKQotLSAgI2VuZGlmCi0tICAjaWZkZWYgX19QeXhfQXN5bmNHZW5fVVNFRAotLSAgaWYgKF9f cHl4X0FzeW5jR2VuX2luaXQoKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikK LS0gICNlbmRpZgotLSAgI2lmZGVmIF9fUHl4X1N0b3BBc3luY0l0ZXJhdGlvbl9VU0VECi0tICBp ZiAoX19weXhfU3RvcEFzeW5jSXRlcmF0aW9uX2luaXQoKSA8IDApIF9fUFlYX0VSUigwLCAxLCBf X3B5eF9MMV9lcnJvcikKLS0gICNlbmRpZgotLSAgLyotLS0gTGlicmFyeSBmdW5jdGlvbiBkZWNs YXJhdGlvbnMgLS0tKi8KLS0gIC8qLS0tIFRocmVhZHMgaW5pdGlhbGl6YXRpb24gY29kZSAtLS0q LwotLSAgI2lmIGRlZmluZWQoX19QWVhfRk9SQ0VfSU5JVF9USFJFQURTKSAmJiBfX1BZWF9GT1JD RV9JTklUX1RIUkVBRFMKLS0gICNpZmRlZiBXSVRIX1RIUkVBRCAvKiBQeXRob24gYnVpbGQgd2l0 aCB0aHJlYWRpbmcgc3VwcG9ydD8gKi8KLS0gIFB5RXZhbF9Jbml0VGhyZWFkcygpOwotLSAgI2Vu ZGlmCi0tICAjZW5kaWYKLS0gIC8qLS0tIE1vZHVsZSBjcmVhdGlvbiBjb2RlIC0tLSovCi0tICAj aWYgQ1lUSE9OX1BFUDQ4OV9NVUxUSV9QSEFTRV9JTklUCi0tICBfX3B5eF9tID0gX19weXhfcHlp bml0X21vZHVsZTsKLS0gIFB5X0lOQ1JFRihfX3B5eF9tKTsKLS0gICNlbHNlCi0tICAjaWYgUFlf TUFKT1JfVkVSU0lPTiA8IDMKLS0gIF9fcHl4X20gPSBQeV9Jbml0TW9kdWxlNCgibXB2IiwgX19w eXhfbWV0aG9kcywgX19weXhfa19weW1wdl9QeXRob25fd3JhcHBlcl9mb3JfbGlibXB2LCAwLCBQ WVRIT05fQVBJX1ZFUlNJT04pOyBQeV9YSU5DUkVGKF9fcHl4X20pOwotLSAgI2Vsc2UKLS0gIF9f cHl4X20gPSBQeU1vZHVsZV9DcmVhdGUoJl9fcHl4X21vZHVsZWRlZik7Ci0tICAjZW5kaWYKLS0g IGlmICh1bmxpa2VseSghX19weXhfbSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikK LS0gICNlbmRpZgotLSAgX19weXhfZCA9IFB5TW9kdWxlX0dldERpY3QoX19weXhfbSk7IGlmICh1 bmxpa2VseSghX19weXhfZCkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKLS0gIFB5 X0lOQ1JFRihfX3B5eF9kKTsKLS0gIF9fcHl4X2IgPSBQeUltcG9ydF9BZGRNb2R1bGUoX19QeXhf QlVJTFRJTl9NT0RVTEVfTkFNRSk7IGlmICh1bmxpa2VseSghX19weXhfYikpIF9fUFlYX0VSUigw LCAxLCBfX3B5eF9MMV9lcnJvcikKLS0gIFB5X0lOQ1JFRihfX3B5eF9iKTsKLS0gIF9fcHl4X2N5 dGhvbl9ydW50aW1lID0gUHlJbXBvcnRfQWRkTW9kdWxlKChjaGFyICopICJjeXRob25fcnVudGlt ZSIpOyBpZiAodW5saWtlbHkoIV9fcHl4X2N5dGhvbl9ydW50aW1lKSkgX19QWVhfRVJSKDAsIDEs IF9fcHl4X0wxX2Vycm9yKQotLSAgUHlfSU5DUkVGKF9fcHl4X2N5dGhvbl9ydW50aW1lKTsKLS0g IGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKF9fcHl4X20sICJfX2J1aWx0aW5zX18iLCBfX3B5 eF9iKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcik7Ci0tICAvKi0tLSBJbml0 aWFsaXplIHZhcmlvdXMgZ2xvYmFsIGNvbnN0YW50cyBldGMuIC0tLSovCi0tICBpZiAoX19QeXhf SW5pdEdsb2JhbHMoKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKLS0gICNp ZiBQWV9NQUpPUl9WRVJTSU9OIDwgMyAmJiAoX19QWVhfREVGQVVMVF9TVFJJTkdfRU5DT0RJTkdf SVNfQVNDSUkgfHwgX19QWVhfREVGQVVMVF9TVFJJTkdfRU5DT0RJTkdfSVNfREVGQVVMVCkKLS0g IGlmIChfX1B5eF9pbml0X3N5c19nZXRkZWZhdWx0ZW5jb2RpbmdfcGFyYW1zKCkgPCAwKSBfX1BZ WF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCi0tICAjZW5kaWYKLS0gIGlmIChfX3B5eF9tb2R1 bGVfaXNfbWFpbl92aWRjdXR0ZXJfX2xpYnNfX21wdikgewotLSAgICBpZiAoUHlPYmplY3RfU2V0 QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfbmFtZSwgX19weXhfbl9zX21haW4pIDwgMCkgX19QWVhf RVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQotLSAgfQotLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04g Pj0gMwotLSAgewotLSAgICBQeU9iamVjdCAqbW9kdWxlcyA9IFB5SW1wb3J0X0dldE1vZHVsZURp Y3QoKTsgaWYgKHVubGlrZWx5KCFtb2R1bGVzKSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vy cm9yKQotLSAgICBpZiAoIVB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJ2aWRjdXR0ZXIu bGlicy5tcHYiKSkgewotLSAgICAgIGlmICh1bmxpa2VseShQeURpY3RfU2V0SXRlbVN0cmluZyht b2R1bGVzLCAidmlkY3V0dGVyLmxpYnMubXB2IiwgX19weXhfbSkgPCAwKSkgX19QWVhfRVJSKDAs IDEsIF9fcHl4X0wxX2Vycm9yKQotLSAgICB9Ci0tICB9Ci0tICAjZW5kaWYKLS0gIC8qLS0tIEJ1 aWx0aW4gaW5pdCBjb2RlIC0tLSovCi0tICBpZiAoX19QeXhfSW5pdENhY2hlZEJ1aWx0aW5zKCkg PCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCi0tICAvKi0tLSBDb25zdGFudHMg aW5pdCBjb2RlIC0tLSovCi0tICBpZiAoX19QeXhfSW5pdENhY2hlZENvbnN0YW50cygpIDwgMCkg X19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQotLSAgLyotLS0gR2xvYmFsIHR5cGUvZnVu Y3Rpb24gaW5pdCBjb2RlIC0tLSovCi0tICAodm9pZClfX1B5eF9tb2Rpbml0X2dsb2JhbF9pbml0 X2NvZGUoKTsKLS0gICh2b2lkKV9fUHl4X21vZGluaXRfdmFyaWFibGVfZXhwb3J0X2NvZGUoKTsK LS0gICh2b2lkKV9fUHl4X21vZGluaXRfZnVuY3Rpb25fZXhwb3J0X2NvZGUoKTsKLS0gIGlmICh1 bmxpa2VseShfX1B5eF9tb2Rpbml0X3R5cGVfaW5pdF9jb2RlKCkgPCAwKSkgX19QWVhfRVJSKDAs IDEsIF9fcHl4X0wxX2Vycm9yKQotLSAgKHZvaWQpX19QeXhfbW9kaW5pdF90eXBlX2ltcG9ydF9j b2RlKCk7Ci0tICAodm9pZClfX1B5eF9tb2Rpbml0X3ZhcmlhYmxlX2ltcG9ydF9jb2RlKCk7Ci0t ICAodm9pZClfX1B5eF9tb2Rpbml0X2Z1bmN0aW9uX2ltcG9ydF9jb2RlKCk7Ci0tICAvKi0tLSBF eGVjdXRpb24gY29kZSAtLS0qLwotLSAgI2lmIGRlZmluZWQoX19QeXhfR2VuZXJhdG9yX1VTRUQp IHx8IGRlZmluZWQoX19QeXhfQ29yb3V0aW5lX1VTRUQpCi0tICBpZiAoX19QeXhfcGF0Y2hfYWJj KCkgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCi0tICAjZW5kaWYKLStzdGF0 aWMgX19QeXhfU3RyaW5nVGFiRW50cnkgX19weXhfc3RyaW5nX3RhYltdID0gewotKyAgeyZfX3B5 eF9rcF9zXzBfM18wLCBfX3B5eF9rXzBfM18wLCBzaXplb2YoX19weXhfa18wXzNfMCksIDAsIDAs IDEsIDB9LAotKyAgeyZfX3B5eF9uX3NfQVBJX09QRU5HTCwgX19weXhfa19BUElfT1BFTkdMLCBz aXplb2YoX19weXhfa19BUElfT1BFTkdMKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X2twX3Nf QW5kcmVfRCwgX19weXhfa19BbmRyZV9ELCBzaXplb2YoX19weXhfa19BbmRyZV9EKSwgMCwgMCwg MSwgMH0sCi0rICB7Jl9fcHl4X25fc19DQVBJX01BSk9SLCBfX3B5eF9rX0NBUElfTUFKT1IsIHNp emVvZihfX3B5eF9rX0NBUElfTUFKT1IpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX0NB UElfTUlOT1IsIF9fcHl4X2tfQ0FQSV9NSU5PUiwgc2l6ZW9mKF9fcHl4X2tfQ0FQSV9NSU5PUiks IDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIF9fcHl4X2tfQ2Fs bGJhY2tUaHJlYWQsIHNpemVvZihfX3B5eF9rX0NhbGxiYWNrVGhyZWFkKSwgMCwgMCwgMSwgMX0s Ci0rICB7Jl9fcHl4X25fc19DYWxsYmFja1RocmVhZF9fX2luaXQsIF9fcHl4X2tfQ2FsbGJhY2tU aHJlYWRfX19pbml0LCBzaXplb2YoX19weXhfa19DYWxsYmFja1RocmVhZF9fX2luaXQpLCAwLCAw LCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX2NhbGwsIF9fcHl4X2tfQ2Fs bGJhY2tUaHJlYWRfY2FsbCwgc2l6ZW9mKF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfY2FsbCksIDAs IDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWRfbXB2X2NhbGxiYWNrLCBf X3B5eF9rX0NhbGxiYWNrVGhyZWFkX21wdl9jYWxsYmFjaywgc2l6ZW9mKF9fcHl4X2tfQ2FsbGJh Y2tUaHJlYWRfbXB2X2NhbGxiYWNrKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19DYWxs YmFja1RocmVhZF9ydW4sIF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfcnVuLCBzaXplb2YoX19weXhf a19DYWxsYmFja1RocmVhZF9ydW4pLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX0NhbGxi YWNrVGhyZWFkX3NldCwgX19weXhfa19DYWxsYmFja1RocmVhZF9zZXQsIHNpemVvZihfX3B5eF9r X0NhbGxiYWNrVGhyZWFkX3NldCksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfQ2FsbGJh Y2tUaHJlYWRfc2h1dGRvd24sIF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfc2h1dGRvd24sIHNpemVv ZihfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX3NodXRkb3duKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9f cHl4X25fc19Db250ZXh0LCBfX3B5eF9rX0NvbnRleHQsIHNpemVvZihfX3B5eF9rX0NvbnRleHQp LCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfa3Bfc19Db250ZXh0X2NyZWF0aW9uX2Vycm9yLCBf X3B5eF9rX0NvbnRleHRfY3JlYXRpb25fZXJyb3IsIHNpemVvZihfX3B5eF9rX0NvbnRleHRfY3Jl YXRpb25fZXJyb3IpLCAwLCAwLCAxLCAwfSwKLSsgIHsmX19weXhfbl9zX0VPRlJlYXNvbnMsIF9f cHl4X2tfRU9GUmVhc29ucywgc2l6ZW9mKF9fcHl4X2tfRU9GUmVhc29ucyksIDAsIDAsIDEsIDF9 LAotKyAgeyZfX3B5eF9uX3NfRW5kT2ZGaWxlUmVhY2hlZCwgX19weXhfa19FbmRPZkZpbGVSZWFj aGVkLCBzaXplb2YoX19weXhfa19FbmRPZkZpbGVSZWFjaGVkKSwgMCwgMCwgMSwgMX0sCi0rICB7 Jl9fcHl4X25fc19FcnJvcnMsIF9fcHl4X2tfRXJyb3JzLCBzaXplb2YoX19weXhfa19FcnJvcnMp LCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX0V2ZW50LCBfX3B5eF9rX0V2ZW50LCBzaXpl b2YoX19weXhfa19FdmVudCksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfRXZlbnRzLCBf X3B5eF9rX0V2ZW50cywgc2l6ZW9mKF9fcHl4X2tfRXZlbnRzKSwgMCwgMCwgMSwgMX0sCi0rICB7 Jl9fcHl4X25fc19JbXBvcnRFcnJvciwgX19weXhfa19JbXBvcnRFcnJvciwgc2l6ZW9mKF9fcHl4 X2tfSW1wb3J0RXJyb3IpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfa3Bfc19JbmNvbXBhdGli bGVfY2hlY2tzdW1zX3NfdnNfMHgwNSwgX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3Nf dnNfMHgwNSwgc2l6ZW9mKF9fcHl4X2tfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4MDUp LCAwLCAwLCAxLCAwfSwKLSsgIHsmX19weXhfa3Bfc19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3Nf dnNfMHg1NiwgX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHg1Niwgc2l6ZW9m KF9fcHl4X2tfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4NTYpLCAwLCAwLCAxLCAwfSwK LSsgIHsmX19weXhfa3Bfc19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHg4NywgX19weXhf a19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHg4Nywgc2l6ZW9mKF9fcHl4X2tfSW5jb21w YXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4ODcpLCAwLCAwLCAxLCAwfSwKLSsgIHsmX19weXhfa3Bf c19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHhkNCwgX19weXhfa19JbmNvbXBhdGlibGVf Y2hlY2tzdW1zX3NfdnNfMHhkNCwgc2l6ZW9mKF9fcHl4X2tfSW5jb21wYXRpYmxlX2NoZWNrc3Vt c19zX3ZzXzB4ZDQpLCAwLCAwLCAxLCAwfSwKLSsgIHsmX19weXhfa3Bfc19JbmNvbXBhdGlibGVf Y2hlY2tzdW1zX3NfdnNfMHhkYSwgX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNf MHhkYSwgc2l6ZW9mKF9fcHl4X2tfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4ZGEpLCAw LCAwLCAxLCAwfSwKLSsgIHsmX19weXhfa3Bfc19Lbm93bl9wb3NzaWJsZV92YWx1ZXNfZm9yX0Vu ZE9mRiwgX19weXhfa19Lbm93bl9wb3NzaWJsZV92YWx1ZXNfZm9yX0VuZE9mRiwgc2l6ZW9mKF9f cHl4X2tfS25vd25fcG9zc2libGVfdmFsdWVzX2Zvcl9FbmRPZkYpLCAwLCAwLCAxLCAwfSwKLSsg IHsmX19weXhfbl9zX0xvZ0xldmVscywgX19weXhfa19Mb2dMZXZlbHMsIHNpemVvZihfX3B5eF9r X0xvZ0xldmVscyksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfTG9nTWVzc2FnZSwgX19w eXhfa19Mb2dNZXNzYWdlLCBzaXplb2YoX19weXhfa19Mb2dNZXNzYWdlKSwgMCwgMCwgMSwgMX0s Ci0rICB7Jl9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUiwgX19weXhfa19NSU5fQ0FQSV9NSU5PUiwg c2l6ZW9mKF9fcHl4X2tfTUlOX0NBUElfTUlOT1IpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhf bl9zX01QVkVycm9yLCBfX3B5eF9rX01QVkVycm9yLCBzaXplb2YoX19weXhfa19NUFZFcnJvciks IDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfTVBWRXJyb3JfX19pbml0LCBfX3B5eF9rX01Q VkVycm9yX19faW5pdCwgc2l6ZW9mKF9fcHl4X2tfTVBWRXJyb3JfX19pbml0KSwgMCwgMCwgMSwg MX0sCi0rICB7Jl9fcHl4X25fc19PcGVuR0xSZW5kZXJDb250ZXh0LCBfX3B5eF9rX09wZW5HTFJl bmRlckNvbnRleHQsIHNpemVvZihfX3B5eF9rX09wZW5HTFJlbmRlckNvbnRleHQpLCAwLCAwLCAx LCAxfSwKLSsgIHsmX19weXhfbl9zX1BpY2tsZUVycm9yLCBfX3B5eF9rX1BpY2tsZUVycm9yLCBz aXplb2YoX19weXhfa19QaWNrbGVFcnJvciksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3Nf UHJvcGVydHksIF9fcHl4X2tfUHJvcGVydHksIHNpemVvZihfX3B5eF9rX1Byb3BlcnR5KSwgMCwg MCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19QeU1QVkVycm9yLCBfX3B5eF9rX1B5TVBWRXJyb3Is IHNpemVvZihfX3B5eF9rX1B5TVBWRXJyb3IpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9z X1JFUVVJUkVEX0NBUElfTUFKT1IsIF9fcHl4X2tfUkVRVUlSRURfQ0FQSV9NQUpPUiwgc2l6ZW9m KF9fcHl4X2tfUkVRVUlSRURfQ0FQSV9NQUpPUiksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9u X3NfUmVuZGVyQ29udGV4dCwgX19weXhfa19SZW5kZXJDb250ZXh0LCBzaXplb2YoX19weXhfa19S ZW5kZXJDb250ZXh0KSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19SZW5kZXJQYXJhbXMs IF9fcHl4X2tfUmVuZGVyUGFyYW1zLCBzaXplb2YoX19weXhfa19SZW5kZXJQYXJhbXMpLCAwLCAw LCAxLCAxfSwKLSsgIHsmX19weXhfa3Bfc19SZW5kZXJQYXJhbXNfb3ZlcmZsb3csIF9fcHl4X2tf UmVuZGVyUGFyYW1zX292ZXJmbG93LCBzaXplb2YoX19weXhfa19SZW5kZXJQYXJhbXNfb3ZlcmZs b3cpLCAwLCAwLCAxLCAwfSwKLSsgIHsmX19weXhfbl9zX1JlcGx5VXNlckRhdGEsIF9fcHl4X2tf UmVwbHlVc2VyRGF0YSwgc2l6ZW9mKF9fcHl4X2tfUmVwbHlVc2VyRGF0YSksIDAsIDAsIDEsIDF9 LAotKyAgeyZfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YV9fX2luaXQsIF9fcHl4X2tfUmVwbHlVc2Vy RGF0YV9fX2luaXQsIHNpemVvZihfX3B5eF9rX1JlcGx5VXNlckRhdGFfX19pbml0KSwgMCwgMCwg MSwgMX0sCi0rICB7Jl9fcHl4X25fc19SZXBseVVzZXJEYXRhX2FkZCwgX19weXhfa19SZXBseVVz ZXJEYXRhX2FkZCwgc2l6ZW9mKF9fcHl4X2tfUmVwbHlVc2VyRGF0YV9hZGQpLCAwLCAwLCAxLCAx fSwKLSsgIHsmX19weXhfbl9zX1JlcGx5VXNlckRhdGFfcmVtb3ZlLCBfX3B5eF9rX1JlcGx5VXNl ckRhdGFfcmVtb3ZlLCBzaXplb2YoX19weXhfa19SZXBseVVzZXJEYXRhX3JlbW92ZSksIDAsIDAs IDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfU2VtYXBob3JlLCBfX3B5eF9rX1NlbWFwaG9yZSwgc2l6 ZW9mKF9fcHl4X2tfU2VtYXBob3JlKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X2twX3NfU2V0 X29mX2tub3duX2Vycm9yX2NvZGVzX2Zyb21fTXAsIF9fcHl4X2tfU2V0X29mX2tub3duX2Vycm9y X2NvZGVzX2Zyb21fTXAsIHNpemVvZihfX3B5eF9rX1NldF9vZl9rbm93bl9lcnJvcl9jb2Rlc19m cm9tX01wKSwgMCwgMCwgMSwgMH0sCi0rICB7Jl9fcHl4X2twX3NfU2V0X29mX2tub3duX3ZhbHVl c19mb3JfRXZlbnRfaWQsIF9fcHl4X2tfU2V0X29mX2tub3duX3ZhbHVlc19mb3JfRXZlbnRfaWQs IHNpemVvZihfX3B5eF9rX1NldF9vZl9rbm93bl92YWx1ZXNfZm9yX0V2ZW50X2lkKSwgMCwgMCwg MSwgMH0sCi0rICB7Jl9fcHl4X25fc19UaHJlYWQsIF9fcHl4X2tfVGhyZWFkLCBzaXplb2YoX19w eXhfa19UaHJlYWQpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX1R5cGVFcnJvciwgX19w eXhfa19UeXBlRXJyb3IsIHNpemVvZihfX3B5eF9rX1R5cGVFcnJvciksIDAsIDAsIDEsIDF9LAot KyAgeyZfX3B5eF9uX3NfVVBEQVRFX0ZSQU1FLCBfX3B5eF9rX1VQREFURV9GUkFNRSwgc2l6ZW9m KF9fcHl4X2tfVVBEQVRFX0ZSQU1FKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19Vbmlj b2RlRGVjb2RlRXJyb3IsIF9fcHl4X2tfVW5pY29kZURlY29kZUVycm9yLCBzaXplb2YoX19weXhf a19Vbmljb2RlRGVjb2RlRXJyb3IpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX1VuaWNv ZGVFbmNvZGVFcnJvciwgX19weXhfa19Vbmljb2RlRW5jb2RlRXJyb3IsIHNpemVvZihfX3B5eF9r X1VuaWNvZGVFbmNvZGVFcnJvciksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9rcF9zX1Vua25v d25fYXBpX3R5cGVfciwgX19weXhfa19Vbmtub3duX2FwaV90eXBlX3IsIHNpemVvZihfX3B5eF9r X1Vua25vd25fYXBpX3R5cGVfciksIDAsIDAsIDEsIDB9LAotKyAgeyZfX3B5eF9rcF9zX1Vua25v d25fb3JfaW52YWxpZF9wb2ludGVyX29iamVjLCBfX3B5eF9rX1Vua25vd25fb3JfaW52YWxpZF9w b2ludGVyX29iamVjLCBzaXplb2YoX19weXhfa19Vbmtub3duX29yX2ludmFsaWRfcG9pbnRlcl9v YmplYyksIDAsIDAsIDEsIDB9LAotKyAgeyZfX3B5eF9uX3NfYWJvcnRlZCwgX19weXhfa19hYm9y dGVkLCBzaXplb2YoX19weXhfa19hYm9ydGVkKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25f c19hY3F1aXJlLCBfX3B5eF9rX2FjcXVpcmUsIHNpemVvZihfX3B5eF9rX2FjcXVpcmUpLCAwLCAw LCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX2FkZCwgX19weXhfa19hZGQsIHNpemVvZihfX3B5eF9r X2FkZCksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfYWR2YW5jZWRfY29udHJvbCwgX19w eXhfa19hZHZhbmNlZF9jb250cm9sLCBzaXplb2YoX19weXhfa19hZHZhbmNlZF9jb250cm9sKSwg MCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19hb19pbml0X2ZhaWxlZCwgX19weXhfa19hb19p bml0X2ZhaWxlZCwgc2l6ZW9mKF9fcHl4X2tfYW9faW5pdF9mYWlsZWQpLCAwLCAwLCAxLCAxfSwK LSsgIHsmX19weXhfbl9zX2FwaV90eXBlLCBfX3B5eF9rX2FwaV90eXBlLCBzaXplb2YoX19weXhf a19hcGlfdHlwZSksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfYXBwZW5kLCBfX3B5eF9r X2FwcGVuZCwgc2l6ZW9mKF9fcHl4X2tfYXBwZW5kKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4 X25fc19hc3luY2hyb25vdXMsIF9fcHl4X2tfYXN5bmNocm9ub3VzLCBzaXplb2YoX19weXhfa19h c3luY2hyb25vdXMpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX2F0b21pY19yZXF1ZXN0 X3B0ciwgX19weXhfa19hdG9taWNfcmVxdWVzdF9wdHIsIHNpemVvZihfX3B5eF9rX2F0b21pY19y ZXF1ZXN0X3B0ciksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfYXVkaW9fcmVjb25maWcs IF9fcHl4X2tfYXVkaW9fcmVjb25maWcsIHNpemVvZihfX3B5eF9rX2F1ZGlvX3JlY29uZmlnKSwg MCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19hdXRob3IsIF9fcHl4X2tfYXV0aG9yLCBzaXpl b2YoX19weXhfa19hdXRob3IpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX2Jsb2NrX2Zv cl90YXJnZXRfdGltZSwgX19weXhfa19ibG9ja19mb3JfdGFyZ2V0X3RpbWUsIHNpemVvZihfX3B5 eF9rX2Jsb2NrX2Zvcl90YXJnZXRfdGltZSksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3Nf YmxvY2tfdnN5bmMsIF9fcHl4X2tfYmxvY2tfdnN5bmMsIHNpemVvZihfX3B5eF9rX2Jsb2NrX3Zz eW5jKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19jYWxsLCBfX3B5eF9rX2NhbGwsIHNp emVvZihfX3B5eF9rX2NhbGwpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX2NhbGxiYWNr LCBfX3B5eF9rX2NhbGxiYWNrLCBzaXplb2YoX19weXhfa19jYWxsYmFjayksIDAsIDAsIDEsIDF9 LAotKyAgeyZfX3B5eF9uX3NfY2xpZW50X21lc3NhZ2UsIF9fcHl4X2tfY2xpZW50X21lc3NhZ2Us IHNpemVvZihfX3B5eF9rX2NsaWVudF9tZXNzYWdlKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4 X25fc19jbGluZV9pbl90cmFjZWJhY2ssIF9fcHl4X2tfY2xpbmVfaW5fdHJhY2ViYWNrLCBzaXpl b2YoX19weXhfa19jbGluZV9pbl90cmFjZWJhY2spLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhf bl9zX2Nsb3NlLCBfX3B5eF9rX2Nsb3NlLCBzaXplb2YoX19weXhfa19jbG9zZSksIDAsIDAsIDEs IDF9LAotKyAgeyZfX3B5eF9uX3NfY29kZSwgX19weXhfa19jb2RlLCBzaXplb2YoX19weXhfa19j b2RlKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19jb21tYW5kX2Vycm9yLCBfX3B5eF9r X2NvbW1hbmRfZXJyb3IsIHNpemVvZihfX3B5eF9rX2NvbW1hbmRfZXJyb3IpLCAwLCAwLCAxLCAx fSwKLSsgIHsmX19weXhfbl9zX2NvbW1hbmRfcmVwbHksIF9fcHl4X2tfY29tbWFuZF9yZXBseSwg c2l6ZW9mKF9fcHl4X2tfY29tbWFuZF9yZXBseSksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9u X3NfY29ubmVjdG9yX2lkLCBfX3B5eF9rX2Nvbm5lY3Rvcl9pZCwgc2l6ZW9mKF9fcHl4X2tfY29u bmVjdG9yX2lkKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19jb3VudGVyLCBfX3B5eF9r X2NvdW50ZXIsIHNpemVvZihfX3B5eF9rX2NvdW50ZXIpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19w eXhfbl9zX2NydGNfaWQsIF9fcHl4X2tfY3J0Y19pZCwgc2l6ZW9mKF9fcHl4X2tfY3J0Y19pZCks IDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfZGFlbW9uLCBfX3B5eF9rX2RhZW1vbiwgc2l6 ZW9mKF9fcHl4X2tfZGFlbW9uKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19kYXRhLCBf X3B5eF9rX2RhdGEsIHNpemVvZihfX3B5eF9rX2RhdGEpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19w eXhfbl9zX2RlYnVnLCBfX3B5eF9rX2RlYnVnLCBzaXplb2YoX19weXhfa19kZWJ1ZyksIDAsIDAs IDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfZGVjb2RlLCBfX3B5eF9rX2RlY29kZSwgc2l6ZW9mKF9f cHl4X2tfZGVjb2RlKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19kZWZhdWx0LCBfX3B5 eF9rX2RlZmF1bHQsIHNpemVvZihfX3B5eF9rX2RlZmF1bHQpLCAwLCAwLCAxLCAxfSwKLSsgIHsm X19weXhfbl9zX2RlcHRoLCBfX3B5eF9rX2RlcHRoLCBzaXplb2YoX19weXhfa19kZXB0aCksIDAs IDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfZGljdCwgX19weXhfa19kaWN0LCBzaXplb2YoX19w eXhfa19kaWN0KSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19kb2MsIF9fcHl4X2tfZG9j LCBzaXplb2YoX19weXhfa19kb2MpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfa3Bfc19kcm1N b2RlQXRvbWljUmVxLCBfX3B5eF9rX2RybU1vZGVBdG9taWNSZXEsIHNpemVvZihfX3B5eF9rX2Ry bU1vZGVBdG9taWNSZXEpLCAwLCAwLCAxLCAwfSwKLSsgIHsmX19weXhfbl9zX2RybV9kaXNwbGF5 LCBfX3B5eF9rX2RybV9kaXNwbGF5LCBzaXplb2YoX19weXhfa19kcm1fZGlzcGxheSksIDAsIDAs IDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfZHJtX29zZF9zaXplLCBfX3B5eF9rX2RybV9vc2Rfc2l6 ZSwgc2l6ZW9mKF9fcHl4X2tfZHJtX29zZF9zaXplKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4 X25fc19lLCBfX3B5eF9rX2UsIHNpemVvZihfX3B5eF9rX2UpLCAwLCAwLCAxLCAxfSwKLSsgIHsm X19weXhfbl9zX2VfaSwgX19weXhfa19lX2ksIHNpemVvZihfX3B5eF9rX2VfaSksIDAsIDAsIDEs IDF9LAotKyAgeyZfX3B5eF9uX3NfZW5hYmxlLCBfX3B5eF9rX2VuYWJsZSwgc2l6ZW9mKF9fcHl4 X2tfZW5hYmxlKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19lbmNvZGUsIF9fcHl4X2tf ZW5jb2RlLCBzaXplb2YoX19weXhfa19lbmNvZGUpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhf bl9zX2VuZF9maWxlLCBfX3B5eF9rX2VuZF9maWxlLCBzaXplb2YoX19weXhfa19lbmRfZmlsZSks IDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfZW51bWVyYXRlLCBfX3B5eF9rX2VudW1lcmF0 ZSwgc2l6ZW9mKF9fcHl4X2tfZW51bWVyYXRlKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25f c19lb2YsIF9fcHl4X2tfZW9mLCBzaXplb2YoX19weXhfa19lb2YpLCAwLCAwLCAxLCAxfSwKLSsg IHsmX19weXhfbl9zX2Vycl9jLCBfX3B5eF9rX2Vycl9jLCBzaXplb2YoX19weXhfa19lcnJfYyks IDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfZXJyb3IsIF9fcHl4X2tfZXJyb3IsIHNpemVv ZihfX3B5eF9rX2Vycm9yKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19lcnJvcnMsIF9f cHl4X2tfZXJyb3JzLCBzaXplb2YoX19weXhfa19lcnJvcnMpLCAwLCAwLCAxLCAxfSwKLSsgIHsm X19weXhfbl9zX2Vycm9yc19sb2NhbHNfd3JhcHBlZCwgX19weXhfa19lcnJvcnNfbG9jYWxzX3dy YXBwZWQsIHNpemVvZihfX3B5eF9rX2Vycm9yc19sb2NhbHNfd3JhcHBlZCksIDAsIDAsIDEsIDF9 LAotKyAgeyZfX3B5eF9uX3NfZXZlbnQsIF9fcHl4X2tfZXZlbnQsIHNpemVvZihfX3B5eF9rX2V2 ZW50KSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19mYXRhbCwgX19weXhfa19mYXRhbCwg c2l6ZW9mKF9fcHl4X2tfZmF0YWwpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX2Zibywg X19weXhfa19mYm8sIHNpemVvZihfX3B5eF9rX2ZibyksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5 eF9uX3NfZmQsIF9fcHl4X2tfZmQsIHNpemVvZihfX3B5eF9rX2ZkKSwgMCwgMCwgMSwgMX0sCi0r ICB7Jl9fcHl4X25fc19maWxlX2xvYWRlZCwgX19weXhfa19maWxlX2xvYWRlZCwgc2l6ZW9mKF9f cHl4X2tfZmlsZV9sb2FkZWQpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX2ZsaXBfeSwg X19weXhfa19mbGlwX3ksIHNpemVvZihfX3B5eF9rX2ZsaXBfeSksIDAsIDAsIDEsIDF9LAotKyAg eyZfX3B5eF9uX3NfZm4sIF9fcHl4X2tfZm4sIHNpemVvZihfX3B5eF9rX2ZuKSwgMCwgMCwgMSwg MX0sCi0rICB7Jl9fcHl4X25fc19mb3JtYXRfZm9yLCBfX3B5eF9rX2Zvcm1hdF9mb3IsIHNpemVv ZihfX3B5eF9rX2Zvcm1hdF9mb3IpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX2dldCwg X19weXhfa19nZXQsIHNpemVvZihfX3B5eF9rX2dldCksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5 eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcywgX19weXhfa19nZXRfcHJvY19hZGRyZXNzLCBzaXplb2Yo X19weXhfa19nZXRfcHJvY19hZGRyZXNzKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19n ZXRfcHJvcGVydHksIF9fcHl4X2tfZ2V0X3Byb3BlcnR5LCBzaXplb2YoX19weXhfa19nZXRfcHJv cGVydHkpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX2dldF9wcm9wZXJ0eV9hc3luYywg X19weXhfa19nZXRfcHJvcGVydHlfYXN5bmMsIHNpemVvZihfX3B5eF9rX2dldF9wcm9wZXJ0eV9h c3luYyksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5X3JlcGx5LCBf X3B5eF9rX2dldF9wcm9wZXJ0eV9yZXBseSwgc2l6ZW9mKF9fcHl4X2tfZ2V0X3Byb3BlcnR5X3Jl cGx5KSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19nZXRzdGF0ZSwgX19weXhfa19nZXRz dGF0ZSwgc2l6ZW9mKF9fcHl4X2tfZ2V0c3RhdGUpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhf bl9zX2gsIF9fcHl4X2tfaCwgc2l6ZW9mKF9fcHl4X2tfaCksIDAsIDAsIDEsIDF9LAotKyAgeyZf X3B5eF9rcF9zX2ljY19ibG9iX3Nob3VsZF9iZV9hX2J5dGVzX2luc3RhLCBfX3B5eF9rX2ljY19i bG9iX3Nob3VsZF9iZV9hX2J5dGVzX2luc3RhLCBzaXplb2YoX19weXhfa19pY2NfYmxvYl9zaG91 bGRfYmVfYV9ieXRlc19pbnN0YSksIDAsIDAsIDEsIDB9LAotKyAgeyZfX3B5eF9uX3NfaWQsIF9f cHl4X2tfaWQsIHNpemVvZihfX3B5eF9rX2lkKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25f c19pZGxlLCBfX3B5eF9rX2lkbGUsIHNpemVvZihfX3B5eF9rX2lkbGUpLCAwLCAwLCAxLCAxfSwK LSsgIHsmX19weXhfbl9zX2ltcG9ydCwgX19weXhfa19pbXBvcnQsIHNpemVvZihfX3B5eF9rX2lt cG9ydCksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfaW5mbywgX19weXhfa19pbmZvLCBz aXplb2YoX19weXhfa19pbmZvKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19pbml0LCBf X3B5eF9rX2luaXQsIHNpemVvZihfX3B5eF9rX2luaXQpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19w eXhfbl9zX2luaXRpYWxpemUsIF9fcHl4X2tfaW5pdGlhbGl6ZSwgc2l6ZW9mKF9fcHl4X2tfaW5p dGlhbGl6ZSksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfaW50ZXJuYWxfZm9ybWF0LCBf X3B5eF9rX2ludGVybmFsX2Zvcm1hdCwgc2l6ZW9mKF9fcHl4X2tfaW50ZXJuYWxfZm9ybWF0KSwg MCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19pbnZhbGlkX3BhcmFtZXRlciwgX19weXhfa19p bnZhbGlkX3BhcmFtZXRlciwgc2l6ZW9mKF9fcHl4X2tfaW52YWxpZF9wYXJhbWV0ZXIpLCAwLCAw LCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX2lzX3B5MywgX19weXhfa19pc19weTMsIHNpemVvZihf X3B5eF9rX2lzX3B5MyksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfaXNzaHV0ZG93biwg X19weXhfa19pc3NodXRkb3duLCBzaXplb2YoX19weXhfa19pc3NodXRkb3duKSwgMCwgMCwgMSwg MX0sCi0rICB7Jl9fcHl4X25fc19rLCBfX3B5eF9rX2ssIHNpemVvZihfX3B5eF9rX2spLCAwLCAw LCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX2tleXMsIF9fcHl4X2tfa2V5cywgc2l6ZW9mKF9fcHl4 X2tfa2V5cyksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3Nfa3csIF9fcHl4X2tfa3csIHNp emVvZihfX3B5eF9rX2t3KSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X2twX3NfbGlibXB2X3Zl cnNpb25faXNfaW5jb3JyZWN0X1JlcXUsIF9fcHl4X2tfbGlibXB2X3ZlcnNpb25faXNfaW5jb3Jy ZWN0X1JlcXUsIHNpemVvZihfX3B5eF9rX2xpYm1wdl92ZXJzaW9uX2lzX2luY29ycmVjdF9SZXF1 KSwgMCwgMCwgMSwgMH0sCi0rICB7Jl9fcHl4X25fc19sb2FkX2NvbmZpZywgX19weXhfa19sb2Fk X2NvbmZpZywgc2l6ZW9mKF9fcHl4X2tfbG9hZF9jb25maWcpLCAwLCAwLCAxLCAxfSwKLSsgIHsm X19weXhfbl9zX2xvYWRpbmdfZmFpbGVkLCBfX3B5eF9rX2xvYWRpbmdfZmFpbGVkLCBzaXplb2Yo X19weXhfa19sb2FkaW5nX2ZhaWxlZCksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfbG9j aywgX19weXhfa19sb2NrLCBzaXplb2YoX19weXhfa19sb2NrKSwgMCwgMCwgMSwgMX0sCi0rICB7 Jl9fcHl4X25fc19sb2dfbWVzc2FnZSwgX19weXhfa19sb2dfbWVzc2FnZSwgc2l6ZW9mKF9fcHl4 X2tfbG9nX21lc3NhZ2UpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX21haW4sIF9fcHl4 X2tfbWFpbiwgc2l6ZW9mKF9fcHl4X2tfbWFpbiksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9u X3NfbWV0YWNsYXNzLCBfX3B5eF9rX21ldGFjbGFzcywgc2l6ZW9mKF9fcHl4X2tfbWV0YWNsYXNz KSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19tb2R1bGUsIF9fcHl4X2tfbW9kdWxlLCBz aXplb2YoX19weXhfa19tb2R1bGUpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX21wdiwg X19weXhfa19tcHYsIHNpemVvZihfX3B5eF9rX21wdiksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5 eF9uX3NfbXB2X2NhbGxiYWNrLCBfX3B5eF9rX21wdl9jYWxsYmFjaywgc2l6ZW9mKF9fcHl4X2tf bXB2X2NhbGxiYWNrKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19uYW1lLCBfX3B5eF9r X25hbWUsIHNpemVvZihfX3B5eF9rX25hbWUpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9z X25ldywgX19weXhfa19uZXcsIHNpemVvZihfX3B5eF9rX25ldyksIDAsIDAsIDEsIDF9LAotKyAg eyZfX3B5eF9uX3Nfbm8sIF9fcHl4X2tfbm8sIHNpemVvZihfX3B5eF9rX25vKSwgMCwgMCwgMSwg MX0sCi0rICB7Jl9fcHl4X2twX3Nfbm9fZGVmYXVsdF9fX3JlZHVjZV9fX2R1ZV90b19ub24sIF9f cHl4X2tfbm9fZGVmYXVsdF9fX3JlZHVjZV9fX2R1ZV90b19ub24sIHNpemVvZihfX3B5eF9rX25v X2RlZmF1bHRfX19yZWR1Y2VfX19kdWVfdG9fbm9uKSwgMCwgMCwgMSwgMH0sCi0rICB7Jl9fcHl4 X25fc19ub21lbSwgX19weXhfa19ub21lbSwgc2l6ZW9mKF9fcHl4X2tfbm9tZW0pLCAwLCAwLCAx LCAxfSwKLSsgIHsmX19weXhfbl9zX25vbmUsIF9fcHl4X2tfbm9uZSwgc2l6ZW9mKF9fcHl4X2tf bm9uZSksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3Nfbm90X2ZvdW5kLCBfX3B5eF9rX25v dF9mb3VuZCwgc2l6ZW9mKF9fcHl4X2tfbm90X2ZvdW5kKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9f cHl4X25fc19ub3RfaW1wbGVtZW50ZWQsIF9fcHl4X2tfbm90X2ltcGxlbWVudGVkLCBzaXplb2Yo X19weXhfa19ub3RfaW1wbGVtZW50ZWQpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX25v dGhpbmdfdG9fcGxheSwgX19weXhfa19ub3RoaW5nX3RvX3BsYXksIHNpemVvZihfX3B5eF9rX25v dGhpbmdfdG9fcGxheSksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3Nfb2JqZWN0LCBfX3B5 eF9rX29iamVjdCwgc2l6ZW9mKF9fcHl4X2tfb2JqZWN0KSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9f cHl4X25fc19vYnNlcnZlX3Byb3BlcnR5LCBfX3B5eF9rX29ic2VydmVfcHJvcGVydHksIHNpemVv ZihfX3B5eF9rX29ic2VydmVfcHJvcGVydHkpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9z X29ic2VydmVkLCBfX3B5eF9rX29ic2VydmVkLCBzaXplb2YoX19weXhfa19vYnNlcnZlZCksIDAs IDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3Nfb3BlbmdsLCBfX3B5eF9rX29wZW5nbCwgc2l6ZW9m KF9fcHl4X2tfb3BlbmdsKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19vcGVuZ2xfZmJv LCBfX3B5eF9rX29wZW5nbF9mYm8sIHNpemVvZihfX3B5eF9rX29wZW5nbF9mYm8pLCAwLCAwLCAx LCAxfSwKLSsgIHsmX19weXhfbl9zX29wZW5nbF9pbml0X3BhcmFtcywgX19weXhfa19vcGVuZ2xf aW5pdF9wYXJhbXMsIHNpemVvZihfX3B5eF9rX29wZW5nbF9pbml0X3BhcmFtcyksIDAsIDAsIDEs IDF9LAotKyAgeyZfX3B5eF9uX3Nfb3B0aW9uX2Vycm9yLCBfX3B5eF9rX29wdGlvbl9lcnJvciwg c2l6ZW9mKF9fcHl4X2tfb3B0aW9uX2Vycm9yKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25f c19vcHRpb25fZm9ybWF0LCBfX3B5eF9rX29wdGlvbl9mb3JtYXQsIHNpemVvZihfX3B5eF9rX29w dGlvbl9mb3JtYXQpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3BpY2tsZSwgX19weXhf a19waWNrbGUsIHNpemVvZihfX3B5eF9rX3BpY2tsZSksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5 eF9uX3NfcGxheWJhY2tfcmVzdGFydCwgX19weXhfa19wbGF5YmFja19yZXN0YXJ0LCBzaXplb2Yo X19weXhfa19wbGF5YmFja19yZXN0YXJ0KSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19w cmVwYXJlLCBfX3B5eF9rX3ByZXBhcmUsIHNpemVvZihfX3B5eF9rX3ByZXBhcmUpLCAwLCAwLCAx LCAxfSwKLSsgIHsmX19weXhfbl9zX3ByZXNlbnQsIF9fcHl4X2tfcHJlc2VudCwgc2l6ZW9mKF9f cHl4X2tfcHJlc2VudCksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfcHJvcCwgX19weXhf a19wcm9wLCBzaXplb2YoX19weXhfa19wcm9wKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25f c19wcm9wZXJ0eV9jaGFuZ2UsIF9fcHl4X2tfcHJvcGVydHlfY2hhbmdlLCBzaXplb2YoX19weXhf a19wcm9wZXJ0eV9jaGFuZ2UpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3Byb3BlcnR5 X2Vycm9yLCBfX3B5eF9rX3Byb3BlcnR5X2Vycm9yLCBzaXplb2YoX19weXhfa19wcm9wZXJ0eV9l cnJvciksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfcHJvcGVydHlfZm9ybWF0LCBfX3B5 eF9rX3Byb3BlcnR5X2Zvcm1hdCwgc2l6ZW9mKF9fcHl4X2tfcHJvcGVydHlfZm9ybWF0KSwgMCwg MCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19wcm9wZXJ0eV91bmF2YWlsYWJsZSwgX19weXhfa19w cm9wZXJ0eV91bmF2YWlsYWJsZSwgc2l6ZW9mKF9fcHl4X2tfcHJvcGVydHlfdW5hdmFpbGFibGUp LCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfa3Bfc19weW1wdl9lcnJvcl9kdXJpbmdfY2FsbGJh Y2tfcywgX19weXhfa19weW1wdl9lcnJvcl9kdXJpbmdfY2FsbGJhY2tfcywgc2l6ZW9mKF9fcHl4 X2tfcHltcHZfZXJyb3JfZHVyaW5nX2NhbGxiYWNrX3MpLCAwLCAwLCAxLCAwfSwKLSsgIHsmX19w eXhfbl9zX3B5eF9QaWNrbGVFcnJvciwgX19weXhfa19weXhfUGlja2xlRXJyb3IsIHNpemVvZihf X3B5eF9rX3B5eF9QaWNrbGVFcnJvciksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfcHl4 X2NoZWNrc3VtLCBfX3B5eF9rX3B5eF9jaGVja3N1bSwgc2l6ZW9mKF9fcHl4X2tfcHl4X2NoZWNr c3VtKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19weXhfcmVzdWx0LCBfX3B5eF9rX3B5 eF9yZXN1bHQsIHNpemVvZihfX3B5eF9rX3B5eF9yZXN1bHQpLCAwLCAwLCAxLCAxfSwKLSsgIHsm X19weXhfbl9zX3B5eF9zdGF0ZSwgX19weXhfa19weXhfc3RhdGUsIHNpemVvZihfX3B5eF9rX3B5 eF9zdGF0ZSksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfcHl4X3R5cGUsIF9fcHl4X2tf cHl4X3R5cGUsIHNpemVvZihfX3B5eF9rX3B5eF90eXBlKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9f cHl4X25fc19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCwgX19weXhfa19weXhfdW5waWNr bGVfRW5kT2ZGaWxlUmVhY2hlZCwgc2l6ZW9mKF9fcHl4X2tfcHl4X3VucGlja2xlX0VuZE9mRmls ZVJlYWNoZWQpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3B5eF91bnBpY2tsZV9FdmVu dCwgX19weXhfa19weXhfdW5waWNrbGVfRXZlbnQsIHNpemVvZihfX3B5eF9rX3B5eF91bnBpY2ts ZV9FdmVudCksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfcHl4X3VucGlja2xlX0xvZ01l c3NhZ2UsIF9fcHl4X2tfcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UsIHNpemVvZihfX3B5eF9rX3B5 eF91bnBpY2tsZV9Mb2dNZXNzYWdlKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19weXhf dW5waWNrbGVfUHJvcGVydHksIF9fcHl4X2tfcHl4X3VucGlja2xlX1Byb3BlcnR5LCBzaXplb2Yo X19weXhfa19weXhfdW5waWNrbGVfUHJvcGVydHkpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhf bl9zX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8sIF9fcHl4X2tfcHl4X3VucGlja2xlX1Jl bmRlckZyYW1lSW5mbywgc2l6ZW9mKF9fcHl4X2tfcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5m byksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfcHl4X3Z0YWJsZSwgX19weXhfa19weXhf dnRhYmxlLCBzaXplb2YoX19weXhfa19weXhfdnRhYmxlKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9f cHl4X25fc19xdWFsbmFtZSwgX19weXhfa19xdWFsbmFtZSwgc2l6ZW9mKF9fcHl4X2tfcXVhbG5h bWUpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3F1ZXVlX2Z1bGwsIF9fcHl4X2tfcXVl dWVfZnVsbCwgc2l6ZW9mKF9fcHl4X2tfcXVldWVfZnVsbCksIDAsIDAsIDEsIDF9LAotKyAgeyZf X3B5eF9uX3NfcXVpdCwgX19weXhfa19xdWl0LCBzaXplb2YoX19weXhfa19xdWl0KSwgMCwgMCwg MSwgMX0sCi0rICB7Jl9fcHl4X25fc19yYW5nZSwgX19weXhfa19yYW5nZSwgc2l6ZW9mKF9fcHl4 X2tfcmFuZ2UpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3JlZHJhdywgX19weXhfa19y ZWRyYXcsIHNpemVvZihfX3B5eF9rX3JlZHJhdyksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9u X3NfcmVkdWNlLCBfX3B5eF9rX3JlZHVjZSwgc2l6ZW9mKF9fcHl4X2tfcmVkdWNlKSwgMCwgMCwg MSwgMX0sCi0rICB7Jl9fcHl4X25fc19yZWR1Y2VfY3l0aG9uLCBfX3B5eF9rX3JlZHVjZV9jeXRo b24sIHNpemVvZihfX3B5eF9rX3JlZHVjZV9jeXRob24pLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19w eXhfbl9zX3JlZHVjZV9leCwgX19weXhfa19yZWR1Y2VfZXgsIHNpemVvZihfX3B5eF9rX3JlZHVj ZV9leCksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfcmVsZWFzZSwgX19weXhfa19yZWxl YXNlLCBzaXplb2YoX19weXhfa19yZWxlYXNlKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25f c19yZW1vdmUsIF9fcHl4X2tfcmVtb3ZlLCBzaXplb2YoX19weXhfa19yZW1vdmUpLCAwLCAwLCAx LCAxfSwKLSsgIHsmX19weXhfbl9zX3JlbmRlciwgX19weXhfa19yZW5kZXIsIHNpemVvZihfX3B5 eF9rX3JlbmRlciksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfcmVuZGVyX2ZkLCBfX3B5 eF9rX3JlbmRlcl9mZCwgc2l6ZW9mKF9fcHl4X2tfcmVuZGVyX2ZkKSwgMCwgMCwgMSwgMX0sCi0r ICB7Jl9fcHl4X25fc19yZXBlYXQsIF9fcHl4X2tfcmVwZWF0LCBzaXplb2YoX19weXhfa19yZXBl YXQpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3JlcXVlc3RfZXZlbnQsIF9fcHl4X2tf cmVxdWVzdF9ldmVudCwgc2l6ZW9mKF9fcHl4X2tfcmVxdWVzdF9ldmVudCksIDAsIDAsIDEsIDF9 LAotKyAgeyZfX3B5eF9uX3NfcnVuLCBfX3B5eF9rX3J1biwgc2l6ZW9mKF9fcHl4X2tfcnVuKSwg MCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19zLCBfX3B5eF9rX3MsIHNpemVvZihfX3B5eF9r X3MpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3NlZWssIF9fcHl4X2tfc2Vlaywgc2l6 ZW9mKF9fcHl4X2tfc2VlayksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3Nfc2VsZiwgX19w eXhfa19zZWxmLCBzaXplb2YoX19weXhfa19zZWxmKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4 X2twX3Nfc2VsZl9fY3R4X2Nhbm5vdF9iZV9jb252ZXJ0ZWRfdG8sIF9fcHl4X2tfc2VsZl9fY3R4 X2Nhbm5vdF9iZV9jb252ZXJ0ZWRfdG8sIHNpemVvZihfX3B5eF9rX3NlbGZfX2N0eF9jYW5ub3Rf YmVfY29udmVydGVkX3RvKSwgMCwgMCwgMSwgMH0sCi0rICB7Jl9fcHl4X2twX3Nfc2VsZl9wYXJh bXNfY2Fubm90X2JlX2NvbnZlcnRlZCwgX19weXhfa19zZWxmX3BhcmFtc19jYW5ub3RfYmVfY29u dmVydGVkLCBzaXplb2YoX19weXhfa19zZWxmX3BhcmFtc19jYW5ub3RfYmVfY29udmVydGVkKSwg MCwgMCwgMSwgMH0sCi0rICB7Jl9fcHl4X25fc19zZXQsIF9fcHl4X2tfc2V0LCBzaXplb2YoX19w eXhfa19zZXQpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3NldF9hbWJpZW50X2xpZ2h0 LCBfX3B5eF9rX3NldF9hbWJpZW50X2xpZ2h0LCBzaXplb2YoX19weXhfa19zZXRfYW1iaWVudF9s aWdodCksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3Nfc2V0X2ljY19wcm9maWxlLCBfX3B5 eF9rX3NldF9pY2NfcHJvZmlsZSwgc2l6ZW9mKF9fcHl4X2tfc2V0X2ljY19wcm9maWxlKSwgMCwg MCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19zZXRfbG9nX2xldmVsLCBfX3B5eF9rX3NldF9sb2df bGV2ZWwsIHNpemVvZihfX3B5eF9rX3NldF9sb2dfbGV2ZWwpLCAwLCAwLCAxLCAxfSwKLSsgIHsm X19weXhfbl9zX3NldF9vcHRpb24sIF9fcHl4X2tfc2V0X29wdGlvbiwgc2l6ZW9mKF9fcHl4X2tf c2V0X29wdGlvbiksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3Nfc2V0X3Byb3BlcnR5LCBf X3B5eF9rX3NldF9wcm9wZXJ0eSwgc2l6ZW9mKF9fcHl4X2tfc2V0X3Byb3BlcnR5KSwgMCwgMCwg MSwgMX0sCi0rICB7Jl9fcHl4X25fc19zZXRfcHJvcGVydHlfcmVwbHksIF9fcHl4X2tfc2V0X3By b3BlcnR5X3JlcGx5LCBzaXplb2YoX19weXhfa19zZXRfcHJvcGVydHlfcmVwbHkpLCAwLCAwLCAx LCAxfSwKLSsgIHsmX19weXhfbl9zX3NldHN0YXRlLCBfX3B5eF9rX3NldHN0YXRlLCBzaXplb2Yo X19weXhfa19zZXRzdGF0ZSksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3Nfc2V0c3RhdGVf Y3l0aG9uLCBfX3B5eF9rX3NldHN0YXRlX2N5dGhvbiwgc2l6ZW9mKF9fcHl4X2tfc2V0c3RhdGVf Y3l0aG9uKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19zaHV0ZG93biwgX19weXhfa19z aHV0ZG93biwgc2l6ZW9mKF9fcHl4X2tfc2h1dGRvd24pLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19w eXhfbl9zX3NraXBfcmVuZGVyaW5nLCBfX3B5eF9rX3NraXBfcmVuZGVyaW5nLCBzaXplb2YoX19w eXhfa19za2lwX3JlbmRlcmluZyksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3Nfc3RhcnQs IF9fcHl4X2tfc3RhcnQsIHNpemVvZihfX3B5eF9rX3N0YXJ0KSwgMCwgMCwgMSwgMX0sCi0rICB7 Jl9fcHl4X25fc19zdGFydF9maWxlLCBfX3B5eF9rX3N0YXJ0X2ZpbGUsIHNpemVvZihfX3B5eF9r X3N0YXJ0X2ZpbGUpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3N0ZGVyciwgX19weXhf a19zdGRlcnIsIHNpemVvZihfX3B5eF9rX3N0ZGVyciksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5 eF9uX3Nfc3RyZGVjLCBfX3B5eF9rX3N0cmRlYywgc2l6ZW9mKF9fcHl4X2tfc3RyZGVjKSwgMCwg MCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc19zdHJkZWNfZXJyLCBfX3B5eF9rX3N0cmRlY19lcnIs IHNpemVvZihfX3B5eF9rX3N0cmRlY19lcnIpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9z X3N0cmVuYywgX19weXhfa19zdHJlbmMsIHNpemVvZihfX3B5eF9rX3N0cmVuYyksIDAsIDAsIDEs IDF9LAotKyAgeyZfX3B5eF9uX3Nfc3RyaWN0LCBfX3B5eF9rX3N0cmljdCwgc2l6ZW9mKF9fcHl4 X2tfc3RyaWN0KSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X2twX3Nfc3RyaW5nc291cmNlLCBf X3B5eF9rX3N0cmluZ3NvdXJjZSwgc2l6ZW9mKF9fcHl4X2tfc3RyaW5nc291cmNlKSwgMCwgMCwg MSwgMH0sCi0rICB7Jl9fcHl4X25fc19zdWNjZXNzLCBfX3B5eF9rX3N1Y2Nlc3MsIHNpemVvZihf X3B5eF9rX3N1Y2Nlc3MpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3N1cnJvZ2F0ZWVz Y2FwZSwgX19weXhfa19zdXJyb2dhdGVlc2NhcGUsIHNpemVvZihfX3B5eF9rX3N1cnJvZ2F0ZWVz Y2FwZSksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3Nfc3lzLCBfX3B5eF9rX3N5cywgc2l6 ZW9mKF9fcHl4X2tfc3lzKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc190YXJnZXRfdGlt ZSwgX19weXhfa190YXJnZXRfdGltZSwgc2l6ZW9mKF9fcHl4X2tfdGFyZ2V0X3RpbWUpLCAwLCAw LCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3Rlc3QsIF9fcHl4X2tfdGVzdCwgc2l6ZW9mKF9fcHl4 X2tfdGVzdCksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfdGhyZWFkaW5nLCBfX3B5eF9r X3RocmVhZGluZywgc2l6ZW9mKF9fcHl4X2tfdGhyZWFkaW5nKSwgMCwgMCwgMSwgMX0sCi0rICB7 Jl9fcHl4X25fc190aWNrLCBfX3B5eF9rX3RpY2ssIHNpemVvZihfX3B5eF9rX3RpY2spLCAwLCAw LCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3RpbWVvdXQsIF9fcHl4X2tfdGltZW91dCwgc2l6ZW9m KF9fcHl4X2tfdGltZW91dCksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfdHJhY2UsIF9f cHl4X2tfdHJhY2UsIHNpemVvZihfX3B5eF9rX3RyYWNlKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9f cHl4X25fc191bmluaXRpYWxpemVkLCBfX3B5eF9rX3VuaW5pdGlhbGl6ZWQsIHNpemVvZihfX3B5 eF9rX3VuaW5pdGlhbGl6ZWQpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3Vua25vd25f Zm9ybWF0LCBfX3B5eF9rX3Vua25vd25fZm9ybWF0LCBzaXplb2YoX19weXhfa191bmtub3duX2Zv cm1hdCksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfdW5vYnNlcnZlX3Byb3BlcnR5LCBf X3B5eF9rX3Vub2JzZXJ2ZV9wcm9wZXJ0eSwgc2l6ZW9mKF9fcHl4X2tfdW5vYnNlcnZlX3Byb3Bl cnR5KSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc191bnN1cHBvcnRlZCwgX19weXhfa191 bnN1cHBvcnRlZCwgc2l6ZW9mKF9fcHl4X2tfdW5zdXBwb3J0ZWQpLCAwLCAwLCAxLCAxfSwKLSsg IHsmX19weXhfbl9zX3VwZGF0ZSwgX19weXhfa191cGRhdGUsIHNpemVvZihfX3B5eF9rX3VwZGF0 ZSksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9rcF9zX3V0Zl84LCBfX3B5eF9rX3V0Zl84LCBz aXplb2YoX19weXhfa191dGZfOCksIDAsIDAsIDEsIDB9LAotKyAgeyZfX3B5eF9uX3NfdiwgX19w eXhfa192LCBzaXplb2YoX19weXhfa192KSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc192 YWx1ZSwgX19weXhfa192YWx1ZSwgc2l6ZW9mKF9fcHl4X2tfdmFsdWUpLCAwLCAwLCAxLCAxfSwK LSsgIHsmX19weXhfbl9zX3ZhbHVlcywgX19weXhfa192YWx1ZXMsIHNpemVvZihfX3B5eF9rX3Zh bHVlcyksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3NfdmVyc2lvbiwgX19weXhfa192ZXJz aW9uLCBzaXplb2YoX19weXhfa192ZXJzaW9uKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25f c192ZXJzaW9uX2luZm8sIF9fcHl4X2tfdmVyc2lvbl9pbmZvLCBzaXplb2YoX19weXhfa192ZXJz aW9uX2luZm8pLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21w diwgX19weXhfa192aWRjdXR0ZXJfbGlic19tcHYsIHNpemVvZihfX3B5eF9rX3ZpZGN1dHRlcl9s aWJzX21wdiksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5 bXB2X21wdl9weXgsIF9fcHl4X2tfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgc2l6ZW9m KF9fcHl4X2tfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCksIDAsIDAsIDEsIDB9LAotKyAg eyZfX3B5eF9uX3NfdmlkZW9fcmVjb25maWcsIF9fcHl4X2tfdmlkZW9fcmVjb25maWcsIHNpemVv ZihfX3B5eF9rX3ZpZGVvX3JlY29uZmlnKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc192 b19pbml0X2ZhaWxlZCwgX19weXhfa192b19pbml0X2ZhaWxlZCwgc2l6ZW9mKF9fcHl4X2tfdm9f aW5pdF9mYWlsZWQpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3csIF9fcHl4X2tfdywg c2l6ZW9mKF9fcHl4X2tfdyksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5eF9uX3Nfd2FybiwgX19w eXhfa193YXJuLCBzaXplb2YoX19weXhfa193YXJuKSwgMCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4 X25fc193YXJuaW5ncywgX19weXhfa193YXJuaW5ncywgc2l6ZW9mKF9fcHl4X2tfd2FybmluZ3Mp LCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3dsX2Rpc3BsYXksIF9fcHl4X2tfd2xfZGlz cGxheSwgc2l6ZW9mKF9fcHl4X2tfd2xfZGlzcGxheSksIDAsIDAsIDEsIDF9LAotKyAgeyZfX3B5 eF9uX3Nfd3JhcHBlZCwgX19weXhfa193cmFwcGVkLCBzaXplb2YoX19weXhfa193cmFwcGVkKSwg MCwgMCwgMSwgMX0sCi0rICB7Jl9fcHl4X25fc193cml0ZSwgX19weXhfa193cml0ZSwgc2l6ZW9m KF9fcHl4X2tfd3JpdGUpLCAwLCAwLCAxLCAxfSwKLSsgIHsmX19weXhfbl9zX3gxMV9kaXNwbGF5 LCBfX3B5eF9rX3gxMV9kaXNwbGF5LCBzaXplb2YoX19weXhfa194MTFfZGlzcGxheSksIDAsIDAs IDEsIDF9LAotKyAgezAsIDAsIDAsIDAsIDAsIDAsIDB9Ci0rfTsKLStzdGF0aWMgQ1lUSE9OX1NN QUxMX0NPREUgaW50IF9fUHl4X0luaXRDYWNoZWRCdWlsdGlucyh2b2lkKSB7Ci0rICBfX3B5eF9i dWlsdGluX0ltcG9ydEVycm9yID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX0ltcG9y dEVycm9yKTsgaWYgKCFfX3B5eF9idWlsdGluX0ltcG9ydEVycm9yKSBfX1BZWF9FUlIoMCwgNDQs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfYnVpbHRpbl9vYmplY3QgPSBfX1B5eF9HZXRCdWls dGluTmFtZShfX3B5eF9uX3Nfb2JqZWN0KTsgaWYgKCFfX3B5eF9idWlsdGluX29iamVjdCkgX19Q WVhfRVJSKDAsIDM0NiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF9idWlsdGluX1VuaWNvZGVE ZWNvZGVFcnJvciA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19Vbmljb2RlRGVjb2Rl RXJyb3IpOyBpZiAoIV9fcHl4X2J1aWx0aW5fVW5pY29kZURlY29kZUVycm9yKSBfX1BZWF9FUlIo MCwgNTgsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfYnVpbHRpbl9Vbmljb2RlRW5jb2RlRXJy b3IgPSBfX1B5eF9HZXRCdWlsdGluTmFtZShfX3B5eF9uX3NfVW5pY29kZUVuY29kZUVycm9yKTsg aWYgKCFfX3B5eF9idWlsdGluX1VuaWNvZGVFbmNvZGVFcnJvcikgX19QWVhfRVJSKDAsIDY2LCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X2J1aWx0aW5fcmFuZ2UgPSBfX1B5eF9HZXRCdWlsdGlu TmFtZShfX3B5eF9uX3NfcmFuZ2UpOyBpZiAoIV9fcHl4X2J1aWx0aW5fcmFuZ2UpIF9fUFlYX0VS UigwLCAyMjIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfYnVpbHRpbl9pZCA9IF9fUHl4X0dl dEJ1aWx0aW5OYW1lKF9fcHl4X25fc19pZCk7IGlmICghX19weXhfYnVpbHRpbl9pZCkgX19QWVhf RVJSKDAsIDMwMywgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF9idWlsdGluX2VudW1lcmF0ZSA9 IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19lbnVtZXJhdGUpOyBpZiAoIV9fcHl4X2J1 aWx0aW5fZW51bWVyYXRlKSBfX1BZWF9FUlIoMCwgNDc1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f cHl4X2J1aWx0aW5fVHlwZUVycm9yID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX1R5 cGVFcnJvcik7IGlmICghX19weXhfYnVpbHRpbl9UeXBlRXJyb3IpIF9fUFlYX0VSUigxLCAyLCBf X3B5eF9MMV9lcnJvcikKLSsgIHJldHVybiAwOwotKyAgX19weXhfTDFfZXJyb3I6OwotKyAgcmV0 dXJuIC0xOwotK30KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMgot K3N0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfSW5pdENhY2hlZENvbnN0YW50cyh2 b2lkKSB7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9fUHl4X0luaXRDYWNoZWRDb25zdGFudHMiLCAwKTsKLSsKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTkKLSAgKiAKLS0gKiBpbXBvcnQgY3l0aG9u Ci0tICogaW1wb3J0IHN5cywgd2FybmluZ3MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqIGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQsIFNlbWFwaG9yZQotLSAqIGZyb20gbGli Yy5zdGRsaWIgY2ltcG9ydCBtYWxsb2MsIGZyZWUKLSsgKiBkZWYgX2Vycm9ycyhmbik6Ci0rICog ICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAqICAgICAgICAgdiA9IGZuKCprLCAqKmt3KQotKyAqICAgICAgICAgaWYgdiA8IDA6Ci0gICov Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9JbXBvcnQoX19weXhfbl9zX3N5cywgMCwgLTEpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMiwgX19weXhfTDFfZXJyb3IpCi0t ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9k LCBfX3B5eF9uX3Nfc3lzLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDIyLCBfX3B5eF9M MV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAg X19weXhfdF8xID0gX19QeXhfSW1wb3J0KF9fcHl4X25fc193YXJuaW5ncywgMCwgLTEpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMiwgX19weXhfTDFfZXJyb3IpCi0t ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9k LCBfX3B5eF9uX3Nfd2FybmluZ3MsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMjIsIF9f cHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 Ci0rICBfX3B5eF90dXBsZV8gPSBQeVR1cGxlX1BhY2soMywgX19weXhfbl9zX2ssIF9fcHl4X25f c19rdywgX19weXhfbl9zX3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlXykpIF9fUFlYX0VS UigwLCAzMTksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlXyk7 Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlXyk7Ci0rICBfX3B5eF9jb2Rlb2JqX18yID0g KFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDAsIDAsIDMsIDAsIENPX09QVElNSVpFRHxDT19O RVdMT0NBTFN8Q09fVkFSQVJHU3xDT19WQVJLRVlXT1JEUywgX19weXhfZW1wdHlfYnl0ZXMsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNf cHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3dyYXBwZWQsIDMxOSwgX19weXhfZW1wdHlfYnl0ZXMp OyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzIpKSBfX1BZWF9FUlIoMCwgMzE5LCBfX3B5 eF9MMV9lcnJvcikKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMwot LSAqIGltcG9ydCBjeXRob24KLS0gKiBpbXBvcnQgc3lzLCB3YXJuaW5ncwotLSAqIGZyb20gdGhy ZWFkaW5nIGltcG9ydCBUaHJlYWQsIFNlbWFwaG9yZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogZnJvbSBsaWJjLnN0ZGxpYiBjaW1wb3J0IG1hbGxvYywgZnJlZQotLSAqIGZyb20g bGliYy5zdHJpbmcgY2ltcG9ydCBzdHJjcHksIHN0cmxlbiwgbWVtc2V0Ci0rICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoyCi0rICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgotKyAqICAgICBy YWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwg X19jaW5pdF9fIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIGRlZiBfX3NldHN0 YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9y KCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5vbi10cml2aWFsIF9fY2luaXRfXyIpCi0g ICovCi0tICBfX3B5eF90XzEgPSBQeUxpc3RfTmV3KDIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAyMywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF9uX3NfVGhyZWFkKTsKLS0gIF9fUHl4X0dJ VkVSRUYoX19weXhfbl9zX1RocmVhZCk7Ci0tICBQeUxpc3RfU0VUX0lURU0oX19weXhfdF8xLCAw LCBfX3B5eF9uX3NfVGhyZWFkKTsKLS0gIF9fUHl4X0lOQ1JFRihfX3B5eF9uX3NfU2VtYXBob3Jl KTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfbl9zX1NlbWFwaG9yZSk7Ci0tICBQeUxpc3RfU0VU X0lURU0oX19weXhfdF8xLCAxLCBfX3B5eF9uX3NfU2VtYXBob3JlKTsKLS0gIF9fcHl4X3RfMiA9 IF9fUHl4X0ltcG9ydChfX3B5eF9uX3NfdGhyZWFkaW5nLCBfX3B5eF90XzEsIC0xKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjMsIF9fcHl4X0wxX2Vycm9yKQotLSAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKLS0gIF9fcHl4X3RfMSA9IF9fUHl4X0ltcG9ydEZyb20oX19weXhfdF8yLCBf X3B5eF9uX3NfVGhyZWFkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MjMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBpZiAo UHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX1RocmVhZCwgX19weXhfdF8xKSA8IDAp IF9fUFlYX0VSUigwLCAyMywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKLS0gIF9fcHl4X3RfMSA9IF9fUHl4X0ltcG9ydEZyb20oX19w eXhfdF8yLCBfX3B5eF9uX3NfU2VtYXBob3JlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMjMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7Ci0tICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX1NlbWFwaG9yZSwg X19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAyMywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOwotKyAgX19weXhfdHVwbGVfXzMgPSBQeVR1cGxlX1BhY2so MSwgX19weXhfa3Bfc19ub19kZWZhdWx0X19fcmVkdWNlX19fZHVlX3RvX25vbik7IGlmICh1bmxp a2VseSghX19weXhfdHVwbGVfXzMpKSBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCi0r ICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzMpOwotKyAgX19QeXhfR0lWRVJFRihfX3B5eF90 dXBsZV9fMyk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzAKLS0g KiBmcm9tIGNsaWVudCBjaW1wb3J0ICoKLS0gKiAKLS0gKiBfX3ZlcnNpb25fXyA9ICIwLjMuMCIg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIF9fYXV0aG9yX18gPSAiQW5kcmUgRCIK LS0gKiAKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9y KCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5vbi10cml2aWFsIF9fY2luaXRfXyIpCi0r ICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgotKyAqICAgICBy YWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwg X19jaW5pdF9fIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqLwotLSAgaWYgKFB5 RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc192ZXJzaW9uLCBfX3B5eF9rcF9zXzBfM18w KSA8IDApIF9fUFlYX0VSUigwLCAzMCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90dXBsZV9f NCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9rcF9zX25vX2RlZmF1bHRfX19yZWR1Y2VfX19kdWVf dG9fbm9uKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNCkpIF9fUFlYX0VSUigxLCA0LCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNCk7Ci0rICBfX1B5 eF9HSVZFUkVGKF9fcHl4X3R1cGxlX180KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozMQotLSAqIAotLSAqIF9fdmVyc2lvbl9fID0gIjAuMy4wIgotLSAqIF9fYXV0 aG9yX18gPSAiQW5kcmUgRCIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIAotLSAq IF9SRVFVSVJFRF9DQVBJX01BSk9SID0gMQotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MgotKyAq IGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJz ZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlj a2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogZGVmIF9fc2V0c3RhdGVf Y3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgotKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNl bGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNr bGluZyIpCi0gICovCi0tICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX2F1 dGhvciwgX19weXhfa3Bfc19BbmRyZV9EKSA8IDApIF9fUFlYX0VSUigwLCAzMSwgX19weXhfTDFf ZXJyb3IpCi0rICBfX3B5eF90dXBsZV9fNSA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9rcF9zX3Nl bGZfcGFyYW1zX2Nhbm5vdF9iZV9jb252ZXJ0ZWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxl X181KSkgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9f cHl4X3R1cGxlX181KTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzUpOwotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzCi0tICogX19hdXRob3JfXyA9ICJB bmRyZSBEIgotLSAqIAotLSAqIF9SRVFVSVJFRF9DQVBJX01BSk9SID0gMSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogX01JTl9DQVBJX01JTk9SID0gOQotLSAqIAotKyAgLyogIih0 cmVlIGZyYWdtZW50KSI6NAotKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNh bm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0rICog ZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgotKyAqICAgICByYWlz ZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24g b2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKi8K LS0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfUkVRVUlSRURfQ0FQSV9N QUpPUiwgX19weXhfaW50XzEpIDwgMCkgX19QWVhfRVJSKDAsIDMzLCBfX3B5eF9MMV9lcnJvcikK LSsgIF9fcHl4X3R1cGxlX182ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2twX3Nfc2VsZl9wYXJh bXNfY2Fubm90X2JlX2NvbnZlcnRlZCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzYpKSBf X1BZWF9FUlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdHVw bGVfXzYpOwotKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fNik7Ci0gCi0tICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQKLS0gKiAKLS0gKiBfUkVRVUlSRURfQ0FQSV9N QUpPUiA9IDEKLS0gKiBfTUlOX0NBUElfTUlOT1IgPSA5ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLS0gKiAKLS0gKiBjZGVmIHVuc2lnbmVkIGxvbmcgX0NBUElfVkVSU0lPTgotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MgotKyAqICAgICAgICAgICAgIHBhcmFt cy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9XTF9ESVNQTEFZLCBnZXRfcG9pbnRlcigid2xf ZGlzcGxheSIsIHdsX2Rpc3BsYXkpKQotKyAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6Ci0rICog ICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAtMSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0 Y19pZCA9IGRybV9kaXNwbGF5LmdldCgiY3J0Y19pZCIsIC0xKQotKyAqICAgICAgICAgICAgIGRy bV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAt MSkKLSAgKi8KLS0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfTUlOX0NB UElfTUlOT1IsIF9fcHl4X2ludF85KSA8IDApIF9fUFlYX0VSUigwLCAzNCwgX19weXhfTDFfZXJy b3IpCi0rICBfX3B5eF90dXBsZV9fNyA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfZmQsIF9f cHl4X2ludF9uZWdfMSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzcpKSBfX1BZWF9FUlIo MCwgOTkyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNyk7 Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX183KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjozNwotLSAqIAotLSAqIGNkZWYgdW5zaWduZWQgbG9uZyBfQ0FQ SV9WRVJTSU9OCi0tICogd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqICAgICBfQ0FQSV9WRVJTSU9OID0gbXB2X2NsaWVudF9hcGlfdmVyc2lvbigpCi0tICogCi0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTkzCi0rICogICAgICAgICBpZiBk cm1fZGlzcGxheToKLSsgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXku Z2V0KCJmZCIsIC0xKQotKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9k aXNwbGF5LmdldCgiY3J0Y19pZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0r ICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQo ImNvbm5lY3Rvcl9pZCIsIC0xKQotKyAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5Lmdl dCgiYXRvbWljX3JlcXVlc3RfcHRyIiwgTm9uZSkKLSAgKi8KLS0gIHsKLS0gICAgICAjaWZkZWYg V0lUSF9USFJFQUQKLS0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKLS0gICAgICBQeV9VTkJM T0NLX1RIUkVBRFMKLS0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Ci0tICAgICAgI2Vu ZGlmCi0tICAgICAgLyp0cnk6Ki8gewotKyAgX19weXhfdHVwbGVfXzggPSBQeVR1cGxlX1BhY2so MiwgX19weXhfbl9zX2NydGNfaWQsIF9fcHl4X2ludF9uZWdfMSk7IGlmICh1bmxpa2VseSghX19w eXhfdHVwbGVfXzgpKSBfX1BZWF9FUlIoMCwgOTkzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4 X0dPVFJFRihfX3B5eF90dXBsZV9fOCk7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX184 KTsKLSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozOAotLSAq IGNkZWYgdW5zaWduZWQgbG9uZyBfQ0FQSV9WRVJTSU9OCi0tICogd2l0aCBub2dpbDoKLS0gKiAg ICAgX0NBUElfVkVSU0lPTiA9IG1wdl9jbGllbnRfYXBpX3ZlcnNpb24oKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0tICogCi0tICogX0NBUElfTUFKT1IgPSBfQ0FQSV9WRVJTSU9OID4+ IDE2Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk0Ci0rICogICAgICAg ICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAtMSkKLSsgKiAgICAg ICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNydGNfaWQiLCAt MSkKLSsgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5 LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5nZXQoImF0b21pY19yZXF1ZXN0X3B0ciIs IE5vbmUpCi0rICogICAgICAgICAgICAgaWYgYXJwIGlzIG5vdCBOb25lOgotICAqLwotLSAgICAg ICAgX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX0NBUElfVkVSU0lPTiA9IG1wdl9jbGll bnRfYXBpX3ZlcnNpb24oKTsKLS0gICAgICB9Ci0rICBfX3B5eF90dXBsZV9fOSA9IFB5VHVwbGVf UGFjaygyLCBfX3B5eF9uX3NfY29ubmVjdG9yX2lkLCBfX3B5eF9pbnRfbmVnXzEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3R1cGxlX185KSkgX19QWVhfRVJSKDAsIDk5NCwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzkpOwotKyAgX19QeXhfR0lWRVJFRihfX3B5 eF90dXBsZV9fOSk7Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjM3Ci0tICogCi0tICogY2RlZiB1bnNpZ25lZCBsb25nIF9DQVBJX1ZFUlNJT04KLS0gKiB3aXRo IG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIF9DQVBJX1ZFUlNJ T04gPSBtcHZfY2xpZW50X2FwaV92ZXJzaW9uKCkKLS0gKiAKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5OTUKLSsgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQg PSBkcm1fZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKLSsgKiAgICAgICAgICAgICBkcm1fcGFy YW1zLmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpCi0r ICogICAgICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVxdWVzdF9wdHIi LCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICAgICAgaWYg YXJwIGlzIG5vdCBOb25lOgotKyAqICAgICAgICAgICAgICAgICBkcm1fcGFyYW1zLmF0b21pY19y ZXF1ZXN0X3B0ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5nZXRfcG9pbnRlcihhcnAsICJkcm1N b2RlQXRvbWljUmVxKiIpCi0gICovCi0tICAgICAgLypmaW5hbGx5OiovIHsKLS0gICAgICAgIC8q bm9ybWFsIGV4aXQ6Ki97Ci0tICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAotLSAgICAgICAg ICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOwotLSAgICAgICAgICBQeV9CTE9DS19USFJFQURTCi0t ICAgICAgICAgICNlbmRpZgotLSAgICAgICAgICBnb3RvIF9fcHl4X0w0OwotLSAgICAgICAgfQot LSAgICAgICAgX19weXhfTDQ6OwotLSAgICAgIH0KLS0gIH0KLSsgIF9fcHl4X3R1cGxlX18xMCA9 IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfYXRvbWljX3JlcXVlc3RfcHRyLCBQeV9Ob25lKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMTApKSBfX1BZWF9FUlIoMCwgOTk1LCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTApOwotKyAgX19QeXhfR0lW RVJFRihfX3B5eF90dXBsZV9fMTApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQwCi0tICogICAgIF9DQVBJX1ZFUlNJT04gPSBtcHZfY2xpZW50X2FwaV92ZXJzaW9u KCkKLS0gKiAKLS0gKiBfQ0FQSV9NQUpPUiA9IF9DQVBJX1ZFUlNJT04gPj4gMTYgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqIF9DQVBJX01JTk9SID0gX0NBUElfVkVSU0lPTiAmIDB4 RkZGRgotLSAqIAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5OAotKyAq ICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKLSsgKiAgICAgICAgICAgICAgICAgZHJt X3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0X3Bv aW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQotKyAqICAgICAgICAgICAgIGRybV9wYXJh bXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBW X1JFTkRFUl9QQVJBTV9EUk1fRElTUExBWSwgJmRybV9wYXJhbXMpCi0rICogICAgICAgICBpZiBk cm1fb3NkX3NpemU6Ci0gICovCi0tICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX3Vuc2ln bmVkX2xvbmcoKF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19DQVBJX1ZFUlNJT04gPj4g MTYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDAsIF9fcHl4X0wx X2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfZCwgX19weXhfbl9zX0NBUElfTUFKT1IsIF9fcHl4X3RfMikgPCAwKSBfX1BZWF9F UlIoMCwgNDAsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9f cHl4X3RfMiA9IDA7Ci0rICBfX3B5eF90dXBsZV9fMTEgPSBQeVR1cGxlX1BhY2soMiwgX19weXhf bl9zX3JlbmRlcl9mZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBs ZV9fMTEpKSBfX1BZWF9FUlIoMCwgOTk4LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJF RihfX3B5eF90dXBsZV9fMTEpOwotKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTEpOwot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQxCi0tICogCi0tICogX0NB UElfTUFKT1IgPSBfQ0FQSV9WRVJTSU9OID4+IDE2Ci0tICogX0NBUElfTUlOT1IgPSBfQ0FQSV9W RVJTSU9OICYgMHhGRkZGICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAKLS0gKiBp ZiBfQ0FQSV9NQUpPUiAhPSBfUkVRVUlSRURfQ0FQSV9NQUpPUiBvciBfQ0FQSV9NSU5PUiA8IF9N SU5fQ0FQSV9NSU5PUjoKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDgz Ci0rICogICAgICAgICBpZiBvcGVuZ2xfZmJvOgotKyAqICAgICAgICAgICAgIG1lbXNldCgmZmJv LCAwLCBzaXplb2YoZmJvKSkKLSsgKiAgICAgICAgICAgICBmYm8uZmJvID0gb3BlbmdsX2Ziby5n ZXQoImZibyIsIDApIG9yIDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAg ICAgICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdCi0rICogICAgICAgICAgICAgZmJvLmggPSBv cGVuZ2xfZmJvWyJoIl0KLSAgKi8KLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21fdW5z aWduZWRfbG9uZygoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX0NBUElfVkVSU0lPTiAm IDB4RkZGRikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0MSwgX19w eXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gIGlmIChQeURpY3Rf U2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfQ0FQSV9NSU5PUiwgX19weXhfdF8yKSA8IDApIF9f UFlYX0VSUigwLCA0MSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKLSsgIF9fcHl4X3R1cGxlX18xMiA9IFB5VHVwbGVfUGFjaygyLCBf X3B5eF9uX3NfZmJvLCBfX3B5eF9pbnRfMCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzEy KSkgX19QWVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9f cHl4X3R1cGxlX18xMik7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18xMik7Ci0gCi0t ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMKLS0gKiBfQ0FQSV9NSU5PUiA9 IF9DQVBJX1ZFUlNJT04gJiAweEZGRkYKLS0gKiAKLS0gKiBpZiBfQ0FQSV9NQUpPUiAhPSBfUkVR VUlSRURfQ0FQSV9NQUpPUiBvciBfQ0FQSV9NSU5PUiA8IF9NSU5fQ0FQSV9NSU5PUjogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICByYWlzZSBJbXBvcnRFcnJvcigKLS0gKiAg ICAgICAgICJsaWJtcHYgdmVyc2lvbiBpcyBpbmNvcnJlY3QuIFJlcXVpcmVkICVkLiVkIGdvdCAl ZC4lZC4iICUKLS0gKi8KLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBf X3B5eF9uX3NfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDQzLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAg X19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzEsIF9fcHl4X25fc19SRVFVSVJFRF9D QVBJX01BSk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNDMsIF9f cHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBfX3B5eF90XzQg PSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF90XzIsIF9fcHl4X3RfMSwgUHlfTkUpOyBfX1B5 eF9YR09UUkVGKF9fcHl4X3RfNCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDAsIDQzLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5 eF90XzIgPSAwOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0t ICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF80KTsgaWYgKHVubGlr ZWx5KF9fcHl4X3RfNSA8IDApKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQotLSAg X19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICBpZiAoIV9fcHl4X3Rf NSkgewotLSAgfSBlbHNlIHsKLS0gICAgX19weXhfdF8zID0gX19weXhfdF81OwotLSAgICBnb3Rv IF9fcHl4X0w2X2Jvb2xfYmlub3BfZG9uZTsKLS0gIH0KLS0gIF9fUHl4X0dldE1vZHVsZUdsb2Jh bE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3NfQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSghX19w eXhfdF80KSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJF RihfX3B5eF90XzQpOwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzEsIF9f cHl4X25fc19NSU5fQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDQzLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot LSAgX19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdF80LCBfX3B5eF90XzEs IFB5X0xUKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCA0MywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19w eXhfdF80KTsgX19weXhfdF80ID0gMDsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOwotLSAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Rf Mik7IGlmICh1bmxpa2VseShfX3B5eF90XzUgPCAwKSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5eF9M MV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAg X19weXhfdF8zID0gX19weXhfdF81OwotLSAgX19weXhfTDZfYm9vbF9iaW5vcF9kb25lOjsKLS0g IGlmICh1bmxpa2VseShfX3B5eF90XzMpKSB7Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTA4NgotKyAqICAgICAgICAgICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdCi0r ICogICAgICAgICAgICAgZmJvLmggPSBvcGVuZ2xfZmJvWyJoIl0KLSsgKiAgICAgICAgICAgICBm Ym8uaW50ZXJuYWxfZm9ybWF0ID0gb3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIsIDAp IG9yIDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgICAgIHBhcmFt cy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfRkJPLCAmZmJvKQotKyAqICAgICAg ICAgaWYgZmxpcF95OgotKyAqLwotKyAgX19weXhfdHVwbGVfXzEzID0gUHlUdXBsZV9QYWNrKDIs IF9fcHl4X25fc19pbnRlcm5hbF9mb3JtYXQsIF9fcHl4X2ludF8wKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90dXBsZV9fMTMpKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3IpCi0rICBf X1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzEzKTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVw bGVfXzEzKTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2Ci0t ICogICAgIHJhaXNlIEltcG9ydEVycm9yKAotLSAqICAgICAgICAgImxpYm1wdiB2ZXJzaW9uIGlz IGluY29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJQotLSAqICAgICAgICAgICAg IChfUkVRVUlSRURfQ0FQSV9NQUpPUiwgX01JTl9DQVBJX01JTk9SLCBfQ0FQSV9NQUpPUiwgX0NB UElfTUlOT1IpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgKQotLSAqIAot KyAgLyogIih0cmVlIGZyYWdtZW50KSI6MgotKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxm KToKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRl ZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToK LSsgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0 byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKLSAgKi8KLS0gICAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19SRVFVSVJFRF9DQVBJX01BSk9SKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDYsIF9fcHl4X0wxX2Vycm9y KQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzEsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF80LCBfX3B5eF9uX3NfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkg X19QWVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNCk7Ci0tICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9u X3NfQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ2 LCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICAgIF9f cHl4X3RfNyA9IFB5VHVwbGVfTmV3KDQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlY X0VSUigwLCA0NiwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fUHl4X0dPVFJFRihfX3B5eF90Xzcp OwotLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMik7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0o X19weXhfdF83LCAwLCBfX3B5eF90XzIpOwotLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7 Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxLCBfX3B5eF90XzEpOwotLSAgICBf X1B5eF9HSVZFUkVGKF9fcHl4X3RfNCk7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83 LCAyLCBfX3B5eF90XzQpOwotLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNik7Ci0tICAgIFB5 VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAzLCBfX3B5eF90XzYpOwotLSAgICBfX3B5eF90XzIg PSAwOwotLSAgICBfX3B5eF90XzEgPSAwOwotLSAgICBfX3B5eF90XzQgPSAwOwotLSAgICBfX3B5 eF90XzYgPSAwOwotKyAgX19weXhfdHVwbGVfXzE0ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2tw X3Nfc2VsZl9fY3R4X2Nhbm5vdF9iZV9jb252ZXJ0ZWRfdG8pOyBpZiAodW5saWtlbHkoIV9fcHl4 X3R1cGxlX18xNCkpIF9fUFlYX0VSUigxLCAyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dP VFJFRihfX3B5eF90dXBsZV9fMTQpOwotKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTQp OwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUKLS0gKiBpZiBf Q0FQSV9NQUpPUiAhPSBfUkVRVUlSRURfQ0FQSV9NQUpPUiBvciBfQ0FQSV9NSU5PUiA8IF9NSU5f Q0FQSV9NSU5PUjoKLS0gKiAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCi0tICogICAgICAgICAibGli bXB2IHZlcnNpb24gaXMgaW5jb3JyZWN0LiBSZXF1aXJlZCAlZC4lZCBnb3QgJWQuJWQuIiAlICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgICAgICAoX1JFUVVJUkVEX0NB UElfTUFKT1IsIF9NSU5fQ0FQSV9NSU5PUiwgX0NBUElfTUFKT1IsIF9DQVBJX01JTk9SKQotLSAq ICAgICApCi0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0Ci0rICogICAgIHJhaXNlIFR5cGVFcnJv cigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBw aWNrbGluZyIpCi0rICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUp OgotKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVk IHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0gICovCi0tICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdChfX3B5 eF9rcF9zX2xpYm1wdl92ZXJzaW9uX2lzX2luY29ycmVjdF9SZXF1LCBfX3B5eF90XzcpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NSwgX19weXhfTDFfZXJyb3IpCi0t ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83 KTsgX19weXhfdF83ID0gMDsKLSsgIF9fcHl4X3R1cGxlX18xNSA9IFB5VHVwbGVfUGFjaygxLCBf X3B5eF9rcF9zX3NlbGZfX2N0eF9jYW5ub3RfYmVfY29udmVydGVkX3RvKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90dXBsZV9fMTUpKSBfX1BZWF9FUlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCi0rICBf X1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzE1KTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVw bGVfXzE1KTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0Ci0t ICogCi0tICogaWYgX0NBUElfTUFKT1IgIT0gX1JFUVVJUkVEX0NBUElfTUFKT1Igb3IgX0NBUElf TUlOT1IgPCBfTUlOX0NBUElfTUlOT1I6Ci0tICogICAgIHJhaXNlIEltcG9ydEVycm9yKCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAibGlibXB2IHZlcnNpb24gaXMg aW5jb3JyZWN0LiBSZXF1aXJlZCAlZC4lZCBnb3QgJWQuJWQuIiAlCi0tICogICAgICAgICAgICAg KF9SRVFVSVJFRF9DQVBJX01BSk9SLCBfTUlOX0NBUElfTUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQ SV9NSU5PUikKLSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjIKLSsgKiBkZWYgX19yZWR1Y2VfY3l0 aG9uX18oc2VsZik6Ci0rICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBi ZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5 eF9zdGF0ZSk6Ci0rICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBj b252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCi0gICovCi0tICAgIF9f cHl4X3RfNyA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfYnVpbHRpbl9JbXBvcnRF cnJvciwgX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwg NDQsIF9fcHl4X0wxX2Vycm9yKQotLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLS0gICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tICAgIF9fUHl4X1JhaXNl KF9fcHl4X3RfNywgMCwgMCwgMCk7Ci0tICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5 eF90XzcgPSAwOwotLSAgICBfX1BZWF9FUlIoMCwgNDQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19w eXhfdHVwbGVfXzE2ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5v dF9iZV9jb252ZXJ0ZWRfdG8pOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xNikpIF9fUFlY X0VSUigxLCAyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9f MTYpOwotKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTYpOwotIAotLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMKLS0gKiBfQ0FQSV9NSU5PUiA9IF9DQVBJX1ZF UlNJT04gJiAweEZGRkYKLS0gKiAKLS0gKiBpZiBfQ0FQSV9NQUpPUiAhPSBfUkVRVUlSRURfQ0FQ SV9NQUpPUiBvciBfQ0FQSV9NSU5PUiA8IF9NSU5fQ0FQSV9NSU5PUjogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICByYWlzZSBJbXBvcnRFcnJvcigKLS0gKiAgICAgICAgICJs aWJtcHYgdmVyc2lvbiBpcyBpbmNvcnJlY3QuIFJlcXVpcmVkICVkLiVkIGdvdCAlZC4lZC4iICUK LSsgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKLSsgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxm Ll9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5n IikKLSsgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6Ci0rICog ICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQ eXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSAgKi8KLS0gIH0KLSsgIF9fcHl4X3R1cGxlX18xNyA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9r cF9zX3NlbGZfX2N0eF9jYW5ub3RfYmVfY29udmVydGVkX3RvKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90dXBsZV9fMTcpKSBfX1BZWF9FUlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9H T1RSRUYoX19weXhfdHVwbGVfXzE3KTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzE3 KTsKLSAKLSAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MgotLSAqICAgICB2 b2lkIFB5RXZhbF9Jbml0VGhyZWFkcygpCi0rICogICAgIHZvaWQgUHlfSW5pdGlhbGl6ZSgpCi0g ICogCi0gICogX2lzX3B5MyA9IHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0gICogX3N0cmRlY19lcnIgPSAic3Vycm9nYXRlZXNjYXBlIiBpZiBf aXNfcHkzIGVsc2UgInN0cmljdCIKLSAgKiAjIG1wdiAtPiBQeXRob24KLSAgKi8KLS0gIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5eF9uX3Nfc3lzKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNTIsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0tICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3RfNywgX19weXhfbl9zX3ZlcnNpb25faW5mbyk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDUyLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzYpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9 IDA7Ci0tICBfX3B5eF90XzcgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF90XzYsIF9fcHl4 X3R1cGxlX18yMSwgUHlfR0UpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfNyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDUyLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotLSAgaWYgKFB5RGljdF9TZXRJdGVt KF9fcHl4X2QsIF9fcHl4X25fc19pc19weTMsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwg NTIsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3Rf NyA9IDA7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTMKLS0gKiAK LS0gKiBfaXNfcHkzID0gc3lzLnZlcnNpb25faW5mbyA+PSAoMywpCi0tICogX3N0cmRlY19lcnIg PSAic3Vycm9nYXRlZXNjYXBlIiBpZiBfaXNfcHkzIGVsc2UgInN0cmljdCIgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICMgbXB2IC0+IFB5dGhvbgotLSAqIGRlZiBfc3RyZGVjKHMp OgotLSAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25f c19pc19weTMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA1MywgX19w eXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIF9fcHl4X3RfMyA9 IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoX19weXhfdF8z IDwgMCkpIF9fUFlYX0VSUigwLCA1MywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYo X19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0gIGlmIChfX3B5eF90XzMpIHsKLS0gICAgX19Q eXhfSU5DUkVGKF9fcHl4X25fc19zdXJyb2dhdGVlc2NhcGUpOwotLSAgICBfX3B5eF90XzcgPSBf X3B5eF9uX3Nfc3Vycm9nYXRlZXNjYXBlOwotLSAgfSBlbHNlIHsKLS0gICAgX19QeXhfSU5DUkVG KF9fcHl4X25fc19zdHJpY3QpOwotLSAgICBfX3B5eF90XzcgPSBfX3B5eF9uX3Nfc3RyaWN0Owot LSAgfQotLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19zdHJkZWNfZXJy LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDUzLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotKyAgX19weXhfdHVwbGVfXzE4 ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2ludF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBs ZV9fMTgpKSBfX1BZWF9FUlIoMCwgNTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVG KF9fcHl4X3R1cGxlX18xOCk7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18xOCk7Ci0g Ci0gICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTUKLSAgKiBfc3RyZGVjX2Vy ciA9ICJzdXJyb2dhdGVlc2NhcGUiIGlmIF9pc19weTMgZWxzZSAic3RyaWN0IgotQEAgLTI4NTY0 LDEwICsyNDY0NCwxMCBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7Ci0gICogICAgIHRyeToKLSAg KiAgICAgICAgIHJldHVybiBzLmRlY29kZSgidXRmLTgiLCBfc3RyZGVjX2VycikKLSAgKi8KLS0g IF9fcHl4X3RfNyA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xX3N0cmRlYywgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlm ICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDU1LCBfX3B5eF9MMV9lcnJvcikK LS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4 X2QsIF9fcHl4X25fc19zdHJkZWMsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNTUsIF9f cHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7 Ci0rICBfX3B5eF90dXBsZV9fMTkgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3MpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3R1cGxlX18xOSkpIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFfZXJy b3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzE5KTsKLSsgIF9fUHl4X0dJVkVSRUYo X19weXhfdHVwbGVfXzE5KTsKLSsgIF9fcHl4X2NvZGVvYmpfXzIwID0gKFB5T2JqZWN0KilfX1B5 eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4 X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X3R1cGxlX18xOSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9r cF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19zdHJkZWMsIDU1LCBf X3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMjApKSBfX1BZ WF9FUlIoMCwgNTUsIF9fcHl4X0wxX2Vycm9yKQotIAotICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjYzCi0gICogCi1AQCAtMjg1NzYsNTA0MCArMjQ2NTYsNTU1NSBAQCBpZiAo IV9fUHl4X1JlZk5hbm55KSB7Ci0gICogICAgIHRyeToKLSAgKiAgICAgICAgIHJldHVybiBzLmVu Y29kZSgidXRmLTgiLCBfc3RyZGVjX2VycikKLSAgKi8KLS0gIF9fcHl4X3RfNyA9IFB5Q0Z1bmN0 aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8zX3N0cmVuYywgTlVM TCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlmICh1bmxpa2VseSghX19weXhfdF83 KSkgX19QWVhfRVJSKDAsIDYzLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzcpOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19zdHJlbmMs IF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNjMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19Q eXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0rICBfX3B5eF90dXBsZV9fMjEg PSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxl X18yMSkpIF9fUFlYX0VSUigwLCA2MywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYo X19weXhfdHVwbGVfXzIxKTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzIxKTsKLSsg IF9fcHl4X2NvZGVvYmpfXzIyID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEs IDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18yMSwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5 bXB2X21wdl9weXgsIF9fcHl4X25fc19zdHJlbmMsIDYzLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlm ICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMjIpKSBfX1BZWF9FUlIoMCwgNjMsIF9fcHl4X0wx X2Vycm9yKQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwCi0tICog ICAgICAgICByZXR1cm4gcwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMx OAotICAqIAotLSAqIFB5RXZhbF9Jbml0VGhyZWFkcygpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSAgKiAKLS0gKiBjbGFzcyBFcnJvcnM6Ci0rICogZGVmIF9lcnJvcnMoZm4pOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KToK LSsgKiAgICAgICAgIHYgPSBmbigqaywgKiprdykKLSAgKi8KLS0gIFB5RXZhbF9Jbml0VGhyZWFk cygpOwotKyAgX19weXhfdHVwbGVfXzIzID0gUHlUdXBsZV9QYWNrKDMsIF9fcHl4X25fc19mbiwg X19weXhfbl9zX3dyYXBwZWQsIF9fcHl4X25fc193cmFwcGVkKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90dXBsZV9fMjMpKSBfX1BZWF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4 X0dPVFJFRihfX3B5eF90dXBsZV9fMjMpOwotKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9f MjMpOwotKyAgX19weXhfY29kZW9ial9fMjQgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXco MSwgMCwgMywgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMs IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzIzLCBf X3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVy X2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX2Vycm9ycywgMzE4LCBfX3B5eF9lbXB0eV9i eXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMjQpKSBfX1BZWF9FUlIoMCwgMzE4 LCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3MgotLSAqIFB5RXZhbF9Jbml0VGhyZWFkcygpCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MzI5Ci0rICogICAgIGNvZGUgPSBOb25lCi0gICogCi0tICogY2xhc3MgRXJy b3JzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICIiIlNldCBvZiBrbm93 biBlcnJvciBjb2RlcyBmcm9tIE1wdkVycm9yIGFuZCBFdmVudCByZXNwb25zZXMuCi0rICogICAg IGRlZiBfX2luaXRfXyhzZWxmLCBlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgc2VsZi5jb2RlID0gZQotKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJf YwotKyAqLwotKyAgX19weXhfdHVwbGVfXzI1ID0gUHlUdXBsZV9QYWNrKDQsIF9fcHl4X25fc19z ZWxmLCBfX3B5eF9uX3NfZSwgX19weXhfbl9zX2Vycl9jLCBfX3B5eF9uX3NfZV9pKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90dXBsZV9fMjUpKSBfX1BZWF9FUlIoMCwgMzI5LCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMjUpOwotKyAgX19QeXhfR0lWRVJFRihf X3B5eF90dXBsZV9fMjUpOwotKyAgX19weXhfY29kZW9ial9fMjYgPSAoUHlPYmplY3QqKV9fUHl4 X1B5Q29kZV9OZXcoMiwgMCwgNCwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhf ZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhf dHVwbGVfXzI1LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2tw X3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX2luaXQsIDMyOSwgX19w eXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzI2KSkgX19QWVhf RVJSKDAsIDMyOSwgX19weXhfTDFfZXJyb3IpCi0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MzQ2Ci0rICogY2RlZiBfcmVwbHlfdXNlcmRhdGFzID0gZGljdCgpCi0gICog Ci0rICogY2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6Ci0rICogICAgICAgICBz ZWxmLmNvdW50ZXIgPSAwCi0gICovCi0tICBfX3B5eF90XzcgPSBfX1B5eF9QeTNNZXRhY2xhc3NQ cmVwYXJlKChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfbl9zX0Vy cm9ycywgX19weXhfbl9zX0Vycm9ycywgKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X25fc192aWRj dXR0ZXJfbGlic19tcHYsIF9fcHl4X2twX3NfU2V0X29mX2tub3duX2Vycm9yX2NvZGVzX2Zyb21f TXApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA3MiwgX19weXhfTDFf ZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSsgIF9fcHl4X3R1cGxlX18yNyA9 IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9idWlsdGluX29iamVjdCk7IGlmICh1bmxpa2VseSghX19w eXhfdHVwbGVfXzI3KSkgX19QWVhfRVJSKDAsIDM0NiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5 eF9HT1RSRUYoX19weXhfdHVwbGVfXzI3KTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVf XzI3KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OQotLSAqICAg ICBZb3Ugc2hvdWxkIGhhbmRsZSB0aGUgcG9zc2liaWxpdHkgdGhhdCBlcnJvciBjb2RlcyBtYXkg bm90IGJlIGFueSBvZiB0aGVzZSB2YWx1ZXMuCi0tICogICAgICIiIgotLSAqICAgICBzdWNjZXNz ID0gTVBWX0VSUk9SX1NVQ0NFU1MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICBxdWV1ZV9mdWxsID0gTVBWX0VSUk9SX0VWRU5UX1FVRVVFX0ZVTEwKLS0gKiAgICAgbm9tZW0g PSBNUFZfRVJST1JfTk9NRU0KLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz NDcKLSsgKiAKLSsgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOgotKyAqICAgICBkZWYg X19pbml0X18oc2VsZiwgZGF0YSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAg ICAgICAgIHNlbGYuY291bnRlciA9IDAKLSsgKiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKLSAg Ki8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9F UlJPUl9TVUNDRVNTKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNzks IF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19Q eXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc3VjY2VzcywgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCA3OSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYo X19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSsgIF9fcHl4X3R1cGxlX18yOCA9IFB5VHVwbGVf UGFjaygyLCBfX3B5eF9uX3Nfc2VsZiwgX19weXhfbl9zX2RhdGEpOyBpZiAodW5saWtlbHkoIV9f cHl4X3R1cGxlX18yOCkpIF9fUFlYX0VSUigwLCAzNDcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19Q eXhfR09UUkVGKF9fcHl4X3R1cGxlX18yOCk7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxl X18yOCk7Ci0rICBfX3B5eF9jb2Rlb2JqX18yOSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05l dygyLCAwLCAyLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRl cywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMjgs IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0 ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfaW5pdCwgMzQ3LCBfX3B5eF9lbXB0eV9i eXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMjkpKSBfX1BZWF9FUlIoMCwgMzQ3 LCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo4MAotLSAqICAgICAiIiIKLS0gKiAgICAgc3VjY2VzcyA9IE1QVl9FUlJPUl9TVUNDRVNTCi0t ICogICAgIHF1ZXVlX2Z1bGwgPSBNUFZfRVJST1JfRVZFTlRfUVVFVUVfRlVMTCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIG5vbWVtID0gTVBWX0VSUk9SX05PTUVNCi0tICog ICAgIHVuaW5pdGlhbGl6ZWQgPSBNUFZfRVJST1JfVU5JTklUSUFMSVpFRAotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1MgotKyAqICAgICAgICAgc2VsZi5vYnNlcnZlZCA9 IEZhbHNlCi0rICogCi0rICogICAgIGRlZiBhZGQoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYuY291bnRlciArPSAxCi0rICogCi0gICovCi0tICBf X3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfRVZF TlRfUVVFVUVfRlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgw LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3F1ZXVlX2Z1bGwsIF9fcHl4 X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODAsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICBfX3B5eF90dXBsZV9fMzAgPSBQeVR1 cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18z MCkpIF9fUFlYX0VSUigwLCAzNTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9f cHl4X3R1cGxlX18zMCk7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18zMCk7Ci0rICBf X3B5eF9jb2Rlb2JqX18zMSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAw LCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMzAsIF9fcHl4X2VtcHR5 X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1w dl9tcHZfcHl4LCBfX3B5eF9uX3NfYWRkLCAzNTIsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18zMSkpIF9fUFlYX0VSUigwLCAzNTIsIF9fcHl4X0wxX2Vy cm9yKQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxCi0tICogICAg IHN1Y2Nlc3MgPSBNUFZfRVJST1JfU1VDQ0VTUwotLSAqICAgICBxdWV1ZV9mdWxsID0gTVBWX0VS Uk9SX0VWRU5UX1FVRVVFX0ZVTEwKLS0gKiAgICAgbm9tZW0gPSBNUFZfRVJST1JfTk9NRU0gICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICB1bmluaXRpYWxpemVkID0gTVBWX0VS Uk9SX1VOSU5JVElBTElaRUQKLS0gKiAgICAgaW52YWxpZF9wYXJhbWV0ZXIgPSBNUFZfRVJST1Jf SU5WQUxJRF9QQVJBTUVURVIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz NTUKLSsgKiAgICAgICAgIHNlbGYuY291bnRlciArPSAxCi0rICogCi0rICogICAgIGRlZiByZW1v dmUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYu Y291bnRlciAtPSAxCi0rICogCi0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9t X2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfTk9NRU0pOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NikpIF9fUFlYX0VSUigwLCA4MSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25f c19ub21lbSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4MSwgX19weXhfTDFfZXJyb3Ip Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSsgIF9fcHl4X3R1 cGxlX18zMiA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nfc2VsZik7IGlmICh1bmxpa2VseSgh X19weXhfdHVwbGVfXzMyKSkgX19QWVhfRVJSKDAsIDM1NSwgX19weXhfTDFfZXJyb3IpCi0rICBf X1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzMyKTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVw bGVfXzMyKTsKLSsgIF9fcHl4X2NvZGVvYmpfXzMzID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVf TmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5 dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18z MiwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1 dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19yZW1vdmUsIDM1NSwgX19weXhfZW1w dHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzMzKSkgX19QWVhfRVJSKDAs IDM1NSwgX19weXhfTDFfZXJyb3IpCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6ODIKLS0gKiAgICAgcXVldWVfZnVsbCA9IE1QVl9FUlJPUl9FVkVOVF9RVUVVRV9GVUxM Ci0tICogICAgIG5vbWVtID0gTVBWX0VSUk9SX05PTUVNCi0tICogICAgIHVuaW5pdGlhbGl6ZWQg PSBNUFZfRVJST1JfVU5JTklUSUFMSVpFRCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0t ICogICAgIGludmFsaWRfcGFyYW1ldGVyID0gTVBWX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSCi0t ICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9PUFRJT05fTk9UX0ZPVU5ECi0rICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMwotKyAqIAotKyAqIGNsYXNzIENhbGxiYWNr VGhyZWFkKFRocmVhZCk6Ci0rICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0rICog ICAgICAgICBzZWxmLmRhZW1vbiA9IFRydWUKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9VTklOSVRJQUxJWkVEKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODIsIF9fcHl4X0wxX2Vycm9yKQotLSAg X19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19w eXhfdF83LCBfX3B5eF9uX3NfdW5pbml0aWFsaXplZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VS UigwLCA4MiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19w eXhfdF82ID0gMDsKLSsgIF9fcHl4X3R1cGxlX18zNCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9u X3Nfc2VsZik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzM0KSkgX19QWVhfRVJSKDAsIDEx MzMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18zNCk7Ci0r ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18zNCk7Ci0rICBfX3B5eF9jb2Rlb2JqX18zNSA9 IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8Q09f TkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMzQsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9u X3NfaW5pdCwgMTEzMywgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2Nv ZGVvYmpfXzM1KSkgX19QWVhfRVJSKDAsIDExMzMsIF9fcHl4X0wxX2Vycm9yKQotIAotLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgzCi0tICogICAgIG5vbWVtID0gTVBWX0VS Uk9SX05PTUVNCi0tICogICAgIHVuaW5pdGlhbGl6ZWQgPSBNUFZfRVJST1JfVU5JTklUSUFMSVpF RAotLSAqICAgICBpbnZhbGlkX3BhcmFtZXRlciA9IE1QVl9FUlJPUl9JTlZBTElEX1BBUkFNRVRF UiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIG5vdF9mb3VuZCA9IE1QVl9F UlJPUl9PUFRJT05fTk9UX0ZPVU5ECi0tICogICAgIG9wdGlvbl9mb3JtYXQgPSBNUFZfRVJST1Jf T1BUSU9OX0ZPUk1BVAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDEK LSsgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IEZhbHNlCi0rICogCi0rICogICAgIGRlZiBz aHV0ZG93bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg c2VsZi5pc3NodXRkb3duID0gVHJ1ZQotKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUK LSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1Q Vl9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDgzLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2ludmFs aWRfcGFyYW1ldGVyLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDgzLCBfX3B5eF9MMV9l cnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotKyAgX19w eXhfdHVwbGVfXzM2ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90dXBsZV9fMzYpKSBfX1BZWF9FUlIoMCwgMTE0MSwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzM2KTsKLSsgIF9fUHl4X0dJVkVSRUYoX19w eXhfdHVwbGVfXzM2KTsKLSsgIF9fcHl4X2NvZGVvYmpfXzM3ID0gKFB5T2JqZWN0KilfX1B5eF9Q eUNvZGVfTmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2Vt cHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1 cGxlX18zNiwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9z X3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19zaHV0ZG93biwgMTE0MSwg X19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzM3KSkgX19Q WVhfRVJSKDAsIDExNDEsIF9fcHl4X0wxX2Vycm9yKQotIAotLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjg0Ci0tICogICAgIHVuaW5pdGlhbGl6ZWQgPSBNUFZfRVJST1JfVU5J TklUSUFMSVpFRAotLSAqICAgICBpbnZhbGlkX3BhcmFtZXRlciA9IE1QVl9FUlJPUl9JTlZBTElE X1BBUkFNRVRFUgotLSAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VO RCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIG9wdGlvbl9mb3JtYXQgPSBN UFZfRVJST1JfT1BUSU9OX0ZPUk1BVAotLSAqICAgICBvcHRpb25fZXJyb3IgPSBNUFZfRVJST1Jf T1BUSU9OX0VSUk9SCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0Ngot KyAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQotKyAqIAotKyAqICAgICBkZWYgY2FsbChz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5sb2Nr LnJlbGVhc2UoKQotKyAqIAotKyAqLwotKyAgX19weXhfdHVwbGVfXzM4ID0gUHlUdXBsZV9QYWNr KDEsIF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMzgpKSBfX1BZ WF9FUlIoMCwgMTE0NiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdHVw bGVfXzM4KTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzM4KTsKLSsgIF9fcHl4X2Nv ZGVvYmpfXzM5ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAsIENPX09Q VElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18zOCwgX19weXhfZW1wdHlfdHVwbGUs IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9w eXgsIF9fcHl4X25fc19jYWxsLCAxMTQ2LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2Vs eSghX19weXhfY29kZW9ial9fMzkpKSBfX1BZWF9FUlIoMCwgMTE0NiwgX19weXhfTDFfZXJyb3Ip Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0OQotKyAqICAgICAg ICAgc2VsZi5sb2NrLnJlbGVhc2UoKQotKyAqIAotKyAqICAgICBkZWYgc2V0KHNlbGYsIGNhbGxi YWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5jYWxs YmFjayA9IGNhbGxiYWNrCi0rICogCi0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9G cm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORCk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg0LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNywgX19weXhfbl9zX25vdF9mb3VuZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4 NCwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKLSsgIF9fcHl4X3R1cGxlX180MCA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3Nfc2Vs ZiwgX19weXhfbl9zX2NhbGxiYWNrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNDApKSBf X1BZWF9FUlIoMCwgMTE0OSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhf dHVwbGVfXzQwKTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzQwKTsKLSsgIF9fcHl4 X2NvZGVvYmpfXzQxID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDIsIDAsIDIsIDAsIENP X09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX180MCwgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21w dl9weXgsIF9fcHl4X25fc19zZXQsIDExNDksIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF9jb2Rlb2JqX180MSkpIF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9MMV9lcnJv cikKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NQotLSAqICAgICBp bnZhbGlkX3BhcmFtZXRlciA9IE1QVl9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUgotLSAqICAgICBu b3RfZm91bmQgPSBNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORAotLSAqICAgICBvcHRpb25fZm9y bWF0ID0gTVBWX0VSUk9SX09QVElPTl9GT1JNQVQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICBvcHRpb25fZXJyb3IgPSBNUFZfRVJST1JfT1BUSU9OX0VSUk9SCi0tICogICAg IG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9OT1RfRk9VTkQKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTUyCi0rICogICAgICAgICBzZWxmLmNhbGxiYWNrID0g Y2FsbGJhY2sKLSsgKiAKLSsgKiAgICAgZGVmIHJ1bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAqICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNzaHV0ZG93bjoKLSsgKiAg ICAgICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQotICAqLwotLSAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX09QVElPTl9GT1JNQVQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4NSwgX19weXhfTDFfZXJy b3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5D bGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19vcHRpb25fZm9ybWF0LCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDg1LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSAwOwotKyAgX19weXhfdHVwbGVfXzQyID0gUHlUdXBsZV9QYWNrKDEs IF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNDIpKSBfX1BZWF9F UlIoMCwgMTE1MiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVf XzQyKTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzQyKTsKLSsgIF9fcHl4X2NvZGVv YmpfXzQzID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAsIENPX09QVElN SVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwg X19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX180MiwgX19weXhfZW1wdHlfdHVwbGUsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgs IF9fcHl4X25fc19ydW4sIDExNTIsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFf X3B5eF9jb2Rlb2JqX180MykpIF9fUFlYX0VSUigwLCAxMTUyLCBfX3B5eF9MMV9lcnJvcikKLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NgotLSAqICAgICBub3RfZm91 bmQgPSBNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORAotLSAqICAgICBvcHRpb25fZm9ybWF0ID0g TVBWX0VSUk9SX09QVElPTl9GT1JNQVQKLS0gKiAgICAgb3B0aW9uX2Vycm9yID0gTVBWX0VSUk9S X09QVElPTl9FUlJPUiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIG5vdF9m b3VuZCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9OT1RfRk9VTkQKLS0gKiAgICAgcHJvcGVydHlfZm9y bWF0ID0gTVBWX0VSUk9SX1BST1BFUlRZX0ZPUk1BVAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExNTcKLSsgKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxm LmNhbGxiYWNrKSBpZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9uZQotKyAqIAotKyAqICAgICBkZWYg bXB2X2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAqICAgICAgICAgdHJ5OgotKyAqICAgICAgICAgICAgIGNhbGxiYWNrKCkKLSAgKi8KLS0g IF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9P UFRJT05fRVJST1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4Niwg X19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19vcHRpb25fZXJyb3IsIF9fcHl4 X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODYsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICBfX3B5eF90dXBsZV9fNDQgPSBQeVR1 cGxlX1BhY2soMywgX19weXhfbl9zX3NlbGYsIF9fcHl4X25fc19jYWxsYmFjaywgX19weXhfbl9z X2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX180NCkpIF9fUFlYX0VSUigwLCAxMTU3LCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNDQpOwotKyAgX19Q eXhfR0lWRVJFRihfX3B5eF90dXBsZV9fNDQpOwotKyAgX19weXhfY29kZW9ial9fNDUgPSAoUHlP YmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgMywgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xP Q0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfdHVwbGVfXzQ0LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX21w dl9jYWxsYmFjaywgMTE1NywgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4 X2NvZGVvYmpfXzQ1KSkgX19QWVhfRVJSKDAsIDExNTcsIF9fcHl4X0wxX2Vycm9yKQotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg3Ci0tICogICAgIG9wdGlvbl9mb3Jt YXQgPSBNUFZfRVJST1JfT1BUSU9OX0ZPUk1BVAotLSAqICAgICBvcHRpb25fZXJyb3IgPSBNUFZf RVJST1JfT1BUSU9OX0VSUk9SCi0tICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9QUk9QRVJU WV9OT1RfRk9VTkQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBwcm9wZXJ0 eV9mb3JtYXQgPSBNUFZfRVJST1JfUFJPUEVSVFlfRk9STUFUCi0tICogICAgIHByb3BlcnR5X3Vu YXZhaWxhYmxlID0gTVBWX0VSUk9SX1BST1BFUlRZX1VOQVZBSUxBQkxFCi0rICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxCi0rICogZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQoX19w eXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCi0r ICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAotICAqLwotLSAgX19weXhfdF82ID0gX19Q eXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1BST1BFUlRZX05PVF9GT1VO RCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg3LCBfX3B5eF9MMV9l cnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX25vdF9mb3VuZCwgX19weXhfdF82KSA8IDApIF9f UFlYX0VSUigwLCA4NywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKLSsgIF9fcHl4X3R1cGxlX180NiA9IFB5VHVwbGVfUGFjayg1LCBf X3B5eF9uX3NfcHl4X3R5cGUsIF9fcHl4X25fc19weXhfY2hlY2tzdW0sIF9fcHl4X25fc19weXhf c3RhdGUsIF9fcHl4X25fc19weXhfUGlja2xlRXJyb3IsIF9fcHl4X25fc19weXhfcmVzdWx0KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNDYpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFf ZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzQ2KTsKLSsgIF9fUHl4X0dJVkVS RUYoX19weXhfdHVwbGVfXzQ2KTsKLSsgIF9fcHl4X2NvZGVvYmpfXzQ3ID0gKFB5T2JqZWN0Kilf X1B5eF9QeUNvZGVfTmV3KDMsIDAsIDUsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9f cHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9f cHl4X3R1cGxlX180NiwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9rcF9zX3N0cmluZ3NvdXJjZSwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFj aGVkLCAxLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9f NDcpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90dXBsZV9fNDgg PSBQeVR1cGxlX1BhY2soNSwgX19weXhfbl9zX3B5eF90eXBlLCBfX3B5eF9uX3NfcHl4X2NoZWNr c3VtLCBfX3B5eF9uX3NfcHl4X3N0YXRlLCBfX3B5eF9uX3NfcHl4X1BpY2tsZUVycm9yLCBfX3B5 eF9uX3NfcHl4X3Jlc3VsdCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzQ4KSkgX19QWVhf RVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX180 OCk7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX180OCk7Ci0rICBfX3B5eF9jb2Rlb2Jq X180OSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygzLCAwLCA1LCAwLCBDT19PUFRJTUla RUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDgsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc19zdHJpbmdzb3VyY2UsIF9fcHl4X25fc19weXhfdW5w aWNrbGVfTG9nTWVzc2FnZSwgMSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9f cHl4X2NvZGVvYmpfXzQ5KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19w eXhfdHVwbGVfXzUwID0gUHlUdXBsZV9QYWNrKDUsIF9fcHl4X25fc19weXhfdHlwZSwgX19weXhf bl9zX3B5eF9jaGVja3N1bSwgX19weXhfbl9zX3B5eF9zdGF0ZSwgX19weXhfbl9zX3B5eF9QaWNr bGVFcnJvciwgX19weXhfbl9zX3B5eF9yZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxl X181MCkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihf X3B5eF90dXBsZV9fNTApOwotKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fNTApOwotKyAg X19weXhfY29kZW9ial9fNTEgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMywgMCwgNSwg MCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzUwLCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3Nfc3RyaW5nc291cmNlLCBfX3B5 eF9uX3NfcHl4X3VucGlja2xlX1Byb3BlcnR5LCAxLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1 bmxpa2VseSghX19weXhfY29kZW9ial9fNTEpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJy b3IpCi0rICBfX3B5eF90dXBsZV9fNTIgPSBQeVR1cGxlX1BhY2soNSwgX19weXhfbl9zX3B5eF90 eXBlLCBfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCBfX3B5eF9uX3NfcHl4X3N0YXRlLCBfX3B5eF9u X3NfcHl4X1BpY2tsZUVycm9yLCBfX3B5eF9uX3NfcHl4X3Jlc3VsdCk7IGlmICh1bmxpa2VseSgh X19weXhfdHVwbGVfXzUyKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19Q eXhfR09UUkVGKF9fcHl4X3R1cGxlX181Mik7Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxl X181Mik7Ci0rICBfX3B5eF9jb2Rlb2JqX181MyA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05l dygzLCAwLCA1LCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRl cywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNTIs IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc19zdHJpbmdz b3VyY2UsIF9fcHl4X25fc19weXhfdW5waWNrbGVfRXZlbnQsIDEsIF9fcHl4X2VtcHR5X2J5dGVz KTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX181MykpIF9fUFlYX0VSUigxLCAxLCBfX3B5 eF9MMV9lcnJvcikKLSsgIF9fcHl4X3R1cGxlX181NCA9IFB5VHVwbGVfUGFjayg1LCBfX3B5eF9u X3NfcHl4X3R5cGUsIF9fcHl4X25fc19weXhfY2hlY2tzdW0sIF9fcHl4X25fc19weXhfc3RhdGUs IF9fcHl4X25fc19weXhfUGlja2xlRXJyb3IsIF9fcHl4X25fc19weXhfcmVzdWx0KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90dXBsZV9fNTQpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzU0KTsKLSsgIF9fUHl4X0dJVkVSRUYoX19w eXhfdHVwbGVfXzU0KTsKLSsgIF9fcHl4X2NvZGVvYmpfXzU1ID0gKFB5T2JqZWN0KilfX1B5eF9Q eUNvZGVfTmV3KDMsIDAsIDUsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2Vt cHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1 cGxlX181NCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9z X3N0cmluZ3NvdXJjZSwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8sIDEs IF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX181NSkpIF9f UFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOwotKyAgcmV0dXJuIDA7Ci0rICBfX3B5eF9MMV9lcnJvcjo7Ci0rICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiAtMTsKLSt9Ci0rCi0rc3RhdGljIENZVEhP Tl9TTUFMTF9DT0RFIGludCBfX1B5eF9Jbml0R2xvYmFscyh2b2lkKSB7Ci0rICBpZiAoX19QeXhf SW5pdFN0cmluZ3MoX19weXhfc3RyaW5nX3RhYikgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhf TDFfZXJyb3IpOwotKyAgX19weXhfaW50XzAgPSBQeUludF9Gcm9tTG9uZygwKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF9pbnRfMCkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f cHl4X2ludF8xID0gUHlJbnRfRnJvbUxvbmcoMSk7IGlmICh1bmxpa2VseSghX19weXhfaW50XzEp KSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF9pbnRfMiA9IFB5SW50 X0Zyb21Mb25nKDIpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8yKSkgX19QWVhfRVJSKDAsIDEs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfaW50XzMgPSBQeUludF9Gcm9tTG9uZygzKTsgaWYg KHVubGlrZWx5KCFfX3B5eF9pbnRfMykpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikK LSsgIF9fcHl4X2ludF8zMiA9IFB5SW50X0Zyb21Mb25nKDMyKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF9pbnRfMzIpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF9pbnRf NTcxMzE2OSA9IFB5SW50X0Zyb21Mb25nKDU3MTMxNjlMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9p bnRfNTcxMzE2OSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X2lu dF85MDk1ODI2MiA9IFB5SW50X0Zyb21Mb25nKDkwOTU4MjYyTCk7IGlmICh1bmxpa2VseSghX19w eXhfaW50XzkwOTU4MjYyKSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19w eXhfaW50XzE0MjAzNjkxMCA9IFB5SW50X0Zyb21Mb25nKDE0MjAzNjkxMEwpOyBpZiAodW5saWtl bHkoIV9fcHl4X2ludF8xNDIwMzY5MTApKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX3B5eF9pbnRfMjIyNDE5MTQ5ID0gUHlJbnRfRnJvbUxvbmcoMjIyNDE5MTQ5TCk7IGlm ICh1bmxpa2VseSghX19weXhfaW50XzIyMjQxOTE0OSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fcHl4X2ludF8yMjg4MjIwNTMgPSBQeUludF9Gcm9tTG9uZygyMjg4MjIw NTNMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfMjI4ODIyMDUzKSkgX19QWVhfRVJSKDAsIDEs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfaW50X25lZ18xID0gUHlJbnRfRnJvbUxvbmcoLTEp OyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF9uZWdfMSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9M MV9lcnJvcikKLSsgIHJldHVybiAwOwotKyAgX19weXhfTDFfZXJyb3I6OwotKyAgcmV0dXJuIC0x OwotK30KLSsKLStzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X21vZGluaXRfZ2xv YmFsX2luaXRfY29kZSh2b2lkKTsgLypwcm90byovCi0rc3RhdGljIENZVEhPTl9TTUFMTF9DT0RF IGludCBfX1B5eF9tb2Rpbml0X3ZhcmlhYmxlX2V4cG9ydF9jb2RlKHZvaWQpOyAvKnByb3RvKi8K LStzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X21vZGluaXRfZnVuY3Rpb25fZXhw b3J0X2NvZGUodm9pZCk7IC8qcHJvdG8qLwotK3N0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQg X19QeXhfbW9kaW5pdF90eXBlX2luaXRfY29kZSh2b2lkKTsgLypwcm90byovCi0rc3RhdGljIENZ VEhPTl9TTUFMTF9DT0RFIGludCBfX1B5eF9tb2Rpbml0X3R5cGVfaW1wb3J0X2NvZGUodm9pZCk7 IC8qcHJvdG8qLwotK3N0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfbW9kaW5pdF92 YXJpYWJsZV9pbXBvcnRfY29kZSh2b2lkKTsgLypwcm90byovCi0rc3RhdGljIENZVEhPTl9TTUFM TF9DT0RFIGludCBfX1B5eF9tb2Rpbml0X2Z1bmN0aW9uX2ltcG9ydF9jb2RlKHZvaWQpOyAvKnBy b3RvKi8KLSsKLStzdGF0aWMgaW50IF9fUHl4X21vZGluaXRfZ2xvYmFsX2luaXRfY29kZSh2b2lk KSB7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fUHl4X21vZGluaXRfZ2xvYmFsX2luaXRfY29kZSIsIDApOwotKyAgLyotLS0g R2xvYmFsIGluaXQgY29kZSAtLS0qLwotKyAgX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X2NhbGxiYWNrcyA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKLSsgIF9fcHl4X3ZfOXZp ZGN1dHRlcl80bGlic18zbXB2X19yZXBseV91c2VyZGF0YXMgPSBQeV9Ob25lOyBQeV9JTkNSRUYo UHlfTm9uZSk7Ci0rICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiAw OwotK30KLSsKLStzdGF0aWMgaW50IF9fUHl4X21vZGluaXRfdmFyaWFibGVfZXhwb3J0X2NvZGUo dm9pZCkgewotKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX1B5eF9tb2Rpbml0X3ZhcmlhYmxlX2V4cG9ydF9jb2RlIiwgMCk7Ci0r ICAvKi0tLSBWYXJpYWJsZSBleHBvcnQgY29kZSAtLS0qLwotKyAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7Ci0rICByZXR1cm4gMDsKLSt9Ci0rCi0rc3RhdGljIGludCBfX1B5eF9tb2Rp bml0X2Z1bmN0aW9uX2V4cG9ydF9jb2RlKHZvaWQpIHsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFy YXRpb25zCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19QeXhfbW9kaW5pdF9mdW5j dGlvbl9leHBvcnRfY29kZSIsIDApOwotKyAgLyotLS0gRnVuY3Rpb24gZXhwb3J0IGNvZGUgLS0t Ki8KLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIDA7Ci0rfQot KwotK3N0YXRpYyBpbnQgX19QeXhfbW9kaW5pdF90eXBlX2luaXRfY29kZSh2b2lkKSB7Ci0rICBf X1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7Ci0rICBj b25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0rICBpbnQgX19weXhfY2xpbmVubyA9 IDA7Ci0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19QeXhfbW9kaW5pdF90eXBlX2lu aXRfY29kZSIsIDApOwotKyAgLyotLS0gVHlwZSBpbml0IGNvZGUgLS0tKi8KLSsgIF9fcHl4X3Z0 YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgPSAmX19weXhfdnRh YmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkOwotKyAgX19weXhfdnRh YmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLl9pbml0ID0gKFB5T2Jq ZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxl UmVhY2hlZCAqLCBzdHJ1Y3QgbXB2X2V2ZW50X2VuZF9maWxlICopKV9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9faW5pdDsKLSsgIGlmIChQeVR5cGVfUmVh ZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwg MCkgX19QWVhfRVJSKDAsIDE1NiwgX19weXhfTDFfZXJyb3IpCi0rICAjaWYgUFlfVkVSU0lPTl9I RVggPCAweDAzMDgwMEIxCi0rICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRP ZkZpbGVSZWFjaGVkLnRwX3ByaW50ID0gMDsKLSsgICNlbmRpZgotKyAgaWYgKChDWVRIT05fVVNF X1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQudHBfZGljdG9mZnNl dCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLnRw X2dldGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgewotKyAgICBfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLnRwX2dldGF0dHJvID0gX19Q eXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7Ci0rICB9Ci0rICBpZiAoX19QeXhfU2V0VnRhYmxl KF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQudHBfZGlj dCwgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCkg PCAwKSBfX1BZWF9FUlIoMCwgMTU2LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChQeU9iamVjdF9T ZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19FbmRPZkZpbGVSZWFjaGVkLCAoUHlPYmplY3QgKikm X19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCkgPCAwKSBf X1BZWF9FUlIoMCwgMTU2LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9zZXR1cF9yZWR1 Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxl UmVhY2hlZCkgPCAwKSBfX1BZWF9FUlIoMCwgMTU2LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkID0gJl9fcHl4X3R5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQ7Ci0rICBfX3B5eF92dGFi cHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlID0gJl9fcHl4X3Z0YWJsZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZTsKLSsgIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZS5faW5pdCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKiwgc3RydWN0IG1wdl9ldmVu dF9sb2dfbWVzc2FnZSAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfX2luaXQ7Ci0rICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Mb2dNZXNzYWdlKSA8IDApIF9fUFlYX0VSUigwLCAxODIsIF9fcHl4X0wxX2Vycm9y KQotKyAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQotKyAgX19weXhfdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZS50cF9wcmludCA9IDA7Ci0rICAjZW5kaWYKLSsg IGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkg JiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLnRw X2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2Fn ZS50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKLSsgICAgX19weXhf dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZS50cF9nZXRhdHRybyA9IF9fUHl4 X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOwotKyAgfQotKyAgaWYgKF9fUHl4X1NldFZ0YWJsZShf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLnRwX2RpY3QsIF9fcHl4 X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UpIDwgMCkgX19QWVhfRVJS KDAsIDE4MiwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9t LCBfX3B5eF9uX3NfTG9nTWVzc2FnZSwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0xvZ01lc3NhZ2UpIDwgMCkgX19QWVhfRVJSKDAsIDE4MiwgX19weXhfTDFf ZXJyb3IpCi0rICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UpIDwgMCkgX19QWVhfRVJSKDAsIDE4Miwg X19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9n TWVzc2FnZSA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlOwot KyAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgPSAmX19weXhf dnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eTsKLSsgIF9fcHl4X3Z0YWJsZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkuX2luaXQgPSAoUHlPYmplY3QgKigqKShzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqLCBzdHJ1Y3QgbXB2 X2V2ZW50X3Byb3BlcnR5ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0 eV9faW5pdDsKLSsgIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X1Byb3BlcnR5KSA8IDApIF9fUFlYX0VSUigwLCAyNDMsIF9fcHl4X0wxX2Vycm9yKQot KyAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQotKyAgX19weXhfdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfcHJpbnQgPSAwOwotKyAgI2VuZGlmCi0rICBpZiAo KENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYmIGxp a2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZGljdG9m ZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eS50cF9nZXRh dHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKLSsgICAgX19weXhfdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9H ZW5lcmljR2V0QXR0cjsKLSsgIH0KLSsgIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpIDwgMCkgX19QWVhfRVJSKDAsIDI0MywgX19weXhf TDFfZXJyb3IpCi0rICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfUHJv cGVydHksIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eSkgPCAwKSBfX1BZWF9FUlIoMCwgMjQzLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5 eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUHJvcGVydHkpIDwgMCkgX19QWVhfRVJSKDAsIDI0MywgX19weXhfTDFfZXJyb3IpCi0rICBf X3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgPSAmX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHk7Ci0rICBfX3B5eF92dGFicHRyXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FdmVudCA9ICZfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50OwotKyAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC5fZGF0 YSA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50ICosIHN0cnVjdCBtcHZfZXZlbnQgKikpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50X19kYXRhOwotKyAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudC5faW5pdCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0V2ZW50ICosIHN0cnVjdCBtcHZfZXZlbnQgKiwgUHlPYmplY3QgKikpX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19pbml0OwotKyAgaWYgKFB5VHlwZV9SZWFk eSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpIDwgMCkgX19QWVhfRVJS KDAsIDI1NiwgX19weXhfTDFfZXJyb3IpCi0rICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgw MEIxCi0rICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC50cF9wcmludCA9 IDA7Ci0rICAjZW5kaWYKLSsgIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9V U0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0V2ZW50LnRwX2dldGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgewotKyAg ICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC50cF9nZXRhdHRybyA9IF9f UHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOwotKyAgfQotKyAgaWYgKF9fUHl4X1NldFZ0YWJs ZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC50cF9kaWN0LCBfX3B5eF92 dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCkgPCAwKSBfX1BZWF9FUlIoMCwgMjU2 LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4 X25fc19FdmVudCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50KSA8IDApIF9fUFlYX0VSUigwLCAyNTYsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9f UHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCkgPCAwKSBfX1BZWF9FUlIoMCwgMjU2LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f cHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCA9ICZfX3B5eF90eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9FdmVudDsKLSsgIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgPSAmX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0OwotKyAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0Ll9wcmVw X25vZGVfbGlzdCA9IChzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKiwgUHlPYmplY3QgKikpX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9saXN0OwotKyAgX19weXhfdnRh YmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0Ll9wcmVwX25vZGVfbWFwID0gKHN0cnVj dCBtcHZfbm9kZV9saXN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dCAqLCBQeU9iamVjdCAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF9fcHJlcF9ub2RlX21hcDsKLSsgIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dC5fcHJlcF9uYXRpdmVfdmFsdWUgPSAoc3RydWN0IG1wdl9ub2RlICgqKShz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICosIFB5T2JqZWN0 ICosIFB5T2JqZWN0ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19w cmVwX25hdGl2ZV92YWx1ZTsKLSsgIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dC5fZnJlZV9uYXRpdmVfdmFsdWUgPSAoUHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICosIHN0cnVjdCBtcHZfbm9kZSkpX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX2ZyZWVfbmF0aXZlX3ZhbHVlOwot KyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMzU5LCBfX3B5eF9MMV9lcnJvcikKLSsgICNpZiBQWV9W RVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKLSsgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQudHBfcHJpbnQgPSAwOwotKyAgI2VuZGlmCi0rICBpZiAoKENZVEhPTl9VU0Vf VFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYmIGxpa2VseSghX19weXhf dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQudHBfZ2V0YXR0cm8gPT0gUHlPYmpl Y3RfR2VuZXJpY0dldEF0dHIpKSB7Ci0rICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0cjsK LSsgIH0KLSsgIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dC50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCAzNTksIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYg KFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX0NvbnRleHQsIChQeU9iamVjdCAq KSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KSA8IDApIF9fUFlYX0VS UigwLCAzNTksIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlP YmplY3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KSA8IDApIF9f UFlYX0VSUigwLCAzNTksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dDsKLSsgIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQ YXJhbXMgPSAmX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z OwotKyAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zLmFk ZF92b2lkcCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X19SZW5kZXJQYXJhbXMgKiwgZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5cGUsIHZvaWQg Kiwgc3RydWN0IF9fcHl4X29wdF9hcmdzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQ YXJhbXNfYWRkX3ZvaWRwICpfX3B5eF9vcHRpb25hbF9hcmdzKSlfX3B5eF9mXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRkX3ZvaWRwOwotKyAgX19weXhfdnRhYmxlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zLmFkZF9pbnQgPSAoUHlPYmplY3QgKigq KShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICos IGVudW0gbXB2X3JlbmRlcl9wYXJhbV90eXBlLCBpbnQpKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfaW50OwotKyAgX19weXhfdnRhYmxlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zLmFkZF9zdHJpbmcgPSAoUHlPYmplY3QgKigqKShz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICosIGVu dW0gbXB2X3JlbmRlcl9wYXJhbV90eXBlLCBjaGFyICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfc3RyaW5nOwotKyAgaWYgKFB5VHlwZV9SZWFkeSgm X19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcykgPCAwKSBfX1BZ WF9FUlIoMCwgODgxLCBfX3B5eF9MMV9lcnJvcikKLSsgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4 MDMwODAwQjEKLSsgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJh bXMudHBfcHJpbnQgPSAwOwotKyAgI2VuZGlmCi0rICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9U UyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMudHBfZ2V0YXR0cm8gPT0gUHlP YmplY3RfR2VuZXJpY0dldEF0dHIpKSB7Ci0rICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X19SZW5kZXJQYXJhbXMudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmlj R2V0QXR0cjsKLSsgIH0KLSsgIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKSA8IDApIF9fUFlYX0VSUigwLCA4ODEsIF9f cHl4X0wxX2Vycm9yKQotKyAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9z X1JlbmRlclBhcmFtcywgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X19SZW5kZXJQYXJhbXMpIDwgMCkgX19QWVhfRVJSKDAsIDg4MSwgX19weXhfTDFfZXJyb3Ip Ci0rICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMpIDwgMCkgX19QWVhfRVJSKDAsIDg4MSwgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRl clBhcmFtcyA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z OwotKyAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZv ID0gJl9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvOwot KyAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8uX2Zy b21fc3RydWN0ID0gKFB5T2JqZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICosIHN0cnVjdCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8g KikpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fX2Zyb21f c3RydWN0OwotKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfUmVuZGVyRnJhbWVJbmZvKSA8IDApIF9fUFlYX0VSUigwLCA5MjgsIF9fcHl4X0wxX2Vy cm9yKQotKyAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQotKyAgX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX3ByaW50ID0gMDsKLSsgICNl bmRpZgotKyAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVf TE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckZyYW1lSW5mby50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckZyYW1lSW5mby50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0 cikpIHsKLSsgICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJ bmZvLnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7Ci0rICB9Ci0r ICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Jl bmRlckZyYW1lSW5mby50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9SZW5kZXJGcmFtZUluZm8pIDwgMCkgX19QWVhfRVJSKDAsIDkyOCwgX19weXhfTDFfZXJyb3Ip Ci0rICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbykgPCAwKSBfX1BZWF9FUlIoMCwgOTI4LCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJGcmFtZUluZm8gPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJh bWVJbmZvOwotKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgOTM3LCBfX3B5eF9MMV9lcnJv cikKLSsgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKLSsgIF9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQudHBfcHJpbnQgPSAwOwotKyAgI2VuZGlm Ci0rICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09L VVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29u dGV4dC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Jl bmRlckNvbnRleHQudHBfZ2V0YXR0cm8gPT0gUHlPYmplY3RfR2VuZXJpY0dldEF0dHIpKSB7Ci0r ICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQudHBfZ2V0 YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0cjsKLSsgIH0KLSsgIGlmIChQeU9i amVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19SZW5kZXJDb250ZXh0LCAoUHlPYmplY3Qg KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCkgPCAwKSBf X1BZWF9FUlIoMCwgOTM3LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9zZXR1cF9yZWR1 Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29u dGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgOTM3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ID0gJl9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQ7Ci0rICBfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2Jhc2UgPSBfX3B5eF9wdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dDsKLSsgIGlmIChQeVR5cGVfUmVhZHko Jl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQpIDwg MCkgX19QWVhfRVJSKDAsIDExMjIsIF9fcHl4X0wxX2Vycm9yKQotKyAgI2lmIFBZX1ZFUlNJT05f SEVYIDwgMHgwMzA4MDBCMQotKyAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3Bl bkdMUmVuZGVyQ29udGV4dC50cF9wcmludCA9IDA7Ci0rICAjZW5kaWYKLSsgIGlmICgoQ1lUSE9O X1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2Rp Y3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVy Q29udGV4dC50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKLSsgICAg X19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dC50cF9n ZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOwotKyAgfQotKyAgaWYgKFB5 T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX09wZW5HTFJlbmRlckNvbnRleHQsIChQ eU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJD b250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCAxMTIyLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChf X1B5eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMTEyMiwgX19weXhf TDFfZXJyb3IpCi0rICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVu ZGVyQ29udGV4dCA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5k ZXJDb250ZXh0OwotKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzKSA8IDApIF9fUFlYX0VSUigwLCAz MTgsIF9fcHl4X0wxX2Vycm9yKQotKyAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQot KyAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19f ZXJyb3JzLnRwX3ByaW50ID0gMDsKLSsgICNlbmRpZgotKyAgaWYgKChDWVRIT05fVVNFX1RZUEVf U0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycy50cF9kaWN0 b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0 cnVjdF9fX2Vycm9ycy50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsK LSsgICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0 X19fZXJyb3JzLnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHJOb0Rp Y3Q7Ci0rICB9Ci0rICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2Nv cGVfc3RydWN0X19fZXJyb3JzID0gJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19f cHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9yczsKLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOwotKyAgcmV0dXJuIDA7Ci0rICBfX3B5eF9MMV9lcnJvcjo7Ci0rICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKLSsgIHJldHVybiAtMTsKLSt9Ci0rCi0rc3RhdGljIGludCBfX1B5 eF9tb2Rpbml0X3R5cGVfaW1wb3J0X2NvZGUodm9pZCkgewotKyAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKLSsgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX1B5eF9tb2Rpbml0X3R5 cGVfaW1wb3J0X2NvZGUiLCAwKTsKLSsgIC8qLS0tIFR5cGUgaW1wb3J0IGNvZGUgLS0tKi8KLSsg IF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIDA7Ci0rfQotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4Ci0tICogICAgIG9wdGlvbl9lcnJv ciA9IE1QVl9FUlJPUl9PUFRJT05fRVJST1IKLS0gKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9S X1BST1BFUlRZX05PVF9GT1VORAotLSAqICAgICBwcm9wZXJ0eV9mb3JtYXQgPSBNUFZfRVJST1Jf UFJPUEVSVFlfRk9STUFUICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgcHJv cGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1JfUFJPUEVSVFlfVU5BVkFJTEFCTEUKLS0gKiAg ICAgcHJvcGVydHlfZXJyb3IgPSBNUFZfRVJST1JfUFJPUEVSVFlfRVJST1IKLS0gKi8KLS0gIF9f cHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9Q RVJUWV9GT1JNQVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4OCwg X19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV9mb3JtYXQsIF9f cHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODgsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rc3RhdGljIGludCBfX1B5eF9tb2Rp bml0X3ZhcmlhYmxlX2ltcG9ydF9jb2RlKHZvaWQpIHsKLSsgIF9fUHl4X1JlZk5hbm55RGVjbGFy YXRpb25zCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19QeXhfbW9kaW5pdF92YXJp YWJsZV9pbXBvcnRfY29kZSIsIDApOwotKyAgLyotLS0gVmFyaWFibGUgaW1wb3J0IGNvZGUgLS0t Ki8KLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0dXJuIDA7Ci0rfQot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5Ci0tICogICAgIG5vdF9m b3VuZCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9OT1RfRk9VTkQKLS0gKiAgICAgcHJvcGVydHlfZm9y bWF0ID0gTVBWX0VSUk9SX1BST1BFUlRZX0ZPUk1BVAotLSAqICAgICBwcm9wZXJ0eV91bmF2YWls YWJsZSA9IE1QVl9FUlJPUl9QUk9QRVJUWV9VTkFWQUlMQUJMRSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0tICogICAgIHByb3BlcnR5X2Vycm9yID0gTVBWX0VSUk9SX1BST1BFUlRZX0VS Uk9SCi0tICogICAgIGNvbW1hbmRfZXJyb3IgPSBNUFZfRVJST1JfQ09NTUFORAotLSAqLwotLSAg X19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1BS T1BFUlRZX1VOQVZBSUxBQkxFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgODksIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcHJvcGVydHlfdW5h dmFpbGFibGUsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODksIF9fcHl4X0wxX2Vycm9y KQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rc3RhdGljIGlu dCBfX1B5eF9tb2Rpbml0X2Z1bmN0aW9uX2ltcG9ydF9jb2RlKHZvaWQpIHsKLSsgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19QeXhf bW9kaW5pdF9mdW5jdGlvbl9pbXBvcnRfY29kZSIsIDApOwotKyAgLyotLS0gRnVuY3Rpb24gaW1w b3J0IGNvZGUgLS0tKi8KLSsgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgcmV0 dXJuIDA7Ci0rfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwCi0t ICogICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9GT1JNQVQKLS0gKiAg ICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1JfUFJPUEVSVFlfVU5BVkFJTEFCTEUK LS0gKiAgICAgcHJvcGVydHlfZXJyb3IgPSBNUFZfRVJST1JfUFJPUEVSVFlfRVJST1IgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBjb21tYW5kX2Vycm9yID0gTVBWX0VSUk9S X0NPTU1BTkQKLS0gKiAgICAgbG9hZGluZ19mYWlsZWQgPSBNUFZfRVJST1JfTE9BRElOR19GQUlM RUQKLS0gKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9y KE1QVl9FUlJPUl9QUk9QRVJUWV9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDkwLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3Byb3Bl cnR5X2Vycm9yLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDkwLCBfX3B5eF9MMV9lcnJv cikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxCi0tICogICAgIHByb3BlcnR5X3VuYXZh aWxhYmxlID0gTVBWX0VSUk9SX1BST1BFUlRZX1VOQVZBSUxBQkxFCi0tICogICAgIHByb3BlcnR5 X2Vycm9yID0gTVBWX0VSUk9SX1BST1BFUlRZX0VSUk9SCi0tICogICAgIGNvbW1hbmRfZXJyb3Ig PSBNUFZfRVJST1JfQ09NTUFORCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAg IGxvYWRpbmdfZmFpbGVkID0gTVBWX0VSUk9SX0xPQURJTkdfRkFJTEVECi0tICogICAgIGFvX2lu aXRfZmFpbGVkID0gTVBWX0VSUk9SX0FPX0lOSVRfRkFJTEVECi0tICovCi0tICBfX3B5eF90XzYg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfQ09NTUFORCk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkxLCBfX3B5eF9MMV9lcnJvcikK LS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNz KF9fcHl4X3RfNywgX19weXhfbl9zX2NvbW1hbmRfZXJyb3IsIF9fcHl4X3RfNikgPCAwKSBfX1BZ WF9FUlIoMCwgOTEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7 IF9fcHl4X3RfNiA9IDA7Ci0rI2lmbmRlZiBDWVRIT05fTk9fUFlJTklUX0VYUE9SVAotKyNkZWZp bmUgX19QeXhfUHlNT0RJTklUX0ZVTkMgUHlNT0RJTklUX0ZVTkMKLSsjZWxpZiBQWV9NQUpPUl9W RVJTSU9OIDwgMwotKyNpZmRlZiBfX2NwbHVzcGx1cwotKyNkZWZpbmUgX19QeXhfUHlNT0RJTklU X0ZVTkMgZXh0ZXJuICJDIiB2b2lkCi0rI2Vsc2UKLSsjZGVmaW5lIF9fUHl4X1B5TU9ESU5JVF9G VU5DIHZvaWQKLSsjZW5kaWYKLSsjZWxzZQotKyNpZmRlZiBfX2NwbHVzcGx1cwotKyNkZWZpbmUg X19QeXhfUHlNT0RJTklUX0ZVTkMgZXh0ZXJuICJDIiBQeU9iamVjdCAqCi0rI2Vsc2UKLSsjZGVm aW5lIF9fUHl4X1B5TU9ESU5JVF9GVU5DIFB5T2JqZWN0ICoKLSsjZW5kaWYKLSsjZW5kaWYKLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MgotLSAqICAgICBwcm9wZXJ0 eV9lcnJvciA9IE1QVl9FUlJPUl9QUk9QRVJUWV9FUlJPUgotLSAqICAgICBjb21tYW5kX2Vycm9y ID0gTVBWX0VSUk9SX0NPTU1BTkQKLS0gKiAgICAgbG9hZGluZ19mYWlsZWQgPSBNUFZfRVJST1Jf TE9BRElOR19GQUlMRUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBhb19p bml0X2ZhaWxlZCA9IE1QVl9FUlJPUl9BT19JTklUX0ZBSUxFRAotLSAqICAgICB2b19pbml0X2Zh aWxlZCA9IE1QVl9FUlJPUl9WT19JTklUX0ZBSUxFRAotLSAqLwotLSAgX19weXhfdF82ID0gX19Q eXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX0xPQURJTkdfRkFJTEVEKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTIsIF9fcHl4X0wxX2Vycm9y KQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xh c3MoX19weXhfdF83LCBfX3B5eF9uX3NfbG9hZGluZ19mYWlsZWQsIF9fcHl4X3RfNikgPCAwKSBf X1BZWF9FUlIoMCwgOTIsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Nik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTMKLS0gKiAgICAgY29tbWFuZF9lcnJvciA9IE1QVl9FUlJPUl9DT01NQU5ECi0tICogICAg IGxvYWRpbmdfZmFpbGVkID0gTVBWX0VSUk9SX0xPQURJTkdfRkFJTEVECi0tICogICAgIGFvX2lu aXRfZmFpbGVkID0gTVBWX0VSUk9SX0FPX0lOSVRfRkFJTEVEICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgdm9faW5pdF9mYWlsZWQgPSBNUFZfRVJST1JfVk9fSU5JVF9GQUlM RUQKLS0gKiAgICAgbm90aGluZ190b19wbGF5ID0gTVBWX0VSUk9SX05PVEhJTkdfVE9fUExBWQot LSAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBW X0VSUk9SX0FPX0lOSVRfRkFJTEVEKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgOTMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0t ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfYW9faW5pdF9m YWlsZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTMsIF9fcHl4X0wxX2Vycm9yKQot LSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rI2lmIFBZX01BSk9S X1ZFUlNJT04gPCAzCi0rX19QeXhfUHlNT0RJTklUX0ZVTkMgaW5pdG1wdih2b2lkKSBDWVRIT05f U01BTExfQ09ERTsgLypwcm90byovCi0rX19QeXhfUHlNT0RJTklUX0ZVTkMgaW5pdG1wdih2b2lk KQotKyNlbHNlCi0rX19QeXhfUHlNT0RJTklUX0ZVTkMgUHlJbml0X21wdih2b2lkKSBDWVRIT05f U01BTExfQ09ERTsgLypwcm90byovCi0rX19QeXhfUHlNT0RJTklUX0ZVTkMgUHlJbml0X21wdih2 b2lkKQotKyNpZiBDWVRIT05fUEVQNDg5X01VTFRJX1BIQVNFX0lOSVQKLSt7Ci0rICByZXR1cm4g UHlNb2R1bGVEZWZfSW5pdCgmX19weXhfbW9kdWxlZGVmKTsKLSt9Ci0rc3RhdGljIENZVEhPTl9T TUFMTF9DT0RFIGludCBfX1B5eF9jaGVja19zaW5nbGVfaW50ZXJwcmV0ZXIodm9pZCkgewotKyAg ICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA3MDBBMQotKyAgICBzdGF0aWMgUFlfSU5UNjRf VCBtYWluX2ludGVycHJldGVyX2lkID0gLTE7Ci0rICAgIFBZX0lOVDY0X1QgY3VycmVudF9pZCA9 IFB5SW50ZXJwcmV0ZXJTdGF0ZV9HZXRJRChQeVRocmVhZFN0YXRlX0dldCgpLT5pbnRlcnApOwot KyAgICBpZiAobWFpbl9pbnRlcnByZXRlcl9pZCA9PSAtMSkgewotKyAgICAgICAgbWFpbl9pbnRl cnByZXRlcl9pZCA9IGN1cnJlbnRfaWQ7Ci0rICAgICAgICByZXR1cm4gKHVubGlrZWx5KGN1cnJl bnRfaWQgPT0gLTEpKSA/IC0xIDogMDsKLSsgICAgfSBlbHNlIGlmICh1bmxpa2VseShtYWluX2lu dGVycHJldGVyX2lkICE9IGN1cnJlbnRfaWQpKQotKyAgICAjZWxzZQotKyAgICBzdGF0aWMgUHlJ bnRlcnByZXRlclN0YXRlICptYWluX2ludGVycHJldGVyID0gTlVMTDsKLSsgICAgUHlJbnRlcnBy ZXRlclN0YXRlICpjdXJyZW50X2ludGVycHJldGVyID0gUHlUaHJlYWRTdGF0ZV9HZXQoKS0+aW50 ZXJwOwotKyAgICBpZiAoIW1haW5faW50ZXJwcmV0ZXIpIHsKLSsgICAgICAgIG1haW5faW50ZXJw cmV0ZXIgPSBjdXJyZW50X2ludGVycHJldGVyOwotKyAgICB9IGVsc2UgaWYgKHVubGlrZWx5KG1h aW5faW50ZXJwcmV0ZXIgIT0gY3VycmVudF9pbnRlcnByZXRlcikpCi0rICAgICNlbmRpZgotKyAg ICB7Ci0rICAgICAgICBQeUVycl9TZXRTdHJpbmcoCi0rICAgICAgICAgICAgUHlFeGNfSW1wb3J0 RXJyb3IsCi0rICAgICAgICAgICAgIkludGVycHJldGVyIGNoYW5nZSBkZXRlY3RlZCAtIHRoaXMg bW9kdWxlIGNhbiBvbmx5IGJlIGxvYWRlZCBpbnRvIG9uZSBpbnRlcnByZXRlciBwZXIgcHJvY2Vz cy4iKTsKLSsgICAgICAgIHJldHVybiAtMTsKLSsgICAgfQotKyAgICByZXR1cm4gMDsKLSt9Ci0r c3RhdGljIENZVEhPTl9TTUFMTF9DT0RFIGludCBfX1B5eF9jb3B5X3NwZWNfdG9fbW9kdWxlKFB5 T2JqZWN0ICpzcGVjLCBQeU9iamVjdCAqbW9kZGljdCwgY29uc3QgY2hhciogZnJvbV9uYW1lLCBj b25zdCBjaGFyKiB0b19uYW1lLCBpbnQgYWxsb3dfbm9uZSkgewotKyAgICBQeU9iamVjdCAqdmFs dWUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHNwZWMsIGZyb21fbmFtZSk7Ci0rICAgIGludCBy ZXN1bHQgPSAwOwotKyAgICBpZiAobGlrZWx5KHZhbHVlKSkgewotKyAgICAgICAgaWYgKGFsbG93 X25vbmUgfHwgdmFsdWUgIT0gUHlfTm9uZSkgewotKyAgICAgICAgICAgIHJlc3VsdCA9IFB5RGlj dF9TZXRJdGVtU3RyaW5nKG1vZGRpY3QsIHRvX25hbWUsIHZhbHVlKTsKLSsgICAgICAgIH0KLSsg ICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0rICAgIH0gZWxzZSBpZiAoUHlFcnJfRXhjZXB0aW9u TWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKLSsgICAgICAgIFB5RXJyX0NsZWFyKCk7 Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgICByZXN1bHQgPSAtMTsKLSsgICAgfQotKyAgICByZXR1 cm4gcmVzdWx0OwotK30KLStzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgUHlPYmplY3QqIF9fcHl4 X3B5bW9kX2NyZWF0ZShQeU9iamVjdCAqc3BlYywgQ1lUSE9OX1VOVVNFRCBQeU1vZHVsZURlZiAq ZGVmKSB7Ci0rICAgIFB5T2JqZWN0ICptb2R1bGUgPSBOVUxMLCAqbW9kZGljdCwgKm1vZG5hbWU7 Ci0rICAgIGlmIChfX1B5eF9jaGVja19zaW5nbGVfaW50ZXJwcmV0ZXIoKSkKLSsgICAgICAgIHJl dHVybiBOVUxMOwotKyAgICBpZiAoX19weXhfbSkKLSsgICAgICAgIHJldHVybiBfX1B5eF9OZXdS ZWYoX19weXhfbSk7Ci0rICAgIG1vZG5hbWUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHNwZWMs ICJuYW1lIik7Ci0rICAgIGlmICh1bmxpa2VseSghbW9kbmFtZSkpIGdvdG8gYmFkOwotKyAgICBt b2R1bGUgPSBQeU1vZHVsZV9OZXdPYmplY3QobW9kbmFtZSk7Ci0rICAgIFB5X0RFQ1JFRihtb2Ru YW1lKTsKLSsgICAgaWYgKHVubGlrZWx5KCFtb2R1bGUpKSBnb3RvIGJhZDsKLSsgICAgbW9kZGlj dCA9IFB5TW9kdWxlX0dldERpY3QobW9kdWxlKTsKLSsgICAgaWYgKHVubGlrZWx5KCFtb2RkaWN0 KSkgZ290byBiYWQ7Ci0rICAgIGlmICh1bmxpa2VseShfX1B5eF9jb3B5X3NwZWNfdG9fbW9kdWxl KHNwZWMsIG1vZGRpY3QsICJsb2FkZXIiLCAiX19sb2FkZXJfXyIsIDEpIDwgMCkpIGdvdG8gYmFk OwotKyAgICBpZiAodW5saWtlbHkoX19QeXhfY29weV9zcGVjX3RvX21vZHVsZShzcGVjLCBtb2Rk aWN0LCAib3JpZ2luIiwgIl9fZmlsZV9fIiwgMSkgPCAwKSkgZ290byBiYWQ7Ci0rICAgIGlmICh1 bmxpa2VseShfX1B5eF9jb3B5X3NwZWNfdG9fbW9kdWxlKHNwZWMsIG1vZGRpY3QsICJwYXJlbnQi LCAiX19wYWNrYWdlX18iLCAxKSA8IDApKSBnb3RvIGJhZDsKLSsgICAgaWYgKHVubGlrZWx5KF9f UHl4X2NvcHlfc3BlY190b19tb2R1bGUoc3BlYywgbW9kZGljdCwgInN1Ym1vZHVsZV9zZWFyY2hf bG9jYXRpb25zIiwgIl9fcGF0aF9fIiwgMCkgPCAwKSkgZ290byBiYWQ7Ci0rICAgIHJldHVybiBt b2R1bGU7Ci0rYmFkOgotKyAgICBQeV9YREVDUkVGKG1vZHVsZSk7Ci0rICAgIHJldHVybiBOVUxM OwotK30KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NAotLSAqICAg ICBsb2FkaW5nX2ZhaWxlZCA9IE1QVl9FUlJPUl9MT0FESU5HX0ZBSUxFRAotLSAqICAgICBhb19p bml0X2ZhaWxlZCA9IE1QVl9FUlJPUl9BT19JTklUX0ZBSUxFRAotLSAqICAgICB2b19pbml0X2Zh aWxlZCA9IE1QVl9FUlJPUl9WT19JTklUX0ZBSUxFRCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgIG5vdGhpbmdfdG9fcGxheSA9IE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkK LS0gKiAgICAgdW5rbm93bl9mb3JtYXQgPSBNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQKLS0gKi8K LS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJP Ul9WT19JTklUX0ZBSUxFRCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDk0LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3ZvX2luaXRfZmFpbGVk LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDk0LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk1Ci0tICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VS Uk9SX0FPX0lOSVRfRkFJTEVECi0tICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZP X0lOSVRfRkFJTEVECi0tICogICAgIG5vdGhpbmdfdG9fcGxheSA9IE1QVl9FUlJPUl9OT1RISU5H X1RPX1BMQVkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICB1bmtub3duX2Zv cm1hdCA9IE1QVl9FUlJPUl9VTktOT1dOX0ZPUk1BVAotLSAqICAgICB1bnN1cHBvcnRlZCA9IE1Q Vl9FUlJPUl9VTlNVUFBPUlRFRAotK3N0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19weXhf cHltb2RfZXhlY19tcHYoUHlPYmplY3QgKl9fcHl4X3B5aW5pdF9tb2R1bGUpCi0rI2VuZGlmCi0r I2VuZGlmCi0rewotKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Ci0rICBQeU9iamVjdCAq X19weXhfdF8yID0gTlVMTDsKLSsgIGludCBfX3B5eF90XzM7Ci0rICBQeU9iamVjdCAqX19weXhf dF80ID0gTlVMTDsKLSsgIGludCBfX3B5eF90XzU7Ci0rICBQeU9iamVjdCAqX19weXhfdF82ID0g TlVMTDsKLSsgIFB5T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxMOwotKyAgaW50IF9fcHl4X2xpbmVu byA9IDA7Ci0rICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Ci0rICBpbnQgX19w eXhfY2xpbmVubyA9IDA7Ci0rICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwotKyAgI2lmIENZ VEhPTl9QRVA0ODlfTVVMVElfUEhBU0VfSU5JVAotKyAgaWYgKF9fcHl4X20pIHsKLSsgICAgaWYg KF9fcHl4X20gPT0gX19weXhfcHlpbml0X21vZHVsZSkgcmV0dXJuIDA7Ci0rICAgIFB5RXJyX1Nl dFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJNb2R1bGUgJ21wdicgaGFzIGFscmVhZHkgYmVl biBpbXBvcnRlZC4gUmUtaW5pdGlhbGlzYXRpb24gaXMgbm90IHN1cHBvcnRlZC4iKTsKLSsgICAg cmV0dXJuIC0xOwotKyAgfQotKyAgI2VsaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0rICBpZiAo X19weXhfbSkgcmV0dXJuIF9fUHl4X05ld1JlZihfX3B5eF9tKTsKLSsgICNlbmRpZgotKyAgI2lm IENZVEhPTl9SRUZOQU5OWQotK19fUHl4X1JlZk5hbm55ID0gX19QeXhfUmVmTmFubnlJbXBvcnRB UEkoInJlZm5hbm55Iik7Ci0raWYgKCFfX1B5eF9SZWZOYW5ueSkgewotKyAgUHlFcnJfQ2xlYXIo KTsKLSsgIF9fUHl4X1JlZk5hbm55ID0gX19QeXhfUmVmTmFubnlJbXBvcnRBUEkoIkN5dGhvbi5S dW50aW1lLnJlZm5hbm55Iik7Ci0rICBpZiAoIV9fUHl4X1JlZk5hbm55KQotKyAgICAgIFB5X0Zh dGFsRXJyb3IoImZhaWxlZCB0byBpbXBvcnQgJ3JlZm5hbm55JyBtb2R1bGUiKTsKLSt9Ci0rI2Vu ZGlmCi0rICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19QeXhfUHlNT0RJTklUX0ZVTkMg UHlJbml0X21wdih2b2lkKSIsIDApOwotKyAgaWYgKF9fUHl4X2NoZWNrX2JpbmFyeV92ZXJzaW9u KCkgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCi0rICAjaWZkZWYgX19QeHlf UHlGcmFtZV9Jbml0aWFsaXplX09mZnNldHMKLSsgIF9fUHh5X1B5RnJhbWVfSW5pdGlhbGl6ZV9P ZmZzZXRzKCk7Ci0rICAjZW5kaWYKLSsgIF9fcHl4X2VtcHR5X3R1cGxlID0gUHlUdXBsZV9OZXco MCk7IGlmICh1bmxpa2VseSghX19weXhfZW1wdHlfdHVwbGUpKSBfX1BZWF9FUlIoMCwgMSwgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF9lbXB0eV9ieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0Fu ZFNpemUoIiIsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X2VtcHR5X2J5dGVzKSkgX19QWVhfRVJS KDAsIDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfZW1wdHlfdW5pY29kZSA9IFB5VW5pY29k ZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiIiwgMCk7IGlmICh1bmxpa2VseSghX19weXhfZW1wdHlfdW5p Y29kZSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgICNpZmRlZiBfX1B5eF9D eUZ1bmN0aW9uX1VTRUQKLSsgIGlmIChfX3B5eF9DeUZ1bmN0aW9uX2luaXQoKSA8IDApIF9fUFlY X0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgICNlbmRpZgotKyAgI2lmZGVmIF9fUHl4X0Z1 c2VkRnVuY3Rpb25fVVNFRAotKyAgaWYgKF9fcHl4X0Z1c2VkRnVuY3Rpb25faW5pdCgpIDwgMCkg X19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgI2VuZGlmCi0rICAjaWZkZWYgX19Q eXhfQ29yb3V0aW5lX1VTRUQKLSsgIGlmIChfX3B5eF9Db3JvdXRpbmVfaW5pdCgpIDwgMCkgX19Q WVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgI2VuZGlmCi0rICAjaWZkZWYgX19QeXhf R2VuZXJhdG9yX1VTRUQKLSsgIGlmIChfX3B5eF9HZW5lcmF0b3JfaW5pdCgpIDwgMCkgX19QWVhf RVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgI2VuZGlmCi0rICAjaWZkZWYgX19QeXhfQXN5 bmNHZW5fVVNFRAotKyAgaWYgKF9fcHl4X0FzeW5jR2VuX2luaXQoKSA8IDApIF9fUFlYX0VSUigw LCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgICNlbmRpZgotKyAgI2lmZGVmIF9fUHl4X1N0b3BBc3lu Y0l0ZXJhdGlvbl9VU0VECi0rICBpZiAoX19weXhfU3RvcEFzeW5jSXRlcmF0aW9uX2luaXQoKSA8 IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgICNlbmRpZgotKyAgLyotLS0g TGlicmFyeSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgLS0tKi8KLSsgIC8qLS0tIFRocmVhZHMgaW5p dGlhbGl6YXRpb24gY29kZSAtLS0qLwotKyAgI2lmIGRlZmluZWQoV0lUSF9USFJFQUQpICYmIFBZ X1ZFUlNJT05fSEVYIDwgMHgwMzA3MDBGMCAmJiBkZWZpbmVkKF9fUFlYX0ZPUkNFX0lOSVRfVEhS RUFEUykgJiYgX19QWVhfRk9SQ0VfSU5JVF9USFJFQURTCi0rICBQeUV2YWxfSW5pdFRocmVhZHMo KTsKLSsgICNlbmRpZgotKyAgLyotLS0gTW9kdWxlIGNyZWF0aW9uIGNvZGUgLS0tKi8KLSsgICNp ZiBDWVRIT05fUEVQNDg5X01VTFRJX1BIQVNFX0lOSVQKLSsgIF9fcHl4X20gPSBfX3B5eF9weWlu aXRfbW9kdWxlOwotKyAgUHlfSU5DUkVGKF9fcHl4X20pOwotKyAgI2Vsc2UKLSsgICNpZiBQWV9N QUpPUl9WRVJTSU9OIDwgMwotKyAgX19weXhfbSA9IFB5X0luaXRNb2R1bGU0KCJtcHYiLCBfX3B5 eF9tZXRob2RzLCBfX3B5eF9rX3B5bXB2X1B5dGhvbl93cmFwcGVyX2Zvcl9saWJtcHYsIDAsIFBZ VEhPTl9BUElfVkVSU0lPTik7IFB5X1hJTkNSRUYoX19weXhfbSk7Ci0rICAjZWxzZQotKyAgX19w eXhfbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX19weXhfbW9kdWxlZGVmKTsKLSsgICNlbmRpZgotKyAg aWYgKHVubGlrZWx5KCFfX3B5eF9tKSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQot KyAgI2VuZGlmCi0rICBfX3B5eF9kID0gUHlNb2R1bGVfR2V0RGljdChfX3B5eF9tKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF9kKSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgUHlf SU5DUkVGKF9fcHl4X2QpOwotKyAgX19weXhfYiA9IFB5SW1wb3J0X0FkZE1vZHVsZShfX1B5eF9C VUlMVElOX01PRFVMRV9OQU1FKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9iKSkgX19QWVhfRVJSKDAs IDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgUHlfSU5DUkVGKF9fcHl4X2IpOwotKyAgX19weXhfY3l0 aG9uX3J1bnRpbWUgPSBQeUltcG9ydF9BZGRNb2R1bGUoKGNoYXIgKikgImN5dGhvbl9ydW50aW1l Iik7IGlmICh1bmxpa2VseSghX19weXhfY3l0aG9uX3J1bnRpbWUpKSBfX1BZWF9FUlIoMCwgMSwg X19weXhfTDFfZXJyb3IpCi0rICBQeV9JTkNSRUYoX19weXhfY3l0aG9uX3J1bnRpbWUpOwotKyAg aWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoX19weXhfbSwgIl9fYnVpbHRpbnNfXyIsIF9fcHl4 X2IpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKTsKLSsgIC8qLS0tIEluaXRp YWxpemUgdmFyaW91cyBnbG9iYWwgY29uc3RhbnRzIGV0Yy4gLS0tKi8KLSsgIGlmIChfX1B5eF9J bml0R2xvYmFscygpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgI2lm IFBZX01BSk9SX1ZFUlNJT04gPCAzICYmIChfX1BZWF9ERUZBVUxUX1NUUklOR19FTkNPRElOR19J U19BU0NJSSB8fCBfX1BZWF9ERUZBVUxUX1NUUklOR19FTkNPRElOR19JU19ERUZBVUxUKQotKyAg aWYgKF9fUHl4X2luaXRfc3lzX2dldGRlZmF1bHRlbmNvZGluZ19wYXJhbXMoKSA8IDApIF9fUFlY X0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgICNlbmRpZgotKyAgaWYgKF9fcHl4X21vZHVs ZV9pc19tYWluX3ZpZGN1dHRlcl9fbGlic19fbXB2KSB7Ci0rICAgIGlmIChQeU9iamVjdF9TZXRB dHRyKF9fcHl4X20sIF9fcHl4X25fc19uYW1lLCBfX3B5eF9uX3NfbWFpbikgPCAwKSBfX1BZWF9F UlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCi0rICB9Ci0rICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+ PSAzCi0rICB7Ci0rICAgIFB5T2JqZWN0ICptb2R1bGVzID0gUHlJbXBvcnRfR2V0TW9kdWxlRGlj dCgpOyBpZiAodW5saWtlbHkoIW1vZHVsZXMpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJy b3IpCi0rICAgIGlmICghUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgInZpZGN1dHRlci5s aWJzLm1wdiIpKSB7Ci0rICAgICAgaWYgKHVubGlrZWx5KFB5RGljdF9TZXRJdGVtU3RyaW5nKG1v ZHVsZXMsICJ2aWRjdXR0ZXIubGlicy5tcHYiLCBfX3B5eF9tKSA8IDApKSBfX1BZWF9FUlIoMCwg MSwgX19weXhfTDFfZXJyb3IpCi0rICAgIH0KLSsgIH0KLSsgICNlbmRpZgotKyAgLyotLS0gQnVp bHRpbiBpbml0IGNvZGUgLS0tKi8KLSsgIGlmIChfX1B5eF9Jbml0Q2FjaGVkQnVpbHRpbnMoKSA8 IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgIC8qLS0tIENvbnN0YW50cyBp bml0IGNvZGUgLS0tKi8KLSsgIGlmIChfX1B5eF9Jbml0Q2FjaGVkQ29uc3RhbnRzKCkgPCAwKSBf X1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCi0rICAvKi0tLSBHbG9iYWwgdHlwZS9mdW5j dGlvbiBpbml0IGNvZGUgLS0tKi8KLSsgICh2b2lkKV9fUHl4X21vZGluaXRfZ2xvYmFsX2luaXRf Y29kZSgpOwotKyAgKHZvaWQpX19QeXhfbW9kaW5pdF92YXJpYWJsZV9leHBvcnRfY29kZSgpOwot KyAgKHZvaWQpX19QeXhfbW9kaW5pdF9mdW5jdGlvbl9leHBvcnRfY29kZSgpOwotKyAgaWYgKHVu bGlrZWx5KF9fUHl4X21vZGluaXRfdHlwZV9pbml0X2NvZGUoKSA8IDApKSBfX1BZWF9FUlIoMCwg MSwgX19weXhfTDFfZXJyb3IpCi0rICAodm9pZClfX1B5eF9tb2Rpbml0X3R5cGVfaW1wb3J0X2Nv ZGUoKTsKLSsgICh2b2lkKV9fUHl4X21vZGluaXRfdmFyaWFibGVfaW1wb3J0X2NvZGUoKTsKLSsg ICh2b2lkKV9fUHl4X21vZGluaXRfZnVuY3Rpb25faW1wb3J0X2NvZGUoKTsKLSsgIC8qLS0tIEV4 ZWN1dGlvbiBjb2RlIC0tLSovCi0rICAjaWYgZGVmaW5lZChfX1B5eF9HZW5lcmF0b3JfVVNFRCkg fHwgZGVmaW5lZChfX1B5eF9Db3JvdXRpbmVfVVNFRCkKLSsgIGlmIChfX1B5eF9wYXRjaF9hYmMo KSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgICNlbmRpZgotKwotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyCi0rICogCi0rICogaW1wb3J0IGN5 dGhvbgotKyAqIGltcG9ydCBzeXMsIHdhcm5pbmdzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiBmcm9tIHRocmVhZGluZyBpbXBvcnQgVGhyZWFkLCBTZW1hcGhvcmUKLSsgKiBmcm9t IGxpYmMuc3RkbGliIGNpbXBvcnQgbWFsbG9jLCBmcmVlCi0gICovCi0tICBfX3B5eF90XzYgPSBf X1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfTk9USElOR19UT19QTEFZ KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTUsIF9fcHl4X0wxX2Vy cm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm90aGluZ190b19wbGF5LCBfX3B5eF90XzYpIDwg MCkgX19QWVhfRVJSKDAsIDk1LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOwotKyAgX19weXhfdF8xID0gX19QeXhfSW1wb3J0KF9fcHl4 X25fc19zeXMsIDAsIC0xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MjIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBpZiAo UHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N5cywgX19weXhfdF8xKSA8IDApIF9f UFlYX0VSUigwLCAyMiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKLSsgIF9fcHl4X3RfMSA9IF9fUHl4X0ltcG9ydChfX3B5eF9uX3Nf d2FybmluZ3MsIDAsIC0xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MjIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBpZiAo UHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3dhcm5pbmdzLCBfX3B5eF90XzEpIDwg MCkgX19QWVhfRVJSKDAsIDIyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk2Ci0tICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lOSVRfRkFJ TEVECi0tICogICAgIG5vdGhpbmdfdG9fcGxheSA9IE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkK LS0gKiAgICAgdW5rbm93bl9mb3JtYXQgPSBNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICB1bnN1cHBvcnRlZCA9IE1QVl9FUlJPUl9V TlNVUFBPUlRFRAotLSAqICAgICBub3RfaW1wbGVtZW50ZWQgPSBNUFZfRVJST1JfTk9UX0lNUExF TUVOVEVECi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjMKLSsgKiBpbXBv cnQgY3l0aG9uCi0rICogaW1wb3J0IHN5cywgd2FybmluZ3MKLSsgKiBmcm9tIHRocmVhZGluZyBp bXBvcnQgVGhyZWFkLCBTZW1hcGhvcmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq IGZyb20gbGliYy5zdGRsaWIgY2ltcG9ydCBtYWxsb2MsIGZyZWUKLSsgKiBmcm9tIGxpYmMuc3Ry aW5nIGNpbXBvcnQgc3RyY3B5LCBzdHJsZW4sIG1lbXNldAotICAqLwotLSAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1VOS05PV05fRk9STUFU KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTYsIF9fcHl4X0wxX2Vy cm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdW5rbm93bl9mb3JtYXQsIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgOTYsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICBfX3B5eF90XzEgPSBQeUxpc3RfTmV3KDIpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMywgX19weXhfTDFfZXJyb3IpCi0r ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIF9fUHl4X0lOQ1JFRihfX3B5eF9uX3NfVGhy ZWFkKTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfbl9zX1RocmVhZCk7Ci0rICBQeUxpc3RfU0VU X0lURU0oX19weXhfdF8xLCAwLCBfX3B5eF9uX3NfVGhyZWFkKTsKLSsgIF9fUHl4X0lOQ1JFRihf X3B5eF9uX3NfU2VtYXBob3JlKTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfbl9zX1NlbWFwaG9y ZSk7Ci0rICBQeUxpc3RfU0VUX0lURU0oX19weXhfdF8xLCAxLCBfX3B5eF9uX3NfU2VtYXBob3Jl KTsKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X0ltcG9ydChfX3B5eF9uX3NfdGhyZWFkaW5nLCBfX3B5 eF90XzEsIC0xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjMsIF9f cHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0rICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgIF9fcHl4X3RfMSA9IF9fUHl4X0ltcG9y dEZyb20oX19weXhfdF8yLCBfX3B5eF9uX3NfVGhyZWFkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMjMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7Ci0rICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX1RocmVh ZCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAyMywgX19weXhfTDFfZXJyb3IpCi0rICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgIF9fcHl4X3RfMSA9IF9f UHl4X0ltcG9ydEZyb20oX19weXhfdF8yLCBfX3B5eF9uX3NfU2VtYXBob3JlKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19w eXhfbl9zX1NlbWFwaG9yZSwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAyMywgX19weXhf TDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotIAotLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3Ci0tICogICAgIG5vdGhpbmdfdG9fcGxheSA9IE1Q Vl9FUlJPUl9OT1RISU5HX1RPX1BMQVkKLS0gKiAgICAgdW5rbm93bl9mb3JtYXQgPSBNUFZfRVJS T1JfVU5LTk9XTl9GT1JNQVQKLS0gKiAgICAgdW5zdXBwb3J0ZWQgPSBNUFZfRVJST1JfVU5TVVBQ T1JURUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBub3RfaW1wbGVtZW50 ZWQgPSBNUFZfRVJST1JfTk9UX0lNUExFTUVOVEVECi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MzAKLSsgKiBmcm9tIGNsaWVudCBjaW1wb3J0ICoKLSsgKiAKLSsgKiBfX3Zl cnNpb25fXyA9ICIwLjMuMCIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIF9fYXV0 aG9yX18gPSAiQW5kcmUgRCIKLSAgKiAKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50 X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9VTlNVUFBPUlRFRCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDk3LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX3Vuc3VwcG9ydGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDk3 LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYg PSAwOwotKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc192ZXJzaW9uLCBf X3B5eF9rcF9zXzBfM18wKSA8IDApIF9fUFlYX0VSUigwLCAzMCwgX19weXhfTDFfZXJyb3IpCi0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTgKLS0gKiAgICAgdW5rbm93 bl9mb3JtYXQgPSBNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQKLS0gKiAgICAgdW5zdXBwb3J0ZWQg PSBNUFZfRVJST1JfVU5TVVBQT1JURUQKLS0gKiAgICAgbm90X2ltcGxlbWVudGVkID0gTVBWX0VS Uk9SX05PVF9JTVBMRU1FTlRFRCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzEKLSAgKiAKLSsgKiBfX3ZlcnNpb25fXyA9 ICIwLjMuMCIKLSsgKiBfX2F1dGhvcl9fID0gIkFuZHJlIEQiICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSAgKiAKLSsgKiBfUkVRVUlSRURfQ0FQSV9NQUpPUiA9IDIKLSAgKi8KLS0gIF9f cHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9OT1Rf SU1QTEVNRU5URUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5OCwg X19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19ub3RfaW1wbGVtZW50ZWQsIF9f cHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTgsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICBpZiAoUHlEaWN0X1NldEl0ZW0o X19weXhfZCwgX19weXhfbl9zX2F1dGhvciwgX19weXhfa3Bfc19BbmRyZV9EKSA8IDApIF9fUFlY X0VSUigwLCAzMSwgX19weXhfTDFfZXJyb3IpCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzIKLS0gKiBQeUV2YWxfSW5pdFRocmVhZHMoKQotKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjMzCi0rICogX19hdXRob3JfXyA9ICJBbmRyZSBEIgotICAq IAotLSAqIGNsYXNzIEVycm9yczogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAiIiJTZXQgb2Yga25vd24gZXJyb3IgY29kZXMgZnJvbSBNcHZFcnJvciBhbmQgRXZlbnQgcmVz cG9uc2VzLgotKyAqIF9SRVFVSVJFRF9DQVBJX01BSk9SID0gMiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogX01JTl9DQVBJX01JTk9SID0gMAotICAqIAotICAqLwotLSAgX19weXhf dF82ID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUoKChQeU9iamVjdCopJl9fUHl4X0RlZmF1bHRDbGFz c1R5cGUpLCBfX3B5eF9uX3NfRXJyb3JzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdF83LCBO VUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNzIsIF9f cHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoUHlEaWN0 X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX0Vycm9ycywgX19weXhfdF82KSA8IDApIF9fUFlY X0VSUigwLCA3MiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsg X19weXhfdF82ID0gMDsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAw OwotKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19SRVFVSVJFRF9DQVBJ X01BSk9SLCBfX3B5eF9pbnRfMikgPCAwKSBfX1BZWF9FUlIoMCwgMzMsIF9fcHl4X0wxX2Vycm9y KQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMQotLSAqIAotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0Ci0gICogCi0tICogY2xhc3MgRXZl bnRzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICIiIlNldCBvZiBrbm93 biB2YWx1ZXMgZm9yIEV2ZW50IGlkcy4KLSsgKiBfUkVRVUlSRURfQ0FQSV9NQUpPUiA9IDIKLSsg KiBfTUlOX0NBUElfTUlOT1IgPSAwICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAK LSsgKiBjZGVmIHVuc2lnbmVkIGxvbmcgX0NBUElfVkVSU0lPTgotICAqLwotLSAgX19weXhfdF83 ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZSgoUHlPYmplY3QgKikgTlVMTCwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X25fc19FdmVudHMsIF9fcHl4X25fc19FdmVudHMsIChQeU9iamVjdCAq KSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9rcF9zX1NldF9vZl9r bm93bl92YWx1ZXNfZm9yX0V2ZW50X2lkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZ WF9FUlIoMCwgMTAxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90Xzcp OwotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOAotLSAqICAgICBZ b3Ugc2hvdWxkIGhhbmRsZSB0aGUgcG9zc2liaWxpdHkgdGhhdCBldmVudCBpZHMgbWF5IG5vdCBi ZSBhbnkgb2YgdGhlc2UgdmFsdWVzLgotLSAqICAgICAiIiIKLS0gKiAgICAgbm9uZSA9IE1QVl9F VkVOVF9OT05FICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgc2h1dGRvd24g PSBNUFZfRVZFTlRfU0hVVERPV04KLS0gKiAgICAgbG9nX21lc3NhZ2UgPSBNUFZfRVZFTlRfTE9H X01FU1NBR0UKLS0gKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2 X2V2ZW50X2lkKE1QVl9FVkVOVF9OT05FKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgMTA4LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX25vbmUs IF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTA4LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotLQotLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwOQotLSAqICAgICAiIiIKLS0gKiAgICAgbm9uZSA9IE1Q Vl9FVkVOVF9OT05FCi0tICogICAgIHNodXRkb3duID0gTVBWX0VWRU5UX1NIVVRET1dOICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgbG9nX21lc3NhZ2UgPSBNUFZfRVZFTlRf TE9HX01FU1NBR0UKLS0gKiAgICAgZ2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX0dFVF9Q Uk9QRVJUWV9SRVBMWQotLSAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVt X19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1NIVVRET1dOKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzYpKSBfX1BZWF9FUlIoMCwgMTA5LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhf bl9zX3NodXRkb3duLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEwOSwgX19weXhfTDFf ZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0KLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTAKLS0gKiAgICAgbm9uZSA9IE1Q Vl9FVkVOVF9OT05FCi0tICogICAgIHNodXRkb3duID0gTVBWX0VWRU5UX1NIVVRET1dOCi0tICog ICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5UX0xPR19NRVNTQUdFICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgZ2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX0dFVF9Q Uk9QRVJUWV9SRVBMWQotLSAqICAgICBzZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRfU0VU X1BST1BFUlRZX1JFUExZCi0tICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2Vu dW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfTE9HX01FU1NBR0UpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTAsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBf X3B5eF9uX3NfbG9nX21lc3NhZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTEwLCBf X3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OwotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMQotLSAqICAgICBz aHV0ZG93biA9IE1QVl9FVkVOVF9TSFVURE9XTgotLSAqICAgICBsb2dfbWVzc2FnZSA9IE1QVl9F VkVOVF9MT0dfTUVTU0FHRQotLSAqICAgICBnZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRf R0VUX1BST1BFUlRZX1JFUExZICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAg c2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX1NFVF9QUk9QRVJUWV9SRVBMWQotLSAqICAg ICBjb21tYW5kX3JlcGx5ID0gTVBWX0VWRU5UX0NPTU1BTkRfUkVQTFkKLS0gKi8KLS0gIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9HRVRf UFJPUEVSVFlfUkVQTFkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAx MTEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5X3Jl cGx5LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExMSwgX19weXhfTDFfZXJyb3IpCi0t ICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSsgIGlmIChQeURpY3Rf U2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfTUlOX0NBUElfTUlOT1IsIF9fcHl4X2ludF8wKSA8 IDApIF9fUFlYX0VSUigwLCAzNCwgX19weXhfTDFfZXJyb3IpCi0gCi0tICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTEyCi0tICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5U X0xPR19NRVNTQUdFCi0tICogICAgIGdldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9HRVRf UFJPUEVSVFlfUkVQTFkKLS0gKiAgICAgc2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX1NF VF9QUk9QRVJUWV9SRVBMWSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGNv bW1hbmRfcmVwbHkgPSBNUFZfRVZFTlRfQ09NTUFORF9SRVBMWQotLSAqICAgICBzdGFydF9maWxl ID0gTVBWX0VWRU5UX1NUQVJUX0ZJTEUKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozNwotKyAqIAotKyAqIGNkZWYgdW5zaWduZWQgbG9uZyBfQ0FQSV9WRVJTSU9OCi0rICog d2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBfQ0FQSV9W RVJTSU9OID0gbXB2X2NsaWVudF9hcGlfdmVyc2lvbigpCi0rICogCi0gICovCi0tICBfX3B5eF90 XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfU0VUX1BS T1BFUlRZX1JFUExZKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTEy LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3NldF9wcm9wZXJ0eV9yZXBs eSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTIsIF9fcHl4X0wxX2Vycm9yKQotLSAg X19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICB7Ci0rICAgICAgI2lm ZGVmIFdJVEhfVEhSRUFECi0rICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7Ci0rICAgICAgUHlf VU5CTE9DS19USFJFQURTCi0rICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwotKyAgICAg ICNlbmRpZgotKyAgICAgIC8qdHJ5OiovIHsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTMKLS0gKiAgICAgZ2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX0dF VF9QUk9QRVJUWV9SRVBMWQotLSAqICAgICBzZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRf U0VUX1BST1BFUlRZX1JFUExZCi0tICogICAgIGNvbW1hbmRfcmVwbHkgPSBNUFZfRVZFTlRfQ09N TUFORF9SRVBMWSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIHN0YXJ0X2Zp bGUgPSBNUFZfRVZFTlRfU1RBUlRfRklMRQotLSAqICAgICBlbmRfZmlsZSA9IE1QVl9FVkVOVF9F TkRfRklMRQotKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM4Ci0r ICogY2RlZiB1bnNpZ25lZCBsb25nIF9DQVBJX1ZFUlNJT04KLSsgKiB3aXRoIG5vZ2lsOgotKyAq ICAgICBfQ0FQSV9WRVJTSU9OID0gbXB2X2NsaWVudF9hcGlfdmVyc2lvbigpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAKLSsgKiBfQ0FQSV9NQUpPUiA9IF9DQVBJX1ZFUlNJT04g Pj4gMTYKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2 ZW50X2lkKE1QVl9FVkVOVF9DT01NQU5EX1JFUExZKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgMTEzLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9z X2NvbW1hbmRfcmVwbHksIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTEzLCBfX3B5eF9M MV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotKyAg ICAgICAgX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX0NBUElfVkVSU0lPTiA9IG1wdl9j bGllbnRfYXBpX3ZlcnNpb24oKTsKLSsgICAgICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTE0Ci0tICogICAgIHNldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVO VF9TRVRfUFJPUEVSVFlfUkVQTFkKLS0gKiAgICAgY29tbWFuZF9yZXBseSA9IE1QVl9FVkVOVF9D T01NQU5EX1JFUExZCi0tICogICAgIHN0YXJ0X2ZpbGUgPSBNUFZfRVZFTlRfU1RBUlRfRklMRSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGVuZF9maWxlID0gTVBWX0VWRU5U X0VORF9GSUxFCi0tICogICAgIGZpbGVfbG9hZGVkID0gTVBWX0VWRU5UX0ZJTEVfTE9BREVECi0r ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3Ci0rICogCi0rICogY2Rl ZiB1bnNpZ25lZCBsb25nIF9DQVBJX1ZFUlNJT04KLSsgKiB3aXRoIG5vZ2lsOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIF9DQVBJX1ZFUlNJT04gPSBtcHZfY2xpZW50X2Fw aV92ZXJzaW9uKCkKLSsgKiAKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21f ZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9TVEFSVF9GSUxFKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE0LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywg X19weXhfbl9zX3N0YXJ0X2ZpbGUsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE0LCBf X3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OwotKyAgICAgIC8qZmluYWxseToqLyB7Ci0rICAgICAgICAvKm5vcm1hbCBleGl0OiovewotKyAg ICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3Jn ZXQoKTsKLSsgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotKyAgICAgICAgICAjZW5kaWYKLSsg ICAgICAgICAgZ290byBfX3B5eF9MNDsKLSsgICAgICAgIH0KLSsgICAgICAgIF9fcHl4X0w0OjsK LSsgICAgICB9Ci0rICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTE1Ci0tICogICAgIGNvbW1hbmRfcmVwbHkgPSBNUFZfRVZFTlRfQ09NTUFORF9SRVBMWQotLSAq ICAgICBzdGFydF9maWxlID0gTVBWX0VWRU5UX1NUQVJUX0ZJTEUKLS0gKiAgICAgZW5kX2ZpbGUg PSBNUFZfRVZFTlRfRU5EX0ZJTEUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICBmaWxlX2xvYWRlZCA9IE1QVl9FVkVOVF9GSUxFX0xPQURFRAotLSAqICAgICB0cmFja3NfY2hh bmdlZCA9IE1QVl9FVkVOVF9UUkFDS1NfQ0hBTkdFRAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQwCi0rICogICAgIF9DQVBJX1ZFUlNJT04gPSBtcHZfY2xpZW50X2FwaV92 ZXJzaW9uKCkKLSsgKiAKLSsgKiBfQ0FQSV9NQUpPUiA9IF9DQVBJX1ZFUlNJT04gPj4gMTYgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIF9DQVBJX01JTk9SID0gX0NBUElfVkVSU0lP TiAmIDB4RkZGRgotKyAqIAotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0VORF9GSUxFKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE1LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19w eXhfbl9zX2VuZF9maWxlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNSwgX19weXhf TDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSsg IF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZygoX19weXhfdl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX0NBUElfVkVSU0lPTiA+PiAxNikpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA0MCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKLSsgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3Nf Q0FQSV9NQUpPUiwgX19weXhfdF8yKSA8IDApIF9fUFlYX0VSUigwLCA0MCwgX19weXhfTDFfZXJy b3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSAKLS0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTYKLS0gKiAgICAgc3RhcnRfZmlsZSA9 IE1QVl9FVkVOVF9TVEFSVF9GSUxFCi0tICogICAgIGVuZF9maWxlID0gTVBWX0VWRU5UX0VORF9G SUxFCi0tICogICAgIGZpbGVfbG9hZGVkID0gTVBWX0VWRU5UX0ZJTEVfTE9BREVEICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgdHJhY2tzX2NoYW5nZWQgPSBNUFZfRVZFTlRf VFJBQ0tTX0NIQU5HRUQKLS0gKiAgICAgdHJhY2tzX3N3aXRjaGVkID0gTVBWX0VWRU5UX1RSQUNL X1NXSVRDSEVECi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDEKLSsgKiAK LSsgKiBfQ0FQSV9NQUpPUiA9IF9DQVBJX1ZFUlNJT04gPj4gMTYKLSsgKiBfQ0FQSV9NSU5PUiA9 IF9DQVBJX1ZFUlNJT04gJiAweEZGRkYgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq IAotKyAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01BSk9SIG9yIF9DQVBJX01J Tk9SIDwgX01JTl9DQVBJX01JTk9SOgotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0ZJTEVfTE9BREVEKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE2LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNywgX19weXhfbl9zX2ZpbGVfbG9hZGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAs IDExNiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZygo X19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX0NBUElfVkVSU0lPTiAmIDB4RkZGRikpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0MSwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5 eF9kLCBfX3B5eF9uX3NfQ0FQSV9NSU5PUiwgX19weXhfdF8yKSA8IDApIF9fUFlYX0VSUigwLCA0 MSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8y ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTcKLS0gKiAg ICAgZW5kX2ZpbGUgPSBNUFZfRVZFTlRfRU5EX0ZJTEUKLS0gKiAgICAgZmlsZV9sb2FkZWQgPSBN UFZfRVZFTlRfRklMRV9MT0FERUQKLS0gKiAgICAgdHJhY2tzX2NoYW5nZWQgPSBNUFZfRVZFTlRf VFJBQ0tTX0NIQU5HRUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICB0cmFj a3Nfc3dpdGNoZWQgPSBNUFZfRVZFTlRfVFJBQ0tfU1dJVENIRUQKLS0gKiAgICAgaWRsZSA9IE1Q Vl9FVkVOVF9JRExFCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMKLSsg KiBfQ0FQSV9NSU5PUiA9IF9DQVBJX1ZFUlNJT04gJiAweEZGRkYKLSsgKiAKLSsgKiBpZiBfQ0FQ SV9NQUpPUiAhPSBfUkVRVUlSRURfQ0FQSV9NQUpPUiBvciBfQ0FQSV9NSU5PUiA8IF9NSU5fQ0FQ SV9NSU5PUjogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICByYWlzZSBJbXBv cnRFcnJvcigKLSsgKiAgICAgICAgICJsaWJtcHYgdmVyc2lvbiBpcyBpbmNvcnJlY3QuIFJlcXVp cmVkICVkLiVkIGdvdCAlZC4lZC4iICUKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50 X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9UUkFDS1NfQ0hBTkdFRCk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExNywgX19weXhfTDFfZXJyb3IpCi0t ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc190cmFja3NfY2hhbmdlZCwgX19weXhfdF82KSA8IDApIF9fUFlY X0VSUigwLCAxMTcsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7 IF9fcHl4X3RfNiA9IDA7Ci0rICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwg X19weXhfbl9zX0NBUElfTUFKT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VS UigwLCA0MywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSsg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfUkVRVUlSRURf Q0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQzLCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgX19weXhfdF80 ID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdF8yLCBfX3B5eF90XzEsIFB5X05FKTsgX19Q eXhfWEdPVFJFRihfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VS UigwLCA0MywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19w eXhfdF8yID0gMDsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwot KyAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNCk7IGlmICh1bmxp a2VseShfX3B5eF90XzUgPCAwKSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5eF9MMV9lcnJvcikKLSsg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotKyAgaWYgKCFfX3B5eF90 XzUpIHsKLSsgIH0gZWxzZSB7Ci0rICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNTsKLSsgICAgZ290 byBfX3B5eF9MNl9ib29sX2Jpbm9wX2RvbmU7Ci0rICB9Ci0rICBfX1B5eF9HZXRNb2R1bGVHbG9i YWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX0NBUElfTUlOT1IpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNCkpIF9fUFlYX0VSUigwLCA0MywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RS RUYoX19weXhfdF80KTsKLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBf X3B5eF9uX3NfTUlOX0NBUElfTUlOT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA0MywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK LSsgIF9fcHl4X3RfMiA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3RfNCwgX19weXhfdF8x LCBQeV9MVCk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKLSsgIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90 XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF81IDwgMCkpIF9fUFlYX0VSUigwLCA0MywgX19weXhf TDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSsg IF9fcHl4X3RfMyA9IF9fcHl4X3RfNTsKLSsgIF9fcHl4X0w2X2Jvb2xfYmlub3BfZG9uZTo7Ci0r ICBpZiAodW5saWtlbHkoX19weXhfdF8zKSkgewotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExOAotLSAqICAgICBmaWxlX2xvYWRlZCA9IE1QVl9FVkVOVF9GSUxFX0xP QURFRAotLSAqICAgICB0cmFja3NfY2hhbmdlZCA9IE1QVl9FVkVOVF9UUkFDS1NfQ0hBTkdFRAot LSAqICAgICB0cmFja3Nfc3dpdGNoZWQgPSBNUFZfRVZFTlRfVFJBQ0tfU1dJVENIRUQgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBpZGxlID0gTVBWX0VWRU5UX0lETEUKLS0g KiAgICAgcGF1c2UgPSBNUFZfRVZFTlRfUEFVU0UKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ2Ci0rICogICAgIHJhaXNlIEltcG9ydEVycm9yKAotKyAqICAgICAgICAg ImxpYm1wdiB2ZXJzaW9uIGlzIGluY29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIg JQotKyAqICAgICAgICAgICAgIChfUkVRVUlSRURfQ0FQSV9NQUpPUiwgX01JTl9DQVBJX01JTk9S LCBfQ0FQSV9NQUpPUiwgX0NBUElfTUlOT1IpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSsgKiAgICAgKQotKyAqIAotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1RSQUNLX1NXSVRDSEVEKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE4LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX3RyYWNrc19zd2l0Y2hlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigw LCAxMTgsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4 X3RfNiA9IDA7Ci0rICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5 eF9uX3NfUkVRVUlSRURfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Mik7Ci0rICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3Nf TUlOX0NBUElfTUlOT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0 NiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotKyAgICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX0NBUElfTUFKT1Ip OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA0NiwgX19weXhfTDFfZXJy b3IpCi0rICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAgICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX0NBUElfTUlOT1IpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOwotKyAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldyg0KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDYsIF9fcHl4X0wxX2Vycm9yKQot KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSsgICAgX19QeXhfR0lWRVJFRihfX3B5eF90 XzIpOwotKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMCwgX19weXhfdF8yKTsKLSsg ICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwotKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfNywgMSwgX19weXhfdF8xKTsKLSsgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzQpOwotKyAg ICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMiwgX19weXhfdF80KTsKLSsgICAgX19QeXhf R0lWRVJFRihfX3B5eF90XzYpOwotKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMywg X19weXhfdF82KTsKLSsgICAgX19weXhfdF8yID0gMDsKLSsgICAgX19weXhfdF8xID0gMDsKLSsg ICAgX19weXhfdF80ID0gMDsKLSsgICAgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTkKLS0gKiAgICAgdHJhY2tzX2NoYW5nZWQgPSBNUFZf RVZFTlRfVFJBQ0tTX0NIQU5HRUQKLS0gKiAgICAgdHJhY2tzX3N3aXRjaGVkID0gTVBWX0VWRU5U X1RSQUNLX1NXSVRDSEVECi0tICogICAgIGlkbGUgPSBNUFZfRVZFTlRfSURMRSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIHBhdXNlID0gTVBWX0VWRU5UX1BBVVNFCi0tICog ICAgIHVucGF1c2UgPSBNUFZfRVZFTlRfVU5QQVVTRQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDUKLSsgKiBpZiBfQ0FQSV9NQUpPUiAhPSBfUkVRVUlSRURfQ0FQSV9N QUpPUiBvciBfQ0FQSV9NSU5PUiA8IF9NSU5fQ0FQSV9NSU5PUjoKLSsgKiAgICAgcmFpc2UgSW1w b3J0RXJyb3IoCi0rICogICAgICAgICAibGlibXB2IHZlcnNpb24gaXMgaW5jb3JyZWN0LiBSZXF1 aXJlZCAlZC4lZCBnb3QgJWQuJWQuIiAlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgICAgICAgICAoX1JFUVVJUkVEX0NBUElfTUFKT1IsIF9NSU5fQ0FQSV9NSU5PUiwgX0NB UElfTUFKT1IsIF9DQVBJX01JTk9SKQotKyAqICAgICApCi0gICovCi0tICBfX3B5eF90XzYgPSBf X1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfSURMRSk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExOSwgX19weXhfTDFfZXJyb3IpCi0t ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc19pZGxlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEx OSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKLSsgICAgX19weXhfdF82ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0KF9fcHl4X2twX3Nf bGlibXB2X3ZlcnNpb25faXNfaW5jb3JyZWN0X1JlcXUsIF9fcHl4X3RfNyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5 eF90XzcgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEyMAot LSAqICAgICB0cmFja3Nfc3dpdGNoZWQgPSBNUFZfRVZFTlRfVFJBQ0tfU1dJVENIRUQKLS0gKiAg ICAgaWRsZSA9IE1QVl9FVkVOVF9JRExFCi0tICogICAgIHBhdXNlID0gTVBWX0VWRU5UX1BBVVNF ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgdW5wYXVzZSA9IE1QVl9FVkVO VF9VTlBBVVNFCi0tICogICAgIHRpY2sgPSBNUFZfRVZFTlRfVElDSwotKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQKLSsgKiAKLSsgKiBpZiBfQ0FQSV9NQUpPUiAhPSBf UkVRVUlSRURfQ0FQSV9NQUpPUiBvciBfQ0FQSV9NSU5PUiA8IF9NSU5fQ0FQSV9NSU5PUjoKLSsg KiAgICAgcmFpc2UgSW1wb3J0RXJyb3IoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgICAgICJsaWJtcHYgdmVyc2lvbiBpcyBpbmNvcnJlY3QuIFJlcXVpcmVkICVkLiVkIGdv dCAlZC4lZC4iICUKLSsgKiAgICAgICAgICAgICAoX1JFUVVJUkVEX0NBUElfTUFKT1IsIF9NSU5f Q0FQSV9NSU5PUiwgX0NBUElfTUFKT1IsIF9DQVBJX01JTk9SKQotICAqLwotLSAgX19weXhfdF82 ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1BBVVNFKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTIwLCBfX3B5eF9MMV9lcnJv cikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNs YXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3BhdXNlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJS KDAsIDEyMCwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19w eXhfdF82ID0gMDsKLSsgICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF9idWlsdGluX0ltcG9ydEVycm9yLCBfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNykpIF9fUFlYX0VSUigwLCA0NCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzcpOwotKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKLSsgICAgX19QeXhfUmFpc2UoX19weXhfdF83LCAwLCAwLCAwKTsKLSsgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0rICAgIF9fUFlYX0VSUigwLCA0NCwgX19w eXhfTDFfZXJyb3IpCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTIx Ci0tICogICAgIGlkbGUgPSBNUFZfRVZFTlRfSURMRQotLSAqICAgICBwYXVzZSA9IE1QVl9FVkVO VF9QQVVTRQotLSAqICAgICB1bnBhdXNlID0gTVBWX0VWRU5UX1VOUEFVU0UgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICB0aWNrID0gTVBWX0VWRU5UX1RJQ0sKLS0gKiAgICAg c2NyaXB0X2lucHV0X2Rpc3BhdGNoID0gTVBWX0VWRU5UX1NDUklQVF9JTlBVVF9ESVNQQVRDSAot KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMKLSsgKiBfQ0FQSV9NSU5P UiA9IF9DQVBJX1ZFUlNJT04gJiAweEZGRkYKLSsgKiAKLSsgKiBpZiBfQ0FQSV9NQUpPUiAhPSBf UkVRVUlSRURfQ0FQSV9NQUpPUiBvciBfQ0FQSV9NSU5PUiA8IF9NSU5fQ0FQSV9NSU5PUjogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICByYWlzZSBJbXBvcnRFcnJvcigKLSsg KiAgICAgICAgICJsaWJtcHYgdmVyc2lvbiBpcyBpbmNvcnJlY3QuIFJlcXVpcmVkICVkLiVkIGdv dCAlZC4lZC4iICUKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9f bXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9VTlBBVVNFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgMTIxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9z X3VucGF1c2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTIxLCBfX3B5eF9MMV9lcnJv cikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotKyAgfQotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEyMgotLSAqICAgICBwYXVzZSA9 IE1QVl9FVkVOVF9QQVVTRQotLSAqICAgICB1bnBhdXNlID0gTVBWX0VWRU5UX1VOUEFVU0UKLS0g KiAgICAgdGljayA9IE1QVl9FVkVOVF9USUNLICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgc2NyaXB0X2lucHV0X2Rpc3BhdGNoID0gTVBWX0VWRU5UX1NDUklQVF9JTlBVVF9E SVNQQVRDSAotLSAqICAgICBjbGllbnRfbWVzc2FnZSA9IE1QVl9FVkVOVF9DTElFTlRfTUVTU0FH RQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyCi0rICogICAgIHZvaWQg UHlfSW5pdGlhbGl6ZSgpCi0rICogCi0rICogX2lzX3B5MyA9IHN5cy52ZXJzaW9uX2luZm8gPj0g KDMsKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogX3N0cmRlY19lcnIgPSAic3Vy cm9nYXRlZXNjYXBlIiBpZiBfaXNfcHkzIGVsc2UgInN0cmljdCIKLSsgKiAjIG1wdiAtPiBQeXRo b24KLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50 X2lkKE1QVl9FVkVOVF9USUNLKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgMTIyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF83LCBfX3B5eF9uX3Nfc3lzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9F UlIoMCwgNTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0r ICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNywgX19weXhf bl9zX3ZlcnNpb25faW5mbyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDUyLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3RpY2ssIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgMTIyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotKyAgX19weXhfdF83ID0gUHlPYmplY3RfUmlj aENvbXBhcmUoX19weXhfdF82LCBfX3B5eF90dXBsZV9fMTgsIFB5X0dFKTsgX19QeXhfWEdPVFJF RihfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA1Miwg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKLSsgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfaXNfcHkzLCBfX3B5 eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDUyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEyMwotLSAqICAgICB1bnBhdXNlID0gTVBWX0VWRU5UX1VOUEFVU0UK LS0gKiAgICAgdGljayA9IE1QVl9FVkVOVF9USUNLCi0tICogICAgIHNjcmlwdF9pbnB1dF9kaXNw YXRjaCA9IE1QVl9FVkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0ggICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotLSAqICAgICBjbGllbnRfbWVzc2FnZSA9IE1QVl9FVkVOVF9DTElFTlRfTUVT U0FHRQotLSAqICAgICB2aWRlb19yZWNvbmZpZyA9IE1QVl9FVkVOVF9WSURFT19SRUNPTkZJRwot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUzCi0rICogCi0rICogX2lzX3B5 MyA9IHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsKQotKyAqIF9zdHJkZWNfZXJyID0gInN1cnJvZ2F0 ZWVzY2FwZSIgaWYgX2lzX3B5MyBlbHNlICJzdHJpY3QiICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAjIG1wdiAtPiBQeXRob24KLSsgKiBkZWYgX3N0cmRlYyhzKToKLSAgKi8KLS0g IF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVO VF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0gpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCAxMjMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzYsIF9fcHl4X25fc19pc19weTMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA1MywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19z Y3JpcHRfaW5wdXRfZGlzcGF0Y2gsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTIzLCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5 eF90XzYpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlYX0VSUigwLCA1MywgX19w eXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsK LSsgIGlmIChfX3B5eF90XzMpIHsKLSsgICAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19zdXJyb2dh dGVlc2NhcGUpOwotKyAgICBfX3B5eF90XzcgPSBfX3B5eF9uX3Nfc3Vycm9nYXRlZXNjYXBlOwot KyAgfSBlbHNlIHsKLSsgICAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19zdHJpY3QpOwotKyAgICBf X3B5eF90XzcgPSBfX3B5eF9uX3Nfc3RyaWN0OwotKyAgfQotKyAgaWYgKFB5RGljdF9TZXRJdGVt KF9fcHl4X2QsIF9fcHl4X25fc19zdHJkZWNfZXJyLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJS KDAsIDUzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5 eF90XzcgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEyNAot LSAqICAgICB0aWNrID0gTVBWX0VWRU5UX1RJQ0sKLS0gKiAgICAgc2NyaXB0X2lucHV0X2Rpc3Bh dGNoID0gTVBWX0VWRU5UX1NDUklQVF9JTlBVVF9ESVNQQVRDSAotLSAqICAgICBjbGllbnRfbWVz c2FnZSA9IE1QVl9FVkVOVF9DTElFTlRfTUVTU0FHRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0tICogICAgIHZpZGVvX3JlY29uZmlnID0gTVBWX0VWRU5UX1ZJREVPX1JFQ09ORklHCi0t ICogICAgIGF1ZGlvX3JlY29uZmlnID0gTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHCi0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTUKLSsgKiBfc3RyZGVjX2VyciA9ICJzdXJy b2dhdGVlc2NhcGUiIGlmIF9pc19weTMgZWxzZSAic3RyaWN0IgotKyAqICMgbXB2IC0+IFB5dGhv bgotKyAqIGRlZiBfc3RyZGVjKHMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgIHRyeToKLSsgKiAgICAgICAgIHJldHVybiBzLmRlY29kZSgidXRmLTgiLCBfc3RyZGVjX2Vy cikKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50 X2lkKE1QVl9FVkVOVF9DTElFTlRfTUVTU0FHRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDEyNCwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19j bGllbnRfbWVzc2FnZSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMjQsIF9fcHl4X0wx X2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICBf X3B5eF90XzcgPSBQeUNGdW5jdGlvbl9OZXdFeCgmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMV9zdHJkZWMsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFfZXJyb3IpCi0r ICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSsgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9k LCBfX3B5eF9uX3Nfc3RyZGVjLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDU1LCBfX3B5 eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEyNQotLSAqICAgICBzY3Jp cHRfaW5wdXRfZGlzcGF0Y2ggPSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENICi0tICog ICAgIGNsaWVudF9tZXNzYWdlID0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFCi0tICogICAgIHZp ZGVvX3JlY29uZmlnID0gTVBWX0VWRU5UX1ZJREVPX1JFQ09ORklHICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgYXVkaW9fcmVjb25maWcgPSBNUFZfRVZFTlRfQVVESU9fUkVD T05GSUcKLS0gKiAgICAgbWV0YWRhdGFfdXBkYXRlID0gTVBWX0VWRU5UX01FVEFEQVRBX1VQREFU RQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzCi0rICogCi0rICogIyBQ eXRob24gLT4gbXB2Ci0rICogZGVmIF9zdHJlbmMocyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgdHJ5OgotKyAqICAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCJ1dGYtOCIs IF9zdHJkZWNfZXJyKQotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVt X19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1ZJREVPX1JFQ09ORklHKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTI1LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywg X19weXhfbl9zX3ZpZGVvX3JlY29uZmlnLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEy NSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKLSsgIF9fcHl4X3RfNyA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8zX3N0cmVuYywgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJz X21wdik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDYzLCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotKyAgaWYgKFB5RGljdF9TZXRJ dGVtKF9fcHl4X2QsIF9fcHl4X25fc19zdHJlbmMsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIo MCwgNjMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4 X3RfNyA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTI2Ci0t ICogICAgIGNsaWVudF9tZXNzYWdlID0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFCi0tICogICAg IHZpZGVvX3JlY29uZmlnID0gTVBWX0VWRU5UX1ZJREVPX1JFQ09ORklHCi0tICogICAgIGF1ZGlv X3JlY29uZmlnID0gTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgbWV0YWRhdGFfdXBkYXRlID0gTVBWX0VWRU5UX01FVEFEQVRBX1VQ REFURQotLSAqICAgICBzZWVrID0gTVBWX0VWRU5UX1NFRUsKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3MAotKyAqICAgICAgICAgcmV0dXJuIHMKLSsgKiAKLSsgKiBQeV9J bml0aWFsaXplKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqIAotKyAqIGNsYXNz IEVycm9yczoKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2 X2V2ZW50X2lkKE1QVl9FVkVOVF9BVURJT19SRUNPTkZJRyk7IGlmICh1bmxpa2VseSghX19weXhf dF82KSkgX19QWVhfRVJSKDAsIDEyNiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYo X19weXhfdF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4 X25fc19hdWRpb19yZWNvbmZpZywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMjYsIF9f cHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7 Ci0rICBQeV9Jbml0aWFsaXplKCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTI3Ci0tICogICAgIHZpZGVvX3JlY29uZmlnID0gTVBWX0VWRU5UX1ZJREVPX1JFQ09O RklHCi0tICogICAgIGF1ZGlvX3JlY29uZmlnID0gTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHCi0t ICogICAgIG1ldGFkYXRhX3VwZGF0ZSA9IE1QVl9FVkVOVF9NRVRBREFUQV9VUERBVEUgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBzZWVrID0gTVBWX0VWRU5UX1NFRUsKLS0g KiAgICAgcGxheWJhY2tfcmVzdGFydCA9IE1QVl9FVkVOVF9QTEFZQkFDS19SRVNUQVJUCi0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzIKLSsgKiBQeV9Jbml0aWFsaXplKCkK LSsgKiAKLSsgKiBjbGFzcyBFcnJvcnM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgIiIiU2V0IG9mIGtub3duIGVycm9yIGNvZGVzIGZyb20gTXB2RXJyb3IgYW5kIEV2ZW50 IHJlc3BvbnNlcy4KLSsgKiAKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21f ZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9NRVRBREFUQV9VUERBVEUpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMjcsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF83LCBfX3B5eF9uX3NfbWV0YWRhdGFfdXBkYXRlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJS KDAsIDEyNywgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19w eXhfdF82ID0gMDsKLSsgIF9fcHl4X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5 T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfRXJyb3JzLCBfX3B5 eF9uX3NfRXJyb3JzLCAoUHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJz X21wdiwgX19weXhfa3Bfc19TZXRfb2Zfa25vd25fZXJyb3JfY29kZXNfZnJvbV9NcCk7IGlmICh1 bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDcyLCBfX3B5eF9MMV9lcnJvcikKLSsg IF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEyOAotLSAqICAgICBhdWRpb19yZWNvbmZpZyA9IE1QVl9FVkVOVF9BVURJT19S RUNPTkZJRwotLSAqICAgICBtZXRhZGF0YV91cGRhdGUgPSBNUFZfRVZFTlRfTUVUQURBVEFfVVBE QVRFCi0tICogICAgIHNlZWsgPSBNUFZfRVZFTlRfU0VFSyAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0tICogICAgIHBsYXliYWNrX3Jlc3RhcnQgPSBNUFZfRVZFTlRfUExBWUJBQ0tfUkVT VEFSVAotLSAqICAgICBwcm9wZXJ0eV9jaGFuZ2UgPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdF Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzkKLSsgKiAgICAgWW91IHNo b3VsZCBoYW5kbGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQgZXJyb3IgY29kZXMgbWF5IG5vdCBiZSBh bnkgb2YgdGhlc2UgdmFsdWVzLgotKyAqICAgICAiIiIKLSsgKiAgICAgc3VjY2VzcyA9IE1QVl9F UlJPUl9TVUNDRVNTICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgcXVldWVf ZnVsbCA9IE1QVl9FUlJPUl9FVkVOVF9RVUVVRV9GVUxMCi0rICogICAgIG5vbWVtID0gTVBWX0VS Uk9SX05PTUVNCi0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21w dl9ldmVudF9pZChNUFZfRVZFTlRfU0VFSyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDEyOCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfU1VDQ0VTUyk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDc5LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywg X19weXhfbl9zX3NlZWssIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTI4LCBfX3B5eF9M MV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25f c19zdWNjZXNzLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDc5LCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEyOQotLSAqICAgICBtZXRhZGF0YV91cGRh dGUgPSBNUFZfRVZFTlRfTUVUQURBVEFfVVBEQVRFCi0tICogICAgIHNlZWsgPSBNUFZfRVZFTlRf U0VFSwotLSAqICAgICBwbGF5YmFja19yZXN0YXJ0ID0gTVBWX0VWRU5UX1BMQVlCQUNLX1JFU1RB UlQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBwcm9wZXJ0eV9jaGFuZ2Ug PSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFCi0tICogICAgIGNoYXB0ZXJfY2hhbmdlID0gTVBW X0VWRU5UX0NIQVBURVJfQ0hBTkdFCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6ODAKLSsgKiAgICAgIiIiCi0rICogICAgIHN1Y2Nlc3MgPSBNUFZfRVJST1JfU1VDQ0VTUwot KyAqICAgICBxdWV1ZV9mdWxsID0gTVBWX0VSUk9SX0VWRU5UX1FVRVVFX0ZVTEwgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBub21lbSA9IE1QVl9FUlJPUl9OT01FTQotKyAq ICAgICB1bmluaXRpYWxpemVkID0gTVBWX0VSUk9SX1VOSU5JVElBTElaRUQKLSAgKi8KLS0gIF9f cHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9Q TEFZQkFDS19SRVNUQVJUKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg MTI5LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51 bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9FVkVOVF9RVUVVRV9GVUxMKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODAsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBf X3B5eF9uX3NfcGxheWJhY2tfcmVzdGFydCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAx MjksIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX3F1ZXVlX2Z1bGwsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODAs IF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTMwCi0tICogICAg IHNlZWsgPSBNUFZfRVZFTlRfU0VFSwotLSAqICAgICBwbGF5YmFja19yZXN0YXJ0ID0gTVBWX0VW RU5UX1BMQVlCQUNLX1JFU1RBUlQKLS0gKiAgICAgcHJvcGVydHlfY2hhbmdlID0gTVBWX0VWRU5U X1BST1BFUlRZX0NIQU5HRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGNo YXB0ZXJfY2hhbmdlID0gTVBWX0VWRU5UX0NIQVBURVJfQ0hBTkdFCi0tICogCi0rICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODEKLSsgKiAgICAgc3VjY2VzcyA9IE1QVl9FUlJP Ul9TVUNDRVNTCi0rICogICAgIHF1ZXVlX2Z1bGwgPSBNUFZfRVJST1JfRVZFTlRfUVVFVUVfRlVM TAotKyAqICAgICBub21lbSA9IE1QVl9FUlJPUl9OT01FTSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogICAgIHVuaW5pdGlhbGl6ZWQgPSBNUFZfRVJST1JfVU5JTklUSUFMSVpFRAot KyAqICAgICBpbnZhbGlkX3BhcmFtZXRlciA9IE1QVl9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUgot ICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQo TVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDEzMCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfTk9NRU0pOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCA4MSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RS RUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9f cHl4X25fc19wcm9wZXJ0eV9jaGFuZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTMw LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90Xzcs IF9fcHl4X25fc19ub21lbSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4MSwgX19weXhf TDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzEKLS0gKiAgICAgcGxheWJh Y2tfcmVzdGFydCA9IE1QVl9FVkVOVF9QTEFZQkFDS19SRVNUQVJUCi0tICogICAgIHByb3BlcnR5 X2NoYW5nZSA9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0UKLS0gKiAgICAgY2hhcHRlcl9jaGFu Z2UgPSBNUFZfRVZFTlRfQ0hBUFRFUl9DSEFOR0UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqIAotLSAqIAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgyCi0r ICogICAgIHF1ZXVlX2Z1bGwgPSBNUFZfRVJST1JfRVZFTlRfUVVFVUVfRlVMTAotKyAqICAgICBu b21lbSA9IE1QVl9FUlJPUl9OT01FTQotKyAqICAgICB1bmluaXRpYWxpemVkID0gTVBWX0VSUk9S X1VOSU5JVElBTElaRUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBpbnZh bGlkX3BhcmFtZXRlciA9IE1QVl9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUgotKyAqICAgICBub3Rf Zm91bmQgPSBNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORAotICAqLwotLSAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0NIQVBURVJfQ0hB TkdFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTMxLCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9y KE1QVl9FUlJPUl9VTklOSVRJQUxJWkVEKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgODIsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7 Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfY2hhcHRl cl9jaGFuZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTMxLCBfX3B5eF9MMV9lcnJv cikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc191bmlu aXRpYWxpemVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDgyLCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMQotLSAqIAotLSAqIAotLSAqIGNsYXNz IEV2ZW50czogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAiIiJTZXQgb2Yg a25vd24gdmFsdWVzIGZvciBFdmVudCBpZHMuCi0tICogCi0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODMKLSsgKiAgICAgbm9tZW0gPSBNUFZfRVJST1JfTk9NRU0KLSsgKiAg ICAgdW5pbml0aWFsaXplZCA9IE1QVl9FUlJPUl9VTklOSVRJQUxJWkVECi0rICogICAgIGludmFs aWRfcGFyYW1ldGVyID0gTVBWX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX09QVElPTl9OT1Rf Rk9VTkQKLSsgKiAgICAgb3B0aW9uX2Zvcm1hdCA9IE1QVl9FUlJPUl9PUFRJT05fRk9STUFUCi0g ICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZSgoKFB5T2JqZWN0KikmX19Q eXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19FdmVudHMsIF9fcHl4X2VtcHR5X3R1cGxl LCBfX3B5eF90XzcsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCAxMDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODMsIF9fcHl4X0wxX2Vycm9yKQotICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwg X19weXhfbl9zX0V2ZW50cywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMDEsIF9fcHl4 X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhf bl9zX2ludmFsaWRfcGFyYW1ldGVyLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDgzLCBf X3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTM0Ci0tICogCi0tICogCi0tICogY2xhc3Mg TG9nTGV2ZWxzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIG5vID0gTVBW X0xPR19MRVZFTF9OT05FCi0tICogICAgIGZhdGFsID0gTVBWX0xPR19MRVZFTF9GQVRBTAotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg0Ci0rICogICAgIHVuaW5pdGlhbGl6 ZWQgPSBNUFZfRVJST1JfVU5JTklUSUFMSVpFRAotKyAqICAgICBpbnZhbGlkX3BhcmFtZXRlciA9 IE1QVl9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUgotKyAqICAgICBub3RfZm91bmQgPSBNUFZfRVJS T1JfT1BUSU9OX05PVF9GT1VORCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAg IG9wdGlvbl9mb3JtYXQgPSBNUFZfRVJST1JfT1BUSU9OX0ZPUk1BVAotKyAqICAgICBvcHRpb25f ZXJyb3IgPSBNUFZfRVJST1JfT1BUSU9OX0VSUk9SCi0gICovCi0tICBfX3B5eF90XzcgPSBfX1B5 eF9QeTNNZXRhY2xhc3NQcmVwYXJlKChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfbl9zX0xvZ0xldmVscywgX19weXhfbl9zX0xvZ0xldmVscywgKFB5T2JqZWN0ICop IE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIChQeU9iamVjdCAqKSBOVUxMKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMTM0LCBfX3B5eF9MMV9lcnJv cikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotKyAgX19weXhfdF82ID0gX19QeXhfUHlJ bnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX09QVElPTl9OT1RfRk9VTkQpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4NCwgX19weXhfTDFfZXJyb3IpCi0r ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc19ub3RfZm91bmQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIo MCwgODQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4 X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTM1Ci0t ICogCi0tICogY2xhc3MgTG9nTGV2ZWxzOgotLSAqICAgICBubyA9IE1QVl9MT0dfTEVWRUxfTk9O RSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGZhdGFsID0gTVBWX0xPR19M RVZFTF9GQVRBTAotLSAqICAgICBlcnJvciA9IE1QVl9MT0dfTEVWRUxfRVJST1IKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NQotKyAqICAgICBpbnZhbGlkX3BhcmFtZXRl ciA9IE1QVl9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUgotKyAqICAgICBub3RfZm91bmQgPSBNUFZf RVJST1JfT1BUSU9OX05PVF9GT1VORAotKyAqICAgICBvcHRpb25fZm9ybWF0ID0gTVBWX0VSUk9S X09QVElPTl9GT1JNQVQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBvcHRp b25fZXJyb3IgPSBNUFZfRVJST1JfT1BUSU9OX0VSUk9SCi0rICogICAgIG5vdF9mb3VuZCA9IE1Q Vl9FUlJPUl9QUk9QRVJUWV9OT1RfRk9VTkQKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX05PTkUpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzUsIF9fcHl4X0wxX2Vycm9yKQotKyAg X19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX09Q VElPTl9GT1JNQVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4NSwg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19ubywgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCAxMzUsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1NldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX29wdGlvbl9mb3JtYXQsIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgODUsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTM2Ci0tICogY2xhc3MgTG9nTGV2ZWxzOgotLSAqICAgICBubyA9IE1QVl9MT0dfTEVW RUxfTk9ORQotLSAqICAgICBmYXRhbCA9IE1QVl9MT0dfTEVWRUxfRkFUQUwgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBlcnJvciA9IE1QVl9MT0dfTEVWRUxfRVJST1IKLS0g KiAgICAgd2FybiA9IE1QVl9MT0dfTEVWRUxfV0FSTgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjg2Ci0rICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9PUFRJT05fTk9U X0ZPVU5ECi0rICogICAgIG9wdGlvbl9mb3JtYXQgPSBNUFZfRVJST1JfT1BUSU9OX0ZPUk1BVAot KyAqICAgICBvcHRpb25fZXJyb3IgPSBNUFZfRVJST1JfT1BUSU9OX0VSUk9SICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX1BST1BFUlRZ X05PVF9GT1VORAotKyAqICAgICBwcm9wZXJ0eV9mb3JtYXQgPSBNUFZfRVJST1JfUFJPUEVSVFlf Rk9STUFUCi0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9s b2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9GQVRBTCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDEzNiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9Q eUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfT1BUSU9OX0VSUk9SKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODYsIF9fcHl4X0wxX2Vycm9yKQotICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19w eXhfdF83LCBfX3B5eF9uX3NfZmF0YWwsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTM2 LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90Xzcs IF9fcHl4X25fc19vcHRpb25fZXJyb3IsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODYs IF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTM3Ci0tICogICAg IG5vID0gTVBWX0xPR19MRVZFTF9OT05FCi0tICogICAgIGZhdGFsID0gTVBWX0xPR19MRVZFTF9G QVRBTAotLSAqICAgICBlcnJvciA9IE1QVl9MT0dfTEVWRUxfRVJST1IgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotLSAqICAgICB3YXJuID0gTVBWX0xPR19MRVZFTF9XQVJOCi0tICogICAg IGluZm8gPSBNUFZfTE9HX0xFVkVMX0lORk8KLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4NwotKyAqICAgICBvcHRpb25fZm9ybWF0ID0gTVBWX0VSUk9SX09QVElPTl9GT1JN QVQKLSsgKiAgICAgb3B0aW9uX2Vycm9yID0gTVBWX0VSUk9SX09QVElPTl9FUlJPUgotKyAqICAg ICBub3RfZm91bmQgPSBNUFZfRVJST1JfUFJPUEVSVFlfTk9UX0ZPVU5EICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgcHJvcGVydHlfZm9ybWF0ID0gTVBWX0VSUk9SX1BST1BF UlRZX0ZPUk1BVAotKyAqICAgICBwcm9wZXJ0eV91bmF2YWlsYWJsZSA9IE1QVl9FUlJPUl9QUk9Q RVJUWV9VTkFWQUlMQUJMRQotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfbG9nX2xldmVsKE1QVl9MT0dfTEVWRUxfRVJST1IpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82 ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1BST1BFUlRZX05P VF9GT1VORCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg3LCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1Nl dE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2Vycm9yLCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDEzNywgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm90X2ZvdW5kLCBfX3B5eF90XzYpIDwgMCkgX19Q WVhfRVJSKDAsIDg3LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYp OyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEzOAotLSAqICAgICBmYXRhbCA9IE1QVl9MT0dfTEVWRUxfRkFUQUwKLS0gKiAgICAgZXJyb3Ig PSBNUFZfTE9HX0xFVkVMX0VSUk9SCi0tICogICAgIHdhcm4gPSBNUFZfTE9HX0xFVkVMX1dBUk4g ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBpbmZvID0gTVBWX0xPR19MRVZF TF9JTkZPCi0tICogICAgIHYgPSBNUFZfTE9HX0xFVkVMX1YKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo4OAotKyAqICAgICBvcHRpb25fZXJyb3IgPSBNUFZfRVJST1JfT1BU SU9OX0VSUk9SCi0rICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9OT1RfRk9V TkQKLSsgKiAgICAgcHJvcGVydHlfZm9ybWF0ID0gTVBWX0VSUk9SX1BST1BFUlRZX0ZPUk1BVCAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIHByb3BlcnR5X3VuYXZhaWxhYmxl ID0gTVBWX0VSUk9SX1BST1BFUlRZX1VOQVZBSUxBQkxFCi0rICogICAgIHByb3BlcnR5X2Vycm9y ID0gTVBWX0VSUk9SX1BST1BFUlRZX0VSUk9SCi0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9Q eUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9XQVJOKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM4LCBfX3B5eF9MMV9lcnJvcikKLSsg IF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9Q Uk9QRVJUWV9GT1JNQVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4 OCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChf X1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc193YXJuLCBfX3B5eF90XzYp IDwgMCkgX19QWVhfRVJSKDAsIDEzOCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcHJvcGVydHlfZm9ybWF0LCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEzOQotLSAqICAgICBlcnJvciA9IE1QVl9MT0dfTEVWRUxfRVJST1IKLS0g KiAgICAgd2FybiA9IE1QVl9MT0dfTEVWRUxfV0FSTgotLSAqICAgICBpbmZvID0gTVBWX0xPR19M RVZFTF9JTkZPICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgdiA9IE1QVl9M T0dfTEVWRUxfVgotLSAqICAgICBkZWJ1ZyA9IE1QVl9MT0dfTEVWRUxfREVCVUcKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OQotKyAqICAgICBub3RfZm91bmQgPSBNUFZf RVJST1JfUFJPUEVSVFlfTk9UX0ZPVU5ECi0rICogICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9F UlJPUl9QUk9QRVJUWV9GT1JNQVQKLSsgKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZf RVJST1JfUFJPUEVSVFlfVU5BVkFJTEFCTEUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAqICAgICBwcm9wZXJ0eV9lcnJvciA9IE1QVl9FUlJPUl9QUk9QRVJUWV9FUlJPUgotKyAqICAg ICBjb21tYW5kX2Vycm9yID0gTVBWX0VSUk9SX0NPTU1BTkQKLSAgKi8KLS0gIF9fcHl4X3RfNiA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX0lORk8p OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzksIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBW X0VSUk9SX1BST1BFUlRZX1VOQVZBSUxBQkxFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgODksIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfaW5m bywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzksIF9fcHl4X0wxX2Vycm9yKQotKyAg aWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3Byb3BlcnR5X3Vu YXZhaWxhYmxlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg5LCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE0MAotLSAqICAgICB3YXJuID0gTVBWX0xP R19MRVZFTF9XQVJOCi0tICogICAgIGluZm8gPSBNUFZfTE9HX0xFVkVMX0lORk8KLS0gKiAgICAg diA9IE1QVl9MT0dfTEVWRUxfViAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAg IGRlYnVnID0gTVBWX0xPR19MRVZFTF9ERUJVRwotLSAqICAgICB0cmFjZSA9IE1QVl9MT0dfTEVW RUxfVFJBQ0UKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MAotKyAqICAg ICBwcm9wZXJ0eV9mb3JtYXQgPSBNUFZfRVJST1JfUFJPUEVSVFlfRk9STUFUCi0rICogICAgIHBy b3BlcnR5X3VuYXZhaWxhYmxlID0gTVBWX0VSUk9SX1BST1BFUlRZX1VOQVZBSUxBQkxFCi0rICog ICAgIHByb3BlcnR5X2Vycm9yID0gTVBWX0VSUk9SX1BST1BFUlRZX0VSUk9SICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgY29tbWFuZF9lcnJvciA9IE1QVl9FUlJPUl9DT01N QU5ECi0rICogICAgIGxvYWRpbmdfZmFpbGVkID0gTVBWX0VSUk9SX0xPQURJTkdfRkFJTEVECi0g ICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwo TVBWX0xPR19MRVZFTF9WKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg MTQwLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51 bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJUWV9FUlJPUik7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDkwLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19w eXhfbl9zX3YsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTQwLCBfX3B5eF9MMV9lcnJv cikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19wcm9w ZXJ0eV9lcnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MCwgX19weXhfTDFfZXJy b3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDEKLS0gKiAgICAgaW5mbyA9IE1QVl9M T0dfTEVWRUxfSU5GTwotLSAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WCi0tICogICAgIGRlYnVn ID0gTVBWX0xPR19MRVZFTF9ERUJVRyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgIHRyYWNlID0gTVBWX0xPR19MRVZFTF9UUkFDRQotLSAqIAotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjkxCi0rICogICAgIHByb3BlcnR5X3VuYXZhaWxhYmxlID0gTVBW X0VSUk9SX1BST1BFUlRZX1VOQVZBSUxBQkxFCi0rICogICAgIHByb3BlcnR5X2Vycm9yID0gTVBW X0VSUk9SX1BST1BFUlRZX0VSUk9SCi0rICogICAgIGNvbW1hbmRfZXJyb3IgPSBNUFZfRVJST1Jf Q09NTUFORCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGxvYWRpbmdfZmFp bGVkID0gTVBWX0VSUk9SX0xPQURJTkdfRkFJTEVECi0rICogICAgIGFvX2luaXRfZmFpbGVkID0g TVBWX0VSUk9SX0FPX0lOSVRfRkFJTEVECi0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9ERUJVRyk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE0MSwgX19weXhfTDFfZXJyb3IpCi0rICBf X3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfQ09N TUFORCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkxLCBfX3B5eF9M MV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5h bWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2RlYnVnLCBfX3B5eF90XzYpIDwgMCkgX19Q WVhfRVJSKDAsIDE0MSwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xh c3MoX19weXhfdF83LCBfX3B5eF9uX3NfY29tbWFuZF9lcnJvciwgX19weXhfdF82KSA8IDApIF9f UFlYX0VSUigwLCA5MSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxNDIKLS0gKiAgICAgdiA9IE1QVl9MT0dfTEVWRUxfVgotLSAqICAgICBkZWJ1ZyA9IE1QVl9M T0dfTEVWRUxfREVCVUcKLS0gKiAgICAgdHJhY2UgPSBNUFZfTE9HX0xFVkVMX1RSQUNFICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAKLS0gKiAKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MgotKyAqICAgICBwcm9wZXJ0eV9lcnJvciA9IE1QVl9FUlJPUl9Q Uk9QRVJUWV9FUlJPUgotKyAqICAgICBjb21tYW5kX2Vycm9yID0gTVBWX0VSUk9SX0NPTU1BTkQK LSsgKiAgICAgbG9hZGluZ19mYWlsZWQgPSBNUFZfRVJST1JfTE9BRElOR19GQUlMRUQgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBhb19pbml0X2ZhaWxlZCA9IE1QVl9FUlJP Ul9BT19JTklUX0ZBSUxFRAotKyAqICAgICB2b19pbml0X2ZhaWxlZCA9IE1QVl9FUlJPUl9WT19J TklUX0ZBSUxFRAotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfbG9nX2xldmVsKE1QVl9MT0dfTEVWRUxfVFJBQ0UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NikpIF9fUFlYX0VSUigwLCAxNDIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82ID0gX19Q eXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX0xPQURJTkdfRkFJTEVEKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTIsIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xh c3MoX19weXhfdF83LCBfX3B5eF9uX3NfdHJhY2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIo MCwgMTQyLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5 eF90XzcsIF9fcHl4X25fc19sb2FkaW5nX2ZhaWxlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VS UigwLCA5MiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19w eXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzQK LS0gKiAKLS0gKiAKLS0gKiBjbGFzcyBMb2dMZXZlbHM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLS0gKiAgICAgbm8gPSBNUFZfTE9HX0xFVkVMX05PTkUKLS0gKiAgICAgZmF0YWwgPSBN UFZfTE9HX0xFVkVMX0ZBVEFMCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTMKLSsgKiAgICAgY29tbWFuZF9lcnJvciA9IE1QVl9FUlJPUl9DT01NQU5ECi0rICogICAgIGxv YWRpbmdfZmFpbGVkID0gTVBWX0VSUk9SX0xPQURJTkdfRkFJTEVECi0rICogICAgIGFvX2luaXRf ZmFpbGVkID0gTVBWX0VSUk9SX0FPX0lOSVRfRkFJTEVEICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSsgKiAgICAgdm9faW5pdF9mYWlsZWQgPSBNUFZfRVJST1JfVk9fSU5JVF9GQUlMRUQK LSsgKiAgICAgbm90aGluZ190b19wbGF5ID0gTVBWX0VSUk9SX05PVEhJTkdfVE9fUExBWQotICAq LwotLSAgX19weXhfdF82ID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUoKChQeU9iamVjdCopJl9fUHl4 X0RlZmF1bHRDbGFzc1R5cGUpLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfdF83LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgMTM0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50 X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9BT19JTklUX0ZBSUxFRCk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkzLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9f cHl4X25fc19Mb2dMZXZlbHMsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTM0LCBfX3B5 eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4 X25fc19hb19pbml0X2ZhaWxlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MywgX19w eXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsK LS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotIAotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE0NQotLSAqIAotLSAqIAotLSAqIGNsYXNzIEVP RlJlYXNvbnM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgIiIiS25vd24g cG9zc2libGUgdmFsdWVzIGZvciBFbmRPZkZpbGVSZWFjaGVkIHJlYXNvbi4KLS0gKiAKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NAotKyAqICAgICBsb2FkaW5nX2ZhaWxl ZCA9IE1QVl9FUlJPUl9MT0FESU5HX0ZBSUxFRAotKyAqICAgICBhb19pbml0X2ZhaWxlZCA9IE1Q Vl9FUlJPUl9BT19JTklUX0ZBSUxFRAotKyAqICAgICB2b19pbml0X2ZhaWxlZCA9IE1QVl9FUlJP Ul9WT19JTklUX0ZBSUxFRCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIG5v dGhpbmdfdG9fcGxheSA9IE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkKLSsgKiAgICAgdW5rbm93 bl9mb3JtYXQgPSBNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQKLSAgKi8KLS0gIF9fcHl4X3RfNyA9 IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5 X3R1cGxlLCBfX3B5eF9uX3NfRU9GUmVhc29ucywgX19weXhfbl9zX0VPRlJlYXNvbnMsIChQeU9i amVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9rcF9zX0tu b3duX3Bvc3NpYmxlX3ZhbHVlc19mb3JfRW5kT2ZGKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90Xzcp KSBfX1BZWF9FUlIoMCwgMTQ1LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzcpOwotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3Io TVBWX0VSUk9SX1ZPX0lOSVRfRkFJTEVEKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgOTQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7 Ci0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfdm9faW5p dF9mYWlsZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTQsIF9fcHl4X0wxX2Vycm9y KQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTUwCi0tICogICAgIFlvdSBzaG91bGQgaGFu ZGxlIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSByZWFzb24gbWF5IG5vdCBiZSBhbnkgb2YgdGhl c2UgdmFsdWVzLgotLSAqICAgICAiIiIKLS0gKiAgICAgZW9mID0gTVBWX0VORF9GSUxFX1JFQVNP Tl9FT0YgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBhYm9ydGVkID0gTVBW X0VORF9GSUxFX1JFQVNPTl9TVE9QCi0tICogICAgIHF1aXQgPSBNUFZfRU5EX0ZJTEVfUkVBU09O X1FVSVQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NQotKyAqICAgICBh b19pbml0X2ZhaWxlZCA9IE1QVl9FUlJPUl9BT19JTklUX0ZBSUxFRAotKyAqICAgICB2b19pbml0 X2ZhaWxlZCA9IE1QVl9FUlJPUl9WT19JTklUX0ZBSUxFRAotKyAqICAgICBub3RoaW5nX3RvX3Bs YXkgPSBNUFZfRVJST1JfTk9USElOR19UT19QTEFZICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiAgICAgdW5rbm93bl9mb3JtYXQgPSBNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQKLSsg KiAgICAgdW5zdXBwb3J0ZWQgPSBNUFZfRVJST1JfVU5TVVBQT1JURUQKLSAgKi8KLS0gIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2VuZF9maWxlX3JlYXNvbihNUFZfRU5E X0ZJTEVfUkVBU09OX0VPRik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDE1MCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2Vu dW1fX21wdl9lcnJvcihNUFZfRVJST1JfTk9USElOR19UT19QTEFZKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTUsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBf X3B5eF9uX3NfZW9mLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE1MCwgX19weXhfTDFf ZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nf bm90aGluZ190b19wbGF5LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDk1LCBfX3B5eF9M MV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE1MQotLSAqICAgICAiIiIKLS0g KiAgICAgZW9mID0gTVBWX0VORF9GSUxFX1JFQVNPTl9FT0YKLS0gKiAgICAgYWJvcnRlZCA9IE1Q Vl9FTkRfRklMRV9SRUFTT05fU1RPUCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog ICAgIHF1aXQgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX1FVSVQKLS0gKiAgICAgZXJyb3IgPSBNUFZf RU5EX0ZJTEVfUkVBU09OX0VSUk9SCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTYKLSsgKiAgICAgdm9faW5pdF9mYWlsZWQgPSBNUFZfRVJST1JfVk9fSU5JVF9GQUlMRUQK LSsgKiAgICAgbm90aGluZ190b19wbGF5ID0gTVBWX0VSUk9SX05PVEhJTkdfVE9fUExBWQotKyAq ICAgICB1bmtub3duX2Zvcm1hdCA9IE1QVl9FUlJPUl9VTktOT1dOX0ZPUk1BVCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIHVuc3VwcG9ydGVkID0gTVBWX0VSUk9SX1VOU1VQ UE9SVEVECi0rICogICAgIG5vdF9pbXBsZW1lbnRlZCA9IE1QVl9FUlJPUl9OT1RfSU1QTEVNRU5U RUQKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2VuZF9m aWxlX3JlYXNvbihNUFZfRU5EX0ZJTEVfUkVBU09OX1NUT1ApOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCAxNTEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1VOS05PV05fRk9STUFU KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTYsIF9fcHl4X0wxX2Vy cm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfYWJvcnRlZCwgX19weXhfdF82KSA8IDApIF9fUFlY X0VSUigwLCAxNTEsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNz KF9fcHl4X3RfNywgX19weXhfbl9zX3Vua25vd25fZm9ybWF0LCBfX3B5eF90XzYpIDwgMCkgX19Q WVhfRVJSKDAsIDk2LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYp OyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjE1MgotLSAqICAgICBlb2YgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX0VPRgotLSAqICAgICBhYm9y dGVkID0gTVBWX0VORF9GSUxFX1JFQVNPTl9TVE9QCi0tICogICAgIHF1aXQgPSBNUFZfRU5EX0ZJ TEVfUkVBU09OX1FVSVQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBlcnJv ciA9IE1QVl9FTkRfRklMRV9SRUFTT05fRVJST1IKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5NwotKyAqICAgICBub3RoaW5nX3RvX3BsYXkgPSBNUFZfRVJST1JfTk9USElO R19UT19QTEFZCi0rICogICAgIHVua25vd25fZm9ybWF0ID0gTVBWX0VSUk9SX1VOS05PV05fRk9S TUFUCi0rICogICAgIHVuc3VwcG9ydGVkID0gTVBWX0VSUk9SX1VOU1VQUE9SVEVEICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgbm90X2ltcGxlbWVudGVkID0gTVBWX0VSUk9S X05PVF9JTVBMRU1FTlRFRAotICAqIAotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZW5kX2ZpbGVfcmVhc29uKE1QVl9FTkRfRklMRV9SRUFTT05fUVVJVCk7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE1MiwgX19weXhfTDFfZXJy b3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZf RVJST1JfVU5TVVBQT1JURUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCA5NywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19xdWl0LCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE1MiwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdW5zdXBwb3J0ZWQsIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgOTcsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTUzCi0tICogICAgIGFib3J0ZWQgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX1NU T1AKLS0gKiAgICAgcXVpdCA9IE1QVl9FTkRfRklMRV9SRUFTT05fUVVJVAotLSAqICAgICBlcnJv ciA9IE1QVl9FTkRfRklMRV9SRUFTT05fRVJST1IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4Ci0rICogICAgIHVua25v d25fZm9ybWF0ID0gTVBWX0VSUk9SX1VOS05PV05fRk9STUFUCi0rICogICAgIHVuc3VwcG9ydGVk ID0gTVBWX0VSUk9SX1VOU1VQUE9SVEVECi0rICogICAgIG5vdF9pbXBsZW1lbnRlZCA9IE1QVl9F UlJPUl9OT1RfSU1QTEVNRU5URUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqIAot ICAqIAotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5k X2ZpbGVfcmVhc29uKE1QVl9FTkRfRklMRV9SRUFTT05fRVJST1IpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82 ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX05PVF9JTVBMRU1F TlRFRCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDk4LCBfX3B5eF9M MV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5h bWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2Vycm9yLCBfX3B5eF90XzYpIDwgMCkgX19Q WVhfRVJSKDAsIDE1MywgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xh c3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm90X2ltcGxlbWVudGVkLCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDk4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjE0NQotLSAqIAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyCi0r ICogUHlfSW5pdGlhbGl6ZSgpCi0gICogCi0tICogY2xhc3MgRU9GUmVhc29uczogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAiIiJLbm93biBwb3NzaWJsZSB2YWx1ZXMgZm9y IEVuZE9mRmlsZVJlYWNoZWQgcmVhc29uLgotKyAqIGNsYXNzIEVycm9yczogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAiIiJTZXQgb2Yga25vd24gZXJyb3IgY29kZXMgZnJv bSBNcHZFcnJvciBhbmQgRXZlbnQgcmVzcG9uc2VzLgotICAqIAotICAqLwotLSAgX19weXhfdF82 ID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUoKChQeU9iamVjdCopJl9fUHl4X0RlZmF1bHRDbGFzc1R5 cGUpLCBfX3B5eF9uX3NfRU9GUmVhc29ucywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3RfNywg TlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE0NSwg X19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZSgoKFB5 T2JqZWN0KikmX19QeXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19FcnJvcnMsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF90XzcsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCA3MiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYo X19weXhfdF82KTsKLS0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfRU9G UmVhc29ucywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxNDUsIF9fcHl4X0wxX2Vycm9y KQotKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19FcnJvcnMsIF9fcHl4 X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgNzIsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF83 KTsgX19weXhfdF83ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozMTgKLS0gKiAKLS0gKiAKLS0gKiBkZWYgX2Vycm9ycyhmbik6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgotLSAqICAgICAgICAg diA9IGZuKCprLCAqKmt3KQotLSAqLwotLSAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25fTmV3RXgo Jl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVfZXJyb3JzLCBOVUxMLCBfX3B5eF9u X3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9F UlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwot LSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19lcnJvcnMsIF9fcHl4X3Rf NykgPCAwKSBfX1BZWF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotLQotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjMyNgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEw MQotICAqIAotICAqIAotLSAqIGNsYXNzIE1QVkVycm9yKEV4Y2VwdGlvbik6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgY29kZSA9IE5vbmUKLSsgKiBjbGFzcyBFdmVudHM6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgIiIiU2V0IG9mIGtub3duIHZh bHVlcyBmb3IgRXZlbnQgaWRzLgotICAqIAotICAqLwotLSAgX19weXhfdF83ID0gUHlUdXBsZV9O ZXcoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDMyNiwgX19weXhf TDFfZXJyb3IpCi0rICBfX3B5eF90XzcgPSBfX1B5eF9QeTNNZXRhY2xhc3NQcmVwYXJlKChQeU9i amVjdCAqKSBOVUxMLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfbl9zX0V2ZW50cywgX19weXhf bl9zX0V2ZW50cywgKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19t cHYsIF9fcHl4X2twX3NfU2V0X29mX2tub3duX3ZhbHVlc19mb3JfRXZlbnRfaWQpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMDEsIF9fcHl4X0wxX2Vycm9yKQotICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0tICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKSgm KChQeVR5cGVPYmplY3QqKVB5RXhjX0V4Y2VwdGlvbilbMF0pKSk7Ci0tICBfX1B5eF9HSVZFUkVG KCgoUHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOwot LSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDAsICgoUHlPYmplY3QgKikoJigoUHlUeXBl T2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOwotLSAgX19weXhfdF82ID0gX19QeXhfQ2Fs Y3VsYXRlTWV0YWNsYXNzKE5VTEwsIF9fcHl4X3RfNyk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDMyNiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKLS0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoX19weXhf dF82LCBfX3B5eF90XzcsIF9fcHl4X25fc19NUFZFcnJvciwgX19weXhfbl9zX01QVkVycm9yLCAo UHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0 ICopIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzMjYsIF9f cHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tCi0tICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI3Ci0tICogCi0tICogY2xhc3MgTVBWRXJyb3Io RXhjZXB0aW9uKToKLS0gKiAgICAgY29kZSA9IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotLSAqIAotLSAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZSk6Ci0tICovCi0tICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3NfY29kZSwgUHlfTm9uZSkg PCAwKSBfX1BZWF9FUlIoMCwgMzI3LCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjkKLS0gKiAgICAgY29kZSA9IE5vbmUKLS0gKiAKLS0g KiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgICAgICBzZWxmLmNvZGUgPSBlCi0tICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIq IGVycl9jCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4Ci0rICogICAg IFlvdSBzaG91bGQgaGFuZGxlIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGV2ZW50IGlkcyBtYXkgbm90 IGJlIGFueSBvZiB0aGVzZSB2YWx1ZXMuCi0rICogICAgICIiIgotKyAqICAgICBub25lID0gTVBW X0VWRU5UX05PTkUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBzaHV0ZG93 biA9IE1QVl9FVkVOVF9TSFVURE9XTgotKyAqICAgICBsb2dfbWVzc2FnZSA9IE1QVl9FVkVOVF9M T0dfTUVTU0FHRQotICAqLwotLSAgX19weXhfdF8xID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9f cHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl8xX19pbml0X18sIDAsIF9f cHl4X25fc19NUFZFcnJvcl9fX2luaXQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19t cHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18yOSkpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMjksIF9fcHl4X0wxX2Vycm9yKQotLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF80LCBfX3B5eF9uX3NfaW5pdCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAzMjksIF9f cHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 Ci0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZf RVZFTlRfTk9ORSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEwOCwg X19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSsgIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19ub25lLCBfX3B5eF90XzYpIDwg MCkgX19QWVhfRVJSKDAsIDEwOCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19w eXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozMjYKLS0gKiAKLS0gKiAKLS0gKiBjbGFzcyBNUFZFcnJvcihFeGNlcHRpb24pOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGNvZGUgPSBOb25lCi0tICogCi0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5Ci0rICogICAgICIiIgotKyAq ICAgICBub25lID0gTVBWX0VWRU5UX05PTkUKLSsgKiAgICAgc2h1dGRvd24gPSBNUFZfRVZFTlRf U0hVVERPV04gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBsb2dfbWVzc2Fn ZSA9IE1QVl9FVkVOVF9MT0dfTUVTU0FHRQotKyAqICAgICBnZXRfcHJvcGVydHlfcmVwbHkgPSBN UFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCi0gICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9Q eTNDbGFzc0NyZWF0ZShfX3B5eF90XzYsIF9fcHl4X25fc19NUFZFcnJvciwgX19weXhfdF83LCBf X3B5eF90XzQsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAzMjYsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0t ICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX01QVkVycm9yLCBfX3B5eF90 XzEpIDwgMCkgX19QWVhfRVJSKDAsIDMyNiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQp OyBfX3B5eF90XzQgPSAwOwotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfZXZlbnRfaWQoTVBWX0VWRU5UX1NIVVRET1dOKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgMTA5LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOwotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9z X3NodXRkb3duLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEwOSwgX19weXhfTDFfZXJy b3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0gIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjM0MAotLSAqICAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNl bGYsIGUpCi0tICogCi0tICogY2xhc3MgUHlNUFZFcnJvcihFeGNlcHRpb24pOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIHBhc3MKLS0gKiAKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTAKLSsgKiAgICAgbm9uZSA9IE1QVl9FVkVOVF9OT05FCi0r ICogICAgIHNodXRkb3duID0gTVBWX0VWRU5UX1NIVVRET1dOCi0rICogICAgIGxvZ19tZXNzYWdl ID0gTVBWX0VWRU5UX0xPR19NRVNTQUdFICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAgICAgZ2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWQot KyAqICAgICBzZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRfU0VUX1BST1BFUlRZX1JFUExZ Ci0gICovCi0tICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMCwgMzQwLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJF RihfX3B5eF90XzcpOwotLSAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKikoJigoUHlUeXBlT2Jq ZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOwotLSAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0 ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0aW9uKVswXSkpKTsKLS0gIFB5VHVwbGVf U0VUX0lURU0oX19weXhfdF83LCAwLCAoKFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlF eGNfRXhjZXB0aW9uKVswXSkpKTsKLS0gIF9fcHl4X3RfNiA9IF9fUHl4X0NhbGN1bGF0ZU1ldGFj bGFzcyhOVUxMLCBfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigwLCAzNDAsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0xPR19NRVNTQUdFKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTEwLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOwotLSAgX19weXhfdF80ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJl cGFyZShfX3B5eF90XzYsIF9fcHl4X3RfNywgX19weXhfbl9zX1B5TVBWRXJyb3IsIF9fcHl4X25f c19QeU1QVkVycm9yLCAoUHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJz X21wdiwgKFB5T2JqZWN0ICopIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCAzNDAsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7 Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZShfX3B5eF90XzYsIF9fcHl4X25f c19QeU1QVkVycm9yLCBfX3B5eF90XzcsIF9fcHl4X3RfNCwgTlVMTCwgMCwgMSk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCi0tICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBf X3B5eF9uX3NfUHlNUFZFcnJvciwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAzNDAsIF9f cHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19sb2dfbWVzc2FnZSwgX19weXhf dF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTAsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF83 KTsgX19weXhfdF83ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozNDMKLS0gKiAgICAgcGFzcwotLSAqIAotLSAqIGNkZWYgX2NhbGxiYWNrcyA9IGRpY3QoKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogY2RlZiBfcmVwbHlfdXNlcmRhdGFzID0g ZGljdCgpCi0tICogCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExCi0r ICogICAgIHNodXRkb3duID0gTVBWX0VWRU5UX1NIVVRET1dOCi0rICogICAgIGxvZ19tZXNzYWdl ID0gTVBWX0VWRU5UX0xPR19NRVNTQUdFCi0rICogICAgIGdldF9wcm9wZXJ0eV9yZXBseSA9IE1Q Vl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot KyAqICAgICBzZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRfU0VUX1BST1BFUlRZX1JFUExZ Ci0rICogICAgIGNvbW1hbmRfcmVwbHkgPSBNUFZfRVZFTlRfQ09NTUFORF9SRVBMWQotICAqLwot LSAgX19weXhfdF83ID0gX19QeXhfUHlEaWN0X05ld1ByZXNpemVkKDApOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAzNDMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhf R09UUkVGKF9fcHl4X3RfNyk7Ci0tICBfX1B5eF9YR09UUkVGKF9fcHl4X3ZfOXZpZGN1dHRlcl80 bGlic18zbXB2X19jYWxsYmFja3MpOwotLSAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fY2FsbGJhY2tzLCBfX3B5eF90XzcpOwotLSAgX19QeXhfR0lWRVJF RihfX3B5eF90XzcpOwotLSAgX19weXhfdF83ID0gMDsKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFkp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTEsIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5X3JlcGx5LCBfX3B5eF90XzYp IDwgMCkgX19QWVhfRVJSKDAsIDExMSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYo X19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozNDQKLS0gKiAKLS0gKiBjZGVmIF9jYWxsYmFja3MgPSBkaWN0KCkKLS0gKiBj ZGVmIF9yZXBseV91c2VyZGF0YXMgPSBkaWN0KCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqIAotLSAqIGNsYXNzIF9SZXBseVVzZXJEYXRhKG9iamVjdCk6Ci0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEyCi0rICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VW RU5UX0xPR19NRVNTQUdFCi0rICogICAgIGdldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9H RVRfUFJPUEVSVFlfUkVQTFkKLSsgKiAgICAgc2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5U X1NFVF9QUk9QRVJUWV9SRVBMWSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAg IGNvbW1hbmRfcmVwbHkgPSBNUFZfRVZFTlRfQ09NTUFORF9SRVBMWQotKyAqICAgICBzdGFydF9m aWxlID0gTVBWX0VWRU5UX1NUQVJUX0ZJTEUKLSAgKi8KLS0gIF9fcHl4X3RfNyA9IF9fUHl4X1B5 RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIo MCwgMzQ0LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotLSAg X19QeXhfWEdPVFJFRihfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRh dGFzKTsKLS0gIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X3JlcGx5X3VzZXJkYXRhcywgX19weXhfdF83KTsKLS0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF83 KTsKLS0gIF9fcHl4X3RfNyA9IDA7Ci0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2Vu dW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfU0VUX1BST1BFUlRZX1JFUExZKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTEyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f UHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNywgX19weXhfbl9zX3NldF9wcm9wZXJ0eV9yZXBseSwgX19weXhfdF82KSA8IDApIF9fUFlY X0VSUigwLCAxMTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7 IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzQ2Ci0tICogY2RlZiBfcmVwbHlfdXNlcmRhdGFzID0gZGljdCgpCi0tICogCi0tICogY2xhc3Mg X1JlcGx5VXNlckRhdGEob2JqZWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq ICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6Ci0tICogICAgICAgICBzZWxmLmNvdW50ZXIg PSAwCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzCi0rICogICAgIGdl dF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFkKLSsgKiAgICAg c2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX1NFVF9QUk9QRVJUWV9SRVBMWQotKyAqICAg ICBjb21tYW5kX3JlcGx5ID0gTVBWX0VWRU5UX0NPTU1BTkRfUkVQTFkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqICAgICBzdGFydF9maWxlID0gTVBWX0VWRU5UX1NUQVJUX0ZJTEUK LSsgKiAgICAgZW5kX2ZpbGUgPSBNUFZfRVZFTlRfRU5EX0ZJTEUKLSAgKi8KLS0gIF9fcHl4X3Rf NyA9IF9fUHl4X0NhbGN1bGF0ZU1ldGFjbGFzcyhOVUxMLCBfX3B5eF90dXBsZV9fMzApOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAzNDYsIF9fcHl4X0wxX2Vycm9yKQot LSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0tICBfX3B5eF90XzYgPSBfX1B5eF9QeTNNZXRh Y2xhc3NQcmVwYXJlKF9fcHl4X3RfNywgX19weXhfdHVwbGVfXzMwLCBfX3B5eF9uX3NfUmVwbHlV c2VyRGF0YSwgX19weXhfbl9zX1JlcGx5VXNlckRhdGEsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5 eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDM0NiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfQ09N TUFORF9SRVBMWSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExMywg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSsgIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19jb21tYW5kX3JlcGx5LCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExMywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjozNDcKLS0gKiAKLS0gKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmpl Y3QpOgotLSAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKLS0gKiAgICAgICAgIHNl bGYuZGF0YSA9IGRhdGEKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQK LSsgKiAgICAgc2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX1NFVF9QUk9QRVJUWV9SRVBM WQotKyAqICAgICBjb21tYW5kX3JlcGx5ID0gTVBWX0VWRU5UX0NPTU1BTkRfUkVQTFkKLSsgKiAg ICAgc3RhcnRfZmlsZSA9IE1QVl9FVkVOVF9TVEFSVF9GSUxFICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgZW5kX2ZpbGUgPSBNUFZfRVZFTlRfRU5EX0ZJTEUKLSsgKiAgICAg ZmlsZV9sb2FkZWQgPSBNUFZfRVZFTlRfRklMRV9MT0FERUQKLSAgKi8KLS0gIF9fcHl4X3RfNCA9 IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NF9SZXBseVVzZXJEYXRhXzFfX2luaXRfXywgMCwgX19weXhfbl9zX1JlcGx5VXNlckRhdGFfX19p bml0LCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2Jq ZWN0ICopX19weXhfY29kZW9ial9fMzIpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgMzQ3LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzQp OwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNiwgX19weXhfbl9zX2luaXQs IF9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotKyAgX19weXhfdF82ID0gX19Q eXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1NUQVJUX0ZJTEUpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTQsIF9fcHl4X0wxX2Vycm9y KQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xh c3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc3RhcnRfZmlsZSwgX19weXhfdF82KSA8IDApIF9fUFlY X0VSUigwLCAxMTQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7 IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzUyCi0tICogICAgICAgICBzZWxmLm9ic2VydmVkID0gRmFsc2UKLS0gKiAKLS0gKiAgICAgZGVm IGFkZChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2Vs Zi5jb3VudGVyICs9IDEKLS0gKiAKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMTUKLSsgKiAgICAgY29tbWFuZF9yZXBseSA9IE1QVl9FVkVOVF9DT01NQU5EX1JFUExZCi0r ICogICAgIHN0YXJ0X2ZpbGUgPSBNUFZfRVZFTlRfU1RBUlRfRklMRQotKyAqICAgICBlbmRfZmls ZSA9IE1QVl9FVkVOVF9FTkRfRklMRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgIGZpbGVfbG9hZGVkID0gTVBWX0VWRU5UX0ZJTEVfTE9BREVECi0rICogICAgICMgdHJhY2tz X2NoYW5nZWQgPSBNUFZfRVZFTlRfVFJBQ0tTX0NIQU5HRUQKLSAgKi8KLS0gIF9fcHl4X3RfNCA9 IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NF9SZXBseVVzZXJEYXRhXzNhZGQsIDAsIF9fcHl4X25fc19SZXBseVVzZXJEYXRhX2FkZCwgTlVM TCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9f cHl4X2NvZGVvYmpfXzM0KSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAs IDM1MiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLS0gIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzYsIF9fcHl4X25fc19hZGQsIF9fcHl4X3Rf NCkgPCAwKSBfX1BZWF9FUlIoMCwgMzUyLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0VORF9GSUxFKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOwotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX2VuZF9maWxlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNSwg X19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTUKLS0gKiAgICAg ICAgIHNlbGYuY291bnRlciArPSAxCi0tICogCi0tICogICAgIGRlZiByZW1vdmUoc2VsZik6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIHNlbGYuY291bnRlciAtPSAx Ci0tICogCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2Ci0rICogICAg IHN0YXJ0X2ZpbGUgPSBNUFZfRVZFTlRfU1RBUlRfRklMRQotKyAqICAgICBlbmRfZmlsZSA9IE1Q Vl9FVkVOVF9FTkRfRklMRQotKyAqICAgICBmaWxlX2xvYWRlZCA9IE1QVl9FVkVOVF9GSUxFX0xP QURFRCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICMgdHJhY2tzX2NoYW5n ZWQgPSBNUFZfRVZFTlRfVFJBQ0tTX0NIQU5HRUQKLSsgKiAgICAgIyB0cmFja3Nfc3dpdGNoZWQg PSBNUFZfRVZFTlRfVFJBQ0tfU1dJVENIRUQKLSAgKi8KLS0gIF9fcHl4X3RfNCA9IF9fUHl4X0N5 RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVz ZXJEYXRhXzVyZW1vdmUsIDAsIF9fcHl4X25fc19SZXBseVVzZXJEYXRhX3JlbW92ZSwgTlVMTCwg X19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4 X2NvZGVvYmpfXzM2KSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDM1 NSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLS0gIGlmIChf X1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzYsIF9fcHl4X25fc19yZW1vdmUsIF9fcHl4X3Rf NCkgPCAwKSBfX1BZWF9FUlIoMCwgMzU1LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0ZJTEVfTE9BREVEKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE2LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f UHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNywgX19weXhfbl9zX2ZpbGVfbG9hZGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAs IDExNiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDYKLS0g KiBjZGVmIF9yZXBseV91c2VyZGF0YXMgPSBkaWN0KCkKLS0gKiAKLS0gKiBjbGFzcyBfUmVwbHlV c2VyRGF0YShvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGRl ZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKLS0gKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTkKLSsgKiAgICAgIyB0cmFja3Nf Y2hhbmdlZCA9IE1QVl9FVkVOVF9UUkFDS1NfQ0hBTkdFRAotKyAqICAgICAjIHRyYWNrc19zd2l0 Y2hlZCA9IE1QVl9FVkVOVF9UUkFDS19TV0lUQ0hFRAotKyAqICAgICBpZGxlID0gTVBWX0VWRU5U X0lETEUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAjIHBhdXNlID0gTVBW X0VWRU5UX1BBVVNFCi0rICogICAgICMgdW5wYXVzZSA9IE1QVl9FVkVOVF9VTlBBVVNFCi0gICov Ci0tICBfX3B5eF90XzQgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZShfX3B5eF90XzcsIF9fcHl4X25f c19SZXBseVVzZXJEYXRhLCBfX3B5eF90dXBsZV9fMzAsIF9fcHl4X3RfNiwgTlVMTCwgMCwgMSk7 IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDM0NiwgX19weXhfTDFfZXJy b3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLS0gIGlmIChQeURpY3RfU2V0SXRlbShf X3B5eF9kLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSwgX19weXhfdF80KSA8IDApIF9fUFlYX0VS UigwLCAzNDYsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9f cHl4X3RfNCA9IDA7Ci0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l dmVudF9pZChNUFZfRVZFTlRfSURMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDExOSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK LSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19pZGxlLCBf X3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExOSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzcpOyBfX3B5eF90XzcgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQxMQotLSAqICAgICAgICAgICAgIG1wdl9yZXN1bWUoc2VsZi5fY3R4KQotLSAqIAot LSAqICAgICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGRl ZiByZXF1ZXN0X2V2ZW50KHNlbGYsIGV2ZW50LCBlbmFibGUpOgotLSAqICAgICAgICAgIiIiRW5h YmxlIG9yIGRpc2FibGUgYSBnaXZlbiBldmVudC4KLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMjIKLSsgKiAgICAgIyBwYXVzZSA9IE1QVl9FVkVOVF9QQVVTRQotKyAqICAg ICAjIHVucGF1c2UgPSBNUFZfRVZFTlRfVU5QQVVTRQotKyAqICAgICB0aWNrID0gTVBWX0VWRU5U X1RJQ0sgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAjIHNjcmlwdF9pbnB1 dF9kaXNwYXRjaCA9IE1QVl9FVkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0gKLSsgKiAgICAgY2xp ZW50X21lc3NhZ2UgPSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0UKLSAgKi8KLS0gIF9fUHl4X0dl dE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDExLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f cHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9U SUNLKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTIyLCBfX3B5eF9M MV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgaWYgKF9fUHl4X1NldE5h bWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3RpY2ssIF9fcHl4X3RfNikgPCAwKSBfX1BZ WF9FUlIoMCwgMTIyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYp OyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQxMgotLSAqIAotLSAqICAgICBAX2Vycm9ycwotLSAqICAgICBkZWYgcmVxdWVzdF9ldmVudChz ZWxmLCBldmVudCwgZW5hYmxlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgIiIiRW5hYmxlIG9yIGRpc2FibGUgYSBnaXZlbiBldmVudC4KLS0gKiAKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjQKLSsgKiAgICAgdGljayA9IE1QVl9FVkVO VF9USUNLCi0rICogICAgICMgc2NyaXB0X2lucHV0X2Rpc3BhdGNoID0gTVBWX0VWRU5UX1NDUklQ VF9JTlBVVF9ESVNQQVRDSAotKyAqICAgICBjbGllbnRfbWVzc2FnZSA9IE1QVl9FVkVOVF9DTElF TlRfTUVTU0FHRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIHZpZGVvX3Jl Y29uZmlnID0gTVBWX0VWRU5UX1ZJREVPX1JFQ09ORklHCi0rICogICAgIGF1ZGlvX3JlY29uZmln ID0gTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHCi0gICovCi0tICBfX1B5eF9HZXROYW1lSW5DbGFz cyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0LCBfX3B5eF9uX3NfcmVxdWVzdF9ldmVudCk7IGlmICh1bmxpa2VseSghX19weXhf dF80KSkgX19QWVhfRVJSKDAsIDQxMiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYo X19weXhfdF80KTsKLS0gIF9fcHl4X3RfMSA9IE5VTEw7Ci0tICBpZiAoQ1lUSE9OX1VOUEFDS19N RVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7Ci0tICAgIF9f cHl4X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7Ci0tICAgIGlmIChsaWtlbHko X19weXhfdF8xKSkgewotLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9G VU5DVElPTihfX3B5eF90XzYpOwotLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOwotLSAg ICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzYsIGZ1bmN0aW9uKTsKLS0gICAgfQotLSAgfQotLSAgX19weXhfdF83ID0gKF9fcHl4X3Rf MSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9fcHl4 X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80KTsK LS0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLS0gIF9fUHl4X0RF Q1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzcpKSBfX1BZWF9FUlIoMCwgNDExLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOwotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZl bnRfaWQoTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgMTI0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOwotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9z X2NsaWVudF9tZXNzYWdlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyNCwgX19weXhf TDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0g IGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3JlcXVlc3RfZXZlbnQsIF9fcHl4 X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RF Q1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotLSAgUHlUeXBlX01vZGlmaWVkKF9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKLSAKLS0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjkKLS0gKiAgICAgICAgIHJldHVybiBlcnIKLS0gKiAK LS0gKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBk ZWYgc2V0X2xvZ19sZXZlbChzZWxmLCBsb2dsZXZlbCk6Ci0tICogICAgICAgICAiIiJXcmFwczog bXB2X3JlcXVlc3RfbG9nX21lc3NhZ2VzIiIiCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTI1Ci0rICogICAgICMgc2NyaXB0X2lucHV0X2Rpc3BhdGNoID0gTVBWX0VWRU5U X1NDUklQVF9JTlBVVF9ESVNQQVRDSAotKyAqICAgICBjbGllbnRfbWVzc2FnZSA9IE1QVl9FVkVO VF9DTElFTlRfTUVTU0FHRQotKyAqICAgICB2aWRlb19yZWNvbmZpZyA9IE1QVl9FVkVOVF9WSURF T19SRUNPTkZJRyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGF1ZGlvX3Jl Y29uZmlnID0gTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHCi0rICogICAgICMgbWV0YWRhdGFfdXBk YXRlID0gTVBWX0VWRU5UX01FVEFEQVRBX1VQREFURQotICAqLwotLSAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCA0MjksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82 ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1ZJREVPX1JF Q09ORklHKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTI1LCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgaWYgKF9fUHl4X1Nl dE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3ZpZGVvX3JlY29uZmlnLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyNSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNS RUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0MzAKLS0gKiAKLS0gKiAgICAgQF9lcnJvcnMKLS0gKiAgICAgZGVmIHNl dF9sb2dfbGV2ZWwoc2VsZiwgbG9nbGV2ZWwpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0tICogICAgICAgICAiIiJXcmFwczogbXB2X3JlcXVlc3RfbG9nX21lc3NhZ2VzIiIiCi0tICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTI2Ci0rICogICAgIGNsaWVudF9tZXNzYWdlID0gTVBWX0VWRU5UX0NMSUVOVF9NRVNT QUdFCi0rICogICAgIHZpZGVvX3JlY29uZmlnID0gTVBWX0VWRU5UX1ZJREVPX1JFQ09ORklHCi0r ICogICAgIGF1ZGlvX3JlY29uZmlnID0gTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgIyBtZXRhZGF0YV91cGRhdGUgPSBNUFZfRVZF TlRfTUVUQURBVEFfVVBEQVRFCi0rICogICAgIHNlZWsgPSBNUFZfRVZFTlRfU0VFSwotICAqLwot LSAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3NldF9sb2dfbGV2ZWwp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA0MzAsIF9fcHl4X0wxX2Vy cm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tICBfX3B5eF90XzEgPSBOVUxMOwot LSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzYpKSkgewotLSAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90 XzYpOwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsKLS0gICAgICBQeU9iamVjdCogZnVu Y3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKLS0gICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF8xKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAg IF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7Ci0tICAgIH0KLS0gIH0KLS0g IF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4 X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzYsIF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4 X3RfMSA9IDA7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLS0g IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQyOSwgX19weXhfTDFfZXJy b3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9BVURJT19SRUNPTkZJRyk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEyNiwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFz cyhfX3B5eF90XzcsIF9fcHl4X25fc19hdWRpb19yZWNvbmZpZywgX19weXhfdF82KSA8IDApIF9f UFlYX0VSUigwLCAxMjYsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Nik7IF9fcHl4X3RfNiA9IDA7Ci0tICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19w eXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25f c19zZXRfbG9nX2xldmVsLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDQzMCwgX19weXhf TDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLS0g IFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQwCi0tICogICAg ICAgICByZXR1cm4gZXJyCi0tICogCi0tICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLS0gKiAgICAgZGVmIGxvYWRfY29uZmlnKHNlbGYsIGZpbGVuYW1lKToKLS0g KiAgICAgICAgICIiIldyYXBzOiBtcHZfbG9hZF9jb25maWdfZmlsZSIiIgotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEyOAotKyAqICAgICBhdWRpb19yZWNvbmZpZyA9IE1Q Vl9FVkVOVF9BVURJT19SRUNPTkZJRwotKyAqICAgICAjIG1ldGFkYXRhX3VwZGF0ZSA9IE1QVl9F VkVOVF9NRVRBREFUQV9VUERBVEUKLSsgKiAgICAgc2VlayA9IE1QVl9FVkVOVF9TRUVLICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgcGxheWJhY2tfcmVzdGFydCA9IE1QVl9F VkVOVF9QTEFZQkFDS19SRVNUQVJUCi0rICogICAgIHByb3BlcnR5X2NoYW5nZSA9IE1QVl9FVkVO VF9QUk9QRVJUWV9DSEFOR0UKLSAgKi8KLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgNDQwLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50 X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9TRUVLKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTI4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzYpOwotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywg X19weXhfbl9zX3NlZWssIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTI4LCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0MQotLSAqIAotLSAqICAgICBA X2Vycm9ycwotLSAqICAgICBkZWYgbG9hZF9jb25maWcoc2VsZiwgZmlsZW5hbWUpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAiIiJXcmFwczogbXB2X2xvYWRfY29u ZmlnX2ZpbGUiIiIKLS0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjkKLSsgKiAgICAgIyBtZXRhZGF0YV91cGRhdGUgPSBN UFZfRVZFTlRfTUVUQURBVEFfVVBEQVRFCi0rICogICAgIHNlZWsgPSBNUFZfRVZFTlRfU0VFSwot KyAqICAgICBwbGF5YmFja19yZXN0YXJ0ID0gTVBWX0VWRU5UX1BMQVlCQUNLX1JFU1RBUlQgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBwcm9wZXJ0eV9jaGFuZ2UgPSBNUFZf RVZFTlRfUFJPUEVSVFlfQ0hBTkdFCi0rICogICAgICMgY2hhcHRlcl9jaGFuZ2UgPSBNUFZfRVZF TlRfQ0hBUFRFUl9DSEFOR0UKLSAgKi8KLS0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQs IF9fcHl4X25fc19sb2FkX2NvbmZpZyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhf RVJSKDAsIDQ0MSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsK LS0gIF9fcHl4X3RfMSA9IE5VTEw7Ci0tICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVu bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7Ci0tICAgIF9fcHl4X3RfMSA9IFB5 TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7Ci0tICAgIGlmIChsaWtlbHkoX19weXhfdF8xKSkg ewotLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5 eF90XzYpOwotLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOwotLSAgICAgIF9fUHl4X0lO Q1JFRihmdW5jdGlvbik7Ci0tICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1bmN0 aW9uKTsKLS0gICAgfQotLSAgfQotLSAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9Q eU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80KTsKLS0gIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9F UlIoMCwgNDQwLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwot KyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VW RU5UX1BMQVlCQUNLX1JFU1RBUlQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigwLCAxMjksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0r ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcGxheWJhY2tf cmVzdGFydCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMjksIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tICBpZiAoUHlE aWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19sb2FkX2NvbmZpZywgX19weXhfdF83KSA8IDAp IF9fUFlYX0VSUigwLCA0NDEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0tICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjU3MwotLSAqICAgICAgICAgcmV0dXJuIHJlc3VsdAotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEzMAotKyAqICAgICBzZWVrID0gTVBWX0VWRU5UX1NF RUsKLSsgKiAgICAgcGxheWJhY2tfcmVzdGFydCA9IE1QVl9FVkVOVF9QTEFZQkFDS19SRVNUQVJU Ci0rICogICAgIHByb3BlcnR5X2NoYW5nZSA9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0UgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAjIGNoYXB0ZXJfY2hhbmdlID0gTVBW X0VWRU5UX0NIQVBURVJfQ0hBTkdFCi0gICogCi0tICogICAgIEBfZXJyb3JzICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgZGVmIGdldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBw cm9wLCBkYXRhPU5vbmUpOgotLSAqICAgICAgICAgIiIiR2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9w ZXJ0eSBhc3luY2hyb25vdXNseS4KLSAgKi8KLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgNTczLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0UpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzAsIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xh c3MoX19weXhfdF83LCBfX3B5eF9uX3NfcHJvcGVydHlfY2hhbmdlLCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDEzMCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhf dF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1NzQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDEKLSAgKiAK LS0gKiAgICAgQF9lcnJvcnMKLS0gKiAgICAgZGVmIGdldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBw cm9wLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAg ICAiIiJHZXRzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGFzeW5jaHJvbm91c2x5LgotKyAqIAot KyAqIGNsYXNzIEV2ZW50czogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAi IiJTZXQgb2Yga25vd24gdmFsdWVzIGZvciBFdmVudCBpZHMuCi0gICogCi0gICovCi0tICBfX1B5 eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCBfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5X2FzeW5jKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNTc0LCBfX3B5eF9MMV9lcnJv cikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAgX19weXhfdF8xID0gTlVMTDsKLS0g IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19w eXhfdF82KSkpIHsKLS0gICAgX19weXhfdF8xID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82 KTsKLS0gICAgaWYgKGxpa2VseShfX3B5eF90XzEpKSB7Ci0tICAgICAgUHlPYmplY3QqIGZ1bmN0 aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7Ci0tICAgICAgX19QeXhfSU5D UkVGKF9fcHl4X3RfMSk7Ci0tICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAgICBf X1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOwotLSAgICB9Ci0tICB9Ci0tICBf X3B5eF90XzcgPSAoX19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzYsIF9fcHl4X3RfMSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfdF82LCBfX3B5eF90XzQpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA1NzMsIF9fcHl4X0wxX2Vycm9y KQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0rICBfX3B5eF90XzYgPSBfX1B5eF9QeTND bGFzc0NyZWF0ZSgoKFB5T2JqZWN0KikmX19QeXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4X25f c19FdmVudHMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90XzcsIE5VTEwsIDAsIDEpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDEsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhf ZCwgX19weXhfbl9zX0V2ZW50cywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMDEsIF9f cHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7 Ci0tICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19nZXRfcHJvcGVydHlfYXN5 bmMsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNTc0LCBfX3B5eF9MMV9lcnJvcikKLSAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotLSAgUHlUeXBlX01vZGlm aWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKLSAKLS0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzUKLS0gKiAgICAgICAgIHJldHVybiB2 Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTM0Ci0gICogCi0tICogICAg IEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgZGVmIHNldF9w cm9wZXJ0eShzZWxmLCBwcm9wLCB2YWx1ZT1UcnVlLCBhc3luY2hyb25vdXM9RmFsc2UsIGRhdGE9 Tm9uZSk6Ci0tICogICAgICAgICAiIiJXcmFwczogbXB2X3NldF9wcm9wZXJ0eSBhbmQgbXB2X3Nl dF9wcm9wZXJ0eV9hc3luYyIiIgotLSAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShf X3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9f UFlYX0VSUigwLCA2MzUsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nik7Ci0tCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjM2Ci0gICogCi0t ICogICAgIEBfZXJyb3JzCi0tICogICAgIGRlZiBzZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgdmFs dWU9VHJ1ZSwgYXN5bmNocm9ub3VzPUZhbHNlLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICAiIiJXcmFwczogbXB2X3NldF9wcm9wZXJ0eSBhbmQg bXB2X3NldF9wcm9wZXJ0eV9hc3luYyIiIgotLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAot KyAqIGNsYXNzIExvZ0xldmVsczogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICBubyA9IE1QVl9MT0dfTEVWRUxfTk9ORQotKyAqICAgICBmYXRhbCA9IE1QVl9MT0dfTEVWRUxf RkFUQUwKLSAgKi8KLS0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0 ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19z ZXRfcHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2MzYs IF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tICBfX3B5eF90 XzEgPSBOVUxMOwotLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzYpKSkgewotLSAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRf U0VMRihfX3B5eF90XzYpOwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsKLS0gICAgICBQ eU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKLS0g ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rp b24pOwotLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7Ci0tICAg IH0KLS0gIH0KLS0gIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2Fs bDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhf dF80ID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDYzNSwg X19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzcgPSBfX1B5eF9QeTNNZXRhY2xhc3NQcmVwYXJl KChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfbl9zX0xvZ0xldmVs cywgX19weXhfbl9zX0xvZ0xldmVscywgKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X25fc192aWRj dXR0ZXJfbGlic19tcHYsIChQeU9iamVjdCAqKSBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzcpKSBfX1BZWF9FUlIoMCwgMTM0LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0t ICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19zZXRfcHJvcGVydHksIF9fcHl4 X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNjM2LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0RF Q1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotLSAgUHlUeXBlX01vZGlmaWVkKF9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKLSAKLS0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzMKLS0gKiAgICAgICAgIHJldHVybiBlcnIKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzUKLSAgKiAKLS0gKiAgICAgQF9lcnJv cnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBkZWYgc2V0X29wdGlvbihz ZWxmLCBwcm9wLCB2YWx1ZT1UcnVlKToKLS0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X29w dGlvbiIiIgotKyAqIGNsYXNzIExvZ0xldmVsczoKLSsgKiAgICAgbm8gPSBNUFZfTE9HX0xFVkVM X05PTkUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBmYXRhbCA9IE1QVl9M T0dfTEVWRUxfRkFUQUwKLSsgKiAgICAgZXJyb3IgPSBNUFZfTE9HX0xFVkVMX0VSUk9SCi0gICov Ci0tICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9y cyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDY3MywgX19weXhfTDFf ZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2 ZWwoTVBWX0xPR19MRVZFTF9OT05FKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgMTM1LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwot KyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX25vLCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEzNSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo2NzQKLS0gKiAKLS0gKiAgICAgQF9lcnJvcnMKLS0gKiAgICAgZGVm IHNldF9vcHRpb24oc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X29wdGlvbiIiIgotLSAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEzNgotKyAqIGNsYXNzIExvZ0xldmVsczoKLSsgKiAgICAgbm8gPSBNUFZfTE9HX0xFVkVM X05PTkUKLSsgKiAgICAgZmF0YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgZXJyb3IgPSBNUFZfTE9HX0xFVkVMX0VSUk9SCi0rICog ICAgIHdhcm4gPSBNUFZfTE9HX0xFVkVMX1dBUk4KLSAgKi8KLS0gIF9fUHl4X0dldE5hbWVJbkNs YXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQsIF9fcHl4X25fc19zZXRfb3B0aW9uKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzQpKSBfX1BZWF9FUlIoMCwgNjc0LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOwotLSAgX19weXhfdF8xID0gTlVMTDsKLS0gIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsKLS0gICAgX19w eXhfdF8xID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82KTsKLS0gICAgaWYgKGxpa2VseShf X3B5eF90XzEpKSB7Ci0tICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZV TkNUSU9OKF9fcHl4X3RfNik7Ci0tICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7Ci0tICAg ICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4 X3RfNiwgZnVuY3Rpb24pOwotLSAgICB9Ci0tICB9Ci0tICBfX3B5eF90XzcgPSAoX19weXhfdF8x KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhf dF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQpOwot LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NykpIF9fUFlYX0VSUigwLCA2NzMsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfNyk7Ci0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2df bGV2ZWwoTVBWX0xPR19MRVZFTF9GQVRBTCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDEzNiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF82 KTsKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19mYXRh bCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzYsIF9fcHl4X0wxX2Vycm9yKQotICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tICBpZiAoUHlEaWN0X1Nl dEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQtPnRwX2RpY3QsIF9fcHl4X25fc19zZXRfb3B0aW9uLCBfX3B5eF90XzcpIDwgMCkgX19QWVhf RVJSKDAsIDY3NCwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsg X19weXhfdF83ID0gMDsKLS0gIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6Njk1Ci0tICogICAgICAgICByZXR1cm4gZXJyCi0tICogCi0tICogICAgIEBfZXJyb3Jz ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgZGVmIGluaXRpYWxpemUoc2Vs Zik6Ci0tICogICAgICAgICAiIiJXcmFwczogbXB2X2luaXRpYWxpemUiIiIKLSsgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzcKLSsgKiAgICAgbm8gPSBNUFZfTE9HX0xFVkVM X05PTkUKLSsgKiAgICAgZmF0YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMCi0rICogICAgIGVycm9y ID0gTVBWX0xPR19MRVZFTF9FUlJPUiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICog ICAgIHdhcm4gPSBNUFZfTE9HX0xFVkVMX1dBUk4KLSsgKiAgICAgaW5mbyA9IE1QVl9MT0dfTEVW RUxfSU5GTwotICAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9f cHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA2 OTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVt X19tcHZfbG9nX2xldmVsKE1QVl9MT0dfTEVWRUxfRVJST1IpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCAxMzcsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7Ci0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfZXJyb3IsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTM3LCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5NgotLSAqIAotLSAqICAgICBAX2Vy cm9ycwotLSAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9pbml0aWFsaXplIiIiCi0tICogICAg ICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTM4Ci0rICogICAgIGZhdGFsID0gTVBWX0xPR19MRVZFTF9GQVRBTAotKyAqICAgICBlcnJv ciA9IE1QVl9MT0dfTEVWRUxfRVJST1IKLSsgKiAgICAgd2FybiA9IE1QVl9MT0dfTEVWRUxfV0FS TiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGluZm8gPSBNUFZfTE9HX0xF VkVMX0lORk8KLSsgKiAgICAgdiA9IE1QVl9MT0dfTEVWRUxfVgotICAqLwotLSAgX19QeXhfR2V0 TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX2luaXRpYWxpemUpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2OTYsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhf R09UUkVGKF9fcHl4X3RfNCk7Ci0tICBfX3B5eF90XzEgPSBOVUxMOwotLSAgaWYgKENZVEhPTl9V TlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgewot LSAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOwotLSAgICBpZiAo bGlrZWx5KF9fcHl4X3RfMSkpIHsKLS0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhv ZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKLS0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8x KTsKLS0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotLSAgICAgIF9fUHl4X0RFQ1JFRl9T RVQoX19weXhfdF82LCBmdW5jdGlvbik7Ci0tICAgIH0KLS0gIH0KLS0gIF9fcHl4X3RfNyA9IChf X3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8x LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4 X3RfNCk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICBf X1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLS0gIGlmICh1bmxpa2VseSgh X19weXhfdF83KSkgX19QWVhfRVJSKDAsIDY5NSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9H T1RSRUYoX19weXhfdF83KTsKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9f bXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX1dBUk4pOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NikpIF9fUFlYX0VSUigwLCAxMzgsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9f cHl4X3RfNik7Ci0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9u X3Nfd2FybiwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzgsIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tICBpZiAoUHlE aWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19pbml0aWFsaXplLCBfX3B5eF90XzcpIDwgMCkg X19QWVhfRVJSKDAsIDY5NiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhf dF83KTsgX19weXhfdF83ID0gMDsKLS0gIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzQ4Ci0tICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnN0YXJ0KCkK LS0gKiAKLS0gKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAq ICAgICBkZWYgb2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkYXRhPU5vbmUpOgotLSAqICAg ICAgICAgIiIiV3JhcHM6IG1wdl9vYnNlcnZlX3Byb3BlcnR5IiIiCi0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTM5Ci0rICogICAgIGVycm9yID0gTVBWX0xPR19MRVZFTF9F UlJPUgotKyAqICAgICB3YXJuID0gTVBWX0xPR19MRVZFTF9XQVJOCi0rICogICAgIGluZm8gPSBN UFZfTE9HX0xFVkVMX0lORk8gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICB2 ID0gTVBWX0xPR19MRVZFTF9WCi0rICogICAgIGRlYnVnID0gTVBWX0xPR19MRVZFTF9ERUJVRwot ICAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19l cnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA3NDgsIF9fcHl4 X0wxX2Vycm9yKQotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9n X2xldmVsKE1QVl9MT0dfTEVWRUxfSU5GTyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDEzOSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82 KTsKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19pbmZv LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEzOSwgX19weXhfTDFfZXJyb3IpCi0rICBf X1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDkKLS0gKiAKLS0gKiAgICAgQF9lcnJvcnMKLS0gKiAg ICAgZGVmIG9ic2VydmVfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGF0YT1Ob25lKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9vYnNlcnZlX3By b3BlcnR5IiIiCi0tICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTQwCi0rICogICAgIHdhcm4gPSBNUFZfTE9HX0xFVkVMX1dB Uk4KLSsgKiAgICAgaW5mbyA9IE1QVl9MT0dfTEVWRUxfSU5GTwotKyAqICAgICB2ID0gTVBWX0xP R19MRVZFTF9WICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgZGVidWcgPSBN UFZfTE9HX0xFVkVMX0RFQlVHCi0rICogICAgIHRyYWNlID0gTVBWX0xPR19MRVZFTF9UUkFDRQot ICAqLwotLSAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5 eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX29ic2VydmVf cHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NDksIF9f cHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tICBfX3B5eF90XzEg PSBOVUxMOwotLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhv ZF9DaGVjayhfX3B5eF90XzYpKSkgewotLSAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VM RihfX3B5eF90XzYpOwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsKLS0gICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKLS0gICAg ICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24p OwotLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7Ci0tICAgIH0K LS0gIH0KLS0gIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80 ID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDc0OCwgX19w eXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSsgIF9fcHl4X3RfNiA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX1YpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNDAsIF9fcHl4X0wxX2Vycm9y KQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xh c3MoX19weXhfdF83LCBfX3B5eF9uX3NfdiwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAx NDAsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3Rf NiA9IDA7Ci0tICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19vYnNlcnZlX3By b3BlcnR5LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDc0OSwgX19weXhfTDFfZXJyb3Ip Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLS0gIFB5VHlwZV9N b2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7Ci0gCi0t ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzcwCi0tICogICAgICAgICByZXR1 cm4gZXJyCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTQxCi0rICogICAg IGluZm8gPSBNUFZfTE9HX0xFVkVMX0lORk8KLSsgKiAgICAgdiA9IE1QVl9MT0dfTEVWRUxfVgot KyAqICAgICBkZWJ1ZyA9IE1QVl9MT0dfTEVWRUxfREVCVUcgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICB0cmFjZSA9IE1QVl9MT0dfTEVWRUxfVFJBQ0UKLSAgKiAKLS0gKiAg ICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBkZWYgdW5v YnNlcnZlX3Byb3BlcnR5KHNlbGYsIGRhdGEpOgotLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl91 bm9ic2VydmVfcHJvcGVydHkiIiIKLSAgKi8KLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgNzcwLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX0RFQlVHKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTQxLCBfX3B5eF9MMV9lcnJvcikKLSAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9f cHl4X3RfNywgX19weXhfbl9zX2RlYnVnLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE0 MSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzEKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDIKLSsgKiAgICAgdiA9IE1QVl9MT0df TEVWRUxfVgotKyAqICAgICBkZWJ1ZyA9IE1QVl9MT0dfTEVWRUxfREVCVUcKLSsgKiAgICAgdHJh Y2UgPSBNUFZfTE9HX0xFVkVMX1RSQUNFICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsg KiAKLSAgKiAKLS0gKiAgICAgQF9lcnJvcnMKLS0gKiAgICAgZGVmIHVub2JzZXJ2ZV9wcm9wZXJ0 eShzZWxmLCBkYXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAg IiIiV3JhcHM6IG1wdl91bm9ic2VydmVfcHJvcGVydHkiIiIKLS0gKiAgICAgICAgIGFzc2VydCBz ZWxmLl9jdHgKLSAgKi8KLS0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2Jq ZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25f c191bm9ic2VydmVfcHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VS UigwLCA3NzEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0t ICBfX3B5eF90XzEgPSBOVUxMOwotLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgewotLSAgICBfX3B5eF90XzEgPSBQeU1l dGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsK LS0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhf dF82KTsKLS0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKLS0gICAgICBfX1B5eF9JTkNS RUYoZnVuY3Rpb24pOwotLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlv bik7Ci0tICAgIH0KLS0gIH0KLS0gIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlP YmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJS KDAsIDc3MCwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSsg IF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9H X0xFVkVMX1RSQUNFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTQy LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3RyYWNlLCBfX3B5eF90XzYp IDwgMCkgX19QWVhfRVJSKDAsIDE0MiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYo X19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0gIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmpl Y3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwg X19weXhfbl9zX3Vub2JzZXJ2ZV9wcm9wZXJ0eSwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigw LCA3NzEsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4 X3RfNyA9IDA7Ci0tICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjkzOAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEzNAotICAqIAotLSAq IGNkZWYgY2xhc3MgUmVuZGVyQ29udGV4dChvYmplY3QpOgotLSAqICAgICBBUElfT1BFTkdMID0g Im9wZW5nbCIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBVUERBVEVfRlJB TUUgPSBNUFZfUkVOREVSX1VQREFURV9GUkFNRQotICAqIAotKyAqIGNsYXNzIExvZ0xldmVsczog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBubyA9IE1QVl9MT0dfTEVWRUxf Tk9ORQotKyAqICAgICBmYXRhbCA9IE1QVl9MT0dfTEVWRUxfRkFUQUwKLSAgKi8KLS0gIGlmIChQ eURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX0FQSV9PUEVOR0wsIF9fcHl4X25f c19vcGVuZ2wpIDwgMCkgX19QWVhfRVJSKDAsIDkzOCwgX19weXhfTDFfZXJyb3IpCi0tICBQeVR5 cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRl eHQpOwotKyAgX19weXhfdF82ID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUoKChQeU9iamVjdCopJl9f UHl4X0RlZmF1bHRDbGFzc1R5cGUpLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfdF83LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgMTM0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzYpOwotKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19Mb2dMZXZlbHMs IF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTM0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTM5Ci0tICogY2RlZiBjbGFzcyBSZW5kZXJDb250ZXh0KG9iamVjdCk6Ci0tICog ICAgIEFQSV9PUEVOR0wgPSAib3BlbmdsIgotLSAqICAgICBVUERBVEVfRlJBTUUgPSBNUFZfUkVO REVSX1VQREFURV9GUkFNRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTQ1Ci0rICogCi0rICogCi0rICogY2xhc3MgRU9G UmVhc29uczogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAiIiJLbm93biBw b3NzaWJsZSB2YWx1ZXMgZm9yIEVuZE9mRmlsZVJlYWNoZWQgcmVhc29uLgotICAqIAotLSAqICAg ICBjZGVmOgotICAqLwotLSAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZf cmVuZGVyX3VwZGF0ZV9mbGFnKE1QVl9SRU5ERVJfVVBEQVRFX0ZSQU1FKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgOTM5LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4 X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfRU9GUmVhc29ucywgX19weXhfbl9zX0VPRlJlYXNvbnMs IChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9r cF9zX0tub3duX3Bvc3NpYmxlX3ZhbHVlc19mb3JfRW5kT2ZGKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMCwgMTQ1LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzcpOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0LCBfX3B5eF9u X3NfVVBEQVRFX0ZSQU1FLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDkzOSwgX19weXhf TDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLS0g IFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAwOQot LSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCi0tICogCi0tICogICAgIEBfZXJyb3JzICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgZGVmIHNldF9pY2NfcHJvZmlsZShz ZWxmLCBpY2NfYmxvYik6Ci0tICogICAgICAgICBjZGVmOgotKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjE1MAotKyAqICAgICBZb3Ugc2hvdWxkIGhhbmRsZSB0aGUgcG9zc2li aWxpdHkgdGhhdCB0aGUgcmVhc29uIG1heSBub3QgYmUgYW55IG9mIHRoZXNlIHZhbHVlcy4KLSsg KiAgICAgIiIiCi0rICogICAgIGVvZiA9IE1QVl9FTkRfRklMRV9SRUFTT05fRU9GICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgYWJvcnRlZCA9IE1QVl9FTkRfRklMRV9SRUFT T05fU1RPUAotKyAqICAgICBxdWl0ID0gTVBWX0VORF9GSUxFX1JFQVNPTl9RVUlUCi0rICovCi0r ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lbmRfZmlsZV9yZWFzb24o TVBWX0VORF9GSUxFX1JFQVNPTl9FT0YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCAxNTAsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7 Ci0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZW9mLCBf X3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE1MCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxNTEKLSsgKiAgICAgIiIiCi0rICogICAgIGVvZiA9IE1QVl9F TkRfRklMRV9SRUFTT05fRU9GCi0rICogICAgIGFib3J0ZWQgPSBNUFZfRU5EX0ZJTEVfUkVBU09O X1NUT1AgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBxdWl0ID0gTVBWX0VO RF9GSUxFX1JFQVNPTl9RVUlUCi0rICogICAgIGVycm9yID0gTVBWX0VORF9GSUxFX1JFQVNPTl9F UlJPUgotICAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4 X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDA5 LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9f bXB2X2VuZF9maWxlX3JlYXNvbihNUFZfRU5EX0ZJTEVfUkVBU09OX1NUT1ApOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNTEsIF9fcHl4X0wxX2Vycm9yKQotICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF83LCBfX3B5eF9uX3NfYWJvcnRlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxNTEs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAxMAotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE1MgotKyAqICAgICBlb2YgPSBNUFZfRU5E X0ZJTEVfUkVBU09OX0VPRgotKyAqICAgICBhYm9ydGVkID0gTVBWX0VORF9GSUxFX1JFQVNPTl9T VE9QCi0rICogICAgIHF1aXQgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX1FVSVQgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBlcnJvciA9IE1QVl9FTkRfRklMRV9SRUFTT05fRVJS T1IKLSAgKiAKLS0gKiAgICAgQF9lcnJvcnMKLS0gKiAgICAgZGVmIHNldF9pY2NfcHJvZmlsZShz ZWxmLCBpY2NfYmxvYik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg IGNkZWY6Ci0tICogICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJhbSBwYXJhbQotICAqLwotLSAg X19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgX19weXhfbl9zX3NldF9pY2NfcHJv ZmlsZSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwMTAsIF9fcHl4 X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tICBfX3B5eF90XzEgPSBO VUxMOwotLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9D aGVjayhfX3B5eF90XzYpKSkgewotLSAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzYpOwotLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsKLS0gICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKLS0gICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF8xKTsKLS0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwot LSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7Ci0tICAgIH0KLS0g IH0KLS0gIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdz KF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Ci0tICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7Ci0tICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEwMDksIF9fcHl4 X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0rICBfX3B5eF90XzYgPSBf X1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lbmRfZmlsZV9yZWFzb24oTVBWX0VORF9GSUxFX1JF QVNPTl9RVUlUKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTUyLCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3F1aXQsIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgMTUyLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAq KV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0 LCBfX3B5eF9uX3Nfc2V0X2ljY19wcm9maWxlLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAs IDEwMTAsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4 X3RfNyA9IDA7Ci0tICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X1JlbmRlckNvbnRleHQpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwMjgKLS0gKiAgICAgICAgIHJldHVybiBlcnIKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxNTMKLSsgKiAgICAgYWJvcnRlZCA9IE1QVl9FTkRfRklMRV9SRUFT T05fU1RPUAotKyAqICAgICBxdWl0ID0gTVBWX0VORF9GSUxFX1JFQVNPTl9RVUlUCi0rICogICAg IGVycm9yID0gTVBWX0VORF9GSUxFX1JFQVNPTl9FUlJPUiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0rICogCi0gICogCi0tICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgZGVmIHNldF9hbWJpZW50X2xpZ2h0KHNlbGYsIGx1eCk6Ci0tICog ICAgICAgICBjZGVmOgotICAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigwLCAxMDI4LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2VuZF9maWxlX3JlYXNvbihNUFZfRU5EX0ZJTEVfUkVBU09OX0VSUk9SKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTUzLCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNs YXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2Vycm9yLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJS KDAsIDE1MywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19w eXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI5 Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTQ1Ci0rICogCi0rICogCi0r ICogY2xhc3MgRU9GUmVhc29uczogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICAiIiJLbm93biBwb3NzaWJsZSB2YWx1ZXMgZm9yIEVuZE9mRmlsZVJlYWNoZWQgcmVhc29uLgot ICAqIAotLSAqICAgICBAX2Vycm9ycwotLSAqICAgICBkZWYgc2V0X2FtYmllbnRfbGlnaHQoc2Vs ZiwgbHV4KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgY2RlZjoK LS0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX3BhcmFtIHBhcmFtCi0gICovCi0tICBfX1B5eF9H ZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LCBfX3B5eF9uX3Nfc2V0X2FtYmllbnRfbGlnaHQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDI5LCBfX3B5eF9MMV9l cnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAgX19weXhfdF8xID0gTlVMTDsK LS0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF82KSkpIHsKLS0gICAgX19weXhfdF8xID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhf dF82KTsKLS0gICAgaWYgKGxpa2VseShfX3B5eF90XzEpKSB7Ci0tICAgICAgUHlPYmplY3QqIGZ1 bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7Ci0tICAgICAgX19QeXhf SU5DUkVGKF9fcHl4X3RfMSk7Ci0tICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAg ICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOwotLSAgICB9Ci0tICB9Ci0t ICBfX3B5eF90XzcgPSAoX19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzYsIF9fcHl4X3RfMSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF82LCBfX3B5eF90XzQpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOwotLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0t ICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMDI4LCBfX3B5eF9MMV9l cnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotKyAgX19weXhfdF82ID0gX19QeXhf UHkzQ2xhc3NDcmVhdGUoKChQeU9iamVjdCopJl9fUHl4X0RlZmF1bHRDbGFzc1R5cGUpLCBfX3B5 eF9uX3NfRU9GUmVhc29ucywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3RfNywgTlVMTCwgMCwg MSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE0NSwgX19weXhfTDFf ZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSsgIGlmIChQeURpY3RfU2V0SXRl bShfX3B5eF9kLCBfX3B5eF9uX3NfRU9GUmVhc29ucywgX19weXhfdF82KSA8IDApIF9fUFlYX0VS UigwLCAxNDUsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9f cHl4X3RfNiA9IDA7Ci0tICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25f c19zZXRfYW1iaWVudF9saWdodCwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCAxMDI5LCBf X3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAw OwotLSAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9S ZW5kZXJDb250ZXh0KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDY4Ci0tICogICAgICAgICByZXR1cm4gcmV0Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzE4Ci0gICogCi0tICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgZGVmIHJlbmRlcihzZWxmLAotLSAqICAgICAgICAgICAgICAgIG9w ZW5nbF9mYm89Tm9uZSwKLS0gKi8KLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhf dF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgMTA2OCwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK LS0KLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY5Ci0gICogCi0tICog ICAgIEBfZXJyb3JzCi0tICogICAgIGRlZiByZW5kZXIoc2VsZiwgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotLSAqICAgICAgICAgICAgICAgIG9wZW5nbF9mYm89Tm9uZSwKLS0gKiAgICAg ICAgICAgICAgICBmbGlwX3k9RmFsc2UsCi0rICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KToKLSsgKiAg ICAgICAgIHYgPSBmbigqaywgKiprdykKLSAgKi8KLS0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9f cHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Jl bmRlckNvbnRleHQsIF9fcHl4X25fc19yZW5kZXIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCAxMDY5LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzQpOwotLSAgX19weXhfdF8xID0gTlVMTDsKLS0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhP RFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsKLS0gICAgX19weXhf dF8xID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82KTsKLS0gICAgaWYgKGxpa2VseShfX3B5 eF90XzEpKSB7Ci0tICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfNik7Ci0tICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7Ci0tICAgICAg X19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLS0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Rf NiwgZnVuY3Rpb24pOwotLSAgICB9Ci0tICB9Ci0tICBfX3B5eF90XzcgPSAoX19weXhfdF8xKSA/ IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhfdF80 KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQpOwotLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykp IF9fUFlYX0VSUigwLCAxMDY4LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNyA9IFB5Q0Z1 bmN0aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81X2Vycm9ycywg TlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlmICh1bmxpa2VseSghX19weXhf dF83KSkgX19QWVhfRVJSKDAsIDMxOCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYo X19weXhfdF83KTsKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwot LSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfcmVuZGVyLCBfX3B5 eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDEwNjksIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKFB5 RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19lcnJvcnMsIF9fcHl4X3RfNykgPCAwKSBf X1BZWF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzcpOyBfX3B5eF90XzcgPSAwOwotLSAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTMyCi0tICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGluaXRfcGFyYW1zLCAqYXJncywgKiprd2FyZ3MpCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MzI2Ci0rICogCi0rICogCi0rICogY2xhc3MgTVBWRXJyb3IoRXhjZXB0aW9u KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBjb2RlID0gTm9uZQotICAq IAotLSAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLS0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotLSAqICAgICAgICAgVGhyZWFk Ll9faW5pdF9fKHNlbGYpCi0gICovCi0tICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4 X3RfNywgX19weXhfbl9zX1RocmVhZCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhf RVJSKDAsIDExMzIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF83ID0gUHlUdXBsZV9OZXco MSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDMyNiwgX19weXhfTDFf ZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLS0gIF9fcHl4X3RfNiA9IFB5VHVw bGVfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTMyLCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopKCYoKFB5VHlwZU9i amVjdCopUHlFeGNfRXhjZXB0aW9uKVswXSkpKTsKLSsgIF9fUHl4X0dJVkVSRUYoKChQeU9iamVj dCAqKSgmKChQeVR5cGVPYmplY3QqKVB5RXhjX0V4Y2VwdGlvbilbMF0pKSk7Ci0rICBQeVR1cGxl X1NFVF9JVEVNKF9fcHl4X3RfNywgMCwgKChQeU9iamVjdCAqKSgmKChQeVR5cGVPYmplY3QqKVB5 RXhjX0V4Y2VwdGlvbilbMF0pKSk7Ci0rICBfX3B5eF90XzYgPSBfX1B5eF9DYWxjdWxhdGVNZXRh Y2xhc3MoTlVMTCwgX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgMzI2LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwot LSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzcpOwotLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzYsIDAsIF9fcHl4X3RfNyk7Ci0tICBfX3B5eF90XzcgPSAwOwotLSAgX19weXhfdF83ID0gX19Q eXhfQ2FsY3VsYXRlTWV0YWNsYXNzKE5VTEwsIF9fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19w eXhfdF83KSkgX19QWVhfRVJSKDAsIDExMzIsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfNyk7Ci0tICBfX3B5eF90XzQgPSBfX1B5eF9QeTNNZXRhY2xhc3NQcmVwYXJl KF9fcHl4X3RfNywgX19weXhfdF82LCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIF9fcHl4X25f c19DYWxsYmFja1RocmVhZCwgKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJf bGlic19tcHYsIChQeU9iamVjdCAqKSBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBf X1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzQgPSBfX1B5eF9Q eTNNZXRhY2xhc3NQcmVwYXJlKF9fcHl4X3RfNiwgX19weXhfdF83LCBfX3B5eF9uX3NfTVBWRXJy b3IsIF9fcHl4X25fc19NUFZFcnJvciwgKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X25fc192aWRj dXR0ZXJfbGlic19tcHYsIChQeU9iamVjdCAqKSBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzQpKSBfX1BZWF9FUlIoMCwgMzI2LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzMK LSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjcKLSAgKiAKLS0gKiBjbGFz cyBDYWxsYmFja1RocmVhZChUaHJlYWQpOgotLSAqICAgICBkZWYgX19pbml0X18oc2VsZik6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhz ZWxmKQotLSAqICAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCi0rICogY2xhc3MgTVBWRXJyb3Io RXhjZXB0aW9uKToKLSsgKiAgICAgY29kZSA9IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotKyAqIAotKyAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZSk6Ci0gICovCi0tICBfX3B5 eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTRDYWxsYmFja1RocmVhZF8xX19pbml0X18sIDAsIF9fcHl4X25fc19DYWxsYmFja1Ro cmVhZF9fX2luaXQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2Qs ICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18zOCkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAxMTMzLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhf bl9zX2luaXQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMTEzMywgX19weXhfTDFfZXJy b3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgIGlmIChf X1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19jb2RlLCBQeV9Ob25lKSA8 IDApIF9fUFlYX0VSUigwLCAzMjcsIF9fcHl4X0wxX2Vycm9yKQotIAotLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNDEKLS0gKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9 IEZhbHNlCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI5Ci0rICogICAg IGNvZGUgPSBOb25lCi0gICogCi0tICogICAgIGRlZiBzaHV0ZG93bihzZWxmKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gVHJ1ZQot LSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKLSsgKiAgICAgZGVmIF9faW5pdF9fKHNl bGYsIGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBzZWxmLmNv ZGUgPSBlCi0rICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVycl9jCi0gICovCi0tICBfX3B5 eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTRDYWxsYmFja1RocmVhZF8zc2h1dGRvd24sIDAsIF9fcHl4X25fc19DYWxsYmFja1Ro cmVhZF9zaHV0ZG93biwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhf ZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzQwKSk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDExNDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0g X19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhN UFZFcnJvcl8xX19pbml0X18sIDAsIF9fcHl4X25fc19NUFZFcnJvcl9fX2luaXQsIE5VTEwsIF9f cHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9j b2Rlb2JqX18yNikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMjks IF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBpZiAoX19Q eXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9fcHl4X3Rf MSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE0MSwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3NfaW5pdCwgX19weXhfdF8xKSA8IDAp IF9fUFlYX0VSUigwLCAzMjksIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTE0NgotLSAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyNgotICAqIAotLSAqICAgICBkZWYgY2FsbChzZWxm KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICAgICAgc2VsZi5sb2NrLnJl bGVhc2UoKQotKyAqIAotKyAqIGNsYXNzIE1QVkVycm9yKEV4Y2VwdGlvbik6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgY29kZSA9IE5vbmUKLSAgKiAKLSAgKi8KLS0gIF9f cHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzVjYWxsLCAwLCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJl YWRfY2FsbCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQ eU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzQyKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDExNDYsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhf UHkzQ2xhc3NDcmVhdGUoX19weXhfdF82LCBfX3B5eF9uX3NfTVBWRXJyb3IsIF9fcHl4X3RfNywg X19weXhfdF80LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMzI2LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot LSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX2NhbGwsIF9f cHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE0NiwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAo UHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX01QVkVycm9yLCBfX3B5eF90XzEpIDwg MCkgX19QWVhfRVJSKDAsIDMyNiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5 eF90XzQgPSAwOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0r ICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ5Ci0tICogICAgICAgICBzZWxmLmxvY2sucmVs ZWFzZSgpCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQwCi0rICogICAg ICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgZSkKLSAgKiAKLS0gKiAgICAgZGVmIHNldChz ZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgICAg IHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjawotKyAqIGNsYXNzIFB5TVBWRXJyb3IoRXhjZXB0aW9u KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBwYXNzCi0gICogCi0gICov Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF83c2V0LCAwLCBfX3B5eF9uX3NfQ2FsbGJh Y2tUaHJlYWRfc2V0LCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9k LCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fNDQpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMTE0OSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzcgPSBQ eVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMzQw LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotKyAgX19QeXhf SU5DUkVGKCgoUHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBd KSkpOwotKyAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlF eGNfRXhjZXB0aW9uKVswXSkpKTsKLSsgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCAo KFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0aW9uKVswXSkpKTsKLSsg IF9fcHl4X3RfNiA9IF9fUHl4X0NhbGN1bGF0ZU1ldGFjbGFzcyhOVUxMLCBfX3B5eF90XzcpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAzNDAsIF9fcHl4X0wxX2Vycm9y KQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICBfX3B5eF90XzQgPSBfX1B5eF9QeTNN ZXRhY2xhc3NQcmVwYXJlKF9fcHl4X3RfNiwgX19weXhfdF83LCBfX3B5eF9uX3NfUHlNUFZFcnJv ciwgX19weXhfbl9zX1B5TVBWRXJyb3IsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3Nfdmlk Y3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhf dF80KSkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYo X19weXhfdF80KTsKLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKF9fcHl4X3Rf NiwgX19weXhfbl9zX1B5TVBWRXJyb3IsIF9fcHl4X3RfNywgX19weXhfdF80LCBOVUxMLCAwLCAx KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzQwLCBfX3B5eF9MMV9l cnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX3NldCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VS UigwLCAxMTQ5LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9k LCBfX3B5eF9uX3NfUHlNUFZFcnJvciwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAzNDAs IF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9 IDA7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotKyAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTE1MgotLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCi0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQzCi0rICogICAgIHBhc3MKLSAgKiAKLS0g KiAgICAgZGVmIHJ1bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAg ICAgICAgd2hpbGUgbm90IHNlbGYuaXNzaHV0ZG93bjoKLS0gKiAgICAgICAgICAgICBzZWxmLmxv Y2suYWNxdWlyZShUcnVlKQotKyAqIGNkZWYgX2NhbGxiYWNrcyA9IGRpY3QoKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogY2RlZiBfcmVwbHlfdXNlcmRhdGFzID0gZGljdCgpCi0r ICogCi0rICovCi0rICBfX3B5eF90XzcgPSBfX1B5eF9QeURpY3RfTmV3UHJlc2l6ZWQoMCk7IGlm ICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDM0MywgX19weXhfTDFfZXJyb3Ip Ci0rICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSsgIF9fUHl4X1hHT1RSRUYoX19weXhfdl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NhbGxiYWNrcyk7Ci0rICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3RfNyk7Ci0rICBf X1B5eF9HSVZFUkVGKF9fcHl4X3RfNyk7Ci0rICBfX3B5eF90XzcgPSAwOwotKwotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NAotKyAqIAotKyAqIGNkZWYgX2NhbGxiYWNr cyA9IGRpY3QoKQotKyAqIGNkZWYgX3JlcGx5X3VzZXJkYXRhcyA9IGRpY3QoKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogCi0rICogY2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0 KToKLSsgKi8KLSsgIF9fcHl4X3RfNyA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMzQ0LCBfX3B5eF9MMV9lcnJvcikK LSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotKyAgX19QeXhfWEdPVFJFRihfX3B5eF92Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzKTsKLSsgIF9fUHl4X0RFQ1JFRl9T RVQoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcywgX19weXhf dF83KTsKLSsgIF9fUHl4X0dJVkVSRUYoX19weXhfdF83KTsKLSsgIF9fcHl4X3RfNyA9IDA7Ci0r Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ2Ci0rICogY2RlZiBfcmVw bHlfdXNlcmRhdGFzID0gZGljdCgpCi0rICogCi0rICogY2xhc3MgX1JlcGx5VXNlckRhdGEob2Jq ZWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBkZWYgX19pbml0X18o c2VsZiwgZGF0YSk6Ci0rICogICAgICAgICBzZWxmLmNvdW50ZXIgPSAwCi0rICovCi0rICBfX3B5 eF90XzcgPSBfX1B5eF9DYWxjdWxhdGVNZXRhY2xhc3MoTlVMTCwgX19weXhfdHVwbGVfXzI3KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotKyAgX19weXhfdF82ID0gX19QeXhfUHkz TWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzcsIF9fcHl4X3R1cGxlX18yNywgX19weXhfbl9zX1Jl cGx5VXNlckRhdGEsIF9fcHl4X25fc19SZXBseVVzZXJEYXRhLCAoUHlPYmplY3QgKikgTlVMTCwg X19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0ICopIE5VTEwpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAzNDYsIF9fcHl4X0wxX2Vycm9yKQotKyAg X19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzQ3Ci0rICogCi0rICogY2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KToKLSsg KiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogICAgICAgICBzZWxmLmNvdW50ZXIgPSAwCi0rICogICAgICAgICBzZWxmLmRhdGEg PSBkYXRhCi0gICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhf bWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF85cnVuLCAwLCBfX3B5 eF9uX3NfQ2FsbGJhY2tUaHJlYWRfcnVuLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNf bXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fNDYpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE1MiwgX19weXhfTDFfZXJyb3IpCi0tICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5 eF90XzQsIF9fcHl4X25fc19ydW4sIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE1Miwg X19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKLSsgIF9fcHl4X3RfNCA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzFfX2luaXRfXywgMCwgX19weXhfbl9z X1JlcGx5VXNlckRhdGFfX19pbml0LCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2 LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMjkpKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzQpOwotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NiwgX19weXhfbl9zX2luaXQsIF9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5 eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTcKLS0gKiAgICAgICAg ICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBpZiBzZWxmLmNhbGxiYWNrIGVs c2UgTm9uZQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1MgotKyAqICAg ICAgICAgc2VsZi5vYnNlcnZlZCA9IEZhbHNlCi0rICogCi0rICogICAgIGRlZiBhZGQoc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgIHNlbGYuY291bnRlciAr PSAxCi0gICogCi0tICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgICAgICB0cnk6Ci0tICogICAgICAgICAg ICAgY2FsbGJhY2soKQotICAqLwotLSAgX19weXhfdF8xID0gX19QeXhfQ3lGdW5jdGlvbl9OZXco Jl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTFtcHZf Y2FsbGJhY2ssIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9tcHZfY2FsbGJhY2ssIE5VTEws IF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5 eF9jb2Rlb2JqX180OCkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAx MTU3LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX21wdl9jYWxsYmFjaywg X19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgX19weXhfdF80ID0gX19Q eXhfQ3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1Jl cGx5VXNlckRhdGFfM2FkZCwgMCwgX19weXhfbl9zX1JlcGx5VXNlckRhdGFfYWRkLCBOVUxMLCBf X3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhf Y29kZW9ial9fMzEpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzUy LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNiwgX19weXhfbl9zX2FkZCwgX19weXhfdF80KSA8 IDApIF9fUFlYX0VSUigwLCAzNTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEzMgotLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3Bh cmFtcywgKmFyZ3MsICoqa3dhcmdzKQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjM1NQotKyAqICAgICAgICAgc2VsZi5jb3VudGVyICs9IDEKLSsgKiAKLSsgKiAgICAgZGVm IHJlbW92ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg c2VsZi5jb3VudGVyIC09IDEKLSAgKiAKLS0gKiBjbGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICogICAgIGRlZiBfX2luaXRfXyhzZWxm KToKLS0gKiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQotICAqLwotLSAgX19weXhfdF8x ID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUoX19weXhfdF83LCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJl YWQsIF9fcHl4X3RfNiwgX19weXhfdF80LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKLS0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3Nf Q2FsbGJhY2tUaHJlYWQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhf TDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsg IF9fcHl4X3RfNCA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzVyZW1vdmUsIDAsIF9fcHl4X25fc19SZXBseVVz ZXJEYXRhX3JlbW92ZSwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhf ZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzMzKSk7IGlmICh1bmxpa2VseSghX19weXhf dF80KSkgX19QWVhfRVJSKDAsIDM1NSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYo X19weXhfdF80KTsKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzYsIF9fcHl4 X25fc19yZW1vdmUsIF9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzU1LCBfX3B5eF9MMV9l cnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgX19Q eXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0tICBfX1B5eF9ERUNSRUYoX19w eXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEKLS0g KiBkZWYgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZChfX3B5eF90eXBlLCBsb25nIF9f cHl4X2NoZWNrc3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LS0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKLS0gKiAgICAgY2RlZiBvYmpl Y3QgX19weXhfcmVzdWx0Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ2 Ci0rICogY2RlZiBfcmVwbHlfdXNlcmRhdGFzID0gZGljdCgpCi0rICogCi0rICogY2xhc3MgX1Jl cGx5VXNlckRhdGEob2JqZWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAg ICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6Ci0rICogICAgICAgICBzZWxmLmNvdW50ZXIgPSAw Ci0gICovCi0tICBfX3B5eF90XzYgPSBQeUNGdW5jdGlvbl9OZXdFeCgmX19weXhfbWRlZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN19fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQsIE5VTEws IF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90 XzYpOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19weXhfdW5waWNr bGVfRW5kT2ZGaWxlUmVhY2hlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigxLCAxLCBfX3B5 eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNCA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKF9fcHl4X3Rf NywgX19weXhfbl9zX1JlcGx5VXNlckRhdGEsIF9fcHl4X3R1cGxlX18yNywgX19weXhfdF82LCBO VUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzQ2LCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAgaWYgKFB5RGlj dF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19SZXBseVVzZXJEYXRhLCBfX3B5eF90XzQpIDwg MCkgX19QWVhfRVJSKDAsIDM0NiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19w eXhfdF80KTsgX19weXhfdF80ID0gMDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5 eF90XzYgPSAwOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0g Ci0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMQotLSAqICAgICAgICAgX19weXhfdW5waWNrbGVf RW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKDxFbmRPZkZpbGVSZWFjaGVkPiBfX3B5eF9yZXN1 bHQsIF9fcHl4X3N0YXRlKQotLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0tICogY2RlZiBf X3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoRW5kT2ZGaWxlUmVhY2hl ZCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotLSAqICAgICBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9zdGF0ZVswXTsgX19w eXhfcmVzdWx0LnJlYXNvbiA9IF9fcHl4X3N0YXRlWzFdCi0tICogICAgIGlmIGxlbihfX3B5eF9z dGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6Ci0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDExCi0rICogICAgICMgICAgICAgICBtcHZf cmVzdW1lKHNlbGYuX2N0eCkKLSsgKiAKLSsgKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotKyAqICAgICBkZWYgcmVxdWVzdF9ldmVudChzZWxmLCBldmVudCwgZW5h YmxlKToKLSsgKiAgICAgICAgICIiIkVuYWJsZSBvciBkaXNhYmxlIGEgZ2l2ZW4gZXZlbnQuCi0g ICovCi0tICBfX3B5eF90XzYgPSBQeUNGdW5jdGlvbl9OZXdFeCgmX19weXhfbWRlZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfOV9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2gsIE5VTEwsIF9fcHl4 X25fc192aWRjdXR0ZXJfbGlic19tcHYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgNDExLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzYpOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19weXhfdW5waWNr bGVfSW5wdXREaXNwYXRjaCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9M MV9lcnJvcikKLS0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAot LSAgLyogIih0cmVlIGZyYWdtZW50KSI6MQotLSAqIGRlZiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNz YWdlKF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRlKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVF cnJvcgotLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0MTIKLSsgKiAKLSsgKiAgICAgQF9lcnJvcnMKLSsgKiAgICAg ZGVmIHJlcXVlc3RfZXZlbnQoc2VsZiwgZXZlbnQsIGVuYWJsZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICIiIkVuYWJsZSBvciBkaXNhYmxlIGEgZ2l2ZW4gZXZl bnQuCi0rICogCi0gICovCi0tICBfX3B5eF90XzYgPSBQeUNGdW5jdGlvbl9OZXdFeCgmX19weXhf bWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTFfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCBO VUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzYpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKLS0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfcHl4X3Vu cGlja2xlX0xvZ01lc3NhZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMSwgMSwgX19weXhf TDFfZXJyb3IpCi0rICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAq KV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCBfX3B5eF9uX3NfcmVx dWVzdF9ldmVudCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDQxMiwg X19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSsgIF9fcHl4X3Rf MSA9IE5VTEw7Ci0rICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0 aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7Ci0rICAgIF9fcHl4X3RfMSA9IFB5TWV0aG9kX0dFVF9T RUxGKF9fcHl4X3RfNik7Ci0rICAgIGlmIChsaWtlbHkoX19weXhfdF8xKSkgewotKyAgICAgIFB5 T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzYpOwotKyAg ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlv bik7Ci0rICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1bmN0aW9uKTsKLSsgICAg fQotKyAgfQotKyAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9D YWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90 XzQgPSAwOwotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDExLCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5 T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2Rp Y3QsIF9fcHl4X25fc19yZXF1ZXN0X2V2ZW50LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAs IDQxMiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhf dF83ID0gMDsKLSsgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCk7Ci0gCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMQotLSAqICAgICAg ICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKDxMb2dNZXNzYWdlPiBfX3B5 eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQotLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0tICog Y2RlZiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoTG9nTWVzc2FnZSBfX3B5 eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotLSAqICAgICBfX3B5eF9yZXN1bHQubGV2ZWwgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVz dWx0LmxvZ19sZXZlbCA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQucHJlZml4ID0gX19w eXhfc3RhdGVbMl07IF9fcHl4X3Jlc3VsdC50ZXh0ID0gX19weXhfc3RhdGVbM10KLS0gKiAgICAg aWYgbGVuKF9fcHl4X3N0YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0 X18nKToKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjkKLSsgKiAgICAg ICAgIHJldHVybiBlcnIKLSsgKiAKLSsgKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotKyAqICAgICBkZWYgc2V0X2xvZ19sZXZlbChzZWxmLCBsb2dsZXZlbCk6Ci0r ICogICAgICAgICAiIiJXcmFwczogbXB2X3JlcXVlc3RfbG9nX21lc3NhZ2VzIiIiCi0gICovCi0t ICBfX3B5eF90XzYgPSBQeUNGdW5jdGlvbl9OZXdFeCgmX19weXhfbWRlZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgTlVMTCwgX19weXhfbl9zX3ZpZGN1 dHRlcl9saWJzX21wdik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYs IF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCA0MjksIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBp ZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9Qcm9wZXJ0 eSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogIih0cmVlIGZy YWdtZW50KSI6MQotLSAqIGRlZiBfX3B5eF91bnBpY2tsZV9FdmVudChfX3B5eF90eXBlLCBsb25n IF9fcHl4X2NoZWNrc3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLS0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKLS0gKiAgICAgY2RlZiBv YmplY3QgX19weXhfcmVzdWx0Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDMwCi0rICogCi0rICogICAgIEBfZXJyb3JzCi0rICogICAgIGRlZiBzZXRfbG9nX2xldmVsKHNl bGYsIGxvZ2xldmVsKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg IiIiV3JhcHM6IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyIiIgotKyAqICAgICAgICAgYXNzZXJ0 IHNlbGYuX2N0eAotICAqLwotLSAgX19weXhfdF82ID0gUHlDRnVuY3Rpb25fTmV3RXgoJl9fcHl4 X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE1X19weXhfdW5waWNrbGVfRXZlbnQsIE5VTEws IF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fUHl4X0dPVFJFRihfX3B5eF90 XzYpOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19weXhfdW5waWNr bGVfRXZlbnQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCBfX3B5eF9uX3Nfc2V0X2xvZ19sZXZl bCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDQzMCwgX19weXhfTDFf ZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSsgIF9fcHl4X3RfMSA9IE5VTEw7 Ci0rICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNr KF9fcHl4X3RfNikpKSB7Ci0rICAgIF9fcHl4X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfNik7Ci0rICAgIGlmIChsaWtlbHkoX19weXhfdF8xKSkgewotKyAgICAgIFB5T2JqZWN0KiBm dW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzYpOwotKyAgICAgIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzEpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0rICAg ICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1bmN0aW9uKTsKLSsgICAgfQotKyAgfQot KyAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19w eXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfNiwgX19weXhfdF80KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwot KyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDI5LCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICop X19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4 X25fc19zZXRfbG9nX2xldmVsLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDQzMCwgX19w eXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsK LSsgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCk7Ci0gCi0tICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMQotLSAqICAgICAgICAgX19weXhf dW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZSg8RXZlbnQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3Rh dGUpCi0tICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKLS0gKiBjZGVmIF9fcHl4X3VucGlja2xl X0V2ZW50X19zZXRfc3RhdGUoRXZlbnQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLS0gKiAgICAgX19weXhfcmVzdWx0LmRhdGEg PSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMV07IF9f cHl4X3Jlc3VsdC5pZCA9IF9fcHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQucmVwbHlfdXNlcmRh dGEgPSBfX3B5eF9zdGF0ZVszXQotLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQg aGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgotKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQ0MAotKyAqICAgICAgICAgcmV0dXJuIGVycgotKyAqIAotKyAqICAg ICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGRlZiBsb2Fk X2NvbmZpZyhzZWxmLCBmaWxlbmFtZSk6Ci0rICogICAgICAgICAiIiJXcmFwczogbXB2X2xvYWRf Y29uZmlnX2ZpbGUiIiIKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZf X3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xN19fcHl4X3VucGlja2xlX1JlbmRlckZy YW1lSW5mbywgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NDAsIF9fcHl4X0wxX2Vycm9yKQotICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwg X19weXhfbl9zX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8sIF9fcHl4X3RfNikgPCAwKSBf X1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxCi0tICogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0tICog IyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQotLSAqICMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0NDEKLSsgKiAKLSsgKiAgICAgQF9lcnJvcnMKLSsgKiAgICAgZGVmIGxvYWRf Y29uZmlnKHNlbGYsIGZpbGVuYW1lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICAgICAgIiIiV3JhcHM6IG1wdl9sb2FkX2NvbmZpZ19maWxlIiIiCi0rICogICAgICAgICBh c3NlcnQgc2VsZi5fY3R4Ci0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeURpY3RfTmV3UHJl c2l6ZWQoMCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4 X0wxX2Vycm9yKQotLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoUHlEaWN0X1Nl dEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3Rlc3QsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIo MCwgMSwgX19weXhfTDFfZXJyb3IpCi0tICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKLS0KLS0gIC8qLS0tIFdyYXBwZWQgdmFycyBjb2RlIC0tLSovCi0tCi0tICBnb3Rv IF9fcHl4X0wwOwotLSAgX19weXhfTDFfZXJyb3I6OwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzEpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzQpOwotLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOwotLSAgX19QeXhfWERFQ1JFRihf X3B5eF90XzcpOwotLSAgaWYgKF9fcHl4X20pIHsKLS0gICAgaWYgKF9fcHl4X2QpIHsKLS0gICAg ICBfX1B5eF9BZGRUcmFjZWJhY2soImluaXQgdmlkY3V0dGVyLmxpYnMubXB2IiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICAgIH0KLS0gICAgUHlfQ0xF QVIoX19weXhfbSk7Ci0tICB9IGVsc2UgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7Ci0tICAgIFB5 RXJyX1NldFN0cmluZyhQeUV4Y19JbXBvcnRFcnJvciwgImluaXQgdmlkY3V0dGVyLmxpYnMubXB2 Iik7Ci0tICB9Ci0tICBfX3B5eF9MMDo7Ci0tICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKLS0gICNpZiBDWVRIT05fUEVQNDg5X01VTFRJX1BIQVNFX0lOSVQKLS0gIHJldHVybiAoX19w eXhfbSAhPSBOVUxMKSA/IDAgOiAtMTsKLS0gICNlbGlmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwot LSAgcmV0dXJuIF9fcHl4X207Ci0tICAjZWxzZQotLSAgcmV0dXJuOwotLSAgI2VuZGlmCi0tfQot LQotLS8qIC0tLSBSdW50aW1lIHN1cHBvcnQgY29kZSAtLS0gKi8KLS0vKiBSZWZuYW5ueSAqLwot LSNpZiBDWVRIT05fUkVGTkFOTlkKLS1zdGF0aWMgX19QeXhfUmVmTmFubnlBUElTdHJ1Y3QgKl9f UHl4X1JlZk5hbm55SW1wb3J0QVBJKGNvbnN0IGNoYXIgKm1vZG5hbWUpIHsKLS0gICAgUHlPYmpl Y3QgKm0gPSBOVUxMLCAqcCA9IE5VTEw7Ci0tICAgIHZvaWQgKnIgPSBOVUxMOwotLSAgICBtID0g UHlJbXBvcnRfSW1wb3J0TW9kdWxlKG1vZG5hbWUpOwotLSAgICBpZiAoIW0pIGdvdG8gZW5kOwot LSAgICBwID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhtLCAiUmVmTmFubnlBUEkiKTsKLS0gICAg aWYgKCFwKSBnb3RvIGVuZDsKLS0gICAgciA9IFB5TG9uZ19Bc1ZvaWRQdHIocCk7Ci0tZW5kOgot LSAgICBQeV9YREVDUkVGKHApOwotLSAgICBQeV9YREVDUkVGKG0pOwotLSAgICByZXR1cm4gKF9f UHl4X1JlZk5hbm55QVBJU3RydWN0ICopcjsKLS19Ci0tI2VuZGlmCi0tCi0tLyogUHlPYmplY3RH ZXRBdHRyU3RyICovCi0tI2lmIENZVEhPTl9VU0VfVFlQRV9TTE9UUwotLXN0YXRpYyBDWVRIT05f SU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKFB5T2JqZWN0KiBvYmos IFB5T2JqZWN0KiBhdHRyX25hbWUpIHsKLS0gICAgUHlUeXBlT2JqZWN0KiB0cCA9IFB5X1RZUEUo b2JqKTsKLS0gICAgaWYgKGxpa2VseSh0cC0+dHBfZ2V0YXR0cm8pKQotLSAgICAgICAgcmV0dXJu IHRwLT50cF9nZXRhdHRybyhvYmosIGF0dHJfbmFtZSk7Ci0tI2lmIFBZX01BSk9SX1ZFUlNJT04g PCAzCi0tICAgIGlmIChsaWtlbHkodHAtPnRwX2dldGF0dHIpKQotLSAgICAgICAgcmV0dXJuIHRw LT50cF9nZXRhdHRyKG9iaiwgUHlTdHJpbmdfQVNfU1RSSU5HKGF0dHJfbmFtZSkpOwotLSNlbmRp ZgotLSAgICByZXR1cm4gUHlPYmplY3RfR2V0QXR0cihvYmosIGF0dHJfbmFtZSk7Ci0tfQotLSNl bmRpZgotLQotLS8qIEdldEJ1aWx0aW5OYW1lICovCi0tc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9H ZXRCdWlsdGluTmFtZShQeU9iamVjdCAqbmFtZSkgewotLSAgICBQeU9iamVjdCogcmVzdWx0ID0g X19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF9iLCBuYW1lKTsKLS0gICAgaWYgKHVubGlr ZWx5KCFyZXN1bHQpKSB7Ci0tICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTmFtZUVycm9yLAot LSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKLS0gICAgICAgICAgICAibmFtZSAnJVUnIGlzIG5v dCBkZWZpbmVkIiwgbmFtZSk7Ci0tI2Vsc2UKLS0gICAgICAgICAgICAibmFtZSAnJS4yMDBzJyBp cyBub3QgZGVmaW5lZCIsIFB5U3RyaW5nX0FTX1NUUklORyhuYW1lKSk7Ci0tI2VuZGlmCi0rICBf X1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCBfX3B5eF9uX3NfbG9hZF9jb25maWcpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA0NDEsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0rICBfX3B5eF90XzEgPSBOVUxMOwotKyAgaWYg KENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90 XzYpKSkgewotKyAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOwot KyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsKLSsgICAgICBQeU9iamVjdCogZnVuY3Rpb24g PSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKLSsgICAgICBfX1B5eF9JTkNSRUYo X19weXhfdF8xKTsKLSsgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAgICAgIF9fUHl4 X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7Ci0gICAgIH0KLS0gICAgcmV0dXJuIHJl c3VsdDsKLS19Ci0rICB9Ci0rICBfX3B5eF90XzcgPSAoX19weXhfdF8xKSA/IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhfdF80KSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQpOwotKyAgX19QeXhfWERFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7 IF9fcHl4X3RfNCA9IDA7Ci0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigw LCA0NDAsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0rICBf X1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSsgIGlmIChQeURpY3RfU2V0 SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dC0+dHBfZGljdCwgX19weXhfbl9zX2xvYWRfY29uZmlnLCBfX3B5eF90XzcpIDwgMCkgX19QWVhf RVJSKDAsIDQ0MSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsg X19weXhfdF83ID0gMDsKLSsgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCk7Ci0gCi0tLyogUHlEaWN0VmVyc2lvbmluZyAqLwotLSNpZiBD WVRIT05fVVNFX0RJQ1RfVkVSU0lPTlMgJiYgQ1lUSE9OX1VTRV9UWVBFX1NMT1RTCi0tc3RhdGlj IENZVEhPTl9JTkxJTkUgUFlfVUlOVDY0X1QgX19QeXhfZ2V0X3RwX2RpY3RfdmVyc2lvbihQeU9i amVjdCAqb2JqKSB7Ci0tICAgIFB5T2JqZWN0ICpkaWN0ID0gUHlfVFlQRShvYmopLT50cF9kaWN0 OwotLSAgICByZXR1cm4gbGlrZWx5KGRpY3QpID8gX19QWVhfR0VUX0RJQ1RfVkVSU0lPTihkaWN0 KSA6IDA7Ci0tfQotLXN0YXRpYyBDWVRIT05fSU5MSU5FIFBZX1VJTlQ2NF9UIF9fUHl4X2dldF9v YmplY3RfZGljdF92ZXJzaW9uKFB5T2JqZWN0ICpvYmopIHsKLS0gICAgUHlPYmplY3QgKipkaWN0 cHRyID0gTlVMTDsKLS0gICAgUHlfc3NpemVfdCBvZmZzZXQgPSBQeV9UWVBFKG9iaiktPnRwX2Rp Y3RvZmZzZXQ7Ci0tICAgIGlmIChvZmZzZXQpIHsKLS0jaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9D UFlUSE9OCi0tICAgICAgICBkaWN0cHRyID0gKGxpa2VseShvZmZzZXQgPiAwKSkgPyAoUHlPYmpl Y3QgKiopICgoY2hhciAqKW9iaiArIG9mZnNldCkgOiBfUHlPYmplY3RfR2V0RGljdFB0cihvYmop OwotLSNlbHNlCi0tICAgICAgICBkaWN0cHRyID0gX1B5T2JqZWN0X0dldERpY3RQdHIob2JqKTsK LS0jZW5kaWYKLS0gICAgfQotLSAgICByZXR1cm4gKGRpY3RwdHIgJiYgKmRpY3RwdHIpID8gX19Q WVhfR0VUX0RJQ1RfVkVSU0lPTigqZGljdHB0cikgOiAwOwotLX0KLS1zdGF0aWMgQ1lUSE9OX0lO TElORSBpbnQgX19QeXhfb2JqZWN0X2RpY3RfdmVyc2lvbl9tYXRjaGVzKFB5T2JqZWN0KiBvYmos IFBZX1VJTlQ2NF9UIHRwX2RpY3RfdmVyc2lvbiwgUFlfVUlOVDY0X1Qgb2JqX2RpY3RfdmVyc2lv bikgewotLSAgICBQeU9iamVjdCAqZGljdCA9IFB5X1RZUEUob2JqKS0+dHBfZGljdDsKLS0gICAg aWYgKHVubGlrZWx5KCFkaWN0KSB8fCB1bmxpa2VseSh0cF9kaWN0X3ZlcnNpb24gIT0gX19QWVhf R0VUX0RJQ1RfVkVSU0lPTihkaWN0KSkpCi0tICAgICAgICByZXR1cm4gMDsKLS0gICAgcmV0dXJu IG9ial9kaWN0X3ZlcnNpb24gPT0gX19QeXhfZ2V0X29iamVjdF9kaWN0X3ZlcnNpb24ob2JqKTsK LS19Ci0tI2VuZGlmCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTczCi0r ICogICAgICAgICByZXR1cm4gcmVzdWx0Ci0rICogCi0rICogICAgIEBfZXJyb3JzICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgZGVmIGdldF9wcm9wZXJ0eV9hc3luYyhzZWxm LCBwcm9wLCBkYXRhPU5vbmUpOgotKyAqICAgICAgICAgIiIiR2V0cyB0aGUgdmFsdWUgb2YgYSBw cm9wZXJ0eSBhc3luY2hyb25vdXNseS4KLSsgKi8KLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgNTczLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOwotIAotLS8qIEdldE1vZHVsZUdsb2JhbE5hbWUgKi8KLS0jaWYgQ1lUSE9OX1VTRV9E SUNUX1ZFUlNJT05TCi0tc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9fR2V0TW9kdWxlR2xvYmFsTmFt ZShQeU9iamVjdCAqbmFtZSwgUFlfVUlOVDY0X1QgKmRpY3RfdmVyc2lvbiwgUHlPYmplY3QgKipk aWN0X2NhY2hlZF92YWx1ZSkKLS0jZWxzZQotLXN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0 ICpfX1B5eF9fR2V0TW9kdWxlR2xvYmFsTmFtZShQeU9iamVjdCAqbmFtZSkKLS0jZW5kaWYKLS17 Ci0tICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0tI2lmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVG UwotLSNpZiBDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRIT04gJiYgUFlfVkVSU0lPTl9IRVggPj0g MHgwMzA1MDBBMQotLSAgICByZXN1bHQgPSBfUHlEaWN0X0dldEl0ZW1fS25vd25IYXNoKF9fcHl4 X2QsIG5hbWUsICgoUHlBU0NJSU9iamVjdCAqKSBuYW1lKS0+aGFzaCk7Ci0tICAgIF9fUFlYX1VQ REFURV9ESUNUX0NBQ0hFKF9fcHl4X2QsIHJlc3VsdCwgKmRpY3RfY2FjaGVkX3ZhbHVlLCAqZGlj dF92ZXJzaW9uKQotLSAgICBpZiAobGlrZWx5KHJlc3VsdCkpIHsKLS0gICAgICAgIHJldHVybiBf X1B5eF9OZXdSZWYocmVzdWx0KTsKLS0gICAgfSBlbHNlIGlmICh1bmxpa2VseShQeUVycl9PY2N1 cnJlZCgpKSkgewotLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0tICAgIH0KLS0jZWxzZQotLSAgICBy ZXN1bHQgPSBQeURpY3RfR2V0SXRlbShfX3B5eF9kLCBuYW1lKTsKLS0gICAgX19QWVhfVVBEQVRF X0RJQ1RfQ0FDSEUoX19weXhfZCwgcmVzdWx0LCAqZGljdF9jYWNoZWRfdmFsdWUsICpkaWN0X3Zl cnNpb24pCi0tICAgIGlmIChsaWtlbHkocmVzdWx0KSkgewotLSAgICAgICAgcmV0dXJuIF9fUHl4 X05ld1JlZihyZXN1bHQpOwotLSAgICB9Ci0tI2VuZGlmCi0tI2Vsc2UKLS0gICAgcmVzdWx0ID0g UHlPYmplY3RfR2V0SXRlbShfX3B5eF9kLCBuYW1lKTsKLS0gICAgX19QWVhfVVBEQVRFX0RJQ1Rf Q0FDSEUoX19weXhfZCwgcmVzdWx0LCAqZGljdF9jYWNoZWRfdmFsdWUsICpkaWN0X3ZlcnNpb24p Ci0tICAgIGlmIChsaWtlbHkocmVzdWx0KSkgewotLSAgICAgICAgcmV0dXJuIF9fUHl4X05ld1Jl ZihyZXN1bHQpOwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU3NAotKyAq IAotKyAqICAgICBAX2Vycm9ycwotKyAqICAgICBkZWYgZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYs IHByb3AsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAg ICAgICIiIkdldHMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgYXN5bmNocm9ub3VzbHkuCi0rICog Ci0rICovCi0rICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9f cHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCBfX3B5eF9uX3NfZ2V0X3By b3BlcnR5X2FzeW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNTc0 LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAgX19weXhf dF8xID0gTlVMTDsKLSsgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlN ZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsKLSsgICAgX19weXhfdF8xID0gUHlNZXRob2RfR0VU X1NFTEYoX19weXhfdF82KTsKLSsgICAgaWYgKGxpa2VseShfX3B5eF90XzEpKSB7Ci0rICAgICAg UHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7Ci0r ICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7Ci0rICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0 aW9uKTsKLSsgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOwotICAg ICB9Ci0tICAgIFB5RXJyX0NsZWFyKCk7Ci0tI2VuZGlmCi0tICAgIHJldHVybiBfX1B5eF9HZXRC dWlsdGluTmFtZShuYW1lKTsKLS19Ci0rICB9Ci0rICBfX3B5eF90XzcgPSAoX19weXhfdF8xKSA/ IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhfdF80 KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQpOwotKyAg X19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgX19QeXhfREVDUkVG KF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykp IF9fUFlYX0VSUigwLCA1NzMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNyk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSsgIGlm IChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX2dldF9wcm9wZXJ0eV9hc3luYywgX19w eXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhf REVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0rICBQeVR5cGVfTW9kaWZpZWQoX19w eXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpOwotIAotLS8qIFB5RnVuY3Rp b25GYXN0Q2FsbCAqLwotLSNpZiBDWVRIT05fRkFTVF9QWUNBTEwKLS1zdGF0aWMgUHlPYmplY3Qq IF9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGxOb0t3KFB5Q29kZU9iamVjdCAqY28sIFB5T2JqZWN0 ICoqYXJncywgUHlfc3NpemVfdCBuYSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpnbG9iYWxzKSB7Ci0tICAgIFB5RnJhbWVPYmplY3Qg KmY7Ci0tICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IF9fUHl4X1B5VGhyZWFkU3RhdGVfQ3Vy cmVudDsKLS0gICAgUHlPYmplY3QgKipmYXN0bG9jYWxzOwotLSAgICBQeV9zc2l6ZV90IGk7Ci0t ICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0tICAgIGFzc2VydChnbG9iYWxzICE9IE5VTEwpOwotLSAg ICAvKiBYWFggUGVyaGFwcyB3ZSBzaG91bGQgY3JlYXRlIGEgc3BlY2lhbGl6ZWQKLS0gICAgICAg UHlGcmFtZV9OZXcoKSB0aGF0IGRvZXNuJ3QgdGFrZSBsb2NhbHMsIGJ1dCBkb2VzCi0tICAgICAg IHRha2UgYnVpbHRpbnMgd2l0aG91dCBzYW5pdHkgY2hlY2tpbmcgdGhlbS4KLS0gICAgICAgKi8K LS0gICAgYXNzZXJ0KHRzdGF0ZSAhPSBOVUxMKTsKLS0gICAgZiA9IFB5RnJhbWVfTmV3KHRzdGF0 ZSwgY28sIGdsb2JhbHMsIE5VTEwpOwotLSAgICBpZiAoZiA9PSBOVUxMKSB7Ci0tICAgICAgICBy ZXR1cm4gTlVMTDsKLS0gICAgfQotLSAgICBmYXN0bG9jYWxzID0gX19QeXhfUHlGcmFtZV9HZXRM b2NhbHNwbHVzKGYpOwotLSAgICBmb3IgKGkgPSAwOyBpIDwgbmE7IGkrKykgewotLSAgICAgICAg UHlfSU5DUkVGKCphcmdzKTsKLS0gICAgICAgIGZhc3Rsb2NhbHNbaV0gPSAqYXJncysrOwotLSAg ICB9Ci0tICAgIHJlc3VsdCA9IFB5RXZhbF9FdmFsRnJhbWVFeChmLDApOwotLSAgICArK3RzdGF0 ZS0+cmVjdXJzaW9uX2RlcHRoOwotLSAgICBQeV9ERUNSRUYoZik7Ci0tICAgIC0tdHN0YXRlLT5y ZWN1cnNpb25fZGVwdGg7Ci0tICAgIHJldHVybiByZXN1bHQ7Ci0tfQotLSNpZiAxIHx8IFBZX1ZF UlNJT05fSEVYIDwgMHgwMzA2MDBCMQotLXN0YXRpYyBQeU9iamVjdCAqX19QeXhfUHlGdW5jdGlv bl9GYXN0Q2FsbERpY3QoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICoqYXJncywgUHlfc3NpemVf dCBuYXJncywgUHlPYmplY3QgKmt3YXJncykgewotLSAgICBQeUNvZGVPYmplY3QgKmNvID0gKFB5 Q29kZU9iamVjdCAqKVB5RnVuY3Rpb25fR0VUX0NPREUoZnVuYyk7Ci0tICAgIFB5T2JqZWN0ICpn bG9iYWxzID0gUHlGdW5jdGlvbl9HRVRfR0xPQkFMUyhmdW5jKTsKLS0gICAgUHlPYmplY3QgKmFy Z2RlZnMgPSBQeUZ1bmN0aW9uX0dFVF9ERUZBVUxUUyhmdW5jKTsKLS0gICAgUHlPYmplY3QgKmNs b3N1cmU7Ci0tI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotLSAgICBQeU9iamVjdCAqa3dkZWZz OwotLSNlbmRpZgotLSAgICBQeU9iamVjdCAqa3d0dXBsZSwgKiprOwotLSAgICBQeU9iamVjdCAq KmQ7Ci0tICAgIFB5X3NzaXplX3QgbmQ7Ci0tICAgIFB5X3NzaXplX3Qgbms7Ci0tICAgIFB5T2Jq ZWN0ICpyZXN1bHQ7Ci0tICAgIGFzc2VydChrd2FyZ3MgPT0gTlVMTCB8fCBQeURpY3RfQ2hlY2so a3dhcmdzKSk7Ci0tICAgIG5rID0ga3dhcmdzID8gUHlEaWN0X1NpemUoa3dhcmdzKSA6IDA7Ci0t ICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoKGNoYXIqKSIgd2hpbGUgY2FsbGluZyBhIFB5 dGhvbiBvYmplY3QiKSkgewotLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0tICAgIH0KLS0gICAgaWYg KAotLSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKLS0gICAgICAgICAgICBjby0+Y29fa3dvbmx5 YXJnY291bnQgPT0gMCAmJgotLSNlbmRpZgotLSAgICAgICAgICAgIGxpa2VseShrd2FyZ3MgPT0g TlVMTCB8fCBuayA9PSAwKSAmJgotLSAgICAgICAgICAgIGNvLT5jb19mbGFncyA9PSAoQ09fT1BU SU1JWkVEIHwgQ09fTkVXTE9DQUxTIHwgQ09fTk9GUkVFKSkgewotLSAgICAgICAgaWYgKGFyZ2Rl ZnMgPT0gTlVMTCAmJiBjby0+Y29fYXJnY291bnQgPT0gbmFyZ3MpIHsKLS0gICAgICAgICAgICBy ZXN1bHQgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsTm9LdyhjbywgYXJncywgbmFyZ3MsIGds b2JhbHMpOwotLSAgICAgICAgICAgIGdvdG8gZG9uZTsKLS0gICAgICAgIH0KLS0gICAgICAgIGVs c2UgaWYgKG5hcmdzID09IDAgJiYgYXJnZGVmcyAhPSBOVUxMCi0tICAgICAgICAgICAgICAgICAm JiBjby0+Y29fYXJnY291bnQgPT0gUHlfU0laRShhcmdkZWZzKSkgewotLSAgICAgICAgICAgIC8q IGZ1bmN0aW9uIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cywgYnV0IGFsbCBwYXJhbWV0ZXJzIGhh dmUKLS0gICAgICAgICAgICAgICBhIGRlZmF1bHQgdmFsdWU6IHVzZSBkZWZhdWx0IHZhbHVlcyBh cyBhcmd1bWVudHMgLiovCi0tICAgICAgICAgICAgYXJncyA9ICZQeVR1cGxlX0dFVF9JVEVNKGFy Z2RlZnMsIDApOwotLSAgICAgICAgICAgIHJlc3VsdCA9X19QeXhfUHlGdW5jdGlvbl9GYXN0Q2Fs bE5vS3coY28sIGFyZ3MsIFB5X1NJWkUoYXJnZGVmcyksIGdsb2JhbHMpOwotLSAgICAgICAgICAg IGdvdG8gZG9uZTsKLS0gICAgICAgIH0KLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo2MzUKLSsgKiAgICAgICAgIHJldHVybiB2Ci0rICogCi0rICogICAgIEBfZXJyb3JzICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgZGVmIHNldF9wcm9wZXJ0eShzZWxm LCBwcm9wLCB2YWx1ZT1UcnVlLCBhc3luY2hyb25vdXM9RmFsc2UsIGRhdGE9Tm9uZSk6Ci0rICog ICAgICAgICAiIiJXcmFwczogbXB2X3NldF9wcm9wZXJ0eSBhbmQgbXB2X3NldF9wcm9wZXJ0eV9h c3luYyIiIgotKyAqLwotKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9f cHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA2 MzUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rCi0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjM2Ci0rICogCi0rICogICAgIEBfZXJy b3JzCi0rICogICAgIGRlZiBzZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSwgYXN5 bmNocm9ub3VzPUZhbHNlLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgICAgICAiIiJXcmFwczogbXB2X3NldF9wcm9wZXJ0eSBhbmQgbXB2X3NldF9wcm9w ZXJ0eV9hc3luYyIiIgotKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotKyAqLwotKyAgX19Q eXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3NldF9wcm9wZXJ0eSk7IGlmICh1 bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDYzNiwgX19weXhfTDFfZXJyb3IpCi0r ICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSsgIF9fcHl4X3RfMSA9IE5VTEw7Ci0rICBpZiAo Q1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3Rf NikpKSB7Ci0rICAgIF9fcHl4X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7Ci0r ICAgIGlmIChsaWtlbHkoX19weXhfdF8xKSkgewotKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9 IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzYpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihf X3B5eF90XzEpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Ci0rICAgICAgX19QeXhf REVDUkVGX1NFVChfX3B5eF90XzYsIGZ1bmN0aW9uKTsKLSAgICAgfQotLSAgICBpZiAoa3dhcmdz ICE9IE5VTEwpIHsKLS0gICAgICAgIFB5X3NzaXplX3QgcG9zLCBpOwotLSAgICAgICAga3d0dXBs ZSA9IFB5VHVwbGVfTmV3KDIgKiBuayk7Ci0tICAgICAgICBpZiAoa3d0dXBsZSA9PSBOVUxMKSB7 Ci0tICAgICAgICAgICAgcmVzdWx0ID0gTlVMTDsKLS0gICAgICAgICAgICBnb3RvIGRvbmU7Ci0t ICAgICAgICB9Ci0tICAgICAgICBrID0gJlB5VHVwbGVfR0VUX0lURU0oa3d0dXBsZSwgMCk7Ci0t ICAgICAgICBwb3MgPSBpID0gMDsKLS0gICAgICAgIHdoaWxlIChQeURpY3RfTmV4dChrd2FyZ3Ms ICZwb3MsICZrW2ldLCAma1tpKzFdKSkgewotLSAgICAgICAgICAgIFB5X0lOQ1JFRihrW2ldKTsK LS0gICAgICAgICAgICBQeV9JTkNSRUYoa1tpKzFdKTsKLS0gICAgICAgICAgICBpICs9IDI7Ci0t ICAgICAgICB9Ci0tICAgICAgICBuayA9IGkgLyAyOwotKyAgfQotKyAgX19weXhfdF83ID0gKF9f cHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEs IF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhf dF80KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotKyAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNjM1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dP VFJFRihfX3B5eF90XzcpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7Ci0rICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19zZXRfcHJvcGVydHks IF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNjM2LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotKyAgUHlUeXBlX01vZGlmaWVk KF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKLSsKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzMKLSsgKiAgICAgICAgIHJldHVybiBlcnIK LSsgKiAKLSsgKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAq ICAgICBkZWYgc2V0X29wdGlvbihzZWxmLCBwcm9wLCB2YWx1ZT1UcnVlKToKLSsgKiAgICAgICAg ICIiIldyYXBzOiBtcHZfc2V0X29wdGlvbiIiIgotKyAqLwotKyAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCA2NzMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njc0 Ci0rICogCi0rICogICAgIEBfZXJyb3JzCi0rICogICAgIGRlZiBzZXRfb3B0aW9uKHNlbGYsIHBy b3AsIHZhbHVlPVRydWUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAg ICAiIiJXcmFwczogbXB2X3NldF9vcHRpb24iIiIKLSsgKiAgICAgICAgIGFzc2VydCBzZWxmLl9j dHgKLSsgKi8KLSsgIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICop X19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19zZXRf b3B0aW9uKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNjc0LCBfX3B5 eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAgX19weXhfdF8xID0g TlVMTDsKLSsgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2Rf Q2hlY2soX19weXhfdF82KSkpIHsKLSsgICAgX19weXhfdF8xID0gUHlNZXRob2RfR0VUX1NFTEYo X19weXhfdF82KTsKLSsgICAgaWYgKGxpa2VseShfX3B5eF90XzEpKSB7Ci0rICAgICAgUHlPYmpl Y3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7Ci0rICAgICAg X19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7Ci0rICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsK LSsgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOwotICAgICB9Ci0t ICAgIGVsc2UgewotLSAgICAgICAga3d0dXBsZSA9IE5VTEw7Ci0tICAgICAgICBrID0gTlVMTDsK LSsgIH0KLSsgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80 ID0gMDsKLSsgIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDY3MywgX19w eXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSsgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9i amVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0 LCBfX3B5eF9uX3Nfc2V0X29wdGlvbiwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2NzQs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9 IDA7Ci0rICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQpOwotKwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5NQot KyAqICAgICAgICAgcmV0dXJuIGVycgotKyAqIAotKyAqICAgICBAX2Vycm9ycyAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGRlZiBpbml0aWFsaXplKHNlbGYpOgotKyAqICAg ICAgICAgIiIiV3JhcHM6IG1wdl9pbml0aWFsaXplIiIiCi0rICovCi0rICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDY5NSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9H T1RSRUYoX19weXhfdF82KTsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo2OTYKLSsgKiAKLSsgKiAgICAgQF9lcnJvcnMKLSsgKiAgICAgZGVmIGluaXRpYWxpemUoc2Vs Zik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgICAgICIiIldyYXBzOiBt cHZfaW5pdGlhbGl6ZSIiIgotKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotKyAqLwotKyAg X19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX2luaXRpYWxpemUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2OTYsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0rICBfX3B5eF90XzEgPSBOVUxMOwotKyAgaWYg KENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90 XzYpKSkgewotKyAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOwot KyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsKLSsgICAgICBQeU9iamVjdCogZnVuY3Rpb24g PSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKLSsgICAgICBfX1B5eF9JTkNSRUYo X19weXhfdF8xKTsKLSsgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAgICAgIF9fUHl4 X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7Ci0gICAgIH0KLS0gICAgY2xvc3VyZSA9 IFB5RnVuY3Rpb25fR0VUX0NMT1NVUkUoZnVuYyk7Ci0tI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0g MwotLSAgICBrd2RlZnMgPSBQeUZ1bmN0aW9uX0dFVF9LV19ERUZBVUxUUyhmdW5jKTsKLS0jZW5k aWYKLS0gICAgaWYgKGFyZ2RlZnMgIT0gTlVMTCkgewotLSAgICAgICAgZCA9ICZQeVR1cGxlX0dF VF9JVEVNKGFyZ2RlZnMsIDApOwotLSAgICAgICAgbmQgPSBQeV9TSVpFKGFyZ2RlZnMpOwotKyAg fQotKyAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3Mo X19weXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25l QXJnKF9fcHl4X3RfNiwgX19weXhfdF80KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAw OwotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNjk1LCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0 ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9f cHl4X25fc19pbml0aWFsaXplLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDY5NiwgX19w eXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsK LSsgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCk7Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQ4Ci0rICog ICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnN0YXJ0KCkKLSsgKiAKLSsgKiAgICAgQF9lcnJv cnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICBkZWYgb2JzZXJ2ZV9wcm9w ZXJ0eShzZWxmLCBwcm9wLCBkYXRhPU5vbmUpOgotKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9v YnNlcnZlX3Byb3BlcnR5IiIiCi0rICovCi0rICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9f cHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDc0OCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF82 KTsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDkKLSsgKiAKLSsg KiAgICAgQF9lcnJvcnMKLSsgKiAgICAgZGVmIG9ic2VydmVfcHJvcGVydHkoc2VsZiwgcHJvcCwg ZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgIiIi V3JhcHM6IG1wdl9vYnNlcnZlX3Byb3BlcnR5IiIiCi0rICogICAgICAgICBhc3NlcnQgc2VsZi5f Y3R4Ci0rICovCi0rICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAq KV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCBfX3B5eF9uX3Nfb2Jz ZXJ2ZV9wcm9wZXJ0eSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc0 OSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSsgIF9fcHl4 X3RfMSA9IE5VTEw7Ci0rICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7Ci0rICAgIF9fcHl4X3RfMSA9IFB5TWV0aG9kX0dF VF9TRUxGKF9fcHl4X3RfNik7Ci0rICAgIGlmIChsaWtlbHkoX19weXhfdF8xKSkgewotKyAgICAg IFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzYpOwot KyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOwotKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5j dGlvbik7Ci0rICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1bmN0aW9uKTsKLSAg ICAgfQotLSAgICBlbHNlIHsKLS0gICAgICAgIGQgPSBOVUxMOwotLSAgICAgICAgbmQgPSAwOwot KyAgfQotKyAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFy Z3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80KTsKLSsgIF9fUHl4X1hERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQg PSAwOwotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNzQ4LCBfX3B5 eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotKyAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2Jq ZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3Qs IF9fcHl4X25fc19vYnNlcnZlX3Byb3BlcnR5LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAs IDc0OSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhf dF83ID0gMDsKLSsgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCk7Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzcwCi0rICogICAgICAgICByZXR1cm4gZXJyCi0rICogCi0rICogICAgIEBfZXJyb3JzICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgZGVmIHVub2JzZXJ2ZV9wcm9wZXJ0eShz ZWxmLCBkYXRhKToKLSsgKiAgICAgICAgICIiIldyYXBzOiBtcHZfdW5vYnNlcnZlX3Byb3BlcnR5 IiIiCi0rICovCi0rICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhf bl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDc3MCwg X19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSsKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzEKLSsgKiAKLSsgKiAgICAgQF9lcnJvcnMK LSsgKiAgICAgZGVmIHVub2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBkYXRhKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl91bm9ic2VydmVfcHJv cGVydHkiIiIKLSsgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSsgKi8KLSsgIF9fUHl4X0dl dE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc191bm9ic2VydmVfcHJvcGVydHkpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NzEsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0rICBfX3B5eF90XzEgPSBOVUxMOwotKyAgaWYg KENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90 XzYpKSkgewotKyAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOwot KyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsKLSsgICAgICBQeU9iamVjdCogZnVuY3Rpb24g PSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKLSsgICAgICBfX1B5eF9JTkNSRUYo X19weXhfdF8xKTsKLSsgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAgICAgIF9fUHl4 X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7Ci0gICAgIH0KLS0jaWYgUFlfTUFKT1Jf VkVSU0lPTiA+PSAzCi0tICAgIHJlc3VsdCA9IFB5RXZhbF9FdmFsQ29kZUV4KChQeU9iamVjdCop Y28sIGdsb2JhbHMsIChQeU9iamVjdCAqKU5VTEwsCi0tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFyZ3MsIChpbnQpbmFyZ3MsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGssIChpbnQpbmssCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQsIChpbnQpbmQs IGt3ZGVmcywgY2xvc3VyZSk7Ci0tI2Vsc2UKLS0gICAgcmVzdWx0ID0gUHlFdmFsX0V2YWxDb2Rl RXgoY28sIGdsb2JhbHMsIChQeU9iamVjdCAqKU5VTEwsCi0tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFyZ3MsIChpbnQpbmFyZ3MsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGssIChpbnQpbmssCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQsIChpbnQp bmQsIGNsb3N1cmUpOwotLSNlbmRpZgotLSAgICBQeV9YREVDUkVGKGt3dHVwbGUpOwotLWRvbmU6 Ci0tICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwotLSAgICByZXR1cm4gcmVzdWx0OwotLX0K LS0jZW5kaWYKLS0jZW5kaWYKLSsgIH0KLSsgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19Q eXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDog X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Ci0rICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rICBfX1B5eF9ERUNSRUYoX19w eXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19Q WVhfRVJSKDAsIDc3MCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF83 KTsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotKyAgaWYgKFB5 RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfdW5vYnNlcnZlX3Byb3BlcnR5LCBfX3B5eF90 XzcpIDwgMCkgX19QWVhfRVJSKDAsIDc3MSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNS RUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLSsgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9w dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7Ci0gCi0tLyogUHlDRnVuY3Rpb25G YXN0Q2FsbCAqLwotLSNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCi0tc3RhdGljIENZVEhPTl9JTkxJ TkUgUHlPYmplY3QgKiBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChQeU9iamVjdCAqZnVuY19v YmosIFB5T2JqZWN0ICoqYXJncywgUHlfc3NpemVfdCBuYXJncykgewotLSAgICBQeUNGdW5jdGlv bk9iamVjdCAqZnVuYyA9IChQeUNGdW5jdGlvbk9iamVjdCopZnVuY19vYmo7Ci0tICAgIFB5Q0Z1 bmN0aW9uIG1ldGggPSBQeUNGdW5jdGlvbl9HRVRfRlVOQ1RJT04oZnVuYyk7Ci0tICAgIFB5T2Jq ZWN0ICpzZWxmID0gUHlDRnVuY3Rpb25fR0VUX1NFTEYoZnVuYyk7Ci0tICAgIGludCBmbGFncyA9 IFB5Q0Z1bmN0aW9uX0dFVF9GTEFHUyhmdW5jKTsKLS0gICAgYXNzZXJ0KFB5Q0Z1bmN0aW9uX0No ZWNrKGZ1bmMpKTsKLS0gICAgYXNzZXJ0KE1FVEhfRkFTVENBTEwgPT0gKGZsYWdzICYgfihNRVRI X0NMQVNTIHwgTUVUSF9TVEFUSUMgfCBNRVRIX0NPRVhJU1QgfCBNRVRIX0tFWVdPUkRTIHwgTUVU SF9TVEFDS0xFU1MpKSk7Ci0tICAgIGFzc2VydChuYXJncyA+PSAwKTsKLS0gICAgYXNzZXJ0KG5h cmdzID09IDAgfHwgYXJncyAhPSBOVUxMKTsKLS0gICAgLyogX1B5Q0Z1bmN0aW9uX0Zhc3RDYWxs RGljdCgpIG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGFuIGV4Y2VwdGlvbiBzZXQsCi0tICAgICAg IGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBhbmQgc28g dGhlCi0tICAgICAgIGNhbGxlciBsb3NlcyBpdHMgZXhjZXB0aW9uICovCi0tICAgIGFzc2VydCgh UHlFcnJfT2NjdXJyZWQoKSk7Ci0tICAgIGlmICgoUFlfVkVSU0lPTl9IRVggPCAweDAzMDcwMEEw KSB8fCB1bmxpa2VseShmbGFncyAmIE1FVEhfS0VZV09SRFMpKSB7Ci0tICAgICAgICByZXR1cm4g KCooKF9fUHl4X1B5Q0Z1bmN0aW9uRmFzdFdpdGhLZXl3b3Jkcykodm9pZCopbWV0aCkpIChzZWxm LCBhcmdzLCBuYXJncywgTlVMTCk7Ci0tICAgIH0gZWxzZSB7Ci0tICAgICAgICByZXR1cm4gKCoo KF9fUHl4X1B5Q0Z1bmN0aW9uRmFzdCkodm9pZCopbWV0aCkpIChzZWxmLCBhcmdzLCBuYXJncyk7 Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTM4Ci0rICogCi0rICogY2Rl ZiBjbGFzcyBSZW5kZXJDb250ZXh0KG9iamVjdCk6Ci0rICogICAgIEFQSV9PUEVOR0wgPSAib3Bl bmdsIiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIFVQREFURV9GUkFNRSA9 IE1QVl9SRU5ERVJfVVBEQVRFX0ZSQU1FCi0rICogCi0rICovCi0rICBpZiAoUHlEaWN0X1NldEl0 ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNv bnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19BUElfT1BFTkdMLCBfX3B5eF9uX3Nfb3BlbmdsKSA8 IDApIF9fUFlYX0VSUigwLCA5MzgsIF9fcHl4X0wxX2Vycm9yKQotKyAgUHlUeXBlX01vZGlmaWVk KF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KTsKLSsKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzkKLSsgKiBjZGVmIGNsYXNzIFJl bmRlckNvbnRleHQob2JqZWN0KToKLSsgKiAgICAgQVBJX09QRU5HTCA9ICJvcGVuZ2wiCi0rICog ICAgIFVQREFURV9GUkFNRSA9IE1QVl9SRU5ERVJfVVBEQVRFX0ZSQU1FICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSsgKiAKLSsgKiAgICAgY2RlZjoKLSsgKi8KLSsgIF9fcHl4X3RfNyA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X3JlbmRlcl91cGRhdGVfZmxhZyhNUFZfUkVOREVS X1VQREFURV9GUkFNRSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDkz OSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSsgIGlmIChQ eURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX1VQREFURV9GUkFNRSwgX19weXhf dF83KSA8IDApIF9fUFlYX0VSUigwLCA5MzksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVD UkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0rICBQeVR5cGVfTW9kaWZpZWQoX19weXhf cHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQpOwotKwotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDkKLSsgKiAgICAgICAgIHNlbGYuaW5pdGVk ID0gVHJ1ZQotKyAqIAotKyAqICAgICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogICAgIGRlZiBzZXRfaWNjX3Byb2ZpbGUoc2VsZiwgaWNjX2Jsb2IpOgotKyAqICAg ICAgICAgY2RlZjoKLSsgKi8KLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82 LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgMTAwOSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSsK LSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDEwCi0rICogCi0rICogICAg IEBfZXJyb3JzCi0rICogICAgIGRlZiBzZXRfaWNjX3Byb2ZpbGUoc2VsZiwgaWNjX2Jsb2IpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBjZGVmOgotKyAqICAgICAg ICAgICAgIG1wdl9yZW5kZXJfcGFyYW0gcGFyYW0KLSsgKi8KLSsgIF9fUHl4X0dldE5hbWVJbkNs YXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckNvbnRleHQsIF9fcHl4X25fc19zZXRfaWNjX3Byb2ZpbGUpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDEwLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f UHl4X0dPVFJFRihfX3B5eF90XzQpOwotKyAgX19weXhfdF8xID0gTlVMTDsKLSsgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkp IHsKLSsgICAgX19weXhfdF8xID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82KTsKLSsgICAg aWYgKGxpa2VseShfX3B5eF90XzEpKSB7Ci0rICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7Ci0rICAgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3RfMSk7Ci0rICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKLSsgICAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOwotKyAgICB9Ci0rICB9Ci0rICBfX3B5eF90Xzcg PSAoX19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4 X3RfMSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBf X3B5eF90XzQpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwot KyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0rICBpZiAodW5saWtl bHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMDA5LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f UHl4X0dPVFJFRihfX3B5eF90XzcpOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4 X3RfNiA9IDA7Ci0rICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19z ZXRfaWNjX3Byb2ZpbGUsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgMTAxMCwgX19weXhf TDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLSsg IFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dCk7Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyOAot KyAqICAgICAgICAgcmV0dXJuIGVycgotKyAqIAotKyAqICAgICBAX2Vycm9ycyAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIGRlZiBzZXRfYW1iaWVudF9saWdodChzZWxmLCBs dXgpOgotKyAqICAgICAgICAgY2RlZjoKLSsgKi8KLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgMTAyOCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI5Ci0r ICogCi0rICogICAgIEBfZXJyb3JzCi0rICogICAgIGRlZiBzZXRfYW1iaWVudF9saWdodChzZWxm LCBsdXgpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBjZGVmOgot KyAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfcGFyYW0gcGFyYW0KLSsgKi8KLSsgIF9fUHl4X0dl dE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X1JlbmRlckNvbnRleHQsIF9fcHl4X25fc19zZXRfYW1iaWVudF9saWdodCk7 IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwMjksIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0rICBfX3B5eF90XzEgPSBOVUxMOwot KyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzYpKSkgewotKyAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90 XzYpOwotKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsKLSsgICAgICBQeU9iamVjdCogZnVu Y3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKLSsgICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF8xKTsKLSsgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwotKyAgICAg IF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7Ci0gICAgIH0KLS19Ci0tI2Vu ZGlmCi0rICB9Ci0rICBfX3B5eF90XzcgPSAoX19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0Nh bGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQpOwotKyAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4 X3RfNCA9IDA7Ci0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMDI4 LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotKyAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0rICBpZiAoUHlEaWN0X1NldEl0ZW0o KFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRl eHQtPnRwX2RpY3QsIF9fcHl4X25fc19zZXRfYW1iaWVudF9saWdodCwgX19weXhfdF83KSA8IDAp IF9fUFlYX0VSUigwLCAxMDI5LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzcpOyBfX3B5eF90XzcgPSAwOwotKyAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KTsKLSAKLS0vKiBQeU9iamVjdENhbGwg Ki8KLS0jaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9DUFlUSE9OCi0tc3RhdGljIENZVEhPTl9JTkxJ TkUgUHlPYmplY3QqIF9fUHl4X1B5T2JqZWN0X0NhbGwoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0 ICphcmcsIFB5T2JqZWN0ICprdykgewotLSAgICBQeU9iamVjdCAqcmVzdWx0OwotLSAgICB0ZXJu YXJ5ZnVuYyBjYWxsID0gZnVuYy0+b2JfdHlwZS0+dHBfY2FsbDsKLS0gICAgaWYgKHVubGlrZWx5 KCFjYWxsKSkKLS0gICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsKGZ1bmMsIGFyZywga3cpOwot LSAgICBpZiAodW5saWtlbHkoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKChjaGFyKikiIHdoaWxlIGNh bGxpbmcgYSBQeXRob24gb2JqZWN0IikpKQotLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0tICAgIHJl c3VsdCA9ICgqY2FsbCkoZnVuYywgYXJnLCBrdyk7Ci0tICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2Fs bCgpOwotLSAgICBpZiAodW5saWtlbHkoIXJlc3VsdCkgJiYgdW5saWtlbHkoIVB5RXJyX09jY3Vy cmVkKCkpKSB7Ci0tICAgICAgICBQeUVycl9TZXRTdHJpbmcoCi0tICAgICAgICAgICAgUHlFeGNf U3lzdGVtRXJyb3IsCi0tICAgICAgICAgICAgIk5VTEwgcmVzdWx0IHdpdGhvdXQgZXJyb3IgaW4g UHlPYmplY3RfQ2FsbCIpOwotLSAgICB9Ci0tICAgIHJldHVybiByZXN1bHQ7Ci0tfQotLSNlbmRp ZgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjgKLSsgKiAgICAgICAg IHJldHVybiByZXQKLSsgKiAKLSsgKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICBkZWYgcmVuZGVyKHNlbGYsCi0rICogICAgICAgICAgICAgICAgb3Bl bmdsX2Zibz1Ob25lLAotKyAqLwotKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigwLCAxMDY4LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwot IAotLS8qIEdldFRvcG1vc3RFeGNlcHRpb24gKi8KLS0jaWYgQ1lUSE9OX1VTRV9FWENfSU5GT19T VEFDSwotLXN0YXRpYyBfUHlFcnJfU3RhY2tJdGVtICoKLS1fX1B5eF9QeUVycl9HZXRUb3Btb3N0 RXhjZXB0aW9uKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKLS17Ci0tICAgIF9QeUVycl9TdGFja0l0 ZW0gKmV4Y19pbmZvID0gdHN0YXRlLT5leGNfaW5mbzsKLS0gICAgd2hpbGUgKChleGNfaW5mby0+ ZXhjX3R5cGUgPT0gTlVMTCB8fCBleGNfaW5mby0+ZXhjX3R5cGUgPT0gUHlfTm9uZSkgJiYKLS0g ICAgICAgICAgIGV4Y19pbmZvLT5wcmV2aW91c19pdGVtICE9IE5VTEwpCi0tICAgIHsKLS0gICAg ICAgIGV4Y19pbmZvID0gZXhjX2luZm8tPnByZXZpb3VzX2l0ZW07Ci0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2OQotKyAqIAotKyAqICAgICBAX2Vycm9ycwotKyAqICAg ICBkZWYgcmVuZGVyKHNlbGYsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAg ICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUsCi0rICogICAgICAgICAgICAgICAgZmxpcF95PUZh bHNlLAotKyAqLwotKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3Qg KilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgX19weXhf bl9zX3JlbmRlcik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwNjks IF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0rICBfX3B5eF90 XzEgPSBOVUxMOwotKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzYpKSkgewotKyAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRf U0VMRihfX3B5eF90XzYpOwotKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsKLSsgICAgICBQ eU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKLSsg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKLSsgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rp b24pOwotKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7Ci0gICAg IH0KLS0gICAgcmV0dXJuIGV4Y19pbmZvOwotLX0KLS0jZW5kaWYKLSsgIH0KLSsgIF9fcHl4X3Rf NyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19w eXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYs IF9fcHl4X3RfNCk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSsgIGlmICh1bmxp a2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEwNjgsIF9fcHl4X0wxX2Vycm9yKQotKyAg X19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19w eXhfdF82ID0gMDsKLSsgIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9z X3JlbmRlciwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCAxMDY5LCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotKyAgUHlUeXBl X01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0 KTsKLSAKLS0vKiBTYXZlUmVzZXRFeGNlcHRpb24gKi8KLS0jaWYgQ1lUSE9OX0ZBU1RfVEhSRUFE X1NUQVRFCi0tc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9fRXhjZXB0aW9uU2F2ZShQ eVRocmVhZFN0YXRlICp0c3RhdGUsIFB5T2JqZWN0ICoqdHlwZSwgUHlPYmplY3QgKip2YWx1ZSwg UHlPYmplY3QgKip0YikgewotLSAgICAjaWYgQ1lUSE9OX1VTRV9FWENfSU5GT19TVEFDSwotLSAg ICBfUHlFcnJfU3RhY2tJdGVtICpleGNfaW5mbyA9IF9fUHl4X1B5RXJyX0dldFRvcG1vc3RFeGNl cHRpb24odHN0YXRlKTsKLS0gICAgKnR5cGUgPSBleGNfaW5mby0+ZXhjX3R5cGU7Ci0tICAgICp2 YWx1ZSA9IGV4Y19pbmZvLT5leGNfdmFsdWU7Ci0tICAgICp0YiA9IGV4Y19pbmZvLT5leGNfdHJh Y2ViYWNrOwotLSAgICAjZWxzZQotLSAgICAqdHlwZSA9IHRzdGF0ZS0+ZXhjX3R5cGU7Ci0tICAg ICp2YWx1ZSA9IHRzdGF0ZS0+ZXhjX3ZhbHVlOwotLSAgICAqdGIgPSB0c3RhdGUtPmV4Y190cmFj ZWJhY2s7Ci0tICAgICNlbmRpZgotLSAgICBQeV9YSU5DUkVGKCp0eXBlKTsKLS0gICAgUHlfWElO Q1JFRigqdmFsdWUpOwotLSAgICBQeV9YSU5DUkVGKCp0Yik7Ci0tfQotLXN0YXRpYyBDWVRIT05f SU5MSU5FIHZvaWQgX19QeXhfX0V4Y2VwdGlvblJlc2V0KFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwg UHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRiKSB7Ci0tICAgIFB5 T2JqZWN0ICp0bXBfdHlwZSwgKnRtcF92YWx1ZSwgKnRtcF90YjsKLS0gICAgI2lmIENZVEhPTl9V U0VfRVhDX0lORk9fU1RBQ0sKLS0gICAgX1B5RXJyX1N0YWNrSXRlbSAqZXhjX2luZm8gPSB0c3Rh dGUtPmV4Y19pbmZvOwotLSAgICB0bXBfdHlwZSA9IGV4Y19pbmZvLT5leGNfdHlwZTsKLS0gICAg dG1wX3ZhbHVlID0gZXhjX2luZm8tPmV4Y192YWx1ZTsKLS0gICAgdG1wX3RiID0gZXhjX2luZm8t PmV4Y190cmFjZWJhY2s7Ci0tICAgIGV4Y19pbmZvLT5leGNfdHlwZSA9IHR5cGU7Ci0tICAgIGV4 Y19pbmZvLT5leGNfdmFsdWUgPSB2YWx1ZTsKLS0gICAgZXhjX2luZm8tPmV4Y190cmFjZWJhY2sg PSB0YjsKLS0gICAgI2Vsc2UKLS0gICAgdG1wX3R5cGUgPSB0c3RhdGUtPmV4Y190eXBlOwotLSAg ICB0bXBfdmFsdWUgPSB0c3RhdGUtPmV4Y192YWx1ZTsKLS0gICAgdG1wX3RiID0gdHN0YXRlLT5l eGNfdHJhY2ViYWNrOwotLSAgICB0c3RhdGUtPmV4Y190eXBlID0gdHlwZTsKLS0gICAgdHN0YXRl LT5leGNfdmFsdWUgPSB2YWx1ZTsKLS0gICAgdHN0YXRlLT5leGNfdHJhY2ViYWNrID0gdGI7Ci0t ICAgICNlbmRpZgotLSAgICBQeV9YREVDUkVGKHRtcF90eXBlKTsKLS0gICAgUHlfWERFQ1JFRih0 bXBfdmFsdWUpOwotLSAgICBQeV9YREVDUkVGKHRtcF90Yik7Ci0tfQotLSNlbmRpZgotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzIKLSsgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW5pdF9wYXJhbXMsICphcmdzLCAqKmt3YXJncykKLSsgKiAKLSsgKiBj bGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0rICogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSsgKiAgICAgICAgIFRocmVhZC5fX2luaXRf XyhzZWxmKQotKyAqLwotKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzcsIF9f cHl4X25fc19UaHJlYWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAx MTMyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotKyAgX19w eXhfdF82ID0gUHlUdXBsZV9OZXcoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDExMzIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7 Ci0rICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNyk7Ci0rICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfNiwgMCwgX19weXhfdF83KTsKLSsgIF9fcHl4X3RfNyA9IDA7Ci0rICBfX3B5eF90XzcgPSBf X1B5eF9DYWxjdWxhdGVNZXRhY2xhc3MoTlVMTCwgX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9H T1RSRUYoX19weXhfdF83KTsKLSsgIF9fcHl4X3RfNCA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBh cmUoX19weXhfdF83LCBfX3B5eF90XzYsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZCwgX19weXhf bl9zX0NhbGxiYWNrVGhyZWFkLCAoUHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRl cl9saWJzX21wdiwgKFB5T2JqZWN0ICopIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCAxMTMyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzQpOwotIAotLS8qIFB5RXJyRXhjZXB0aW9uTWF0Y2hlcyAqLwotLSNpZiBDWVRIT05fRkFT VF9USFJFQURfU1RBVEUKLS1zdGF0aWMgaW50IF9fUHl4X1B5RXJyX0V4Y2VwdGlvbk1hdGNoZXNU dXBsZShQeU9iamVjdCAqZXhjX3R5cGUsIFB5T2JqZWN0ICp0dXBsZSkgewotLSAgICBQeV9zc2l6 ZV90IGksIG47Ci0tICAgIG4gPSBQeVR1cGxlX0dFVF9TSVpFKHR1cGxlKTsKLS0jaWYgUFlfTUFK T1JfVkVSU0lPTiA+PSAzCi0tICAgIGZvciAoaT0wOyBpPG47IGkrKykgewotLSAgICAgICAgaWYg KGV4Y190eXBlID09IFB5VHVwbGVfR0VUX0lURU0odHVwbGUsIGkpKSByZXR1cm4gMTsKLS0gICAg fQotLSNlbmRpZgotLSAgICBmb3IgKGk9MDsgaTxuOyBpKyspIHsKLS0gICAgICAgIGlmIChfX1B5 eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoZXhjX3R5cGUsIFB5VHVwbGVfR0VUX0lURU0o dHVwbGUsIGkpKSkgcmV0dXJuIDE7Ci0tICAgIH0KLS0gICAgcmV0dXJuIDA7Ci0tfQotLXN0YXRp YyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9QeUVycl9FeGNlcHRpb25NYXRjaGVzSW5TdGF0ZShQ eVRocmVhZFN0YXRlKiB0c3RhdGUsIFB5T2JqZWN0KiBlcnIpIHsKLS0gICAgUHlPYmplY3QgKmV4 Y190eXBlID0gdHN0YXRlLT5jdXJleGNfdHlwZTsKLS0gICAgaWYgKGV4Y190eXBlID09IGVycikg cmV0dXJuIDE7Ci0tICAgIGlmICh1bmxpa2VseSghZXhjX3R5cGUpKSByZXR1cm4gMDsKLS0gICAg aWYgKHVubGlrZWx5KFB5VHVwbGVfQ2hlY2soZXJyKSkpCi0tICAgICAgICByZXR1cm4gX19QeXhf UHlFcnJfRXhjZXB0aW9uTWF0Y2hlc1R1cGxlKGV4Y190eXBlLCBlcnIpOwotLSAgICByZXR1cm4g X19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGV4Y190eXBlLCBlcnIpOwotLX0KLS0j ZW5kaWYKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTMzCi0rICogCi0r ICogY2xhc3MgQ2FsbGJhY2tUaHJlYWQoVGhyZWFkKToKLSsgKiAgICAgZGVmIF9faW5pdF9fKHNl bGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBUaHJlYWQuX19p bml0X18oc2VsZikKLSsgKiAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQotKyAqLwotKyAgX19w eXhfdF8xID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGli c18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMV9faW5pdF9fLCAwLCBfX3B5eF9uX3NfQ2FsbGJhY2tU aHJlYWRfX19pbml0LCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9k LCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMzUpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMTEzMywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4 X25fc19pbml0LCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDExMzMsIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rCi0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQotKyAqICAgICAgICAgc2VsZi5p c3NodXRkb3duID0gRmFsc2UKLSsgKiAKLSsgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBU cnVlCi0rICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQotKyAqLwotKyAgX19weXhfdF8x ID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzE0Q2FsbGJhY2tUaHJlYWRfM3NodXRkb3duLCAwLCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWRf c2h1dGRvd24sIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgo UHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18zNykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxMTQxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOwotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9z X3NodXRkb3duLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDExNDEsIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0rCi0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0NgotKyAqICAgICAgICAgc2VsZi5s b2NrLnJlbGVhc2UoKQotKyAqIAotKyAqICAgICBkZWYgY2FsbChzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQotKyAqIAot KyAqLwotKyAgX19weXhfdF8xID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNWNhbGwsIDAsIF9fcHl4X25fc19D YWxsYmFja1RocmVhZF9jYWxsLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBf X3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMzkpKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE0NiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQs IF9fcHl4X25fc19jYWxsLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDExNDYsIF9fcHl4 X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0r Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0OQotKyAqICAgICAgICAg c2VsZi5sb2NrLnJlbGVhc2UoKQotKyAqIAotKyAqICAgICBkZWYgc2V0KHNlbGYsIGNhbGxiYWNr KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAgc2VsZi5jYWxsYmFj ayA9IGNhbGxiYWNrCi0rICogCi0rICovCi0rICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9u X05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF83 c2V0LCAwLCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWRfc2V0LCBOVUxMLCBfX3B5eF9uX3Nfdmlk Y3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fNDEp KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE0OSwgX19weXhfTDFf ZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIGlmIChfX1B5eF9TZXROYW1l SW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19zZXQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9F UlIoMCwgMTE0OSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKLSsKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTUyCi0rICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKLSsgKiAKLSsgKiAgICAg ZGVmIHJ1bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICAgICAgICAg d2hpbGUgbm90IHNlbGYuaXNzaHV0ZG93bjoKLSsgKiAgICAgICAgICAgICBzZWxmLmxvY2suYWNx dWlyZShUcnVlKQotKyAqLwotKyAgX19weXhfdF8xID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9f cHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfOXJ1biwgMCwg X19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX3J1biwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9s aWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzQzKSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNTIsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3Mo X19weXhfdF80LCBfX3B5eF9uX3NfcnVuLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDEx NTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3Rf MSA9IDA7Ci0rCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1NwotKyAq ICAgICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNrKHNlbGYuY2FsbGJhY2spIGlmIHNlbGYuY2Fs bGJhY2sgZWxzZSBOb25lCi0rICogCi0rICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2Fs bGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgICAgICB0cnk6Ci0r ICogICAgICAgICAgICAgY2FsbGJhY2soKQotKyAqLwotKyAgX19weXhfdF8xID0gX19QeXhfQ3lG dW5jdGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tU aHJlYWRfMTFtcHZfY2FsbGJhY2ssIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9tcHZfY2Fs bGJhY2ssIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlP YmplY3QgKilfX3B5eF9jb2Rlb2JqX180NSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOwotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX21w dl9jYWxsYmFjaywgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotKwotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzIKLSsgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW5pdF9wYXJhbXMsICphcmdzLCAqKmt3YXJncykKLSsgKiAKLSsg KiBjbGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0rICogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSsgKiAgICAgICAgIFRocmVhZC5fX2lu aXRfXyhzZWxmKQotKyAqLwotKyAgX19weXhfdF8xID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUoX19w eXhfdF83LCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIF9fcHl4X3RfNiwgX19weXhfdF80LCBO VUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEzMiwg X19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSsgIGlmIChQeURp Y3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIF9fcHl4X3RfMSkg PCAwKSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYo X19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBf X3B5eF90XzQgPSAwOwotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7 Ci0rICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSsKLSsgIC8qICIo dHJlZSBmcmFnbWVudCkiOjEKLSsgKiBkZWYgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hl ZChfX3B5eF90eXBlLCBsb25nIF9fcHl4X2NoZWNrc3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSsgKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJy b3IKLSsgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0Ci0rICovCi0rICBfX3B5eF90XzYg PSBQeUNGdW5jdGlvbl9OZXdFeCgmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN19f cHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJf bGlic19tcHYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxLCBfX3B5 eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgaWYgKFB5RGljdF9T ZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLS8qIEdldEV4Y2VwdGlvbiAq LwotLSNpZiBDWVRIT05fRkFTVF9USFJFQURfU1RBVEUKLS1zdGF0aWMgaW50IF9fUHl4X19HZXRF eGNlcHRpb24oUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeU9iamVjdCAqKnR5cGUsIFB5T2JqZWN0 ICoqdmFsdWUsIFB5T2JqZWN0ICoqdGIpCi0tI2Vsc2UKLS1zdGF0aWMgaW50IF9fUHl4X0dldEV4 Y2VwdGlvbihQeU9iamVjdCAqKnR5cGUsIFB5T2JqZWN0ICoqdmFsdWUsIFB5T2JqZWN0ICoqdGIp Ci0tI2VuZGlmCi0tewotLSAgICBQeU9iamVjdCAqbG9jYWxfdHlwZSwgKmxvY2FsX3ZhbHVlLCAq bG9jYWxfdGI7Ci0tI2lmIENZVEhPTl9GQVNUX1RIUkVBRF9TVEFURQotLSAgICBQeU9iamVjdCAq dG1wX3R5cGUsICp0bXBfdmFsdWUsICp0bXBfdGI7Ci0tICAgIGxvY2FsX3R5cGUgPSB0c3RhdGUt PmN1cmV4Y190eXBlOwotLSAgICBsb2NhbF92YWx1ZSA9IHRzdGF0ZS0+Y3VyZXhjX3ZhbHVlOwot LSAgICBsb2NhbF90YiA9IHRzdGF0ZS0+Y3VyZXhjX3RyYWNlYmFjazsKLS0gICAgdHN0YXRlLT5j dXJleGNfdHlwZSA9IDA7Ci0tICAgIHRzdGF0ZS0+Y3VyZXhjX3ZhbHVlID0gMDsKLS0gICAgdHN0 YXRlLT5jdXJleGNfdHJhY2ViYWNrID0gMDsKLS0jZWxzZQotLSAgICBQeUVycl9GZXRjaCgmbG9j YWxfdHlwZSwgJmxvY2FsX3ZhbHVlLCAmbG9jYWxfdGIpOwotLSNlbmRpZgotLSAgICBQeUVycl9O b3JtYWxpemVFeGNlcHRpb24oJmxvY2FsX3R5cGUsICZsb2NhbF92YWx1ZSwgJmxvY2FsX3RiKTsK LS0jaWYgQ1lUSE9OX0ZBU1RfVEhSRUFEX1NUQVRFCi0tICAgIGlmICh1bmxpa2VseSh0c3RhdGUt PmN1cmV4Y190eXBlKSkKLS0jZWxzZQotLSAgICBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJyZWQo KSkpCi0tI2VuZGlmCi0tICAgICAgICBnb3RvIGJhZDsKLS0gICAgI2lmIFBZX01BSk9SX1ZFUlNJ T04gPj0gMwotLSAgICBpZiAobG9jYWxfdGIpIHsKLS0gICAgICAgIGlmICh1bmxpa2VseShQeUV4 Y2VwdGlvbl9TZXRUcmFjZWJhY2sobG9jYWxfdmFsdWUsIGxvY2FsX3RiKSA8IDApKQotLSAgICAg ICAgICAgIGdvdG8gYmFkOwotLSAgICB9Ci0tICAgICNlbmRpZgotLSAgICBQeV9YSU5DUkVGKGxv Y2FsX3RiKTsKLS0gICAgUHlfWElOQ1JFRihsb2NhbF90eXBlKTsKLS0gICAgUHlfWElOQ1JFRihs b2NhbF92YWx1ZSk7Ci0tICAgICp0eXBlID0gbG9jYWxfdHlwZTsKLS0gICAgKnZhbHVlID0gbG9j YWxfdmFsdWU7Ci0tICAgICp0YiA9IGxvY2FsX3RiOwotLSNpZiBDWVRIT05fRkFTVF9USFJFQURf U1RBVEUKLS0gICAgI2lmIENZVEhPTl9VU0VfRVhDX0lORk9fU1RBQ0sKLS0gICAgewotLSAgICAg ICAgX1B5RXJyX1N0YWNrSXRlbSAqZXhjX2luZm8gPSB0c3RhdGUtPmV4Y19pbmZvOwotLSAgICAg ICAgdG1wX3R5cGUgPSBleGNfaW5mby0+ZXhjX3R5cGU7Ci0tICAgICAgICB0bXBfdmFsdWUgPSBl eGNfaW5mby0+ZXhjX3ZhbHVlOwotLSAgICAgICAgdG1wX3RiID0gZXhjX2luZm8tPmV4Y190cmFj ZWJhY2s7Ci0tICAgICAgICBleGNfaW5mby0+ZXhjX3R5cGUgPSBsb2NhbF90eXBlOwotLSAgICAg ICAgZXhjX2luZm8tPmV4Y192YWx1ZSA9IGxvY2FsX3ZhbHVlOwotLSAgICAgICAgZXhjX2luZm8t PmV4Y190cmFjZWJhY2sgPSBsb2NhbF90YjsKLS0gICAgfQotLSAgICAjZWxzZQotLSAgICB0bXBf dHlwZSA9IHRzdGF0ZS0+ZXhjX3R5cGU7Ci0tICAgIHRtcF92YWx1ZSA9IHRzdGF0ZS0+ZXhjX3Zh bHVlOwotLSAgICB0bXBfdGIgPSB0c3RhdGUtPmV4Y190cmFjZWJhY2s7Ci0tICAgIHRzdGF0ZS0+ ZXhjX3R5cGUgPSBsb2NhbF90eXBlOwotLSAgICB0c3RhdGUtPmV4Y192YWx1ZSA9IGxvY2FsX3Zh bHVlOwotLSAgICB0c3RhdGUtPmV4Y190cmFjZWJhY2sgPSBsb2NhbF90YjsKLS0gICAgI2VuZGlm Ci0tICAgIFB5X1hERUNSRUYodG1wX3R5cGUpOwotLSAgICBQeV9YREVDUkVGKHRtcF92YWx1ZSk7 Ci0tICAgIFB5X1hERUNSRUYodG1wX3RiKTsKLS0jZWxzZQotLSAgICBQeUVycl9TZXRFeGNJbmZv KGxvY2FsX3R5cGUsIGxvY2FsX3ZhbHVlLCBsb2NhbF90Yik7Ci0tI2VuZGlmCi0tICAgIHJldHVy biAwOwotLWJhZDoKLS0gICAgKnR5cGUgPSAwOwotLSAgICAqdmFsdWUgPSAwOwotLSAgICAqdGIg PSAwOwotLSAgICBQeV9YREVDUkVGKGxvY2FsX3R5cGUpOwotLSAgICBQeV9YREVDUkVGKGxvY2Fs X3ZhbHVlKTsKLS0gICAgUHlfWERFQ1JFRihsb2NhbF90Yik7Ci0tICAgIHJldHVybiAtMTsKLS19 Ci0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMQotKyAqICAgICAgICAgX19weXhfdW5waWNrbGVf RW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKDxFbmRPZkZpbGVSZWFjaGVkPiBfX3B5eF9yZXN1 bHQsIF9fcHl4X3N0YXRlKQotKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0rICogY2RlZiBf X3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoRW5kT2ZGaWxlUmVhY2hl ZCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotKyAqICAgICBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9zdGF0ZVswXTsgX19w eXhfcmVzdWx0LnJlYXNvbiA9IF9fcHl4X3N0YXRlWzFdCi0rICogICAgIGlmIGxlbihfX3B5eF9z dGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6Ci0rICovCi0r ICBfX3B5eF90XzYgPSBQeUNGdW5jdGlvbl9OZXdFeCgmX19weXhfbWRlZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfOV9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UsIE5VTEwsIF9fcHl4X25fc192aWRj dXR0ZXJfbGlic19tcHYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAx LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgaWYgKFB5 RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLS8qIFB5T2JqZWN0Q2FsbE1l dGhPICovCi0tI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTgotLXN0YXRpYyBDWVRIT05f SU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeU9iamVjdF9DYWxsTWV0aE8oUHlPYmplY3QgKmZ1bmMs IFB5T2JqZWN0ICphcmcpIHsKLS0gICAgUHlPYmplY3QgKnNlbGYsICpyZXN1bHQ7Ci0tICAgIFB5 Q0Z1bmN0aW9uIGNmdW5jOwotLSAgICBjZnVuYyA9IFB5Q0Z1bmN0aW9uX0dFVF9GVU5DVElPTihm dW5jKTsKLS0gICAgc2VsZiA9IFB5Q0Z1bmN0aW9uX0dFVF9TRUxGKGZ1bmMpOwotLSAgICBpZiAo dW5saWtlbHkoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKChjaGFyKikiIHdoaWxlIGNhbGxpbmcgYSBQ eXRob24gb2JqZWN0IikpKQotLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0tICAgIHJlc3VsdCA9IGNm dW5jKHNlbGYsIGFyZyk7Ci0tICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwotLSAgICBpZiAo dW5saWtlbHkoIXJlc3VsdCkgJiYgdW5saWtlbHkoIVB5RXJyX09jY3VycmVkKCkpKSB7Ci0tICAg ICAgICBQeUVycl9TZXRTdHJpbmcoCi0tICAgICAgICAgICAgUHlFeGNfU3lzdGVtRXJyb3IsCi0t ICAgICAgICAgICAgIk5VTEwgcmVzdWx0IHdpdGhvdXQgZXJyb3IgaW4gUHlPYmplY3RfQ2FsbCIp OwotLSAgICB9Ci0tICAgIHJldHVybiByZXN1bHQ7Ci0tfQotLSNlbmRpZgotKyAgLyogIih0cmVl IGZyYWdtZW50KSI6MQotKyAqIGRlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eShfX3B5eF90eXBl LCBsb25nIF9fcHl4X2NoZWNrc3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSsgKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKLSsgKiAgICAg Y2RlZiBvYmplY3QgX19weXhfcmVzdWx0Ci0rICovCi0rICBfX3B5eF90XzYgPSBQeUNGdW5jdGlv bl9OZXdFeCgmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTFfX3B5eF91bnBpY2ts ZV9Qcm9wZXJ0eSwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19w eXhfbl9zX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigx LCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOwotIAotLS8qIFB5T2JqZWN0Q2FsbE9uZUFyZyAqLwotLSNpZiBDWVRIT05fQ09NUElM SU5HX0lOX0NQWVRIT04KLS1zdGF0aWMgUHlPYmplY3QqIF9fUHl4X19QeU9iamVjdF9DYWxsT25l QXJnKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJnKSB7Ci0tICAgIFB5T2JqZWN0ICpyZXN1 bHQ7Ci0tICAgIFB5T2JqZWN0ICphcmdzID0gUHlUdXBsZV9OZXcoMSk7Ci0tICAgIGlmICh1bmxp a2VseSghYXJncykpIHJldHVybiBOVUxMOwotLSAgICBQeV9JTkNSRUYoYXJnKTsKLS0gICAgUHlU dXBsZV9TRVRfSVRFTShhcmdzLCAwLCBhcmcpOwotLSAgICByZXN1bHQgPSBfX1B5eF9QeU9iamVj dF9DYWxsKGZ1bmMsIGFyZ3MsIE5VTEwpOwotLSAgICBQeV9ERUNSRUYoYXJncyk7Ci0tICAgIHJl dHVybiByZXN1bHQ7Ci0tfQotLXN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9Q eU9iamVjdF9DYWxsT25lQXJnKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJnKSB7Ci0tI2lm IENZVEhPTl9GQVNUX1BZQ0FMTAotLSAgICBpZiAoUHlGdW5jdGlvbl9DaGVjayhmdW5jKSkgewot LSAgICAgICAgcmV0dXJuIF9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGwoZnVuYywgJmFyZywgMSk7 Ci0tICAgIH0KLS0jZW5kaWYKLS0gICAgaWYgKGxpa2VseShQeUNGdW5jdGlvbl9DaGVjayhmdW5j KSkpIHsKLS0gICAgICAgIGlmIChsaWtlbHkoUHlDRnVuY3Rpb25fR0VUX0ZMQUdTKGZ1bmMpICYg TUVUSF9PKSkgewotLSAgICAgICAgICAgIHJldHVybiBfX1B5eF9QeU9iamVjdF9DYWxsTWV0aE8o ZnVuYywgYXJnKTsKLS0jaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAotLSAgICAgICAgfSBlbHNlIGlm IChQeUNGdW5jdGlvbl9HRVRfRkxBR1MoZnVuYykgJiBNRVRIX0ZBU1RDQUxMKSB7Ci0tICAgICAg ICAgICAgcmV0dXJuIF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKGZ1bmMsICZhcmcsIDEpOwot LSNlbmRpZgotLSAgICAgICAgfQotLSAgICB9Ci0tICAgIHJldHVybiBfX1B5eF9fUHlPYmplY3Rf Q2FsbE9uZUFyZyhmdW5jLCBhcmcpOwotLX0KLS0jZWxzZQotLXN0YXRpYyBDWVRIT05fSU5MSU5F IFB5T2JqZWN0KiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKFB5T2JqZWN0ICpmdW5jLCBQeU9i amVjdCAqYXJnKSB7Ci0tICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0tICAgIFB5T2JqZWN0ICphcmdz ID0gUHlUdXBsZV9QYWNrKDEsIGFyZyk7Ci0tICAgIGlmICh1bmxpa2VseSghYXJncykpIHJldHVy biBOVUxMOwotLSAgICByZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9DYWxsKGZ1bmMsIGFyZ3MsIE5V TEwpOwotLSAgICBQeV9ERUNSRUYoYXJncyk7Ci0tICAgIHJldHVybiByZXN1bHQ7Ci0tfQotLSNl bmRpZgotKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKLSsgKiAgICAgICAgIF9fcHl4X3VucGlj a2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoPFByb3BlcnR5PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0 YXRlKQotKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Ci0rICogY2RlZiBfX3B5eF91bnBpY2ts ZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKFByb3BlcnR5IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhf c3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0rICogICAgIF9fcHl4X3Jlc3Vs dC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5uYW1lID0gX19weXhfc3RhdGVb MV0KLSsgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVz dWx0LCAnX19kaWN0X18nKToKLSsgKi8KLSsgIF9fcHl4X3RfNiA9IFB5Q0Z1bmN0aW9uX05ld0V4 KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19fcHl4X3VucGlja2xlX0V2ZW50 LCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HT1RSRUYo X19weXhfdF82KTsKLSsgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfcHl4 X3VucGlja2xlX0V2ZW50LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wx X2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0t LyogUHlFcnJGZXRjaFJlc3RvcmUgKi8KLS0jaWYgQ1lUSE9OX0ZBU1RfVEhSRUFEX1NUQVRFCi0t c3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9FcnJSZXN0b3JlSW5TdGF0ZShQeVRocmVh ZFN0YXRlICp0c3RhdGUsIFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0 ICp0YikgewotLSAgICBQeU9iamVjdCAqdG1wX3R5cGUsICp0bXBfdmFsdWUsICp0bXBfdGI7Ci0t ICAgIHRtcF90eXBlID0gdHN0YXRlLT5jdXJleGNfdHlwZTsKLS0gICAgdG1wX3ZhbHVlID0gdHN0 YXRlLT5jdXJleGNfdmFsdWU7Ci0tICAgIHRtcF90YiA9IHRzdGF0ZS0+Y3VyZXhjX3RyYWNlYmFj azsKLS0gICAgdHN0YXRlLT5jdXJleGNfdHlwZSA9IHR5cGU7Ci0tICAgIHRzdGF0ZS0+Y3VyZXhj X3ZhbHVlID0gdmFsdWU7Ci0tICAgIHRzdGF0ZS0+Y3VyZXhjX3RyYWNlYmFjayA9IHRiOwotLSAg ICBQeV9YREVDUkVGKHRtcF90eXBlKTsKLS0gICAgUHlfWERFQ1JFRih0bXBfdmFsdWUpOwotLSAg ICBQeV9YREVDUkVGKHRtcF90Yik7Ci0tfQotLXN0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgX19Q eXhfRXJyRmV0Y2hJblN0YXRlKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlPYmplY3QgKip0eXBl LCBQeU9iamVjdCAqKnZhbHVlLCBQeU9iamVjdCAqKnRiKSB7Ci0tICAgICp0eXBlID0gdHN0YXRl LT5jdXJleGNfdHlwZTsKLS0gICAgKnZhbHVlID0gdHN0YXRlLT5jdXJleGNfdmFsdWU7Ci0tICAg ICp0YiA9IHRzdGF0ZS0+Y3VyZXhjX3RyYWNlYmFjazsKLS0gICAgdHN0YXRlLT5jdXJleGNfdHlw ZSA9IDA7Ci0tICAgIHRzdGF0ZS0+Y3VyZXhjX3ZhbHVlID0gMDsKLS0gICAgdHN0YXRlLT5jdXJl eGNfdHJhY2ViYWNrID0gMDsKLS19Ci0tI2VuZGlmCi0rICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox Ci0rICogZGVmIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyhfX3B5eF90eXBlLCBsb25n IF9fcHl4X2NoZWNrc3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSsgKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKLSsgKiAgICAgY2RlZiBv YmplY3QgX19weXhfcmVzdWx0Ci0rICovCi0rICBfX3B5eF90XzYgPSBQeUNGdW5jdGlvbl9OZXdF eCgmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVfX3B5eF91bnBpY2tsZV9SZW5k ZXJGcmFtZUluZm8sIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f UHl4X0dPVFJFRihfX3B5eF90XzYpOwotKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9f cHl4X25fc19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCBfX3B5eF90XzYpIDwgMCkgX19Q WVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7 IF9fcHl4X3RfNiA9IDA7Ci0gCi0tLyogR2V0QXR0ciAqLwotLXN0YXRpYyBDWVRIT05fSU5MSU5F IFB5T2JqZWN0ICpfX1B5eF9HZXRBdHRyKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqbikgewotLSNp ZiBDWVRIT05fVVNFX1RZUEVfU0xPVFMKLS0jaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0tICAg IGlmIChsaWtlbHkoUHlVbmljb2RlX0NoZWNrKG4pKSkKLS0jZWxzZQotLSAgICBpZiAobGlrZWx5 KFB5U3RyaW5nX0NoZWNrKG4pKSkKLS0jZW5kaWYKLS0gICAgICAgIHJldHVybiBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKG8sIG4pOwotLSNlbmRpZgotLSAgICByZXR1cm4gUHlPYmplY3RfR2V0 QXR0cihvLCBuKTsKLS19Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MQot KyAqICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotKyAqICMgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKLSsgKiAjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICovCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeURp Y3RfTmV3UHJlc2l6ZWQoMCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0rICBpZiAo UHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3Rlc3QsIF9fcHl4X3RfNikgPCAwKSBf X1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9ERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKLSAKLS0vKiBHZXRBdHRyMyAqLwotLXN0YXRpYyBQeU9iamVjdCAq X19QeXhfR2V0QXR0cjNEZWZhdWx0KFB5T2JqZWN0ICpkKSB7Ci0tICAgIF9fUHl4X1B5VGhyZWFk U3RhdGVfZGVjbGFyZQotLSAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgotLSAgICBpZiAo dW5saWtlbHkoIV9fUHl4X1B5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJy b3IpKSkKLS0gICAgICAgIHJldHVybiBOVUxMOwotLSAgICBfX1B5eF9QeUVycl9DbGVhcigpOwot LSAgICBQeV9JTkNSRUYoZCk7Ci0tICAgIHJldHVybiBkOwotKyAgLyotLS0gV3JhcHBlZCB2YXJz IGNvZGUgLS0tKi8KLSsKLSsgIGdvdG8gX19weXhfTDA7Ci0rICBfX3B5eF9MMV9lcnJvcjo7Ci0r ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7 Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Nik7Ci0rICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7Ci0rICBpZiAoX19weXhfbSkgewotKyAg ICBpZiAoX19weXhfZCkgewotKyAgICAgIF9fUHl4X0FkZFRyYWNlYmFjaygiaW5pdCB2aWRjdXR0 ZXIubGlicy5tcHYiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1l KTsKLSsgICAgfQotKyAgICBQeV9DTEVBUihfX3B5eF9tKTsKLSsgIH0gZWxzZSBpZiAoIVB5RXJy X09jY3VycmVkKCkpIHsKLSsgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9ydEVycm9yLCAi aW5pdCB2aWRjdXR0ZXIubGlicy5tcHYiKTsKLSsgIH0KLSsgIF9fcHl4X0wwOjsKLSsgIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotKyAgI2lmIENZVEhPTl9QRVA0ODlfTVVMVElfUEhB U0VfSU5JVAotKyAgcmV0dXJuIChfX3B5eF9tICE9IE5VTEwpID8gMCA6IC0xOwotKyAgI2VsaWYg UFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0rICByZXR1cm4gX19weXhfbTsKLSsgICNlbHNlCi0rICBy ZXR1cm47Ci0rICAjZW5kaWYKLSB9Ci0tc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QgKl9f UHl4X0dldEF0dHIzKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqbiwgUHlPYmplY3QgKmQpIHsKLS0g ICAgUHlPYmplY3QgKnIgPSBfX1B5eF9HZXRBdHRyKG8sIG4pOwotLSAgICByZXR1cm4gKGxpa2Vs eShyKSkgPyByIDogX19QeXhfR2V0QXR0cjNEZWZhdWx0KGQpOwotKwotKy8qIC0tLSBSdW50aW1l IHN1cHBvcnQgY29kZSAtLS0gKi8KLSsvKiBSZWZuYW5ueSAqLwotKyNpZiBDWVRIT05fUkVGTkFO TlkKLStzdGF0aWMgX19QeXhfUmVmTmFubnlBUElTdHJ1Y3QgKl9fUHl4X1JlZk5hbm55SW1wb3J0 QVBJKGNvbnN0IGNoYXIgKm1vZG5hbWUpIHsKLSsgICAgUHlPYmplY3QgKm0gPSBOVUxMLCAqcCA9 IE5VTEw7Ci0rICAgIHZvaWQgKnIgPSBOVUxMOwotKyAgICBtID0gUHlJbXBvcnRfSW1wb3J0TW9k dWxlKG1vZG5hbWUpOwotKyAgICBpZiAoIW0pIGdvdG8gZW5kOwotKyAgICBwID0gUHlPYmplY3Rf R2V0QXR0clN0cmluZyhtLCAiUmVmTmFubnlBUEkiKTsKLSsgICAgaWYgKCFwKSBnb3RvIGVuZDsK LSsgICAgciA9IFB5TG9uZ19Bc1ZvaWRQdHIocCk7Ci0rZW5kOgotKyAgICBQeV9YREVDUkVGKHAp OwotKyAgICBQeV9YREVDUkVGKG0pOwotKyAgICByZXR1cm4gKF9fUHl4X1JlZk5hbm55QVBJU3Ry dWN0ICopcjsKLSB9Ci0rI2VuZGlmCi0gCi0tLyogUHlPYmplY3RDYWxsMkFyZ3MgKi8KLS1zdGF0 aWMgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCogX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKFB5T2Jq ZWN0KiBmdW5jdGlvbiwgUHlPYmplY3QqIGFyZzEsIFB5T2JqZWN0KiBhcmcyKSB7Ci0tICAgIFB5 T2JqZWN0ICphcmdzLCAqcmVzdWx0ID0gTlVMTDsKLS0gICAgI2lmIENZVEhPTl9GQVNUX1BZQ0FM TAotLSAgICBpZiAoUHlGdW5jdGlvbl9DaGVjayhmdW5jdGlvbikpIHsKLS0gICAgICAgIFB5T2Jq ZWN0ICphcmdzWzJdID0ge2FyZzEsIGFyZzJ9OwotLSAgICAgICAgcmV0dXJuIF9fUHl4X1B5RnVu Y3Rpb25fRmFzdENhbGwoZnVuY3Rpb24sIGFyZ3MsIDIpOwotLSAgICB9Ci0tICAgICNlbmRpZgot LSAgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAotLSAgICBpZiAoX19QeXhfUHlGYXN0Q0Z1bmN0 aW9uX0NoZWNrKGZ1bmN0aW9uKSkgewotLSAgICAgICAgUHlPYmplY3QgKmFyZ3NbMl0gPSB7YXJn MSwgYXJnMn07Ci0tICAgICAgICByZXR1cm4gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoZnVu Y3Rpb24sIGFyZ3MsIDIpOwotLSAgICB9Ci0tICAgICNlbmRpZgotLSAgICBhcmdzID0gUHlUdXBs ZV9OZXcoMik7Ci0tICAgIGlmICh1bmxpa2VseSghYXJncykpIGdvdG8gZG9uZTsKLS0gICAgUHlf SU5DUkVGKGFyZzEpOwotLSAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDAsIGFyZzEpOwotLSAg ICBQeV9JTkNSRUYoYXJnMik7Ci0tICAgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMSwgYXJnMik7 Ci0tICAgIFB5X0lOQ1JFRihmdW5jdGlvbik7Ci0tICAgIHJlc3VsdCA9IF9fUHl4X1B5T2JqZWN0 X0NhbGwoZnVuY3Rpb24sIGFyZ3MsIE5VTEwpOwotLSAgICBQeV9ERUNSRUYoYXJncyk7Ci0tICAg IFB5X0RFQ1JFRihmdW5jdGlvbik7Ci0tZG9uZToKLS0gICAgcmV0dXJuIHJlc3VsdDsKLSsvKiBQ eU9iamVjdEdldEF0dHJTdHIgKi8KLSsjaWYgQ1lUSE9OX1VTRV9UWVBFX1NMT1RTCi0rc3RhdGlj IENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoUHlPYmpl Y3QqIG9iaiwgUHlPYmplY3QqIGF0dHJfbmFtZSkgewotKyAgICBQeVR5cGVPYmplY3QqIHRwID0g UHlfVFlQRShvYmopOwotKyAgICBpZiAobGlrZWx5KHRwLT50cF9nZXRhdHRybykpCi0rICAgICAg ICByZXR1cm4gdHAtPnRwX2dldGF0dHJvKG9iaiwgYXR0cl9uYW1lKTsKLSsjaWYgUFlfTUFKT1Jf VkVSU0lPTiA8IDMKLSsgICAgaWYgKGxpa2VseSh0cC0+dHBfZ2V0YXR0cikpCi0rICAgICAgICBy ZXR1cm4gdHAtPnRwX2dldGF0dHIob2JqLCBQeVN0cmluZ19BU19TVFJJTkcoYXR0cl9uYW1lKSk7 Ci0rI2VuZGlmCi0rICAgIHJldHVybiBQeU9iamVjdF9HZXRBdHRyKG9iaiwgYXR0cl9uYW1lKTsK LSB9Ci0tCi0tLyogUHlPYmplY3RHZXRNZXRob2QgKi8KLS1zdGF0aWMgaW50IF9fUHl4X1B5T2Jq ZWN0X0dldE1ldGhvZChQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKipt ZXRob2QpIHsKLS0gICAgUHlPYmplY3QgKmF0dHI7Ci0tI2lmIENZVEhPTl9VTlBBQ0tfTUVUSE9E UyAmJiBDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRIT04gJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9P S1VQCi0tICAgIFB5VHlwZU9iamVjdCAqdHAgPSBQeV9UWVBFKG9iaik7Ci0tICAgIFB5T2JqZWN0 ICpkZXNjcjsKLS0gICAgZGVzY3JnZXRmdW5jIGYgPSBOVUxMOwotLSAgICBQeU9iamVjdCAqKmRp Y3RwdHIsICpkaWN0OwotLSAgICBpbnQgbWV0aF9mb3VuZCA9IDA7Ci0tICAgIGFzc2VydCAoKm1l dGhvZCA9PSBOVUxMKTsKLS0gICAgaWYgKHVubGlrZWx5KHRwLT50cF9nZXRhdHRybyAhPSBQeU9i amVjdF9HZW5lcmljR2V0QXR0cikpIHsKLS0gICAgICAgIGF0dHIgPSBfX1B5eF9QeU9iamVjdF9H ZXRBdHRyU3RyKG9iaiwgbmFtZSk7Ci0tICAgICAgICBnb3RvIHRyeV91bnBhY2s7Ci0tICAgIH0K LS0gICAgaWYgKHVubGlrZWx5KHRwLT50cF9kaWN0ID09IE5VTEwpICYmIHVubGlrZWx5KFB5VHlw ZV9SZWFkeSh0cCkgPCAwKSkgewotLSAgICAgICAgcmV0dXJuIDA7Ci0tICAgIH0KLS0gICAgZGVz Y3IgPSBfUHlUeXBlX0xvb2t1cCh0cCwgbmFtZSk7Ci0tICAgIGlmIChsaWtlbHkoZGVzY3IgIT0g TlVMTCkpIHsKLS0gICAgICAgIFB5X0lOQ1JFRihkZXNjcik7Ci0tI2lmIFBZX01BSk9SX1ZFUlNJ T04gPj0gMwotLSAgICAgICAgI2lmZGVmIF9fUHl4X0N5RnVuY3Rpb25fVVNFRAotLSAgICAgICAg aWYgKGxpa2VseShQeUZ1bmN0aW9uX0NoZWNrKGRlc2NyKSB8fCAoUHlfVFlQRShkZXNjcikgPT0g JlB5TWV0aG9kRGVzY3JfVHlwZSkgfHwgX19QeXhfQ3lGdW5jdGlvbl9DaGVjayhkZXNjcikpKQot LSAgICAgICAgI2Vsc2UKLS0gICAgICAgIGlmIChsaWtlbHkoUHlGdW5jdGlvbl9DaGVjayhkZXNj cikgfHwgKFB5X1RZUEUoZGVzY3IpID09ICZQeU1ldGhvZERlc2NyX1R5cGUpKSkKLS0gICAgICAg ICNlbmRpZgotLSNlbHNlCi0tICAgICAgICAjaWZkZWYgX19QeXhfQ3lGdW5jdGlvbl9VU0VECi0t ICAgICAgICBpZiAobGlrZWx5KFB5RnVuY3Rpb25fQ2hlY2soZGVzY3IpIHx8IF9fUHl4X0N5RnVu Y3Rpb25fQ2hlY2soZGVzY3IpKSkKLS0gICAgICAgICNlbHNlCi0tICAgICAgICBpZiAobGlrZWx5 KFB5RnVuY3Rpb25fQ2hlY2soZGVzY3IpKSkKLS0gICAgICAgICNlbmRpZgotICNlbmRpZgotLSAg ICAgICAgewotLSAgICAgICAgICAgIG1ldGhfZm91bmQgPSAxOwotLSAgICAgICAgfSBlbHNlIHsK LS0gICAgICAgICAgICBmID0gUHlfVFlQRShkZXNjciktPnRwX2Rlc2NyX2dldDsKLS0gICAgICAg ICAgICBpZiAoZiAhPSBOVUxMICYmIFB5RGVzY3JfSXNEYXRhKGRlc2NyKSkgewotLSAgICAgICAg ICAgICAgICBhdHRyID0gZihkZXNjciwgb2JqLCAoUHlPYmplY3QgKilQeV9UWVBFKG9iaikpOwot LSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVzY3IpOwotLSAgICAgICAgICAgICAgICBnb3Rv IHRyeV91bnBhY2s7Ci0tICAgICAgICAgICAgfQotLSAgICAgICAgfQotLSAgICB9Ci0tICAgIGRp Y3RwdHIgPSBfUHlPYmplY3RfR2V0RGljdFB0cihvYmopOwotLSAgICBpZiAoZGljdHB0ciAhPSBO VUxMICYmIChkaWN0ID0gKmRpY3RwdHIpICE9IE5VTEwpIHsKLS0gICAgICAgIFB5X0lOQ1JFRihk aWN0KTsKLS0gICAgICAgIGF0dHIgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihkaWN0LCBuYW1l KTsKLS0gICAgICAgIGlmIChhdHRyICE9IE5VTEwpIHsKLS0gICAgICAgICAgICBQeV9JTkNSRUYo YXR0cik7Ci0tICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOwotLSAgICAgICAgICAgIFB5X1hE RUNSRUYoZGVzY3IpOwotLSAgICAgICAgICAgIGdvdG8gdHJ5X3VucGFjazsKLS0gICAgICAgIH0K LS0gICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKLS0gICAgfQotLSAgICBpZiAobWV0aF9mb3VuZCkg ewotLSAgICAgICAgKm1ldGhvZCA9IGRlc2NyOwotLSAgICAgICAgcmV0dXJuIDE7Ci0tICAgIH0K LS0gICAgaWYgKGYgIT0gTlVMTCkgewotLSAgICAgICAgYXR0ciA9IGYoZGVzY3IsIG9iaiwgKFB5 T2JqZWN0ICopUHlfVFlQRShvYmopKTsKLS0gICAgICAgIFB5X0RFQ1JFRihkZXNjcik7Ci0tICAg ICAgICBnb3RvIHRyeV91bnBhY2s7Ci0tICAgIH0KLS0gICAgaWYgKGRlc2NyICE9IE5VTEwpIHsK LS0gICAgICAgICptZXRob2QgPSBkZXNjcjsKLS0gICAgICAgIHJldHVybiAwOwotLSAgICB9Ci0t ICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKLSsKLSsvKiBHZXRCdWlsdGlu TmFtZSAqLwotK3N0YXRpYyBQeU9iamVjdCAqX19QeXhfR2V0QnVpbHRpbk5hbWUoUHlPYmplY3Qg Km5hbWUpIHsKLSsgICAgUHlPYmplY3QqIHJlc3VsdCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfYiwgbmFtZSk7Ci0rICAgIGlmICh1bmxpa2VseSghcmVzdWx0KSkgewotKyAgICAg ICAgUHlFcnJfRm9ybWF0KFB5RXhjX05hbWVFcnJvciwKLSAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+ PSAzCi0tICAgICAgICAgICAgICAgICAiJyUuNTBzJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAn JVUnIiwKLS0gICAgICAgICAgICAgICAgIHRwLT50cF9uYW1lLCBuYW1lKTsKLS0jZWxzZQotLSAg ICAgICAgICAgICAgICAgIiclLjUwcycgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJyUuNDAwcyci LAotLSAgICAgICAgICAgICAgICAgdHAtPnRwX25hbWUsIFB5U3RyaW5nX0FTX1NUUklORyhuYW1l KSk7Ci0tI2VuZGlmCi0tICAgIHJldHVybiAwOwotKyAgICAgICAgICAgICJuYW1lICclVScgaXMg bm90IGRlZmluZWQiLCBuYW1lKTsKLSAjZWxzZQotLSAgICBhdHRyID0gX19QeXhfUHlPYmplY3Rf R2V0QXR0clN0cihvYmosIG5hbWUpOwotLSAgICBnb3RvIHRyeV91bnBhY2s7Ci0rICAgICAgICAg ICAgIm5hbWUgJyUuMjAwcycgaXMgbm90IGRlZmluZWQiLCBQeVN0cmluZ19BU19TVFJJTkcobmFt ZSkpOwotICNlbmRpZgotLXRyeV91bnBhY2s6Ci0tI2lmIENZVEhPTl9VTlBBQ0tfTUVUSE9EUwot LSAgICBpZiAobGlrZWx5KGF0dHIpICYmIFB5TWV0aG9kX0NoZWNrKGF0dHIpICYmIGxpa2VseShQ eU1ldGhvZF9HRVRfU0VMRihhdHRyKSA9PSBvYmopKSB7Ci0tICAgICAgICBQeU9iamVjdCAqZnVu Y3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oYXR0cik7Ci0tICAgICAgICBQeV9JTkNSRUYo ZnVuY3Rpb24pOwotLSAgICAgICAgUHlfREVDUkVGKGF0dHIpOwotLSAgICAgICAgKm1ldGhvZCA9 IGZ1bmN0aW9uOwotLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgIH0KLS0jZW5kaWYKLS0gICAgKm1l dGhvZCA9IGF0dHI7Ci0tICAgIHJldHVybiAwOwotLX0KLS0KLS0vKiBQeU9iamVjdENhbGxNZXRo b2QxICovCi0tc3RhdGljIFB5T2JqZWN0KiBfX1B5eF9fUHlPYmplY3RfQ2FsbE1ldGhvZDEoUHlP YmplY3QqIG1ldGhvZCwgUHlPYmplY3QqIGFyZykgewotLSAgICBQeU9iamVjdCAqcmVzdWx0ID0g X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhtZXRob2QsIGFyZyk7Ci0tICAgIFB5X0RFQ1JFRiht ZXRob2QpOwotICAgICByZXR1cm4gcmVzdWx0OwotIH0KLS1zdGF0aWMgUHlPYmplY3QqIF9fUHl4 X1B5T2JqZWN0X0NhbGxNZXRob2QxKFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0KiBtZXRob2RfbmFt ZSwgUHlPYmplY3QqIGFyZykgewotLSAgICBQeU9iamVjdCAqbWV0aG9kID0gTlVMTCwgKnJlc3Vs dDsKLS0gICAgaW50IGlzX21ldGhvZCA9IF9fUHl4X1B5T2JqZWN0X0dldE1ldGhvZChvYmosIG1l dGhvZF9uYW1lLCAmbWV0aG9kKTsKLS0gICAgaWYgKGxpa2VseShpc19tZXRob2QpKSB7Ci0tICAg ICAgICByZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MobWV0aG9kLCBvYmosIGFyZyk7 Ci0tICAgICAgICBQeV9ERUNSRUYobWV0aG9kKTsKLS0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0t ICAgIH0KLS0gICAgaWYgKHVubGlrZWx5KCFtZXRob2QpKSByZXR1cm4gTlVMTDsKLS0gICAgcmV0 dXJuIF9fUHl4X19QeU9iamVjdF9DYWxsTWV0aG9kMShtZXRob2QsIGFyZyk7Ci0tfQotIAotLS8q IGFwcGVuZCAqLwotLXN0YXRpYyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9QeU9iamVjdF9BcHBl bmQoUHlPYmplY3QqIEwsIFB5T2JqZWN0KiB4KSB7Ci0tICAgIGlmIChsaWtlbHkoUHlMaXN0X0No ZWNrRXhhY3QoTCkpKSB7Ci0tICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUHlMaXN0X0FwcGVu ZChMLCB4KSA8IDApKSByZXR1cm4gLTE7Ci0tICAgIH0gZWxzZSB7Ci0tICAgICAgICBQeU9iamVj dCogcmV0dmFsID0gX19QeXhfUHlPYmplY3RfQ2FsbE1ldGhvZDEoTCwgX19weXhfbl9zX2FwcGVu ZCwgeCk7Ci0tICAgICAgICBpZiAodW5saWtlbHkoIXJldHZhbCkpCi0tICAgICAgICAgICAgcmV0 dXJuIC0xOwotLSAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7Ci0tICAgIH0KLS0gICAgcmV0dXJu IDA7Ci0rLyogUHlEaWN0VmVyc2lvbmluZyAqLwotKyNpZiBDWVRIT05fVVNFX0RJQ1RfVkVSU0lP TlMgJiYgQ1lUSE9OX1VTRV9UWVBFX1NMT1RTCi0rc3RhdGljIENZVEhPTl9JTkxJTkUgUFlfVUlO VDY0X1QgX19QeXhfZ2V0X3RwX2RpY3RfdmVyc2lvbihQeU9iamVjdCAqb2JqKSB7Ci0rICAgIFB5 T2JqZWN0ICpkaWN0ID0gUHlfVFlQRShvYmopLT50cF9kaWN0OwotKyAgICByZXR1cm4gbGlrZWx5 KGRpY3QpID8gX19QWVhfR0VUX0RJQ1RfVkVSU0lPTihkaWN0KSA6IDA7Ci0gfQotLQotLS8qIFB5 T2JqZWN0Q2FsbE5vQXJnICovCi0rc3RhdGljIENZVEhPTl9JTkxJTkUgUFlfVUlOVDY0X1QgX19Q eXhfZ2V0X29iamVjdF9kaWN0X3ZlcnNpb24oUHlPYmplY3QgKm9iaikgewotKyAgICBQeU9iamVj dCAqKmRpY3RwdHIgPSBOVUxMOwotKyAgICBQeV9zc2l6ZV90IG9mZnNldCA9IFB5X1RZUEUob2Jq KS0+dHBfZGljdG9mZnNldDsKLSsgICAgaWYgKG9mZnNldCkgewotICNpZiBDWVRIT05fQ09NUElM SU5HX0lOX0NQWVRIT04KLS1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlP YmplY3RfQ2FsbE5vQXJnKFB5T2JqZWN0ICpmdW5jKSB7Ci0tI2lmIENZVEhPTl9GQVNUX1BZQ0FM TAotLSAgICBpZiAoUHlGdW5jdGlvbl9DaGVjayhmdW5jKSkgewotLSAgICAgICAgcmV0dXJuIF9f UHl4X1B5RnVuY3Rpb25fRmFzdENhbGwoZnVuYywgTlVMTCwgMCk7Ci0tICAgIH0KLS0jZW5kaWYK LS0jaWZkZWYgX19QeXhfQ3lGdW5jdGlvbl9VU0VECi0tICAgIGlmIChsaWtlbHkoUHlDRnVuY3Rp b25fQ2hlY2soZnVuYykgfHwgX19QeXhfQ3lGdW5jdGlvbl9DaGVjayhmdW5jKSkpCi0rICAgICAg ICBkaWN0cHRyID0gKGxpa2VseShvZmZzZXQgPiAwKSkgPyAoUHlPYmplY3QgKiopICgoY2hhciAq KW9iaiArIG9mZnNldCkgOiBfUHlPYmplY3RfR2V0RGljdFB0cihvYmopOwotICNlbHNlCi0tICAg IGlmIChsaWtlbHkoUHlDRnVuY3Rpb25fQ2hlY2soZnVuYykpKQotKyAgICAgICAgZGljdHB0ciA9 IF9QeU9iamVjdF9HZXREaWN0UHRyKG9iaik7Ci0gI2VuZGlmCi0tICAgIHsKLS0gICAgICAgIGlm IChsaWtlbHkoUHlDRnVuY3Rpb25fR0VUX0ZMQUdTKGZ1bmMpICYgTUVUSF9OT0FSR1MpKSB7Ci0t ICAgICAgICAgICAgcmV0dXJuIF9fUHl4X1B5T2JqZWN0X0NhbGxNZXRoTyhmdW5jLCBOVUxMKTsK LS0gICAgICAgIH0KLSAgICAgfQotLSAgICByZXR1cm4gX19QeXhfUHlPYmplY3RfQ2FsbChmdW5j LCBfX3B5eF9lbXB0eV90dXBsZSwgTlVMTCk7Ci0rICAgIHJldHVybiAoZGljdHB0ciAmJiAqZGlj dHB0cikgPyBfX1BZWF9HRVRfRElDVF9WRVJTSU9OKCpkaWN0cHRyKSA6IDA7Ci0rfQotK3N0YXRp YyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9vYmplY3RfZGljdF92ZXJzaW9uX21hdGNoZXMoUHlP YmplY3QqIG9iaiwgUFlfVUlOVDY0X1QgdHBfZGljdF92ZXJzaW9uLCBQWV9VSU5UNjRfVCBvYmpf ZGljdF92ZXJzaW9uKSB7Ci0rICAgIFB5T2JqZWN0ICpkaWN0ID0gUHlfVFlQRShvYmopLT50cF9k aWN0OwotKyAgICBpZiAodW5saWtlbHkoIWRpY3QpIHx8IHVubGlrZWx5KHRwX2RpY3RfdmVyc2lv biAhPSBfX1BZWF9HRVRfRElDVF9WRVJTSU9OKGRpY3QpKSkKLSsgICAgICAgIHJldHVybiAwOwot KyAgICByZXR1cm4gb2JqX2RpY3RfdmVyc2lvbiA9PSBfX1B5eF9nZXRfb2JqZWN0X2RpY3RfdmVy c2lvbihvYmopOwotIH0KLSAjZW5kaWYKLSAKLS0vKiBHZXRJdGVtSW50ICovCi0tc3RhdGljIFB5 T2JqZWN0ICpfX1B5eF9HZXRJdGVtSW50X0dlbmVyaWMoUHlPYmplY3QgKm8sIFB5T2JqZWN0KiBq KSB7Ci0tICAgIFB5T2JqZWN0ICpyOwotLSAgICBpZiAoIWopIHJldHVybiBOVUxMOwotLSAgICBy ID0gUHlPYmplY3RfR2V0SXRlbShvLCBqKTsKLS0gICAgUHlfREVDUkVGKGopOwotLSAgICByZXR1 cm4gcjsKLS19Ci0tc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QgKl9fUHl4X0dldEl0ZW1J bnRfTGlzdF9GYXN0KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGksCi0tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDWVRIT05fTkNQ X1VOVVNFRCBpbnQgd3JhcGFyb3VuZCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENZVEhPTl9OQ1BfVU5VU0VEIGludCBib3Vu ZHNjaGVjaykgewotLSNpZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZP SURfQk9SUk9XRURfUkVGUwotLSAgICBQeV9zc2l6ZV90IHdyYXBwZWRfaSA9IGk7Ci0tICAgIGlm ICh3cmFwYXJvdW5kICYgdW5saWtlbHkoaSA8IDApKSB7Ci0tICAgICAgICB3cmFwcGVkX2kgKz0g UHlMaXN0X0dFVF9TSVpFKG8pOwotKy8qIEdldE1vZHVsZUdsb2JhbE5hbWUgKi8KLSsjaWYgQ1lU SE9OX1VTRV9ESUNUX1ZFUlNJT05TCi0rc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9fR2V0TW9kdWxl R2xvYmFsTmFtZShQeU9iamVjdCAqbmFtZSwgUFlfVUlOVDY0X1QgKmRpY3RfdmVyc2lvbiwgUHlP YmplY3QgKipkaWN0X2NhY2hlZF92YWx1ZSkKLSsjZWxzZQotK3N0YXRpYyBDWVRIT05fSU5MSU5F IFB5T2JqZWN0ICpfX1B5eF9fR2V0TW9kdWxlR2xvYmFsTmFtZShQeU9iamVjdCAqbmFtZSkKLSsj ZW5kaWYKLSt7Ci0rICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0rI2lmICFDWVRIT05fQVZPSURfQk9S Uk9XRURfUkVGUwotKyNpZiBDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRIT04gJiYgUFlfVkVSU0lP Tl9IRVggPj0gMHgwMzA1MDBBMQotKyAgICByZXN1bHQgPSBfUHlEaWN0X0dldEl0ZW1fS25vd25I YXNoKF9fcHl4X2QsIG5hbWUsICgoUHlBU0NJSU9iamVjdCAqKSBuYW1lKS0+aGFzaCk7Ci0rICAg IF9fUFlYX1VQREFURV9ESUNUX0NBQ0hFKF9fcHl4X2QsIHJlc3VsdCwgKmRpY3RfY2FjaGVkX3Zh bHVlLCAqZGljdF92ZXJzaW9uKQotKyAgICBpZiAobGlrZWx5KHJlc3VsdCkpIHsKLSsgICAgICAg IHJldHVybiBfX1B5eF9OZXdSZWYocmVzdWx0KTsKLSsgICAgfSBlbHNlIGlmICh1bmxpa2VseShQ eUVycl9PY2N1cnJlZCgpKSkgewotKyAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgIH0KLS0gICAg aWYgKCghYm91bmRzY2hlY2spIHx8IGxpa2VseShfX1B5eF9pc192YWxpZF9pbmRleCh3cmFwcGVk X2ksIFB5TGlzdF9HRVRfU0laRShvKSkpKSB7Ci0tICAgICAgICBQeU9iamVjdCAqciA9IFB5TGlz dF9HRVRfSVRFTShvLCB3cmFwcGVkX2kpOwotLSAgICAgICAgUHlfSU5DUkVGKHIpOwotLSAgICAg ICAgcmV0dXJuIHI7Ci0rI2Vsc2UKLSsgICAgcmVzdWx0ID0gUHlEaWN0X0dldEl0ZW0oX19weXhf ZCwgbmFtZSk7Ci0rICAgIF9fUFlYX1VQREFURV9ESUNUX0NBQ0hFKF9fcHl4X2QsIHJlc3VsdCwg KmRpY3RfY2FjaGVkX3ZhbHVlLCAqZGljdF92ZXJzaW9uKQotKyAgICBpZiAobGlrZWx5KHJlc3Vs dCkpIHsKLSsgICAgICAgIHJldHVybiBfX1B5eF9OZXdSZWYocmVzdWx0KTsKLSsgICAgfQotKyNl bmRpZgotKyNlbHNlCi0rICAgIHJlc3VsdCA9IFB5T2JqZWN0X0dldEl0ZW0oX19weXhfZCwgbmFt ZSk7Ci0rICAgIF9fUFlYX1VQREFURV9ESUNUX0NBQ0hFKF9fcHl4X2QsIHJlc3VsdCwgKmRpY3Rf Y2FjaGVkX3ZhbHVlLCAqZGljdF92ZXJzaW9uKQotKyAgICBpZiAobGlrZWx5KHJlc3VsdCkpIHsK LSsgICAgICAgIHJldHVybiBfX1B5eF9OZXdSZWYocmVzdWx0KTsKLSAgICAgfQotLSAgICByZXR1 cm4gX19QeXhfR2V0SXRlbUludF9HZW5lcmljKG8sIFB5SW50X0Zyb21Tc2l6ZV90KGkpKTsKLS0j ZWxzZQotLSAgICByZXR1cm4gUHlTZXF1ZW5jZV9HZXRJdGVtKG8sIGkpOwotKyAgICBQeUVycl9D bGVhcigpOwotICNlbmRpZgotKyAgICByZXR1cm4gX19QeXhfR2V0QnVpbHRpbk5hbWUobmFtZSk7 Ci0gfQotLXN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0ICpfX1B5eF9HZXRJdGVtSW50X1R1 cGxlX0Zhc3QoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgaSwKLS0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENZVEhPTl9OQ1BfVU5V U0VEIGludCB3cmFwYXJvdW5kLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX05DUF9VTlVTRUQgaW50IGJvdW5kc2No ZWNrKSB7Ci0tI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9C T1JST1dFRF9SRUZTCi0tICAgIFB5X3NzaXplX3Qgd3JhcHBlZF9pID0gaTsKLS0gICAgaWYgKHdy YXBhcm91bmQgJiB1bmxpa2VseShpIDwgMCkpIHsKLS0gICAgICAgIHdyYXBwZWRfaSArPSBQeVR1 cGxlX0dFVF9TSVpFKG8pOwotKwotKy8qIFB5RnVuY3Rpb25GYXN0Q2FsbCAqLwotKyNpZiBDWVRI T05fRkFTVF9QWUNBTEwKLStzdGF0aWMgUHlPYmplY3QqIF9fUHl4X1B5RnVuY3Rpb25fRmFzdENh bGxOb0t3KFB5Q29kZU9iamVjdCAqY28sIFB5T2JqZWN0ICoqYXJncywgUHlfc3NpemVfdCBuYSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0 ICpnbG9iYWxzKSB7Ci0rICAgIFB5RnJhbWVPYmplY3QgKmY7Ci0rICAgIFB5VGhyZWFkU3RhdGUg KnRzdGF0ZSA9IF9fUHl4X1B5VGhyZWFkU3RhdGVfQ3VycmVudDsKLSsgICAgUHlPYmplY3QgKipm YXN0bG9jYWxzOwotKyAgICBQeV9zc2l6ZV90IGk7Ci0rICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0r ICAgIGFzc2VydChnbG9iYWxzICE9IE5VTEwpOwotKyAgICAvKiBYWFggUGVyaGFwcyB3ZSBzaG91 bGQgY3JlYXRlIGEgc3BlY2lhbGl6ZWQKLSsgICAgICAgUHlGcmFtZV9OZXcoKSB0aGF0IGRvZXNu J3QgdGFrZSBsb2NhbHMsIGJ1dCBkb2VzCi0rICAgICAgIHRha2UgYnVpbHRpbnMgd2l0aG91dCBz YW5pdHkgY2hlY2tpbmcgdGhlbS4KLSsgICAgICAgKi8KLSsgICAgYXNzZXJ0KHRzdGF0ZSAhPSBO VUxMKTsKLSsgICAgZiA9IFB5RnJhbWVfTmV3KHRzdGF0ZSwgY28sIGdsb2JhbHMsIE5VTEwpOwot KyAgICBpZiAoZiA9PSBOVUxMKSB7Ci0rICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgfQotLSAg ICBpZiAoKCFib3VuZHNjaGVjaykgfHwgbGlrZWx5KF9fUHl4X2lzX3ZhbGlkX2luZGV4KHdyYXBw ZWRfaSwgUHlUdXBsZV9HRVRfU0laRShvKSkpKSB7Ci0tICAgICAgICBQeU9iamVjdCAqciA9IFB5 VHVwbGVfR0VUX0lURU0obywgd3JhcHBlZF9pKTsKLS0gICAgICAgIFB5X0lOQ1JFRihyKTsKLS0g ICAgICAgIHJldHVybiByOwotKyAgICBmYXN0bG9jYWxzID0gX19QeXhfUHlGcmFtZV9HZXRMb2Nh bHNwbHVzKGYpOwotKyAgICBmb3IgKGkgPSAwOyBpIDwgbmE7IGkrKykgewotKyAgICAgICAgUHlf SU5DUkVGKCphcmdzKTsKLSsgICAgICAgIGZhc3Rsb2NhbHNbaV0gPSAqYXJncysrOwotICAgICB9 Ci0tICAgIHJldHVybiBfX1B5eF9HZXRJdGVtSW50X0dlbmVyaWMobywgUHlJbnRfRnJvbVNzaXpl X3QoaSkpOwotLSNlbHNlCi0tICAgIHJldHVybiBQeVNlcXVlbmNlX0dldEl0ZW0obywgaSk7Ci0t I2VuZGlmCi0rICAgIHJlc3VsdCA9IFB5RXZhbF9FdmFsRnJhbWVFeChmLDApOwotKyAgICArK3Rz dGF0ZS0+cmVjdXJzaW9uX2RlcHRoOwotKyAgICBQeV9ERUNSRUYoZik7Ci0rICAgIC0tdHN0YXRl LT5yZWN1cnNpb25fZGVwdGg7Ci0rICAgIHJldHVybiByZXN1bHQ7Ci0gfQotLXN0YXRpYyBDWVRI T05fSU5MSU5FIFB5T2JqZWN0ICpfX1B5eF9HZXRJdGVtSW50X0Zhc3QoUHlPYmplY3QgKm8sIFB5 X3NzaXplX3QgaSwgaW50IGlzX2xpc3QsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBDWVRIT05fTkNQX1VOVVNFRCBpbnQgd3JhcGFyb3VuZCwK LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENZ VEhPTl9OQ1BfVU5VU0VEIGludCBib3VuZHNjaGVjaykgewotLSNpZiBDWVRIT05fQVNTVU1FX1NB RkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUyAmJiBDWVRIT05fVVNFX1RZ UEVfU0xPVFMKLS0gICAgaWYgKGlzX2xpc3QgfHwgUHlMaXN0X0NoZWNrRXhhY3QobykpIHsKLS0g ICAgICAgIFB5X3NzaXplX3QgbiA9ICgoIXdyYXBhcm91bmQpIHwgbGlrZWx5KGkgPj0gMCkpID8g aSA6IGkgKyBQeUxpc3RfR0VUX1NJWkUobyk7Ci0tICAgICAgICBpZiAoKCFib3VuZHNjaGVjaykg fHwgKGxpa2VseShfX1B5eF9pc192YWxpZF9pbmRleChuLCBQeUxpc3RfR0VUX1NJWkUobykpKSkp IHsKLS0gICAgICAgICAgICBQeU9iamVjdCAqciA9IFB5TGlzdF9HRVRfSVRFTShvLCBuKTsKLS0g ICAgICAgICAgICBQeV9JTkNSRUYocik7Ci0tICAgICAgICAgICAgcmV0dXJuIHI7Ci0rI2lmIDEg fHwgUFlfVkVSU0lPTl9IRVggPCAweDAzMDYwMEIxCi0rc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9Q eUZ1bmN0aW9uX0Zhc3RDYWxsRGljdChQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKiphcmdzLCBQ eV9zc2l6ZV90IG5hcmdzLCBQeU9iamVjdCAqa3dhcmdzKSB7Ci0rICAgIFB5Q29kZU9iamVjdCAq Y28gPSAoUHlDb2RlT2JqZWN0ICopUHlGdW5jdGlvbl9HRVRfQ09ERShmdW5jKTsKLSsgICAgUHlP YmplY3QgKmdsb2JhbHMgPSBQeUZ1bmN0aW9uX0dFVF9HTE9CQUxTKGZ1bmMpOwotKyAgICBQeU9i amVjdCAqYXJnZGVmcyA9IFB5RnVuY3Rpb25fR0VUX0RFRkFVTFRTKGZ1bmMpOwotKyAgICBQeU9i amVjdCAqY2xvc3VyZTsKLSsjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0rICAgIFB5T2JqZWN0 ICprd2RlZnM7Ci0rI2VuZGlmCi0rICAgIFB5T2JqZWN0ICprd3R1cGxlLCAqKms7Ci0rICAgIFB5 T2JqZWN0ICoqZDsKLSsgICAgUHlfc3NpemVfdCBuZDsKLSsgICAgUHlfc3NpemVfdCBuazsKLSsg ICAgUHlPYmplY3QgKnJlc3VsdDsKLSsgICAgYXNzZXJ0KGt3YXJncyA9PSBOVUxMIHx8IFB5RGlj dF9DaGVjayhrd2FyZ3MpKTsKLSsgICAgbmsgPSBrd2FyZ3MgPyBQeURpY3RfU2l6ZShrd2FyZ3Mp IDogMDsKLSsgICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgoY2hhciopIiB3aGlsZSBjYWxs aW5nIGEgUHl0aG9uIG9iamVjdCIpKSB7Ci0rICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgfQot KyAgICBpZiAoCi0rI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotKyAgICAgICAgICAgIGNvLT5j b19rd29ubHlhcmdjb3VudCA9PSAwICYmCi0rI2VuZGlmCi0rICAgICAgICAgICAgbGlrZWx5KGt3 YXJncyA9PSBOVUxMIHx8IG5rID09IDApICYmCi0rICAgICAgICAgICAgY28tPmNvX2ZsYWdzID09 IChDT19PUFRJTUlaRUQgfCBDT19ORVdMT0NBTFMgfCBDT19OT0ZSRUUpKSB7Ci0rICAgICAgICBp ZiAoYXJnZGVmcyA9PSBOVUxMICYmIGNvLT5jb19hcmdjb3VudCA9PSBuYXJncykgewotKyAgICAg ICAgICAgIHJlc3VsdCA9IF9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGxOb0t3KGNvLCBhcmdzLCBu YXJncywgZ2xvYmFscyk7Ci0rICAgICAgICAgICAgZ290byBkb25lOwotKyAgICAgICAgfQotKyAg ICAgICAgZWxzZSBpZiAobmFyZ3MgPT0gMCAmJiBhcmdkZWZzICE9IE5VTEwKLSsgICAgICAgICAg ICAgICAgICYmIGNvLT5jb19hcmdjb3VudCA9PSBQeV9TSVpFKGFyZ2RlZnMpKSB7Ci0rICAgICAg ICAgICAgLyogZnVuY3Rpb24gY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzLCBidXQgYWxsIHBhcmFt ZXRlcnMgaGF2ZQotKyAgICAgICAgICAgICAgIGEgZGVmYXVsdCB2YWx1ZTogdXNlIGRlZmF1bHQg dmFsdWVzIGFzIGFyZ3VtZW50cyAuKi8KLSsgICAgICAgICAgICBhcmdzID0gJlB5VHVwbGVfR0VU X0lURU0oYXJnZGVmcywgMCk7Ci0rICAgICAgICAgICAgcmVzdWx0ID1fX1B5eF9QeUZ1bmN0aW9u X0Zhc3RDYWxsTm9LdyhjbywgYXJncywgUHlfU0laRShhcmdkZWZzKSwgZ2xvYmFscyk7Ci0rICAg ICAgICAgICAgZ290byBkb25lOwotICAgICAgICAgfQotICAgICB9Ci0tICAgIGVsc2UgaWYgKFB5 VHVwbGVfQ2hlY2tFeGFjdChvKSkgewotLSAgICAgICAgUHlfc3NpemVfdCBuID0gKCghd3JhcGFy b3VuZCkgfCBsaWtlbHkoaSA+PSAwKSkgPyBpIDogaSArIFB5VHVwbGVfR0VUX1NJWkUobyk7Ci0t ICAgICAgICBpZiAoKCFib3VuZHNjaGVjaykgfHwgbGlrZWx5KF9fUHl4X2lzX3ZhbGlkX2luZGV4 KG4sIFB5VHVwbGVfR0VUX1NJWkUobykpKSkgewotLSAgICAgICAgICAgIFB5T2JqZWN0ICpyID0g UHlUdXBsZV9HRVRfSVRFTShvLCBuKTsKLS0gICAgICAgICAgICBQeV9JTkNSRUYocik7Ci0tICAg ICAgICAgICAgcmV0dXJuIHI7Ci0rICAgIGlmIChrd2FyZ3MgIT0gTlVMTCkgewotKyAgICAgICAg UHlfc3NpemVfdCBwb3MsIGk7Ci0rICAgICAgICBrd3R1cGxlID0gUHlUdXBsZV9OZXcoMiAqIG5r KTsKLSsgICAgICAgIGlmIChrd3R1cGxlID09IE5VTEwpIHsKLSsgICAgICAgICAgICByZXN1bHQg PSBOVUxMOwotKyAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgIH0KLS0gICAgfSBlbHNl IHsKLS0gICAgICAgIFB5U2VxdWVuY2VNZXRob2RzICptID0gUHlfVFlQRShvKS0+dHBfYXNfc2Vx dWVuY2U7Ci0tICAgICAgICBpZiAobGlrZWx5KG0gJiYgbS0+c3FfaXRlbSkpIHsKLS0gICAgICAg ICAgICBpZiAod3JhcGFyb3VuZCAmJiB1bmxpa2VseShpIDwgMCkgJiYgbGlrZWx5KG0tPnNxX2xl bmd0aCkpIHsKLS0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsID0gbS0+c3FfbGVuZ3RoKG8p OwotLSAgICAgICAgICAgICAgICBpZiAobGlrZWx5KGwgPj0gMCkpIHsKLS0gICAgICAgICAgICAg ICAgICAgIGkgKz0gbDsKLS0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLS0gICAgICAgICAgICAg ICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkK LS0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLS0gICAgICAgICAgICAgICAg ICAgIFB5RXJyX0NsZWFyKCk7Ci0tICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICB9Ci0t ICAgICAgICAgICAgcmV0dXJuIG0tPnNxX2l0ZW0obywgaSk7Ci0rICAgICAgICBrID0gJlB5VHVw bGVfR0VUX0lURU0oa3d0dXBsZSwgMCk7Ci0rICAgICAgICBwb3MgPSBpID0gMDsKLSsgICAgICAg IHdoaWxlIChQeURpY3RfTmV4dChrd2FyZ3MsICZwb3MsICZrW2ldLCAma1tpKzFdKSkgewotKyAg ICAgICAgICAgIFB5X0lOQ1JFRihrW2ldKTsKLSsgICAgICAgICAgICBQeV9JTkNSRUYoa1tpKzFd KTsKLSsgICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICB9Ci0rICAgICAgICBuayA9IGkgLyAy OwotICAgICB9Ci0tI2Vsc2UKLS0gICAgaWYgKGlzX2xpc3QgfHwgUHlTZXF1ZW5jZV9DaGVjayhv KSkgewotLSAgICAgICAgcmV0dXJuIFB5U2VxdWVuY2VfR2V0SXRlbShvLCBpKTsKLSsgICAgZWxz ZSB7Ci0rICAgICAgICBrd3R1cGxlID0gTlVMTDsKLSsgICAgICAgIGsgPSBOVUxMOwotICAgICB9 Ci0rICAgIGNsb3N1cmUgPSBQeUZ1bmN0aW9uX0dFVF9DTE9TVVJFKGZ1bmMpOwotKyNpZiBQWV9N QUpPUl9WRVJTSU9OID49IDMKLSsgICAga3dkZWZzID0gUHlGdW5jdGlvbl9HRVRfS1dfREVGQVVM VFMoZnVuYyk7Ci0gI2VuZGlmCi0tICAgIHJldHVybiBfX1B5eF9HZXRJdGVtSW50X0dlbmVyaWMo bywgUHlJbnRfRnJvbVNzaXplX3QoaSkpOwotLX0KLS0KLS0vKiBEZWxJdGVtSW50ICovCi0tc3Rh dGljIGludCBfX1B5eF9EZWxJdGVtX0dlbmVyaWMoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpqKSB7 Ci0tICAgIGludCByOwotLSAgICBpZiAoIWopIHJldHVybiAtMTsKLS0gICAgciA9IFB5T2JqZWN0 X0RlbEl0ZW0obywgaik7Ci0tICAgIFB5X0RFQ1JFRihqKTsKLS0gICAgcmV0dXJuIHI7Ci0tfQot LXN0YXRpYyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9EZWxJdGVtSW50X0Zhc3QoUHlPYmplY3Qg Km8sIFB5X3NzaXplX3QgaSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIENZVEhPTl9VTlVTRUQgaW50IGlzX2xpc3QsIENZVEhPTl9OQ1BfVU5VU0VEIGlu dCB3cmFwYXJvdW5kKSB7Ci0tI2lmICFDWVRIT05fVVNFX1RZUEVfU0xPVFMKLS0gICAgaWYgKGlz X2xpc3QgfHwgUHlTZXF1ZW5jZV9DaGVjayhvKSkgewotLSAgICAgICAgcmV0dXJuIFB5U2VxdWVu Y2VfRGVsSXRlbShvLCBpKTsKLSsgICAgaWYgKGFyZ2RlZnMgIT0gTlVMTCkgewotKyAgICAgICAg ZCA9ICZQeVR1cGxlX0dFVF9JVEVNKGFyZ2RlZnMsIDApOwotKyAgICAgICAgbmQgPSBQeV9TSVpF KGFyZ2RlZnMpOwotKyAgICB9Ci0rICAgIGVsc2UgewotKyAgICAgICAgZCA9IE5VTEw7Ci0rICAg ICAgICBuZCA9IDA7Ci0gICAgIH0KLSsjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0rICAgIHJl c3VsdCA9IFB5RXZhbF9FdmFsQ29kZUV4KChQeU9iamVjdCopY28sIGdsb2JhbHMsIChQeU9iamVj dCAqKU5VTEwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsIChpbnQpbmFy Z3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGssIChpbnQpbmssCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGQsIChpbnQpbmQsIGt3ZGVmcywgY2xvc3VyZSk7Ci0g I2Vsc2UKLS0gICAgUHlTZXF1ZW5jZU1ldGhvZHMgKm0gPSBQeV9UWVBFKG8pLT50cF9hc19zZXF1 ZW5jZTsKLS0gICAgaWYgKGxpa2VseShtICYmIG0tPnNxX2Fzc19pdGVtKSkgewotLSAgICAgICAg aWYgKHdyYXBhcm91bmQgJiYgdW5saWtlbHkoaSA8IDApICYmIGxpa2VseShtLT5zcV9sZW5ndGgp KSB7Ci0tICAgICAgICAgICAgUHlfc3NpemVfdCBsID0gbS0+c3FfbGVuZ3RoKG8pOwotLSAgICAg ICAgICAgIGlmIChsaWtlbHkobCA+PSAwKSkgewotLSAgICAgICAgICAgICAgICBpICs9IGw7Ci0t ICAgICAgICAgICAgfSBlbHNlIHsKLS0gICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRp b25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQotLSAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIC0xOwotLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotLSAgICAgICAgICAgIH0K LS0gICAgICAgIH0KLS0gICAgICAgIHJldHVybiBtLT5zcV9hc3NfaXRlbShvLCBpLCAoUHlPYmpl Y3QgKilOVUxMKTsKLSsgICAgcmVzdWx0ID0gUHlFdmFsX0V2YWxDb2RlRXgoY28sIGdsb2JhbHMs IChQeU9iamVjdCAqKU5VTEwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Ms IChpbnQpbmFyZ3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGssIChpbnQpbmss Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQsIChpbnQpbmQsIGNsb3N1cmUpOwot KyNlbmRpZgotKyAgICBQeV9YREVDUkVGKGt3dHVwbGUpOwotK2RvbmU6Ci0rICAgIFB5X0xlYXZl UmVjdXJzaXZlQ2FsbCgpOwotKyAgICByZXR1cm4gcmVzdWx0OwotK30KLSsjZW5kaWYKLSsjZW5k aWYKLSsKLSsvKiBQeUNGdW5jdGlvbkZhc3RDYWxsICovCi0rI2lmIENZVEhPTl9GQVNUX1BZQ0NB TEwKLStzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCAqIF9fUHl4X1B5Q0Z1bmN0aW9uX0Zh c3RDYWxsKFB5T2JqZWN0ICpmdW5jX29iaiwgUHlPYmplY3QgKiphcmdzLCBQeV9zc2l6ZV90IG5h cmdzKSB7Ci0rICAgIFB5Q0Z1bmN0aW9uT2JqZWN0ICpmdW5jID0gKFB5Q0Z1bmN0aW9uT2JqZWN0 KilmdW5jX29iajsKLSsgICAgUHlDRnVuY3Rpb24gbWV0aCA9IFB5Q0Z1bmN0aW9uX0dFVF9GVU5D VElPTihmdW5jKTsKLSsgICAgUHlPYmplY3QgKnNlbGYgPSBQeUNGdW5jdGlvbl9HRVRfU0VMRihm dW5jKTsKLSsgICAgaW50IGZsYWdzID0gUHlDRnVuY3Rpb25fR0VUX0ZMQUdTKGZ1bmMpOwotKyAg ICBhc3NlcnQoUHlDRnVuY3Rpb25fQ2hlY2soZnVuYykpOwotKyAgICBhc3NlcnQoTUVUSF9GQVNU Q0FMTCA9PSAoZmxhZ3MgJiB+KE1FVEhfQ0xBU1MgfCBNRVRIX1NUQVRJQyB8IE1FVEhfQ09FWElT VCB8IE1FVEhfS0VZV09SRFMgfCBNRVRIX1NUQUNLTEVTUykpKTsKLSsgICAgYXNzZXJ0KG5hcmdz ID49IDApOwotKyAgICBhc3NlcnQobmFyZ3MgPT0gMCB8fCBhcmdzICE9IE5VTEwpOwotKyAgICAv KiBfUHlDRnVuY3Rpb25fRmFzdENhbGxEaWN0KCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4g ZXhjZXB0aW9uIHNldCwKLSsgICAgICAgYmVjYXVzZSBpdCBtYXkgY2xlYXIgaXQgKGRpcmVjdGx5 IG9yIGluZGlyZWN0bHkpIGFuZCBzbyB0aGUKLSsgICAgICAgY2FsbGVyIGxvc2VzIGl0cyBleGNl cHRpb24gKi8KLSsgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKLSsgICAgaWYgKChQWV9W RVJTSU9OX0hFWCA8IDB4MDMwNzAwQTApIHx8IHVubGlrZWx5KGZsYWdzICYgTUVUSF9LRVlXT1JE UykpIHsKLSsgICAgICAgIHJldHVybiAoKigoX19QeXhfUHlDRnVuY3Rpb25GYXN0V2l0aEtleXdv cmRzKSh2b2lkKiltZXRoKSkgKHNlbGYsIGFyZ3MsIG5hcmdzLCBOVUxMKTsKLSsgICAgfSBlbHNl IHsKLSsgICAgICAgIHJldHVybiAoKigoX19QeXhfUHlDRnVuY3Rpb25GYXN0KSh2b2lkKiltZXRo KSkgKHNlbGYsIGFyZ3MsIG5hcmdzKTsKLSAgICAgfQotK30KLSAjZW5kaWYKLS0gICAgcmV0dXJu IF9fUHl4X0RlbEl0ZW1fR2VuZXJpYyhvLCBQeUludF9Gcm9tU3NpemVfdChpKSk7Ci0rCi0rLyog UHlPYmplY3RDYWxsICovCi0rI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTgotK3N0YXRp YyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeU9iamVjdF9DYWxsKFB5T2JqZWN0ICpm dW5jLCBQeU9iamVjdCAqYXJnLCBQeU9iamVjdCAqa3cpIHsKLSsgICAgUHlPYmplY3QgKnJlc3Vs dDsKLSsgICAgdGVybmFyeWZ1bmMgY2FsbCA9IFB5X1RZUEUoZnVuYyktPnRwX2NhbGw7Ci0rICAg IGlmICh1bmxpa2VseSghY2FsbCkpCi0rICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbChmdW5j LCBhcmcsIGt3KTsKLSsgICAgaWYgKHVubGlrZWx5KFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgoY2hh ciopIiB3aGlsZSBjYWxsaW5nIGEgUHl0aG9uIG9iamVjdCIpKSkKLSsgICAgICAgIHJldHVybiBO VUxMOwotKyAgICByZXN1bHQgPSAoKmNhbGwpKGZ1bmMsIGFyZywga3cpOwotKyAgICBQeV9MZWF2 ZVJlY3Vyc2l2ZUNhbGwoKTsKLSsgICAgaWYgKHVubGlrZWx5KCFyZXN1bHQpICYmIHVubGlrZWx5 KCFQeUVycl9PY2N1cnJlZCgpKSkgewotKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAotKyAgICAg ICAgICAgIFB5RXhjX1N5c3RlbUVycm9yLAotKyAgICAgICAgICAgICJOVUxMIHJlc3VsdCB3aXRo b3V0IGVycm9yIGluIFB5T2JqZWN0X0NhbGwiKTsKLSsgICAgfQotKyAgICByZXR1cm4gcmVzdWx0 OwotIH0KLSsjZW5kaWYKLSAKLS0vKiBLZXl3b3JkU3RyaW5nQ2hlY2sgKi8KLS1zdGF0aWMgaW50 IF9fUHl4X0NoZWNrS2V5d29yZFN0cmluZ3MoCi0tICAgIFB5T2JqZWN0ICprd2RpY3QsCi0tICAg IGNvbnN0IGNoYXIqIGZ1bmN0aW9uX25hbWUsCi0tICAgIGludCBrd19hbGxvd2VkKQotKy8qIEdl dFRvcG1vc3RFeGNlcHRpb24gKi8KLSsjaWYgQ1lUSE9OX1VTRV9FWENfSU5GT19TVEFDSwotK3N0 YXRpYyBfUHlFcnJfU3RhY2tJdGVtICoKLStfX1B5eF9QeUVycl9HZXRUb3Btb3N0RXhjZXB0aW9u KFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKLSB7Ci0tICAgIFB5T2JqZWN0KiBrZXkgPSAwOwotLSAg ICBQeV9zc2l6ZV90IHBvcyA9IDA7Ci0tI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fUFlQWQotLSAg ICBpZiAoIWt3X2FsbG93ZWQgJiYgUHlEaWN0X05leHQoa3dkaWN0LCAmcG9zLCAma2V5LCAwKSkK LS0gICAgICAgIGdvdG8gaW52YWxpZF9rZXl3b3JkOwotLSAgICByZXR1cm4gMTsKLS0jZWxzZQot LSAgICB3aGlsZSAoUHlEaWN0X05leHQoa3dkaWN0LCAmcG9zLCAma2V5LCAwKSkgewotLSAgICAg ICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0tICAgICAgICBpZiAodW5saWtlbHkoIVB5U3Ry aW5nX0NoZWNrKGtleSkpKQotLSAgICAgICAgI2VuZGlmCi0tICAgICAgICAgICAgaWYgKHVubGlr ZWx5KCFQeVVuaWNvZGVfQ2hlY2soa2V5KSkpCi0tICAgICAgICAgICAgICAgIGdvdG8gaW52YWxp ZF9rZXl3b3JkX3R5cGU7Ci0rICAgIF9QeUVycl9TdGFja0l0ZW0gKmV4Y19pbmZvID0gdHN0YXRl LT5leGNfaW5mbzsKLSsgICAgd2hpbGUgKChleGNfaW5mby0+ZXhjX3R5cGUgPT0gTlVMTCB8fCBl eGNfaW5mby0+ZXhjX3R5cGUgPT0gUHlfTm9uZSkgJiYKLSsgICAgICAgICAgIGV4Y19pbmZvLT5w cmV2aW91c19pdGVtICE9IE5VTEwpCi0rICAgIHsKLSsgICAgICAgIGV4Y19pbmZvID0gZXhjX2lu Zm8tPnByZXZpb3VzX2l0ZW07Ci0gICAgIH0KLS0gICAgaWYgKCgha3dfYWxsb3dlZCkgJiYgdW5s aWtlbHkoa2V5KSkKLS0gICAgICAgIGdvdG8gaW52YWxpZF9rZXl3b3JkOwotLSAgICByZXR1cm4g MTsKLS1pbnZhbGlkX2tleXdvcmRfdHlwZToKLS0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVF cnJvciwKLS0gICAgICAgICIlLjIwMHMoKSBrZXl3b3JkcyBtdXN0IGJlIHN0cmluZ3MiLCBmdW5j dGlvbl9uYW1lKTsKLS0gICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiBleGNfaW5mbzsKLSt9Ci0g I2VuZGlmCi0taW52YWxpZF9rZXl3b3JkOgotLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVy cm9yLAotLSAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLS0gICAgICAgICIlLjIwMHMoKSBn b3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50ICclLjIwMHMnIiwKLS0gICAgICAgIGZ1 bmN0aW9uX25hbWUsIFB5U3RyaW5nX0FzU3RyaW5nKGtleSkpOwotKwotKy8qIFNhdmVSZXNldEV4 Y2VwdGlvbiAqLwotKyNpZiBDWVRIT05fRkFTVF9USFJFQURfU1RBVEUKLStzdGF0aWMgQ1lUSE9O X0lOTElORSB2b2lkIF9fUHl4X19FeGNlcHRpb25TYXZlKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwg UHlPYmplY3QgKip0eXBlLCBQeU9iamVjdCAqKnZhbHVlLCBQeU9iamVjdCAqKnRiKSB7Ci0rICAg ICNpZiBDWVRIT05fVVNFX0VYQ19JTkZPX1NUQUNLCi0rICAgIF9QeUVycl9TdGFja0l0ZW0gKmV4 Y19pbmZvID0gX19QeXhfUHlFcnJfR2V0VG9wbW9zdEV4Y2VwdGlvbih0c3RhdGUpOwotKyAgICAq dHlwZSA9IGV4Y19pbmZvLT5leGNfdHlwZTsKLSsgICAgKnZhbHVlID0gZXhjX2luZm8tPmV4Y192 YWx1ZTsKLSsgICAgKnRiID0gZXhjX2luZm8tPmV4Y190cmFjZWJhY2s7Ci0gICAgICNlbHNlCi0t ICAgICAgICAiJXMoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50ICclVSciLAot LSAgICAgICAgZnVuY3Rpb25fbmFtZSwga2V5KTsKLSsgICAgKnR5cGUgPSB0c3RhdGUtPmV4Y190 eXBlOwotKyAgICAqdmFsdWUgPSB0c3RhdGUtPmV4Y192YWx1ZTsKLSsgICAgKnRiID0gdHN0YXRl LT5leGNfdHJhY2ViYWNrOwotICAgICAjZW5kaWYKLS0gICAgcmV0dXJuIDA7Ci0rICAgIFB5X1hJ TkNSRUYoKnR5cGUpOwotKyAgICBQeV9YSU5DUkVGKCp2YWx1ZSk7Ci0rICAgIFB5X1hJTkNSRUYo KnRiKTsKLSB9Ci0tCi0tLyogTm9uZSAqLwotLXN0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgX19Q eXhfUmFpc2VDbG9zdXJlTmFtZUVycm9yKGNvbnN0IGNoYXIgKnZhcm5hbWUpIHsKLS0gICAgUHlF cnJfRm9ybWF0KFB5RXhjX05hbWVFcnJvciwgImZyZWUgdmFyaWFibGUgJyVzJyByZWZlcmVuY2Vk IGJlZm9yZSBhc3NpZ25tZW50IGluIGVuY2xvc2luZyBzY29wZSIsIHZhcm5hbWUpOwotK3N0YXRp YyBDWVRIT05fSU5MSU5FIHZvaWQgX19QeXhfX0V4Y2VwdGlvblJlc2V0KFB5VGhyZWFkU3RhdGUg KnRzdGF0ZSwgUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRiKSB7 Ci0rICAgIFB5T2JqZWN0ICp0bXBfdHlwZSwgKnRtcF92YWx1ZSwgKnRtcF90YjsKLSsgICAgI2lm IENZVEhPTl9VU0VfRVhDX0lORk9fU1RBQ0sKLSsgICAgX1B5RXJyX1N0YWNrSXRlbSAqZXhjX2lu Zm8gPSB0c3RhdGUtPmV4Y19pbmZvOwotKyAgICB0bXBfdHlwZSA9IGV4Y19pbmZvLT5leGNfdHlw ZTsKLSsgICAgdG1wX3ZhbHVlID0gZXhjX2luZm8tPmV4Y192YWx1ZTsKLSsgICAgdG1wX3RiID0g ZXhjX2luZm8tPmV4Y190cmFjZWJhY2s7Ci0rICAgIGV4Y19pbmZvLT5leGNfdHlwZSA9IHR5cGU7 Ci0rICAgIGV4Y19pbmZvLT5leGNfdmFsdWUgPSB2YWx1ZTsKLSsgICAgZXhjX2luZm8tPmV4Y190 cmFjZWJhY2sgPSB0YjsKLSsgICAgI2Vsc2UKLSsgICAgdG1wX3R5cGUgPSB0c3RhdGUtPmV4Y190 eXBlOwotKyAgICB0bXBfdmFsdWUgPSB0c3RhdGUtPmV4Y192YWx1ZTsKLSsgICAgdG1wX3RiID0g dHN0YXRlLT5leGNfdHJhY2ViYWNrOwotKyAgICB0c3RhdGUtPmV4Y190eXBlID0gdHlwZTsKLSsg ICAgdHN0YXRlLT5leGNfdmFsdWUgPSB2YWx1ZTsKLSsgICAgdHN0YXRlLT5leGNfdHJhY2ViYWNr ID0gdGI7Ci0rICAgICNlbmRpZgotKyAgICBQeV9YREVDUkVGKHRtcF90eXBlKTsKLSsgICAgUHlf WERFQ1JFRih0bXBfdmFsdWUpOwotKyAgICBQeV9YREVDUkVGKHRtcF90Yik7Ci0gfQotKyNlbmRp ZgotIAotLS8qIFJhaXNlRXhjZXB0aW9uICovCi0tI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0t c3RhdGljIHZvaWQgX19QeXhfUmFpc2UoUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSwg UHlPYmplY3QgKnRiLAotLSAgICAgICAgICAgICAgICAgICAgICAgIENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKmNhdXNlKSB7Ci0tICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQotLSAgICBQ eV9YSU5DUkVGKHR5cGUpOwotLSAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09IFB5X05vbmUpCi0t ICAgICAgICB2YWx1ZSA9IE5VTEw7Ci0tICAgIGVsc2UKLS0gICAgICAgIFB5X0lOQ1JFRih2YWx1 ZSk7Ci0tICAgIGlmICghdGIgfHwgdGIgPT0gUHlfTm9uZSkKLS0gICAgICAgIHRiID0gTlVMTDsK LS0gICAgZWxzZSB7Ci0tICAgICAgICBQeV9JTkNSRUYodGIpOwotLSAgICAgICAgaWYgKCFQeVRy YWNlQmFja19DaGVjayh0YikpIHsKLS0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNf VHlwZUVycm9yLAotLSAgICAgICAgICAgICAgICAicmFpc2U6IGFyZyAzIG11c3QgYmUgYSB0cmFj ZWJhY2sgb3IgTm9uZSIpOwotLSAgICAgICAgICAgIGdvdG8gcmFpc2VfZXJyb3I7Ci0tICAgICAg ICB9Ci0rLyogUHlFcnJFeGNlcHRpb25NYXRjaGVzICovCi0rI2lmIENZVEhPTl9GQVNUX1RIUkVB RF9TVEFURQotK3N0YXRpYyBpbnQgX19QeXhfUHlFcnJfRXhjZXB0aW9uTWF0Y2hlc1R1cGxlKFB5 T2JqZWN0ICpleGNfdHlwZSwgUHlPYmplY3QgKnR1cGxlKSB7Ci0rICAgIFB5X3NzaXplX3QgaSwg bjsKLSsgICAgbiA9IFB5VHVwbGVfR0VUX1NJWkUodHVwbGUpOwotKyNpZiBQWV9NQUpPUl9WRVJT SU9OID49IDMKLSsgICAgZm9yIChpPTA7IGk8bjsgaSsrKSB7Ci0rICAgICAgICBpZiAoZXhjX3R5 cGUgPT0gUHlUdXBsZV9HRVRfSVRFTSh0dXBsZSwgaSkpIHJldHVybiAxOwotICAgICB9Ci0tICAg IGlmIChQeVR5cGVfQ2hlY2sodHlwZSkpIHsKLS0jaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZ Ci0tICAgICAgICBpZiAoIXZhbHVlKSB7Ci0tICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUp OwotLSAgICAgICAgICAgIHZhbHVlID0gUHlfTm9uZTsKLS0gICAgICAgIH0KLSAjZW5kaWYKLS0g ICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmdHlwZSwgJnZhbHVlLCAmdGIpOwotLSAg ICB9IGVsc2UgewotLSAgICAgICAgaWYgKHZhbHVlKSB7Ci0tICAgICAgICAgICAgUHlFcnJfU2V0 U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLS0gICAgICAgICAgICAgICAgImluc3RhbmNlIGV4Y2Vw dGlvbiBtYXkgbm90IGhhdmUgYSBzZXBhcmF0ZSB2YWx1ZSIpOwotLSAgICAgICAgICAgIGdvdG8g cmFpc2VfZXJyb3I7Ci0tICAgICAgICB9Ci0tICAgICAgICB2YWx1ZSA9IHR5cGU7Ci0tICAgICAg ICB0eXBlID0gKFB5T2JqZWN0KikgUHlfVFlQRSh0eXBlKTsKLS0gICAgICAgIFB5X0lOQ1JFRih0 eXBlKTsKLS0gICAgICAgIGlmICghUHlUeXBlX0lzU3VidHlwZSgoUHlUeXBlT2JqZWN0ICopdHlw ZSwgKFB5VHlwZU9iamVjdCAqKVB5RXhjX0Jhc2VFeGNlcHRpb24pKSB7Ci0tICAgICAgICAgICAg UHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLS0gICAgICAgICAgICAgICAgInJhaXNl OiBleGNlcHRpb24gY2xhc3MgbXVzdCBiZSBhIHN1YmNsYXNzIG9mIEJhc2VFeGNlcHRpb24iKTsK LS0gICAgICAgICAgICBnb3RvIHJhaXNlX2Vycm9yOwotLSAgICAgICAgfQotKyAgICBmb3IgKGk9 MDsgaTxuOyBpKyspIHsKLSsgICAgICAgIGlmIChfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1h dGNoZXMoZXhjX3R5cGUsIFB5VHVwbGVfR0VUX0lURU0odHVwbGUsIGkpKSkgcmV0dXJuIDE7Ci0g ICAgIH0KLS0gICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24KLS0gICAgX19QeXhfRXJyUmVz dG9yZSh0eXBlLCB2YWx1ZSwgdGIpOwotLSAgICByZXR1cm47Ci0tcmFpc2VfZXJyb3I6Ci0tICAg IFB5X1hERUNSRUYodmFsdWUpOwotLSAgICBQeV9YREVDUkVGKHR5cGUpOwotLSAgICBQeV9YREVD UkVGKHRiKTsKLS0gICAgcmV0dXJuOwotKyAgICByZXR1cm4gMDsKLSt9Ci0rc3RhdGljIENZVEhP Tl9JTkxJTkUgaW50IF9fUHl4X1B5RXJyX0V4Y2VwdGlvbk1hdGNoZXNJblN0YXRlKFB5VGhyZWFk U3RhdGUqIHRzdGF0ZSwgUHlPYmplY3QqIGVycikgewotKyAgICBQeU9iamVjdCAqZXhjX3R5cGUg PSB0c3RhdGUtPmN1cmV4Y190eXBlOwotKyAgICBpZiAoZXhjX3R5cGUgPT0gZXJyKSByZXR1cm4g MTsKLSsgICAgaWYgKHVubGlrZWx5KCFleGNfdHlwZSkpIHJldHVybiAwOwotKyAgICBpZiAodW5s aWtlbHkoUHlUdXBsZV9DaGVjayhlcnIpKSkKLSsgICAgICAgIHJldHVybiBfX1B5eF9QeUVycl9F eGNlcHRpb25NYXRjaGVzVHVwbGUoZXhjX3R5cGUsIGVycik7Ci0rICAgIHJldHVybiBfX1B5eF9Q eUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoZXhjX3R5cGUsIGVycik7Ci0gfQotKyNlbmRpZgot KwotKy8qIEdldEV4Y2VwdGlvbiAqLwotKyNpZiBDWVRIT05fRkFTVF9USFJFQURfU1RBVEUKLStz dGF0aWMgaW50IF9fUHl4X19HZXRFeGNlcHRpb24oUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeU9i amVjdCAqKnR5cGUsIFB5T2JqZWN0ICoqdmFsdWUsIFB5T2JqZWN0ICoqdGIpCi0gI2Vsc2UKLS1z dGF0aWMgdm9pZCBfX1B5eF9SYWlzZShQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZhbHVlLCBQ eU9iamVjdCAqdGIsIFB5T2JqZWN0ICpjYXVzZSkgewotLSAgICBQeU9iamVjdCogb3duZWRfaW5z dGFuY2UgPSBOVUxMOwotLSAgICBpZiAodGIgPT0gUHlfTm9uZSkgewotLSAgICAgICAgdGIgPSAw OwotLSAgICB9IGVsc2UgaWYgKHRiICYmICFQeVRyYWNlQmFja19DaGVjayh0YikpIHsKLS0gICAg ICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0tICAgICAgICAgICAgInJhaXNl OiBhcmcgMyBtdXN0IGJlIGEgdHJhY2ViYWNrIG9yIE5vbmUiKTsKLStzdGF0aWMgaW50IF9fUHl4 X0dldEV4Y2VwdGlvbihQeU9iamVjdCAqKnR5cGUsIFB5T2JqZWN0ICoqdmFsdWUsIFB5T2JqZWN0 ICoqdGIpCi0rI2VuZGlmCi0rewotKyAgICBQeU9iamVjdCAqbG9jYWxfdHlwZSwgKmxvY2FsX3Zh bHVlLCAqbG9jYWxfdGI7Ci0rI2lmIENZVEhPTl9GQVNUX1RIUkVBRF9TVEFURQotKyAgICBQeU9i amVjdCAqdG1wX3R5cGUsICp0bXBfdmFsdWUsICp0bXBfdGI7Ci0rICAgIGxvY2FsX3R5cGUgPSB0 c3RhdGUtPmN1cmV4Y190eXBlOwotKyAgICBsb2NhbF92YWx1ZSA9IHRzdGF0ZS0+Y3VyZXhjX3Zh bHVlOwotKyAgICBsb2NhbF90YiA9IHRzdGF0ZS0+Y3VyZXhjX3RyYWNlYmFjazsKLSsgICAgdHN0 YXRlLT5jdXJleGNfdHlwZSA9IDA7Ci0rICAgIHRzdGF0ZS0+Y3VyZXhjX3ZhbHVlID0gMDsKLSsg ICAgdHN0YXRlLT5jdXJleGNfdHJhY2ViYWNrID0gMDsKLSsjZWxzZQotKyAgICBQeUVycl9GZXRj aCgmbG9jYWxfdHlwZSwgJmxvY2FsX3ZhbHVlLCAmbG9jYWxfdGIpOwotKyNlbmRpZgotKyAgICBQ eUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJmxvY2FsX3R5cGUsICZsb2NhbF92YWx1ZSwgJmxvY2Fs X3RiKTsKLSsjaWYgQ1lUSE9OX0ZBU1RfVEhSRUFEX1NUQVRFCi0rICAgIGlmICh1bmxpa2VseSh0 c3RhdGUtPmN1cmV4Y190eXBlKSkKLSsjZWxzZQotKyAgICBpZiAodW5saWtlbHkoUHlFcnJfT2Nj dXJyZWQoKSkpCi0rI2VuZGlmCi0gICAgICAgICBnb3RvIGJhZDsKLS0gICAgfQotLSAgICBpZiAo dmFsdWUgPT0gUHlfTm9uZSkKLS0gICAgICAgIHZhbHVlID0gMDsKLS0gICAgaWYgKFB5RXhjZXB0 aW9uSW5zdGFuY2VfQ2hlY2sodHlwZSkpIHsKLS0gICAgICAgIGlmICh2YWx1ZSkgewotLSAgICAg ICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0tICAgICAgICAgICAgICAg ICJpbnN0YW5jZSBleGNlcHRpb24gbWF5IG5vdCBoYXZlIGEgc2VwYXJhdGUgdmFsdWUiKTsKLSsg ICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotKyAgICBpZiAobG9jYWxfdGIpIHsKLSsgICAg ICAgIGlmICh1bmxpa2VseShQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sobG9jYWxfdmFsdWUsIGxv Y2FsX3RiKSA8IDApKQotICAgICAgICAgICAgIGdvdG8gYmFkOwotLSAgICAgICAgfQotLSAgICAg ICAgdmFsdWUgPSB0eXBlOwotLSAgICAgICAgdHlwZSA9IChQeU9iamVjdCopIFB5X1RZUEUodmFs dWUpOwotLSAgICB9IGVsc2UgaWYgKFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2sodHlwZSkpIHsKLS0g ICAgICAgIFB5T2JqZWN0ICppbnN0YW5jZV9jbGFzcyA9IE5VTEw7Ci0tICAgICAgICBpZiAodmFs dWUgJiYgUHlFeGNlcHRpb25JbnN0YW5jZV9DaGVjayh2YWx1ZSkpIHsKLS0gICAgICAgICAgICBp bnN0YW5jZV9jbGFzcyA9IChQeU9iamVjdCopIFB5X1RZUEUodmFsdWUpOwotLSAgICAgICAgICAg IGlmIChpbnN0YW5jZV9jbGFzcyAhPSB0eXBlKSB7Ci0tICAgICAgICAgICAgICAgIGludCBpc19z dWJjbGFzcyA9IFB5T2JqZWN0X0lzU3ViY2xhc3MoaW5zdGFuY2VfY2xhc3MsIHR5cGUpOwotLSAg ICAgICAgICAgICAgICBpZiAoIWlzX3N1YmNsYXNzKSB7Ci0tICAgICAgICAgICAgICAgICAgICBp bnN0YW5jZV9jbGFzcyA9IE5VTEw7Ci0tICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodW5saWtl bHkoaXNfc3ViY2xhc3MgPT0gLTEpKSB7Ci0tICAgICAgICAgICAgICAgICAgICBnb3RvIGJhZDsK LS0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLS0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBp bnN0YW5jZV9jbGFzczsKLS0gICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgIH0KLS0gICAg ICAgIH0KLS0gICAgICAgIGlmICghaW5zdGFuY2VfY2xhc3MpIHsKLS0gICAgICAgICAgICBQeU9i amVjdCAqYXJnczsKLS0gICAgICAgICAgICBpZiAoIXZhbHVlKQotLSAgICAgICAgICAgICAgICBh cmdzID0gUHlUdXBsZV9OZXcoMCk7Ci0tICAgICAgICAgICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVj ayh2YWx1ZSkpIHsKLS0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKLS0gICAgICAg ICAgICAgICAgYXJncyA9IHZhbHVlOwotLSAgICAgICAgICAgIH0gZWxzZQotLSAgICAgICAgICAg ICAgICBhcmdzID0gUHlUdXBsZV9QYWNrKDEsIHZhbHVlKTsKLS0gICAgICAgICAgICBpZiAoIWFy Z3MpCi0tICAgICAgICAgICAgICAgIGdvdG8gYmFkOwotLSAgICAgICAgICAgIG93bmVkX2luc3Rh bmNlID0gUHlPYmplY3RfQ2FsbCh0eXBlLCBhcmdzLCBOVUxMKTsKLS0gICAgICAgICAgICBQeV9E RUNSRUYoYXJncyk7Ci0tICAgICAgICAgICAgaWYgKCFvd25lZF9pbnN0YW5jZSkKLS0gICAgICAg ICAgICAgICAgZ290byBiYWQ7Ci0tICAgICAgICAgICAgdmFsdWUgPSBvd25lZF9pbnN0YW5jZTsK LS0gICAgICAgICAgICBpZiAoIVB5RXhjZXB0aW9uSW5zdGFuY2VfQ2hlY2sodmFsdWUpKSB7Ci0t ICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiY2FsbGluZyAlUiBzaG91bGQgaGF2ZSByZXR1cm5lZCBhbiBp bnN0YW5jZSBvZiAiCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFzZUV4Y2VwdGlv biwgbm90ICVSIiwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIFB5X1RZUEUo dmFsdWUpKTsKLS0gICAgICAgICAgICAgICAgZ290byBiYWQ7Ci0tICAgICAgICAgICAgfQotLSAg ICAgICAgfQotLSAgICB9IGVsc2UgewotLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5 cGVFcnJvciwKLS0gICAgICAgICAgICAicmFpc2U6IGV4Y2VwdGlvbiBjbGFzcyBtdXN0IGJlIGEg c3ViY2xhc3Mgb2YgQmFzZUV4Y2VwdGlvbiIpOwotLSAgICAgICAgZ290byBiYWQ7Ci0gICAgIH0K LS0gICAgaWYgKGNhdXNlKSB7Ci0tICAgICAgICBQeU9iamVjdCAqZml4ZWRfY2F1c2U7Ci0tICAg ICAgICBpZiAoY2F1c2UgPT0gUHlfTm9uZSkgewotLSAgICAgICAgICAgIGZpeGVkX2NhdXNlID0g TlVMTDsKLS0gICAgICAgIH0gZWxzZSBpZiAoUHlFeGNlcHRpb25DbGFzc19DaGVjayhjYXVzZSkp IHsKLS0gICAgICAgICAgICBmaXhlZF9jYXVzZSA9IFB5T2JqZWN0X0NhbGxPYmplY3QoY2F1c2Us IE5VTEwpOwotLSAgICAgICAgICAgIGlmIChmaXhlZF9jYXVzZSA9PSBOVUxMKQotLSAgICAgICAg ICAgICAgICBnb3RvIGJhZDsKLS0gICAgICAgIH0gZWxzZSBpZiAoUHlFeGNlcHRpb25JbnN0YW5j ZV9DaGVjayhjYXVzZSkpIHsKLS0gICAgICAgICAgICBmaXhlZF9jYXVzZSA9IGNhdXNlOwotLSAg ICAgICAgICAgIFB5X0lOQ1JFRihmaXhlZF9jYXVzZSk7Ci0tICAgICAgICB9IGVsc2UgewotLSAg ICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJleGNlcHRpb24gY2F1c2VzIG11c3QgZGVyaXZlIGZyb20gIgotLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFzZUV4Y2VwdGlvbiIpOwotLSAgICAgICAgICAg IGdvdG8gYmFkOwotKyAgICAjZW5kaWYKLSsgICAgUHlfWElOQ1JFRihsb2NhbF90Yik7Ci0rICAg IFB5X1hJTkNSRUYobG9jYWxfdHlwZSk7Ci0rICAgIFB5X1hJTkNSRUYobG9jYWxfdmFsdWUpOwot KyAgICAqdHlwZSA9IGxvY2FsX3R5cGU7Ci0rICAgICp2YWx1ZSA9IGxvY2FsX3ZhbHVlOwotKyAg ICAqdGIgPSBsb2NhbF90YjsKLSsjaWYgQ1lUSE9OX0ZBU1RfVEhSRUFEX1NUQVRFCi0rICAgICNp ZiBDWVRIT05fVVNFX0VYQ19JTkZPX1NUQUNLCi0rICAgIHsKLSsgICAgICAgIF9QeUVycl9TdGFj a0l0ZW0gKmV4Y19pbmZvID0gdHN0YXRlLT5leGNfaW5mbzsKLSsgICAgICAgIHRtcF90eXBlID0g ZXhjX2luZm8tPmV4Y190eXBlOwotKyAgICAgICAgdG1wX3ZhbHVlID0gZXhjX2luZm8tPmV4Y192 YWx1ZTsKLSsgICAgICAgIHRtcF90YiA9IGV4Y19pbmZvLT5leGNfdHJhY2ViYWNrOwotKyAgICAg ICAgZXhjX2luZm8tPmV4Y190eXBlID0gbG9jYWxfdHlwZTsKLSsgICAgICAgIGV4Y19pbmZvLT5l eGNfdmFsdWUgPSBsb2NhbF92YWx1ZTsKLSsgICAgICAgIGV4Y19pbmZvLT5leGNfdHJhY2ViYWNr ID0gbG9jYWxfdGI7Ci0rICAgIH0KLSsgICAgI2Vsc2UKLSsgICAgdG1wX3R5cGUgPSB0c3RhdGUt PmV4Y190eXBlOwotKyAgICB0bXBfdmFsdWUgPSB0c3RhdGUtPmV4Y192YWx1ZTsKLSsgICAgdG1w X3RiID0gdHN0YXRlLT5leGNfdHJhY2ViYWNrOwotKyAgICB0c3RhdGUtPmV4Y190eXBlID0gbG9j YWxfdHlwZTsKLSsgICAgdHN0YXRlLT5leGNfdmFsdWUgPSBsb2NhbF92YWx1ZTsKLSsgICAgdHN0 YXRlLT5leGNfdHJhY2ViYWNrID0gbG9jYWxfdGI7Ci0rICAgICNlbmRpZgotKyAgICBQeV9YREVD UkVGKHRtcF90eXBlKTsKLSsgICAgUHlfWERFQ1JFRih0bXBfdmFsdWUpOwotKyAgICBQeV9YREVD UkVGKHRtcF90Yik7Ci0rI2Vsc2UKLSsgICAgUHlFcnJfU2V0RXhjSW5mbyhsb2NhbF90eXBlLCBs b2NhbF92YWx1ZSwgbG9jYWxfdGIpOwotKyNlbmRpZgotKyAgICByZXR1cm4gMDsKLStiYWQ6Ci0r ICAgICp0eXBlID0gMDsKLSsgICAgKnZhbHVlID0gMDsKLSsgICAgKnRiID0gMDsKLSsgICAgUHlf WERFQ1JFRihsb2NhbF90eXBlKTsKLSsgICAgUHlfWERFQ1JFRihsb2NhbF92YWx1ZSk7Ci0rICAg IFB5X1hERUNSRUYobG9jYWxfdGIpOwotKyAgICByZXR1cm4gLTE7Ci0rfQotKwotKy8qIFB5T2Jq ZWN0Q2FsbE1ldGhPICovCi0rI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTgotK3N0YXRp YyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeU9iamVjdF9DYWxsTWV0aE8oUHlPYmpl Y3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcpIHsKLSsgICAgUHlPYmplY3QgKnNlbGYsICpyZXN1bHQ7 Ci0rICAgIFB5Q0Z1bmN0aW9uIGNmdW5jOwotKyAgICBjZnVuYyA9IFB5Q0Z1bmN0aW9uX0dFVF9G VU5DVElPTihmdW5jKTsKLSsgICAgc2VsZiA9IFB5Q0Z1bmN0aW9uX0dFVF9TRUxGKGZ1bmMpOwot KyAgICBpZiAodW5saWtlbHkoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKChjaGFyKikiIHdoaWxlIGNh bGxpbmcgYSBQeXRob24gb2JqZWN0IikpKQotKyAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIHJl c3VsdCA9IGNmdW5jKHNlbGYsIGFyZyk7Ci0rICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwot KyAgICBpZiAodW5saWtlbHkoIXJlc3VsdCkgJiYgdW5saWtlbHkoIVB5RXJyX09jY3VycmVkKCkp KSB7Ci0rICAgICAgICBQeUVycl9TZXRTdHJpbmcoCi0rICAgICAgICAgICAgUHlFeGNfU3lzdGVt RXJyb3IsCi0rICAgICAgICAgICAgIk5VTEwgcmVzdWx0IHdpdGhvdXQgZXJyb3IgaW4gUHlPYmpl Y3RfQ2FsbCIpOwotKyAgICB9Ci0rICAgIHJldHVybiByZXN1bHQ7Ci0rfQotKyNlbmRpZgotKwot Ky8qIFB5T2JqZWN0Q2FsbE9uZUFyZyAqLwotKyNpZiBDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRI T04KLStzdGF0aWMgUHlPYmplY3QqIF9fUHl4X19QeU9iamVjdF9DYWxsT25lQXJnKFB5T2JqZWN0 ICpmdW5jLCBQeU9iamVjdCAqYXJnKSB7Ci0rICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0rICAgIFB5 T2JqZWN0ICphcmdzID0gUHlUdXBsZV9OZXcoMSk7Ci0rICAgIGlmICh1bmxpa2VseSghYXJncykp IHJldHVybiBOVUxMOwotKyAgICBQeV9JTkNSRUYoYXJnKTsKLSsgICAgUHlUdXBsZV9TRVRfSVRF TShhcmdzLCAwLCBhcmcpOwotKyAgICByZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9DYWxsKGZ1bmMs IGFyZ3MsIE5VTEwpOwotKyAgICBQeV9ERUNSRUYoYXJncyk7Ci0rICAgIHJldHVybiByZXN1bHQ7 Ci0rfQotK3N0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJnKSB7Ci0rI2lmIENZVEhPTl9GQVNU X1BZQ0FMTAotKyAgICBpZiAoUHlGdW5jdGlvbl9DaGVjayhmdW5jKSkgewotKyAgICAgICAgcmV0 dXJuIF9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGwoZnVuYywgJmFyZywgMSk7Ci0rICAgIH0KLSsj ZW5kaWYKLSsgICAgaWYgKGxpa2VseShQeUNGdW5jdGlvbl9DaGVjayhmdW5jKSkpIHsKLSsgICAg ICAgIGlmIChsaWtlbHkoUHlDRnVuY3Rpb25fR0VUX0ZMQUdTKGZ1bmMpICYgTUVUSF9PKSkgewot KyAgICAgICAgICAgIHJldHVybiBfX1B5eF9QeU9iamVjdF9DYWxsTWV0aE8oZnVuYywgYXJnKTsK LSsjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAotKyAgICAgICAgfSBlbHNlIGlmIChfX1B5eF9QeUZh c3RDRnVuY3Rpb25fQ2hlY2soZnVuYykpIHsKLSsgICAgICAgICAgICByZXR1cm4gX19QeXhfUHlD RnVuY3Rpb25fRmFzdENhbGwoZnVuYywgJmFyZywgMSk7Ci0rI2VuZGlmCi0gICAgICAgICB9Ci0t ICAgICAgICBQeUV4Y2VwdGlvbl9TZXRDYXVzZSh2YWx1ZSwgZml4ZWRfY2F1c2UpOwotICAgICB9 Ci0tICAgIFB5RXJyX1NldE9iamVjdCh0eXBlLCB2YWx1ZSk7Ci0tICAgIGlmICh0YikgewotLSNp ZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkKLS0gICAgICAgIFB5T2JqZWN0ICp0bXBfdHlwZSwg KnRtcF92YWx1ZSwgKnRtcF90YjsKLS0gICAgICAgIFB5RXJyX0ZldGNoKCZ0bXBfdHlwZSwgJnRt cF92YWx1ZSwgJnRtcF90Yik7Ci0tICAgICAgICBQeV9JTkNSRUYodGIpOwotLSAgICAgICAgUHlF cnJfUmVzdG9yZSh0bXBfdHlwZSwgdG1wX3ZhbHVlLCB0Yik7Ci0tICAgICAgICBQeV9YREVDUkVG KHRtcF90Yik7Ci0rICAgIHJldHVybiBfX1B5eF9fUHlPYmplY3RfQ2FsbE9uZUFyZyhmdW5jLCBh cmcpOwotK30KLSAjZWxzZQotLSAgICAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gX19QeXhf UHlUaHJlYWRTdGF0ZV9DdXJyZW50OwotLSAgICAgICAgUHlPYmplY3QqIHRtcF90YiA9IHRzdGF0 ZS0+Y3VyZXhjX3RyYWNlYmFjazsKLS0gICAgICAgIGlmICh0YiAhPSB0bXBfdGIpIHsKLS0gICAg ICAgICAgICBQeV9JTkNSRUYodGIpOwotLSAgICAgICAgICAgIHRzdGF0ZS0+Y3VyZXhjX3RyYWNl YmFjayA9IHRiOwotLSAgICAgICAgICAgIFB5X1hERUNSRUYodG1wX3RiKTsKLS0gICAgICAgIH0K LStzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZyhQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZykgewotKyAgICBQeU9iamVjdCAqcmVzdWx0 OwotKyAgICBQeU9iamVjdCAqYXJncyA9IFB5VHVwbGVfUGFjaygxLCBhcmcpOwotKyAgICBpZiAo dW5saWtlbHkoIWFyZ3MpKSByZXR1cm4gTlVMTDsKLSsgICAgcmVzdWx0ID0gX19QeXhfUHlPYmpl Y3RfQ2FsbChmdW5jLCBhcmdzLCBOVUxMKTsKLSsgICAgUHlfREVDUkVGKGFyZ3MpOwotKyAgICBy ZXR1cm4gcmVzdWx0OwotK30KLSAjZW5kaWYKLS0gICAgfQotLWJhZDoKLS0gICAgUHlfWERFQ1JF Rihvd25lZF9pbnN0YW5jZSk7Ci0tICAgIHJldHVybjsKLSsKLSsvKiBQeUVyckZldGNoUmVzdG9y ZSAqLwotKyNpZiBDWVRIT05fRkFTVF9USFJFQURfU1RBVEUKLStzdGF0aWMgQ1lUSE9OX0lOTElO RSB2b2lkIF9fUHl4X0VyclJlc3RvcmVJblN0YXRlKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlP YmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRiKSB7Ci0rICAgIFB5T2Jq ZWN0ICp0bXBfdHlwZSwgKnRtcF92YWx1ZSwgKnRtcF90YjsKLSsgICAgdG1wX3R5cGUgPSB0c3Rh dGUtPmN1cmV4Y190eXBlOwotKyAgICB0bXBfdmFsdWUgPSB0c3RhdGUtPmN1cmV4Y192YWx1ZTsK LSsgICAgdG1wX3RiID0gdHN0YXRlLT5jdXJleGNfdHJhY2ViYWNrOwotKyAgICB0c3RhdGUtPmN1 cmV4Y190eXBlID0gdHlwZTsKLSsgICAgdHN0YXRlLT5jdXJleGNfdmFsdWUgPSB2YWx1ZTsKLSsg ICAgdHN0YXRlLT5jdXJleGNfdHJhY2ViYWNrID0gdGI7Ci0rICAgIFB5X1hERUNSRUYodG1wX3R5 cGUpOwotKyAgICBQeV9YREVDUkVGKHRtcF92YWx1ZSk7Ci0rICAgIFB5X1hERUNSRUYodG1wX3Ri KTsKLSt9Ci0rc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9FcnJGZXRjaEluU3RhdGUo UHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeU9iamVjdCAqKnR5cGUsIFB5T2JqZWN0ICoqdmFsdWUs IFB5T2JqZWN0ICoqdGIpIHsKLSsgICAgKnR5cGUgPSB0c3RhdGUtPmN1cmV4Y190eXBlOwotKyAg ICAqdmFsdWUgPSB0c3RhdGUtPmN1cmV4Y192YWx1ZTsKLSsgICAgKnRiID0gdHN0YXRlLT5jdXJl eGNfdHJhY2ViYWNrOwotKyAgICB0c3RhdGUtPmN1cmV4Y190eXBlID0gMDsKLSsgICAgdHN0YXRl LT5jdXJleGNfdmFsdWUgPSAwOwotKyAgICB0c3RhdGUtPmN1cmV4Y190cmFjZWJhY2sgPSAwOwot IH0KLSAjZW5kaWYKLSAKLS0vKiBGZXRjaENvbW1vblR5cGUgKi8KLS1zdGF0aWMgUHlUeXBlT2Jq ZWN0KiBfX1B5eF9GZXRjaENvbW1vblR5cGUoUHlUeXBlT2JqZWN0KiB0eXBlKSB7Ci0tICAgIFB5 T2JqZWN0KiBmYWtlX21vZHVsZTsKLS0gICAgUHlUeXBlT2JqZWN0KiBjYWNoZWRfdHlwZSA9IE5V TEw7Ci0tICAgIGZha2VfbW9kdWxlID0gUHlJbXBvcnRfQWRkTW9kdWxlKChjaGFyKikgIl9jeXRo b25fIiBDWVRIT05fQUJJKTsKLS0gICAgaWYgKCFmYWtlX21vZHVsZSkgcmV0dXJuIE5VTEw7Ci0t ICAgIFB5X0lOQ1JFRihmYWtlX21vZHVsZSk7Ci0tICAgIGNhY2hlZF90eXBlID0gKFB5VHlwZU9i amVjdCopIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoZmFrZV9tb2R1bGUsIHR5cGUtPnRwX25hbWUp OwotLSAgICBpZiAoY2FjaGVkX3R5cGUpIHsKLS0gICAgICAgIGlmICghUHlUeXBlX0NoZWNrKChQ eU9iamVjdCopY2FjaGVkX3R5cGUpKSB7Ci0tICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhj X1R5cGVFcnJvciwKLS0gICAgICAgICAgICAgICAgIlNoYXJlZCBDeXRob24gdHlwZSAlLjIwMHMg aXMgbm90IGEgdHlwZSBvYmplY3QiLAotLSAgICAgICAgICAgICAgICB0eXBlLT50cF9uYW1lKTsK LS0gICAgICAgICAgICBnb3RvIGJhZDsKLS0gICAgICAgIH0KLS0gICAgICAgIGlmIChjYWNoZWRf dHlwZS0+dHBfYmFzaWNzaXplICE9IHR5cGUtPnRwX2Jhc2ljc2l6ZSkgewotLSAgICAgICAgICAg IFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0tICAgICAgICAgICAgICAgICJTaGFyZWQg Q3l0aG9uIHR5cGUgJS4yMDBzIGhhcyB0aGUgd3Jvbmcgc2l6ZSwgdHJ5IHJlY29tcGlsaW5nIiwK LS0gICAgICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSk7Ci0tICAgICAgICAgICAgZ290byBiYWQ7 Ci0tICAgICAgICB9Ci0tICAgIH0gZWxzZSB7Ci0tICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlv bk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSBnb3RvIGJhZDsKLS0gICAgICAgIFB5RXJy X0NsZWFyKCk7Ci0tICAgICAgICBpZiAoUHlUeXBlX1JlYWR5KHR5cGUpIDwgMCkgZ290byBiYWQ7 Ci0tICAgICAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZyhmYWtlX21vZHVsZSwgdHlwZS0+ dHBfbmFtZSwgKFB5T2JqZWN0KikgdHlwZSkgPCAwKQotLSAgICAgICAgICAgIGdvdG8gYmFkOwot LSAgICAgICAgUHlfSU5DUkVGKHR5cGUpOwotLSAgICAgICAgY2FjaGVkX3R5cGUgPSB0eXBlOwot Ky8qIEdldEF0dHIgKi8KLStzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCAqX19QeXhfR2V0 QXR0cihQeU9iamVjdCAqbywgUHlPYmplY3QgKm4pIHsKLSsjaWYgQ1lUSE9OX1VTRV9UWVBFX1NM T1RTCi0rI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotKyAgICBpZiAobGlrZWx5KFB5VW5pY29k ZV9DaGVjayhuKSkpCi0rI2Vsc2UKLSsgICAgaWYgKGxpa2VseShQeVN0cmluZ19DaGVjayhuKSkp Ci0rI2VuZGlmCi0rICAgICAgICByZXR1cm4gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihvLCBu KTsKLSsjZW5kaWYKLSsgICAgcmV0dXJuIFB5T2JqZWN0X0dldEF0dHIobywgbik7Ci0rfQotKwot Ky8qIEdldEF0dHIzICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9HZXRBdHRyM0RlZmF1bHQo UHlPYmplY3QgKmQpIHsKLSsgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9kZWNsYXJlCi0rICAgIF9f UHl4X1B5VGhyZWFkU3RhdGVfYXNzaWduCi0rICAgIGlmICh1bmxpa2VseSghX19QeXhfUHlFcnJf RXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpKQotKyAgICAgICAgcmV0dXJu IE5VTEw7Ci0rICAgIF9fUHl4X1B5RXJyX0NsZWFyKCk7Ci0rICAgIFB5X0lOQ1JFRihkKTsKLSsg ICAgcmV0dXJuIGQ7Ci0rfQotK3N0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0ICpfX1B5eF9H ZXRBdHRyMyhQeU9iamVjdCAqbywgUHlPYmplY3QgKm4sIFB5T2JqZWN0ICpkKSB7Ci0rICAgIFB5 T2JqZWN0ICpyID0gX19QeXhfR2V0QXR0cihvLCBuKTsKLSsgICAgcmV0dXJuIChsaWtlbHkocikp ID8gciA6IF9fUHl4X0dldEF0dHIzRGVmYXVsdChkKTsKLSt9Ci0rCi0rLyogUHlPYmplY3RDYWxs MkFyZ3MgKi8KLStzdGF0aWMgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCogX19QeXhfUHlPYmplY3Rf Q2FsbDJBcmdzKFB5T2JqZWN0KiBmdW5jdGlvbiwgUHlPYmplY3QqIGFyZzEsIFB5T2JqZWN0KiBh cmcyKSB7Ci0rICAgIFB5T2JqZWN0ICphcmdzLCAqcmVzdWx0ID0gTlVMTDsKLSsgICAgI2lmIENZ VEhPTl9GQVNUX1BZQ0FMTAotKyAgICBpZiAoUHlGdW5jdGlvbl9DaGVjayhmdW5jdGlvbikpIHsK LSsgICAgICAgIFB5T2JqZWN0ICphcmdzWzJdID0ge2FyZzEsIGFyZzJ9OwotKyAgICAgICAgcmV0 dXJuIF9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGwoZnVuY3Rpb24sIGFyZ3MsIDIpOwotKyAgICB9 Ci0rICAgICNlbmRpZgotKyAgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAotKyAgICBpZiAoX19Q eXhfUHlGYXN0Q0Z1bmN0aW9uX0NoZWNrKGZ1bmN0aW9uKSkgewotKyAgICAgICAgUHlPYmplY3Qg KmFyZ3NbMl0gPSB7YXJnMSwgYXJnMn07Ci0rICAgICAgICByZXR1cm4gX19QeXhfUHlDRnVuY3Rp b25fRmFzdENhbGwoZnVuY3Rpb24sIGFyZ3MsIDIpOwotICAgICB9Ci0rICAgICNlbmRpZgotKyAg ICBhcmdzID0gUHlUdXBsZV9OZXcoMik7Ci0rICAgIGlmICh1bmxpa2VseSghYXJncykpIGdvdG8g ZG9uZTsKLSsgICAgUHlfSU5DUkVGKGFyZzEpOwotKyAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3Ms IDAsIGFyZzEpOwotKyAgICBQeV9JTkNSRUYoYXJnMik7Ci0rICAgIFB5VHVwbGVfU0VUX0lURU0o YXJncywgMSwgYXJnMik7Ci0rICAgIFB5X0lOQ1JFRihmdW5jdGlvbik7Ci0rICAgIHJlc3VsdCA9 IF9fUHl4X1B5T2JqZWN0X0NhbGwoZnVuY3Rpb24sIGFyZ3MsIE5VTEwpOwotKyAgICBQeV9ERUNS RUYoYXJncyk7Ci0rICAgIFB5X0RFQ1JFRihmdW5jdGlvbik7Ci0gZG9uZToKLS0gICAgUHlfREVD UkVGKGZha2VfbW9kdWxlKTsKLS0gICAgcmV0dXJuIGNhY2hlZF90eXBlOwotLWJhZDoKLS0gICAg UHlfWERFQ1JFRihjYWNoZWRfdHlwZSk7Ci0tICAgIGNhY2hlZF90eXBlID0gTlVMTDsKLS0gICAg Z290byBkb25lOwotKyAgICByZXR1cm4gcmVzdWx0OwotIH0KLSAKLS0vKiBDeXRob25GdW5jdGlv blNoYXJlZCAqLwotLSNpbmNsdWRlIDxzdHJ1Y3RtZW1iZXIuaD4KLS1zdGF0aWMgUHlPYmplY3Qg KgotLV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2RvYyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwg Q1lUSE9OX1VOVVNFRCB2b2lkICpjbG9zdXJlKQotLXsKLS0gICAgaWYgKHVubGlrZWx5KG9wLT5m dW5jX2RvYyA9PSBOVUxMKSkgewotLSAgICAgICAgaWYgKG9wLT5mdW5jLm1fbWwtPm1sX2RvYykg ewotKy8qIFB5T2JqZWN0R2V0TWV0aG9kICovCi0rc3RhdGljIGludCBfX1B5eF9QeU9iamVjdF9H ZXRNZXRob2QoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICoqbWV0aG9k KSB7Ci0rICAgIFB5T2JqZWN0ICphdHRyOwotKyNpZiBDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg Q1lUSE9OX0NPTVBJTElOR19JTl9DUFlUSE9OICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUAot KyAgICBQeVR5cGVPYmplY3QgKnRwID0gUHlfVFlQRShvYmopOwotKyAgICBQeU9iamVjdCAqZGVz Y3I7Ci0rICAgIGRlc2NyZ2V0ZnVuYyBmID0gTlVMTDsKLSsgICAgUHlPYmplY3QgKipkaWN0cHRy LCAqZGljdDsKLSsgICAgaW50IG1ldGhfZm91bmQgPSAwOwotKyAgICBhc3NlcnQgKCptZXRob2Qg PT0gTlVMTCk7Ci0rICAgIGlmICh1bmxpa2VseSh0cC0+dHBfZ2V0YXR0cm8gIT0gUHlPYmplY3Rf R2VuZXJpY0dldEF0dHIpKSB7Ci0rICAgICAgICBhdHRyID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihvYmosIG5hbWUpOwotKyAgICAgICAgZ290byB0cnlfdW5wYWNrOwotKyAgICB9Ci0rICAg IGlmICh1bmxpa2VseSh0cC0+dHBfZGljdCA9PSBOVUxMKSAmJiB1bmxpa2VseShQeVR5cGVfUmVh ZHkodHApIDwgMCkpIHsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIGRlc2NyID0g X1B5VHlwZV9Mb29rdXAodHAsIG5hbWUpOwotKyAgICBpZiAobGlrZWx5KGRlc2NyICE9IE5VTEwp KSB7Ci0rICAgICAgICBQeV9JTkNSRUYoZGVzY3IpOwotICNpZiBQWV9NQUpPUl9WRVJTSU9OID49 IDMKLS0gICAgICAgICAgICBvcC0+ZnVuY19kb2MgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhvcC0+ ZnVuYy5tX21sLT5tbF9kb2MpOwotKyAgICAgICAgI2lmZGVmIF9fUHl4X0N5RnVuY3Rpb25fVVNF RAotKyAgICAgICAgaWYgKGxpa2VseShQeUZ1bmN0aW9uX0NoZWNrKGRlc2NyKSB8fCAoUHlfVFlQ RShkZXNjcikgPT0gJlB5TWV0aG9kRGVzY3JfVHlwZSkgfHwgX19QeXhfQ3lGdW5jdGlvbl9DaGVj ayhkZXNjcikpKQotKyAgICAgICAgI2Vsc2UKLSsgICAgICAgIGlmIChsaWtlbHkoUHlGdW5jdGlv bl9DaGVjayhkZXNjcikgfHwgKFB5X1RZUEUoZGVzY3IpID09ICZQeU1ldGhvZERlc2NyX1R5cGUp KSkKLSsgICAgICAgICNlbmRpZgotICNlbHNlCi0tICAgICAgICAgICAgb3AtPmZ1bmNfZG9jID0g UHlTdHJpbmdfRnJvbVN0cmluZyhvcC0+ZnVuYy5tX21sLT5tbF9kb2MpOwotKyAgICAgICAgI2lm ZGVmIF9fUHl4X0N5RnVuY3Rpb25fVVNFRAotKyAgICAgICAgaWYgKGxpa2VseShQeUZ1bmN0aW9u X0NoZWNrKGRlc2NyKSB8fCBfX1B5eF9DeUZ1bmN0aW9uX0NoZWNrKGRlc2NyKSkpCi0rICAgICAg ICAjZWxzZQotKyAgICAgICAgaWYgKGxpa2VseShQeUZ1bmN0aW9uX0NoZWNrKGRlc2NyKSkpCi0r ICAgICAgICAjZW5kaWYKLSAjZW5kaWYKLS0gICAgICAgICAgICBpZiAodW5saWtlbHkob3AtPmZ1 bmNfZG9jID09IE5VTEwpKQotLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgICAg IHsKLSsgICAgICAgICAgICBtZXRoX2ZvdW5kID0gMTsKLSAgICAgICAgIH0gZWxzZSB7Ci0tICAg ICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotLSAgICAgICAgICAgIHJldHVybiBQeV9Ob25l OwotKyAgICAgICAgICAgIGYgPSBQeV9UWVBFKGRlc2NyKS0+dHBfZGVzY3JfZ2V0OwotKyAgICAg ICAgICAgIGlmIChmICE9IE5VTEwgJiYgUHlEZXNjcl9Jc0RhdGEoZGVzY3IpKSB7Ci0rICAgICAg ICAgICAgICAgIGF0dHIgPSBmKGRlc2NyLCBvYmosIChQeU9iamVjdCAqKVB5X1RZUEUob2JqKSk7 Ci0rICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZXNjcik7Ci0rICAgICAgICAgICAgICAgIGdv dG8gdHJ5X3VucGFjazsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rICAgIH0KLSsgICAg ZGljdHB0ciA9IF9QeU9iamVjdF9HZXREaWN0UHRyKG9iaik7Ci0rICAgIGlmIChkaWN0cHRyICE9 IE5VTEwgJiYgKGRpY3QgPSAqZGljdHB0cikgIT0gTlVMTCkgewotKyAgICAgICAgUHlfSU5DUkVG KGRpY3QpOwotKyAgICAgICAgYXR0ciA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKGRpY3QsIG5h bWUpOwotKyAgICAgICAgaWYgKGF0dHIgIT0gTlVMTCkgewotKyAgICAgICAgICAgIFB5X0lOQ1JF RihhdHRyKTsKLSsgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7Ci0rICAgICAgICAgICAgUHlf WERFQ1JFRihkZXNjcik7Ci0rICAgICAgICAgICAgZ290byB0cnlfdW5wYWNrOwotICAgICAgICAg fQotKyAgICAgICAgUHlfREVDUkVGKGRpY3QpOwotICAgICB9Ci0tICAgIFB5X0lOQ1JFRihvcC0+ ZnVuY19kb2MpOwotLSAgICByZXR1cm4gb3AtPmZ1bmNfZG9jOwotLX0KLS1zdGF0aWMgaW50Ci0t X19QeXhfQ3lGdW5jdGlvbl9zZXRfZG9jKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBQeU9i amVjdCAqdmFsdWUsIENZVEhPTl9VTlVTRUQgdm9pZCAqY29udGV4dCkKLS17Ci0tICAgIFB5T2Jq ZWN0ICp0bXAgPSBvcC0+ZnVuY19kb2M7Ci0tICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7Ci0tICAg ICAgICB2YWx1ZSA9IFB5X05vbmU7Ci0rICAgIGlmIChtZXRoX2ZvdW5kKSB7Ci0rICAgICAgICAq bWV0aG9kID0gZGVzY3I7Ci0rICAgICAgICByZXR1cm4gMTsKLSAgICAgfQotLSAgICBQeV9JTkNS RUYodmFsdWUpOwotLSAgICBvcC0+ZnVuY19kb2MgPSB2YWx1ZTsKLS0gICAgUHlfWERFQ1JFRih0 bXApOwotLSAgICByZXR1cm4gMDsKLS19Ci0tc3RhdGljIFB5T2JqZWN0ICoKLS1fX1B5eF9DeUZ1 bmN0aW9uX2dldF9uYW1lKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VE IHZvaWQgKmNvbnRleHQpCi0tewotLSAgICBpZiAodW5saWtlbHkob3AtPmZ1bmNfbmFtZSA9PSBO VUxMKSkgewotLSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKLS0gICAgICAgIG9wLT5mdW5jX25h bWUgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZyhvcC0+ZnVuYy5tX21sLT5tbF9uYW1lKTsK LS0jZWxzZQotLSAgICAgICAgb3AtPmZ1bmNfbmFtZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJp bmcob3AtPmZ1bmMubV9tbC0+bWxfbmFtZSk7Ci0tI2VuZGlmCi0tICAgICAgICBpZiAodW5saWtl bHkob3AtPmZ1bmNfbmFtZSA9PSBOVUxMKSkKLS0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSsg ICAgaWYgKGYgIT0gTlVMTCkgewotKyAgICAgICAgYXR0ciA9IGYoZGVzY3IsIG9iaiwgKFB5T2Jq ZWN0ICopUHlfVFlQRShvYmopKTsKLSsgICAgICAgIFB5X0RFQ1JFRihkZXNjcik7Ci0rICAgICAg ICBnb3RvIHRyeV91bnBhY2s7Ci0gICAgIH0KLS0gICAgUHlfSU5DUkVGKG9wLT5mdW5jX25hbWUp OwotLSAgICByZXR1cm4gb3AtPmZ1bmNfbmFtZTsKLS19Ci0tc3RhdGljIGludAotLV9fUHl4X0N5 RnVuY3Rpb25fc2V0X25hbWUoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIFB5T2JqZWN0ICp2 YWx1ZSwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KQotLXsKLS0gICAgUHlPYmplY3QgKnRt cDsKLSsgICAgaWYgKGRlc2NyICE9IE5VTEwpIHsKLSsgICAgICAgICptZXRob2QgPSBkZXNjcjsK LSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRy aWJ1dGVFcnJvciwKLSAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0tICAgIGlmICh1bmxpa2Vs eSh2YWx1ZSA9PSBOVUxMIHx8ICFQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSkKLSsgICAgICAgICAg ICAgICAgICInJS41MHMnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICclVSciLAotKyAgICAgICAg ICAgICAgICAgdHAtPnRwX25hbWUsIG5hbWUpOwotICNlbHNlCi0tICAgIGlmICh1bmxpa2VseSh2 YWx1ZSA9PSBOVUxMIHx8ICFQeVN0cmluZ19DaGVjayh2YWx1ZSkpKQotKyAgICAgICAgICAgICAg ICAgIiclLjUwcycgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJyUuNDAwcyciLAotKyAgICAgICAg ICAgICAgICAgdHAtPnRwX25hbWUsIFB5U3RyaW5nX0FTX1NUUklORyhuYW1lKSk7Ci0gI2VuZGlm Ci0tICAgIHsKLS0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0tICAg ICAgICAgICAgICAgICAgICAgICAgIl9fbmFtZV9fIG11c3QgYmUgc2V0IHRvIGEgc3RyaW5nIG9i amVjdCIpOwotLSAgICAgICAgcmV0dXJuIC0xOwotLSAgICB9Ci0tICAgIHRtcCA9IG9wLT5mdW5j X25hbWU7Ci0tICAgIFB5X0lOQ1JFRih2YWx1ZSk7Ci0tICAgIG9wLT5mdW5jX25hbWUgPSB2YWx1 ZTsKLS0gICAgUHlfWERFQ1JFRih0bXApOwotICAgICByZXR1cm4gMDsKLS19Ci0tc3RhdGljIFB5 T2JqZWN0ICoKLS1fX1B5eF9DeUZ1bmN0aW9uX2dldF9xdWFsbmFtZShfX3B5eF9DeUZ1bmN0aW9u T2JqZWN0ICpvcCwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KQotLXsKLS0gICAgUHlfSU5D UkVGKG9wLT5mdW5jX3F1YWxuYW1lKTsKLS0gICAgcmV0dXJuIG9wLT5mdW5jX3F1YWxuYW1lOwot LX0KLS1zdGF0aWMgaW50Ci0tX19QeXhfQ3lGdW5jdGlvbl9zZXRfcXVhbG5hbWUoX19weXhfQ3lG dW5jdGlvbk9iamVjdCAqb3AsIFB5T2JqZWN0ICp2YWx1ZSwgQ1lUSE9OX1VOVVNFRCB2b2lkICpj b250ZXh0KQotLXsKLS0gICAgUHlPYmplY3QgKnRtcDsKLS0jaWYgUFlfTUFKT1JfVkVSU0lPTiA+ PSAzCi0tICAgIGlmICh1bmxpa2VseSh2YWx1ZSA9PSBOVUxMIHx8ICFQeVVuaWNvZGVfQ2hlY2so dmFsdWUpKSkKLSAjZWxzZQotLSAgICBpZiAodW5saWtlbHkodmFsdWUgPT0gTlVMTCB8fCAhUHlT dHJpbmdfQ2hlY2sodmFsdWUpKSkKLSsgICAgYXR0ciA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIob2JqLCBuYW1lKTsKLSsgICAgZ290byB0cnlfdW5wYWNrOwotICNlbmRpZgotLSAgICB7Ci0t ICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotLSAgICAgICAgICAgICAg ICAgICAgICAgICJfX3F1YWxuYW1lX18gbXVzdCBiZSBzZXQgdG8gYSBzdHJpbmcgb2JqZWN0Iik7 Ci0tICAgICAgICByZXR1cm4gLTE7Ci0tICAgIH0KLS0gICAgdG1wID0gb3AtPmZ1bmNfcXVhbG5h bWU7Ci0tICAgIFB5X0lOQ1JFRih2YWx1ZSk7Ci0tICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gdmFs dWU7Ci0tICAgIFB5X1hERUNSRUYodG1wKTsKLS0gICAgcmV0dXJuIDA7Ci0tfQotLXN0YXRpYyBQ eU9iamVjdCAqCi0tX19QeXhfQ3lGdW5jdGlvbl9nZXRfc2VsZihfX3B5eF9DeUZ1bmN0aW9uT2Jq ZWN0ICptLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNsb3N1cmUpCi0tewotLSAgICBQeU9iamVjdCAq c2VsZjsKLS0gICAgc2VsZiA9IG0tPmZ1bmNfY2xvc3VyZTsKLS0gICAgaWYgKHNlbGYgPT0gTlVM TCkKLS0gICAgICAgIHNlbGYgPSBQeV9Ob25lOwotLSAgICBQeV9JTkNSRUYoc2VsZik7Ci0tICAg IHJldHVybiBzZWxmOwotLX0KLS1zdGF0aWMgUHlPYmplY3QgKgotLV9fUHl4X0N5RnVuY3Rpb25f Z2V0X2RpY3QoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIENZVEhPTl9VTlVTRUQgdm9pZCAq Y29udGV4dCkKLS17Ci0tICAgIGlmICh1bmxpa2VseShvcC0+ZnVuY19kaWN0ID09IE5VTEwpKSB7 Ci0tICAgICAgICBvcC0+ZnVuY19kaWN0ID0gUHlEaWN0X05ldygpOwotLSAgICAgICAgaWYgKHVu bGlrZWx5KG9wLT5mdW5jX2RpY3QgPT0gTlVMTCkpCi0tICAgICAgICAgICAgcmV0dXJuIE5VTEw7 Ci0tICAgIH0KLS0gICAgUHlfSU5DUkVGKG9wLT5mdW5jX2RpY3QpOwotLSAgICByZXR1cm4gb3At PmZ1bmNfZGljdDsKLS19Ci0tc3RhdGljIGludAotLV9fUHl4X0N5RnVuY3Rpb25fc2V0X2RpY3Qo X19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIFB5T2JqZWN0ICp2YWx1ZSwgQ1lUSE9OX1VOVVNF RCB2b2lkICpjb250ZXh0KQotLXsKLS0gICAgUHlPYmplY3QgKnRtcDsKLS0gICAgaWYgKHVubGlr ZWx5KHZhbHVlID09IE5VTEwpKSB7Ci0tICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlw ZUVycm9yLAotLSAgICAgICAgICAgICAgICJmdW5jdGlvbidzIGRpY3Rpb25hcnkgbWF5IG5vdCBi ZSBkZWxldGVkIik7Ci0tICAgICAgICByZXR1cm4gLTE7Ci0tICAgIH0KLS0gICAgaWYgKHVubGlr ZWx5KCFQeURpY3RfQ2hlY2sodmFsdWUpKSkgewotLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5 RXhjX1R5cGVFcnJvciwKLS0gICAgICAgICAgICAgICAic2V0dGluZyBmdW5jdGlvbidzIGRpY3Rp b25hcnkgdG8gYSBub24tZGljdCIpOwotLSAgICAgICAgcmV0dXJuIC0xOwotK3RyeV91bnBhY2s6 Ci0rI2lmIENZVEhPTl9VTlBBQ0tfTUVUSE9EUwotKyAgICBpZiAobGlrZWx5KGF0dHIpICYmIFB5 TWV0aG9kX0NoZWNrKGF0dHIpICYmIGxpa2VseShQeU1ldGhvZF9HRVRfU0VMRihhdHRyKSA9PSBv YmopKSB7Ci0rICAgICAgICBQeU9iamVjdCAqZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJ T04oYXR0cik7Ci0rICAgICAgICBQeV9JTkNSRUYoZnVuY3Rpb24pOwotKyAgICAgICAgUHlfREVD UkVGKGF0dHIpOwotKyAgICAgICAgKm1ldGhvZCA9IGZ1bmN0aW9uOwotKyAgICAgICAgcmV0dXJu IDE7Ci0gICAgIH0KLS0gICAgdG1wID0gb3AtPmZ1bmNfZGljdDsKLS0gICAgUHlfSU5DUkVGKHZh bHVlKTsKLS0gICAgb3AtPmZ1bmNfZGljdCA9IHZhbHVlOwotLSAgICBQeV9YREVDUkVGKHRtcCk7 Ci0rI2VuZGlmCi0rICAgICptZXRob2QgPSBhdHRyOwotICAgICByZXR1cm4gMDsKLSB9Ci0tc3Rh dGljIFB5T2JqZWN0ICoKLS1fX1B5eF9DeUZ1bmN0aW9uX2dldF9nbG9iYWxzKF9fcHl4X0N5RnVu Y3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCi0tewotLSAgICBQ eV9JTkNSRUYob3AtPmZ1bmNfZ2xvYmFscyk7Ci0tICAgIHJldHVybiBvcC0+ZnVuY19nbG9iYWxz OwotLX0KLS1zdGF0aWMgUHlPYmplY3QgKgotLV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2Nsb3N1cmUo Q1lUSE9OX1VOVVNFRCBfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgQ1lUSE9OX1VOVVNFRCB2 b2lkICpjb250ZXh0KQotLXsKLS0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotLSAgICByZXR1cm4g UHlfTm9uZTsKLS19Ci0tc3RhdGljIFB5T2JqZWN0ICoKLS1fX1B5eF9DeUZ1bmN0aW9uX2dldF9j b2RlKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRl eHQpCi0tewotLSAgICBQeU9iamVjdCogcmVzdWx0ID0gKG9wLT5mdW5jX2NvZGUpID8gb3AtPmZ1 bmNfY29kZSA6IFB5X05vbmU7Ci0tICAgIFB5X0lOQ1JFRihyZXN1bHQpOwotLSAgICByZXR1cm4g cmVzdWx0OwotLX0KLS1zdGF0aWMgaW50Ci0tX19QeXhfQ3lGdW5jdGlvbl9pbml0X2RlZmF1bHRz KF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wKSB7Ci0tICAgIGludCByZXN1bHQgPSAwOwotLSAg ICBQeU9iamVjdCAqcmVzID0gb3AtPmRlZmF1bHRzX2dldHRlcigoUHlPYmplY3QgKikgb3ApOwot LSAgICBpZiAodW5saWtlbHkoIXJlcykpCi0tICAgICAgICByZXR1cm4gLTE7Ci0tICAgICNpZiBD WVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUwot LSAgICBvcC0+ZGVmYXVsdHNfdHVwbGUgPSBQeVR1cGxlX0dFVF9JVEVNKHJlcywgMCk7Ci0tICAg IFB5X0lOQ1JFRihvcC0+ZGVmYXVsdHNfdHVwbGUpOwotLSAgICBvcC0+ZGVmYXVsdHNfa3dkaWN0 ID0gUHlUdXBsZV9HRVRfSVRFTShyZXMsIDEpOwotLSAgICBQeV9JTkNSRUYob3AtPmRlZmF1bHRz X2t3ZGljdCk7Ci0tICAgICNlbHNlCi0tICAgIG9wLT5kZWZhdWx0c190dXBsZSA9IFB5U2VxdWVu Y2VfSVRFTShyZXMsIDApOwotLSAgICBpZiAodW5saWtlbHkoIW9wLT5kZWZhdWx0c190dXBsZSkp IHJlc3VsdCA9IC0xOwotLSAgICBlbHNlIHsKLS0gICAgICAgIG9wLT5kZWZhdWx0c19rd2RpY3Qg PSBQeVNlcXVlbmNlX0lURU0ocmVzLCAxKTsKLS0gICAgICAgIGlmICh1bmxpa2VseSghb3AtPmRl ZmF1bHRzX2t3ZGljdCkpIHJlc3VsdCA9IC0xOwotLSAgICB9Ci0tICAgICNlbmRpZgotLSAgICBQ eV9ERUNSRUYocmVzKTsKLSsKLSsvKiBQeU9iamVjdENhbGxNZXRob2QxICovCi0rc3RhdGljIFB5 T2JqZWN0KiBfX1B5eF9fUHlPYmplY3RfQ2FsbE1ldGhvZDEoUHlPYmplY3QqIG1ldGhvZCwgUHlP YmplY3QqIGFyZykgewotKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhtZXRob2QsIGFyZyk7Ci0rICAgIFB5X0RFQ1JFRihtZXRob2QpOwotICAgICByZXR1 cm4gcmVzdWx0OwotIH0KLS1zdGF0aWMgaW50Ci0tX19QeXhfQ3lGdW5jdGlvbl9zZXRfZGVmYXVs dHMoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIFB5T2JqZWN0KiB2YWx1ZSwgQ1lUSE9OX1VO VVNFRCB2b2lkICpjb250ZXh0KSB7Ci0tICAgIFB5T2JqZWN0KiB0bXA7Ci0tICAgIGlmICghdmFs dWUpIHsKLS0gICAgICAgIHZhbHVlID0gUHlfTm9uZTsKLS0gICAgfSBlbHNlIGlmICh2YWx1ZSAh PSBQeV9Ob25lICYmICFQeVR1cGxlX0NoZWNrKHZhbHVlKSkgewotLSAgICAgICAgUHlFcnJfU2V0 U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLS0gICAgICAgICAgICAgICAgICAgICAgICAiX19kZWZh dWx0c19fIG11c3QgYmUgc2V0IHRvIGEgdHVwbGUgb2JqZWN0Iik7Ci0tICAgICAgICByZXR1cm4g LTE7Ci0tICAgIH0KLS0gICAgUHlfSU5DUkVGKHZhbHVlKTsKLS0gICAgdG1wID0gb3AtPmRlZmF1 bHRzX3R1cGxlOwotLSAgICBvcC0+ZGVmYXVsdHNfdHVwbGUgPSB2YWx1ZTsKLS0gICAgUHlfWERF Q1JFRih0bXApOwotLSAgICByZXR1cm4gMDsKLS19Ci0tc3RhdGljIFB5T2JqZWN0ICoKLS1fX1B5 eF9DeUZ1bmN0aW9uX2dldF9kZWZhdWx0cyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgQ1lU SE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KSB7Ci0tICAgIFB5T2JqZWN0KiByZXN1bHQgPSBvcC0+ ZGVmYXVsdHNfdHVwbGU7Ci0tICAgIGlmICh1bmxpa2VseSghcmVzdWx0KSkgewotLSAgICAgICAg aWYgKG9wLT5kZWZhdWx0c19nZXR0ZXIpIHsKLS0gICAgICAgICAgICBpZiAoX19QeXhfQ3lGdW5j dGlvbl9pbml0X2RlZmF1bHRzKG9wKSA8IDApIHJldHVybiBOVUxMOwotLSAgICAgICAgICAgIHJl c3VsdCA9IG9wLT5kZWZhdWx0c190dXBsZTsKLS0gICAgICAgIH0gZWxzZSB7Ci0tICAgICAgICAg ICAgcmVzdWx0ID0gUHlfTm9uZTsKLS0gICAgICAgIH0KLStzdGF0aWMgUHlPYmplY3QqIF9fUHl4 X1B5T2JqZWN0X0NhbGxNZXRob2QxKFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0KiBtZXRob2RfbmFt ZSwgUHlPYmplY3QqIGFyZykgewotKyAgICBQeU9iamVjdCAqbWV0aG9kID0gTlVMTCwgKnJlc3Vs dDsKLSsgICAgaW50IGlzX21ldGhvZCA9IF9fUHl4X1B5T2JqZWN0X0dldE1ldGhvZChvYmosIG1l dGhvZF9uYW1lLCAmbWV0aG9kKTsKLSsgICAgaWYgKGxpa2VseShpc19tZXRob2QpKSB7Ci0rICAg ICAgICByZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MobWV0aG9kLCBvYmosIGFyZyk7 Ci0rICAgICAgICBQeV9ERUNSRUYobWV0aG9kKTsKLSsgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g ICAgIH0KLS0gICAgUHlfSU5DUkVGKHJlc3VsdCk7Ci0tICAgIHJldHVybiByZXN1bHQ7Ci0rICAg IGlmICh1bmxpa2VseSghbWV0aG9kKSkgcmV0dXJuIE5VTEw7Ci0rICAgIHJldHVybiBfX1B5eF9f UHlPYmplY3RfQ2FsbE1ldGhvZDEobWV0aG9kLCBhcmcpOwotIH0KLS1zdGF0aWMgaW50Ci0tX19Q eXhfQ3lGdW5jdGlvbl9zZXRfa3dkZWZhdWx0cyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwg UHlPYmplY3QqIHZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpIHsKLS0gICAgUHlP YmplY3QqIHRtcDsKLS0gICAgaWYgKCF2YWx1ZSkgewotLSAgICAgICAgdmFsdWUgPSBQeV9Ob25l OwotLSAgICB9IGVsc2UgaWYgKHZhbHVlICE9IFB5X05vbmUgJiYgIVB5RGljdF9DaGVjayh2YWx1 ZSkpIHsKLS0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0tICAgICAg ICAgICAgICAgICAgICAgICAgIl9fa3dkZWZhdWx0c19fIG11c3QgYmUgc2V0IHRvIGEgZGljdCBv YmplY3QiKTsKLS0gICAgICAgIHJldHVybiAtMTsKLSsKLSsvKiBhcHBlbmQgKi8KLStzdGF0aWMg Q1lUSE9OX0lOTElORSBpbnQgX19QeXhfUHlPYmplY3RfQXBwZW5kKFB5T2JqZWN0KiBMLCBQeU9i amVjdCogeCkgewotKyAgICBpZiAobGlrZWx5KFB5TGlzdF9DaGVja0V4YWN0KEwpKSkgewotKyAg ICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1B5TGlzdF9BcHBlbmQoTCwgeCkgPCAwKSkgcmV0dXJu IC0xOwotKyAgICB9IGVsc2UgewotKyAgICAgICAgUHlPYmplY3QqIHJldHZhbCA9IF9fUHl4X1B5 T2JqZWN0X0NhbGxNZXRob2QxKEwsIF9fcHl4X25fc19hcHBlbmQsIHgpOwotKyAgICAgICAgaWYg KHVubGlrZWx5KCFyZXR2YWwpKQotKyAgICAgICAgICAgIHJldHVybiAtMTsKLSsgICAgICAgIFB5 X0RFQ1JFRihyZXR2YWwpOwotICAgICB9Ci0tICAgIFB5X0lOQ1JFRih2YWx1ZSk7Ci0tICAgIHRt cCA9IG9wLT5kZWZhdWx0c19rd2RpY3Q7Ci0tICAgIG9wLT5kZWZhdWx0c19rd2RpY3QgPSB2YWx1 ZTsKLS0gICAgUHlfWERFQ1JFRih0bXApOwotICAgICByZXR1cm4gMDsKLSB9Ci0tc3RhdGljIFB5 T2JqZWN0ICoKLS1fX1B5eF9DeUZ1bmN0aW9uX2dldF9rd2RlZmF1bHRzKF9fcHl4X0N5RnVuY3Rp b25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpIHsKLS0gICAgUHlPYmpl Y3QqIHJlc3VsdCA9IG9wLT5kZWZhdWx0c19rd2RpY3Q7Ci0tICAgIGlmICh1bmxpa2VseSghcmVz dWx0KSkgewotLSAgICAgICAgaWYgKG9wLT5kZWZhdWx0c19nZXR0ZXIpIHsKLS0gICAgICAgICAg ICBpZiAoX19QeXhfQ3lGdW5jdGlvbl9pbml0X2RlZmF1bHRzKG9wKSA8IDApIHJldHVybiBOVUxM OwotLSAgICAgICAgICAgIHJlc3VsdCA9IG9wLT5kZWZhdWx0c19rd2RpY3Q7Ci0tICAgICAgICB9 IGVsc2UgewotLSAgICAgICAgICAgIHJlc3VsdCA9IFB5X05vbmU7Ci0rCi0rLyogUHlPYmplY3RD YWxsTm9BcmcgKi8KLSsjaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9DUFlUSE9OCi0rc3RhdGljIENZ VEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhQeU9iamVjdCAq ZnVuYykgewotKyNpZiBDWVRIT05fRkFTVF9QWUNBTEwKLSsgICAgaWYgKFB5RnVuY3Rpb25fQ2hl Y2soZnVuYykpIHsKLSsgICAgICAgIHJldHVybiBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKGZ1 bmMsIE5VTEwsIDApOwotKyAgICB9Ci0rI2VuZGlmCi0rI2lmZGVmIF9fUHl4X0N5RnVuY3Rpb25f VVNFRAotKyAgICBpZiAobGlrZWx5KFB5Q0Z1bmN0aW9uX0NoZWNrKGZ1bmMpIHx8IF9fUHl4X0N5 RnVuY3Rpb25fQ2hlY2soZnVuYykpKQotKyNlbHNlCi0rICAgIGlmIChsaWtlbHkoUHlDRnVuY3Rp b25fQ2hlY2soZnVuYykpKQotKyNlbmRpZgotKyAgICB7Ci0rICAgICAgICBpZiAobGlrZWx5KFB5 Q0Z1bmN0aW9uX0dFVF9GTEFHUyhmdW5jKSAmIE1FVEhfTk9BUkdTKSkgewotKyAgICAgICAgICAg IHJldHVybiBfX1B5eF9QeU9iamVjdF9DYWxsTWV0aE8oZnVuYywgTlVMTCk7Ci0gICAgICAgICB9 Ci0gICAgIH0KLS0gICAgUHlfSU5DUkVGKHJlc3VsdCk7Ci0tICAgIHJldHVybiByZXN1bHQ7Ci0r ICAgIHJldHVybiBfX1B5eF9QeU9iamVjdF9DYWxsKGZ1bmMsIF9fcHl4X2VtcHR5X3R1cGxlLCBO VUxMKTsKLSB9Ci0tc3RhdGljIGludAotLV9fUHl4X0N5RnVuY3Rpb25fc2V0X2Fubm90YXRpb25z KF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBQeU9iamVjdCogdmFsdWUsIENZVEhPTl9VTlVT RUQgdm9pZCAqY29udGV4dCkgewotLSAgICBQeU9iamVjdCogdG1wOwotLSAgICBpZiAoIXZhbHVl IHx8IHZhbHVlID09IFB5X05vbmUpIHsKLS0gICAgICAgIHZhbHVlID0gTlVMTDsKLS0gICAgfSBl bHNlIGlmICghUHlEaWN0X0NoZWNrKHZhbHVlKSkgewotLSAgICAgICAgUHlFcnJfU2V0U3RyaW5n KFB5RXhjX1R5cGVFcnJvciwKLS0gICAgICAgICAgICAgICAgICAgICAgICAiX19hbm5vdGF0aW9u c19fIG11c3QgYmUgc2V0IHRvIGEgZGljdCBvYmplY3QiKTsKLS0gICAgICAgIHJldHVybiAtMTsK LSsjZW5kaWYKLSsKLSsvKiBHZXRJdGVtSW50ICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9H ZXRJdGVtSW50X0dlbmVyaWMoUHlPYmplY3QgKm8sIFB5T2JqZWN0KiBqKSB7Ci0rICAgIFB5T2Jq ZWN0ICpyOwotKyAgICBpZiAoIWopIHJldHVybiBOVUxMOwotKyAgICByID0gUHlPYmplY3RfR2V0 SXRlbShvLCBqKTsKLSsgICAgUHlfREVDUkVGKGopOwotKyAgICByZXR1cm4gcjsKLSt9Ci0rc3Rh dGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QgKl9fUHl4X0dldEl0ZW1JbnRfTGlzdF9GYXN0KFB5 T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDWVRIT05fTkNQX1VOVVNFRCBpbnQgd3Jh cGFyb3VuZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIENZVEhPTl9OQ1BfVU5VU0VEIGludCBib3VuZHNjaGVjaykgewotKyNp ZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVG UwotKyAgICBQeV9zc2l6ZV90IHdyYXBwZWRfaSA9IGk7Ci0rICAgIGlmICh3cmFwYXJvdW5kICYg dW5saWtlbHkoaSA8IDApKSB7Ci0rICAgICAgICB3cmFwcGVkX2kgKz0gUHlMaXN0X0dFVF9TSVpF KG8pOwotICAgICB9Ci0tICAgIFB5X1hJTkNSRUYodmFsdWUpOwotLSAgICB0bXAgPSBvcC0+ZnVu Y19hbm5vdGF0aW9uczsKLS0gICAgb3AtPmZ1bmNfYW5ub3RhdGlvbnMgPSB2YWx1ZTsKLS0gICAg UHlfWERFQ1JFRih0bXApOwotLSAgICByZXR1cm4gMDsKLSsgICAgaWYgKCghYm91bmRzY2hlY2sp IHx8IGxpa2VseShfX1B5eF9pc192YWxpZF9pbmRleCh3cmFwcGVkX2ksIFB5TGlzdF9HRVRfU0la RShvKSkpKSB7Ci0rICAgICAgICBQeU9iamVjdCAqciA9IFB5TGlzdF9HRVRfSVRFTShvLCB3cmFw cGVkX2kpOwotKyAgICAgICAgUHlfSU5DUkVGKHIpOwotKyAgICAgICAgcmV0dXJuIHI7Ci0rICAg IH0KLSsgICAgcmV0dXJuIF9fUHl4X0dldEl0ZW1JbnRfR2VuZXJpYyhvLCBQeUludF9Gcm9tU3Np emVfdChpKSk7Ci0rI2Vsc2UKLSsgICAgcmV0dXJuIFB5U2VxdWVuY2VfR2V0SXRlbShvLCBpKTsK LSsjZW5kaWYKLSB9Ci0tc3RhdGljIFB5T2JqZWN0ICoKLS1fX1B5eF9DeUZ1bmN0aW9uX2dldF9h bm5vdGF0aW9ucyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgQ1lUSE9OX1VOVVNFRCB2b2lk ICpjb250ZXh0KSB7Ci0tICAgIFB5T2JqZWN0KiByZXN1bHQgPSBvcC0+ZnVuY19hbm5vdGF0aW9u czsKLS0gICAgaWYgKHVubGlrZWx5KCFyZXN1bHQpKSB7Ci0tICAgICAgICByZXN1bHQgPSBQeURp Y3RfTmV3KCk7Ci0tICAgICAgICBpZiAodW5saWtlbHkoIXJlc3VsdCkpIHJldHVybiBOVUxMOwot LSAgICAgICAgb3AtPmZ1bmNfYW5ub3RhdGlvbnMgPSByZXN1bHQ7Ci0rc3RhdGljIENZVEhPTl9J TkxJTkUgUHlPYmplY3QgKl9fUHl4X0dldEl0ZW1JbnRfVHVwbGVfRmFzdChQeU9iamVjdCAqbywg UHlfc3NpemVfdCBpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX05DUF9VTlVTRUQgaW50IHdyYXBhcm91bmQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDWVRIT05fTkNQX1VOVVNFRCBpbnQgYm91bmRzY2hlY2spIHsKLSsjaWYgQ1lUSE9OX0FT U1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMKLSsgICAgUHlf c3NpemVfdCB3cmFwcGVkX2kgPSBpOwotKyAgICBpZiAod3JhcGFyb3VuZCAmIHVubGlrZWx5KGkg PCAwKSkgewotKyAgICAgICAgd3JhcHBlZF9pICs9IFB5VHVwbGVfR0VUX1NJWkUobyk7Ci0gICAg IH0KLS0gICAgUHlfSU5DUkVGKHJlc3VsdCk7Ci0tICAgIHJldHVybiByZXN1bHQ7Ci0rICAgIGlm ICgoIWJvdW5kc2NoZWNrKSB8fCBsaWtlbHkoX19QeXhfaXNfdmFsaWRfaW5kZXgod3JhcHBlZF9p LCBQeVR1cGxlX0dFVF9TSVpFKG8pKSkpIHsKLSsgICAgICAgIFB5T2JqZWN0ICpyID0gUHlUdXBs ZV9HRVRfSVRFTShvLCB3cmFwcGVkX2kpOwotKyAgICAgICAgUHlfSU5DUkVGKHIpOwotKyAgICAg ICAgcmV0dXJuIHI7Ci0rICAgIH0KLSsgICAgcmV0dXJuIF9fUHl4X0dldEl0ZW1JbnRfR2VuZXJp YyhvLCBQeUludF9Gcm9tU3NpemVfdChpKSk7Ci0rI2Vsc2UKLSsgICAgcmV0dXJuIFB5U2VxdWVu Y2VfR2V0SXRlbShvLCBpKTsKLSsjZW5kaWYKLSB9Ci0tc3RhdGljIFB5R2V0U2V0RGVmIF9fcHl4 X0N5RnVuY3Rpb25fZ2V0c2V0c1tdID0gewotLSAgICB7KGNoYXIgKikgImZ1bmNfZG9jIiwgKGdl dHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9kb2MsIChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9z ZXRfZG9jLCAwLCAwfSwKLS0gICAgeyhjaGFyICopICJfX2RvY19fIiwgIChnZXR0ZXIpX19QeXhf Q3lGdW5jdGlvbl9nZXRfZG9jLCAoc2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fc2V0X2RvYywgMCwg MH0sCi0tICAgIHsoY2hhciAqKSAiZnVuY19uYW1lIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9u X2dldF9uYW1lLCAoc2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fc2V0X25hbWUsIDAsIDB9LAotLSAg ICB7KGNoYXIgKikgIl9fbmFtZV9fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9uYW1l LCAoc2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fc2V0X25hbWUsIDAsIDB9LAotLSAgICB7KGNoYXIg KikgIl9fcXVhbG5hbWVfXyIsIChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9nZXRfcXVhbG5hbWUs IChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfcXVhbG5hbWUsIDAsIDB9LAotLSAgICB7KGNo YXIgKikgIl9fc2VsZl9fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9zZWxmLCAwLCAw LCAwfSwKLS0gICAgeyhjaGFyICopICJmdW5jX2RpY3QiLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rp b25fZ2V0X2RpY3QsIChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfZGljdCwgMCwgMH0sCi0t ICAgIHsoY2hhciAqKSAiX19kaWN0X18iLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2Rp Y3QsIChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfZGljdCwgMCwgMH0sCi0tICAgIHsoY2hh ciAqKSAiZnVuY19nbG9iYWxzIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9nbG9iYWxz LCAwLCAwLCAwfSwKLS0gICAgeyhjaGFyICopICJfX2dsb2JhbHNfXyIsIChnZXR0ZXIpX19QeXhf Q3lGdW5jdGlvbl9nZXRfZ2xvYmFscywgMCwgMCwgMH0sCi0tICAgIHsoY2hhciAqKSAiZnVuY19j bG9zdXJlIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9jbG9zdXJlLCAwLCAwLCAwfSwK LS0gICAgeyhjaGFyICopICJfX2Nsb3N1cmVfXyIsIChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9n ZXRfY2xvc3VyZSwgMCwgMCwgMH0sCi0tICAgIHsoY2hhciAqKSAiZnVuY19jb2RlIiwgKGdldHRl cilfX1B5eF9DeUZ1bmN0aW9uX2dldF9jb2RlLCAwLCAwLCAwfSwKLS0gICAgeyhjaGFyICopICJf X2NvZGVfXyIsIChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9nZXRfY29kZSwgMCwgMCwgMH0sCi0t ICAgIHsoY2hhciAqKSAiZnVuY19kZWZhdWx0cyIsIChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9n ZXRfZGVmYXVsdHMsIChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfZGVmYXVsdHMsIDAsIDB9 LAotLSAgICB7KGNoYXIgKikgIl9fZGVmYXVsdHNfXyIsIChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlv bl9nZXRfZGVmYXVsdHMsIChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfZGVmYXVsdHMsIDAs IDB9LAotLSAgICB7KGNoYXIgKikgIl9fa3dkZWZhdWx0c19fIiwgKGdldHRlcilfX1B5eF9DeUZ1 bmN0aW9uX2dldF9rd2RlZmF1bHRzLCAoc2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fc2V0X2t3ZGVm YXVsdHMsIDAsIDB9LAotLSAgICB7KGNoYXIgKikgIl9fYW5ub3RhdGlvbnNfXyIsIChnZXR0ZXIp X19QeXhfQ3lGdW5jdGlvbl9nZXRfYW5ub3RhdGlvbnMsIChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlv bl9zZXRfYW5ub3RhdGlvbnMsIDAsIDB9LAotLSAgICB7MCwgMCwgMCwgMCwgMH0KLS19OwotLXN0 YXRpYyBQeU1lbWJlckRlZiBfX3B5eF9DeUZ1bmN0aW9uX21lbWJlcnNbXSA9IHsKLS0gICAgeyhj aGFyICopICJfX21vZHVsZV9fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5Q0Z1bmN0aW9uT2JqZWN0 LCBtX21vZHVsZSksIFBZX1dSSVRFX1JFU1RSSUNURUQsIDB9LAotLSAgICB7MCwgMCwgMCwgIDAs IDB9Ci0tfTsKLS1zdGF0aWMgUHlPYmplY3QgKgotLV9fUHl4X0N5RnVuY3Rpb25fcmVkdWNlKF9f cHl4X0N5RnVuY3Rpb25PYmplY3QgKm0sIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmFyZ3MpCi0t ewotLSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKLS0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9t U3RyaW5nKG0tPmZ1bmMubV9tbC0+bWxfbmFtZSk7Ci0rc3RhdGljIENZVEhPTl9JTkxJTkUgUHlP YmplY3QgKl9fUHl4X0dldEl0ZW1JbnRfRmFzdChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBpLCBp bnQgaXNfbGlzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIENZVEhPTl9OQ1BfVU5VU0VEIGludCB3cmFwYXJvdW5kLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX05DUF9VTlVT RUQgaW50IGJvdW5kc2NoZWNrKSB7Ci0rI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1MgJiYg IUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTICYmIENZVEhPTl9VU0VfVFlQRV9TTE9UUwotKyAg ICBpZiAoaXNfbGlzdCB8fCBQeUxpc3RfQ2hlY2tFeGFjdChvKSkgewotKyAgICAgICAgUHlfc3Np emVfdCBuID0gKCghd3JhcGFyb3VuZCkgfCBsaWtlbHkoaSA+PSAwKSkgPyBpIDogaSArIFB5TGlz dF9HRVRfU0laRShvKTsKLSsgICAgICAgIGlmICgoIWJvdW5kc2NoZWNrKSB8fCAobGlrZWx5KF9f UHl4X2lzX3ZhbGlkX2luZGV4KG4sIFB5TGlzdF9HRVRfU0laRShvKSkpKSkgewotKyAgICAgICAg ICAgIFB5T2JqZWN0ICpyID0gUHlMaXN0X0dFVF9JVEVNKG8sIG4pOwotKyAgICAgICAgICAgIFB5 X0lOQ1JFRihyKTsKLSsgICAgICAgICAgICByZXR1cm4gcjsKLSsgICAgICAgIH0KLSsgICAgfQot KyAgICBlbHNlIGlmIChQeVR1cGxlX0NoZWNrRXhhY3QobykpIHsKLSsgICAgICAgIFB5X3NzaXpl X3QgbiA9ICgoIXdyYXBhcm91bmQpIHwgbGlrZWx5KGkgPj0gMCkpID8gaSA6IGkgKyBQeVR1cGxl X0dFVF9TSVpFKG8pOwotKyAgICAgICAgaWYgKCghYm91bmRzY2hlY2spIHx8IGxpa2VseShfX1B5 eF9pc192YWxpZF9pbmRleChuLCBQeVR1cGxlX0dFVF9TSVpFKG8pKSkpIHsKLSsgICAgICAgICAg ICBQeU9iamVjdCAqciA9IFB5VHVwbGVfR0VUX0lURU0obywgbik7Ci0rICAgICAgICAgICAgUHlf SU5DUkVGKHIpOwotKyAgICAgICAgICAgIHJldHVybiByOwotKyAgICAgICAgfQotKyAgICB9IGVs c2UgewotKyAgICAgICAgUHlTZXF1ZW5jZU1ldGhvZHMgKm0gPSBQeV9UWVBFKG8pLT50cF9hc19z ZXF1ZW5jZTsKLSsgICAgICAgIGlmIChsaWtlbHkobSAmJiBtLT5zcV9pdGVtKSkgewotKyAgICAg ICAgICAgIGlmICh3cmFwYXJvdW5kICYmIHVubGlrZWx5KGkgPCAwKSAmJiBsaWtlbHkobS0+c3Ff bGVuZ3RoKSkgewotKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGwgPSBtLT5zcV9sZW5ndGgo byk7Ci0rICAgICAgICAgICAgICAgIGlmIChsaWtlbHkobCA+PSAwKSkgewotKyAgICAgICAgICAg ICAgICAgICAgaSArPSBsOwotKyAgICAgICAgICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAg ICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3Ip KQotKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotKyAgICAgICAgICAgICAg ICAgICAgUHlFcnJfQ2xlYXIoKTsKLSsgICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgIH0K LSsgICAgICAgICAgICByZXR1cm4gbS0+c3FfaXRlbShvLCBpKTsKLSsgICAgICAgIH0KLSsgICAg fQotICNlbHNlCi0tICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKG0tPmZ1bmMubV9tbC0+ bWxfbmFtZSk7Ci0rICAgIGlmIChpc19saXN0IHx8IFB5U2VxdWVuY2VfQ2hlY2sobykpIHsKLSsg ICAgICAgIHJldHVybiBQeVNlcXVlbmNlX0dldEl0ZW0obywgaSk7Ci0rICAgIH0KLSAjZW5kaWYK LSsgICAgcmV0dXJuIF9fUHl4X0dldEl0ZW1JbnRfR2VuZXJpYyhvLCBQeUludF9Gcm9tU3NpemVf dChpKSk7Ci0gfQotLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9DeUZ1bmN0aW9uX21ldGhvZHNb XSA9IHsKLS0gICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKV9fUHl4X0N5RnVuY3Rpb25f cmVkdWNlLCBNRVRIX1ZBUkFSR1MsIDB9LAotLSAgICB7MCwgMCwgMCwgMH0KLS19OwotLSNpZiBQ WV9WRVJTSU9OX0hFWCA8IDB4MDMwNTAwQTAKLS0jZGVmaW5lIF9fUHl4X0N5RnVuY3Rpb25fd2Vh a3JlZmxpc3QoY3lmdW5jKSAoKGN5ZnVuYyktPmZ1bmNfd2Vha3JlZmxpc3QpCi0rCi0rLyogRGVs SXRlbUludCAqLwotK3N0YXRpYyBpbnQgX19QeXhfRGVsSXRlbV9HZW5lcmljKFB5T2JqZWN0ICpv LCBQeU9iamVjdCAqaikgewotKyAgICBpbnQgcjsKLSsgICAgaWYgKCFqKSByZXR1cm4gLTE7Ci0r ICAgIHIgPSBQeU9iamVjdF9EZWxJdGVtKG8sIGopOwotKyAgICBQeV9ERUNSRUYoaik7Ci0rICAg IHJldHVybiByOwotK30KLStzdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQgX19QeXhfRGVsSXRlbUlu dF9GYXN0KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGksCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBDWVRIT05fVU5VU0VEIGludCBpc19saXN0LCBDWVRI T05fTkNQX1VOVVNFRCBpbnQgd3JhcGFyb3VuZCkgewotKyNpZiAhQ1lUSE9OX1VTRV9UWVBFX1NM T1RTCi0rICAgIGlmIChpc19saXN0IHx8IFB5U2VxdWVuY2VfQ2hlY2sobykpIHsKLSsgICAgICAg IHJldHVybiBQeVNlcXVlbmNlX0RlbEl0ZW0obywgaSk7Ci0rICAgIH0KLSAjZWxzZQotLSNkZWZp bmUgX19QeXhfQ3lGdW5jdGlvbl93ZWFrcmVmbGlzdChjeWZ1bmMpICgoY3lmdW5jKS0+ZnVuYy5t X3dlYWtyZWZsaXN0KQotKyAgICBQeVNlcXVlbmNlTWV0aG9kcyAqbSA9IFB5X1RZUEUobyktPnRw X2FzX3NlcXVlbmNlOwotKyAgICBpZiAobGlrZWx5KG0gJiYgbS0+c3FfYXNzX2l0ZW0pKSB7Ci0r ICAgICAgICBpZiAod3JhcGFyb3VuZCAmJiB1bmxpa2VseShpIDwgMCkgJiYgbGlrZWx5KG0tPnNx X2xlbmd0aCkpIHsKLSsgICAgICAgICAgICBQeV9zc2l6ZV90IGwgPSBtLT5zcV9sZW5ndGgobyk7 Ci0rICAgICAgICAgICAgaWYgKGxpa2VseShsID49IDApKSB7Ci0rICAgICAgICAgICAgICAgIGkg Kz0gbDsKLSsgICAgICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgICAgICBpZiAoIVB5RXJy X0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCi0rICAgICAgICAgICAgICAg ICAgICByZXR1cm4gLTE7Ci0rICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0rICAgICAg ICAgICAgfQotKyAgICAgICAgfQotKyAgICAgICAgcmV0dXJuIG0tPnNxX2Fzc19pdGVtKG8sIGks IChQeU9iamVjdCAqKU5VTEwpOwotKyAgICB9Ci0gI2VuZGlmCi0tc3RhdGljIFB5T2JqZWN0ICpf X1B5eF9DeUZ1bmN0aW9uX0luaXQoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIFB5TWV0aG9k RGVmICptbCwgaW50IGZsYWdzLCBQeU9iamVjdCogcXVhbG5hbWUsCi0tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNsb3N1cmUsIFB5T2JqZWN0ICptb2R1 bGUsIFB5T2JqZWN0KiBnbG9iYWxzLCBQeU9iamVjdCogY29kZSkgewotLSAgICBpZiAodW5saWtl bHkob3AgPT0gTlVMTCkpCi0tICAgICAgICByZXR1cm4gTlVMTDsKLS0gICAgb3AtPmZsYWdzID0g ZmxhZ3M7Ci0tICAgIF9fUHl4X0N5RnVuY3Rpb25fd2Vha3JlZmxpc3Qob3ApID0gTlVMTDsKLS0g ICAgb3AtPmZ1bmMubV9tbCA9IG1sOwotLSAgICBvcC0+ZnVuYy5tX3NlbGYgPSAoUHlPYmplY3Qg Kikgb3A7Ci0tICAgIFB5X1hJTkNSRUYoY2xvc3VyZSk7Ci0tICAgIG9wLT5mdW5jX2Nsb3N1cmUg PSBjbG9zdXJlOwotLSAgICBQeV9YSU5DUkVGKG1vZHVsZSk7Ci0tICAgIG9wLT5mdW5jLm1fbW9k dWxlID0gbW9kdWxlOwotLSAgICBvcC0+ZnVuY19kaWN0ID0gTlVMTDsKLS0gICAgb3AtPmZ1bmNf bmFtZSA9IE5VTEw7Ci0tICAgIFB5X0lOQ1JFRihxdWFsbmFtZSk7Ci0tICAgIG9wLT5mdW5jX3F1 YWxuYW1lID0gcXVhbG5hbWU7Ci0tICAgIG9wLT5mdW5jX2RvYyA9IE5VTEw7Ci0tICAgIG9wLT5m dW5jX2NsYXNzb2JqID0gTlVMTDsKLS0gICAgb3AtPmZ1bmNfZ2xvYmFscyA9IGdsb2JhbHM7Ci0t ICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19nbG9iYWxzKTsKLS0gICAgUHlfWElOQ1JFRihjb2RlKTsK LS0gICAgb3AtPmZ1bmNfY29kZSA9IGNvZGU7Ci0tICAgIG9wLT5kZWZhdWx0c19weW9iamVjdHMg PSAwOwotLSAgICBvcC0+ZGVmYXVsdHNfc2l6ZSA9IDA7Ci0tICAgIG9wLT5kZWZhdWx0cyA9IE5V TEw7Ci0tICAgIG9wLT5kZWZhdWx0c190dXBsZSA9IE5VTEw7Ci0tICAgIG9wLT5kZWZhdWx0c19r d2RpY3QgPSBOVUxMOwotLSAgICBvcC0+ZGVmYXVsdHNfZ2V0dGVyID0gTlVMTDsKLS0gICAgb3At PmZ1bmNfYW5ub3RhdGlvbnMgPSBOVUxMOwotLSAgICByZXR1cm4gKFB5T2JqZWN0ICopIG9wOwot KyAgICByZXR1cm4gX19QeXhfRGVsSXRlbV9HZW5lcmljKG8sIFB5SW50X0Zyb21Tc2l6ZV90KGkp KTsKLSB9Ci0tc3RhdGljIGludAotLV9fUHl4X0N5RnVuY3Rpb25fY2xlYXIoX19weXhfQ3lGdW5j dGlvbk9iamVjdCAqbSkKLSsKLSsvKiBLZXl3b3JkU3RyaW5nQ2hlY2sgKi8KLStzdGF0aWMgaW50 IF9fUHl4X0NoZWNrS2V5d29yZFN0cmluZ3MoCi0rICAgIFB5T2JqZWN0ICprd2RpY3QsCi0rICAg IGNvbnN0IGNoYXIqIGZ1bmN0aW9uX25hbWUsCi0rICAgIGludCBrd19hbGxvd2VkKQotIHsKLS0g ICAgUHlfQ0xFQVIobS0+ZnVuY19jbG9zdXJlKTsKLS0gICAgUHlfQ0xFQVIobS0+ZnVuYy5tX21v ZHVsZSk7Ci0tICAgIFB5X0NMRUFSKG0tPmZ1bmNfZGljdCk7Ci0tICAgIFB5X0NMRUFSKG0tPmZ1 bmNfbmFtZSk7Ci0tICAgIFB5X0NMRUFSKG0tPmZ1bmNfcXVhbG5hbWUpOwotLSAgICBQeV9DTEVB UihtLT5mdW5jX2RvYyk7Ci0tICAgIFB5X0NMRUFSKG0tPmZ1bmNfZ2xvYmFscyk7Ci0tICAgIFB5 X0NMRUFSKG0tPmZ1bmNfY29kZSk7Ci0tICAgIFB5X0NMRUFSKG0tPmZ1bmNfY2xhc3NvYmopOwot LSAgICBQeV9DTEVBUihtLT5kZWZhdWx0c190dXBsZSk7Ci0tICAgIFB5X0NMRUFSKG0tPmRlZmF1 bHRzX2t3ZGljdCk7Ci0tICAgIFB5X0NMRUFSKG0tPmZ1bmNfYW5ub3RhdGlvbnMpOwotLSAgICBp ZiAobS0+ZGVmYXVsdHMpIHsKLS0gICAgICAgIFB5T2JqZWN0ICoqcHlkZWZhdWx0cyA9IF9fUHl4 X0N5RnVuY3Rpb25fRGVmYXVsdHMoUHlPYmplY3QgKiwgbSk7Ci0tICAgICAgICBpbnQgaTsKLS0g ICAgICAgIGZvciAoaSA9IDA7IGkgPCBtLT5kZWZhdWx0c19weW9iamVjdHM7IGkrKykKLS0gICAg ICAgICAgICBQeV9YREVDUkVGKHB5ZGVmYXVsdHNbaV0pOwotLSAgICAgICAgUHlPYmplY3RfRnJl ZShtLT5kZWZhdWx0cyk7Ci0tICAgICAgICBtLT5kZWZhdWx0cyA9IE5VTEw7Ci0rICAgIFB5T2Jq ZWN0KiBrZXkgPSAwOwotKyAgICBQeV9zc2l6ZV90IHBvcyA9IDA7Ci0rI2lmIENZVEhPTl9DT01Q SUxJTkdfSU5fUFlQWQotKyAgICBpZiAoIWt3X2FsbG93ZWQgJiYgUHlEaWN0X05leHQoa3dkaWN0 LCAmcG9zLCAma2V5LCAwKSkKLSsgICAgICAgIGdvdG8gaW52YWxpZF9rZXl3b3JkOwotKyAgICBy ZXR1cm4gMTsKLSsjZWxzZQotKyAgICB3aGlsZSAoUHlEaWN0X05leHQoa3dkaWN0LCAmcG9zLCAm a2V5LCAwKSkgewotKyAgICAgICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0rICAgICAgICBp ZiAodW5saWtlbHkoIVB5U3RyaW5nX0NoZWNrKGtleSkpKQotKyAgICAgICAgI2VuZGlmCi0rICAg ICAgICAgICAgaWYgKHVubGlrZWx5KCFQeVVuaWNvZGVfQ2hlY2soa2V5KSkpCi0rICAgICAgICAg ICAgICAgIGdvdG8gaW52YWxpZF9rZXl3b3JkX3R5cGU7Ci0gICAgIH0KLSsgICAgaWYgKCgha3df YWxsb3dlZCkgJiYgdW5saWtlbHkoa2V5KSkKLSsgICAgICAgIGdvdG8gaW52YWxpZF9rZXl3b3Jk OwotKyAgICByZXR1cm4gMTsKLStpbnZhbGlkX2tleXdvcmRfdHlwZToKLSsgICAgUHlFcnJfRm9y bWF0KFB5RXhjX1R5cGVFcnJvciwKLSsgICAgICAgICIlLjIwMHMoKSBrZXl3b3JkcyBtdXN0IGJl IHN0cmluZ3MiLCBmdW5jdGlvbl9uYW1lKTsKLSsgICAgcmV0dXJuIDA7Ci0rI2VuZGlmCi0raW52 YWxpZF9rZXl3b3JkOgotKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotKyAgICAj aWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLSsgICAgICAgICIlLjIwMHMoKSBnb3QgYW4gdW5leHBl Y3RlZCBrZXl3b3JkIGFyZ3VtZW50ICclLjIwMHMnIiwKLSsgICAgICAgIGZ1bmN0aW9uX25hbWUs IFB5U3RyaW5nX0FzU3RyaW5nKGtleSkpOwotKyAgICAjZWxzZQotKyAgICAgICAgIiVzKCkgZ290 IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudCAnJVUnIiwKLSsgICAgICAgIGZ1bmN0aW9u X25hbWUsIGtleSk7Ci0rICAgICNlbmRpZgotICAgICByZXR1cm4gMDsKLSB9Ci0tc3RhdGljIHZv aWQgX19QeXhfX0N5RnVuY3Rpb25fZGVhbGxvYyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICptKQot LXsKLS0gICAgaWYgKF9fUHl4X0N5RnVuY3Rpb25fd2Vha3JlZmxpc3QobSkgIT0gTlVMTCkKLS0g ICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIG0pOwotLSAgICBfX1B5 eF9DeUZ1bmN0aW9uX2NsZWFyKG0pOwotLSAgICBQeU9iamVjdF9HQ19EZWwobSk7Ci0tfQotLXN0 YXRpYyB2b2lkIF9fUHl4X0N5RnVuY3Rpb25fZGVhbGxvYyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0 ICptKQotLXsKLS0gICAgUHlPYmplY3RfR0NfVW5UcmFjayhtKTsKLS0gICAgX19QeXhfX0N5RnVu Y3Rpb25fZGVhbGxvYyhtKTsKLSsKLSsvKiBOb25lICovCi0rc3RhdGljIENZVEhPTl9JTkxJTkUg dm9pZCBfX1B5eF9SYWlzZUNsb3N1cmVOYW1lRXJyb3IoY29uc3QgY2hhciAqdmFybmFtZSkgewot KyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTmFtZUVycm9yLCAiZnJlZSB2YXJpYWJsZSAnJXMnIHJl ZmVyZW5jZWQgYmVmb3JlIGFzc2lnbm1lbnQgaW4gZW5jbG9zaW5nIHNjb3BlIiwgdmFybmFtZSk7 Ci0gfQotLXN0YXRpYyBpbnQgX19QeXhfQ3lGdW5jdGlvbl90cmF2ZXJzZShfX3B5eF9DeUZ1bmN0 aW9uT2JqZWN0ICptLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKLS17Ci0tICAgIFB5X1ZJ U0lUKG0tPmZ1bmNfY2xvc3VyZSk7Ci0tICAgIFB5X1ZJU0lUKG0tPmZ1bmMubV9tb2R1bGUpOwot LSAgICBQeV9WSVNJVChtLT5mdW5jX2RpY3QpOwotLSAgICBQeV9WSVNJVChtLT5mdW5jX25hbWUp OwotLSAgICBQeV9WSVNJVChtLT5mdW5jX3F1YWxuYW1lKTsKLS0gICAgUHlfVklTSVQobS0+ZnVu Y19kb2MpOwotLSAgICBQeV9WSVNJVChtLT5mdW5jX2dsb2JhbHMpOwotLSAgICBQeV9WSVNJVCht LT5mdW5jX2NvZGUpOwotLSAgICBQeV9WSVNJVChtLT5mdW5jX2NsYXNzb2JqKTsKLS0gICAgUHlf VklTSVQobS0+ZGVmYXVsdHNfdHVwbGUpOwotLSAgICBQeV9WSVNJVChtLT5kZWZhdWx0c19rd2Rp Y3QpOwotLSAgICBpZiAobS0+ZGVmYXVsdHMpIHsKLS0gICAgICAgIFB5T2JqZWN0ICoqcHlkZWZh dWx0cyA9IF9fUHl4X0N5RnVuY3Rpb25fRGVmYXVsdHMoUHlPYmplY3QgKiwgbSk7Ci0tICAgICAg ICBpbnQgaTsKLS0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtLT5kZWZhdWx0c19weW9iamVjdHM7 IGkrKykKLS0gICAgICAgICAgICBQeV9WSVNJVChweWRlZmF1bHRzW2ldKTsKLSsKLSsvKiBSYWlz ZUV4Y2VwdGlvbiAqLwotKyNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotK3N0YXRpYyB2b2lkIF9f UHl4X1JhaXNlKFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0ICp0YiwK LSsgICAgICAgICAgICAgICAgICAgICAgICBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpjYXVzZSkg ewotKyAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKLSsgICAgUHlfWElOQ1JFRih0eXBl KTsKLSsgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA9PSBQeV9Ob25lKQotKyAgICAgICAgdmFsdWUg PSBOVUxMOwotKyAgICBlbHNlCi0rICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwotKyAgICBpZiAo IXRiIHx8IHRiID09IFB5X05vbmUpCi0rICAgICAgICB0YiA9IE5VTEw7Ci0rICAgIGVsc2Ugewot KyAgICAgICAgUHlfSU5DUkVGKHRiKTsKLSsgICAgICAgIGlmICghUHlUcmFjZUJhY2tfQ2hlY2so dGIpKSB7Ci0rICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSsg ICAgICAgICAgICAgICAgInJhaXNlOiBhcmcgMyBtdXN0IGJlIGEgdHJhY2ViYWNrIG9yIE5vbmUi KTsKLSsgICAgICAgICAgICBnb3RvIHJhaXNlX2Vycm9yOwotKyAgICAgICAgfQotICAgICB9Ci0t ICAgIHJldHVybiAwOwotKyAgICBpZiAoUHlUeXBlX0NoZWNrKHR5cGUpKSB7Ci0rI2lmIENZVEhP Tl9DT01QSUxJTkdfSU5fUFlQWQotKyAgICAgICAgaWYgKCF2YWx1ZSkgewotKyAgICAgICAgICAg IFB5X0lOQ1JFRihQeV9Ob25lKTsKLSsgICAgICAgICAgICB2YWx1ZSA9IFB5X05vbmU7Ci0rICAg ICAgICB9Ci0rI2VuZGlmCi0rICAgICAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJnR5cGUs ICZ2YWx1ZSwgJnRiKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICAgIGlmICh2YWx1ZSkgewotKyAg ICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0rICAgICAgICAgICAg ICAgICJpbnN0YW5jZSBleGNlcHRpb24gbWF5IG5vdCBoYXZlIGEgc2VwYXJhdGUgdmFsdWUiKTsK LSsgICAgICAgICAgICBnb3RvIHJhaXNlX2Vycm9yOwotKyAgICAgICAgfQotKyAgICAgICAgdmFs dWUgPSB0eXBlOwotKyAgICAgICAgdHlwZSA9IChQeU9iamVjdCopIFB5X1RZUEUodHlwZSk7Ci0r ICAgICAgICBQeV9JTkNSRUYodHlwZSk7Ci0rICAgICAgICBpZiAoIVB5VHlwZV9Jc1N1YnR5cGUo KFB5VHlwZU9iamVjdCAqKXR5cGUsIChQeVR5cGVPYmplY3QgKilQeUV4Y19CYXNlRXhjZXB0aW9u KSkgewotKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0rICAg ICAgICAgICAgICAgICJyYWlzZTogZXhjZXB0aW9uIGNsYXNzIG11c3QgYmUgYSBzdWJjbGFzcyBv ZiBCYXNlRXhjZXB0aW9uIik7Ci0rICAgICAgICAgICAgZ290byByYWlzZV9lcnJvcjsKLSsgICAg ICAgIH0KLSsgICAgfQotKyAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgotKyAgICBfX1B5 eF9FcnJSZXN0b3JlKHR5cGUsIHZhbHVlLCB0Yik7Ci0rICAgIHJldHVybjsKLStyYWlzZV9lcnJv cjoKLSsgICAgUHlfWERFQ1JFRih2YWx1ZSk7Ci0rICAgIFB5X1hERUNSRUYodHlwZSk7Ci0rICAg IFB5X1hERUNSRUYodGIpOwotKyAgICByZXR1cm47Ci0gfQotLXN0YXRpYyBQeU9iamVjdCAqX19Q eXhfQ3lGdW5jdGlvbl9kZXNjcl9nZXQoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpvYmosIFB5 T2JqZWN0ICp0eXBlKQotLXsKLS0jaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLS0gICAgX19weXhf Q3lGdW5jdGlvbk9iamVjdCAqbSA9IChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICopIGZ1bmM7Ci0t ICAgIGlmIChtLT5mbGFncyAmIF9fUHl4X0NZRlVOQ1RJT05fU1RBVElDTUVUSE9EKSB7Ci0tICAg ICAgICBQeV9JTkNSRUYoZnVuYyk7Ci0tICAgICAgICByZXR1cm4gZnVuYzsKLSsjZWxzZQotK3N0 YXRpYyB2b2lkIF9fUHl4X1JhaXNlKFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdmFsdWUsIFB5 T2JqZWN0ICp0YiwgUHlPYmplY3QgKmNhdXNlKSB7Ci0rICAgIFB5T2JqZWN0KiBvd25lZF9pbnN0 YW5jZSA9IE5VTEw7Ci0rICAgIGlmICh0YiA9PSBQeV9Ob25lKSB7Ci0rICAgICAgICB0YiA9IDA7 Ci0rICAgIH0gZWxzZSBpZiAodGIgJiYgIVB5VHJhY2VCYWNrX0NoZWNrKHRiKSkgewotKyAgICAg ICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSsgICAgICAgICAgICAicmFpc2U6 IGFyZyAzIG11c3QgYmUgYSB0cmFjZWJhY2sgb3IgTm9uZSIpOwotKyAgICAgICAgZ290byBiYWQ7 Ci0gICAgIH0KLS0gICAgaWYgKG0tPmZsYWdzICYgX19QeXhfQ1lGVU5DVElPTl9DTEFTU01FVEhP RCkgewotLSAgICAgICAgaWYgKHR5cGUgPT0gTlVMTCkKLS0gICAgICAgICAgICB0eXBlID0gKFB5 T2JqZWN0ICopKFB5X1RZUEUob2JqKSk7Ci0tICAgICAgICByZXR1cm4gX19QeXhfUHlNZXRob2Rf TmV3KGZ1bmMsIHR5cGUsIChQeU9iamVjdCAqKShQeV9UWVBFKHR5cGUpKSk7Ci0rICAgIGlmICh2 YWx1ZSA9PSBQeV9Ob25lKQotKyAgICAgICAgdmFsdWUgPSAwOwotKyAgICBpZiAoUHlFeGNlcHRp b25JbnN0YW5jZV9DaGVjayh0eXBlKSkgewotKyAgICAgICAgaWYgKHZhbHVlKSB7Ci0rICAgICAg ICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSsgICAgICAgICAgICAgICAg Imluc3RhbmNlIGV4Y2VwdGlvbiBtYXkgbm90IGhhdmUgYSBzZXBhcmF0ZSB2YWx1ZSIpOwotKyAg ICAgICAgICAgIGdvdG8gYmFkOwotKyAgICAgICAgfQotKyAgICAgICAgdmFsdWUgPSB0eXBlOwot KyAgICAgICAgdHlwZSA9IChQeU9iamVjdCopIFB5X1RZUEUodmFsdWUpOwotKyAgICB9IGVsc2Ug aWYgKFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2sodHlwZSkpIHsKLSsgICAgICAgIFB5T2JqZWN0ICpp bnN0YW5jZV9jbGFzcyA9IE5VTEw7Ci0rICAgICAgICBpZiAodmFsdWUgJiYgUHlFeGNlcHRpb25J bnN0YW5jZV9DaGVjayh2YWx1ZSkpIHsKLSsgICAgICAgICAgICBpbnN0YW5jZV9jbGFzcyA9IChQ eU9iamVjdCopIFB5X1RZUEUodmFsdWUpOwotKyAgICAgICAgICAgIGlmIChpbnN0YW5jZV9jbGFz cyAhPSB0eXBlKSB7Ci0rICAgICAgICAgICAgICAgIGludCBpc19zdWJjbGFzcyA9IFB5T2JqZWN0 X0lzU3ViY2xhc3MoaW5zdGFuY2VfY2xhc3MsIHR5cGUpOwotKyAgICAgICAgICAgICAgICBpZiAo IWlzX3N1YmNsYXNzKSB7Ci0rICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZV9jbGFzcyA9IE5V TEw7Ci0rICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodW5saWtlbHkoaXNfc3ViY2xhc3MgPT0g LTEpKSB7Ci0rICAgICAgICAgICAgICAgICAgICBnb3RvIGJhZDsKLSsgICAgICAgICAgICAgICAg fSBlbHNlIHsKLSsgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBpbnN0YW5jZV9jbGFzczsKLSsg ICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsgICAgICAgIGlm ICghaW5zdGFuY2VfY2xhc3MpIHsKLSsgICAgICAgICAgICBQeU9iamVjdCAqYXJnczsKLSsgICAg ICAgICAgICBpZiAoIXZhbHVlKQotKyAgICAgICAgICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXco MCk7Ci0rICAgICAgICAgICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVjayh2YWx1ZSkpIHsKLSsgICAg ICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKLSsgICAgICAgICAgICAgICAgYXJncyA9IHZh bHVlOwotKyAgICAgICAgICAgIH0gZWxzZQotKyAgICAgICAgICAgICAgICBhcmdzID0gUHlUdXBs ZV9QYWNrKDEsIHZhbHVlKTsKLSsgICAgICAgICAgICBpZiAoIWFyZ3MpCi0rICAgICAgICAgICAg ICAgIGdvdG8gYmFkOwotKyAgICAgICAgICAgIG93bmVkX2luc3RhbmNlID0gUHlPYmplY3RfQ2Fs bCh0eXBlLCBhcmdzLCBOVUxMKTsKLSsgICAgICAgICAgICBQeV9ERUNSRUYoYXJncyk7Ci0rICAg ICAgICAgICAgaWYgKCFvd25lZF9pbnN0YW5jZSkKLSsgICAgICAgICAgICAgICAgZ290byBiYWQ7 Ci0rICAgICAgICAgICAgdmFsdWUgPSBvd25lZF9pbnN0YW5jZTsKLSsgICAgICAgICAgICBpZiAo IVB5RXhjZXB0aW9uSW5zdGFuY2VfQ2hlY2sodmFsdWUpKSB7Ci0rICAgICAgICAgICAgICAgIFB5 RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiY2FsbGluZyAlUiBzaG91bGQgaGF2ZSByZXR1cm5lZCBhbiBpbnN0YW5jZSBvZiAiCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFzZUV4Y2VwdGlvbiwgbm90ICVSIiwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIFB5X1RZUEUodmFsdWUpKTsKLSsgICAgICAg ICAgICAgICAgZ290byBiYWQ7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgfQotKyAgICB9IGVs c2UgewotKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSsgICAgICAg ICAgICAicmFpc2U6IGV4Y2VwdGlvbiBjbGFzcyBtdXN0IGJlIGEgc3ViY2xhc3Mgb2YgQmFzZUV4 Y2VwdGlvbiIpOwotKyAgICAgICAgZ290byBiYWQ7Ci0gICAgIH0KLS0gICAgaWYgKG9iaiA9PSBQ eV9Ob25lKQotLSAgICAgICAgb2JqID0gTlVMTDsKLSsgICAgaWYgKGNhdXNlKSB7Ci0rICAgICAg ICBQeU9iamVjdCAqZml4ZWRfY2F1c2U7Ci0rICAgICAgICBpZiAoY2F1c2UgPT0gUHlfTm9uZSkg ewotKyAgICAgICAgICAgIGZpeGVkX2NhdXNlID0gTlVMTDsKLSsgICAgICAgIH0gZWxzZSBpZiAo UHlFeGNlcHRpb25DbGFzc19DaGVjayhjYXVzZSkpIHsKLSsgICAgICAgICAgICBmaXhlZF9jYXVz ZSA9IFB5T2JqZWN0X0NhbGxPYmplY3QoY2F1c2UsIE5VTEwpOwotKyAgICAgICAgICAgIGlmIChm aXhlZF9jYXVzZSA9PSBOVUxMKQotKyAgICAgICAgICAgICAgICBnb3RvIGJhZDsKLSsgICAgICAg IH0gZWxzZSBpZiAoUHlFeGNlcHRpb25JbnN0YW5jZV9DaGVjayhjYXVzZSkpIHsKLSsgICAgICAg ICAgICBmaXhlZF9jYXVzZSA9IGNhdXNlOwotKyAgICAgICAgICAgIFB5X0lOQ1JFRihmaXhlZF9j YXVzZSk7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQ eUV4Y19UeXBlRXJyb3IsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb24g Y2F1c2VzIG11c3QgZGVyaXZlIGZyb20gIgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAi QmFzZUV4Y2VwdGlvbiIpOwotKyAgICAgICAgICAgIGdvdG8gYmFkOwotKyAgICAgICAgfQotKyAg ICAgICAgUHlFeGNlcHRpb25fU2V0Q2F1c2UodmFsdWUsIGZpeGVkX2NhdXNlKTsKLSsgICAgfQot KyAgICBQeUVycl9TZXRPYmplY3QodHlwZSwgdmFsdWUpOwotKyAgICBpZiAodGIpIHsKLSsjaWYg Q1lUSE9OX0NPTVBJTElOR19JTl9QWVBZCi0rICAgICAgICBQeU9iamVjdCAqdG1wX3R5cGUsICp0 bXBfdmFsdWUsICp0bXBfdGI7Ci0rICAgICAgICBQeUVycl9GZXRjaCgmdG1wX3R5cGUsICZ0bXBf dmFsdWUsICZ0bXBfdGIpOwotKyAgICAgICAgUHlfSU5DUkVGKHRiKTsKLSsgICAgICAgIFB5RXJy X1Jlc3RvcmUodG1wX3R5cGUsIHRtcF92YWx1ZSwgdGIpOwotKyAgICAgICAgUHlfWERFQ1JFRih0 bXBfdGIpOwotKyNlbHNlCi0rICAgICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBfX1B5eF9Q eVRocmVhZFN0YXRlX0N1cnJlbnQ7Ci0rICAgICAgICBQeU9iamVjdCogdG1wX3RiID0gdHN0YXRl LT5jdXJleGNfdHJhY2ViYWNrOwotKyAgICAgICAgaWYgKHRiICE9IHRtcF90YikgewotKyAgICAg ICAgICAgIFB5X0lOQ1JFRih0Yik7Ci0rICAgICAgICAgICAgdHN0YXRlLT5jdXJleGNfdHJhY2Vi YWNrID0gdGI7Ci0rICAgICAgICAgICAgUHlfWERFQ1JFRih0bXBfdGIpOwotKyAgICAgICAgfQot ICNlbmRpZgotLSAgICByZXR1cm4gX19QeXhfUHlNZXRob2RfTmV3KGZ1bmMsIG9iaiwgdHlwZSk7 Ci0rICAgIH0KLStiYWQ6Ci0rICAgIFB5X1hERUNSRUYob3duZWRfaW5zdGFuY2UpOwotKyAgICBy ZXR1cm47Ci0rfQotKyNlbmRpZgotKwotKy8qIEZldGNoQ29tbW9uVHlwZSAqLwotK3N0YXRpYyBQ eVR5cGVPYmplY3QqIF9fUHl4X0ZldGNoQ29tbW9uVHlwZShQeVR5cGVPYmplY3QqIHR5cGUpIHsK LSsgICAgUHlPYmplY3QqIGZha2VfbW9kdWxlOwotKyAgICBQeVR5cGVPYmplY3QqIGNhY2hlZF90 eXBlID0gTlVMTDsKLSsgICAgZmFrZV9tb2R1bGUgPSBQeUltcG9ydF9BZGRNb2R1bGUoKGNoYXIq KSAiX2N5dGhvbl8iIENZVEhPTl9BQkkpOwotKyAgICBpZiAoIWZha2VfbW9kdWxlKSByZXR1cm4g TlVMTDsKLSsgICAgUHlfSU5DUkVGKGZha2VfbW9kdWxlKTsKLSsgICAgY2FjaGVkX3R5cGUgPSAo UHlUeXBlT2JqZWN0KikgUHlPYmplY3RfR2V0QXR0clN0cmluZyhmYWtlX21vZHVsZSwgdHlwZS0+ dHBfbmFtZSk7Ci0rICAgIGlmIChjYWNoZWRfdHlwZSkgewotKyAgICAgICAgaWYgKCFQeVR5cGVf Q2hlY2soKFB5T2JqZWN0KiljYWNoZWRfdHlwZSkpIHsKLSsgICAgICAgICAgICBQeUVycl9Gb3Jt YXQoUHlFeGNfVHlwZUVycm9yLAotKyAgICAgICAgICAgICAgICAiU2hhcmVkIEN5dGhvbiB0eXBl ICUuMjAwcyBpcyBub3QgYSB0eXBlIG9iamVjdCIsCi0rICAgICAgICAgICAgICAgIHR5cGUtPnRw X25hbWUpOwotKyAgICAgICAgICAgIGdvdG8gYmFkOwotKyAgICAgICAgfQotKyAgICAgICAgaWYg KGNhY2hlZF90eXBlLT50cF9iYXNpY3NpemUgIT0gdHlwZS0+dHBfYmFzaWNzaXplKSB7Ci0rICAg ICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSsgICAgICAgICAgICAgICAg IlNoYXJlZCBDeXRob24gdHlwZSAlLjIwMHMgaGFzIHRoZSB3cm9uZyBzaXplLCB0cnkgcmVjb21w aWxpbmciLAotKyAgICAgICAgICAgICAgICB0eXBlLT50cF9uYW1lKTsKLSsgICAgICAgICAgICBn b3RvIGJhZDsKLSsgICAgICAgIH0KLSsgICAgfSBlbHNlIHsKLSsgICAgICAgIGlmICghUHlFcnJf RXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIGdvdG8gYmFkOwotKyAgICAg ICAgUHlFcnJfQ2xlYXIoKTsKLSsgICAgICAgIGlmIChQeVR5cGVfUmVhZHkodHlwZSkgPCAwKSBn b3RvIGJhZDsKLSsgICAgICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKGZha2VfbW9kdWxl LCB0eXBlLT50cF9uYW1lLCAoUHlPYmplY3QqKSB0eXBlKSA8IDApCi0rICAgICAgICAgICAgZ290 byBiYWQ7Ci0rICAgICAgICBQeV9JTkNSRUYodHlwZSk7Ci0rICAgICAgICBjYWNoZWRfdHlwZSA9 IHR5cGU7Ci0rICAgIH0KLStkb25lOgotKyAgICBQeV9ERUNSRUYoZmFrZV9tb2R1bGUpOwotKyAg ICByZXR1cm4gY2FjaGVkX3R5cGU7Ci0rYmFkOgotKyAgICBQeV9YREVDUkVGKGNhY2hlZF90eXBl KTsKLSsgICAgY2FjaGVkX3R5cGUgPSBOVUxMOwotKyAgICBnb3RvIGRvbmU7Ci0gfQotLXN0YXRp YyBQeU9iamVjdCoKLS1fX1B5eF9DeUZ1bmN0aW9uX3JlcHIoX19weXhfQ3lGdW5jdGlvbk9iamVj dCAqb3ApCi0rCi0rLyogQ3l0aG9uRnVuY3Rpb25TaGFyZWQgKi8KLSsjaW5jbHVkZSA8c3RydWN0 bWVtYmVyLmg+Ci0rc3RhdGljIFB5T2JqZWN0ICoKLStfX1B5eF9DeUZ1bmN0aW9uX2dldF9kb2Mo X19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIENZVEhPTl9VTlVTRUQgdm9pZCAqY2xvc3VyZSkK LSB7Ci0rICAgIGlmICh1bmxpa2VseShvcC0+ZnVuY19kb2MgPT0gTlVMTCkpIHsKLSsgICAgICAg IGlmIChvcC0+ZnVuYy5tX21sLT5tbF9kb2MpIHsKLSAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAz Ci0tICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPGN5ZnVuY3Rpb24gJVUgYXQgJXA+ IiwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lLCAo dm9pZCAqKW9wKTsKLSsgICAgICAgICAgICBvcC0+ZnVuY19kb2MgPSBQeVVuaWNvZGVfRnJvbVN0 cmluZyhvcC0+ZnVuYy5tX21sLT5tbF9kb2MpOwotICNlbHNlCi0tICAgIHJldHVybiBQeVN0cmlu Z19Gcm9tRm9ybWF0KCI8Y3lmdW5jdGlvbiAlcyBhdCAlcD4iLAotLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQeVN0cmluZ19Bc1N0cmluZyhvcC0+ZnVuY19xdWFsbmFtZSksICh2b2lk ICopb3ApOwotKyAgICAgICAgICAgIG9wLT5mdW5jX2RvYyA9IFB5U3RyaW5nX0Zyb21TdHJpbmco b3AtPmZ1bmMubV9tbC0+bWxfZG9jKTsKLSAjZW5kaWYKLS19Ci0tc3RhdGljIFB5T2JqZWN0ICog X19QeXhfQ3lGdW5jdGlvbl9DYWxsTWV0aG9kKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqc2Vs ZiwgUHlPYmplY3QgKmFyZywgUHlPYmplY3QgKmt3KSB7Ci0tICAgIFB5Q0Z1bmN0aW9uT2JqZWN0 KiBmID0gKFB5Q0Z1bmN0aW9uT2JqZWN0KilmdW5jOwotLSAgICBQeUNGdW5jdGlvbiBtZXRoID0g Zi0+bV9tbC0+bWxfbWV0aDsKLS0gICAgUHlfc3NpemVfdCBzaXplOwotLSAgICBzd2l0Y2ggKGYt Pm1fbWwtPm1sX2ZsYWdzICYgKE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMgfCBNRVRIX05P QVJHUyB8IE1FVEhfTykpIHsKLS0gICAgY2FzZSBNRVRIX1ZBUkFSR1M6Ci0tICAgICAgICBpZiAo bGlrZWx5KGt3ID09IE5VTEwgfHwgUHlEaWN0X1NpemUoa3cpID09IDApKQotLSAgICAgICAgICAg IHJldHVybiAoKm1ldGgpKHNlbGYsIGFyZyk7Ci0tICAgICAgICBicmVhazsKLS0gICAgY2FzZSBN RVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTOgotLSAgICAgICAgcmV0dXJuICgqKFB5Q0Z1bmN0 aW9uV2l0aEtleXdvcmRzKSh2b2lkKiltZXRoKShzZWxmLCBhcmcsIGt3KTsKLS0gICAgY2FzZSBN RVRIX05PQVJHUzoKLS0gICAgICAgIGlmIChsaWtlbHkoa3cgPT0gTlVMTCB8fCBQeURpY3RfU2l6 ZShrdykgPT0gMCkpIHsKLS0gICAgICAgICAgICBzaXplID0gUHlUdXBsZV9HRVRfU0laRShhcmcp OwotLSAgICAgICAgICAgIGlmIChsaWtlbHkoc2l6ZSA9PSAwKSkKLS0gICAgICAgICAgICAgICAg cmV0dXJuICgqbWV0aCkoc2VsZiwgTlVMTCk7Ci0tICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5 RXhjX1R5cGVFcnJvciwKLS0gICAgICAgICAgICAgICAgIiUuMjAwcygpIHRha2VzIG5vIGFyZ3Vt ZW50cyAoJSIgQ1lUSE9OX0ZPUk1BVF9TU0laRV9UICJkIGdpdmVuKSIsCi0tICAgICAgICAgICAg ICAgIGYtPm1fbWwtPm1sX25hbWUsIHNpemUpOwotLSAgICAgICAgICAgIHJldHVybiBOVUxMOwot LSAgICAgICAgfQotLSAgICAgICAgYnJlYWs7Ci0tICAgIGNhc2UgTUVUSF9POgotLSAgICAgICAg aWYgKGxpa2VseShrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKSkgewotLSAgICAg ICAgICAgIHNpemUgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZyk7Ci0tICAgICAgICAgICAgaWYgKGxp a2VseShzaXplID09IDEpKSB7Ci0tICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQsICph cmcwOwotLSAgICAgICAgICAgICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAh Q1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMKLS0gICAgICAgICAgICAgICAgYXJnMCA9IFB5VHVw bGVfR0VUX0lURU0oYXJnLCAwKTsKLS0gICAgICAgICAgICAgICAgI2Vsc2UKLS0gICAgICAgICAg ICAgICAgYXJnMCA9IFB5U2VxdWVuY2VfSVRFTShhcmcsIDApOyBpZiAodW5saWtlbHkoIWFyZzAp KSByZXR1cm4gTlVMTDsKLS0gICAgICAgICAgICAgICAgI2VuZGlmCi0tICAgICAgICAgICAgICAg IHJlc3VsdCA9ICgqbWV0aCkoc2VsZiwgYXJnMCk7Ci0tICAgICAgICAgICAgICAgICNpZiAhKENZ VEhPTl9BU1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTKQot LSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXJnMCk7Ci0tICAgICAgICAgICAgICAgICNlbmRp ZgotLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotLSAgICAgICAgICAgIH0KLS0gICAg ICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotLSAgICAgICAgICAgICAgICAi JS4yMDBzKCkgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQgKCUiIENZVEhPTl9GT1JNQVRfU1NJ WkVfVCAiZCBnaXZlbikiLAotLSAgICAgICAgICAgICAgICBmLT5tX21sLT5tbF9uYW1lLCBzaXpl KTsKLS0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgICAgICAgICBpZiAodW5saWtlbHko b3AtPmZ1bmNfZG9jID09IE5VTEwpKQotKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSsg ICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotKyAgICAg ICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgICAgICAgfQotLSAgICAgICAgYnJlYWs7Ci0tICAg IGRlZmF1bHQ6Ci0tICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJC YWQgY2FsbCBmbGFncyBpbiAiCi0tICAgICAgICAgICAgICAgICAgICAgICAgIl9fUHl4X0N5RnVu Y3Rpb25fQ2FsbC4gTUVUSF9PTERBUkdTIGlzIG5vICIKLS0gICAgICAgICAgICAgICAgICAgICAg ICAibG9uZ2VyIHN1cHBvcnRlZCEiKTsKLS0gICAgICAgIHJldHVybiBOVUxMOwotICAgICB9Ci0t ICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICIlLjIwMHMoKSB0YWtlcyBubyBrZXl3 b3JkIGFyZ3VtZW50cyIsCi0tICAgICAgICAgICAgICAgICBmLT5tX21sLT5tbF9uYW1lKTsKLS0g ICAgcmV0dXJuIE5VTEw7Ci0tfQotLXN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0ICpfX1B5 eF9DeUZ1bmN0aW9uX0NhbGwoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcsIFB5T2JqZWN0 ICprdykgewotLSAgICByZXR1cm4gX19QeXhfQ3lGdW5jdGlvbl9DYWxsTWV0aG9kKGZ1bmMsICgo UHlDRnVuY3Rpb25PYmplY3QqKWZ1bmMpLT5tX3NlbGYsIGFyZywga3cpOwotKyAgICBQeV9JTkNS RUYob3AtPmZ1bmNfZG9jKTsKLSsgICAgcmV0dXJuIG9wLT5mdW5jX2RvYzsKLSB9Ci0tc3RhdGlj IFB5T2JqZWN0ICpfX1B5eF9DeUZ1bmN0aW9uX0NhbGxBc01ldGhvZChQeU9iamVjdCAqZnVuYywg UHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdykgewotLSAgICBQeU9iamVjdCAqcmVzdWx0Owot LSAgICBfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpjeWZ1bmMgPSAoX19weXhfQ3lGdW5jdGlvbk9i amVjdCAqKSBmdW5jOwotLSAgICBpZiAoKGN5ZnVuYy0+ZmxhZ3MgJiBfX1B5eF9DWUZVTkNUSU9O X0NDTEFTUykgJiYgIShjeWZ1bmMtPmZsYWdzICYgX19QeXhfQ1lGVU5DVElPTl9TVEFUSUNNRVRI T0QpKSB7Ci0tICAgICAgICBQeV9zc2l6ZV90IGFyZ2M7Ci0tICAgICAgICBQeU9iamVjdCAqbmV3 X2FyZ3M7Ci0tICAgICAgICBQeU9iamVjdCAqc2VsZjsKLS0gICAgICAgIGFyZ2MgPSBQeVR1cGxl X0dFVF9TSVpFKGFyZ3MpOwotLSAgICAgICAgbmV3X2FyZ3MgPSBQeVR1cGxlX0dldFNsaWNlKGFy Z3MsIDEsIGFyZ2MpOwotLSAgICAgICAgaWYgKHVubGlrZWx5KCFuZXdfYXJncykpCi0tICAgICAg ICAgICAgcmV0dXJuIE5VTEw7Ci0tICAgICAgICBzZWxmID0gUHlUdXBsZV9HZXRJdGVtKGFyZ3Ms IDApOwotLSAgICAgICAgaWYgKHVubGlrZWx5KCFzZWxmKSkgewotLSAgICAgICAgICAgIFB5X0RF Q1JFRihuZXdfYXJncyk7Ci0tICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0tICAgICAgICB9Ci0t ICAgICAgICByZXN1bHQgPSBfX1B5eF9DeUZ1bmN0aW9uX0NhbGxNZXRob2QoZnVuYywgc2VsZiwg bmV3X2FyZ3MsIGt3KTsKLS0gICAgICAgIFB5X0RFQ1JFRihuZXdfYXJncyk7Ci0tICAgIH0gZWxz ZSB7Ci0tICAgICAgICByZXN1bHQgPSBfX1B5eF9DeUZ1bmN0aW9uX0NhbGwoZnVuYywgYXJncywg a3cpOwotK3N0YXRpYyBpbnQKLStfX1B5eF9DeUZ1bmN0aW9uX3NldF9kb2MoX19weXhfQ3lGdW5j dGlvbk9iamVjdCAqb3AsIFB5T2JqZWN0ICp2YWx1ZSwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjb250 ZXh0KQotK3sKLSsgICAgUHlPYmplY3QgKnRtcCA9IG9wLT5mdW5jX2RvYzsKLSsgICAgaWYgKHZh bHVlID09IE5VTEwpIHsKLSsgICAgICAgIHZhbHVlID0gUHlfTm9uZTsKLSAgICAgfQotLSAgICBy ZXR1cm4gcmVzdWx0OwotKyAgICBQeV9JTkNSRUYodmFsdWUpOwotKyAgICBvcC0+ZnVuY19kb2Mg PSB2YWx1ZTsKLSsgICAgUHlfWERFQ1JFRih0bXApOwotKyAgICByZXR1cm4gMDsKLSB9Ci0tc3Rh dGljIFB5VHlwZU9iamVjdCBfX3B5eF9DeUZ1bmN0aW9uVHlwZV90eXBlID0gewotLSAgICBQeVZh ck9iamVjdF9IRUFEX0lOSVQoMCwgMCkKLS0gICAgImN5dGhvbl9mdW5jdGlvbl9vcl9tZXRob2Qi LAotLSAgICBzaXplb2YoX19weXhfQ3lGdW5jdGlvbk9iamVjdCksCi0tICAgIDAsCi0tICAgIChk ZXN0cnVjdG9yKSBfX1B5eF9DeUZ1bmN0aW9uX2RlYWxsb2MsCi0tICAgIDAsCi0tICAgIDAsCi0t ICAgIDAsCi0tI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0tICAgIDAsCi0rc3RhdGljIFB5T2Jq ZWN0ICoKLStfX1B5eF9DeUZ1bmN0aW9uX2dldF9uYW1lKF9fcHl4X0N5RnVuY3Rpb25PYmplY3Qg Km9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCi0rewotKyAgICBpZiAodW5saWtlbHko b3AtPmZ1bmNfbmFtZSA9PSBOVUxMKSkgewotKyNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKLSsg ICAgICAgIG9wLT5mdW5jX25hbWUgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZyhvcC0+ZnVu Yy5tX21sLT5tbF9uYW1lKTsKLSAjZWxzZQotLSAgICAwLAotKyAgICAgICAgb3AtPmZ1bmNfbmFt ZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcob3AtPmZ1bmMubV9tbC0+bWxfbmFtZSk7Ci0g I2VuZGlmCi0tICAgIChyZXByZnVuYykgX19QeXhfQ3lGdW5jdGlvbl9yZXByLAotLSAgICAwLAot LSAgICAwLAotLSAgICAwLAotLSAgICAwLAotLSAgICBfX1B5eF9DeUZ1bmN0aW9uX0NhbGxBc01l dGhvZCwKLS0gICAgMCwKLS0gICAgMCwKLS0gICAgMCwKLS0gICAgMCwKLS0gICAgUHlfVFBGTEFH U19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLAotLSAgICAwLAotLSAgICAodHJhdmVyc2Vw cm9jKSBfX1B5eF9DeUZ1bmN0aW9uX3RyYXZlcnNlLAotLSAgICAoaW5xdWlyeSkgX19QeXhfQ3lG dW5jdGlvbl9jbGVhciwKLS0gICAgMCwKLS0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDUwMEEw Ci0tICAgIG9mZnNldG9mKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QsIGZ1bmNfd2Vha3JlZmxpc3Qp LAotKyAgICAgICAgaWYgKHVubGlrZWx5KG9wLT5mdW5jX25hbWUgPT0gTlVMTCkpCi0rICAgICAg ICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIH0KLSsgICAgUHlfSU5DUkVGKG9wLT5mdW5jX25hbWUp OwotKyAgICByZXR1cm4gb3AtPmZ1bmNfbmFtZTsKLSt9Ci0rc3RhdGljIGludAotK19fUHl4X0N5 RnVuY3Rpb25fc2V0X25hbWUoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIFB5T2JqZWN0ICp2 YWx1ZSwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KQotK3sKLSsgICAgUHlPYmplY3QgKnRt cDsKLSsjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0rICAgIGlmICh1bmxpa2VseSh2YWx1ZSA9 PSBOVUxMIHx8ICFQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSkKLSAjZWxzZQotLSAgICBvZmZzZXRv ZihQeUNGdW5jdGlvbk9iamVjdCwgbV93ZWFrcmVmbGlzdCksCi0tI2VuZGlmCi0tICAgIDAsCi0t ICAgIDAsCi0tICAgIF9fcHl4X0N5RnVuY3Rpb25fbWV0aG9kcywKLS0gICAgX19weXhfQ3lGdW5j dGlvbl9tZW1iZXJzLAotLSAgICBfX3B5eF9DeUZ1bmN0aW9uX2dldHNldHMsCi0tICAgIDAsCi0t ICAgIDAsCi0tICAgIF9fUHl4X0N5RnVuY3Rpb25fZGVzY3JfZ2V0LAotLSAgICAwLAotLSAgICBv ZmZzZXRvZihfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0LCBmdW5jX2RpY3QpLAotLSAgICAwLAotLSAg ICAwLAotLSAgICAwLAotLSAgICAwLAotLSAgICAwLAotLSAgICAwLAotLSAgICAwLAotLSAgICAw LAotLSAgICAwLAotLSAgICAwLAotLSAgICAwLAotLSAgICAwLAotLSNpZiBQWV9WRVJTSU9OX0hF WCA+PSAweDAzMDQwMGExCi0tICAgIDAsCi0tI2VuZGlmCi0tI2lmIFBZX1ZFUlNJT05fSEVYID49 IDB4MDMwODAwYjEKLS0gICAgMCwKLS0jZW5kaWYKLS0jaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgw MzA4MDBiNCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwOTAwMDAKLS0gICAgMCwKLSsgICAgaWYg KHVubGlrZWx5KHZhbHVlID09IE5VTEwgfHwgIVB5U3RyaW5nX0NoZWNrKHZhbHVlKSkpCi0gI2Vu ZGlmCi0tfTsKLS1zdGF0aWMgaW50IF9fcHl4X0N5RnVuY3Rpb25faW5pdCh2b2lkKSB7Ci0tICAg IF9fcHl4X0N5RnVuY3Rpb25UeXBlID0gX19QeXhfRmV0Y2hDb21tb25UeXBlKCZfX3B5eF9DeUZ1 bmN0aW9uVHlwZV90eXBlKTsKLS0gICAgaWYgKHVubGlrZWx5KF9fcHl4X0N5RnVuY3Rpb25UeXBl ID09IE5VTEwpKSB7Ci0rICAgIHsKLSsgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBl RXJyb3IsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIl9fbmFtZV9fIG11c3QgYmUgc2V0IHRv IGEgc3RyaW5nIG9iamVjdCIpOwotICAgICAgICAgcmV0dXJuIC0xOwotICAgICB9Ci0rICAgIHRt cCA9IG9wLT5mdW5jX25hbWU7Ci0rICAgIFB5X0lOQ1JFRih2YWx1ZSk7Ci0rICAgIG9wLT5mdW5j X25hbWUgPSB2YWx1ZTsKLSsgICAgUHlfWERFQ1JFRih0bXApOwotICAgICByZXR1cm4gMDsKLSB9 Ci0tc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCAqX19QeXhfQ3lGdW5jdGlvbl9Jbml0RGVmYXVs dHMoUHlPYmplY3QgKmZ1bmMsIHNpemVfdCBzaXplLCBpbnQgcHlvYmplY3RzKSB7Ci0tICAgIF9f cHl4X0N5RnVuY3Rpb25PYmplY3QgKm0gPSAoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqKSBmdW5j OwotLSAgICBtLT5kZWZhdWx0cyA9IFB5T2JqZWN0X01hbGxvYyhzaXplKTsKLS0gICAgaWYgKHVu bGlrZWx5KCFtLT5kZWZhdWx0cykpCi0tICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsK LS0gICAgbWVtc2V0KG0tPmRlZmF1bHRzLCAwLCBzaXplKTsKLS0gICAgbS0+ZGVmYXVsdHNfcHlv YmplY3RzID0gcHlvYmplY3RzOwotLSAgICBtLT5kZWZhdWx0c19zaXplID0gc2l6ZTsKLS0gICAg cmV0dXJuIG0tPmRlZmF1bHRzOwotLX0KLS1zdGF0aWMgQ1lUSE9OX0lOTElORSB2b2lkIF9fUHl4 X0N5RnVuY3Rpb25fU2V0RGVmYXVsdHNUdXBsZShQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKnR1 cGxlKSB7Ci0tICAgIF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm0gPSAoX19weXhfQ3lGdW5jdGlv bk9iamVjdCAqKSBmdW5jOwotLSAgICBtLT5kZWZhdWx0c190dXBsZSA9IHR1cGxlOwotLSAgICBQ eV9JTkNSRUYodHVwbGUpOwotK3N0YXRpYyBQeU9iamVjdCAqCi0rX19QeXhfQ3lGdW5jdGlvbl9n ZXRfcXVhbG5hbWUoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIENZVEhPTl9VTlVTRUQgdm9p ZCAqY29udGV4dCkKLSt7Ci0rICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19xdWFsbmFtZSk7Ci0rICAg IHJldHVybiBvcC0+ZnVuY19xdWFsbmFtZTsKLSB9Ci0tc3RhdGljIENZVEhPTl9JTkxJTkUgdm9p ZCBfX1B5eF9DeUZ1bmN0aW9uX1NldERlZmF1bHRzS3dEaWN0KFB5T2JqZWN0ICpmdW5jLCBQeU9i amVjdCAqZGljdCkgewotLSAgICBfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICptID0gKF9fcHl4X0N5 RnVuY3Rpb25PYmplY3QgKikgZnVuYzsKLS0gICAgbS0+ZGVmYXVsdHNfa3dkaWN0ID0gZGljdDsK LS0gICAgUHlfSU5DUkVGKGRpY3QpOwotK3N0YXRpYyBpbnQKLStfX1B5eF9DeUZ1bmN0aW9uX3Nl dF9xdWFsbmFtZShfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgUHlPYmplY3QgKnZhbHVlLCBD WVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCi0rewotKyAgICBQeU9iamVjdCAqdG1wOwotKyNp ZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKLSsgICAgaWYgKHVubGlrZWx5KHZhbHVlID09IE5VTEwg fHwgIVB5VW5pY29kZV9DaGVjayh2YWx1ZSkpKQotKyNlbHNlCi0rICAgIGlmICh1bmxpa2VseSh2 YWx1ZSA9PSBOVUxMIHx8ICFQeVN0cmluZ19DaGVjayh2YWx1ZSkpKQotKyNlbmRpZgotKyAgICB7 Ci0rICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICJfX3F1YWxuYW1lX18gbXVzdCBiZSBzZXQgdG8gYSBzdHJpbmcgb2JqZWN0 Iik7Ci0rICAgICAgICByZXR1cm4gLTE7Ci0rICAgIH0KLSsgICAgdG1wID0gb3AtPmZ1bmNfcXVh bG5hbWU7Ci0rICAgIFB5X0lOQ1JFRih2YWx1ZSk7Ci0rICAgIG9wLT5mdW5jX3F1YWxuYW1lID0g dmFsdWU7Ci0rICAgIFB5X1hERUNSRUYodG1wKTsKLSsgICAgcmV0dXJuIDA7Ci0gfQotLXN0YXRp YyBDWVRIT05fSU5MSU5FIHZvaWQgX19QeXhfQ3lGdW5jdGlvbl9TZXRBbm5vdGF0aW9uc0RpY3Qo UHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpkaWN0KSB7Ci0tICAgIF9fcHl4X0N5RnVuY3Rpb25P YmplY3QgKm0gPSAoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqKSBmdW5jOwotLSAgICBtLT5mdW5j X2Fubm90YXRpb25zID0gZGljdDsKLS0gICAgUHlfSU5DUkVGKGRpY3QpOwotK3N0YXRpYyBQeU9i amVjdCAqCi0rX19QeXhfQ3lGdW5jdGlvbl9nZXRfc2VsZihfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0 ICptLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNsb3N1cmUpCi0rewotKyAgICBQeU9iamVjdCAqc2Vs ZjsKLSsgICAgc2VsZiA9IG0tPmZ1bmNfY2xvc3VyZTsKLSsgICAgaWYgKHNlbGYgPT0gTlVMTCkK LSsgICAgICAgIHNlbGYgPSBQeV9Ob25lOwotKyAgICBQeV9JTkNSRUYoc2VsZik7Ci0rICAgIHJl dHVybiBzZWxmOwotIH0KLS0KLS0vKiBDeXRob25GdW5jdGlvbiAqLwotLXN0YXRpYyBQeU9iamVj dCAqX19QeXhfQ3lGdW5jdGlvbl9OZXcoUHlNZXRob2REZWYgKm1sLCBpbnQgZmxhZ3MsIFB5T2Jq ZWN0KiBxdWFsbmFtZSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5 T2JqZWN0ICpjbG9zdXJlLCBQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCogZ2xvYmFscywgUHlP YmplY3QqIGNvZGUpIHsKLS0gICAgUHlPYmplY3QgKm9wID0gX19QeXhfQ3lGdW5jdGlvbl9Jbml0 KAotLSAgICAgICAgUHlPYmplY3RfR0NfTmV3KF9fcHl4X0N5RnVuY3Rpb25PYmplY3QsIF9fcHl4 X0N5RnVuY3Rpb25UeXBlKSwKLS0gICAgICAgIG1sLCBmbGFncywgcXVhbG5hbWUsIGNsb3N1cmUs IG1vZHVsZSwgZ2xvYmFscywgY29kZQotLSAgICApOwotLSAgICBpZiAobGlrZWx5KG9wKSkgewot LSAgICAgICAgUHlPYmplY3RfR0NfVHJhY2sob3ApOwotK3N0YXRpYyBQeU9iamVjdCAqCi0rX19Q eXhfQ3lGdW5jdGlvbl9nZXRfZGljdChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgQ1lUSE9O X1VOVVNFRCB2b2lkICpjb250ZXh0KQotK3sKLSsgICAgaWYgKHVubGlrZWx5KG9wLT5mdW5jX2Rp Y3QgPT0gTlVMTCkpIHsKLSsgICAgICAgIG9wLT5mdW5jX2RpY3QgPSBQeURpY3RfTmV3KCk7Ci0r ICAgICAgICBpZiAodW5saWtlbHkob3AtPmZ1bmNfZGljdCA9PSBOVUxMKSkKLSsgICAgICAgICAg ICByZXR1cm4gTlVMTDsKLSAgICAgfQotLSAgICByZXR1cm4gb3A7Ci0rICAgIFB5X0lOQ1JFRihv cC0+ZnVuY19kaWN0KTsKLSsgICAgcmV0dXJuIG9wLT5mdW5jX2RpY3Q7Ci0gfQotLQotLS8qIFJh aXNlQXJnVHVwbGVJbnZhbGlkICovCi0tc3RhdGljIHZvaWQgX19QeXhfUmFpc2VBcmd0dXBsZUlu dmFsaWQoCi0tICAgIGNvbnN0IGNoYXIqIGZ1bmNfbmFtZSwKLS0gICAgaW50IGV4YWN0LAotLSAg ICBQeV9zc2l6ZV90IG51bV9taW4sCi0tICAgIFB5X3NzaXplX3QgbnVtX21heCwKLS0gICAgUHlf c3NpemVfdCBudW1fZm91bmQpCi0rc3RhdGljIGludAotK19fUHl4X0N5RnVuY3Rpb25fc2V0X2Rp Y3QoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIFB5T2JqZWN0ICp2YWx1ZSwgQ1lUSE9OX1VO VVNFRCB2b2lkICpjb250ZXh0KQotIHsKLS0gICAgUHlfc3NpemVfdCBudW1fZXhwZWN0ZWQ7Ci0t ICAgIGNvbnN0IGNoYXIgKm1vcmVfb3JfbGVzczsKLS0gICAgaWYgKG51bV9mb3VuZCA8IG51bV9t aW4pIHsKLS0gICAgICAgIG51bV9leHBlY3RlZCA9IG51bV9taW47Ci0tICAgICAgICBtb3JlX29y X2xlc3MgPSAiYXQgbGVhc3QiOwotLSAgICB9IGVsc2UgewotLSAgICAgICAgbnVtX2V4cGVjdGVk ID0gbnVtX21heDsKLS0gICAgICAgIG1vcmVfb3JfbGVzcyA9ICJhdCBtb3N0IjsKLSsgICAgUHlP YmplY3QgKnRtcDsKLSsgICAgaWYgKHVubGlrZWx5KHZhbHVlID09IE5VTEwpKSB7Ci0rICAgICAg ICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotKyAgICAgICAgICAgICAgICJmdW5j dGlvbidzIGRpY3Rpb25hcnkgbWF5IG5vdCBiZSBkZWxldGVkIik7Ci0rICAgICAgICByZXR1cm4g LTE7Ci0gICAgIH0KLS0gICAgaWYgKGV4YWN0KSB7Ci0tICAgICAgICBtb3JlX29yX2xlc3MgPSAi ZXhhY3RseSI7Ci0rICAgIGlmICh1bmxpa2VseSghUHlEaWN0X0NoZWNrKHZhbHVlKSkpIHsKLSsg ICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0rICAgICAgICAgICAgICAg InNldHRpbmcgZnVuY3Rpb24ncyBkaWN0aW9uYXJ5IHRvIGEgbm9uLWRpY3QiKTsKLSsgICAgICAg IHJldHVybiAtMTsKLSAgICAgfQotLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAot LSAgICAgICAgICAgICAgICAgIiUuMjAwcygpIHRha2VzICUuOHMgJSIgQ1lUSE9OX0ZPUk1BVF9T U0laRV9UICJkIHBvc2l0aW9uYWwgYXJndW1lbnQlLjFzICglIiBDWVRIT05fRk9STUFUX1NTSVpF X1QgImQgZ2l2ZW4pIiwKLS0gICAgICAgICAgICAgICAgIGZ1bmNfbmFtZSwgbW9yZV9vcl9sZXNz LCBudW1fZXhwZWN0ZWQsCi0tICAgICAgICAgICAgICAgICAobnVtX2V4cGVjdGVkID09IDEpID8g IiIgOiAicyIsIG51bV9mb3VuZCk7Ci0rICAgIHRtcCA9IG9wLT5mdW5jX2RpY3Q7Ci0rICAgIFB5 X0lOQ1JFRih2YWx1ZSk7Ci0rICAgIG9wLT5mdW5jX2RpY3QgPSB2YWx1ZTsKLSsgICAgUHlfWERF Q1JFRih0bXApOwotKyAgICByZXR1cm4gMDsKLSB9Ci0tCi0tLyogUmFpc2VEb3VibGVLZXl3b3Jk cyAqLwotLXN0YXRpYyB2b2lkIF9fUHl4X1JhaXNlRG91YmxlS2V5d29yZHNFcnJvcigKLS0gICAg Y29uc3QgY2hhciogZnVuY19uYW1lLAotLSAgICBQeU9iamVjdCoga3dfbmFtZSkKLStzdGF0aWMg UHlPYmplY3QgKgotK19fUHl4X0N5RnVuY3Rpb25fZ2V0X2dsb2JhbHMoX19weXhfQ3lGdW5jdGlv bk9iamVjdCAqb3AsIENZVEhPTl9VTlVTRUQgdm9pZCAqY29udGV4dCkKLSB7Ci0tICAgIFB5RXJy X0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0tICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+ PSAzCi0tICAgICAgICAiJXMoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFyZ3Vt ZW50ICclVSciLCBmdW5jX25hbWUsIGt3X25hbWUpOwotLSAgICAgICAgI2Vsc2UKLS0gICAgICAg ICIlcygpIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgJyVzJyIsIGZ1 bmNfbmFtZSwKLS0gICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nKGt3X25hbWUpKTsKLS0gICAgICAg ICNlbmRpZgotKyAgICBQeV9JTkNSRUYob3AtPmZ1bmNfZ2xvYmFscyk7Ci0rICAgIHJldHVybiBv cC0+ZnVuY19nbG9iYWxzOwotIH0KLS0KLS0vKiBQYXJzZUtleXdvcmRzICovCi0tc3RhdGljIGlu dCBfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoCi0tICAgIFB5T2JqZWN0ICprd2RzLAotLSAg ICBQeU9iamVjdCAqKmFyZ25hbWVzW10sCi0tICAgIFB5T2JqZWN0ICprd2RzMiwKLS0gICAgUHlP YmplY3QgKnZhbHVlc1tdLAotLSAgICBQeV9zc2l6ZV90IG51bV9wb3NfYXJncywKLS0gICAgY29u c3QgY2hhciogZnVuY3Rpb25fbmFtZSkKLStzdGF0aWMgUHlPYmplY3QgKgotK19fUHl4X0N5RnVu Y3Rpb25fZ2V0X2Nsb3N1cmUoQ1lUSE9OX1VOVVNFRCBfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpv cCwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KQotIHsKLS0gICAgUHlPYmplY3QgKmtleSA9 IDAsICp2YWx1ZSA9IDA7Ci0tICAgIFB5X3NzaXplX3QgcG9zID0gMDsKLS0gICAgUHlPYmplY3Qq KiogbmFtZTsKLS0gICAgUHlPYmplY3QqKiogZmlyc3Rfa3dfYXJnID0gYXJnbmFtZXMgKyBudW1f cG9zX2FyZ3M7Ci0tICAgIHdoaWxlIChQeURpY3RfTmV4dChrd2RzLCAmcG9zLCAma2V5LCAmdmFs dWUpKSB7Ci0tICAgICAgICBuYW1lID0gZmlyc3Rfa3dfYXJnOwotLSAgICAgICAgd2hpbGUgKCpu YW1lICYmICgqKm5hbWUgIT0ga2V5KSkgbmFtZSsrOwotLSAgICAgICAgaWYgKCpuYW1lKSB7Ci0t ICAgICAgICAgICAgdmFsdWVzW25hbWUtYXJnbmFtZXNdID0gdmFsdWU7Ci0tICAgICAgICAgICAg Y29udGludWU7Ci0tICAgICAgICB9Ci0tICAgICAgICBuYW1lID0gZmlyc3Rfa3dfYXJnOwotLSAg ICAgICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0tICAgICAgICBpZiAobGlrZWx5KFB5U3Ry aW5nX0NoZWNrKGtleSkpKSB7Ci0tICAgICAgICAgICAgd2hpbGUgKCpuYW1lKSB7Ci0tICAgICAg ICAgICAgICAgIGlmICgoQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZIHx8IFB5U3RyaW5nX0dFVF9T SVpFKCoqbmFtZSkgPT0gUHlTdHJpbmdfR0VUX1NJWkUoa2V5KSkKLS0gICAgICAgICAgICAgICAg ICAgICAgICAmJiBfUHlTdHJpbmdfRXEoKipuYW1lLCBrZXkpKSB7Ci0tICAgICAgICAgICAgICAg ICAgICB2YWx1ZXNbbmFtZS1hcmduYW1lc10gPSB2YWx1ZTsKLS0gICAgICAgICAgICAgICAgICAg IGJyZWFrOwotLSAgICAgICAgICAgICAgICB9Ci0tICAgICAgICAgICAgICAgIG5hbWUrKzsKLS0g ICAgICAgICAgICB9Ci0tICAgICAgICAgICAgaWYgKCpuYW1lKSBjb250aW51ZTsKLS0gICAgICAg ICAgICBlbHNlIHsKLS0gICAgICAgICAgICAgICAgUHlPYmplY3QqKiogYXJnbmFtZSA9IGFyZ25h bWVzOwotLSAgICAgICAgICAgICAgICB3aGlsZSAoYXJnbmFtZSAhPSBmaXJzdF9rd19hcmcpIHsK LS0gICAgICAgICAgICAgICAgICAgIGlmICgoKiphcmduYW1lID09IGtleSkgfHwgKAotLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZIHx8IFB5U3Ry aW5nX0dFVF9TSVpFKCoqYXJnbmFtZSkgPT0gUHlTdHJpbmdfR0VUX1NJWkUoa2V5KSkKLS0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9QeVN0cmluZ19FcSgqKmFyZ25hbWUsIGtleSkp KSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgZ290byBhcmdfcGFzc2VkX3R3aWNlOwotLSAg ICAgICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICAgICAgYXJnbmFtZSsrOwotLSAg ICAgICAgICAgICAgICB9Ci0tICAgICAgICAgICAgfQotLSAgICAgICAgfSBlbHNlCi0tICAgICAg ICAjZW5kaWYKLS0gICAgICAgIGlmIChsaWtlbHkoUHlVbmljb2RlX0NoZWNrKGtleSkpKSB7Ci0t ICAgICAgICAgICAgd2hpbGUgKCpuYW1lKSB7Ci0tICAgICAgICAgICAgICAgIGludCBjbXAgPSAo KipuYW1lID09IGtleSkgPyAwIDoKLS0gICAgICAgICAgICAgICAgI2lmICFDWVRIT05fQ09NUElM SU5HX0lOX1BZUFkgJiYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0tICAgICAgICAgICAgICAgICAg ICAoX19QeXhfUHlVbmljb2RlX0dFVF9MRU5HVEgoKipuYW1lKSAhPSBfX1B5eF9QeVVuaWNvZGVf R0VUX0xFTkdUSChrZXkpKSA/IDEgOgotLSAgICAgICAgICAgICAgICAjZW5kaWYKLS0gICAgICAg ICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlKCoqbmFtZSwga2V5KTsKLS0gICAgICAgICAg ICAgICAgaWYgKGNtcCA8IDAgJiYgdW5saWtlbHkoUHlFcnJfT2NjdXJyZWQoKSkpIGdvdG8gYmFk OwotLSAgICAgICAgICAgICAgICBpZiAoY21wID09IDApIHsKLS0gICAgICAgICAgICAgICAgICAg IHZhbHVlc1tuYW1lLWFyZ25hbWVzXSA9IHZhbHVlOwotLSAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0tICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAgICAgbmFtZSsrOwotLSAgICAg ICAgICAgIH0KLS0gICAgICAgICAgICBpZiAoKm5hbWUpIGNvbnRpbnVlOwotLSAgICAgICAgICAg IGVsc2UgewotLSAgICAgICAgICAgICAgICBQeU9iamVjdCoqKiBhcmduYW1lID0gYXJnbmFtZXM7 Ci0tICAgICAgICAgICAgICAgIHdoaWxlIChhcmduYW1lICE9IGZpcnN0X2t3X2FyZykgewotLSAg ICAgICAgICAgICAgICAgICAgaW50IGNtcCA9ICgqKmFyZ25hbWUgPT0ga2V5KSA/IDAgOgotLSAg ICAgICAgICAgICAgICAgICAgI2lmICFDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgJiYgUFlfTUFK T1JfVkVSU0lPTiA+PSAzCi0tICAgICAgICAgICAgICAgICAgICAgICAgKF9fUHl4X1B5VW5pY29k ZV9HRVRfTEVOR1RIKCoqYXJnbmFtZSkgIT0gX19QeXhfUHlVbmljb2RlX0dFVF9MRU5HVEgoa2V5 KSkgPyAxIDoKLS0gICAgICAgICAgICAgICAgICAgICNlbmRpZgotLSAgICAgICAgICAgICAgICAg ICAgICAgIFB5VW5pY29kZV9Db21wYXJlKCoqYXJnbmFtZSwga2V5KTsKLS0gICAgICAgICAgICAg ICAgICAgIGlmIChjbXAgPCAwICYmIHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBnb3RvIGJh ZDsKLS0gICAgICAgICAgICAgICAgICAgIGlmIChjbXAgPT0gMCkgZ290byBhcmdfcGFzc2VkX3R3 aWNlOwotLSAgICAgICAgICAgICAgICAgICAgYXJnbmFtZSsrOwotLSAgICAgICAgICAgICAgICB9 Ci0tICAgICAgICAgICAgfQotLSAgICAgICAgfSBlbHNlCi0tICAgICAgICAgICAgZ290byBpbnZh bGlkX2tleXdvcmRfdHlwZTsKLS0gICAgICAgIGlmIChrd2RzMikgewotLSAgICAgICAgICAgIGlm ICh1bmxpa2VseShQeURpY3RfU2V0SXRlbShrd2RzMiwga2V5LCB2YWx1ZSkpKSBnb3RvIGJhZDsK LS0gICAgICAgIH0gZWxzZSB7Ci0tICAgICAgICAgICAgZ290byBpbnZhbGlkX2tleXdvcmQ7Ci0t ICAgICAgICB9Ci0tICAgIH0KLS0gICAgcmV0dXJuIDA7Ci0tYXJnX3Bhc3NlZF90d2ljZToKLS0g ICAgX19QeXhfUmFpc2VEb3VibGVLZXl3b3Jkc0Vycm9yKGZ1bmN0aW9uX25hbWUsIGtleSk7Ci0t ICAgIGdvdG8gYmFkOwotLWludmFsaWRfa2V5d29yZF90eXBlOgotLSAgICBQeUVycl9Gb3JtYXQo UHlFeGNfVHlwZUVycm9yLAotLSAgICAgICAgIiUuMjAwcygpIGtleXdvcmRzIG11c3QgYmUgc3Ry aW5ncyIsIGZ1bmN0aW9uX25hbWUpOwotLSAgICBnb3RvIGJhZDsKLS1pbnZhbGlkX2tleXdvcmQ6 Ci0tICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0tICAgICNpZiBQWV9NQUpPUl9W RVJTSU9OIDwgMwotLSAgICAgICAgIiUuMjAwcygpIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQg YXJndW1lbnQgJyUuMjAwcyciLAotLSAgICAgICAgZnVuY3Rpb25fbmFtZSwgUHlTdHJpbmdfQXNT dHJpbmcoa2V5KSk7Ci0rICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSsgICAgcmV0dXJuIFB5X05v bmU7Ci0rfQotK3N0YXRpYyBQeU9iamVjdCAqCi0rX19QeXhfQ3lGdW5jdGlvbl9nZXRfY29kZShf X3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KQot K3sKLSsgICAgUHlPYmplY3QqIHJlc3VsdCA9IChvcC0+ZnVuY19jb2RlKSA/IG9wLT5mdW5jX2Nv ZGUgOiBQeV9Ob25lOwotKyAgICBQeV9JTkNSRUYocmVzdWx0KTsKLSsgICAgcmV0dXJuIHJlc3Vs dDsKLSt9Ci0rc3RhdGljIGludAotK19fUHl4X0N5RnVuY3Rpb25faW5pdF9kZWZhdWx0cyhfX3B5 eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCkgewotKyAgICBpbnQgcmVzdWx0ID0gMDsKLSsgICAgUHlP YmplY3QgKnJlcyA9IG9wLT5kZWZhdWx0c19nZXR0ZXIoKFB5T2JqZWN0ICopIG9wKTsKLSsgICAg aWYgKHVubGlrZWx5KCFyZXMpKQotKyAgICAgICAgcmV0dXJuIC0xOwotKyAgICAjaWYgQ1lUSE9O X0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMKLSsgICAg b3AtPmRlZmF1bHRzX3R1cGxlID0gUHlUdXBsZV9HRVRfSVRFTShyZXMsIDApOwotKyAgICBQeV9J TkNSRUYob3AtPmRlZmF1bHRzX3R1cGxlKTsKLSsgICAgb3AtPmRlZmF1bHRzX2t3ZGljdCA9IFB5 VHVwbGVfR0VUX0lURU0ocmVzLCAxKTsKLSsgICAgUHlfSU5DUkVGKG9wLT5kZWZhdWx0c19rd2Rp Y3QpOwotICAgICAjZWxzZQotLSAgICAgICAgIiVzKCkgZ290IGFuIHVuZXhwZWN0ZWQga2V5d29y ZCBhcmd1bWVudCAnJVUnIiwKLS0gICAgICAgIGZ1bmN0aW9uX25hbWUsIGtleSk7Ci0rICAgIG9w LT5kZWZhdWx0c190dXBsZSA9IFB5U2VxdWVuY2VfSVRFTShyZXMsIDApOwotKyAgICBpZiAodW5s aWtlbHkoIW9wLT5kZWZhdWx0c190dXBsZSkpIHJlc3VsdCA9IC0xOwotKyAgICBlbHNlIHsKLSsg ICAgICAgIG9wLT5kZWZhdWx0c19rd2RpY3QgPSBQeVNlcXVlbmNlX0lURU0ocmVzLCAxKTsKLSsg ICAgICAgIGlmICh1bmxpa2VseSghb3AtPmRlZmF1bHRzX2t3ZGljdCkpIHJlc3VsdCA9IC0xOwot KyAgICB9Ci0gICAgICNlbmRpZgotLWJhZDoKLS0gICAgcmV0dXJuIC0xOwotKyAgICBQeV9ERUNS RUYocmVzKTsKLSsgICAgcmV0dXJuIHJlc3VsdDsKLSB9Ci0tCi0tLyogUHlPYmplY3RTZXRBdHRy U3RyICovCi0tI2lmIENZVEhPTl9VU0VfVFlQRV9TTE9UUwotLXN0YXRpYyBDWVRIT05fSU5MSU5F IGludCBfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0KiBh dHRyX25hbWUsIFB5T2JqZWN0KiB2YWx1ZSkgewotLSAgICBQeVR5cGVPYmplY3QqIHRwID0gUHlf VFlQRShvYmopOwotLSAgICBpZiAobGlrZWx5KHRwLT50cF9zZXRhdHRybykpCi0tICAgICAgICBy ZXR1cm4gdHAtPnRwX3NldGF0dHJvKG9iaiwgYXR0cl9uYW1lLCB2YWx1ZSk7Ci0tI2lmIFBZX01B Sk9SX1ZFUlNJT04gPCAzCi0tICAgIGlmIChsaWtlbHkodHAtPnRwX3NldGF0dHIpKQotLSAgICAg ICAgcmV0dXJuIHRwLT50cF9zZXRhdHRyKG9iaiwgUHlTdHJpbmdfQVNfU1RSSU5HKGF0dHJfbmFt ZSksIHZhbHVlKTsKLS0jZW5kaWYKLS0gICAgcmV0dXJuIFB5T2JqZWN0X1NldEF0dHIob2JqLCBh dHRyX25hbWUsIHZhbHVlKTsKLStzdGF0aWMgaW50Ci0rX19QeXhfQ3lGdW5jdGlvbl9zZXRfZGVm YXVsdHMoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIFB5T2JqZWN0KiB2YWx1ZSwgQ1lUSE9O X1VOVVNFRCB2b2lkICpjb250ZXh0KSB7Ci0rICAgIFB5T2JqZWN0KiB0bXA7Ci0rICAgIGlmICgh dmFsdWUpIHsKLSsgICAgICAgIHZhbHVlID0gUHlfTm9uZTsKLSsgICAgfSBlbHNlIGlmICh2YWx1 ZSAhPSBQeV9Ob25lICYmICFQeVR1cGxlX0NoZWNrKHZhbHVlKSkgewotKyAgICAgICAgUHlFcnJf U2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAiX19k ZWZhdWx0c19fIG11c3QgYmUgc2V0IHRvIGEgdHVwbGUgb2JqZWN0Iik7Ci0rICAgICAgICByZXR1 cm4gLTE7Ci0rICAgIH0KLSsgICAgUHlfSU5DUkVGKHZhbHVlKTsKLSsgICAgdG1wID0gb3AtPmRl ZmF1bHRzX3R1cGxlOwotKyAgICBvcC0+ZGVmYXVsdHNfdHVwbGUgPSB2YWx1ZTsKLSsgICAgUHlf WERFQ1JFRih0bXApOwotKyAgICByZXR1cm4gMDsKLSB9Ci0tI2VuZGlmCi0tCi0tLyogUHlJbnRC aW5vcCAqLwotLSNpZiAhQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZCi0tc3RhdGljIFB5T2JqZWN0 KiBfX1B5eF9QeUludF9BZGRPYmpDKFB5T2JqZWN0ICpvcDEsIFB5T2JqZWN0ICpvcDIsIENZVEhP Tl9VTlVTRUQgbG9uZyBpbnR2YWwsIGludCBpbnBsYWNlLCBpbnQgemVyb2RpdmlzaW9uX2NoZWNr KSB7Ci0tICAgICh2b2lkKWlucGxhY2U7Ci0tICAgICh2b2lkKXplcm9kaXZpc2lvbl9jaGVjazsK LS0gICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0tICAgIGlmIChsaWtlbHkoUHlJbnRfQ2hl Y2tFeGFjdChvcDEpKSkgewotLSAgICAgICAgY29uc3QgbG9uZyBiID0gaW50dmFsOwotLSAgICAg ICAgbG9uZyB4OwotLSAgICAgICAgbG9uZyBhID0gUHlJbnRfQVNfTE9ORyhvcDEpOwotLSAgICAg ICAgICAgIHggPSAobG9uZykoKHVuc2lnbmVkIGxvbmcpYSArIGIpOwotLSAgICAgICAgICAgIGlm IChsaWtlbHkoKHheYSkgPj0gMCB8fCAoeF5iKSA+PSAwKSkKLS0gICAgICAgICAgICAgICAgcmV0 dXJuIFB5SW50X0Zyb21Mb25nKHgpOwotLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfVHlwZS50 cF9hc19udW1iZXItPm5iX2FkZChvcDEsIG9wMik7Ci0rc3RhdGljIFB5T2JqZWN0ICoKLStfX1B5 eF9DeUZ1bmN0aW9uX2dldF9kZWZhdWx0cyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgQ1lU SE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KSB7Ci0rICAgIFB5T2JqZWN0KiByZXN1bHQgPSBvcC0+ ZGVmYXVsdHNfdHVwbGU7Ci0rICAgIGlmICh1bmxpa2VseSghcmVzdWx0KSkgewotKyAgICAgICAg aWYgKG9wLT5kZWZhdWx0c19nZXR0ZXIpIHsKLSsgICAgICAgICAgICBpZiAoX19QeXhfQ3lGdW5j dGlvbl9pbml0X2RlZmF1bHRzKG9wKSA8IDApIHJldHVybiBOVUxMOwotKyAgICAgICAgICAgIHJl c3VsdCA9IG9wLT5kZWZhdWx0c190dXBsZTsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAg ICAgcmVzdWx0ID0gUHlfTm9uZTsKLSsgICAgICAgIH0KLSAgICAgfQotLSAgICAjZW5kaWYKLS0g ICAgI2lmIENZVEhPTl9VU0VfUFlMT05HX0lOVEVSTkFMUwotLSAgICBpZiAobGlrZWx5KFB5TG9u Z19DaGVja0V4YWN0KG9wMSkpKSB7Ci0tICAgICAgICBjb25zdCBsb25nIGIgPSBpbnR2YWw7Ci0t ICAgICAgICBsb25nIGEsIHg7Ci0tI2lmZGVmIEhBVkVfTE9OR19MT05HCi0tICAgICAgICBjb25z dCBQWV9MT05HX0xPTkcgbGxiID0gaW50dmFsOwotLSAgICAgICAgUFlfTE9OR19MT05HIGxsYSwg bGx4OwotLSNlbmRpZgotLSAgICAgICAgY29uc3QgZGlnaXQqIGRpZ2l0cyA9ICgoUHlMb25nT2Jq ZWN0KilvcDEpLT5vYl9kaWdpdDsKLS0gICAgICAgIGNvbnN0IFB5X3NzaXplX3Qgc2l6ZSA9IFB5 X1NJWkUob3AxKTsKLS0gICAgICAgIGlmIChsaWtlbHkoX19QeXhfc3N0X2FicyhzaXplKSA8PSAx KSkgewotLSAgICAgICAgICAgIGEgPSBsaWtlbHkoc2l6ZSkgPyBkaWdpdHNbMF0gOiAwOwotLSAg ICAgICAgICAgIGlmIChzaXplID09IC0xKSBhID0gLWE7Ci0rICAgIFB5X0lOQ1JFRihyZXN1bHQp OwotKyAgICByZXR1cm4gcmVzdWx0OwotK30KLStzdGF0aWMgaW50Ci0rX19QeXhfQ3lGdW5jdGlv bl9zZXRfa3dkZWZhdWx0cyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgUHlPYmplY3QqIHZh bHVlLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpIHsKLSsgICAgUHlPYmplY3QqIHRtcDsK LSsgICAgaWYgKCF2YWx1ZSkgewotKyAgICAgICAgdmFsdWUgPSBQeV9Ob25lOwotKyAgICB9IGVs c2UgaWYgKHZhbHVlICE9IFB5X05vbmUgJiYgIVB5RGljdF9DaGVjayh2YWx1ZSkpIHsKLSsgICAg ICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgIl9fa3dkZWZhdWx0c19fIG11c3QgYmUgc2V0IHRvIGEgZGljdCBvYmplY3QiKTsKLSsg ICAgICAgIHJldHVybiAtMTsKLSsgICAgfQotKyAgICBQeV9JTkNSRUYodmFsdWUpOwotKyAgICB0 bXAgPSBvcC0+ZGVmYXVsdHNfa3dkaWN0OwotKyAgICBvcC0+ZGVmYXVsdHNfa3dkaWN0ID0gdmFs dWU7Ci0rICAgIFB5X1hERUNSRUYodG1wKTsKLSsgICAgcmV0dXJuIDA7Ci0rfQotK3N0YXRpYyBQ eU9iamVjdCAqCi0rX19QeXhfQ3lGdW5jdGlvbl9nZXRfa3dkZWZhdWx0cyhfX3B5eF9DeUZ1bmN0 aW9uT2JqZWN0ICpvcCwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KSB7Ci0rICAgIFB5T2Jq ZWN0KiByZXN1bHQgPSBvcC0+ZGVmYXVsdHNfa3dkaWN0OwotKyAgICBpZiAodW5saWtlbHkoIXJl c3VsdCkpIHsKLSsgICAgICAgIGlmIChvcC0+ZGVmYXVsdHNfZ2V0dGVyKSB7Ci0rICAgICAgICAg ICAgaWYgKF9fUHl4X0N5RnVuY3Rpb25faW5pdF9kZWZhdWx0cyhvcCkgPCAwKSByZXR1cm4gTlVM TDsKLSsgICAgICAgICAgICByZXN1bHQgPSBvcC0+ZGVmYXVsdHNfa3dkaWN0OwotICAgICAgICAg fSBlbHNlIHsKLS0gICAgICAgICAgICBzd2l0Y2ggKHNpemUpIHsKLS0gICAgICAgICAgICAgICAg Y2FzZSAtMjoKLS0gICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+ IDIgKiBQeUxvbmdfU0hJRlQpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBhID0gLShsb25n KSAoKCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2ln bmVkIGxvbmcpZGlnaXRzWzBdKSk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0t I2lmZGVmIEhBVkVfTE9OR19MT05HCi0tICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDgg KiBzaXplb2YoUFlfTE9OR19MT05HKSAtIDEgPiAyICogUHlMb25nX1NISUZUKSB7Ci0tICAgICAg ICAgICAgICAgICAgICAgICAgbGxhID0gLShQWV9MT05HX0xPTkcpICgoKCgodW5zaWduZWQgUFlf TE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQWV9MT05H X0xPTkcpZGlnaXRzWzBdKSk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgZ290byBsb25nX2xv bmc7Ci0tI2VuZGlmCi0tICAgICAgICAgICAgICAgICAgICB9Ci0tICAgICAgICAgICAgICAgICAg ICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICAgICAgICAgIGNhc2UgMjoKLS0gICAgICAg ICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+IDIgKiBQeUxvbmdfU0hJRlQp IHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBhID0gKGxvbmcpICgoKCgodW5zaWduZWQgbG9u ZylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMF0p KTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLS0jaWZkZWYgSEFWRV9MT05HX0xP TkcKLS0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05HX0xP TkcpIC0gMSA+IDIgKiBQeUxvbmdfU0hJRlQpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBs bGEgPSAoUFlfTE9OR19MT05HKSAoKCgoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMV0p IDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1swXSkpOwot LSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOwotLSNlbmRpZgotLSAgICAg ICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OwotLSAgICAgICAgICAgICAgICBjYXNlIC0zOgotLSAgICAgICAgICAgICAgICAgICAgaWYgKDgg KiBzaXplb2YobG9uZykgLSAxID4gMyAqIFB5TG9uZ19TSElGVCkgewotLSAgICAgICAgICAgICAg ICAgICAgICAgIGEgPSAtKGxvbmcpICgoKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1syXSkgPDwg UHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZU KSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkpOwotLSAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotLSAgICAgICAgICAgICAgICAgICAgfSBl bHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gMyAqIFB5TG9uZ19TSElGVCkg ewotLSAgICAgICAgICAgICAgICAgICAgICAgIGxsYSA9IC0oUFlfTE9OR19MT05HKSAoKCgoKCgo dW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNp Z25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVk IFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IGxvbmdfbG9uZzsKLS0jZW5kaWYKLS0gICAgICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAg ICAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgICAgICAgICAgY2FzZSAzOgot LSAgICAgICAgICAgICAgICAgICAgaWYgKDggKiBzaXplb2YobG9uZykgLSAxID4gMyAqIFB5TG9u Z19TSElGVCkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAobG9uZykgKCgoKCgoKHVu c2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcp ZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzBdKSk7 Ci0tICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0tI2lmZGVmIEhBVkVfTE9OR19MT05H Ci0tICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBzaXplb2YoUFlfTE9OR19MT05H KSAtIDEgPiAzICogUHlMb25nX1NISUZUKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgbGxh ID0gKFBZX0xPTkdfTE9ORykgKCgoKCgoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMl0p IDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwg UHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7Ci0tICAg ICAgICAgICAgICAgICAgICAgICAgZ290byBsb25nX2xvbmc7Ci0tI2VuZGlmCi0tICAgICAgICAg ICAgICAgICAgICB9Ci0tICAgICAgICAgICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0t ICAgICAgICAgICAgICAgIGNhc2UgLTQ6Ci0tICAgICAgICAgICAgICAgICAgICBpZiAoOCAqIHNp emVvZihsb25nKSAtIDEgPiA0ICogUHlMb25nX1NISUZUKSB7Ci0tICAgICAgICAgICAgICAgICAg ICAgICAgYSA9IC0obG9uZykgKCgoKCgoKCgodW5zaWduZWQgbG9uZylkaWdpdHNbM10pIDw8IFB5 TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMl0pIDw8IFB5TG9uZ19TSElGVCkg fCAodW5zaWduZWQgbG9uZylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQg bG9uZylkaWdpdHNbMF0pKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLS0jaWZk ZWYgSEFWRV9MT05HX0xPTkcKLS0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoOCAqIHNp emVvZihQWV9MT05HX0xPTkcpIC0gMSA+IDQgKiBQeUxvbmdfU0hJRlQpIHsKLS0gICAgICAgICAg ICAgICAgICAgICAgICBsbGEgPSAtKFBZX0xPTkdfTE9ORykgKCgoKCgoKCgodW5zaWduZWQgUFlf TE9OR19MT05HKWRpZ2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQWV9MT05H X0xPTkcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9O RylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRp Z2l0c1swXSkpOwotLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOwotLSNl bmRpZgotLSAgICAgICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOwotLSAgICAgICAgICAgICAgICBjYXNlIDQ6Ci0tICAgICAgICAgICAgICAg ICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAtIDEgPiA0ICogUHlMb25nX1NISUZUKSB7Ci0tICAg ICAgICAgICAgICAgICAgICAgICAgYSA9IChsb25nKSAoKCgoKCgoKCh1bnNpZ25lZCBsb25nKWRp Z2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1syXSkgPDwg UHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZU KSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkpOwotLSAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotLSAgICAgICAgICAgICAgICAgICAgfSBl bHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gNCAqIFB5TG9uZ19TSElGVCkg ewotLSAgICAgICAgICAgICAgICAgICAgICAgIGxsYSA9IChQWV9MT05HX0xPTkcpICgoKCgoKCgo KHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbM10pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5z aWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25l ZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZ X0xPTkdfTE9ORylkaWdpdHNbMF0pKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGxv bmdfbG9uZzsKLS0jZW5kaWYKLS0gICAgICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAg ICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgICAgICAgICAgZGVmYXVsdDogcmV0 dXJuIFB5TG9uZ19UeXBlLnRwX2FzX251bWJlci0+bmJfYWRkKG9wMSwgb3AyKTsKLS0gICAgICAg ICAgICB9Ci0rICAgICAgICAgICAgcmVzdWx0ID0gUHlfTm9uZTsKLSAgICAgICAgIH0KLS0gICAg ICAgICAgICAgICAgeCA9IGEgKyBiOwotLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxv bmcoeCk7Ci0tI2lmZGVmIEhBVkVfTE9OR19MT05HCi0tICAgICAgICBsb25nX2xvbmc6Ci0tICAg ICAgICAgICAgICAgIGxseCA9IGxsYSArIGxsYjsKLS0gICAgICAgICAgICByZXR1cm4gUHlMb25n X0Zyb21Mb25nTG9uZyhsbHgpOwotLSNlbmRpZgotLSAgICAgICAgCi0tICAgICAgICAKLSAgICAg fQotLSAgICAjZW5kaWYKLS0gICAgaWYgKFB5RmxvYXRfQ2hlY2tFeGFjdChvcDEpKSB7Ci0tICAg ICAgICBjb25zdCBsb25nIGIgPSBpbnR2YWw7Ci0tICAgICAgICBkb3VibGUgYSA9IFB5RmxvYXRf QVNfRE9VQkxFKG9wMSk7Ci0tICAgICAgICAgICAgZG91YmxlIHJlc3VsdDsKLS0gICAgICAgICAg ICBQeUZQRV9TVEFSVF9QUk9URUNUKCJhZGQiLCByZXR1cm4gTlVMTCkKLS0gICAgICAgICAgICBy ZXN1bHQgPSAoKGRvdWJsZSlhKSArIChkb3VibGUpYjsKLS0gICAgICAgICAgICBQeUZQRV9FTkRf UFJPVEVDVChyZXN1bHQpCi0tICAgICAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShy ZXN1bHQpOwotKyAgICBQeV9JTkNSRUYocmVzdWx0KTsKLSsgICAgcmV0dXJuIHJlc3VsdDsKLSt9 Ci0rc3RhdGljIGludAotK19fUHl4X0N5RnVuY3Rpb25fc2V0X2Fubm90YXRpb25zKF9fcHl4X0N5 RnVuY3Rpb25PYmplY3QgKm9wLCBQeU9iamVjdCogdmFsdWUsIENZVEhPTl9VTlVTRUQgdm9pZCAq Y29udGV4dCkgewotKyAgICBQeU9iamVjdCogdG1wOwotKyAgICBpZiAoIXZhbHVlIHx8IHZhbHVl ID09IFB5X05vbmUpIHsKLSsgICAgICAgIHZhbHVlID0gTlVMTDsKLSsgICAgfSBlbHNlIGlmICgh UHlEaWN0X0NoZWNrKHZhbHVlKSkgewotKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5 cGVFcnJvciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAiX19hbm5vdGF0aW9uc19fIG11c3Qg YmUgc2V0IHRvIGEgZGljdCBvYmplY3QiKTsKLSsgICAgICAgIHJldHVybiAtMTsKLSAgICAgfQot LSAgICByZXR1cm4gKGlucGxhY2UgPyBQeU51bWJlcl9JblBsYWNlQWRkIDogUHlOdW1iZXJfQWRk KShvcDEsIG9wMik7Ci0rICAgIFB5X1hJTkNSRUYodmFsdWUpOwotKyAgICB0bXAgPSBvcC0+ZnVu Y19hbm5vdGF0aW9uczsKLSsgICAgb3AtPmZ1bmNfYW5ub3RhdGlvbnMgPSB2YWx1ZTsKLSsgICAg UHlfWERFQ1JFRih0bXApOwotKyAgICByZXR1cm4gMDsKLSB9Ci0tI2VuZGlmCi0tCi0tLyogUHlJ bnRCaW5vcCAqLwotLSNpZiAhQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZCi0tc3RhdGljIFB5T2Jq ZWN0KiBfX1B5eF9QeUludF9TdWJ0cmFjdE9iakMoUHlPYmplY3QgKm9wMSwgUHlPYmplY3QgKm9w MiwgQ1lUSE9OX1VOVVNFRCBsb25nIGludHZhbCwgaW50IGlucGxhY2UsIGludCB6ZXJvZGl2aXNp b25fY2hlY2spIHsKLS0gICAgKHZvaWQpaW5wbGFjZTsKLS0gICAgKHZvaWQpemVyb2RpdmlzaW9u X2NoZWNrOwotLSAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLS0gICAgaWYgKGxpa2VseShQ eUludF9DaGVja0V4YWN0KG9wMSkpKSB7Ci0tICAgICAgICBjb25zdCBsb25nIGIgPSBpbnR2YWw7 Ci0tICAgICAgICBsb25nIHg7Ci0tICAgICAgICBsb25nIGEgPSBQeUludF9BU19MT05HKG9wMSk7 Ci0tICAgICAgICAgICAgeCA9IChsb25nKSgodW5zaWduZWQgbG9uZylhIC0gYik7Ci0tICAgICAg ICAgICAgaWYgKGxpa2VseSgoeF5hKSA+PSAwIHx8ICh4Xn5iKSA+PSAwKSkKLS0gICAgICAgICAg ICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKHgpOwotLSAgICAgICAgICAgIHJldHVybiBQeUxv bmdfVHlwZS50cF9hc19udW1iZXItPm5iX3N1YnRyYWN0KG9wMSwgb3AyKTsKLStzdGF0aWMgUHlP YmplY3QgKgotK19fUHl4X0N5RnVuY3Rpb25fZ2V0X2Fubm90YXRpb25zKF9fcHl4X0N5RnVuY3Rp b25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpIHsKLSsgICAgUHlPYmpl Y3QqIHJlc3VsdCA9IG9wLT5mdW5jX2Fubm90YXRpb25zOwotKyAgICBpZiAodW5saWtlbHkoIXJl c3VsdCkpIHsKLSsgICAgICAgIHJlc3VsdCA9IFB5RGljdF9OZXcoKTsKLSsgICAgICAgIGlmICh1 bmxpa2VseSghcmVzdWx0KSkgcmV0dXJuIE5VTEw7Ci0rICAgICAgICBvcC0+ZnVuY19hbm5vdGF0 aW9ucyA9IHJlc3VsdDsKLSAgICAgfQotLSAgICAjZW5kaWYKLS0gICAgI2lmIENZVEhPTl9VU0Vf UFlMT05HX0lOVEVSTkFMUwotLSAgICBpZiAobGlrZWx5KFB5TG9uZ19DaGVja0V4YWN0KG9wMSkp KSB7Ci0tICAgICAgICBjb25zdCBsb25nIGIgPSBpbnR2YWw7Ci0tICAgICAgICBsb25nIGEsIHg7 Ci0tI2lmZGVmIEhBVkVfTE9OR19MT05HCi0tICAgICAgICBjb25zdCBQWV9MT05HX0xPTkcgbGxi ID0gaW50dmFsOwotLSAgICAgICAgUFlfTE9OR19MT05HIGxsYSwgbGx4OwotLSNlbmRpZgotLSAg ICAgICAgY29uc3QgZGlnaXQqIGRpZ2l0cyA9ICgoUHlMb25nT2JqZWN0KilvcDEpLT5vYl9kaWdp dDsKLS0gICAgICAgIGNvbnN0IFB5X3NzaXplX3Qgc2l6ZSA9IFB5X1NJWkUob3AxKTsKLS0gICAg ICAgIGlmIChsaWtlbHkoX19QeXhfc3N0X2FicyhzaXplKSA8PSAxKSkgewotLSAgICAgICAgICAg IGEgPSBsaWtlbHkoc2l6ZSkgPyBkaWdpdHNbMF0gOiAwOwotLSAgICAgICAgICAgIGlmIChzaXpl ID09IC0xKSBhID0gLWE7Ci0tICAgICAgICB9IGVsc2UgewotLSAgICAgICAgICAgIHN3aXRjaCAo c2l6ZSkgewotLSAgICAgICAgICAgICAgICBjYXNlIC0yOgotLSAgICAgICAgICAgICAgICAgICAg aWYgKDggKiBzaXplb2YobG9uZykgLSAxID4gMiAqIFB5TG9uZ19TSElGVCkgewotLSAgICAgICAg ICAgICAgICAgICAgICAgIGEgPSAtKGxvbmcpICgoKCgodW5zaWduZWQgbG9uZylkaWdpdHNbMV0p IDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKLS0gICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKLS0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLS0gICAgICAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0gMSA+IDIg KiBQeUxvbmdfU0hJRlQpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAtKFBZX0xP TkdfTE9ORykgKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdf U0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsKLS0gICAgICAgICAg ICAgICAgICAgICAgICBnb3RvIGxvbmdfbG9uZzsKLS0jZW5kaWYKLS0gICAgICAgICAgICAgICAg ICAgIH0KLS0gICAgICAgICAgICAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAg ICAgICAgICAgY2FzZSAyOgotLSAgICAgICAgICAgICAgICAgICAgaWYgKDggKiBzaXplb2YobG9u ZykgLSAxID4gMiAqIFB5TG9uZ19TSElGVCkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIGEg PSAobG9uZykgKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8 ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkpOwotLSAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl IGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gMiAqIFB5TG9uZ19TSElGVCkgewot LSAgICAgICAgICAgICAgICAgICAgICAgIGxsYSA9IChQWV9MT05HX0xPTkcpICgoKCgodW5zaWdu ZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQ WV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgZ290byBs b25nX2xvbmc7Ci0tI2VuZGlmCi0tICAgICAgICAgICAgICAgICAgICB9Ci0tICAgICAgICAgICAg ICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICAgICAgICAgIGNhc2UgLTM6Ci0t ICAgICAgICAgICAgICAgICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAtIDEgPiAzICogUHlMb25n X1NISUZUKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgYSA9IC0obG9uZykgKCgoKCgoKHVu c2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcp ZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzBdKSk7 Ci0tICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0tI2lmZGVmIEhBVkVfTE9OR19MT05H Ci0tICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBzaXplb2YoUFlfTE9OR19MT05H KSAtIDEgPiAzICogUHlMb25nX1NISUZUKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgbGxh ID0gLShQWV9MT05HX0xPTkcpICgoKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzJd KSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMV0pIDw8 IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1swXSkpOwotLSAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOwotLSNlbmRpZgotLSAgICAgICAg ICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwot LSAgICAgICAgICAgICAgICBjYXNlIDM6Ci0tICAgICAgICAgICAgICAgICAgICBpZiAoOCAqIHNp emVvZihsb25nKSAtIDEgPiAzICogUHlMb25nX1NISUZUKSB7Ci0tICAgICAgICAgICAgICAgICAg ICAgICAgYSA9IChsb25nKSAoKCgoKCgodW5zaWduZWQgbG9uZylkaWdpdHNbMl0pIDw8IFB5TG9u Z19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAo dW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLS0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLS0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp ZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0gMSA+IDMgKiBQeUxvbmdfU0hJRlQpIHsKLS0g ICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAoUFlfTE9OR19MT05HKSAoKCgoKCgodW5zaWdu ZWQgUFlfTE9OR19MT05HKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQ WV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xP TkdfTE9ORylkaWdpdHNbMF0pKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGxvbmdf bG9uZzsKLS0jZW5kaWYKLS0gICAgICAgICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICAgICAg ICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLS0gICAgICAgICAgICAgICAgY2FzZSAtNDoKLS0gICAg ICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+IDQgKiBQeUxvbmdfU0hJ RlQpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBhID0gLShsb25nKSAoKCgoKCgoKCh1bnNp Z25lZCBsb25nKWRpZ2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRp Z2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwg UHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkpOwotLSAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotLSAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gNCAqIFB5 TG9uZ19TSElGVCkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIGxsYSA9IC0oUFlfTE9OR19M T05HKSAoKCgoKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzNdKSA8PCBQeUxvbmdf U0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMl0pIDw8IFB5TG9uZ19TSElG VCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8 ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7Ci0tICAgICAgICAgICAgICAgICAg ICAgICAgZ290byBsb25nX2xvbmc7Ci0tI2VuZGlmCi0tICAgICAgICAgICAgICAgICAgICB9Ci0t ICAgICAgICAgICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0tICAgICAgICAgICAgICAg IGNhc2UgNDoKLS0gICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+ IDQgKiBQeUxvbmdfU0hJRlQpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBhID0gKGxvbmcp ICgoKCgoKCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzNdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVu c2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcp ZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzBdKSk7 Ci0tICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0tI2lmZGVmIEhBVkVfTE9OR19MT05H Ci0tICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBzaXplb2YoUFlfTE9OR19MT05H KSAtIDEgPiA0ICogUHlMb25nX1NISUZUKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgbGxh ID0gKFBZX0xPTkdfTE9ORykgKCgoKCgoKCgodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sz XSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzJdKSA8 PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMV0pIDw8IFB5 TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1swXSkpOwotLSAgICAg ICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOwotKyAgICBQeV9JTkNSRUYocmVzdWx0 KTsKLSsgICAgcmV0dXJuIHJlc3VsdDsKLSt9Ci0rc3RhdGljIFB5R2V0U2V0RGVmIF9fcHl4X0N5 RnVuY3Rpb25fZ2V0c2V0c1tdID0gewotKyAgICB7KGNoYXIgKikgImZ1bmNfZG9jIiwgKGdldHRl cilfX1B5eF9DeUZ1bmN0aW9uX2dldF9kb2MsIChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRf ZG9jLCAwLCAwfSwKLSsgICAgeyhjaGFyICopICJfX2RvY19fIiwgIChnZXR0ZXIpX19QeXhfQ3lG dW5jdGlvbl9nZXRfZG9jLCAoc2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fc2V0X2RvYywgMCwgMH0s Ci0rICAgIHsoY2hhciAqKSAiZnVuY19uYW1lIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dl dF9uYW1lLCAoc2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fc2V0X25hbWUsIDAsIDB9LAotKyAgICB7 KGNoYXIgKikgIl9fbmFtZV9fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9uYW1lLCAo c2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fc2V0X25hbWUsIDAsIDB9LAotKyAgICB7KGNoYXIgKikg Il9fcXVhbG5hbWVfXyIsIChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9nZXRfcXVhbG5hbWUsIChz ZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfcXVhbG5hbWUsIDAsIDB9LAotKyAgICB7KGNoYXIg KikgIl9fc2VsZl9fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9zZWxmLCAwLCAwLCAw fSwKLSsgICAgeyhjaGFyICopICJmdW5jX2RpY3QiLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25f Z2V0X2RpY3QsIChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfZGljdCwgMCwgMH0sCi0rICAg IHsoY2hhciAqKSAiX19kaWN0X18iLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2RpY3Qs IChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfZGljdCwgMCwgMH0sCi0rICAgIHsoY2hhciAq KSAiZnVuY19nbG9iYWxzIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9nbG9iYWxzLCAw LCAwLCAwfSwKLSsgICAgeyhjaGFyICopICJfX2dsb2JhbHNfXyIsIChnZXR0ZXIpX19QeXhfQ3lG dW5jdGlvbl9nZXRfZ2xvYmFscywgMCwgMCwgMH0sCi0rICAgIHsoY2hhciAqKSAiZnVuY19jbG9z dXJlIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9jbG9zdXJlLCAwLCAwLCAwfSwKLSsg ICAgeyhjaGFyICopICJfX2Nsb3N1cmVfXyIsIChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9nZXRf Y2xvc3VyZSwgMCwgMCwgMH0sCi0rICAgIHsoY2hhciAqKSAiZnVuY19jb2RlIiwgKGdldHRlcilf X1B5eF9DeUZ1bmN0aW9uX2dldF9jb2RlLCAwLCAwLCAwfSwKLSsgICAgeyhjaGFyICopICJfX2Nv ZGVfXyIsIChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9nZXRfY29kZSwgMCwgMCwgMH0sCi0rICAg IHsoY2hhciAqKSAiZnVuY19kZWZhdWx0cyIsIChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9nZXRf ZGVmYXVsdHMsIChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfZGVmYXVsdHMsIDAsIDB9LAot KyAgICB7KGNoYXIgKikgIl9fZGVmYXVsdHNfXyIsIChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9n ZXRfZGVmYXVsdHMsIChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfZGVmYXVsdHMsIDAsIDB9 LAotKyAgICB7KGNoYXIgKikgIl9fa3dkZWZhdWx0c19fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0 aW9uX2dldF9rd2RlZmF1bHRzLCAoc2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fc2V0X2t3ZGVmYXVs dHMsIDAsIDB9LAotKyAgICB7KGNoYXIgKikgIl9fYW5ub3RhdGlvbnNfXyIsIChnZXR0ZXIpX19Q eXhfQ3lGdW5jdGlvbl9nZXRfYW5ub3RhdGlvbnMsIChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9z ZXRfYW5ub3RhdGlvbnMsIDAsIDB9LAotKyAgICB7MCwgMCwgMCwgMCwgMH0KLSt9OwotK3N0YXRp YyBQeU1lbWJlckRlZiBfX3B5eF9DeUZ1bmN0aW9uX21lbWJlcnNbXSA9IHsKLSsgICAgeyhjaGFy ICopICJfX21vZHVsZV9fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5Q0Z1bmN0aW9uT2JqZWN0LCBt X21vZHVsZSksIFBZX1dSSVRFX1JFU1RSSUNURUQsIDB9LAotKyAgICB7MCwgMCwgMCwgIDAsIDB9 Ci0rfTsKLStzdGF0aWMgUHlPYmplY3QgKgotK19fUHl4X0N5RnVuY3Rpb25fcmVkdWNlKF9fcHl4 X0N5RnVuY3Rpb25PYmplY3QgKm0sIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmFyZ3MpCi0rewot KyNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKLSsgICAgUHlfSU5DUkVGKG0tPmZ1bmNfcXVhbG5h bWUpOwotKyAgICByZXR1cm4gbS0+ZnVuY19xdWFsbmFtZTsKLSsjZWxzZQotKyAgICByZXR1cm4g UHlTdHJpbmdfRnJvbVN0cmluZyhtLT5mdW5jLm1fbWwtPm1sX25hbWUpOwotICNlbmRpZgotLSAg ICAgICAgICAgICAgICAgICAgfQotLSAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOwotLSAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gUHlMb25nX1R5cGUudHBfYXNf bnVtYmVyLT5uYl9zdWJ0cmFjdChvcDEsIG9wMik7Ci0tICAgICAgICAgICAgfQotLSAgICAgICAg fQotLSAgICAgICAgICAgICAgICB4ID0gYSAtIGI7Ci0tICAgICAgICAgICAgcmV0dXJuIFB5TG9u Z19Gcm9tTG9uZyh4KTsKLS0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLS0gICAgICAgIGxvbmdfbG9u ZzoKLS0gICAgICAgICAgICAgICAgbGx4ID0gbGxhIC0gbGxiOwotLSAgICAgICAgICAgIHJldHVy biBQeUxvbmdfRnJvbUxvbmdMb25nKGxseCk7Ci0rfQotK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5 eF9DeUZ1bmN0aW9uX21ldGhvZHNbXSA9IHsKLSsgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0 aW9uKV9fUHl4X0N5RnVuY3Rpb25fcmVkdWNlLCBNRVRIX1ZBUkFSR1MsIDB9LAotKyAgICB7MCwg MCwgMCwgMH0KLSt9OwotKyNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwNTAwQTAKLSsjZGVmaW5l IF9fUHl4X0N5RnVuY3Rpb25fd2Vha3JlZmxpc3QoY3lmdW5jKSAoKGN5ZnVuYyktPmZ1bmNfd2Vh a3JlZmxpc3QpCi0rI2Vsc2UKLSsjZGVmaW5lIF9fUHl4X0N5RnVuY3Rpb25fd2Vha3JlZmxpc3Qo Y3lmdW5jKSAoKGN5ZnVuYyktPmZ1bmMubV93ZWFrcmVmbGlzdCkKLSAjZW5kaWYKLS0gICAgICAg IAotLSAgICAgICAgCi0rc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9DeUZ1bmN0aW9uX0luaXQoX19w eXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIFB5TWV0aG9kRGVmICptbCwgaW50IGZsYWdzLCBQeU9i amVjdCogcXVhbG5hbWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHlPYmplY3QgKmNsb3N1cmUsIFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0KiBnbG9iYWxzLCBQ eU9iamVjdCogY29kZSkgewotKyAgICBpZiAodW5saWtlbHkob3AgPT0gTlVMTCkpCi0rICAgICAg ICByZXR1cm4gTlVMTDsKLSsgICAgb3AtPmZsYWdzID0gZmxhZ3M7Ci0rICAgIF9fUHl4X0N5RnVu Y3Rpb25fd2Vha3JlZmxpc3Qob3ApID0gTlVMTDsKLSsgICAgb3AtPmZ1bmMubV9tbCA9IG1sOwot KyAgICBvcC0+ZnVuYy5tX3NlbGYgPSAoUHlPYmplY3QgKikgb3A7Ci0rICAgIFB5X1hJTkNSRUYo Y2xvc3VyZSk7Ci0rICAgIG9wLT5mdW5jX2Nsb3N1cmUgPSBjbG9zdXJlOwotKyAgICBQeV9YSU5D UkVGKG1vZHVsZSk7Ci0rICAgIG9wLT5mdW5jLm1fbW9kdWxlID0gbW9kdWxlOwotKyAgICBvcC0+ ZnVuY19kaWN0ID0gTlVMTDsKLSsgICAgb3AtPmZ1bmNfbmFtZSA9IE5VTEw7Ci0rICAgIFB5X0lO Q1JFRihxdWFsbmFtZSk7Ci0rICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gcXVhbG5hbWU7Ci0rICAg IG9wLT5mdW5jX2RvYyA9IE5VTEw7Ci0rICAgIG9wLT5mdW5jX2NsYXNzb2JqID0gTlVMTDsKLSsg ICAgb3AtPmZ1bmNfZ2xvYmFscyA9IGdsb2JhbHM7Ci0rICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19n bG9iYWxzKTsKLSsgICAgUHlfWElOQ1JFRihjb2RlKTsKLSsgICAgb3AtPmZ1bmNfY29kZSA9IGNv ZGU7Ci0rICAgIG9wLT5kZWZhdWx0c19weW9iamVjdHMgPSAwOwotKyAgICBvcC0+ZGVmYXVsdHNf c2l6ZSA9IDA7Ci0rICAgIG9wLT5kZWZhdWx0cyA9IE5VTEw7Ci0rICAgIG9wLT5kZWZhdWx0c190 dXBsZSA9IE5VTEw7Ci0rICAgIG9wLT5kZWZhdWx0c19rd2RpY3QgPSBOVUxMOwotKyAgICBvcC0+ ZGVmYXVsdHNfZ2V0dGVyID0gTlVMTDsKLSsgICAgb3AtPmZ1bmNfYW5ub3RhdGlvbnMgPSBOVUxM OwotKyAgICByZXR1cm4gKFB5T2JqZWN0ICopIG9wOwotK30KLStzdGF0aWMgaW50Ci0rX19QeXhf Q3lGdW5jdGlvbl9jbGVhcihfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICptKQotK3sKLSsgICAgUHlf Q0xFQVIobS0+ZnVuY19jbG9zdXJlKTsKLSsgICAgUHlfQ0xFQVIobS0+ZnVuYy5tX21vZHVsZSk7 Ci0rICAgIFB5X0NMRUFSKG0tPmZ1bmNfZGljdCk7Ci0rICAgIFB5X0NMRUFSKG0tPmZ1bmNfbmFt ZSk7Ci0rICAgIFB5X0NMRUFSKG0tPmZ1bmNfcXVhbG5hbWUpOwotKyAgICBQeV9DTEVBUihtLT5m dW5jX2RvYyk7Ci0rICAgIFB5X0NMRUFSKG0tPmZ1bmNfZ2xvYmFscyk7Ci0rICAgIFB5X0NMRUFS KG0tPmZ1bmNfY29kZSk7Ci0rICAgIFB5X0NMRUFSKG0tPmZ1bmNfY2xhc3NvYmopOwotKyAgICBQ eV9DTEVBUihtLT5kZWZhdWx0c190dXBsZSk7Ci0rICAgIFB5X0NMRUFSKG0tPmRlZmF1bHRzX2t3 ZGljdCk7Ci0rICAgIFB5X0NMRUFSKG0tPmZ1bmNfYW5ub3RhdGlvbnMpOwotKyAgICBpZiAobS0+ ZGVmYXVsdHMpIHsKLSsgICAgICAgIFB5T2JqZWN0ICoqcHlkZWZhdWx0cyA9IF9fUHl4X0N5RnVu Y3Rpb25fRGVmYXVsdHMoUHlPYmplY3QgKiwgbSk7Ci0rICAgICAgICBpbnQgaTsKLSsgICAgICAg IGZvciAoaSA9IDA7IGkgPCBtLT5kZWZhdWx0c19weW9iamVjdHM7IGkrKykKLSsgICAgICAgICAg ICBQeV9YREVDUkVGKHB5ZGVmYXVsdHNbaV0pOwotKyAgICAgICAgUHlPYmplY3RfRnJlZShtLT5k ZWZhdWx0cyk7Ci0rICAgICAgICBtLT5kZWZhdWx0cyA9IE5VTEw7Ci0gICAgIH0KLS0gICAgI2Vu ZGlmCi0tICAgIGlmIChQeUZsb2F0X0NoZWNrRXhhY3Qob3AxKSkgewotLSAgICAgICAgY29uc3Qg bG9uZyBiID0gaW50dmFsOwotLSAgICAgICAgZG91YmxlIGEgPSBQeUZsb2F0X0FTX0RPVUJMRShv cDEpOwotLSAgICAgICAgICAgIGRvdWJsZSByZXN1bHQ7Ci0tICAgICAgICAgICAgUHlGUEVfU1RB UlRfUFJPVEVDVCgic3VidHJhY3QiLCByZXR1cm4gTlVMTCkKLS0gICAgICAgICAgICByZXN1bHQg PSAoKGRvdWJsZSlhKSAtIChkb3VibGUpYjsKLS0gICAgICAgICAgICBQeUZQRV9FTkRfUFJPVEVD VChyZXN1bHQpCi0tICAgICAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShyZXN1bHQp OwotKyAgICByZXR1cm4gMDsKLSt9Ci0rc3RhdGljIHZvaWQgX19QeXhfX0N5RnVuY3Rpb25fZGVh bGxvYyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICptKQotK3sKLSsgICAgaWYgKF9fUHl4X0N5RnVu Y3Rpb25fd2Vha3JlZmxpc3QobSkgIT0gTlVMTCkKLSsgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vh a1JlZnMoKFB5T2JqZWN0ICopIG0pOwotKyAgICBfX1B5eF9DeUZ1bmN0aW9uX2NsZWFyKG0pOwot KyAgICBQeU9iamVjdF9HQ19EZWwobSk7Ci0rfQotK3N0YXRpYyB2b2lkIF9fUHl4X0N5RnVuY3Rp b25fZGVhbGxvYyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICptKQotK3sKLSsgICAgUHlPYmplY3Rf R0NfVW5UcmFjayhtKTsKLSsgICAgX19QeXhfX0N5RnVuY3Rpb25fZGVhbGxvYyhtKTsKLSt9Ci0r c3RhdGljIGludCBfX1B5eF9DeUZ1bmN0aW9uX3RyYXZlcnNlKF9fcHl4X0N5RnVuY3Rpb25PYmpl Y3QgKm0sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQotK3sKLSsgICAgUHlfVklTSVQobS0+ ZnVuY19jbG9zdXJlKTsKLSsgICAgUHlfVklTSVQobS0+ZnVuYy5tX21vZHVsZSk7Ci0rICAgIFB5 X1ZJU0lUKG0tPmZ1bmNfZGljdCk7Ci0rICAgIFB5X1ZJU0lUKG0tPmZ1bmNfbmFtZSk7Ci0rICAg IFB5X1ZJU0lUKG0tPmZ1bmNfcXVhbG5hbWUpOwotKyAgICBQeV9WSVNJVChtLT5mdW5jX2RvYyk7 Ci0rICAgIFB5X1ZJU0lUKG0tPmZ1bmNfZ2xvYmFscyk7Ci0rICAgIFB5X1ZJU0lUKG0tPmZ1bmNf Y29kZSk7Ci0rICAgIFB5X1ZJU0lUKG0tPmZ1bmNfY2xhc3NvYmopOwotKyAgICBQeV9WSVNJVCht LT5kZWZhdWx0c190dXBsZSk7Ci0rICAgIFB5X1ZJU0lUKG0tPmRlZmF1bHRzX2t3ZGljdCk7Ci0r ICAgIGlmIChtLT5kZWZhdWx0cykgewotKyAgICAgICAgUHlPYmplY3QgKipweWRlZmF1bHRzID0g X19QeXhfQ3lGdW5jdGlvbl9EZWZhdWx0cyhQeU9iamVjdCAqLCBtKTsKLSsgICAgICAgIGludCBp OwotKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG0tPmRlZmF1bHRzX3B5b2JqZWN0czsgaSsrKQot KyAgICAgICAgICAgIFB5X1ZJU0lUKHB5ZGVmYXVsdHNbaV0pOwotICAgICB9Ci0tICAgIHJldHVy biAoaW5wbGFjZSA/IFB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdCA6IFB5TnVtYmVyX1N1YnRyYWN0 KShvcDEsIG9wMik7Ci0rICAgIHJldHVybiAwOwotIH0KLStzdGF0aWMgUHlPYmplY3QgKl9fUHl4 X0N5RnVuY3Rpb25fZGVzY3JfZ2V0KFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqb2JqLCBQeU9i amVjdCAqdHlwZSkKLSt7Ci0rI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0rICAgIF9fcHl4X0N5 RnVuY3Rpb25PYmplY3QgKm0gPSAoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqKSBmdW5jOwotKyAg ICBpZiAobS0+ZmxhZ3MgJiBfX1B5eF9DWUZVTkNUSU9OX1NUQVRJQ01FVEhPRCkgewotKyAgICAg ICAgUHlfSU5DUkVGKGZ1bmMpOwotKyAgICAgICAgcmV0dXJuIGZ1bmM7Ci0rICAgIH0KLSsgICAg aWYgKG0tPmZsYWdzICYgX19QeXhfQ1lGVU5DVElPTl9DTEFTU01FVEhPRCkgewotKyAgICAgICAg aWYgKHR5cGUgPT0gTlVMTCkKLSsgICAgICAgICAgICB0eXBlID0gKFB5T2JqZWN0ICopKFB5X1RZ UEUob2JqKSk7Ci0rICAgICAgICByZXR1cm4gX19QeXhfUHlNZXRob2RfTmV3KGZ1bmMsIHR5cGUs IChQeU9iamVjdCAqKShQeV9UWVBFKHR5cGUpKSk7Ci0rICAgIH0KLSsgICAgaWYgKG9iaiA9PSBQ eV9Ob25lKQotKyAgICAgICAgb2JqID0gTlVMTDsKLSAjZW5kaWYKLS0KLS0vKiBXcml0ZVVucmFp c2FibGVFeGNlcHRpb24gKi8KLS1zdGF0aWMgdm9pZCBfX1B5eF9Xcml0ZVVucmFpc2FibGUoY29u c3QgY2hhciAqbmFtZSwgQ1lUSE9OX1VOVVNFRCBpbnQgY2xpbmVubywKLS0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX1VOVVNFRCBpbnQgbGluZW5vLCBDWVRIT05fVU5V U0VEIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgZnVsbF90cmFjZWJhY2ssIENZVEhPTl9VTlVTRUQgaW50IG5vZ2lsKSB7Ci0tICAg IFB5T2JqZWN0ICpvbGRfZXhjLCAqb2xkX3ZhbCwgKm9sZF90YjsKLS0gICAgUHlPYmplY3QgKmN0 eDsKLS0gICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9kZWNsYXJlCi0tI2lmZGVmIFdJVEhfVEhSRUFE Ci0tICAgIFB5R0lMU3RhdGVfU1RBVEUgc3RhdGU7Ci0tICAgIGlmIChub2dpbCkKLS0gICAgICAg IHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKLS0jaWZkZWYgX01TQ19WRVIKLS0gICAgZWxz ZSBzdGF0ZSA9IChQeUdJTFN0YXRlX1NUQVRFKS0xOwotLSNlbmRpZgotKyAgICByZXR1cm4gX19Q eXhfUHlNZXRob2RfTmV3KGZ1bmMsIG9iaiwgdHlwZSk7Ci0rfQotK3N0YXRpYyBQeU9iamVjdCoK LStfX1B5eF9DeUZ1bmN0aW9uX3JlcHIoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3ApCi0rewot KyNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKLSsgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9y bWF0KCI8Y3lmdW5jdGlvbiAlVSBhdCAlcD4iLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb3AtPmZ1bmNfcXVhbG5hbWUsICh2b2lkICopb3ApOwotKyNlbHNlCi0rICAgIHJldHVy biBQeVN0cmluZ19Gcm9tRm9ybWF0KCI8Y3lmdW5jdGlvbiAlcyBhdCAlcD4iLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Bc1N0cmluZyhvcC0+ZnVuY19xdWFsbmFt ZSksICh2b2lkICopb3ApOwotICNlbmRpZgotLSAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2ln bgotLSAgICBfX1B5eF9FcnJGZXRjaCgmb2xkX2V4YywgJm9sZF92YWwsICZvbGRfdGIpOwotLSAg ICBpZiAoZnVsbF90cmFjZWJhY2spIHsKLS0gICAgICAgIFB5X1hJTkNSRUYob2xkX2V4Yyk7Ci0t ICAgICAgICBQeV9YSU5DUkVGKG9sZF92YWwpOwotLSAgICAgICAgUHlfWElOQ1JFRihvbGRfdGIp OwotLSAgICAgICAgX19QeXhfRXJyUmVzdG9yZShvbGRfZXhjLCBvbGRfdmFsLCBvbGRfdGIpOwot LSAgICAgICAgUHlFcnJfUHJpbnRFeCgxKTsKLS0gICAgfQotLSAgICAjaWYgUFlfTUFKT1JfVkVS U0lPTiA8IDMKLS0gICAgY3R4ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhuYW1lKTsKLS0gICAgI2Vs c2UKLS0gICAgY3R4ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobmFtZSk7Ci0tICAgICNlbmRpZgot LSAgICBfX1B5eF9FcnJSZXN0b3JlKG9sZF9leGMsIG9sZF92YWwsIG9sZF90Yik7Ci0tICAgIGlm ICghY3R4KSB7Ci0tICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoUHlfTm9uZSk7Ci0tICAg IH0gZWxzZSB7Ci0tICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoY3R4KTsKLS0gICAgICAg IFB5X0RFQ1JFRihjdHgpOwotK30KLStzdGF0aWMgUHlPYmplY3QgKiBfX1B5eF9DeUZ1bmN0aW9u X0NhbGxNZXRob2QoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJn LCBQeU9iamVjdCAqa3cpIHsKLSsgICAgUHlDRnVuY3Rpb25PYmplY3QqIGYgPSAoUHlDRnVuY3Rp b25PYmplY3QqKWZ1bmM7Ci0rICAgIFB5Q0Z1bmN0aW9uIG1ldGggPSBmLT5tX21sLT5tbF9tZXRo OwotKyAgICBQeV9zc2l6ZV90IHNpemU7Ci0rICAgIHN3aXRjaCAoZi0+bV9tbC0+bWxfZmxhZ3Mg JiAoTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUyB8IE1FVEhfTk9BUkdTIHwgTUVUSF9PKSkg ewotKyAgICBjYXNlIE1FVEhfVkFSQVJHUzoKLSsgICAgICAgIGlmIChsaWtlbHkoa3cgPT0gTlVM TCB8fCBQeURpY3RfU2l6ZShrdykgPT0gMCkpCi0rICAgICAgICAgICAgcmV0dXJuICgqbWV0aCko c2VsZiwgYXJnKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICBjYXNlIE1FVEhfVkFSQVJHUyB8IE1F VEhfS0VZV09SRFM6Ci0rICAgICAgICByZXR1cm4gKCooUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMp KHZvaWQqKW1ldGgpKHNlbGYsIGFyZywga3cpOwotKyAgICBjYXNlIE1FVEhfTk9BUkdTOgotKyAg ICAgICAgaWYgKGxpa2VseShrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKSkgewot KyAgICAgICAgICAgIHNpemUgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZyk7Ci0rICAgICAgICAgICAg aWYgKGxpa2VseShzaXplID09IDApKQotKyAgICAgICAgICAgICAgICByZXR1cm4gKCptZXRoKShz ZWxmLCBOVUxMKTsKLSsgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAot KyAgICAgICAgICAgICAgICAiJS4yMDBzKCkgdGFrZXMgbm8gYXJndW1lbnRzICglIiBDWVRIT05f Rk9STUFUX1NTSVpFX1QgImQgZ2l2ZW4pIiwKLSsgICAgICAgICAgICAgICAgZi0+bV9tbC0+bWxf bmFtZSwgc2l6ZSk7Ci0rICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgICAgICB9Ci0rICAg ICAgICBicmVhazsKLSsgICAgY2FzZSBNRVRIX086Ci0rICAgICAgICBpZiAobGlrZWx5KGt3ID09 IE5VTEwgfHwgUHlEaWN0X1NpemUoa3cpID09IDApKSB7Ci0rICAgICAgICAgICAgc2l6ZSA9IFB5 VHVwbGVfR0VUX1NJWkUoYXJnKTsKLSsgICAgICAgICAgICBpZiAobGlrZWx5KHNpemUgPT0gMSkp IHsKLSsgICAgICAgICAgICAgICAgUHlPYmplY3QgKnJlc3VsdCwgKmFyZzA7Ci0rICAgICAgICAg ICAgICAgICNpZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9S Uk9XRURfUkVGUwotKyAgICAgICAgICAgICAgICBhcmcwID0gUHlUdXBsZV9HRVRfSVRFTShhcmcs IDApOwotKyAgICAgICAgICAgICAgICAjZWxzZQotKyAgICAgICAgICAgICAgICBhcmcwID0gUHlT ZXF1ZW5jZV9JVEVNKGFyZywgMCk7IGlmICh1bmxpa2VseSghYXJnMCkpIHJldHVybiBOVUxMOwot KyAgICAgICAgICAgICAgICAjZW5kaWYKLSsgICAgICAgICAgICAgICAgcmVzdWx0ID0gKCptZXRo KShzZWxmLCBhcmcwKTsKLSsgICAgICAgICAgICAgICAgI2lmICEoQ1lUSE9OX0FTU1VNRV9TQUZF X01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMpCi0rICAgICAgICAgICAgICAg IFB5X0RFQ1JFRihhcmcwKTsKLSsgICAgICAgICAgICAgICAgI2VuZGlmCi0rICAgICAgICAgICAg ICAgIHJldHVybiByZXN1bHQ7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICAgIFB5RXJyX0Zv cm1hdChQeUV4Y19UeXBlRXJyb3IsCi0rICAgICAgICAgICAgICAgICIlLjIwMHMoKSB0YWtlcyBl eGFjdGx5IG9uZSBhcmd1bWVudCAoJSIgQ1lUSE9OX0ZPUk1BVF9TU0laRV9UICJkIGdpdmVuKSIs Ci0rICAgICAgICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUsIHNpemUpOwotKyAgICAgICAgICAg IHJldHVybiBOVUxMOwotKyAgICAgICAgfQotKyAgICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6 Ci0rICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJCYWQgY2FsbCBm bGFncyBpbiAiCi0rICAgICAgICAgICAgICAgICAgICAgICAgIl9fUHl4X0N5RnVuY3Rpb25fQ2Fs bC4gTUVUSF9PTERBUkdTIGlzIG5vICIKLSsgICAgICAgICAgICAgICAgICAgICAgICAibG9uZ2Vy IHN1cHBvcnRlZCEiKTsKLSsgICAgICAgIHJldHVybiBOVUxMOwotICAgICB9Ci0tI2lmZGVmIFdJ VEhfVEhSRUFECi0tICAgIGlmIChub2dpbCkKLS0gICAgICAgIFB5R0lMU3RhdGVfUmVsZWFzZShz dGF0ZSk7Ci0tI2VuZGlmCi0tfQotLQotLS8qIFN3YXBFeGNlcHRpb24gKi8KLS0jaWYgQ1lUSE9O X0ZBU1RfVEhSRUFEX1NUQVRFCi0tc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9fRXhj ZXB0aW9uU3dhcChQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5T2JqZWN0ICoqdHlwZSwgUHlPYmpl Y3QgKip2YWx1ZSwgUHlPYmplY3QgKip0YikgewotLSAgICBQeU9iamVjdCAqdG1wX3R5cGUsICp0 bXBfdmFsdWUsICp0bXBfdGI7Ci0tICAgICNpZiBDWVRIT05fVVNFX0VYQ19JTkZPX1NUQUNLCi0t ICAgIF9QeUVycl9TdGFja0l0ZW0gKmV4Y19pbmZvID0gdHN0YXRlLT5leGNfaW5mbzsKLS0gICAg dG1wX3R5cGUgPSBleGNfaW5mby0+ZXhjX3R5cGU7Ci0tICAgIHRtcF92YWx1ZSA9IGV4Y19pbmZv LT5leGNfdmFsdWU7Ci0tICAgIHRtcF90YiA9IGV4Y19pbmZvLT5leGNfdHJhY2ViYWNrOwotLSAg ICBleGNfaW5mby0+ZXhjX3R5cGUgPSAqdHlwZTsKLS0gICAgZXhjX2luZm8tPmV4Y192YWx1ZSA9 ICp2YWx1ZTsKLS0gICAgZXhjX2luZm8tPmV4Y190cmFjZWJhY2sgPSAqdGI7Ci0tICAgICNlbHNl Ci0tICAgIHRtcF90eXBlID0gdHN0YXRlLT5leGNfdHlwZTsKLS0gICAgdG1wX3ZhbHVlID0gdHN0 YXRlLT5leGNfdmFsdWU7Ci0tICAgIHRtcF90YiA9IHRzdGF0ZS0+ZXhjX3RyYWNlYmFjazsKLS0g ICAgdHN0YXRlLT5leGNfdHlwZSA9ICp0eXBlOwotLSAgICB0c3RhdGUtPmV4Y192YWx1ZSA9ICp2 YWx1ZTsKLS0gICAgdHN0YXRlLT5leGNfdHJhY2ViYWNrID0gKnRiOwotLSAgICAjZW5kaWYKLS0g ICAgKnR5cGUgPSB0bXBfdHlwZTsKLS0gICAgKnZhbHVlID0gdG1wX3ZhbHVlOwotLSAgICAqdGIg PSB0bXBfdGI7Ci0tfQotLSNlbHNlCi0tc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9F eGNlcHRpb25Td2FwKFB5T2JqZWN0ICoqdHlwZSwgUHlPYmplY3QgKip2YWx1ZSwgUHlPYmplY3Qg Kip0YikgewotLSAgICBQeU9iamVjdCAqdG1wX3R5cGUsICp0bXBfdmFsdWUsICp0bXBfdGI7Ci0t ICAgIFB5RXJyX0dldEV4Y0luZm8oJnRtcF90eXBlLCAmdG1wX3ZhbHVlLCAmdG1wX3RiKTsKLS0g ICAgUHlFcnJfU2V0RXhjSW5mbygqdHlwZSwgKnZhbHVlLCAqdGIpOwotLSAgICAqdHlwZSA9IHRt cF90eXBlOwotLSAgICAqdmFsdWUgPSB0bXBfdmFsdWU7Ci0tICAgICp0YiA9IHRtcF90YjsKLSsg ICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIiUuMjAwcygpIHRha2VzIG5vIGtleXdv cmQgYXJndW1lbnRzIiwKLSsgICAgICAgICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUpOwotKyAg ICByZXR1cm4gTlVMTDsKLSB9Ci0tI2VuZGlmCi0tCi0tLyogU2V0SXRlbUludCAqLwotLXN0YXRp YyBpbnQgX19QeXhfU2V0SXRlbUludF9HZW5lcmljKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqaiwg UHlPYmplY3QgKnYpIHsKLS0gICAgaW50IHI7Ci0tICAgIGlmICghaikgcmV0dXJuIC0xOwotLSAg ICByID0gUHlPYmplY3RfU2V0SXRlbShvLCBqLCB2KTsKLS0gICAgUHlfREVDUkVGKGopOwotLSAg ICByZXR1cm4gcjsKLStzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCAqX19QeXhfQ3lGdW5j dGlvbl9DYWxsKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJnLCBQeU9iamVjdCAqa3cpIHsK LSsgICAgcmV0dXJuIF9fUHl4X0N5RnVuY3Rpb25fQ2FsbE1ldGhvZChmdW5jLCAoKFB5Q0Z1bmN0 aW9uT2JqZWN0KilmdW5jKS0+bV9zZWxmLCBhcmcsIGt3KTsKLSB9Ci0tc3RhdGljIENZVEhPTl9J TkxJTkUgaW50IF9fUHl4X1NldEl0ZW1JbnRfRmFzdChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBp LCBQeU9iamVjdCAqdiwgaW50IGlzX2xpc3QsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDWVRIT05fTkNQX1VOVVNFRCBpbnQgd3JhcGFyb3VuZCwgQ1lU SE9OX05DUF9VTlVTRUQgaW50IGJvdW5kc2NoZWNrKSB7Ci0tI2lmIENZVEhPTl9BU1NVTUVfU0FG RV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTICYmIENZVEhPTl9VU0VfVFlQ RV9TTE9UUwotLSAgICBpZiAoaXNfbGlzdCB8fCBQeUxpc3RfQ2hlY2tFeGFjdChvKSkgewotLSAg ICAgICAgUHlfc3NpemVfdCBuID0gKCF3cmFwYXJvdW5kKSA/IGkgOiAoKGxpa2VseShpID49IDAp KSA/IGkgOiBpICsgUHlMaXN0X0dFVF9TSVpFKG8pKTsKLS0gICAgICAgIGlmICgoIWJvdW5kc2No ZWNrKSB8fCBsaWtlbHkoX19QeXhfaXNfdmFsaWRfaW5kZXgobiwgUHlMaXN0X0dFVF9TSVpFKG8p KSkpIHsKLS0gICAgICAgICAgICBQeU9iamVjdCogb2xkID0gUHlMaXN0X0dFVF9JVEVNKG8sIG4p OwotLSAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKLS0gICAgICAgICAgICBQeUxpc3RfU0VUX0lU RU0obywgbiwgdik7Ci0tICAgICAgICAgICAgUHlfREVDUkVGKG9sZCk7Ci0tICAgICAgICAgICAg cmV0dXJuIDE7Ci0rc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9DeUZ1bmN0aW9uX0NhbGxBc01ldGhv ZChQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdykgewotKyAgICBQ eU9iamVjdCAqcmVzdWx0OwotKyAgICBfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpjeWZ1bmMgPSAo X19weXhfQ3lGdW5jdGlvbk9iamVjdCAqKSBmdW5jOwotKyAgICBpZiAoKGN5ZnVuYy0+ZmxhZ3Mg JiBfX1B5eF9DWUZVTkNUSU9OX0NDTEFTUykgJiYgIShjeWZ1bmMtPmZsYWdzICYgX19QeXhfQ1lG VU5DVElPTl9TVEFUSUNNRVRIT0QpKSB7Ci0rICAgICAgICBQeV9zc2l6ZV90IGFyZ2M7Ci0rICAg ICAgICBQeU9iamVjdCAqbmV3X2FyZ3M7Ci0rICAgICAgICBQeU9iamVjdCAqc2VsZjsKLSsgICAg ICAgIGFyZ2MgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpOwotKyAgICAgICAgbmV3X2FyZ3MgPSBQ eVR1cGxlX0dldFNsaWNlKGFyZ3MsIDEsIGFyZ2MpOwotKyAgICAgICAgaWYgKHVubGlrZWx5KCFu ZXdfYXJncykpCi0rICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgICAgICBzZWxmID0gUHlU dXBsZV9HZXRJdGVtKGFyZ3MsIDApOwotKyAgICAgICAgaWYgKHVubGlrZWx5KCFzZWxmKSkgewot KyAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdfYXJncyk7Ci0rICAgICAgICAgICAgcmV0dXJuIE5V TEw7Ci0gICAgICAgICB9Ci0rICAgICAgICByZXN1bHQgPSBfX1B5eF9DeUZ1bmN0aW9uX0NhbGxN ZXRob2QoZnVuYywgc2VsZiwgbmV3X2FyZ3MsIGt3KTsKLSsgICAgICAgIFB5X0RFQ1JFRihuZXdf YXJncyk7Ci0gICAgIH0gZWxzZSB7Ci0tICAgICAgICBQeVNlcXVlbmNlTWV0aG9kcyAqbSA9IFB5 X1RZUEUobyktPnRwX2FzX3NlcXVlbmNlOwotLSAgICAgICAgaWYgKGxpa2VseShtICYmIG0tPnNx X2Fzc19pdGVtKSkgewotLSAgICAgICAgICAgIGlmICh3cmFwYXJvdW5kICYmIHVubGlrZWx5KGkg PCAwKSAmJiBsaWtlbHkobS0+c3FfbGVuZ3RoKSkgewotLSAgICAgICAgICAgICAgICBQeV9zc2l6 ZV90IGwgPSBtLT5zcV9sZW5ndGgobyk7Ci0tICAgICAgICAgICAgICAgIGlmIChsaWtlbHkobCA+ PSAwKSkgewotLSAgICAgICAgICAgICAgICAgICAgaSArPSBsOwotLSAgICAgICAgICAgICAgICB9 IGVsc2UgewotLSAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVz KFB5RXhjX092ZXJmbG93RXJyb3IpKQotLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAt MTsKLS0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0tICAgICAgICAgICAgICAg IH0KLS0gICAgICAgICAgICB9Ci0tICAgICAgICAgICAgcmV0dXJuIG0tPnNxX2Fzc19pdGVtKG8s IGksIHYpOwotLSAgICAgICAgfQotKyAgICAgICAgcmVzdWx0ID0gX19QeXhfQ3lGdW5jdGlvbl9D YWxsKGZ1bmMsIGFyZ3MsIGt3KTsKLSAgICAgfQotKyAgICByZXR1cm4gcmVzdWx0OwotK30KLStz dGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X0N5RnVuY3Rpb25UeXBlX3R5cGUgPSB7Ci0rICAgIFB5 VmFyT2JqZWN0X0hFQURfSU5JVCgwLCAwKQotKyAgICAiY3l0aG9uX2Z1bmN0aW9uX29yX21ldGhv ZCIsCi0rICAgIHNpemVvZihfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0KSwKLSsgICAgMCwKLSsgICAg KGRlc3RydWN0b3IpIF9fUHl4X0N5RnVuY3Rpb25fZGVhbGxvYywKLSsgICAgMCwKLSsgICAgMCwK LSsgICAgMCwKLSsjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLSsgICAgMCwKLSAjZWxzZQotLSNp ZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkKLS0gICAgaWYgKGlzX2xpc3QgfHwgKFB5U2VxdWVu Y2VfQ2hlY2sobykgJiYgIVB5RGljdF9DaGVjayhvKSkpCi0rICAgIDAsCi0rI2VuZGlmCi0rICAg IChyZXByZnVuYykgX19QeXhfQ3lGdW5jdGlvbl9yZXByLAotKyAgICAwLAotKyAgICAwLAotKyAg ICAwLAotKyAgICAwLAotKyAgICBfX1B5eF9DeUZ1bmN0aW9uX0NhbGxBc01ldGhvZCwKLSsgICAg MCwKLSsgICAgMCwKLSsgICAgMCwKLSsgICAgMCwKLSsgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwg UHlfVFBGTEFHU19IQVZFX0dDLAotKyAgICAwLAotKyAgICAodHJhdmVyc2Vwcm9jKSBfX1B5eF9D eUZ1bmN0aW9uX3RyYXZlcnNlLAotKyAgICAoaW5xdWlyeSkgX19QeXhfQ3lGdW5jdGlvbl9jbGVh ciwKLSsgICAgMCwKLSsjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDUwMEEwCi0rICAgIG9mZnNl dG9mKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QsIGZ1bmNfd2Vha3JlZmxpc3QpLAotICNlbHNlCi0t ICAgIGlmIChpc19saXN0IHx8IFB5U2VxdWVuY2VfQ2hlY2sobykpCi0rICAgIG9mZnNldG9mKFB5 Q0Z1bmN0aW9uT2JqZWN0LCBtX3dlYWtyZWZsaXN0KSwKLSAjZW5kaWYKLS0gICAgewotLSAgICAg ICAgcmV0dXJuIFB5U2VxdWVuY2VfU2V0SXRlbShvLCBpLCB2KTsKLS0gICAgfQotKyAgICAwLAot KyAgICAwLAotKyAgICBfX3B5eF9DeUZ1bmN0aW9uX21ldGhvZHMsCi0rICAgIF9fcHl4X0N5RnVu Y3Rpb25fbWVtYmVycywKLSsgICAgX19weXhfQ3lGdW5jdGlvbl9nZXRzZXRzLAotKyAgICAwLAot KyAgICAwLAotKyAgICBfX1B5eF9DeUZ1bmN0aW9uX2Rlc2NyX2dldCwKLSsgICAgMCwKLSsgICAg b2Zmc2V0b2YoX19weXhfQ3lGdW5jdGlvbk9iamVjdCwgZnVuY19kaWN0KSwKLSsgICAgMCwKLSsg ICAgMCwKLSsgICAgMCwKLSsgICAgMCwKLSsgICAgMCwKLSsgICAgMCwKLSsgICAgMCwKLSsgICAg MCwKLSsgICAgMCwKLSsgICAgMCwKLSsgICAgMCwKLSsgICAgMCwKLSsjaWYgUFlfVkVSU0lPTl9I RVggPj0gMHgwMzA0MDBhMQotKyAgICAwLAotICNlbmRpZgotLSAgICByZXR1cm4gX19QeXhfU2V0 SXRlbUludF9HZW5lcmljKG8sIFB5SW50X0Zyb21Tc2l6ZV90KGkpLCB2KTsKLS19Ci0tCi0tLyog RmFzdFR5cGVDaGVja3MgKi8KLS0jaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9DUFlUSE9OCi0tc3Rh dGljIGludCBfX1B5eF9JbkJhc2VzKFB5VHlwZU9iamVjdCAqYSwgUHlUeXBlT2JqZWN0ICpiKSB7 Ci0tICAgIHdoaWxlIChhKSB7Ci0tICAgICAgICBhID0gYS0+dHBfYmFzZTsKLS0gICAgICAgIGlm IChhID09IGIpCi0tICAgICAgICAgICAgcmV0dXJuIDE7Ci0rI2lmIFBZX1ZFUlNJT05fSEVYID49 IDB4MDMwODAwYjEgJiYgKCFDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgfHwgUFlQWV9WRVJTSU9O X05VTSA+PSAweDA3MDMwODAwKQotKyAgICAwLAotKyNlbmRpZgotKyNpZiBQWV9WRVJTSU9OX0hF WCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAotKyAgICAwLAot KyNlbmRpZgotKyNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgJiYgUFlfVkVSU0lPTl9IRVgg Pj0gMHgwMzA5MDAwMAotKyAgICAwLAotKyNlbmRpZgotK307Ci0rc3RhdGljIGludCBfX3B5eF9D eUZ1bmN0aW9uX2luaXQodm9pZCkgewotKyAgICBfX3B5eF9DeUZ1bmN0aW9uVHlwZSA9IF9fUHl4 X0ZldGNoQ29tbW9uVHlwZSgmX19weXhfQ3lGdW5jdGlvblR5cGVfdHlwZSk7Ci0rICAgIGlmICh1 bmxpa2VseShfX3B5eF9DeUZ1bmN0aW9uVHlwZSA9PSBOVUxMKSkgewotKyAgICAgICAgcmV0dXJu IC0xOwotICAgICB9Ci0tICAgIHJldHVybiBiID09ICZQeUJhc2VPYmplY3RfVHlwZTsKLSsgICAg cmV0dXJuIDA7Ci0gfQotLXN0YXRpYyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9Jc1N1YnR5cGUo UHlUeXBlT2JqZWN0ICphLCBQeVR5cGVPYmplY3QgKmIpIHsKLS0gICAgUHlPYmplY3QgKm1ybzsK LS0gICAgaWYgKGEgPT0gYikgcmV0dXJuIDE7Ci0tICAgIG1ybyA9IGEtPnRwX21ybzsKLS0gICAg aWYgKGxpa2VseShtcm8pKSB7Ci0tICAgICAgICBQeV9zc2l6ZV90IGksIG47Ci0tICAgICAgICBu ID0gUHlUdXBsZV9HRVRfU0laRShtcm8pOwotLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkr KykgewotLSAgICAgICAgICAgIGlmIChQeVR1cGxlX0dFVF9JVEVNKG1ybywgaSkgPT0gKFB5T2Jq ZWN0ICopYikKLS0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0tICAgICAgICB9Ci0tICAgICAg ICByZXR1cm4gMDsKLStzdGF0aWMgQ1lUSE9OX0lOTElORSB2b2lkICpfX1B5eF9DeUZ1bmN0aW9u X0luaXREZWZhdWx0cyhQeU9iamVjdCAqZnVuYywgc2l6ZV90IHNpemUsIGludCBweW9iamVjdHMp IHsKLSsgICAgX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSA9IChfX3B5eF9DeUZ1bmN0aW9uT2Jq ZWN0ICopIGZ1bmM7Ci0rICAgIG0tPmRlZmF1bHRzID0gUHlPYmplY3RfTWFsbG9jKHNpemUpOwot KyAgICBpZiAodW5saWtlbHkoIW0tPmRlZmF1bHRzKSkKLSsgICAgICAgIHJldHVybiBQeUVycl9O b01lbW9yeSgpOwotKyAgICBtZW1zZXQobS0+ZGVmYXVsdHMsIDAsIHNpemUpOwotKyAgICBtLT5k ZWZhdWx0c19weW9iamVjdHMgPSBweW9iamVjdHM7Ci0rICAgIG0tPmRlZmF1bHRzX3NpemUgPSBz aXplOwotKyAgICByZXR1cm4gbS0+ZGVmYXVsdHM7Ci0rfQotK3N0YXRpYyBDWVRIT05fSU5MSU5F IHZvaWQgX19QeXhfQ3lGdW5jdGlvbl9TZXREZWZhdWx0c1R1cGxlKFB5T2JqZWN0ICpmdW5jLCBQ eU9iamVjdCAqdHVwbGUpIHsKLSsgICAgX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSA9IChfX3B5 eF9DeUZ1bmN0aW9uT2JqZWN0ICopIGZ1bmM7Ci0rICAgIG0tPmRlZmF1bHRzX3R1cGxlID0gdHVw bGU7Ci0rICAgIFB5X0lOQ1JFRih0dXBsZSk7Ci0rfQotK3N0YXRpYyBDWVRIT05fSU5MSU5FIHZv aWQgX19QeXhfQ3lGdW5jdGlvbl9TZXREZWZhdWx0c0t3RGljdChQeU9iamVjdCAqZnVuYywgUHlP YmplY3QgKmRpY3QpIHsKLSsgICAgX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSA9IChfX3B5eF9D eUZ1bmN0aW9uT2JqZWN0ICopIGZ1bmM7Ci0rICAgIG0tPmRlZmF1bHRzX2t3ZGljdCA9IGRpY3Q7 Ci0rICAgIFB5X0lOQ1JFRihkaWN0KTsKLSt9Ci0rc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBf X1B5eF9DeUZ1bmN0aW9uX1NldEFubm90YXRpb25zRGljdChQeU9iamVjdCAqZnVuYywgUHlPYmpl Y3QgKmRpY3QpIHsKLSsgICAgX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSA9IChfX3B5eF9DeUZ1 bmN0aW9uT2JqZWN0ICopIGZ1bmM7Ci0rICAgIG0tPmZ1bmNfYW5ub3RhdGlvbnMgPSBkaWN0Owot KyAgICBQeV9JTkNSRUYoZGljdCk7Ci0rfQotKwotKy8qIEN5dGhvbkZ1bmN0aW9uICovCi0rc3Rh dGljIFB5T2JqZWN0ICpfX1B5eF9DeUZ1bmN0aW9uX05ldyhQeU1ldGhvZERlZiAqbWwsIGludCBm bGFncywgUHlPYmplY3QqIHF1YWxuYW1lLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHlPYmplY3QgKmNsb3N1cmUsIFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0KiBn bG9iYWxzLCBQeU9iamVjdCogY29kZSkgewotKyAgICBQeU9iamVjdCAqb3AgPSBfX1B5eF9DeUZ1 bmN0aW9uX0luaXQoCi0rICAgICAgICBQeU9iamVjdF9HQ19OZXcoX19weXhfQ3lGdW5jdGlvbk9i amVjdCwgX19weXhfQ3lGdW5jdGlvblR5cGUpLAotKyAgICAgICAgbWwsIGZsYWdzLCBxdWFsbmFt ZSwgY2xvc3VyZSwgbW9kdWxlLCBnbG9iYWxzLCBjb2RlCi0rICAgICk7Ci0rICAgIGlmIChsaWtl bHkob3ApKSB7Ci0rICAgICAgICBQeU9iamVjdF9HQ19UcmFjayhvcCk7Ci0gICAgIH0KLS0gICAg cmV0dXJuIF9fUHl4X0luQmFzZXMoYSwgYik7Ci0rICAgIHJldHVybiBvcDsKLSB9Ci0tI2lmIFBZ X01BSk9SX1ZFUlNJT04gPT0gMgotLXN0YXRpYyBpbnQgX19QeXhfaW5uZXJfUHlFcnJfR2l2ZW5F eGNlcHRpb25NYXRjaGVzMihQeU9iamVjdCAqZXJyLCBQeU9iamVjdCogZXhjX3R5cGUxLCBQeU9i amVjdCogZXhjX3R5cGUyKSB7Ci0tICAgIFB5T2JqZWN0ICpleGNlcHRpb24sICp2YWx1ZSwgKnRi OwotLSAgICBpbnQgcmVzOwotLSAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKLS0gICAg X19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24KLS0gICAgX19QeXhfRXJyRmV0Y2goJmV4Y2VwdGlv biwgJnZhbHVlLCAmdGIpOwotLSAgICByZXMgPSBleGNfdHlwZTEgPyBQeU9iamVjdF9Jc1N1YmNs YXNzKGVyciwgZXhjX3R5cGUxKSA6IDA7Ci0tICAgIGlmICh1bmxpa2VseShyZXMgPT0gLTEpKSB7 Ci0tICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZXJyKTsKLS0gICAgICAgIHJlcyA9IDA7 Ci0rCi0rLyogUmFpc2VBcmdUdXBsZUludmFsaWQgKi8KLStzdGF0aWMgdm9pZCBfX1B5eF9SYWlz ZUFyZ3R1cGxlSW52YWxpZCgKLSsgICAgY29uc3QgY2hhciogZnVuY19uYW1lLAotKyAgICBpbnQg ZXhhY3QsCi0rICAgIFB5X3NzaXplX3QgbnVtX21pbiwKLSsgICAgUHlfc3NpemVfdCBudW1fbWF4 LAotKyAgICBQeV9zc2l6ZV90IG51bV9mb3VuZCkKLSt7Ci0rICAgIFB5X3NzaXplX3QgbnVtX2V4 cGVjdGVkOwotKyAgICBjb25zdCBjaGFyICptb3JlX29yX2xlc3M7Ci0rICAgIGlmIChudW1fZm91 bmQgPCBudW1fbWluKSB7Ci0rICAgICAgICBudW1fZXhwZWN0ZWQgPSBudW1fbWluOwotKyAgICAg ICAgbW9yZV9vcl9sZXNzID0gImF0IGxlYXN0IjsKLSsgICAgfSBlbHNlIHsKLSsgICAgICAgIG51 bV9leHBlY3RlZCA9IG51bV9tYXg7Ci0rICAgICAgICBtb3JlX29yX2xlc3MgPSAiYXQgbW9zdCI7 Ci0gICAgIH0KLS0gICAgaWYgKCFyZXMpIHsKLS0gICAgICAgIHJlcyA9IFB5T2JqZWN0X0lzU3Vi Y2xhc3MoZXJyLCBleGNfdHlwZTIpOwotLSAgICAgICAgaWYgKHVubGlrZWx5KHJlcyA9PSAtMSkp IHsKLS0gICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZXJyKTsKLS0gICAgICAgICAg ICByZXMgPSAwOwotLSAgICAgICAgfQotKyAgICBpZiAoZXhhY3QpIHsKLSsgICAgICAgIG1vcmVf b3JfbGVzcyA9ICJleGFjdGx5IjsKLSAgICAgfQotLSAgICBfX1B5eF9FcnJSZXN0b3JlKGV4Y2Vw dGlvbiwgdmFsdWUsIHRiKTsKLS0gICAgcmV0dXJuIHJlczsKLSsgICAgUHlFcnJfRm9ybWF0KFB5 RXhjX1R5cGVFcnJvciwKLSsgICAgICAgICAgICAgICAgICIlLjIwMHMoKSB0YWtlcyAlLjhzICUi IENZVEhPTl9GT1JNQVRfU1NJWkVfVCAiZCBwb3NpdGlvbmFsIGFyZ3VtZW50JS4xcyAoJSIgQ1lU SE9OX0ZPUk1BVF9TU0laRV9UICJkIGdpdmVuKSIsCi0rICAgICAgICAgICAgICAgICBmdW5jX25h bWUsIG1vcmVfb3JfbGVzcywgbnVtX2V4cGVjdGVkLAotKyAgICAgICAgICAgICAgICAgKG51bV9l eHBlY3RlZCA9PSAxKSA/ICIiIDogInMiLCBudW1fZm91bmQpOwotIH0KLS0jZWxzZQotLXN0YXRp YyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9pbm5lcl9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNo ZXMyKFB5T2JqZWN0ICplcnIsIFB5T2JqZWN0KiBleGNfdHlwZTEsIFB5T2JqZWN0ICpleGNfdHlw ZTIpIHsKLS0gICAgaW50IHJlcyA9IGV4Y190eXBlMSA/IF9fUHl4X0lzU3VidHlwZSgoUHlUeXBl T2JqZWN0KillcnIsIChQeVR5cGVPYmplY3QqKWV4Y190eXBlMSkgOiAwOwotLSAgICBpZiAoIXJl cykgewotLSAgICAgICAgcmVzID0gX19QeXhfSXNTdWJ0eXBlKChQeVR5cGVPYmplY3QqKWVyciwg KFB5VHlwZU9iamVjdCopZXhjX3R5cGUyKTsKLS0gICAgfQotLSAgICByZXR1cm4gcmVzOwotKwot Ky8qIFJhaXNlRG91YmxlS2V5d29yZHMgKi8KLStzdGF0aWMgdm9pZCBfX1B5eF9SYWlzZURvdWJs ZUtleXdvcmRzRXJyb3IoCi0rICAgIGNvbnN0IGNoYXIqIGZ1bmNfbmFtZSwKLSsgICAgUHlPYmpl Y3QqIGt3X25hbWUpCi0rewotKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotKyAg ICAgICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotKyAgICAgICAgIiVzKCkgZ290IG11bHRp cGxlIHZhbHVlcyBmb3Iga2V5d29yZCBhcmd1bWVudCAnJVUnIiwgZnVuY19uYW1lLCBrd19uYW1l KTsKLSsgICAgICAgICNlbHNlCi0rICAgICAgICAiJXMoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZv ciBrZXl3b3JkIGFyZ3VtZW50ICclcyciLCBmdW5jX25hbWUsCi0rICAgICAgICBQeVN0cmluZ19B c1N0cmluZyhrd19uYW1lKSk7Ci0rICAgICAgICAjZW5kaWYKLSB9Ci0tI2VuZGlmCi0tc3RhdGlj IGludCBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXNUdXBsZShQeU9iamVjdCAqZXhj X3R5cGUsIFB5T2JqZWN0ICp0dXBsZSkgewotLSAgICBQeV9zc2l6ZV90IGksIG47Ci0tICAgIGFz c2VydChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKGV4Y190eXBlKSk7Ci0tICAgIG4gPSBQeVR1cGxl X0dFVF9TSVpFKHR1cGxlKTsKLS0jaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0tICAgIGZvciAo aT0wOyBpPG47IGkrKykgewotLSAgICAgICAgaWYgKGV4Y190eXBlID09IFB5VHVwbGVfR0VUX0lU RU0odHVwbGUsIGkpKSByZXR1cm4gMTsKLS0gICAgfQotLSNlbmRpZgotLSAgICBmb3IgKGk9MDsg aTxuOyBpKyspIHsKLS0gICAgICAgIFB5T2JqZWN0ICp0ID0gUHlUdXBsZV9HRVRfSVRFTSh0dXBs ZSwgaSk7Ci0rCi0rLyogUGFyc2VLZXl3b3JkcyAqLwotK3N0YXRpYyBpbnQgX19QeXhfUGFyc2VP cHRpb25hbEtleXdvcmRzKAotKyAgICBQeU9iamVjdCAqa3dkcywKLSsgICAgUHlPYmplY3QgKiph cmduYW1lc1tdLAotKyAgICBQeU9iamVjdCAqa3dkczIsCi0rICAgIFB5T2JqZWN0ICp2YWx1ZXNb XSwKLSsgICAgUHlfc3NpemVfdCBudW1fcG9zX2FyZ3MsCi0rICAgIGNvbnN0IGNoYXIqIGZ1bmN0 aW9uX25hbWUpCi0rewotKyAgICBQeU9iamVjdCAqa2V5ID0gMCwgKnZhbHVlID0gMDsKLSsgICAg UHlfc3NpemVfdCBwb3MgPSAwOwotKyAgICBQeU9iamVjdCoqKiBuYW1lOwotKyAgICBQeU9iamVj dCoqKiBmaXJzdF9rd19hcmcgPSBhcmduYW1lcyArIG51bV9wb3NfYXJnczsKLSsgICAgd2hpbGUg KFB5RGljdF9OZXh0KGt3ZHMsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKLSsgICAgICAgIG5hbWUg PSBmaXJzdF9rd19hcmc7Ci0rICAgICAgICB3aGlsZSAoKm5hbWUgJiYgKCoqbmFtZSAhPSBrZXkp KSBuYW1lKys7Ci0rICAgICAgICBpZiAoKm5hbWUpIHsKLSsgICAgICAgICAgICB2YWx1ZXNbbmFt ZS1hcmduYW1lc10gPSB2YWx1ZTsKLSsgICAgICAgICAgICBjb250aW51ZTsKLSsgICAgICAgIH0K LSsgICAgICAgIG5hbWUgPSBmaXJzdF9rd19hcmc7Ci0gICAgICAgICAjaWYgUFlfTUFKT1JfVkVS U0lPTiA8IDMKLS0gICAgICAgIGlmIChsaWtlbHkoZXhjX3R5cGUgPT0gdCkpIHJldHVybiAxOwot KyAgICAgICAgaWYgKGxpa2VseShQeVN0cmluZ19DaGVjayhrZXkpKSkgewotKyAgICAgICAgICAg IHdoaWxlICgqbmFtZSkgewotKyAgICAgICAgICAgICAgICBpZiAoKENZVEhPTl9DT01QSUxJTkdf SU5fUFlQWSB8fCBQeVN0cmluZ19HRVRfU0laRSgqKm5hbWUpID09IFB5U3RyaW5nX0dFVF9TSVpF KGtleSkpCi0rICAgICAgICAgICAgICAgICAgICAgICAgJiYgX1B5U3RyaW5nX0VxKCoqbmFtZSwg a2V5KSkgewotKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzW25hbWUtYXJnbmFtZXNdID0gdmFs dWU7Ci0rICAgICAgICAgICAgICAgICAgICBicmVhazsKLSsgICAgICAgICAgICAgICAgfQotKyAg ICAgICAgICAgICAgICBuYW1lKys7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICAgIGlmICgq bmFtZSkgY29udGludWU7Ci0rICAgICAgICAgICAgZWxzZSB7Ci0rICAgICAgICAgICAgICAgIFB5 T2JqZWN0KioqIGFyZ25hbWUgPSBhcmduYW1lczsKLSsgICAgICAgICAgICAgICAgd2hpbGUgKGFy Z25hbWUgIT0gZmlyc3Rfa3dfYXJnKSB7Ci0rICAgICAgICAgICAgICAgICAgICBpZiAoKCoqYXJn bmFtZSA9PSBrZXkpIHx8ICgKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENZVEhPTl9D T01QSUxJTkdfSU5fUFlQWSB8fCBQeVN0cmluZ19HRVRfU0laRSgqKmFyZ25hbWUpID09IFB5U3Ry aW5nX0dFVF9TSVpFKGtleSkpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfUHlT dHJpbmdfRXEoKiphcmduYW1lLCBrZXkpKSkgewotKyAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gYXJnX3Bhc3NlZF90d2ljZTsKLSsgICAgICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAg ICAgICAgICAgIGFyZ25hbWUrKzsKLSsgICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgIH0K LSsgICAgICAgIH0gZWxzZQotICAgICAgICAgI2VuZGlmCi0tICAgICAgICBpZiAobGlrZWx5KFB5 RXhjZXB0aW9uQ2xhc3NfQ2hlY2sodCkpKSB7Ci0tICAgICAgICAgICAgaWYgKF9fUHl4X2lubmVy X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlczIoZXhjX3R5cGUsIE5VTEwsIHQpKSByZXR1cm4g MTsKLSsgICAgICAgIGlmIChsaWtlbHkoUHlVbmljb2RlX0NoZWNrKGtleSkpKSB7Ci0rICAgICAg ICAgICAgd2hpbGUgKCpuYW1lKSB7Ci0rICAgICAgICAgICAgICAgIGludCBjbXAgPSAoKipuYW1l ID09IGtleSkgPyAwIDoKLSsgICAgICAgICAgICAgICAgI2lmICFDWVRIT05fQ09NUElMSU5HX0lO X1BZUFkgJiYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0rICAgICAgICAgICAgICAgICAgICAoX19Q eXhfUHlVbmljb2RlX0dFVF9MRU5HVEgoKipuYW1lKSAhPSBfX1B5eF9QeVVuaWNvZGVfR0VUX0xF TkdUSChrZXkpKSA/IDEgOgotKyAgICAgICAgICAgICAgICAjZW5kaWYKLSsgICAgICAgICAgICAg ICAgICAgIFB5VW5pY29kZV9Db21wYXJlKCoqbmFtZSwga2V5KTsKLSsgICAgICAgICAgICAgICAg aWYgKGNtcCA8IDAgJiYgdW5saWtlbHkoUHlFcnJfT2NjdXJyZWQoKSkpIGdvdG8gYmFkOwotKyAg ICAgICAgICAgICAgICBpZiAoY21wID09IDApIHsKLSsgICAgICAgICAgICAgICAgICAgIHZhbHVl c1tuYW1lLWFyZ25hbWVzXSA9IHZhbHVlOwotKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0r ICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICAgICAgbmFtZSsrOwotKyAgICAgICAgICAg IH0KLSsgICAgICAgICAgICBpZiAoKm5hbWUpIGNvbnRpbnVlOwotKyAgICAgICAgICAgIGVsc2Ug ewotKyAgICAgICAgICAgICAgICBQeU9iamVjdCoqKiBhcmduYW1lID0gYXJnbmFtZXM7Ci0rICAg ICAgICAgICAgICAgIHdoaWxlIChhcmduYW1lICE9IGZpcnN0X2t3X2FyZykgewotKyAgICAgICAg ICAgICAgICAgICAgaW50IGNtcCA9ICgqKmFyZ25hbWUgPT0ga2V5KSA/IDAgOgotKyAgICAgICAg ICAgICAgICAgICAgI2lmICFDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgJiYgUFlfTUFKT1JfVkVS U0lPTiA+PSAzCi0rICAgICAgICAgICAgICAgICAgICAgICAgKF9fUHl4X1B5VW5pY29kZV9HRVRf TEVOR1RIKCoqYXJnbmFtZSkgIT0gX19QeXhfUHlVbmljb2RlX0dFVF9MRU5HVEgoa2V5KSkgPyAx IDoKLSsgICAgICAgICAgICAgICAgICAgICNlbmRpZgotKyAgICAgICAgICAgICAgICAgICAgICAg IFB5VW5pY29kZV9Db21wYXJlKCoqYXJnbmFtZSwga2V5KTsKLSsgICAgICAgICAgICAgICAgICAg IGlmIChjbXAgPCAwICYmIHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBnb3RvIGJhZDsKLSsg ICAgICAgICAgICAgICAgICAgIGlmIChjbXAgPT0gMCkgZ290byBhcmdfcGFzc2VkX3R3aWNlOwot KyAgICAgICAgICAgICAgICAgICAgYXJnbmFtZSsrOwotKyAgICAgICAgICAgICAgICB9Ci0rICAg ICAgICAgICAgfQotKyAgICAgICAgfSBlbHNlCi0rICAgICAgICAgICAgZ290byBpbnZhbGlkX2tl eXdvcmRfdHlwZTsKLSsgICAgICAgIGlmIChrd2RzMikgewotKyAgICAgICAgICAgIGlmICh1bmxp a2VseShQeURpY3RfU2V0SXRlbShrd2RzMiwga2V5LCB2YWx1ZSkpKSBnb3RvIGJhZDsKLSAgICAg ICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgZ290byBpbnZhbGlkX2tleXdvcmQ7Ci0gICAgICAg ICB9Ci0gICAgIH0KLSAgICAgcmV0dXJuIDA7Ci0rYXJnX3Bhc3NlZF90d2ljZToKLSsgICAgX19Q eXhfUmFpc2VEb3VibGVLZXl3b3Jkc0Vycm9yKGZ1bmN0aW9uX25hbWUsIGtleSk7Ci0rICAgIGdv dG8gYmFkOwotK2ludmFsaWRfa2V5d29yZF90eXBlOgotKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNf VHlwZUVycm9yLAotKyAgICAgICAgIiUuMjAwcygpIGtleXdvcmRzIG11c3QgYmUgc3RyaW5ncyIs IGZ1bmN0aW9uX25hbWUpOwotKyAgICBnb3RvIGJhZDsKLStpbnZhbGlkX2tleXdvcmQ6Ci0rICAg IFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0rICAgICNpZiBQWV9NQUpPUl9WRVJTSU9O IDwgMwotKyAgICAgICAgIiUuMjAwcygpIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQgYXJndW1l bnQgJyUuMjAwcyciLAotKyAgICAgICAgZnVuY3Rpb25fbmFtZSwgUHlTdHJpbmdfQXNTdHJpbmco a2V5KSk7Ci0rICAgICNlbHNlCi0rICAgICAgICAiJXMoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3 b3JkIGFyZ3VtZW50ICclVSciLAotKyAgICAgICAgZnVuY3Rpb25fbmFtZSwga2V5KTsKLSsgICAg I2VuZGlmCi0rYmFkOgotKyAgICByZXR1cm4gLTE7Ci0gfQotLXN0YXRpYyBDWVRIT05fSU5MSU5F IGludCBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoUHlPYmplY3QgKmVyciwgUHlP YmplY3QqIGV4Y190eXBlKSB7Ci0tICAgIGlmIChsaWtlbHkoZXJyID09IGV4Y190eXBlKSkgcmV0 dXJuIDE7Ci0tICAgIGlmIChsaWtlbHkoUHlFeGNlcHRpb25DbGFzc19DaGVjayhlcnIpKSkgewot LSAgICAgICAgaWYgKGxpa2VseShQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKGV4Y190eXBlKSkpIHsK LS0gICAgICAgICAgICByZXR1cm4gX19QeXhfaW5uZXJfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRj aGVzMihlcnIsIE5VTEwsIGV4Y190eXBlKTsKLS0gICAgICAgIH0gZWxzZSBpZiAobGlrZWx5KFB5 VHVwbGVfQ2hlY2soZXhjX3R5cGUpKSkgewotLSAgICAgICAgICAgIHJldHVybiBfX1B5eF9QeUVy cl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXNUdXBsZShlcnIsIGV4Y190eXBlKTsKLS0gICAgICAgIH0g ZWxzZSB7Ci0tICAgICAgICB9Ci0tICAgIH0KLS0gICAgcmV0dXJuIFB5RXJyX0dpdmVuRXhjZXB0 aW9uTWF0Y2hlcyhlcnIsIGV4Y190eXBlKTsKLSsKLSsvKiBQeU9iamVjdFNldEF0dHJTdHIgKi8K LSsjaWYgQ1lUSE9OX1VTRV9UWVBFX1NMT1RTCi0rc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9f UHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqIGF0dHJfbmFt ZSwgUHlPYmplY3QqIHZhbHVlKSB7Ci0rICAgIFB5VHlwZU9iamVjdCogdHAgPSBQeV9UWVBFKG9i aik7Ci0rICAgIGlmIChsaWtlbHkodHAtPnRwX3NldGF0dHJvKSkKLSsgICAgICAgIHJldHVybiB0 cC0+dHBfc2V0YXR0cm8ob2JqLCBhdHRyX25hbWUsIHZhbHVlKTsKLSsjaWYgUFlfTUFKT1JfVkVS U0lPTiA8IDMKLSsgICAgaWYgKGxpa2VseSh0cC0+dHBfc2V0YXR0cikpCi0rICAgICAgICByZXR1 cm4gdHAtPnRwX3NldGF0dHIob2JqLCBQeVN0cmluZ19BU19TVFJJTkcoYXR0cl9uYW1lKSwgdmFs dWUpOwotKyNlbmRpZgotKyAgICByZXR1cm4gUHlPYmplY3RfU2V0QXR0cihvYmosIGF0dHJfbmFt ZSwgdmFsdWUpOwotIH0KLS1zdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQgX19QeXhfUHlFcnJfR2l2 ZW5FeGNlcHRpb25NYXRjaGVzMihQeU9iamVjdCAqZXJyLCBQeU9iamVjdCAqZXhjX3R5cGUxLCBQ eU9iamVjdCAqZXhjX3R5cGUyKSB7Ci0tICAgIGFzc2VydChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNr KGV4Y190eXBlMSkpOwotLSAgICBhc3NlcnQoUHlFeGNlcHRpb25DbGFzc19DaGVjayhleGNfdHlw ZTIpKTsKLS0gICAgaWYgKGxpa2VseShlcnIgPT0gZXhjX3R5cGUxIHx8IGVyciA9PSBleGNfdHlw ZTIpKSByZXR1cm4gMTsKLS0gICAgaWYgKGxpa2VseShQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKGVy cikpKSB7Ci0tICAgICAgICByZXR1cm4gX19QeXhfaW5uZXJfUHlFcnJfR2l2ZW5FeGNlcHRpb25N YXRjaGVzMihlcnIsIGV4Y190eXBlMSwgZXhjX3R5cGUyKTsKLSsjZW5kaWYKLSsKLSsvKiBQeUlu dEJpbm9wICovCi0rI2lmICFDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkKLStzdGF0aWMgUHlPYmpl Y3QqIF9fUHl4X1B5SW50X0FkZE9iakMoUHlPYmplY3QgKm9wMSwgUHlPYmplY3QgKm9wMiwgQ1lU SE9OX1VOVVNFRCBsb25nIGludHZhbCwgaW50IGlucGxhY2UsIGludCB6ZXJvZGl2aXNpb25fY2hl Y2spIHsKLSsgICAgKHZvaWQpaW5wbGFjZTsKLSsgICAgKHZvaWQpemVyb2RpdmlzaW9uX2NoZWNr OwotKyAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLSsgICAgaWYgKGxpa2VseShQeUludF9D aGVja0V4YWN0KG9wMSkpKSB7Ci0rICAgICAgICBjb25zdCBsb25nIGIgPSBpbnR2YWw7Ci0rICAg ICAgICBsb25nIHg7Ci0rICAgICAgICBsb25nIGEgPSBQeUludF9BU19MT05HKG9wMSk7Ci0rICAg ICAgICAgICAgeCA9IChsb25nKSgodW5zaWduZWQgbG9uZylhICsgYik7Ci0rICAgICAgICAgICAg aWYgKGxpa2VseSgoeF5hKSA+PSAwIHx8ICh4XmIpID49IDApKQotKyAgICAgICAgICAgICAgICBy ZXR1cm4gUHlJbnRfRnJvbUxvbmcoeCk7Ci0rICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19UeXBl LnRwX2FzX251bWJlci0+bmJfYWRkKG9wMSwgb3AyKTsKLSAgICAgfQotLSAgICByZXR1cm4gKFB5 RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyhlcnIsIGV4Y190eXBlMSkgfHwgUHlFcnJfR2l2ZW5F eGNlcHRpb25NYXRjaGVzKGVyciwgZXhjX3R5cGUyKSk7Ci0tfQotKyAgICAjZW5kaWYKLSsgICAg I2lmIENZVEhPTl9VU0VfUFlMT05HX0lOVEVSTkFMUwotKyAgICBpZiAobGlrZWx5KFB5TG9uZ19D aGVja0V4YWN0KG9wMSkpKSB7Ci0rICAgICAgICBjb25zdCBsb25nIGIgPSBpbnR2YWw7Ci0rICAg ICAgICBsb25nIGEsIHg7Ci0rI2lmZGVmIEhBVkVfTE9OR19MT05HCi0rICAgICAgICBjb25zdCBQ WV9MT05HX0xPTkcgbGxiID0gaW50dmFsOwotKyAgICAgICAgUFlfTE9OR19MT05HIGxsYSwgbGx4 OwotKyNlbmRpZgotKyAgICAgICAgY29uc3QgZGlnaXQqIGRpZ2l0cyA9ICgoUHlMb25nT2JqZWN0 KilvcDEpLT5vYl9kaWdpdDsKLSsgICAgICAgIGNvbnN0IFB5X3NzaXplX3Qgc2l6ZSA9IFB5X1NJ WkUob3AxKTsKLSsgICAgICAgIGlmIChsaWtlbHkoX19QeXhfc3N0X2FicyhzaXplKSA8PSAxKSkg ewotKyAgICAgICAgICAgIGEgPSBsaWtlbHkoc2l6ZSkgPyBkaWdpdHNbMF0gOiAwOwotKyAgICAg ICAgICAgIGlmIChzaXplID09IC0xKSBhID0gLWE7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAg ICAgICAgIHN3aXRjaCAoc2l6ZSkgewotKyAgICAgICAgICAgICAgICBjYXNlIC0yOgotKyAgICAg ICAgICAgICAgICAgICAgaWYgKDggKiBzaXplb2YobG9uZykgLSAxID4gMiAqIFB5TG9uZ19TSElG VCkgewotKyAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAtKGxvbmcpICgoKCgodW5zaWduZWQg bG9uZylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNb MF0pKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSsjaWZkZWYgSEFWRV9MT05H X0xPTkcKLSsgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05H X0xPTkcpIC0gMSA+IDIgKiBQeUxvbmdfU0hJRlQpIHsKLSsgICAgICAgICAgICAgICAgICAgICAg ICBsbGEgPSAtKFBZX0xPTkdfTE9ORykgKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRz WzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMF0p KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGxvbmdfbG9uZzsKLSsjZW5kaWYKLSsg ICAgICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICAgICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKLSsgICAgICAgICAgICAgICAgY2FzZSAyOgotKyAgICAgICAgICAgICAgICAgICAgaWYg KDggKiBzaXplb2YobG9uZykgLSAxID4gMiAqIFB5TG9uZ19TSElGVCkgewotKyAgICAgICAgICAg ICAgICAgICAgICAgIGEgPSAobG9uZykgKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwg UHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkpOwotKyAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotKyNpZmRlZiBIQVZFX0xPTkdfTE9ORwotKyAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gMiAqIFB5 TG9uZ19TSElGVCkgewotKyAgICAgICAgICAgICAgICAgICAgICAgIGxsYSA9IChQWV9MT05HX0xP TkcpICgoKCgodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZU KSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7Ci0rICAgICAgICAgICAgICAg ICAgICAgICAgZ290byBsb25nX2xvbmc7Ci0rI2VuZGlmCi0rICAgICAgICAgICAgICAgICAgICB9 Ci0rICAgICAgICAgICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICAgICAg ICAgIGNhc2UgLTM6Ci0rICAgICAgICAgICAgICAgICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAt IDEgPiAzICogUHlMb25nX1NISUZUKSB7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgYSA9IC0o bG9uZykgKCgoKCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwg KHVuc2lnbmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxv bmcpZGlnaXRzWzBdKSk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0rI2lmZGVm IEhBVkVfTE9OR19MT05HCi0rICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBzaXpl b2YoUFlfTE9OR19MT05HKSAtIDEgPiAzICogUHlMb25nX1NISUZUKSB7Ci0rICAgICAgICAgICAg ICAgICAgICAgICAgbGxhID0gLShQWV9MT05HX0xPTkcpICgoKCgoKCh1bnNpZ25lZCBQWV9MT05H X0xPTkcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9O RylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRp Z2l0c1swXSkpOwotKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOwotKyNl bmRpZgotKyAgICAgICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgICAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOwotKyAgICAgICAgICAgICAgICBjYXNlIDM6Ci0rICAgICAgICAgICAgICAg ICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAtIDEgPiAzICogUHlMb25nX1NISUZUKSB7Ci0rICAg ICAgICAgICAgICAgICAgICAgICAgYSA9IChsb25nKSAoKCgoKCgodW5zaWduZWQgbG9uZylkaWdp dHNbMl0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMV0pIDw8IFB5 TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKLSsgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSsjaWZkZWYgSEFWRV9MT05HX0xPTkcKLSsgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0gMSA+IDMgKiBQeUxv bmdfU0hJRlQpIHsKLSsgICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAoUFlfTE9OR19MT05H KSAoKCgoKCgodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZU KSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwg KHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsKLSsgICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIGxvbmdfbG9uZzsKLSsjZW5kaWYKLSsgICAgICAgICAgICAgICAgICAgIH0KLSsg ICAgICAgICAgICAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgICAgICAgICAg Y2FzZSAtNDoKLSsgICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+ IDQgKiBQeUxvbmdfU0hJRlQpIHsKLSsgICAgICAgICAgICAgICAgICAgICAgICBhID0gLShsb25n KSAoKCgoKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1 bnNpZ25lZCBsb25nKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25n KWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkp OwotKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotKyNpZmRlZiBIQVZFX0xPTkdfTE9O RwotKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9O RykgLSAxID4gNCAqIFB5TG9uZ19TSElGVCkgewotKyAgICAgICAgICAgICAgICAgICAgICAgIGxs YSA9IC0oUFlfTE9OR19MT05HKSAoKCgoKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRz WzNdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMl0p IDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwg UHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7Ci0rICAg ICAgICAgICAgICAgICAgICAgICAgZ290byBsb25nX2xvbmc7Ci0gI2VuZGlmCi0tCi0tLyogRXh0 VHlwZVRlc3QgKi8KLS1zdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQgX19QeXhfVHlwZVRlc3QoUHlP YmplY3QgKm9iaiwgUHlUeXBlT2JqZWN0ICp0eXBlKSB7Ci0tICAgIGlmICh1bmxpa2VseSghdHlw ZSkpIHsKLS0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgIk1pc3Np bmcgdHlwZSBvYmplY3QiKTsKLS0gICAgICAgIHJldHVybiAwOwotLSAgICB9Ci0tICAgIGlmIChs aWtlbHkoX19QeXhfVHlwZUNoZWNrKG9iaiwgdHlwZSkpKQotLSAgICAgICAgcmV0dXJuIDE7Ci0t ICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCAlLjIwMHMg dG8gJS4yMDBzIiwKLS0gICAgICAgICAgICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSwgdHlw ZS0+dHBfbmFtZSk7Ci0tICAgIHJldHVybiAwOwotLX0KLS0KLS0vKiBEaWN0R2V0SXRlbSAqLwot LSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMgJiYgIUNZVEhPTl9DT01QSUxJTkdfSU5fUFlQWQot LXN0YXRpYyBQeU9iamVjdCAqX19QeXhfUHlEaWN0X0dldEl0ZW0oUHlPYmplY3QgKmQsIFB5T2Jq ZWN0KiBrZXkpIHsKLS0gICAgUHlPYmplY3QgKnZhbHVlOwotLSAgICB2YWx1ZSA9IFB5RGljdF9H ZXRJdGVtV2l0aEVycm9yKGQsIGtleSk7Ci0tICAgIGlmICh1bmxpa2VseSghdmFsdWUpKSB7Ci0t ICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKLS0gICAgICAgICAgICBpZiAodW5saWtl bHkoUHlUdXBsZV9DaGVjayhrZXkpKSkgewotLSAgICAgICAgICAgICAgICBQeU9iamVjdCogYXJn cyA9IFB5VHVwbGVfUGFjaygxLCBrZXkpOwotLSAgICAgICAgICAgICAgICBpZiAobGlrZWx5KGFy Z3MpKSB7Ci0tICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJy b3IsIGFyZ3MpOwotLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOwotLSAgICAg ICAgICAgICAgICB9Ci0tICAgICAgICAgICAgfSBlbHNlIHsKLS0gICAgICAgICAgICAgICAgUHlF cnJfU2V0T2JqZWN0KFB5RXhjX0tleUVycm9yLCBrZXkpOwotKyAgICAgICAgICAgICAgICAgICAg fQotKyAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAgICAg ICAgICBjYXNlIDQ6Ci0rICAgICAgICAgICAgICAgICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAt IDEgPiA0ICogUHlMb25nX1NISUZUKSB7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChs b25nKSAoKCgoKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8 ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBs b25nKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1sw XSkpOwotKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotKyNpZmRlZiBIQVZFX0xPTkdf TE9ORwotKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdf TE9ORykgLSAxID4gNCAqIFB5TG9uZ19TSElGVCkgewotKyAgICAgICAgICAgICAgICAgICAgICAg IGxsYSA9IChQWV9MT05HX0xPTkcpICgoKCgoKCgoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdp dHNbM10pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sy XSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8 PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsKLSsg ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGxvbmdfbG9uZzsKLSsjZW5kaWYKLSsgICAgICAg ICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsK LSsgICAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIFB5TG9uZ19UeXBlLnRwX2FzX251bWJl ci0+bmJfYWRkKG9wMSwgb3AyKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0tICAgICAg ICByZXR1cm4gTlVMTDsKLS0gICAgfQotLSAgICBQeV9JTkNSRUYodmFsdWUpOwotLSAgICByZXR1 cm4gdmFsdWU7Ci0tfQotKyAgICAgICAgICAgICAgICB4ID0gYSArIGI7Ci0rICAgICAgICAgICAg cmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh4KTsKLSsjaWZkZWYgSEFWRV9MT05HX0xPTkcKLSsgICAg ICAgIGxvbmdfbG9uZzoKLSsgICAgICAgICAgICAgICAgbGx4ID0gbGxhICsgbGxiOwotKyAgICAg ICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKGxseCk7Ci0gI2VuZGlmCi0tCi0tLyog UmFpc2VUb29NYW55VmFsdWVzVG9VbnBhY2sgKi8KLS1zdGF0aWMgQ1lUSE9OX0lOTElORSB2b2lk IF9fUHl4X1JhaXNlVG9vTWFueVZhbHVlc0Vycm9yKFB5X3NzaXplX3QgZXhwZWN0ZWQpIHsKLS0g ICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0tICAgICAgICAgICAgICAgICAidG9v IG1hbnkgdmFsdWVzIHRvIHVucGFjayAoZXhwZWN0ZWQgJSIgQ1lUSE9OX0ZPUk1BVF9TU0laRV9U ICJkKSIsIGV4cGVjdGVkKTsKLS19Ci0tCi0tLyogUmFpc2VOZWVkTW9yZVZhbHVlc1RvVW5wYWNr ICovCi0tc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9SYWlzZU5lZWRNb3JlVmFsdWVz RXJyb3IoUHlfc3NpemVfdCBpbmRleCkgewotLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVF cnJvciwKLS0gICAgICAgICAgICAgICAgICJuZWVkIG1vcmUgdGhhbiAlIiBDWVRIT05fRk9STUFU X1NTSVpFX1QgImQgdmFsdWUlLjFzIHRvIHVucGFjayIsCi0tICAgICAgICAgICAgICAgICBpbmRl eCwgKGluZGV4ID09IDEpID8gIiIgOiAicyIpOwotLX0KLS0KLS0vKiBJdGVyRmluaXNoICovCi0t c3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4X0l0ZXJGaW5pc2godm9pZCkgewotLSNpZiBD WVRIT05fRkFTVF9USFJFQURfU1RBVEUKLS0gICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gX19Q eXhfUHlUaHJlYWRTdGF0ZV9DdXJyZW50OwotLSAgICBQeU9iamVjdCogZXhjX3R5cGUgPSB0c3Rh dGUtPmN1cmV4Y190eXBlOwotLSAgICBpZiAodW5saWtlbHkoZXhjX3R5cGUpKSB7Ci0tICAgICAg ICBpZiAobGlrZWx5KF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyhleGNfdHlwZSwg UHlFeGNfU3RvcEl0ZXJhdGlvbikpKSB7Ci0tICAgICAgICAgICAgUHlPYmplY3QgKmV4Y192YWx1 ZSwgKmV4Y190YjsKLS0gICAgICAgICAgICBleGNfdmFsdWUgPSB0c3RhdGUtPmN1cmV4Y192YWx1 ZTsKLS0gICAgICAgICAgICBleGNfdGIgPSB0c3RhdGUtPmN1cmV4Y190cmFjZWJhY2s7Ci0tICAg ICAgICAgICAgdHN0YXRlLT5jdXJleGNfdHlwZSA9IDA7Ci0tICAgICAgICAgICAgdHN0YXRlLT5j dXJleGNfdmFsdWUgPSAwOwotLSAgICAgICAgICAgIHRzdGF0ZS0+Y3VyZXhjX3RyYWNlYmFjayA9 IDA7Ci0tICAgICAgICAgICAgUHlfREVDUkVGKGV4Y190eXBlKTsKLS0gICAgICAgICAgICBQeV9Y REVDUkVGKGV4Y192YWx1ZSk7Ci0tICAgICAgICAgICAgUHlfWERFQ1JFRihleGNfdGIpOwotLSAg ICAgICAgICAgIHJldHVybiAwOwotLSAgICAgICAgfSBlbHNlIHsKLS0gICAgICAgICAgICByZXR1 cm4gLTE7Ci0tICAgICAgICB9Ci0tICAgIH0KLS0gICAgcmV0dXJuIDA7Ci0tI2Vsc2UKLS0gICAg aWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSB7Ci0tICAgICAgICBpZiAobGlrZWx5KFB5 RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfU3RvcEl0ZXJhdGlvbikpKSB7Ci0tICAgICAgICAg ICAgUHlFcnJfQ2xlYXIoKTsKLS0gICAgICAgICAgICByZXR1cm4gMDsKLS0gICAgICAgIH0gZWxz ZSB7Ci0tICAgICAgICAgICAgcmV0dXJuIC0xOwotLSAgICAgICAgfQotKyAgICAgICAgCi0rICAg ICAgICAKLSAgICAgfQotLSAgICByZXR1cm4gMDsKLS0jZW5kaWYKLS19Ci0tCi0tLyogVW5wYWNr SXRlbUVuZENoZWNrICovCi0tc3RhdGljIGludCBfX1B5eF9JdGVybmV4dFVucGFja0VuZENoZWNr KFB5T2JqZWN0ICpyZXR2YWwsIFB5X3NzaXplX3QgZXhwZWN0ZWQpIHsKLS0gICAgaWYgKHVubGlr ZWx5KHJldHZhbCkpIHsKLS0gICAgICAgIFB5X0RFQ1JFRihyZXR2YWwpOwotLSAgICAgICAgX19Q eXhfUmFpc2VUb29NYW55VmFsdWVzRXJyb3IoZXhwZWN0ZWQpOwotLSAgICAgICAgcmV0dXJuIC0x OwotLSAgICB9IGVsc2UgewotLSAgICAgICAgcmV0dXJuIF9fUHl4X0l0ZXJGaW5pc2goKTsKLSsg ICAgI2VuZGlmCi0rICAgIGlmIChQeUZsb2F0X0NoZWNrRXhhY3Qob3AxKSkgewotKyAgICAgICAg Y29uc3QgbG9uZyBiID0gaW50dmFsOwotKyAgICAgICAgZG91YmxlIGEgPSBQeUZsb2F0X0FTX0RP VUJMRShvcDEpOwotKyAgICAgICAgICAgIGRvdWJsZSByZXN1bHQ7Ci0rICAgICAgICAgICAgUHlG UEVfU1RBUlRfUFJPVEVDVCgiYWRkIiwgcmV0dXJuIE5VTEwpCi0rICAgICAgICAgICAgcmVzdWx0 ID0gKChkb3VibGUpYSkgKyAoZG91YmxlKWI7Ci0rICAgICAgICAgICAgUHlGUEVfRU5EX1BST1RF Q1QocmVzdWx0KQotKyAgICAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUocmVzdWx0 KTsKLSAgICAgfQotLSAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIChpbnBsYWNlID8gUHlOdW1i ZXJfSW5QbGFjZUFkZCA6IFB5TnVtYmVyX0FkZCkob3AxLCBvcDIpOwotIH0KLSsjZW5kaWYKLSAK LS0vKiBJbXBvcnQgKi8KLS1zdGF0aWMgUHlPYmplY3QgKl9fUHl4X0ltcG9ydChQeU9iamVjdCAq bmFtZSwgUHlPYmplY3QgKmZyb21fbGlzdCwgaW50IGxldmVsKSB7Ci0tICAgIFB5T2JqZWN0ICpl bXB0eV9saXN0ID0gMDsKLS0gICAgUHlPYmplY3QgKm1vZHVsZSA9IDA7Ci0tICAgIFB5T2JqZWN0 ICpnbG9iYWxfZGljdCA9IDA7Ci0tICAgIFB5T2JqZWN0ICplbXB0eV9kaWN0ID0gMDsKLS0gICAg UHlPYmplY3QgKmxpc3Q7Ci0rLyogUHlJbnRCaW5vcCAqLwotKyNpZiAhQ1lUSE9OX0NPTVBJTElO R19JTl9QWVBZCi0rc3RhdGljIFB5T2JqZWN0KiBfX1B5eF9QeUludF9TdWJ0cmFjdE9iakMoUHlP YmplY3QgKm9wMSwgUHlPYmplY3QgKm9wMiwgQ1lUSE9OX1VOVVNFRCBsb25nIGludHZhbCwgaW50 IGlucGxhY2UsIGludCB6ZXJvZGl2aXNpb25fY2hlY2spIHsKLSsgICAgKHZvaWQpaW5wbGFjZTsK LSsgICAgKHZvaWQpemVyb2RpdmlzaW9uX2NoZWNrOwotICAgICAjaWYgUFlfTUFKT1JfVkVSU0lP TiA8IDMKLS0gICAgUHlPYmplY3QgKnB5X2ltcG9ydDsKLS0gICAgcHlfaW1wb3J0ID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF9iLCBfX3B5eF9uX3NfaW1wb3J0KTsKLS0gICAgaWYg KCFweV9pbXBvcnQpCi0tICAgICAgICBnb3RvIGJhZDsKLS0gICAgI2VuZGlmCi0tICAgIGlmIChm cm9tX2xpc3QpCi0tICAgICAgICBsaXN0ID0gZnJvbV9saXN0OwotLSAgICBlbHNlIHsKLS0gICAg ICAgIGVtcHR5X2xpc3QgPSBQeUxpc3RfTmV3KDApOwotLSAgICAgICAgaWYgKCFlbXB0eV9saXN0 KQotLSAgICAgICAgICAgIGdvdG8gYmFkOwotLSAgICAgICAgbGlzdCA9IGVtcHR5X2xpc3Q7Ci0r ICAgIGlmIChsaWtlbHkoUHlJbnRfQ2hlY2tFeGFjdChvcDEpKSkgewotKyAgICAgICAgY29uc3Qg bG9uZyBiID0gaW50dmFsOwotKyAgICAgICAgbG9uZyB4OwotKyAgICAgICAgbG9uZyBhID0gUHlJ bnRfQVNfTE9ORyhvcDEpOwotKyAgICAgICAgICAgIHggPSAobG9uZykoKHVuc2lnbmVkIGxvbmcp YSAtIGIpOwotKyAgICAgICAgICAgIGlmIChsaWtlbHkoKHheYSkgPj0gMCB8fCAoeF5+YikgPj0g MCkpCi0rICAgICAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyh4KTsKLSsgICAgICAg ICAgICByZXR1cm4gUHlMb25nX1R5cGUudHBfYXNfbnVtYmVyLT5uYl9zdWJ0cmFjdChvcDEsIG9w Mik7Ci0gICAgIH0KLS0gICAgZ2xvYmFsX2RpY3QgPSBQeU1vZHVsZV9HZXREaWN0KF9fcHl4X20p OwotLSAgICBpZiAoIWdsb2JhbF9kaWN0KQotLSAgICAgICAgZ290byBiYWQ7Ci0tICAgIGVtcHR5 X2RpY3QgPSBQeURpY3RfTmV3KCk7Ci0tICAgIGlmICghZW1wdHlfZGljdCkKLS0gICAgICAgIGdv dG8gYmFkOwotLSAgICB7Ci0tICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0tICAg ICAgICBpZiAobGV2ZWwgPT0gLTEpIHsKLS0gICAgICAgICAgICBpZiAoKDEpICYmIChzdHJjaHIo X19QeXhfTU9EVUxFX05BTUUsICcuJykpKSB7Ci0tICAgICAgICAgICAgICAgIG1vZHVsZSA9IFB5 SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsT2JqZWN0KAotLSAgICAgICAgICAgICAgICAgICAgbmFt ZSwgZ2xvYmFsX2RpY3QsIGVtcHR5X2RpY3QsIGxpc3QsIDEpOwotLSAgICAgICAgICAgICAgICBp ZiAoIW1vZHVsZSkgewotLSAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25N YXRjaGVzKFB5RXhjX0ltcG9ydEVycm9yKSkKLS0gICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IGJhZDsKLS0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0tICAgICAgICAgICAg ICAgIH0KLSsgICAgI2VuZGlmCi0rICAgICNpZiBDWVRIT05fVVNFX1BZTE9OR19JTlRFUk5BTFMK LSsgICAgaWYgKGxpa2VseShQeUxvbmdfQ2hlY2tFeGFjdChvcDEpKSkgewotKyAgICAgICAgY29u c3QgbG9uZyBiID0gaW50dmFsOwotKyAgICAgICAgbG9uZyBhLCB4OwotKyNpZmRlZiBIQVZFX0xP TkdfTE9ORwotKyAgICAgICAgY29uc3QgUFlfTE9OR19MT05HIGxsYiA9IGludHZhbDsKLSsgICAg ICAgIFBZX0xPTkdfTE9ORyBsbGEsIGxseDsKLSsjZW5kaWYKLSsgICAgICAgIGNvbnN0IGRpZ2l0 KiBkaWdpdHMgPSAoKFB5TG9uZ09iamVjdCopb3AxKS0+b2JfZGlnaXQ7Ci0rICAgICAgICBjb25z dCBQeV9zc2l6ZV90IHNpemUgPSBQeV9TSVpFKG9wMSk7Ci0rICAgICAgICBpZiAobGlrZWx5KF9f UHl4X3NzdF9hYnMoc2l6ZSkgPD0gMSkpIHsKLSsgICAgICAgICAgICBhID0gbGlrZWx5KHNpemUp ID8gZGlnaXRzWzBdIDogMDsKLSsgICAgICAgICAgICBpZiAoc2l6ZSA9PSAtMSkgYSA9IC1hOwot KyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICBzd2l0Y2ggKHNpemUpIHsKLSsgICAgICAg ICAgICAgICAgY2FzZSAtMjoKLSsgICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxv bmcpIC0gMSA+IDIgKiBQeUxvbmdfU0hJRlQpIHsKLSsgICAgICAgICAgICAgICAgICAgICAgICBh ID0gLShsb25nKSAoKCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQp IHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzBdKSk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0rI2lmZGVmIEhBVkVfTE9OR19MT05HCi0rICAgICAgICAgICAgICAgICAgICB9IGVs c2UgaWYgKDggKiBzaXplb2YoUFlfTE9OR19MT05HKSAtIDEgPiAyICogUHlMb25nX1NISUZUKSB7 Ci0rICAgICAgICAgICAgICAgICAgICAgICAgbGxhID0gLShQWV9MT05HX0xPTkcpICgoKCgodW5z aWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25l ZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgZ290 byBsb25nX2xvbmc7Ci0rI2VuZGlmCi0rICAgICAgICAgICAgICAgICAgICB9Ci0rICAgICAgICAg ICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Ci0rICAgICAgICAgICAgICAgIGNhc2UgMjoK LSsgICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+IDIgKiBQeUxv bmdfU0hJRlQpIHsKLSsgICAgICAgICAgICAgICAgICAgICAgICBhID0gKGxvbmcpICgoKCgodW5z aWduZWQgbG9uZylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylk aWdpdHNbMF0pKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSsjaWZkZWYgSEFW RV9MT05HX0xPTkcKLSsgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoOCAqIHNpemVvZihQ WV9MT05HX0xPTkcpIC0gMSA+IDIgKiBQeUxvbmdfU0hJRlQpIHsKLSsgICAgICAgICAgICAgICAg ICAgICAgICBsbGEgPSAoUFlfTE9OR19MT05HKSAoKCgoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylk aWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0 c1swXSkpOwotKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOwotKyNlbmRp ZgotKyAgICAgICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOwotKyAgICAgICAgICAgICAgICBjYXNlIC0zOgotKyAgICAgICAgICAgICAgICAg ICAgaWYgKDggKiBzaXplb2YobG9uZykgLSAxID4gMyAqIFB5TG9uZ19TSElGVCkgewotKyAgICAg ICAgICAgICAgICAgICAgICAgIGEgPSAtKGxvbmcpICgoKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0 c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwgUHlM b25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkpOwotKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotKyNpZmRlZiBIQVZFX0xPTkdfTE9ORwotKyAgICAgICAgICAgICAg ICAgICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gMyAqIFB5TG9u Z19TSElGVCkgewotKyAgICAgICAgICAgICAgICAgICAgICAgIGxsYSA9IC0oUFlfTE9OR19MT05H KSAoKCgoKCgodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZU KSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwg KHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsKLSsgICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIGxvbmdfbG9uZzsKLSsjZW5kaWYKLSsgICAgICAgICAgICAgICAgICAgIH0KLSsg ICAgICAgICAgICAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgICAgICAgICAg Y2FzZSAzOgotKyAgICAgICAgICAgICAgICAgICAgaWYgKDggKiBzaXplb2YobG9uZykgLSAxID4g MyAqIFB5TG9uZ19TSElGVCkgewotKyAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAobG9uZykg KCgoKCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2ln bmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGln aXRzWzBdKSk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0rI2lmZGVmIEhBVkVf TE9OR19MT05HCi0rICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBzaXplb2YoUFlf TE9OR19MT05HKSAtIDEgPiAzICogUHlMb25nX1NISUZUKSB7Ci0rICAgICAgICAgICAgICAgICAg ICAgICAgbGxhID0gKFBZX0xPTkdfTE9ORykgKCgoKCgoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylk aWdpdHNbMl0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0 c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBd KSk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgZ290byBsb25nX2xvbmc7Ci0rI2VuZGlmCi0r ICAgICAgICAgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgICAgICAgICBDWVRIT05fRkFMTFRI Uk9VR0g7Ci0rICAgICAgICAgICAgICAgIGNhc2UgLTQ6Ci0rICAgICAgICAgICAgICAgICAgICBp ZiAoOCAqIHNpemVvZihsb25nKSAtIDEgPiA0ICogUHlMb25nX1NISUZUKSB7Ci0rICAgICAgICAg ICAgICAgICAgICAgICAgYSA9IC0obG9uZykgKCgoKCgoKCgodW5zaWduZWQgbG9uZylkaWdpdHNb M10pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMl0pIDw8IFB5TG9u Z19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAo dW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLSsjaWZkZWYgSEFWRV9MT05HX0xPTkcKLSsgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp ZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0gMSA+IDQgKiBQeUxvbmdfU0hJRlQpIHsKLSsg ICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAtKFBZX0xPTkdfTE9ORykgKCgoKCgoKCgodW5z aWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25l ZCBQWV9MT05HX0xPTkcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZ X0xPTkdfTE9ORylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9O R19MT05HKWRpZ2l0c1swXSkpOwotKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19s b25nOwotKyNlbmRpZgotKyAgICAgICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgICAgICAg ICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwotKyAgICAgICAgICAgICAgICBjYXNlIDQ6Ci0rICAgICAg ICAgICAgICAgICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAtIDEgPiA0ICogUHlMb25nX1NISUZU KSB7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChsb25nKSAoKCgoKCgoKCh1bnNpZ25l ZCBsb25nKWRpZ2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0 c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwgUHlM b25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkpOwotKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotKyNpZmRlZiBIQVZFX0xPTkdfTE9ORwotKyAgICAgICAgICAgICAg ICAgICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gNCAqIFB5TG9u Z19TSElGVCkgewotKyAgICAgICAgICAgICAgICAgICAgICAgIGxsYSA9IChQWV9MT05HX0xPTkcp ICgoKCgoKCgoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbM10pIDw8IFB5TG9uZ19TSElG VCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8 ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVu c2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsKLSsgICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIGxvbmdfbG9uZzsKLSsjZW5kaWYKLSsgICAgICAgICAgICAgICAgICAgIH0KLSsgICAg ICAgICAgICAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKLSsgICAgICAgICAgICAgICAgZGVm YXVsdDogcmV0dXJuIFB5TG9uZ19UeXBlLnRwX2FzX251bWJlci0+bmJfc3VidHJhY3Qob3AxLCBv cDIpOwotICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICBsZXZlbCA9IDA7Ci0tICAgICAgICB9 Ci0tICAgICAgICAjZW5kaWYKLS0gICAgICAgIGlmICghbW9kdWxlKSB7Ci0tICAgICAgICAgICAg I2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0tICAgICAgICAgICAgUHlPYmplY3QgKnB5X2xldmVs ID0gUHlJbnRfRnJvbUxvbmcobGV2ZWwpOwotLSAgICAgICAgICAgIGlmICghcHlfbGV2ZWwpCi0t ICAgICAgICAgICAgICAgIGdvdG8gYmFkOwotLSAgICAgICAgICAgIG1vZHVsZSA9IFB5T2JqZWN0 X0NhbGxGdW5jdGlvbk9iakFyZ3MocHlfaW1wb3J0LAotLSAgICAgICAgICAgICAgICBuYW1lLCBn bG9iYWxfZGljdCwgZW1wdHlfZGljdCwgbGlzdCwgcHlfbGV2ZWwsIChQeU9iamVjdCAqKU5VTEwp OwotLSAgICAgICAgICAgIFB5X0RFQ1JFRihweV9sZXZlbCk7Ci0tICAgICAgICAgICAgI2Vsc2UK LS0gICAgICAgICAgICBtb2R1bGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbE9iamVjdCgK LS0gICAgICAgICAgICAgICAgbmFtZSwgZ2xvYmFsX2RpY3QsIGVtcHR5X2RpY3QsIGxpc3QsIGxl dmVsKTsKLS0gICAgICAgICAgICAjZW5kaWYKLSAgICAgICAgIH0KLS0gICAgfQotLWJhZDoKLS0g ICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0tICAgIFB5X1hERUNSRUYocHlfaW1wb3J0KTsK LS0gICAgI2VuZGlmCi0tICAgIFB5X1hERUNSRUYoZW1wdHlfbGlzdCk7Ci0tICAgIFB5X1hERUNS RUYoZW1wdHlfZGljdCk7Ci0tICAgIHJldHVybiBtb2R1bGU7Ci0tfQotLQotLS8qIEltcG9ydEZy b20gKi8KLS1zdGF0aWMgUHlPYmplY3QqIF9fUHl4X0ltcG9ydEZyb20oUHlPYmplY3QqIG1vZHVs ZSwgUHlPYmplY3QqIG5hbWUpIHsKLS0gICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlPYmpl Y3RfR2V0QXR0clN0cihtb2R1bGUsIG5hbWUpOwotLSAgICBpZiAodW5saWtlbHkoIXZhbHVlKSAm JiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgewotLSAgICAg ICAgUHlFcnJfRm9ybWF0KFB5RXhjX0ltcG9ydEVycm9yLAotLSAgICAgICAgI2lmIFBZX01BSk9S X1ZFUlNJT04gPCAzCi0tICAgICAgICAgICAgImNhbm5vdCBpbXBvcnQgbmFtZSAlLjIzMHMiLCBQ eVN0cmluZ19BU19TVFJJTkcobmFtZSkpOwotLSAgICAgICAgI2Vsc2UKLS0gICAgICAgICAgICAi Y2Fubm90IGltcG9ydCBuYW1lICVTIiwgbmFtZSk7Ci0tICAgICAgICAjZW5kaWYKLS0gICAgfQot LSAgICByZXR1cm4gdmFsdWU7Ci0tfQotLQotLS8qIEhhc0F0dHIgKi8KLS1zdGF0aWMgQ1lUSE9O X0lOTElORSBpbnQgX19QeXhfSGFzQXR0cihQeU9iamVjdCAqbywgUHlPYmplY3QgKm4pIHsKLS0g ICAgUHlPYmplY3QgKnI7Ci0tICAgIGlmICh1bmxpa2VseSghX19QeXhfUHlCYXNlU3RyaW5nX0No ZWNrKG4pKSkgewotLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLS0g ICAgICAgICAgICAgICAgICAgICAgICAiaGFzYXR0cigpOiBhdHRyaWJ1dGUgbmFtZSBtdXN0IGJl IHN0cmluZyIpOwotLSAgICAgICAgcmV0dXJuIC0xOwotLSAgICB9Ci0tICAgIHIgPSBfX1B5eF9H ZXRBdHRyKG8sIG4pOwotLSAgICBpZiAodW5saWtlbHkoIXIpKSB7Ci0tICAgICAgICBQeUVycl9D bGVhcigpOwotLSAgICAgICAgcmV0dXJuIDA7Ci0tICAgIH0gZWxzZSB7Ci0tICAgICAgICBQeV9E RUNSRUYocik7Ci0tICAgICAgICByZXR1cm4gMTsKLS0gICAgfQotLX0KLS0KLS0vKiBQeU9iamVj dF9HZW5lcmljR2V0QXR0ck5vRGljdCAqLwotLSNpZiBDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYg Q1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA3MDAwMAot LXN0YXRpYyBQeU9iamVjdCAqX19QeXhfUmFpc2VHZW5lcmljR2V0QXR0cmlidXRlRXJyb3IoUHlU eXBlT2JqZWN0ICp0cCwgUHlPYmplY3QgKmF0dHJfbmFtZSkgewotLSAgICBQeUVycl9Gb3JtYXQo UHlFeGNfQXR0cmlidXRlRXJyb3IsCi0tI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwotLSAgICAg ICAgICAgICAgICAgIiclLjUwcycgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJyVVJyIsCi0tICAg ICAgICAgICAgICAgICB0cC0+dHBfbmFtZSwgYXR0cl9uYW1lKTsKLS0jZWxzZQotLSAgICAgICAg ICAgICAgICAgIiclLjUwcycgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJyUuNDAwcyciLAotLSAg ICAgICAgICAgICAgICAgdHAtPnRwX25hbWUsIFB5U3RyaW5nX0FTX1NUUklORyhhdHRyX25hbWUp KTsKLSsgICAgICAgICAgICAgICAgeCA9IGEgLSBiOwotKyAgICAgICAgICAgIHJldHVybiBQeUxv bmdfRnJvbUxvbmcoeCk7Ci0rI2lmZGVmIEhBVkVfTE9OR19MT05HCi0rICAgICAgICBsb25nX2xv bmc6Ci0rICAgICAgICAgICAgICAgIGxseCA9IGxsYSAtIGxsYjsKLSsgICAgICAgICAgICByZXR1 cm4gUHlMb25nX0Zyb21Mb25nTG9uZyhsbHgpOwotICNlbmRpZgotLSAgICByZXR1cm4gTlVMTDsK LS19Ci0tc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5T2JqZWN0X0dlbmVy aWNHZXRBdHRyTm9EaWN0KFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0KiBhdHRyX25hbWUpIHsKLS0g ICAgUHlPYmplY3QgKmRlc2NyOwotLSAgICBQeVR5cGVPYmplY3QgKnRwID0gUHlfVFlQRShvYmop OwotLSAgICBpZiAodW5saWtlbHkoIVB5U3RyaW5nX0NoZWNrKGF0dHJfbmFtZSkpKSB7Ci0tICAg ICAgICByZXR1cm4gUHlPYmplY3RfR2VuZXJpY0dldEF0dHIob2JqLCBhdHRyX25hbWUpOwotLSAg ICB9Ci0tICAgIGFzc2VydCghdHAtPnRwX2RpY3RvZmZzZXQpOwotLSAgICBkZXNjciA9IF9QeVR5 cGVfTG9va3VwKHRwLCBhdHRyX25hbWUpOwotLSAgICBpZiAodW5saWtlbHkoIWRlc2NyKSkgewot LSAgICAgICAgcmV0dXJuIF9fUHl4X1JhaXNlR2VuZXJpY0dldEF0dHJpYnV0ZUVycm9yKHRwLCBh dHRyX25hbWUpOwotKyAgICAgICAgCi0rICAgICAgICAKLSAgICAgfQotLSAgICBQeV9JTkNSRUYo ZGVzY3IpOwotLSAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLS0gICAgaWYgKGxpa2VseShQ eVR5cGVfSGFzRmVhdHVyZShQeV9UWVBFKGRlc2NyKSwgUHlfVFBGTEFHU19IQVZFX0NMQVNTKSkp Ci0gICAgICNlbmRpZgotLSAgICB7Ci0tICAgICAgICBkZXNjcmdldGZ1bmMgZiA9IFB5X1RZUEUo ZGVzY3IpLT50cF9kZXNjcl9nZXQ7Ci0tICAgICAgICBpZiAodW5saWtlbHkoZikpIHsKLS0gICAg ICAgICAgICBQeU9iamVjdCAqcmVzID0gZihkZXNjciwgb2JqLCAoUHlPYmplY3QgKil0cCk7Ci0t ICAgICAgICAgICAgUHlfREVDUkVGKGRlc2NyKTsKLS0gICAgICAgICAgICByZXR1cm4gcmVzOwot LSAgICAgICAgfQotKyAgICBpZiAoUHlGbG9hdF9DaGVja0V4YWN0KG9wMSkpIHsKLSsgICAgICAg IGNvbnN0IGxvbmcgYiA9IGludHZhbDsKLSsgICAgICAgIGRvdWJsZSBhID0gUHlGbG9hdF9BU19E T1VCTEUob3AxKTsKLSsgICAgICAgICAgICBkb3VibGUgcmVzdWx0OwotKyAgICAgICAgICAgIFB5 RlBFX1NUQVJUX1BST1RFQ1QoInN1YnRyYWN0IiwgcmV0dXJuIE5VTEwpCi0rICAgICAgICAgICAg cmVzdWx0ID0gKChkb3VibGUpYSkgLSAoZG91YmxlKWI7Ci0rICAgICAgICAgICAgUHlGUEVfRU5E X1BST1RFQ1QocmVzdWx0KQotKyAgICAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUo cmVzdWx0KTsKLSAgICAgfQotLSAgICByZXR1cm4gZGVzY3I7Ci0rICAgIHJldHVybiAoaW5wbGFj ZSA/IFB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdCA6IFB5TnVtYmVyX1N1YnRyYWN0KShvcDEsIG9w Mik7Ci0gfQotICNlbmRpZgotIAotLS8qIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyICovCi0tI2lm IENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVAgJiYgUFlf VkVSU0lPTl9IRVggPCAweDAzMDcwMDAwCi0tc3RhdGljIFB5T2JqZWN0KiBfX1B5eF9QeU9iamVj dF9HZW5lcmljR2V0QXR0cihQeU9iamVjdCogb2JqLCBQeU9iamVjdCogYXR0cl9uYW1lKSB7Ci0t ICAgIGlmICh1bmxpa2VseShQeV9UWVBFKG9iaiktPnRwX2RpY3RvZmZzZXQpKSB7Ci0tICAgICAg ICByZXR1cm4gUHlPYmplY3RfR2VuZXJpY0dldEF0dHIob2JqLCBhdHRyX25hbWUpOwotLSAgICB9 Ci0tICAgIHJldHVybiBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0ck5vRGljdChvYmosIGF0 dHJfbmFtZSk7Ci0tfQotKy8qIFdyaXRlVW5yYWlzYWJsZUV4Y2VwdGlvbiAqLwotK3N0YXRpYyB2 b2lkIF9fUHl4X1dyaXRlVW5yYWlzYWJsZShjb25zdCBjaGFyICpuYW1lLCBDWVRIT05fVU5VU0VE IGludCBjbGluZW5vLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDWVRIT05f VU5VU0VEIGludCBsaW5lbm8sIENZVEhPTl9VTlVTRUQgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmdWxsX3RyYWNlYmFjaywgQ1lU SE9OX1VOVVNFRCBpbnQgbm9naWwpIHsKLSsgICAgUHlPYmplY3QgKm9sZF9leGMsICpvbGRfdmFs LCAqb2xkX3RiOwotKyAgICBQeU9iamVjdCAqY3R4OwotKyAgICBfX1B5eF9QeVRocmVhZFN0YXRl X2RlY2xhcmUKLSsjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAgUHlHSUxTdGF0ZV9TVEFURSBzdGF0 ZTsKLSsgICAgaWYgKG5vZ2lsKQotKyAgICAgICAgc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgp OwotKyNpZmRlZiBfTVNDX1ZFUgotKyAgICBlbHNlIHN0YXRlID0gKFB5R0lMU3RhdGVfU1RBVEUp LTE7Ci0gI2VuZGlmCi0tCi0tLyogU2V0VlRhYmxlICovCi0tc3RhdGljIGludCBfX1B5eF9TZXRW dGFibGUoUHlPYmplY3QgKmRpY3QsIHZvaWQgKnZ0YWJsZSkgewotLSNpZiBQWV9WRVJTSU9OX0hF WCA+PSAweDAyMDcwMDAwCi0tICAgIFB5T2JqZWN0ICpvYiA9IFB5Q2Fwc3VsZV9OZXcodnRhYmxl LCAwLCAwKTsKLS0jZWxzZQotLSAgICBQeU9iamVjdCAqb2IgPSBQeUNPYmplY3RfRnJvbVZvaWRQ dHIodnRhYmxlLCAwKTsKLSAjZW5kaWYKLS0gICAgaWYgKCFvYikKLS0gICAgICAgIGdvdG8gYmFk OwotLSAgICBpZiAoUHlEaWN0X1NldEl0ZW0oZGljdCwgX19weXhfbl9zX3B5eF92dGFibGUsIG9i KSA8IDApCi0tICAgICAgICBnb3RvIGJhZDsKLS0gICAgUHlfREVDUkVGKG9iKTsKLS0gICAgcmV0 dXJuIDA7Ci0tYmFkOgotLSAgICBQeV9YREVDUkVGKG9iKTsKLS0gICAgcmV0dXJuIC0xOwotLX0K LS0KLS0vKiBQeU9iamVjdEdldEF0dHJTdHJOb0Vycm9yICovCi0tc3RhdGljIHZvaWQgX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cl9DbGVhckF0dHJpYnV0ZUVycm9yKHZvaWQpIHsKLS0gICAgX19Q eXhfUHlUaHJlYWRTdGF0ZV9kZWNsYXJlCi0gICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfYXNzaWdu Ci0tICAgIGlmIChsaWtlbHkoX19QeXhfUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRy aWJ1dGVFcnJvcikpKQotLSAgICAgICAgX19QeXhfUHlFcnJfQ2xlYXIoKTsKLS19Ci0tc3RhdGlj IENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHJOb0Vycm9y KFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0KiBhdHRyX25hbWUpIHsKLS0gICAgUHlPYmplY3QgKnJl c3VsdDsKLS0jaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9DUFlUSE9OICYmIENZVEhPTl9VU0VfVFlQ RV9TTE9UUyAmJiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDcwMEIxCi0tICAgIFB5VHlwZU9iamVj dCogdHAgPSBQeV9UWVBFKG9iaik7Ci0tICAgIGlmIChsaWtlbHkodHAtPnRwX2dldGF0dHJvID09 IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgewotLSAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9H ZW5lcmljR2V0QXR0cldpdGhEaWN0KG9iaiwgYXR0cl9uYW1lLCBOVUxMLCAxKTsKLSsgICAgX19Q eXhfRXJyRmV0Y2goJm9sZF9leGMsICZvbGRfdmFsLCAmb2xkX3RiKTsKLSsgICAgaWYgKGZ1bGxf dHJhY2ViYWNrKSB7Ci0rICAgICAgICBQeV9YSU5DUkVGKG9sZF9leGMpOwotKyAgICAgICAgUHlf WElOQ1JFRihvbGRfdmFsKTsKLSsgICAgICAgIFB5X1hJTkNSRUYob2xkX3RiKTsKLSsgICAgICAg IF9fUHl4X0VyclJlc3RvcmUob2xkX2V4Yywgb2xkX3ZhbCwgb2xkX3RiKTsKLSsgICAgICAgIFB5 RXJyX1ByaW50RXgoMSk7Ci0gICAgIH0KLS0jZW5kaWYKLS0gICAgcmVzdWx0ID0gX19QeXhfUHlP YmplY3RfR2V0QXR0clN0cihvYmosIGF0dHJfbmFtZSk7Ci0tICAgIGlmICh1bmxpa2VseSghcmVz dWx0KSkgewotLSAgICAgICAgX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cl9DbGVhckF0dHJpYnV0 ZUVycm9yKCk7Ci0rICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotKyAgICBjdHggPSBQeVN0 cmluZ19Gcm9tU3RyaW5nKG5hbWUpOwotKyAgICAjZWxzZQotKyAgICBjdHggPSBQeVVuaWNvZGVf RnJvbVN0cmluZyhuYW1lKTsKLSsgICAgI2VuZGlmCi0rICAgIF9fUHl4X0VyclJlc3RvcmUob2xk X2V4Yywgb2xkX3ZhbCwgb2xkX3RiKTsKLSsgICAgaWYgKCFjdHgpIHsKLSsgICAgICAgIFB5RXJy X1dyaXRlVW5yYWlzYWJsZShQeV9Ob25lKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICAgIFB5RXJy X1dyaXRlVW5yYWlzYWJsZShjdHgpOwotKyAgICAgICAgUHlfREVDUkVGKGN0eCk7Ci0gICAgIH0K LS0gICAgcmV0dXJuIHJlc3VsdDsKLSsjaWZkZWYgV0lUSF9USFJFQUQKLSsgICAgaWYgKG5vZ2ls KQotKyAgICAgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKHN0YXRlKTsKLSsjZW5kaWYKLSB9Ci0gCi0t LyogU2V0dXBSZWR1Y2UgKi8KLS1zdGF0aWMgaW50IF9fUHl4X3NldHVwX3JlZHVjZV9pc19uYW1l ZChQeU9iamVjdCogbWV0aCwgUHlPYmplY3QqIG5hbWUpIHsKLS0gIGludCByZXQ7Ci0tICBQeU9i amVjdCAqbmFtZV9hdHRyOwotLSAgbmFtZV9hdHRyID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihtZXRoLCBfX3B5eF9uX3NfbmFtZSk7Ci0tICBpZiAobGlrZWx5KG5hbWVfYXR0cikpIHsKLS0g ICAgICByZXQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wobmFtZV9hdHRyLCBuYW1lLCBQeV9F USk7Ci0tICB9IGVsc2UgewotLSAgICAgIHJldCA9IC0xOwotLSAgfQotLSAgaWYgKHVubGlrZWx5 KHJldCA8IDApKSB7Ci0tICAgICAgUHlFcnJfQ2xlYXIoKTsKLS0gICAgICByZXQgPSAwOwotLSAg fQotLSAgUHlfWERFQ1JFRihuYW1lX2F0dHIpOwotLSAgcmV0dXJuIHJldDsKLSsvKiBTd2FwRXhj ZXB0aW9uICovCi0rI2lmIENZVEhPTl9GQVNUX1RIUkVBRF9TVEFURQotK3N0YXRpYyBDWVRIT05f SU5MSU5FIHZvaWQgX19QeXhfX0V4Y2VwdGlvblN3YXAoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQ eU9iamVjdCAqKnR5cGUsIFB5T2JqZWN0ICoqdmFsdWUsIFB5T2JqZWN0ICoqdGIpIHsKLSsgICAg UHlPYmplY3QgKnRtcF90eXBlLCAqdG1wX3ZhbHVlLCAqdG1wX3RiOwotKyAgICAjaWYgQ1lUSE9O X1VTRV9FWENfSU5GT19TVEFDSwotKyAgICBfUHlFcnJfU3RhY2tJdGVtICpleGNfaW5mbyA9IHRz dGF0ZS0+ZXhjX2luZm87Ci0rICAgIHRtcF90eXBlID0gZXhjX2luZm8tPmV4Y190eXBlOwotKyAg ICB0bXBfdmFsdWUgPSBleGNfaW5mby0+ZXhjX3ZhbHVlOwotKyAgICB0bXBfdGIgPSBleGNfaW5m by0+ZXhjX3RyYWNlYmFjazsKLSsgICAgZXhjX2luZm8tPmV4Y190eXBlID0gKnR5cGU7Ci0rICAg IGV4Y19pbmZvLT5leGNfdmFsdWUgPSAqdmFsdWU7Ci0rICAgIGV4Y19pbmZvLT5leGNfdHJhY2Vi YWNrID0gKnRiOwotKyAgICAjZWxzZQotKyAgICB0bXBfdHlwZSA9IHRzdGF0ZS0+ZXhjX3R5cGU7 Ci0rICAgIHRtcF92YWx1ZSA9IHRzdGF0ZS0+ZXhjX3ZhbHVlOwotKyAgICB0bXBfdGIgPSB0c3Rh dGUtPmV4Y190cmFjZWJhY2s7Ci0rICAgIHRzdGF0ZS0+ZXhjX3R5cGUgPSAqdHlwZTsKLSsgICAg dHN0YXRlLT5leGNfdmFsdWUgPSAqdmFsdWU7Ci0rICAgIHRzdGF0ZS0+ZXhjX3RyYWNlYmFjayA9 ICp0YjsKLSsgICAgI2VuZGlmCi0rICAgICp0eXBlID0gdG1wX3R5cGU7Ci0rICAgICp2YWx1ZSA9 IHRtcF92YWx1ZTsKLSsgICAgKnRiID0gdG1wX3RiOwotIH0KLS1zdGF0aWMgaW50IF9fUHl4X3Nl dHVwX3JlZHVjZShQeU9iamVjdCogdHlwZV9vYmopIHsKLS0gICAgaW50IHJldCA9IDA7Ci0tICAg IFB5T2JqZWN0ICpvYmplY3RfcmVkdWNlID0gTlVMTDsKLS0gICAgUHlPYmplY3QgKm9iamVjdF9y ZWR1Y2VfZXggPSBOVUxMOwotLSAgICBQeU9iamVjdCAqcmVkdWNlID0gTlVMTDsKLS0gICAgUHlP YmplY3QgKnJlZHVjZV9leCA9IE5VTEw7Ci0tICAgIFB5T2JqZWN0ICpyZWR1Y2VfY3l0aG9uID0g TlVMTDsKLS0gICAgUHlPYmplY3QgKnNldHN0YXRlID0gTlVMTDsKLS0gICAgUHlPYmplY3QgKnNl dHN0YXRlX2N5dGhvbiA9IE5VTEw7Ci0tI2lmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUAotLSAg ICBpZiAoX1B5VHlwZV9Mb29rdXAoKFB5VHlwZU9iamVjdCopdHlwZV9vYmosIF9fcHl4X25fc19n ZXRzdGF0ZSkpIGdvdG8gX19QWVhfR09PRDsKLS0jZWxzZQotLSAgICBpZiAoUHlPYmplY3RfSGFz QXR0cih0eXBlX29iaiwgX19weXhfbl9zX2dldHN0YXRlKSkgZ290byBfX1BZWF9HT09EOwotLSNl bmRpZgotLSNpZiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVAKLS0gICAgb2JqZWN0X3JlZHVjZV9l eCA9IF9QeVR5cGVfTG9va3VwKCZQeUJhc2VPYmplY3RfVHlwZSwgX19weXhfbl9zX3JlZHVjZV9l eCk7IGlmICghb2JqZWN0X3JlZHVjZV9leCkgZ290byBfX1BZWF9CQUQ7Ci0tI2Vsc2UKLS0gICAg b2JqZWN0X3JlZHVjZV9leCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKFB5T2JqZWN0Kikm UHlCYXNlT2JqZWN0X1R5cGUsIF9fcHl4X25fc19yZWR1Y2VfZXgpOyBpZiAoIW9iamVjdF9yZWR1 Y2VfZXgpIGdvdG8gX19QWVhfQkFEOwotLSNlbmRpZgotLSAgICByZWR1Y2VfZXggPSBfX1B5eF9Q eU9iamVjdF9HZXRBdHRyU3RyKHR5cGVfb2JqLCBfX3B5eF9uX3NfcmVkdWNlX2V4KTsgaWYgKHVu bGlrZWx5KCFyZWR1Y2VfZXgpKSBnb3RvIF9fUFlYX0JBRDsKLS0gICAgaWYgKHJlZHVjZV9leCA9 PSBvYmplY3RfcmVkdWNlX2V4KSB7Ci0tI2lmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUAotLSAg ICAgICAgb2JqZWN0X3JlZHVjZSA9IF9QeVR5cGVfTG9va3VwKCZQeUJhc2VPYmplY3RfVHlwZSwg X19weXhfbl9zX3JlZHVjZSk7IGlmICghb2JqZWN0X3JlZHVjZSkgZ290byBfX1BZWF9CQUQ7Ci0g I2Vsc2UKLS0gICAgICAgIG9iamVjdF9yZWR1Y2UgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KChQeU9iamVjdCopJlB5QmFzZU9iamVjdF9UeXBlLCBfX3B5eF9uX3NfcmVkdWNlKTsgaWYgKCFv YmplY3RfcmVkdWNlKSBnb3RvIF9fUFlYX0JBRDsKLStzdGF0aWMgQ1lUSE9OX0lOTElORSB2b2lk IF9fUHl4X0V4Y2VwdGlvblN3YXAoUHlPYmplY3QgKip0eXBlLCBQeU9iamVjdCAqKnZhbHVlLCBQ eU9iamVjdCAqKnRiKSB7Ci0rICAgIFB5T2JqZWN0ICp0bXBfdHlwZSwgKnRtcF92YWx1ZSwgKnRt cF90YjsKLSsgICAgUHlFcnJfR2V0RXhjSW5mbygmdG1wX3R5cGUsICZ0bXBfdmFsdWUsICZ0bXBf dGIpOwotKyAgICBQeUVycl9TZXRFeGNJbmZvKCp0eXBlLCAqdmFsdWUsICp0Yik7Ci0rICAgICp0 eXBlID0gdG1wX3R5cGU7Ci0rICAgICp2YWx1ZSA9IHRtcF92YWx1ZTsKLSsgICAgKnRiID0gdG1w X3RiOwotK30KLSAjZW5kaWYKLS0gICAgICAgIHJlZHVjZSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0 dHJTdHIodHlwZV9vYmosIF9fcHl4X25fc19yZWR1Y2UpOyBpZiAodW5saWtlbHkoIXJlZHVjZSkp IGdvdG8gX19QWVhfQkFEOwotLSAgICAgICAgaWYgKHJlZHVjZSA9PSBvYmplY3RfcmVkdWNlIHx8 IF9fUHl4X3NldHVwX3JlZHVjZV9pc19uYW1lZChyZWR1Y2UsIF9fcHl4X25fc19yZWR1Y2VfY3l0 aG9uKSkgewotLSAgICAgICAgICAgIHJlZHVjZV9jeXRob24gPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyTm9FcnJvcih0eXBlX29iaiwgX19weXhfbl9zX3JlZHVjZV9jeXRob24pOwotLSAgICAg ICAgICAgIGlmIChsaWtlbHkocmVkdWNlX2N5dGhvbikpIHsKLS0gICAgICAgICAgICAgICAgcmV0 ID0gUHlEaWN0X1NldEl0ZW0oKChQeVR5cGVPYmplY3QqKXR5cGVfb2JqKS0+dHBfZGljdCwgX19w eXhfbl9zX3JlZHVjZSwgcmVkdWNlX2N5dGhvbik7IGlmICh1bmxpa2VseShyZXQgPCAwKSkgZ290 byBfX1BZWF9CQUQ7Ci0tICAgICAgICAgICAgICAgIHJldCA9IFB5RGljdF9EZWxJdGVtKCgoUHlU eXBlT2JqZWN0Kil0eXBlX29iaiktPnRwX2RpY3QsIF9fcHl4X25fc19yZWR1Y2VfY3l0aG9uKTsg aWYgKHVubGlrZWx5KHJldCA8IDApKSBnb3RvIF9fUFlYX0JBRDsKLS0gICAgICAgICAgICB9IGVs c2UgaWYgKHJlZHVjZSA9PSBvYmplY3RfcmVkdWNlIHx8IFB5RXJyX09jY3VycmVkKCkpIHsKLS0g ICAgICAgICAgICAgICAgZ290byBfX1BZWF9CQUQ7Ci0tICAgICAgICAgICAgfQotLSAgICAgICAg ICAgIHNldHN0YXRlID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cih0eXBlX29iaiwgX19weXhf bl9zX3NldHN0YXRlKTsKLS0gICAgICAgICAgICBpZiAoIXNldHN0YXRlKSBQeUVycl9DbGVhcigp OwotLSAgICAgICAgICAgIGlmICghc2V0c3RhdGUgfHwgX19QeXhfc2V0dXBfcmVkdWNlX2lzX25h bWVkKHNldHN0YXRlLCBfX3B5eF9uX3Nfc2V0c3RhdGVfY3l0aG9uKSkgewotLSAgICAgICAgICAg ICAgICBzZXRzdGF0ZV9jeXRob24gPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyTm9FcnJvcih0 eXBlX29iaiwgX19weXhfbl9zX3NldHN0YXRlX2N5dGhvbik7Ci0tICAgICAgICAgICAgICAgIGlm IChsaWtlbHkoc2V0c3RhdGVfY3l0aG9uKSkgewotLSAgICAgICAgICAgICAgICAgICAgcmV0ID0g UHlEaWN0X1NldEl0ZW0oKChQeVR5cGVPYmplY3QqKXR5cGVfb2JqKS0+dHBfZGljdCwgX19weXhf bl9zX3NldHN0YXRlLCBzZXRzdGF0ZV9jeXRob24pOyBpZiAodW5saWtlbHkocmV0IDwgMCkpIGdv dG8gX19QWVhfQkFEOwotLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gUHlEaWN0X0RlbEl0ZW0o KChQeVR5cGVPYmplY3QqKXR5cGVfb2JqKS0+dHBfZGljdCwgX19weXhfbl9zX3NldHN0YXRlX2N5 dGhvbik7IGlmICh1bmxpa2VseShyZXQgPCAwKSkgZ290byBfX1BZWF9CQUQ7Ci0tICAgICAgICAg ICAgICAgIH0gZWxzZSBpZiAoIXNldHN0YXRlIHx8IFB5RXJyX09jY3VycmVkKCkpIHsKLS0gICAg ICAgICAgICAgICAgICAgIGdvdG8gX19QWVhfQkFEOwotKwotKy8qIFNldEl0ZW1JbnQgKi8KLStz dGF0aWMgaW50IF9fUHl4X1NldEl0ZW1JbnRfR2VuZXJpYyhQeU9iamVjdCAqbywgUHlPYmplY3Qg KmosIFB5T2JqZWN0ICp2KSB7Ci0rICAgIGludCByOwotKyAgICBpZiAoIWopIHJldHVybiAtMTsK LSsgICAgciA9IFB5T2JqZWN0X1NldEl0ZW0obywgaiwgdik7Ci0rICAgIFB5X0RFQ1JFRihqKTsK LSsgICAgcmV0dXJuIHI7Ci0rfQotK3N0YXRpYyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9TZXRJ dGVtSW50X0Zhc3QoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgaSwgUHlPYmplY3QgKnYsIGludCBp c19saXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Q1lUSE9OX05DUF9VTlVTRUQgaW50IHdyYXBhcm91bmQsIENZVEhPTl9OQ1BfVU5VU0VEIGludCBi b3VuZHNjaGVjaykgewotKyNpZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05f QVZPSURfQk9SUk9XRURfUkVGUyAmJiBDWVRIT05fVVNFX1RZUEVfU0xPVFMKLSsgICAgaWYgKGlz X2xpc3QgfHwgUHlMaXN0X0NoZWNrRXhhY3QobykpIHsKLSsgICAgICAgIFB5X3NzaXplX3QgbiA9 ICghd3JhcGFyb3VuZCkgPyBpIDogKChsaWtlbHkoaSA+PSAwKSkgPyBpIDogaSArIFB5TGlzdF9H RVRfU0laRShvKSk7Ci0rICAgICAgICBpZiAoKCFib3VuZHNjaGVjaykgfHwgbGlrZWx5KF9fUHl4 X2lzX3ZhbGlkX2luZGV4KG4sIFB5TGlzdF9HRVRfU0laRShvKSkpKSB7Ci0rICAgICAgICAgICAg UHlPYmplY3QqIG9sZCA9IFB5TGlzdF9HRVRfSVRFTShvLCBuKTsKLSsgICAgICAgICAgICBQeV9J TkNSRUYodik7Ci0rICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKG8sIG4sIHYpOwotKyAgICAg ICAgICAgIFB5X0RFQ1JFRihvbGQpOwotKyAgICAgICAgICAgIHJldHVybiAxOwotKyAgICAgICAg fQotKyAgICB9IGVsc2UgewotKyAgICAgICAgUHlTZXF1ZW5jZU1ldGhvZHMgKm0gPSBQeV9UWVBF KG8pLT50cF9hc19zZXF1ZW5jZTsKLSsgICAgICAgIGlmIChsaWtlbHkobSAmJiBtLT5zcV9hc3Nf aXRlbSkpIHsKLSsgICAgICAgICAgICBpZiAod3JhcGFyb3VuZCAmJiB1bmxpa2VseShpIDwgMCkg JiYgbGlrZWx5KG0tPnNxX2xlbmd0aCkpIHsKLSsgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBs ID0gbS0+c3FfbGVuZ3RoKG8pOwotKyAgICAgICAgICAgICAgICBpZiAobGlrZWx5KGwgPj0gMCkp IHsKLSsgICAgICAgICAgICAgICAgICAgIGkgKz0gbDsKLSsgICAgICAgICAgICAgICAgfSBlbHNl IHsKLSsgICAgICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4 Y19PdmVyZmxvd0Vycm9yKSkKLSsgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0r ICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgfQotLSAgICAgICAgICAgIFB5VHlwZV9Nb2RpZmllZCgoUHlUeXBlT2JqZWN0 Kil0eXBlX29iaik7Ci0rICAgICAgICAgICAgcmV0dXJuIG0tPnNxX2Fzc19pdGVtKG8sIGksIHYp OwotICAgICAgICAgfQotICAgICB9Ci0tICAgIGdvdG8gX19QWVhfR09PRDsKLS1fX1BZWF9CQUQ6 Ci0tICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKLS0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4 Y19SdW50aW1lRXJyb3IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBwaWNrbGluZyBmb3IgJXMiLCAo KFB5VHlwZU9iamVjdCopdHlwZV9vYmopLT50cF9uYW1lKTsKLS0gICAgcmV0ID0gLTE7Ci0tX19Q WVhfR09PRDoKLS0jaWYgIUNZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUAotLSAgICBQeV9YREVDUkVG KG9iamVjdF9yZWR1Y2UpOwotLSAgICBQeV9YREVDUkVGKG9iamVjdF9yZWR1Y2VfZXgpOwotKyNl bHNlCi0rI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fUFlQWQotKyAgICBpZiAoaXNfbGlzdCB8fCAo UHlTZXF1ZW5jZV9DaGVjayhvKSAmJiAhUHlEaWN0X0NoZWNrKG8pKSkKLSsjZWxzZQotKyAgICBp ZiAoaXNfbGlzdCB8fCBQeVNlcXVlbmNlX0NoZWNrKG8pKQotICNlbmRpZgotLSAgICBQeV9YREVD UkVGKHJlZHVjZSk7Ci0tICAgIFB5X1hERUNSRUYocmVkdWNlX2V4KTsKLS0gICAgUHlfWERFQ1JF RihyZWR1Y2VfY3l0aG9uKTsKLS0gICAgUHlfWERFQ1JFRihzZXRzdGF0ZSk7Ci0tICAgIFB5X1hE RUNSRUYoc2V0c3RhdGVfY3l0aG9uKTsKLS0gICAgcmV0dXJuIHJldDsKLSsgICAgewotKyAgICAg ICAgcmV0dXJuIFB5U2VxdWVuY2VfU2V0SXRlbShvLCBpLCB2KTsKLSsgICAgfQotKyNlbmRpZgot KyAgICByZXR1cm4gX19QeXhfU2V0SXRlbUludF9HZW5lcmljKG8sIFB5SW50X0Zyb21Tc2l6ZV90 KGkpLCB2KTsKLSB9Ci0gCi0tLyogQ2FsY3VsYXRlTWV0YWNsYXNzICovCi0tc3RhdGljIFB5T2Jq ZWN0ICpfX1B5eF9DYWxjdWxhdGVNZXRhY2xhc3MoUHlUeXBlT2JqZWN0ICptZXRhY2xhc3MsIFB5 T2JqZWN0ICpiYXNlcykgewotLSAgICBQeV9zc2l6ZV90IGksIG5iYXNlcyA9IFB5VHVwbGVfR0VU X1NJWkUoYmFzZXMpOwotLSAgICBmb3IgKGk9MDsgaSA8IG5iYXNlczsgaSsrKSB7Ci0tICAgICAg ICBQeVR5cGVPYmplY3QgKnRtcHR5cGU7Ci0tICAgICAgICBQeU9iamVjdCAqdG1wID0gUHlUdXBs ZV9HRVRfSVRFTShiYXNlcywgaSk7Ci0tICAgICAgICB0bXB0eXBlID0gUHlfVFlQRSh0bXApOwot LSNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotLSAgICAgICAgaWYgKHRtcHR5cGUgPT0gJlB5Q2xh c3NfVHlwZSkKLS0gICAgICAgICAgICBjb250aW51ZTsKLS0jZW5kaWYKLS0gICAgICAgIGlmICgh bWV0YWNsYXNzKSB7Ci0tICAgICAgICAgICAgbWV0YWNsYXNzID0gdG1wdHlwZTsKLS0gICAgICAg ICAgICBjb250aW51ZTsKLSsvKiBGYXN0VHlwZUNoZWNrcyAqLwotKyNpZiBDWVRIT05fQ09NUElM SU5HX0lOX0NQWVRIT04KLStzdGF0aWMgaW50IF9fUHl4X0luQmFzZXMoUHlUeXBlT2JqZWN0ICph LCBQeVR5cGVPYmplY3QgKmIpIHsKLSsgICAgd2hpbGUgKGEpIHsKLSsgICAgICAgIGEgPSBhLT50 cF9iYXNlOwotKyAgICAgICAgaWYgKGEgPT0gYikKLSsgICAgICAgICAgICByZXR1cm4gMTsKLSsg ICAgfQotKyAgICByZXR1cm4gYiA9PSAmUHlCYXNlT2JqZWN0X1R5cGU7Ci0rfQotK3N0YXRpYyBD WVRIT05fSU5MSU5FIGludCBfX1B5eF9Jc1N1YnR5cGUoUHlUeXBlT2JqZWN0ICphLCBQeVR5cGVP YmplY3QgKmIpIHsKLSsgICAgUHlPYmplY3QgKm1ybzsKLSsgICAgaWYgKGEgPT0gYikgcmV0dXJu IDE7Ci0rICAgIG1ybyA9IGEtPnRwX21ybzsKLSsgICAgaWYgKGxpa2VseShtcm8pKSB7Ci0rICAg ICAgICBQeV9zc2l6ZV90IGksIG47Ci0rICAgICAgICBuID0gUHlUdXBsZV9HRVRfU0laRShtcm8p OwotKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotKyAgICAgICAgICAgIGlmIChQ eVR1cGxlX0dFVF9JVEVNKG1ybywgaSkgPT0gKFB5T2JqZWN0ICopYikKLSsgICAgICAgICAgICAg ICAgcmV0dXJuIDE7Ci0gICAgICAgICB9Ci0tICAgICAgICBpZiAoUHlUeXBlX0lzU3VidHlwZSht ZXRhY2xhc3MsIHRtcHR5cGUpKQotLSAgICAgICAgICAgIGNvbnRpbnVlOwotLSAgICAgICAgaWYg KFB5VHlwZV9Jc1N1YnR5cGUodG1wdHlwZSwgbWV0YWNsYXNzKSkgewotLSAgICAgICAgICAgIG1l dGFjbGFzcyA9IHRtcHR5cGU7Ci0tICAgICAgICAgICAgY29udGludWU7Ci0rICAgICAgICByZXR1 cm4gMDsKLSsgICAgfQotKyAgICByZXR1cm4gX19QeXhfSW5CYXNlcyhhLCBiKTsKLSt9Ci0rI2lm IFBZX01BSk9SX1ZFUlNJT04gPT0gMgotK3N0YXRpYyBpbnQgX19QeXhfaW5uZXJfUHlFcnJfR2l2 ZW5FeGNlcHRpb25NYXRjaGVzMihQeU9iamVjdCAqZXJyLCBQeU9iamVjdCogZXhjX3R5cGUxLCBQ eU9iamVjdCogZXhjX3R5cGUyKSB7Ci0rICAgIFB5T2JqZWN0ICpleGNlcHRpb24sICp2YWx1ZSwg KnRiOwotKyAgICBpbnQgcmVzOwotKyAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKLSsg ICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24KLSsgICAgX19QeXhfRXJyRmV0Y2goJmV4Y2Vw dGlvbiwgJnZhbHVlLCAmdGIpOwotKyAgICByZXMgPSBleGNfdHlwZTEgPyBQeU9iamVjdF9Jc1N1 YmNsYXNzKGVyciwgZXhjX3R5cGUxKSA6IDA7Ci0rICAgIGlmICh1bmxpa2VseShyZXMgPT0gLTEp KSB7Ci0rICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZXJyKTsKLSsgICAgICAgIHJlcyA9 IDA7Ci0rICAgIH0KLSsgICAgaWYgKCFyZXMpIHsKLSsgICAgICAgIHJlcyA9IFB5T2JqZWN0X0lz U3ViY2xhc3MoZXJyLCBleGNfdHlwZTIpOwotKyAgICAgICAgaWYgKHVubGlrZWx5KHJlcyA9PSAt MSkpIHsKLSsgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZXJyKTsKLSsgICAgICAg ICAgICByZXMgPSAwOwotICAgICAgICAgfQotLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhj X1R5cGVFcnJvciwKLS0gICAgICAgICAgICAgICAgICAgICAgICAibWV0YWNsYXNzIGNvbmZsaWN0 OiAiCi0tICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBtZXRhY2xhc3Mgb2YgYSBkZXJpdmVk IGNsYXNzICIKLS0gICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBhIChub24tc3RyaWN0 KSBzdWJjbGFzcyAiCi0tICAgICAgICAgICAgICAgICAgICAgICAgIm9mIHRoZSBtZXRhY2xhc3Nl cyBvZiBhbGwgaXRzIGJhc2VzIik7Ci0tICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgfQotLSAg ICBpZiAoIW1ldGFjbGFzcykgewotLSNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotLSAgICAgICAg bWV0YWNsYXNzID0gJlB5Q2xhc3NfVHlwZTsKLSsgICAgX19QeXhfRXJyUmVzdG9yZShleGNlcHRp b24sIHZhbHVlLCB0Yik7Ci0rICAgIHJldHVybiByZXM7Ci0rfQotICNlbHNlCi0tICAgICAgICBt ZXRhY2xhc3MgPSAmUHlUeXBlX1R5cGU7Ci0tI2VuZGlmCi0rc3RhdGljIENZVEhPTl9JTkxJTkUg aW50IF9fUHl4X2lubmVyX1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlczIoUHlPYmplY3QgKmVy ciwgUHlPYmplY3QqIGV4Y190eXBlMSwgUHlPYmplY3QgKmV4Y190eXBlMikgewotKyAgICBpbnQg cmVzID0gZXhjX3R5cGUxID8gX19QeXhfSXNTdWJ0eXBlKChQeVR5cGVPYmplY3QqKWVyciwgKFB5 VHlwZU9iamVjdCopZXhjX3R5cGUxKSA6IDA7Ci0rICAgIGlmICghcmVzKSB7Ci0rICAgICAgICBy ZXMgPSBfX1B5eF9Jc1N1YnR5cGUoKFB5VHlwZU9iamVjdCopZXJyLCAoUHlUeXBlT2JqZWN0Kill eGNfdHlwZTIpOwotICAgICB9Ci0tICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSBtZXRhY2xhc3Mp OwotLSAgICByZXR1cm4gKFB5T2JqZWN0KikgbWV0YWNsYXNzOwotKyAgICByZXR1cm4gcmVzOwot IH0KLS0KLS0vKiBQeTNDbGFzc0NyZWF0ZSAqLwotLXN0YXRpYyBQeU9iamVjdCAqX19QeXhfUHkz TWV0YWNsYXNzUHJlcGFyZShQeU9iamVjdCAqbWV0YWNsYXNzLCBQeU9iamVjdCAqYmFzZXMsIFB5 T2JqZWN0ICpuYW1lLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQeU9iamVjdCAqcXVhbG5hbWUsIFB5T2JqZWN0ICpta3csIFB5T2JqZWN0ICptb2RuYW1lLCBQ eU9iamVjdCAqZG9jKSB7Ci0tICAgIFB5T2JqZWN0ICpuczsKLS0gICAgaWYgKG1ldGFjbGFzcykg ewotLSAgICAgICAgUHlPYmplY3QgKnByZXAgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG1l dGFjbGFzcywgX19weXhfbl9zX3ByZXBhcmUpOwotLSAgICAgICAgaWYgKHByZXApIHsKLS0gICAg ICAgICAgICBQeU9iamVjdCAqcGFyZ3MgPSBQeVR1cGxlX1BhY2soMiwgbmFtZSwgYmFzZXMpOwot LSAgICAgICAgICAgIGlmICh1bmxpa2VseSghcGFyZ3MpKSB7Ci0tICAgICAgICAgICAgICAgIFB5 X0RFQ1JFRihwcmVwKTsKLS0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0tICAgICAgICAg ICAgfQotLSAgICAgICAgICAgIG5zID0gUHlPYmplY3RfQ2FsbChwcmVwLCBwYXJncywgbWt3KTsK LS0gICAgICAgICAgICBQeV9ERUNSRUYocHJlcCk7Ci0tICAgICAgICAgICAgUHlfREVDUkVGKHBh cmdzKTsKLSsjZW5kaWYKLStzdGF0aWMgaW50IF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0 Y2hlc1R1cGxlKFB5T2JqZWN0ICpleGNfdHlwZSwgUHlPYmplY3QgKnR1cGxlKSB7Ci0rICAgIFB5 X3NzaXplX3QgaSwgbjsKLSsgICAgYXNzZXJ0KFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2soZXhjX3R5 cGUpKTsKLSsgICAgbiA9IFB5VHVwbGVfR0VUX1NJWkUodHVwbGUpOwotKyNpZiBQWV9NQUpPUl9W RVJTSU9OID49IDMKLSsgICAgZm9yIChpPTA7IGk8bjsgaSsrKSB7Ci0rICAgICAgICBpZiAoZXhj X3R5cGUgPT0gUHlUdXBsZV9HRVRfSVRFTSh0dXBsZSwgaSkpIHJldHVybiAxOwotKyAgICB9Ci0r I2VuZGlmCi0rICAgIGZvciAoaT0wOyBpPG47IGkrKykgewotKyAgICAgICAgUHlPYmplY3QgKnQg PSBQeVR1cGxlX0dFVF9JVEVNKHR1cGxlLCBpKTsKLSsgICAgICAgICNpZiBQWV9NQUpPUl9WRVJT SU9OIDwgMwotKyAgICAgICAgaWYgKGxpa2VseShleGNfdHlwZSA9PSB0KSkgcmV0dXJuIDE7Ci0r ICAgICAgICAjZW5kaWYKLSsgICAgICAgIGlmIChsaWtlbHkoUHlFeGNlcHRpb25DbGFzc19DaGVj ayh0KSkpIHsKLSsgICAgICAgICAgICBpZiAoX19QeXhfaW5uZXJfUHlFcnJfR2l2ZW5FeGNlcHRp b25NYXRjaGVzMihleGNfdHlwZSwgTlVMTCwgdCkpIHJldHVybiAxOwotICAgICAgICAgfSBlbHNl IHsKLS0gICAgICAgICAgICBpZiAodW5saWtlbHkoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlF eGNfQXR0cmlidXRlRXJyb3IpKSkKLS0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0tICAg ICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLS0gICAgICAgICAgICBucyA9IFB5RGljdF9OZXcoKTsK LSAgICAgICAgIH0KLS0gICAgfSBlbHNlIHsKLS0gICAgICAgIG5zID0gUHlEaWN0X05ldygpOwot ICAgICB9Ci0tICAgIGlmICh1bmxpa2VseSghbnMpKQotLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0t ICAgIGlmICh1bmxpa2VseShQeU9iamVjdF9TZXRJdGVtKG5zLCBfX3B5eF9uX3NfbW9kdWxlLCBt b2RuYW1lKSA8IDApKSBnb3RvIGJhZDsKLS0gICAgaWYgKHVubGlrZWx5KFB5T2JqZWN0X1NldEl0 ZW0obnMsIF9fcHl4X25fc19xdWFsbmFtZSwgcXVhbG5hbWUpIDwgMCkpIGdvdG8gYmFkOwotLSAg ICBpZiAodW5saWtlbHkoZG9jICYmIFB5T2JqZWN0X1NldEl0ZW0obnMsIF9fcHl4X25fc19kb2Ms IGRvYykgPCAwKSkgZ290byBiYWQ7Ci0tICAgIHJldHVybiBuczsKLS1iYWQ6Ci0tICAgIFB5X0RF Q1JFRihucyk7Ci0tICAgIHJldHVybiBOVUxMOwotKyAgICByZXR1cm4gMDsKLSB9Ci0tc3RhdGlj IFB5T2JqZWN0ICpfX1B5eF9QeTNDbGFzc0NyZWF0ZShQeU9iamVjdCAqbWV0YWNsYXNzLCBQeU9i amVjdCAqbmFtZSwgUHlPYmplY3QgKmJhc2VzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHlPYmplY3QgKmRpY3QsIFB5T2JqZWN0ICpta3csCi0tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2FsY3VsYXRlX21ldGFjbGFzcywgaW50IGFs bG93X3B5Ml9tZXRhY2xhc3MpIHsKLS0gICAgUHlPYmplY3QgKnJlc3VsdCwgKm1hcmdzOwotLSAg ICBQeU9iamVjdCAqb3duZWRfbWV0YWNsYXNzID0gTlVMTDsKLS0gICAgaWYgKGFsbG93X3B5Ml9t ZXRhY2xhc3MpIHsKLS0gICAgICAgIG93bmVkX21ldGFjbGFzcyA9IFB5T2JqZWN0X0dldEl0ZW0o ZGljdCwgX19weXhfbl9zX21ldGFjbGFzcyk7Ci0tICAgICAgICBpZiAob3duZWRfbWV0YWNsYXNz KSB7Ci0tICAgICAgICAgICAgbWV0YWNsYXNzID0gb3duZWRfbWV0YWNsYXNzOwotLSAgICAgICAg fSBlbHNlIGlmIChsaWtlbHkoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikp KSB7Ci0tICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLStzdGF0aWMgQ1lUSE9OX0lOTElORSBp bnQgX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKFB5T2JqZWN0ICplcnIsIFB5T2Jq ZWN0KiBleGNfdHlwZSkgewotKyAgICBpZiAobGlrZWx5KGVyciA9PSBleGNfdHlwZSkpIHJldHVy biAxOwotKyAgICBpZiAobGlrZWx5KFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2soZXJyKSkpIHsKLSsg ICAgICAgIGlmIChsaWtlbHkoUHlFeGNlcHRpb25DbGFzc19DaGVjayhleGNfdHlwZSkpKSB7Ci0r ICAgICAgICAgICAgcmV0dXJuIF9fUHl4X2lubmVyX1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hl czIoZXJyLCBOVUxMLCBleGNfdHlwZSk7Ci0rICAgICAgICB9IGVsc2UgaWYgKGxpa2VseShQeVR1 cGxlX0NoZWNrKGV4Y190eXBlKSkpIHsKLSsgICAgICAgICAgICByZXR1cm4gX19QeXhfUHlFcnJf R2l2ZW5FeGNlcHRpb25NYXRjaGVzVHVwbGUoZXJyLCBleGNfdHlwZSk7Ci0gICAgICAgICB9IGVs c2UgewotLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgfQotICAgICB9Ci0tICAg IGlmIChjYWxjdWxhdGVfbWV0YWNsYXNzICYmICghbWV0YWNsYXNzIHx8IFB5VHlwZV9DaGVjayht ZXRhY2xhc3MpKSkgewotLSAgICAgICAgbWV0YWNsYXNzID0gX19QeXhfQ2FsY3VsYXRlTWV0YWNs YXNzKChQeVR5cGVPYmplY3QqKSBtZXRhY2xhc3MsIGJhc2VzKTsKLS0gICAgICAgIFB5X1hERUNS RUYob3duZWRfbWV0YWNsYXNzKTsKLS0gICAgICAgIGlmICh1bmxpa2VseSghbWV0YWNsYXNzKSkK LS0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLS0gICAgICAgIG93bmVkX21ldGFjbGFzcyA9IG1l dGFjbGFzczsKLS0gICAgfQotLSAgICBtYXJncyA9IFB5VHVwbGVfUGFjaygzLCBuYW1lLCBiYXNl cywgZGljdCk7Ci0tICAgIGlmICh1bmxpa2VseSghbWFyZ3MpKSB7Ci0tICAgICAgICByZXN1bHQg PSBOVUxMOwotLSAgICB9IGVsc2UgewotLSAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbCht ZXRhY2xhc3MsIG1hcmdzLCBta3cpOwotLSAgICAgICAgUHlfREVDUkVGKG1hcmdzKTsKLSsgICAg cmV0dXJuIFB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyhlcnIsIGV4Y190eXBlKTsKLSt9Ci0r c3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hl czIoUHlPYmplY3QgKmVyciwgUHlPYmplY3QgKmV4Y190eXBlMSwgUHlPYmplY3QgKmV4Y190eXBl MikgewotKyAgICBhc3NlcnQoUHlFeGNlcHRpb25DbGFzc19DaGVjayhleGNfdHlwZTEpKTsKLSsg ICAgYXNzZXJ0KFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2soZXhjX3R5cGUyKSk7Ci0rICAgIGlmIChs aWtlbHkoZXJyID09IGV4Y190eXBlMSB8fCBlcnIgPT0gZXhjX3R5cGUyKSkgcmV0dXJuIDE7Ci0r ICAgIGlmIChsaWtlbHkoUHlFeGNlcHRpb25DbGFzc19DaGVjayhlcnIpKSkgewotKyAgICAgICAg cmV0dXJuIF9fUHl4X2lubmVyX1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlczIoZXJyLCBleGNf dHlwZTEsIGV4Y190eXBlMik7Ci0gICAgIH0KLS0gICAgUHlfWERFQ1JFRihvd25lZF9tZXRhY2xh c3MpOwotLSAgICByZXR1cm4gcmVzdWx0OwotKyAgICByZXR1cm4gKFB5RXJyX0dpdmVuRXhjZXB0 aW9uTWF0Y2hlcyhlcnIsIGV4Y190eXBlMSkgfHwgUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVz KGVyciwgZXhjX3R5cGUyKSk7Ci0gfQotKyNlbmRpZgotIAotLS8qIEdldE5hbWVJbkNsYXNzICov Ci0tc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9HZXRHbG9iYWxOYW1lQWZ0ZXJBdHRyaWJ1dGVMb29r dXAoUHlPYmplY3QgKm5hbWUpIHsKLS0gICAgUHlPYmplY3QgKnJlc3VsdDsKLS0gICAgX19QeXhf UHlUaHJlYWRTdGF0ZV9kZWNsYXJlCi0tICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfYXNzaWduCi0t ICAgIGlmICh1bmxpa2VseSghX19QeXhfUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRy aWJ1dGVFcnJvcikpKQotLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0tICAgIF9fUHl4X1B5RXJyX0Ns ZWFyKCk7Ci0tICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWVVbmNhY2hlZChyZXN1bHQsIG5h bWUpOwotLSAgICByZXR1cm4gcmVzdWx0OwotLX0KLS1zdGF0aWMgUHlPYmplY3QgKl9fUHl4X19H ZXROYW1lSW5DbGFzcyhQeU9iamVjdCAqbm1zcGFjZSwgUHlPYmplY3QgKm5hbWUpIHsKLS0gICAg UHlPYmplY3QgKnJlc3VsdDsKLS0gICAgcmVzdWx0ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihubXNwYWNlLCBuYW1lKTsKLS0gICAgaWYgKCFyZXN1bHQpIHsKLS0gICAgICAgIHJlc3VsdCA9 IF9fUHl4X0dldEdsb2JhbE5hbWVBZnRlckF0dHJpYnV0ZUxvb2t1cChuYW1lKTsKLSsvKiBFeHRU eXBlVGVzdCAqLwotK3N0YXRpYyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9UeXBlVGVzdChQeU9i amVjdCAqb2JqLCBQeVR5cGVPYmplY3QgKnR5cGUpIHsKLSsgICAgaWYgKHVubGlrZWx5KCF0eXBl KSkgewotKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiTWlzc2lu ZyB0eXBlIG9iamVjdCIpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0gICAgIH0KLS0gICAgcmV0dXJu IHJlc3VsdDsKLSsgICAgaWYgKGxpa2VseShfX1B5eF9UeXBlQ2hlY2sob2JqLCB0eXBlKSkpCi0r ICAgICAgICByZXR1cm4gMTsKLSsgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkNh bm5vdCBjb252ZXJ0ICUuMjAwcyB0byAlLjIwMHMiLAotKyAgICAgICAgICAgICAgICAgUHlfVFlQ RShvYmopLT50cF9uYW1lLCB0eXBlLT50cF9uYW1lKTsKLSsgICAgcmV0dXJuIDA7Ci0gfQotIAot LS8qIENMaW5lSW5UcmFjZWJhY2sgKi8KLS0jaWZuZGVmIENZVEhPTl9DTElORV9JTl9UUkFDRUJB Q0sKLS1zdGF0aWMgaW50IF9fUHl4X0NMaW5lRm9yVHJhY2ViYWNrKENZVEhPTl9OQ1BfVU5VU0VE IFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgaW50IGNfbGluZSkgewotLSAgICBQeU9iamVjdCAqdXNl X2NsaW5lOwotLSAgICBQeU9iamVjdCAqcHR5cGUsICpwdmFsdWUsICpwdHJhY2ViYWNrOwotLSNp ZiBDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRIT04KLS0gICAgUHlPYmplY3QgKipjeXRob25fcnVu dGltZV9kaWN0OwotLSNlbmRpZgotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X2N5dGhvbl9ydW50 aW1lKSkgewotLSAgICAgICAgcmV0dXJuIGNfbGluZTsKLS0gICAgfQotLSAgICBfX1B5eF9FcnJG ZXRjaEluU3RhdGUodHN0YXRlLCAmcHR5cGUsICZwdmFsdWUsICZwdHJhY2ViYWNrKTsKLS0jaWYg Q1lUSE9OX0NPTVBJTElOR19JTl9DUFlUSE9OCi0tICAgIGN5dGhvbl9ydW50aW1lX2RpY3QgPSBf UHlPYmplY3RfR2V0RGljdFB0cihfX3B5eF9jeXRob25fcnVudGltZSk7Ci0tICAgIGlmIChsaWtl bHkoY3l0aG9uX3J1bnRpbWVfZGljdCkpIHsKLS0gICAgICAgIF9fUFlYX1BZX0RJQ1RfTE9PS1VQ X0lGX01PRElGSUVEKAotLSAgICAgICAgICAgIHVzZV9jbGluZSwgKmN5dGhvbl9ydW50aW1lX2Rp Y3QsCi0tICAgICAgICAgICAgX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoKmN5dGhvbl9ydW50aW1l X2RpY3QsIF9fcHl4X25fc19jbGluZV9pbl90cmFjZWJhY2spKQotLSAgICB9IGVsc2UKLS0jZW5k aWYKLS0gICAgewotLSAgICAgIFB5T2JqZWN0ICp1c2VfY2xpbmVfb2JqID0gX19QeXhfUHlPYmpl Y3RfR2V0QXR0clN0cihfX3B5eF9jeXRob25fcnVudGltZSwgX19weXhfbl9zX2NsaW5lX2luX3Ry YWNlYmFjayk7Ci0tICAgICAgaWYgKHVzZV9jbGluZV9vYmopIHsKLS0gICAgICAgIHVzZV9jbGlu ZSA9IFB5T2JqZWN0X05vdCh1c2VfY2xpbmVfb2JqKSA/IFB5X0ZhbHNlIDogUHlfVHJ1ZTsKLS0g ICAgICAgIFB5X0RFQ1JFRih1c2VfY2xpbmVfb2JqKTsKLS0gICAgICB9IGVsc2UgewotLSAgICAg ICAgUHlFcnJfQ2xlYXIoKTsKLS0gICAgICAgIHVzZV9jbGluZSA9IE5VTEw7Ci0tICAgICAgfQot LSAgICB9Ci0tICAgIGlmICghdXNlX2NsaW5lKSB7Ci0tICAgICAgICBjX2xpbmUgPSAwOwotLSAg ICAgICAgUHlPYmplY3RfU2V0QXR0cihfX3B5eF9jeXRob25fcnVudGltZSwgX19weXhfbl9zX2Ns aW5lX2luX3RyYWNlYmFjaywgUHlfRmFsc2UpOwotLSAgICB9Ci0tICAgIGVsc2UgaWYgKHVzZV9j bGluZSA9PSBQeV9GYWxzZSB8fCAodXNlX2NsaW5lICE9IFB5X1RydWUgJiYgUHlPYmplY3RfTm90 KHVzZV9jbGluZSkgIT0gMCkpIHsKLS0gICAgICAgIGNfbGluZSA9IDA7Ci0rLyogRGljdEdldEl0 ZW0gKi8KLSsjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzICYmICFDWVRIT05fQ09NUElMSU5HX0lO X1BZUFkKLStzdGF0aWMgUHlPYmplY3QgKl9fUHl4X1B5RGljdF9HZXRJdGVtKFB5T2JqZWN0ICpk LCBQeU9iamVjdCoga2V5KSB7Ci0rICAgIFB5T2JqZWN0ICp2YWx1ZTsKLSsgICAgdmFsdWUgPSBQ eURpY3RfR2V0SXRlbVdpdGhFcnJvcihkLCBrZXkpOwotKyAgICBpZiAodW5saWtlbHkoIXZhbHVl KSkgewotKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7Ci0rICAgICAgICAgICAgaWYg KHVubGlrZWx5KFB5VHVwbGVfQ2hlY2soa2V5KSkpIHsKLSsgICAgICAgICAgICAgICAgUHlPYmpl Y3QqIGFyZ3MgPSBQeVR1cGxlX1BhY2soMSwga2V5KTsKLSsgICAgICAgICAgICAgICAgaWYgKGxp a2VseShhcmdzKSkgewotKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhj X0tleUVycm9yLCBhcmdzKTsKLSsgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsK LSsgICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAg ICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwga2V5KTsKLSsgICAgICAgICAgICB9 Ci0rICAgICAgICB9Ci0rICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgfQotLSAgICBfX1B5eF9F cnJSZXN0b3JlSW5TdGF0ZSh0c3RhdGUsIHB0eXBlLCBwdmFsdWUsIHB0cmFjZWJhY2spOwotLSAg ICByZXR1cm4gY19saW5lOwotKyAgICBQeV9JTkNSRUYodmFsdWUpOwotKyAgICByZXR1cm4gdmFs dWU7Ci0gfQotICNlbmRpZgotIAotLS8qIENvZGVPYmplY3RDYWNoZSAqLwotLXN0YXRpYyBpbnQg X19weXhfYmlzZWN0X2NvZGVfb2JqZWN0cyhfX1B5eF9Db2RlT2JqZWN0Q2FjaGVFbnRyeSogZW50 cmllcywgaW50IGNvdW50LCBpbnQgY29kZV9saW5lKSB7Ci0tICAgIGludCBzdGFydCA9IDAsIG1p ZCA9IDAsIGVuZCA9IGNvdW50IC0gMTsKLS0gICAgaWYgKGVuZCA+PSAwICYmIGNvZGVfbGluZSA+ IGVudHJpZXNbZW5kXS5jb2RlX2xpbmUpIHsKLS0gICAgICAgIHJldHVybiBjb3VudDsKLS0gICAg fQotLSAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsKLS0gICAgICAgIG1pZCA9IHN0YXJ0ICsgKGVu ZCAtIHN0YXJ0KSAvIDI7Ci0tICAgICAgICBpZiAoY29kZV9saW5lIDwgZW50cmllc1ttaWRdLmNv ZGVfbGluZSkgewotLSAgICAgICAgICAgIGVuZCA9IG1pZDsKLS0gICAgICAgIH0gZWxzZSBpZiAo Y29kZV9saW5lID4gZW50cmllc1ttaWRdLmNvZGVfbGluZSkgewotLSAgICAgICAgICAgICBzdGFy dCA9IG1pZCArIDE7Ci0rLyogUmFpc2VUb29NYW55VmFsdWVzVG9VbnBhY2sgKi8KLStzdGF0aWMg Q1lUSE9OX0lOTElORSB2b2lkIF9fUHl4X1JhaXNlVG9vTWFueVZhbHVlc0Vycm9yKFB5X3NzaXpl X3QgZXhwZWN0ZWQpIHsKLSsgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0rICAg ICAgICAgICAgICAgICAidG9vIG1hbnkgdmFsdWVzIHRvIHVucGFjayAoZXhwZWN0ZWQgJSIgQ1lU SE9OX0ZPUk1BVF9TU0laRV9UICJkKSIsIGV4cGVjdGVkKTsKLSt9Ci0rCi0rLyogUmFpc2VOZWVk TW9yZVZhbHVlc1RvVW5wYWNrICovCi0rc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9S YWlzZU5lZWRNb3JlVmFsdWVzRXJyb3IoUHlfc3NpemVfdCBpbmRleCkgewotKyAgICBQeUVycl9G b3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSsgICAgICAgICAgICAgICAgICJuZWVkIG1vcmUgdGhh biAlIiBDWVRIT05fRk9STUFUX1NTSVpFX1QgImQgdmFsdWUlLjFzIHRvIHVucGFjayIsCi0rICAg ICAgICAgICAgICAgICBpbmRleCwgKGluZGV4ID09IDEpID8gIiIgOiAicyIpOwotK30KLSsKLSsv KiBJdGVyRmluaXNoICovCi0rc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4X0l0ZXJGaW5p c2godm9pZCkgewotKyNpZiBDWVRIT05fRkFTVF9USFJFQURfU1RBVEUKLSsgICAgUHlUaHJlYWRT dGF0ZSAqdHN0YXRlID0gX19QeXhfUHlUaHJlYWRTdGF0ZV9DdXJyZW50OwotKyAgICBQeU9iamVj dCogZXhjX3R5cGUgPSB0c3RhdGUtPmN1cmV4Y190eXBlOwotKyAgICBpZiAodW5saWtlbHkoZXhj X3R5cGUpKSB7Ci0rICAgICAgICBpZiAobGlrZWx5KF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9u TWF0Y2hlcyhleGNfdHlwZSwgUHlFeGNfU3RvcEl0ZXJhdGlvbikpKSB7Ci0rICAgICAgICAgICAg UHlPYmplY3QgKmV4Y192YWx1ZSwgKmV4Y190YjsKLSsgICAgICAgICAgICBleGNfdmFsdWUgPSB0 c3RhdGUtPmN1cmV4Y192YWx1ZTsKLSsgICAgICAgICAgICBleGNfdGIgPSB0c3RhdGUtPmN1cmV4 Y190cmFjZWJhY2s7Ci0rICAgICAgICAgICAgdHN0YXRlLT5jdXJleGNfdHlwZSA9IDA7Ci0rICAg ICAgICAgICAgdHN0YXRlLT5jdXJleGNfdmFsdWUgPSAwOwotKyAgICAgICAgICAgIHRzdGF0ZS0+ Y3VyZXhjX3RyYWNlYmFjayA9IDA7Ci0rICAgICAgICAgICAgUHlfREVDUkVGKGV4Y190eXBlKTsK LSsgICAgICAgICAgICBQeV9YREVDUkVGKGV4Y192YWx1ZSk7Ci0rICAgICAgICAgICAgUHlfWERF Q1JFRihleGNfdGIpOwotKyAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgfSBlbHNlIHsK LS0gICAgICAgICAgICByZXR1cm4gbWlkOwotKyAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAg ICAgIH0KLSAgICAgfQotLSAgICBpZiAoY29kZV9saW5lIDw9IGVudHJpZXNbbWlkXS5jb2RlX2xp bmUpIHsKLS0gICAgICAgIHJldHVybiBtaWQ7Ci0tICAgIH0gZWxzZSB7Ci0tICAgICAgICByZXR1 cm4gbWlkICsgMTsKLSsgICAgcmV0dXJuIDA7Ci0rI2Vsc2UKLSsgICAgaWYgKHVubGlrZWx5KFB5 RXJyX09jY3VycmVkKCkpKSB7Ci0rICAgICAgICBpZiAobGlrZWx5KFB5RXJyX0V4Y2VwdGlvbk1h dGNoZXMoUHlFeGNfU3RvcEl0ZXJhdGlvbikpKSB7Ci0rICAgICAgICAgICAgUHlFcnJfQ2xlYXIo KTsKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAg ICAgcmV0dXJuIC0xOwotKyAgICAgICAgfQotICAgICB9Ci0rICAgIHJldHVybiAwOwotKyNlbmRp ZgotIH0KLS1zdGF0aWMgUHlDb2RlT2JqZWN0ICpfX3B5eF9maW5kX2NvZGVfb2JqZWN0KGludCBj b2RlX2xpbmUpIHsKLS0gICAgUHlDb2RlT2JqZWN0KiBjb2RlX29iamVjdDsKLS0gICAgaW50IHBv czsKLS0gICAgaWYgKHVubGlrZWx5KCFjb2RlX2xpbmUpIHx8IHVubGlrZWx5KCFfX3B5eF9jb2Rl X2NhY2hlLmVudHJpZXMpKSB7Ci0tICAgICAgICByZXR1cm4gTlVMTDsKLS0gICAgfQotLSAgICBw b3MgPSBfX3B5eF9iaXNlY3RfY29kZV9vYmplY3RzKF9fcHl4X2NvZGVfY2FjaGUuZW50cmllcywg X19weXhfY29kZV9jYWNoZS5jb3VudCwgY29kZV9saW5lKTsKLS0gICAgaWYgKHVubGlrZWx5KHBv cyA+PSBfX3B5eF9jb2RlX2NhY2hlLmNvdW50KSB8fCB1bmxpa2VseShfX3B5eF9jb2RlX2NhY2hl LmVudHJpZXNbcG9zXS5jb2RlX2xpbmUgIT0gY29kZV9saW5lKSkgewotLSAgICAgICAgcmV0dXJu IE5VTEw7Ci0rCi0rLyogVW5wYWNrSXRlbUVuZENoZWNrICovCi0rc3RhdGljIGludCBfX1B5eF9J dGVybmV4dFVucGFja0VuZENoZWNrKFB5T2JqZWN0ICpyZXR2YWwsIFB5X3NzaXplX3QgZXhwZWN0 ZWQpIHsKLSsgICAgaWYgKHVubGlrZWx5KHJldHZhbCkpIHsKLSsgICAgICAgIFB5X0RFQ1JFRihy ZXR2YWwpOwotKyAgICAgICAgX19QeXhfUmFpc2VUb29NYW55VmFsdWVzRXJyb3IoZXhwZWN0ZWQp OwotKyAgICAgICAgcmV0dXJuIC0xOwotKyAgICB9IGVsc2UgewotKyAgICAgICAgcmV0dXJuIF9f UHl4X0l0ZXJGaW5pc2goKTsKLSAgICAgfQotLSAgICBjb2RlX29iamVjdCA9IF9fcHl4X2NvZGVf Y2FjaGUuZW50cmllc1twb3NdLmNvZGVfb2JqZWN0OwotLSAgICBQeV9JTkNSRUYoY29kZV9vYmpl Y3QpOwotLSAgICByZXR1cm4gY29kZV9vYmplY3Q7Ci0rICAgIHJldHVybiAwOwotIH0KLS1zdGF0 aWMgdm9pZCBfX3B5eF9pbnNlcnRfY29kZV9vYmplY3QoaW50IGNvZGVfbGluZSwgUHlDb2RlT2Jq ZWN0KiBjb2RlX29iamVjdCkgewotLSAgICBpbnQgcG9zLCBpOwotLSAgICBfX1B5eF9Db2RlT2Jq ZWN0Q2FjaGVFbnRyeSogZW50cmllcyA9IF9fcHl4X2NvZGVfY2FjaGUuZW50cmllczsKLS0gICAg aWYgKHVubGlrZWx5KCFjb2RlX2xpbmUpKSB7Ci0tICAgICAgICByZXR1cm47Ci0rCi0rLyogSW1w b3J0ICovCi0rc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9JbXBvcnQoUHlPYmplY3QgKm5hbWUsIFB5 T2JqZWN0ICpmcm9tX2xpc3QsIGludCBsZXZlbCkgewotKyAgICBQeU9iamVjdCAqZW1wdHlfbGlz dCA9IDA7Ci0rICAgIFB5T2JqZWN0ICptb2R1bGUgPSAwOwotKyAgICBQeU9iamVjdCAqZ2xvYmFs X2RpY3QgPSAwOwotKyAgICBQeU9iamVjdCAqZW1wdHlfZGljdCA9IDA7Ci0rICAgIFB5T2JqZWN0 ICpsaXN0OwotKyAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLSsgICAgUHlPYmplY3QgKnB5 X2ltcG9ydDsKLSsgICAgcHlfaW1wb3J0ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5 eF9iLCBfX3B5eF9uX3NfaW1wb3J0KTsKLSsgICAgaWYgKCFweV9pbXBvcnQpCi0rICAgICAgICBn b3RvIGJhZDsKLSsgICAgI2VuZGlmCi0rICAgIGlmIChmcm9tX2xpc3QpCi0rICAgICAgICBsaXN0 ID0gZnJvbV9saXN0OwotKyAgICBlbHNlIHsKLSsgICAgICAgIGVtcHR5X2xpc3QgPSBQeUxpc3Rf TmV3KDApOwotKyAgICAgICAgaWYgKCFlbXB0eV9saXN0KQotKyAgICAgICAgICAgIGdvdG8gYmFk OwotKyAgICAgICAgbGlzdCA9IGVtcHR5X2xpc3Q7Ci0gICAgIH0KLS0gICAgaWYgKHVubGlrZWx5 KCFlbnRyaWVzKSkgewotLSAgICAgICAgZW50cmllcyA9IChfX1B5eF9Db2RlT2JqZWN0Q2FjaGVF bnRyeSopUHlNZW1fTWFsbG9jKDY0KnNpemVvZihfX1B5eF9Db2RlT2JqZWN0Q2FjaGVFbnRyeSkp OwotLSAgICAgICAgaWYgKGxpa2VseShlbnRyaWVzKSkgewotLSAgICAgICAgICAgIF9fcHl4X2Nv ZGVfY2FjaGUuZW50cmllcyA9IGVudHJpZXM7Ci0tICAgICAgICAgICAgX19weXhfY29kZV9jYWNo ZS5tYXhfY291bnQgPSA2NDsKLS0gICAgICAgICAgICBfX3B5eF9jb2RlX2NhY2hlLmNvdW50ID0g MTsKLS0gICAgICAgICAgICBlbnRyaWVzWzBdLmNvZGVfbGluZSA9IGNvZGVfbGluZTsKLS0gICAg ICAgICAgICBlbnRyaWVzWzBdLmNvZGVfb2JqZWN0ID0gY29kZV9vYmplY3Q7Ci0tICAgICAgICAg ICAgUHlfSU5DUkVGKGNvZGVfb2JqZWN0KTsKLSsgICAgZ2xvYmFsX2RpY3QgPSBQeU1vZHVsZV9H ZXREaWN0KF9fcHl4X20pOwotKyAgICBpZiAoIWdsb2JhbF9kaWN0KQotKyAgICAgICAgZ290byBi YWQ7Ci0rICAgIGVtcHR5X2RpY3QgPSBQeURpY3RfTmV3KCk7Ci0rICAgIGlmICghZW1wdHlfZGlj dCkKLSsgICAgICAgIGdvdG8gYmFkOwotKyAgICB7Ci0rICAgICAgICAjaWYgUFlfTUFKT1JfVkVS U0lPTiA+PSAzCi0rICAgICAgICBpZiAobGV2ZWwgPT0gLTEpIHsKLSsgICAgICAgICAgICBpZiAo KDEpICYmIChzdHJjaHIoX19QeXhfTU9EVUxFX05BTUUsICcuJykpKSB7Ci0rICAgICAgICAgICAg ICAgIG1vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsT2JqZWN0KAotKyAgICAgICAg ICAgICAgICAgICAgbmFtZSwgZ2xvYmFsX2RpY3QsIGVtcHR5X2RpY3QsIGxpc3QsIDEpOwotKyAg ICAgICAgICAgICAgICBpZiAoIW1vZHVsZSkgewotKyAgICAgICAgICAgICAgICAgICAgaWYgKCFQ eUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0ltcG9ydEVycm9yKSkKLSsgICAgICAgICAgICAg ICAgICAgICAgICBnb3RvIGJhZDsKLSsgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7 Ci0rICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgbGV2ZWwg PSAwOwotICAgICAgICAgfQotLSAgICAgICAgcmV0dXJuOwotLSAgICB9Ci0tICAgIHBvcyA9IF9f cHl4X2Jpc2VjdF9jb2RlX29iamVjdHMoX19weXhfY29kZV9jYWNoZS5lbnRyaWVzLCBfX3B5eF9j b2RlX2NhY2hlLmNvdW50LCBjb2RlX2xpbmUpOwotLSAgICBpZiAoKHBvcyA8IF9fcHl4X2NvZGVf Y2FjaGUuY291bnQpICYmIHVubGlrZWx5KF9fcHl4X2NvZGVfY2FjaGUuZW50cmllc1twb3NdLmNv ZGVfbGluZSA9PSBjb2RlX2xpbmUpKSB7Ci0tICAgICAgICBQeUNvZGVPYmplY3QqIHRtcCA9IGVu dHJpZXNbcG9zXS5jb2RlX29iamVjdDsKLS0gICAgICAgIGVudHJpZXNbcG9zXS5jb2RlX29iamVj dCA9IGNvZGVfb2JqZWN0OwotLSAgICAgICAgUHlfREVDUkVGKHRtcCk7Ci0tICAgICAgICByZXR1 cm47Ci0tICAgIH0KLS0gICAgaWYgKF9fcHl4X2NvZGVfY2FjaGUuY291bnQgPT0gX19weXhfY29k ZV9jYWNoZS5tYXhfY291bnQpIHsKLS0gICAgICAgIGludCBuZXdfbWF4ID0gX19weXhfY29kZV9j YWNoZS5tYXhfY291bnQgKyA2NDsKLS0gICAgICAgIGVudHJpZXMgPSAoX19QeXhfQ29kZU9iamVj dENhY2hlRW50cnkqKVB5TWVtX1JlYWxsb2MoCi0tICAgICAgICAgICAgX19weXhfY29kZV9jYWNo ZS5lbnRyaWVzLCAoKHNpemVfdCluZXdfbWF4KSAqIHNpemVvZihfX1B5eF9Db2RlT2JqZWN0Q2Fj aGVFbnRyeSkpOwotLSAgICAgICAgaWYgKHVubGlrZWx5KCFlbnRyaWVzKSkgewotLSAgICAgICAg ICAgIHJldHVybjsKLSsgICAgICAgICNlbmRpZgotKyAgICAgICAgaWYgKCFtb2R1bGUpIHsKLSsg ICAgICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLSsgICAgICAgICAgICBQeU9iamVj dCAqcHlfbGV2ZWwgPSBQeUludF9Gcm9tTG9uZyhsZXZlbCk7Ci0rICAgICAgICAgICAgaWYgKCFw eV9sZXZlbCkKLSsgICAgICAgICAgICAgICAgZ290byBiYWQ7Ci0rICAgICAgICAgICAgbW9kdWxl ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhweV9pbXBvcnQsCi0rICAgICAgICAgICAg ICAgIG5hbWUsIGdsb2JhbF9kaWN0LCBlbXB0eV9kaWN0LCBsaXN0LCBweV9sZXZlbCwgKFB5T2Jq ZWN0ICopTlVMTCk7Ci0rICAgICAgICAgICAgUHlfREVDUkVGKHB5X2xldmVsKTsKLSsgICAgICAg ICAgICAjZWxzZQotKyAgICAgICAgICAgIG1vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZUxl dmVsT2JqZWN0KAotKyAgICAgICAgICAgICAgICBuYW1lLCBnbG9iYWxfZGljdCwgZW1wdHlfZGlj dCwgbGlzdCwgbGV2ZWwpOwotKyAgICAgICAgICAgICNlbmRpZgotICAgICAgICAgfQotLSAgICAg ICAgX19weXhfY29kZV9jYWNoZS5lbnRyaWVzID0gZW50cmllczsKLS0gICAgICAgIF9fcHl4X2Nv ZGVfY2FjaGUubWF4X2NvdW50ID0gbmV3X21heDsKLS0gICAgfQotLSAgICBmb3IgKGk9X19weXhf Y29kZV9jYWNoZS5jb3VudDsgaT5wb3M7IGktLSkgewotLSAgICAgICAgZW50cmllc1tpXSA9IGVu dHJpZXNbaS0xXTsKLSAgICAgfQotLSAgICBlbnRyaWVzW3Bvc10uY29kZV9saW5lID0gY29kZV9s aW5lOwotLSAgICBlbnRyaWVzW3Bvc10uY29kZV9vYmplY3QgPSBjb2RlX29iamVjdDsKLS0gICAg X19weXhfY29kZV9jYWNoZS5jb3VudCsrOwotLSAgICBQeV9JTkNSRUYoY29kZV9vYmplY3QpOwot LX0KLS0KLS0vKiBBZGRUcmFjZWJhY2sgKi8KLS0jaW5jbHVkZSAiY29tcGlsZS5oIgotLSNpbmNs dWRlICJmcmFtZW9iamVjdC5oIgotLSNpbmNsdWRlICJ0cmFjZWJhY2suaCIKLS1zdGF0aWMgUHlD b2RlT2JqZWN0KiBfX1B5eF9DcmVhdGVDb2RlT2JqZWN0Rm9yVHJhY2ViYWNrKAotLSAgICAgICAg ICAgIGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCBpbnQgY19saW5lLAotLSAgICAgICAgICAgIGludCBw eV9saW5lLCBjb25zdCBjaGFyICpmaWxlbmFtZSkgewotLSAgICBQeUNvZGVPYmplY3QgKnB5X2Nv ZGUgPSAwOwotLSAgICBQeU9iamVjdCAqcHlfc3JjZmlsZSA9IDA7Ci0tICAgIFB5T2JqZWN0ICpw eV9mdW5jbmFtZSA9IDA7Ci0rYmFkOgotICAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLS0g ICAgcHlfc3JjZmlsZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoZmlsZW5hbWUpOwotLSAgICAjZWxz ZQotLSAgICBweV9zcmNmaWxlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoZmlsZW5hbWUpOwotKyAg ICBQeV9YREVDUkVGKHB5X2ltcG9ydCk7Ci0gICAgICNlbmRpZgotLSAgICBpZiAoIXB5X3NyY2Zp bGUpIGdvdG8gYmFkOwotLSAgICBpZiAoY19saW5lKSB7Ci0tICAgICAgICAjaWYgUFlfTUFKT1Jf VkVSU0lPTiA8IDMKLS0gICAgICAgIHB5X2Z1bmNuYW1lID0gUHlTdHJpbmdfRnJvbUZvcm1hdCgg IiVzICglczolZCkiLCBmdW5jbmFtZSwgX19weXhfY2ZpbGVubSwgY19saW5lKTsKLS0gICAgICAg ICNlbHNlCi0tICAgICAgICBweV9mdW5jbmFtZSA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCAiJXMg KCVzOiVkKSIsIGZ1bmNuYW1lLCBfX3B5eF9jZmlsZW5tLCBjX2xpbmUpOwotLSAgICAgICAgI2Vu ZGlmCi0tICAgIH0KLS0gICAgZWxzZSB7Ci0rICAgIFB5X1hERUNSRUYoZW1wdHlfbGlzdCk7Ci0r ICAgIFB5X1hERUNSRUYoZW1wdHlfZGljdCk7Ci0rICAgIHJldHVybiBtb2R1bGU7Ci0rfQotKwot Ky8qIEltcG9ydEZyb20gKi8KLStzdGF0aWMgUHlPYmplY3QqIF9fUHl4X0ltcG9ydEZyb20oUHlP YmplY3QqIG1vZHVsZSwgUHlPYmplY3QqIG5hbWUpIHsKLSsgICAgUHlPYmplY3QqIHZhbHVlID0g X19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihtb2R1bGUsIG5hbWUpOwotKyAgICBpZiAodW5saWtl bHkoIXZhbHVlKSAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9y KSkgewotKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0ltcG9ydEVycm9yLAotICAgICAgICAg I2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0tICAgICAgICBweV9mdW5jbmFtZSA9IFB5U3RyaW5n X0Zyb21TdHJpbmcoZnVuY25hbWUpOwotKyAgICAgICAgICAgICJjYW5ub3QgaW1wb3J0IG5hbWUg JS4yMzBzIiwgUHlTdHJpbmdfQVNfU1RSSU5HKG5hbWUpKTsKLSAgICAgICAgICNlbHNlCi0tICAg ICAgICBweV9mdW5jbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGZ1bmNuYW1lKTsKLSsgICAg ICAgICAgICAiY2Fubm90IGltcG9ydCBuYW1lICVTIiwgbmFtZSk7Ci0gICAgICAgICAjZW5kaWYK LSAgICAgfQotLSAgICBpZiAoIXB5X2Z1bmNuYW1lKSBnb3RvIGJhZDsKLS0gICAgcHlfY29kZSA9 IF9fUHl4X1B5Q29kZV9OZXcoCi0tICAgICAgICAwLAotLSAgICAgICAgMCwKLS0gICAgICAgIDAs Ci0tICAgICAgICAwLAotLSAgICAgICAgMCwKLS0gICAgICAgIF9fcHl4X2VtcHR5X2J5dGVzLCAv KlB5T2JqZWN0ICpjb2RlLCovCi0tICAgICAgICBfX3B5eF9lbXB0eV90dXBsZSwgLypQeU9iamVj dCAqY29uc3RzLCovCi0tICAgICAgICBfX3B5eF9lbXB0eV90dXBsZSwgLypQeU9iamVjdCAqbmFt ZXMsKi8KLS0gICAgICAgIF9fcHl4X2VtcHR5X3R1cGxlLCAvKlB5T2JqZWN0ICp2YXJuYW1lcywq LwotLSAgICAgICAgX19weXhfZW1wdHlfdHVwbGUsIC8qUHlPYmplY3QgKmZyZWV2YXJzLCovCi0t ICAgICAgICBfX3B5eF9lbXB0eV90dXBsZSwgLypQeU9iamVjdCAqY2VsbHZhcnMsKi8KLS0gICAg ICAgIHB5X3NyY2ZpbGUsICAgLypQeU9iamVjdCAqZmlsZW5hbWUsKi8KLS0gICAgICAgIHB5X2Z1 bmNuYW1lLCAgLypQeU9iamVjdCAqbmFtZSwqLwotLSAgICAgICAgcHlfbGluZSwKLS0gICAgICAg IF9fcHl4X2VtcHR5X2J5dGVzICAvKlB5T2JqZWN0ICpsbm90YWIqLwotLSAgICApOwotLSAgICBQ eV9ERUNSRUYocHlfc3JjZmlsZSk7Ci0tICAgIFB5X0RFQ1JFRihweV9mdW5jbmFtZSk7Ci0tICAg IHJldHVybiBweV9jb2RlOwotLWJhZDoKLS0gICAgUHlfWERFQ1JFRihweV9zcmNmaWxlKTsKLS0g ICAgUHlfWERFQ1JFRihweV9mdW5jbmFtZSk7Ci0tICAgIHJldHVybiBOVUxMOwotKyAgICByZXR1 cm4gdmFsdWU7Ci0gfQotLXN0YXRpYyB2b2lkIF9fUHl4X0FkZFRyYWNlYmFjayhjb25zdCBjaGFy ICpmdW5jbmFtZSwgaW50IGNfbGluZSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IHB5X2xpbmUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKSB7Ci0tICAgIFB5Q29kZU9iamVjdCAq cHlfY29kZSA9IDA7Ci0tICAgIFB5RnJhbWVPYmplY3QgKnB5X2ZyYW1lID0gMDsKLS0gICAgUHlU aHJlYWRTdGF0ZSAqdHN0YXRlID0gX19QeXhfUHlUaHJlYWRTdGF0ZV9DdXJyZW50OwotLSAgICBp ZiAoY19saW5lKSB7Ci0tICAgICAgICBjX2xpbmUgPSBfX1B5eF9DTGluZUZvclRyYWNlYmFjayh0 c3RhdGUsIGNfbGluZSk7Ci0rCi0rLyogSGFzQXR0ciAqLwotK3N0YXRpYyBDWVRIT05fSU5MSU5F IGludCBfX1B5eF9IYXNBdHRyKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqbikgewotKyAgICBQeU9i amVjdCAqcjsKLSsgICAgaWYgKHVubGlrZWx5KCFfX1B5eF9QeUJhc2VTdHJpbmdfQ2hlY2sobikp KSB7Ci0rICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICJoYXNhdHRyKCk6IGF0dHJpYnV0ZSBuYW1lIG11c3QgYmUgc3RyaW5n Iik7Ci0rICAgICAgICByZXR1cm4gLTE7Ci0gICAgIH0KLS0gICAgcHlfY29kZSA9IF9fcHl4X2Zp bmRfY29kZV9vYmplY3QoY19saW5lID8gLWNfbGluZSA6IHB5X2xpbmUpOwotLSAgICBpZiAoIXB5 X2NvZGUpIHsKLS0gICAgICAgIHB5X2NvZGUgPSBfX1B5eF9DcmVhdGVDb2RlT2JqZWN0Rm9yVHJh Y2ViYWNrKAotLSAgICAgICAgICAgIGZ1bmNuYW1lLCBjX2xpbmUsIHB5X2xpbmUsIGZpbGVuYW1l KTsKLS0gICAgICAgIGlmICghcHlfY29kZSkgZ290byBiYWQ7Ci0tICAgICAgICBfX3B5eF9pbnNl cnRfY29kZV9vYmplY3QoY19saW5lID8gLWNfbGluZSA6IHB5X2xpbmUsIHB5X2NvZGUpOwotKyAg ICByID0gX19QeXhfR2V0QXR0cihvLCBuKTsKLSsgICAgaWYgKHVubGlrZWx5KCFyKSkgewotKyAg ICAgICAgUHlFcnJfQ2xlYXIoKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9IGVsc2Ugewot KyAgICAgICAgUHlfREVDUkVGKHIpOwotKyAgICAgICAgcmV0dXJuIDE7Ci0gICAgIH0KLS0gICAg cHlfZnJhbWUgPSBQeUZyYW1lX05ldygKLS0gICAgICAgIHRzdGF0ZSwgICAgICAgICAgICAvKlB5 VGhyZWFkU3RhdGUgKnRzdGF0ZSwqLwotLSAgICAgICAgcHlfY29kZSwgICAgICAgICAgIC8qUHlD b2RlT2JqZWN0ICpjb2RlLCovCi0tICAgICAgICBfX3B5eF9kLCAgICAvKlB5T2JqZWN0ICpnbG9i YWxzLCovCi0tICAgICAgICAwICAgICAgICAgICAgICAgICAgLypQeU9iamVjdCAqbG9jYWxzKi8K LS0gICAgKTsKLS0gICAgaWYgKCFweV9mcmFtZSkgZ290byBiYWQ7Ci0tICAgIF9fUHl4X1B5RnJh bWVfU2V0TGluZU51bWJlcihweV9mcmFtZSwgcHlfbGluZSk7Ci0tICAgIFB5VHJhY2VCYWNrX0hl cmUocHlfZnJhbWUpOwotLWJhZDoKLS0gICAgUHlfWERFQ1JFRihweV9jb2RlKTsKLS0gICAgUHlf WERFQ1JFRihweV9mcmFtZSk7Ci0gfQotIAotLS8qIENJbnRUb1B5ICovCi0tc3RhdGljIENZVEhP Tl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21faW50KGludCB2YWx1ZSkgewotLSAg ICBjb25zdCBpbnQgbmVnX29uZSA9IChpbnQpICgoaW50KSAwIC0gKGludCkgMSksIGNvbnN0X3pl cm8gPSAoaW50KSAwOwotLSAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29u c3RfemVybzsKLS0gICAgaWYgKGlzX3Vuc2lnbmVkKSB7Ci0tICAgICAgICBpZiAoc2l6ZW9mKGlu dCkgPCBzaXplb2YobG9uZykpIHsKLS0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmco KGxvbmcpIHZhbHVlKTsKLS0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGludCkgPD0gc2l6ZW9m KHVuc2lnbmVkIGxvbmcpKSB7Ci0tICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWdu ZWRMb25nKCh1bnNpZ25lZCBsb25nKSB2YWx1ZSk7Ci0tI2lmZGVmIEhBVkVfTE9OR19MT05HCi0t ICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihpbnQpIDw9IHNpemVvZih1bnNpZ25lZCBQWV9MT05H X0xPTkcpKSB7Ci0tICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9u ZygodW5zaWduZWQgUFlfTE9OR19MT05HKSB2YWx1ZSk7Ci0tI2VuZGlmCi0tICAgICAgICB9Ci0t ICAgIH0gZWxzZSB7Ci0tICAgICAgICBpZiAoc2l6ZW9mKGludCkgPD0gc2l6ZW9mKGxvbmcpKSB7 Ci0tICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7Ci0tI2lm ZGVmIEhBVkVfTE9OR19MT05HCi0tICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihpbnQpIDw9IHNp emVvZihQWV9MT05HX0xPTkcpKSB7Ci0tICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9u Z0xvbmcoKFBZX0xPTkdfTE9ORykgdmFsdWUpOwotKy8qIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRy Tm9EaWN0ICovCi0rI2lmIENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQ RV9MT09LVVAgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDcwMDAwCi0rc3RhdGljIFB5T2JqZWN0 ICpfX1B5eF9SYWlzZUdlbmVyaWNHZXRBdHRyaWJ1dGVFcnJvcihQeVR5cGVPYmplY3QgKnRwLCBQ eU9iamVjdCAqYXR0cl9uYW1lKSB7Ci0rICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVF cnJvciwKLSsjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCi0rICAgICAgICAgICAgICAgICAiJyUu NTBzJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnJVUnIiwKLSsgICAgICAgICAgICAgICAgIHRw LT50cF9uYW1lLCBhdHRyX25hbWUpOwotKyNlbHNlCi0rICAgICAgICAgICAgICAgICAiJyUuNTBz JyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnJS40MDBzJyIsCi0rICAgICAgICAgICAgICAgICB0 cC0+dHBfbmFtZSwgUHlTdHJpbmdfQVNfU1RSSU5HKGF0dHJfbmFtZSkpOwotICNlbmRpZgotLSAg ICAgICAgfQotKyAgICByZXR1cm4gTlVMTDsKLSt9Ci0rc3RhdGljIENZVEhPTl9JTkxJTkUgUHlP YmplY3QqIF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyTm9EaWN0KFB5T2JqZWN0KiBvYmos IFB5T2JqZWN0KiBhdHRyX25hbWUpIHsKLSsgICAgUHlPYmplY3QgKmRlc2NyOwotKyAgICBQeVR5 cGVPYmplY3QgKnRwID0gUHlfVFlQRShvYmopOwotKyAgICBpZiAodW5saWtlbHkoIVB5U3RyaW5n X0NoZWNrKGF0dHJfbmFtZSkpKSB7Ci0rICAgICAgICByZXR1cm4gUHlPYmplY3RfR2VuZXJpY0dl dEF0dHIob2JqLCBhdHRyX25hbWUpOwotKyAgICB9Ci0rICAgIGFzc2VydCghdHAtPnRwX2RpY3Rv ZmZzZXQpOwotKyAgICBkZXNjciA9IF9QeVR5cGVfTG9va3VwKHRwLCBhdHRyX25hbWUpOwotKyAg ICBpZiAodW5saWtlbHkoIWRlc2NyKSkgewotKyAgICAgICAgcmV0dXJuIF9fUHl4X1JhaXNlR2Vu ZXJpY0dldEF0dHJpYnV0ZUVycm9yKHRwLCBhdHRyX25hbWUpOwotICAgICB9Ci0rICAgIFB5X0lO Q1JFRihkZXNjcik7Ci0rICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotKyAgICBpZiAobGlr ZWx5KFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUoZGVzY3IpLCBQeV9UUEZMQUdTX0hBVkVfQ0xB U1MpKSkKLSsgICAgI2VuZGlmCi0gICAgIHsKLS0gICAgICAgIGludCBvbmUgPSAxOyBpbnQgbGl0 dGxlID0gKGludCkqKHVuc2lnbmVkIGNoYXIgKikmb25lOwotLSAgICAgICAgdW5zaWduZWQgY2hh ciAqYnl0ZXMgPSAodW5zaWduZWQgY2hhciAqKSZ2YWx1ZTsKLS0gICAgICAgIHJldHVybiBfUHlM b25nX0Zyb21CeXRlQXJyYXkoYnl0ZXMsIHNpemVvZihpbnQpLAotLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7Ci0rICAgICAgICBkZXNj cmdldGZ1bmMgZiA9IFB5X1RZUEUoZGVzY3IpLT50cF9kZXNjcl9nZXQ7Ci0rICAgICAgICBpZiAo dW5saWtlbHkoZikpIHsKLSsgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gZihkZXNjciwgb2Jq LCAoUHlPYmplY3QgKil0cCk7Ci0rICAgICAgICAgICAgUHlfREVDUkVGKGRlc2NyKTsKLSsgICAg ICAgICAgICByZXR1cm4gcmVzOwotKyAgICAgICAgfQotICAgICB9Ci0rICAgIHJldHVybiBkZXNj cjsKLSB9Ci0rI2VuZGlmCi0gCi0tLyogQ0ludEZyb21QeVZlcmlmeSAqLwotLSNkZWZpbmUgX19Q WVhfVkVSSUZZX1JFVFVSTl9JTlQodGFyZ2V0X3R5cGUsIGZ1bmNfdHlwZSwgZnVuY192YWx1ZSlc Ci0tICAgIF9fUFlYX19WRVJJRllfUkVUVVJOX0lOVCh0YXJnZXRfdHlwZSwgZnVuY190eXBlLCBm dW5jX3ZhbHVlLCAwKQotLSNkZWZpbmUgX19QWVhfVkVSSUZZX1JFVFVSTl9JTlRfRVhDKHRhcmdl dF90eXBlLCBmdW5jX3R5cGUsIGZ1bmNfdmFsdWUpXAotLSAgICBfX1BZWF9fVkVSSUZZX1JFVFVS Tl9JTlQodGFyZ2V0X3R5cGUsIGZ1bmNfdHlwZSwgZnVuY192YWx1ZSwgMSkKLS0jZGVmaW5lIF9f UFlYX19WRVJJRllfUkVUVVJOX0lOVCh0YXJnZXRfdHlwZSwgZnVuY190eXBlLCBmdW5jX3ZhbHVl LCBleGMpXAotLSAgICB7XAotLSAgICAgICAgZnVuY190eXBlIHZhbHVlID0gZnVuY192YWx1ZTtc Ci0tICAgICAgICBpZiAoc2l6ZW9mKHRhcmdldF90eXBlKSA8IHNpemVvZihmdW5jX3R5cGUpKSB7 XAotLSAgICAgICAgICAgIGlmICh1bmxpa2VseSh2YWx1ZSAhPSAoZnVuY190eXBlKSAodGFyZ2V0 X3R5cGUpIHZhbHVlKSkge1wKLS0gICAgICAgICAgICAgICAgZnVuY190eXBlIHplcm8gPSAwO1wK LS0gICAgICAgICAgICAgICAgaWYgKGV4YyAmJiB1bmxpa2VseSh2YWx1ZSA9PSAoZnVuY190eXBl KS0xICYmIFB5RXJyX09jY3VycmVkKCkpKVwKLS0gICAgICAgICAgICAgICAgICAgIHJldHVybiAo dGFyZ2V0X3R5cGUpIC0xO1wKLS0gICAgICAgICAgICAgICAgaWYgKGlzX3Vuc2lnbmVkICYmIHVu bGlrZWx5KHZhbHVlIDwgemVybykpXAotLSAgICAgICAgICAgICAgICAgICAgZ290byByYWlzZV9u ZWdfb3ZlcmZsb3c7XAotLSAgICAgICAgICAgICAgICBlbHNlXAotLSAgICAgICAgICAgICAgICAg ICAgZ290byByYWlzZV9vdmVyZmxvdztcCi0tICAgICAgICAgICAgfVwKLS0gICAgICAgIH1cCi0t ICAgICAgICByZXR1cm4gKHRhcmdldF90eXBlKSB2YWx1ZTtcCi0rLyogUHlPYmplY3RfR2VuZXJp Y0dldEF0dHIgKi8KLSsjaWYgQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlU WVBFX0xPT0tVUCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwNzAwMDAKLStzdGF0aWMgUHlPYmpl Y3QqIF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0 KiBhdHRyX25hbWUpIHsKLSsgICAgaWYgKHVubGlrZWx5KFB5X1RZUEUob2JqKS0+dHBfZGljdG9m ZnNldCkpIHsKLSsgICAgICAgIHJldHVybiBQeU9iamVjdF9HZW5lcmljR2V0QXR0cihvYmosIGF0 dHJfbmFtZSk7Ci0gICAgIH0KLSsgICAgcmV0dXJuIF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRB dHRyTm9EaWN0KG9iaiwgYXR0cl9uYW1lKTsKLSt9Ci0rI2VuZGlmCi0gCi0tLyogQ0ludFRvUHkg Ki8KLS1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV9lbnVt X19tcHZfZXZlbnRfaWQoZW51bSBtcHZfZXZlbnRfaWQgdmFsdWUpIHsKLS0gICAgY29uc3QgZW51 bSBtcHZfZXZlbnRfaWQgbmVnX29uZSA9IChlbnVtIG1wdl9ldmVudF9pZCkgKChlbnVtIG1wdl9l dmVudF9pZCkgMCAtIChlbnVtIG1wdl9ldmVudF9pZCkgMSksIGNvbnN0X3plcm8gPSAoZW51bSBt cHZfZXZlbnRfaWQpIDA7Ci0tICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBj b25zdF96ZXJvOwotLSAgICBpZiAoaXNfdW5zaWduZWQpIHsKLS0gICAgICAgIGlmIChzaXplb2Yo ZW51bSBtcHZfZXZlbnRfaWQpIDwgc2l6ZW9mKGxvbmcpKSB7Ci0tICAgICAgICAgICAgcmV0dXJu IFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7Ci0tICAgICAgICB9IGVsc2UgaWYgKHNpemVv ZihlbnVtIG1wdl9ldmVudF9pZCkgPD0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7Ci0tICAgICAg ICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKSB2YWx1 ZSk7Ci0tI2lmZGVmIEhBVkVfTE9OR19MT05HCi0tICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihl bnVtIG1wdl9ldmVudF9pZCkgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKLS0g ICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQ WV9MT05HX0xPTkcpIHZhbHVlKTsKLSsvKiBTZXRWVGFibGUgKi8KLStzdGF0aWMgaW50IF9fUHl4 X1NldFZ0YWJsZShQeU9iamVjdCAqZGljdCwgdm9pZCAqdnRhYmxlKSB7Ci0rI2lmIFBZX1ZFUlNJ T05fSEVYID49IDB4MDIwNzAwMDAKLSsgICAgUHlPYmplY3QgKm9iID0gUHlDYXBzdWxlX05ldyh2 dGFibGUsIDAsIDApOwotKyNlbHNlCi0rICAgIFB5T2JqZWN0ICpvYiA9IFB5Q09iamVjdF9Gcm9t Vm9pZFB0cih2dGFibGUsIDApOwotKyNlbmRpZgotKyAgICBpZiAoIW9iKQotKyAgICAgICAgZ290 byBiYWQ7Ci0rICAgIGlmIChQeURpY3RfU2V0SXRlbShkaWN0LCBfX3B5eF9uX3NfcHl4X3Z0YWJs ZSwgb2IpIDwgMCkKLSsgICAgICAgIGdvdG8gYmFkOwotKyAgICBQeV9ERUNSRUYob2IpOwotKyAg ICByZXR1cm4gMDsKLStiYWQ6Ci0rICAgIFB5X1hERUNSRUYob2IpOwotKyAgICByZXR1cm4gLTE7 Ci0rfQotKwotKy8qIFB5T2JqZWN0R2V0QXR0clN0ck5vRXJyb3IgKi8KLStzdGF0aWMgdm9pZCBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyX0NsZWFyQXR0cmlidXRlRXJyb3Iodm9pZCkgewotKyAg ICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKLSsgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9h c3NpZ24KLSsgICAgaWYgKGxpa2VseShfX1B5eF9QeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhj X0F0dHJpYnV0ZUVycm9yKSkpCi0rICAgICAgICBfX1B5eF9QeUVycl9DbGVhcigpOwotK30KLStz dGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlPYmplY3RfR2V0QXR0clN0ck5v RXJyb3IoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqIGF0dHJfbmFtZSkgewotKyAgICBQeU9iamVj dCAqcmVzdWx0OwotKyNpZiBDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRIT04gJiYgQ1lUSE9OX1VT RV9UWVBFX1NMT1RTICYmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNzAwQjEKLSsgICAgUHlUeXBl T2JqZWN0KiB0cCA9IFB5X1RZUEUob2JqKTsKLSsgICAgaWYgKGxpa2VseSh0cC0+dHBfZ2V0YXR0 cm8gPT0gUHlPYmplY3RfR2VuZXJpY0dldEF0dHIpKSB7Ci0rICAgICAgICByZXR1cm4gX1B5T2Jq ZWN0X0dlbmVyaWNHZXRBdHRyV2l0aERpY3Qob2JqLCBhdHRyX25hbWUsIE5VTEwsIDEpOwotKyAg ICB9Ci0rI2VuZGlmCi0rICAgIHJlc3VsdCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIob2Jq LCBhdHRyX25hbWUpOwotKyAgICBpZiAodW5saWtlbHkoIXJlc3VsdCkpIHsKLSsgICAgICAgIF9f UHl4X1B5T2JqZWN0X0dldEF0dHJTdHJfQ2xlYXJBdHRyaWJ1dGVFcnJvcigpOwotKyAgICB9Ci0r ICAgIHJldHVybiByZXN1bHQ7Ci0rfQotKwotKy8qIFNldHVwUmVkdWNlICovCi0rc3RhdGljIGlu dCBfX1B5eF9zZXR1cF9yZWR1Y2VfaXNfbmFtZWQoUHlPYmplY3QqIG1ldGgsIFB5T2JqZWN0KiBu YW1lKSB7Ci0rICBpbnQgcmV0OwotKyAgUHlPYmplY3QgKm5hbWVfYXR0cjsKLSsgIG5hbWVfYXR0 ciA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIobWV0aCwgX19weXhfbl9zX25hbWUpOwotKyAg aWYgKGxpa2VseShuYW1lX2F0dHIpKSB7Ci0rICAgICAgcmV0ID0gUHlPYmplY3RfUmljaENvbXBh cmVCb29sKG5hbWVfYXR0ciwgbmFtZSwgUHlfRVEpOwotKyAgfSBlbHNlIHsKLSsgICAgICByZXQg PSAtMTsKLSsgIH0KLSsgIGlmICh1bmxpa2VseShyZXQgPCAwKSkgewotKyAgICAgIFB5RXJyX0Ns ZWFyKCk7Ci0rICAgICAgcmV0ID0gMDsKLSsgIH0KLSsgIFB5X1hERUNSRUYobmFtZV9hdHRyKTsK LSsgIHJldHVybiByZXQ7Ci0rfQotK3N0YXRpYyBpbnQgX19QeXhfc2V0dXBfcmVkdWNlKFB5T2Jq ZWN0KiB0eXBlX29iaikgewotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgUHlPYmplY3QgKm9iamVj dF9yZWR1Y2UgPSBOVUxMOwotKyAgICBQeU9iamVjdCAqb2JqZWN0X3JlZHVjZV9leCA9IE5VTEw7 Ci0rICAgIFB5T2JqZWN0ICpyZWR1Y2UgPSBOVUxMOwotKyAgICBQeU9iamVjdCAqcmVkdWNlX2V4 ID0gTlVMTDsKLSsgICAgUHlPYmplY3QgKnJlZHVjZV9jeXRob24gPSBOVUxMOwotKyAgICBQeU9i amVjdCAqc2V0c3RhdGUgPSBOVUxMOwotKyAgICBQeU9iamVjdCAqc2V0c3RhdGVfY3l0aG9uID0g TlVMTDsKLSsjaWYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQCi0rICAgIGlmIChfUHlUeXBlX0xv b2t1cCgoUHlUeXBlT2JqZWN0Kil0eXBlX29iaiwgX19weXhfbl9zX2dldHN0YXRlKSkgZ290byBf X1BZWF9HT09EOwotKyNlbHNlCi0rICAgIGlmIChQeU9iamVjdF9IYXNBdHRyKHR5cGVfb2JqLCBf X3B5eF9uX3NfZ2V0c3RhdGUpKSBnb3RvIF9fUFlYX0dPT0Q7Ci0gI2VuZGlmCi0tICAgICAgICB9 Ci0tICAgIH0gZWxzZSB7Ci0tICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X2V2ZW50X2lkKSA8 PSBzaXplb2YobG9uZykpIHsKLS0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxv bmcpIHZhbHVlKTsKLS0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLS0gICAgICAgIH0gZWxzZSBpZiAo c2l6ZW9mKGVudW0gbXB2X2V2ZW50X2lkKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgewotLSAg ICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVl KTsKLSsjaWYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQCi0rICAgIG9iamVjdF9yZWR1Y2VfZXgg PSBfUHlUeXBlX0xvb2t1cCgmUHlCYXNlT2JqZWN0X1R5cGUsIF9fcHl4X25fc19yZWR1Y2VfZXgp OyBpZiAoIW9iamVjdF9yZWR1Y2VfZXgpIGdvdG8gX19QWVhfQkFEOwotKyNlbHNlCi0rICAgIG9i amVjdF9yZWR1Y2VfZXggPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKChQeU9iamVjdCopJlB5 QmFzZU9iamVjdF9UeXBlLCBfX3B5eF9uX3NfcmVkdWNlX2V4KTsgaWYgKCFvYmplY3RfcmVkdWNl X2V4KSBnb3RvIF9fUFlYX0JBRDsKLSsjZW5kaWYKLSsgICAgcmVkdWNlX2V4ID0gX19QeXhfUHlP YmplY3RfR2V0QXR0clN0cih0eXBlX29iaiwgX19weXhfbl9zX3JlZHVjZV9leCk7IGlmICh1bmxp a2VseSghcmVkdWNlX2V4KSkgZ290byBfX1BZWF9CQUQ7Ci0rICAgIGlmIChyZWR1Y2VfZXggPT0g b2JqZWN0X3JlZHVjZV9leCkgewotKyNpZiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVAKLSsgICAg ICAgIG9iamVjdF9yZWR1Y2UgPSBfUHlUeXBlX0xvb2t1cCgmUHlCYXNlT2JqZWN0X1R5cGUsIF9f cHl4X25fc19yZWR1Y2UpOyBpZiAoIW9iamVjdF9yZWR1Y2UpIGdvdG8gX19QWVhfQkFEOwotKyNl bHNlCi0rICAgICAgICBvYmplY3RfcmVkdWNlID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigo UHlPYmplY3QqKSZQeUJhc2VPYmplY3RfVHlwZSwgX19weXhfbl9zX3JlZHVjZSk7IGlmICghb2Jq ZWN0X3JlZHVjZSkgZ290byBfX1BZWF9CQUQ7Ci0gI2VuZGlmCi0rICAgICAgICByZWR1Y2UgPSBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKHR5cGVfb2JqLCBfX3B5eF9uX3NfcmVkdWNlKTsgaWYg KHVubGlrZWx5KCFyZWR1Y2UpKSBnb3RvIF9fUFlYX0JBRDsKLSsgICAgICAgIGlmIChyZWR1Y2Ug PT0gb2JqZWN0X3JlZHVjZSB8fCBfX1B5eF9zZXR1cF9yZWR1Y2VfaXNfbmFtZWQocmVkdWNlLCBf X3B5eF9uX3NfcmVkdWNlX2N5dGhvbikpIHsKLSsgICAgICAgICAgICByZWR1Y2VfY3l0aG9uID0g X19QeXhfUHlPYmplY3RfR2V0QXR0clN0ck5vRXJyb3IodHlwZV9vYmosIF9fcHl4X25fc19yZWR1 Y2VfY3l0aG9uKTsKLSsgICAgICAgICAgICBpZiAobGlrZWx5KHJlZHVjZV9jeXRob24pKSB7Ci0r ICAgICAgICAgICAgICAgIHJldCA9IFB5RGljdF9TZXRJdGVtKCgoUHlUeXBlT2JqZWN0Kil0eXBl X29iaiktPnRwX2RpY3QsIF9fcHl4X25fc19yZWR1Y2UsIHJlZHVjZV9jeXRob24pOyBpZiAodW5s aWtlbHkocmV0IDwgMCkpIGdvdG8gX19QWVhfQkFEOwotKyAgICAgICAgICAgICAgICByZXQgPSBQ eURpY3RfRGVsSXRlbSgoKFB5VHlwZU9iamVjdCopdHlwZV9vYmopLT50cF9kaWN0LCBfX3B5eF9u X3NfcmVkdWNlX2N5dGhvbik7IGlmICh1bmxpa2VseShyZXQgPCAwKSkgZ290byBfX1BZWF9CQUQ7 Ci0rICAgICAgICAgICAgfSBlbHNlIGlmIChyZWR1Y2UgPT0gb2JqZWN0X3JlZHVjZSB8fCBQeUVy cl9PY2N1cnJlZCgpKSB7Ci0rICAgICAgICAgICAgICAgIGdvdG8gX19QWVhfQkFEOwotKyAgICAg ICAgICAgIH0KLSsgICAgICAgICAgICBzZXRzdGF0ZSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIodHlwZV9vYmosIF9fcHl4X25fc19zZXRzdGF0ZSk7Ci0rICAgICAgICAgICAgaWYgKCFzZXRz dGF0ZSkgUHlFcnJfQ2xlYXIoKTsKLSsgICAgICAgICAgICBpZiAoIXNldHN0YXRlIHx8IF9fUHl4 X3NldHVwX3JlZHVjZV9pc19uYW1lZChzZXRzdGF0ZSwgX19weXhfbl9zX3NldHN0YXRlX2N5dGhv bikpIHsKLSsgICAgICAgICAgICAgICAgc2V0c3RhdGVfY3l0aG9uID0gX19QeXhfUHlPYmplY3Rf R2V0QXR0clN0ck5vRXJyb3IodHlwZV9vYmosIF9fcHl4X25fc19zZXRzdGF0ZV9jeXRob24pOwot KyAgICAgICAgICAgICAgICBpZiAobGlrZWx5KHNldHN0YXRlX2N5dGhvbikpIHsKLSsgICAgICAg ICAgICAgICAgICAgIHJldCA9IFB5RGljdF9TZXRJdGVtKCgoUHlUeXBlT2JqZWN0Kil0eXBlX29i aiktPnRwX2RpY3QsIF9fcHl4X25fc19zZXRzdGF0ZSwgc2V0c3RhdGVfY3l0aG9uKTsgaWYgKHVu bGlrZWx5KHJldCA8IDApKSBnb3RvIF9fUFlYX0JBRDsKLSsgICAgICAgICAgICAgICAgICAgIHJl dCA9IFB5RGljdF9EZWxJdGVtKCgoUHlUeXBlT2JqZWN0Kil0eXBlX29iaiktPnRwX2RpY3QsIF9f cHl4X25fc19zZXRzdGF0ZV9jeXRob24pOyBpZiAodW5saWtlbHkocmV0IDwgMCkpIGdvdG8gX19Q WVhfQkFEOwotKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzZXRzdGF0ZSB8fCBQeUVycl9P Y2N1cnJlZCgpKSB7Ci0rICAgICAgICAgICAgICAgICAgICBnb3RvIF9fUFlYX0JBRDsKLSsgICAg ICAgICAgICAgICAgfQotKyAgICAgICAgICAgIH0KLSsgICAgICAgICAgICBQeVR5cGVfTW9kaWZp ZWQoKFB5VHlwZU9iamVjdCopdHlwZV9vYmopOwotICAgICAgICAgfQotICAgICB9Ci0tICAgIHsK LS0gICAgICAgIGludCBvbmUgPSAxOyBpbnQgbGl0dGxlID0gKGludCkqKHVuc2lnbmVkIGNoYXIg Kikmb25lOwotLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSAodW5zaWduZWQgY2hhciAq KSZ2YWx1ZTsKLS0gICAgICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnl0ZXMsIHNp emVvZihlbnVtIG1wdl9ldmVudF9pZCksCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpdHRsZSwgIWlzX3Vuc2lnbmVkKTsKLS0gICAgfQotKyAgICBnb3RvIF9fUFlYX0dP T0Q7Ci0rX19QWVhfQkFEOgotKyAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCi0rICAgICAgICBQ eUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgcGlj a2xpbmcgZm9yICVzIiwgKChQeVR5cGVPYmplY3QqKXR5cGVfb2JqKS0+dHBfbmFtZSk7Ci0rICAg IHJldCA9IC0xOwotK19fUFlYX0dPT0Q6Ci0rI2lmICFDWVRIT05fVVNFX1BZVFlQRV9MT09LVVAK LSsgICAgUHlfWERFQ1JFRihvYmplY3RfcmVkdWNlKTsKLSsgICAgUHlfWERFQ1JFRihvYmplY3Rf cmVkdWNlX2V4KTsKLSsjZW5kaWYKLSsgICAgUHlfWERFQ1JFRihyZWR1Y2UpOwotKyAgICBQeV9Y REVDUkVGKHJlZHVjZV9leCk7Ci0rICAgIFB5X1hERUNSRUYocmVkdWNlX2N5dGhvbik7Ci0rICAg IFB5X1hERUNSRUYoc2V0c3RhdGUpOwotKyAgICBQeV9YREVDUkVGKHNldHN0YXRlX2N5dGhvbik7 Ci0rICAgIHJldHVybiByZXQ7Ci0gfQotIAotLS8qIENJbnRUb1B5ICovCi0tc3RhdGljIENZVEhP Tl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZyh1bnNpZ25l ZCBsb25nIHZhbHVlKSB7Ci0tICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbmVnX29uZSA9ICh1bnNp Z25lZCBsb25nKSAoKHVuc2lnbmVkIGxvbmcpIDAgLSAodW5zaWduZWQgbG9uZykgMSksIGNvbnN0 X3plcm8gPSAodW5zaWduZWQgbG9uZykgMDsKLS0gICAgY29uc3QgaW50IGlzX3Vuc2lnbmVkID0g bmVnX29uZSA+IGNvbnN0X3plcm87Ci0tICAgIGlmIChpc191bnNpZ25lZCkgewotLSAgICAgICAg aWYgKHNpemVvZih1bnNpZ25lZCBsb25nKSA8IHNpemVvZihsb25nKSkgewotLSAgICAgICAgICAg IHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOwotLSAgICAgICAgfSBlbHNlIGlm IChzaXplb2YodW5zaWduZWQgbG9uZykgPD0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7Ci0tICAg ICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKSB2 YWx1ZSk7Ci0tI2lmZGVmIEhBVkVfTE9OR19MT05HCi0tICAgICAgICB9IGVsc2UgaWYgKHNpemVv Zih1bnNpZ25lZCBsb25nKSA8PSBzaXplb2YodW5zaWduZWQgUFlfTE9OR19MT05HKSkgewotLSAg ICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIFBZ X0xPTkdfTE9ORykgdmFsdWUpOwotKy8qIENhbGN1bGF0ZU1ldGFjbGFzcyAqLwotK3N0YXRpYyBQ eU9iamVjdCAqX19QeXhfQ2FsY3VsYXRlTWV0YWNsYXNzKFB5VHlwZU9iamVjdCAqbWV0YWNsYXNz LCBQeU9iamVjdCAqYmFzZXMpIHsKLSsgICAgUHlfc3NpemVfdCBpLCBuYmFzZXMgPSBQeVR1cGxl X0dFVF9TSVpFKGJhc2VzKTsKLSsgICAgZm9yIChpPTA7IGkgPCBuYmFzZXM7IGkrKykgewotKyAg ICAgICAgUHlUeXBlT2JqZWN0ICp0bXB0eXBlOwotKyAgICAgICAgUHlPYmplY3QgKnRtcCA9IFB5 VHVwbGVfR0VUX0lURU0oYmFzZXMsIGkpOwotKyAgICAgICAgdG1wdHlwZSA9IFB5X1RZUEUodG1w KTsKLSsjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLSsgICAgICAgIGlmICh0bXB0eXBlID09ICZQ eUNsYXNzX1R5cGUpCi0rICAgICAgICAgICAgY29udGludWU7Ci0gI2VuZGlmCi0rICAgICAgICBp ZiAoIW1ldGFjbGFzcykgewotKyAgICAgICAgICAgIG1ldGFjbGFzcyA9IHRtcHR5cGU7Ci0rICAg ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICB9Ci0tICAgIH0gZWxzZSB7Ci0tICAgICAgICBp ZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIDw9IHNpemVvZihsb25nKSkgewotLSAgICAgICAgICAg IHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOwotLSNpZmRlZiBIQVZFX0xPTkdf TE9ORwotLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YodW5zaWduZWQgbG9uZykgPD0gc2l6ZW9m KFBZX0xPTkdfTE9ORykpIHsKLS0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9u ZygoUFlfTE9OR19MT05HKSB2YWx1ZSk7Ci0tI2VuZGlmCi0rICAgICAgICBpZiAoUHlUeXBlX0lz U3VidHlwZShtZXRhY2xhc3MsIHRtcHR5cGUpKQotKyAgICAgICAgICAgIGNvbnRpbnVlOwotKyAg ICAgICAgaWYgKFB5VHlwZV9Jc1N1YnR5cGUodG1wdHlwZSwgbWV0YWNsYXNzKSkgewotKyAgICAg ICAgICAgIG1ldGFjbGFzcyA9IHRtcHR5cGU7Ci0rICAgICAgICAgICAgY29udGludWU7Ci0gICAg ICAgICB9Ci0rICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICJtZXRhY2xhc3MgY29uZmxpY3Q6ICIKLSsgICAgICAgICAgICAg ICAgICAgICAgICAidGhlIG1ldGFjbGFzcyBvZiBhIGRlcml2ZWQgY2xhc3MgIgotKyAgICAgICAg ICAgICAgICAgICAgICAgICJtdXN0IGJlIGEgKG5vbi1zdHJpY3QpIHN1YmNsYXNzICIKLSsgICAg ICAgICAgICAgICAgICAgICAgICAib2YgdGhlIG1ldGFjbGFzc2VzIG9mIGFsbCBpdHMgYmFzZXMi KTsKLSsgICAgICAgIHJldHVybiBOVUxMOwotICAgICB9Ci0tICAgIHsKLS0gICAgICAgIGludCBv bmUgPSAxOyBpbnQgbGl0dGxlID0gKGludCkqKHVuc2lnbmVkIGNoYXIgKikmb25lOwotLSAgICAg ICAgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSAodW5zaWduZWQgY2hhciAqKSZ2YWx1ZTsKLS0gICAg ICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnl0ZXMsIHNpemVvZih1bnNpZ25lZCBs b25nKSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0dGxlLCAhaXNf dW5zaWduZWQpOwotKyAgICBpZiAoIW1ldGFjbGFzcykgewotKyNpZiBQWV9NQUpPUl9WRVJTSU9O IDwgMwotKyAgICAgICAgbWV0YWNsYXNzID0gJlB5Q2xhc3NfVHlwZTsKLSsjZWxzZQotKyAgICAg ICAgbWV0YWNsYXNzID0gJlB5VHlwZV9UeXBlOwotKyNlbmRpZgotICAgICB9Ci0rICAgIFB5X0lO Q1JFRigoUHlPYmplY3QqKSBtZXRhY2xhc3MpOwotKyAgICByZXR1cm4gKFB5T2JqZWN0KikgbWV0 YWNsYXNzOwotIH0KLSAKLS0vKiBDSW50VG9QeSAqLwotLXN0YXRpYyBDWVRIT05fSU5MSU5FIFB5 T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihlbnVtIG1wdl9lcnJvciB2 YWx1ZSkgewotLSAgICBjb25zdCBlbnVtIG1wdl9lcnJvciBuZWdfb25lID0gKGVudW0gbXB2X2Vy cm9yKSAoKGVudW0gbXB2X2Vycm9yKSAwIC0gKGVudW0gbXB2X2Vycm9yKSAxKSwgY29uc3RfemVy byA9IChlbnVtIG1wdl9lcnJvcikgMDsKLS0gICAgY29uc3QgaW50IGlzX3Vuc2lnbmVkID0gbmVn X29uZSA+IGNvbnN0X3plcm87Ci0tICAgIGlmIChpc191bnNpZ25lZCkgewotLSAgICAgICAgaWYg KHNpemVvZihlbnVtIG1wdl9lcnJvcikgPCBzaXplb2YobG9uZykpIHsKLS0gICAgICAgICAgICBy ZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKLS0gICAgICAgIH0gZWxzZSBpZiAo c2l6ZW9mKGVudW0gbXB2X2Vycm9yKSA8PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKLS0gICAg ICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZh bHVlKTsKLS0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLS0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9m KGVudW0gbXB2X2Vycm9yKSA8PSBzaXplb2YodW5zaWduZWQgUFlfTE9OR19MT05HKSkgewotLSAg ICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIFBZ X0xPTkdfTE9ORykgdmFsdWUpOwotLSNlbmRpZgotKy8qIFB5M0NsYXNzQ3JlYXRlICovCi0rc3Rh dGljIFB5T2JqZWN0ICpfX1B5eF9QeTNNZXRhY2xhc3NQcmVwYXJlKFB5T2JqZWN0ICptZXRhY2xh c3MsIFB5T2JqZWN0ICpiYXNlcywgUHlPYmplY3QgKm5hbWUsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpxdWFsbmFtZSwgUHlPYmplY3QgKm1r dywgUHlPYmplY3QgKm1vZG5hbWUsIFB5T2JqZWN0ICpkb2MpIHsKLSsgICAgUHlPYmplY3QgKm5z OwotKyAgICBpZiAobWV0YWNsYXNzKSB7Ci0rICAgICAgICBQeU9iamVjdCAqcHJlcCA9IF9fUHl4 X1B5T2JqZWN0X0dldEF0dHJTdHIobWV0YWNsYXNzLCBfX3B5eF9uX3NfcHJlcGFyZSk7Ci0rICAg ICAgICBpZiAocHJlcCkgewotKyAgICAgICAgICAgIFB5T2JqZWN0ICpwYXJncyA9IFB5VHVwbGVf UGFjaygyLCBuYW1lLCBiYXNlcyk7Ci0rICAgICAgICAgICAgaWYgKHVubGlrZWx5KCFwYXJncykp IHsKLSsgICAgICAgICAgICAgICAgUHlfREVDUkVGKHByZXApOwotKyAgICAgICAgICAgICAgICBy ZXR1cm4gTlVMTDsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgbnMgPSBQeU9iamVjdF9D YWxsKHByZXAsIHBhcmdzLCBta3cpOwotKyAgICAgICAgICAgIFB5X0RFQ1JFRihwcmVwKTsKLSsg ICAgICAgICAgICBQeV9ERUNSRUYocGFyZ3MpOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAg ICAgICBpZiAodW5saWtlbHkoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRl RXJyb3IpKSkKLSsgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgICAgICAgICAgUHlF cnJfQ2xlYXIoKTsKLSsgICAgICAgICAgICBucyA9IFB5RGljdF9OZXcoKTsKLSAgICAgICAgIH0K LSAgICAgfSBlbHNlIHsKLS0gICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfZXJyb3IpIDw9IHNp emVvZihsb25nKSkgewotLSAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykg dmFsdWUpOwotLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotLSAgICAgICAgfSBlbHNlIGlmIChzaXpl b2YoZW51bSBtcHZfZXJyb3IpIDw9IHNpemVvZihQWV9MT05HX0xPTkcpKSB7Ci0tICAgICAgICAg ICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9ORykgdmFsdWUpOwotLSNl bmRpZgotLSAgICAgICAgfQotLSAgICB9Ci0tICAgIHsKLS0gICAgICAgIGludCBvbmUgPSAxOyBp bnQgbGl0dGxlID0gKGludCkqKHVuc2lnbmVkIGNoYXIgKikmb25lOwotLSAgICAgICAgdW5zaWdu ZWQgY2hhciAqYnl0ZXMgPSAodW5zaWduZWQgY2hhciAqKSZ2YWx1ZTsKLS0gICAgICAgIHJldHVy biBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnl0ZXMsIHNpemVvZihlbnVtIG1wdl9lcnJvciksCi0t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZSwgIWlzX3Vuc2lnbmVk KTsKLSsgICAgICAgIG5zID0gUHlEaWN0X05ldygpOwotICAgICB9Ci0rICAgIGlmICh1bmxpa2Vs eSghbnMpKQotKyAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIGlmICh1bmxpa2VseShQeU9iamVj dF9TZXRJdGVtKG5zLCBfX3B5eF9uX3NfbW9kdWxlLCBtb2RuYW1lKSA8IDApKSBnb3RvIGJhZDsK LSsgICAgaWYgKHVubGlrZWx5KFB5T2JqZWN0X1NldEl0ZW0obnMsIF9fcHl4X25fc19xdWFsbmFt ZSwgcXVhbG5hbWUpIDwgMCkpIGdvdG8gYmFkOwotKyAgICBpZiAodW5saWtlbHkoZG9jICYmIFB5 T2JqZWN0X1NldEl0ZW0obnMsIF9fcHl4X25fc19kb2MsIGRvYykgPCAwKSkgZ290byBiYWQ7Ci0r ICAgIHJldHVybiBuczsKLStiYWQ6Ci0rICAgIFB5X0RFQ1JFRihucyk7Ci0rICAgIHJldHVybiBO VUxMOwotIH0KLS0KLS0vKiBDSW50VG9QeSAqLwotLXN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2Jq ZWN0KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoZW51bSBtcHZfbG9nX2xl dmVsIHZhbHVlKSB7Ci0tICAgIGNvbnN0IGVudW0gbXB2X2xvZ19sZXZlbCBuZWdfb25lID0gKGVu dW0gbXB2X2xvZ19sZXZlbCkgKChlbnVtIG1wdl9sb2dfbGV2ZWwpIDAgLSAoZW51bSBtcHZfbG9n X2xldmVsKSAxKSwgY29uc3RfemVybyA9IChlbnVtIG1wdl9sb2dfbGV2ZWwpIDA7Ci0tICAgIGNv bnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOwotLSAgICBpZiAoaXNf dW5zaWduZWQpIHsKLS0gICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfbG9nX2xldmVsKSA8IHNp emVvZihsb25nKSkgewotLSAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykg dmFsdWUpOwotLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfbG9nX2xldmVsKSA8 PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKLS0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zy b21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZhbHVlKTsKLS0jaWZkZWYgSEFWRV9MT05H X0xPTkcKLS0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2xvZ19sZXZlbCkgPD0g c2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKLS0gICAgICAgICAgICByZXR1cm4gUHlM b25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsK LS0jZW5kaWYKLStzdGF0aWMgUHlPYmplY3QgKl9fUHl4X1B5M0NsYXNzQ3JlYXRlKFB5T2JqZWN0 ICptZXRhY2xhc3MsIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqYmFzZXMsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGljdCwgUHlPYmplY3QgKm1r dywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYWxjdWxhdGVf bWV0YWNsYXNzLCBpbnQgYWxsb3dfcHkyX21ldGFjbGFzcykgewotKyAgICBQeU9iamVjdCAqcmVz dWx0LCAqbWFyZ3M7Ci0rICAgIFB5T2JqZWN0ICpvd25lZF9tZXRhY2xhc3MgPSBOVUxMOwotKyAg ICBpZiAoYWxsb3dfcHkyX21ldGFjbGFzcykgewotKyAgICAgICAgb3duZWRfbWV0YWNsYXNzID0g UHlPYmplY3RfR2V0SXRlbShkaWN0LCBfX3B5eF9uX3NfbWV0YWNsYXNzKTsKLSsgICAgICAgIGlm IChvd25lZF9tZXRhY2xhc3MpIHsKLSsgICAgICAgICAgICBtZXRhY2xhc3MgPSBvd25lZF9tZXRh Y2xhc3M7Ci0rICAgICAgICB9IGVsc2UgaWYgKGxpa2VseShQeUVycl9FeGNlcHRpb25NYXRjaGVz KFB5RXhjX0tleUVycm9yKSkpIHsKLSsgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotKyAgICAg ICAgfSBlbHNlIHsKLSsgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgIH0KLSsgICAg fQotKyAgICBpZiAoY2FsY3VsYXRlX21ldGFjbGFzcyAmJiAoIW1ldGFjbGFzcyB8fCBQeVR5cGVf Q2hlY2sobWV0YWNsYXNzKSkpIHsKLSsgICAgICAgIG1ldGFjbGFzcyA9IF9fUHl4X0NhbGN1bGF0 ZU1ldGFjbGFzcygoUHlUeXBlT2JqZWN0KikgbWV0YWNsYXNzLCBiYXNlcyk7Ci0rICAgICAgICBQ eV9YREVDUkVGKG93bmVkX21ldGFjbGFzcyk7Ci0rICAgICAgICBpZiAodW5saWtlbHkoIW1ldGFj bGFzcykpCi0rICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgICAgICBvd25lZF9tZXRhY2xh c3MgPSBtZXRhY2xhc3M7Ci0rICAgIH0KLSsgICAgbWFyZ3MgPSBQeVR1cGxlX1BhY2soMywgbmFt ZSwgYmFzZXMsIGRpY3QpOwotKyAgICBpZiAodW5saWtlbHkoIW1hcmdzKSkgewotKyAgICAgICAg cmVzdWx0ID0gTlVMTDsKLSAgICAgfSBlbHNlIHsKLS0gICAgICAgIGlmIChzaXplb2YoZW51bSBt cHZfbG9nX2xldmVsKSA8PSBzaXplb2YobG9uZykpIHsKLS0gICAgICAgICAgICByZXR1cm4gUHlJ bnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKLS0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLS0gICAg ICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2xvZ19sZXZlbCkgPD0gc2l6ZW9mKFBZX0xP TkdfTE9ORykpIHsKLS0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZygoUFlf TE9OR19MT05HKSB2YWx1ZSk7Ci0tI2VuZGlmCi0tICAgICAgICB9Ci0rICAgICAgICByZXN1bHQg PSBQeU9iamVjdF9DYWxsKG1ldGFjbGFzcywgbWFyZ3MsIG1rdyk7Ci0rICAgICAgICBQeV9ERUNS RUYobWFyZ3MpOwotICAgICB9Ci0tICAgIHsKLS0gICAgICAgIGludCBvbmUgPSAxOyBpbnQgbGl0 dGxlID0gKGludCkqKHVuc2lnbmVkIGNoYXIgKikmb25lOwotLSAgICAgICAgdW5zaWduZWQgY2hh ciAqYnl0ZXMgPSAodW5zaWduZWQgY2hhciAqKSZ2YWx1ZTsKLS0gICAgICAgIHJldHVybiBfUHlM b25nX0Zyb21CeXRlQXJyYXkoYnl0ZXMsIHNpemVvZihlbnVtIG1wdl9sb2dfbGV2ZWwpLAotLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7 Ci0rICAgIFB5X1hERUNSRUYob3duZWRfbWV0YWNsYXNzKTsKLSsgICAgcmV0dXJuIHJlc3VsdDsK LSt9Ci0rCi0rLyogR2V0TmFtZUluQ2xhc3MgKi8KLStzdGF0aWMgUHlPYmplY3QgKl9fUHl4X0dl dEdsb2JhbE5hbWVBZnRlckF0dHJpYnV0ZUxvb2t1cChQeU9iamVjdCAqbmFtZSkgewotKyAgICBQ eU9iamVjdCAqcmVzdWx0OwotKyAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKLSsgICAg X19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24KLSsgICAgaWYgKHVubGlrZWx5KCFfX1B5eF9QeUVy cl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkpCi0rICAgICAgICByZXR1 cm4gTlVMTDsKLSsgICAgX19QeXhfUHlFcnJfQ2xlYXIoKTsKLSsgICAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZVVuY2FjaGVkKHJlc3VsdCwgbmFtZSk7Ci0rICAgIHJldHVybiByZXN1bHQ7Ci0r fQotK3N0YXRpYyBQeU9iamVjdCAqX19QeXhfX0dldE5hbWVJbkNsYXNzKFB5T2JqZWN0ICpubXNw YWNlLCBQeU9iamVjdCAqbmFtZSkgewotKyAgICBQeU9iamVjdCAqcmVzdWx0OwotKyAgICByZXN1 bHQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG5tc3BhY2UsIG5hbWUpOwotKyAgICBpZiAo IXJlc3VsdCkgewotKyAgICAgICAgcmVzdWx0ID0gX19QeXhfR2V0R2xvYmFsTmFtZUFmdGVyQXR0 cmlidXRlTG9va3VwKG5hbWUpOwotICAgICB9Ci0rICAgIHJldHVybiByZXN1bHQ7Ci0gfQotIAot LS8qIENJbnRUb1B5ICovCi0tc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2VuZF9maWxlX3JlYXNvbihlbnVtIG1wdl9lbmRfZmlsZV9yZWFz b24gdmFsdWUpIHsKLS0gICAgY29uc3QgZW51bSBtcHZfZW5kX2ZpbGVfcmVhc29uIG5lZ19vbmUg PSAoZW51bSBtcHZfZW5kX2ZpbGVfcmVhc29uKSAoKGVudW0gbXB2X2VuZF9maWxlX3JlYXNvbikg MCAtIChlbnVtIG1wdl9lbmRfZmlsZV9yZWFzb24pIDEpLCBjb25zdF96ZXJvID0gKGVudW0gbXB2 X2VuZF9maWxlX3JlYXNvbikgMDsKLS0gICAgY29uc3QgaW50IGlzX3Vuc2lnbmVkID0gbmVnX29u ZSA+IGNvbnN0X3plcm87Ci0tICAgIGlmIChpc191bnNpZ25lZCkgewotLSAgICAgICAgaWYgKHNp emVvZihlbnVtIG1wdl9lbmRfZmlsZV9yZWFzb24pIDwgc2l6ZW9mKGxvbmcpKSB7Ci0tICAgICAg ICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7Ci0tICAgICAgICB9IGVs c2UgaWYgKHNpemVvZihlbnVtIG1wdl9lbmRfZmlsZV9yZWFzb24pIDw9IHNpemVvZih1bnNpZ25l ZCBsb25nKSkgewotLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygo dW5zaWduZWQgbG9uZykgdmFsdWUpOwotLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotLSAgICAgICAg fSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZW5kX2ZpbGVfcmVhc29uKSA8PSBzaXplb2YodW5z aWduZWQgUFlfTE9OR19MT05HKSkgewotLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVu c2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykgdmFsdWUpOwotLSNlbmRpZgot LSAgICAgICAgfQotLSAgICB9IGVsc2UgewotLSAgICAgICAgaWYgKHNpemVvZihlbnVtIG1wdl9l bmRfZmlsZV9yZWFzb24pIDw9IHNpemVvZihsb25nKSkgewotLSAgICAgICAgICAgIHJldHVybiBQ eUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOwotLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotLSAg ICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZW5kX2ZpbGVfcmVhc29uKSA8PSBzaXpl b2YoUFlfTE9OR19MT05HKSkgewotLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdM b25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsKLSsvKiBDTGluZUluVHJhY2ViYWNrICovCi0rI2lm bmRlZiBDWVRIT05fQ0xJTkVfSU5fVFJBQ0VCQUNLCi0rc3RhdGljIGludCBfX1B5eF9DTGluZUZv clRyYWNlYmFjayhDWVRIT05fTkNQX1VOVVNFRCBQeVRocmVhZFN0YXRlICp0c3RhdGUsIGludCBj X2xpbmUpIHsKLSsgICAgUHlPYmplY3QgKnVzZV9jbGluZTsKLSsgICAgUHlPYmplY3QgKnB0eXBl LCAqcHZhbHVlLCAqcHRyYWNlYmFjazsKLSsjaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9DUFlUSE9O Ci0rICAgIFB5T2JqZWN0ICoqY3l0aG9uX3J1bnRpbWVfZGljdDsKLSAjZW5kaWYKLS0gICAgICAg IH0KLSsgICAgaWYgKHVubGlrZWx5KCFfX3B5eF9jeXRob25fcnVudGltZSkpIHsKLSsgICAgICAg IHJldHVybiBjX2xpbmU7Ci0gICAgIH0KLSsgICAgX19QeXhfRXJyRmV0Y2hJblN0YXRlKHRzdGF0 ZSwgJnB0eXBlLCAmcHZhbHVlLCAmcHRyYWNlYmFjayk7Ci0rI2lmIENZVEhPTl9DT01QSUxJTkdf SU5fQ1BZVEhPTgotKyAgICBjeXRob25fcnVudGltZV9kaWN0ID0gX1B5T2JqZWN0X0dldERpY3RQ dHIoX19weXhfY3l0aG9uX3J1bnRpbWUpOwotKyAgICBpZiAobGlrZWx5KGN5dGhvbl9ydW50aW1l X2RpY3QpKSB7Ci0rICAgICAgICBfX1BZWF9QWV9ESUNUX0xPT0tVUF9JRl9NT0RJRklFRCgKLSsg ICAgICAgICAgICB1c2VfY2xpbmUsICpjeXRob25fcnVudGltZV9kaWN0LAotKyAgICAgICAgICAg IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKCpjeXRob25fcnVudGltZV9kaWN0LCBfX3B5eF9uX3Nf Y2xpbmVfaW5fdHJhY2ViYWNrKSkKLSsgICAgfSBlbHNlCi0rI2VuZGlmCi0gICAgIHsKLS0gICAg ICAgIGludCBvbmUgPSAxOyBpbnQgbGl0dGxlID0gKGludCkqKHVuc2lnbmVkIGNoYXIgKikmb25l OwotLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSAodW5zaWduZWQgY2hhciAqKSZ2YWx1 ZTsKLS0gICAgICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnl0ZXMsIHNpemVvZihl bnVtIG1wdl9lbmRfZmlsZV9yZWFzb24pLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7Ci0rICAgICAgUHlPYmplY3QgKnVzZV9jbGlu ZV9vYmogPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X2N5dGhvbl9ydW50aW1lLCBf X3B5eF9uX3NfY2xpbmVfaW5fdHJhY2ViYWNrKTsKLSsgICAgICBpZiAodXNlX2NsaW5lX29iaikg ewotKyAgICAgICAgdXNlX2NsaW5lID0gUHlPYmplY3RfTm90KHVzZV9jbGluZV9vYmopID8gUHlf RmFsc2UgOiBQeV9UcnVlOwotKyAgICAgICAgUHlfREVDUkVGKHVzZV9jbGluZV9vYmopOwotKyAg ICAgIH0gZWxzZSB7Ci0rICAgICAgICBQeUVycl9DbGVhcigpOwotKyAgICAgICAgdXNlX2NsaW5l ID0gTlVMTDsKLSsgICAgICB9Ci0rICAgIH0KLSsgICAgaWYgKCF1c2VfY2xpbmUpIHsKLSsgICAg ICAgIGNfbGluZSA9IDA7Ci0rICAgICAgICAodm9pZCkgUHlPYmplY3RfU2V0QXR0cihfX3B5eF9j eXRob25fcnVudGltZSwgX19weXhfbl9zX2NsaW5lX2luX3RyYWNlYmFjaywgUHlfRmFsc2UpOwot KyAgICB9Ci0rICAgIGVsc2UgaWYgKHVzZV9jbGluZSA9PSBQeV9GYWxzZSB8fCAodXNlX2NsaW5l ICE9IFB5X1RydWUgJiYgUHlPYmplY3RfTm90KHVzZV9jbGluZSkgIT0gMCkpIHsKLSsgICAgICAg IGNfbGluZSA9IDA7Ci0gICAgIH0KLSsgICAgX19QeXhfRXJyUmVzdG9yZUluU3RhdGUodHN0YXRl LCBwdHlwZSwgcHZhbHVlLCBwdHJhY2ViYWNrKTsKLSsgICAgcmV0dXJuIGNfbGluZTsKLSB9Ci0t Ci0tLyogQ0ludFRvUHkgKi8KLS1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhf UHlJbnRfRnJvbV9lbnVtX19tcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKGVudW0gbXB2X3JlbmRlcl91 cGRhdGVfZmxhZyB2YWx1ZSkgewotLSAgICBjb25zdCBlbnVtIG1wdl9yZW5kZXJfdXBkYXRlX2Zs YWcgbmVnX29uZSA9IChlbnVtIG1wdl9yZW5kZXJfdXBkYXRlX2ZsYWcpICgoZW51bSBtcHZfcmVu ZGVyX3VwZGF0ZV9mbGFnKSAwIC0gKGVudW0gbXB2X3JlbmRlcl91cGRhdGVfZmxhZykgMSksIGNv bnN0X3plcm8gPSAoZW51bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKSAwOwotLSAgICBjb25zdCBp bnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsKLS0gICAgaWYgKGlzX3Vuc2ln bmVkKSB7Ci0tICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X3JlbmRlcl91cGRhdGVfZmxhZykg PCBzaXplb2YobG9uZykpIHsKLS0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxv bmcpIHZhbHVlKTsKLS0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X3JlbmRlcl91 cGRhdGVfZmxhZykgPD0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7Ci0tICAgICAgICAgICAgcmV0 dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKSB2YWx1ZSk7Ci0tI2lm ZGVmIEhBVkVfTE9OR19MT05HCi0tICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihlbnVtIG1wdl9y ZW5kZXJfdXBkYXRlX2ZsYWcpIDw9IHNpemVvZih1bnNpZ25lZCBQWV9MT05HX0xPTkcpKSB7Ci0t ICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQg UFlfTE9OR19MT05HKSB2YWx1ZSk7Ci0gI2VuZGlmCi0rCi0rLyogQ29kZU9iamVjdENhY2hlICov Ci0rc3RhdGljIGludCBfX3B5eF9iaXNlY3RfY29kZV9vYmplY3RzKF9fUHl4X0NvZGVPYmplY3RD YWNoZUVudHJ5KiBlbnRyaWVzLCBpbnQgY291bnQsIGludCBjb2RlX2xpbmUpIHsKLSsgICAgaW50 IHN0YXJ0ID0gMCwgbWlkID0gMCwgZW5kID0gY291bnQgLSAxOwotKyAgICBpZiAoZW5kID49IDAg JiYgY29kZV9saW5lID4gZW50cmllc1tlbmRdLmNvZGVfbGluZSkgewotKyAgICAgICAgcmV0dXJu IGNvdW50OwotKyAgICB9Ci0rICAgIHdoaWxlIChzdGFydCA8IGVuZCkgewotKyAgICAgICAgbWlk ID0gc3RhcnQgKyAoZW5kIC0gc3RhcnQpIC8gMjsKLSsgICAgICAgIGlmIChjb2RlX2xpbmUgPCBl bnRyaWVzW21pZF0uY29kZV9saW5lKSB7Ci0rICAgICAgICAgICAgZW5kID0gbWlkOwotKyAgICAg ICAgfSBlbHNlIGlmIChjb2RlX2xpbmUgPiBlbnRyaWVzW21pZF0uY29kZV9saW5lKSB7Ci0rICAg ICAgICAgICAgIHN0YXJ0ID0gbWlkICsgMTsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAg ICAgcmV0dXJuIG1pZDsKLSAgICAgICAgIH0KLSsgICAgfQotKyAgICBpZiAoY29kZV9saW5lIDw9 IGVudHJpZXNbbWlkXS5jb2RlX2xpbmUpIHsKLSsgICAgICAgIHJldHVybiBtaWQ7Ci0gICAgIH0g ZWxzZSB7Ci0tICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X3JlbmRlcl91cGRhdGVfZmxhZykg PD0gc2l6ZW9mKGxvbmcpKSB7Ci0tICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChs b25nKSB2YWx1ZSk7Ci0tI2lmZGVmIEhBVkVfTE9OR19MT05HCi0tICAgICAgICB9IGVsc2UgaWYg KHNpemVvZihlbnVtIG1wdl9yZW5kZXJfdXBkYXRlX2ZsYWcpIDw9IHNpemVvZihQWV9MT05HX0xP TkcpKSB7Ci0tICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKFBZX0xPTkdf TE9ORykgdmFsdWUpOwotLSNlbmRpZgotLSAgICAgICAgfQotKyAgICAgICAgcmV0dXJuIG1pZCAr IDE7Ci0gICAgIH0KLS0gICAgewotLSAgICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0bGUgPSAo aW50KSoodW5zaWduZWQgY2hhciAqKSZvbmU7Ci0tICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRl cyA9ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlOwotLSAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJv bUJ5dGVBcnJheShieXRlcywgc2l6ZW9mKGVudW0gbXB2X3JlbmRlcl91cGRhdGVfZmxhZyksCi0t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZSwgIWlzX3Vuc2lnbmVk KTsKLSt9Ci0rc3RhdGljIFB5Q29kZU9iamVjdCAqX19weXhfZmluZF9jb2RlX29iamVjdChpbnQg Y29kZV9saW5lKSB7Ci0rICAgIFB5Q29kZU9iamVjdCogY29kZV9vYmplY3Q7Ci0rICAgIGludCBw b3M7Ci0rICAgIGlmICh1bmxpa2VseSghY29kZV9saW5lKSB8fCB1bmxpa2VseSghX19weXhfY29k ZV9jYWNoZS5lbnRyaWVzKSkgewotKyAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIH0KLSsgICAg cG9zID0gX19weXhfYmlzZWN0X2NvZGVfb2JqZWN0cyhfX3B5eF9jb2RlX2NhY2hlLmVudHJpZXMs IF9fcHl4X2NvZGVfY2FjaGUuY291bnQsIGNvZGVfbGluZSk7Ci0rICAgIGlmICh1bmxpa2VseShw b3MgPj0gX19weXhfY29kZV9jYWNoZS5jb3VudCkgfHwgdW5saWtlbHkoX19weXhfY29kZV9jYWNo ZS5lbnRyaWVzW3Bvc10uY29kZV9saW5lICE9IGNvZGVfbGluZSkpIHsKLSsgICAgICAgIHJldHVy biBOVUxMOwotICAgICB9Ci0rICAgIGNvZGVfb2JqZWN0ID0gX19weXhfY29kZV9jYWNoZS5lbnRy aWVzW3Bvc10uY29kZV9vYmplY3Q7Ci0rICAgIFB5X0lOQ1JFRihjb2RlX29iamVjdCk7Ci0rICAg IHJldHVybiBjb2RlX29iamVjdDsKLSB9Ci0tCi0tLyogQ0ludFRvUHkgKi8KLS1zdGF0aWMgQ1lU SE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV9pbnQ2NF90KGludDY0X3QgdmFs dWUpIHsKLS0gICAgY29uc3QgaW50NjRfdCBuZWdfb25lID0gKGludDY0X3QpICgoaW50NjRfdCkg MCAtIChpbnQ2NF90KSAxKSwgY29uc3RfemVybyA9IChpbnQ2NF90KSAwOwotLSAgICBjb25zdCBp bnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsKLS0gICAgaWYgKGlzX3Vuc2ln bmVkKSB7Ci0tICAgICAgICBpZiAoc2l6ZW9mKGludDY0X3QpIDwgc2l6ZW9mKGxvbmcpKSB7Ci0t ICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7Ci0tICAgICAg ICB9IGVsc2UgaWYgKHNpemVvZihpbnQ2NF90KSA8PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsK LS0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxv bmcpIHZhbHVlKTsKLS0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLS0gICAgICAgIH0gZWxzZSBpZiAo c2l6ZW9mKGludDY0X3QpIDw9IHNpemVvZih1bnNpZ25lZCBQWV9MT05HX0xPTkcpKSB7Ci0tICAg ICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgUFlf TE9OR19MT05HKSB2YWx1ZSk7Ci0tI2VuZGlmCi0rc3RhdGljIHZvaWQgX19weXhfaW5zZXJ0X2Nv ZGVfb2JqZWN0KGludCBjb2RlX2xpbmUsIFB5Q29kZU9iamVjdCogY29kZV9vYmplY3QpIHsKLSsg ICAgaW50IHBvcywgaTsKLSsgICAgX19QeXhfQ29kZU9iamVjdENhY2hlRW50cnkqIGVudHJpZXMg PSBfX3B5eF9jb2RlX2NhY2hlLmVudHJpZXM7Ci0rICAgIGlmICh1bmxpa2VseSghY29kZV9saW5l KSkgewotKyAgICAgICAgcmV0dXJuOwotKyAgICB9Ci0rICAgIGlmICh1bmxpa2VseSghZW50cmll cykpIHsKLSsgICAgICAgIGVudHJpZXMgPSAoX19QeXhfQ29kZU9iamVjdENhY2hlRW50cnkqKVB5 TWVtX01hbGxvYyg2NCpzaXplb2YoX19QeXhfQ29kZU9iamVjdENhY2hlRW50cnkpKTsKLSsgICAg ICAgIGlmIChsaWtlbHkoZW50cmllcykpIHsKLSsgICAgICAgICAgICBfX3B5eF9jb2RlX2NhY2hl LmVudHJpZXMgPSBlbnRyaWVzOwotKyAgICAgICAgICAgIF9fcHl4X2NvZGVfY2FjaGUubWF4X2Nv dW50ID0gNjQ7Ci0rICAgICAgICAgICAgX19weXhfY29kZV9jYWNoZS5jb3VudCA9IDE7Ci0rICAg ICAgICAgICAgZW50cmllc1swXS5jb2RlX2xpbmUgPSBjb2RlX2xpbmU7Ci0rICAgICAgICAgICAg ZW50cmllc1swXS5jb2RlX29iamVjdCA9IGNvZGVfb2JqZWN0OwotKyAgICAgICAgICAgIFB5X0lO Q1JFRihjb2RlX29iamVjdCk7Ci0gICAgICAgICB9Ci0tICAgIH0gZWxzZSB7Ci0tICAgICAgICBp ZiAoc2l6ZW9mKGludDY0X3QpIDw9IHNpemVvZihsb25nKSkgewotLSAgICAgICAgICAgIHJldHVy biBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOwotLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwot LSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoaW50NjRfdCkgPD0gc2l6ZW9mKFBZX0xPTkdfTE9O RykpIHsKLS0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZygoUFlfTE9OR19M T05HKSB2YWx1ZSk7Ci0tI2VuZGlmCi0rICAgICAgICByZXR1cm47Ci0rICAgIH0KLSsgICAgcG9z ID0gX19weXhfYmlzZWN0X2NvZGVfb2JqZWN0cyhfX3B5eF9jb2RlX2NhY2hlLmVudHJpZXMsIF9f cHl4X2NvZGVfY2FjaGUuY291bnQsIGNvZGVfbGluZSk7Ci0rICAgIGlmICgocG9zIDwgX19weXhf Y29kZV9jYWNoZS5jb3VudCkgJiYgdW5saWtlbHkoX19weXhfY29kZV9jYWNoZS5lbnRyaWVzW3Bv c10uY29kZV9saW5lID09IGNvZGVfbGluZSkpIHsKLSsgICAgICAgIFB5Q29kZU9iamVjdCogdG1w ID0gZW50cmllc1twb3NdLmNvZGVfb2JqZWN0OwotKyAgICAgICAgZW50cmllc1twb3NdLmNvZGVf b2JqZWN0ID0gY29kZV9vYmplY3Q7Ci0rICAgICAgICBQeV9ERUNSRUYodG1wKTsKLSsgICAgICAg IHJldHVybjsKLSsgICAgfQotKyAgICBpZiAoX19weXhfY29kZV9jYWNoZS5jb3VudCA9PSBfX3B5 eF9jb2RlX2NhY2hlLm1heF9jb3VudCkgewotKyAgICAgICAgaW50IG5ld19tYXggPSBfX3B5eF9j b2RlX2NhY2hlLm1heF9jb3VudCArIDY0OwotKyAgICAgICAgZW50cmllcyA9IChfX1B5eF9Db2Rl T2JqZWN0Q2FjaGVFbnRyeSopUHlNZW1fUmVhbGxvYygKLSsgICAgICAgICAgICBfX3B5eF9jb2Rl X2NhY2hlLmVudHJpZXMsICgoc2l6ZV90KW5ld19tYXgpICogc2l6ZW9mKF9fUHl4X0NvZGVPYmpl Y3RDYWNoZUVudHJ5KSk7Ci0rICAgICAgICBpZiAodW5saWtlbHkoIWVudHJpZXMpKSB7Ci0rICAg ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgfQotKyAgICAgICAgX19weXhfY29kZV9jYWNoZS5l bnRyaWVzID0gZW50cmllczsKLSsgICAgICAgIF9fcHl4X2NvZGVfY2FjaGUubWF4X2NvdW50ID0g bmV3X21heDsKLSAgICAgfQotLSAgICB7Ci0tICAgICAgICBpbnQgb25lID0gMTsgaW50IGxpdHRs ZSA9IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsKLS0gICAgICAgIHVuc2lnbmVkIGNoYXIg KmJ5dGVzID0gKHVuc2lnbmVkIGNoYXIgKikmdmFsdWU7Ci0tICAgICAgICByZXR1cm4gX1B5TG9u Z19Gcm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YoaW50NjRfdCksCi0tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZSwgIWlzX3Vuc2lnbmVkKTsKLSsgICAgZm9yIChp PV9fcHl4X2NvZGVfY2FjaGUuY291bnQ7IGk+cG9zOyBpLS0pIHsKLSsgICAgICAgIGVudHJpZXNb aV0gPSBlbnRyaWVzW2ktMV07Ci0gICAgIH0KLSsgICAgZW50cmllc1twb3NdLmNvZGVfbGluZSA9 IGNvZGVfbGluZTsKLSsgICAgZW50cmllc1twb3NdLmNvZGVfb2JqZWN0ID0gY29kZV9vYmplY3Q7 Ci0rICAgIF9fcHl4X2NvZGVfY2FjaGUuY291bnQrKzsKLSsgICAgUHlfSU5DUkVGKGNvZGVfb2Jq ZWN0KTsKLSB9Ci0gCi0tLyogQ0ludFRvUHkgKi8KLS1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9i amVjdCogX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCh1aW50NjRfdCB2YWx1ZSkgewotLSAgICBj b25zdCB1aW50NjRfdCBuZWdfb25lID0gKHVpbnQ2NF90KSAoKHVpbnQ2NF90KSAwIC0gKHVpbnQ2 NF90KSAxKSwgY29uc3RfemVybyA9ICh1aW50NjRfdCkgMDsKLS0gICAgY29uc3QgaW50IGlzX3Vu c2lnbmVkID0gbmVnX29uZSA+IGNvbnN0X3plcm87Ci0tICAgIGlmIChpc191bnNpZ25lZCkgewot LSAgICAgICAgaWYgKHNpemVvZih1aW50NjRfdCkgPCBzaXplb2YobG9uZykpIHsKLS0gICAgICAg ICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKLS0gICAgICAgIH0gZWxz ZSBpZiAoc2l6ZW9mKHVpbnQ2NF90KSA8PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKLS0gICAg ICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZh bHVlKTsKLS0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLS0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9m KHVpbnQ2NF90KSA8PSBzaXplb2YodW5zaWduZWQgUFlfTE9OR19MT05HKSkgewotLSAgICAgICAg ICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIFBZX0xPTkdf TE9ORykgdmFsdWUpOwotLSNlbmRpZgotLSAgICAgICAgfQotLSAgICB9IGVsc2UgewotLSAgICAg ICAgaWYgKHNpemVvZih1aW50NjRfdCkgPD0gc2l6ZW9mKGxvbmcpKSB7Ci0tICAgICAgICAgICAg cmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7Ci0tI2lmZGVmIEhBVkVfTE9OR19M T05HCi0tICAgICAgICB9IGVsc2UgaWYgKHNpemVvZih1aW50NjRfdCkgPD0gc2l6ZW9mKFBZX0xP TkdfTE9ORykpIHsKLS0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZygoUFlf TE9OR19MT05HKSB2YWx1ZSk7Ci0tI2VuZGlmCi0tICAgICAgICB9Ci0rLyogQWRkVHJhY2ViYWNr ICovCi0rI2luY2x1ZGUgImNvbXBpbGUuaCIKLSsjaW5jbHVkZSAiZnJhbWVvYmplY3QuaCIKLSsj aW5jbHVkZSAidHJhY2ViYWNrLmgiCi0rc3RhdGljIFB5Q29kZU9iamVjdCogX19QeXhfQ3JlYXRl Q29kZU9iamVjdEZvclRyYWNlYmFjaygKLSsgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jbmFt ZSwgaW50IGNfbGluZSwKLSsgICAgICAgICAgICBpbnQgcHlfbGluZSwgY29uc3QgY2hhciAqZmls ZW5hbWUpIHsKLSsgICAgUHlDb2RlT2JqZWN0ICpweV9jb2RlID0gTlVMTDsKLSsgICAgUHlPYmpl Y3QgKnB5X2Z1bmNuYW1lID0gTlVMTDsKLSsgICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0r ICAgIFB5T2JqZWN0ICpweV9zcmNmaWxlID0gTlVMTDsKLSsgICAgcHlfc3JjZmlsZSA9IFB5U3Ry aW5nX0Zyb21TdHJpbmcoZmlsZW5hbWUpOwotKyAgICBpZiAoIXB5X3NyY2ZpbGUpIGdvdG8gYmFk OwotKyAgICAjZW5kaWYKLSsgICAgaWYgKGNfbGluZSkgewotKyAgICAgICAgI2lmIFBZX01BSk9S X1ZFUlNJT04gPCAzCi0rICAgICAgICBweV9mdW5jbmFtZSA9IFB5U3RyaW5nX0Zyb21Gb3JtYXQo ICIlcyAoJXM6JWQpIiwgZnVuY25hbWUsIF9fcHl4X2NmaWxlbm0sIGNfbGluZSk7Ci0rICAgICAg ICBpZiAoIXB5X2Z1bmNuYW1lKSBnb3RvIGJhZDsKLSsgICAgICAgICNlbHNlCi0rICAgICAgICBw eV9mdW5jbmFtZSA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCAiJXMgKCVzOiVkKSIsIGZ1bmNuYW1l LCBfX3B5eF9jZmlsZW5tLCBjX2xpbmUpOwotKyAgICAgICAgaWYgKCFweV9mdW5jbmFtZSkgZ290 byBiYWQ7Ci0rICAgICAgICBmdW5jbmFtZSA9IFB5VW5pY29kZV9Bc1VURjgocHlfZnVuY25hbWUp OwotKyAgICAgICAgaWYgKCFmdW5jbmFtZSkgZ290byBiYWQ7Ci0rICAgICAgICAjZW5kaWYKLSsg ICAgfQotKyAgICBlbHNlIHsKLSsgICAgICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotKyAg ICAgICAgcHlfZnVuY25hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGZ1bmNuYW1lKTsKLSsgICAg ICAgIGlmICghcHlfZnVuY25hbWUpIGdvdG8gYmFkOwotKyAgICAgICAgI2VuZGlmCi0rICAgIH0K LSsgICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0rICAgIHB5X2NvZGUgPSBfX1B5eF9QeUNv ZGVfTmV3KAotKyAgICAgICAgMCwKLSsgICAgICAgIDAsCi0rICAgICAgICAwLAotKyAgICAgICAg MCwKLSsgICAgICAgIDAsCi0rICAgICAgICBfX3B5eF9lbXB0eV9ieXRlcywgLypQeU9iamVjdCAq Y29kZSwqLwotKyAgICAgICAgX19weXhfZW1wdHlfdHVwbGUsIC8qUHlPYmplY3QgKmNvbnN0cywq LwotKyAgICAgICAgX19weXhfZW1wdHlfdHVwbGUsIC8qUHlPYmplY3QgKm5hbWVzLCovCi0rICAg ICAgICBfX3B5eF9lbXB0eV90dXBsZSwgLypQeU9iamVjdCAqdmFybmFtZXMsKi8KLSsgICAgICAg IF9fcHl4X2VtcHR5X3R1cGxlLCAvKlB5T2JqZWN0ICpmcmVldmFycywqLwotKyAgICAgICAgX19w eXhfZW1wdHlfdHVwbGUsIC8qUHlPYmplY3QgKmNlbGx2YXJzLCovCi0rICAgICAgICBweV9zcmNm aWxlLCAgIC8qUHlPYmplY3QgKmZpbGVuYW1lLCovCi0rICAgICAgICBweV9mdW5jbmFtZSwgIC8q UHlPYmplY3QgKm5hbWUsKi8KLSsgICAgICAgIHB5X2xpbmUsCi0rICAgICAgICBfX3B5eF9lbXB0 eV9ieXRlcyAgLypQeU9iamVjdCAqbG5vdGFiKi8KLSsgICAgKTsKLSsgICAgUHlfREVDUkVGKHB5 X3NyY2ZpbGUpOwotKyAgICAjZWxzZQotKyAgICBweV9jb2RlID0gUHlDb2RlX05ld0VtcHR5KGZp bGVuYW1lLCBmdW5jbmFtZSwgcHlfbGluZSk7Ci0rICAgICNlbmRpZgotKyAgICBQeV9YREVDUkVG KHB5X2Z1bmNuYW1lKTsgIC8vIFhERUNSRUYgc2luY2UgaXQncyBvbmx5IHNldCBvbiBQeTMgaWYg Y2xpbmUKLSsgICAgcmV0dXJuIHB5X2NvZGU7Ci0rYmFkOgotKyAgICBQeV9YREVDUkVGKHB5X2Z1 bmNuYW1lKTsKLSsgICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0rICAgIFB5X1hERUNSRUYo cHlfc3JjZmlsZSk7Ci0rICAgICNlbmRpZgotKyAgICByZXR1cm4gTlVMTDsKLSt9Ci0rc3RhdGlj IHZvaWQgX19QeXhfQWRkVHJhY2ViYWNrKGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCBpbnQgY19saW5l LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHlfbGluZSwgY29uc3QgY2hh ciAqZmlsZW5hbWUpIHsKLSsgICAgUHlDb2RlT2JqZWN0ICpweV9jb2RlID0gMDsKLSsgICAgUHlG cmFtZU9iamVjdCAqcHlfZnJhbWUgPSAwOwotKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBf X1B5eF9QeVRocmVhZFN0YXRlX0N1cnJlbnQ7Ci0rICAgIGlmIChjX2xpbmUpIHsKLSsgICAgICAg IGNfbGluZSA9IF9fUHl4X0NMaW5lRm9yVHJhY2ViYWNrKHRzdGF0ZSwgY19saW5lKTsKLSAgICAg fQotLSAgICB7Ci0tICAgICAgICBpbnQgb25lID0gMTsgaW50IGxpdHRsZSA9IChpbnQpKih1bnNp Z25lZCBjaGFyICopJm9uZTsKLS0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVuc2ln bmVkIGNoYXIgKikmdmFsdWU7Ci0tICAgICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5 KGJ5dGVzLCBzaXplb2YodWludDY0X3QpLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7Ci0rICAgIHB5X2NvZGUgPSBfX3B5eF9maW5k X2NvZGVfb2JqZWN0KGNfbGluZSA/IC1jX2xpbmUgOiBweV9saW5lKTsKLSsgICAgaWYgKCFweV9j b2RlKSB7Ci0rICAgICAgICBweV9jb2RlID0gX19QeXhfQ3JlYXRlQ29kZU9iamVjdEZvclRyYWNl YmFjaygKLSsgICAgICAgICAgICBmdW5jbmFtZSwgY19saW5lLCBweV9saW5lLCBmaWxlbmFtZSk7 Ci0rICAgICAgICBpZiAoIXB5X2NvZGUpIGdvdG8gYmFkOwotKyAgICAgICAgX19weXhfaW5zZXJ0 X2NvZGVfb2JqZWN0KGNfbGluZSA/IC1jX2xpbmUgOiBweV9saW5lLCBweV9jb2RlKTsKLSAgICAg fQotKyAgICBweV9mcmFtZSA9IFB5RnJhbWVfTmV3KAotKyAgICAgICAgdHN0YXRlLCAgICAgICAg ICAgIC8qUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCovCi0rICAgICAgICBweV9jb2RlLCAgICAgICAg ICAgLypQeUNvZGVPYmplY3QgKmNvZGUsKi8KLSsgICAgICAgIF9fcHl4X2QsICAgIC8qUHlPYmpl Y3QgKmdsb2JhbHMsKi8KLSsgICAgICAgIDAgICAgICAgICAgICAgICAgICAvKlB5T2JqZWN0ICps b2NhbHMqLwotKyAgICApOwotKyAgICBpZiAoIXB5X2ZyYW1lKSBnb3RvIGJhZDsKLSsgICAgX19Q eXhfUHlGcmFtZV9TZXRMaW5lTnVtYmVyKHB5X2ZyYW1lLCBweV9saW5lKTsKLSsgICAgUHlUcmFj ZUJhY2tfSGVyZShweV9mcmFtZSk7Ci0rYmFkOgotKyAgICBQeV9YREVDUkVGKHB5X2NvZGUpOwot KyAgICBQeV9YREVDUkVGKHB5X2ZyYW1lKTsKLSB9Ci0gCi0tLyogQ0ludFRvUHkgKi8KLS1zdGF0 aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9y bWF0KGVudW0gbXB2X2Zvcm1hdCB2YWx1ZSkgewotLSAgICBjb25zdCBlbnVtIG1wdl9mb3JtYXQg bmVnX29uZSA9IChlbnVtIG1wdl9mb3JtYXQpICgoZW51bSBtcHZfZm9ybWF0KSAwIC0gKGVudW0g bXB2X2Zvcm1hdCkgMSksIGNvbnN0X3plcm8gPSAoZW51bSBtcHZfZm9ybWF0KSAwOwotLSAgICBj b25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsKLS0gICAgaWYgKGlz X3Vuc2lnbmVkKSB7Ci0tICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X2Zvcm1hdCkgPCBzaXpl b2YobG9uZykpIHsKLS0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZh bHVlKTsKLS0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2Zvcm1hdCkgPD0gc2l6 ZW9mKHVuc2lnbmVkIGxvbmcpKSB7Ci0tICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5z aWduZWRMb25nKCh1bnNpZ25lZCBsb25nKSB2YWx1ZSk7Ci0tI2lmZGVmIEhBVkVfTE9OR19MT05H Ci0tICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihlbnVtIG1wdl9mb3JtYXQpIDw9IHNpemVvZih1 bnNpZ25lZCBQWV9MT05HX0xPTkcpKSB7Ci0tICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9t VW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKSB2YWx1ZSk7Ci0tI2VuZGlm Ci0tICAgICAgICB9Ci0tICAgIH0gZWxzZSB7Ci0tICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2 X2Zvcm1hdCkgPD0gc2l6ZW9mKGxvbmcpKSB7Ci0tICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zy b21Mb25nKChsb25nKSB2YWx1ZSk7Ci0tI2lmZGVmIEhBVkVfTE9OR19MT05HCi0tICAgICAgICB9 IGVsc2UgaWYgKHNpemVvZihlbnVtIG1wdl9mb3JtYXQpIDw9IHNpemVvZihQWV9MT05HX0xPTkcp KSB7Ci0tICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9O RykgdmFsdWUpOwotLSNlbmRpZgotLSAgICAgICAgfQotLSAgICB9Ci0tICAgIHsKLS0gICAgICAg IGludCBvbmUgPSAxOyBpbnQgbGl0dGxlID0gKGludCkqKHVuc2lnbmVkIGNoYXIgKikmb25lOwot LSAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSAodW5zaWduZWQgY2hhciAqKSZ2YWx1ZTsK LS0gICAgICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnl0ZXMsIHNpemVvZihlbnVt IG1wdl9mb3JtYXQpLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXR0 bGUsICFpc191bnNpZ25lZCk7Ci0rLyogQ0ludEZyb21QeVZlcmlmeSAqLwotKyNkZWZpbmUgX19Q WVhfVkVSSUZZX1JFVFVSTl9JTlQodGFyZ2V0X3R5cGUsIGZ1bmNfdHlwZSwgZnVuY192YWx1ZSlc Ci0rICAgIF9fUFlYX19WRVJJRllfUkVUVVJOX0lOVCh0YXJnZXRfdHlwZSwgZnVuY190eXBlLCBm dW5jX3ZhbHVlLCAwKQotKyNkZWZpbmUgX19QWVhfVkVSSUZZX1JFVFVSTl9JTlRfRVhDKHRhcmdl dF90eXBlLCBmdW5jX3R5cGUsIGZ1bmNfdmFsdWUpXAotKyAgICBfX1BZWF9fVkVSSUZZX1JFVFVS Tl9JTlQodGFyZ2V0X3R5cGUsIGZ1bmNfdHlwZSwgZnVuY192YWx1ZSwgMSkKLSsjZGVmaW5lIF9f UFlYX19WRVJJRllfUkVUVVJOX0lOVCh0YXJnZXRfdHlwZSwgZnVuY190eXBlLCBmdW5jX3ZhbHVl LCBleGMpXAotKyAgICB7XAotKyAgICAgICAgZnVuY190eXBlIHZhbHVlID0gZnVuY192YWx1ZTtc Ci0rICAgICAgICBpZiAoc2l6ZW9mKHRhcmdldF90eXBlKSA8IHNpemVvZihmdW5jX3R5cGUpKSB7 XAotKyAgICAgICAgICAgIGlmICh1bmxpa2VseSh2YWx1ZSAhPSAoZnVuY190eXBlKSAodGFyZ2V0 X3R5cGUpIHZhbHVlKSkge1wKLSsgICAgICAgICAgICAgICAgZnVuY190eXBlIHplcm8gPSAwO1wK LSsgICAgICAgICAgICAgICAgaWYgKGV4YyAmJiB1bmxpa2VseSh2YWx1ZSA9PSAoZnVuY190eXBl KS0xICYmIFB5RXJyX09jY3VycmVkKCkpKVwKLSsgICAgICAgICAgICAgICAgICAgIHJldHVybiAo dGFyZ2V0X3R5cGUpIC0xO1wKLSsgICAgICAgICAgICAgICAgaWYgKGlzX3Vuc2lnbmVkICYmIHVu bGlrZWx5KHZhbHVlIDwgemVybykpXAotKyAgICAgICAgICAgICAgICAgICAgZ290byByYWlzZV9u ZWdfb3ZlcmZsb3c7XAotKyAgICAgICAgICAgICAgICBlbHNlXAotKyAgICAgICAgICAgICAgICAg ICAgZ290byByYWlzZV9vdmVyZmxvdztcCi0rICAgICAgICAgICAgfVwKLSsgICAgICAgIH1cCi0r ICAgICAgICByZXR1cm4gKHRhcmdldF90eXBlKSB2YWx1ZTtcCi0gICAgIH0KLS19Ci0gCi0gLyog Q0ludFRvUHkgKi8KLS1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRf RnJvbV9sb25nKGxvbmcgdmFsdWUpIHsKLS0gICAgY29uc3QgbG9uZyBuZWdfb25lID0gKGxvbmcp ICgobG9uZykgMCAtIChsb25nKSAxKSwgY29uc3RfemVybyA9IChsb25nKSAwOwotK3N0YXRpYyBD WVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2ludChpbnQgdmFsdWUpIHsK LSsjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCi0rI3ByYWdtYSBHQ0MgZGlhZ25vc3Rp YyBwdXNoCi0rI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCi0r I2VuZGlmCi0rICAgIGNvbnN0IGludCBuZWdfb25lID0gKGludCkgLTEsIGNvbnN0X3plcm8gPSAo aW50KSAwOwotKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKLSsjcHJhZ21hIEdDQyBk aWFnbm9zdGljIHBvcAotKyNlbmRpZgotICAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdf b25lID4gY29uc3RfemVybzsKLSAgICAgaWYgKGlzX3Vuc2lnbmVkKSB7Ci0tICAgICAgICBpZiAo c2l6ZW9mKGxvbmcpIDwgc2l6ZW9mKGxvbmcpKSB7Ci0rICAgICAgICBpZiAoc2l6ZW9mKGludCkg PCBzaXplb2YobG9uZykpIHsKLSAgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxv bmcpIHZhbHVlKTsKLS0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGxvbmcpIDw9IHNpemVvZih1 bnNpZ25lZCBsb25nKSkgewotKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoaW50KSA8PSBzaXpl b2YodW5zaWduZWQgbG9uZykpIHsKLSAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNp Z25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZhbHVlKTsKLSAjaWZkZWYgSEFWRV9MT05HX0xPTkcK LS0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGxvbmcpIDw9IHNpemVvZih1bnNpZ25lZCBQWV9M T05HX0xPTkcpKSB7Ci0rICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihpbnQpIDw9IHNpemVvZih1 bnNpZ25lZCBQWV9MT05HX0xPTkcpKSB7Ci0gICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9t VW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKSB2YWx1ZSk7Ci0gI2VuZGlm Ci0gICAgICAgICB9Ci0gICAgIH0gZWxzZSB7Ci0tICAgICAgICBpZiAoc2l6ZW9mKGxvbmcpIDw9 IHNpemVvZihsb25nKSkgewotKyAgICAgICAgaWYgKHNpemVvZihpbnQpIDw9IHNpemVvZihsb25n KSkgewotICAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOwot ICNpZmRlZiBIQVZFX0xPTkdfTE9ORwotLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YobG9uZykg PD0gc2l6ZW9mKFBZX0xPTkdfTE9ORykpIHsKLSsgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGlu dCkgPD0gc2l6ZW9mKFBZX0xPTkdfTE9ORykpIHsKLSAgICAgICAgICAgICByZXR1cm4gUHlMb25n X0Zyb21Mb25nTG9uZygoUFlfTE9OR19MT05HKSB2YWx1ZSk7Ci0gI2VuZGlmCi0gICAgICAgICB9 Ci1AQCAtMzM2MTcsMTQgKzMwMjEyLDIxIEBAIHN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0 KiBfX1B5eF9QeUludF9Gcm9tX2xvbmcobG9uZyB2YWx1ZSkgewotICAgICB7Ci0gICAgICAgICBp bnQgb25lID0gMTsgaW50IGxpdHRsZSA9IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsKLSAg ICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVuc2lnbmVkIGNoYXIgKikmdmFsdWU7Ci0t ICAgICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YobG9uZyks Ci0rICAgICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YoaW50 KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0dGxlLCAhaXNfdW5z aWduZWQpOwotICAgICB9Ci0gfQotIAotIC8qIENJbnRGcm9tUHkgKi8KLSBzdGF0aWMgQ1lUSE9O X0lOTElORSBpbnQgX19QeXhfUHlJbnRfQXNfaW50KFB5T2JqZWN0ICp4KSB7Ci0tICAgIGNvbnN0 IGludCBuZWdfb25lID0gKGludCkgKChpbnQpIDAgLSAoaW50KSAxKSwgY29uc3RfemVybyA9IChp bnQpIDA7Ci0rI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQwotKyNwcmFnbWEgR0NDIGRp YWdub3N0aWMgcHVzaAotKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJz aW9uIgotKyNlbmRpZgotKyAgICBjb25zdCBpbnQgbmVnX29uZSA9IChpbnQpIC0xLCBjb25zdF96 ZXJvID0gKGludCkgMDsKLSsjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCi0rI3ByYWdt YSBHQ0MgZGlhZ25vc3RpYyBwb3AKLSsjZW5kaWYKLSAgICAgY29uc3QgaW50IGlzX3Vuc2lnbmVk ID0gbmVnX29uZSA+IGNvbnN0X3plcm87Ci0gI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0gICAg IGlmIChsaWtlbHkoUHlJbnRfQ2hlY2soeCkpKSB7Ci1AQCAtMzM4MTEsOSArMzA0MTMsNTQgQEAg c3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4X1B5SW50X0FzX2ludChQeU9iamVjdCAqeCkg ewotICAgICByZXR1cm4gKGludCkgLTE7Ci0gfQotIAotKy8qIENJbnRUb1B5ICovCi0rc3RhdGlj IENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50 X2lkKGVudW0gbXB2X2V2ZW50X2lkIHZhbHVlKSB7Ci0rI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElB R05PU1RJQwotKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAotKyNwcmFnbWEgR0NDIGRpYWdu b3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIgotKyNlbmRpZgotKyAgICBjb25zdCBlbnVtIG1w dl9ldmVudF9pZCBuZWdfb25lID0gKGVudW0gbXB2X2V2ZW50X2lkKSAtMSwgY29uc3RfemVybyA9 IChlbnVtIG1wdl9ldmVudF9pZCkgMDsKLSsjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElD Ci0rI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKLSsjZW5kaWYKLSsgICAgY29uc3QgaW50IGlz X3Vuc2lnbmVkID0gbmVnX29uZSA+IGNvbnN0X3plcm87Ci0rICAgIGlmIChpc191bnNpZ25lZCkg ewotKyAgICAgICAgaWYgKHNpemVvZihlbnVtIG1wdl9ldmVudF9pZCkgPCBzaXplb2YobG9uZykp IHsKLSsgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKLSsg ICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2V2ZW50X2lkKSA8PSBzaXplb2YodW5z aWduZWQgbG9uZykpIHsKLSsgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExv bmcoKHVuc2lnbmVkIGxvbmcpIHZhbHVlKTsKLSsjaWZkZWYgSEFWRV9MT05HX0xPTkcKLSsgICAg ICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2V2ZW50X2lkKSA8PSBzaXplb2YodW5zaWdu ZWQgUFlfTE9OR19MT05HKSkgewotKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2ln bmVkTG9uZ0xvbmcoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykgdmFsdWUpOwotKyNlbmRpZgotKyAg ICAgICAgfQotKyAgICB9IGVsc2UgewotKyAgICAgICAgaWYgKHNpemVvZihlbnVtIG1wdl9ldmVu dF9pZCkgPD0gc2l6ZW9mKGxvbmcpKSB7Ci0rICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21M b25nKChsb25nKSB2YWx1ZSk7Ci0rI2lmZGVmIEhBVkVfTE9OR19MT05HCi0rICAgICAgICB9IGVs c2UgaWYgKHNpemVvZihlbnVtIG1wdl9ldmVudF9pZCkgPD0gc2l6ZW9mKFBZX0xPTkdfTE9ORykp IHsKLSsgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZygoUFlfTE9OR19MT05H KSB2YWx1ZSk7Ci0rI2VuZGlmCi0rICAgICAgICB9Ci0rICAgIH0KLSsgICAgewotKyAgICAgICAg aW50IG9uZSA9IDE7IGludCBsaXR0bGUgPSAoaW50KSoodW5zaWduZWQgY2hhciAqKSZvbmU7Ci0r ICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlOwot KyAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShieXRlcywgc2l6ZW9mKGVudW0g bXB2X2V2ZW50X2lkKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0 dGxlLCAhaXNfdW5zaWduZWQpOwotKyAgICB9Ci0rfQotKwotIC8qIENJbnRGcm9tUHkgKi8KLSBz dGF0aWMgQ1lUSE9OX0lOTElORSBlbnVtIG1wdl9ldmVudF9pZCBfX1B5eF9QeUludF9Bc19lbnVt X19tcHZfZXZlbnRfaWQoUHlPYmplY3QgKngpIHsKLS0gICAgY29uc3QgZW51bSBtcHZfZXZlbnRf aWQgbmVnX29uZSA9IChlbnVtIG1wdl9ldmVudF9pZCkgKChlbnVtIG1wdl9ldmVudF9pZCkgMCAt IChlbnVtIG1wdl9ldmVudF9pZCkgMSksIGNvbnN0X3plcm8gPSAoZW51bSBtcHZfZXZlbnRfaWQp IDA7Ci0rI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQwotKyNwcmFnbWEgR0NDIGRpYWdu b3N0aWMgcHVzaAotKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9u IgotKyNlbmRpZgotKyAgICBjb25zdCBlbnVtIG1wdl9ldmVudF9pZCBuZWdfb25lID0gKGVudW0g bXB2X2V2ZW50X2lkKSAtMSwgY29uc3RfemVybyA9IChlbnVtIG1wdl9ldmVudF9pZCkgMDsKLSsj aWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCi0rI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBw b3AKLSsjZW5kaWYKLSAgICAgY29uc3QgaW50IGlzX3Vuc2lnbmVkID0gbmVnX29uZSA+IGNvbnN0 X3plcm87Ci0gI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCi0gICAgIGlmIChsaWtlbHkoUHlJbnRf Q2hlY2soeCkpKSB7Ci1AQCAtMzM5NDcsNjIgKzMwNTk0LDI1OSBAQCBzdGF0aWMgQ1lUSE9OX0lO TElORSBlbnVtIG1wdl9ldmVudF9pZCBfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZXZlbnRfaWQo UHlPYmplYwotICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgfQotICNl bmRpZgotLSAgICAgICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfZXZlbnRfaWQpIDw9IHNpemVv Zihsb25nKSkgewotLSAgICAgICAgICAgICAgICBfX1BZWF9WRVJJRllfUkVUVVJOX0lOVF9FWEMo ZW51bSBtcHZfZXZlbnRfaWQsIGxvbmcsIFB5TG9uZ19Bc0xvbmcoeCkpCi0rICAgICAgICAgICAg aWYgKHNpemVvZihlbnVtIG1wdl9ldmVudF9pZCkgPD0gc2l6ZW9mKGxvbmcpKSB7Ci0rICAgICAg ICAgICAgICAgIF9fUFlYX1ZFUklGWV9SRVRVUk5fSU5UX0VYQyhlbnVtIG1wdl9ldmVudF9pZCwg bG9uZywgUHlMb25nX0FzTG9uZyh4KSkKLSsjaWZkZWYgSEFWRV9MT05HX0xPTkcKLSsgICAgICAg ICAgICB9IGVsc2UgaWYgKHNpemVvZihlbnVtIG1wdl9ldmVudF9pZCkgPD0gc2l6ZW9mKFBZX0xP TkdfTE9ORykpIHsKLSsgICAgICAgICAgICAgICAgX19QWVhfVkVSSUZZX1JFVFVSTl9JTlRfRVhD KGVudW0gbXB2X2V2ZW50X2lkLCBQWV9MT05HX0xPTkcsIFB5TG9uZ19Bc0xvbmdMb25nKHgpKQot KyNlbmRpZgotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsgICAgICAgIHsKLSsjaWYgQ1lU SE9OX0NPTVBJTElOR19JTl9QWVBZICYmICFkZWZpbmVkKF9QeUxvbmdfQXNCeXRlQXJyYXkpCi0r ICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIl9QeUxvbmdfQXNCeXRlQXJyYXkoKSBub3QgYXZhaWxhYmxl IGluIFB5UHksIGNhbm5vdCBjb252ZXJ0IGxhcmdlIG51bWJlcnMiKTsKLSsjZWxzZQotKyAgICAg ICAgICAgIGVudW0gbXB2X2V2ZW50X2lkIHZhbDsKLSsgICAgICAgICAgICBQeU9iamVjdCAqdiA9 IF9fUHl4X1B5TnVtYmVyX0ludE9yTG9uZyh4KTsKLSsgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAz Ci0rICAgICAgICAgICAgaWYgKGxpa2VseSh2KSAmJiAhUHlMb25nX0NoZWNrKHYpKSB7Ci0rICAg ICAgICAgICAgICAgIFB5T2JqZWN0ICp0bXAgPSB2OwotKyAgICAgICAgICAgICAgICB2ID0gUHlO dW1iZXJfTG9uZyh0bXApOwotKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsKLSsgICAg ICAgICAgICB9Ci0rICNlbmRpZgotKyAgICAgICAgICAgIGlmIChsaWtlbHkodikpIHsKLSsgICAg ICAgICAgICAgICAgaW50IG9uZSA9IDE7IGludCBpc19saXR0bGUgPSAoaW50KSoodW5zaWduZWQg Y2hhciAqKSZvbmU7Ci0rICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVu c2lnbmVkIGNoYXIgKikmdmFsOwotKyAgICAgICAgICAgICAgICBpbnQgcmV0ID0gX1B5TG9uZ19B c0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnl0ZXMsIHNpemVvZih2YWwpLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19saXR0bGUsICFpc191bnNpZ25lZCk7 Ci0rICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSsgICAgICAgICAgICAgICAgaWYgKGxp a2VseSghcmV0KSkKLSsgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7Ci0rICAgICAgICAg ICAgfQotKyNlbmRpZgotKyAgICAgICAgICAgIHJldHVybiAoZW51bSBtcHZfZXZlbnRfaWQpIC0x OwotKyAgICAgICAgfQotKyAgICB9IGVsc2UgewotKyAgICAgICAgZW51bSBtcHZfZXZlbnRfaWQg dmFsOwotKyAgICAgICAgUHlPYmplY3QgKnRtcCA9IF9fUHl4X1B5TnVtYmVyX0ludE9yTG9uZyh4 KTsKLSsgICAgICAgIGlmICghdG1wKSByZXR1cm4gKGVudW0gbXB2X2V2ZW50X2lkKSAtMTsKLSsg ICAgICAgIHZhbCA9IF9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9ldmVudF9pZCh0bXApOwotKyAg ICAgICAgUHlfREVDUkVGKHRtcCk7Ci0rICAgICAgICByZXR1cm4gdmFsOwotKyAgICB9Ci0rcmFp c2Vfb3ZlcmZsb3c6Ci0rICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAot KyAgICAgICAgInZhbHVlIHRvbyBsYXJnZSB0byBjb252ZXJ0IHRvIGVudW0gbXB2X2V2ZW50X2lk Iik7Ci0rICAgIHJldHVybiAoZW51bSBtcHZfZXZlbnRfaWQpIC0xOwotK3JhaXNlX25lZ19vdmVy ZmxvdzoKLSsgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0rICAgICAg ICAiY2FuJ3QgY29udmVydCBuZWdhdGl2ZSB2YWx1ZSB0byBlbnVtIG1wdl9ldmVudF9pZCIpOwot KyAgICByZXR1cm4gKGVudW0gbXB2X2V2ZW50X2lkKSAtMTsKLSt9Ci0rCi0rLyogQ0ludFRvUHkg Ki8KLStzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV91bnNp Z25lZF9sb25nKHVuc2lnbmVkIGxvbmcgdmFsdWUpIHsKLSsjaWZkZWYgX19QeXhfSEFTX0dDQ19E SUFHTk9TVElDCi0rI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCi0rI3ByYWdtYSBHQ0MgZGlh Z25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCi0rI2VuZGlmCi0rICAgIGNvbnN0IHVuc2ln bmVkIGxvbmcgbmVnX29uZSA9ICh1bnNpZ25lZCBsb25nKSAtMSwgY29uc3RfemVybyA9ICh1bnNp Z25lZCBsb25nKSAwOwotKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKLSsjcHJhZ21h IEdDQyBkaWFnbm9zdGljIHBvcAotKyNlbmRpZgotKyAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQg PSBuZWdfb25lID4gY29uc3RfemVybzsKLSsgICAgaWYgKGlzX3Vuc2lnbmVkKSB7Ci0rICAgICAg ICBpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIDwgc2l6ZW9mKGxvbmcpKSB7Ci0rICAgICAgICAg ICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7Ci0rICAgICAgICB9IGVsc2Ug aWYgKHNpemVvZih1bnNpZ25lZCBsb25nKSA8PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKLSsg ICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcp IHZhbHVlKTsKLSsjaWZkZWYgSEFWRV9MT05HX0xPTkcKLSsgICAgICAgIH0gZWxzZSBpZiAoc2l6 ZW9mKHVuc2lnbmVkIGxvbmcpIDw9IHNpemVvZih1bnNpZ25lZCBQWV9MT05HX0xPTkcpKSB7Ci0r ICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQg UFlfTE9OR19MT05HKSB2YWx1ZSk7Ci0rI2VuZGlmCi0rICAgICAgICB9Ci0rICAgIH0gZWxzZSB7 Ci0rICAgICAgICBpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIDw9IHNpemVvZihsb25nKSkgewot KyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOwotKyNpZmRl ZiBIQVZFX0xPTkdfTE9ORwotKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YodW5zaWduZWQgbG9u ZykgPD0gc2l6ZW9mKFBZX0xPTkdfTE9ORykpIHsKLSsgICAgICAgICAgICByZXR1cm4gUHlMb25n X0Zyb21Mb25nTG9uZygoUFlfTE9OR19MT05HKSB2YWx1ZSk7Ci0rI2VuZGlmCi0rICAgICAgICB9 Ci0rICAgIH0KLSsgICAgewotKyAgICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0bGUgPSAoaW50 KSoodW5zaWduZWQgY2hhciAqKSZvbmU7Ci0rICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRlcyA9 ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlOwotKyAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5 dGVBcnJheShieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7Ci0rICAgIH0KLSt9Ci0r Ci0rLyogQ0ludFRvUHkgKi8KLStzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhf UHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoZW51bSBtcHZfZXJyb3IgdmFsdWUpIHsKLSsjaWZk ZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCi0rI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNo Ci0rI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCi0rI2VuZGlm Ci0rICAgIGNvbnN0IGVudW0gbXB2X2Vycm9yIG5lZ19vbmUgPSAoZW51bSBtcHZfZXJyb3IpIC0x LCBjb25zdF96ZXJvID0gKGVudW0gbXB2X2Vycm9yKSAwOwotKyNpZmRlZiBfX1B5eF9IQVNfR0ND X0RJQUdOT1NUSUMKLSsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAotKyNlbmRpZgotKyAgICBj b25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsKLSsgICAgaWYgKGlz X3Vuc2lnbmVkKSB7Ci0rICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X2Vycm9yKSA8IHNpemVv Zihsb25nKSkgewotKyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFs dWUpOwotKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZXJyb3IpIDw9IHNpemVv Zih1bnNpZ25lZCBsb25nKSkgewotKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2ln bmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUpOwotKyNpZmRlZiBIQVZFX0xPTkdfTE9ORwot KyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZXJyb3IpIDw9IHNpemVvZih1bnNp Z25lZCBQWV9MT05HX0xPTkcpKSB7Ci0rICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5z aWduZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKSB2YWx1ZSk7Ci0rI2VuZGlmCi0r ICAgICAgICB9Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X2Vy cm9yKSA8PSBzaXplb2YobG9uZykpIHsKLSsgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxv bmcoKGxvbmcpIHZhbHVlKTsKLSsjaWZkZWYgSEFWRV9MT05HX0xPTkcKLSsgICAgICAgIH0gZWxz ZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2Vycm9yKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgewot KyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZh bHVlKTsKLSsjZW5kaWYKLSsgICAgICAgIH0KLSsgICAgfQotKyAgICB7Ci0rICAgICAgICBpbnQg b25lID0gMTsgaW50IGxpdHRsZSA9IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsKLSsgICAg ICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVuc2lnbmVkIGNoYXIgKikmdmFsdWU7Ci0rICAg ICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YoZW51bSBtcHZf ZXJyb3IpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXR0bGUsICFp c191bnNpZ25lZCk7Ci0rICAgIH0KLSt9Ci0rCi0rLyogQ0ludFRvUHkgKi8KLStzdGF0aWMgQ1lU SE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xldmVs KGVudW0gbXB2X2xvZ19sZXZlbCB2YWx1ZSkgewotKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdO T1NUSUMKLSsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKLSsjcHJhZ21hIEdDQyBkaWFnbm9z dGljIGlnbm9yZWQgIi1XY29udmVyc2lvbiIKLSsjZW5kaWYKLSsgICAgY29uc3QgZW51bSBtcHZf bG9nX2xldmVsIG5lZ19vbmUgPSAoZW51bSBtcHZfbG9nX2xldmVsKSAtMSwgY29uc3RfemVybyA9 IChlbnVtIG1wdl9sb2dfbGV2ZWwpIDA7Ci0rI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJ QwotKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCi0rI2VuZGlmCi0rICAgIGNvbnN0IGludCBp c191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOwotKyAgICBpZiAoaXNfdW5zaWduZWQp IHsKLSsgICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfbG9nX2xldmVsKSA8IHNpemVvZihsb25n KSkgewotKyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOwot KyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfbG9nX2xldmVsKSA8PSBzaXplb2Yo dW5zaWduZWQgbG9uZykpIHsKLSsgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25l ZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZhbHVlKTsKLSsjaWZkZWYgSEFWRV9MT05HX0xPTkcKLSsg ICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2xvZ19sZXZlbCkgPD0gc2l6ZW9mKHVu c2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKLSsgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21V bnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKLSsjZW5kaWYK LSsgICAgICAgIH0KLSsgICAgfSBlbHNlIHsKLSsgICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZf bG9nX2xldmVsKSA8PSBzaXplb2YobG9uZykpIHsKLSsgICAgICAgICAgICByZXR1cm4gUHlJbnRf RnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKLSAjaWZkZWYgSEFWRV9MT05HX0xPTkcKLS0gICAgICAg ICAgICB9IGVsc2UgaWYgKHNpemVvZihlbnVtIG1wdl9ldmVudF9pZCkgPD0gc2l6ZW9mKFBZX0xP TkdfTE9ORykpIHsKLS0gICAgICAgICAgICAgICAgX19QWVhfVkVSSUZZX1JFVFVSTl9JTlRfRVhD KGVudW0gbXB2X2V2ZW50X2lkLCBQWV9MT05HX0xPTkcsIFB5TG9uZ19Bc0xvbmdMb25nKHgpKQot KyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfbG9nX2xldmVsKSA8PSBzaXplb2Yo UFlfTE9OR19MT05HKSkgewotKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25n KChQWV9MT05HX0xPTkcpIHZhbHVlKTsKLSAjZW5kaWYKLS0gICAgICAgICAgICB9Ci0gICAgICAg ICB9Ci0tICAgICAgICB7Ci0tI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fUFlQWSAmJiAhZGVmaW5l ZChfUHlMb25nX0FzQnl0ZUFycmF5KQotLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4 Y19SdW50aW1lRXJyb3IsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfUHlMb25nX0Fz Qnl0ZUFycmF5KCkgbm90IGF2YWlsYWJsZSBpbiBQeVB5LCBjYW5ub3QgY29udmVydCBsYXJnZSBu dW1iZXJzIik7Ci0tI2Vsc2UKLS0gICAgICAgICAgICBlbnVtIG1wdl9ldmVudF9pZCB2YWw7Ci0t ICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBfX1B5eF9QeU51bWJlcl9JbnRPckxvbmcoeCk7Ci0t ICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotLSAgICAgICAgICAgIGlmIChsaWtlbHkodikgJiYg IVB5TG9uZ19DaGVjayh2KSkgewotLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqdG1wID0gdjsK LS0gICAgICAgICAgICAgICAgdiA9IFB5TnVtYmVyX0xvbmcodG1wKTsKLS0gICAgICAgICAgICAg ICAgUHlfREVDUkVGKHRtcCk7Ci0tICAgICAgICAgICAgfQotLSAjZW5kaWYKLS0gICAgICAgICAg ICBpZiAobGlrZWx5KHYpKSB7Ci0tICAgICAgICAgICAgICAgIGludCBvbmUgPSAxOyBpbnQgaXNf bGl0dGxlID0gKGludCkqKHVuc2lnbmVkIGNoYXIgKikmb25lOwotLSAgICAgICAgICAgICAgICB1 bnNpZ25lZCBjaGFyICpieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopJnZhbDsKLS0gICAgICAgICAg ICAgICAgaW50IHJldCA9IF9QeUxvbmdfQXNCeXRlQXJyYXkoKFB5TG9uZ09iamVjdCAqKXYsCi0t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzLCBzaXpl b2YodmFsKSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aXNfbGl0dGxlLCAhaXNfdW5zaWduZWQpOwotLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7 Ci0tICAgICAgICAgICAgICAgIGlmIChsaWtlbHkoIXJldCkpCi0tICAgICAgICAgICAgICAgICAg ICByZXR1cm4gdmFsOwotLSAgICAgICAgICAgIH0KLSsgICAgfQotKyAgICB7Ci0rICAgICAgICBp bnQgb25lID0gMTsgaW50IGxpdHRsZSA9IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsKLSsg ICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVuc2lnbmVkIGNoYXIgKikmdmFsdWU7Ci0r ICAgICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YoZW51bSBt cHZfbG9nX2xldmVsKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0 dGxlLCAhaXNfdW5zaWduZWQpOwotKyAgICB9Ci0rfQotKwotKy8qIENJbnRUb1B5ICovCi0rc3Rh dGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vu ZF9maWxlX3JlYXNvbihlbnVtIG1wdl9lbmRfZmlsZV9yZWFzb24gdmFsdWUpIHsKLSsjaWZkZWYg X19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCi0rI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCi0r I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCi0rI2VuZGlmCi0r ICAgIGNvbnN0IGVudW0gbXB2X2VuZF9maWxlX3JlYXNvbiBuZWdfb25lID0gKGVudW0gbXB2X2Vu ZF9maWxlX3JlYXNvbikgLTEsIGNvbnN0X3plcm8gPSAoZW51bSBtcHZfZW5kX2ZpbGVfcmVhc29u KSAwOwotKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKLSsjcHJhZ21hIEdDQyBkaWFn bm9zdGljIHBvcAotKyNlbmRpZgotKyAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25l ID4gY29uc3RfemVybzsKLSsgICAgaWYgKGlzX3Vuc2lnbmVkKSB7Ci0rICAgICAgICBpZiAoc2l6 ZW9mKGVudW0gbXB2X2VuZF9maWxlX3JlYXNvbikgPCBzaXplb2YobG9uZykpIHsKLSsgICAgICAg ICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKLSsgICAgICAgIH0gZWxz ZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2VuZF9maWxlX3JlYXNvbikgPD0gc2l6ZW9mKHVuc2lnbmVk IGxvbmcpKSB7Ci0rICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1 bnNpZ25lZCBsb25nKSB2YWx1ZSk7Ci0rI2lmZGVmIEhBVkVfTE9OR19MT05HCi0rICAgICAgICB9 IGVsc2UgaWYgKHNpemVvZihlbnVtIG1wdl9lbmRfZmlsZV9yZWFzb24pIDw9IHNpemVvZih1bnNp Z25lZCBQWV9MT05HX0xPTkcpKSB7Ci0rICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5z aWduZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKSB2YWx1ZSk7Ci0gI2VuZGlmCi0t ICAgICAgICAgICAgcmV0dXJuIChlbnVtIG1wdl9ldmVudF9pZCkgLTE7Ci0gICAgICAgICB9Ci0g ICAgIH0gZWxzZSB7Ci0tICAgICAgICBlbnVtIG1wdl9ldmVudF9pZCB2YWw7Ci0tICAgICAgICBQ eU9iamVjdCAqdG1wID0gX19QeXhfUHlOdW1iZXJfSW50T3JMb25nKHgpOwotLSAgICAgICAgaWYg KCF0bXApIHJldHVybiAoZW51bSBtcHZfZXZlbnRfaWQpIC0xOwotLSAgICAgICAgdmFsID0gX19Q eXhfUHlJbnRfQXNfZW51bV9fbXB2X2V2ZW50X2lkKHRtcCk7Ci0tICAgICAgICBQeV9ERUNSRUYo dG1wKTsKLS0gICAgICAgIHJldHVybiB2YWw7Ci0rICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2 X2VuZF9maWxlX3JlYXNvbikgPD0gc2l6ZW9mKGxvbmcpKSB7Ci0rICAgICAgICAgICAgcmV0dXJu IFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7Ci0rI2lmZGVmIEhBVkVfTE9OR19MT05HCi0r ICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihlbnVtIG1wdl9lbmRfZmlsZV9yZWFzb24pIDw9IHNp emVvZihQWV9MT05HX0xPTkcpKSB7Ci0rICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9u Z0xvbmcoKFBZX0xPTkdfTE9ORykgdmFsdWUpOwotKyNlbmRpZgotKyAgICAgICAgfQotKyAgICB9 Ci0rICAgIHsKLSsgICAgICAgIGludCBvbmUgPSAxOyBpbnQgbGl0dGxlID0gKGludCkqKHVuc2ln bmVkIGNoYXIgKikmb25lOwotKyAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSAodW5zaWdu ZWQgY2hhciAqKSZ2YWx1ZTsKLSsgICAgICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXko Ynl0ZXMsIHNpemVvZihlbnVtIG1wdl9lbmRfZmlsZV9yZWFzb24pLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7Ci0rICAgIH0KLSt9 Ci0rCi0rLyogQ0ludFRvUHkgKi8KLStzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19Q eXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKGVudW0gbXB2X3JlbmRl cl91cGRhdGVfZmxhZyB2YWx1ZSkgewotKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMK LSsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKLSsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGln bm9yZWQgIi1XY29udmVyc2lvbiIKLSsjZW5kaWYKLSsgICAgY29uc3QgZW51bSBtcHZfcmVuZGVy X3VwZGF0ZV9mbGFnIG5lZ19vbmUgPSAoZW51bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKSAtMSwg Y29uc3RfemVybyA9IChlbnVtIG1wdl9yZW5kZXJfdXBkYXRlX2ZsYWcpIDA7Ci0rI2lmZGVmIF9f UHl4X0hBU19HQ0NfRElBR05PU1RJQwotKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCi0rI2Vu ZGlmCi0rICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOwot KyAgICBpZiAoaXNfdW5zaWduZWQpIHsKLSsgICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfcmVu ZGVyX3VwZGF0ZV9mbGFnKSA8IHNpemVvZihsb25nKSkgewotKyAgICAgICAgICAgIHJldHVybiBQ eUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOwotKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2Yo ZW51bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKSA8PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsK LSsgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxv bmcpIHZhbHVlKTsKLSsjaWZkZWYgSEFWRV9MT05HX0xPTkcKLSsgICAgICAgIH0gZWxzZSBpZiAo c2l6ZW9mKGVudW0gbXB2X3JlbmRlcl91cGRhdGVfZmxhZykgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZ X0xPTkdfTE9ORykpIHsKLSsgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExv bmdMb25nKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKLSsjZW5kaWYKLSsgICAgICAg IH0KLSsgICAgfSBlbHNlIHsKLSsgICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfcmVuZGVyX3Vw ZGF0ZV9mbGFnKSA8PSBzaXplb2YobG9uZykpIHsKLSsgICAgICAgICAgICByZXR1cm4gUHlJbnRf RnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKLSsjaWZkZWYgSEFWRV9MT05HX0xPTkcKLSsgICAgICAg IH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X3JlbmRlcl91cGRhdGVfZmxhZykgPD0gc2l6ZW9m KFBZX0xPTkdfTE9ORykpIHsKLSsgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9u ZygoUFlfTE9OR19MT05HKSB2YWx1ZSk7Ci0rI2VuZGlmCi0rICAgICAgICB9Ci0rICAgIH0KLSsg ICAgewotKyAgICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0bGUgPSAoaW50KSoodW5zaWduZWQg Y2hhciAqKSZvbmU7Ci0rICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRlcyA9ICh1bnNpZ25lZCBj aGFyICopJnZhbHVlOwotKyAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShieXRl cywgc2l6ZW9mKGVudW0gbXB2X3JlbmRlcl91cGRhdGVfZmxhZyksCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZSwgIWlzX3Vuc2lnbmVkKTsKLSAgICAgfQotLXJh aXNlX292ZXJmbG93OgotLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwK LS0gICAgICAgICJ2YWx1ZSB0b28gbGFyZ2UgdG8gY29udmVydCB0byBlbnVtIG1wdl9ldmVudF9p ZCIpOwotLSAgICByZXR1cm4gKGVudW0gbXB2X2V2ZW50X2lkKSAtMTsKLS1yYWlzZV9uZWdfb3Zl cmZsb3c6Ci0tICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotLSAgICAg ICAgImNhbid0IGNvbnZlcnQgbmVnYXRpdmUgdmFsdWUgdG8gZW51bSBtcHZfZXZlbnRfaWQiKTsK LS0gICAgcmV0dXJuIChlbnVtIG1wdl9ldmVudF9pZCkgLTE7Ci0gfQotIAotIC8qIENJbnRGcm9t UHkgKi8KLSBzdGF0aWMgQ1lUSE9OX0lOTElORSBsb25nIF9fUHl4X1B5SW50X0FzX2xvbmcoUHlP YmplY3QgKngpIHsKLS0gICAgY29uc3QgbG9uZyBuZWdfb25lID0gKGxvbmcpICgobG9uZykgMCAt IChsb25nKSAxKSwgY29uc3RfemVybyA9IChsb25nKSAwOwotKyNpZmRlZiBfX1B5eF9IQVNfR0ND X0RJQUdOT1NUSUMKLSsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKLSsjcHJhZ21hIEdDQyBk aWFnbm9zdGljIGlnbm9yZWQgIi1XY29udmVyc2lvbiIKLSsjZW5kaWYKLSsgICAgY29uc3QgbG9u ZyBuZWdfb25lID0gKGxvbmcpIC0xLCBjb25zdF96ZXJvID0gKGxvbmcpIDA7Ci0rI2lmZGVmIF9f UHl4X0hBU19HQ0NfRElBR05PU1RJQwotKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCi0rI2Vu ZGlmCi0gICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOwot ICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotICAgICBpZiAobGlrZWx5KFB5SW50X0NoZWNrKHgp KSkgewotQEAgLTM0MTg5LDkgKzMxMDMzLDkyIEBAIHN0YXRpYyBDWVRIT05fSU5MSU5FIGxvbmcg X19QeXhfUHlJbnRfQXNfbG9uZyhQeU9iamVjdCAqeCkgewotICAgICByZXR1cm4gKGxvbmcpIC0x OwotIH0KLSAKLSsvKiBDSW50VG9QeSAqLwotK3N0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0 KiBfX1B5eF9QeUludF9Gcm9tX2ludDY0X3QoaW50NjRfdCB2YWx1ZSkgewotKyNpZmRlZiBfX1B5 eF9IQVNfR0NDX0RJQUdOT1NUSUMKLSsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKLSsjcHJh Z21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XY29udmVyc2lvbiIKLSsjZW5kaWYKLSsgICAg Y29uc3QgaW50NjRfdCBuZWdfb25lID0gKGludDY0X3QpIC0xLCBjb25zdF96ZXJvID0gKGludDY0 X3QpIDA7Ci0rI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQwotKyNwcmFnbWEgR0NDIGRp YWdub3N0aWMgcG9wCi0rI2VuZGlmCi0rICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19v bmUgPiBjb25zdF96ZXJvOwotKyAgICBpZiAoaXNfdW5zaWduZWQpIHsKLSsgICAgICAgIGlmIChz aXplb2YoaW50NjRfdCkgPCBzaXplb2YobG9uZykpIHsKLSsgICAgICAgICAgICByZXR1cm4gUHlJ bnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGlu dDY0X3QpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgewotKyAgICAgICAgICAgIHJldHVybiBQ eUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUpOwotKyNpZmRlZiBI QVZFX0xPTkdfTE9ORwotKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoaW50NjRfdCkgPD0gc2l6 ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKLSsgICAgICAgICAgICByZXR1cm4gUHlMb25n X0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKLSsj ZW5kaWYKLSsgICAgICAgIH0KLSsgICAgfSBlbHNlIHsKLSsgICAgICAgIGlmIChzaXplb2YoaW50 NjRfdCkgPD0gc2l6ZW9mKGxvbmcpKSB7Ci0rICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21M b25nKChsb25nKSB2YWx1ZSk7Ci0rI2lmZGVmIEhBVkVfTE9OR19MT05HCi0rICAgICAgICB9IGVs c2UgaWYgKHNpemVvZihpbnQ2NF90KSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgewotKyAgICAg ICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsK LSsjZW5kaWYKLSsgICAgICAgIH0KLSsgICAgfQotKyAgICB7Ci0rICAgICAgICBpbnQgb25lID0g MTsgaW50IGxpdHRsZSA9IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsKLSsgICAgICAgIHVu c2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVuc2lnbmVkIGNoYXIgKikmdmFsdWU7Ci0rICAgICAgICBy ZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YoaW50NjRfdCksCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZSwgIWlzX3Vuc2lnbmVkKTsK LSsgICAgfQotK30KLSsKLSsvKiBDSW50VG9QeSAqLwotK3N0YXRpYyBDWVRIT05fSU5MSU5FIFB5 T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KHVpbnQ2NF90IHZhbHVlKSB7Ci0rI2lm ZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQwotKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVz aAotKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIgotKyNlbmRp ZgotKyAgICBjb25zdCB1aW50NjRfdCBuZWdfb25lID0gKHVpbnQ2NF90KSAtMSwgY29uc3RfemVy byA9ICh1aW50NjRfdCkgMDsKLSsjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCi0rI3By YWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKLSsjZW5kaWYKLSsgICAgY29uc3QgaW50IGlzX3Vuc2ln bmVkID0gbmVnX29uZSA+IGNvbnN0X3plcm87Ci0rICAgIGlmIChpc191bnNpZ25lZCkgewotKyAg ICAgICAgaWYgKHNpemVvZih1aW50NjRfdCkgPCBzaXplb2YobG9uZykpIHsKLSsgICAgICAgICAg ICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKLSsgICAgICAgIH0gZWxzZSBp ZiAoc2l6ZW9mKHVpbnQ2NF90KSA8PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKLSsgICAgICAg ICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZhbHVl KTsKLSsjaWZkZWYgSEFWRV9MT05HX0xPTkcKLSsgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKHVp bnQ2NF90KSA8PSBzaXplb2YodW5zaWduZWQgUFlfTE9OR19MT05HKSkgewotKyAgICAgICAgICAg IHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIFBZX0xPTkdfTE9O RykgdmFsdWUpOwotKyNlbmRpZgotKyAgICAgICAgfQotKyAgICB9IGVsc2UgewotKyAgICAgICAg aWYgKHNpemVvZih1aW50NjRfdCkgPD0gc2l6ZW9mKGxvbmcpKSB7Ci0rICAgICAgICAgICAgcmV0 dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7Ci0rI2lmZGVmIEhBVkVfTE9OR19MT05H Ci0rICAgICAgICB9IGVsc2UgaWYgKHNpemVvZih1aW50NjRfdCkgPD0gc2l6ZW9mKFBZX0xPTkdf TE9ORykpIHsKLSsgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZygoUFlfTE9O R19MT05HKSB2YWx1ZSk7Ci0rI2VuZGlmCi0rICAgICAgICB9Ci0rICAgIH0KLSsgICAgewotKyAg ICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0bGUgPSAoaW50KSoodW5zaWduZWQgY2hhciAqKSZv bmU7Ci0rICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopJnZh bHVlOwotKyAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShieXRlcywgc2l6ZW9m KHVpbnQ2NF90KSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0dGxl LCAhaXNfdW5zaWduZWQpOwotKyAgICB9Ci0rfQotKwotIC8qIENJbnRGcm9tUHkgKi8KLSBzdGF0 aWMgQ1lUSE9OX0lOTElORSB1aW50NjRfdCBfX1B5eF9QeUludF9Bc191aW50NjRfdChQeU9iamVj dCAqeCkgewotLSAgICBjb25zdCB1aW50NjRfdCBuZWdfb25lID0gKHVpbnQ2NF90KSAoKHVpbnQ2 NF90KSAwIC0gKHVpbnQ2NF90KSAxKSwgY29uc3RfemVybyA9ICh1aW50NjRfdCkgMDsKLSsjaWZk ZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCi0rI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNo Ci0rI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCi0rI2VuZGlm Ci0rICAgIGNvbnN0IHVpbnQ2NF90IG5lZ19vbmUgPSAodWludDY0X3QpIC0xLCBjb25zdF96ZXJv ID0gKHVpbnQ2NF90KSAwOwotKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKLSsjcHJh Z21hIEdDQyBkaWFnbm9zdGljIHBvcAotKyNlbmRpZgotICAgICBjb25zdCBpbnQgaXNfdW5zaWdu ZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsKLSAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLSAg ICAgaWYgKGxpa2VseShQeUludF9DaGVjayh4KSkpIHsKLUBAIC0zNDM3OCw5ICszMTMwNSw1NCBA QCBzdGF0aWMgQ1lUSE9OX0lOTElORSB1aW50NjRfdCBfX1B5eF9QeUludF9Bc191aW50NjRfdChQ eU9iamVjdCAqeCkgewotICAgICByZXR1cm4gKHVpbnQ2NF90KSAtMTsKLSB9Ci0gCi0rLyogQ0lu dFRvUHkgKi8KLStzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZm9ybWF0KGVudW0gbXB2X2Zvcm1hdCB2YWx1ZSkgewotKyNpZmRlZiBfX1B5 eF9IQVNfR0NDX0RJQUdOT1NUSUMKLSsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKLSsjcHJh Z21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XY29udmVyc2lvbiIKLSsjZW5kaWYKLSsgICAg Y29uc3QgZW51bSBtcHZfZm9ybWF0IG5lZ19vbmUgPSAoZW51bSBtcHZfZm9ybWF0KSAtMSwgY29u c3RfemVybyA9IChlbnVtIG1wdl9mb3JtYXQpIDA7Ci0rI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElB R05PU1RJQwotKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCi0rI2VuZGlmCi0rICAgIGNvbnN0 IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOwotKyAgICBpZiAoaXNfdW5z aWduZWQpIHsKLSsgICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfZm9ybWF0KSA8IHNpemVvZihs b25nKSkgewotKyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUp OwotKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZm9ybWF0KSA8PSBzaXplb2Yo dW5zaWduZWQgbG9uZykpIHsKLSsgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25l ZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZhbHVlKTsKLSsjaWZkZWYgSEFWRV9MT05HX0xPTkcKLSsg ICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2Zvcm1hdCkgPD0gc2l6ZW9mKHVuc2ln bmVkIFBZX0xPTkdfTE9ORykpIHsKLSsgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNp Z25lZExvbmdMb25nKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKLSsjZW5kaWYKLSsg ICAgICAgIH0KLSsgICAgfSBlbHNlIHsKLSsgICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfZm9y bWF0KSA8PSBzaXplb2YobG9uZykpIHsKLSsgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxv bmcoKGxvbmcpIHZhbHVlKTsKLSsjaWZkZWYgSEFWRV9MT05HX0xPTkcKLSsgICAgICAgIH0gZWxz ZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2Zvcm1hdCkgPD0gc2l6ZW9mKFBZX0xPTkdfTE9ORykpIHsK LSsgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZygoUFlfTE9OR19MT05HKSB2 YWx1ZSk7Ci0rI2VuZGlmCi0rICAgICAgICB9Ci0rICAgIH0KLSsgICAgewotKyAgICAgICAgaW50 IG9uZSA9IDE7IGludCBsaXR0bGUgPSAoaW50KSoodW5zaWduZWQgY2hhciAqKSZvbmU7Ci0rICAg ICAgICB1bnNpZ25lZCBjaGFyICpieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlOwotKyAg ICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShieXRlcywgc2l6ZW9mKGVudW0gbXB2 X2Zvcm1hdCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZSwg IWlzX3Vuc2lnbmVkKTsKLSsgICAgfQotK30KLSsKLSAvKiBDSW50RnJvbVB5ICovCi0gc3RhdGlj IENZVEhPTl9JTkxJTkUgZW51bSBtcHZfZm9ybWF0IF9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9m b3JtYXQoUHlPYmplY3QgKngpIHsKLS0gICAgY29uc3QgZW51bSBtcHZfZm9ybWF0IG5lZ19vbmUg PSAoZW51bSBtcHZfZm9ybWF0KSAoKGVudW0gbXB2X2Zvcm1hdCkgMCAtIChlbnVtIG1wdl9mb3Jt YXQpIDEpLCBjb25zdF96ZXJvID0gKGVudW0gbXB2X2Zvcm1hdCkgMDsKLSsjaWZkZWYgX19QeXhf SEFTX0dDQ19ESUFHTk9TVElDCi0rI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCi0rI3ByYWdt YSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCi0rI2VuZGlmCi0rICAgIGNv bnN0IGVudW0gbXB2X2Zvcm1hdCBuZWdfb25lID0gKGVudW0gbXB2X2Zvcm1hdCkgLTEsIGNvbnN0 X3plcm8gPSAoZW51bSBtcHZfZm9ybWF0KSAwOwotKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdO T1NUSUMKLSsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAotKyNlbmRpZgotICAgICBjb25zdCBp bnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsKLSAjaWYgUFlfTUFKT1JfVkVS U0lPTiA8IDMKLSAgICAgaWYgKGxpa2VseShQeUludF9DaGVjayh4KSkpIHsKLUBAIC0zNDU2OSw3 ICszMTU0MSwxNCBAQCBzdGF0aWMgQ1lUSE9OX0lOTElORSBlbnVtIG1wdl9mb3JtYXQgX19QeXhf UHlJbnRfQXNfZW51bV9fbXB2X2Zvcm1hdChQeU9iamVjdCAqeAotIAotIC8qIENJbnRGcm9tUHkg Ki8KLSBzdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQ2NF90IF9fUHl4X1B5SW50X0FzX2ludDY0X3Qo UHlPYmplY3QgKngpIHsKLS0gICAgY29uc3QgaW50NjRfdCBuZWdfb25lID0gKGludDY0X3QpICgo aW50NjRfdCkgMCAtIChpbnQ2NF90KSAxKSwgY29uc3RfemVybyA9IChpbnQ2NF90KSAwOwotKyNp ZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKLSsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1 c2gKLSsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XY29udmVyc2lvbiIKLSsjZW5k aWYKLSsgICAgY29uc3QgaW50NjRfdCBuZWdfb25lID0gKGludDY0X3QpIC0xLCBjb25zdF96ZXJv ID0gKGludDY0X3QpIDA7Ci0rI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQwotKyNwcmFn bWEgR0NDIGRpYWdub3N0aWMgcG9wCi0rI2VuZGlmCi0gICAgIGNvbnN0IGludCBpc191bnNpZ25l ZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOwotICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwotICAg ICBpZiAobGlrZWx5KFB5SW50X0NoZWNrKHgpKSkgewotQEAgLTM0NzU4LDcgKzMxNzM3LDE0IEBA IHN0YXRpYyBDWVRIT05fSU5MSU5FIGludDY0X3QgX19QeXhfUHlJbnRfQXNfaW50NjRfdChQeU9i amVjdCAqeCkgewotIAotIC8qIENJbnRGcm9tUHkgKi8KLSBzdGF0aWMgQ1lUSE9OX0lOTElORSBp bnRwdHJfdCBfX1B5eF9QeUludF9Bc19pbnRwdHJfdChQeU9iamVjdCAqeCkgewotLSAgICBjb25z dCBpbnRwdHJfdCBuZWdfb25lID0gKGludHB0cl90KSAoKGludHB0cl90KSAwIC0gKGludHB0cl90 KSAxKSwgY29uc3RfemVybyA9IChpbnRwdHJfdCkgMDsKLSsjaWZkZWYgX19QeXhfSEFTX0dDQ19E SUFHTk9TVElDCi0rI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCi0rI3ByYWdtYSBHQ0MgZGlh Z25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCi0rI2VuZGlmCi0rICAgIGNvbnN0IGludHB0 cl90IG5lZ19vbmUgPSAoaW50cHRyX3QpIC0xLCBjb25zdF96ZXJvID0gKGludHB0cl90KSAwOwot KyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKLSsjcHJhZ21hIEdDQyBkaWFnbm9zdGlj IHBvcAotKyNlbmRpZgotICAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29u c3RfemVybzsKLSAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKLSAgICAgaWYgKGxpa2VseShQeUlu dF9DaGVjayh4KSkpIHsKLUBAIC0zNDk0NSw2ICszMTkzMSw0NCBAQCBzdGF0aWMgQ1lUSE9OX0lO TElORSBpbnRwdHJfdCBfX1B5eF9QeUludF9Bc19pbnRwdHJfdChQeU9iamVjdCAqeCkgewotICAg ICByZXR1cm4gKGludHB0cl90KSAtMTsKLSB9Ci0gCi0rLyogQ0ludFRvUHkgKi8KLStzdGF0aWMg Q1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV9sb25nKGxvbmcgdmFsdWUp IHsKLSsjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCi0rI3ByYWdtYSBHQ0MgZGlhZ25v c3RpYyBwdXNoCi0rI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24i Ci0rI2VuZGlmCi0rICAgIGNvbnN0IGxvbmcgbmVnX29uZSA9IChsb25nKSAtMSwgY29uc3RfemVy byA9IChsb25nKSAwOwotKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKLSsjcHJhZ21h IEdDQyBkaWFnbm9zdGljIHBvcAotKyNlbmRpZgotKyAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQg PSBuZWdfb25lID4gY29uc3RfemVybzsKLSsgICAgaWYgKGlzX3Vuc2lnbmVkKSB7Ci0rICAgICAg ICBpZiAoc2l6ZW9mKGxvbmcpIDwgc2l6ZW9mKGxvbmcpKSB7Ci0rICAgICAgICAgICAgcmV0dXJu IFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7Ci0rICAgICAgICB9IGVsc2UgaWYgKHNpemVv Zihsb25nKSA8PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKLSsgICAgICAgICAgICByZXR1cm4g UHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZhbHVlKTsKLSsjaWZkZWYg SEFWRV9MT05HX0xPTkcKLSsgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGxvbmcpIDw9IHNpemVv Zih1bnNpZ25lZCBQWV9MT05HX0xPTkcpKSB7Ci0rICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19G cm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKSB2YWx1ZSk7Ci0rI2Vu ZGlmCi0rICAgICAgICB9Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgICBpZiAoc2l6ZW9mKGxvbmcp IDw9IHNpemVvZihsb25nKSkgewotKyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygo bG9uZykgdmFsdWUpOwotKyNpZmRlZiBIQVZFX0xPTkdfTE9ORwotKyAgICAgICAgfSBlbHNlIGlm IChzaXplb2YobG9uZykgPD0gc2l6ZW9mKFBZX0xPTkdfTE9ORykpIHsKLSsgICAgICAgICAgICBy ZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZygoUFlfTE9OR19MT05HKSB2YWx1ZSk7Ci0rI2VuZGlm Ci0rICAgICAgICB9Ci0rICAgIH0KLSsgICAgewotKyAgICAgICAgaW50IG9uZSA9IDE7IGludCBs aXR0bGUgPSAoaW50KSoodW5zaWduZWQgY2hhciAqKSZvbmU7Ci0rICAgICAgICB1bnNpZ25lZCBj aGFyICpieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlOwotKyAgICAgICAgcmV0dXJuIF9Q eUxvbmdfRnJvbUJ5dGVBcnJheShieXRlcywgc2l6ZW9mKGxvbmcpLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7Ci0rICAgIH0KLSt9 Ci0rCi0gLyogQ2hlY2tCaW5hcnlWZXJzaW9uICovCi0gc3RhdGljIGludCBfX1B5eF9jaGVja19i aW5hcnlfdmVyc2lvbih2b2lkKSB7Ci0gICAgIGNoYXIgY3R2ZXJzaW9uWzRdLCBydHZlcnNpb25b NF07Ci1AQCAtMzUyMTEsNyArMzIyMzUsNyBAQCBzdGF0aWMgQ1lUSE9OX0lOTElORSBQeV9zc2l6 ZV90IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KFB5T2JqZWN0KiBiKSB7Ci0gfQotIHN0YXRpYyBD WVRIT05fSU5MSU5FIFB5X2hhc2hfdCBfX1B5eF9QeUluZGV4X0FzSGFzaF90KFB5T2JqZWN0KiBv KSB7Ci0gICBpZiAoc2l6ZW9mKFB5X2hhc2hfdCkgPT0gc2l6ZW9mKFB5X3NzaXplX3QpKSB7Ci0t ICAgIHJldHVybiBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChvKTsKLSsgICAgcmV0dXJuIChQeV9o YXNoX3QpIF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KG8pOwotICNpZiBQWV9NQUpPUl9WRVJTSU9O IDwgMwotICAgfSBlbHNlIGlmIChsaWtlbHkoUHlJbnRfQ2hlY2tFeGFjdChvKSkpIHsKLSAgICAg cmV0dXJuIFB5SW50X0FTX0xPTkcobyk7CiBkaWZmIC0tZ2l0IGEvdmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCBiL3ZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgKIGluZGV4IDU0MGVhNjQ5 Li44YWYyZGNjNyAxMDA2NDQKIC0tLSBhL3ZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgKZGlm ZiAtLWdpdCBhL3NyY3BrZ3MvdmlkY3V0dGVyL3BhdGNoZXMvbXB2LTAuMzUtMy5wYXRjaCBiL3Ny Y3BrZ3MvdmlkY3V0dGVyL3BhdGNoZXMvbXB2LTAuMzUtMy5wYXRjaAppbmRleCA3YTFiMjkwOWI0 YzQuLmQxZjVmMTM2NGM2MiAxMDA2NDQKLS0tIGEvc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9t cHYtMC4zNS0zLnBhdGNoCisrKyBiL3NyY3BrZ3MvdmlkY3V0dGVyL3BhdGNoZXMvbXB2LTAuMzUt My5wYXRjaApAQCAtMTAsMTMyNjYgKzEwLDYgQEAgU3ViamVjdDogW1BBVENIXSBweW1wdiB1cGRh dGVzCiAgdmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCB8ICAgIDYgKy0KICAyIGZpbGVzIGNo YW5nZWQsIDE5MDAgaW5zZXJ0aW9ucygrKSwgMTg5OCBkZWxldGlvbnMoLSkKIAotZGlmZiAtLWdp dCBhL3ZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5jIGIvdmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LmMKLWluZGV4IGEzNTIyZWY1Li4yNjgzOGEwMyAxMDA2NDQKLS0tLSBhL3ZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5jCi0rKysgYi92aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYuYwotQEAgLTk0NCw3 ICs5NDQsNyBAQCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xS ZW5kZXJDb250ZXh0OwotIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19f cHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9yczsKLSBzdHJ1Y3QgX19weXhfb3B0X2FyZ3NfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfdm9pZHA7Ci0gCi0tLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5MAotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4OTIKLSAgKiAgICAgICAgIHNlbGYucGFyYW1zWzBdLnR5cGUgPSBNUFZfUkVOREVS X1BBUkFNX0lOVkFMSUQKLSAgKiAKLSAgKiAgICAgY2RlZiBhZGRfdm9pZHAoc2VsZiwgbXB2X3Jl bmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFsc2UpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtOTU2LDcgKzk1Niw3IEBAIHN0cnVjdCBfX3B5eF9vcHRf YXJnc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF92b2lkcCB7Ci0g ICBpbnQgb3duZWQ7Ci0gfTsKLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTU2Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE1OAotICAqIAotICAqIAot ICAqIGNkZWYgY2xhc3MgRW5kT2ZGaWxlUmVhY2hlZChvYmplY3QpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci1AQCAtOTcxLDcgKzk3MSw3IEBAIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgewotIH07Ci0gCi0gCi0tLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE4MgotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxODQKLSAgKiAKLSAgKiAKLSAgKiBjZGVmIGNsYXNzIExvZ01lc3NhZ2Uob2JqZWN0 KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTk4OCw3ICs5ODgsNyBAQCBzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlIHsKLSB9OwotIAot IAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDMKLSsvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MjQ1Ci0gICogCi0gICogCi0gICogY2RlZiBjbGFzcyBQcm9w ZXJ0eShvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTAwMyw3ICsx MDAzLDcgQEAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkg ewotIH07Ci0gCi0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1NgotKy8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTgKLSAgKiAKLSAgKiAKLSAgKiBjZGVm IGNsYXNzIEV2ZW50KG9iamVjdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0x MDIwLDcgKzEwMjAsNyBAQCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudCB7Ci0gfTsKLSAKLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzU5 Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM2MQotICAqIAotICAqIAotICAq IGNkZWYgY2xhc3MgQ29udGV4dChvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtMTAzNyw3ICsxMDM3LDcgQEAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCB7Ci0gfTsKLSAKLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6ODgxCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4MwotICAqIERF RiBNQVhfUkVOREVSX1BBUkFNUyA9IDMyCi0gICogCi0gICogY2RlZiBjbGFzcyBfUmVuZGVyUGFy YW1zKG9iamVjdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMDUyLDcgKzEw NTIsNyBAQCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zIHsKLSB9OwotIAotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjgK LSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTMwCi0gICogCi0gICogQGN5dGhv bi5pbnRlcm5hbAotICAqIGNkZWYgY2xhc3MgUmVuZGVyRnJhbWVJbmZvKG9iamVjdCk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMDY1LDcgKzEwNjUsNyBAQCBzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gewotIH07Ci0gCi0g Ci0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzNwotKy8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5MzkKLSAgKiAgICAgICAgIHJldHVybiBzZWxmCi0gICogCi0g ICogY2RlZiBjbGFzcyBSZW5kZXJDb250ZXh0KG9iamVjdCk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLUBAIC0xMDg0LDcgKzEwODQsNyBAQCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0IHsKLSB9OwotIAotIAotLS8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTIyCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExMjQKLSAgKiAgICAgICAgIHNlbGYuY2xvc2UoKQotICAqIAotICAqIGNkZWYgY2xhc3Mg T3BlbkdMUmVuZGVyQ29udGV4dChSZW5kZXJDb250ZXh0KTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotQEAgLTEwOTYsNyArMTA5Niw3IEBAIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQgewotIH07Ci0gCi0gCi0tLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOAotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozMjAKLSAgKiAKLSAgKiAKLSAgKiBkZWYgX2Vycm9ycyhmbik6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMTEwLDcgKzExMTAsNyBAQCBzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgewotIAot IAotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNTYKLSsvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTU4Ci0gICogCi0gICogCi0gICogY2RlZiBjbGFzcyBF bmRPZkZpbGVSZWFjaGVkKG9iamVjdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC0xMTI0LDcgKzExMjQsNyBAQCBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCB7Ci0gc3RhdGljIHN0cnVjdCBfX3B5eF92dGFic3Ry dWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICpfX3B5eF92dGFicHRy Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkOwotIAotIAotLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxODIKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTg0Ci0gICogCi0gICogCi0gICogY2RlZiBjbGFzcyBMb2dNZXNzYWdlKG9iamVj dCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMTM4LDcgKzExMzgsNyBAQCBz dHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSB7 Ci0gc3RhdGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9M b2dNZXNzYWdlICpfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl OwotIAotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDMKLSsvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjQ1Ci0gICogCi0gICogCi0gICogY2RlZiBjbGFz cyBQcm9wZXJ0eShvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTE1 Miw3ICsxMTUyLDcgQEAgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18z bXB2X1Byb3BlcnR5IHsKLSBzdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRl cl80bGlic18zbXB2X1Byb3BlcnR5ICpfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Qcm9wZXJ0eTsKLSAKLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjU2 Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1OAotICAqIAotICAqIAotICAq IGNkZWYgY2xhc3MgRXZlbnQob2JqZWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTExNjcsNyArMTE2Nyw3IEBAIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FdmVudCB7Ci0gc3RhdGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRXZlbnQ7Ci0gCi0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1OQot Ky8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNjEKLSAgKiAKLSAgKiAKLSAgKiBj ZGVmIGNsYXNzIENvbnRleHQob2JqZWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTExODQsNyArMTE4NCw3IEBAIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0IHsKLSBzdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQ7Ci0gCi0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojg4MQotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4ODMKLSAgKiBERUYgTUFY X1JFTkRFUl9QQVJBTVMgPSAzMgotICAqIAotICAqIGNkZWYgY2xhc3MgX1JlbmRlclBhcmFtcyhv YmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTIwMCw3ICsxMjAwLDcg QEAgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQ YXJhbXMgewotIHN0YXRpYyBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX1JlbmRlclBhcmFtcyAqX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X1JlbmRlclBhcmFtczsKLSAKLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTI4Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMAotICAqIAotICAqIEBj eXRob24uaW50ZXJuYWwKLSAgKiBjZGVmIGNsYXNzIFJlbmRlckZyYW1lSW5mbyhvYmplY3QpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMjUyMiw5ICsyNTIyLDkgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRl ckNvbnRleHQoUHlUeXBlT2IKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzKFB5VHlwZU9iamVjdCAq dCwgUHlPYmplY3QgKmEsIFB5T2JqZWN0ICprKTsgLypwcm90byovCi0gc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9pbnRfMDsKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8xOwotLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfaW50XzI7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9pbnRfMzsKLSBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8zMjsKLStzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2lu dF8xMDk7Ci0gc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9pbnRfNTcxMzE2OTsKLSBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ludF85MDk1ODI2MjsKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8x NDIwMzY5MTA7Ci1AQCAtMjU4OCw3ICsyNTg4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9j b2Rlb2JqX181MzsKLSBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzU1OwotIC8qIExh dGUgaW5jbHVkZXMgKi8KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTUK LSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcKLSAgKiBfc3RyZGVjX2VyciA9 ICJzdXJyb2dhdGVlc2NhcGUiIGlmIF9pc19weTMgZWxzZSAic3RyaWN0IgotICAqICMgbXB2IC0+ IFB5dGhvbgotICAqIGRlZiBfc3RyZGVjKHMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtMjYyNyw3ICsyNjI3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICoKLSAgIGludCBf X3B5eF9jbGluZW5vID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfc3RyZGVj IiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTYKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OAotICAqICMgbXB2IC0+IFB5dGhvbgot ICAqIGRlZiBfc3RyZGVjKHMpOgotICAqICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLUBAIC0yNjQzLDcgKzI2NDMsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fc3RyZGVjKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKgotICAg ICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7Ci0gICAgIC8qdHJ5OiovIHsKLSAKLS0gICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcKLSsgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NTkKLSAgKiBkZWYgX3N0cmRlYyhzKToKLSAgKiAgICAgdHJ5 OgotICAqICAgICAgICAgcmV0dXJuIHMuZGVjb2RlKCJ1dGYtOCIsIF9zdHJkZWNfZXJyKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMjY1MSw5ICsyNjUxLDkgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRIT05fVU5V U0VEIFB5T2JqZWN0ICoKLSAgKiAgICAgICAgICMgSW4gcHl0aG9uMiwgYmFpbCB0byBieXRlcyBv biBmYWlsdXJlCi0gICovCi0gICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gICAgICBf X3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfcywgX19weXhfbl9z X2RlY29kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDU3LCBfX3B5 eF9MM19lcnJvcikKLSsgICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KF9fcHl4X3ZfcywgX19weXhfbl9zX2RlY29kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkg X19QWVhfRVJSKDAsIDU5LCBfX3B5eF9MM19lcnJvcikKLSAgICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF81KTsKLS0gICAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19w eXhfbl9zX3N0cmRlY19lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCA1NywgX19weXhfTDNfZXJyb3IpCi0rICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShf X3B5eF90XzYsIF9fcHl4X25fc19zdHJkZWNfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgNTksIF9fcHl4X0wzX2Vycm9yKQotICAgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzYpOwotICAgICAgIF9fcHl4X3RfNyA9IE5VTEw7Ci0gICAgICAgX19weXhfdF84ID0g MDsKLUBAIC0yNjcwLDcgKzI2NzAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fc3RyZGVjKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKgotICAgICAg ICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKLSAgICAgICBpZiAoUHlGdW5jdGlvbl9DaGVjayhfX3B5 eF90XzUpKSB7Ci0gICAgICAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90Xzcs IF9fcHl4X2twX3NfdXRmXzgsIF9fcHl4X3RfNn07Ci0tICAgICAgICBfX3B5eF90XzQgPSBfX1B5 eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsxLV9fcHl4X3RfOCwg MitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA1Nywg X19weXhfTDNfZXJyb3IpCi0rICAgICAgICBfX3B5eF90XzQgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zh c3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsxLV9fcHl4X3RfOCwgMitfX3B5eF90XzgpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA1OSwgX19weXhfTDNfZXJyb3Ip Ci0gICAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0gICAg ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSAgICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOwotQEAgLTI2NzksMTQgKzI2NzksMTQgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRIT05fVU5V U0VEIFB5T2JqZWN0ICoKLSAgICAgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAotICAgICAgIGlm IChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2soX19weXhfdF81KSkgewotICAgICAgICAgUHlP YmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF83LCBfX3B5eF9rcF9zX3V0Zl84LCBfX3B5 eF90XzZ9OwotLSAgICAgICAgX19weXhfdF80ID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwo X19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF84LCAyK19fcHl4X3RfOCk7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDU3LCBfX3B5eF9MM19lcnJvcikKLSsgICAg ICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19w eXhfdGVtcCsxLV9fcHl4X3RfOCwgMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCA1OSwgX19weXhfTDNfZXJyb3IpCi0gICAgICAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0gICAgICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF80KTsKLSAgICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OwotICAgICAgIH0gZWxzZQotICAgICAgICNlbmRpZgotICAgICAgIHsKLS0gICAgICAgIF9fcHl4 X3RfOSA9IFB5VHVwbGVfTmV3KDIrX19weXhfdF84KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90Xzkp KSBfX1BZWF9FUlIoMCwgNTcsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgICAgX19weXhfdF85ID0g UHlUdXBsZV9OZXcoMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlY X0VSUigwLCA1OSwgX19weXhfTDNfZXJyb3IpCi0gICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF85KTsKLSAgICAgICAgIGlmIChfX3B5eF90XzcpIHsKLSAgICAgICAgICAgX19QeXhfR0lWRVJF RihfX3B5eF90XzcpOyBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfOSwgMCwgX19weXhfdF83KTsg X19weXhfdF83ID0gTlVMTDsKLUBAIC0yNjk3LDcgKzI2OTcsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fc3RyZGVjKENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKgotICAgICAgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzYpOwotICAgICAgICAgUHlU dXBsZV9TRVRfSVRFTShfX3B5eF90XzksIDErX19weXhfdF84LCBfX3B5eF90XzYpOwotICAgICAg ICAgX19weXhfdF82ID0gMDsKLS0gICAgICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0Nh bGwoX19weXhfdF81LCBfX3B5eF90XzksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCA1NywgX19weXhfTDNfZXJyb3IpCi0rICAgICAgICBfX3B5eF90XzQgPSBf X1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfNSwgX19weXhfdF85LCBOVUxMKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNTksIF9fcHl4X0wzX2Vycm9yKQotICAgICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0gICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhf dF85KTsgX19weXhfdF85ID0gMDsKLSAgICAgICB9Ci1AQCAtMjcwNiw3ICsyNzA2LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICoKLSAgICAgICBfX3B5eF90XzQgPSAwOwotICAgICAgIGdvdG8g X19weXhfTDdfdHJ5X3JldHVybjsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTYKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTgK LSAgKiAjIG1wdiAtPiBQeXRob24KLSAgKiBkZWYgX3N0cmRlYyhzKToKLSAgKiAgICAgdHJ5OiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMjcyMSw3ICsyNzIxLDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRIT05f VU5VU0VEIFB5T2JqZWN0ICoKLSAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90 XzcgPSAwOwotICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7Ci0g Ci0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OAotKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjAKLSAgKiAgICAgdHJ5OgotICAqICAgICAgICAg cmV0dXJuIHMuZGVjb2RlKCJ1dGYtOCIsIF9zdHJkZWNfZXJyKQotICAqICAgICBleGNlcHQgVW5p Y29kZURlY29kZUVycm9yOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMjczMSwx MiArMjczMSwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fc3RyZGVjKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKgotICAgICBfX3B5eF90XzggPSBf X1B5eF9QeUVycl9FeGNlcHRpb25NYXRjaGVzKF9fcHl4X2J1aWx0aW5fVW5pY29kZURlY29kZUVy cm9yKTsKLSAgICAgaWYgKF9fcHl4X3RfOCkgewotICAgICAgIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2Ll9zdHJkZWMiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8s IF9fcHl4X2ZpbGVuYW1lKTsKLS0gICAgICBpZiAoX19QeXhfR2V0RXhjZXB0aW9uKCZfX3B5eF90 XzQsICZfX3B5eF90XzUsICZfX3B5eF90XzkpIDwgMCkgX19QWVhfRVJSKDAsIDU4LCBfX3B5eF9M NV9leGNlcHRfZXJyb3IpCi0rICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlvbigmX19weXhfdF80 LCAmX19weXhfdF81LCAmX19weXhfdF85KSA8IDApIF9fUFlYX0VSUigwLCA2MCwgX19weXhfTDVf ZXhjZXB0X2Vycm9yKQotICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotICAgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzUpOwotICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzkpOwot IAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MAotKyAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MgotICAqICAgICBleGNlcHQgVW5pY29k ZURlY29kZUVycm9yOgotICAqICAgICAgICAgIyBJbiBweXRob24yLCBiYWlsIHRvIGJ5dGVzIG9u IGZhaWx1cmUKLSAgKiAgICAgICAgIHJldHVybiBieXRlcyhzKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci1AQCAtMjc0NCw3ICsyNzQ0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICoK LSAgKiAjIFB5dGhvbiAtPiBtcHYKLSAgKi8KLSAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Ip OwotLSAgICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoKChQeU9iamVj dCAqKSgmUHlCeXRlc19UeXBlKSksIF9fcHl4X3Zfcyk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDYwLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCi0rICAgICAgX19weXhf dF82ID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZygoKFB5T2JqZWN0ICopKCZQeUJ5dGVzX1R5 cGUpKSwgX19weXhfdl9zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg NjIsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKLSAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82 KTsKLSAgICAgICBfX3B5eF9yID0gX19weXhfdF82OwotICAgICAgIF9fcHl4X3RfNiA9IDA7Ci1A QCAtMjc1Niw3ICsyNzU2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICoKLSAgICAgZ290byBf X3B5eF9MNV9leGNlcHRfZXJyb3I7Ci0gICAgIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcjo7Ci0gCi0t ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NgotKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTgKLSAgKiAjIG1wdiAtPiBQeXRob24KLSAgKiBkZWYg X3N0cmRlYyhzKToKLSAgKiAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1A QCAtMjc4Miw3ICsyNzgyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICoKLSAgICAgZ290byBf X3B5eF9MMDsKLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 NQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU3Ci0gICogX3N0cmRlY19l cnIgPSAic3Vycm9nYXRlZXNjYXBlIiBpZiBfaXNfcHkzIGVsc2UgInN0cmljdCIKLSAgKiAjIG1w diAtPiBQeXRob24KLSAgKiBkZWYgX3N0cmRlYyhzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotQEAgLTI4MDUsNyArMjgwNSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2X19zdHJkZWMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqCi0gICBy ZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjYzCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1Ci0gICogCi0gICogIyBQ eXRob24gLT4gbXB2Ci0gICogZGVmIF9zdHJlbmMocyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLUBAIC0yODQ0LDcgKzI4NDQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8yX3N0cmVuYyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0Ci0gICBp bnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX3N0 cmVuYyIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0Ci0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYKLSAgKiAjIFB5dGhvbiAtPiBt cHYKLSAgKiBkZWYgX3N0cmVuYyhzKToKLSAgKiAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci1AQCAtMjg2MCw3ICsyODYwLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMl9zdHJlbmMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAot ICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7Ci0gICAgIC8qdHJ5OiovIHsKLSAKLS0gICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjUKLSsgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjcKLSAgKiBkZWYgX3N0cmVuYyhzKToKLSAgKiAgICAg dHJ5OgotICAqICAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCJ1dGYtOCIsIF9zdHJkZWNfZXJyKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMjg2OCw5ICsyODY4LDkgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMl9zdHJlbmMoQ1lUSE9O X1VOVVNFRCBQeU9iamVjdAotICAqICAgICAgICAgIyBJbiBweXRob24yLCBhc3N1bWUgYnl0ZXMg YW5kIHdhbGsgcmlnaHQgdGhyb3VnaAotICAqLwotICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhf cik7Ci0tICAgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92 X3MsIF9fcHl4X25fc19lbmNvZGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VS UigwLCA2NSwgX19weXhfTDNfZXJyb3IpCi0rICAgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmpl Y3RfR2V0QXR0clN0cihfX3B5eF92X3MsIF9fcHl4X25fc19lbmNvZGUpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA2NywgX19weXhfTDNfZXJyb3IpCi0gICAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNSk7Ci0tICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShf X3B5eF90XzYsIF9fcHl4X25fc19zdHJkZWNfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgNjUsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgIF9fUHl4X0dldE1vZHVs ZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3Nfc3RyZGVjX2Vycik7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDY3LCBfX3B5eF9MM19lcnJvcikKLSAgICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSAgICAgICBfX3B5eF90XzcgPSBOVUxMOwotICAgICAg IF9fcHl4X3RfOCA9IDA7Ci1AQCAtMjg4Nyw3ICsyODg3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMl9zdHJlbmMoQ1lUSE9OX1VOVVNFRCBQeU9i amVjdAotICAgICAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKLSAgICAgICBpZiAoUHlGdW5jdGlv bl9DaGVjayhfX3B5eF90XzUpKSB7Ci0gICAgICAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9 IHtfX3B5eF90XzcsIF9fcHl4X2twX3NfdXRmXzgsIF9fcHl4X3RfNn07Ci0tICAgICAgICBfX3B5 eF90XzQgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsx LV9fcHl4X3RfOCwgMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCA2NSwgX19weXhfTDNfZXJyb3IpCi0rICAgICAgICBfX3B5eF90XzQgPSBfX1B5eF9Q eUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsxLV9fcHl4X3RfOCwgMitf X3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2NywgX19w eXhfTDNfZXJyb3IpCi0gICAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3Rf NyA9IDA7Ci0gICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSAgICAgICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotQEAgLTI4OTYsMTQgKzI4OTYsMTQg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMl9zdHJl bmMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAotICAgICAgICNpZiBDWVRIT05fRkFTVF9QWUNDQUxM Ci0gICAgICAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzUpKSB7Ci0g ICAgICAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzcsIF9fcHl4X2twX3Nf dXRmXzgsIF9fcHl4X3RfNn07Ci0tICAgICAgICBfX3B5eF90XzQgPSBfX1B5eF9QeUNGdW5jdGlv bl9GYXN0Q2FsbChfX3B5eF90XzUsIF9fcHl4X3RlbXArMS1fX3B5eF90XzgsIDIrX19weXhfdF84 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNjUsIF9fcHl4X0wzX2Vy cm9yKQotKyAgICAgICAgX19weXhfdF80ID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19w eXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF84LCAyK19fcHl4X3RfOCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDY3LCBfX3B5eF9MM19lcnJvcikKLSAgICAgICAg IF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLSAgICAgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzQpOwotICAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9f cHl4X3RfNiA9IDA7Ci0gICAgICAgfSBlbHNlCi0gICAgICAgI2VuZGlmCi0gICAgICAgewotLSAg ICAgICAgX19weXhfdF85ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfOSkpIF9fUFlYX0VSUigwLCA2NSwgX19weXhfTDNfZXJyb3IpCi0rICAgICAgICBf X3B5eF90XzkgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfOCk7IGlmICh1bmxpa2VseSghX19weXhf dF85KSkgX19QWVhfRVJSKDAsIDY3LCBfX3B5eF9MM19lcnJvcikKLSAgICAgICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzkpOwotICAgICAgICAgaWYgKF9fcHl4X3RfNykgewotICAgICAgICAgICBf X1B5eF9HSVZFUkVGKF9fcHl4X3RfNyk7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF85LCAwLCBf X3B5eF90XzcpOyBfX3B5eF90XzcgPSBOVUxMOwotQEAgLTI5MTQsNyArMjkxNCw3IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzJfc3RyZW5jKENZVEhP Tl9VTlVTRUQgUHlPYmplY3QKLSAgICAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF82KTsKLSAg ICAgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF85LCAxK19fcHl4X3RfOCwgX19weXhfdF82 KTsKLSAgICAgICAgIF9fcHl4X3RfNiA9IDA7Ci0tICAgICAgICBfX3B5eF90XzQgPSBfX1B5eF9Q eU9iamVjdF9DYWxsKF9fcHl4X3RfNSwgX19weXhfdF85LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNjUsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgICAgX19w eXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzUsIF9fcHl4X3RfOSwgTlVMTCk7 IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDY3LCBfX3B5eF9MM19lcnJv cikKLSAgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotICAgICAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7Ci0gICAgICAgfQotQEAgLTI5MjMsNyArMjky Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzJf c3RyZW5jKENZVEhPTl9VTlVTRUQgUHlPYmplY3QKLSAgICAgICBfX3B5eF90XzQgPSAwOwotICAg ICAgIGdvdG8gX19weXhfTDdfdHJ5X3JldHVybjsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NjQKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NjYKLSAgKiAjIFB5dGhvbiAtPiBtcHYKLSAgKiBkZWYgX3N0cmVuYyhzKToKLSAgKiAg ICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMjkzOCw3ICsyOTM4LDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMl9zdHJl bmMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAotICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7 IF9fcHl4X3RfNyA9IDA7Ci0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsgX19weXhfdF85 ID0gMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2Ci0rICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2OAotICAqICAgICB0cnk6Ci0gICog ICAgICAgICByZXR1cm4gcy5lbmNvZGUoInV0Zi04IiwgX3N0cmRlY19lcnIpCi0gICogICAgIGV4 Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC0yOTQ4LDEyICsyOTQ4LDEyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzJfc3RyZW5jKENZVEhPTl9VTlVTRUQgUHlPYmplY3QKLSAgICAgX19weXhf dF84ID0gX19QeXhfUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhfX3B5eF9idWlsdGluX1VuaWNvZGVF bmNvZGVFcnJvcik7Ci0gICAgIGlmIChfX3B5eF90XzgpIHsKLSAgICAgICBfX1B5eF9BZGRUcmFj ZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fc3RyZW5jIiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlvbigm X19weXhfdF80LCAmX19weXhfdF81LCAmX19weXhfdF85KSA8IDApIF9fUFlYX0VSUigwLCA2Niwg X19weXhfTDVfZXhjZXB0X2Vycm9yKQotKyAgICAgIGlmIChfX1B5eF9HZXRFeGNlcHRpb24oJl9f cHl4X3RfNCwgJl9fcHl4X3RfNSwgJl9fcHl4X3RfOSkgPCAwKSBfX1BZWF9FUlIoMCwgNjgsIF9f cHl4X0w1X2V4Y2VwdF9lcnJvcikKLSAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSAg ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKLSAgICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF85KTsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjgKLSsg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAKLSAgKiAgICAgZXhjZXB0 IFVuaWNvZGVFbmNvZGVFcnJvcjoKLSAgKiAgICAgICAgICMgSW4gcHl0aG9uMiwgYXNzdW1lIGJ5 dGVzIGFuZCB3YWxrIHJpZ2h0IHRocm91Z2gKLSAgKiAgICAgICAgIHJldHVybiBzICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0yOTcxLDcgKzI5NzEsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8yX3N0cmVuYyhDWVRIT05fVU5VU0VE IFB5T2JqZWN0Ci0gICAgIGdvdG8gX19weXhfTDVfZXhjZXB0X2Vycm9yOwotICAgICBfX3B5eF9M NV9leGNlcHRfZXJyb3I6OwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjQKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2Ci0gICogIyBQ eXRob24gLT4gbXB2Ci0gICogZGVmIF9zdHJlbmMocyk6Ci0gICogICAgIHRyeTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTI5OTcsNyArMjk5Nyw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzJfc3RyZW5jKENZVEhPTl9VTlVTRUQg UHlPYmplY3QKLSAgICAgZ290byBfX3B5eF9MMDsKLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjY1Ci0gICogCi0gICogIyBQeXRob24gLT4gbXB2Ci0gICogZGVmIF9zdHJlbmMocyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0zMDIwLDcgKzMwMjAsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8yX3N0cmVuYyhDWVRIT05f VU5VU0VEIFB5T2JqZWN0Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjE2MwotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxNjUKLSAgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHJlYXNvbiwgZXJyb3IKLSAgKiAK LSAgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfZW5kX2ZpbGUqIGVvZik6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0zMDM3LDE0ICszMDM3LDE0IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVk X19pbml0KHN0cnVjdCBfCi0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX2luaXQiLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxNjQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox NjYKLSAgKiAKLSAgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfZW5kX2ZpbGUqIGVv Zik6Ci0gICogICAgICAgICBzZWxmLnJlYXNvbiA9IGVvZi5yZWFzb24gICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgc2VsZi5lcnJvciA9IGVvZi5lcnJvcgotICAqICAg ICAgICAgcmV0dXJuIHNlbGYKLSAgKi8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21f aW50KF9fcHl4X3ZfZW9mLT5yZWFzb24pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAxNjQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRf RnJvbV9pbnQoX19weXhfdl9lb2YtPnJlYXNvbik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDE2NiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKLSAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0dPVFJFRihfX3B5 eF92X3NlbGYtPnJlYXNvbik7Ci1AQCAtMzA1MiwxNCArMzA1MiwxNCBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9faW5p dChzdHJ1Y3QgXwotICAgX19weXhfdl9zZWxmLT5yZWFzb24gPSBfX3B5eF90XzE7Ci0gICBfX3B5 eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE2NQot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE2NwotICAqICAgICBjZGVmIF9p bml0KHNlbGYsIG1wdl9ldmVudF9lbmRfZmlsZSogZW9mKToKLSAgKiAgICAgICAgIHNlbGYucmVh c29uID0gZW9mLnJlYXNvbgotICAqICAgICAgICAgc2VsZi5lcnJvciA9IGVvZi5lcnJvciAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICByZXR1cm4gc2VsZgotICAqIAot ICAqLwotLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lb2YtPmVy cm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTY1LCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZW9m LT5lcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE2NywgX19w eXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0dJVkVS RUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmVycm9yKTsKLUBA IC0zMDY3LDcgKzMwNjcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9faW5pdChzdHJ1Y3QgXwotICAgX19weXhfdl9z ZWxmLT5lcnJvciA9IF9fcHl4X3RfMTsKLSAgIF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTY2Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTY4Ci0gICogICAgICAgICBzZWxmLnJlYXNvbiA9IGVvZi5yZWFzb24KLSAg KiAgICAgICAgIHNlbGYuZXJyb3IgPSBlb2YuZXJyb3IKLSAgKiAgICAgICAgIHJldHVybiBzZWxm ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0zMDc5LDcgKzMwNzksNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVh Y2hlZF9faW5pdChzdHJ1Y3QgXwotICAgX19weXhfciA9ICgoUHlPYmplY3QgKilfX3B5eF92X3Nl bGYpOwotICAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxNjMKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNjUKLSAg KiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHJlYXNvbiwgZXJyb3IKLSAgKiAKLSAgKiAgICAgY2Rl ZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfZW5kX2ZpbGUqIGVvZik6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLUBAIC0zMDk4LDcgKzMwOTgsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9faW5pdChzdHJ1Y3Qg XwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxNjEKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTYzCi0gICog ICAgIFdyYXBzOiBtcHZfZXZlbnRfZW5kX2ZpbGUKLSAgKiAgICAgIiIiCi0gICogICAgIGNkZWYg cHVibGljIG9iamVjdCByZWFzb24sIGVycm9yICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LUBAIC0zNTg3LDcgKzM1ODcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfMl9fc2V0c3RhdGVfYwotICAgcmV0dXJu IF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxODkK LSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTkxCi0gICogICAgIGNkZWYgcHVi bGljIG9iamVjdCBwcmVmaXgsIGxldmVsLCB0ZXh0LCBsb2dfbGV2ZWwKLSAgKiAKLSAgKiAgICAg Y2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfbG9nX21lc3NhZ2UqIG1zZyk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0zNjA3LDE2ICszNjA3LDE2IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX19pbml0KHN0cnVj dCBfX3B5eF9vCi0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX2luaXQiLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxOTAKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTIKLSAg KiAKLSAgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfbG9nX21lc3NhZ2UqIG1zZyk6 Ci0gICogICAgICAgICBzZWxmLmxldmVsID0gX3N0cmRlYyhtc2cubGV2ZWwpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0cmRlYyhtc2cu cHJlZml4KQotICAqICAgICAgICAgc2VsZi50ZXh0ID0gX3N0cmRlYyhtc2cudGV4dCkKLSAgKi8K LS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVj KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTkwLCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nf c3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTkyLCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgX19weXhfdF8zID0g X19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbXNnLT5sZXZlbCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDE5MCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5 eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9tc2ctPmxldmVsKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTkyLCBfX3B5eF9MMV9lcnJvcikK LSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotICAgX19weXhfdF80ID0gTlVMTDsKLSAgIGlm IChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhf dF8yKSkpIHsKLUBAIC0zNjMxLDcgKzM2MzEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9faW5pdChzdHJ1Y3QgX19weXhfbwot ICAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19w eXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfMiwgX19weXhfdF8zKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19w eXhfdF80ID0gMDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwot LSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTkwLCBfX3B5eF9MMV9l cnJvcikKLSsgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5MiwgX19w eXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEp OwotQEAgLTM2NDAsMTYgKzM2NDAsMTYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfX2luaXQoc3RydWN0IF9fcHl4X28KLSAgIF9f cHl4X3Zfc2VsZi0+bGV2ZWwgPSBfX3B5eF90XzE7Ci0gICBfX3B5eF90XzEgPSAwOwotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5MQotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjE5MwotICAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVu dF9sb2dfbWVzc2FnZSogbXNnKToKLSAgKiAgICAgICAgIHNlbGYubGV2ZWwgPSBfc3RyZGVjKG1z Zy5sZXZlbCkKLSAgKiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0cmRlYyhtc2cucHJlZml4KSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBzZWxmLnRleHQgPSBfc3Ry ZGVjKG1zZy50ZXh0KQotICAqICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBtc2cubG9nX2xldmVs Ci0gICovCi0tICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9z X3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDE5MSwgX19w eXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19w eXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDE5 MywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gIF9fcHl4 X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X21zZy0+cHJlZml4KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTkxLCBfX3B5eF9MMV9lcnJvcikK LSsgIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X21zZy0+cHJl Zml4KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTkzLCBfX3B5eF9M MV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotICAgX19weXhfdF80ID0gTlVM TDsKLSAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF8yKSkpIHsKLUBAIC0zNjY0LDcgKzM2NjQsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9faW5pdChzdHJ1Y3Qg X19weXhfbwotICAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9D YWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhf dF80KTsgX19weXhfdF80ID0gMDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOwotLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTkxLCBf X3B5eF9MMV9lcnJvcikKLSsgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDE5MywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotICAgX19QeXhfR0lWRVJFRihf X3B5eF90XzEpOwotQEAgLTM2NzMsMTYgKzM2NzMsMTYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfX2luaXQoc3RydWN0IF9fcHl4 X28KLSAgIF9fcHl4X3Zfc2VsZi0+cHJlZml4ID0gX19weXhfdF8xOwotICAgX19weXhfdF8xID0g MDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTIKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTQKLSAgKiAgICAgICAgIHNlbGYubGV2ZWwg PSBfc3RyZGVjKG1zZy5sZXZlbCkKLSAgKiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0cmRlYyht c2cucHJlZml4KQotICAqICAgICAgICAgc2VsZi50ZXh0ID0gX3N0cmRlYyhtc2cudGV4dCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBt c2cubG9nX2xldmVsCi0gICogICAgICAgICByZXR1cm4gc2VsZgotICAqLwotLSAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxOTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxOTQsIF9fcHl4X0wxX2Vycm9yKQot ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVz X0Zyb21TdHJpbmcoX19weXhfdl9tc2ctPnRleHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykp IF9fUFlYX0VSUigwLCAxOTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8zID0gX19QeXhf UHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbXNnLT50ZXh0KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzMpKSBfX1BZWF9FUlIoMCwgMTk0LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzMpOwotICAgX19weXhfdF80ID0gTlVMTDsKLSAgIGlmIChDWVRIT05fVU5QQUNL X01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLUBAIC0z Njk3LDcgKzM2OTcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEwTG9nTWVzc2FnZV9faW5pdChzdHJ1Y3QgX19weXhfbwotICAgX19weXhfdF8xID0g KF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90 XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19w eXhfdF8zKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTkyLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5NCwgX19weXhfTDFfZXJyb3IpCi0g ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOwotICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwotQEAgLTM3MDYsMTQg KzM3MDYsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfX2luaXQoc3RydWN0IF9fcHl4X28KLSAgIF9fcHl4X3Zfc2VsZi0+dGV4 dCA9IF9fcHl4X3RfMTsKLSAgIF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTkzCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTk1Ci0gICogICAgICAgICBzZWxmLnByZWZpeCA9IF9zdHJkZWMobXNnLnByZWZpeCkKLSAg KiAgICAgICAgIHNlbGYudGV4dCA9IF9zdHJkZWMobXNnLnRleHQpCi0gICogICAgICAgICBzZWxm LmxvZ19sZXZlbCA9IG1zZy5sb2dfbGV2ZWwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot ICAqICAgICAgICAgcmV0dXJuIHNlbGYKLSAgKiAKLSAgKi8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4 X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfbXNnLT5sb2dfbGV2ZWwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxOTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8x ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9tc2ctPmxvZ19sZXZlbCk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5NSwgX19weXhfTDFfZXJyb3IpCi0gICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLSAg IF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCk7Ci1AQCAtMzcyMSw3ICszNzIx LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExv Z01lc3NhZ2VfX2luaXQoc3RydWN0IF9fcHl4X28KLSAgIF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVs ID0gX19weXhfdF8xOwotICAgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxOTQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxOTYKLSAgKiAgICAgICAgIHNlbGYudGV4dCA9IF9zdHJkZWMobXNnLnRleHQpCi0gICogICAg ICAgICBzZWxmLmxvZ19sZXZlbCA9IG1zZy5sb2dfbGV2ZWwKLSAgKiAgICAgICAgIHJldHVybiBz ZWxmICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0zNzMzLDcgKzM3MzMsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2Fn ZV9faW5pdChzdHJ1Y3QgX19weXhfbwotICAgX19weXhfciA9ICgoUHlPYmplY3QgKilfX3B5eF92 X3NlbGYpOwotICAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxODkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTEK LSAgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHByZWZpeCwgbGV2ZWwsIHRleHQsIGxvZ19sZXZl bAotICAqIAotICAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9sb2dfbWVzc2FnZSog bXNnKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTM3NTUsNyArMzc1NSw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlX19pbml0KHN0cnVjdCBfX3B5eF9vCi0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE4NwotKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxODkKLSAgKiAgICAgV3JhcHM6IG1wdl9ldmVudF9sb2dfbWVzc2FnZQot ICAqICAgICAiIiIKLSAgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHByZWZpeCwgbGV2ZWwsIHRl eHQsIGxvZ19sZXZlbCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNDQzOCw3ICs0 NDM4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTBMb2dNZXNzYWdlXzJfX3NldHN0YXRlX2N5dGhvbl8KLSAgIHJldHVybiBfX3B5eF9yOwotIH0K LSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTk3Ci0rLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjE5OQotICAqIAotICAqIAotICAqIGNkZWYgX2NvbnZlcnRf bm9kZV92YWx1ZShtcHZfbm9kZSBub2RlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTQ0NTksNyArNDQ1OSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShzdHJ1Y3QgbXB2X25vCi0gICBpbnQgX19w eXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2NvbnZlcnRf bm9kZV92YWx1ZSIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjE5OAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwMAotICAqIAotICAq IGNkZWYgX2NvbnZlcnRfbm9kZV92YWx1ZShtcHZfbm9kZSBub2RlKToKLSAgKiAgICAgaWYgbm9k ZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLUBAIC00NDY5LDcgKzQ0NjksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9ubwotICAgc3dp dGNoIChfX3B5eF92X25vZGUuZm9ybWF0KSB7Ci0gICAgIGNhc2UgTVBWX0ZPUk1BVF9TVFJJTkc6 Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTkKLSsgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwMQotICAqIGNkZWYgX2NvbnZlcnRfbm9k ZV92YWx1ZShtcHZfbm9kZSBub2RlKToKLSAgKiAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZP Uk1BVF9TVFJJTkc6Ci0gICogICAgICAgICByZXR1cm4gX3N0cmRlYyhub2RlLnUuc3RyaW5nKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNDQ3Nyw5ICs0NDc3LDkgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3Zh bHVlKHN0cnVjdCBtcHZfbm8KLSAgKiAgICAgICAgIHJldHVybiBub3Qgbm90IGludChub2RlLnUu ZmxhZykKLSAgKi8KLSAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gICAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxOTksIF9fcHl4X0wxX2Vycm9yKQotKyAgICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDIwMSwgX19weXhfTDFfZXJyb3Ip Ci0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgICBfX3B5eF90XzMgPSBfX1B5eF9Q eUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9ub2RlLnUuc3RyaW5nKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTk5LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhf dF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3Zfbm9kZS51LnN0cmluZyk7IGlm ICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDIwMSwgX19weXhfTDFfZXJyb3Ip Ci0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotICAgICBfX3B5eF90XzQgPSBOVUxMOwot ICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNr KF9fcHl4X3RfMikpKSB7Ci1AQCAtNDQ5NCwxNCArNDQ5NCwxNCBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0 IG1wdl9ubwotICAgICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0Nh bGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdF8zKSA6IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOwotICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBf X3B5eF90XzMgPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCAxOTksIF9fcHl4X0wxX2Vycm9yKQotKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCAyMDEsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0gICAg IF9fcHl4X3IgPSBfX3B5eF90XzE7Ci0gICAgIF9fcHl4X3RfMSA9IDA7Ci0gICAgIGdvdG8gX19w eXhfTDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTgKLSsg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwMAotICAqIAotICAqIGNkZWYg X2NvbnZlcnRfbm9kZV92YWx1ZShtcHZfbm9kZSBub2RlKToKLSAgKiAgICAgaWYgbm9kZS5mb3Jt YXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC00NTExLDcgKzQ1MTEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9ubwotICAgICBicmVhazsK LSAgICAgY2FzZSBNUFZfRk9STUFUX0ZMQUc6Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyMDEKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjIwMwotICAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobm9kZS51LnN0cmluZykKLSAgKiAgICAg ZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6Ci0gICogICAgICAgICByZXR1cm4g bm90IG5vdCBpbnQobm9kZS51LmZsYWcpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC00NTE5LDIwICs0NTE5LDIwIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShzdHJ1Y3QgbXB2X25vCi0gICogICAgICAg ICByZXR1cm4gaW50KG5vZGUudS5pbnQ2NCkKLSAgKi8KLSAgICAgX19QeXhfWERFQ1JFRihfX3B5 eF9yKTsKLS0gICAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9ub2Rl LnUuZmxhZyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIwMSwgX19w eXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4 X3Zfbm9kZS51LmZsYWcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAy MDMsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAg X19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZygoKFB5T2JqZWN0ICopKCZQeUlu dF9UeXBlKSksIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDIwMSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoKChQeU9iamVjdCAqKSgmUHlJbnRfVHlwZSkpLCBfX3B5eF90XzEpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyMDMsIF9fcHl4X0wxX2Vycm9yKQot ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7Ci0tICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1 ZShfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF81IDwgMCkpIF9fUFlYX0VSUigwLCAy MDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9Jc1Ry dWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNSA8IDApKSBfX1BZWF9FUlIoMCwg MjAzLCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7Ci0tICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISgoIV9f cHl4X3RfNSkgIT0gMCkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MjAxLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8yID0gX19QeXhfUHlCb29sX0Zyb21M b25nKCghKCghX19weXhfdF81KSAhPSAwKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9f UFlYX0VSUigwLCAyMDMsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8yKTsKLSAgICAgX19weXhfciA9IF9fcHl4X3RfMjsKLSAgICAgX19weXhfdF8yID0gMDsKLSAg ICAgZ290byBfX3B5eF9MMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjIwMAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjAyCi0gICog ICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgotICAqICAgICAgICAgcmV0 dXJuIF9zdHJkZWMobm9kZS51LnN0cmluZykKLSAgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBN UFZfRk9STUFUX0ZMQUc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC00NTQyLDcg KzQ1NDIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2 X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9ubwotICAgICBicmVhazsKLSAgICAgY2Fz ZSBNUFZfRk9STUFUX0lOVDY0OgotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjAzCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMDUKLSAg KiAgICAgICAgIHJldHVybiBub3Qgbm90IGludChub2RlLnUuZmxhZykKLSAgKiAgICAgZWxpZiBu b2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgotICAqICAgICAgICAgcmV0dXJuIGludChu b2RlLnUuaW50NjQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC00NTUwLDE2ICs0 NTUwLDE2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X2NvbnZlcnRfbm9kZV92YWx1ZShzdHJ1Y3QgbXB2X25vCi0gICogICAgICAgICByZXR1cm4gZmxv YXQobm9kZS51LmRvdWJsZV8pCi0gICovCi0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0t ICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRfdChfX3B5eF92X25vZGUudS5p bnQ2NCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDIwMywgX19weXhf TDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRfdChfX3B5 eF92X25vZGUudS5pbnQ2NCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDIwNSwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAg ICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKCgoUHlPYmplY3QgKikoJlB5 SW50X1R5cGUpKSwgX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMjAzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8xID0gX19QeXhfUHlPYmpl Y3RfQ2FsbE9uZUFyZygoKFB5T2JqZWN0ICopKCZQeUludF9UeXBlKSksIF9fcHl4X3RfMik7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIwNSwgX19weXhfTDFfZXJyb3Ip Ci0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8yKTsgX19weXhfdF8yID0gMDsKLSAgICAgX19weXhfciA9IF9fcHl4X3RfMTsKLSAgICAgX19w eXhfdF8xID0gMDsKLSAgICAgZ290byBfX3B5eF9MMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjIwMgotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjA0Ci0gICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgot ICAqICAgICAgICAgcmV0dXJuIG5vdCBub3QgaW50KG5vZGUudS5mbGFnKQotICAqICAgICBlbGlm IG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLUBAIC00NTY5LDcgKzQ1NjksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9ubwotICAg ICBicmVhazsKLSAgICAgY2FzZSBNUFZfRk9STUFUX0RPVUJMRToKLSAKLS0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwNQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjA3Ci0gICogICAgICAgICByZXR1cm4gaW50KG5vZGUudS5pbnQ2NCkKLSAg KiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKLSAgKiAgICAgICAg IHJldHVybiBmbG9hdChub2RlLnUuZG91YmxlXykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotQEAgLTQ1NzcsMTMgKzQ1NzcsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKHN0cnVjdCBtcHZfbm8KLSAgKiAg ICAgICAgIHJldHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpCi0g ICovCi0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICAgIF9fcHl4X3RfMSA9IFB5Rmxv YXRfRnJvbURvdWJsZShfX3B5eF92X25vZGUudS5kb3VibGVfKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgMjA1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8x ID0gUHlGbG9hdF9Gcm9tRG91YmxlKF9fcHl4X3Zfbm9kZS51LmRvdWJsZV8pOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMDcsIF9fcHl4X0wxX2Vycm9yKQotICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgICAgX19weXhfciA9IF9fcHl4X3RfMTsKLSAgICAg X19weXhfdF8xID0gMDsKLSAgICAgZ290byBfX3B5eF9MMDsKLSAKLS0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjIwNAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjA2Ci0gICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2 NDoKLSAgKiAgICAgICAgIHJldHVybiBpbnQobm9kZS51LmludDY0KQotICAqICAgICBlbGlmIG5v ZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci1AQCAtNDU5Myw3ICs0NTkzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKHN0cnVjdCBtcHZfbm8KLSAgICAg YnJlYWs7Ci0gICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX01BUDoKLSAKLS0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwNwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjA5Ci0gICogICAgICAgICByZXR1cm4gZmxvYXQobm9kZS51LmRvdWJsZV8p Ci0gICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKLSAgKiAg ICAgICAgIHJldHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC00NjAxLDEzICs0NjAxLDEzIEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92 YWx1ZShzdHJ1Y3QgbXB2X25vCi0gICogICAgICAgICByZXR1cm4gX2NvbnZlcnRfdmFsdWUobm9k ZS51Lmxpc3QsIG5vZGUuZm9ybWF0KQotICAqLwotICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Ip OwotLSAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVy dF92YWx1ZShfX3B5eF92X25vZGUudS5saXN0LCBfX3B5eF92X25vZGUuZm9ybWF0KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjA3LCBfX3B5eF9MMV9lcnJvcikKLSsg ICAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFs dWUoX19weXhfdl9ub2RlLnUubGlzdCwgX19weXhfdl9ub2RlLmZvcm1hdCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIwOSwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgICBfX3B5eF9yID0gX19weXhfdF8xOwotICAgICBf X3B5eF90XzEgPSAwOwotICAgICBnb3RvIF9fcHl4X0wwOwotIAotLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MjA2Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyMDgKLSAgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJM RToKLSAgKiAgICAgICAgIHJldHVybiBmbG9hdChub2RlLnUuZG91YmxlXykKLSAgKiAgICAgZWxp ZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci1AQCAtNDYxNyw3ICs0NjE3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKHN0cnVjdCBtcHZfbm8K LSAgICAgYnJlYWs7Ci0gICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotIAotLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjA5Ci0rICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyMTEKLSAgKiAgICAgICAgIHJldHVybiBfY29udmVydF92YWx1 ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpCi0gICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0g TVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotICAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVl KG5vZGUudS5saXN0LCBub2RlLmZvcm1hdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTQ2MjUsMTMgKzQ2MjUsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKHN0cnVjdCBtcHZfbm8KLSAgKiAKLSAg Ki8KLSAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gICAgX19weXhfdF8xID0gX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUoX19weXhfdl9ub2RlLnUubGlz dCwgX19weXhfdl9ub2RlLmZvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDIwOSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKF9fcHl4X3Zfbm9kZS51Lmxpc3QsIF9f cHl4X3Zfbm9kZS5mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCAyMTEsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAg ICAgX19weXhfciA9IF9fcHl4X3RfMTsKLSAgICAgX19weXhfdF8xID0gMDsKLSAgICAgZ290byBf X3B5eF9MMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwOAot KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjEwCi0gICogICAgIGVsaWYg bm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKLSAgKiAgICAgICAgIHJldHVybiBf Y29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpCi0gICogICAgIGVsaWYgbm9k ZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci1AQCAtNDY0Miw3ICs0NjQyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKHN0cnVjdCBtcHZfbm8KLSAg ICAgZGVmYXVsdDogYnJlYWs7Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjEwCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjEyCi0g ICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotICAqICAg ICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZvcm1hdCkKLSAg KiAgICAgcmV0dXJuIE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTQ2NTMs NyArNDY1Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX2NvbnZlcnRfbm9kZV92YWx1ZShzdHJ1Y3QgbXB2X25vCi0gICBfX3B5eF9yID0gUHlfTm9u ZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotICAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTcKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxOTkKLSAgKiAKLSAgKiAKLSAgKiBjZGVmIF9jb252ZXJ0X25vZGVfdmFs dWUobXB2X25vZGUgbm9kZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC00Njc1 LDcgKzQ2NzUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9ubwotICAgcmV0dXJuIF9fcHl4X3I7 Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTMKLSsvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjE1Ci0gICogCi0gICogCi0gICogY2RlZiBfY29u dmVydF92YWx1ZSh2b2lkKiBkYXRhLCBtcHZfZm9ybWF0IGZvcm1hdCk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLUBAIC00NzA0LDcgKzQ3MDQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKHZvaWQgKl9fcHl4X3Zf ZGF0YQotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9jb252ZXJ0X3ZhbHVlIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjE2Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjE4 Ci0gICogICAgIGNkZWYgbXB2X25vZGUgbm9kZQotICAqICAgICBjZGVmIG1wdl9ub2RlX2xpc3Qg bm9kZWxpc3QKLSAgKiAgICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTQ3MTQsNyArNDcxNCw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19w eXhfdl9kYXRhCi0gICBzd2l0Y2ggKF9fcHl4X3ZfZm9ybWF0KSB7Ci0gICAgIGNhc2UgTVBWX0ZP Uk1BVF9OT0RFOgotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjE3 Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTkKLSAgKiAgICAgY2Rl ZiBtcHZfbm9kZV9saXN0IG5vZGVsaXN0Ci0gICogICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X05PREU6Ci0gICogICAgICAgICBub2RlID0gKDxtcHZfbm9kZSo+ZGF0YSlbMF0gICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTQ3MjMsNyArNDcyMyw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19w eXhfdl9kYXRhCi0gICovCi0gICAgIF9fcHl4X3Zfbm9kZSA9ICgoKHN0cnVjdCBtcHZfbm9kZSAq KV9fcHl4X3ZfZGF0YSlbMF0pOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjE4Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjAKLSAg KiAgICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERToKLSAgKiAgICAgICAgIG5vZGUgPSAo PG1wdl9ub2RlKj5kYXRhKVswXQotICAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFs dWUobm9kZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTQ3MzEsMTMgKzQ3MzEs MTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29u dmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEKLSAgKiAgICAgICAgIG5vZGVsaXN0ID0gKDxt cHZfbm9kZV9saXN0Kj5kYXRhKVswXQotICAqLwotICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Ip OwotLSAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVy dF9ub2RlX3ZhbHVlKF9fcHl4X3Zfbm9kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDIxOCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMSA9IF9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoX19weXhfdl9ub2RlKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjIwLCBfX3B5eF9MMV9lcnJv cikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICAgIF9fcHl4X3IgPSBfX3B5eF90 XzE7Ci0gICAgIF9fcHl4X3RfMSA9IDA7Ci0gICAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTYKLSsgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjIxOAotICAqICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKLSAgKiAg ICAgY2RlZiBtcHZfbm9kZV9saXN0IG5vZGVsaXN0Ci0gICogICAgIGlmIGZvcm1hdCA9PSBNUFZf Rk9STUFUX05PREU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC00NzQ3LDcgKzQ3 NDcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19j b252ZXJ0X3ZhbHVlKHZvaWQgKl9fcHl4X3ZfZGF0YQotICAgICBicmVhazsKLSAgICAgY2FzZSBN UFZfRk9STUFUX05PREVfQVJSQVk6Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyMjAKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyMgot ICAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZSkKLSAgKiAgICAgZWxp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotICAqICAgICAgICAgbm9kZWxpc3Qg PSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LUBAIC00NzU2LDE5ICs0NzU2LDE5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19weXhfdl9kYXRhCi0gICovCi0g ICAgIF9fcHl4X3Zfbm9kZWxpc3QgPSAoKChzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqKV9fcHl4X3Zf ZGF0YSlbMF0pOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjIx Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjMKLSAgKiAgICAgZWxp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotICAqICAgICAgICAgbm9kZWxpc3Qg PSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCi0gICogICAgICAgICB2YWx1ZXMgPSBbXSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2Rl bGlzdC5udW0pOgotICAqICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoX2NvbnZlcnRfbm9kZV92 YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pKQotICAqLwotLSAgICBfX3B5eF90XzEgPSBQeUxpc3Rf TmV3KDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjEsIF9fcHl4 X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzEgPSBQeUxpc3RfTmV3KDApOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjMsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgICAgX19weXhfdl92YWx1ZXMgPSBfX3B5eF90XzE7Ci0g ICAgIF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoyMjIKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNAotICAq ICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCi0gICogICAgICAg ICB2YWx1ZXMgPSBbXQotICAqICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTQ3ODAsMjAgKzQ3ODAsMjAgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1 ZSh2b2lkICpfX3B5eF92X2RhdGEKLSAgICAgZm9yIChfX3B5eF90XzQgPSAwOyBfX3B5eF90XzQg PCBfX3B5eF90XzM7IF9fcHl4X3RfNCs9MSkgewotICAgICAgIF9fcHl4X3ZfaSA9IF9fcHl4X3Rf NDsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjIzCi0rICAg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNQotICAqICAgICAgICAgdmFs dWVzID0gW10KLSAgKiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51bSk6Ci0gICog ICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZh bHVlc1tpXSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIHJldHVy biB2YWx1ZXMKLSAgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKLSAg Ki8KLS0gICAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29u dmVydF9ub2RlX3ZhbHVlKChfX3B5eF92X25vZGVsaXN0LnZhbHVlc1tfX3B5eF92X2ldKSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIyMywgX19weXhfTDFfZXJyb3Ip Ci0rICAgICAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZl cnRfbm9kZV92YWx1ZSgoX19weXhfdl9ub2RlbGlzdC52YWx1ZXNbX19weXhfdl9pXSkpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjUsIF9fcHl4X0wxX2Vycm9yKQot ICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgICAgIF9fcHl4X3RfNSA9IF9fUHl4 X1B5T2JqZWN0X0FwcGVuZChfX3B5eF92X3ZhbHVlcywgX19weXhfdF8xKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfNSA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMCwgMjIzLCBfX3B5eF9MMV9lcnJv cikKLSsgICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9BcHBlbmQoX19weXhfdl92YWx1 ZXMsIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzUgPT0gKChpbnQpLTEpKSkgX19Q WVhfRVJSKDAsIDIyNSwgX19weXhfTDFfZXJyb3IpCi0gICAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gICAgIH0KLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjIyNAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjI2Ci0gICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0pOgotICAqICAg ICAgICAgICAgIHZhbHVlcy5hcHBlbmQoX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlzdC52YWx1 ZXNbaV0pKQotICAqICAgICAgICAgcmV0dXJuIHZhbHVlcyAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci1AQCAtNDgwNSw3ICs0ODA1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEKLSAg ICAgX19weXhfciA9IF9fcHl4X3ZfdmFsdWVzOwotICAgICBnb3RvIF9fcHl4X0wwOwotIAotLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjE5Ci0rICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjEKLSAgKiAgICAgICAgIG5vZGUgPSAoPG1wdl9ub2Rl Kj5kYXRhKVswXQotICAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZSkK LSAgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNDgxNSw3ICs0ODE1LDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZSh2b2lkICpfX3B5 eF92X2RhdGEKLSAgICAgYnJlYWs7Ci0gICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX01BUDoKLSAK LS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNgotKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjI4Ci0gICogICAgICAgICByZXR1cm4gdmFsdWVz Ci0gICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6Ci0gICogICAgICAg ICBub2RlbGlzdCA9ICg8bXB2X25vZGVfbGlzdCo+ZGF0YSlbMF0gICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotQEAgLTQ4MjQsMTkgKzQ4MjQsMTkgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2Rh dGEKLSAgKi8KLSAgICAgX19weXhfdl9ub2RlbGlzdCA9ICgoKHN0cnVjdCBtcHZfbm9kZV9saXN0 ICopX19weXhfdl9kYXRhKVswXSk7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyMjcKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyOQot ICAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgotICAqICAgICAgICAg bm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCi0gICogICAgICAgICB2YWx1ZXMg PSB7fSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBmb3IgaSBpbiBy YW5nZShub2RlbGlzdC5udW0pOgotICAqICAgICAgICAgICAgIHZhbHVlID0gX2NvbnZlcnRfbm9k ZV92YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pCi0gICovCi0tICAgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMjI3LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8xID0gX19QeXhfUHlEaWN0 X05ld1ByZXNpemVkKDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAy MjksIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgICAg X19weXhfdl92YWx1ZXMgPSBfX3B5eF90XzE7Ci0gICAgIF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjgKLSsgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjIzMAotICAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9u b2RlX2xpc3QqPmRhdGEpWzBdCi0gICogICAgICAgICB2YWx1ZXMgPSB7fQotICAqICAgICAgICAg Zm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotQEAgLTQ4NDgsMjggKzQ4NDgsMjggQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEKLSAgICAg Zm9yIChfX3B5eF90XzQgPSAwOyBfX3B5eF90XzQgPCBfX3B5eF90XzM7IF9fcHl4X3RfNCs9MSkg ewotICAgICAgIF9fcHl4X3ZfaSA9IF9fcHl4X3RfNDsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MjI5Ci0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjIzMQotICAqICAgICAgICAgdmFsdWVzID0ge30KLSAgKiAgICAgICAgIGZvciBp IGluIHJhbmdlKG5vZGVsaXN0Lm51bSk6Ci0gICogICAgICAgICAgICAgdmFsdWUgPSBfY29udmVy dF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotICAqICAgICAgICAgICAgIHZhbHVlc1tfc3RyZGVjKG5vZGVsaXN0LmtleXNbaV0pXSA9 IHZhbHVlCi0gICogICAgICAgICByZXR1cm4gdmFsdWVzCi0gICovCi0tICAgICAgX19weXhfdF8x ID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZSgoX19w eXhfdl9ub2RlbGlzdC52YWx1ZXNbX19weXhfdl9pXSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAyMjksIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fcHl4X3RfMSA9 IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoKF9fcHl4 X3Zfbm9kZWxpc3QudmFsdWVzW19fcHl4X3ZfaV0pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgMjMxLCBfX3B5eF9MMV9lcnJvcikKLSAgICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKLSAgICAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X3ZhbHVlLCBfX3B5 eF90XzEpOwotICAgICAgIF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjIzMAotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyMzIKLSAgKiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51bSk6Ci0g ICogICAgICAgICAgICAgdmFsdWUgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVl c1tpXSkKLSAgKiAgICAgICAgICAgICB2YWx1ZXNbX3N0cmRlYyhub2RlbGlzdC5rZXlzW2ldKV0g PSB2YWx1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICByZXR1cm4g dmFsdWVzCi0gICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgotICAqLwot LSAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3Nfc3Ry ZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMjMwLCBfX3B5eF9M MV9lcnJvcikKLSsgICAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19w eXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDIz MiwgX19weXhfTDFfZXJyb3IpCi0gICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICAg ICAgX19weXhfdF83ID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKChfX3B5eF92X25vZGVsaXN0 LmtleXNbX19weXhfdl9pXSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigw LCAyMzAsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5Qnl0ZXNf RnJvbVN0cmluZygoX19weXhfdl9ub2RlbGlzdC5rZXlzW19fcHl4X3ZfaV0pKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMjMyLCBfX3B5eF9MMV9lcnJvcikKLSAgICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSAgICAgICBfX3B5eF90XzggPSBOVUxMOwotICAg ICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF82KSkpIHsKLUBAIC00ODg0LDE0ICs0ODg0LDE0IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19weXhf dl9kYXRhCi0gICAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfOCkgPyBfX1B5eF9QeU9iamVjdF9D YWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzgsIF9fcHl4X3RfNykgOiBfX1B5eF9QeU9iamVj dF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF83KTsKLSAgICAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7Ci0gICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Nyk7IF9fcHl4X3RfNyA9IDA7Ci0tICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgMjMwLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAyMzIsIF9fcHl4X0wxX2Vycm9yKQotICAgICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOwotICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOwotLSAgICAgIGlmICh1bmxpa2VseShQeU9iamVjdF9TZXRJdGVtKF9fcHl4X3ZfdmFs dWVzLCBfX3B5eF90XzEsIF9fcHl4X3ZfdmFsdWUpIDwgMCkpIF9fUFlYX0VSUigwLCAyMzAsIF9f cHl4X0wxX2Vycm9yKQotKyAgICAgIGlmICh1bmxpa2VseShQeU9iamVjdF9TZXRJdGVtKF9fcHl4 X3ZfdmFsdWVzLCBfX3B5eF90XzEsIF9fcHl4X3ZfdmFsdWUpIDwgMCkpIF9fUFlYX0VSUigwLCAy MzIsIF9fcHl4X0wxX2Vycm9yKQotICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOwotICAgICB9Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoyMzEKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzMwotICAq ICAgICAgICAgICAgIHZhbHVlID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlzdC52YWx1ZXNb aV0pCi0gICogICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMobm9kZWxpc3Qua2V5c1tpXSldID0g dmFsdWUKLSAgKiAgICAgICAgIHJldHVybiB2YWx1ZXMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotQEAgLTQ5MDMsNyArNDkwMyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19weXhfdl9kYXRhCi0gICAg IF9fcHl4X3IgPSBfX3B5eF92X3ZhbHVlczsKLSAgICAgZ290byBfX3B5eF9MMDsKLSAKLS0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNQotKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MjI3Ci0gICogICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChf Y29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkpCi0gICogICAgICAgICByZXR1 cm4gdmFsdWVzCi0gICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC00OTEzLDcgKzQ5MTMsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKHZv aWQgKl9fcHl4X3ZfZGF0YQotICAgICBicmVhazsKLSAgICAgY2FzZSBNUFZfRk9STUFUX1NUUklO RzoKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzMwotKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM1Ci0gICogICAgICAgICByZXR1cm4g dmFsdWVzCi0gICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgotICAqICAg ICAgICAgcmV0dXJuIF9zdHJkZWMoKCg8Y2hhcioqPmRhdGEpWzBdKSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotQEAgLTQ5MjEsOSArNDkyMSw5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19weXhfdl9k YXRhCi0gICogICAgICAgICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2NF90Kj5kYXRhKVswXQotICAq LwotICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9i YWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhf dF82KSkgX19QWVhfRVJSKDAsIDIzMywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMjM1LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5Qnl0ZXNfRnJv bVN0cmluZygoKChjaGFyICoqKV9fcHl4X3ZfZGF0YSlbMF0pKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF83 ID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKCgoKGNoYXIgKiopX19weXhfdl9kYXRhKVswXSkp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAyMzUsIF9fcHl4X0wxX2Vy cm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSAgICAgX19weXhfdF84ID0gTlVM TDsKLSAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9D aGVjayhfX3B5eF90XzYpKSkgewotQEAgLTQ5MzgsMTQgKzQ5MzgsMTQgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZSh2b2lkICpf X3B5eF92X2RhdGEKLSAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfOCkgPyBfX1B5eF9QeU9iamVj dF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzgsIF9fcHl4X3RfNykgOiBfX1B5eF9QeU9i amVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF83KTsKLSAgICAgX19QeXhfWERFQ1JF RihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83 KTsgX19weXhfdF83ID0gMDsKLS0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgMjM1LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwot ICAgICBfX3B5eF9yID0gX19weXhfdF8xOwotICAgICBfX3B5eF90XzEgPSAwOwotICAgICBnb3Rv IF9fcHl4X0wwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjMy Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMzQKLSAgKiAgICAgICAg ICAgICB2YWx1ZXNbX3N0cmRlYyhub2RlbGlzdC5rZXlzW2ldKV0gPSB2YWx1ZQotICAqICAgICAg ICAgcmV0dXJuIHZhbHVlcwotICAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklO RzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTQ5NTUsNyArNDk1NSw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFs dWUodm9pZCAqX19weXhfdl9kYXRhCi0gICAgIGJyZWFrOwotICAgICBjYXNlIE1QVl9GT1JNQVRf RkxBRzoKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzNQotKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM3Ci0gICogICAgICAgICByZXR1 cm4gX3N0cmRlYygoKDxjaGFyKio+ZGF0YSlbMF0pKQotICAqICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX0ZMQUc6Ci0gICogICAgICAgICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2NF90Kj5k YXRhKVswXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNDk2MywxMyArNDk2Mywx MyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252 ZXJ0X3ZhbHVlKHZvaWQgKl9fcHl4X3ZfZGF0YQotICAqICAgICAgICAgcmV0dXJuIGludCgoPHVp bnQ2NF90Kj5kYXRhKVswXSkKLSAgKi8KLSAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0g ICAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKCghKCghKCgoKHVpbnQ2NF90ICop X19weXhfdl9kYXRhKVswXSkgIT0gMCkpICE9IDApKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDIzNSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMSA9IF9f UHl4X1B5Qm9vbF9Gcm9tTG9uZygoISgoISgoKCh1aW50NjRfdCAqKV9fcHl4X3ZfZGF0YSlbMF0p ICE9IDApKSAhPSAwKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAy MzcsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgICAg X19weXhfciA9IF9fcHl4X3RfMTsKLSAgICAgX19weXhfdF8xID0gMDsKLSAgICAgZ290byBfX3B5 eF9MMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzNAotKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM2Ci0gICogICAgIGVsaWYgZm9y bWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgotICAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoKCg8 Y2hhcioqPmRhdGEpWzBdKSkKLSAgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFH OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNDk3OSw3ICs0OTc5LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1 ZSh2b2lkICpfX3B5eF92X2RhdGEKLSAgICAgYnJlYWs7Ci0gICAgIGNhc2UgTVBWX0ZPUk1BVF9J TlQ2NDoKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzNwotKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM5Ci0gICogICAgICAgICByZXR1 cm4gbm90IG5vdCAoPHVpbnQ2NF90Kj5kYXRhKVswXQotICAqICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX0lOVDY0OgotICAqICAgICAgICAgcmV0dXJuIGludCgoPHVpbnQ2NF90Kj5kYXRh KVswXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTQ5ODcsMTYgKzQ5ODcsMTYg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVy dF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEKLSAgKiAgICAgICAgIHJldHVybiBmbG9hdCgoPGRv dWJsZSo+ZGF0YSlbMF0pCi0gICovCi0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICAg IF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKCgodWludDY0X3QgKilfX3B5 eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIz NywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWlu dDY0X3QoKCgodWludDY0X3QgKilfX3B5eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDIzOSwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOwotLSAgICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25l QXJnKCgoUHlPYmplY3QgKikoJlB5SW50X1R5cGUpKSwgX19weXhfdF8xKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMjM3LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19w eXhfdF82ID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZygoKFB5T2JqZWN0ICopKCZQeUludF9U eXBlKSksIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDIzOSwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotICAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAgICAgX19weXhfciA9 IF9fcHl4X3RfNjsKLSAgICAgX19weXhfdF82ID0gMDsKLSAgICAgZ290byBfX3B5eF9MMDsKLSAK LS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzNgotKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM4Ci0gICogICAgIGVsaWYgZm9ybWF0ID09IE1Q Vl9GT1JNQVRfRkxBRzoKLSAgKiAgICAgICAgIHJldHVybiBub3Qgbm90ICg8dWludDY0X3QqPmRh dGEpWzBdCi0gICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC01MDA2LDcgKzUwMDYsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKHZvaWQgKl9f cHl4X3ZfZGF0YQotICAgICBicmVhazsKLSAgICAgY2FzZSBNUFZfRk9STUFUX0RPVUJMRToKLSAK LS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzOQotKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjQxCi0gICogICAgICAgICByZXR1cm4gaW50KCg8 dWludDY0X3QqPmRhdGEpWzBdKQotICAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RP VUJMRToKLSAgKiAgICAgICAgIHJldHVybiBmbG9hdCgoPGRvdWJsZSo+ZGF0YSlbMF0pICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC01MDE0LDEzICs1MDE0LDEzIEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9p ZCAqX19weXhfdl9kYXRhCi0gICogCi0gICovCi0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 Ci0tICAgIF9fcHl4X3RfNiA9IFB5RmxvYXRfRnJvbURvdWJsZSgoKChkb3VibGUgKilfX3B5eF92 X2RhdGEpWzBdKSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDIzOSwg X19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfNiA9IFB5RmxvYXRfRnJvbURvdWJsZSgoKChk b3VibGUgKilfX3B5eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDI0MSwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzYpOwotICAgICBfX3B5eF9yID0gX19weXhfdF82OwotICAgICBfX3B5eF90XzYgPSAwOwotICAg ICBnb3RvIF9fcHl4X0wwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjM4Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDAKLSAgKiAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKLSAgKiAgICAgICAgIHJldHVybiBp bnQoKDx1aW50NjRfdCo+ZGF0YSlbMF0pCi0gICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JN QVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNTAzMSw3ICs1MDMx LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29u dmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEKLSAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICB9 Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjQwCi0rICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjQyCi0gICogICAgIGVsaWYgZm9ybWF0ID09IE1Q Vl9GT1JNQVRfRE9VQkxFOgotICAqICAgICAgICAgcmV0dXJuIGZsb2F0KCg8ZG91YmxlKj5kYXRh KVswXSkKLSAgKiAgICAgcmV0dXJuIE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTUwNDIsNyArNTA0Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19weXhfdl9kYXRhCi0gICBfX3B5eF9y ID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOwotICAgZ290byBfX3B5eF9MMDsKLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTMKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTUKLSAgKiAKLSAgKiAKLSAgKiBjZGVmIF9jb252ZXJ0 X3ZhbHVlKHZvaWQqIGRhdGEsIG1wdl9mb3JtYXQgZm9ybWF0KTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotQEAgLTUwNjYsNyArNTA2Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19weXhfdl9kYXRh Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjI1MAotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTIKLSAgKiAg ICAgY2RlZiBwdWJsaWMgb2JqZWN0IG5hbWUsIGRhdGEKLSAgKiAKLSAgKiAgICAgY2RlZiBfaW5p dChzZWxmLCBtcHZfZXZlbnRfcHJvcGVydHkqIHByb3ApOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci1AQCAtNTA4NiwxNiArNTA4NiwxNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9faW5pdChzdHJ1Y3QgX19weXhfb2JqXwot ICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo Il9pbml0IiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUx Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUzCi0gICogCi0gICogICAg IGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X3Byb3BlcnR5KiBwcm9wKToKLSAgKiAgICAgICAg IHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5uYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0gICogICAgICAgICBzZWxmLmRhdGEgPSBfY29udmVydF92YWx1ZShwcm9wLmRhdGEsIHBy b3AuZm9ybWF0KQotICAqICAgICAgICAgcmV0dXJuIHNlbGYKLSAgKi8KLS0gIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjUxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjUzLCBfX3B5eF9MMV9lcnJvcikKLSAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgX19weXhfdF8zID0gX19QeXhfUHlCeXRlc19G cm9tU3RyaW5nKF9fcHl4X3ZfcHJvcC0+bmFtZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkg X19QWVhfRVJSKDAsIDI1MSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMgPSBfX1B5eF9Q eUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9wcm9wLT5uYW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzMpKSBfX1BZWF9FUlIoMCwgMjUzLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzMpOwotICAgX19weXhfdF80ID0gTlVMTDsKLSAgIGlmIChDWVRIT05fVU5QQUNL X01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLUBAIC01 MTEwLDcgKzUxMTAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2XzhQcm9wZXJ0eV9faW5pdChzdHJ1Y3QgX19weXhfb2JqXwotICAgX19weXhfdF8xID0g KF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90 XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19w eXhfdF8zKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjUxLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI1MywgX19weXhfTDFfZXJyb3IpCi0g ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOwotICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwotQEAgLTUxMTksMTQg KzUxMTksMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl84UHJvcGVydHlfX2luaXQoc3RydWN0IF9fcHl4X29ial8KLSAgIF9fcHl4X3Zfc2VsZi0+bmFt ZSA9IF9fcHl4X3RfMTsKLSAgIF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjUyCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjU0Ci0gICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X3Byb3BlcnR5KiBwcm9w KToKLSAgKiAgICAgICAgIHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5uYW1lKQotICAqICAgICAg ICAgc2VsZi5kYXRhID0gX2NvbnZlcnRfdmFsdWUocHJvcC5kYXRhLCBwcm9wLmZvcm1hdCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgcmV0dXJuIHNlbGYKLSAgKiAK LSAgKi8KLS0gIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252 ZXJ0X3ZhbHVlKF9fcHl4X3ZfcHJvcC0+ZGF0YSwgX19weXhfdl9wcm9wLT5mb3JtYXQpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyNTIsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFs dWUoX19weXhfdl9wcm9wLT5kYXRhLCBfX3B5eF92X3Byb3AtPmZvcm1hdCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI1NCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKLSAgIF9f UHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmRhdGEpOwotQEAgLTUxMzQsNyArNTEzNCw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X19p bml0KHN0cnVjdCBfX3B5eF9vYmpfCi0gICBfX3B5eF92X3NlbGYtPmRhdGEgPSBfX3B5eF90XzE7 Ci0gICBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjI1MwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1NQotICAqICAg ICAgICAgc2VsZi5uYW1lID0gX3N0cmRlYyhwcm9wLm5hbWUpCi0gICogICAgICAgICBzZWxmLmRh dGEgPSBfY29udmVydF92YWx1ZShwcm9wLmRhdGEsIHByb3AuZm9ybWF0KQotICAqICAgICAgICAg cmV0dXJuIHNlbGYgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTUxNDYsNyArNTE0 Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFBy b3BlcnR5X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfCi0gICBfX3B5eF9yID0gKChQeU9iamVjdCAq KV9fcHl4X3Zfc2VsZik7Ci0gICBnb3RvIF9fcHl4X0wwOwotIAotLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjI1MAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjI1MgotICAqICAgICBjZGVmIHB1YmxpYyBvYmplY3QgbmFtZSwgZGF0YQotICAqIAotICAq ICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9wcm9wZXJ0eSogcHJvcCk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC01MTY4LDcgKzUxNjgsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9faW5pdChzdHJ1Y3Qg X19weXhfb2JqXwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoyNDgKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MjUwCi0gICogICAgIFdyYXBzOiBtcHZfZXZlbnRfcHJvcGVydHkKLSAgKiAgICAgIiIiCi0gICog ICAgIGNkZWYgcHVibGljIG9iamVjdCBuYW1lLCBkYXRhICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLUBAIC01NjU3LDcgKzU2NTcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfMl9fc2V0c3RhdGVfY3l0aG9uX18ocwotICAg cmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyNjMKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjY1Ci0gICogCi0gICog ICAgIEBwcm9wZXJ0eQotICAqICAgICBkZWYgZXJyb3Jfc3RyKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci1AQCAtNTY5MSw3ICs1NjkxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzllcnJvcl9zdHJfX19nZXRfXyhz dHJ1Y3QKLSAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfX2dldF9fIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjY2Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjY4Ci0gICog ICAgICAgICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRoZSBlcnJvciBwcm9lcHJ0eSIiIgotICAq ICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYwotICAqICAgICAgICAgd2l0aCBub2dpbDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTU3MDYsNyArNTcwNiw3IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF85ZXJyb3Jf c3RyX19fZ2V0X18oc3RydWN0Ci0gICAgICAgI2VuZGlmCi0gICAgICAgLyp0cnk6Ki8gewotIAot LSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI2NwotKyAgICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI2OQotICAqICAgICAgICAgY2RlZiBj b25zdCBjaGFyKiBlcnJfYwotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAg ICBlcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmcoc2VsZi5lcnJvcikgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotQEAgLTU3MTYsNyArNTcxNiw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF85ZXJyb3Jfc3RyX19fZ2V0X18oc3RydWN0 Ci0gICAgICAgICBfX3B5eF92X2Vycl9jID0gbXB2X2Vycm9yX3N0cmluZyhfX3B5eF92X3NlbGYt PmVycm9yKTsKLSAgICAgICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjI2NgotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNjgK LSAgKiAgICAgICAgICIiIm1wdl9lcnJvcl9zdHJpbmcgb2YgdGhlIGVycm9yIHByb2VwcnR5IiIi Ci0gICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVycl9jCi0gICogICAgICAgICB3aXRoIG5v Z2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNTczNSw3ICs1NzM1LDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50Xzll cnJvcl9zdHJfX19nZXRfXyhzdHJ1Y3QKLSAgICAgICB9Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjY4Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjcwCi0gICogICAgICAgICB3aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAgIGVy cl9jID0gbXB2X2Vycm9yX3N0cmluZyhzZWxmLmVycm9yKQotICAqICAgICAgICAgcmV0dXJuIF9z dHJkZWMoZXJyX2MpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC01NzQzLDkgKzU3 NDMsOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 RXZlbnRfOWVycm9yX3N0cl9fX2dldF9fKHN0cnVjdAotICAqICAgICBjZGVmIF9kYXRhKHNlbGYs IG1wdl9ldmVudCogZXZlbnQpOgotICAqLwotICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0g IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjY4LCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3Ry ZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjcwLCBfX3B5eF9M MV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgX19weXhfdF8zID0gX19Q eXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfZXJyX2MpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCAyNjgsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8zID0g X19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfZXJyX2MpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCAyNzAsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7Ci0gICBfX3B5eF90XzQgPSBOVUxMOwotICAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotQEAg LTU3NjAsMTQgKzU3NjAsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50XzllcnJvcl9zdHJfX19nZXRfXyhzdHJ1Y3QKLSAgIF9fcHl4X3Rf MSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19w eXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIs IF9fcHl4X3RfMyk7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7 Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gIGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI2OCwgX19weXhfTDFfZXJyb3IpCi0rICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyNzAsIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKLSAgIF9fcHl4X3IgPSBfX3B5eF90XzE7Ci0gICBfX3B5eF90XzEg PSAwOwotICAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyNjMKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNjUKLSAg KiAKLSAgKiAgICAgQHByb3BlcnR5Ci0gICogICAgIGRlZiBlcnJvcl9zdHIoc2VsZik6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC01Nzg5LDcgKzU3ODksNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfOWVycm9yX3N0cl9f X2dldF9fKHN0cnVjdAotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyNzAKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjcyCi0gICogICAgICAgICByZXR1cm4gX3N0cmRlYyhlcnJfYykKLSAgKiAKLSAgKiAgICAg Y2RlZiBfZGF0YShzZWxmLCBtcHZfZXZlbnQqIGV2ZW50KTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotQEAgLTU4MTksNyArNTgxOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19kYXRhKHN0cnVjdCBfX3B5eF9vYmpfOXZpCi0g ICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X2RhdGEiLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzEK LSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzMKLSAgKiAKLSAgKiAgICAg Y2RlZiBfZGF0YShzZWxmLCBtcHZfZXZlbnQqIGV2ZW50KToKLSAgKiAgICAgICAgIGNkZWYgdm9p ZCogZGF0YSA9IGV2ZW50LmRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTU4 MjksNyArNTgyOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50X19kYXRhKHN0cnVjdCBfX3B5eF9vYmpfOXZpCi0gICBfX3B5eF90XzEgPSBf X3B5eF92X2V2ZW50LT5kYXRhOwotICAgX19weXhfdl9kYXRhID0gX19weXhfdF8xOwotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3MwotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjI3NQotICAqICAgICAgICAgY2RlZiB2b2lkKiBkYXRhID0gZXZl bnQuZGF0YQotICAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqIGNsaW1z ZwotICAqICAgICAgICAgaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZ OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNTgzOSw3ICs1ODM5LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGEo c3RydWN0IF9fcHl4X29ial85dmkKLSAgIHN3aXRjaCAoX19weXhfdl9zZWxmLT5pZCkgewotICAg ICBjYXNlIE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFk6Ci0gCi0tICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzQKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjI3NgotICAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2Uq IGNsaW1zZwotICAqICAgICAgICAgaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZ X1JFUExZOgotICAqICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSgpLl9pbml0KDxtcHZfZXZl bnRfcHJvcGVydHkqPmRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC01ODQ3 LDE2ICs1ODQ3LDE2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50X19kYXRhKHN0cnVjdCBfX3B5eF9vYmpfOXZpCi0gICogICAgICAgICAgICAg cmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKLSAgKi8K LSAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gICAgX19weXhfdF8yID0gX19QeXhfUHlP YmplY3RfQ2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfUHJvcGVydHkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg Mjc0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2Fs bE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJv cGVydHkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjc2LCBfX3B5 eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fcHl4X3Rf MyA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3Bl cnR5ICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAq KV9fcHl4X3RfMiktPl9fcHl4X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdF8yKSwgKChzdHJ1Y3QgbXB2X2V2ZW50 X3Byb3BlcnR5ICopX19weXhfdl9kYXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDI3NCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMyA9ICgoc3RydWN0 IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopKChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3RfMikt Pl9fcHl4X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X1Byb3BlcnR5ICopX19weXhfdF8yKSwgKChzdHJ1Y3QgbXB2X2V2ZW50X3Byb3BlcnR5ICop X19weXhfdl9kYXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI3 NiwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotICAgICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSAgICAgX19weXhfciA9IF9f cHl4X3RfMzsKLSAgICAgX19weXhfdF8zID0gMDsKLSAgICAgZ290byBfX3B5eF9MMDsKLSAKLS0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3MwotKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjc1Ci0gICogICAgICAgICBjZGVmIHZvaWQqIGRhdGEg PSBldmVudC5kYXRhCi0gICogICAgICAgICBjZGVmIG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSog Y2xpbXNnCi0gICogICAgICAgICBpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlf UkVQTFk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC01ODY2LDcgKzU4NjYsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9f ZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2aQotICAgICBicmVhazsKLSAgICAgY2FzZSBNUFZfRVZF TlRfUFJPUEVSVFlfQ0hBTkdFOgotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6Mjc2Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzgKLSAg KiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8bXB2X2V2ZW50X3Byb3BlcnR5 Kj5kYXRhKQotICAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9QUk9QRVJUWV9D SEFOR0U6Ci0gICogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVu dF9wcm9wZXJ0eSo+ZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTU4NzQs MTYgKzU4NzQsMTYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl81RXZlbnRfX2RhdGEoc3RydWN0IF9fcHl4X29ial85dmkKLSAgKiAgICAgICAgICAgICBy ZXR1cm4gTG9nTWVzc2FnZSgpLl9pbml0KDxtcHZfZXZlbnRfbG9nX21lc3NhZ2UqPmRhdGEpCi0g ICovCi0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICAgIF9fcHl4X3RfMyA9IF9fUHl4 X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X1Byb3BlcnR5KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDAsIDI3NiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0 X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X1Byb3BlcnR5KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI3OCwg X19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgICBfX3B5 eF90XzIgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Q cm9wZXJ0eSAqKSgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVy dHkgKilfX3B5eF90XzMpLT5fX3B5eF92dGFiKS0+X2luaXQoKChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3RfMyksICgoc3RydWN0IG1wdl9l dmVudF9wcm9wZXJ0eSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCAyNzYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzIgPSAoKHN0 cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKSgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF90 XzMpLT5fX3B5eF92dGFiKS0+X2luaXQoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3RfMyksICgoc3RydWN0IG1wdl9ldmVudF9wcm9wZXJ0 eSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigw LCAyNzgsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0gICAgIF9fcHl4X3Ig PSBfX3B5eF90XzI7Ci0gICAgIF9fcHl4X3RfMiA9IDA7Ci0gICAgIGdvdG8gX19weXhfTDA7Ci0g Ci0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzUKLSsgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3NwotICAqICAgICAgICAgaWYgc2VsZi5pZCA9 PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZOgotICAqICAgICAgICAgICAgIHJldHVybiBQ cm9wZXJ0eSgpLl9pbml0KDxtcHZfZXZlbnRfcHJvcGVydHkqPmRhdGEpCi0gICogICAgICAgICBl bGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotQEAgLTU4OTMsNyArNTg5Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19kYXRhKHN0cnVjdCBfX3B5eF9vYmpf OXZpCi0gICAgIGJyZWFrOwotICAgICBjYXNlIE1QVl9FVkVOVF9MT0dfTUVTU0FHRToKLSAKLS0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3OAotKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjgwCi0gICogICAgICAgICAgICAgcmV0dXJuIFByb3Bl cnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKLSAgKiAgICAgICAgIGVsaWYg c2VsZi5pZCA9PSBNUFZfRVZFTlRfTE9HX01FU1NBR0U6Ci0gICogICAgICAgICAgICAgcmV0dXJu IExvZ01lc3NhZ2UoKS5faW5pdCg8bXB2X2V2ZW50X2xvZ19tZXNzYWdlKj5kYXRhKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNTkwMSwxNiArNTkwMSwxNiBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9fZGF0YShzdHJ1Y3Qg X19weXhfb2JqXzl2aQotICAqICAgICAgICAgIyAgICAgcmV0dXJuIElucHV0RGlzcGF0Y2goKS5f aW5pdCg8bXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0YSkKLSAgKi8KLSAgICAg X19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3Rf Q2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf TG9nTWVzc2FnZSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyNzgs IF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9B cmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDI4MCwgX19weXhf TDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgICBfX3B5eF90XzMg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl ICopX19weXhfdF8yKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3RfMiksICgoc3RydWN0IG1wdl9l dmVudF9sb2dfbWVzc2FnZSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MykpIF9fUFlYX0VSUigwLCAyNzgsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzMgPSAo KHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl ICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICop X19weXhfdF8yKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3RfMiksICgoc3RydWN0IG1wdl9ldmVu dF9sb2dfbWVzc2FnZSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykp IF9fUFlYX0VSUigwLCAyODAsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8zKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0g ICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7Ci0gICAgIF9fcHl4X3RfMyA9IDA7Ci0gICAgIGdvdG8g X19weXhfTDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzcK LSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3OQotICAqICAgICAgICAg ZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6Ci0gICogICAgICAgICAg ICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKLSAg KiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfTE9HX01FU1NBR0U6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC01OTIwLDcgKzU5MjAsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9fZGF0YShzdHJ1Y3QgX19w eXhfb2JqXzl2aQotICAgICBicmVhazsKLSAgICAgY2FzZSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NB R0U6Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyODIKLSsgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NAotICAqICAgICAgICAgIyAgICAg cmV0dXJuIElucHV0RGlzcGF0Y2goKS5faW5pdCg8bXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNw YXRjaCo+ZGF0YSkKLSAgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfQ0xJRU5U X01FU1NBR0U6Ci0gICogICAgICAgICAgICAgY2xpbXNnID0gPG1wdl9ldmVudF9jbGllbnRfbWVz c2FnZSo+ZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNTkyOSwxOSArNTky OSwxOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF9fZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2aQotICAqLwotICAgICBfX3B5eF92X2NsaW1z ZyA9ICgoc3RydWN0IG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSAqKV9fcHl4X3ZfZGF0YSk7Ci0g Ci0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyODMKLSsgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NQotICAqICAgICAgICAgZWxpZiBzZWxmLmlk ID09IE1QVl9FVkVOVF9DTElFTlRfTUVTU0FHRToKLSAgKiAgICAgICAgICAgICBjbGltc2cgPSA8 bXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKj5kYXRhCi0gICogICAgICAgICAgICAgYXJncyA9IFtd ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAgICBudW1fYXJncyA9 IGNsaW1zZy5udW1fYXJncwotICAqICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG51bV9hcmdz KToKLSAgKi8KLS0gICAgX19weXhfdF8zID0gUHlMaXN0X05ldygwKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjgzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhf dF8zID0gUHlMaXN0X05ldygwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIo MCwgMjg1LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0g ICAgIF9fcHl4X3ZfYXJncyA9ICgoUHlPYmplY3QqKV9fcHl4X3RfMyk7Ci0gICAgIF9fcHl4X3Rf MyA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyODQKLSsg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NgotICAqICAgICAgICAgICAg IGNsaW1zZyA9IDxtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqPmRhdGEKLSAgKiAgICAgICAgICAg ICBhcmdzID0gW10KLSAgKiAgICAgICAgICAgICBudW1fYXJncyA9IGNsaW1zZy5udW1fYXJncyAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNTk1MSw3ICs1OTUxLDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGEoc3Ry dWN0IF9fcHl4X29ial85dmkKLSAgICAgX19weXhfdF80ID0gX19weXhfdl9jbGltc2ctPm51bV9h cmdzOwotICAgICBfX3B5eF92X251bV9hcmdzID0gX19weXhfdF80OwotIAotLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg1Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyODcKLSAgKiAgICAgICAgICAgICBhcmdzID0gW10KLSAgKiAgICAgICAg ICAgICBudW1fYXJncyA9IGNsaW1zZy5udW1fYXJncwotICAqICAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKG51bV9hcmdzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTU5NjMs MjYgKzU5NjMsMjYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl81RXZlbnRfX2RhdGEoc3RydWN0IF9fcHl4X29ial85dmkKLSAgICAgZm9yIChfX3B5eF90 XzYgPSAwOyBfX3B5eF90XzYgPCBfX3B5eF90XzU7IF9fcHl4X3RfNis9MSkgewotICAgICAgIF9f cHl4X3ZfaSA9IF9fcHl4X3RfNjsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Mjg2Ci0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4 OAotICAqICAgICAgICAgICAgIG51bV9hcmdzID0gY2xpbXNnLm51bV9hcmdzCi0gICogICAgICAg ICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtX2FyZ3MpOgotICAqICAgICAgICAgICAgICAgICBhcmcg PSA8Y2hhcio+Y2xpbXNnLmFyZ3NbaV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAq ICAgICAgICAgICAgICAgICBhcmcgPSBfc3RyZGVjKGFyZykKLSAgKiAgICAgICAgICAgICAgICAg YXJncy5hcHBlbmQoYXJnKQotICAqLwotLSAgICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNf RnJvbVN0cmluZygoKGNoYXIgKikoX19weXhfdl9jbGltc2ctPmFyZ3NbX19weXhfdl9pXSkpKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjg2LCBfX3B5eF9MMV9lcnJv cikKLSsgICAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoKChjaGFyICop KF9fcHl4X3ZfY2xpbXNnLT5hcmdzW19fcHl4X3ZfaV0pKSk7IGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDAsIDI4OCwgX19weXhfTDFfZXJyb3IpCi0gICAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7Ci0gICAgICAgX19QeXhfWERFQ1JFRl9TRVQoX19weXhfdl9hcmcsIF9f cHl4X3RfMyk7Ci0gICAgICAgX19weXhfdF8zID0gMDsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg3Ci0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjI4OQotICAqICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG51bV9hcmdzKToK LSAgKiAgICAgICAgICAgICAgICAgYXJnID0gPGNoYXIqPmNsaW1zZy5hcmdzW2ldCi0gICogICAg ICAgICAgICAgICAgIGFyZyA9IF9zdHJkZWMoYXJnKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0gICogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFyZykKLSAgKiAgICAgICAgICAg ICByZXR1cm4gYXJncwotICAqLwotLSAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgMjg3LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBfX1B5eF9HZXRNb2R1bGVHbG9i YWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDI4OSwgX19weXhfTDFfZXJyb3IpCi0gICAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMik7Ci0gICAgICAgX19weXhfdF83ID0gTlVMTDsKLSAgICAgICBpZiAoQ1lU SE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikp KSB7Ci1AQCAtNTk5NiwyMyArNTk5NiwyMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9fZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2aQotICAg ICAgIH0KLSAgICAgICBfX3B5eF90XzMgPSAoX19weXhfdF83KSA/IF9fUHl4X1B5T2JqZWN0X0Nh bGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNywgX19weXhfdl9hcmcpIDogX19QeXhfUHlPYmpl Y3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfYXJnKTsKLSAgICAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0tICAgICAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzMpKSBfX1BZWF9FUlIoMCwgMjg3LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyODksIF9fcHl4X0wxX2Vycm9yKQotICAg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOwotICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl9hcmcs IF9fcHl4X3RfMyk7Ci0gICAgICAgX19weXhfdF8zID0gMDsKLSAKLS0gICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg4Ci0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjI5MAotICAqICAgICAgICAgICAgICAgICBhcmcgPSA8Y2hhcio+Y2xpbXNn LmFyZ3NbaV0KLSAgKiAgICAgICAgICAgICAgICAgYXJnID0gX3N0cmRlYyhhcmcpCi0gICogICAg ICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFyZykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqICAgICAgICAgICAgIHJldHVybiBhcmdzCi0gICogICAgICAgICBlbGlmIHNlbGYuaWQg PT0gTVBWX0VWRU5UX0VORF9GSUxFOgotICAqLwotLSAgICAgIF9fcHl4X3RfOCA9IF9fUHl4X1B5 TGlzdF9BcHBlbmQoX19weXhfdl9hcmdzLCBfX3B5eF92X2FyZyk7IGlmICh1bmxpa2VseShfX3B5 eF90XzggPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDAsIDI4OCwgX19weXhfTDFfZXJyb3IpCi0r ICAgICAgX19weXhfdF84ID0gX19QeXhfUHlMaXN0X0FwcGVuZChfX3B5eF92X2FyZ3MsIF9fcHl4 X3ZfYXJnKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfOCA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIo MCwgMjkwLCBfX3B5eF9MMV9lcnJvcikKLSAgICAgfQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Mjg5Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoyOTEKLSAgKiAgICAgICAgICAgICAgICAgYXJnID0gX3N0cmRlYyhhcmcpCi0gICogICAg ICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFyZykKLSAgKiAgICAgICAgICAgICByZXR1cm4gYXJn cyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNjAyNCw3ICs2MDI0LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGEo c3RydWN0IF9fcHl4X29ial85dmkKLSAgICAgX19weXhfciA9IF9fcHl4X3ZfYXJnczsKLSAgICAg Z290byBfX3B5eF9MMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjI4MQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjgzCi0gICogICAg ICAgICAjIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENIOgot ICAqICAgICAgICAgIyAgICAgcmV0dXJuIElucHV0RGlzcGF0Y2goKS5faW5pdCg8bXB2X2V2ZW50 X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0YSkKLSAgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9 PSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0U6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LUBAIC02MDM0LDcgKzYwMzQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2XzVFdmVudF9fZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2aQotICAgICBicmVh azsKLSAgICAgY2FzZSBNUFZfRVZFTlRfRU5EX0ZJTEU6Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyOTEKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjI5MwotICAqICAgICAgICAgICAgIHJldHVybiBhcmdzCi0gICogICAgICAgICBlbGlm IHNlbGYuaWQgPT0gTVBWX0VWRU5UX0VORF9GSUxFOgotICAqICAgICAgICAgICAgIHJldHVybiBF bmRPZkZpbGVSZWFjaGVkKCkuX2luaXQoPG1wdl9ldmVudF9lbmRfZmlsZSo+ZGF0YSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTYwNDIsMTYgKzYwNDIsMTYgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGEoc3RydWN0 IF9fcHl4X29ial85dmkKLSAgKiAKLSAgKi8KLSAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsK LS0gICAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmplY3QgKilf X3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCkpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyOTEsIF9fcHl4X0wxX2Vycm9yKQot KyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVjdCAqKV9f cHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI5MywgX19weXhfTDFfZXJyb3IpCi0g ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgICBfX3B5eF90XzIgPSAoKHN0cnVjdCBf X3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICop KChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVk ICopX19weXhfdF8zKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqKV9fcHl4X3RfMyksICgoc3RydWN0 IG1wdl9ldmVudF9lbmRfZmlsZSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCAyOTEsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzIg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZp bGVSZWFjaGVkICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRP ZkZpbGVSZWFjaGVkICopX19weXhfdF8zKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqKV9fcHl4X3Rf MyksICgoc3RydWN0IG1wdl9ldmVudF9lbmRfZmlsZSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyOTMsIF9fcHl4X0wxX2Vycm9yKQotICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7 IF9fcHl4X3RfMyA9IDA7Ci0gICAgIF9fcHl4X3IgPSBfX3B5eF90XzI7Ci0gICAgIF9fcHl4X3Rf MiA9IDA7Ci0gICAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyOTAKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjI5MgotICAqICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpCi0gICogICAgICAgICAg ICAgcmV0dXJuIGFyZ3MKLSAgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfRU5E X0ZJTEU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC02MDYyLDcgKzYwNjIsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9f ZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2aQotICAgICBkZWZhdWx0OiBicmVhazsKLSAgIH0KLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTIKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTQKLSAgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBN UFZfRVZFTlRfRU5EX0ZJTEU6Ci0gICogICAgICAgICAgICAgcmV0dXJuIEVuZE9mRmlsZVJlYWNo ZWQoKS5faW5pdCg8bXB2X2V2ZW50X2VuZF9maWxlKj5kYXRhKQotICAqICAgICAgICAgcmV0dXJu IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTYwNzMsNyArNjA3Myw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19k YXRhKHN0cnVjdCBfX3B5eF9vYmpfOXZpCi0gICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5D UkVGKFB5X05vbmUpOwotICAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoyNzAKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyNzIKLSAgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKGVycl9jKQotICAqIAotICAqICAgICBj ZGVmIF9kYXRhKHNlbGYsIG1wdl9ldmVudCogZXZlbnQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci1AQCAtNjA5Niw3ICs2MDk2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGEoc3RydWN0IF9fcHl4X29ial85dmkKLSAg IHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6Mjk1Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5NwotICAqIAotICAq ICAgICBAcHJvcGVydHkKLSAgKiAgICAgZGVmIG5hbWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLUBAIC02MTMwLDcgKzYxMzAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfX19nZXRfXyhzdHJ1Y3QgX19w eQotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fZ2V0X18iLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyOTgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDAKLSAgKiAgICAg ICAgICIiIm1wdl9ldmVudF9uYW1lIG9mIHRoZSBldmVudCBpZCIiIgotICAqICAgICAgICAgY2Rl ZiBjb25zdCBjaGFyKiBuYW1lX2MKLSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLUBAIC02MTQ1LDcgKzYxNDUsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfX19nZXRfXyhzdHJ1 Y3QgX19weQotICAgICAgICNlbmRpZgotICAgICAgIC8qdHJ5OiovIHsKLSAKLS0gICAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTkKLSsgICAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDEKLSAgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciog bmFtZV9jCi0gICogICAgICAgICB3aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAgIG5hbWVfYyA9 IG1wdl9ldmVudF9uYW1lKHNlbGYuaWQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC02MTU1LDcgKzYxNTUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl81RXZlbnRfNG5hbWVfX19nZXRfXyhzdHJ1Y3QgX19weQotICAgICAgICAgX19w eXhfdl9uYW1lX2MgPSBtcHZfZXZlbnRfbmFtZShfX3B5eF92X3NlbGYtPmlkKTsKLSAgICAgICB9 Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5OAotKyAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDAKLSAgKiAgICAgICAgICIiIm1w dl9ldmVudF9uYW1lIG9mIHRoZSBldmVudCBpZCIiIgotICAqICAgICAgICAgY2RlZiBjb25zdCBj aGFyKiBuYW1lX2MKLSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLUBAIC02MTc0LDcgKzYxNzQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfX19nZXRfXyhzdHJ1Y3QgX19weQot ICAgICAgIH0KLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz MDAKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDIKLSAgKiAgICAgICAg IHdpdGggbm9naWw6Ci0gICogICAgICAgICAgICAgbmFtZV9jID0gbXB2X2V2ZW50X25hbWUoc2Vs Zi5pZCkKLSAgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKG5hbWVfYykgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotQEAgLTYxODIsOSArNjE4Miw5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80bmFtZV9fX2dldF9fKHN0cnVjdCBf X3B5Ci0gICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50KiBldmVudCwgY3R4KToKLSAg Ki8KLSAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxO YW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDMwMCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDMwMiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKLS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhf X3B5eF92X25hbWVfYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDMw MCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJp bmcoX19weXhfdl9uYW1lX2MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigw LCAzMDIsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0gICBf X3B5eF90XzQgPSBOVUxMOwotICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2Vs eShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotQEAgLTYxOTksMTQgKzYxOTksMTQgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRu YW1lX19fZ2V0X18oc3RydWN0IF9fcHkKLSAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19Q eXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF90XzMpIDog X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMyk7Ci0gICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19w eXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDMwMCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAzMDIsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSAg IF9fcHl4X3IgPSBfX3B5eF90XzE7Ci0gICBfX3B5eF90XzEgPSAwOwotICAgZ290byBfX3B5eF9M MDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTUKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTcKLSAgKiAKLSAgKiAgICAgQHByb3BlcnR5 Ci0gICogICAgIGRlZiBuYW1lKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1A QCAtNjIyOCw3ICs2MjI4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50XzRuYW1lX19fZ2V0X18oc3RydWN0IF9fcHkKLSAgIHJldHVybiBf X3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzAyCi0r LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNAotICAqICAgICAgICAgcmV0dXJu IF9zdHJkZWMobmFtZV9jKQotICAqIAotICAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVu dCogZXZlbnQsIGN0eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC02MjU3LDIw ICs2MjU3LDIwIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfOXZpCi0gICBpbnQgX19weXhfY2xpbmVu byA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2luaXQiLCAwKTsKLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDMKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjozMDUKLSAgKiAKLSAgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBt cHZfZXZlbnQqIGV2ZW50LCBjdHgpOgotICAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9 IDx1aW50NjRfdD5pZChjdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAg ICAgIHNlbGYuaWQgPSBldmVudC5ldmVudF9pZAotICAqICAgICAgICAgc2VsZi5kYXRhID0gc2Vs Zi5fZGF0YShldmVudCkKLSAgKi8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxP bmVBcmcoX19weXhfYnVpbHRpbl9pZCwgX19weXhfdl9jdHgpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAzMDMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0g X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF9idWlsdGluX2lkLCBfX3B5eF92X2N0eCk7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwNSwgX19weXhfTDFfZXJy b3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5 SW50X0FzX3VpbnQ2NF90KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09ICgo dWludDY0X3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDMwMywgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5 eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlF cnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAzMDUsIF9fcHl4X0wxX2Vycm9yKQotICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gICBfX3B5eF92X2N0eGlkID0g KCh1aW50NjRfdClfX3B5eF90XzIpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjMwNAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNgotICAq ICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudCogZXZlbnQsIGN0eCk6Ci0gICogICAgICAg ICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKGN0eCkKLSAgKiAgICAgICAgIHNl bGYuaWQgPSBldmVudC5ldmVudF9pZCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAt NjI4MCwxNCArNjI4MCwxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aQotICAgX19weXhfdF8z ID0gX19weXhfdl9ldmVudC0+ZXZlbnRfaWQ7Ci0gICBfX3B5eF92X3NlbGYtPmlkID0gX19weXhf dF8zOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNQotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNwotICAqICAgICAgICAgY2RlZiB1aW50 NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChjdHgpCi0gICogICAgICAgICBzZWxmLmlkID0gZXZl bnQuZXZlbnRfaWQKLSAgKiAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuX2RhdGEoZXZlbnQpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIHVzZXJkYXRhID0gX3JlcGx5 X3VzZXJkYXRhc1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5X3VzZXJkYXRhLCBOb25lKQotICAqICAg ICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BS T1BFUlRZX0NIQU5HRToKLSAgKi8KLS0gIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJz dHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxmLT5fX3B5eF92 dGFiKS0+X2RhdGEoX19weXhfdl9zZWxmLCBfX3B5eF92X2V2ZW50KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3Rf MSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50 ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2RhdGEoX19weXhfdl9zZWxmLCBfX3B5eF92 X2V2ZW50KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA3LCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgX19QeXhfR0lWRVJF RihfX3B5eF90XzEpOwotICAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7Ci1AQCAt NjI5NSwxOSArNjI5NSwxOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aQotICAgX19weXhfdl9z ZWxmLT5kYXRhID0gX19weXhfdF8xOwotICAgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDYKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozMDgKLSAgKiAgICAgICAgIHNlbGYuaWQgPSBldmVudC5ldmVudF9pZAotICAq ICAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5fZGF0YShldmVudCkKLSAgKiAgICAgICAgIHVzZXJk YXRhID0gX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5X3VzZXJkYXRhLCBO b25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBpZiB1c2VyZGF0 YSBpcyBub3QgTm9uZSBhbmQgc2VsZi5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgot ICAqICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCi0gICovCi0tICBfX3B5eF90XzQgPSBf X1B5eF9HZXRJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19yZXBseV91c2Vy ZGF0YXMsIF9fcHl4X3ZfY3R4aWQsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2 NF90LCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzA2 LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNCA9IF9fUHl4X0dldEl0ZW1JbnQoX19weXhf dl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcywgX19weXhfdl9jdHhpZCwg dWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQotICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9H ZXRBdHRyU3RyKF9fcHl4X3RfNCwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhf dF81KSkgX19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzUgPSBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNCwgX19weXhfbl9zX2dldCk7IGlmICh1 bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMwOCwgX19weXhfTDFfZXJyb3IpCi0g ICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBf X3B5eF90XzQgPSAwOwotLSAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChf X3B5eF92X2V2ZW50LT5yZXBseV91c2VyZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkg X19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzQgPSBfX1B5eF9Q eUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfZXZlbnQtPnJlcGx5X3VzZXJkYXRhKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzA4LCBfX3B5eF9MMV9lcnJvcikKLSAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotICAgX19weXhfdF82ID0gTlVMTDsKLSAgIF9fcHl4 X3RfNyA9IDA7Ci1AQCAtNjMyNCw3ICs2MzI0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQoc3RydWN0IF9fcHl4X29ial85dmkK LSAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKLSAgIGlmIChQeUZ1bmN0aW9uX0NoZWNrKF9fcHl4 X3RfNSkpIHsKLSAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF82LCBfX3B5 eF90XzQsIFB5X05vbmV9OwotLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RD YWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsxLV9fcHl4X3RfNywgMitfX3B5eF90XzcpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDYsIF9fcHl4X0wxX2Vycm9yKQot KyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19w eXhfdGVtcCsxLV9fcHl4X3RfNywgMitfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLUBAIC02MzMz LDE0ICs2MzMzLDE0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfOXZpCi0gICAjaWYgQ1lUSE9OX0ZB U1RfUFlDQ0FMTAotICAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzUp KSB7Ci0gICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4X3RfNiwgX19weXhfdF80 LCBQeV9Ob25lfTsKLS0gICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwo X19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF83LCAyK19fcHl4X3RfNyk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCi0rICAg IF9fcHl4X3RfMSA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhf dGVtcCsxLV9fcHl4X3RfNywgMitfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSAgIH0gZWxzZQot ICAgI2VuZGlmCi0gICB7Ci0tICAgIF9fcHl4X3RfOCA9IFB5VHVwbGVfTmV3KDIrX19weXhfdF83 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBfX1BZWF9FUlIoMCwgMzA2LCBfX3B5eF9MMV9l cnJvcikKLSsgICAgX19weXhfdF84ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzcpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfOCkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQotICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF84KTsKLSAgICAgaWYgKF9fcHl4X3RfNikgewotICAgICAg IF9fUHl4X0dJVkVSRUYoX19weXhfdF82KTsgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzgsIDAs IF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IE5VTEw7Ci1AQCAtNjM1MSw3ICs2MzUxLDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQo c3RydWN0IF9fcHl4X29ial85dmkKLSAgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKLSAgICAg UHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzgsIDErX19weXhfdF83LCBQeV9Ob25lKTsKLSAgICAg X19weXhfdF80ID0gMDsKLS0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5 eF90XzUsIF9fcHl4X3RfOCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2Jq ZWN0X0NhbGwoX19weXhfdF81LCBfX3B5eF90XzgsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9 IDA7Ci0gICB9Ci1AQCAtNjM1OSw3ICs2MzU5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQoc3RydWN0IF9fcHl4X29ial85dmkK LSAgIF9fcHl4X3ZfdXNlcmRhdGEgPSBfX3B5eF90XzE7Ci0gICBfX3B5eF90XzEgPSAwOwotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNwotKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjMwOQotICAqICAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5f ZGF0YShldmVudCkKLSAgKiAgICAgICAgIHVzZXJkYXRhID0gX3JlcGx5X3VzZXJkYXRhc1tjdHhp ZF0uZ2V0KGV2ZW50LnJlcGx5X3VzZXJkYXRhLCBOb25lKQotICAqICAgICAgICAgaWYgdXNlcmRh dGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTYzNzgsMTQgKzYzNzgsMTQgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQo c3RydWN0IF9fcHl4X29ial85dmkKLSAgIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7Ci0gICBp ZiAoX19weXhfdF85KSB7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozMDgKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMAotICAqICAg ICAgICAgdXNlcmRhdGEgPSBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXS5nZXQoZXZlbnQucmVwbHlf dXNlcmRhdGEsIE5vbmUpCi0gICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZSBhbmQg c2VsZi5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgotICAqICAgICAgICAgICAgIHVz ZXJkYXRhLnJlbW92ZSgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAg ICAgICBpZiBub3QgdXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50ZXIgPD0gMDoK LSAgKiAgICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdW2V2ZW50LnJl cGx5X3VzZXJkYXRhXQotICAqLwotLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19yZW1vdmUpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5 eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4 X25fc19yZW1vdmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMTAs IF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKLSAgICAgX19w eXhfdF84ID0gTlVMTDsKLSAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkpIHsKLUBAIC02Mzk5LDIxICs2Mzk5LDIxIEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19pbml0 KHN0cnVjdCBfX3B5eF9vYmpfOXZpCi0gICAgIH0KLSAgICAgX19weXhfdF8xID0gKF9fcHl4X3Rf OCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwgX19weXhfdF84KSA6IF9f UHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzUpOwotICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7Ci0tICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDMwOCwgX19weXhfTDFfZXJyb3IpCi0rICAgIGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDMxMCwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81 ID0gMDsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0t ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDkKLSsgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMQotICAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMg bm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRToKLSAgKiAg ICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUoKQotICAqICAgICAgICAgICAgIGlmIG5vdCB1c2Vy ZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0 eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0KLSAgKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5v dCBOb25lOgotICAqLwotLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19vYnNlcnZlZCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3Rf MSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YSwgX19weXhfbl9z X29ic2VydmVkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzExLCBf X3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fcHl4 X3RfMTEgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9f cHl4X3RfMTEgPCAwKSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9f cHl4X3RfMTEgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfMTEgPCAwKSkgX19QWVhfRVJSKDAsIDMxMSwgX19weXhfTDFfZXJyb3IpCi0gICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotICAgICBfX3B5eF90XzEw ID0gKCghX19weXhfdF8xMSkgIT0gMCk7Ci0gICAgIGlmIChfX3B5eF90XzEwKSB7Ci1AQCAtNjQy MSwyOSArNjQyMSwyOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aQotICAgICAgIF9fcHl4X3Rf OSA9IF9fcHl4X3RfMTA7Ci0gICAgICAgZ290byBfX3B5eF9MN19ib29sX2Jpbm9wX2RvbmU7Ci0g ICAgIH0KLS0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92 X3VzZXJkYXRhLCBfX3B5eF9uX3NfY291bnRlcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YSwgX19weXhfbl9zX2NvdW50ZXIp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMTEsIF9fcHl4X0wxX2Vy cm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19weXhfdF81ID0gUHlP YmplY3RfUmljaENvbXBhcmUoX19weXhfdF8xLCBfX3B5eF9pbnRfMCwgUHlfTEUpOyBfX1B5eF9Y R09UUkVGKF9fcHl4X3RfNSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAs IDMwOSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfNSA9IFB5T2JqZWN0X1JpY2hDb21w YXJlKF9fcHl4X3RfMSwgX19weXhfaW50XzAsIFB5X0xFKTsgX19QeXhfWEdPVFJFRihfX3B5eF90 XzUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMTEsIF9fcHl4X0wx X2Vycm9yKQotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLS0g ICAgX19weXhfdF8xMCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzUpOyBpZiAodW5s aWtlbHkoX19weXhfdF8xMCA8IDApKSBfX1BZWF9FUlIoMCwgMzA5LCBfX3B5eF9MMV9lcnJvcikK LSsgICAgX19weXhfdF8xMCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzUpOyBpZiAo dW5saWtlbHkoX19weXhfdF8xMCA8IDApKSBfX1BZWF9FUlIoMCwgMzExLCBfX3B5eF9MMV9lcnJv cikKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0gICAgIF9f cHl4X3RfOSA9IF9fcHl4X3RfMTA7Ci0gICAgIF9fcHl4X0w3X2Jvb2xfYmlub3BfZG9uZTo7Ci0g ICAgIGlmIChfX3B5eF90XzkpIHsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzEwCi0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMx MgotICAqICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCi0gICogICAgICAgICAgICAgaWYg bm90IHVzZXJkYXRhLm9ic2VydmVkIGFuZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6Ci0gICogICAg ICAgICAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBseV91c2Vy ZGF0YV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgaWYgdXNlcmRh dGEgaXMgbm90IE5vbmU6Ci0gICogICAgICAgICAgICAgdXNlcmRhdGEgPSB1c2VyZGF0YS5kYXRh Ci0gICovCi0tICAgICAgX19weXhfdF81ID0gX19QeXhfR2V0SXRlbUludChfX3B5eF92Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50NjRf dCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSk7IGlmICh1bmxpa2VseSgh X19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMxMCwgX19weXhfTDFfZXJyb3IpCi0rICAgICAgX19w eXhfdF81ID0gX19QeXhfR2V0SXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f cmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRf RnJvbV91aW50NjRfdCwgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhf RVJSKDAsIDMxMiwgX19weXhfTDFfZXJyb3IpCi0gICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NSk7Ci0tICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X0RlbEl0ZW1JbnQoX19weXhfdF81LCBfX3B5 eF92X2V2ZW50LT5yZXBseV91c2VyZGF0YSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21f dWludDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCAzMTAsIF9fcHl4X0wxX2Vycm9y KQotKyAgICAgIGlmICh1bmxpa2VseShfX1B5eF9EZWxJdGVtSW50KF9fcHl4X3RfNSwgX19weXhf dl9ldmVudC0+cmVwbHlfdXNlcmRhdGEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3Vp bnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgMzEyLCBfX3B5eF9MMV9lcnJvcikK LSAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLSAKLS0gICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzA5Ci0rICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMQotICAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMg bm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRToKLSAgKiAg ICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUoKQotICAqICAgICAgICAgICAgIGlmIG5vdCB1c2Vy ZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci1AQCAtNjQ1Miw3ICs2NDUyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQoc3RydWN0IF9fcHl4X29ial85 dmkKLSAgKi8KLSAgICAgfQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzA3Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDkKLSAgKiAg ICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuX2RhdGEoZXZlbnQpCi0gICogICAgICAgICB1c2VyZGF0 YSA9IF9yZXBseV91c2VyZGF0YXNbY3R4aWRdLmdldChldmVudC5yZXBseV91c2VyZGF0YSwgTm9u ZSkKLSAgKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lIGFuZCBzZWxmLmlkICE9IE1Q Vl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC02NDYxLDcgKzY0NjEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aQotICAqLwotICAgfQot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMQotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMwotICAqICAgICAgICAgICAgIGlmIG5vdCB1c2Vy ZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOgotICAqICAgICAgICAgICAg ICAgICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF1bZXZlbnQucmVwbHlfdXNlcmRhdGFdCi0g ICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotQEAgLTY0NzIsMTkgKzY0NzIsMTkgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQoc3RydWN0IF9fcHl4X29ial85dmkK LSAgIF9fcHl4X3RfMTAgPSAoX19weXhfdF85ICE9IDApOwotICAgaWYgKF9fcHl4X3RfMTApIHsK LSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMgotKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE0Ci0gICogICAgICAgICAgICAgICAgIGRl bCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0KLSAgKiAgICAg ICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lOgotICAqICAgICAgICAgICAgIHVzZXJkYXRhID0g dXNlcmRhdGEuZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBz ZWxmLnJlcGx5X3VzZXJkYXRhID0gdXNlcmRhdGEKLSAgKiAgICAgICAgIHNlbGYuZXJyb3IgPSBl dmVudC5lcnJvcgotICAqLwotLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRy U3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19kYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzUpKSBfX1BZWF9FUlIoMCwgMzEyLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF81 ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhLCBfX3B5eF9uX3Nf ZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMxNCwgX19weXhf TDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOwotICAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X3RfNSk7Ci0gICAgIF9fcHl4X3RfNSA9IDA7 Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTEKLSsgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMwotICAqICAgICAgICAgICAgIGlmIG5v dCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOgotICAqICAgICAg ICAgICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF1bZXZlbnQucmVwbHlfdXNlcmRh dGFdCi0gICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotQEAgLTY0OTMsNyArNjQ5Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19pbml0KHN0cnVjdCBfX3B5eF9vYmpf OXZpCi0gICovCi0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzEzCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE1Ci0gICogICAgICAg ICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZToKLSAgKiAgICAgICAgICAgICB1c2VyZGF0YSA9IHVz ZXJkYXRhLmRhdGEKLSAgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSB1c2VyZGF0YSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNjUwNiw3ICs2NTA2LDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQoc3Ry dWN0IF9fcHl4X29ial85dmkKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnJlcGx5X3Vz ZXJkYXRhKTsKLSAgIF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBfX3B5eF92X3VzZXJk YXRhOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxNAotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxNgotICAqICAgICAgICAgICAgIHVzZXJk YXRhID0gdXNlcmRhdGEuZGF0YQotICAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IHVz ZXJkYXRhCi0gICogICAgICAgICBzZWxmLmVycm9yID0gZXZlbnQuZXJyb3IgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotQEAgLTY1MTYsNyArNjUxNiw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19pbml0KHN0cnVjdCBfX3B5eF9v YmpfOXZpCi0gICBfX3B5eF90XzcgPSBfX3B5eF92X2V2ZW50LT5lcnJvcjsKLSAgIF9fcHl4X3Zf c2VsZi0+ZXJyb3IgPSBfX3B5eF90Xzc7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzE1Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE3Ci0g ICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gdXNlcmRhdGEKLSAgKiAgICAgICAgIHNl bGYuZXJyb3IgPSBldmVudC5lcnJvcgotICAqICAgICAgICAgcmV0dXJuIHNlbGYgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTY1MjgsNyArNjUyOCw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19pbml0KHN0cnVjdCBfX3B5 eF9vYmpfOXZpCi0gICBfX3B5eF9yID0gKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZik7Ci0gICBn b3RvIF9fcHl4X0wwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMw MgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNAotICAqICAgICAgICAg cmV0dXJuIF9zdHJkZWMobmFtZV9jKQotICAqIAotICAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1w dl9ldmVudCogZXZlbnQsIGN0eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC02 NTUyLDcgKzY1NTIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aQotICAgcmV0dXJuIF9fcHl4 X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTgKLSsvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjYwCi0gICogY2RlZiBjbGFzcyBFdmVudChv YmplY3QpOgotICAqICAgICAiIiJXcmFwczogbXB2X2V2ZW50IiIiCi0gICogICAgIGNkZWYgcHVi bGljIG1wdl9ldmVudF9pZCBpZCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNjU4 Miw3ICs2NTgyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50XzJpZF9fX2dldF9fKHN0cnVjdCBfX3B5eF8KLSAgIGludCBfX3B5eF9jbGlu ZW5vID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fIiwgMCk7Ci0g ICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZXZlbnRfaWQoX19weXhfdl9zZWxmLT5pZCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDI1OCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChfX3B5eF92X3NlbGYtPmlkKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjYwLCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgX19weXhfciA9IF9fcHl4X3RfMTsK LSAgIF9fcHl4X3RfMSA9IDA7Ci1AQCAtNjYyMCw3ICs2NjIwLDcgQEAgc3RhdGljIGludCBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8yX19zZXRfXyhzdHJ1Y3QgX19w eXhfb2JqXzkKLSAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKLSAgIGludCBf X3B5eF9jbGluZW5vID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9f IiwgMCk7Ci0tICBfX3B5eF90XzEgPSAoKGVudW0gbXB2X2V2ZW50X2lkKV9fUHl4X1B5SW50X0Fz X2VudW1fX21wdl9ldmVudF9pZChfX3B5eF92X3ZhbHVlKSk7IGlmICh1bmxpa2VseShQeUVycl9P Y2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDI1OCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90 XzEgPSAoKGVudW0gbXB2X2V2ZW50X2lkKV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9ldmVudF9p ZChfX3B5eF92X3ZhbHVlKSk7IGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDI2MCwgX19weXhfTDFfZXJyb3IpCi0gICBfX3B5eF92X3NlbGYtPmlkID0gX19weXhf dF8xOwotIAotICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCi1AQCAtNjYzNCw3ICs2NjM0LDcg QEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8y X19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzkKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0v KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjU5Ci0rLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjI2MQotICAqICAgICAiIiJXcmFwczogbXB2X2V2ZW50IiIiCi0gICog ICAgIGNkZWYgcHVibGljIG1wdl9ldmVudF9pZCBpZAotICAqICAgICBjZGVmIHB1YmxpYyBpbnQg ZXJyb3IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTY2NjQsNyArNjY2NCw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF81 ZXJyb3JfX19nZXRfXyhzdHJ1Y3QgX19wCi0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOwotICAgX19QeXhfWERFQ1JF RihfX3B5eF9yKTsKLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3Zf c2VsZi0+ZXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyNTks IF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19w eXhfdl9zZWxmLT5lcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDI2MSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9f cHl4X3IgPSBfX3B5eF90XzE7Ci0gICBfX3B5eF90XzEgPSAwOwotQEAgLTY3MDIsNyArNjcwMiw3 IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF81ZXJy b3JfMl9fc2V0X18oc3RydWN0IF9fcHl4X29iCi0gICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFt ZSA9IE5VTEw7Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19zZXRfXyIsIDApOwotLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfQXNf aW50KF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMSA9PSAoaW50KS0xKSAm JiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDI1OSwgX19weXhfTDFfZXJyb3IpCi0r ICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdl92YWx1ZSk7IGlmICh1bmxp a2VseSgoX19weXhfdF8xID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9F UlIoMCwgMjYxLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fcHl4X3Zfc2VsZi0+ZXJyb3IgPSBfX3B5 eF90XzE7Ci0gCi0gICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KLUBAIC02NzE2LDcgKzY3MTYs NyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVy cm9yXzJfX3NldF9fKHN0cnVjdCBfX3B5eF9vYgotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAot LS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNjAKLSsvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjYyCi0gICogICAgIGNkZWYgcHVibGljIG1wdl9ldmVudF9pZCBp ZAotICAqICAgICBjZGVmIHB1YmxpYyBpbnQgZXJyb3IKLSAgKiAgICAgY2RlZiBwdWJsaWMgb2Jq ZWN0IGRhdGEsIHJlcGx5X3VzZXJkYXRhICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC03MjE1LDcgKzcyMTUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl81RXZlbnRfMl9fc2V0c3RhdGVfY3l0aG9uX18oc3RydQotICAgcmV0dXJuIF9f cHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTgKLSsv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzIwCi0gICogCi0gICogCi0gICogZGVm IF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNzIzNyw3ICs3 MjM3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf NV9lcnJvcnMoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFAKLSAgIHJldHVybiBfX3B5eF9yOwotIH0K LSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE5Ci0rLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjMyMQotICAqIAotICAqIGRlZiBfZXJyb3JzKGZuKToKLSAg KiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtNzI4NSw0MiArNzI4NSw0MiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83X2Vycm9yc193cmFwcGVkKFB5T2JqZWN0ICpfX3B5eAotICAgX19w eXhfb3V0ZXJfc2NvcGUgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICopIF9fUHl4X0N5RnVuY3Rpb25fR2V0Q2xvc3Vy ZShfX3B5eF9zZWxmKTsKLSAgIF9fcHl4X2N1cl9zY29wZSA9IF9fcHl4X291dGVyX3Njb3BlOwot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMAotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMgotICAqIGRlZiBfZXJyb3JzKGZuKToKLSAgKiAg ICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgotICAqICAgICAgICAgdiA9IGZuKCprLCAqKmt3KSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBpZiB2IDwgMDoKLSAgKiAg ICAgICAgICAgICByYWlzZSBNUFZFcnJvcih2KQotICAqLwotLSAgaWYgKHVubGlrZWx5KCFfX3B5 eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4pKSB7IF9fUHl4X1JhaXNlQ2xvc3VyZU5hbWVFcnJvcigi Zm4iKTsgX19QWVhfRVJSKDAsIDMyMCwgX19weXhfTDFfZXJyb3IpIH0KLS0gIF9fcHl4X3RfMSA9 IFB5RGljdF9Db3B5KF9fcHl4X3Zfa3cpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAzMjAsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF9jdXJf c2NvcGUtPl9fcHl4X3ZfZm4pKSB7IF9fUHl4X1JhaXNlQ2xvc3VyZU5hbWVFcnJvcigiZm4iKTsg X19QWVhfRVJSKDAsIDMyMiwgX19weXhfTDFfZXJyb3IpIH0KLSsgIF9fcHl4X3RfMSA9IFB5RGlj dF9Db3B5KF9fcHl4X3Zfa3cpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCAzMjIsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBf X3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2N1cl9zY29wZS0+X19weXhfdl9m biwgX19weXhfdl9rLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlY X0VSUigwLCAzMjAsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfQ2FsbChfX3B5eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4sIF9fcHl4X3ZfaywgX19weXhfdF8x KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMzIyLCBfX3B5eF9MMV9l cnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gICBfX3B5eF92X3YgPSBfX3B5eF90XzI7Ci0gICBfX3B5 eF90XzIgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMQot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMwotICAqICAgICBkZWYgd3Jh cHBlZCgqaywgKiprdyk6Ci0gICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCi0gICogICAgICAg ICBpZiB2IDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgICAg IHJhaXNlIE1QVkVycm9yKHYpCi0gICogICAgIHJldHVybiB3cmFwcGVkCi0gICovCi0tICBfX3B5 eF90XzIgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X3YsIF9fcHl4X2ludF8wLCBQeV9M VCk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgMzIxLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5 T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9f UFlYX0VSUigwLCAzMjEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8yID0gUHlPYmplY3Rf UmljaENvbXBhcmUoX19weXhfdl92LCBfX3B5eF9pbnRfMCwgUHlfTFQpOyBfX1B5eF9YR09UUkVG KF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDMyMywg X19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19w eXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwgMzIzLCBf X3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OwotICAgaWYgKHVubGlrZWx5KF9fcHl4X3RfMykpIHsKLSAKLS0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjMyMgotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MzI0Ci0gICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCi0gICogICAgICAgICBpZiB2 IDwgMDoKLSAgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcih2KSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0gICogICAgIHJldHVybiB3cmFwcGVkCi0gICogCi0gICovCi0tICAgIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMjIsIF9fcHl4X0wxX2Vycm9y KQotKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhfbl9zX01Q VkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzI0LCBfX3B5 eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICAgIF9fcHl4X3Rf NCA9IE5VTEw7Ci0gICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlN ZXRob2RfQ2hlY2soX19weXhfdF8xKSkpIHsKLUBAIC03MzM0LDE0ICs3MzM0LDE0IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3JzX3dyYXBw ZWQoUHlPYmplY3QgKl9fcHl4Ci0gICAgIH0KLSAgICAgX19weXhfdF8yID0gKF9fcHl4X3RfNCkg PyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8xLCBfX3B5eF90XzQsIF9fcHl4X3Zf dikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMSwgX19weXhfdl92KTsKLSAg ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzMjIsIF9fcHl4X0wxX2Vycm9yKQotKyAg ICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzMjQsIF9fcHl4X0wxX2Vy cm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMiwgMCwg MCwgMCk7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAg ICBfX1BZWF9FUlIoMCwgMzIyLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QWVhfRVJSKDAsIDMy NCwgX19weXhfTDFfZXJyb3IpCi0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMjEKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMwotICAq ICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6Ci0gICogICAgICAgICB2ID0gZm4oKmssICoqa3cp Ci0gICogICAgICAgICBpZiB2IDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAg LTczNTAsNyArNzM1MCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdfZXJyb3JzX3dyYXBwZWQoUHlPYmplY3QgKl9fcHl4Ci0gICovCi0gICB9Ci0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE5Ci0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzIxCi0gICogCi0gICogZGVmIF9lcnJvcnMoZm4pOgot ICAqICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLUBAIC03Mzc0LDcgKzczNzQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83X2Vycm9yc193cmFwcGVkKFB5T2JqZWN0ICpfX3B5eAotICAgcmV0 dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz MTgKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzIwCi0gICogCi0gICogCi0g ICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNzM5 Niw3ICs3Mzk2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfNF9lcnJvcnMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAotICAgaWYgKHVubGlrZWx5KCFf X3B5eF9jdXJfc2NvcGUpKSB7Ci0gICAgIF9fcHl4X2N1cl9zY29wZSA9ICgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICop UHlfTm9uZSk7Ci0gICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLS0gICAgX19QWVhfRVJSKDAs IDMxOCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUFlYX0VSUigwLCAzMjAsIF9fcHl4X0wxX2Vy cm9yKQotICAgfSBlbHNlIHsKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X2N1cl9zY29wZSk7Ci0g ICB9Ci1AQCAtNzQwNCwxOSArNzQwNCwxOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl80X2Vycm9ycyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0Ci0gICBf X1B5eF9JTkNSRUYoX19weXhfY3VyX3Njb3BlLT5fX3B5eF92X2ZuKTsKLSAgIF9fUHl4X0dJVkVS RUYoX19weXhfY3VyX3Njb3BlLT5fX3B5eF92X2ZuKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjozMTkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozMjEKLSAgKiAKLSAgKiBkZWYgX2Vycm9ycyhmbik6Ci0gICogICAgIGRlZiB3cmFwcGVkKCpr LCAqKmt3KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgdiA9IGZu KCprLCAqKmt3KQotICAqICAgICAgICAgaWYgdiA8IDA6Ci0gICovCi0tICBfX3B5eF90XzEgPSBf X1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN19l cnJvcnNfMXdyYXBwZWQsIDAsIF9fcHl4X25fc19lcnJvcnNfbG9jYWxzX3dyYXBwZWQsICgoUHlP YmplY3QqKV9fcHl4X2N1cl9zY29wZSksIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9f cHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18yKSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDMxOSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEg PSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N19lcnJvcnNfMXdyYXBwZWQsIDAsIF9fcHl4X25fc19lcnJvcnNfbG9jYWxzX3dyYXBwZWQsICgo UHlPYmplY3QqKV9fcHl4X2N1cl9zY29wZSksIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYs IF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18yKSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMyMSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKLSAgIF9fcHl4X3Zfd3JhcHBlZCA9IF9fcHl4X3RfMTsKLSAgIF9f cHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzIz Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI1Ci0gICogICAgICAgICBp ZiB2IDwgMDoKLSAgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcih2KQotICAqICAgICByZXR1 cm4gd3JhcHBlZCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNzQyOCw3ICs3NDI4 LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNF9l cnJvcnMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAotICAgX19weXhfciA9IF9fcHl4X3Zfd3JhcHBl ZDsKLSAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MzE4Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzIwCi0gICog Ci0gICogCi0gICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtNzQ0OSw3ICs3NDQ5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfNF9lcnJvcnMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAotICAgcmV0dXJu IF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjkK LSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMxCi0gICogICAgIGNvZGUgPSBO b25lCi0gICogCi0gICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotQEAgLTc0OTIsMTEgKzc0OTIsMTEgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yXzFfX2luaXRfXyhQeU9iamVj dCAqX18KLSAgICAgICAgIGNhc2UgIDE6Ci0gICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0g PSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZSkpICE9IDAp KSBrd19hcmdzLS07Ci0gICAgICAgICBlbHNlIHsKLS0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0 dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAzMjksIF9f cHl4X0wzX2Vycm9yKQotKyAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19p bml0X18iLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDMzMSwgX19weXhfTDNfZXJyb3IpCi0g ICAgICAgICB9Ci0gICAgICAgfQotICAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsK LS0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhf a3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9faW5pdF9fIikg PCAwKSkgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDNfZXJyb3IpCi0rICAgICAgICBpZiAodW5s aWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJn bmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJfX2luaXRfXyIpIDwgMCkpIF9fUFlYX0VSUigw LCAzMzEsIF9fcHl4X0wzX2Vycm9yKQotICAgICAgIH0KLSAgICAgfSBlbHNlIGlmIChQeVR1cGxl X0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9IDIpIHsKLSAgICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1 cGxlX2Vycm9yOwotQEAgLTc1MDksNyArNzUwOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl8xX19pbml0X18oUHlPYmplY3QgKl9f Ci0gICB9Ci0gICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOwotICAgX19w eXhfTDVfYXJndHVwbGVfZXJyb3I6OwotLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9f aW5pdF9fIiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VS UigwLCAzMjksIF9fcHl4X0wzX2Vycm9yKQotKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQo Il9faW5pdF9fIiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlY X0VSUigwLCAzMzEsIF9fcHl4X0wzX2Vycm9yKQotICAgX19weXhfTDNfZXJyb3I6OwotICAgX19Q eXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuTVBWRXJyb3IuX19pbml0X18iLCBf X3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLSAgIF9fUHl4X1Jl Zk5hbm55RmluaXNoQ29udGV4dCgpOwotQEAgLTc1NDAsMTYgKzc1NDAsMTYgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19faW5pdF9f KENZVEhPTl9VTlVTRUQKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyIs IDApOwotICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfZSk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MzMwCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzMyCi0gICogCi0gICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKToKLSAgKiAgICAgICAg IHNlbGYuY29kZSA9IGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAg Y2RlZiBjb25zdCBjaGFyKiBlcnJfYwotICAqICAgICAgICAgY2RlZiBpbnQgZV9pCi0gICovCi0t ICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19j b2RlLCBfX3B5eF92X2UpIDwgMCkgX19QWVhfRVJSKDAsIDMzMCwgX19weXhfTDFfZXJyb3IpCi0r ICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19j b2RlLCBfX3B5eF92X2UpIDwgMCkgX19QWVhfRVJSKDAsIDMzMiwgX19weXhfTDFfZXJyb3IpCi0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMzCi0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzM1Ci0gICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIq IGVycl9jCi0gICogICAgICAgICBjZGVmIGludCBlX2kKLSAgKiAgICAgICAgIGlmIG5vdCBpc2lu c3RhbmNlKGUsIGJhc2VzdHJpbmcpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAt NzU2MCwxNyArNzU2MCwxNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl84TVBWRXJyb3JfX19pbml0X18oQ1lUSE9OX1VOVVNFRAotICAgX19weXhfdF8y ID0gKCghKF9fcHl4X3RfMSAhPSAwKSkgIT0gMCk7Ci0gICBpZiAoX19weXhfdF8yKSB7Ci0gCi0t ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzQKLSsgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzNgotICAqICAgICAgICAgY2RlZiBpbnQgZV9pCi0g ICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBiYXNlc3RyaW5nKToKLSAgKiAgICAgICAg ICAgICBlX2kgPSBlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAg ICB3aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAgICAgICBlcnJfYyA9IG1wdl9lcnJvcl9zdHJp bmcoZV9pKQotICAqLwotLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhf dl9lKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCAzMzQsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzMg PSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdl9lKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMg PT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAzMzYsIF9fcHl4 X0wxX2Vycm9yKQotICAgICBfX3B5eF92X2VfaSA9IF9fcHl4X3RfMzsKLSAKLS0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzNQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzM3Ci0gICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBiYXNl c3RyaW5nKToKLSAgKiAgICAgICAgICAgICBlX2kgPSBlCi0gICogICAgICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTc1ODUsNyArNzU4NSw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJv cl9fX2luaXRfXyhDWVRIT05fVU5VU0VECi0gICAgICAgICAjZW5kaWYKLSAgICAgICAgIC8qdHJ5 OiovIHsKLSAKLS0gICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMz NgotKyAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzM4Ci0gICog ICAgICAgICAgICAgZV9pID0gZQotICAqICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0gICogICAg ICAgICAgICAgICAgIGVycl9jID0gbXB2X2Vycm9yX3N0cmluZyhlX2kpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLUBAIC03NTk1LDcgKzc1OTUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84TVBWRXJyb3JfX19pbml0X18oQ1lUSE9OX1VO VVNFRAotICAgICAgICAgICBfX3B5eF92X2Vycl9jID0gbXB2X2Vycm9yX3N0cmluZyhfX3B5eF92 X2VfaSk7Ci0gICAgICAgICB9Ci0gCi0tICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzM1Ci0rICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzM3Ci0gICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBiYXNlc3RyaW5nKToKLSAgKiAg ICAgICAgICAgICBlX2kgPSBlCi0gICogICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTc2MTQsMTYgKzc2MTQsMTYgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19faW5pdF9fKENZ VEhPTl9VTlVTRUQKLSAgICAgICAgIH0KLSAgICAgfQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MzM3Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMzkKLSAgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAgICAg ICBlcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmcoZV9pKQotICAqICAgICAgICAgICAgIGUgPSBfc3Ry ZGVjKGVycl9jKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBFeGNl cHRpb24uX19pbml0X18oc2VsZiwgZSkKLSAgKiAKLSAgKi8KLS0gICAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzUsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMzcsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9H ZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNSwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxp a2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMzOSwgX19weXhfTDFfZXJyb3IpCi0gICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOwotLSAgICBfX3B5eF90XzYgPSBfX1B5eF9QeUJ5dGVz X0Zyb21TdHJpbmcoX19weXhfdl9lcnJfYyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDMzNywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5 Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X2Vycl9jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgMzM5LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNik7Ci0gICAgIF9fcHl4X3RfNyA9IE5VTEw7Ci0gICAgIGlmIChDWVRIT05fVU5QQUNL X01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkpIHsKLUBAIC03 NjM4LDEzICs3NjM4LDEzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzhNUFZFcnJvcl9fX2luaXRfXyhDWVRIT05fVU5VU0VECi0gICAgIF9fcHl4X3Rf NCA9IChfX3B5eF90XzcpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNSwgX19w eXhfdF83LCBfX3B5eF90XzYpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzUs IF9fcHl4X3RfNik7Ci0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0g MDsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tICAgIGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzNywgX19weXhfTDFfZXJyb3Ip Ci0rICAgIGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOSwgX19weXhf TDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotICAgICBfX1B5eF9ERUNS RUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLSAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF92X2UsIF9fcHl4X3RfNCk7Ci0gICAgIF9fcHl4X3RfNCA9IDA7Ci0gCi0tICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzMKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjMzNQotICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYwotICAq ICAgICAgICAgY2RlZiBpbnQgZV9pCi0gICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBi YXNlc3RyaW5nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTc2NTMsMTQgKzc2 NTMsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf OE1QVkVycm9yX19faW5pdF9fKENZVEhPTl9VTlVTRUQKLSAgKi8KLSAgIH0KLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozNDAKLSAgKiAgICAgICAgICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jf c3RyaW5nKGVfaSkKLSAgKiAgICAgICAgICAgICBlID0gX3N0cmRlYyhlcnJfYykKLSAgKiAgICAg ICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0gICogCi0gICogY2xhc3MgUHlNUFZFcnJvcihFeGNlcHRpb24pOgotICAqLwotLSAgX19w eXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopKCYoKFB5VHlw ZU9iamVjdCopUHlFeGNfRXhjZXB0aW9uKVswXSkpLCBfX3B5eF9uX3NfaW5pdCk7IGlmICh1bmxp a2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhfTDFfZXJyb3IpCi0rICBf X3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKikoJigoUHlU eXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSksIF9fcHl4X25fc19pbml0KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMzQwLCBfX3B5eF9MMV9lcnJvcikKLSAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOwotICAgX19weXhfdF82ID0gTlVMTDsKLSAgIF9fcHl4 X3RfMyA9IDA7Ci1AQCAtNzY3Nyw3ICs3Njc3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19faW5pdF9fKENZVEhPTl9VTlVTRUQK LSAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKLSAgIGlmIChQeUZ1bmN0aW9uX0NoZWNrKF9fcHl4 X3RfNSkpIHsKLSAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF82LCBfX3B5 eF92X3NlbGYsIF9fcHl4X3ZfZX07Ci0tICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5RnVuY3Rpb25f RmFzdENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAyK19fcHl4X3RfMyk7 IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhfTDFfZXJy b3IpCi0rICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF81 LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAyK19fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19w eXhfdF80KSkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNCk7Ci0gICB9IGVsc2UKLUBAIC03Njg1LDEzICs3Njg1LDEzIEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl9fX2luaXRfXyhDWVRI T05fVU5VU0VECi0gICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAotICAgaWYgKF9fUHl4X1B5RmFz dENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzUpKSB7Ci0gICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1w WzNdID0ge19fcHl4X3RfNiwgX19weXhfdl9zZWxmLCBfX3B5eF92X2V9OwotLSAgICBfX3B5eF90 XzQgPSBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzUsIF9fcHl4X3RlbXArMS1f X3B5eF90XzMsIDIrX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9F UlIoMCwgMzM4LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF80ID0gX19QeXhfUHlDRnVu Y3Rpb25fRmFzdENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAyK19fcHl4 X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhf TDFfZXJyb3IpCi0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsK LSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0gICB9IGVsc2UKLSAgICNlbmRpZgotICAg ewotLSAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfMyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9f cHl4X3RfNyA9IFB5VHVwbGVfTmV3KDIrX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzcpKSBfX1BZWF9FUlIoMCwgMzQwLCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNyk7Ci0gICAgIGlmIChfX3B5eF90XzYpIHsKLSAgICAgICBfX1B5eF9HSVZFUkVG KF9fcHl4X3RfNik7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCBfX3B5eF90XzYpOyBf X3B5eF90XzYgPSBOVUxMOwotQEAgLTc3MDIsMTQgKzc3MDIsMTQgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19faW5pdF9fKENZVEhP Tl9VTlVTRUQKLSAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfZSk7Ci0gICAgIF9fUHl4X0dJVkVS RUYoX19weXhfdl9lKTsKLSAgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDErX19weXhf dF8zLCBfX3B5eF92X2UpOwotLSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9f cHl4X3RfNSwgX19weXhfdF83LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgMzM4LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF80ID0gX19QeXhfUHlP YmplY3RfQ2FsbChfX3B5eF90XzUsIF9fcHl4X3RfNywgTlVMTCk7IGlmICh1bmxpa2VseSghX19w eXhfdF80KSkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzQpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83 ID0gMDsKLSAgIH0KLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwot ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0gCi0tICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MzMxCi0gICogICAgIGNvZGUgPSBOb25lCi0gICogCi0gICogICAgIGRlZiBf X2luaXRfXyhzZWxmLCBlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTc3MzQs NyArNzczNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzhNUFZFcnJvcl9fX2luaXRfXyhDWVRIT05fVU5VU0VECi0gICByZXR1cm4gX19weXhfcjsK LSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NwotKy8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDkKLSAgKiAKLSAgKiBjbGFzcyBfUmVwbHlVc2Vy RGF0YShvYmplY3QpOgotICAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC03Nzc3LDExICs3Nzc3LDExIEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfMV9f aW5pdF9fKFB5T2JqCi0gICAgICAgICBjYXNlICAxOgotICAgICAgICAgaWYgKGxpa2VseSgodmFs dWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2Rh dGEpKSAhPSAwKSkga3dfYXJncy0tOwotICAgICAgICAgZWxzZSB7Ci0tICAgICAgICAgIF9fUHl4 X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDEsIDIsIDIsIDEpOyBfX1BZWF9FUlIo MCwgMzQ3LCBfX3B5eF9MM19lcnJvcikKLSsgICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUlu dmFsaWQoIl9faW5pdF9fIiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAzNDksIF9fcHl4X0wz X2Vycm9yKQotICAgICAgICAgfQotICAgICAgIH0KLSAgICAgICBpZiAodW5saWtlbHkoa3dfYXJn cyA+IDApKSB7Ci0tICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdv cmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJf X2luaXRfXyIpIDwgMCkpIF9fUFlYX0VSUigwLCAzNDcsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAg ICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBf X3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAiX19pbml0X18iKSA8IDApKSBf X1BZWF9FUlIoMCwgMzQ5LCBfX3B5eF9MM19lcnJvcikKLSAgICAgICB9Ci0gICAgIH0gZWxzZSBp ZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7Ci0gICAgICAgZ290byBfX3B5 eF9MNV9hcmd0dXBsZV9lcnJvcjsKLUBAIC03Nzk0LDcgKzc3OTQsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzFfX2lu aXRfXyhQeU9iagotICAgfQotICAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9u ZTsKLSAgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKLS0gIF9fUHl4X1JhaXNlQXJndHVwbGVJ bnZhbGlkKCJfX2luaXRfXyIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykp OyBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5eF9MM19lcnJvcikKLSsgIF9fUHl4X1JhaXNlQXJndHVw bGVJbnZhbGlkKCJfX2luaXRfXyIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cykpOyBfX1BZWF9FUlIoMCwgMzQ5LCBfX3B5eF9MM19lcnJvcikKLSAgIF9fcHl4X0wzX2Vycm9y OjsKLSAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9SZXBseVVzZXJE YXRhLl9faW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFt ZSk7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLUBAIC03ODE1LDM0ICs3ODE1 LDM0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0 X1JlcGx5VXNlckRhdGFfX19pbml0X18oQ1lUSE9OCi0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7 Ci0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18iLCAwKTsKLSAKLS0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDgKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjozNTAKLSAgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOgot ICAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6Ci0gICogICAgICAgICBzZWxmLmNvdW50 ZXIgPSAwICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIHNlbGYuZGF0 YSA9IGRhdGEKLSAgKiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBGYWxzZQotICAqLwotLSAgaWYg KF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY291bnRl ciwgX19weXhfaW50XzApIDwgMCkgX19QWVhfRVJSKDAsIDM0OCwgX19weXhfTDFfZXJyb3IpCi0r ICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19j b3VudGVyLCBfX3B5eF9pbnRfMCkgPCAwKSBfX1BZWF9FUlIoMCwgMzUwLCBfX3B5eF9MMV9lcnJv cikKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDkKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTEKLSAgKiAgICAgZGVmIF9faW5pdF9fKHNl bGYsIGRhdGEpOgotICAqICAgICAgICAgc2VsZi5jb3VudGVyID0gMAotICAqICAgICAgICAgc2Vs Zi5kYXRhID0gZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBz ZWxmLm9ic2VydmVkID0gRmFsc2UKLSAgKiAKLSAgKi8KLS0gIGlmIChfX1B5eF9QeU9iamVjdF9T ZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2RhdGEsIF9fcHl4X3ZfZGF0YSkgPCAw KSBfX1BZWF9FUlIoMCwgMzQ5LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9QeU9iamVj dF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2RhdGEsIF9fcHl4X3ZfZGF0YSkg PCAwKSBfX1BZWF9FUlIoMCwgMzUxLCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTAKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNTIKLSAgKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKLSAgKiAgICAgICAgIHNl bGYuZGF0YSA9IGRhdGEKLSAgKiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBGYWxzZSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0gICogICAgIGRlZiBhZGQoc2VsZik6Ci0gICov Ci0tICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25f c19vYnNlcnZlZCwgUHlfRmFsc2UpIDwgMCkgX19QWVhfRVJSKDAsIDM1MCwgX19weXhfTDFfZXJy b3IpCi0rICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4 X25fc19vYnNlcnZlZCwgUHlfRmFsc2UpIDwgMCkgX19QWVhfRVJSKDAsIDM1MiwgX19weXhfTDFf ZXJyb3IpCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ3Ci0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ5Ci0gICogCi0gICogY2xhc3MgX1Jl cGx5VXNlckRhdGEob2JqZWN0KToKLSAgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtNzg2Miw3ICs3ODYyLDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0 YV9fX2luaXRfXyhDWVRIT04KLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzUyCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjM1NAotICAqICAgICAgICAgc2VsZi5vYnNlcnZlZCA9IEZhbHNlCi0gICogCi0gICog ICAgIGRlZiBhZGQoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC03ODk0 LDIyICs3ODk0LDIyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzE0X1JlcGx5VXNlckRhdGFfMmFkZChDWVRIT05fVU5VCi0gICBpbnQgX19weXhfY2xp bmVubyA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiYWRkIiwgMCk7Ci0gCi0t ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzUzCi0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzU1Ci0gICogCi0gICogICAgIGRlZiBhZGQoc2VsZik6Ci0g ICogICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0gICogCi0gICogICAgIGRlZiByZW1vdmUoc2VsZik6Ci0gICovCi0tICBfX3B5eF90XzEgPSBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NvdW50ZXIp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzNTMsIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3Nl bGYsIF9fcHl4X25fc19jb3VudGVyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMzU1LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot LSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfQWRkT2JqQyhfX3B5eF90XzEsIF9fcHl4X2ludF8x LCAxLCAxLCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMzUzLCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0FkZE9iakMoX19weXhf dF8xLCBfX3B5eF9pbnRfMSwgMSwgMSwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDM1NSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgaWYgKF9f UHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY291bnRlciwg X19weXhfdF8yKSA8IDApIF9fUFlYX0VSUigwLCAzNTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYg KF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY291bnRl ciwgX19weXhfdF8yKSA8IDApIF9fUFlYX0VSUigwLCAzNTUsIF9fcHl4X0wxX2Vycm9yKQotICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzUyCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzU0Ci0gICogICAgICAgICBzZWxmLm9ic2VydmVkID0gRmFsc2UKLSAgKiAKLSAg KiAgICAgZGVmIGFkZChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTc5 MzEsNyArNzkzMSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzE0X1JlcGx5VXNlckRhdGFfMmFkZChDWVRIT05fVU5VCi0gICByZXR1cm4gX19weXhf cjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NQotKy8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTcKLSAgKiAgICAgICAgIHNlbGYuY291bnRl ciArPSAxCi0gICogCi0gICogICAgIGRlZiByZW1vdmUoc2VsZik6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLUBAIC03OTYzLDIyICs3OTYzLDIyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNHJlbW92ZShDWVRI T05fCi0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgicmVtb3ZlIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzU2Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzU4Ci0gICogCi0g ICogICAgIGRlZiByZW1vdmUoc2VsZik6Ci0gICogICAgICAgICBzZWxmLmNvdW50ZXIgLT0gMSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0gICogCi0gICovCi0tICBfX3B5eF90 XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2Nv dW50ZXIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzNTYsIF9fcHl4 X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5 eF92X3NlbGYsIF9fcHl4X25fc19jb3VudGVyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMzU4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOwotLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfU3VidHJhY3RPYmpDKF9fcHl4X3RfMSwg X19weXhfaW50XzEsIDEsIDEsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VS UigwLCAzNTYsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfU3Vi dHJhY3RPYmpDKF9fcHl4X3RfMSwgX19weXhfaW50XzEsIDEsIDEsIDApOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzNTgsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKLS0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19w eXhfbl9zX2NvdW50ZXIsIF9fcHl4X3RfMikgPCAwKSBfX1BZWF9FUlIoMCwgMzU2LCBfX3B5eF9M MV9lcnJvcikKLSsgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwg X19weXhfbl9zX2NvdW50ZXIsIF9fcHl4X3RfMikgPCAwKSBfX1BZWF9FUlIoMCwgMzU4LCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NQotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NwotICAqICAgICAgICAgc2VsZi5jb3VudGVyICs9 IDEKLSAgKiAKLSAgKiAgICAgZGVmIHJlbW92ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotQEAgLTgwMDAsNyArODAwMCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNHJlbW92ZShDWVRIT05fCi0g ICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjM3MAotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNzIKLSAgKiAKLSAg KiAgICAgQHByb3BlcnR5Ci0gICogICAgIGRlZiBhcGlfdmVyc2lvbihzZWxmKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTgwMzMsNyArODAzMyw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExYXBpX3ZlcnNpb25f X19nZXRfXyhDCi0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19nZXRfXyIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM3MQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3Mwot ICAqICAgICBAcHJvcGVydHkKLSAgKiAgICAgZGVmIGFwaV92ZXJzaW9uKHNlbGYpOgotICAqICAg ICAgICAgcmV0dXJuIF9DQVBJX01JTk9SLCBfQ0FQSV9NQUpPUiwgX0NBUElfVkVSU0lPTiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtODA0MSwxMyArODA0MSwxMyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMWFwaV92 ZXJzaW9uX19fZ2V0X18oQwotICAqICAgICBAcHJvcGVydHkKLSAgKi8KLSAgIF9fUHl4X1hERUNS RUYoX19weXhfcik7Ci0tICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19w eXhfbl9zX0NBUElfTUlOT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCAzNzEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5 eF90XzEsIF9fcHl4X25fc19DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMzczLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19D QVBJX01BSk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMzcxLCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBf X3B5eF9uX3NfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDM3MywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0g IF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZyhfX3B5eF92Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fQ0FQSV9WRVJTSU9OKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMCwgMzcxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMyA9IF9fUHl4 X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZyhfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f Q0FQSV9WRVJTSU9OKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMzcz LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgX19weXhf dF80ID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDAsIDM3MSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzQgPSBQeVR1cGxlX05ldygzKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzczLCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotICAgX19QeXhfR0lWRVJFRihfX3B5eF90 XzEpOwotICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQsIDAsIF9fcHl4X3RfMSk7Ci1AQCAt ODA2Miw3ICs4MDYyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMTFhcGlfdmVyc2lvbl9fX2dldF9fKEMKLSAgIF9fcHl4X3RfNCA9 IDA7Ci0gICBnb3RvIF9fcHl4X0wwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjM3MAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3MgotICAq IAotICAqICAgICBAcHJvcGVydHkKLSAgKiAgICAgZGVmIGFwaV92ZXJzaW9uKHNlbGYpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtODA4NCw3ICs4MDg0LDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTFhcGlfdmVy c2lvbl9fX2dldF9fKEMKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6Mzc0Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjM3NgotICAqIAotICAqICAgICBAcHJvcGVydHkKLSAgKiAgICAgZGVmIG5hbWUoc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC04MTE4LDcgKzgxMTgsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bmFt ZV9fX2dldF9fKHN0cnVjdCBfXwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjozODAKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozODIKLSAgKiAgICAgICAgICIiIgotICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBu YW1lCi0gICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLUBAIC04MTI5LDEyICs4MTI5LDEyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRuYW1lX19fZ2V0X18oc3RydWN0IF9fCi0g ICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKLSAgICAgaWYgKHVubGlrZWx5KCEo X19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewotICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNf QXNzZXJ0aW9uRXJyb3IpOwotLSAgICAgIF9fUFlYX0VSUigwLCAzODAsIF9fcHl4X0wxX2Vycm9y KQotKyAgICAgIF9fUFlYX0VSUigwLCAzODIsIF9fcHl4X0wxX2Vycm9yKQotICAgICB9Ci0gICB9 Ci0gICAjZW5kaWYKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODEK LSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODMKLSAgKiAgICAgICAgIGNk ZWYgY29uc3QgY2hhciogbmFtZQotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTgxNDks NyArODE0OSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzRuYW1lX19fZ2V0X18oc3RydWN0IF9fCi0gICAgICAgI2VuZGlmCi0gICAg ICAgLyp0cnk6Ki8gewotIAotLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjM4MgotKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM4NAot ICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAg KiAgICAgICAgICAgICBuYW1lID0gbXB2X2NsaWVudF9uYW1lKHNlbGYuX2N0eCkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTgxNTksNyArODE1OSw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRuYW1lX19fZ2V0X18o c3RydWN0IF9fCi0gICAgICAgICBfX3B5eF92X25hbWUgPSBtcHZfY2xpZW50X25hbWUoX19weXhf dl9zZWxmLT5fY3R4KTsKLSAgICAgICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjM4MQotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozODMKLSAgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZQotICAqICAgICAgICAgYXNz ZXJ0IHNlbGYuX2N0eAotICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotQEAgLTgxNzgsNyArODE3OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRuYW1lX19fZ2V0X18oc3RydWN0IF9f Ci0gICAgICAgfQotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjM4MwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM4NQotICAqICAgICAg ICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAgICBuYW1lID0gbXB2X2NsaWVudF9uYW1lKHNl bGYuX2N0eCkKLSAgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKG5hbWUpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLUBAIC04MTg2LDkgKzgxODYsOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bmFtZV9fX2dldF9fKHN0cnVj dCBfXwotICAqICAgICBAcHJvcGVydHkKLSAgKi8KLSAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 Ci0tICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRl Yyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDM4MywgX19weXhfTDFf ZXJyb3IpCi0rICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9z X3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDM4NSwgX19w eXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gIF9fcHl4X3RfMyA9 IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X25hbWUpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCAzODMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8z ID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbmFtZSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDM4NSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9H T1RSRUYoX19weXhfdF8zKTsKLSAgIF9fcHl4X3RfNCA9IE5VTEw7Ci0gICBpZiAoQ1lUSE9OX1VO UEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Ci1A QCAtODIwMywxNCArODIwMywxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bmFtZV9fX2dldF9fKHN0cnVjdCBfXwotICAgX19weXhf dF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBf X3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3Rf MiwgX19weXhfdF8zKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzgzLCBfX3B5eF9MMV9lcnJvcikKLSsg IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDM4NSwgX19weXhfTDFfZXJy b3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOwotICAgX19weXhfciA9IF9fcHl4X3RfMTsKLSAgIF9fcHl4X3Rf MSA9IDA7Ci0gICBnb3RvIF9fcHl4X0wwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM3NAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3Ngot ICAqIAotICAqICAgICBAcHJvcGVydHkKLSAgKiAgICAgZGVmIG5hbWUoc2VsZik6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC04MjMyLDcgKzgyMzIsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bmFtZV9fX2dldF9f KHN0cnVjdCBfXwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjozODYKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 Mzg4Ci0gICogCi0gICogICAgIEBwcm9wZXJ0eQotICAqICAgICBkZWYgdGltZShzZWxmKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTgyNjMsNyArODI2Myw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1lX19f Z2V0X18oc3RydWN0IF9fCi0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjM5NAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjM5NgotICAqICAgICAgICAgIiIiCi0gICogICAgICAgICBjZGVmIGludDY0X3QgdGltZQotICAq ICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1A QCAtODI3NCwxMiArODI3NCwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF80dGltZV9fX2dldF9fKHN0cnVjdCBfXwotICAgaWYgKHVu bGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Ci0gICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zf c2VsZi0+X2N0eCAhPSAwKSkpIHsKLSAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlv bkVycm9yKTsKLS0gICAgICBfX1BZWF9FUlIoMCwgMzk0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAg ICBfX1BZWF9FUlIoMCwgMzk2LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgfQotICAgfQotICAgI2Vu ZGlmCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk1Ci0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk3Ci0gICogICAgICAgICBjZGVmIGludDY0 X3QgdGltZQotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTgyOTQsNyArODI5NCw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzR0aW1lX19fZ2V0X18oc3RydWN0IF9fCi0gICAgICAgI2VuZGlmCi0gICAgICAgLyp0cnk6Ki8g ewotIAotLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM5NgotKyAg ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM5OAotICAqICAgICAgICAg YXNzZXJ0IHNlbGYuX2N0eAotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAg ICB0aW1lID0gbXB2X2dldF90aW1lX3VzKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotQEAgLTgzMDQsNyArODMwNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1lX19fZ2V0X18oc3RydWN0IF9fCi0g ICAgICAgICBfX3B5eF92X3RpbWUgPSBtcHZfZ2V0X3RpbWVfdXMoX19weXhfdl9zZWxmLT5fY3R4 KTsKLSAgICAgICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjM5NQotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozOTcKLSAgKiAg ICAgICAgIGNkZWYgaW50NjRfdCB0aW1lCi0gICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0g ICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAt ODMyMyw3ICs4MzIzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfNHRpbWVfX19nZXRfXyhzdHJ1Y3QgX18KLSAgICAgICB9Ci0gICB9 Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk3Ci0rICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk5Ci0gICogICAgICAgICB3aXRoIG5vZ2lsOgot ICAqICAgICAgICAgICAgIHRpbWUgPSBtcHZfZ2V0X3RpbWVfdXMoc2VsZi5fY3R4KQotICAqICAg ICAgICAgcmV0dXJuIHRpbWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTgzMzEs MTMgKzgzMzEsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfNHRpbWVfX19nZXRfXyhzdHJ1Y3QgX18KLSAgKiAgICAgIyBkZWYgc3Vz cGVuZChzZWxmKToKLSAgKi8KLSAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICBfX3B5eF90 XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludDY0X3QoX19weXhfdl90aW1lKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzk3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4 X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRfdChfX3B5eF92X3RpbWUpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzOTksIF9fcHl4X0wxX2Vycm9yKQotICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX3B5eF9yID0gX19weXhfdF8xOwotICAgX19weXhf dF8xID0gMDsKLSAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6Mzg2Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzg4 Ci0gICogCi0gICogICAgIEBwcm9wZXJ0eQotICAqICAgICBkZWYgdGltZShzZWxmKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTgzNTYsNyArODM1Niw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1lX19fZ2V0 X18oc3RydWN0IF9fCi0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQxMgotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo0MTQKLSAgKiAKLSAgKiAgICAgQF9lcnJvcnMKLSAgKiAgICAgZGVmIHJlcXVlc3RfZXZlbnQo c2VsZiwgZXZlbnQsIGVuYWJsZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC04 Mzk5LDExICs4Mzk5LDExIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzFyZXF1ZXN0X2V2ZW50KFB5T2JqZWN0Ci0gICAgICAgICBjYXNl ICAxOgotICAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0 ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2VuYWJsZSkpICE9IDApKSBrd19hcmdzLS07Ci0g ICAgICAgICBlbHNlIHsKLS0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInJl cXVlc3RfZXZlbnQiLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDQxMiwgX19weXhfTDNfZXJy b3IpCi0rICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJyZXF1ZXN0X2V2ZW50 IiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCA0MTQsIF9fcHl4X0wzX2Vycm9yKQotICAgICAg ICAgfQotICAgICAgIH0KLSAgICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7Ci0tICAg ICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMs IF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJyZXF1ZXN0X2V2ZW50Iikg PCAwKSkgX19QWVhfRVJSKDAsIDQxMiwgX19weXhfTDNfZXJyb3IpCi0rICAgICAgICBpZiAodW5s aWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJn bmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJyZXF1ZXN0X2V2ZW50IikgPCAwKSkgX19QWVhf RVJSKDAsIDQxNCwgX19weXhfTDNfZXJyb3IpCi0gICAgICAgfQotICAgICB9IGVsc2UgaWYgKFB5 VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0gMikgewotICAgICAgIGdvdG8gX19weXhfTDVf YXJndHVwbGVfZXJyb3I7Ci1AQCAtODQxNiw3ICs4NDE2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMXJlcXVlc3RfZXZlbnQoUHlP YmplY3QKLSAgIH0KLSAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7Ci0g ICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Ci0tICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxp ZCgicmVxdWVzdF9ldmVudCIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykp OyBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MM19lcnJvcikKLSsgIF9fUHl4X1JhaXNlQXJndHVw bGVJbnZhbGlkKCJyZXF1ZXN0X2V2ZW50IiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5 eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA0MTQsIF9fcHl4X0wzX2Vycm9yKQotICAgX19weXhfTDNf ZXJyb3I6OwotICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4 dC5yZXF1ZXN0X2V2ZW50IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLUBAIC04NDQ0LDcgKzg0 NDQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF9yZXF1ZXN0X2V2ZW50KHN0cnVjdCBfXwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAw OwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJlcXVlc3RfZXZlbnQiLCAwKTsKLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjEKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjMKLSAgKiAgICAgICAgIFdyYXBzOiBtcHZfcmVxdWVz dF9ldmVudAotICAqICAgICAgICAgIiIiCi0gICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC04NDU1LDE5ICs4NDU1LDE5IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X3JlcXVl c3RfZXZlbnQoc3RydWN0IF9fCi0gICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsK LSAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewotICAgICAg IFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOwotLSAgICAgIF9fUFlYX0VSUigw LCA0MjEsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fUFlYX0VSUigwLCA0MjMsIF9fcHl4X0wx X2Vycm9yKQotICAgICB9Ci0gICB9Ci0gICAjZW5kaWYKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0MjIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo0MjQKLSAgKiAgICAgICAgICIiIgotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAq ICAgICAgICAgY2RlZiBpbnQgZW5hYmxlX2kgPSAxIGlmIGVuYWJsZSBlbHNlIDAgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0gICogICAgICAg ICBjZGVmIG1wdl9ldmVudF9pZCBldmVudF9pZCA9IGV2ZW50Ci0gICovCi0tICBfX3B5eF90XzIg PSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9lbmFibGUpOyBpZiAodW5saWtlbHkoX19w eXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA0MjIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhf dF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfZW5hYmxlKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgNDI0LCBfX3B5eF9MMV9lcnJvcikKLSAgIGlm IChfX3B5eF90XzIpIHsKLSAgICAgX19weXhfdF8xID0gMTsKLSAgIH0gZWxzZSB7Ci1AQCAtODQ3 NSwxNyArODQ3NSwxNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF9yZXF1ZXN0X2V2ZW50KHN0cnVjdCBfXwotICAgfQotICAgX19weXhf dl9lbmFibGVfaSA9IF9fcHl4X3RfMTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0MjQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjYKLSAg KiAgICAgICAgIGNkZWYgaW50IGVuYWJsZV9pID0gMSBpZiBlbmFibGUgZWxzZSAwCi0gICogICAg ICAgICBjZGVmIGludCBlcnIKLSAgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lkIGV2ZW50X2lk ID0gZXZlbnQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgd2l0aCBu b2dpbDoKLSAgKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9ldmVudChzZWxmLl9jdHgs IGV2ZW50X2lkLCBlbmFibGVfaSkKLSAgKi8KLS0gIF9fcHl4X3RfMyA9ICgoZW51bSBtcHZfZXZl bnRfaWQpX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2V2ZW50X2lkKF9fcHl4X3ZfZXZlbnQpKTsg aWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDI0LCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fcHl4X3RfMyA9ICgoZW51bSBtcHZfZXZlbnRfaWQpX19QeXhfUHlJbnRf QXNfZW51bV9fbXB2X2V2ZW50X2lkKF9fcHl4X3ZfZXZlbnQpKTsgaWYgKHVubGlrZWx5KFB5RXJy X09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDI2LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fcHl4 X3ZfZXZlbnRfaWQgPSBfX3B5eF90XzM7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NDI1Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDI3Ci0g ICogICAgICAgICBjZGVmIGludCBlcnIKLSAgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lkIGV2 ZW50X2lkID0gZXZlbnQKLSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLUBAIC04NTAwLDcgKzg1MDAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9yZXF1ZXN0X2V2ZW50KHN0cnVjdCBf XwotICAgICAgICNlbmRpZgotICAgICAgIC8qdHJ5OiovIHsKLSAKLS0gICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjYKLSsgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0MjgKLSAgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lkIGV2ZW50 X2lkID0gZXZlbnQKLSAgKiAgICAgICAgIHdpdGggbm9naWw6Ci0gICogICAgICAgICAgICAgZXJy ID0gbXB2X3JlcXVlc3RfZXZlbnQoc2VsZi5fY3R4LCBldmVudF9pZCwgZW5hYmxlX2kpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC04NTEwLDcgKzg1MTAsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9yZXF1ZXN0X2V2 ZW50KHN0cnVjdCBfXwotICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfcmVxdWVzdF9ldmVudChf X3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfZXZlbnRfaWQsIF9fcHl4X3ZfZW5hYmxlX2kpOwot ICAgICAgIH0KLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDI1 Ci0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyNwotICAqICAgICAg ICAgY2RlZiBpbnQgZXJyCi0gICogICAgICAgICBjZGVmIG1wdl9ldmVudF9pZCBldmVudF9pZCA9 IGV2ZW50Ci0gICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci1AQCAtODUyOSw3ICs4NTI5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfcmVxdWVzdF9ldmVudChzdHJ1Y3QgX18KLSAgICAg ICB9Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDI3Ci0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDI5Ci0gICogICAgICAgICB3aXRo IG5vZ2lsOgotICAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2V2ZW50KHNlbGYuX2N0 eCwgZXZlbnRfaWQsIGVuYWJsZV9pKQotICAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtODUzNywxMyArODUzNywxMyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9yZXF1ZXN0X2V2ZW50 KHN0cnVjdCBfXwotICAqICAgICBAX2Vycm9ycwotICAqLwotICAgX19QeXhfWERFQ1JFRihfX3B5 eF9yKTsKLS0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDI3LCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDI5LCBfX3B5eF9MMV9lcnJvcikK LSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotICAgX19weXhfciA9IF9fcHl4X3RfNDsKLSAg IF9fcHl4X3RfNCA9IDA7Ci0gICBnb3RvIF9fcHl4X0wwOwotIAotLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQxMgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjQxNAotICAqIAotICAqICAgICBAX2Vycm9ycwotICAqICAgICBkZWYgcmVxdWVzdF9ldmVu dChzZWxmLCBldmVudCwgZW5hYmxlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAg LTg1NjIsNyArODU2Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0X3JlcXVlc3RfZXZlbnQoc3RydWN0IF9fCi0gICByZXR1cm4gX19w eXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzMAotKy8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzIKLSAgKiAKLSAgKiAgICAgQF9lcnJv cnMKLSAgKiAgICAgZGVmIHNldF9sb2dfbGV2ZWwoc2VsZiwgbG9nbGV2ZWwpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtODU5OSw3ICs4NTk5LDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMnNldF9sb2dfbGV2ZWwo c3RydWN0IF8KLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfbG9nX2xldmVsIiwg MCk7Ci0gICBfX1B5eF9JTkNSRUYoX19weXhfdl9sb2dsZXZlbCk7Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMyCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NDM0Ci0gICogICAgIGRlZiBzZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xldmVsKToK LSAgKiAgICAgICAgICIiIldyYXBzOiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKLSAgKiAg ICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAg LTg2MTAsMTkgKzg2MTAsMTkgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMnNldF9sb2dfbGV2ZWwoc3RydWN0IF8KLSAgIGlmICh1bmxp a2VseSghUHlfT3B0aW1pemVGbGFnKSkgewotICAgICBpZiAodW5saWtlbHkoIShfX3B5eF92X3Nl bGYtPl9jdHggIT0gMCkpKSB7Ci0gICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRpb25F cnJvcik7Ci0tICAgICAgX19QWVhfRVJSKDAsIDQzMiwgX19weXhfTDFfZXJyb3IpCi0rICAgICAg X19QWVhfRVJSKDAsIDQzNCwgX19weXhfTDFfZXJyb3IpCi0gICAgIH0KLSAgIH0KLSAgICNlbmRp ZgotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzMwotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzNQotICAqICAgICAgICAgIiIiV3JhcHM6IG1w dl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyIiIgotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAot ICAqICAgICAgICAgbG9nbGV2ZWwgPSBfc3RyZW5jKGxvZ2xldmVsKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGxvZ2xldmVsX2MgPSBs b2dsZXZlbAotICAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0gICovCi0tICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQzMywgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9H ZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQzNSwgX19weXhfTDFfZXJyb3IpCi0gICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgIF9fcHl4X3RfMyA9IE5VTEw7Ci0gICBpZiAoQ1lU SE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikp KSB7Ci1AQCAtODYzNiwyMyArODYzNiwyMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yc2V0X2xvZ19sZXZlbChzdHJ1Y3QgXwotICAg fQotICAgX19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3Mo X19weXhfdF8yLCBfX3B5eF90XzMsIF9fcHl4X3ZfbG9nbGV2ZWwpIDogX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfbG9nbGV2ZWwpOwotICAgX19QeXhfWERFQ1JF RihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgNDMzLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDQzNSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OwotICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X2xvZ2xldmVsLCBfX3B5eF90XzEpOwotICAg X19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 MzQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzYKLSAgKiAgICAgICAg IGFzc2VydCBzZWxmLl9jdHgKLSAgKiAgICAgICAgIGxvZ2xldmVsID0gX3N0cmVuYyhsb2dsZXZl bCkKLSAgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIGNkZWYgaW50IGVycgotICAq ICAgICAgICAgd2l0aCBub2dpbDoKLSAgKi8KLS0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0 X0FzU3RyaW5nKF9fcHl4X3ZfbG9nbGV2ZWwpOyBpZiAodW5saWtlbHkoKCFfX3B5eF90XzQpICYm IFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDM0LCBfX3B5eF9MMV9lcnJvcikKLSsg IF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfbG9nbGV2ZWwpOyBp ZiAodW5saWtlbHkoKCFfX3B5eF90XzQpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIo MCwgNDM2LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fcHl4X3ZfbG9nbGV2ZWxfYyA9IF9fcHl4X3Rf NDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzYKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzgKLSAgKiAgICAgICAgIGNkZWYgY29uc3Qg Y2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsCi0gICogICAgICAgICBjZGVmIGludCBlcnIKLSAg KiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC04 NjY3LDcgKzg2NjcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8yc2V0X2xvZ19sZXZlbChzdHJ1Y3QgXwotICAgICAgICNlbmRpZgot ICAgICAgIC8qdHJ5OiovIHsKLSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0MzcKLSsgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 MzkKLSAgKiAgICAgICAgIGNkZWYgaW50IGVycgotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAg KiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMoc2VsZi5fY3R4LCBs b2dsZXZlbF9jKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtODY3Nyw3ICs4Njc3 LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMnNldF9sb2dfbGV2ZWwoc3RydWN0IF8KLSAgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2 X3JlcXVlc3RfbG9nX21lc3NhZ2VzKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9sb2dsZXZl bF9jKTsKLSAgICAgICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjQzNgotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzgKLSAg KiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsCi0gICogICAg ICAgICBjZGVmIGludCBlcnIKLSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLUBAIC04Njk2LDcgKzg2OTYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yc2V0X2xvZ19sZXZlbChzdHJ1 Y3QgXwotICAgICAgIH0KLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0MzgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDAKLSAgKiAg ICAgICAgIHdpdGggbm9naWw6Ci0gICogICAgICAgICAgICAgZXJyID0gbXB2X3JlcXVlc3RfbG9n X21lc3NhZ2VzKHNlbGYuX2N0eCwgbG9nbGV2ZWxfYykKLSAgKiAgICAgICAgIHJldHVybiBlcnIg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTg3MDQsMTMgKzg3MDQsMTMgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMnNl dF9sb2dfbGV2ZWwoc3RydWN0IF8KLSAgKiAgICAgQF9lcnJvcnMKLSAgKi8KLSAgIF9fUHl4X1hE RUNSRUYoX19weXhfcik7Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5 eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQzOCwgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92 X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ0MCwgX19weXhf TDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fcHl4X3IgPSBfX3B5 eF90XzE7Ci0gICBfX3B5eF90XzEgPSAwOwotICAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzAKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0MzIKLSAgKiAKLSAgKiAgICAgQF9lcnJvcnMKLSAgKiAgICAgZGVmIHNl dF9sb2dfbGV2ZWwoc2VsZiwgbG9nbGV2ZWwpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtODczMiw3ICs4NzMyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMnNldF9sb2dfbGV2ZWwoc3RydWN0IF8KLSAgIHJldHVy biBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQx Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0MwotICAqIAotICAqICAgICBA X2Vycm9ycwotICAqICAgICBkZWYgbG9hZF9jb25maWcoc2VsZiwgZmlsZW5hbWUpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtODc2OSw3ICs4NzY5LDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNGxvYWRfY29uZmln KHN0cnVjdCBfX3AKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJsb2FkX2NvbmZpZyIs IDApOwotICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfZmlsZW5hbWUpOwotIAotLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0MwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ0NQotICAqICAgICBkZWYgbG9hZF9jb25maWcoc2VsZiwgZmlsZW5hbWUpOgot ICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9sb2FkX2NvbmZpZ19maWxlIiIiCi0gICogICAgICAg ICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC04Nzgw LDE5ICs4NzgwLDE5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzRsb2FkX2NvbmZpZyhzdHJ1Y3QgX19wCi0gICBpZiAodW5saWtlbHko IVB5X09wdGltaXplRmxhZykpIHsKLSAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5f Y3R4ICE9IDApKSkgewotICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3Ip OwotLSAgICAgIF9fUFlYX0VSUigwLCA0NDMsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fUFlY X0VSUigwLCA0NDUsIF9fcHl4X0wxX2Vycm9yKQotICAgICB9Ci0gICB9Ci0gICAjZW5kaWYKLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDQKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDYKLSAgKiAgICAgICAgICIiIldyYXBzOiBtcHZfbG9h ZF9jb25maWdfZmlsZSIiIgotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqICAgICAg ICAgZmlsZW5hbWUgPSBfc3RyZW5jKGZpbGVuYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0gICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIF9maWxlbmFtZSA9IGZpbGVuYW1lCi0g ICogICAgICAgICBjZGVmIGludCBlcnIKLSAgKi8KLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgNDQ0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgNDQ2LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzIpOwotICAgX19weXhfdF8zID0gTlVMTDsKLSAgIGlmIChDWVRIT05fVU5QQUNL X01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLUBAIC04 ODA2LDIzICs4ODA2LDIzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzRsb2FkX2NvbmZpZyhzdHJ1Y3QgX19wCi0gICB9Ci0gICBfX3B5 eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIs IF9fcHl4X3RfMywgX19weXhfdl9maWxlbmFtZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfMiwgX19weXhfdl9maWxlbmFtZSk7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Myk7IF9fcHl4X3RfMyA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA0NDQsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgNDQ2LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0gICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3ZfZmlsZW5hbWUsIF9fcHl4X3RfMSk7Ci0gICBfX3B5eF90XzEg PSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0NQotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0NwotICAqICAgICAgICAgYXNzZXJ0IHNl bGYuX2N0eAotICAqICAgICAgICAgZmlsZW5hbWUgPSBfc3RyZW5jKGZpbGVuYW1lKQotICAqICAg ICAgICAgY2RlZiBjb25zdCBjaGFyKiBfZmlsZW5hbWUgPSBmaWxlbmFtZSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBjZGVmIGludCBlcnIKLSAgKiAgICAgICAgIHdp dGggbm9naWw6Ci0gICovCi0tICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhf X3B5eF92X2ZpbGVuYW1lKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF80KSAmJiBQeUVycl9PY2N1 cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ0NSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzQg PSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X2ZpbGVuYW1lKTsgaWYgKHVubGlrZWx5 KCghX19weXhfdF80KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ0NywgX19w eXhfTDFfZXJyb3IpCi0gICBfX3B5eF92X19maWxlbmFtZSA9IF9fcHl4X3RfNDsKLSAKLS0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDcKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0NDkKLSAgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogX2ZpbGVu YW1lID0gZmlsZW5hbWUKLSAgKiAgICAgICAgIGNkZWYgaW50IGVycgotICAqICAgICAgICAgd2l0 aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTg4MzcsNyArODgzNyw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzRsb2FkX2NvbmZpZyhzdHJ1Y3QgX19wCi0gICAgICAgI2VuZGlmCi0gICAgICAgLyp0cnk6 Ki8gewotIAotLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0OAot KyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1MAotICAqICAgICAg ICAgY2RlZiBpbnQgZXJyCi0gICogICAgICAgICB3aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAg IGVyciA9IG1wdl9sb2FkX2NvbmZpZ19maWxlKHNlbGYuX2N0eCwgX2ZpbGVuYW1lKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtODg0Nyw3ICs4ODQ3LDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNGxvYWRfY29uZmln KHN0cnVjdCBfX3AKLSAgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X2xvYWRfY29uZmlnX2ZpbGUo X19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X19maWxlbmFtZSk7Ci0gICAgICAgfQotIAotLSAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDcKLSsgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQ5Ci0gICogICAgICAgICBjZGVmIGNvbnN0IGNo YXIqIF9maWxlbmFtZSA9IGZpbGVuYW1lCi0gICogICAgICAgICBjZGVmIGludCBlcnIKLSAgKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC04ODY2 LDcgKzg4NjYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF80bG9hZF9jb25maWcoc3RydWN0IF9fcAotICAgICAgIH0KLSAgIH0KLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDkKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTEKLSAgKiAgICAgICAgIHdpdGggbm9naWw6Ci0gICog ICAgICAgICAgICAgZXJyID0gbXB2X2xvYWRfY29uZmlnX2ZpbGUoc2VsZi5fY3R4LCBfZmlsZW5h bWUpCi0gICogICAgICAgICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LUBAIC04ODc0LDEzICs4ODc0LDEzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRsb2FkX2NvbmZpZyhzdHJ1Y3QgX19wCi0gICogICAg IGRlZiBfZm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6Ci0gICovCi0gICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOwotLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0NDksIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0NTEsIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX3B5eF9yID0gX19weXhfdF8xOwot ICAgX19weXhfdF8xID0gMDsKLSAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NDQxCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NDQzCi0gICogCi0gICogICAgIEBfZXJyb3JzCi0gICogICAgIGRlZiBsb2FkX2NvbmZp ZyhzZWxmLCBmaWxlbmFtZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC04OTAy LDcgKzg5MDIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF80bG9hZF9jb25maWcoc3RydWN0IF9fcAotICAgcmV0dXJuIF9fcHl4X3I7 Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTEKLSsvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUzCi0gICogICAgICAgICByZXR1cm4gZXJyCi0g ICogCi0gICogICAgIGRlZiBfZm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLUBAIC04OTM1LDcgKzg5MzUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9O X1VOVQotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9mb3JtYXRfZm9yIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NDUyCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDU0Ci0g ICogCi0gICogICAgIGRlZiBfZm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6Ci0gICogICAgICAgICBp ZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotQEAgLTg5NDYsNyArODk0Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0X2ZvcihDWVRIT05fVU5VCi0gICBf X3B5eF90XzIgPSAoX19weXhfdF8xICE9IDApOwotICAgaWYgKF9fcHl4X3RfMikgewotIAotLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUzCi0rICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTUKLSAgKiAgICAgZGVmIF9mb3JtYXRfZm9yKHNlbGYs IHZhbHVlKToKLSAgKiAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgot ICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX1NUUklORyAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci1AQCAtODk1NCwxMyArODk1NCwxMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9O X1VOVQotICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0ZMQUcKLSAgKi8KLSAgICAg X19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfU1RSSU5HKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzMpKSBfX1BZWF9FUlIoMCwgNDUzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8z ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfU1RSSU5HKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDU1LCBfX3B5eF9MMV9lcnJv cikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0gICAgIF9fcHl4X3IgPSBfX3B5eF90 XzM7Ci0gICAgIF9fcHl4X3RfMyA9IDA7Ci0gICAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTIKLSsgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ1NAotICAqIAotICAqICAgICBkZWYgX2Zvcm1hdF9mb3Ioc2Vs ZiwgdmFsdWUpOgotICAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC04OTY5LDcgKzg5NjksNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zv cm1hdF9mb3IoQ1lUSE9OX1VOVQotICAqLwotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQ1NAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQ1NgotICAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6Ci0gICog ICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfU1RSSU5HCi0gICogICAgICAgICBlbGlmIGlz aW5zdGFuY2UodmFsdWUsIGJvb2wpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAt ODk3OCwxMiArODk3OCwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVQotICAqLwotICAgX19w eXhfdF8zID0gKChQeU9iamVjdCopJlB5Qm9vbF9UeXBlKTsKLSAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzMpOwotLSAgX19weXhfdF8yID0gUHlPYmplY3RfSXNJbnN0YW5jZShfX3B5eF92X3ZhbHVl LCBfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoX19weXhfdF8yID09ICgoaW50KS0xKSkpIF9fUFlY X0VSUigwLCA0NTQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8yID0gUHlPYmplY3RfSXNJ bnN0YW5jZShfX3B5eF92X3ZhbHVlLCBfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoX19weXhfdF8y ID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigwLCA0NTYsIF9fcHl4X0wxX2Vycm9yKQotICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0gICBfX3B5eF90XzEgPSAoX19w eXhfdF8yICE9IDApOwotICAgaWYgKF9fcHl4X3RfMSkgewotIAotLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NDU1Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0NTcKLSAgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJTkcKLSAg KiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCk6Ci0gICogICAgICAgICAgICAg cmV0dXJuIE1QVl9GT1JNQVRfRkxBRyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAt ODk5MSwxMyArODk5MSwxMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVQotICAqICAgICAgICAg ICAgIHJldHVybiBNUFZfRk9STUFUX0lOVDY0Ci0gICovCi0gICAgIF9fUHl4X1hERUNSRUYoX19w eXhfcik7Ci0tICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1h dChNUFZfRk9STUFUX0ZMQUcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigw LCA0NTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9t X2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9GTEFHKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMCwgNDU3LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMyk7Ci0gICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7Ci0gICAgIF9fcHl4X3RfMyA9 IDA7Ci0gICAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0NTQKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1 NgotICAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6Ci0gICogICAg ICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfU1RSSU5HCi0gICogICAgICAgICBlbGlmIGlzaW5z dGFuY2UodmFsdWUsIGJvb2wpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtOTAw Niw3ICs5MDA2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfNl9mb3JtYXRfZm9yKENZVEhPTl9VTlUKLSAgKi8KLSAgIH0KLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTYKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NTgKLSAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1 ZSwgYm9vbCk6Ci0gICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRkxBRwotICAqICAg ICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci1AQCAtOTAxNyw3ICs5MDE3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNl9mb3JtYXRfZm9yKENZVEhPTl9VTlUKLSAg IF9fcHl4X3RfMiA9IChfX3B5eF90XzEgIT0gMCk7Ci0gICBpZiAoX19weXhfdF8yKSB7Ci0gCi0t ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTcKLSsgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OQotICAqICAgICAgICAgICAgIHJldHVybiBNUFZf Rk9STUFUX0ZMQUcKLSAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLSAg KiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2NCAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci1AQCAtOTAyNSwxMyArOTAyNSwxMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VO VQotICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQotICAqLwotICAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9t X2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9JTlQ2NCk7IGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDAsIDQ1NywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMyA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX0lOVDY0KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDU5LCBfX3B5eF9MMV9lcnJvcikK LSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0gICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7 Ci0gICAgIF9fcHl4X3RfMyA9IDA7Ci0gICAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTYKLSsgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQ1OAotICAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBi b29sKToKLSAgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9GTEFHCi0gICogICAgICAg ICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLUBAIC05MDQwLDcgKzkwNDAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVQotICAqLwot ICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OAotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2MAotICAqICAgICAgICAgZWxpZiBpc2lu c3RhbmNlKHZhbHVlLCBpbnQpOgotICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0lO VDY0Ci0gICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTkwNTEsNyArOTA1MSw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0X2ZvcihD WVRIT05fVU5VCi0gICBfX3B5eF90XzEgPSAoX19weXhfdF8yICE9IDApOwotICAgaWYgKF9fcHl4 X3RfMSkgewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDU5Ci0r ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjEKLSAgKiAgICAgICAgICAg ICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2NAotICAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZh bHVlLCBmbG9hdCk6Ci0gICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRE9VQkxFICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC05MDU5LDEzICs5MDU5LDEzIEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9y bWF0X2ZvcihDWVRIT05fVU5VCi0gICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9E RV9BUlJBWQotICAqLwotICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICBfX3B5eF90 XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9ET1VCTEUp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NTksIF9fcHl4X0wxX2Vy cm9yKQotKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQo TVBWX0ZPUk1BVF9ET1VCTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigw LCA0NjEsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSAg ICAgX19weXhfciA9IF9fcHl4X3RfMzsKLSAgICAgX19weXhfdF8zID0gMDsKLSAgICAgZ290byBf X3B5eF9MMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OAot KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYwCi0gICogICAgICAgICBl bGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0gICogICAgICAgICAgICAgcmV0dXJuIE1QVl9G T1JNQVRfSU5UNjQKLSAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtOTA3NCw3ICs5MDc0LDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNl9mb3Jt YXRfZm9yKENZVEhPTl9VTlUKLSAgKi8KLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0NjAKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 NjIKLSAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgotICAqICAgICAg ICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQotICAqICAgICAgICAgZWxpZiBpc2luc3Rh bmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTkwOTUsNyArOTA5NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0X2ZvcihDWVRIT05fVU5VCi0gICBfX3B5eF90 XzIgPSAoX19weXhfdF8xICE9IDApOwotICAgaWYgKF9fcHl4X3RfMikgewotIAotLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYxCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0NjMKLSAgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9E T1VCTEUKLSAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBsaXN0KSk6 Ci0gICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9BUlJBWSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtOTEwMywxMyArOTEwMywxMyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3Io Q1lUSE9OX1VOVQotICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfTUFQCi0g ICovCi0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICAgIF9fcHl4X3RfMyA9IF9fUHl4 X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX05PREVfQVJSQVkpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NjEsIF9fcHl4X0wxX2Vycm9yKQot KyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZP Uk1BVF9OT0RFX0FSUkFZKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwg NDYzLCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0gICAg IF9fcHl4X3IgPSBfX3B5eF90XzM7Ci0gICAgIF9fcHl4X3RfMyA9IDA7Ci0gICAgIGdvdG8gX19w eXhfTDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjAKLSsg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2MgotICAqICAgICAgICAgZWxp ZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0gICogICAgICAgICAgICAgcmV0dXJuIE1QVl9G T1JNQVRfRE9VQkxFCi0gICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0dXBsZSwg bGlzdCkpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtOTExOCw3ICs5MTE4LDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNl9mb3JtYXRfZm9yKENZVEhPTl9VTlUKLSAgKi8KLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0NjQKLSAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBs aXN0KSk6Ci0gICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9BUlJBWQotICAq ICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotQEAgLTkxMjksNyArOTEyOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0X2ZvcihDWVRIT05fVU5V Ci0gICBfX3B5eF90XzEgPSAoX19weXhfdF8yICE9IDApOwotICAgaWYgKF9fcHl4X3RfMSkgewot IAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYzCi0rICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjUKLSAgKiAgICAgICAgICAgICByZXR1cm4g TVBWX0ZPUk1BVF9OT0RFX0FSUkFZCi0gICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUs IGRpY3QpOgotICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfTUFQICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC05MTM3LDEzICs5MTM3LDEzIEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0 X2ZvcihDWVRIT05fVU5VCi0gICogCi0gICovCi0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 Ci0tICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZf Rk9STUFUX05PREVfTUFQKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwg NDYzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfTk9ERV9NQVApOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCA0NjUsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8zKTsKLSAgICAgX19weXhfciA9IF9fcHl4X3RfMzsKLSAgICAgX19weXhfdF8z ID0gMDsKLSAgICAgZ290byBfX3B5eF9MMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ2MgotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDY0Ci0gICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0dXBsZSwgbGlzdCkpOgot ICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfQVJSQVkKLSAgKiAgICAgICAg IGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLUBAIC05MTUyLDcgKzkxNTIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVQotICAqLwot ICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2NAotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2NgotICAqICAgICAgICAgZWxpZiBpc2lu c3RhbmNlKHZhbHVlLCBkaWN0KToKLSAgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9O T0RFX01BUAotICAqICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ORSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci1AQCAtOTE2MCwxMyArOTE2MCwxMyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lU SE9OX1VOVQotICAqICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbGlzdChzZWxm LCB2YWx1ZXMpOgotICAqLwotICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gIF9fcHl4X3Rf MyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX05PTkUpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NjQsIF9fcHl4X0wxX2Vycm9y KQotKyAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9G T1JNQVRfTk9ORSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ2Niwg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSAgIF9fcHl4X3Ig PSBfX3B5eF90XzM7Ci0gICBfX3B5eF90XzMgPSAwOwotICAgZ290byBfX3B5eF9MMDsKLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTEKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NTMKLSAgKiAgICAgICAgIHJldHVybiBlcnIKLSAgKiAKLSAg KiAgICAgZGVmIF9mb3JtYXRfZm9yKHNlbGYsIHZhbHVlKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotQEAgLTkxODUsNyArOTE4NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0X2ZvcihDWVRIT05fVU5VCi0g ICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjQ2NgotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjgKLSAgKiAgICAg ICAgIHJldHVybiBNUFZfRk9STUFUX05PTkUKLSAgKiAKLSAgKiAgICAgY2RlZiBtcHZfbm9kZV9s aXN0KiBfcHJlcF9ub2RlX2xpc3Qoc2VsZiwgdmFsdWVzKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotQEAgLTkyMTYsNyArOTIxNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGVfbGlz dCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9sCi0g ICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X3ByZXBfbm9kZV9saXN0IiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NDY5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDcxCi0gICog ICAgICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKLSAgKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBm b3JtYXQKLSAgKiAgICAgICAgIGNkZWYgbXB2X25vZGVfbGlzdCogbm9kZV9saXN0ID0gPG1wdl9u b2RlX2xpc3QqPm1hbGxvYyhzaXplb2YobXB2X25vZGVfbGlzdCkpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLUBAIC05MjI1LDE3ICs5MjI1LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25v ZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9k ZV9sCi0gICovCi0gICBfX3B5eF92X25vZGVfbGlzdCA9ICgoc3RydWN0IG1wdl9ub2RlX2xpc3Qg KiltYWxsb2MoKHNpemVvZihzdHJ1Y3QgbXB2X25vZGVfbGlzdCkpKSk7Ci0gCi0tICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDcwCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDcyCi0gICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0Ci0gICog ICAgICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIG5vZGVfbGlzdCA9IDxtcHZfbm9kZV9saXN0Kj5t YWxsb2Moc2l6ZW9mKG1wdl9ub2RlX2xpc3QpKQotICAqICAgICAgICAgbm9kZV9saXN0Lm51bSA9 IGxlbih2YWx1ZXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIG5v ZGVfbGlzdC52YWx1ZXMgPSBOVUxMCi0gICogICAgICAgICBub2RlX2xpc3Qua2V5cyA9IE5VTEwK LSAgKi8KLS0gIF9fcHl4X3RfMSA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X3ZhbHVlcyk7IGlm ICh1bmxpa2VseShfX3B5eF90XzEgPT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VSUigwLCA0 NzAsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gUHlPYmplY3RfTGVuZ3RoKF9fcHl4 X3ZfdmFsdWVzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMSA9PSAoKFB5X3NzaXplX3QpLTEpKSkg X19QWVhfRVJSKDAsIDQ3MiwgX19weXhfTDFfZXJyb3IpCi0gICBfX3B5eF92X25vZGVfbGlzdC0+ bnVtID0gX19weXhfdF8xOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQ3MQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3MwotICAqICAgICAg ICAgY2RlZiBtcHZfbm9kZV9saXN0KiBub2RlX2xpc3QgPSA8bXB2X25vZGVfbGlzdCo+bWFsbG9j KHNpemVvZihtcHZfbm9kZV9saXN0KSkKLSAgKiAgICAgICAgIG5vZGVfbGlzdC5udW0gPSBsZW4o dmFsdWVzKQotICAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotQEAgLTkyNDQsNyArOTI0NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2 X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBf bm9kZV9sCi0gICovCi0gICBfX3B5eF92X25vZGVfbGlzdC0+dmFsdWVzID0gTlVMTDsKLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzIKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NzQKLSAgKiAgICAgICAgIG5vZGVfbGlzdC5udW0gPSBsZW4o dmFsdWVzKQotICAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKLSAgKiAgICAgICAg IG5vZGVfbGlzdC5rZXlzID0gTlVMTCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAt OTI1Myw3ICs5MjUzLDcgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX2wKLSAgKi8KLSAgIF9fcHl4 X3Zfbm9kZV9saXN0LT5rZXlzID0gTlVMTDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0NzMKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzUK LSAgKiAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSBOVUxMCi0gICogICAgICAgICBub2RlX2xp c3Qua2V5cyA9IE5VTEwKLSAgKiAgICAgICAgIGlmIG5vZGVfbGlzdC5udW06ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLUBAIC05MjYzLDcgKzkyNjMsNyBAQCBzdGF0aWMgc3RydWN0IG1w dl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVw X25vZGVfbAotICAgX19weXhfdF8yID0gKF9fcHl4X3Zfbm9kZV9saXN0LT5udW0gIT0gMCk7Ci0g ICBpZiAoX19weXhfdF8yKSB7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0NzQKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3NgotICAq ICAgICAgICAgbm9kZV9saXN0LmtleXMgPSBOVUxMCi0gICogICAgICAgICBpZiBub2RlX2xpc3Qu bnVtOgotICAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxv Yyhub2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotQEAgLTkyNzIsNyArOTI3Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGVfbGlz dCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9sCi0g ICovCi0gICAgIF9fcHl4X3Zfbm9kZV9saXN0LT52YWx1ZXMgPSAoKHN0cnVjdCBtcHZfbm9kZSAq KW1hbGxvYygoX19weXhfdl9ub2RlX2xpc3QtPm51bSAqIChzaXplb2Yoc3RydWN0IG1wdl9ub2Rl KSkpKSk7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzMKLSsg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3NQotICAqICAgICAgICAgbm9k ZV9saXN0LnZhbHVlcyA9IE5VTEwKLSAgKiAgICAgICAgIG5vZGVfbGlzdC5rZXlzID0gTlVMTAot ICAqICAgICAgICAgaWYgbm9kZV9saXN0Lm51bTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotQEAgLTkyODEsNyArOTI4MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9sCi0gICovCi0g ICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc1Ci0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc3Ci0gICogICAgICAgICBpZiBub2RlX2xp c3QubnVtOgotICAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUqPm1h bGxvYyhub2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkKLSAgKiAgICAgICAgIGZvciBp LCB2YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotQEAgLTkyOTQsMjYgKzkyOTQsMjYgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpf X3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX2wKLSAgICAg X19weXhfdF80ID0gX19weXhfdl92YWx1ZXM7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOyBfX3B5 eF90XzEgPSAwOwotICAgICBfX3B5eF90XzUgPSBOVUxMOwotICAgfSBlbHNlIHsKLS0gICAgX19w eXhfdF8xID0gLTE7IF9fcHl4X3RfNCA9IFB5T2JqZWN0X0dldEl0ZXIoX19weXhfdl92YWx1ZXMp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vy cm9yKQotKyAgICBfX3B5eF90XzEgPSAtMTsgX19weXhfdF80ID0gUHlPYmplY3RfR2V0SXRlcihf X3B5eF92X3ZhbHVlcyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDQ3 NywgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAgICBf X3B5eF90XzUgPSBQeV9UWVBFKF9fcHl4X3RfNCktPnRwX2l0ZXJuZXh0OyBpZiAodW5saWtlbHko IV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5 eF90XzUgPSBQeV9UWVBFKF9fcHl4X3RfNCktPnRwX2l0ZXJuZXh0OyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNSkpIF9fUFlYX0VSUigwLCA0NzcsIF9fcHl4X0wxX2Vycm9yKQotICAgfQotICAgZm9y ICg7OykgewotICAgICBpZiAobGlrZWx5KCFfX3B5eF90XzUpKSB7Ci0gICAgICAgaWYgKGxpa2Vs eShQeUxpc3RfQ2hlY2tFeGFjdChfX3B5eF90XzQpKSkgewotICAgICAgICAgaWYgKF9fcHl4X3Rf MSA+PSBQeUxpc3RfR0VUX1NJWkUoX19weXhfdF80KSkgYnJlYWs7Ci0gICAgICAgICAjaWYgQ1lU SE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMKLS0g ICAgICAgIF9fcHl4X3RfNiA9IFB5TGlzdF9HRVRfSVRFTShfX3B5eF90XzQsIF9fcHl4X3RfMSk7 IF9fUHl4X0lOQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzErKzsgaWYgKHVubGlrZWx5KDAgPCAw KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCi0rICAgICAgICBfX3B5eF90XzYg PSBQeUxpc3RfR0VUX0lURU0oX19weXhfdF80LCBfX3B5eF90XzEpOyBfX1B5eF9JTkNSRUYoX19w eXhfdF82KTsgX19weXhfdF8xKys7IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA0 NzcsIF9fcHl4X0wxX2Vycm9yKQotICAgICAgICAgI2Vsc2UKLS0gICAgICAgIF9fcHl4X3RfNiA9 IFB5U2VxdWVuY2VfSVRFTShfX3B5eF90XzQsIF9fcHl4X3RfMSk7IF9fcHl4X3RfMSsrOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQot KyAgICAgICAgX19weXhfdF82ID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfNCwgX19weXhfdF8x KTsgX19weXhfdF8xKys7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ3 NywgX19weXhfTDFfZXJyb3IpCi0gICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSAg ICAgICAgICNlbmRpZgotICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICBpZiAoX19weXhfdF8xID49 IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdF80KSkgYnJlYWs7Ci0gICAgICAgICAjaWYgQ1lUSE9O X0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMKLS0gICAg ICAgIF9fcHl4X3RfNiA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfdF80LCBfX3B5eF90XzEpOyBf X1B5eF9JTkNSRUYoX19weXhfdF82KTsgX19weXhfdF8xKys7IGlmICh1bmxpa2VseSgwIDwgMCkp IF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgICAgX19weXhfdF82ID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF90XzQsIF9fcHl4X3RfMSk7IF9fUHl4X0lOQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzErKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAsIDQ3 NywgX19weXhfTDFfZXJyb3IpCi0gICAgICAgICAjZWxzZQotLSAgICAgICAgX19weXhfdF82ID0g UHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfNCwgX19weXhfdF8xKTsgX19weXhfdF8xKys7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCi0r ICAgICAgICBfX3B5eF90XzYgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF80LCBfX3B5eF90XzEp OyBfX3B5eF90XzErKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDc3 LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotICAg ICAgICAgI2VuZGlmCi0gICAgICAgfQotQEAgLTkzMjMsNyArOTMyMyw3IEBAIHN0YXRpYyBzdHJ1 Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf X3ByZXBfbm9kZV9sCi0gICAgICAgICBQeU9iamVjdCogZXhjX3R5cGUgPSBQeUVycl9PY2N1cnJl ZCgpOwotICAgICAgICAgaWYgKGV4Y190eXBlKSB7Ci0gICAgICAgICAgIGlmIChsaWtlbHkoX19Q eXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGV4Y190eXBlLCBQeUV4Y19TdG9wSXRlcmF0 aW9uKSkpIFB5RXJyX0NsZWFyKCk7Ci0tICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAsIDQ3NSwg X19weXhfTDFfZXJyb3IpCi0rICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAsIDQ3NywgX19weXhf TDFfZXJyb3IpCi0gICAgICAgICB9Ci0gICAgICAgICBicmVhazsKLSAgICAgICB9Ci1AQCAtOTMz MywyMCArOTMzMywyMCBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25vZGVfbAotICAgICBfX3B5eF90XzYg PSAwOwotICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKLSAgICAgX19QeXhfWERFQ1JFRl9T RVQoX19weXhfdl9pLCBfX3B5eF90XzMpOwotLSAgICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9B ZGRPYmpDKF9fcHl4X3RfMywgX19weXhfaW50XzEsIDEsIDAsIDApOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90 XzYgPSBfX1B5eF9QeUludF9BZGRPYmpDKF9fcHl4X3RfMywgX19weXhfaW50XzEsIDEsIDAsIDAp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzcsIF9fcHl4X0wxX2Vy cm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSAgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMyk7Ci0gICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNjsKLSAgICAgX19weXhfdF82ID0g MDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3NgotKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc4Ci0gICogICAgICAgICAgICAgbm9k ZV9saXN0LnZhbHVlcyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2Yo bXB2X25vZGUpKQotICAqICAgICAgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMp OgotICAqICAgICAgICAgICAgIGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAgICBub2RlID0gc2VsZi5fcHJl cF9uYXRpdmVfdmFsdWUodmFsdWUsIGZvcm1hdCkKLSAgKiAgICAgICAgICAgICBub2RlX2xpc3Qu dmFsdWVzW2ldID0gbm9kZQotICAqLwotLSAgICBfX3B5eF90XzcgPSBfX1B5eF9QeU9iamVjdF9H ZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0X2Zv cik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ3NiwgX19weXhfTDFf ZXJyb3IpCi0rICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9i amVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19mb3JtYXRfZm9yKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDc4LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0gICAgIF9fcHl4X3RfOCA9IE5VTEw7Ci0gICAgIGlmIChD WVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNykp KSB7Ci1AQCAtOTM2MCwzNiArOTM2MCwzNiBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlX2xpc3Qg Kl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25vZGVfbAotICAg ICB9Ci0gICAgIF9fcHl4X3RfNiA9IChfX3B5eF90XzgpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfNywgX19weXhfdF84LCBfX3B5eF92X3ZhbHVlKSA6IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoX19weXhfdF83LCBfX3B5eF92X3ZhbHVlKTsKLSAgICAgX19QeXhfWERFQ1JF RihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NikpIF9fUFlYX0VSUigwLCA0NzYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBpZiAodW5saWtlbHko IV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzgsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF82KTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4 X3RfNyA9IDA7Ci0tICAgIF9fcHl4X3RfOSA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50 X0FzX2VudW1fX21wdl9mb3JtYXQoX19weXhfdF82KSk7IGlmICh1bmxpa2VseShQeUVycl9PY2N1 cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ3NiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3Rf OSA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9mb3JtYXQoX19w eXhfdF82KSk7IGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ3 OCwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOwotICAgICBfX3B5eF92X2Zvcm1hdCA9IF9fcHl4X3RfOTsKLSAKLS0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3NwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDc5Ci0gICogICAgICAgICBmb3IgaSwgdmFsdWUgaW4gZW51bWVyYXRl KHZhbHVlcyk6Ci0gICogICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1 ZSkKLSAgKiAgICAgICAgICAgICBub2RlID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUodmFsdWUs IGZvcm1hdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgICAgIG5v ZGVfbGlzdC52YWx1ZXNbaV0gPSBub2RlCi0gICogICAgICAgICByZXR1cm4gbm9kZV9saXN0Ci0g ICovCi0tICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChf X3B5eF92X2Zvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ3 NywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51 bV9fbXB2X2Zvcm1hdChfX3B5eF92X2Zvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDQ3OSwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOwotICAgICBfX3B5eF92X25vZGUgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+ X3ByZXBfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92YWx1ZSwgX19weXhfdF82 KTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzgKLSsgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjQ4MAotICAqICAgICAgICAgICAgIGZvcm1hdCA9IHNlbGYu X2Zvcm1hdF9mb3IodmFsdWUpCi0gICogICAgICAgICAgICAgbm9kZSA9IHNlbGYuX3ByZXBfbmF0 aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCi0gICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVl c1tpXSA9IG5vZGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgcmV0 dXJuIG5vZGVfbGlzdAotICAqIAotICAqLwotLSAgICBfX3B5eF90XzEwID0gX19QeXhfUHlJbmRl eF9Bc1NzaXplX3QoX19weXhfdl9pKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzEwID09IChQeV9z c2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ3OCwgX19weXhf TDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5 eF92X2kpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMTAgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5 RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDgwLCBfX3B5eF9MMV9lcnJvcikKLSAgICAg KF9fcHl4X3Zfbm9kZV9saXN0LT52YWx1ZXNbX19weXhfdF8xMF0pID0gX19weXhfdl9ub2RlOwot IAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc1Ci0rICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzcKLSAgKiAgICAgICAgIGlmIG5vZGVfbGlz dC5udW06Ci0gICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IDxtcHZfbm9kZSo+bWFs bG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2X25vZGUpKQotICAqICAgICAgICAgZm9yIGks IHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtOTQwMCw3ICs5NDAwLDcgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX2wKLSAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NDc5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDgxCi0gICog ICAgICAgICAgICAgbm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQp Ci0gICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVlc1tpXSA9IG5vZGUKLSAgKiAgICAgICAg IHJldHVybiBub2RlX2xpc3QgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTk0MTAs NyArOTQxMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9sCi0gICBfX3B5eF9yID0gX19weXhf dl9ub2RlX2xpc3Q7Ci0gICBnb3RvIF9fcHl4X0wwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQ2NgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQ2OAotICAqICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ORQotICAqIAotICAqICAgICBj ZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbGlzdChzZWxmLCB2YWx1ZXMpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtOTQzNCw3ICs5NDM0LDcgQEAgc3RhdGljIHN0cnVj dCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9f cHJlcF9ub2RlX2wKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NDgxCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQ4MwotICAqICAgICAgICAgcmV0dXJuIG5vZGVfbGlzdAotICAqIAotICAqICAgICBjZGVmIG1w dl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbWFwKHNlbGYsIG1hcCk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLUBAIC05NDY2LDE0ICs5NDY2LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25v ZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9k ZV9tCi0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX3ByZXBfbm9kZV9tYXAiLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0ODQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODYK LSAgKiAgICAgICAgIGNkZWYgY2hhciogY2tleQotICAqICAgICAgICAgY2RlZiBtcHZfbm9kZV9s aXN0KiBsaXN0Ci0gICogICAgICAgICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QobWFwLnZh bHVlcygpKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBrZXlzID0g bWFwLmtleXMoKQotICAqICAgICAgICAgaWYgbm90IGxlbihrZXlzKToKLSAgKi8KLS0gIF9fcHl4 X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9tYXAsIF9fcHl4X25fc192 YWx1ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0ODQsIF9fcHl4 X0wxX2Vycm9yKQotKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5 eF92X21hcCwgX19weXhfbl9zX3ZhbHVlcyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDQ4NiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKLSAgIF9fcHl4X3RfMyA9IE5VTEw7Ci0gICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotQEAgLTk0ODcsMjAgKzk0ODcs MjAgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX20KLSAgIH0KLSAgIF9fcHl4X3RfMSA9IChfX3B5 eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykg OiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKLSAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDQ4NCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCA0ODYsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsK LSAgIF9fcHl4X3ZfbGlzdCA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fcHJlcF9ub2Rl X2xpc3QoX19weXhfdl9zZWxmLCBfX3B5eF90XzEpOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDg1Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg3Ci0gICogICAg ICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIGxpc3QKLSAgKiAgICAgICAgIGxpc3QgPSBzZWxmLl9w cmVwX25vZGVfbGlzdChtYXAudmFsdWVzKCkpCi0gICogICAgICAgICBrZXlzID0gbWFwLmtleXMo KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBpZiBub3QgbGVuKGtl eXMpOgotICAqICAgICAgICAgICAgIHJldHVybiBsaXN0Ci0gICovCi0tICBfX3B5eF90XzIgPSBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfbWFwLCBfX3B5eF9uX3Nfa2V5cyk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQ4NSwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfbWFwLCBf X3B5eF9uX3Nfa2V5cyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQ4 NywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgIF9fcHl4 X3RfMyA9IE5VTEw7Ci0gICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotQEAgLTk1MTQsMjQgKzk1MTQsMjQgQEAgc3RhdGlj IHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF9fcHJlcF9ub2RlX20KLSAgIH0KLSAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19Q eXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9i amVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsg X19weXhfdF8zID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDQ4NSwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA0ODcsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSAgIF9fcHl4X3Zf a2V5cyA9IF9fcHl4X3RfMTsKLSAgIF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NDg2Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NDg4Ci0gICogICAgICAgICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QobWFwLnZh bHVlcygpKQotICAqICAgICAgICAga2V5cyA9IG1hcC5rZXlzKCkKLSAgKiAgICAgICAgIGlmIG5v dCBsZW4oa2V5cyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAg ICByZXR1cm4gbGlzdAotICAqICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxsb2MobGlz dC5udW0pCi0gICovCi0tICBfX3B5eF90XzQgPSBQeU9iamVjdF9MZW5ndGgoX19weXhfdl9rZXlz KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJS KDAsIDQ4NiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzQgPSBQeU9iamVjdF9MZW5ndGgo X19weXhfdl9rZXlzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA9PSAoKFB5X3NzaXplX3QpLTEp KSkgX19QWVhfRVJSKDAsIDQ4OCwgX19weXhfTDFfZXJyb3IpCi0gICBfX3B5eF90XzUgPSAoKCEo X19weXhfdF80ICE9IDApKSAhPSAwKTsKLSAgIGlmIChfX3B5eF90XzUpIHsKLSAKLS0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ4NwotKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NDg5Ci0gICogICAgICAgICBrZXlzID0gbWFwLmtleXMoKQotICAq ICAgICAgICAgaWYgbm90IGxlbihrZXlzKToKLSAgKiAgICAgICAgICAgICByZXR1cm4gbGlzdCAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtOTU0MSw3ICs5NTQxLDcgQEAgc3RhdGlj IHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF9fcHJlcF9ub2RlX20KLSAgICAgX19weXhfciA9IF9fcHl4X3ZfbGlzdDsKLSAgICAgZ290 byBfX3B5eF9MMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ4 NgotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg4Ci0gICogICAgICAg ICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QobWFwLnZhbHVlcygpKQotICAqICAgICAgICAg a2V5cyA9IG1hcC5rZXlzKCkKLSAgKiAgICAgICAgIGlmIG5vdCBsZW4oa2V5cyk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC05NTUwLDcgKzk1NTAsNyBAQCBzdGF0aWMgc3RydWN0 IG1wdl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19w cmVwX25vZGVfbQotICAqLwotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ4OAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5MAotICAq ICAgICAgICAgaWYgbm90IGxlbihrZXlzKToKLSAgKiAgICAgICAgICAgICByZXR1cm4gbGlzdAot ICAqICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxsb2MobGlzdC5udW0pICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC05NTU5LDcgKzk1NTksNyBAQCBzdGF0aWMgc3RydWN0 IG1wdl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19w cmVwX25vZGVfbQotICAqLwotICAgX19weXhfdl9saXN0LT5rZXlzID0gKChjaGFyICoqKW1hbGxv YyhfX3B5eF92X2xpc3QtPm51bSkpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ4OQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5MQotICAq ICAgICAgICAgICAgIHJldHVybiBsaXN0Ci0gICogICAgICAgICBsaXN0LmtleXMgPSA8Y2hhcioq Pm1hbGxvYyhsaXN0Lm51bSkKLSAgKiAgICAgICAgIGZvciBpLCBrZXkgaW4gZW51bWVyYXRlKGtl eXMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtOTU3MiwyNiArOTU3MiwyNiBA QCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0X19wcmVwX25vZGVfbQotICAgICBfX3B5eF90XzIgPSBfX3B5eF92X2tleXM7 IF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzQgPSAwOwotICAgICBfX3B5eF90XzYg PSBOVUxMOwotICAgfSBlbHNlIHsKLS0gICAgX19weXhfdF80ID0gLTE7IF9fcHl4X3RfMiA9IFB5 T2JqZWN0X0dldEl0ZXIoX19weXhfdl9rZXlzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF80ID0gLTE7IF9f cHl4X3RfMiA9IFB5T2JqZWN0X0dldEl0ZXIoX19weXhfdl9rZXlzKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDkxLCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7Ci0tICAgIF9fcHl4X3RfNiA9IFB5X1RZUEUoX19weXhfdF8yKS0+ dHBfaXRlcm5leHQ7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ4OSwg X19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfNiA9IFB5X1RZUEUoX19weXhfdF8yKS0+dHBf aXRlcm5leHQ7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ5MSwgX19w eXhfTDFfZXJyb3IpCi0gICB9Ci0gICBmb3IgKDs7KSB7Ci0gICAgIGlmIChsaWtlbHkoIV9fcHl4 X3RfNikpIHsKLSAgICAgICBpZiAobGlrZWx5KFB5TGlzdF9DaGVja0V4YWN0KF9fcHl4X3RfMikp KSB7Ci0gICAgICAgICBpZiAoX19weXhfdF80ID49IFB5TGlzdF9HRVRfU0laRShfX3B5eF90XzIp KSBicmVhazsKLSAgICAgICAgICNpZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRI T05fQVZPSURfQk9SUk9XRURfUkVGUwotLSAgICAgICAgX19weXhfdF8zID0gUHlMaXN0X0dFVF9J VEVNKF9fcHl4X3RfMiwgX19weXhfdF80KTsgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7IF9fcHl4 X3RfNCsrOyBpZiAodW5saWtlbHkoMCA8IDApKSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9l cnJvcikKLSsgICAgICAgIF9fcHl4X3RfMyA9IFB5TGlzdF9HRVRfSVRFTShfX3B5eF90XzIsIF9f cHl4X3RfNCk7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzQrKzsgaWYgKHVubGlr ZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAsIDQ5MSwgX19weXhfTDFfZXJyb3IpCi0gICAgICAgICAj ZWxzZQotLSAgICAgICAgX19weXhfdF8zID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfMiwgX19w eXhfdF80KTsgX19weXhfdF80Kys7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDAsIDQ4OSwgX19weXhfTDFfZXJyb3IpCi0rICAgICAgICBfX3B5eF90XzMgPSBQeVNlcXVlbmNl X0lURU0oX19weXhfdF8yLCBfX3B5eF90XzQpOyBfX3B5eF90XzQrKzsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDkxLCBfX3B5eF9MMV9lcnJvcikKLSAgICAgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzMpOwotICAgICAgICAgI2VuZGlmCi0gICAgICAgfSBlbHNlIHsK LSAgICAgICAgIGlmIChfX3B5eF90XzQgPj0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF90XzIpKSBi cmVhazsKLSAgICAgICAgICNpZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05f QVZPSURfQk9SUk9XRURfUkVGUwotLSAgICAgICAgX19weXhfdF8zID0gUHlUdXBsZV9HRVRfSVRF TShfX3B5eF90XzIsIF9fcHl4X3RfNCk7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzQrKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAsIDQ4OSwgX19weXhfTDFfZXJy b3IpCi0rICAgICAgICBfX3B5eF90XzMgPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X3RfMiwgX19w eXhfdF80KTsgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfNCsrOyBpZiAodW5saWtl bHkoMCA8IDApKSBfX1BZWF9FUlIoMCwgNDkxLCBfX3B5eF9MMV9lcnJvcikKLSAgICAgICAgICNl bHNlCi0tICAgICAgICBfX3B5eF90XzMgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF8yLCBfX3B5 eF90XzQpOyBfX3B5eF90XzQrKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIo MCwgNDg5LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICAgIF9fcHl4X3RfMyA9IFB5U2VxdWVuY2Vf SVRFTShfX3B5eF90XzIsIF9fcHl4X3RfNCk7IF9fcHl4X3RfNCsrOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCA0OTEsIF9fcHl4X0wxX2Vycm9yKQotICAgICAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0gICAgICAgICAjZW5kaWYKLSAgICAgICB9Ci1AQCAtOTYw MSw3ICs5NjAxLDcgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX20KLSAgICAgICAgIFB5T2JqZWN0 KiBleGNfdHlwZSA9IFB5RXJyX09jY3VycmVkKCk7Ci0gICAgICAgICBpZiAoZXhjX3R5cGUpIHsK LSAgICAgICAgICAgaWYgKGxpa2VseShfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMo ZXhjX3R5cGUsIFB5RXhjX1N0b3BJdGVyYXRpb24pKSkgUHlFcnJfQ2xlYXIoKTsKLS0gICAgICAg ICAgZWxzZSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICAgICAgZWxz ZSBfX1BZWF9FUlIoMCwgNDkxLCBfX3B5eF9MMV9lcnJvcikKLSAgICAgICAgIH0KLSAgICAgICAg IGJyZWFrOwotICAgICAgIH0KLUBAIC05NjExLDIwICs5NjExLDIwIEBAIHN0YXRpYyBzdHJ1Y3Qg bXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3By ZXBfbm9kZV9tCi0gICAgIF9fcHl4X3RfMyA9IDA7Ci0gICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzEpOwotICAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X2ksIF9fcHl4X3RfMSk7Ci0tICAg IF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FkZE9iakMoX19weXhfdF8xLCBfX3B5eF9pbnRfMSwg MSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ4OSwgX19w eXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FkZE9iakMoX19weXhf dF8xLCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDQ5MSwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzMpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsKLSAgICAgX19weXhfdF8xID0gX19w eXhfdF8zOwotICAgICBfX3B5eF90XzMgPSAwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDkwCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo0OTIKLSAgKiAgICAgICAgIGxpc3Qua2V5cyA9IDxjaGFyKio+bWFsbG9jKGxpc3QubnVtKQot ICAqICAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6Ci0gICogICAgICAgICAg ICAga2V5ID0gX3N0cmVuYyhrZXkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAg ICAgICAgICAgICBja2V5ID0ga2V5Ci0gICogICAgICAgICAgICAgbGlzdC5rZXlzW2ldID0gPGNo YXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCi0gICovCi0tICAgIF9fUHl4X0dldE1vZHVsZUdsb2Jh bE5hbWUoX19weXhfdF83LCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzcpKSBfX1BZWF9FUlIoMCwgNDkwLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZShfX3B5eF90XzcsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA0OTIsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF83KTsKLSAgICAgX19weXhfdF84ID0gTlVMTDsKLSAgICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90Xzcp KSkgewotQEAgLTk2MzgsNDQgKzk2MzgsNDQgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX20KLSAg ICAgfQotICAgICBfX3B5eF90XzMgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwy QXJncyhfX3B5eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdl9rZXkpIDogX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzcsIF9fcHl4X3Zfa2V5KTsKLSAgICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzgpOyBfX3B5eF90XzggPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykp IF9fUFlYX0VSUigwLCA0OTAsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCA0OTIsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8zKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3Rf NyA9IDA7Ci0gICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl9rZXksIF9fcHl4X3RfMyk7Ci0g ICAgIF9fcHl4X3RfMyA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0OTEKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5MwotICAq ICAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6Ci0gICogICAgICAgICAgICAg a2V5ID0gX3N0cmVuYyhrZXkpCi0gICogICAgICAgICAgICAgY2tleSA9IGtleSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICAgICAgbGlzdC5rZXlzW2ldID0gPGNoYXIq Pm1hbGxvYyhsZW4oa2V5KSArIDEpCi0gICogICAgICAgICAgICAgc3RyY3B5KGxpc3Qua2V5c1tp XSwgY2tleSkKLSAgKi8KLS0gICAgX19weXhfdF85ID0gX19QeXhfUHlPYmplY3RfQXNXcml0YWJs ZVN0cmluZyhfX3B5eF92X2tleSk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfOSkgJiYgUHlFcnJf T2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0OTEsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5 eF90XzkgPSBfX1B5eF9QeU9iamVjdF9Bc1dyaXRhYmxlU3RyaW5nKF9fcHl4X3Zfa2V5KTsgaWYg KHVubGlrZWx5KCghX19weXhfdF85KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAs IDQ5MywgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fcHl4X3ZfY2tleSA9IF9fcHl4X3RfOTsKLSAK LS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5MgotKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk0Ci0gICogICAgICAgICAgICAga2V5ID0gX3N0 cmVuYyhrZXkpCi0gICogICAgICAgICAgICAgY2tleSA9IGtleQotICAqICAgICAgICAgICAgIGxp c3Qua2V5c1tpXSA9IDxjaGFyKj5tYWxsb2MobGVuKGtleSkgKyAxKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICAgICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkK LSAgKiAgICAgICAgIHJldHVybiBsaXN0Ci0gICovCi0tICAgIF9fcHl4X3RfMTAgPSBQeU9iamVj dF9MZW5ndGgoX19weXhfdl9rZXkpOyBpZiAodW5saWtlbHkoX19weXhfdF8xMCA9PSAoKFB5X3Nz aXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDQ5MiwgX19weXhfTDFfZXJyb3IpCi0tICAgIF9fcHl4 X3RfMTEgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5eF92X2kpOyBpZiAodW5saWtlbHko KF9fcHl4X3RfMTEgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZ WF9FUlIoMCwgNDkyLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8xMCA9IFB5T2JqZWN0 X0xlbmd0aChfX3B5eF92X2tleSk7IGlmICh1bmxpa2VseShfX3B5eF90XzEwID09ICgoUHlfc3Np emVfdCktMSkpKSBfX1BZWF9FUlIoMCwgNDk0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhf dF8xMSA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3ZfaSk7IGlmICh1bmxpa2VseSgo X19weXhfdF8xMSA9PSAoUHlfc3NpemVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlY X0VSUigwLCA0OTQsIF9fcHl4X0wxX2Vycm9yKQotICAgICAoX19weXhfdl9saXN0LT5rZXlzW19f cHl4X3RfMTFdKSA9ICgoY2hhciAqKW1hbGxvYygoX19weXhfdF8xMCArIDEpKSk7Ci0gCi0tICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTMKLSsgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjQ5NQotICAqICAgICAgICAgICAgIGNrZXkgPSBrZXkKLSAg KiAgICAgICAgICAgICBsaXN0LmtleXNbaV0gPSA8Y2hhcio+bWFsbG9jKGxlbihrZXkpICsgMSkK LSAgKiAgICAgICAgICAgICBzdHJjcHkobGlzdC5rZXlzW2ldLCBja2V5KSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICByZXR1cm4gbGlzdAotICAqIAotICAqLwotLSAg ICBfX3B5eF90XzEwID0gX19QeXhfUHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9pKTsgaWYgKHVu bGlrZWx5KChfX3B5eF90XzEwID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgp KSkgX19QWVhfRVJSKDAsIDQ5MywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMTAgPSBf X1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5eF92X2kpOyBpZiAodW5saWtlbHkoKF9fcHl4X3Rf MTAgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwg NDk1LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgKHZvaWQpKHN0cmNweSgoX19weXhfdl9saXN0LT5r ZXlzW19fcHl4X3RfMTBdKSwgX19weXhfdl9ja2V5KSk7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0ODkKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ5MQotICAqICAgICAgICAgICAgIHJldHVybiBsaXN0Ci0gICogICAgICAgICBsaXN0 LmtleXMgPSA8Y2hhcioqPm1hbGxvYyhsaXN0Lm51bSkKLSAgKiAgICAgICAgIGZvciBpLCBrZXkg aW4gZW51bWVyYXRlKGtleXMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtOTY4 Niw3ICs5Njg2LDcgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX20KLSAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk0 Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk2Ci0gICogICAgICAgICAg ICAgbGlzdC5rZXlzW2ldID0gPGNoYXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCi0gICogICAgICAg ICAgICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkKLSAgKiAgICAgICAgIHJldHVybiBsaXN0 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC05Njk2LDcgKzk2OTYsNyBAQCBzdGF0 aWMgc3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0X19wcmVwX25vZGVfbQotICAgX19weXhfciA9IF9fcHl4X3ZfbGlzdDsKLSAgIGdvdG8g X19weXhfTDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDgxCi0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDgzCi0gICogICAgICAgICByZXR1 cm4gbm9kZV9saXN0Ci0gICogCi0gICogICAgIGNkZWYgbXB2X25vZGVfbGlzdCogX3ByZXBfbm9k ZV9tYXAoc2VsZiwgbWFwKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTk3MjEs NyArOTcyMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9tCi0gICByZXR1cm4gX19weXhfcjsK LSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5NgotKy8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTgKLSAgKiAgICAgICAgIHJldHVybiBsaXN0Ci0g ICogCi0gICogICAgIGNkZWYgbXB2X25vZGUgX3ByZXBfbmF0aXZlX3ZhbHVlKHNlbGYsIHZhbHVl LCBmb3JtYXQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtOTc0OSwzOSArOTc0 OSwzOSBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQotICAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9wcmVwX25hdGl2ZV92YWx1ZSIsIDApOwotICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zf dmFsdWUpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5OAotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwMAotICAqICAgICBjZGVmIG1wdl9u b2RlIF9wcmVwX25hdGl2ZV92YWx1ZShzZWxmLCB2YWx1ZSwgZm9ybWF0KToKLSAgKiAgICAgICAg IGNkZWYgbXB2X25vZGUgbm9kZQotICAqICAgICAgICAgbm9kZS5mb3JtYXQgPSBmb3JtYXQgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgaWYgZm9ybWF0ID09IE1QVl9G T1JNQVRfU1RSSU5HOgotICAqICAgICAgICAgICAgIHZhbHVlID0gX3N0cmVuYyh2YWx1ZSkKLSAg Ki8KLS0gIF9fcHl4X3RfMSA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50X0FzX2VudW1f X21wdl9mb3JtYXQoX19weXhfdl9mb3JtYXQpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVk KCkpKSBfX1BZWF9FUlIoMCwgNDk4LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9ICgo ZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9mb3JtYXQoX19weXhfdl9m b3JtYXQpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNTAw LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fcHl4X3Zfbm9kZS5mb3JtYXQgPSBfX3B5eF90XzE7Ci0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk5Ci0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTAxCi0gICogICAgICAgICBjZGVmIG1wdl9ub2RlIG5v ZGUKLSAgKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0Ci0gICogICAgICAgICBpZiBmb3Jt YXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAg KiAgICAgICAgICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUpCi0gICogICAgICAgICAgICAgbm9k ZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpCi0gICovCi0tICBfX3B5 eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9TVFJJ TkcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0OTksIF9fcHl4X0wx X2Vycm9yKQotKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0 KE1QVl9GT1JNQVRfU1RSSU5HKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgNTAxLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAg X19weXhfdF8zID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3Rf MiwgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDAsIDQ5OSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMgPSBQ eU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X2Zvcm1hdCwgX19weXhfdF8yLCBQeV9FUSk7IF9f UHl4X1hHT1RSRUYoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgNTAxLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOwotLSAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4 X3RfMyk7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDQ5OSwgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhf dF8zKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTAxLCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwot ICAgaWYgKF9fcHl4X3RfNCkgewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTAwCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDIKLSAg KiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0Ci0gICogICAgICAgICBpZiBmb3JtYXQgPT0g TVBWX0ZPUk1BVF9TVFJJTkc6Ci0gICogICAgICAgICAgICAgdmFsdWUgPSBfc3RyZW5jKHZhbHVl KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICAgICAgbm9kZS51LnN0 cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpCi0gICogICAgICAgICAgICAgc3Ry Y3B5KG5vZGUudS5zdHJpbmcsIHZhbHVlKQotICAqLwotLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9i YWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDUwMCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTAyLCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMik7Ci0gICAgIF9fcHl4X3RfNSA9IE5VTEw7Ci0gICAgIGlmIChD WVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8y KSkpIHsKLUBAIC05Nzk1LDMzICs5Nzk1LDMzIEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGUgX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVlCi0g ICAgIH0KLSAgICAgX19weXhfdF8zID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzUsIF9fcHl4X3ZfdmFsdWUpIDogX19QeXhfUHlPYmpl Y3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfdmFsdWUpOwotICAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0tICAgIGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDAsIDUwMCwgX19weXhfTDFfZXJyb3IpCi0rICAgIGlmICh1bmxpa2Vs eSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUwMiwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzMpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19w eXhfdF8yID0gMDsKLSAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3ZhbHVlLCBfX3B5eF90 XzMpOwotICAgICBfX3B5eF90XzMgPSAwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTAxCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 MDMKLSAgKiAgICAgICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKLSAgKiAgICAg ICAgICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUpCi0gICogICAgICAgICAgICAgbm9kZS51LnN0 cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSAgKiAgICAgICAgICAgICBzdHJjcHkobm9kZS51LnN0cmluZywgdmFsdWUpCi0g ICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6Ci0gICovCi0tICAgIF9f cHl4X3RfNiA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5KF9f cHl4X3RfNiA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDUwMSwgX19weXhfTDFf ZXJyb3IpCi0rICAgIF9fcHl4X3RfNiA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X3ZhbHVlKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfNiA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAs IDUwMywgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fcHl4X3Zfbm9kZS51LnN0cmluZyA9ICgoY2hh ciAqKW1hbGxvYygoX19weXhfdF82ICsgMSkpKTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjUwMgotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTA0Ci0gICogICAgICAgICAgICAgdmFsdWUgPSBfc3RyZW5jKHZhbHVlKQotICAqICAgICAg ICAgICAgIG5vZGUudS5zdHJpbmcgPSA8Y2hhcio+bWFsbG9jKGxlbih2YWx1ZSkgKyAxKQotICAq ICAgICAgICAgICAgIHN0cmNweShub2RlLnUuc3RyaW5nLCB2YWx1ZSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFH OgotICAqICAgICAgICAgICAgIG5vZGUudS5mbGFnID0gMSBpZiB2YWx1ZSBlbHNlIDAKLSAgKi8K LS0gICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl92YWx1ZSk7 IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNykgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VS UigwLCA1MDIsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzcgPSBfX1B5eF9QeU9iamVj dF9Bc1N0cmluZyhfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF83KSAmJiBQ eUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDUwNCwgX19weXhfTDFfZXJyb3IpCi0gICAg ICh2b2lkKShzdHJjcHkoX19weXhfdl9ub2RlLnUuc3RyaW5nLCBfX3B5eF90XzcpKTsKLSAKLS0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5OQotKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTAxCi0gICogICAgICAgICBjZGVmIG1wdl9ub2RlIG5v ZGUKLSAgKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0Ci0gICogICAgICAgICBpZiBmb3Jt YXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC05ODMxLDI5ICs5ODMxLDI5IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGUgX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVlCi0gICAgIGdvdG8g X19weXhfTDM7Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTAzCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA1Ci0gICogICAgICAg ICAgICAgbm9kZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpCi0gICog ICAgICAgICAgICAgc3RyY3B5KG5vZGUudS5zdHJpbmcsIHZhbHVlKQotICAqICAgICAgICAgZWxp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0gICogICAgICAgICAgICAgbm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVsc2UgMAotICAqICAg ICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKLSAgKi8KLS0gIF9fcHl4X3Rf MyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX0ZMQUcpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA1MDMsIF9fcHl4X0wxX2Vycm9y KQotKyAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9G T1JNQVRfRkxBRyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUwNSwg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gIF9fcHl4X3Rf MiA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfZm9ybWF0LCBfX3B5eF90XzMsIFB5X0VR KTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9f UFlYX0VSUigwLCA1MDMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8yID0gUHlPYmplY3Rf UmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMywgUHlfRVEpOyBfX1B5eF9YR09U UkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUw NSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8z ID0gMDsKLS0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzIpOyBp ZiAodW5saWtlbHkoX19weXhfdF80IDwgMCkpIF9fUFlYX0VSUigwLCA1MDMsIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlm ICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwNSwgX19weXhfTDFfZXJy b3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSAgIGlmIChf X3B5eF90XzQpIHsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUw NAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA2Ci0gICogICAgICAg ICAgICAgc3RyY3B5KG5vZGUudS5zdHJpbmcsIHZhbHVlKQotICAqICAgICAgICAgZWxpZiBmb3Jt YXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgotICAqICAgICAgICAgICAgIG5vZGUudS5mbGFnID0gMSBp ZiB2YWx1ZSBlbHNlIDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAg ZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKLSAgKiAgICAgICAgICAgICBub2RlLnUu aW50NjQgPSB2YWx1ZQotICAqLwotLSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1Ry dWUoX19weXhfdl92YWx1ZSk7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJS KDAsIDUwNCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0 X0lzVHJ1ZShfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZ WF9FUlIoMCwgNTA2LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgaWYgKF9fcHl4X3RfNCkgewotICAg ICAgIF9fcHl4X3RfOCA9IDE7Ci0gICAgIH0gZWxzZSB7Ci1AQCAtOTg2MSw3ICs5ODYxLDcgQEAg c3RhdGljIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF9fcHJlcF9uYXRpdmVfdmFsdWUKLSAgICAgfQotICAgICBfX3B5eF92X25vZGUudS5mbGFn ID0gX19weXhfdF84OwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTAzCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDUKLSAgKiAgICAg ICAgICAgICBub2RlLnUuc3RyaW5nID0gPGNoYXIqPm1hbGxvYyhsZW4odmFsdWUpICsgMSkKLSAg KiAgICAgICAgICAgICBzdHJjcHkobm9kZS51LnN0cmluZywgdmFsdWUpCi0gICogICAgICAgICBl bGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLUBAIC05ODcxLDMyICs5ODcxLDMyIEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGUgX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVlCi0gICAg IGdvdG8gX19weXhfTDM7Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTA1Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA3Ci0gICog ICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6Ci0gICogICAgICAgICAgICAg bm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVsc2UgMAotICAqICAgICAgICAgZWxpZiBmb3JtYXQg PT0gTVBWX0ZPUk1BVF9JTlQ2NDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAg ICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZhbHVlCi0gICogICAgICAgICBlbGlmIGZvcm1hdCA9 PSBNUFZfRk9STUFUX0RPVUJMRToKLSAgKi8KLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX0lOVDY0KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgNTA1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMiA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX0lOVDY0KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTA3LCBfX3B5eF9MMV9lcnJvcikK LSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgX19weXhfdF8zID0gUHlPYmplY3RfUmlj aENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMiwgUHlfRVEpOyBfX1B5eF9YR09UUkVG KF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUwNSwg X19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5 eF92X2Zvcm1hdCwgX19weXhfdF8yLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTA3LCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgX19weXhf dF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5 eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwNSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90 XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KF9fcHl4 X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTA3LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotICAgaWYgKF9fcHl4X3RfNCkgewotIAot LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA2Ci0rICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDgKLSAgKiAgICAgICAgICAgICBub2RlLnUuZmxh ZyA9IDEgaWYgdmFsdWUgZWxzZSAwCi0gICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX0lOVDY0OgotICAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZhbHVlICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JN QVRfRE9VQkxFOgotICAqICAgICAgICAgICAgIG5vZGUudS5kb3VibGVfID0gdmFsdWUKLSAgKi8K LS0gICAgX19weXhfdF85ID0gX19QeXhfUHlJbnRfQXNfaW50NjRfdChfX3B5eF92X3ZhbHVlKTsg aWYgKHVubGlrZWx5KChfX3B5eF90XzkgPT0gKChpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCA1MDYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90Xzkg PSBfX1B5eF9QeUludF9Bc19pbnQ2NF90KF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtlbHkoKF9f cHl4X3RfOSA9PSAoKGludDY0X3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJS KDAsIDUwOCwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fcHl4X3Zfbm9kZS51LmludDY0ID0gX19w eXhfdF85OwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA1Ci0r ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDcKLSAgKiAgICAgICAgIGVs aWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzoKLSAgKiAgICAgICAgICAgICBub2RlLnUuZmxh ZyA9IDEgaWYgdmFsdWUgZWxzZSAwCi0gICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX0lOVDY0OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtOTkwNiwzMiArOTkw NiwzMiBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQotICAgICBnb3RvIF9fcHl4X0wzOwotICAg fQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwNwotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwOQotICAqICAgICAgICAgZWxpZiBmb3JtYXQg PT0gTVBWX0ZPUk1BVF9JTlQ2NDoKLSAgKiAgICAgICAgICAgICBub2RlLnUuaW50NjQgPSB2YWx1 ZQotICAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAgICBub2RlLnUuZG91YmxlXyA9IHZh bHVlCi0gICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6Ci0g ICovCi0tICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBW X0ZPUk1BVF9ET1VCTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA1 MDcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV9lbnVt X19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfRE9VQkxFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMCwgNTA5LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzMpOwotLSAgX19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3Jt YXQsIF9fcHl4X3RfMywgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUwNywgX19weXhfTDFfZXJyb3IpCi0rICBf X3B5eF90XzIgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X2Zvcm1hdCwgX19weXhfdF8z LCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgNTA5LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3Rf SXNUcnVlKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJS KDAsIDUwNywgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9J c1RydWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIo MCwgNTA5LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5 eF90XzIgPSAwOwotICAgaWYgKF9fcHl4X3RfNCkgewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTA4Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1MTAKLSAgKiAgICAgICAgICAgICBub2RlLnUuaW50NjQgPSB2YWx1ZQotICAqICAgICAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6Ci0gICogICAgICAgICAgICAgbm9k ZS51LmRvdWJsZV8gPSB2YWx1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAg ICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6Ci0gICogICAgICAgICAg ICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbGlzdCh2YWx1ZSkKLSAgKi8KLS0gICAg X19weXhfdF8xMCA9IF9fcHl4X1B5RmxvYXRfQXNEb3VibGUoX19weXhfdl92YWx1ZSk7IGlmICh1 bmxpa2VseSgoX19weXhfdF8xMCA9PSAoZG91YmxlKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDAsIDUwOCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMTAgPSBfX3B5 eF9QeUZsb2F0X0FzRG91YmxlKF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtlbHkoKF9fcHl4X3Rf MTAgPT0gKGRvdWJsZSktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA1MTAs IF9fcHl4X0wxX2Vycm9yKQotICAgICBfX3B5eF92X25vZGUudS5kb3VibGVfID0gX19weXhfdF8x MDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwNwotKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA5Ci0gICogICAgICAgICBlbGlmIGZv cm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgotICAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9 IHZhbHVlCi0gICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTk5NDEsMjIgKzk5NDEsMjIgQEAgc3RhdGlj IHN0cnVjdCBtcHZfbm9kZSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9f cHJlcF9uYXRpdmVfdmFsdWUKLSAgICAgZ290byBfX3B5eF9MMzsKLSAgIH0KLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1MTEKLSAgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRf RE9VQkxFOgotICAqICAgICAgICAgICAgIG5vZGUudS5kb3VibGVfID0gdmFsdWUKLSAgKiAgICAg ICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5fcHJlcF9u b2RlX2xpc3QodmFsdWUpCi0gICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05P REVfTUFQOgotICAqLwotLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZf Zm9ybWF0KE1QVl9GT1JNQVRfTk9ERV9BUlJBWSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDUwOSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9Q eUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9lcnJvcikKLSAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgX19weXhfdF8zID0gUHlPYmplY3RfUmljaENv bXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMiwgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9f cHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUwOSwgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92 X2Zvcm1hdCwgX19weXhfdF8yLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9lcnJvcikK LSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgX19weXhfdF80 ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5eF90 XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwOSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzQg PSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KF9fcHl4X3Rf NCA8IDApKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotICAgaWYgKF9fcHl4X3RfNCkgewotIAotLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTEwCi0rICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTIKLSAgKiAgICAgICAgICAgICBub2RlLnUuZG91Ymxl XyA9IHZhbHVlCi0gICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJS QVk6Ci0gICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbGlzdCh2 YWx1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTk5NjUsNyArOTk2NSw3IEBA IHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGUgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVlCi0gICovCi0gICAgIF9fcHl4X3Zfbm9kZS51Lmxpc3Qg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbm9kZV9saXN0KF9fcHl4X3Zfc2Vs ZiwgX19weXhfdl92YWx1ZSk7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1MDkKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxMQotICAq ICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6Ci0gICogICAgICAgICAg ICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQotICAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBW X0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtOTk3 NSwyMiArOTk3NSwyMiBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQotICAgICBnb3RvIF9fcHl4 X0wzOwotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxMQot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxMwotICAqICAgICAgICAgZWxp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgotICAqICAgICAgICAgICAgIG5vZGUu dS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QodmFsdWUpCi0gICogICAgICAgICBlbGlmIGZv cm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0gICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbWFwKHZhbHVl KQotICAqICAgICAgICAgZWxzZToKLSAgKi8KLS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX05PREVfTUFQKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3Rf MyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX05PREVfTUFQ KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTEzLCBfX3B5eF9MMV9l cnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotLSAgX19weXhfdF8yID0gUHlPYmpl Y3RfUmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMywgUHlfRVEpOyBfX1B5eF9Y R09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDUxMSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBQeU9iamVjdF9SaWNoQ29tcGFy ZShfX3B5eF92X2Zvcm1hdCwgX19weXhfdF8zLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhf dF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTEzLCBfX3B5eF9M MV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAg X19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlmICh1bmxpa2Vs eShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUxMSwgX19weXhfTDFfZXJyb3IpCi0rICBf X3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTEzLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotICAgaWYgKF9fcHl4X3RfNCkg ewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTEyCi0rICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTQKLSAgKiAgICAgICAgICAgICBub2Rl LnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0KHZhbHVlKQotICAqICAgICAgICAgZWxpZiBm b3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKLSAgKiAgICAgICAgICAgICBub2RlLnUubGlz dCA9IHNlbGYuX3ByZXBfbm9kZV9tYXAodmFsdWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLUBAIC05OTk5LDcgKzk5OTksNyBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQotICAqLwot ICAgICBfX3B5eF92X25vZGUudS5saXN0ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9w cmVwX25vZGVfbWFwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92YWx1ZSk7Ci0gCi0tICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTEKLSsgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjUxMwotICAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1B VF9OT0RFX0FSUkFZOgotICAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5fcHJlcF9u b2RlX2xpc3QodmFsdWUpCi0gICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05P REVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTAwMDksNyArMTAwMDks NyBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQotICAgICBnb3RvIF9fcHl4X0wzOwotICAgfQot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxNAotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxNgotICAqICAgICAgICAgICAgIG5vZGUudS5saXN0 ID0gc2VsZi5fcHJlcF9ub2RlX21hcCh2YWx1ZSkKLSAgKiAgICAgICAgIGVsc2U6Ci0gICogICAg ICAgICAgICAgbm9kZS5mb3JtYXQgPSBNUFZfRk9STUFUX05PTkUgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotQEAgLTEwMDIxLDcgKzEwMDIxLDcgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9k ZSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9uYXRpdmVfdmFs dWUKLSAgIH0KLSAgIF9fcHl4X0wzOjsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1MTUKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTcKLSAg KiAgICAgICAgIGVsc2U6Ci0gICogICAgICAgICAgICAgbm9kZS5mb3JtYXQgPSBNUFZfRk9STUFU X05PTkUKLSAgKiAgICAgICAgIHJldHVybiBub2RlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLUBAIC0xMDAzMSw3ICsxMDAzMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGUgX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVlCi0gICBf X3B5eF9yID0gX19weXhfdl9ub2RlOwotICAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTYKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0OTgKLSAgKiAgICAgICAgIHJldHVybiBsaXN0Ci0gICogCi0gICogICAgIGNk ZWYgbXB2X25vZGUgX3ByZXBfbmF0aXZlX3ZhbHVlKHNlbGYsIHZhbHVlLCBmb3JtYXQpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTAwNTIsNyArMTAwNTIsNyBAQCBzdGF0aWMg c3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19w cmVwX25hdGl2ZV92YWx1ZQotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTcKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTE5Ci0gICogICAgICAgICByZXR1cm4gbm9kZQotICAqIAotICAqICAgICBjZGVmIF9m cmVlX25hdGl2ZV92YWx1ZShzZWxmLCBtcHZfbm9kZSBub2RlKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotQEAgLTEwMDc0LDcgKzEwMDc0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3Ry dWMKLSAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfZnJlZV9uYXRpdmVfdmFsdWUiLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1MTgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 MjAKLSAgKiAKLSAgKiAgICAgY2RlZiBfZnJlZV9uYXRpdmVfdmFsdWUoc2VsZiwgbXB2X25vZGUg bm9kZSk6Ci0gICogICAgICAgICBpZiBub2RlLmZvcm1hdCBpbiAoTVBWX0ZPUk1BVF9OT0RFX0FS UkFZLCBNUFZfRk9STUFUX05PREVfTUFQKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTEwMDg1LDcgKzEwMDg1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKLSAgICAgY2Fz ZSBNUFZfRk9STUFUX05PREVfQVJSQVk6Ci0gICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX01BUDoK LSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxOQotKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTIxCi0gICogICAgIGNkZWYgX2ZyZWVfbmF0 aXZlX3ZhbHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOgotICAqICAgICAgICAgaWYgbm9kZS5mb3Jt YXQgaW4gKE1QVl9GT1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6Ci0gICog ICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotQEAgLTEwMDk3LDE5ICsxMDA5NywxOSBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19mcmVlX25hdGl2ZV92 YWx1ZShzdHJ1YwotICAgICBmb3IgKF9fcHl4X3RfMyA9IDA7IF9fcHl4X3RfMyA8IF9fcHl4X3Rf MjsgX19weXhfdF8zKz0xKSB7Ci0gICAgICAgX19weXhfdl9pID0gX19weXhfdF8zOwotIAotLSAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjAKLSsgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTIyCi0gICogICAgICAgICBpZiBub2RlLmZvcm1h dCBpbiAoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBNUFZfRk9STUFUX05PREVfTUFQKToKLSAgKiAg ICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOgotICAqICAgICAgICAg ICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlLnUubGlzdC52YWx1ZXNbaV0pICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5s aXN0LnZhbHVlcykKLSAgKiAgICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFU X05PREVfTUFQOgotICAqLwotLSAgICAgIF9fcHl4X3RfNCA9ICgoc3RydWN0IF9fcHl4X3Z0YWJz dHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4 X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCAoX19weXhfdl9ub2RlLnUu bGlzdC0+dmFsdWVzW19fcHl4X3ZfaV0pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgNTIwLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBfX3B5eF90XzQgPSAoKHN0cnVj dCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhf dl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgKF9f cHl4X3Zfbm9kZS51Lmxpc3QtPnZhbHVlc1tfX3B5eF92X2ldKSk7IGlmICh1bmxpa2VseSghX19w eXhfdF80KSkgX19QWVhfRVJSKDAsIDUyMiwgX19weXhfTDFfZXJyb3IpCi0gICAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNCk7Ci0gICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4 X3RfNCA9IDA7Ci0gICAgIH0KLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjUyMQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTIzCi0gICog ICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKLSAgKiAgICAgICAg ICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZS51Lmxpc3QudmFsdWVzW2ldKQot ICAqICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3QudmFsdWVzKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci1AQCAtMTAxMTgsNyArMTAxMTgsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19mcmVlX25hdGl2ZV92YWx1ZShz dHJ1YwotICAqLwotICAgICBmcmVlKF9fcHl4X3Zfbm9kZS51Lmxpc3QtPnZhbHVlcyk7Ci0gCi0t ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjIKLSsgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyNAotICAqICAgICAgICAgICAgICAgICBzZWxmLl9m cmVlX25hdGl2ZV92YWx1ZShub2RlLnUubGlzdC52YWx1ZXNbaV0pCi0gICogICAgICAgICAgICAg ZnJlZShub2RlLnUubGlzdC52YWx1ZXMpCi0gICogICAgICAgICAgICAgaWYgbm9kZS5mb3JtYXQg PT0gTVBWX0ZPUk1BVF9OT0RFX01BUDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAg LTEwMTI4LDcgKzEwMTI4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKLSAgICAgX19weXhf dF81ID0gKChfX3B5eF92X25vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVApICE9IDAp OwotICAgICBpZiAoX19weXhfdF81KSB7Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjUyMwotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo1MjUKLSAgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LnZhbHVlcykKLSAgKiAgICAg ICAgICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgotICAqICAgICAg ICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTAxNDAsNyArMTAxNDAsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19mcmVlX25hdGl2ZV92YWx1 ZShzdHJ1YwotICAgICAgIGZvciAoX19weXhfdF8zID0gMDsgX19weXhfdF8zIDwgX19weXhfdF8y OyBfX3B5eF90XzMrPTEpIHsKLSAgICAgICAgIF9fcHl4X3ZfaSA9IF9fcHl4X3RfMzsKLSAKLS0g ICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjQKLSsgICAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjYKLSAgKiAgICAgICAgICAgICBpZiBu b2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgotICAqICAgICAgICAgICAgICAgICBm b3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOgotICAqICAgICAgICAgICAgICAgICAgICAg ZnJlZShub2RlLnUubGlzdC5rZXlzW2ldKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1A QCAtMTAxNTAsNyArMTAxNTAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0X19mcmVlX25hdGl2ZV92YWx1ZShzdHJ1YwotICAgICAgICAg ZnJlZSgoX19weXhfdl9ub2RlLnUubGlzdC0+a2V5c1tfX3B5eF92X2ldKSk7Ci0gICAgICAgfQot IAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjUKLSsgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTI3Ci0gICogICAgICAgICAgICAgICAg IGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6Ci0gICogICAgICAgICAgICAgICAgICAg ICBmcmVlKG5vZGUudS5saXN0LmtleXNbaV0pCi0gICogICAgICAgICAgICAgICAgIGZyZWUobm9k ZS51Lmxpc3Qua2V5cykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEwMTU5LDcg KzEwMTU5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKLSAgKi8KLSAgICAgICBmcmVlKF9f cHl4X3Zfbm9kZS51Lmxpc3QtPmtleXMpOwotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1MjIKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTI0Ci0gICogICAgICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKG5vZGUu dS5saXN0LnZhbHVlc1tpXSkKLSAgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LnZhbHVl cykKLSAgKiAgICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQ OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTAxNjgsNyArMTAxNjgsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19m cmVlX25hdGl2ZV92YWx1ZShzdHJ1YwotICAqLwotICAgICB9Ci0gCi0tICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjYKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjUyOAotICAqICAgICAgICAgICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC5r ZXlzW2ldKQotICAqICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXMpCi0gICog ICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotQEAgLTEwMTc3LDcgKzEwMTc3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKLSAgKi8K LSAgICAgZnJlZShfX3B5eF92X25vZGUudS5saXN0KTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjUxOAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTIwCi0gICogCi0gICogICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3ZhbHVlKHNlbGYsIG1w dl9ub2RlIG5vZGUpOgotICAqICAgICAgICAgaWYgbm9kZS5mb3JtYXQgaW4gKE1QVl9GT1JNQVRf Tk9ERV9BUlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLUBAIC0xMDE4Nyw3ICsxMDE4Nyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX2ZyZWVfbmF0aXZlX3ZhbHVlKHN0cnVjCi0g ICAgIGJyZWFrOwotICAgICBjYXNlIE1QVl9GT1JNQVRfU1RSSU5HOgotIAotLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTI4Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1MzAKLSAgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0KQotICAq ICAgICAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKLSAgKiAgICAg ICAgICAgICBmcmVlKG5vZGUudS5zdHJpbmcpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LUBAIC0xMDE5Niw3ICsxMDE5Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX2ZyZWVfbmF0aXZlX3ZhbHVlKHN0cnVjCi0gICovCi0g ICAgIGZyZWUoX19weXhfdl9ub2RlLnUuc3RyaW5nKTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjUyNwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTI5Ci0gICogICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5cykKLSAg KiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0KQotICAqICAgICAgICAgZWxpZiBub2RlLmZv cm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTEwMjA3LDcgKzEwMjA3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKLSAgICAgZGVm YXVsdDogYnJlYWs7Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTE3Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTE5Ci0gICogICAg ICAgICByZXR1cm4gbm9kZQotICAqIAotICAqICAgICBjZGVmIF9mcmVlX25hdGl2ZV92YWx1ZShz ZWxmLCBtcHZfbm9kZSBub2RlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEw MjI4LDcgKzEwMjI4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKLSAgIHJldHVybiBfX3B5 eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTMwCi0rLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUzMgotICAqICAgICAgICAgICAgIGZyZWUo bm9kZS51LnN0cmluZykKLSAgKiAKLSAgKiAgICAgZGVmIGNvbW1hbmQoc2VsZiwgKmNtZGxpc3Qs IGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotQEAgLTEwMjgwLDcgKzEwMjgwLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOWNvbW1hbmQoUHlPYmplY3QgKl9fcHkKLSAg ICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewot LSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9r d2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIDAsICJjb21tYW5kIikgPCAwKSkgX19Q WVhfRVJSKDAsIDUzMCwgX19weXhfTDNfZXJyb3IpCi0rICAgICAgICBpZiAodW5saWtlbHkoX19Q eXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAs IHZhbHVlcywgMCwgImNvbW1hbmQiKSA8IDApKSBfX1BZWF9FUlIoMCwgNTMyLCBfX3B5eF9MM19l cnJvcikKLSAgICAgICB9Ci0gICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKSA8IDApIHsKLSAgICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwotQEAgLTEw MjkxLDcgKzEwMjkxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfOWNvbW1hbmQoUHlPYmplY3QgKl9fcHkKLSAgIH0KLSAgIGdvdG8g X19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7Ci0gICBfX3B5eF9MNV9hcmd0dXBsZV9l cnJvcjo7Ci0tICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiY29tbWFuZCIsIDAsIDAsIDAs IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNTMwLCBfX3B5eF9M M19lcnJvcikKLSsgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJjb21tYW5kIiwgMCwgMCwg MCwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA1MzIsIF9fcHl4 X0wzX2Vycm9yKQotICAgX19weXhfTDNfZXJyb3I6OwotICAgX19QeXhfREVDUkVGKF9fcHl4X3Zf Y21kbGlzdCk7IF9fcHl4X3ZfY21kbGlzdCA9IDA7Ci0gICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmNvbW1hbmQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKLUBAIC0xMDMzOCw3ICsxMDMzOCw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5k KHN0cnVjdCBfX3B5eF9vCi0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiY29tbWFuZCIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjU0NAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjU0NgotICAqICAgICAgICAgV3JhcHM6IG1wdl9jb21tYW5kX25vZGUgYW5kIG1wdl9jb21tYW5k X25vZGVfYXN5bmMKLSAgKiAgICAgICAgICIiIgotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTAzNDksMTkgKzEwMzQ5LDE5IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCi0gICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxh ZykpIHsKLSAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewot ICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOwotLSAgICAgIF9fUFlY X0VSUigwLCA1NDQsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fUFlYX0VSUigwLCA1NDYsIF9f cHl4X0wxX2Vycm9yKQotICAgICB9Ci0gICB9Ci0gICAjZW5kaWYKLSAKLS0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NDUKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1NDcKLSAgKiAgICAgICAgICIiIgotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAotICAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFs dWUoY21kbGlzdCwgc2VsZi5fZm9ybWF0X2ZvcihjbWRsaXN0KSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotICAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlcmVzdWx0Ci0gICogICAg ICAgICBjZGVmIGludCBlcnIKLSAgKi8KLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19mb3JtYXRfZm9y KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTQ1LCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVj dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19mb3JtYXRfZm9yKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTQ3LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzIpOwotICAgX19weXhfdF8zID0gTlVMTDsKLSAgIGlmIChDWVRIT05fVU5Q QUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Ci1AQCAt MTAzNzUsMTMgKzEwMzc1LDEzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCi0gICB9Ci0gICBf X3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzIsIF9fcHl4X3RfMywgX19weXhfdl9jbWRsaXN0KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF8yLCBfX3B5eF92X2NtZGxpc3QpOwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgNTQ1LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDU0NywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotICAgX19w eXhfdl9ub2RlID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9wcmVwX25hdGl2ZV92YWx1 ZShfX3B5eF92X3NlbGYsIF9fcHl4X3ZfY21kbGlzdCwgX19weXhfdF8xKTsKLSAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjU0OQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjU1MQotICAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0gICogICAgICAgICBjZGVmIHVpbnQ2NF90 IGRhdGFfaWQKLSAgKiAgICAgICAgIHJlc3VsdCA9IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotQEAgLTEwMzkxLDcgKzEwMzkxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4X28K LSAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLSAgIF9fcHl4X3ZfcmVzdWx0ID0gUHlfTm9uZTsK LSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTAKLSsgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTIKLSAgKiAgICAgICAgIGNkZWYgdWludDY0X3Qg ZGF0YV9pZAotICAqICAgICAgICAgcmVzdWx0ID0gTm9uZQotICAqICAgICAgICAgdHJ5OiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTA0MDAsMzEgKzEwNDAwLDMxIEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21t YW5kKHN0cnVjdCBfX3B5eF9vCi0gICovCi0gICAvKnRyeToqLyB7Ci0gCi0tICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTEKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjU1MwotICAqICAgICAgICAgcmVzdWx0ID0gTm9uZQotICAqICAgICAgICAg dHJ5OgotICAqICAgICAgICAgICAgIGRhdGFfaWQgPSBpZChkYXRhKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czoKLSAgKiAg ICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKLSAgKi8KLS0gICAgX19weXhfdF8xID0gX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF9idWlsdGluX2lkLCBfX3B5eF92X2RhdGEpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NTEsIF9fcHl4X0w0X2Vycm9yKQot KyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5f aWQsIF9fcHl4X3ZfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDU1MywgX19weXhfTDRfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAg ICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5s aWtlbHkoKF9fcHl4X3RfNCA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkp IF9fUFlYX0VSUigwLCA1NTEsIF9fcHl4X0w0X2Vycm9yKQotKyAgICBfX3B5eF90XzQgPSBfX1B5 eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNCA9 PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA1NTMs IF9fcHl4X0w0X2Vycm9yKQotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKLSAgICAgX19weXhfdl9kYXRhX2lkID0gX19weXhfdF80OwotIAotLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTUyCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1NTQKLSAgKiAgICAgICAgIHRyeToKLSAgKiAgICAgICAgICAgICBkYXRh X2lkID0gaWQoZGF0YSkKLSAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6 Ci0gICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlKHNlbGYuX2N0 eCwgJm5vZGUsICZub2RlcmVzdWx0KQotICAqLwotLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9i amVjdF9Jc1RydWUoX19weXhfdl9hc3luY2hyb25vdXMpOyBpZiAodW5saWtlbHkoX19weXhfdF81 IDwgMCkpIF9fUFlYX0VSUigwLCA1NTIsIF9fcHl4X0w0X2Vycm9yKQotKyAgICBfX3B5eF90XzUg PSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9hc3luY2hyb25vdXMpOyBpZiAodW5saWtl bHkoX19weXhfdF81IDwgMCkpIF9fUFlYX0VSUigwLCA1NTQsIF9fcHl4X0w0X2Vycm9yKQotICAg ICBfX3B5eF90XzYgPSAoKCFfX3B5eF90XzUpICE9IDApOwotICAgICBpZiAoX19weXhfdF82KSB7 Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1MwotKyAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTUKLSAgKiAgICAgICAgICAgICBk YXRhX2lkID0gaWQoZGF0YSkKLSAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgot ICAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci1AQCAtMTA0MzksNyArMTA0MzksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbwotICAg ICAgICAgICAjZW5kaWYKLSAgICAgICAgICAgLyp0cnk6Ki8gewotIAotLSAgICAgICAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTQKLSsgICAgICAgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU2Ci0gICogICAgICAgICAgICAgaWYgbm90IGFz eW5jaHJvbm91czoKLSAgKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAg ICAgICAgICAgICAgIGVyciA9IG1wdl9jb21tYW5kX25vZGUoc2VsZi5fY3R4LCAmbm9kZSwgJm5v ZGVyZXN1bHQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMDQ0OSw3ICsxMDQ0 OSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCi0gICAgICAgICAgICAgX19weXhfdl9lcnIg PSBtcHZfY29tbWFuZF9ub2RlKF9fcHl4X3Zfc2VsZi0+X2N0eCwgKCZfX3B5eF92X25vZGUpLCAo Jl9fcHl4X3Zfbm9kZXJlc3VsdCkpOwotICAgICAgICAgICB9Ci0gCi0tICAgICAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTMKLSsgICAgICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjU1NQotICAqICAgICAgICAgICAgIGRhdGFfaWQgPSBpZChk YXRhKQotICAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6Ci0gICogICAgICAgICAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMDQ2 OCw3ICsxMDQ2OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCi0gICAgICAgICAgIH0KLSAg ICAgICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1NQot KyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTcKLSAgKiAgICAgICAg ICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1wdl9j b21tYW5kX25vZGUoc2VsZi5fY3R4LCAmbm9kZSwgJm5vZGVyZXN1bHQpCi0gICogICAgICAgICAg ICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEwNDc3LDcgKzEw NDc3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4X28KLSAgKi8KLSAgICAgICAvKnRyeToqLyB7 Ci0gCi0tICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU2Ci0rICAg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU4Ci0gICogICAgICAgICAg ICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlKHNlbGYuX2N0eCwgJm5vZGUsICZub2Rl cmVzdWx0KQotICAqICAgICAgICAgICAgICAgICB0cnk6Ci0gICogICAgICAgICAgICAgICAgICAg ICByZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQpIGlmIGVyciA+PSAwIGVs c2UgTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTA0ODUsNyArMTA0ODUs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbwotICAqICAgICAgICAgICAgICAgICAgICAgd2l0 aCBub2dpbDoKLSAgKi8KLSAgICAgICAgIGlmICgoKF9fcHl4X3ZfZXJyID49IDApICE9IDApKSB7 Ci0tICAgICAgICAgIF9fcHl4X3RfMiA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19j b252ZXJ0X25vZGVfdmFsdWUoX19weXhfdl9ub2RlcmVzdWx0KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgNTU2LCBfX3B5eF9MMTFfZXJyb3IpCi0rICAgICAgICAgIF9f cHl4X3RfMiA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFs dWUoX19weXhfdl9ub2RlcmVzdWx0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgNTU4LCBfX3B5eF9MMTFfZXJyb3IpCi0gICAgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOwotICAgICAgICAgICBfX3B5eF90XzEgPSBfX3B5eF90XzI7Ci0gICAgICAgICAgIF9f cHl4X3RfMiA9IDA7Ci1AQCAtMTA0OTcsNyArMTA0OTcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19w eXhfbwotICAgICAgICAgX19weXhfdF8xID0gMDsKLSAgICAgICB9Ci0gCi0tICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1OAotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo1NjAKLSAgKiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9j b252ZXJ0X25vZGVfdmFsdWUobm9kZXJlc3VsdCkgaWYgZXJyID49IDAgZWxzZSBOb25lCi0gICog ICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICogICAgICAgICAgICAgICAgICAgICB3aXRoIG5v Z2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTA1MTQsNyArMTA1MTQsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbwotICAgICAgICAgICAgICAgI2VuZGlmCi0gICAgICAg ICAgICAgICAvKnRyeToqLyB7Ci0gCi0tICAgICAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo1NTkKLSsgICAgICAgICAgICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjU2MQotICAqICAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAqICAg ICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAgICAgICAgICAgICAg ICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2RlcmVzdWx0KSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci1AQCAtMTA1MjQsNyArMTA1MjQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhf bwotICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCgmX19weXhfdl9ub2Rl cmVzdWx0KSk7Ci0gICAgICAgICAgICAgICB9Ci0gCi0tICAgICAgICAgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU4Ci0rICAgICAgICAgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NTYwCi0gICogICAgICAgICAgICAgICAgICAgICByZXN1bHQg PSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQpIGlmIGVyciA+PSAwIGVsc2UgTm9uZQot ICAqICAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAqICAgICAgICAgICAgICAgICAgICAgd2l0 aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEwNTcwLDcgKzEwNTcw LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4X28KLSAgICAgICAgICAgICAgICAgI2VuZGlmCi0g ICAgICAgICAgICAgICAgIC8qdHJ5OiovIHsKLSAKLS0gICAgICAgICAgICAgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU5Ci0rICAgICAgICAgICAgICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2MQotICAqICAgICAgICAgICAgICAgICBmaW5h bGx5OgotICAqICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAg ICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2RlcmVzdWx0KSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTA1ODAsNyArMTA1ODAsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChz dHJ1Y3QgX19weXhfbwotICAgICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMo KCZfX3B5eF92X25vZGVyZXN1bHQpKTsKLSAgICAgICAgICAgICAgICAgfQotIAotLSAgICAgICAg ICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU4Ci0rICAgICAgICAg ICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjAKLSAgKiAgICAgICAg ICAgICAgICAgICAgIHJlc3VsdCA9IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZXJlc3VsdCkgaWYg ZXJyID49IDAgZWxzZSBOb25lCi0gICogICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICogICAg ICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtMTA2MTYsNyArMTA2MTYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbwotICAgICAg ICAgX19weXhfTDEyOjsKLSAgICAgICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjU1MgotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo1NTQKLSAgKiAgICAgICAgIHRyeToKLSAgKiAgICAgICAgICAgICBkYXRhX2lkID0gaWQoZGF0 YSkKLSAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci1AQCAtMTA2MjYsNyArMTA2MjYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19w eXhfbwotICAgICAgIGdvdG8gX19weXhfTDY7Ci0gICAgIH0KLSAKLS0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjU2MQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTYzCi0gICogICAgICAgICAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9j b250ZW50cygmbm9kZXJlc3VsdCkKLSAgKiAgICAgICAgICAgICBlbHNlOgotICAqICAgICAgICAg ICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25l KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTA2MzQsOSArMTA2MzQsOSBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84 Y29tbWFuZChzdHJ1Y3QgX19weXhfbwotICAqICAgICAgICAgICAgICAgICAgICAgX3JlcGx5X3Vz ZXJkYXRhc1tkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCi0gICov Ci0gICAgIC8qZWxzZSovIHsKLS0gICAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X25fc19nZXQpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1NjEsIF9fcHl4X0w0X2Vycm9yKQot KyAgICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxm LT5yZXBseV91c2VyZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDU2MywgX19weXhfTDRfZXJyb3IpCi0gICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7Ci0tICAgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRf dChfX3B5eF92X2RhdGFfaWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigw LCA1NjEsIF9fcHl4X0w0X2Vycm9yKQotKyAgICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zy b21fdWludDY0X3QoX19weXhfdl9kYXRhX2lkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBf X1BZWF9FUlIoMCwgNTYzLCBfX3B5eF9MNF9lcnJvcikKLSAgICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8zKTsKLSAgICAgICBfX3B5eF90XzE2ID0gTlVMTDsKLSAgICAgICBfX3B5eF90XzggPSAw OwotQEAgLTEwNjUzLDcgKzEwNjUzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4X28KLSAgICAg ICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCi0gICAgICAgaWYgKFB5RnVuY3Rpb25fQ2hlY2soX19w eXhfdF8yKSkgewotICAgICAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF8x NiwgX19weXhfdF8zLCBQeV9Ob25lfTsKLS0gICAgICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5RnVu Y3Rpb25fRmFzdENhbGwoX19weXhfdF8yLCBfX3B5eF90ZW1wKzEtX19weXhfdF84LCAyK19fcHl4 X3RfOCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU2MSwgX19weXhf TDRfZXJyb3IpCi0rICAgICAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxs KF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3RfOCwgMitfX3B5eF90XzgpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NjMsIF9fcHl4X0w0X2Vycm9yKQotICAg ICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE2KTsgX19weXhfdF8xNiA9IDA7Ci0gICAgICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOwotQEAgLTEwNjYyLDE0ICsxMDY2MiwxNCBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChz dHJ1Y3QgX19weXhfbwotICAgICAgICNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCi0gICAgICAgaWYg KF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzIpKSB7Ci0gICAgICAgICBQeU9i amVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzE2LCBfX3B5eF90XzMsIFB5X05vbmV9Owot LSAgICAgICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8y LCBfX3B5eF90ZW1wKzEtX19weXhfdF84LCAyK19fcHl4X3RfOCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDU2MSwgX19weXhfTDRfZXJyb3IpCi0rICAgICAgICBfX3B5 eF90XzEgPSBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzIsIF9fcHl4X3RlbXAr MS1fX3B5eF90XzgsIDIrX19weXhfdF84KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgNTYzLCBfX3B5eF9MNF9lcnJvcikKLSAgICAgICAgIF9fUHl4X1hERUNSRUYoX19w eXhfdF8xNik7IF9fcHl4X3RfMTYgPSAwOwotICAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7Ci0gICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSAg ICAgICB9IGVsc2UKLSAgICAgICAjZW5kaWYKLSAgICAgICB7Ci0tICAgICAgICBfX3B5eF90XzE3 ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMTcpKSBf X1BZWF9FUlIoMCwgNTYxLCBfX3B5eF9MNF9lcnJvcikKLSsgICAgICAgIF9fcHl4X3RfMTcgPSBQ eVR1cGxlX05ldygyK19fcHl4X3RfOCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xNykpIF9fUFlY X0VSUigwLCA1NjMsIF9fcHl4X0w0X2Vycm9yKQotICAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMTcpOwotICAgICAgICAgaWYgKF9fcHl4X3RfMTYpIHsKLSAgICAgICAgICAgX19QeXhfR0lW RVJFRihfX3B5eF90XzE2KTsgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzE3LCAwLCBfX3B5eF90 XzE2KTsgX19weXhfdF8xNiA9IE5VTEw7Ci1AQCAtMTA2ODAsNyArMTA2ODAsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFu ZChzdHJ1Y3QgX19weXhfbwotICAgICAgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKLSAgICAg ICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xNywgMStfX3B5eF90XzgsIFB5X05vbmUpOwot ICAgICAgICAgX19weXhfdF8zID0gMDsKLS0gICAgICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2Jq ZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90XzE3LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNTYxLCBfX3B5eF9MNF9lcnJvcikKLSsgICAgICAgIF9fcHl4 X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90XzE3LCBOVUxMKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTYzLCBfX3B5eF9MNF9lcnJv cikKLSAgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgICAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMTcpOyBfX3B5eF90XzE3ID0gMDsKLSAgICAgICB9Ci1AQCAtMTA2ODgsNyAr MTA2ODgsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbwotICAgICAgIF9fcHl4X3ZfdXNlcmRh dGFzID0gX19weXhfdF8xOwotICAgICAgIF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2MgotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo1NjQKLSAgKiAgICAgICAgICAgICBlbHNlOgotICAqICAgICAgICAg ICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25l KQotICAqICAgICAgICAgICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotQEAgLTEwNjk5LDE0ICsxMDY5OSwxNCBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1 Y3QgX19weXhfbwotICAgICAgIF9fcHl4X3RfNSA9IChfX3B5eF90XzYgIT0gMCk7Ci0gICAgICAg aWYgKF9fcHl4X3RfNSkgewotIAotLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjU2MwotKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2 NQotICAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdl dChkYXRhX2lkLCBOb25lKQotICAqICAgICAgICAgICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9u ZToKLSAgKiAgICAgICAgICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0YXNbZGF0YV9pZF0gPSB1 c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0gICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQotICAqICAgICAgICAgICAg ICAgICB3aXRoIG5vZ2lsOgotICAqLwotLSAgICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzIsIF9fcHl4X25fc19SZXBseVVzZXJEYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgNTYzLCBfX3B5eF9MNF9lcnJvcikKLSsgICAgICAgIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSk7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU2NSwgX19weXhfTDRfZXJy b3IpCi0gICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgICAgICAgIF9fcHl4X3Rf MTcgPSBOVUxMOwotICAgICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2Vs eShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotQEAgLTEwNzIwLDE1ICsxMDcyMCwxNSBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbwotICAgICAgICAgfQotICAgICAgICAgX19weXhfdF8x ID0gKF9fcHl4X3RfMTcpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19w eXhfdF8xNywgX19weXhfdl9kYXRhKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhf dF8yLCBfX3B5eF92X2RhdGEpOwotICAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE3KTsg X19weXhfdF8xNyA9IDA7Ci0tICAgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA1NjMsIF9fcHl4X0w0X2Vycm9yKQotKyAgICAgICAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNTY1LCBfX3B5eF9MNF9lcnJvcikKLSAgICAgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotICAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9f cHl4X3RfMiA9IDA7Ci0tICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfU2V0SXRlbUludChfX3B5 eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2RhdGFf aWQsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAs IDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA1NjMsIF9fcHl4X0w0X2Vycm9yKQotKyAgICAgICAg aWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX3JlcGx5X3VzZXJkYXRhcywgX19weXhfdl9kYXRhX2lkLCBfX3B5eF90XzEsIHVpbnQ2NF90 LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIo MCwgNTY1LCBfX3B5eF9MNF9lcnJvcikKLSAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEp OwotICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3VzZXJkYXRhcywgX19weXhfdF8x KTsKLSAgICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAot LSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2MgotKyAgICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2NAotICAqICAgICAgICAgICAgIGVs c2U6Ci0gICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEu Z2V0KGRhdGFfaWQsIE5vbmUpCi0gICogICAgICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBO b25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTA3MzcsMTQgKzEwNzM3LDE0 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCi0gICovCi0gICAgICAgfQotIAotLSAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjQKLSsgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NTY2Ci0gICogICAgICAgICAgICAgICAgIGlmIHVzZXJkYXRh cyBpcyBOb25lOgotICAqICAgICAgICAgICAgICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tkYXRh X2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCi0gICogICAgICAgICAgICAg ICAgIHVzZXJkYXRhcy5hZGQoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAg ICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0gICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBt cHZfY29tbWFuZF9ub2RlX2FzeW5jKHNlbGYuX2N0eCwgZGF0YV9pZCwgJm5vZGUpCi0gICovCi0t ICAgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJk YXRhcywgX19weXhfbl9zX2FkZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDU2NCwgX19weXhfTDRfZXJyb3IpCi0rICAgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX2FkZCk7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU2NiwgX19weXhfTDRfZXJyb3IpCi0gICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0gICAgICAgX19weXhfdF8xNyA9IE5VTEw7Ci0g ICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF8yKSkpIHsKLUBAIC0xMDc1OCwxMiArMTA3NTgsMTIgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0 IF9fcHl4X28KLSAgICAgICB9Ci0gICAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfMTcpID8gX19Q eXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMTcpIDogX19QeXhfUHlP YmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7Ci0gICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzE3KTsgX19weXhfdF8xNyA9IDA7Ci0tICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgNTY0LCBfX3B5eF9MNF9lcnJvcikKLSsgICAgICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NjYsIF9fcHl4X0w0X2Vycm9yKQotICAgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5 eF90XzIgPSAwOwotICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OwotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjUKLSsgICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY3Ci0gICogICAgICAgICAgICAg ICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNl ckRhdGEoZGF0YSkKLSAgKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCi0gICogICAg ICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC0xMDc3OCw3ICsxMDc3OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCi0gICAgICAgICAg ICNlbmRpZgotICAgICAgICAgICAvKnRyeToqLyB7Ci0gCi0tICAgICAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2NgotKyAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1NjgKLSAgKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFk ZCgpCi0gICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0gICogICAgICAgICAgICAgICAg ICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlX2FzeW5jKHNlbGYuX2N0eCwgZGF0YV9pZCwgJm5v ZGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMDc4OCw3ICsxMDc4OCw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCi0gICAgICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZf Y29tbWFuZF9ub2RlX2FzeW5jKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9kYXRhX2lkLCAo Jl9fcHl4X3Zfbm9kZSkpOwotICAgICAgICAgICB9Ci0gCi0tICAgICAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjUKLSsgICAgICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjU2NwotICAqICAgICAgICAgICAgICAgICAgICAgX3JlcGx5X3VzZXJk YXRhc1tkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCi0gICogICAg ICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQotICAqICAgICAgICAgICAgICAgICB3aXRoIG5v Z2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTA4MTAsNyArMTA4MTAsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbwotICAgICBfX3B5eF9MNjo7Ci0gICB9Ci0gCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY4Ci0rICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTcwCi0gICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZf Y29tbWFuZF9ub2RlX2FzeW5jKHNlbGYuX2N0eCwgZGF0YV9pZCwgJm5vZGUpCi0gICogICAgICAg ICBmaW5hbGx5OgotICAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKG5vZGUp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMDgxOSw3ICsxMDgxOSw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhj b21tYW5kKHN0cnVjdCBfX3B5eF9vCi0gICovCi0gICAvKmZpbmFsbHk6Ki8gewotICAgICAvKm5v cm1hbCBleGl0OiovewotLSAgICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1 Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0 YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X25vZGUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NjgsIF9fcHl4X0wxX2Vycm9yKQot KyAgICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRp dmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X25vZGUpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCA1NzAsIF9fcHl4X0wxX2Vycm9yKQotICAgICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOwotICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOwotICAgICAgIGdvdG8gX19weXhfTDU7Ci1AQCAtMTA4NDQsNyArMTA4NDQsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84 Y29tbWFuZChzdHJ1Y3QgX19weXhfbwotICAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMCk7 Ci0gICAgICAgX19weXhfdF84ID0gX19weXhfbGluZW5vOyBfX3B5eF90XzcgPSBfX3B5eF9jbGlu ZW5vOyBfX3B5eF90XzE4ID0gX19weXhfZmlsZW5hbWU7Ci0gICAgICAgewotLSAgICAgICAgX19w eXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShf X3B5eF92X3NlbGYsIF9fcHl4X3Zfbm9kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDU2OCwgX19weXhfTDI2X2Vycm9yKQotKyAgICAgICAgX19weXhfdF8xID0gKChz dHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9f cHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYs IF9fcHl4X3Zfbm9kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU3 MCwgX19weXhfTDI2X2Vycm9yKQotICAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0g ICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAgICAgICB9 Ci1AQCAtMTA4NzcsNyArMTA4NzcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbwotICAgICBf X3B5eF9MNTo7Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTY5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcxCi0gICogICAgICAg ICBmaW5hbGx5OgotICAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKG5vZGUp Ci0gICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1A QCAtMTA4ODcsMTYgKzEwODg3LDE2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCi0gICBfX3B5 eF90XzUgPSAoKF9fcHl4X3ZfZXJyIDwgMCkgIT0gMCk7Ci0gICBpZiAodW5saWtlbHkoX19weXhf dF81KSkgewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcwCi0r ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzIKLSAgKiAgICAgICAgICAg ICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlKQotICAqICAgICAgICAgaWYgZXJyIDwgMDoK LSAgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSAgKiAgICAgICAgIHJldHVybiByZXN1bHQKLSAgKiAKLSAgKi8KLS0gICAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19NUFZFcnJvcik7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU3MCwgX19weXhfTDFfZXJyb3Ip Ci0rICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfTVBW RXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1NzIsIF9fcHl4 X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19weXhfdF8x NyA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzE3KSkgX19QWVhfRVJSKDAsIDU3MCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3Rf MTcgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19w eXhfdF8xNykpIF9fUFlYX0VSUigwLCA1NzIsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xNyk7Ci0gICAgIF9fcHl4X3RfMyA9IE5VTEw7Ci0gICAgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkp IHsKLUBAIC0xMDkxMSwxNCArMTA5MTEsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4X28KLSAg ICAgX19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19w eXhfdF8yLCBfX3B5eF90XzMsIF9fcHl4X3RfMTcpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZyhfX3B5eF90XzIsIF9fcHl4X3RfMTcpOwotICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7 IF9fcHl4X3RfMyA9IDA7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzE3KTsgX19weXhfdF8x NyA9IDA7Ci0tICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU3MCwg X19weXhfTDFfZXJyb3IpCi0rICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDU3MiwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSAgICAgX19QeXhf UmFpc2UoX19weXhfdF8xLCAwLCAwLCAwKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7Ci0tICAgIF9fUFlYX0VSUigwLCA1NzAsIF9fcHl4X0wxX2Vycm9yKQot KyAgICBfX1BZWF9FUlIoMCwgNTcyLCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2OQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTcxCi0gICogICAgICAgICBmaW5hbGx5OgotICAqICAgICAgICAgICAgIHNl bGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKG5vZGUpCi0gICogICAgICAgICBpZiBlcnIgPCAwOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTA5MjcsNyArMTA5MjcsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFu ZChzdHJ1Y3QgX19weXhfbwotICAqLwotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjU3MQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU3 MwotICAqICAgICAgICAgaWYgZXJyIDwgMDoKLSAgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJv cihlcnIpCi0gICogICAgICAgICByZXR1cm4gcmVzdWx0ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLUBAIC0xMDkzOSw3ICsxMDkzOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCi0g ICBfX3B5eF9yID0gX19weXhfdl9yZXN1bHQ7Ci0gICBnb3RvIF9fcHl4X0wwOwotIAotLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUzMAotKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjUzMgotICAqICAgICAgICAgICAgIGZyZWUobm9kZS51LnN0cmluZykK LSAgKiAKLSAgKiAgICAgZGVmIGNvbW1hbmQoc2VsZiwgKmNtZGxpc3QsIGFzeW5jaHJvbm91cz1G YWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEwOTY0 LDcgKzEwOTY0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4X28KLSAgIHJldHVybiBfX3B5eF9y OwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTc0Ci0rLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU3NgotICAqIAotICAqICAgICBAX2Vycm9ycwot ICAqICAgICBkZWYgZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMTAxMiw3ICsxMTAxMiw3IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExZ2V0 X3Byb3BlcnR5X2FzeW5jKFB5Ci0gICAgICAgICB9Ci0gICAgICAgfQotICAgICAgIGlmICh1bmxp a2VseShrd19hcmdzID4gMCkpIHsKLS0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9w dGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBw b3NfYXJncywgImdldF9wcm9wZXJ0eV9hc3luYyIpIDwgMCkpIF9fUFlYX0VSUigwLCA1NzQsIF9f cHl4X0wzX2Vycm9yKQotKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxL ZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdz LCAiZ2V0X3Byb3BlcnR5X2FzeW5jIikgPCAwKSkgX19QWVhfRVJSKDAsIDU3NiwgX19weXhfTDNf ZXJyb3IpCi0gICAgICAgfQotICAgICB9IGVsc2UgewotICAgICAgIHN3aXRjaCAoUHlUdXBsZV9H RVRfU0laRShfX3B5eF9hcmdzKSkgewotQEAgLTExMDI4LDcgKzExMDI4LDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTFnZXRfcHJv cGVydHlfYXN5bmMoUHkKLSAgIH0KLSAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5n X2RvbmU7Ci0gICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Ci0tICBfX1B5eF9SYWlzZUFyZ3R1 cGxlSW52YWxpZCgiZ2V0X3Byb3BlcnR5X2FzeW5jIiwgMCwgMSwgMiwgUHlUdXBsZV9HRVRfU0la RShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4X0wzX2Vycm9yKQotKyAgX19Q eXhfUmFpc2VBcmd0dXBsZUludmFsaWQoImdldF9wcm9wZXJ0eV9hc3luYyIsIDAsIDEsIDIsIFB5 VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNTc2LCBfX3B5eF9MM19l cnJvcikKLSAgIF9fcHl4X0wzX2Vycm9yOjsKLSAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0 dGVyLmxpYnMubXB2LkNvbnRleHQuZ2V0X3Byb3BlcnR5X2FzeW5jIiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKLUBAIC0xMTA2NCw3ICsxMTA2NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2FzeW5jKHN0 Ci0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0X3Byb3BlcnR5X2FzeW5jIiwgMCk7 Ci0gICBfX1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo1ODMKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo1ODUKLSAgKiAgICAgICAgIGRhdGE6IFZhbHVlIHRvIGJlIHBhc3NlZCBpbnRvIHRoZSByZXBs eV91c2VyZGF0YSBvZiB0aGUgcmVzcG9uc2UgZXZlbnQuCi0gICogICAgICAgICBXcmFwczogbXB2 X2dldF9wcm9wZXJ0eV9hc3luYyIiIgotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTEwNzUsMTkgKzExMDc1LDE5IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0 X3Byb3BlcnR5X2FzeW5jKHN0Ci0gICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsK LSAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewotICAgICAg IFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOwotLSAgICAgIF9fUFlYX0VSUigw LCA1ODMsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fUFlYX0VSUigwLCA1ODUsIF9fcHl4X0wx X2Vycm9yKQotICAgICB9Ci0gICB9Ci0gICAjZW5kaWYKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo1ODQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo1ODYKLSAgKiAgICAgICAgIFdyYXBzOiBtcHZfZ2V0X3Byb3BlcnR5X2FzeW5jIiIiCi0gICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0gICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9w KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBjZGVmIHVpbnQ2NF90 IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQotICAqICAgICAgICAgdXNlcmRhdGFzID0g c2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKLSAgKi8KLS0gIF9fUHl4X0dl dE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTg0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTg2LCBfX3B5eF9MMV9lcnJvcikK LSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotICAgX19weXhfdF8zID0gTlVMTDsKLSAgIGlm IChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhf dF8yKSkpIHsKLUBAIC0xMTEwMSwzMiArMTExMDEsMzIgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlfYXN5bmMo c3QKLSAgIH0KLSAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2Fs bDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X3Byb3ApIDogX19QeXhfUHlPYmpl Y3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfcHJvcCk7Ci0gICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCA1ODQsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNTg2LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 Ci0gICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfcHJvcCwgX19weXhfdF8xKTsKLSAgIF9fcHl4 X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTg1Ci0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTg3Ci0gICogICAgICAgICBhc3Nl cnQgc2VsZi5fY3R4Ci0gICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKQotICAqICAgICAg ICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91 c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKLSAgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBO b25lOgotICAqLwotLSAgX19weXhfdF80ID0gUHlPYmplY3RfSGFzaChfX3B5eF92X2RhdGEpOyBp ZiAodW5saWtlbHkoX19weXhfdF80ID09ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlYX0VSUigwLCA1 ODUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF80ID0gUHlPYmplY3RfSGFzaChfX3B5eF92 X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF80ID09ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlY X0VSUigwLCA1ODcsIF9fcHl4X0wxX2Vycm9yKQotICAgX19weXhfdl9pZF9kYXRhID0gKCh1aW50 NjRfdClfX3B5eF90XzQpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjU4NgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4OAotICAqICAgICAg ICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKLSAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0 YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCi0gICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJl cGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0gICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKLSAgKiAgICAgICAgICAgICBz ZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEo ZGF0YSkKLSAgKi8KLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19w eXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU4NiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90 XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRh dGEsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigw LCA1ODgsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBf X3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfaWRfZGF0YSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDU4NiwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfaWRfZGF0 YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDU4OCwgX19weXhfTDFf ZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSAgIF9fcHl4X3RfNSA9IE5VTEw7 Ci0gICBfX3B5eF90XzYgPSAwOwotQEAgLTExMTQzLDcgKzExMTQzLDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVy dHlfYXN5bmMoc3QKLSAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKLSAgIGlmIChQeUZ1bmN0aW9u X0NoZWNrKF9fcHl4X3RfMikpIHsKLSAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19w eXhfdF81LCBfX3B5eF90XzMsIFB5X05vbmV9OwotLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1 bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5 eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODYsIF9fcHl4 X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9f cHl4X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQotICAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0gICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKLUBAIC0xMTE1MiwxNCArMTExNTIsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlfYXN5bmMoc3QKLSAg ICNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCi0gICBpZiAoX19QeXhfUHlGYXN0Q0Z1bmN0aW9uX0No ZWNrKF9fcHl4X3RfMikpIHsKLSAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhf dF81LCBfX3B5eF90XzMsIFB5X05vbmV9OwotLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUNGdW5j dGlvbl9GYXN0Q2FsbChfX3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5eF90XzYsIDIrX19weXhf dF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTg2LCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19w eXhfdF8yLCBfX3B5eF90ZW1wKzEtX19weXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU4OCwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9f UHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLSAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAw OwotICAgfSBlbHNlCi0gICAjZW5kaWYKLSAgIHsKLS0gICAgX19weXhfdF83ID0gUHlUdXBsZV9O ZXcoMitfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA1 ODYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygyK19fcHl4 X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDU4OCwgX19weXhf TDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotICAgICBpZiAoX19weXhf dF81KSB7Ci0gICAgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzUpOyBQeVR1cGxlX1NFVF9JVEVN KF9fcHl4X3RfNywgMCwgX19weXhfdF81KTsgX19weXhfdF81ID0gTlVMTDsKLUBAIC0xMTE3MCw3 ICsxMTE3MCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2FzeW5jKHN0Ci0gICAgIF9fUHl4X0dJVkVSRUYo UHlfTm9uZSk7Ci0gICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfNiwg UHlfTm9uZSk7Ci0gICAgIF9fcHl4X3RfMyA9IDA7Ci0tICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5 T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90 XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMiwgX19weXhfdF83LCBOVUxMKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTg4LCBfX3B5eF9MMV9lcnJvcikK LSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzcpOyBfX3B5eF90XzcgPSAwOwotICAgfQotQEAgLTExMTc4LDcgKzExMTc4LDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRf cHJvcGVydHlfYXN5bmMoc3QKLSAgIF9fcHl4X3ZfdXNlcmRhdGFzID0gX19weXhfdF8xOwotICAg X19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 ODcKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODkKLSAgKiAgICAgICAg IGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCi0gICogICAgICAg ICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQotICAq ICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLUBAIC0xMTE4OSwxNCArMTExODksMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlfYXN5bmMoc3QKLSAg IF9fcHl4X3RfOSA9IChfX3B5eF90XzggIT0gMCk7Ci0gICBpZiAoX19weXhfdF85KSB7Ci0gCi0t ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODgKLSsgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MAotICAqICAgICAgICAgdXNlcmRhdGFzID0gc2Vs Zi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKLSAgKiAgICAgICAgIGlmIHVzZXJk YXRhcyBpcyBOb25lOgotICAqICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0 YV0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0gICogICAgICAgICB1c2VyZGF0YXMuYWRkKCkKLSAgKiAgICAgICAgIGNkZWYg Y29uc3QgY2hhciogcHJvcF9jID0gcHJvcAotICAqLwotLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9i YWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX1JlcGx5VXNlckRhdGEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5 eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX1JlcGx5VXNlckRhdGEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1OTAsIF9fcHl4X0wxX2Vy cm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgICAgX19weXhfdF83ID0gTlVM TDsKLSAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9D aGVjayhfX3B5eF90XzIpKSkgewotQEAgLTExMjEwLDE1ICsxMTIxMCwxNSBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMGdldF9wcm9w ZXJ0eV9hc3luYyhzdAotICAgICB9Ci0gICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzcpID8gX19Q eXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF83LCBfX3B5eF92X2RhdGEp IDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfZGF0YSk7Ci0g ICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLS0gICAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTg4LCBfX3B5eF9MMV9lcnJvcikKLSsg ICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTkwLCBfX3B5eF9MMV9l cnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgICBpZiAodW5saWtlbHkoX19QeXhfU2V0SXRl bUludChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2lkX2RhdGEsIF9fcHl4 X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpIDwg MCkpIF9fUFlYX0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBpZiAodW5saWtlbHko X19QeXhfU2V0SXRlbUludChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2lk X2RhdGEsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3Qs IDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA1OTAsIF9fcHl4X0wxX2Vycm9yKQotICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF8xKTsKLSAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3Vz ZXJkYXRhcywgX19weXhfdF8xKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4 X3RfMSA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODcK LSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4OQotICAqICAgICAgICAg Y2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKLSAgKiAgICAgICAg IHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCi0gICog ICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotQEAgLTExMjI3LDE0ICsxMTIyNywxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMGdldF9wcm9wZXJ0eV9hc3luYyhzdAotICAq LwotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4OQotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MQotICAqICAgICAgICAgaWYgdXNl cmRhdGFzIGlzIE5vbmU6Ci0gICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9k YXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCi0gICogICAgICAgICB1c2Vy ZGF0YXMuYWRkKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgY2Rl ZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wCi0gICogICAgICAgICB3aXRoIG5vZ2lsOgotICAq LwotLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJk YXRhcywgX19weXhfbl9zX2FkZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDU4OSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9H ZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3NfYWRkKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTkxLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOwotICAgX19weXhfdF83ID0gTlVMTDsKLSAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Ci1A QCAtMTEyNDgsMjIgKzExMjQ4LDIyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2FzeW5jKHN0Ci0gICB9Ci0g ICBfX3B5eF90XzEgPSAoX19weXhfdF83KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfdF8yLCBfX3B5eF90XzcpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7 Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0tICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODksIF9fcHl4X0wxX2Vycm9yKQotKyAg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTkxLCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Mik7IF9fcHl4X3RfMiA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OTAKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OTIKLSAgKiAgICAgICAgICAgICBzZWxm LnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0 YSkKLSAgKiAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQotICAqICAgICAgICAgY2RlZiBjb25zdCBj aGFyKiBwcm9wX2MgPSBwcm9wICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAg ICAgIHdpdGggbm9naWw6Ci0gICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9wZXJ0eV9h c3luYygKLSAgKi8KLS0gIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5 eF92X3Byb3ApOyBpZiAodW5saWtlbHkoKCFfX3B5eF90XzEwKSAmJiBQeUVycl9PY2N1cnJlZCgp KSkgX19QWVhfRVJSKDAsIDU5MCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEwID0gX19Q eXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9wcm9wKTsgaWYgKHVubGlrZWx5KCghX19weXhf dF8xMCkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA1OTIsIF9fcHl4X0wxX2Vy cm9yKQotICAgX19weXhfdl9wcm9wX2MgPSBfX3B5eF90XzEwOwotIAotLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjU5MQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjU5MwotICAqICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCi0gICogICAgICAgICBjZGVm IGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AKLSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMTI3OCw3ICsxMTI3OCw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3By b3BlcnR5X2FzeW5jKHN0Ci0gICAgICAgI2VuZGlmCi0gICAgICAgLyp0cnk6Ki8gewotIAotLSAg ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MgotKyAgICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5NAotICAqICAgICAgICAgY2RlZiBjb25z dCBjaGFyKiBwcm9wX2MgPSBwcm9wCi0gICogICAgICAgICB3aXRoIG5vZ2lsOgotICAqICAgICAg ICAgICAgIGVyciA9IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMoICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLUBAIC0xMTI4OCw3ICsxMTI4OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2FzeW5jKHN0 Ci0gICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMoX19weXhfdl9z ZWxmLT5fY3R4LCBfX3B5eF92X2lkX2RhdGEsIF9fcHl4X3ZfcHJvcF9jLCBNUFZfRk9STUFUX05P REUpOwotICAgICAgIH0KLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTkxCi0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MwotICAq ICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCi0gICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHBy b3BfYyA9IHByb3AKLSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLUBAIC0xMTMwNyw3ICsxMTMwNyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2FzeW5jKHN0 Ci0gICAgICAgfQotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjU5OAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwMAotICAqICAgICAg ICAgICAgICAgICBNUFZfRk9STUFUX05PREUsCi0gICogICAgICAgICAgICAgKQotICAqICAgICAg ICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTEzMTUsMTMg KzExMzE1LDEzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2FzeW5jKHN0Ci0gICogICAgIGRlZiB0cnlfZ2V0 X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSwgZGVmYXVsdD1Ob25lKToKLSAg Ki8KLSAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9QeUlu dF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDU5OCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9G cm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDYwMCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAg IF9fcHl4X3IgPSBfX3B5eF90XzE7Ci0gICBfX3B5eF90XzEgPSAwOwotICAgZ290byBfX3B5eF9M MDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzQKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzYKLSAgKiAKLSAgKiAgICAgQF9lcnJvcnMK LSAgKiAgICAgZGVmIGdldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9wLCBkYXRhPU5vbmUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTEzNDYsNyArMTEzNDYsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMGdl dF9wcm9wZXJ0eV9hc3luYyhzdAotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDAKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjAyCi0gICogICAgICAgICByZXR1cm4gZXJyCi0gICogCi0gICogICAgIGRlZiB0 cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSwgZGVmYXVsdD1Ob25l KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTExNDAzLDcgKzExNDAzLDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MTN0cnlfZ2V0X3Byb3BlcnR5X2FzeW4KLSAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAgaWYg KHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewotLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1Bh cnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1 ZXMsIHBvc19hcmdzLCAidHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIpIDwgMCkpIF9fUFlYX0VSUigw LCA2MDAsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNl T3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMs IHBvc19hcmdzLCAidHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIpIDwgMCkpIF9fUFlYX0VSUigwLCA2 MDIsIF9fcHl4X0wzX2Vycm9yKQotICAgICAgIH0KLSAgICAgfSBlbHNlIHsKLSAgICAgICBzd2l0 Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpIHsKLUBAIC0xMTQyMiw3ICsxMTQyMiw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzEzdHJ5X2dldF9wcm9wZXJ0eV9hc3luCi0gICB9Ci0gICBnb3RvIF9fcHl4X0w0X2FyZ3Vt ZW50X3VucGFja2luZ19kb25lOwotICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6OwotLSAgX19Q eXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInRyeV9nZXRfcHJvcGVydHlfYXN5bmMiLCAwLCAxLCAz LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDYwMCwgX19weXhf TDNfZXJyb3IpCi0rICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgidHJ5X2dldF9wcm9wZXJ0 eV9hc3luYyIsIDAsIDEsIDMsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9F UlIoMCwgNjAyLCBfX3B5eF9MM19lcnJvcikKLSAgIF9fcHl4X0wzX2Vycm9yOjsKLSAgIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQudHJ5X2dldF9wcm9wZXJ0 eV9hc3luYyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwot ICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci1AQCAtMTE0NTEsNyArMTE0NTEsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xMnRyeV9nZXRfcHJvcGVydHlfYXN5bgotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotICAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInRyeV9nZXRfcHJvcGVydHlfYXN5bmMiLCAwKTsK LSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDEKLSsgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDMKLSAgKiAKLSAgKiAgICAgZGVmIHRyeV9nZXRf cHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lLCBkZWZhdWx0PU5vbmUpOgotICAq ICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTE0NjcsNyAr MTE0NjcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8xMnRyeV9nZXRfcHJvcGVydHlfYXN5bgotICAgICBfX1B5eF9YR09UUkVGKF9f cHl4X3RfMyk7Ci0gICAgIC8qdHJ5OiovIHsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjAyCi0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjYwNAotICAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9wLCBk YXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6Ci0gICogICAgICAgICB0cnk6Ci0gICogICAgICAgICAg ICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5X2FzeW5jKHByb3AsIGRhdGE9ZGF0YSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTExNDc1LDE3ICsxMTQ3NSwxNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMnRyeV9n ZXRfcHJvcGVydHlfYXN5bgotICAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0gICovCi0g ICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gICAgICBfX3B5eF90XzQgPSBfX1B5eF9Q eU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3Nf Z2V0X3Byb3BlcnR5X2FzeW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIo MCwgNjAyLCBfX3B5eF9MM19lcnJvcikKLSsgICAgICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZ2V0X3By b3BlcnR5X2FzeW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNjA0 LCBfX3B5eF9MM19lcnJvcikKLSAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLS0gICAg ICBfX3B5eF90XzUgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBf X1BZWF9FUlIoMCwgNjAyLCBfX3B5eF9MM19lcnJvcikKLSsgICAgICBfX3B5eF90XzUgPSBQeVR1 cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgNjA0LCBf X3B5eF9MM19lcnJvcikKLSAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKLSAgICAgICBf X1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKLSAgICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zf cHJvcCk7Ci0gICAgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzUsIDAsIF9fcHl4X3ZfcHJv cCk7Ci0tICAgICAgX19weXhfdF82ID0gX19QeXhfUHlEaWN0X05ld1ByZXNpemVkKDEpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA2MDIsIF9fcHl4X0wzX2Vycm9yKQot KyAgICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNjA0LCBfX3B5eF9MM19lcnJvcikKLSAgICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oX19w eXhfdF82LCBfX3B5eF9uX3NfZGF0YSwgX19weXhfdl9kYXRhKSA8IDApIF9fUFlYX0VSUigwLCA2 MDIsIF9fcHl4X0wzX2Vycm9yKQotLSAgICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5T2JqZWN0X0Nh bGwoX19weXhfdF80LCBfX3B5eF90XzUsIF9fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhf dF83KSkgX19QWVhfRVJSKDAsIDYwMiwgX19weXhfTDNfZXJyb3IpCi0rICAgICAgaWYgKFB5RGlj dF9TZXRJdGVtKF9fcHl4X3RfNiwgX19weXhfbl9zX2RhdGEsIF9fcHl4X3ZfZGF0YSkgPCAwKSBf X1BZWF9FUlIoMCwgNjA0LCBfX3B5eF9MM19lcnJvcikKLSsgICAgICBfX3B5eF90XzcgPSBfX1B5 eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfNCwgX19weXhfdF81LCBfX3B5eF90XzYpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA2MDQsIF9fcHl4X0wzX2Vycm9yKQotICAg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOwotICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5 eF90XzUgPSAwOwotQEAgLTExNDk0LDcgKzExNDk0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJ0cnlfZ2V0X3Byb3BlcnR5X2Fz eW4KLSAgICAgICBfX3B5eF90XzcgPSAwOwotICAgICAgIGdvdG8gX19weXhfTDdfdHJ5X3JldHVy bjsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjAxCi0rICAg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwMwotICAqIAotICAqICAgICBk ZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9wLCBkYXRhPU5vbmUsIGRlZmF1bHQ9 Tm9uZSk6Ci0gICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC0xMTUwOCw3ICsxMTUwOCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzEydHJ5X2dldF9wcm9wZXJ0eV9hc3luCi0gICAgIF9fUHl4 X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAgICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NjAzCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 MDUKLSAgKiAgICAgICAgIHRyeToKLSAgKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJv cGVydHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKQotICAqICAgICAgICAgZXhjZXB0IE1QVkVycm9y OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTE1MTYsNyArMTE1MTYsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8x MnRyeV9nZXRfcHJvcGVydHlfYXN5bgotICAqIAotICAqLwotICAgICBfX1B5eF9FcnJGZXRjaCgm X19weXhfdF83LCAmX19weXhfdF82LCAmX19weXhfdF81KTsKLS0gICAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSgh X19weXhfdF80KSkgX19QWVhfRVJSKDAsIDYwMywgX19weXhfTDVfZXhjZXB0X2Vycm9yKQotKyAg ICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX01QVkVycm9y KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNjA1LCBfX3B5eF9MNV9l eGNlcHRfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotICAgICBfX3B5eF90 XzggPSBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoX19weXhfdF83LCBfX3B5eF90 XzQpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLUBAIC0x MTUyNCwxMiArMTE1MjQsMTIgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMTJ0cnlfZ2V0X3Byb3BlcnR5X2FzeW4KLSAgICAgX19weXhf dF83ID0gMDsgX19weXhfdF82ID0gMDsgX19weXhfdF81ID0gMDsKLSAgICAgaWYgKF9fcHl4X3Rf OCkgewotICAgICAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRl eHQudHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOwotLSAgICAgIGlmIChfX1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3Rf NSwgJl9fcHl4X3RfNiwgJl9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNjAzLCBfX3B5eF9M NV9leGNlcHRfZXJyb3IpCi0rICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlvbigmX19weXhfdF81 LCAmX19weXhfdF82LCAmX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2MDUsIF9fcHl4X0w1 X2V4Y2VwdF9lcnJvcikKLSAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKLSAgICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsK LSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA0Ci0rICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwNgotICAqICAgICAgICAgICAgIHJl dHVybiBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhwcm9wLCBkYXRhPWRhdGEpCi0gICogICAgICAg ICBleGNlcHQgTVBWRXJyb3I6Ci0gICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTExNTQ3LDcgKzExNTQ3LDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJ0cnlfZ2V0 X3Byb3BlcnR5X2FzeW4KLSAgICAgZ290byBfX3B5eF9MNV9leGNlcHRfZXJyb3I7Ci0gICAgIF9f cHl4X0w1X2V4Y2VwdF9lcnJvcjo7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo2MDEKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwMwot ICAqIAotICAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9wLCBkYXRh PU5vbmUsIGRlZmF1bHQ9Tm9uZSk6Ci0gICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLUBAIC0xMTU3Myw3ICsxMTU3Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEydHJ5X2dldF9wcm9wZXJ0eV9h c3luCi0gICAgIGdvdG8gX19weXhfTDA7Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjAwCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NjAyCi0gICogICAgICAgICByZXR1cm4gZXJyCi0gICogCi0gICogICAgIGRlZiB0cnlfZ2V0X3By b3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSwgZGVmYXVsdD1Ob25lKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTExNTk1LDcgKzExNTk1LDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJ0cnlfZ2V0 X3Byb3BlcnR5X2FzeW4KLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjA2Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjYwOAotICAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0gICogCi0gICogICAgIGRl ZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9uZSk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMTY0Miw3ICsxMTY0Miw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE1dHJ5X2dldF9wcm9w ZXJ0eShQeU9iCi0gICAgICAgICB9Ci0gICAgICAgfQotICAgICAgIGlmICh1bmxpa2VseShrd19h cmdzID4gMCkpIHsKLS0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5 d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywg InRyeV9nZXRfcHJvcGVydHkiKSA8IDApKSBfX1BZWF9FUlIoMCwgNjA2LCBfX3B5eF9MM19lcnJv cikKLSsgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19w eXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgInRyeV9nZXRf cHJvcGVydHkiKSA8IDApKSBfX1BZWF9FUlIoMCwgNjA4LCBfX3B5eF9MM19lcnJvcikKLSAgICAg ICB9Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4 X2FyZ3MpKSB7Ci1AQCAtMTE2NTgsNyArMTE2NTgsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNXRyeV9nZXRfcHJvcGVydHkoUHlP YgotICAgfQotICAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKLSAgIF9f cHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKLS0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJ0 cnlfZ2V0X3Byb3BlcnR5IiwgMCwgMSwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7 IF9fUFlYX0VSUigwLCA2MDYsIF9fcHl4X0wzX2Vycm9yKQotKyAgX19QeXhfUmFpc2VBcmd0dXBs ZUludmFsaWQoInRyeV9nZXRfcHJvcGVydHkiLCAwLCAxLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9f cHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDYwOCwgX19weXhfTDNfZXJyb3IpCi0gICBfX3B5eF9M M19lcnJvcjo7Ci0gICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250 ZXh0LnRyeV9nZXRfcHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lKTsKLSAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwotQEAgLTExNjg3 LDcgKzExNjg3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMTR0cnlfZ2V0X3Byb3BlcnR5KHN0cnUKLSAgIGludCBfX3B5eF9jbGlu ZW5vID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJ0cnlfZ2V0X3Byb3BlcnR5 IiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA3Ci0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA5Ci0gICogCi0gICogICAgIGRlZiB0 cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9uZSk6Ci0gICogICAgICAgICB0 cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMTcwMyw3ICsxMTcwMyw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzE0dHJ5X2dldF9wcm9wZXJ0eShzdHJ1Ci0gICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsK LSAgICAgLyp0cnk6Ki8gewotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo2MDgKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjEwCi0g ICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9uZSk6Ci0g ICogICAgICAgICB0cnk6Ci0gICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5 KHByb3ApICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMTcxMSw3ICsxMTcxMSw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzE0dHJ5X2dldF9wcm9wZXJ0eShzdHJ1Ci0gICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1 bHQKLSAgKi8KLSAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgICAgIF9fcHl4X3Rf NSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiks IF9fcHl4X25fc19nZXRfcHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlY X0VSUigwLCA2MDgsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5 T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19n ZXRfcHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA2MTAs IF9fcHl4X0wzX2Vycm9yKQotICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOwotICAgICAg IF9fcHl4X3RfNiA9IE5VTEw7Ci0gICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBs aWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkpIHsKLUBAIC0xMTcyNSwxNCArMTE3MjUs MTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMTR0cnlfZ2V0X3Byb3BlcnR5KHN0cnUKLSAgICAgICB9Ci0gICAgICAgX19weXhfdF80 ID0gKF9fcHl4X3RfNikgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF81LCBfX3B5 eF90XzYsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3Rf NSwgX19weXhfdl9wcm9wKTsKLSAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4 X3RfNiA9IDA7Ci0tICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwg NjA4LCBfX3B5eF9MM19lcnJvcikKLSsgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9f UFlYX0VSUigwLCA2MTAsIF9fcHl4X0wzX2Vycm9yKQotICAgICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzQpOwotICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwot ICAgICAgIF9fcHl4X3IgPSBfX3B5eF90XzQ7Ci0gICAgICAgX19weXhfdF80ID0gMDsKLSAgICAg ICBnb3RvIF9fcHl4X0w3X3RyeV9yZXR1cm47Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjYwNwotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo2MDkKLSAgKiAKLSAgKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwg ZGVmYXVsdD1Ob25lKToKLSAgKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotQEAgLTExNzQ1LDcgKzExNzQ1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTR0cnlfZ2V0X3Byb3BlcnR5KHN0cnUKLSAg ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotICAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MDkKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYxMQotICAqICAgICAgICAgdHJ5OgotICAqICAgICAgICAgICAgIHJldHVybiBzZWxm LmdldF9wcm9wZXJ0eShwcm9wKQotICAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTE3NTMsNyArMTE3NTMsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNHRyeV9nZXRf cHJvcGVydHkoc3RydQotICAqIAotICAqLwotICAgICBfX1B5eF9FcnJGZXRjaCgmX19weXhfdF80 LCAmX19weXhfdF81LCAmX19weXhfdF82KTsKLS0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzcsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF83 KSkgX19QWVhfRVJSKDAsIDYwOSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQotKyAgICBfX1B5eF9H ZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNywgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNjExLCBfX3B5eF9MNV9leGNlcHRfZXJy b3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotICAgICBfX3B5eF90XzggPSBfX1B5 eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoX19weXhfdF80LCBfX3B5eF90XzcpOwotICAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLUBAIC0xMTc2MSwxMiAr MTE3NjEsMTIgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMTR0cnlfZ2V0X3Byb3BlcnR5KHN0cnUKLSAgICAgX19weXhfdF80ID0gMDsg X19weXhfdF81ID0gMDsgX19weXhfdF82ID0gMDsKLSAgICAgaWYgKF9fcHl4X3RfOCkgewotICAg ICAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQudHJ5X2dl dF9wcm9wZXJ0eSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OwotLSAgICAgIGlmIChfX1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfNiwgJl9fcHl4X3RfNSwg Jl9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgNjA5LCBfX3B5eF9MNV9leGNlcHRfZXJyb3Ip Ci0rICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlvbigmX19weXhfdF82LCAmX19weXhfdF81LCAm X19weXhfdF80KSA8IDApIF9fUFlYX0VSUigwLCA2MTEsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikK LSAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSAgICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF81KTsKLSAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSAKLS0gICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjEwCi0rICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjYxMgotICAqICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9w cm9wZXJ0eShwcm9wKQotICAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOgotICAqICAgICAgICAg ICAgIHJldHVybiBkZWZhdWx0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMTc4 NCw3ICsxMTc4NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzE0dHJ5X2dldF9wcm9wZXJ0eShzdHJ1Ci0gICAgIGdvdG8gX19weXhf TDVfZXhjZXB0X2Vycm9yOwotICAgICBfX3B5eF9MNV9leGNlcHRfZXJyb3I6OwotIAotLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA3Ci0rICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MDkKLSAgKiAKLSAgKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVy dHkoc2VsZiwgcHJvcCwgZGVmYXVsdD1Ob25lKToKLSAgKiAgICAgICAgIHRyeTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTExODEwLDcgKzExODEwLDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTR0cnlfZ2V0X3By b3BlcnR5KHN0cnUKLSAgICAgZ290byBfX3B5eF9MMDsKLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDYKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo2MDgKLSAgKiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotICAqIAotICAqICAg ICBkZWYgdHJ5X2dldF9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkZWZhdWx0PU5vbmUpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTE4MzIsNyArMTE4MzIsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNHRyeV9nZXRf cHJvcGVydHkoc3RydQotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MTIKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjE0Ci0gICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKLSAgKiAKLSAgKiAgICAgZGVm IGdldF9wcm9wZXJ0eShzZWxmLCBwcm9wKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTExODgyLDcgKzExODgyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF8KLSAgIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJnZXRfcHJvcGVydHkiLCAwKTsKLSAgIF9fUHl4X0lOQ1JF RihfX3B5eF92X3Byb3ApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjYxNAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYxNgotICAqICAgICBk ZWYgZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3ApOgotICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9n ZXRfcHJvcGVydHkiIiIKLSAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotQEAgLTExODkzLDE5ICsxMTg5MywxOSBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNmdldF9wcm9wZXJ0 eShzdHJ1Y3QgXwotICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Ci0gICAgIGlm ICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKLSAgICAgICBQeUVycl9T ZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKLS0gICAgICBfX1BZWF9FUlIoMCwgNjE0LCBf X3B5eF9MMV9lcnJvcikKLSsgICAgICBfX1BZWF9FUlIoMCwgNjE2LCBfX3B5eF9MMV9lcnJvcikK LSAgICAgfQotICAgfQotICAgI2VuZGlmCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjE2Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjE4Ci0g ICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0gICogICAgICAgICBjZGVmIG1wdl9ub2RlIHJl c3VsdAotICAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wCi0g ICogICAgICAgICBjZGVmIGludCBlcnIKLSAgKi8KLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgNjE2LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgNjE4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzIpOwotICAgX19weXhfdF8zID0gTlVMTDsKLSAgIGlmIChDWVRIT05fVU5QQUNL X01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLUBAIC0x MTkxOSwyMyArMTE5MTksMjMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF8KLSAgIH0KLSAgIF9f cHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf MiwgX19weXhfdF8zLCBfX3B5eF92X3Byb3ApIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzIsIF9fcHl4X3ZfcHJvcCk7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2 MTYsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgNjE4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0gICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3ZfcHJvcCwgX19weXhfdF8xKTsKLSAgIF9fcHl4X3RfMSA9IDA7Ci0gCi0t ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjE3Ci0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjE5Ci0gICogICAgICAgICBjZGVmIG1wdl9ub2RlIHJlc3Vs dAotICAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKLSAgKiAgICAgICAgIGNkZWYgY29u c3QgY2hhciogcHJvcF9jID0gcHJvcCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICog ICAgICAgICBjZGVmIGludCBlcnIKLSAgKiAgICAgICAgIHdpdGggbm9naWw6Ci0gICovCi0tICBf X3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X3Byb3ApOyBpZiAodW5s aWtlbHkoKCFfX3B5eF90XzQpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNjE3 LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5n KF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNCkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCA2MTksIF9fcHl4X0wxX2Vycm9yKQotICAgX19weXhfdl9wcm9w X2MgPSBfX3B5eF90XzQ7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NjE5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjIxCi0gICogICAgICAg ICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AKLSAgKiAgICAgICAgIGNkZWYgaW50IGVy cgotICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTExOTUwLDcgKzExOTUwLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF8KLSAgICAgICAj ZW5kaWYKLSAgICAgICAvKnRyeToqLyB7Ci0gCi0tICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjIwCi0rICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NjIyCi0gICogICAgICAgICBjZGVmIGludCBlcnIKLSAgKiAgICAgICAgIHdpdGggbm9n aWw6Ci0gICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9wZXJ0eSggICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotQEAgLTExOTYwLDcgKzExOTYwLDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHko c3RydWN0IF8KLSAgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X2dldF9wcm9wZXJ0eShfX3B5eF92 X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcHJvcF9jLCBNUFZfRk9STUFUX05PREUsICgmX19weXhfdl9y ZXN1bHQpKTsKLSAgICAgICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYxOQotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MjEK LSAgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcAotICAqICAgICAgICAg Y2RlZiBpbnQgZXJyCi0gICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci1AQCAtMTE5NzksNyArMTE5NzksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNmdldF9wcm9wZXJ0eShzdHJ1Y3Qg XwotICAgICAgIH0KLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo2MjYKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MjgKLSAgKiAgICAg ICAgICAgICAgICAgJnJlc3VsdCwKLSAgKiAgICAgICAgICAgICApCi0gICogICAgICAgICBpZiBl cnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTE5ODksMTYgKzExOTg5 LDE2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzE2Z2V0X3Byb3BlcnR5KHN0cnVjdCBfCi0gICBfX3B5eF90XzUgPSAoKF9fcHl4X3Zf ZXJyIDwgMCkgIT0gMCk7Ci0gICBpZiAodW5saWtlbHkoX19weXhfdF81KSkgewotIAotLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjI3Ci0rICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MjkKLSAgKiAgICAgICAgICAgICApCi0gICogICAgICAgICBp ZiBlcnIgPCAwOgotICAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgdHJ5OgotICAqICAgICAgICAgICAgIHYg PSBfY29udmVydF9ub2RlX3ZhbHVlKHJlc3VsdCkKLSAgKi8KLS0gICAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDYyNywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2MjksIF9fcHl4X0wxX2Vycm9yKQot ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19weXhfdF8zID0gX19QeXhfUHlJ bnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlY X0VSUigwLCA2MjcsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUlu dF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDAsIDYyOSwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMp OwotICAgICBfX3B5eF90XzYgPSBOVUxMOwotICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RT ICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Ci1AQCAtMTIwMTMsMTQg KzEyMDEzLDE0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5KHN0cnVjdCBfCi0gICAgIF9fcHl4X3RfMSA9IChf X3B5eF90XzYpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF82 LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4 X3RfMyk7Ci0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICAgIGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYyNywgX19weXhfTDFfZXJyb3IpCi0rICAg IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYyOSwgX19weXhfTDFfZXJy b3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSAgICAgX19QeXhfUmFpc2UoX19weXhfdF8xLCAwLCAw LCAwKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICAg IF9fUFlYX0VSUigwLCA2MjcsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1BZWF9FUlIoMCwgNjI5 LCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjYyNgotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjI4Ci0gICog ICAgICAgICAgICAgICAgICZyZXN1bHQsCi0gICogICAgICAgICAgICAgKQotICAqICAgICAgICAg aWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEyMDI5LDcgKzEy MDI5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF8KLSAgKi8KLSAgIH0KLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MjgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2MzAKLSAgKiAgICAgICAgIGlmIGVyciA8IDA6Ci0gICogICAgICAgICAg ICAgcmFpc2UgTVBWRXJyb3IoZXJyKQotICAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci1AQCAtMTIwMzgsMjAgKzEyMDM4LDIwIEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5KHN0 cnVjdCBfCi0gICovCi0gICAvKnRyeToqLyB7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2MjkKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjYzMQotICAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKLSAgKiAgICAgICAgIHRy eToKLSAgKiAgICAgICAgICAgICB2ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShyZXN1bHQpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIGZpbmFsbHk6Ci0gICogICAgICAg ICAgICAgd2l0aCBub2dpbDoKLSAgKi8KLS0gICAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShfX3B5eF92X3Jlc3VsdCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYyOSwgX19weXhfTDhfZXJyb3IpCi0r ICAgIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25v ZGVfdmFsdWUoX19weXhfdl9yZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA2MzEsIF9fcHl4X0w4X2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKLSAgICAgX19weXhfdl92ID0gX19weXhfdF8xOwotICAgICBfX3B5eF90XzEgPSAwOwotICAg fQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzMQotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzMwotICAqICAgICAgICAgICAgIHYgPSBfY29u dmVydF9ub2RlX3ZhbHVlKHJlc3VsdCkKLSAgKiAgICAgICAgIGZpbmFsbHk6Ci0gICogICAgICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEyMDY4 LDcgKzEyMDY4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF8KLSAgICAgICAgICAgI2VuZGlm Ci0gICAgICAgICAgIC8qdHJ5OiovIHsKLSAKLS0gICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NjMyCi0rICAgICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjYzNAotICAqICAgICAgICAgZmluYWxseToKLSAgKiAgICAgICAgICAgICB3 aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZy ZXN1bHQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMjA3OCw3ICsxMjA3OCw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzE2Z2V0X3Byb3BlcnR5KHN0cnVjdCBfCi0gICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9j b250ZW50cygoJl9fcHl4X3ZfcmVzdWx0KSk7Ci0gICAgICAgICAgIH0KLSAKLS0gICAgICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzMQotKyAgICAgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMzCi0gICogICAgICAgICAgICAgdiA9IF9jb252 ZXJ0X25vZGVfdmFsdWUocmVzdWx0KQotICAqICAgICAgICAgZmluYWxseToKLSAgKiAgICAgICAg ICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTIxMjUs NyArMTIxMjUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8xNmdldF9wcm9wZXJ0eShzdHJ1Y3QgXwotICAgICAgICAgICAgICNlbmRp ZgotICAgICAgICAgICAgIC8qdHJ5OiovIHsKLSAKLS0gICAgICAgICAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzIKLSsgICAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MzQKLSAgKiAgICAgICAgIGZpbmFsbHk6Ci0gICogICAgICAg ICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250 ZW50cygmcmVzdWx0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTIxMzUsNyAr MTIxMzUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8xNmdldF9wcm9wZXJ0eShzdHJ1Y3QgXwotICAgICAgICAgICAgICAgbXB2X2Zy ZWVfbm9kZV9jb250ZW50cygoJl9fcHl4X3ZfcmVzdWx0KSk7Ci0gICAgICAgICAgICAgfQotIAot LSAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzEKLSsgICAg ICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMzCi0gICogICAgICAg ICAgICAgdiA9IF9jb252ZXJ0X25vZGVfdmFsdWUocmVzdWx0KQotICAqICAgICAgICAgZmluYWxs eToKLSAgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci1AQCAtMTIxNzEsNyArMTIxNzEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNmdldF9wcm9wZXJ0eShzdHJ1Y3QgXwotICAg ICBfX3B5eF9MOTo7Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjMzCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjM1Ci0gICogICAg ICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9j b250ZW50cygmcmVzdWx0KQotICAqICAgICAgICAgcmV0dXJuIHYgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotQEAgLTEyMTgzLDcgKzEyMTgzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0 IF8KLSAgIF9fcHl4X3IgPSBfX3B5eF92X3Y7Ci0gICBnb3RvIF9fcHl4X0wwOwotIAotLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYxMgotKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjYxNAotICAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0gICog Ci0gICogICAgIGRlZiBnZXRfcHJvcGVydHkoc2VsZiwgcHJvcCk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLUBAIC0xMjIwNyw3ICsxMjIwNyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5KHN0cnVj dCBfCi0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjYzNgotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzgKLSAg KiAKLSAgKiAgICAgQF9lcnJvcnMKLSAgKiAgICAgZGVmIHNldF9wcm9wZXJ0eShzZWxmLCBwcm9w LCB2YWx1ZT1UcnVlLCBhc3luY2hyb25vdXM9RmFsc2UsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMjI3NSw3ICsxMjI3NSw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE5c2V0X3Byb3BlcnR5 KFB5T2JqZWN0Ci0gICAgICAgICB9Ci0gICAgICAgfQotICAgICAgIGlmICh1bmxpa2VseShrd19h cmdzID4gMCkpIHsKLS0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5 d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywg InNldF9wcm9wZXJ0eSIpIDwgMCkpIF9fUFlYX0VSUigwLCA2MzYsIF9fcHl4X0wzX2Vycm9yKQot KyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9r d2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0X3Byb3BlcnR5 IikgPCAwKSkgX19QWVhfRVJSKDAsIDYzOCwgX19weXhfTDNfZXJyb3IpCi0gICAgICAgfQotICAg ICB9IGVsc2UgewotICAgICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkg ewotQEAgLTEyMjk3LDcgKzEyMjk3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTlzZXRfcHJvcGVydHkoUHlPYmplY3QKLSAgIH0K LSAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7Ci0gICBfX3B5eF9MNV9h cmd0dXBsZV9lcnJvcjo7Ci0tICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgic2V0X3Byb3Bl cnR5IiwgMCwgMSwgNCwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigw LCA2MzYsIF9fcHl4X0wzX2Vycm9yKQotKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInNl dF9wcm9wZXJ0eSIsIDAsIDEsIDQsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZ WF9FUlIoMCwgNjM4LCBfX3B5eF9MM19lcnJvcikKLSAgIF9fcHl4X0wzX2Vycm9yOjsKLSAgIF9f UHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuc2V0X3Byb3BlcnR5 IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0gICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLUBAIC0xMjM0NCw3ICsxMjM0NCw3IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0 X3Byb3BlcnR5KHN0cnVjdCBfCi0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X3By b3BlcnR5IiwgMCk7Ci0gICBfX1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2NDAKLSAgKiAgICAgZGVmIHNldF9wcm9wZXJ0eShzZWxmLCBwcm9wLCB2 YWx1ZT1UcnVlLCBhc3luY2hyb25vdXM9RmFsc2UsIGRhdGE9Tm9uZSk6Ci0gICogICAgICAgICAi IiJXcmFwczogbXB2X3NldF9wcm9wZXJ0eSBhbmQgbXB2X3NldF9wcm9wZXJ0eV9hc3luYyIiIgot ICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtMTIzNTUsMTkgKzEyMzU1LDE5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCi0gICBp ZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKLSAgICAgaWYgKHVubGlrZWx5KCEoX19w eXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewotICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNz ZXJ0aW9uRXJyb3IpOwotLSAgICAgIF9fUFlYX0VSUigwLCA2MzgsIF9fcHl4X0wxX2Vycm9yKQot KyAgICAgIF9fUFlYX0VSUigwLCA2NDAsIF9fcHl4X0wxX2Vycm9yKQotICAgICB9Ci0gICB9Ci0g ICAjZW5kaWYKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzkKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDEKLSAgKiAgICAgICAgICIiIldy YXBzOiBtcHZfc2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIiCi0gICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0gICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9w KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBjZGVmIG1wdl9mb3Jt YXQgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkKLSAgKiAgICAgICAgIGNkZWYgbXB2 X25vZGUgdiA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCi0gICovCi0t ICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDYzOSwgX19weXhfTDFfZXJy b3IpCi0rICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0 cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY0MSwgX19weXhf TDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgIF9fcHl4X3RfMyA9IE5V TEw7Ci0gICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0No ZWNrKF9fcHl4X3RfMikpKSB7Ci1AQCAtMTIzODEsMjAgKzEyMzgxLDIwIEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3Bl cnR5KHN0cnVjdCBfCi0gICB9Ci0gICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5 T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl9wcm9wKSA6IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X3Byb3ApOwotICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotLSAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjM5LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY0MSwgX19weXhfTDFfZXJyb3IpCi0gICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5 eF90XzIgPSAwOwotICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3Byb3AsIF9fcHl4X3RfMSk7 Ci0gICBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjY0MAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0MgotICAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkK LSAgKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZh bHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBjZGVmIG1wdl9u b2RlIHYgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQotICAqICAgICAg ICAgY2RlZiBpbnQgZXJyCi0gICovCi0tICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0X2Zvcik7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY0MCwgX19weXhfTDFfZXJy b3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3Qg KilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0X2Zvcik7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDY0MiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKLSAgIF9fcHl4X3RfMyA9IE5VTEw7Ci0gICBpZiAoQ1lUSE9OX1VOUEFD S19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotQEAgLTEy NDA4LDI2ICsxMjQwOCwyNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eShzdHJ1Y3QgXwotICAgfQotICAgX19w eXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8y LCBfX3B5eF90XzMsIF9fcHl4X3ZfdmFsdWUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzIsIF9fcHl4X3ZfdmFsdWUpOwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBf X3B5eF90XzMgPSAwOwotLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg NjQwLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDY0MiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK LSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgX19weXhfdF80 ID0gKChlbnVtIG1wdl9mb3JtYXQpX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2Zvcm1hdChfX3B5 eF90XzEpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNjQw LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNCA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4 X1B5SW50X0FzX2VudW1fX21wdl9mb3JtYXQoX19weXhfdF8xKSk7IGlmICh1bmxpa2VseShQeUVy cl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDY0MiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAgIF9fcHl4X3ZfZm9ybWF0ID0g X19weXhfdF80OwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0MQot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0MwotICAqICAgICAgICAgcHJv cCA9IF9zdHJlbmMocHJvcCkKLSAgKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBz ZWxmLl9mb3JtYXRfZm9yKHZhbHVlKQotICAqICAgICAgICAgY2RlZiBtcHZfbm9kZSB2ID0gc2Vs Zi5fcHJlcF9uYXRpdmVfdmFsdWUodmFsdWUsIGZvcm1hdCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotICAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0gICogICAgICAgICBjZGVmIHVpbnQ2 NF90IGRhdGFfaWQKLSAgKi8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9f bXB2X2Zvcm1hdChfX3B5eF92X2Zvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDY0MSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoX19weXhfdl9mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NDMsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7Ci0gICBfX3B5eF92X3YgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFi KS0+X3ByZXBfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92YWx1ZSwgX19weXhf dF8xKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0NQotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjY0NwotICAqICAgICAgICAgY2RlZiB1aW50NjRfdCBkYXRhX2lk Ci0gICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYwotICAqICAgICAgICAgdHJ5OiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTI0MzYsMjggKzEyNDM2LDI4IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4 c2V0X3Byb3BlcnR5KHN0cnVjdCBfCi0gICovCi0gICAvKnRyeToqLyB7Ci0gCi0tICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDYKLSsgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjY0OAotICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MK LSAgKiAgICAgICAgIHRyeToKLSAgKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3Vz OgotICAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotICAqLwotLSAgICBfX3B5eF90XzUg PSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X3Byb3ApOyBpZiAodW5saWtlbHkoKCFf X3B5eF90XzUpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNjQ2LCBfX3B5eF9M NF9lcnJvcikKLSsgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhf dl9wcm9wKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF81KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDAsIDY0OCwgX19weXhfTDRfZXJyb3IpCi0gICAgIF9fcHl4X3ZfcHJvcF9jID0g X19weXhfdF81OwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjQ3 Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDkKLSAgKiAgICAgICAg IHRyeToKLSAgKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wCi0gICogICAgICAgICAgICAgaWYg bm90IGFzeW5jaHJvbm91czogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAg ICAgICAgICAgICB3aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2 X3NldF9wcm9wZXJ0eSgKLSAgKi8KLS0gICAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNU cnVlKF9fcHl4X3ZfYXN5bmNocm9ub3VzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBf X1BZWF9FUlIoMCwgNjQ3LCBfX3B5eF9MNF9lcnJvcikKLSsgICAgX19weXhfdF82ID0gX19QeXhf UHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfYXN5bmNocm9ub3VzKTsgaWYgKHVubGlrZWx5KF9fcHl4 X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgNjQ5LCBfX3B5eF9MNF9lcnJvcikKLSAgICAgX19weXhf dF83ID0gKCghX19weXhfdF82KSAhPSAwKTsKLSAgICAgaWYgKF9fcHl4X3RfNykgewotIAotLSAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDgKLSsgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjUwCi0gICogICAgICAgICAgICAgcHJvcF9jID0g cHJvcAotICAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6Ci0gICogICAgICAgICAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMjQ3 Miw3ICsxMjQ3Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCi0gICAgICAgICAgICNlbmRp ZgotICAgICAgICAgICAvKnRyeToqLyB7Ci0gCi0tICAgICAgICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjY0OQotKyAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2NTEKLSAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgot ICAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAgICAgICAgICAg ZXJyID0gbXB2X3NldF9wcm9wZXJ0eSggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAg LTEyNDgyLDcgKzEyNDgyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KLSAgICAgICAgICAg ICBfX3B5eF92X2VyciA9IG1wdl9zZXRfcHJvcGVydHkoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5 eF92X3Byb3BfYywgTVBWX0ZPUk1BVF9OT0RFLCAoJl9fcHl4X3ZfdikpOwotICAgICAgICAgICB9 Ci0gCi0tICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDgKLSsg ICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1MAotICAqICAgICAg ICAgICAgIHByb3BfYyA9IHByb3AKLSAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3Vz OgotICAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci1AQCAtMTI1MDEsNyArMTI1MDEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eShzdHJ1Y3QgXwot ICAgICAgICAgICB9Ci0gICAgICAgfQotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo2NTUKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NjU3Ci0gICogICAgICAgICAgICAgICAgICAgICAgICAgJnYKLSAgKiAgICAgICAgICAgICAgICAg ICAgICkKLSAgKiAgICAgICAgICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci1AQCAtMTI1MDksMTMgKzEyNTA5LDEzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVj dCBfCi0gICogICAgICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQo ZGF0YV9pZCwgTm9uZSkKLSAgKi8KLSAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwotLSAg ICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjU1LCBfX3B5eF9MNF9lcnJvcikKLSsg ICAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY1NywgX19weXhfTDRfZXJyb3IpCi0g ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICAgICAgX19weXhfciA9IF9fcHl4X3Rf MTsKLSAgICAgICBfX3B5eF90XzEgPSAwOwotICAgICAgIGdvdG8gX19weXhfTDNfcmV0dXJuOwot IAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDcKLSsgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjQ5Ci0gICogICAgICAgICB0cnk6Ci0g ICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAotICAqICAgICAgICAgICAgIGlmIG5vdCBhc3lu Y2hyb25vdXM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMjUyNCwyNiArMTI1 MjQsMjYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KLSAgKi8KLSAgICAgfQotIAotLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjU2Ci0rICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2NTgKLSAgKiAgICAgICAgICAgICAgICAgICAgICkKLSAgKiAg ICAgICAgICAgICAgICAgcmV0dXJuIGVycgotICAqICAgICAgICAgICAgIGRhdGFfaWQgPSA8dWlu dDY0X3Q+aGFzaChkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAg ICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoZGF0YV9pZCwgTm9uZSkK LSAgKiAgICAgICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKLSAgKi8KLS0gICAgX19weXhf dF84ID0gUHlPYmplY3RfSGFzaChfX3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF84 ID09ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlYX0VSUigwLCA2NTYsIF9fcHl4X0w0X2Vycm9yKQot KyAgICBfX3B5eF90XzggPSBQeU9iamVjdF9IYXNoKF9fcHl4X3ZfZGF0YSk7IGlmICh1bmxpa2Vs eShfX3B5eF90XzggPT0gKChQeV9oYXNoX3QpLTEpKSkgX19QWVhfRVJSKDAsIDY1OCwgX19weXhf TDRfZXJyb3IpCi0gICAgIF9fcHl4X3ZfZGF0YV9pZCA9ICgodWludDY0X3QpX19weXhfdF84KTsK LSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1NwotKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjU5Ci0gICogICAgICAgICAgICAgICAgIHJl dHVybiBlcnIKLSAgKiAgICAgICAgICAgICBkYXRhX2lkID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkK LSAgKiAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRh X2lkLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICAgICAg aWYgdXNlcmRhdGFzIGlzIE5vbmU6Ci0gICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNl cmRhdGFbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQotICAqLwot LSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+ cmVwbHlfdXNlcmRhdGEsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9yKQotKyAgICBfX3B5eF90XzIgPSBfX1B5 eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4 X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2NTksIF9f cHl4X0w0X2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19weXhf dF8zID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5eF92X2RhdGFfaWQpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9yKQotKyAg ICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfZGF0YV9pZCk7 IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDY1OSwgX19weXhfTDRfZXJy b3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotICAgICBfX3B5eF90XzkgPSBOVUxM OwotICAgICBfX3B5eF90XzEwID0gMDsKLUBAIC0xMjU2MCw3ICsxMjU2MCw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3By b3BlcnR5KHN0cnVjdCBfCi0gICAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKLSAgICAgaWYgKFB5 RnVuY3Rpb25fQ2hlY2soX19weXhfdF8yKSkgewotICAgICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1w WzNdID0ge19fcHl4X3RfOSwgX19weXhfdF8zLCBQeV9Ob25lfTsKLS0gICAgICBfX3B5eF90XzEg PSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4 X3RfMTAsIDIrX19weXhfdF8xMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDY1NywgX19weXhfTDRfZXJyb3IpCi0rICAgICAgX19weXhfdF8xID0gX19QeXhfUHlGdW5j dGlvbl9GYXN0Q2FsbChfX3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5eF90XzEwLCAyK19fcHl4 X3RfMTApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NTksIF9fcHl4 X0w0X2Vycm9yKQotICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsgX19weXhfdF85ID0g MDsKLSAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgICAgICBfX1B5eF9ERUNSRUYo X19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLUBAIC0xMjU2OSwxNCArMTI1NjksMTQgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThz ZXRfcHJvcGVydHkoc3RydWN0IF8KLSAgICAgI2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwKLSAgICAg aWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzIpKSB7Ci0gICAgICAgUHlP YmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF85LCBfX3B5eF90XzMsIFB5X05vbmV9Owot LSAgICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwg X19weXhfdGVtcCsxLV9fcHl4X3RfMTAsIDIrX19weXhfdF8xMCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDY1NywgX19weXhfTDRfZXJyb3IpCi0rICAgICAgX19weXhf dF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8yLCBfX3B5eF90ZW1wKzEt X19weXhfdF8xMCwgMitfX3B5eF90XzEwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgNjU5LCBfX3B5eF9MNF9lcnJvcikKLSAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfOSk7IF9fcHl4X3RfOSA9IDA7Ci0gICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0g ICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0gICAgIH0gZWxz ZQotICAgICAjZW5kaWYKLSAgICAgewotLSAgICAgIF9fcHl4X3RfMTEgPSBQeVR1cGxlX05ldygy K19fcHl4X3RfMTApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMTEpKSBfX1BZWF9FUlIoMCwgNjU3 LCBfX3B5eF9MNF9lcnJvcikKLSsgICAgICBfX3B5eF90XzExID0gUHlUdXBsZV9OZXcoMitfX3B5 eF90XzEwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzExKSkgX19QWVhfRVJSKDAsIDY1OSwgX19w eXhfTDRfZXJyb3IpCi0gICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMTEpOwotICAgICAgIGlm IChfX3B5eF90XzkpIHsKLSAgICAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF85KTsgUHlUdXBs ZV9TRVRfSVRFTShfX3B5eF90XzExLCAwLCBfX3B5eF90XzkpOyBfX3B5eF90XzkgPSBOVUxMOwot QEAgLTEyNTg3LDcgKzEyNTg3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KLSAgICAgICBf X1B5eF9HSVZFUkVGKFB5X05vbmUpOwotICAgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8x MSwgMStfX3B5eF90XzEwLCBQeV9Ob25lKTsKLSAgICAgICBfX3B5eF90XzMgPSAwOwotLSAgICAg IF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90XzExLCBO VUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjU3LCBfX3B5eF9M NF9lcnJvcikKLSsgICAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3Rf MiwgX19weXhfdF8xMSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDY1OSwgX19weXhfTDRfZXJyb3IpCi0gICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 Ci0gICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90XzExID0gMDsKLSAgICAg fQotQEAgLTEyNTk1LDcgKzEyNTk1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KLSAgICAg X19weXhfdl91c2VyZGF0YXMgPSBfX3B5eF90XzE7Ci0gICAgIF9fcHl4X3RfMSA9IDA7Ci0gCi0t ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTgKLSsgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2MAotICAqICAgICAgICAgICAgIGRhdGFfaWQgPSA8 dWludDY0X3Q+aGFzaChkYXRhKQotICAqICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVw bHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCi0gICogICAgICAgICAgICAgaWYgdXNlcmRh dGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMjYwNiwxNCAr MTI2MDYsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KLSAgICAgX19weXhfdF82ID0gKF9f cHl4X3RfNyAhPSAwKTsKLSAgICAgaWYgKF9fcHl4X3RfNikgewotIAotLSAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTkKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjYxCi0gICogICAgICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBs eV91c2VyZGF0YS5nZXQoZGF0YV9pZCwgTm9uZSkKLSAgKiAgICAgICAgICAgICBpZiB1c2VyZGF0 YXMgaXMgTm9uZToKLSAgKiAgICAgICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtkYXRh X2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkKLSAgKiAgICAgICAg ICAgICB3aXRoIG5vZ2lsOgotICAqLwotLSAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF8yLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDY1OSwgX19weXhfTDRfZXJyb3IpCi0rICAgICAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19SZXBseVVzZXJEYXRhKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNjYxLCBfX3B5eF9MNF9lcnJvcikK LSAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgICAgICBfX3B5eF90XzExID0gTlVM TDsKLSAgICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9k X0NoZWNrKF9fcHl4X3RfMikpKSB7Ci1AQCAtMTI2MjcsMTUgKzEyNjI3LDE1IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3By b3BlcnR5KHN0cnVjdCBfCi0gICAgICAgfQotICAgICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzEx KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMTEsIF9fcHl4 X3ZfZGF0YSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9k YXRhKTsKLSAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90XzExID0gMDsK LS0gICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NTksIF9fcHl4 X0w0X2Vycm9yKQotKyAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDY2MSwgX19weXhfTDRfZXJyb3IpCi0gICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0g ICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICAgICAgaWYg KHVubGlrZWx5KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwg X19weXhfdl9kYXRhX2lkLCBfX3B5eF90XzEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9t X3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNjU5LCBfX3B5eF9MNF9lcnJv cikKLSsgICAgICBpZiAodW5saWtlbHkoX19QeXhfU2V0SXRlbUludChfX3B5eF92X3NlbGYtPnJl cGx5X3VzZXJkYXRhLCBfX3B5eF92X2RhdGFfaWQsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9f UHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA2NjEs IF9fcHl4X0w0X2Vycm9yKQotICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOwotICAgICAg IF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X3RfMSk7Ci0gICAgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1OAotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo2NjAKLSAgKiAgICAgICAgICAgICBkYXRhX2lkID0gPHVpbnQ2NF90 Pmhhc2goZGF0YSkKLSAgKiAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJk YXRhLmdldChkYXRhX2lkLCBOb25lKQotICAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBO b25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTI2NDQsMTQgKzEyNjQ0LDE0 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCi0gICovCi0gICAgIH0KLSAKLS0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2MAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjYyCi0gICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6 Ci0gICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbZGF0YV9pZF0gPSB1c2Vy ZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQotICAqICAgICAgICAgICAgIHVzZXJkYXRhcy5h ZGQoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICAgICAgd2l0aCBu b2dpbDoKLSAgKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0eV9hc3luYygK LSAgKi8KLS0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92 X3VzZXJkYXRhcywgX19weXhfbl9zX2FkZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDY2MCwgX19weXhfTDRfZXJyb3IpCi0rICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5 T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X25fc19hZGQpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2NjIsIF9fcHl4X0w0X2Vycm9yKQot ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgICAgX19weXhfdF8xMSA9IE5VTEw7Ci0g ICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9f cHl4X3RfMikpKSB7Ci1AQCAtMTI2NjUsMTIgKzEyNjY1LDEyIEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5KHN0 cnVjdCBfCi0gICAgIH0KLSAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfMTEpID8gX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMTEpIDogX19QeXhfUHlPYmplY3Rf Q2FsbE5vQXJnKF9fcHl4X3RfMik7Ci0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xMSk7IF9f cHl4X3RfMTEgPSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA2NjAsIF9fcHl4X0w0X2Vycm9yKQotKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCA2NjIsIF9fcHl4X0w0X2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0gICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYxCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2NjMKLSAgKiAgICAgICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YVtkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCi0gICogICAgICAg ICAgICAgdXNlcmRhdGFzLmFkZCgpCi0gICogICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEyNjg1LDcgKzEyNjg1LDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJv cGVydHkoc3RydWN0IF8KLSAgICAgICAgICNlbmRpZgotICAgICAgICAgLyp0cnk6Ki8gewotIAot LSAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYyCi0rICAgICAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NjQKLSAgKiAgICAgICAgICAg ICB1c2VyZGF0YXMuYWRkKCkKLSAgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgotICAqICAgICAg ICAgICAgICAgICBlcnIgPSBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jKCAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci1AQCAtMTI2OTUsNyArMTI2OTUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eShzdHJ1 Y3QgXwotICAgICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9zZXRfcHJvcGVydHlfYXN5bmMoX19w eXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X2RhdGFfaWQsIF9fcHl4X3ZfcHJvcF9jLCBNUFZfRk9S TUFUX05PREUsICgmX19weXhfdl92KSk7Ci0gICAgICAgICB9Ci0gCi0tICAgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYxCi0rICAgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NjYzCi0gICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNl cmRhdGFbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQotICAqICAg ICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQotICAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMjcxNSw3ICsxMjcxNSw3IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0 X3Byb3BlcnR5KHN0cnVjdCBfCi0gICAgIH0KLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo2NzAKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo2NzIKLSAgKiAgICAgICAgICAgICAgICAgKQotICAqICAgICAgICAgZmluYWxseToKLSAgKiAg ICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZSh2KSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci1AQCAtMTI3MjQsNyArMTI3MjQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eShzdHJ1Y3Qg XwotICAqLwotICAgLypmaW5hbGx5OiovIHsKLSAgICAgLypub3JtYWwgZXhpdDoqL3sKLS0gICAg ICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3Zh bHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgNjcwLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBfX3B5eF90XzEgPSAoKHN0 cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19w eXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwg X19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjcyLCBf X3B5eF9MMV9lcnJvcikKLSAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgICAgICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAgICAgICBnb3RvIF9fcHl4 X0w1OwotQEAgLTEyNzQ5LDcgKzEyNzQ5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KLSAg ICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTkpOwotICAgICAgIF9fcHl4X3RfMTAgPSBfX3B5 eF9saW5lbm87IF9fcHl4X3RfMTIgPSBfX3B5eF9jbGluZW5vOyBfX3B5eF90XzEzID0gX19weXhf ZmlsZW5hbWU7Ci0gICAgICAgewotLSAgICAgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhf dnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+ X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfdik7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3MCwgX19weXhfTDE1X2Vy cm9yKQotKyAgICAgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9m cmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfdik7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3MiwgX19weXhfTDE1X2Vycm9yKQotICAgICAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKLSAgICAgICB9Ci1AQCAtMTI3ODIsNyArMTI3ODIsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNl dF9wcm9wZXJ0eShzdHJ1Y3QgXwotICAgICBfX3B5eF9MM19yZXR1cm46IHsKLSAgICAgICBfX3B5 eF90XzE5ID0gX19weXhfcjsKLSAgICAgICBfX3B5eF9yID0gMDsKLS0gICAgICBfX3B5eF90XzEg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zf c2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg NjcwLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92 dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5f X3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjcyLCBfX3B5eF9MMV9lcnJv cikKLSAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgICAgICBfX1B5eF9ERUNSRUYo X19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAgICAgICBfX3B5eF9yID0gX19weXhfdF8xOTsK LUBAIC0xMjc5Miw3ICsxMjc5Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCi0gICAgIF9f cHl4X0w1OjsKLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 NzEKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzMKLSAgKiAgICAgICAg IGZpbmFsbHk6Ci0gICogICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUodikKLSAg KiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEy ODAwLDEzICsxMjgwMCwxMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eShzdHJ1Y3QgXwotICAqICAgICBAX2Vy cm9ycwotICAqLwotICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0gIF9fcHl4X3RfMSA9IF9f UHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgNjcxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgNjczLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOwotICAgX19weXhfciA9IF9fcHl4X3RfMTsKLSAgIF9fcHl4X3RfMSA9IDA7Ci0gICBnb3Rv IF9fcHl4X0wwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzNgot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzOAotICAqIAotICAqICAgICBA X2Vycm9ycwotICAqICAgICBkZWYgc2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIHZhbHVlPVRydWUs IGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotQEAgLTEyODMxLDcgKzEyODMxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KLSAg IHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6Njc0Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3NgotICAqIAotICAq ICAgICBAX2Vycm9ycwotICAqICAgICBkZWYgc2V0X29wdGlvbihzZWxmLCBwcm9wLCB2YWx1ZT1U cnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEyODc5LDcgKzEyODc5LDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMjFzZXRfb3B0aW9uKFB5T2JqZWN0ICoKLSAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAg aWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewotLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4 X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2 YWx1ZXMsIHBvc19hcmdzLCAic2V0X29wdGlvbiIpIDwgMCkpIF9fUFlYX0VSUigwLCA2NzQsIF9f cHl4X0wzX2Vycm9yKQotKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxL ZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdz LCAic2V0X29wdGlvbiIpIDwgMCkpIF9fUFlYX0VSUigwLCA2NzYsIF9fcHl4X0wzX2Vycm9yKQot ICAgICAgIH0KLSAgICAgfSBlbHNlIHsKLSAgICAgICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUo X19weXhfYXJncykpIHsKLUBAIC0xMjg5NSw3ICsxMjg5NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIxc2V0X29wdGlvbihQeU9i amVjdCAqCi0gICB9Ci0gICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOwot ICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6OwotLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFs aWQoInNldF9vcHRpb24iLCAwLCAxLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsg X19QWVhfRVJSKDAsIDY3NCwgX19weXhfTDNfZXJyb3IpCi0rICBfX1B5eF9SYWlzZUFyZ3R1cGxl SW52YWxpZCgic2V0X29wdGlvbiIsIDAsIDEsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cykpOyBfX1BZWF9FUlIoMCwgNjc2LCBfX3B5eF9MM19lcnJvcikKLSAgIF9fcHl4X0wzX2Vycm9y OjsKLSAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuc2V0 X29wdGlvbiIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwot ICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci1AQCAtMTI5MzUsNyArMTI5MzUsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8yMHNldF9vcHRpb24oc3RydWN0IF9fcAotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo InNldF9vcHRpb24iLCAwKTsKLSAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3Byb3ApOwotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3NgotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjY3OAotICAqICAgICBkZWYgc2V0X29wdGlvbihzZWxmLCBwcm9w LCB2YWx1ZT1UcnVlKToKLSAgKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X29wdGlvbiIiIgot ICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtMTI5NDYsMTkgKzEyOTQ2LDE5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1Y3QgX19wCi0gICBp ZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKLSAgICAgaWYgKHVubGlrZWx5KCEoX19w eXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewotICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNz ZXJ0aW9uRXJyb3IpOwotLSAgICAgIF9fUFlYX0VSUigwLCA2NzYsIF9fcHl4X0wxX2Vycm9yKQot KyAgICAgIF9fUFlYX0VSUigwLCA2NzgsIF9fcHl4X0wxX2Vycm9yKQotICAgICB9Ci0gICB9Ci0g ICAjZW5kaWYKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzcKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzkKLSAgKiAgICAgICAgICIiIldy YXBzOiBtcHZfc2V0X29wdGlvbiIiIgotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAq ICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqICAgICAgICAgY2RlZiBtcHZfZm9ybWF0IGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3Io dmFsdWUpCi0gICogICAgICAgICBjZGVmIG1wdl9ub2RlIHYgPSBzZWxmLl9wcmVwX25hdGl2ZV92 YWx1ZSh2YWx1ZSwgZm9ybWF0KQotICAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShf X3B5eF90XzIsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9f UFlYX0VSUigwLCA2NzcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFs TmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCA2NzksIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMik7Ci0gICBfX3B5eF90XzMgPSBOVUxMOwotICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotQEAgLTEyOTcy LDIwICsxMjk3MiwyMCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8yMHNldF9vcHRpb24oc3RydWN0IF9fcAotICAgfQotICAgX19weXhf dF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBf X3B5eF90XzMsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfMiwgX19weXhfdl9wcm9wKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3Nywg X19weXhfTDFfZXJyb3IpCi0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA2NzksIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSAgIF9fUHl4X0RFQ1JFRl9T RVQoX19weXhfdl9wcm9wLCBfX3B5eF90XzEpOwotICAgX19weXhfdF8xID0gMDsKLSAKLS0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzgKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo2ODAKLSAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSAgKiAg ICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCi0gICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQg Zm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotICAqICAgICAgICAgY2RlZiBtcHZfbm9kZSB2ID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFs dWUodmFsdWUsIGZvcm1hdCkKLSAgKiAgICAgICAgIGNkZWYgaW50IGVycgotICAqLwotLSAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9z ZWxmKSwgX19weXhfbl9zX2Zvcm1hdF9mb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9f UFlYX0VSUigwLCA2NzgsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8yID0gX19QeXhfUHlP YmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX2Zv cm1hdF9mb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2ODAsIF9f cHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0gICBfX3B5eF90XzMg PSBOVUxMOwotICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2Rf Q2hlY2soX19weXhfdF8yKSkpIHsKLUBAIC0xMjk5OSwyNiArMTI5OTksMjYgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjBzZXRfb3B0 aW9uKHN0cnVjdCBfX3AKLSAgIH0KLSAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhf UHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X3ZhbHVlKSA6 IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X3ZhbHVlKTsKLSAg IF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gIGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3OCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2ODAsIF9fcHl4X0wxX2Vycm9yKQot ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsg X19weXhfdF8yID0gMDsKLS0gIF9fcHl4X3RfNCA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5 SW50X0FzX2VudW1fX21wdl9mb3JtYXQoX19weXhfdF8xKSk7IGlmICh1bmxpa2VseShQeUVycl9P Y2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDY3OCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90 XzQgPSAoKGVudW0gbXB2X2Zvcm1hdClfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZm9ybWF0KF9f cHl4X3RfMSkpOyBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA2 ODAsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3Rf MSA9IDA7Ci0gICBfX3B5eF92X2Zvcm1hdCA9IF9fcHl4X3RfNDsKLSAKLS0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo2ODEKLSAgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCi0gICogICAgICAg ICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkKLSAgKiAg ICAgICAgIGNkZWYgbXB2X25vZGUgdiA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBm b3JtYXQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIGNkZWYgaW50 IGVycgotICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MKLSAgKi8KLS0gIF9fcHl4 X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChfX3B5eF92X2Zvcm1hdCk7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3OSwgX19weXhfTDFfZXJy b3IpCi0rICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoX19w eXhfdl9mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2ODEs IF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX3B5eF92 X3YgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbmF0aXZlX3ZhbHVlKF9fcHl4 X3Zfc2VsZiwgX19weXhfdl92YWx1ZSwgX19weXhfdF8xKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjY4MgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY4NAotICAq ICAgICAgICAgY2RlZiBpbnQgZXJyCi0gICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3Bf YwotICAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTMw MjcsMTcgKzEzMDI3LDE3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1Y3QgX19wCi0gICovCi0gICAvKnRy eToqLyB7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2ODMKLSsg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY4NQotICAqICAgICAgICAgY2Rl ZiBjb25zdCBjaGFyKiBwcm9wX2MKLSAgKiAgICAgICAgIHRyeToKLSAgKiAgICAgICAgICAgICBw cm9wX2MgPSBwcm9wICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAg ICB3aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfc2V0X29wdGlvbigK LSAgKi8KLS0gICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9w cm9wKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF81KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19Q WVhfRVJSKDAsIDY4MywgX19weXhfTDRfZXJyb3IpCi0rICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5 T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNSkg JiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA2ODUsIF9fcHl4X0w0X2Vycm9yKQot ICAgICBfX3B5eF92X3Byb3BfYyA9IF9fcHl4X3RfNTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjY4NAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6Njg2Ci0gICogICAgICAgICB0cnk6Ci0gICogICAgICAgICAgICAgcHJvcF9jID0gcHJv cAotICAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLUBAIC0xMzA1Miw3ICsxMzA1Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1Y3QgX19wCi0gICAg ICAgICAjZW5kaWYKLSAgICAgICAgIC8qdHJ5OiovIHsKLSAKLS0gICAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY4NQotKyAgICAgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Njg3Ci0gICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAotICAq ICAgICAgICAgICAgIHdpdGggbm9naWw6Ci0gICogICAgICAgICAgICAgICAgIGVyciA9IG1wdl9z ZXRfb3B0aW9uKCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTMwNjIsNyArMTMw NjIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8yMHNldF9vcHRpb24oc3RydWN0IF9fcAotICAgICAgICAgICBfX3B5eF92X2VyciA9 IG1wdl9zZXRfb3B0aW9uKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9wcm9wX2MsIE1QVl9G T1JNQVRfTk9ERSwgKCZfX3B5eF92X3YpKTsKLSAgICAgICAgIH0KLSAKLS0gICAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2ODQKLSsgICAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2ODYKLSAgKiAgICAgICAgIHRyeToKLSAgKiAgICAgICAgICAg ICBwcm9wX2MgPSBwcm9wCi0gICogICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotQEAgLTEzMDgyLDcgKzEzMDgyLDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjBzZXRfb3B0aW9uKHN0 cnVjdCBfX3AKLSAgICAgfQotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjY5MgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5NAotICAq ICAgICAgICAgICAgICAgICApCi0gICogICAgICAgICBmaW5hbGx5OgotICAqICAgICAgICAgICAg IHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKHYpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LUBAIC0xMzA5MSw3ICsxMzA5MSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1Y3QgX19wCi0gICovCi0g ICAvKmZpbmFsbHk6Ki8gewotICAgICAvKm5vcm1hbCBleGl0OiovewotLSAgICAgIF9fcHl4X3Rf MSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhf dl9zZWxmLCBfX3B5eF92X3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA2OTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4 X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYt Pl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X3Yp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2OTQsIF9fcHl4X0wxX2Vy cm9yKQotICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotICAgICAgIGdvdG8gX19weXhfTDU7Ci1AQCAt MTMxMTQsNyArMTMxMTQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8yMHNldF9vcHRpb24oc3RydWN0IF9fcAotICAgICAgIF9fUHl4 X1hHT1RSRUYoX19weXhfdF8xNCk7Ci0gICAgICAgX19weXhfdF82ID0gX19weXhfbGluZW5vOyBf X3B5eF90XzcgPSBfX3B5eF9jbGluZW5vOyBfX3B5eF90XzggPSBfX3B5eF9maWxlbmFtZTsKLSAg ICAgICB7Ci0tICAgICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+ X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjkyLCBfX3B5eF9MMTBfZXJyb3IpCi0rICAgICAg ICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3Zh bHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgNjk0LCBfX3B5eF9MMTBfZXJyb3IpCi0gICAgICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKLSAgICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOwotICAgICAgIH0KLUBAIC0xMzE0Nyw3ICsxMzE0Nyw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1 Y3QgX19wCi0gICAgIF9fcHl4X0w1OjsKLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2OTMKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 OTUKLSAgKiAgICAgICAgIGZpbmFsbHk6Ci0gICogICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRp dmVfdmFsdWUodikKLSAgKiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotQEAgLTEzMTU1LDEzICsxMzE1NSwxMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMHNldF9vcHRpb24oc3RydWN0IF9f cAotICAqICAgICBAX2Vycm9ycwotICAqLwotICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKLS0g IF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjkzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f cHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjk1LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotICAgX19weXhfciA9IF9fcHl4X3RfMTsKLSAgIF9fcHl4X3Rf MSA9IDA7Ci0gICBnb3RvIF9fcHl4X0wwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjY3NAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3Ngot ICAqIAotICAqICAgICBAX2Vycm9ycwotICAqICAgICBkZWYgc2V0X29wdGlvbihzZWxmLCBwcm9w LCB2YWx1ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEzMTgzLDcg KzEzMTgzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMjBzZXRfb3B0aW9uKHN0cnVjdCBfX3AKLSAgIHJldHVybiBfX3B5eF9yOwot IH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njk2Ci0rLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5OAotICAqIAotICAqICAgICBAX2Vycm9ycwotICAq ICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTEzMjE1LDcgKzEzMjE1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjJpbml0aWFsaXplKHN0cnVjdCBfX3AKLSAgIGludCBf X3B5eF9jbGluZW5vID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJpbml0aWFs aXplIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njk4Ci0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAwCi0gICogICAgIGRlZiBpbml0 aWFsaXplKHNlbGYpOgotICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9pbml0aWFsaXplIiIiCi0g ICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LUBAIC0xMzIyNiwxMiArMTMyMjYsMTIgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjJpbml0aWFsaXplKHN0cnVjdCBfX3AKLSAgIGlm ICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgewotICAgICBpZiAodW5saWtlbHkoIShfX3B5 eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7Ci0gICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3Nl cnRpb25FcnJvcik7Ci0tICAgICAgX19QWVhfRVJSKDAsIDY5OCwgX19weXhfTDFfZXJyb3IpCi0r ICAgICAgX19QWVhfRVJSKDAsIDcwMCwgX19weXhfTDFfZXJyb3IpCi0gICAgIH0KLSAgIH0KLSAg ICNlbmRpZgotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwMAotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwMgotICAqICAgICAgICAgYXNzZXJ0 IHNlbGYuX2N0eAotICAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0gICogICAgICAgICB3aXRoIG5v Z2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTMyNDYsNyArMTMyNDYsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8yMmluaXRpYWxpemUoc3RydWN0IF9fcAotICAgICAgICNlbmRpZgotICAgICAgIC8qdHJ5Oiov IHsKLSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDEKLSsg ICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDMKLSAgKiAgICAgICAg IGNkZWYgaW50IGVycgotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAgICBl cnIgPSBtcHZfaW5pdGlhbGl6ZShzZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLUBAIC0xMzI1Niw3ICsxMzI1Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIyaW5pdGlhbGl6ZShzdHJ1Y3QgX19wCi0gICAg ICAgICBfX3B5eF92X2VyciA9IG1wdl9pbml0aWFsaXplKF9fcHl4X3Zfc2VsZi0+X2N0eCk7Ci0g ICAgICAgfQotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDAK LSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAyCi0gICogICAgICAg ICBhc3NlcnQgc2VsZi5fY3R4Ci0gICogICAgICAgICBjZGVmIGludCBlcnIKLSAgKiAgICAgICAg IHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMzI3NSw3ICsx MzI3NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzIyaW5pdGlhbGl6ZShzdHJ1Y3QgX19wCi0gICAgICAgfQotICAgfQotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwMgotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjcwNAotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAg ICAgICAgICBlcnIgPSBtcHZfaW5pdGlhbGl6ZShzZWxmLl9jdHgpCi0gICogICAgICAgICByZXR1 cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMzI4MywxMyArMTMyODMs MTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMjJpbml0aWFsaXplKHN0cnVjdCBfX3AKLSAgKiAgICAgZGVmIHdhaXRfZXZlbnQoc2Vs ZiwgdGltZW91dD1Ob25lKToKLSAgKi8KLSAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICBf X3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcwMiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5 eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcwNCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKLSAgIF9fcHl4X3IgPSBfX3B5eF90XzE7Ci0gICBfX3B5eF90XzEg PSAwOwotICAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo2OTYKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2OTgKLSAg KiAKLSAgKiAgICAgQF9lcnJvcnMKLSAgKiAgICAgZGVmIGluaXRpYWxpemUoc2VsZik6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMzMwOCw3ICsxMzMwOCw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIyaW5pdGlh bGl6ZShzdHJ1Y3QgX19wCi0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjcwNAotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3MDYKLSAgKiAgICAgICAgIHJldHVybiBlcnIKLSAgKiAKLSAgKiAgICAgZGVmIHdhaXRf ZXZlbnQoc2VsZiwgdGltZW91dD1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTEzMzQ5LDcgKzEzMzQ5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjV3YWl0X2V2ZW50KFB5T2JqZWN0ICoKLSAgICAgICAg IH0KLSAgICAgICB9Ci0gICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewotLSAgICAg ICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBf X3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAid2FpdF9ldmVudCIpIDwgMCkp IF9fUFlYX0VSUigwLCA3MDQsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgICAgaWYgKHVubGlrZWx5 KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVz LCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAid2FpdF9ldmVudCIpIDwgMCkpIF9fUFlYX0VSUigwLCA3 MDYsIF9fcHl4X0wzX2Vycm9yKQotICAgICAgIH0KLSAgICAgfSBlbHNlIHsKLSAgICAgICBzd2l0 Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpIHsKLUBAIC0xMzM2Myw3ICsxMzM2Myw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzI1d2FpdF9ldmVudChQeU9iamVjdCAqCi0gICB9Ci0gICBnb3RvIF9fcHl4X0w0X2FyZ3Vt ZW50X3VucGFja2luZ19kb25lOwotICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6OwotLSAgX19Q eXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIndhaXRfZXZlbnQiLCAwLCAwLCAxLCBQeVR1cGxlX0dF VF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDcwNCwgX19weXhfTDNfZXJyb3IpCi0r ICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgid2FpdF9ldmVudCIsIDAsIDAsIDEsIFB5VHVw bGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNzA2LCBfX3B5eF9MM19lcnJv cikKLSAgIF9fcHl4X0wzX2Vycm9yOjsKLSAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2LkNvbnRleHQud2FpdF9ldmVudCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVu bywgX19weXhfZmlsZW5hbWUpOwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Ci1A QCAtMTMzOTEsNyArMTMzOTEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNHdhaXRfZXZlbnQoc3RydWN0IF9fcAotICAgaW50IF9f cHl4X2NsaW5lbm8gPSAwOwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndhaXRfZXZl bnQiLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDYKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDgKLSAgKiAgICAgZGVmIHdhaXRf ZXZlbnQoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgKiAgICAgICAgICIiIldyYXBzOiBtcHZfd2Fp dF9ldmVudCIiIgotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci1AQCAtMTM0MDIsMTIgKzEzNDAyLDEyIEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI0d2FpdF9ldmVudChzdHJ1 Y3QgX19wCi0gICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKLSAgICAgaWYgKHVu bGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewotICAgICAgIFB5RXJyX1NldE5v bmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOwotLSAgICAgIF9fUFlYX0VSUigwLCA3MDYsIF9fcHl4 X0wxX2Vycm9yKQotKyAgICAgIF9fUFlYX0VSUigwLCA3MDgsIF9fcHl4X0wxX2Vycm9yKQotICAg ICB9Ci0gICB9Ci0gICAjZW5kaWYKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3MDcKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDkKLSAgKiAg ICAgICAgICIiIldyYXBzOiBtcHZfd2FpdF9ldmVudCIiIgotICAqICAgICAgICAgYXNzZXJ0IHNl bGYuX2N0eAotICAqICAgICAgICAgY2RlZiBkb3VibGUgdGltZW91dF9kID0gdGltZW91dCBpZiB0 aW1lb3V0IGlzIG5vdCBOb25lIGVsc2UgLTEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTEzNDE2LDE0ICsxMzQxNiwxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNHdhaXRfZXZlbnQoc3RydWN0IF9fcAotICAqLwot ICAgX19weXhfdF8yID0gKF9fcHl4X3ZfdGltZW91dCAhPSBQeV9Ob25lKTsKLSAgIGlmICgoX19w eXhfdF8yICE9IDApKSB7Ci0tICAgIF9fcHl4X3RfMyA9IF9fcHl4X1B5RmxvYXRfQXNEb3VibGUo X19weXhfdl90aW1lb3V0KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGRvdWJsZSktMSkg JiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA3MDcsIF9fcHl4X0wxX2Vycm9yKQot KyAgICBfX3B5eF90XzMgPSBfX3B5eF9QeUZsb2F0X0FzRG91YmxlKF9fcHl4X3ZfdGltZW91dCk7 IGlmICh1bmxpa2VseSgoX19weXhfdF8zID09IChkb3VibGUpLTEpICYmIFB5RXJyX09jY3VycmVk KCkpKSBfX1BZWF9FUlIoMCwgNzA5LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19weXhfdF8xID0g X19weXhfdF8zOwotICAgfSBlbHNlIHsKLSAgICAgX19weXhfdF8xID0gLTEuMDsKLSAgIH0KLSAg IF9fcHl4X3ZfdGltZW91dF9kID0gX19weXhfdF8xOwotIAotLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjcwOQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjcxMQotICAqICAgICAgICAgY2RlZiBkb3VibGUgdGltZW91dF9kID0gdGltZW91dCBpZiB0aW1l b3V0IGlzIG5vdCBOb25lIGVsc2UgLTEKLSAgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50KiBldmVu dAotICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTEzNDM4LDcgKzEzNDM4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjR3YWl0X2V2ZW50KHN0cnVjdCBfX3AKLSAgICAgICAj ZW5kaWYKLSAgICAgICAvKnRyeToqLyB7Ci0gCi0tICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzEwCi0rICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NzEyCi0gICogICAgICAgICBjZGVmIG1wdl9ldmVudCogZXZlbnQKLSAgKiAgICAgICAg IHdpdGggbm9naWw6Ci0gICogICAgICAgICAgICAgZXZlbnQgPSBtcHZfd2FpdF9ldmVudChzZWxm Ll9jdHgsIHRpbWVvdXRfZCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEzNDQ4 LDcgKzEzNDQ4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMjR3YWl0X2V2ZW50KHN0cnVjdCBfX3AKLSAgICAgICAgIF9fcHl4X3Zf ZXZlbnQgPSBtcHZfd2FpdF9ldmVudChfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfdGltZW91 dF9kKTsKLSAgICAgICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjcwOQotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MTEKLSAg KiAgICAgICAgIGNkZWYgZG91YmxlIHRpbWVvdXRfZCA9IHRpbWVvdXQgaWYgdGltZW91dCBpcyBu b3QgTm9uZSBlbHNlIC0xCi0gICogICAgICAgICBjZGVmIG1wdl9ldmVudCogZXZlbnQKLSAgKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMzQ2 Nyw3ICsxMzQ2Nyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzI0d2FpdF9ldmVudChzdHJ1Y3QgX19wCi0gICAgICAgfQotICAgfQot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxMQotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxMwotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAg KiAgICAgICAgICAgICBldmVudCA9IG1wdl93YWl0X2V2ZW50KHNlbGYuX2N0eCwgdGltZW91dF9k KQotICAqICAgICAgICAgcmV0dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMzQ3NSwxNiArMTM0NzUsMTYgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjR3YWl0X2V2 ZW50KHN0cnVjdCBfX3AKLSAgKiAgICAgZGVmIHdha2V1cChzZWxmKToKLSAgKi8KLSAgIF9fUHl4 X1hERUNSRUYoX19weXhfcik7Ci0tICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9B cmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCkp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3MTEsIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmplY3Qg KilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNzEzLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzQpOwotLSAgX19weXhfdF81ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0 cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKikoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdF80KS0+X19weXhfdnRhYiktPl9pbml0 KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF90 XzQpLCBfX3B5eF92X2V2ZW50LCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7IGlmICh1bmxp a2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDcxMSwgX19weXhfTDFfZXJyb3IpCi0rICBf X3B5eF90XzUgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9FdmVudCAqKSgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQg KilfX3B5eF90XzQpLT5fX3B5eF92dGFiKS0+X2luaXQoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3RfNCksIF9fcHl4X3ZfZXZlbnQsICgoUHlP YmplY3QgKilfX3B5eF92X3NlbGYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9F UlIoMCwgNzEzLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOwot ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0gICBfX3B5eF9yID0g X19weXhfdF81OwotICAgX19weXhfdF81ID0gMDsKLSAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzA0Ci0rICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NzA2Ci0gICogICAgICAgICByZXR1cm4gZXJyCi0gICogCi0gICog ICAgIGRlZiB3YWl0X2V2ZW50KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLUBAIC0xMzUwNCw3ICsxMzUwNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI0d2FpdF9ldmVudChzdHJ1Y3Qg X19wCi0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjcxMwotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MTUKLSAg KiAgICAgICAgIHJldHVybiBFdmVudCgpLl9pbml0KGV2ZW50LCBzZWxmKQotICAqIAotICAqICAg ICBkZWYgd2FrZXVwKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTM1 MzQsNyArMTM1MzQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8yNndha2V1cChzdHJ1Y3QgX19weXhfbwotICAgaW50IF9fcHl4X2Ns aW5lbm8gPSAwOwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndha2V1cCIsIDApOwot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxNQotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxNwotICAqICAgICBkZWYgd2FrZXVwKHNlbGYpOgot ICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAiIiIKLSAgKiAgICAgICAgIGFzc2VydCBz ZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEzNTQ1LDEyICsxMzU0 NSwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8yNndha2V1cChzdHJ1Y3QgX19weXhfbwotICAgaWYgKHVubGlrZWx5KCFQeV9PcHRp bWl6ZUZsYWcpKSB7Ci0gICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAw KSkpIHsKLSAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKLS0gICAg ICBfX1BZWF9FUlIoMCwgNzE1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBfX1BZWF9FUlIoMCwg NzE3LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgfQotICAgfQotICAgI2VuZGlmCi0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE2Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzE4Ci0gICogICAgICAgICAiIiJXcmFwczogbXB2X3dha2V1cCIiIgot ICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqICAgICAgICAgd2l0aCBub2dpbDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEzNTY1LDcgKzEzNTY1LDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjZ3YWtl dXAoc3RydWN0IF9fcHl4X28KLSAgICAgICAjZW5kaWYKLSAgICAgICAvKnRyeToqLyB7Ci0gCi0t ICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE3Ci0rICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE5Ci0gICogICAgICAgICBhc3NlcnQg c2VsZi5fY3R4Ci0gICogICAgICAgICB3aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAgIG1wdl93 YWtldXAoc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTM1NzUs NyArMTM1NzUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8yNndha2V1cChzdHJ1Y3QgX19weXhfbwotICAgICAgICAgbXB2X3dha2V1 cChfX3B5eF92X3NlbGYtPl9jdHgpOwotICAgICAgIH0KLSAKLS0gICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzE2Ci0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjcxOAotICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAiIiIKLSAgKiAg ICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMzU5NCw3ICsxMzU5NCw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI2d2FrZXVwKHN0 cnVjdCBfX3B5eF9vCi0gICAgICAgfQotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjcxMwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcx NQotICAqICAgICAgICAgcmV0dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpCi0gICogCi0g ICogICAgIGRlZiB3YWtldXAoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC0xMzYxNCw3ICsxMzYxNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzI2d2FrZXVwKHN0cnVjdCBfX3B5eF9vCi0gICByZXR1cm4g X19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxOQot Ky8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjEKLSAgKiAgICAgICAgICAgICBt cHZfd2FrZXVwKHNlbGYuX2N0eCkKLSAgKiAKLSAgKiAgICAgZGVmIHNldF93YWtldXBfY2FsbGJh Y2soc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTM2 NDksNyArMTM2NDksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8yOHNldF93YWtldXBfY2FsbGJhY2socwotICAgaW50IF9fcHl4X2Ns aW5lbm8gPSAwOwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldF93YWtldXBfY2Fs bGJhY2siLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjEK LSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjMKLSAgKiAgICAgZGVmIHNl dF93YWtldXBfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgotICAqICAgICAgICAgIiIiV3JhcHM6 IG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrIiIiCi0gICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMzY2MCwyNSArMTM2NjAsMjUgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MjhzZXRfd2FrZXVwX2NhbGxiYWNrKHMKLSAgIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFn KSkgewotICAgICBpZiAodW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7Ci0g ICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7Ci0tICAgICAgX19QWVhf RVJSKDAsIDcyMSwgX19weXhfTDFfZXJyb3IpCi0rICAgICAgX19QWVhfRVJSKDAsIDcyMywgX19w eXhfTDFfZXJyb3IpCi0gICAgIH0KLSAgIH0KLSAgICNlbmRpZgotIAotLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjcyMgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjcyNAotICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNr IiIiCi0gICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0gICogICAgICAgICBjZGVmIHVpbnQ2 NF90IG5hbWUgPSA8dWludDY0X3Q+aWQoc2VsZikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCi0gICogICAgICAgICBzZWxm LmNhbGxiYWNrdGhyZWFkLnNldChjYWxsYmFjaykKLSAgKi8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4 X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfYnVpbHRpbl9pZCwgKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3MjIsIF9f cHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF9idWlsdGluX2lkLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcyNCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0FzX3VpbnQ2 NF90KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09ICgodWludDY0X3QpLTEp KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDcyMiwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEpOyBpZiAo dW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQo KSkpIF9fUFlYX0VSUigwLCA3MjQsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gICBfX3B5eF92X25hbWUgPSAoKHVpbnQ2NF90KV9f cHl4X3RfMik7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzIzCi0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzI1Ci0gICogICAgICAgICBhc3Nl cnQgc2VsZi5fY3R4Ci0gICogICAgICAgICBjZGVmIHVpbnQ2NF90IG5hbWUgPSA8dWludDY0X3Q+ aWQoc2VsZikKLSAgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjayAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTM2OTEsMTQgKzEzNjkxLDE0IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI4c2V0X3dha2V1 cF9jYWxsYmFjayhzCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5jYWxsYmFjayk7Ci0g ICBfX3B5eF92X3NlbGYtPmNhbGxiYWNrID0gX19weXhfdl9jYWxsYmFjazsKLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3MjYKLSAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgbmFtZSA9IDx1aW50 NjRfdD5pZChzZWxmKQotICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCi0gICog ICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNldChjYWxsYmFjaykgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAgICBt cHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9jdHgsIF9jX2NhbGxiYWNrLCA8dm9pZCo+bmFt ZSkKLSAgKi8KLS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhf dl9zZWxmLT5jYWxsYmFja3RocmVhZCwgX19weXhfbl9zX3NldCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8zKSkgX19QWVhfRVJSKDAsIDcyNCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQs IF9fcHl4X25fc19zZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA3 MjYsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0gICBfX3B5 eF90XzQgPSBOVUxMOwotICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlN ZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKLUBAIC0xMzcxMiwxMiArMTM3MTIsMTIgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjhz ZXRfd2FrZXVwX2NhbGxiYWNrKHMKLSAgIH0KLSAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8g X19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMywgX19weXhfdF80LCBfX3B5eF92X2Nh bGxiYWNrKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF92X2Nh bGxiYWNrKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLS0g IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcyNCwgX19weXhfTDFfZXJy b3IpCi0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3MjYsIF9fcHl4 X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9ERUNSRUYo X19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcy NQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyNwotICAqICAgICAgICAg c2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCi0gICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFk LnNldChjYWxsYmFjaykKLSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLUBAIC0xMzczMiw3ICsxMzczMiw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI4c2V0X3dha2V1cF9jYWxsYmFj ayhzCi0gICAgICAgI2VuZGlmCi0gICAgICAgLyp0cnk6Ki8gewotIAotLSAgICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyNgotKyAgICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjcyOAotICAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5z ZXQoY2FsbGJhY2spCi0gICogICAgICAgICB3aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAgIG1w dl9zZXRfd2FrZXVwX2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1l KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTM3NDIsNyArMTM3NDIsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8y OHNldF93YWtldXBfY2FsbGJhY2socwotICAgICAgICAgbXB2X3NldF93YWtldXBfY2FsbGJhY2so X19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY19jYWxs YmFjaywgKCh2b2lkICopX19weXhfdl9uYW1lKSk7Ci0gICAgICAgfQotIAotLSAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjUKLSsgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NzI3Ci0gICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJh Y2sKLSAgKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2V0KGNhbGxiYWNrKQotICAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEzNzYx LDcgKzEzNzYxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMjhzZXRfd2FrZXVwX2NhbGxiYWNrKHMKLSAgICAgICB9Ci0gICB9Ci0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE5Ci0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzIxCi0gICogICAgICAgICAgICAgbXB2X3dha2V1cChz ZWxmLl9jdHgpCi0gICogCi0gICogICAgIGRlZiBzZXRfd2FrZXVwX2NhbGxiYWNrKHNlbGYsIGNh bGxiYWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEzNzg0LDcgKzEzNzg0 LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMjhzZXRfd2FrZXVwX2NhbGxiYWNrKHMKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAK LS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzI4Ci0rLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjczMAotICAqICAgICAgICAgICAgIG1wdl9zZXRfd2FrZXVwX2Nh bGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1lKQotICAqIAotICAqICAg ICBkZWYgZ2V0X3dha2V1cF9waXBlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtMTM4MTYsNyArMTM4MTYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93YWtldXBfcGlwZShzdHJ1YwotICAgaW50 IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImdldF93 YWtldXBfcGlwZSIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjczMAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczMgotICAqICAgICBk ZWYgZ2V0X3dha2V1cF9waXBlKHNlbGYpOgotICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9nZXRf d2FrZXVwX3BpcGUiIiIKLSAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotQEAgLTEzODI3LDEyICsxMzgyNywxMiBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93YWtldXBf cGlwZShzdHJ1YwotICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Ci0gICAgIGlm ICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKLSAgICAgICBQeUVycl9T ZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKLS0gICAgICBfX1BZWF9FUlIoMCwgNzMwLCBf X3B5eF9MMV9lcnJvcikKLSsgICAgICBfX1BZWF9FUlIoMCwgNzMyLCBfX3B5eF9MMV9lcnJvcikK LSAgICAgfQotICAgfQotICAgI2VuZGlmCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NzMyCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzM0Ci0g ICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0gICogICAgICAgICBjZGVmIGludCBwaXBlCi0g ICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAt MTM4NDcsNyArMTM4NDcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93YWtldXBfcGlwZShzdHJ1YwotICAgICAgICNlbmRp ZgotICAgICAgIC8qdHJ5OiovIHsKLSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3MzMKLSsgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3MzUKLSAgKiAgICAgICAgIGNkZWYgaW50IHBpcGUKLSAgKiAgICAgICAgIHdpdGggbm9naWw6 Ci0gICogICAgICAgICAgICAgcGlwZSA9IG1wdl9nZXRfd2FrZXVwX3BpcGUoc2VsZi5fY3R4KSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTM4NTcsNyArMTM4NTcsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdl dF93YWtldXBfcGlwZShzdHJ1YwotICAgICAgICAgX19weXhfdl9waXBlID0gbXB2X2dldF93YWtl dXBfcGlwZShfX3B5eF92X3NlbGYtPl9jdHgpOwotICAgICAgIH0KLSAKLS0gICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzMyCi0rICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjczNAotICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAotICAqICAg ICAgICAgY2RlZiBpbnQgcGlwZQotICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotQEAgLTEzODc2LDcgKzEzODc2LDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzBnZXRfd2FrZXVwX3Bp cGUoc3RydWMKLSAgICAgICB9Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NzM0Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzM2Ci0g ICogICAgICAgICB3aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAgIHBpcGUgPSBtcHZfZ2V0X3dh a2V1cF9waXBlKHNlbGYuX2N0eCkKLSAgKiAgICAgICAgIHJldHVybiBwaXBlICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xMzg4NCwxMyArMTM4ODQsMTMgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzBnZXRfd2FrZXVw X3BpcGUoc3RydWMKLSAgKiAgICAgZGVmIF9fY2luaXRfXyhzZWxmKToKLSAgKi8KLSAgIF9fUHl4 X1hERUNSRUYoX19weXhfcik7Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChf X3B5eF92X3BpcGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3MzQs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19w eXhfdl9waXBlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNzM2LCBf X3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgX19weXhfciA9 IF9fcHl4X3RfMTsKLSAgIF9fcHl4X3RfMSA9IDA7Ci0gICBnb3RvIF9fcHl4X0wwOwotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyOAotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjczMAotICAqICAgICAgICAgICAgIG1wdl9zZXRfd2FrZXVwX2Nh bGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1lKQotICAqIAotICAqICAg ICBkZWYgZ2V0X3dha2V1cF9waXBlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtMTM5MDksNyArMTM5MDksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93YWtldXBfcGlwZShzdHJ1YwotICAgcmV0 dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MzYKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzM4Ci0gICogICAgICAgICBy ZXR1cm4gcGlwZQotICAqIAotICAqICAgICBkZWYgX19jaW5pdF9fKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTM5NDcsMjAgKzEzOTQ3LDIwIEBAIHN0YXRpYyBpbnQg X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMyX19jaW5pdF9fKHN0cnVj dCBfX3B5eF9vYmpfCi0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19jaW5pdF9fIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzM3Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzM5Ci0gICogCi0gICogICAgIGRlZiBfX2Npbml0X18oc2VsZik6Ci0gICogICAgICAgICBjZGVm IHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSAgKiAgICAgICAgIHdpdGggbm9naWw6Ci0gICogICAgICAgICAgICAgc2VsZi5f Y3R4ID0gbXB2X2NyZWF0ZSgpCi0gICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9D YWxsT25lQXJnKF9fcHl4X2J1aWx0aW5faWQsICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNzM3LCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfYnVpbHRp bl9pZCwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA3MzksIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7Ci0tICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90 XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJf T2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA3MzcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhf dF8yID0gX19QeXhfUHlJbnRfQXNfdWludDY0X3QoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChf X3B5eF90XzIgPT0gKCh1aW50NjRfdCktMSkpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9F UlIoMCwgNzM5LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOwotICAgX19weXhfdl9jdHhpZCA9ICgodWludDY0X3QpX19weXhfdF8yKTsK LSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MzgKLSsgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDAKLSAgKiAgICAgZGVmIF9fY2luaXRfXyhzZWxm KToKLSAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2VsZikK LSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC0xMzk3NSw3ICsxMzk3NSw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzMyX19jaW5pdF9fKHN0cnVjdCBfX3B5eF9vYmpfCi0gICAgICAgI2Vu ZGlmCi0gICAgICAgLyp0cnk6Ki8gewotIAotLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjczOQotKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjc0MQotICAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChz ZWxmKQotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAgICBzZWxmLl9jdHgg PSBtcHZfY3JlYXRlKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTEzOTg1LDcg KzEzOTg1LDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMzJfX2Npbml0X18oc3RydWN0IF9fcHl4X29ial8KLSAgICAgICAgIF9fcHl4X3Zfc2Vs Zi0+X2N0eCA9IG1wdl9jcmVhdGUoKTsKLSAgICAgICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjczOAotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3NDAKLSAgKiAgICAgZGVmIF9fY2luaXRfXyhzZWxmKToKLSAgKiAgICAgICAg IGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2VsZikKLSAgKiAgICAgICAgIHdp dGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNDAwNCw3ICsxNDAw NCw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzMyX19jaW5pdF9fKHN0cnVjdCBfX3B5eF9vYmpfCi0gICAgICAgfQotICAgfQotIAotLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0MAotKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc0MgotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAg ICAgICBzZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkKLSAgKiAgICAgICAgIGlmIG5vdCBzZWxmLl9j dHg6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNDAxNCwxNCArMTQwMTQsMTQg QEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJf X2Npbml0X18oc3RydWN0IF9fcHl4X29ial8KLSAgIF9fcHl4X3RfMyA9ICgoIShfX3B5eF92X3Nl bGYtPl9jdHggIT0gMCkpICE9IDApOwotICAgaWYgKHVubGlrZWx5KF9fcHl4X3RfMykpIHsKLSAK LS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0MQotKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQzCi0gICogICAgICAgICAgICAgc2VsZi5fY3R4 ID0gbXB2X2NyZWF0ZSgpCi0gICogICAgICAgICBpZiBub3Qgc2VsZi5fY3R4OgotICAqICAgICAg ICAgICAgIHJhaXNlIE1QVkVycm9yKCJDb250ZXh0IGNyZWF0aW9uIGVycm9yIikgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZCA9IENh bGxiYWNrVGhyZWFkKCkKLSAgKiAgICAgICAgIF9jYWxsYmFja3NbY3R4aWRdID0gc2VsZi5jYWxs YmFja3RocmVhZAotICAqLwotLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf NCwgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9F UlIoMCwgNzQxLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzQsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF80 KSkgX19QWVhfRVJSKDAsIDc0MywgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOwotICAgICBfX3B5eF90XzUgPSBOVUxMOwotICAgICBpZiAoQ1lUSE9OX1VOUEFD S19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNCkpKSB7Ci1AQCAt MTQwMzUsMTQgKzE0MDM1LDE0IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzMyX19jaW5pdF9fKHN0cnVjdCBfX3B5eF9vYmpfCi0gICAgIH0KLSAg ICAgX19weXhfdF8xID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19w eXhfdF80LCBfX3B5eF90XzUsIF9fcHl4X2twX3NfQ29udGV4dF9jcmVhdGlvbl9lcnJvcikgOiBf X1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNCwgX19weXhfa3Bfc19Db250ZXh0X2Ny ZWF0aW9uX2Vycm9yKTsKLSAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUg PSAwOwotLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3NDEsIF9f cHl4X0wxX2Vycm9yKQotKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA3NDMsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0gICAgIF9fUHl4X1Jh aXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOwotLSAgICBfX1BZWF9FUlIoMCwgNzQxLCBfX3B5eF9MMV9lcnJvcikKLSsg ICAgX19QWVhfRVJSKDAsIDc0MywgX19weXhfTDFfZXJyb3IpCi0gCi0tICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDAKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjc0MgotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAgICBz ZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkKLSAgKiAgICAgICAgIGlmIG5vdCBzZWxmLl9jdHg6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNDA1MSwxNCArMTQwNTEsMTQgQEAgc3Rh dGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJfX2Npbml0 X18oc3RydWN0IF9fcHl4X29ial8KLSAgKi8KLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3NDIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3NDQKLSAgKiAgICAgICAgIGlmIG5vdCBzZWxmLl9jdHg6Ci0gICogICAgICAgICAgICAgcmFp c2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3IiKQotICAqICAgICAgICAgc2VsZi5j YWxsYmFja3RocmVhZCA9IENhbGxiYWNrVGhyZWFkKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotICAqICAgICAgICAgX2NhbGxiYWNrc1tjdHhpZF0gPSBzZWxmLmNhbGxiYWNrdGhyZWFk Ci0gICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gZGljdCgpCi0gICovCi0tICBfX1B5 eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFk KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNzQyLCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3Nf Q2FsbGJhY2tUaHJlYWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3 NDQsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0gICBfX3B5 eF90XzUgPSBOVUxMOwotICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQ eU1ldGhvZF9DaGVjayhfX3B5eF90XzQpKSkgewotQEAgLTE0MDcyLDcgKzE0MDcyLDcgQEAgc3Rh dGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJfX2Npbml0 X18oc3RydWN0IF9fcHl4X29ial8KLSAgIH0KLSAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzUpID8g X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSkgOiBfX1B5eF9Q eU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF80KTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81 KTsgX19weXhfdF81ID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDc0MiwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCA3NDQsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSAgIF9fUHl4 X0dJVkVSRUYoX19weXhfdF8xKTsKLUBAIC0xNDA4MSw3ICsxNDA4MSw3IEBAIHN0YXRpYyBpbnQg X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMyX19jaW5pdF9fKHN0cnVj dCBfX3B5eF9vYmpfCi0gICBfX3B5eF92X3NlbGYtPmNhbGxiYWNrdGhyZWFkID0gX19weXhfdF8x OwotICAgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3NDMKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDUKLSAgKiAg ICAgICAgICAgICByYWlzZSBNUFZFcnJvcigiQ29udGV4dCBjcmVhdGlvbiBlcnJvciIpCi0gICog ICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkID0gQ2FsbGJhY2tUaHJlYWQoKQotICAqICAgICAg ICAgX2NhbGxiYWNrc1tjdHhpZF0gPSBzZWxmLmNhbGxiYWNrdGhyZWFkICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLUBAIC0xNDA5MCwxNyArMTQwOTAsMTcgQEAgc3RhdGljIGludCBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJfX2Npbml0X18oc3RydWN0IF9f cHl4X29ial8KLSAgKi8KLSAgIF9fcHl4X3RfMSA9IF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJl YWQ7Ci0gICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKLS0gIGlmICh1bmxpa2VseShfX1B5eF9T ZXRJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4 X3ZfY3R4aWQsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0 X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA3NDMsIF9fcHl4X0wxX2Vycm9yKQotKyAg aWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX2NhbGxiYWNrcywgX19weXhfdl9jdHhpZCwgX19weXhfdF8xLCB1aW50NjRfdCwgMCwgX19Q eXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc0NSwg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDQKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDYKLSAgKiAgICAgICAgIHNlbGYuY2FsbGJh Y2t0aHJlYWQgPSBDYWxsYmFja1RocmVhZCgpCi0gICogICAgICAgICBfY2FsbGJhY2tzW2N0eGlk XSA9IHNlbGYuY2FsbGJhY2t0aHJlYWQKLSAgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEg PSBkaWN0KCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgX3JlcGx5 X3VzZXJkYXRhc1tjdHhpZF0gPSBzZWxmLnJlcGx5X3VzZXJkYXRhCi0gICogICAgICAgICBzZWxm LmNhbGxiYWNrdGhyZWFkLnN0YXJ0KCkKLSAgKi8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5RGlj dF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg NzQ0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5RGljdF9OZXdQcmVz aXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNzQ2LCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgX19QeXhfR0lWRVJF RihfX3B5eF90XzEpOwotICAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRh dGEpOwotQEAgLTE0MTA4LDcgKzE0MTA4LDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJfX2Npbml0X18oc3RydWN0IF9fcHl4X29ial8KLSAg IF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBfX3B5eF90XzE7Ci0gICBfX3B5eF90XzEg PSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0NQotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0NwotICAqICAgICAgICAgX2NhbGxiYWNr c1tjdHhpZF0gPSBzZWxmLmNhbGxiYWNrdGhyZWFkCi0gICogICAgICAgICBzZWxmLnJlcGx5X3Vz ZXJkYXRhID0gZGljdCgpCi0gICogICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXSA9IHNl bGYucmVwbHlfdXNlcmRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE0MTE3 LDE3ICsxNDExNywxNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8zMl9fY2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXwotICAqLwotICAgX19weXhf dF8xID0gX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YTsKLSAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzEpOwotLSAgaWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcywgX19weXhfdl9jdHhpZCwgX19weXhfdF8x LCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkg X19QWVhfRVJSKDAsIDc0NSwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAodW5saWtlbHkoX19QeXhf U2V0SXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFz LCBfX3B5eF92X2N0eGlkLCBfX3B5eF90XzEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9t X3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzQ3LCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0NgotKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc0OAotICAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IGRp Y3QoKQotICAqICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0gPSBzZWxmLnJlcGx5X3Vz ZXJkYXRhCi0gICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnN0YXJ0KCkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotICAqIAotICAqICAgICBAX2Vycm9ycwotICAqLwotLSAgX19w eXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPmNhbGxiYWNr dGhyZWFkLCBfX3B5eF9uX3Nfc3RhcnQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCA3NDYsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF80ID0gX19QeXhfUHlPYmpl Y3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPmNhbGxiYWNrdGhyZWFkLCBfX3B5eF9uX3Nfc3Rh cnQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NDgsIF9fcHl4X0wx X2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0gICBfX3B5eF90XzUgPSBOVUxM OwotICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF80KSkpIHsKLUBAIC0xNDE0MSwxMiArMTQxNDEsMTIgQEAgc3RhdGljIGludCBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJfX2Npbml0X18oc3RydWN0IF9f cHl4X29ial8KLSAgIH0KLSAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmpl Y3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSkgOiBfX1B5eF9QeU9iamVjdF9DYWxs Tm9BcmcoX19weXhfdF80KTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81 ID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDc0NiwgX19w eXhfTDFfZXJyb3IpCi0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3 NDgsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX1B5 eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjczNgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczOAotICAq ICAgICAgICAgcmV0dXJuIHBpcGUKLSAgKiAKLSAgKiAgICAgZGVmIF9fY2luaXRfXyhzZWxmKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE0MTY4LDcgKzE0MTY4LDcgQEAgc3Rh dGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJfX2Npbml0 X18oc3RydWN0IF9fcHl4X29ial8KLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQ5Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjc1MQotICAqIAotICAqICAgICBAX2Vycm9ycwotICAqICAgICBkZWYgb2JzZXJ2 ZV9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci1AQCAtMTQyMTYsNyArMTQyMTYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNW9ic2VydmVfcHJvcGVydHkoUHlPYgot ICAgICAgICAgfQotICAgICAgIH0KLSAgICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7 Ci0tICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4 X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJvYnNlcnZlX3By b3BlcnR5IikgPCAwKSkgX19QWVhfRVJSKDAsIDc0OSwgX19weXhfTDNfZXJyb3IpCi0rICAgICAg ICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9f cHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJvYnNlcnZlX3Byb3BlcnR5Iikg PCAwKSkgX19QWVhfRVJSKDAsIDc1MSwgX19weXhfTDNfZXJyb3IpCi0gICAgICAgfQotICAgICB9 IGVsc2UgewotICAgICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgewot QEAgLTE0MjMyLDcgKzE0MjMyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzVvYnNlcnZlX3Byb3BlcnR5KFB5T2IKLSAgIH0KLSAg IGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7Ci0gICBfX3B5eF9MNV9hcmd0 dXBsZV9lcnJvcjo7Ci0tICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgib2JzZXJ2ZV9wcm9w ZXJ0eSIsIDAsIDEsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIo MCwgNzQ5LCBfX3B5eF9MM19lcnJvcikKLSsgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJv YnNlcnZlX3Byb3BlcnR5IiwgMCwgMSwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7 IF9fUFlYX0VSUigwLCA3NTEsIF9fcHl4X0wzX2Vycm9yKQotICAgX19weXhfTDNfZXJyb3I6Owot ICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5vYnNlcnZl X3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKLUBAIC0xNDI2OCw3ICsxNDI2OCw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1Ci0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgib2JzZXJ2ZV9wcm9wZXJ0eSIsIDApOwotICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfcHJvcCk7 Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzUxCi0rICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzUzCi0gICogICAgIGRlZiBvYnNlcnZlX3Byb3Bl cnR5KHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6Ci0gICogICAgICAgICAiIiJXcmFwczogbXB2X29i c2VydmVfcHJvcGVydHkiIiIKLSAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE0Mjc5LDQxICsxNDI3OSw0MSBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNG9ic2VydmVf cHJvcGVydHkoc3RydQotICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Ci0gICAg IGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKLSAgICAgICBQeUVy cl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKLS0gICAgICBfX1BZWF9FUlIoMCwgNzUx LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBfX1BZWF9FUlIoMCwgNzUzLCBfX3B5eF9MMV9lcnJv cikKLSAgICAgfQotICAgfQotICAgI2VuZGlmCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzUyCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzU0 Ci0gICogICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVfcHJvcGVydHkiIiIKLSAgKiAgICAg ICAgIGFzc2VydCBzZWxmLl9jdHgKLSAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9 IDx1aW50NjRfdD5oYXNoKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAg ICAgICAgIGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQotICAqICAgICAgICAgdXNlcmRh dGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKLSAgKi8KLS0gIF9f cHl4X3RfMSA9IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5KF9fcHl4 X3RfMSA9PSAoKFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIoMCwgNzUyLCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fcHl4X3RfMSA9IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRhKTsgaWYgKHVubGlr ZWx5KF9fcHl4X3RfMSA9PSAoKFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fcHl4X3ZfaWRfZGF0YSA9ICgodWludDY0X3QpX19weXhfdF8xKTsK LSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTMKLSsgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTUKLSAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9j dHgKLSAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRh dGEpCi0gICogICAgICAgICBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91 c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKLSAgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBO b25lOgotICAqLwotLSAgX19weXhfdF8xID0gUHlPYmplY3RfSGFzaChfX3B5eF92X2RhdGEpOyBp ZiAodW5saWtlbHkoX19weXhfdF8xID09ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlYX0VSUigwLCA3 NTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gUHlPYmplY3RfSGFzaChfX3B5eF92 X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF8xID09ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlY X0VSUigwLCA3NTUsIF9fcHl4X0wxX2Vycm9yKQotICAgX19weXhfdl9pZF9kYXRhID0gKCh1aW50 NjRfdClfX3B5eF90XzEpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojc1NAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1NgotICAqICAgICAg ICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKLSAgKiAgICAg ICAgIGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQotICAqICAgICAgICAgdXNlcmRhdGFz ID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6Ci0gICogICAg ICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBs eVVzZXJEYXRhKGRhdGEpCi0gICovCi0tICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X25fc19nZXQpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA3NTQsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPnJl cGx5X3VzZXJkYXRhLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBf X1BZWF9FUlIoMCwgNzU2LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzMpOwotLSAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5eF92X2lk X2RhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NTQsIF9fcHl4 X0wxX2Vycm9yKQotKyAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5 eF92X2lkX2RhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NTYs IF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0gICBfX3B5eF90 XzUgPSBOVUxMOwotICAgX19weXhfdF82ID0gMDsKLUBAIC0xNDMzMCw3ICsxNDMzMCw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM0 b2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1Ci0gICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCi0gICBpZiAo UHlGdW5jdGlvbl9DaGVjayhfX3B5eF90XzMpKSB7Ci0gICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1w WzNdID0ge19fcHl4X3RfNSwgX19weXhfdF80LCBQeV9Ob25lfTsKLS0gICAgX19weXhfdF8yID0g X19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1fX3B5eF90 XzYsIDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg NzU0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8yID0gX19QeXhfUHlGdW5jdGlvbl9G YXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1fX3B5eF90XzYsIDIrX19weXhfdF82KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzU2LCBfX3B5eF9MMV9lcnJv cikKLSAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9f cHl4X3RfNCA9IDA7Ci1AQCAtMTQzMzksMTQgKzE0MzM5LDE0IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0 eShzdHJ1Ci0gICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAotICAgaWYgKF9fUHl4X1B5RmFzdENG dW5jdGlvbl9DaGVjayhfX3B5eF90XzMpKSB7Ci0gICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNd ID0ge19fcHl4X3RfNSwgX19weXhfdF80LCBQeV9Ob25lfTsKLS0gICAgX19weXhfdF8yID0gX19Q eXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8zLCBfX3B5eF90ZW1wKzEtX19weXhfdF82 LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc1 NCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zh c3RDYWxsKF9fcHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NTYsIF9fcHl4X0wxX2Vycm9y KQotICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0gICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19w eXhfdF80ID0gMDsKLSAgIH0gZWxzZQotICAgI2VuZGlmCi0gICB7Ci0tICAgIF9fcHl4X3RfNyA9 IFB5VHVwbGVfTmV3KDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZ WF9FUlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF83ID0gUHlUdXBsZV9O ZXcoMitfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA3 NTYsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSAgICAg aWYgKF9fcHl4X3RfNSkgewotICAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF81KTsgUHlUdXBs ZV9TRVRfSVRFTShfX3B5eF90XzcsIDAsIF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IE5VTEw7Ci1A QCAtMTQzNTcsNyArMTQzNTcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNG9ic2VydmVfcHJvcGVydHkoc3RydQotICAgICBfX1B5 eF9HSVZFUkVGKFB5X05vbmUpOwotICAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMStf X3B5eF90XzYsIFB5X05vbmUpOwotICAgICBfX3B5eF90XzQgPSAwOwotLSAgICBfX3B5eF90XzIg PSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMywgX19weXhfdF83LCBOVUxMKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJvcikKLSsg ICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzMsIF9fcHl4X3RfNywg TlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc1NiwgX19weXhf TDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotICAgICBfX1B5eF9ERUNS RUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLSAgIH0KLUBAIC0xNDM2NSw3ICsxNDM2NSw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1Ci0gICBfX3B5eF92X3VzZXJkYXRhcyA9IF9fcHl4 X3RfMjsKLSAgIF9fcHl4X3RfMiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NzU1Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzU3Ci0g ICogICAgICAgICBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKLSAgKiAgICAgICAgIHVz ZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCi0gICogICAg ICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTE0Mzc2LDE0ICsxNDM3NiwxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNG9ic2VydmVfcHJvcGVydHkoc3RydQotICAgX19w eXhfdF85ID0gKF9fcHl4X3RfOCAhPSAwKTsKLSAgIGlmIChfX3B5eF90XzkpIHsKLSAKLS0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1NgotKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzU4Ci0gICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJl cGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQotICAqICAgICAgICAgaWYgdXNlcmRhdGFz IGlzIE5vbmU6Ci0gICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9 IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSAgKiAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9IFRydWUKLSAgKiAgICAgICAg IHByb3AgPSBfc3RyZW5jKHByb3ApCi0gICovCi0tICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF8zLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8zKSkgX19QWVhfRVJSKDAsIDc1NiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUHl4X0dl dE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8zLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc1OCwgX19weXhfTDFfZXJyb3Ip Ci0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotICAgICBfX3B5eF90XzcgPSBOVUxMOwot ICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNr KF9fcHl4X3RfMykpKSB7Ci1AQCAtMTQzOTcsMTUgKzE0Mzk3LDE1IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM0b2JzZXJ2ZV9wcm9w ZXJ0eShzdHJ1Ci0gICAgIH0KLSAgICAgX19weXhfdF8yID0gKF9fcHl4X3RfNykgPyBfX1B5eF9Q eU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8zLCBfX3B5eF90XzcsIF9fcHl4X3ZfZGF0YSkgOiBf X1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdl9kYXRhKTsKLSAgICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotLSAgICBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NTYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NTgsIF9fcHl4X0wxX2Vycm9y KQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICAgIGlmICh1bmxpa2VseShfX1B5eF9TZXRJdGVtSW50 KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X3ZfaWRfZGF0YSwgX19weXhfdF8y LCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkg X19QWVhfRVJSKDAsIDc1NiwgX19weXhfTDFfZXJyb3IpCi0rICAgIGlmICh1bmxpa2VseShfX1B5 eF9TZXRJdGVtSW50KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X3ZfaWRfZGF0 YSwgX19weXhfdF8yLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwg MCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc1OCwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzIpOwotICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfdXNlcmRh dGFzLCBfX3B5eF90XzIpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8y ID0gMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1NQotKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzU3Ci0gICogICAgICAgICBpZF9k YXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKLSAgKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYu cmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCi0gICogICAgICAgICBpZiB1c2VyZGF0 YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE0NDE0LDIzICsx NDQxNCwyMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8zNG9ic2VydmVfcHJvcGVydHkoc3RydQotICAqLwotICAgfQotIAotLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1NwotKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc1OQotICAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6Ci0g ICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9 IF9SZXBseVVzZXJEYXRhKGRhdGEpCi0gICogICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBU cnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIHByb3AgPSBfc3Ry ZW5jKHByb3ApCi0gICogICAgICAgICBjZGVmIGNoYXIqIHByb3BjID0gcHJvcAotICAqLwotLSAg aWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X25f c19vYnNlcnZlZCwgUHlfVHJ1ZSkgPCAwKSBfX1BZWF9FUlIoMCwgNzU3LCBfX3B5eF9MMV9lcnJv cikKLSsgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGFzLCBf X3B5eF9uX3Nfb2JzZXJ2ZWQsIFB5X1RydWUpIDwgMCkgX19QWVhfRVJSKDAsIDc1OSwgX19weXhf TDFfZXJyb3IpCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzU4Ci0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzYwCi0gICogICAgICAgICAgICAg c2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRh KGRhdGEpCi0gICogICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlCi0gICogICAgICAg ICBwcm9wID0gX3N0cmVuYyhwcm9wKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICog ICAgICAgICBjZGVmIGNoYXIqIHByb3BjID0gcHJvcAotICAqICAgICAgICAgY2RlZiBpbnQgZXJy Ci0gICovCi0tICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMywgX19weXhfbl9z X3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc1OCwgX19w eXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMywgX19w eXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc2 MCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSAgIF9fcHl4 X3RfNyA9IE5VTEw7Ci0gICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7Ci1AQCAtMTQ0NDQsMjMgKzE0NDQ0LDIzIEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM0 b2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1Ci0gICB9Ci0gICBfX3B5eF90XzIgPSAoX19weXhfdF83KSA/ IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzMsIF9fcHl4X3RfNywgX19weXhfdl9w cm9wKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF92X3Byb3Ap OwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotLSAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzU4LCBfX3B5eF9MMV9lcnJvcikKLSsg IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc2MCwgX19weXhfTDFfZXJy b3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOwotICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3Byb3AsIF9f cHl4X3RfMik7Ci0gICBfX3B5eF90XzIgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjc1OQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc2 MQotICAqICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gVHJ1ZQotICAqICAgICAgICAgcHJv cCA9IF9zdHJlbmMocHJvcCkKLSAgKiAgICAgICAgIGNkZWYgY2hhciogcHJvcGMgPSBwcm9wICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIGNkZWYgaW50IGVycgotICAq ICAgICAgICAgd2l0aCBub2dpbDoKLSAgKi8KLS0gIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVj dF9Bc1dyaXRhYmxlU3RyaW5nKF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3Rf MTApICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNzU5LCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9Bc1dyaXRhYmxlU3RyaW5nKF9fcHl4 X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfMTApICYmIFB5RXJyX09jY3VycmVkKCkp KSBfX1BZWF9FUlIoMCwgNzYxLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fcHl4X3ZfcHJvcGMgPSBf X3B5eF90XzEwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc2MQot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc2MwotICAqICAgICAgICAgY2Rl ZiBjaGFyKiBwcm9wYyA9IHByb3AKLSAgKiAgICAgICAgIGNkZWYgaW50IGVycgotICAqICAgICAg ICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE0NDc1LDcg KzE0NDc1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMzRvYnNlcnZlX3Byb3BlcnR5KHN0cnUKLSAgICAgICAjZW5kaWYKLSAgICAg ICAvKnRyeToqLyB7Ci0gCi0tICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NzYyCi0rICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzY0Ci0g ICogICAgICAgICBjZGVmIGludCBlcnIKLSAgKiAgICAgICAgIHdpdGggbm9naWw6Ci0gICogICAg ICAgICAgICAgZXJyID0gbXB2X29ic2VydmVfcHJvcGVydHkoICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLUBAIC0xNDQ4NSw3ICsxNDQ4NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1 Ci0gICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9vYnNlcnZlX3Byb3BlcnR5KF9fcHl4X3Zfc2Vs Zi0+X2N0eCwgX19weXhfdl9pZF9kYXRhLCBfX3B5eF92X3Byb3BjLCBNUFZfRk9STUFUX05PREUp OwotICAgICAgIH0KLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzYxCi0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc2MwotICAqICAg ICAgICAgY2RlZiBjaGFyKiBwcm9wYyA9IHByb3AKLSAgKiAgICAgICAgIGNkZWYgaW50IGVycgot ICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAg LTE0NTA0LDcgKzE0NTA0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMzRvYnNlcnZlX3Byb3BlcnR5KHN0cnUKLSAgICAgICB9Ci0g ICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzY4Ci0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzcwCi0gICogICAgICAgICAgICAgICAgIE1Q Vl9GT1JNQVRfTk9ERSwKLSAgKiAgICAgICAgICAgICApCi0gICogICAgICAgICByZXR1cm4gZXJy ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNDUxMiwxMyArMTQ1MTIsMTMgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MzRvYnNlcnZlX3Byb3BlcnR5KHN0cnUKLSAgKiAgICAgQF9lcnJvcnMKLSAgKi8KLSAgIF9fUHl4 X1hERUNSRUYoX19weXhfcik7Ci0tICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2ludChf X3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc2OCwg X19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5 eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc3MCwgX19w eXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgIF9fcHl4X3IgPSBf X3B5eF90XzI7Ci0gICBfX3B5eF90XzIgPSAwOwotICAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDkKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3NTEKLSAgKiAKLSAgKiAgICAgQF9lcnJvcnMKLSAgKiAgICAgZGVm IG9ic2VydmVfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotQEAgLTE0NTQzLDcgKzE0NTQzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzRvYnNlcnZlX3Byb3BlcnR5 KHN0cnUKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzcxCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3Mwot ICAqIAotICAqICAgICBAX2Vycm9ycwotICAqICAgICBkZWYgdW5vYnNlcnZlX3Byb3BlcnR5KHNl bGYsIGRhdGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTQ1ODUsNyArMTQ1 ODUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0eShzdAotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAw OwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVub2JzZXJ2ZV9wcm9wZXJ0eSIsIDAp OwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3MwotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3NQotICAqICAgICBkZWYgdW5vYnNlcnZlX3By b3BlcnR5KHNlbGYsIGRhdGEpOgotICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl91bm9ic2VydmVf cHJvcGVydHkiIiIKLSAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotQEAgLTE0NTk2LDMxICsxNDU5NiwzMSBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9w ZXJ0eShzdAotICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Ci0gICAgIGlmICh1 bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKLSAgICAgICBQeUVycl9TZXRO b25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKLS0gICAgICBfX1BZWF9FUlIoMCwgNzczLCBfX3B5 eF9MMV9lcnJvcikKLSsgICAgICBfX1BZWF9FUlIoMCwgNzc1LCBfX3B5eF9MMV9lcnJvcikKLSAg ICAgfQotICAgfQotICAgI2VuZGlmCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6Nzc0Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc2Ci0gICog ICAgICAgICAiIiJXcmFwczogbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSIiIgotICAqICAgICAgICAg YXNzZXJ0IHNlbGYuX2N0eAotICAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVp bnQ2NF90Pmhhc2goZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAg ICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKLSAg KiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBub3QgTm9uZToKLSAgKi8KLS0gIF9fcHl4X3RfMSA9 IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMSA9PSAo KFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIoMCwgNzc0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f cHl4X3RfMSA9IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5KF9fcHl4 X3RfMSA9PSAoKFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIoMCwgNzc2LCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fcHl4X3ZfaWRfZGF0YSA9ICgodWludDY0X3QpX19weXhfdF8xKTsKLSAKLS0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzUKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3NzcKLSAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSAgKiAg ICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCi0gICog ICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25l KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBpZiB1c2VyZGF0YXMg aXMgbm90IE5vbmU6Ci0gICogICAgICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gRmFsc2UK LSAgKi8KLS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9z ZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDAsIDc3NSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMgPSBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9f cHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA3Nzcs IF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0tICBfX3B5eF90 XzQgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfaWRfZGF0YSk7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc3NSwgX19weXhfTDFfZXJyb3IpCi0rICBf X3B5eF90XzQgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfaWRfZGF0YSk7IGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc3NywgX19weXhfTDFfZXJyb3Ip Ci0gICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSAgIF9fcHl4X3RfNSA9IE5VTEw7Ci0gICBf X3B5eF90XzYgPSAwOwotQEAgLTE0NjM3LDcgKzE0NjM3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVy dHkoc3QKLSAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKLSAgIGlmIChQeUZ1bmN0aW9uX0NoZWNr KF9fcHl4X3RfMykpIHsKLSAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF81 LCBfX3B5eF90XzQsIFB5X05vbmV9OwotLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUZ1bmN0aW9u X0Zhc3RDYWxsKF9fcHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vy cm9yKQotKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3Rf MywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzcsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0gICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLUBA IC0xNDY0NiwxNCArMTQ2NDYsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVydHkoc3QKLSAgICNpZiBD WVRIT05fRkFTVF9QWUNDQUxMCi0gICBpZiAoX19QeXhfUHlGYXN0Q0Z1bmN0aW9uX0NoZWNrKF9f cHl4X3RfMykpIHsKLSAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF81LCBf X3B5eF90XzQsIFB5X05vbmV9OwotLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUNGdW5jdGlvbl9G YXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1fX3B5eF90XzYsIDIrX19weXhfdF82KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzc1LCBfX3B5eF9MMV9lcnJv cikKLSsgICAgX19weXhfdF8yID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8z LCBfX3B5eF90ZW1wKzEtX19weXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDc3NywgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMik7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotICAg fSBlbHNlCi0gICAjZW5kaWYKLSAgIHsKLS0gICAgX19weXhfdF83ID0gUHlUdXBsZV9OZXcoMitf X3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA3NzUsIF9f cHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfNik7 IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDc3NywgX19weXhfTDFfZXJy b3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotICAgICBpZiAoX19weXhfdF81KSB7 Ci0gICAgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzUpOyBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfNywgMCwgX19weXhfdF81KTsgX19weXhfdF81ID0gTlVMTDsKLUBAIC0xNDY2NCw3ICsxNDY2 NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzM2dW5vYnNlcnZlX3Byb3BlcnR5KHN0Ci0gICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9u ZSk7Ci0gICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfNiwgUHlfTm9u ZSk7Ci0gICAgIF9fcHl4X3RfNCA9IDA7Ci0tICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0 X0NhbGwoX19weXhfdF8zLCBfX3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzIgPSBf X1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMywgX19weXhfdF83LCBOVUxMKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzc3LCBfX3B5eF9MMV9lcnJvcikKLSAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBf X3B5eF90XzcgPSAwOwotICAgfQotQEAgLTE0NjcyLDcgKzE0NjcyLDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVf cHJvcGVydHkoc3QKLSAgIF9fcHl4X3ZfdXNlcmRhdGFzID0gX19weXhfdF8yOwotICAgX19weXhf dF8yID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzYKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzgKLSAgKiAgICAgICAgIGNkZWYg dWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCi0gICogICAgICAgICB1c2Vy ZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQotICAqICAgICAg ICAgaWYgdXNlcmRhdGFzIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtMTQ2ODMsNDAgKzE0NjgzLDQwIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM2dW5vYnNlcnZlX3Byb3BlcnR5KHN0Ci0gICBf X3B5eF90XzkgPSAoX19weXhfdF84ICE9IDApOwotICAgaWYgKF9fcHl4X3RfOSkgewotIAotLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc3Ci0rICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzkKLSAgKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYu cmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCi0gICogICAgICAgICBpZiB1c2VyZGF0 YXMgaXMgbm90IE5vbmU6Ci0gICogICAgICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gRmFs c2UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgICAgIGlmIHVzZXJk YXRhcy5jb3VudGVyIDw9IDA6Ci0gICogICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJlcGx5X3Vz ZXJkYXRhW2lkX2RhdGFdCi0gICovCi0tICAgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3Ry KF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3Nfb2JzZXJ2ZWQsIFB5X0ZhbHNlKSA8IDApIF9f UFlYX0VSUigwLCA3NzcsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBpZiAoX19QeXhfUHlPYmplY3Rf U2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX29ic2VydmVkLCBQeV9GYWxz ZSkgPCAwKSBfX1BZWF9FUlIoMCwgNzc5LCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3OAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzgwCi0gICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgbm90IE5vbmU6 Ci0gICogICAgICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gRmFsc2UKLSAgKiAgICAgICAg ICAgICBpZiB1c2VyZGF0YXMuY291bnRlciA8PSAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0gICogICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFd Ci0gICogICAgICAgICBjZGVmIGludCBlcnIKLSAgKi8KLS0gICAgX19weXhfdF8yID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX2NvdW50ZXIp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzgsIF9fcHl4X0wxX2Vy cm9yKQotKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zf dXNlcmRhdGFzLCBfX3B5eF9uX3NfY291bnRlcik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDc4MCwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOwotLSAgICBfX3B5eF90XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF90XzIs IF9fcHl4X2ludF8wLCBQeV9MRSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNzc4LCBfX3B5eF9MMV9lcnJvcikKLSsgICAg X19weXhfdF8zID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdF8yLCBfX3B5eF9pbnRfMCwg UHlfTEUpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8z KSkgX19QWVhfRVJSKDAsIDc4MCwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgICBfX3B5eF90XzkgPSBfX1B5eF9QeU9iamVj dF9Jc1RydWUoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfOSA8IDApKSBfX1BZWF9F UlIoMCwgNzc4LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF85ID0gX19QeXhfUHlPYmpl Y3RfSXNUcnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5eF90XzkgPCAwKSkgX19QWVhf RVJSKDAsIDc4MCwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMp OyBfX3B5eF90XzMgPSAwOwotICAgICBpZiAoX19weXhfdF85KSB7Ci0gCi0tICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3OQotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3ODEKLSAgKiAgICAgICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQg PSBGYWxzZQotICAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcy5jb3VudGVyIDw9IDA6Ci0gICog ICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIGNkZWYgaW50IGVycgotICAqICAgICAg ICAgd2l0aCBub2dpbDoKLSAgKi8KLS0gICAgICBpZiAodW5saWtlbHkoX19QeXhfRGVsSXRlbUlu dChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2lkX2RhdGEsIHVpbnQ2NF90 LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIo MCwgNzc5LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBpZiAodW5saWtlbHkoX19QeXhfRGVsSXRl bUludChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2lkX2RhdGEsIHVpbnQ2 NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9F UlIoMCwgNzgxLCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6Nzc4Ci0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjc4MAotICAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIG5vdCBOb25lOgotICAqICAgICAg ICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9IEZhbHNlCi0gICogICAgICAgICAgICAgaWYgdXNl cmRhdGFzLmNvdW50ZXIgPD0gMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE0 NzI1LDcgKzE0NzI1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVydHkoc3QKLSAgKi8KLSAgICAgfQot IAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc2Ci0rICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzgKLSAgKiAgICAgICAgIGNkZWYgdWludDY0 X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCi0gICogICAgICAgICB1c2VyZGF0YXMg PSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQotICAqICAgICAgICAgaWYg dXNlcmRhdGFzIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAt MTQ3MzQsNyArMTQ3MzQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0eShzdAotICAqLwotICAgfQot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4MQotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4MwotICAqICAgICAgICAgICAgICAgICBkZWwgc2Vs Zi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXQotICAqICAgICAgICAgY2RlZiBpbnQgZXJyCi0gICog ICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTQ3 NDksNyArMTQ3NDksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0eShzdAotICAgICAgICNlbmRpZgot ICAgICAgIC8qdHJ5OiovIHsKLSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo3ODIKLSsgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 ODQKLSAgKiAgICAgICAgIGNkZWYgaW50IGVycgotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAg KiAgICAgICAgICAgICBlcnIgPSBtcHZfdW5vYnNlcnZlX3Byb3BlcnR5KCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTQ3NTksNyArMTQ3NTksNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9w ZXJ0eShzdAotICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfdW5vYnNlcnZlX3Byb3BlcnR5KF9f cHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9pZF9kYXRhKTsKLSAgICAgICB9Ci0gCi0tICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4MQotKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3ODMKLSAgKiAgICAgICAgICAgICAgICAgZGVsIHNlbGYu cmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0KLSAgKiAgICAgICAgIGNkZWYgaW50IGVycgotICAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE0Nzc4 LDcgKzE0Nzc4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVydHkoc3QKLSAgICAgICB9Ci0gICB9Ci0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg2Ci0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg4Ci0gICogICAgICAgICAgICAgICAgIGlkX2RhdGEs Ci0gICogICAgICAgICAgICAgKQotICAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTQ3ODYsMTMgKzE0Nzg2LDEzIEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM2dW5vYnNlcnZlX3By b3BlcnR5KHN0Ci0gICogICAgIGRlZiBzaHV0ZG93bihzZWxmKToKLSAgKi8KLSAgIF9fUHl4X1hE RUNSRUYoX19weXhfcik7Ci0tICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5 eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc4NiwgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92 X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc4OCwgX19weXhf TDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSAgIF9fcHl4X3IgPSBfX3B5 eF90XzM7Ci0gICBfX3B5eF90XzMgPSAwOwotICAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzEKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3NzMKLSAgKiAKLSAgKiAgICAgQF9lcnJvcnMKLSAgKiAgICAgZGVmIHVu b2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBkYXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotQEAgLTE0ODE2LDcgKzE0ODE2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVydHkoc3QKLSAgIHJl dHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 Nzg4Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5MAotICAqICAgICAgICAg cmV0dXJuIGVycgotICAqIAotICAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNDg1MSw3ICsxNDg1MSw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24oc3Ry dWN0IF9fcHl4Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgic2h1dGRvd24iLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3ODkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTEK LSAgKiAKLSAgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOgotICAqICAgICAgICAgaWYgc2VsZi5f Y3R4ID09IE5VTEw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNDg2MSw3ICsx NDg2MSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzM4c2h1dGRvd24oc3RydWN0IF9fcHl4Ci0gICBfX3B5eF90XzEgPSAoKF9fcHl4 X3Zfc2VsZi0+X2N0eCA9PSBOVUxMKSAhPSAwKTsKLSAgIGlmIChfX3B5eF90XzEpIHsKLSAKLS0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5MAotKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzkyCi0gICogICAgIGRlZiBzaHV0ZG93bihzZWxmKToK LSAgKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgotICAqICAgICAgICAgICAgIHJldHVy biAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTQ4NzIsNyArMTQ4NzIsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8z OHNodXRkb3duKHN0cnVjdCBfX3B5eAotICAgICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5D UkVGKFB5X05vbmUpOwotICAgICBnb3RvIF9fcHl4X0wwOwotIAotLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg5Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo3OTEKLSAgKiAKLSAgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOgotICAqICAgICAg ICAgaWYgc2VsZi5fY3R4ID09IE5VTEw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC0xNDg4MSwyMCArMTQ4ODEsMjAgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzhzaHV0ZG93bihzdHJ1Y3QgX19weXgKLSAgKi8KLSAg IH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTEKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTMKLSAgKiAgICAgICAgIGlmIHNlbGYuX2N0 eCA9PSBOVUxMOgotICAqICAgICAgICAgICAgIHJldHVybgotICAqICAgICAgICAgY2RlZiB1aW50 NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0gICogICAgICAgICB3aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAgIG1wdl90ZXJtaW5h dGVfZGVzdHJveShzZWxmLl9jdHgpCi0gICovCi0tICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVj dF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5faWQsICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYp KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzkxLCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfYnVp bHRpbl9pZCwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA3OTMsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7Ci0tICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5 eF90XzIpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlF cnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA3OTEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19w eXhfdF8zID0gX19QeXhfUHlJbnRfQXNfdWludDY0X3QoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5 KChfX3B5eF90XzMgPT0gKCh1aW50NjRfdCktMSkpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZ WF9FUlIoMCwgNzkzLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOwotICAgX19weXhfdl9jdHhpZCA9ICgodWludDY0X3QpX19weXhfdF8z KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTIKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTQKLSAgKiAgICAgICAgICAgICByZXR1cm4K LSAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2VsZikKLSAg KiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0x NDkwOSw3ICsxNDkwOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24oc3RydWN0IF9fcHl4Ci0gICAgICAgI2VuZGlm Ci0gICAgICAgLyp0cnk6Ki8gewotIAotLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjc5MwotKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojc5NQotICAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxm KQotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAgICBtcHZfdGVybWluYXRl X2Rlc3Ryb3koc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTQ5 MTksNyArMTQ5MTksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8zOHNodXRkb3duKHN0cnVjdCBfX3B5eAotICAgICAgICAgbXB2X3Rl cm1pbmF0ZV9kZXN0cm95KF9fcHl4X3Zfc2VsZi0+X2N0eCk7Ci0gICAgICAgfQotIAotLSAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTIKLSsgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk0Ci0gICogICAgICAgICAgICAgcmV0dXJuCi0gICog ICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCi0gICogICAg ICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTQ5Mzgs MTQgKzE0OTM4LDE0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24oc3RydWN0IF9fcHl4Ci0gICAgICAgfQotICAgfQot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5NAotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5NgotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAg KiAgICAgICAgICAgICBtcHZfdGVybWluYXRlX2Rlc3Ryb3koc2VsZi5fY3R4KQotICAqICAgICAg ICAgc2VsZi5jYWxsYmFja3RocmVhZC5zaHV0ZG93bigpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSAgKiAgICAgICAgIGRlbCBfY2FsbGJhY2tzW2N0eGlkXQotICAqICAgICAgICAgZGVs IF9yZXBseV91c2VyZGF0YXNbY3R4aWRdCi0gICovCi0tICBfX3B5eF90XzQgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQsIF9fcHl4X25fc19z aHV0ZG93bik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc5NCwgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQsIF9fcHl4X25fc19zaHV0ZG93bik7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc5NiwgX19weXhfTDFfZXJyb3IpCi0gICBf X1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSAgIF9fcHl4X3RfNSA9IE5VTEw7Ci0gICBpZiAoQ1lU SE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzQpKSkg ewotQEAgLTE0OTU5LDMwICsxNDk1OSwzMCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zOHNodXRkb3duKHN0cnVjdCBfX3B5eAotICAg fQotICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfNCwgX19weXhfdF81KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90 XzQpOwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotLSAgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzk0LCBfX3B5eF9MMV9lcnJvcikK LSsgIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc5NiwgX19weXhfTDFf ZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzQpOyBfX3B5eF90XzQgPSAwOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk1Ci0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk3Ci0gICogICAgICAgICAgICAg bXB2X3Rlcm1pbmF0ZV9kZXN0cm95KHNlbGYuX2N0eCkKLSAgKiAgICAgICAgIHNlbGYuY2FsbGJh Y2t0aHJlYWQuc2h1dGRvd24oKQotICAqICAgICAgICAgZGVsIF9jYWxsYmFja3NbY3R4aWRdICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRh dGFzW2N0eGlkXQotICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKLSAgKi8KLS0gIGlm ICh1bmxpa2VseShfX1B5eF9EZWxJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2 X19jYWxsYmFja3MsIF9fcHl4X3ZfY3R4aWQsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9t X3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzk1LCBfX3B5eF9MMV9lcnJv cikKLSsgIGlmICh1bmxpa2VseShfX1B5eF9EZWxJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80 bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3ZfY3R4aWQsIHVpbnQ2NF90LCAwLCBfX1B5eF9Q eUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzk3LCBfX3B5 eF9MMV9lcnJvcikKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTYK LSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTgKLSAgKiAgICAgICAgIHNl bGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRvd24oKQotICAqICAgICAgICAgZGVsIF9jYWxsYmFja3Nb Y3R4aWRdCi0gICogICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0gICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKLSAg KiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBOb25lCi0gICovCi0tICBpZiAodW5saWtl bHkoX19QeXhfRGVsSXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlf dXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91 aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc5NiwgX19weXhfTDFfZXJyb3Ip Ci0rICBpZiAodW5saWtlbHkoX19QeXhfRGVsSXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50NjRfdCwgMCwgX19Q eXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc5OCwg X19weXhfTDFfZXJyb3IpCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 Nzk3Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk5Ci0gICogICAgICAg ICBkZWwgX2NhbGxiYWNrc1tjdHhpZF0KLSAgKiAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFz W2N0eGlkXQotICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotQEAgLTE0OTk1LDcgKzE0OTk1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzhzaHV0ZG93bihzdHJ1Y3Qg X19weXgKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmNhbGxiYWNrKTsKLSAgIF9fcHl4 X3Zfc2VsZi0+Y2FsbGJhY2sgPSBQeV9Ob25lOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjc5OAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgw MAotICAqICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdCi0gICogICAgICAgICBz ZWxmLmNhbGxiYWNrID0gTm9uZQotICAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IE5v bmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE1MDA4LDcgKzE1MDA4LDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MzhzaHV0ZG93bihzdHJ1Y3QgX19weXgKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnJl cGx5X3VzZXJkYXRhKTsKLSAgIF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBQeV9Ob25l OwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5OQotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgwMQotICAqICAgICAgICAgc2VsZi5jYWxsYmFj ayA9IE5vbmUKLSAgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBOb25lCi0gICogICAg ICAgICBzZWxmLl9jdHggPSBOVUxMICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0x NTAxNyw3ICsxNTAxNyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24oc3RydWN0IF9fcHl4Ci0gICovCi0gICBfX3B5 eF92X3NlbGYtPl9jdHggPSBOVUxMOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjc4OAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5MAotICAq ICAgICAgICAgcmV0dXJuIGVycgotICAqIAotICAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNTA0MCw3ICsxNTA0MCw3IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4c2h1 dGRvd24oc3RydWN0IF9fcHl4Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxMwotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4MTUKLSAgKiAgICAgIyAgICAgcmV0dXJuIGN0eAotICAqIAotICAqICAgICBkZWYg X19kZWFsbG9jX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNTA2 OSwxNCArMTUwNjksMTQgQEAgc3RhdGljIHZvaWQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzQwX19kZWFsbG9jX18oc3RydWN0IF9fcHl4X28KLSAgIGludCBfX3B5eF9j bGluZW5vID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlYWxsb2NfXyIs IDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNAotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNgotICAqIAotICAqICAgICBkZWYgX19k ZWFsbG9jX18oc2VsZik6Ci0gICogICAgICAgICBzZWxmLnNodXRkb3duKCkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotICAqIAotICAqIGNkZWYgdm9pZCAqX2NfZ2V0cHJvY2FkZHJlc3Mo dm9pZCAqY3R4LCBjb25zdCBjaGFyICpuYW1lKSB3aXRoIGdpbDoKLSAgKi8KLS0gIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiks IF9fcHl4X25fc19zaHV0ZG93bik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDgxNCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9H ZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3Nfc2h1dGRvd24p OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA4MTYsIF9fcHl4X0wxX2Vy cm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0gICBfX3B5eF90XzMgPSBOVUxMOwot ICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19w eXhfdF8yKSkpIHsKLUBAIC0xNTA5MCwxMiArMTUwOTAsMTIgQEAgc3RhdGljIHZvaWQgX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQwX19kZWFsbG9jX18oc3RydWN0IF9f cHl4X28KLSAgIH0KLSAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9B cmcoX19weXhfdF8yKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDgxNCwgX19weXhf TDFfZXJyb3IpCi0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4MTYs IF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjgxMwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNQotICAqICAg ICAjICAgICByZXR1cm4gY3R4Ci0gICogCi0gICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE1MjI3LDcgKzE1MjI3LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDRf X3NldHN0YXRlX2N5dGhvbl9fKEMKLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODE2Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjgxOAotICAqICAgICAgICAgc2VsZi5zaHV0ZG93bigpCi0gICogCi0gICogY2Rl ZiB2b2lkICpfY19nZXRwcm9jYWRkcmVzcyh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUpIHdp dGggZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTUyNTEsMTQgKzE1MjUx LDE0IEBAIHN0YXRpYyB2b2lkICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY19nZXRw cm9jYWRkcmVzcyh2b2lkICpfX3B5eF92X2N0eCwKLSAgICNlbmRpZgotICAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9jX2dldHByb2NhZGRyZXNzIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODE3Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODE5Ci0gICogCi0gICogY2RlZiB2b2lkICpfY19nZXRwcm9jYWRkcmVzcyh2b2lk ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUpIHdpdGggZ2lsOgotICAqICAgICByZXR1cm4gPHZvaWQg Kj48aW50cHRyX3Q+KDxvYmplY3Q+Y3R4KShuYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0gICogCi0gICogY2RlZiB2b2lkIF9jX3VwZGF0ZWNiKHZvaWQgKmN0eCkgd2l0aCBnaWw6 Ci0gICovCi0tICBfX3B5eF90XzIgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9u YW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgODE3LCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92 X25hbWUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA4MTksIF9fcHl4 X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0gICBfX1B5eF9JTkNSRUYo KChQeU9iamVjdCAqKV9fcHl4X3ZfY3R4KSk7Ci0gICBfX3B5eF90XzMgPSAoKFB5T2JqZWN0ICop X19weXhfdl9jdHgpOyBfX3B5eF90XzQgPSBOVUxMOwotQEAgLTE1Mjc0LDE1ICsxNTI3NCwxNSBA QCBzdGF0aWMgdm9pZCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfZ2V0cHJvY2Fk ZHJlc3Modm9pZCAqX19weXhfdl9jdHgsCi0gICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9f UHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzMsIF9fcHl4X3RfNCwgX19weXhfdF8yKSA6 IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF90XzIpOwotICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCA4MTcsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgODE5LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0t ICBfX3B5eF90XzUgPSBfX1B5eF9QeUludF9Bc19pbnRwdHJfdChfX3B5eF90XzEpOyBpZiAodW5s aWtlbHkoKF9fcHl4X3RfNSA9PSAoKGludHB0cl90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkp IF9fUFlYX0VSUigwLCA4MTcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF81ID0gX19QeXhf UHlJbnRfQXNfaW50cHRyX3QoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzUgPT0g KChpbnRwdHJfdCktMSkpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgODE5LCBf X3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OwotICAgX19weXhfciA9ICgodm9pZCAqKSgoaW50cHRyX3QpX19weXhfdF81KSk7Ci0gICBnb3Rv IF9fcHl4X0wwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNgot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxOAotICAqICAgICAgICAgc2Vs Zi5zaHV0ZG93bigpCi0gICogCi0gICogY2RlZiB2b2lkICpfY19nZXRwcm9jYWRkcmVzcyh2b2lk ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUpIHdpdGggZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci1AQCAtMTUzMDYsNyArMTUzMDYsNyBAQCBzdGF0aWMgdm9pZCAqX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX2NfZ2V0cHJvY2FkZHJlc3Modm9pZCAqX19weXhfdl9jdHgsCi0g ICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjgxOQotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MjEKLSAgKiAgICAg cmV0dXJuIDx2b2lkICo+PGludHB0cl90Pig8b2JqZWN0PmN0eCkobmFtZSkKLSAgKiAKLSAgKiBj ZGVmIHZvaWQgX2NfdXBkYXRlY2Iodm9pZCAqY3R4KSB3aXRoIGdpbDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotQEAgLTE1MzI3LDcgKzE1MzI3LDcgQEAgc3RhdGljIHZvaWQgX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfdXBkYXRlY2Iodm9pZCAqX19weXhfdl9jdHgpIHsK LSAgICNlbmRpZgotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9jX3VwZGF0ZWNiIiwg MCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODIwCi0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODIyCi0gICogCi0gICogY2RlZiB2b2lkIF9j X3VwZGF0ZWNiKHZvaWQgKmN0eCkgd2l0aCBnaWw6Ci0gICogICAgICg8b2JqZWN0PmN0eCkoKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTUzNDcsMTIgKzE1MzQ3LDEyIEBAIHN0 YXRpYyB2b2lkIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX3VwZGF0ZWNiKHZvaWQg Kl9fcHl4X3ZfY3R4KSB7Ci0gICB9Ci0gICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4 X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmpl Y3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4 MjAsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgODIyLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwot ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0gICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4MTkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4 MjEKLSAgKiAgICAgcmV0dXJuIDx2b2lkICo+PGludHB0cl90Pig8b2JqZWN0PmN0eCkobmFtZSkK LSAgKiAKLSAgKiBjZGVmIHZvaWQgX2NfdXBkYXRlY2Iodm9pZCAqY3R4KSB3aXRoIGdpbDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE1Mzc0LDcgKzE1Mzc0LDcgQEAgc3RhdGlj IHZvaWQgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfdXBkYXRlY2Iodm9pZCAqX19w eXhfdl9jdHgpIHsKLSAgICNlbmRpZgotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODg2Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4OAotICAq ICAgICAgICAgb2JqZWN0IG93bmVkCi0gICogCi0gICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE1NDA3LDE0ICsxNTQwNywxNCBAQCBz dGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNf X19pbml0X18oc3RydWN0IF9fcHl4XwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODg3Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODg5Ci0gICogCi0gICogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgKiAgICAg ICAgIHNlbGYub3duZWQgPSBbXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAg ICAgICBzZWxmLnBhcmFtc1swXS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElECi0gICog Ci0gICovCi0tICBfX3B5eF90XzEgPSBQeUxpc3RfTmV3KDApOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCA4ODcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0g UHlMaXN0X05ldygwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgODg5 LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgX19QeXhf R0lWRVJFRihfX3B5eF90XzEpOwotICAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+b3duZWQp OwotQEAgLTE1NDIyLDcgKzE1NDIyLDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX19faW5pdF9fKHN0cnVjdCBfX3B5eF8KLSAgIF9f cHl4X3Zfc2VsZi0+b3duZWQgPSBfX3B5eF90XzE7Ci0gICBfX3B5eF90XzEgPSAwOwotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4OAotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjg5MAotICAqICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICog ICAgICAgICBzZWxmLm93bmVkID0gW10KLSAgKiAgICAgICAgIHNlbGYucGFyYW1zWzBdLnR5cGUg PSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTE1NDMxLDcgKzE1NDMxLDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX19faW5pdF9fKHN0cnVjdCBfX3B5eF8KLSAgKi8KLSAg IChfX3B5eF92X3NlbGYtPnBhcmFtc1swXSkudHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJ RDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4ODYKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4ODgKLSAgKiAgICAgICAgIG9iamVjdCBvd25l ZAotICAqIAotICAqICAgICBkZWYgX19pbml0X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLUBAIC0xNTQ1MSw3ICsxNTQ1MSw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19fX2luaXRfXyhzdHJ1Y3QgX19weXhf Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjg5MAotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTIKLSAgKiAg ICAgICAgIHNlbGYucGFyYW1zWzBdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQKLSAg KiAKLSAgKiAgICAgY2RlZiBhZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQs IHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFsc2UpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtMTU0ODAsNyArMTU0ODAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfdm9pZHAoc3RydWN0Ci0gICAgIH0K LSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTEKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTMKLSAgKiAKLSAgKiAgICAgY2RlZiBh ZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3du ZWQ9RmFsc2UpOgotICAqICAgICAgICAgY291bnQgPSBsZW4oc2VsZi5vd25lZCkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE1NDg5LDI2ICsxNTQ4OSwyNiBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRf dm9pZHAoc3RydWN0Ci0gICovCi0gICBfX3B5eF90XzEgPSBfX3B5eF92X3NlbGYtPm93bmVkOwot ICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7Ci0tICBfX3B5eF90XzIgPSBQeU9iamVjdF9MZW5n dGgoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA9PSAoKFB5X3NzaXplX3QpLTEp KSkgX19QWVhfRVJSKDAsIDg5MSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBQeU9i amVjdF9MZW5ndGgoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA9PSAoKFB5X3Nz aXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDg5MywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLS0gIF9fcHl4X3RfMSA9IFB5SW50X0Zy b21Tc2l6ZV90KF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDg5MSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSBQeUludF9Gcm9tU3NpemVf dChfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4OTMs IF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX3B5eF92 X2NvdW50ID0gX19weXhfdF8xOwotICAgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4OTQKLSAgKiAgICAgY2RlZiBhZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJh bV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFsc2UpOgotICAqICAgICAgICAgY291bnQg PSBsZW4oc2VsZi5vd25lZCkKLSAgKiAgICAgICAgIGlmIGNvdW50ID49IE1BWF9SRU5ERVJfUEFS QU1TOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICAgICAgaWYgb3du ZWQ6Ci0gICogICAgICAgICAgICAgICAgIGZyZWUocCkKLSAgKi8KLS0gIF9fcHl4X3RfMSA9IFB5 T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfY291bnQsIF9fcHl4X2ludF8zMiwgUHlfR0UpOyBf X1B5eF9YR09UUkVGKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDg5MiwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVj dF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9F UlIoMCwgODkyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9IFB5T2JqZWN0X1JpY2hD b21wYXJlKF9fcHl4X3ZfY291bnQsIF9fcHl4X2ludF8zMiwgUHlfR0UpOyBfX1B5eF9YR09UUkVG KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDg5NCwg X19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19w eXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwgODk0LCBf X3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OwotICAgaWYgKF9fcHl4X3RfMykgewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODkzCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTUK LSAgKiAgICAgICAgIGNvdW50ID0gbGVuKHNlbGYub3duZWQpCi0gICogICAgICAgICBpZiBjb3Vu dCA+PSBNQVhfUkVOREVSX1BBUkFNUzoKLSAgKiAgICAgICAgICAgICBpZiBvd25lZDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE1NTE4LDcgKzE1NTE4LDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRk X3ZvaWRwKHN0cnVjdAotICAgICBfX3B5eF90XzMgPSAoX19weXhfdl9vd25lZCAhPSAwKTsKLSAg ICAgaWYgKF9fcHl4X3RfMykgewotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4OTQKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODk2 Ci0gICogICAgICAgICBpZiBjb3VudCA+PSBNQVhfUkVOREVSX1BBUkFNUzoKLSAgKiAgICAgICAg ICAgICBpZiBvd25lZDoKLSAgKiAgICAgICAgICAgICAgICAgZnJlZShwKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTU1MjcsNyArMTU1MjcsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfdm9pZHAo c3RydWN0Ci0gICovCi0gICAgICAgZnJlZShfX3B5eF92X3ApOwotIAotLSAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTMKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODk1Ci0gICogICAgICAgICBjb3VudCA9IGxlbihzZWxmLm93bmVkKQot ICAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJBTVM6Ci0gICogICAgICAgICAg ICAgaWYgb3duZWQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNTUzNiwxNCAr MTU1MzYsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM19SZW5kZXJQYXJhbXNfYWRkX3ZvaWRwKHN0cnVjdAotICAqLwotICAgICB9Ci0gCi0tICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTUKLSsgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjg5NwotICAqICAgICAgICAgICAgIGlmIG93bmVkOgotICAq ICAgICAgICAgICAgICAgICBmcmVlKHApCi0gICogICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJv cigiUmVuZGVyUGFyYW1zIG92ZXJmbG93IikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot ICAqIAotICAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLnR5cGUgPSB0Ci0gICovCi0tICAg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3NfUHlNUFZFcnJv cik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDg5NSwgX19weXhfTDFf ZXJyb3IpCi0rICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9u X3NfUHlNUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDg5 NywgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotICAgICBf X3B5eF90XzUgPSBOVUxMOwotICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlr ZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNCkpKSB7Ci1AQCAtMTU1NTcsMTQgKzE1NTU3LDE0 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVu ZGVyUGFyYW1zX2FkZF92b2lkcChzdHJ1Y3QKLSAgICAgfQotICAgICBfX3B5eF90XzEgPSAoX19w eXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzQsIF9fcHl4X3RfNSwg X19weXhfa3Bfc19SZW5kZXJQYXJhbXNfb3ZlcmZsb3cpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzQsIF9fcHl4X2twX3NfUmVuZGVyUGFyYW1zX292ZXJmbG93KTsKLSAgICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotLSAgICBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4OTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4OTcsIF9fcHl4X0wxX2Vycm9y KQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0gICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwg MCk7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgICBf X1BZWF9FUlIoMCwgODk1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QWVhfRVJSKDAsIDg5Nywg X19weXhfTDFfZXJyb3IpCi0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo4OTIKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5NAotICAqICAg ICBjZGVmIGFkZF92b2lkcChzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgdm9pZCAqcCwg YmludCBvd25lZD1GYWxzZSk6Ci0gICogICAgICAgICBjb3VudCA9IGxlbihzZWxmLm93bmVkKQot ICAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJBTVM6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLUBAIC0xNTU3Myw1MiArMTU1NzMsNTIgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRkX3ZvaWRw KHN0cnVjdAotICAqLwotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjg5NwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5OQotICAqICAg ICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlJlbmRlclBhcmFtcyBvdmVyZmxvdyIpCi0gICog Ci0gICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudF0udHlwZSA9IHQgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEgPSBwCi0g ICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudCArIDFdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFN X0lOVkFMSUQKLSAgKi8KLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9f cHl4X3ZfY291bnQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoUHlfc3NpemVfdCktMSkg JiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4OTcsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19weXhfdF8yID0gX19QeXhfUHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9jb3VudCk7IGlm ICh1bmxpa2VseSgoX19weXhfdF8yID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJl ZCgpKSkgX19QWVhfRVJSKDAsIDg5OSwgX19weXhfTDFfZXJyb3IpCi0gICAoX19weXhfdl9zZWxm LT5wYXJhbXNbX19weXhfdF8yXSkudHlwZSA9IF9fcHl4X3ZfdDsKLSAKLS0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo5MDAKLSAgKiAKLSAgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50XS50eXBlID0g dAotICAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEgPSBwICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50ICsgMV0udHlwZSA9 IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJRAotICAqICAgICAgICAgc2VsZi5vd25lZC5hcHBlbmQo b3duZWQpCi0gICovCi0tICBfX3B5eF90XzIgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5 eF92X2NvdW50KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzIgPT0gKFB5X3NzaXplX3QpLTEpICYm IFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgODk4LCBfX3B5eF9MMV9lcnJvcikKLSsg IF9fcHl4X3RfMiA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3ZfY291bnQpOyBpZiAo dW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoUHlfc3NpemVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQo KSkpIF9fUFlYX0VSUigwLCA5MDAsIF9fcHl4X0wxX2Vycm9yKQotICAgKF9fcHl4X3Zfc2VsZi0+ cGFyYW1zW19fcHl4X3RfMl0pLmRhdGEgPSBfX3B5eF92X3A7Ci0gCi0tICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6ODk5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTAxCi0gICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudF0udHlwZSA9IHQKLSAgKiAg ICAgICAgIHNlbGYucGFyYW1zW2NvdW50XS5kYXRhID0gcAotICAqICAgICAgICAgc2VsZi5wYXJh bXNbY291bnQgKyAxXS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElEICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQot ICAqIAotICAqLwotLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfQWRkT2JqQyhfX3B5eF92X2Nv dW50LCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDg5OSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSBfX1B5eF9QeUlu dF9BZGRPYmpDKF9fcHl4X3ZfY291bnQsIF9fcHl4X2ludF8xLCAxLCAwLCAwKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTAxLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19weXhfdF8yID0gX19QeXhfUHlJbmRleF9Bc1Nz aXplX3QoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzIgPT0gKFB5X3NzaXplX3Qp LTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgODk5LCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3RfMSk7IGlm ICh1bmxpa2VseSgoX19weXhfdF8yID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJl ZCgpKSkgX19QWVhfRVJSKDAsIDkwMSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYo X19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAgIChfX3B5eF92X3NlbGYtPnBhcmFtc1tfX3B5 eF90XzJdKS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElEOwotIAotLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwMAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjkwMgotICAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEgPSBwCi0g ICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudCArIDFdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFN X0lOVkFMSUQKLSAgKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0gICogICAgIGNkZWYgYWRkX2ludChzZWxmLCBtcHZf cmVuZGVyX3BhcmFtX3R5cGUgdCwgaW50IHZhbCk6Ci0gICovCi0tICBfX3B5eF90XzEgPSBfX1B5 eF9QeUJvb2xfRnJvbUxvbmcoX19weXhfdl9vd25lZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDkwMCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSBfX1B5 eF9QeUJvb2xfRnJvbUxvbmcoX19weXhfdl9vd25lZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDkwMiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0FwcGVuZChfX3B5eF92X3Nl bGYtPm93bmVkLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF82ID09ICgoaW50KS0x KSkpIF9fUFlYX0VSUigwLCA5MDAsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82ID0gX19Q eXhfUHlPYmplY3RfQXBwZW5kKF9fcHl4X3Zfc2VsZi0+b3duZWQsIF9fcHl4X3RfMSk7IGlmICh1 bmxpa2VseShfX3B5eF90XzYgPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDAsIDkwMiwgX19weXhf TDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTAKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTIKLSAgKiAgICAgICAgIHNlbGYucGFyYW1zWzBdLnR5 cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQKLSAgKiAKLSAgKiAgICAgY2RlZiBhZGRfdm9p ZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFs c2UpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTU2NDIsNyArMTU2NDIsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRl clBhcmFtc19hZGRfdm9pZHAoc3RydWN0Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwMgotKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5MDQKLSAgKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQot ICAqIAotICAqICAgICBjZGVmIGFkZF9pbnQoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQs IGludCB2YWwpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTU2NjAsNyArMTU2 NjAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz X1JlbmRlclBhcmFtc19hZGRfaW50KHN0cnVjdCBfXwotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAw OwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImFkZF9pbnQiLCAwKTsKLSAKLS0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDMKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MDUKLSAgKiAKLSAgKiAgICAgY2RlZiBhZGRfaW50KHNlbGYsIG1w dl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBpbnQgdmFsKToKLSAgKiAgICAgICAgIGNkZWYgaW50ICpw ID0gPGludCAqPm1hbGxvYyhzaXplb2YoaW50KSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotQEAgLTE1NjY5LDcgKzE1NjY5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRkX2ludChzdHJ1Y3QgX18KLSAgKi8K LSAgIF9fcHl4X3ZfcCA9ICgoaW50ICopbWFsbG9jKChzaXplb2YoaW50KSkpKTsKLSAKLS0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDQKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MDYKLSAgKiAgICAgY2RlZiBhZGRfaW50KHNlbGYsIG1wdl9yZW5k ZXJfcGFyYW1fdHlwZSB0LCBpbnQgdmFsKToKLSAgKiAgICAgICAgIGNkZWYgaW50ICpwID0gPGlu dCAqPm1hbGxvYyhzaXplb2YoaW50KSkKLSAgKiAgICAgICAgIHBbMF0gPSB2YWwgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE1Njc4LDE4ICsxNTY3OCwxOCBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRf aW50KHN0cnVjdCBfXwotICAqLwotICAgKF9fcHl4X3ZfcFswXSkgPSBfX3B5eF92X3ZhbDsKLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDUKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDcKLSAgKiAgICAgICAgIGNkZWYgaW50ICpwID0gPGlu dCAqPm1hbGxvYyhzaXplb2YoaW50KSkKLSAgKiAgICAgICAgIHBbMF0gPSB2YWwKLSAgKiAgICAg ICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAg KiAKLSAgKiAgICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSB0 LCBjaGFyICpzKToKLSAgKi8KLS0gIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1 Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3NlbGYtPl9f cHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9zZWxmLCBfX3B5eF92X3QsIF9fcHl4X3ZfcCwg TlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkwNSwgX19weXhf TDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFi KS0+YWRkX3ZvaWRwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl90LCBfX3B5eF92X3AsIE5VTEwpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MDcsIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5MDIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDQKLSAgKiAgICAg ICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQotICAqIAotICAqICAgICBjZGVmIGFkZF9pbnQo c2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGludCB2YWwpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci1AQCAtMTU3MTAsNyArMTU3MTAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfaW50KHN0cnVj dCBfXwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MDcKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA5Ci0g ICogICAgICAgICBzZWxmLmFkZF92b2lkcCh0LCBwKQotICAqIAotICAqICAgICBjZGVmIGFkZF9z dHJpbmcoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGNoYXIgKnMpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTU3MjgsNyArMTU3MjgsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfc3Ry aW5nKHN0cnVjdAotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoImFkZF9zdHJpbmciLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5MDgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 MTAKLSAgKiAKLSAgKiAgICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1f dHlwZSB0LCBjaGFyICpzKToKLSAgKiAgICAgICAgIGNkZWYgY2hhciAqcCA9IDxjaGFyICo+bWFs bG9jKHN0cmxlbihzKSArIDEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNTcz Nyw3ICsxNTczNyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF9zdHJpbmcoc3RydWN0Ci0gICovCi0gICBfX3B5eF92 X3AgPSAoKGNoYXIgKiltYWxsb2MoKHN0cmxlbihfX3B5eF92X3MpICsgMSkpKTsKLSAKLS0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDkKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MTEKLSAgKiAgICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1wdl9y ZW5kZXJfcGFyYW1fdHlwZSB0LCBjaGFyICpzKToKLSAgKiAgICAgICAgIGNkZWYgY2hhciAqcCA9 IDxjaGFyICo+bWFsbG9jKHN0cmxlbihzKSArIDEpCi0gICogICAgICAgICBzdHJjcHkocCwgcykg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE1NzQ2LDE4ICsxNTc0NiwxOCBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBh cmFtc19hZGRfc3RyaW5nKHN0cnVjdAotICAqLwotICAgKHZvaWQpKHN0cmNweShfX3B5eF92X3As IF9fcHl4X3ZfcykpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkx MAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxMgotICAqICAgICAgICAg Y2RlZiBjaGFyICpwID0gPGNoYXIgKj5tYWxsb2Moc3RybGVuKHMpICsgMSkKLSAgKiAgICAgICAg IHN0cmNweShwLCBzKQotICAqICAgICAgICAgc2VsZi5hZGRfdm9pZHAodCwgcCkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotICAqIAotICAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6 Ci0gICovCi0tICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+ YWRkX3ZvaWRwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl90LCBfX3B5eF92X3AsIE5VTEwpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MTAsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPmFkZF92b2lk cChfX3B5eF92X3NlbGYsIF9fcHl4X3ZfdCwgX19weXhfdl9wLCBOVUxMKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTEyLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3Rf MSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA3Ci0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA5Ci0gICogICAgICAgICBzZWxmLmFk ZF92b2lkcCh0LCBwKQotICAqIAotICAqICAgICBjZGVmIGFkZF9zdHJpbmcoc2VsZiwgbXB2X3Jl bmRlcl9wYXJhbV90eXBlIHQsIGNoYXIgKnMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtMTU3NzgsNyArMTU3NzgsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfc3RyaW5nKHN0cnVjdAotICAgcmV0 dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 MTIKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE0Ci0gICogICAgICAgICBz ZWxmLmFkZF92b2lkcCh0LCBwKQotICAqIAotICAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNTgxMyw3ICsxNTgxMyw3IEBAIHN0 YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNf Ml9fZGVhbGxvY19fKHN0cnVjdCBfCi0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18iLCAwKTsKLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTMKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MTUKLSAgKiAKLSAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOgotICAq ICAgICAgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTU4MjYsMjYgKzE1ODI2LDI2IEBAIHN0YXRpYyB2b2lkIF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfMl9fZGVhbGxvY19f KHN0cnVjdCBfCi0gICAgIF9fcHl4X3RfMiA9IF9fcHl4X3Zfc2VsZi0+b3duZWQ7IF9fUHl4X0lO Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzMgPSAwOwotICAgICBfX3B5eF90XzQgPSBOVUxMOwot ICAgfSBlbHNlIHsKLS0gICAgX19weXhfdF8zID0gLTE7IF9fcHl4X3RfMiA9IFB5T2JqZWN0X0dl dEl0ZXIoX19weXhfdl9zZWxmLT5vd25lZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMyA9IC0xOyBfX3B5 eF90XzIgPSBQeU9iamVjdF9HZXRJdGVyKF9fcHl4X3Zfc2VsZi0+b3duZWQpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5MTUsIF9fcHl4X0wxX2Vycm9yKQotICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19weXhfdF80ID0gUHlfVFlQRShfX3B5eF90 XzIpLT50cF9pdGVybmV4dDsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwg OTEzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF80ID0gUHlfVFlQRShfX3B5eF90XzIp LT50cF9pdGVybmV4dDsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgOTE1 LCBfX3B5eF9MMV9lcnJvcikKLSAgIH0KLSAgIGZvciAoOzspIHsKLSAgICAgaWYgKGxpa2VseSgh X19weXhfdF80KSkgewotICAgICAgIGlmIChsaWtlbHkoUHlMaXN0X0NoZWNrRXhhY3QoX19weXhf dF8yKSkpIHsKLSAgICAgICAgIGlmIChfX3B5eF90XzMgPj0gUHlMaXN0X0dFVF9TSVpFKF9fcHl4 X3RfMikpIGJyZWFrOwotICAgICAgICAgI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1MgJiYg IUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCi0tICAgICAgICBfX3B5eF90XzUgPSBQeUxpc3Rf R0VUX0lURU0oX19weXhfdF8yLCBfX3B5eF90XzMpOyBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsg X19weXhfdF8zKys7IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4 X0wxX2Vycm9yKQotKyAgICAgICAgX19weXhfdF81ID0gUHlMaXN0X0dFVF9JVEVNKF9fcHl4X3Rf MiwgX19weXhfdF8zKTsgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfMysrOyBpZiAo dW5saWtlbHkoMCA8IDApKSBfX1BZWF9FUlIoMCwgOTE1LCBfX3B5eF9MMV9lcnJvcikKLSAgICAg ICAgICNlbHNlCi0tICAgICAgICBfX3B5eF90XzUgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF8y LCBfX3B5eF90XzMpOyBfX3B5eF90XzMrKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZ WF9FUlIoMCwgOTEzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICAgIF9fcHl4X3RfNSA9IFB5U2Vx dWVuY2VfSVRFTShfX3B5eF90XzIsIF9fcHl4X3RfMyk7IF9fcHl4X3RfMysrOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA5MTUsIF9fcHl4X0wxX2Vycm9yKQotICAgICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7Ci0gICAgICAgICAjZW5kaWYKLSAgICAgICB9IGVs c2UgewotICAgICAgICAgaWYgKF9fcHl4X3RfMyA+PSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X3Rf MikpIGJyZWFrOwotICAgICAgICAgI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZ VEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCi0tICAgICAgICBfX3B5eF90XzUgPSBQeVR1cGxlX0dF VF9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF8zKTsgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7IF9f cHl4X3RfMysrOyBpZiAodW5saWtlbHkoMCA8IDApKSBfX1BZWF9FUlIoMCwgOTEzLCBfX3B5eF9M MV9lcnJvcikKLSsgICAgICAgIF9fcHl4X3RfNSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfdF8y LCBfX3B5eF90XzMpOyBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsgX19weXhfdF8zKys7IGlmICh1 bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA5MTUsIF9fcHl4X0wxX2Vycm9yKQotICAgICAg ICAgI2Vsc2UKLS0gICAgICAgIF9fcHl4X3RfNSA9IFB5U2VxdWVuY2VfSVRFTShfX3B5eF90XzIs IF9fcHl4X3RfMyk7IF9fcHl4X3RfMysrOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlY X0VSUigwLCA5MTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgICAgX19weXhfdF81ID0gUHlTZXF1 ZW5jZV9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF8zKTsgX19weXhfdF8zKys7IGlmICh1bmxpa2Vs eSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDkxNSwgX19weXhfTDFfZXJyb3IpCi0gICAgICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKLSAgICAgICAgICNlbmRpZgotICAgICAgIH0KLUBA IC0xNTg1NSw3ICsxNTg1NSw3IEBAIHN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM19SZW5kZXJQYXJhbXNfMl9fZGVhbGxvY19fKHN0cnVjdCBfCi0gICAgICAgICBQ eU9iamVjdCogZXhjX3R5cGUgPSBQeUVycl9PY2N1cnJlZCgpOwotICAgICAgICAgaWYgKGV4Y190 eXBlKSB7Ci0gICAgICAgICAgIGlmIChsaWtlbHkoX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25N YXRjaGVzKGV4Y190eXBlLCBQeUV4Y19TdG9wSXRlcmF0aW9uKSkpIFB5RXJyX0NsZWFyKCk7Ci0t ICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCi0rICAgICAg ICAgIGVsc2UgX19QWVhfRVJSKDAsIDkxNSwgX19weXhfTDFfZXJyb3IpCi0gICAgICAgICB9Ci0g ICAgICAgICBicmVhazsKLSAgICAgICB9Ci1AQCAtMTU4NjUsMzMgKzE1ODY1LDMzIEBAIHN0YXRp YyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfMl9f ZGVhbGxvY19fKHN0cnVjdCBfCi0gICAgIF9fcHl4X3RfNSA9IDA7Ci0gICAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzEpOwotICAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X2ksIF9fcHl4X3Rf MSk7Ci0tICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0FkZE9iakMoX19weXhfdF8xLCBfX3B5 eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAs IDkxMywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0FkZE9i akMoX19weXhfdF8xLCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19weXhf dF81KSkgX19QWVhfRVJSKDAsIDkxNSwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzUpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsKLSAgICAgX19weXhf dF8xID0gX19weXhfdF81OwotICAgICBfX3B5eF90XzUgPSAwOwotIAotLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE0Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MTYKLSAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOgotICAqICAgICAg ICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOgotICAqICAgICAgICAgICAgIGlm IGo6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAgICAgICAgZnJl ZShzZWxmLnBhcmFtc1tpXS5kYXRhKQotICAqIAotICAqLwotLSAgICBfX3B5eF90XzYgPSBfX1B5 eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9qKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8IDAp KSBfX1BZWF9FUlIoMCwgOTE0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF82ID0gX19Q eXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zfaik7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAw KSkgX19QWVhfRVJSKDAsIDkxNiwgX19weXhfTDFfZXJyb3IpCi0gICAgIGlmIChfX3B5eF90XzYp IHsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE1Ci0rICAg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxNwotICAqICAgICAgICAgZm9y IGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOgotICAqICAgICAgICAgICAgIGlmIGo6Ci0g ICogICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotICAqIAotICAqIGNkZWYgdm9pZCAqZ2V0X3BvaW50ZXIoY29uc3Qg Y2hhciAqbmFtZSwgb2JqZWN0IG9iaik6Ci0gICovCi0tICAgICAgX19weXhfdF83ID0gX19QeXhf UHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9pKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzcgPT0g KFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTE1LCBf X3B5eF9MMV9lcnJvcikKLSsgICAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVf dChfX3B5eF92X2kpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoUHlfc3NpemVfdCktMSkg JiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA5MTcsIF9fcHl4X0wxX2Vycm9yKQot ICAgICAgIGZyZWUoKF9fcHl4X3Zfc2VsZi0+cGFyYW1zW19fcHl4X3RfN10pLmRhdGEpOwotIAot LSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTQKLSsgICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE2Ci0gICogICAgIGRlZiBfX2RlYWxsb2Nf XyhzZWxmKToKLSAgKiAgICAgICAgIGZvciBpLCBqIGluIGVudW1lcmF0ZShzZWxmLm93bmVkKToK LSAgKiAgICAgICAgICAgICBpZiBqOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAt MTU5MDAsNyArMTU5MDAsNyBAQCBzdGF0aWMgdm9pZCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNfUmVuZGVyUGFyYW1zXzJfX2RlYWxsb2NfXyhzdHJ1Y3QgXwotICAqLwotICAgICB9 Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTMKLSsgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxNQotICAqIAotICAqICAgICBkZWYgX19k ZWFsbG9jX18oc2VsZik6Ci0gICogICAgICAgICBmb3IgaSwgaiBpbiBlbnVtZXJhdGUoc2VsZi5v d25lZCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNTkxMSw3ICsxNTkxMSw3 IEBAIHN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQ YXJhbXNfMl9fZGVhbGxvY19fKHN0cnVjdCBfCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsg X19weXhfdF8yID0gMDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxMgotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxNAotICAqICAgICAgICAgc2VsZi5hZGRfdm9p ZHAodCwgcCkKLSAgKiAKLSAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTYwNDUsNyArMTYwNDUsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfNl9fc2V0 c3RhdGVfY3l0aAotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MTcKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTE5Ci0gICogICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkKLSAgKiAK LSAgKiBjZGVmIHZvaWQgKmdldF9wb2ludGVyKGNvbnN0IGNoYXIgKm5hbWUsIG9iamVjdCBvYmop OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTYwNzEsNyArMTYwNzEsNyBAQCBz dGF0aWMgdm9pZCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3BvaW50ZXIoY2hh ciBjb25zdCAqX19weXhfdl9uYW1lLAotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoImdldF9wb2ludGVyIiwgMCk7Ci0gCi0tICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTIxCi0gICogY2RlZiB2b2lkICpnZXRfcG9pbnRlcihjb25zdCBjaGFyICpu YW1lLCBvYmplY3Qgb2JqKToKLSAgKiAgICAgY2RlZiB2b2lkICpwCi0gICogICAgIGlmIFB5Q2Fw c3VsZV9Jc1ZhbGlkKG9iaiwgbmFtZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC0xNjA4MSwxNyArMTYwODEsMTcgQEAgc3RhdGljIHZvaWQgKl9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2X2dldF9wb2ludGVyKGNoYXIgY29uc3QgKl9fcHl4X3ZfbmFtZSwKLSAgIF9fcHl4 X3RfMSA9IChQeUNhcHN1bGVfSXNWYWxpZChfX3B5eF92X29iaiwgX19weXhfdl9uYW1lKSAhPSAw KTsKLSAgIGlmIChfX3B5eF90XzEpIHsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjkyMAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTIy Ci0gICogICAgIGNkZWYgdm9pZCAqcAotICAqICAgICBpZiBQeUNhcHN1bGVfSXNWYWxpZChvYmos IG5hbWUpOgotICAqICAgICAgICAgcCA9IFB5Q2Fwc3VsZV9HZXRQb2ludGVyKG9iaiwgbmFtZSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICBlbGlmIGlzaW5zdGFuY2Uob2Jq LCBpbnQpIG9yIGlzaW5zdGFuY2Uob2JqLCBsb25nKSBhbmQgb2JqOgotICAqICAgICAgICAgcCA9 IDx2b2lkICo+PGludHB0cl90Pm9iagotICAqLwotLSAgICBfX3B5eF90XzIgPSBQeUNhcHN1bGVf R2V0UG9pbnRlcihfX3B5eF92X29iaiwgX19weXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5KF9fcHl4 X3RfMiA9PSAoKHZvaWQgKilOVUxMKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAs IDkyMCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMiA9IFB5Q2Fwc3VsZV9HZXRQb2lu dGVyKF9fcHl4X3Zfb2JqLCBfX3B5eF92X25hbWUpOyBpZiAodW5saWtlbHkoX19weXhfdF8yID09 ICgodm9pZCAqKU5VTEwpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTIyLCBf X3B5eF9MMV9lcnJvcikKLSAgICAgX19weXhfdl9wID0gX19weXhfdF8yOwotIAotLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE5Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MjEKLSAgKiBjZGVmIHZvaWQgKmdldF9wb2ludGVyKGNvbnN0IGNo YXIgKm5hbWUsIG9iamVjdCBvYmopOgotICAqICAgICBjZGVmIHZvaWQgKnAKLSAgKiAgICAgaWYg UHlDYXBzdWxlX0lzVmFsaWQob2JqLCBuYW1lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotQEAgLTE2MTAxLDcgKzE2MTAxLDcgQEAgc3RhdGljIHZvaWQgKl9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2X2dldF9wb2ludGVyKGNoYXIgY29uc3QgKl9fcHl4X3ZfbmFtZSwKLSAgICAg Z290byBfX3B5eF9MMzsKLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo5MjEKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjMKLSAgKiAg ICAgaWYgUHlDYXBzdWxlX0lzVmFsaWQob2JqLCBuYW1lKToKLSAgKiAgICAgICAgIHAgPSBQeUNh cHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCi0gICogICAgIGVsaWYgaXNpbnN0YW5jZShvYmos IGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLUBAIC0xNjEyMiwyMiArMTYxMjIsMjIgQEAgc3RhdGljIHZvaWQgKl9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X2dldF9wb2ludGVyKGNoYXIgY29uc3QgKl9fcHl4X3Zf bmFtZSwKLSAgICAgX19weXhfdF8xID0gX19weXhfdF8zOwotICAgICBnb3RvIF9fcHl4X0w0X2Jv b2xfYmlub3BfZG9uZTsKLSAgIH0KLS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1 ZShfX3B5eF92X29iaik7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19QWVhfRVJSKDAs IDkyMSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1Ry dWUoX19weXhfdl9vYmopOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlYX0VSUigw LCA5MjMsIF9fcHl4X0wxX2Vycm9yKQotICAgX19weXhfdF8xID0gX19weXhfdF8zOwotICAgX19w eXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKLSAgIGlmIChsaWtlbHkoX19weXhfdF8xKSkgewotIAot LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTIyCi0rICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjQKLSAgKiAgICAgICAgIHAgPSBQeUNhcHN1bGVf R2V0UG9pbnRlcihvYmosIG5hbWUpCi0gICogICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGludCkg b3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6Ci0gICogICAgICAgICBwID0gPHZvaWQg Kj48aW50cHRyX3Q+b2JqICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgZWxz ZToKLSAgKiAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlVua25vd24gb3IgaW52YWxpZCBwb2lu dGVyIG9iamVjdDogJXIiICUgb2JqKQotICAqLwotLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeUlu dF9Bc19pbnRwdHJfdChfX3B5eF92X29iaik7IGlmICh1bmxpa2VseSgoX19weXhfdF81ID09ICgo aW50cHRyX3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDkyMiwgX19w eXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0FzX2ludHB0cl90KF9f cHl4X3Zfb2JqKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzUgPT0gKChpbnRwdHJfdCktMSkpICYm IFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTI0LCBfX3B5eF9MMV9lcnJvcikKLSAg ICAgX19weXhfdl9wID0gKCh2b2lkICopKChpbnRwdHJfdClfX3B5eF90XzUpKTsKLSAKLS0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkyMQotKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTIzCi0gICogICAgIGlmIFB5Q2Fwc3VsZV9Jc1ZhbGlkKG9i aiwgbmFtZSk6Ci0gICogICAgICAgICBwID0gUHlDYXBzdWxlX0dldFBvaW50ZXIob2JqLCBuYW1l KQotICAqICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBpbnQpIG9yIGlzaW5zdGFuY2Uob2JqLCBs b25nKSBhbmQgb2JqOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTYxNDcsNyAr MTYxNDcsNyBAQCBzdGF0aWMgdm9pZCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0 X3BvaW50ZXIoY2hhciBjb25zdCAqX19weXhfdl9uYW1lLAotICAgICBnb3RvIF9fcHl4X0wzOwot ICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkyNAotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkyNgotICAqICAgICAgICAgcCA9IDx2b2lk ICo+PGludHB0cl90Pm9iagotICAqICAgICBlbHNlOgotICAqICAgICAgICAgcmFpc2UgUHlNUFZF cnJvcigiVW5rbm93biBvciBpbnZhbGlkIHBvaW50ZXIgb2JqZWN0OiAlciIgJSBvYmopICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNjE1NSw5ICsxNjE1NSw5IEBAIHN0YXRpYyB2 b2lkICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9nZXRfcG9pbnRlcihjaGFyIGNvbnN0 ICpfX3B5eF92X25hbWUsCi0gICogCi0gICovCi0gICAvKmVsc2UqLyB7Ci0tICAgIF9fUHl4X0dl dE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5eF9uX3NfUHlNUFZFcnJvcik7IGlmICh1 bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDkyNCwgX19weXhfTDFfZXJyb3IpCi0r ICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5eF9uX3NfUHlNUFZF cnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDkyNiwgX19weXhf TDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotLSAgICBfX3B5eF90Xzgg PSBfX1B5eF9QeVN0cmluZ19Gb3JtYXRTYWZlKF9fcHl4X2twX3NfVW5rbm93bl9vcl9pbnZhbGlk X3BvaW50ZXJfb2JqZWMsIF9fcHl4X3Zfb2JqKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBf X1BZWF9FUlIoMCwgOTI0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF84ID0gX19QeXhf UHlTdHJpbmdfRm9ybWF0U2FmZShfX3B5eF9rcF9zX1Vua25vd25fb3JfaW52YWxpZF9wb2ludGVy X29iamVjLCBfX3B5eF92X29iaik7IGlmICh1bmxpa2VseSghX19weXhfdF84KSkgX19QWVhfRVJS KDAsIDkyNiwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzgpOwot ICAgICBfX3B5eF90XzkgPSBOVUxMOwotICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNykpKSB7Ci1AQCAtMTYxNzIsMTYgKzE2 MTcyLDE2IEBAIHN0YXRpYyB2b2lkICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9nZXRf cG9pbnRlcihjaGFyIGNvbnN0ICpfX3B5eF92X25hbWUsCi0gICAgIF9fcHl4X3RfNiA9IChfX3B5 eF90XzkpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNywgX19weXhfdF85LCBf X3B5eF90XzgpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzcsIF9fcHl4X3Rf OCk7Ci0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsgX19weXhfdF85ID0gMDsKLSAgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7Ci0tICAgIGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkyNCwgX19weXhfTDFfZXJyb3IpCi0rICAgIGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkyNiwgX19weXhfTDFfZXJyb3Ip Ci0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhf dF83KTsgX19weXhfdF83ID0gMDsKLSAgICAgX19QeXhfUmFpc2UoX19weXhfdF82LCAwLCAwLCAw KTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0tICAgIF9f UFlYX0VSUigwLCA5MjQsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1BZWF9FUlIoMCwgOTI2LCBf X3B5eF9MMV9lcnJvcikKLSAgIH0KLSAgIF9fcHl4X0wzOjsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5MjUKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo5MjcKLSAgKiAgICAgZWxzZToKLSAgKiAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlVu a25vd24gb3IgaW52YWxpZCBwb2ludGVyIG9iamVjdDogJXIiICUgb2JqKQotICAqICAgICByZXR1 cm4gcCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTYxOTEsNyArMTYxOTEsNyBA QCBzdGF0aWMgdm9pZCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3BvaW50ZXIo Y2hhciBjb25zdCAqX19weXhfdl9uYW1lLAotICAgX19weXhfciA9IF9fcHl4X3ZfcDsKLSAgIGdv dG8gX19weXhfTDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE3 Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE5Ci0gICogICAgICAgICAg ICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkKLSAgKiAKLSAgKiBjZGVmIHZvaWQgKmdl dF9wb2ludGVyKGNvbnN0IGNoYXIgKm5hbWUsIG9iamVjdCBvYmopOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci1AQCAtMTYyMTIsNyArMTYyMTIsNyBAQCBzdGF0aWMgdm9pZCAqX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3BvaW50ZXIoY2hhciBjb25zdCAqX19weXhfdl9u YW1lLAotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MjkKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTMxCi0g ICogQGN5dGhvbi5pbnRlcm5hbAotICAqIGNkZWYgY2xhc3MgUmVuZGVyRnJhbWVJbmZvKG9iamVj dCk6Ci0gICogICAgIGNkZWYgX2Zyb21fc3RydWN0KHNlbGYsIG1wdl9yZW5kZXJfZnJhbWVfaW5m byAqaW5mbyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNjIzMCw4MyArMTYy MzAsODMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NVJlbmRlckZyYW1lSW5mb19fZnJvbV9zdHJ1Y3Qoc3QKLSAgIGludCBfX3B5eF9jbGluZW5vID0g MDsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfZnJvbV9zdHJ1Y3QiLCAwKTsKLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzAKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzIKLSAgKiBjZGVmIGNsYXNzIFJlbmRlckZyYW1lSW5m byhvYmplY3QpOgotICAqICAgICBjZGVmIF9mcm9tX3N0cnVjdChzZWxmLCBtcHZfcmVuZGVyX2Zy YW1lX2luZm8gKmluZm8pOgotICAqICAgICAgICAgc2VsZi5wcmVzZW50ID0gYm9vbChpbmZvWzBd LmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIHNlbGYucmVkcmF3ID0gYm9vbChpbmZvWzBdLmZsYWdz ICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFRFJBVykKLSAgKiAgICAgICAgIHNlbGYucmVwZWF0 ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVBVCkKLSAg Ki8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKChfX3B5eF92X2lu Zm9bMF0pLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMwLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f cHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKChfX3B5eF92X2luZm9bMF0pLmZs YWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMyLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOwotLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4 X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDkzMCwgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhf dF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgOTMyLCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwot LSAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKCghKCFfX3B5eF90XzIpKSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkzMCwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX3B5eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoIV9fcHl4X3RfMikpKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMyLCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1Nl dEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19wcmVzZW50LCBf X3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDkzMCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAo X19QeXhfUHlPYmplY3RfU2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19w eXhfbl9zX3ByZXNlbnQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMyLCBfX3B5eF9M MV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMQotKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjkzMwotICAqICAgICBjZGVmIF9mcm9tX3N0cnVjdChzZWxm LCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKmluZm8pOgotICAqICAgICAgICAgc2VsZi5wcmVzZW50 ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpCi0g ICogICAgICAgICBzZWxmLnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJf RlJBTUVfSU5GT19SRURSQVcpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAg ICAgIHNlbGYucmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9J TkZPX1JFUEVBVCkKLSAgKiAgICAgICAgIHNlbGYuYmxvY2tfdnN5bmMgPSBib29sKGluZm9bMF0u ZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMpCi0gICovCi0tICBfX3B5 eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KCgoX19weXhfdl9pbmZvWzBdKS5mbGFn cyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9IF9f UHl4X1B5SW50X0Zyb21fdWludDY0X3QoKChfX3B5eF92X2luZm9bMF0pLmZsYWdzICYgTVBWX1JF TkRFUl9GUkFNRV9JTkZPX1JFRFJBVykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 Ci0tICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9lcnJvcikK LSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzEpOyBpZiAodW5s aWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vycm9yKQot ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICBfX3B5eF90XzEg PSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoIV9fcHl4X3RfMikpKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3Rf MSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISghX19weXhfdF8yKSkpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7Ci0tICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cigoKFB5 T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX3JlZHJhdywgX19weXhfdF8xKSA8IDAp IF9fUFlYX0VSUigwLCA5MzEsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1B5T2JqZWN0 X1NldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19yZWRyYXcs IF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMzLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjkzMgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjkzNAotICAqICAgICAgICAgc2VsZi5wcmVzZW50ID0gYm9vbChpbmZvWzBdLmZsYWdz ICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpCi0gICogICAgICAgICBzZWxmLnJlZHJh dyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpCi0g ICogICAgICAgICBzZWxmLnJlcGVhdCA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJf RlJBTUVfSU5GT19SRVBFQVQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAg ICAgIHNlbGYuYmxvY2tfdnN5bmMgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZS QU1FX0lORk9fQkxPQ0tfVlNZTkMpCi0gICogICAgICAgICBzZWxmLnRhcmdldF90aW1lID0gaW5m b1swXS50YXJnZXRfdGltZQotICAqLwotLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91 aW50NjRfdCgoKF9fcHl4X3ZfaW5mb1swXSkuZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9f UkVQRUFUKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkzMiwgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KCgo X19weXhfdl9pbmZvWzBdKS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTM0LCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19weXhfdF8yID0gX19QeXhfUHlP YmplY3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19Q WVhfRVJSKDAsIDkzMiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9i amVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZ WF9FUlIoMCwgOTM0LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEp OyBfX3B5eF90XzEgPSAwOwotLSAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKCgh KCFfX3B5eF90XzIpKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkz MiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmco KCEoIV9fcHl4X3RfMikpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg OTM0LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgaWYg KF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9f cHl4X25fc19yZXBlYXQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMyLCBfX3B5eF9M MV9lcnJvcikKLSsgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKCgoUHlPYmplY3QgKilf X3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfcmVwZWF0LCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJS KDAsIDkzNCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzMK LSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzUKLSAgKiAgICAgICAgIHNl bGYucmVkcmF3ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JF RFJBVykKLSAgKiAgICAgICAgIHNlbGYucmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBW X1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVBVCkKLSAgKiAgICAgICAgIHNlbGYuYmxvY2tfdnN5bmMg PSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIHNlbGYudGFyZ2V0X3Rp bWUgPSBpbmZvWzBdLnRhcmdldF90aW1lCi0gICogICAgICAgICByZXR1cm4gc2VsZgotICAqLwot LSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCgoKF9fcHl4X3ZfaW5mb1sw XSkuZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f cHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKChfX3B5eF92X2luZm9bMF0pLmZs YWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX0JMT0NLX1ZTWU5DKSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkzNSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShf X3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA5MzMs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9f cHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDkzNSwg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISghX19weXhfdF8yKSkp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKCghKCFfX3B5eF90XzIp KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkzNSwgX19weXhfTDFf ZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIGlmIChfX1B5eF9QeU9iamVj dF9TZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfYmxvY2tf dnN5bmMsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMzLCBfX3B5eF9MMV9lcnJvcikK LSsgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3Nl bGYpLCBfX3B5eF9uX3NfYmxvY2tfdnN5bmMsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwg OTM1LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzNAotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzNgotICAqICAgICAgICAgc2VsZi5y ZXBlYXQgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUkVQRUFU KQotICAqICAgICAgICAgc2VsZi5ibG9ja192c3luYyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1Q Vl9SRU5ERVJfRlJBTUVfSU5GT19CTE9DS19WU1lOQykKLSAgKiAgICAgICAgIHNlbGYudGFyZ2V0 X3RpbWUgPSBpbmZvWzBdLnRhcmdldF90aW1lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSAgKiAgICAgICAgIHJldHVybiBzZWxmCi0gICogCi0gICovCi0tICBfX3B5eF90XzEgPSBfX1B5 eF9QeUludF9Gcm9tX2ludDY0X3QoKF9fcHl4X3ZfaW5mb1swXSkudGFyZ2V0X3RpbWUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzQsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQ2NF90KChfX3B5eF92X2luZm9bMF0p LnRhcmdldF90aW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTM2 LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgaWYgKF9f UHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4 X25fc190YXJnZXRfdGltZSwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCA5MzQsIF9fcHl4 X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAq KV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc190YXJnZXRfdGltZSwgX19weXhfdF8xKSA8IDApIF9f UFlYX0VSUigwLCA5MzYsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTM1Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTM3Ci0gICogICAg ICAgICBzZWxmLmJsb2NrX3ZzeW5jID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9G UkFNRV9JTkZPX0JMT0NLX1ZTWU5DKQotICAqICAgICAgICAgc2VsZi50YXJnZXRfdGltZSA9IGlu Zm9bMF0udGFyZ2V0X3RpbWUKLSAgKiAgICAgICAgIHJldHVybiBzZWxmICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLUBAIC0xNjMxOCw3ICsxNjMxOCw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fX2Zyb21fc3Ry dWN0KHN0Ci0gICBfX3B5eF9yID0gKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZik7Ci0gICBnb3Rv IF9fcHl4X0wwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkyOQot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMQotICAqIEBjeXRob24uaW50 ZXJuYWwKLSAgKiBjZGVmIGNsYXNzIFJlbmRlckZyYW1lSW5mbyhvYmplY3QpOgotICAqICAgICBj ZGVmIF9mcm9tX3N0cnVjdChzZWxmLCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKmluZm8pOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTY2MjQsNyArMTY2MjQsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNVJlbmRlckZyYW1lSW5m b18yX19zZXRzdGF0ZV9jeQotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTAKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTUyCi0gICogICAgICAgICBiaW50IGluaXRlZAotICAqIAotICAqICAgICBkZWYgX19p bml0X18oc2VsZiwgbXB2LCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTY2NTMs NyArMTY2NTMsNyBAQCBzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfMV9faW5pdF9fKFB5T2JqZWN0ICpfXwotICAgICBzdGF0aWMgUHlPYmpl Y3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19tcHYsJl9fcHl4X25fc19hcGlf dHlwZSwmX19weXhfbl9zX29wZW5nbF9pbml0X3BhcmFtcywmX19weXhfbl9zX2FkdmFuY2VkX2Nv bnRyb2wsJl9fcHl4X25fc194MTFfZGlzcGxheSwmX19weXhfbl9zX3dsX2Rpc3BsYXksJl9fcHl4 X25fc19kcm1fZGlzcGxheSwmX19weXhfbl9zX2RybV9vc2Rfc2l6ZSwwfTsKLSAgICAgUHlPYmpl Y3QqIHZhbHVlc1s4XSA9IHswLDAsMCwwLDAsMCwwLDB9OwotIAotLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTUyCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo5NTQKLSAgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1wdiwKLSAgKiAgICAgICAg ICAgICAgICAgIGFwaV90eXBlLAotICAqICAgICAgICAgICAgICAgICAgb3BlbmdsX2luaXRfcGFy YW1zPU5vbmUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNjY2Miw3ICsxNjY2 Miw3IEBAIHN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVy Q29udGV4dF8xX19pbml0X18oUHlPYmplY3QgKl9fCi0gICovCi0gICAgIHZhbHVlc1syXSA9ICgo UHlPYmplY3QgKilQeV9Ob25lKTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk1MwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTU1Ci0g ICogICAgICAgICAgICAgICAgICBhcGlfdHlwZSwKLSAgKiAgICAgICAgICAgICAgICAgIG9wZW5n bF9pbml0X3BhcmFtcz1Ob25lLAotICAqICAgICAgICAgICAgICAgICAgYWR2YW5jZWRfY29udHJv bD1GYWxzZSwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE2NjcxLDcgKzE2Njcx LDcgQEAgc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJD b250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX18KLSAgKi8KLSAgICAgdmFsdWVzWzNdID0gKChQ eU9iamVjdCAqKVB5X0ZhbHNlKTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk1NAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTU2Ci0g ICogICAgICAgICAgICAgICAgICBvcGVuZ2xfaW5pdF9wYXJhbXM9Tm9uZSwKLSAgKiAgICAgICAg ICAgICAgICAgIGFkdmFuY2VkX2NvbnRyb2w9RmFsc2UsCi0gICogICAgICAgICAgICAgICAgICB4 MTFfZGlzcGxheT1Ob25lLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTY2ODAs NyArMTY2ODAsNyBAQCBzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfMV9faW5pdF9fKFB5T2JqZWN0ICpfXwotICAqLwotICAgICB2YWx1ZXNb NF0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5NTUKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojk1NwotICAqICAgICAgICAgICAgICAgICAgYWR2YW5jZWRfY29udHJvbD1GYWxzZSwKLSAgKiAg ICAgICAgICAgICAgICAgIHgxMV9kaXNwbGF5PU5vbmUsCi0gICogICAgICAgICAgICAgICAgICB3 bF9kaXNwbGF5PU5vbmUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNjY4OSw3 ICsxNjY4OSw3IEBAIHN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz UmVuZGVyQ29udGV4dF8xX19pbml0X18oUHlPYmplY3QgKl9fCi0gICovCi0gICAgIHZhbHVlc1s1 XSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjk1NgotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTU4Ci0gICogICAgICAgICAgICAgICAgICB4MTFfZGlzcGxheT1Ob25lLAotICAqICAgICAgICAg ICAgICAgICAgd2xfZGlzcGxheT1Ob25lLAotICAqICAgICAgICAgICAgICAgICAgZHJtX2Rpc3Bs YXk9Tm9uZSwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE2Njk4LDcgKzE2Njk4 LDcgQEAgc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJD b250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX18KLSAgKi8KLSAgICAgdmFsdWVzWzZdID0gKChQ eU9iamVjdCAqKVB5X05vbmUpOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTU3Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTkKLSAg KiAgICAgICAgICAgICAgICAgIHdsX2Rpc3BsYXk9Tm9uZSwKLSAgKiAgICAgICAgICAgICAgICAg IGRybV9kaXNwbGF5PU5vbmUsCi0gICogICAgICAgICAgICAgICAgICBkcm1fb3NkX3NpemU9Tm9u ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTY3MzgsNyArMTY3MzgsNyBAQCBz dGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRf MV9faW5pdF9fKFB5T2JqZWN0ICpfXwotICAgICAgICAgY2FzZSAgMToKLSAgICAgICAgIGlmIChs aWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9f cHl4X25fc19hcGlfdHlwZSkpICE9IDApKSBrd19hcmdzLS07Ci0gICAgICAgICBlbHNlIHsKLS0g ICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwgMiwgOCwg MSk7IF9fUFlYX0VSUigwLCA5NTAsIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgICAgICBfX1B5eF9S YWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAwLCAyLCA4LCAxKTsgX19QWVhfRVJSKDAs IDk1MiwgX19weXhfTDNfZXJyb3IpCi0gICAgICAgICB9Ci0gICAgICAgICBDWVRIT05fRkFMTFRI Uk9VR0g7Ci0gICAgICAgICBjYXNlICAyOgotQEAgLTE2Nzc4LDcgKzE2Nzc4LDcgQEAgc3RhdGlj IGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzFfX2lu aXRfXyhQeU9iamVjdCAqX18KLSAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAgaWYgKHVubGlr ZWx5KGt3X2FyZ3MgPiAwKSkgewotLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0 aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBv c19hcmdzLCAiX19pbml0X18iKSA8IDApKSBfX1BZWF9FUlIoMCwgOTUwLCBfX3B5eF9MM19lcnJv cikKLSsgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19w eXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9faW5pdF9f IikgPCAwKSkgX19QWVhfRVJSKDAsIDk1MiwgX19weXhfTDNfZXJyb3IpCi0gICAgICAgfQotICAg ICB9IGVsc2UgewotICAgICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkg ewotQEAgLTE2ODExLDcgKzE2ODExLDcgQEAgc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX18KLSAgIH0K LSAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7Ci0gICBfX3B5eF9MNV9h cmd0dXBsZV9lcnJvcjo7Ci0tICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18i LCAwLCAyLCA4LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDk1 MCwgX19weXhfTDNfZXJyb3IpCi0rICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0 X18iLCAwLCAyLCA4LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAs IDk1MiwgX19weXhfTDNfZXJyb3IpCi0gICBfX3B5eF9MM19lcnJvcjo7Ci0gICBfX1B5eF9BZGRU cmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0Ll9faW5pdF9fIiwgX19w eXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0gICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKLUBAIC0xNjgxOSw3ICsxNjgxOSw3IEBAIHN0YXRpYyBpbnQg X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xX19pbml0X18o UHlPYmplY3QgKl9fCi0gICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7Ci0gICBf X3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9f X2luaXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNv bnRleHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X21wdiwgX19weXhfdl9hcGlfdHlwZSwgX19w eXhfdl9vcGVuZ2xfaW5pdF9wYXJhbXMsIF9fcHl4X3ZfYWR2YW5jZWRfY29udHJvbCwgX19weXhf dl94MTFfZGlzcGxheSwgX19weXhfdl93bF9kaXNwbGF5LCBfX3B5eF92X2RybV9kaXNwbGF5LCBf X3B5eF92X2RybV9vc2Rfc2l6ZSk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTUwCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTUyCi0gICog ICAgICAgICBiaW50IGluaXRlZAotICAqIAotICAqICAgICBkZWYgX19pbml0X18oc2VsZiwgbXB2 LCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTY4NTYsMTQgKzE2ODU2LDE0IEBA IHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCi0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18iLCAwKTsKLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NjUKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5NjcKLSAgKiAgICAgICAgICAgICBtcHZfb3BlbmdsX2RybV9vc2Rfc2l6ZSBf ZHJtX29zZF9zaXplCi0gICogCi0gICogICAgICAgICBzZWxmLl9tcHYgPSBtcHYgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotICAqIAotICAqICAgICAgICAgbWVtc2V0KCZnbF9wYXJhbXMs IDAsIHNpemVvZihnbF9wYXJhbXMpKQotICAqLwotLSAgaWYgKCEobGlrZWx5KCgoX19weXhfdl9t cHYpID09IFB5X05vbmUpIHx8IGxpa2VseShfX1B5eF9UeXBlVGVzdChfX3B5eF92X21wdiwgX19w eXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpKSkpKSBfX1BZWF9FUlIoMCwg OTY1LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmICghKGxpa2VseSgoKF9fcHl4X3ZfbXB2KSA9PSBQ eV9Ob25lKSB8fCBsaWtlbHkoX19QeXhfVHlwZVRlc3QoX19weXhfdl9tcHYsIF9fcHl4X3B0eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KSkpKSkgX19QWVhfRVJSKDAsIDk2NywgX19w eXhfTDFfZXJyb3IpCi0gICBfX3B5eF90XzEgPSBfX3B5eF92X21wdjsKLSAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzEpOwotICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwotQEAgLTE2ODcyLDcg KzE2ODcyLDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNS ZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVjdCBfX3B5eF8KLSAgIF9fcHl4X3Zfc2VsZi0+X21w diA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9f cHl4X3RfMSk7Ci0gICBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjk2NwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk2 OQotICAqICAgICAgICAgc2VsZi5fbXB2ID0gbXB2Ci0gICogCi0gICogICAgICAgICBtZW1zZXQo JmdsX3BhcmFtcywgMCwgc2l6ZW9mKGdsX3BhcmFtcykpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLUBAIC0xNjg4MSw3ICsxNjg4MSw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCi0g ICovCi0gICAodm9pZCkobWVtc2V0KCgmX19weXhfdl9nbF9wYXJhbXMpLCAwLCAoc2l6ZW9mKF9f cHl4X3ZfZ2xfcGFyYW1zKSkpKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo5NjgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzAKLSAgKiAK LSAgKiAgICAgICAgIG1lbXNldCgmZ2xfcGFyYW1zLCAwLCBzaXplb2YoZ2xfcGFyYW1zKSkKLSAg KiAgICAgICAgIG1lbXNldCgmZHJtX3BhcmFtcywgMCwgc2l6ZW9mKGRybV9wYXJhbXMpKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTY4OTAsNyArMTY4OTAsNyBAQCBzdGF0aWMg aW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0 X18oc3RydWN0IF9fcHl4XwotICAqLwotICAgKHZvaWQpKG1lbXNldCgoJl9fcHl4X3ZfZHJtX3Bh cmFtcyksIDAsIChzaXplb2YoX19weXhfdl9kcm1fcGFyYW1zKSkpKTsKLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NjkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5NzEKLSAgKiAgICAgICAgIG1lbXNldCgmZ2xfcGFyYW1zLCAwLCBzaXplb2Yo Z2xfcGFyYW1zKSkKLSAgKiAgICAgICAgIG1lbXNldCgmZHJtX3BhcmFtcywgMCwgc2l6ZW9mKGRy bV9wYXJhbXMpKQotICAqICAgICAgICAgbWVtc2V0KCZfZHJtX29zZF9zaXplLCAwLCBzaXplb2Yo X2RybV9vc2Rfc2l6ZSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNjg5OSw0 NSArMTY4OTksNDUgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNSZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVjdCBfX3B5eF8KLSAgKi8KLSAgICh2b2lkKSht ZW1zZXQoKCZfX3B5eF92X19kcm1fb3NkX3NpemUpLCAwLCAoc2l6ZW9mKF9fcHl4X3ZfX2RybV9v c2Rfc2l6ZSkpKSk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTcx Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTczCi0gICogICAgICAgICBt ZW1zZXQoJl9kcm1fb3NkX3NpemUsIDAsIHNpemVvZihfZHJtX29zZF9zaXplKSkKLSAgKiAKLSAg KiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJhbXMoKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0gICogCi0gICogICAgICAgICBpZiBhcGlfdHlwZSA9PSBzZWxmLkFQSV9PUEVOR0w6 Ci0gICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVj dCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk3MSwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVjdCAqKV9f cHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKSk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk3MywgX19weXhfTDFfZXJyb3IpCi0gICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fcHl4X3ZfcGFyYW1zID0gKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdF8xKTsK LSAgIF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTczCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTc1Ci0gICogICAg ICAgICBwYXJhbXMgPSBfUmVuZGVyUGFyYW1zKCkKLSAgKiAKLSAgKiAgICAgICAgIGlmIGFwaV90 eXBlID09IHNlbGYuQVBJX09QRU5HTDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAq ICAgICAgICAgICAgIHBhcmFtcy5hZGRfc3RyaW5nKE1QVl9SRU5ERVJfUEFSQU1fQVBJX1RZUEUs IE1QVl9SRU5ERVJfQVBJX1RZUEVfT1BFTkdMKQotICAqICAgICAgICAgZWxzZToKLSAgKi8KLS0g IF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZiksIF9fcHl4X25fc19BUElfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgOTczLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25f c19BUElfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTc1 LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgX19weXhf dF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9hcGlfdHlwZSwgX19weXhfdF8xLCBQ eV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgOTczLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMiA9IFB5T2Jq ZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfYXBpX3R5cGUsIF9fcHl4X3RfMSwgUHlfRVEpOyBfX1B5 eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDk3NSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKLS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90 XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlYX0VSUigwLCA5NzMsIF9fcHl4 X0wxX2Vycm9yKQotKyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Rf Mik7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDk3NSwgX19weXhf TDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSAg IGlmIChsaWtlbHkoX19weXhfdF8zKSkgewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTc0Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 NzYKLSAgKiAKLSAgKiAgICAgICAgIGlmIGFwaV90eXBlID09IHNlbGYuQVBJX09QRU5HTDoKLSAg KiAgICAgICAgICAgICBwYXJhbXMuYWRkX3N0cmluZyhNUFZfUkVOREVSX1BBUkFNX0FQSV9UWVBF LCBNUFZfUkVOREVSX0FQSV9UWVBFX09QRU5HTCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqICAgICAgICAgZWxzZToKLSAgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJV bmtub3duIGFwaV90eXBlICVyIiAlIGFwaV90eXBlKQotICAqLwotLSAgICBfX3B5eF90XzIgPSAo KHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfc3RyaW5nKF9fcHl4X3ZfcGFy YW1zLCBNUFZfUkVOREVSX1BBUkFNX0FQSV9UWVBFLCBNUFZfUkVOREVSX0FQSV9UWVBFX09QRU5H TCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk3NCwgX19weXhfTDFf ZXJyb3IpCi0rICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1 dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19weXhfdnRh YiktPmFkZF9zdHJpbmcoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1fQVBJX1RZUEUs IE1QVl9SRU5ERVJfQVBJX1RZUEVfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgOTc2LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMik7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotIAot LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTczCi0rICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzUKLSAgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5k ZXJQYXJhbXMoKQotICAqIAotICAqICAgICAgICAgaWYgYXBpX3R5cGUgPT0gc2VsZi5BUElfT1BF TkdMOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTY5NDcsNyArMTY5NDcsNyBA QCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfX19pbml0X18oc3RydWN0IF9fcHl4XwotICAgICBnb3RvIF9fcHl4X0wzOwotICAgfQotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3NgotKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk3OAotICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfc3Ry aW5nKE1QVl9SRU5ERVJfUEFSQU1fQVBJX1RZUEUsIE1QVl9SRU5ERVJfQVBJX1RZUEVfT1BFTkdM KQotICAqICAgICAgICAgZWxzZToKLSAgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJV bmtub3duIGFwaV90eXBlICVyIiAlIGFwaV90eXBlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci1AQCAtMTY5NTUsOSArMTY5NTUsOSBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XwotICAq ICAgICAgICAgaWYgb3BlbmdsX2luaXRfcGFyYW1zIGlzIG5vdCBOb25lOgotICAqLwotICAgLypl bHNlKi8gewotLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhf bl9zX1B5TVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5 NzYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4 X3RfMSwgX19weXhfbl9zX1B5TVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCA5NzgsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKLS0gICAgX19weXhfdF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0U2FmZShfX3B5eF9r cF9zX1Vua25vd25fYXBpX3R5cGVfciwgX19weXhfdl9hcGlfdHlwZSk7IGlmICh1bmxpa2VseSgh X19weXhfdF80KSkgX19QWVhfRVJSKDAsIDk3NiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4 X3RfNCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdFNhZmUoX19weXhfa3Bfc19Vbmtub3duX2FwaV90 eXBlX3IsIF9fcHl4X3ZfYXBpX3R5cGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCA5NzgsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKLSAgICAgX19weXhfdF81ID0gTlVMTDsKLSAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9E UyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzEpKSkgewotQEAgLTE2OTcyLDE2 ICsxNjk3MiwxNiBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XwotICAgICBfX3B5eF90XzIgPSAo X19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzEsIF9fcHl4X3Rf NSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8xLCBfX3B5 eF90XzQpOwotICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0g ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5NzYsIF9fcHl4X0wxX2Vycm9yKQotKyAg ICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5NzgsIF9fcHl4X0wxX2Vy cm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMiwgMCwg MCwgMCk7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAg ICBfX1BZWF9FUlIoMCwgOTc2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QWVhfRVJSKDAsIDk3 OCwgX19weXhfTDFfZXJyb3IpCi0gICB9Ci0gICBfX3B5eF9MMzo7Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTc4Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTgwCi0gICogICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJvcigiVW5rbm93biBh cGlfdHlwZSAlciIgJSBhcGlfdHlwZSkKLSAgKiAKLSAgKiAgICAgICAgIGlmIG9wZW5nbF9pbml0 X3BhcmFtcyBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE2 OTkyLDE0ICsxNjk5MiwxNCBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XwotICAgX19weXhfdF82 ID0gKF9fcHl4X3RfMyAhPSAwKTsKLSAgIGlmIChfX3B5eF90XzYpIHsKLSAKLS0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3OQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTgxCi0gICogCi0gICogICAgICAgICBpZiBvcGVuZ2xfaW5pdF9wYXJh bXMgaXMgbm90IE5vbmU6Ci0gICogICAgICAgICAgICAgc2VsZi5fZ2V0X3Byb2NfYWRkcmVzcyA9 IG9wZW5nbF9pbml0X3BhcmFtc1siZ2V0X3Byb2NfYWRkcmVzcyJdICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzcyA9 ICZfY19nZXRwcm9jYWRkcmVzcwotICAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19h ZGRyZXNzX2N0eCA9IDx2b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVzcwotICAqLwotLSAgICBf X3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9EaWN0X0dldEl0ZW0oX19weXhfdl9vcGVuZ2xfaW5p dF9wYXJhbXMsIF9fcHl4X25fc19nZXRfcHJvY19hZGRyZXNzKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgOTc5LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8y ID0gX19QeXhfUHlPYmplY3RfRGljdF9HZXRJdGVtKF9fcHl4X3Zfb3BlbmdsX2luaXRfcGFyYW1z LCBfX3B5eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDk4MSwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOwotICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMik7Ci0gICAgIF9fUHl4X0dPVFJF RihfX3B5eF92X3NlbGYtPl9nZXRfcHJvY19hZGRyZXNzKTsKLUBAIC0xNzAwNyw3ICsxNzAwNyw3 IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29u dGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCi0gICAgIF9fcHl4X3Zfc2VsZi0+X2dldF9wcm9j X2FkZHJlc3MgPSBfX3B5eF90XzI7Ci0gICAgIF9fcHl4X3RfMiA9IDA7Ci0gCi0tICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODAKLSsgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjk4MgotICAqICAgICAgICAgaWYgb3BlbmdsX2luaXRfcGFyYW1zIGlz IG5vdCBOb25lOgotICAqICAgICAgICAgICAgIHNlbGYuX2dldF9wcm9jX2FkZHJlc3MgPSBvcGVu Z2xfaW5pdF9wYXJhbXNbImdldF9wcm9jX2FkZHJlc3MiXQotICAqICAgICAgICAgICAgIGdsX3Bh cmFtcy5nZXRfcHJvY19hZGRyZXNzID0gJl9jX2dldHByb2NhZGRyZXNzICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLUBAIC0xNzAxNiw3ICsxNzAxNiw3IEBAIHN0YXRpYyBpbnQgX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3Qg X19weXhfCi0gICovCi0gICAgIF9fcHl4X3ZfZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3MgPSAo Jl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX2dldHByb2NhZGRyZXNzKTsKLSAKLS0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4MQotKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTgzCi0gICogICAgICAgICAgICAgc2VsZi5fZ2V0X3By b2NfYWRkcmVzcyA9IG9wZW5nbF9pbml0X3BhcmFtc1siZ2V0X3Byb2NfYWRkcmVzcyJdCi0gICog ICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3MgPSAmX2NfZ2V0cHJvY2FkZHJl c3MKLSAgKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzc19jdHggPSA8dm9p ZCAqPnNlbGYuX2dldF9wcm9jX2FkZHJlc3MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTE3MDI1LDE4ICsxNzAyNSwxOCBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XwotICAqLwot ICAgICBfX3B5eF92X2dsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9ICgodm9pZCAqKV9f cHl4X3Zfc2VsZi0+X2dldF9wcm9jX2FkZHJlc3MpOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTgyCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo5ODQKLSAgKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzcyA9ICZf Y19nZXRwcm9jYWRkcmVzcwotICAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRy ZXNzX2N0eCA9IDx2b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVzcwotICAqICAgICAgICAgICAg IHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZn bF9wYXJhbXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIGlmIGFk dmFuY2VkX2NvbnRyb2w6Ci0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRF Ul9QQVJBTV9BRFZBTkNFRF9DT05UUk9MLCAxKQotICAqLwotLSAgICBfX3B5eF90XzIgPSAoKHN0 cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z ICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9wYXJhbXMs IE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0lOSVRfUEFSQU1TLCAoJl9fcHl4X3ZfZ2xfcGFyYW1z KSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk4MiwgX19w eXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3Rf OXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19w eXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9PUEVO R0xfSU5JVF9QQVJBTVMsICgmX19weXhfdl9nbF9wYXJhbXMpLCBOVUxMKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTg0LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMik7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5 eF90XzIgPSAwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTc4 Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODAKLSAgKiAgICAgICAg ICAgICByYWlzZSBQeU1QVkVycm9yKCJVbmtub3duIGFwaV90eXBlICVyIiAlIGFwaV90eXBlKQot ICAqIAotICAqICAgICAgICAgaWYgb3BlbmdsX2luaXRfcGFyYW1zIGlzIG5vdCBOb25lOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTcwNDUsMjggKzE3MDQ1LDI4IEBAIHN0YXRp YyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2lu aXRfXyhzdHJ1Y3QgX19weXhfCi0gICovCi0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTgzCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTg1Ci0gICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3NfY3R4ID0gPHZv aWQgKj5zZWxmLl9nZXRfcHJvY19hZGRyZXNzCi0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF92 b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9JTklUX1BBUkFNUywgJmdsX3BhcmFtcykKLSAg KiAgICAgICAgIGlmIGFkdmFuY2VkX2NvbnRyb2w6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0FEVkFO Q0VEX0NPTlRST0wsIDEpCi0gICogICAgICAgICBpZiB4MTFfZGlzcGxheToKLSAgKi8KLS0gIF9f cHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X2FkdmFuY2VkX2NvbnRyb2wp OyBpZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlYX0VSUigwLCA5ODMsIF9fcHl4X0wx X2Vycm9yKQotKyAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfYWR2 YW5jZWRfY29udHJvbCk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAs IDk4NSwgX19weXhfTDFfZXJyb3IpCi0gICBpZiAoX19weXhfdF82KSB7Ci0gCi0tICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODQKLSsgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjk4NgotICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBW X1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMpCi0gICogICAgICAg ICBpZiBhZHZhbmNlZF9jb250cm9sOgotICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1Q Vl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotICAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6Ci0gICogICAgICAgICAgICAgc2Vs Zi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheQotICAqLwotLSAgICBfX3B5eF90XzIgPSAoKHN0 cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z ICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4X3ZfcGFyYW1zLCBN UFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA5ODQsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzIg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4X3ZfcGFy YW1zLCBNUFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5ODYsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODMK LSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4NQotICAqICAgICAgICAg ICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9IDx2b2lkICo+c2VsZi5fZ2V0X3By b2NfYWRkcmVzcwotICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9Q QVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMpCi0gICogICAgICAgICBpZiBhZHZh bmNlZF9jb250cm9sOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTcwNzUsMTcg KzE3MDc1LDE3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz UmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCi0gICovCi0gICB9Ci0gCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTg1Ci0rICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTg3Ci0gICogICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9sOgot ICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURf Q09OVFJPTCwgMSkKLSAgKiAgICAgICAgIGlmIHgxMV9kaXNwbGF5OiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlz cGxheQotICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9Y MTFfRElTUExBWSwgZ2V0X3BvaW50ZXIoIkRpc3BsYXkiLCB4MTFfZGlzcGxheSkpCi0gICovCi0t ICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl94MTFfZGlzcGxheSk7 IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDk4NSwgX19weXhfTDFf ZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl94MTFf ZGlzcGxheSk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDk4Nywg X19weXhfTDFfZXJyb3IpCi0gICBpZiAoX19weXhfdF82KSB7Ci0gCi0tICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODYKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjk4OAotICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJf UEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkKLSAgKiAgICAgICAgIGlmIHgxMV9kaXNwbGF5Ogot ICAqICAgICAgICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE3MDk4LDE4ICsxNzA5OCwxOCBAQCBzdGF0aWMgaW50 IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18o c3RydWN0IF9fcHl4XwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5feDExX2Rpc3Bs YXkpOwotICAgICBfX3B5eF92X3NlbGYtPl94MTFfZGlzcGxheSA9IF9fcHl4X3ZfeDExX2Rpc3Bs YXk7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODcKLSsgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4OQotICAqICAgICAgICAgaWYgeDEx X2Rpc3BsYXk6Ci0gICogICAgICAgICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxh eQotICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9YMTFf RElTUExBWSwgZ2V0X3BvaW50ZXIoIkRpc3BsYXkiLCB4MTFfZGlzcGxheSkpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIGlmIHdsX2Rpc3BsYXk6Ci0gICogICAgICAg ICAgICAgc2VsZi5fd2xfZGlzcGxheSA9IHdsX2Rpc3BsYXkKLSAgKi8KLS0gICAgX19weXhfdF8y ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRl clBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3Zf cGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX1gxMV9ESVNQTEFZLCBfX3B5eF9mXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9nZXRfcG9pbnRlcigoKGNoYXIgY29uc3QgKikiRGlzcGxheSIpLCBfX3B5eF92 X3gxMV9kaXNwbGF5KSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDk4NywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4 X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92 X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRF Ul9QQVJBTV9YMTFfRElTUExBWSwgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3Bv aW50ZXIoKChjaGFyIGNvbnN0ICopIkRpc3BsYXkiKSwgX19weXhfdl94MTFfZGlzcGxheSksIE5V TEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5ODksIF9fcHl4X0wx X2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5ODUKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojk4NwotICAqICAgICAgICAgaWYgYWR2YW5jZWRfY29udHJvbDoKLSAgKiAgICAgICAgICAgICBw YXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpCi0gICog ICAgICAgICBpZiB4MTFfZGlzcGxheTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAg LTE3MTE4LDE3ICsxNzExOCwxNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XwotICAqLwotICAg fQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4OAotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MAotICAqICAgICAgICAgICAgIHNlbGYuX3gx MV9kaXNwbGF5ID0geDExX2Rpc3BsYXkKLSAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRw KE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2ludGVyKCJEaXNwbGF5IiwgeDEx X2Rpc3BsYXkpKQotICAqICAgICAgICAgaWYgd2xfZGlzcGxheTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotICAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNwbGF5 Ci0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJ U1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCi0gICovCi0tICBf X3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl93bF9kaXNwbGF5KTsgaWYg KHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgOTg4LCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X3dsX2Rpc3Bs YXkpOyBpZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlYX0VSUigwLCA5OTAsIF9fcHl4 X0wxX2Vycm9yKQotICAgaWYgKF9fcHl4X3RfNikgewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTg5Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo5OTEKLSAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFS QU1fWDExX0RJU1BMQVksIGdldF9wb2ludGVyKCJEaXNwbGF5IiwgeDExX2Rpc3BsYXkpKQotICAq ICAgICAgICAgaWYgd2xfZGlzcGxheToKLSAgKiAgICAgICAgICAgICBzZWxmLl93bF9kaXNwbGF5 ID0gd2xfZGlzcGxheSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTcxNDEsMTgg KzE3MTQxLDE4IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz UmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCi0gICAgIF9fUHl4X0RFQ1JFRihf X3B5eF92X3NlbGYtPl93bF9kaXNwbGF5KTsKLSAgICAgX19weXhfdl9zZWxmLT5fd2xfZGlzcGxh eSA9IF9fcHl4X3Zfd2xfZGlzcGxheTsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjk5MAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTky Ci0gICogICAgICAgICBpZiB3bF9kaXNwbGF5OgotICAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rp c3BsYXkgPSB3bF9kaXNwbGF5Ci0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZf UkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlz cGxheSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIGlmIGRybV9k aXNwbGF5OgotICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQo ImZkIiwgLTEpCi0gICovCi0tICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1 Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+ X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9X TF9ESVNQTEFZLCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9nZXRfcG9pbnRlcigoKGNo YXIgY29uc3QgKikid2xfZGlzcGxheSIpLCBfX3B5eF92X3dsX2Rpc3BsYXkpLCBOVUxMKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTkwLCBfX3B5eF9MMV9lcnJvcikK LSsgICAgX19weXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRk X3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIF9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X2dldF9wb2ludGVyKCgoY2hhciBjb25zdCAqKSJ3bF9k aXNwbGF5IiksIF9fcHl4X3Zfd2xfZGlzcGxheSksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA5OTIsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9 IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODgKLSsgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MAotICAqICAgICAgICAgICAgIHNl bGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkKLSAgKiAgICAgICAgICAgICBwYXJhbXMuYWRk X3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2ludGVyKCJEaXNwbGF5 IiwgeDExX2Rpc3BsYXkpKQotICAqICAgICAgICAgaWYgd2xfZGlzcGxheTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotQEAgLTE3MTYxLDgwICsxNzE2MSw4MCBAQCBzdGF0aWMgaW50IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3Ry dWN0IF9fcHl4XwotICAqLwotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk5MQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MwotICAq ICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNwbGF5Ci0gICogICAgICAgICAg ICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9wb2lu dGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCi0gICogICAgICAgICBpZiBkcm1fZGlzcGxh eTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgICAgIGRybV9wYXJh bXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpCi0gICogICAgICAgICAgICAgZHJtX3Bh cmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpCi0gICovCi0tICBf X3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9kcm1fZGlzcGxheSk7IGlm ICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDk5MSwgX19weXhfTDFfZXJy b3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9kcm1fZGlz cGxheSk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDk5MywgX19w eXhfTDFfZXJyb3IpCi0gICBpZiAoX19weXhfdF82KSB7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5OTIKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk5NAotICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9Q QVJBTV9XTF9ESVNQTEFZLCBnZXRfcG9pbnRlcigid2xfZGlzcGxheSIsIHdsX2Rpc3BsYXkpKQot ICAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6Ci0gICogICAgICAgICAgICAgZHJtX3BhcmFtcy5m ZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5LmdldCgi Y3J0Y19pZCIsIC0xKQotICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0g ZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkKLSAgKi8KLS0gICAgX19weXhfdF8y ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2RybV9kaXNwbGF5LCBfX3B5eF9u X3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTkyLCBfX3B5 eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92X2RybV9kaXNwbGF5LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgOTk0LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7Ci0tICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhf dF8yLCBfX3B5eF90dXBsZV9fNywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDk5MiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5 T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90dXBsZV9fNywgTlVMTCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5NCwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19w eXhfdF8yID0gMDsKLS0gICAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3Rf MSk7IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVk KCkpKSBfX1BZWF9FUlIoMCwgOTkyLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF83ID0g X19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09 IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTk0LCBfX3B5eF9M MV9lcnJvcikKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0g ICAgIF9fcHl4X3ZfZHJtX3BhcmFtcy5mZCA9IF9fcHl4X3RfNzsKLSAKLS0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTk1Ci0gICogICAgICAgICBpZiBkcm1fZGlzcGxheToKLSAgKiAgICAgICAg ICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIsIC0xKQotICAqICAgICAg ICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5LmdldCgiY3J0Y19pZCIsIC0x KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICAgICAgZHJtX3BhcmFt cy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0xKQotICAq ICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVlc3RfcHRyIiwg Tm9uZSkKLSAgKi8KLS0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92X2RybV9kaXNwbGF5LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgOTkzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8xID0g X19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2RybV9kaXNwbGF5LCBfX3B5eF9uX3Nf Z2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTk1LCBfX3B5eF9M MV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fcHl4X3RfMiA9 IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8xLCBfX3B5eF90dXBsZV9fOCwgTlVMTCk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk5MywgX19weXhfTDFfZXJyb3Ip Ci0rICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8xLCBfX3B5eF90 dXBsZV9fOCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk5 NSwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotICAgICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLS0gICAgX19weXhfdF83ID0g X19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09 IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTkzLCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMik7 IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkp KSBfX1BZWF9FUlIoMCwgOTk1LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0gICAgIF9fcHl4X3ZfZHJtX3BhcmFtcy5jcnRjX2lk ID0gX19weXhfdF83OwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTk0Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTYKLSAgKiAgICAg ICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIsIC0xKQotICAqICAg ICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5LmdldCgiY3J0Y19pZCIs IC0xKQotICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3Bs YXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot ICAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVlc3RfcHRy IiwgTm9uZSkKLSAgKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6Ci0gICovCi0tICAg IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxh eSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDk5NCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk5NiwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9D YWxsKF9fcHl4X3RfMiwgX19weXhfdHVwbGVfXzksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCA5OTQsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzEg PSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMiwgX19weXhfdHVwbGVfXzksIE5VTEwpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5OTYsIF9fcHl4X0wxX2Vycm9y KQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5SW50X0FzX2lu dChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoaW50KS0xKSAmJiBQeUVy cl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDk5NCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9f cHl4X3RfNyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9f cHl4X3RfNyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDk5 NiwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOwotICAgICBfX3B5eF92X2RybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gX19weXhfdF83 OwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk1Ci0rICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTcKLSAgKiAgICAgICAgICAgICBkcm1f cGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKLSAgKiAgICAg ICAgICAgICBkcm1fcGFyYW1zLmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVj dG9yX2lkIiwgLTEpCi0gICogICAgICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9t aWNfcmVxdWVzdF9wdHIiLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICog ICAgICAgICAgICAgaWYgYXJwIGlzIG5vdCBOb25lOgotICAqICAgICAgICAgICAgICAgICBkcm1f cGFyYW1zLmF0b21pY19yZXF1ZXN0X3B0ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5nZXRfcG9p bnRlcihhcnAsICJkcm1Nb2RlQXRvbWljUmVxKiIpCi0gICovCi0tICAgIF9fcHl4X3RfMSA9IF9f UHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19weXhfbl9zX2dl dCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5NSwgX19weXhfTDFf ZXJyb3IpCi0rICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhf dl9kcm1fZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDk5NywgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOwotLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMSwg X19weXhfdHVwbGVfXzEwLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgOTk1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfQ2FsbChfX3B5eF90XzEsIF9fcHl4X3R1cGxlX18xMCwgTlVMTCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk5NywgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKLSAgICAgX19weXhfdl9hcnAgPSBfX3B5eF90XzI7Ci0gICAgIF9fcHl4X3RfMiA9 IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTYKLSsgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5OAotICAqICAgICAgICAgICAgIGRy bV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAt MSkKLSAgKiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5nZXQoImF0b21pY19yZXF1ZXN0 X3B0ciIsIE5vbmUpCi0gICogICAgICAgICAgICAgaWYgYXJwIGlzIG5vdCBOb25lOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTcyNDUsMTcgKzE3MjQ1LDE3IEBAIHN0YXRpYyBp bnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRf XyhzdHJ1Y3QgX19weXhfCi0gICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzYgIT0gMCk7Ci0gICAg IGlmIChfX3B5eF90XzMpIHsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTk3Ci0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5OQot ICAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVlc3RfcHRy IiwgTm9uZSkKLSAgKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6Ci0gICogICAgICAg ICAgICAgICAgIGRybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gPF9kcm1Nb2RlQXRvbWlj UmVxICoqPmdldF9wb2ludGVyKGFycCwgImRybU1vZGVBdG9taWNSZXEqIikgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVyX2ZkID0g ZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkKLSAgKiAgICAgICAgICAgICBwYXJhbXMu YWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1zKQotICAq LwotLSAgICAgIF9fcHl4X3RfOCA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfYXJw KTsgaWYgKHVubGlrZWx5KCghX19weXhfdF84KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDk5NywgX19weXhfTDFfZXJyb3IpCi0rICAgICAgX19weXhfdF84ID0gX19QeXhfUHlP YmplY3RfQXNTdHJpbmcoX19weXhfdl9hcnApOyBpZiAodW5saWtlbHkoKCFfX3B5eF90XzgpICYm IFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTk5LCBfX3B5eF9MMV9lcnJvcikKLSAg ICAgICBfX3B5eF92X2RybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gKChzdHJ1Y3QgX2Ry bU1vZGVBdG9taWNSZXEgKiopX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3BvaW50 ZXIoX19weXhfdF84LCBfX3B5eF9rcF9zX2RybU1vZGVBdG9taWNSZXEpKTsKLSAKLS0gICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk2Ci0rICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk5OAotICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29u bmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkKLSAgKiAgICAg ICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5nZXQoImF0b21pY19yZXF1ZXN0X3B0ciIsIE5vbmUp Ci0gICogICAgICAgICAgICAgaWYgYXJwIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci1AQCAtMTcyNjQsMzQgKzE3MjY0LDM0IEBAIHN0YXRpYyBpbnQgX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19w eXhfCi0gICovCi0gICAgIH0KLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjk5OAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAwMAotICAq ICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKLSAgKiAgICAgICAgICAgICAgICAgZHJt X3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0X3Bv aW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQotICAqICAgICAgICAgICAgIGRybV9wYXJh bXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBW X1JFTkRFUl9QQVJBTV9EUk1fRElTUExBWSwgJmRybV9wYXJhbXMpCi0gICogICAgICAgICBpZiBk cm1fb3NkX3NpemU6Ci0gICovCi0tICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0 dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk5OCwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4 X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19w eXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwMDAs IF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gICAgX19w eXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzIsIF9fcHl4X3R1cGxlX18xMSwg TlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5OCwgX19weXhf TDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8y LCBfX3B5eF90dXBsZV9fMTEsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAxMDAwLCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgICBf X3B5eF90XzcgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChf X3B5eF90XzcgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA5 OTgsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9Bc19pbnQo X19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzcgPT0gKGludCktMSkgJiYgUHlFcnJf T2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDAwLCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gICAgIF9fcHl4X3ZfZHJtX3Bh cmFtcy5yZW5kZXJfZmQgPSBfX3B5eF90Xzc7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5OTkKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwMDEKLSAgKiAgICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIg PSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1Jl cSoiKQotICAqICAgICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXku Z2V0KCJyZW5kZXJfZmQiLCAtMSkKLSAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1Q Vl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1zKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6Ci0gICogICAgICAgICAg ICAgX2RybV9vc2Rfc2l6ZS53aWR0aCwgX2RybV9vc2Rfc2l6ZS5oZWlnaHQgPSBkcm1fb3NkX3Np emUKLSAgKi8KLS0gICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92 dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQ TEFZLCAoJl9fcHl4X3ZfZHJtX3BhcmFtcyksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA5OTksIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzEgPSAo KHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9wYXJh bXMsIE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICgmX19weXhfdl9kcm1fcGFyYW1zKSwg TlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwMDEsIF9fcHl4 X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5OTEKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjk5MwotICAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNwbGF5Ci0g ICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BM QVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCi0gICogICAgICAgICBp ZiBkcm1fZGlzcGxheTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE3MzAwLDE3 ICsxNzMwMCwxNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XwotICAqLwotICAgfQotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDAKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDAyCi0gICogICAgICAgICAgICAgZHJtX3BhcmFtcy5yZW5k ZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJlbmRlcl9mZCIsIC0xKQotICAqICAgICAgICAgICAg IHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9EUk1fRElTUExBWSwgJmRybV9wYXJh bXMpCi0gICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSAgKiAgICAgICAgICAgICBfZHJtX29zZF9zaXplLndpZHRoLCBfZHJtX29zZF9zaXpl LmhlaWdodCA9IGRybV9vc2Rfc2l6ZQotICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAo TVBWX1JFTkRFUl9QQVJBTV9EUk1fT1NEX1NJWkUsICZfZHJtX29zZF9zaXplKQotICAqLwotLSAg X19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfZHJtX29zZF9zaXplKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwgMTAwMCwgX19weXhfTDFf ZXJyb3IpCi0rICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9kcm1f b3NkX3NpemUpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlYX0VSUigwLCAxMDAy LCBfX3B5eF9MMV9lcnJvcikKLSAgIGlmIChfX3B5eF90XzMpIHsKLSAKLS0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDEKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwMDMKLSAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9S RU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1zKQotICAqICAgICAgICAgaWYgZHJt X29zZF9zaXplOgotICAqICAgICAgICAgICAgIF9kcm1fb3NkX3NpemUud2lkdGgsIF9kcm1fb3Nk X3NpemUuaGVpZ2h0ID0gZHJtX29zZF9zaXplICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LUBAIC0xNzMyMyw3ICsxNzMyMyw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCi0gICAgICAg aWYgKHVubGlrZWx5KHNpemUgIT0gMikpIHsKLSAgICAgICAgIGlmIChzaXplID4gMikgX19QeXhf UmFpc2VUb29NYW55VmFsdWVzRXJyb3IoMik7Ci0gICAgICAgICBlbHNlIGlmIChzaXplID49IDAp IF9fUHl4X1JhaXNlTmVlZE1vcmVWYWx1ZXNFcnJvcihzaXplKTsKLS0gICAgICAgIF9fUFlYX0VS UigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICAgIF9fUFlYX0VSUigwLCAxMDAzLCBf X3B5eF9MMV9lcnJvcikKLSAgICAgICB9Ci0gICAgICAgI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9N QUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCi0gICAgICAgaWYgKGxpa2VseShQ eVR1cGxlX0NoZWNrRXhhY3Qoc2VxdWVuY2UpKSkgewotQEAgLTE3MzM2LDIxICsxNzMzNiwyMSBA QCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfX19pbml0X18oc3RydWN0IF9fcHl4XwotICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEp OwotICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOwotICAgICAgICNlbHNlCi0tICAgICAg X19weXhfdF8xID0gUHlTZXF1ZW5jZV9JVEVNKHNlcXVlbmNlLCAwKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCi0rICAgICAgX19w eXhfdF8xID0gUHlTZXF1ZW5jZV9JVEVNKHNlcXVlbmNlLCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgMTAwMywgX19weXhfTDFfZXJyb3IpCi0gICAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgICAgX19weXhfdF8yID0gUHlTZXF1ZW5jZV9JVEVNKHNl cXVlbmNlLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTAwMSwg X19weXhfTDFfZXJyb3IpCi0rICAgICAgX19weXhfdF8yID0gUHlTZXF1ZW5jZV9JVEVNKHNlcXVl bmNlLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTAwMywgX19w eXhfTDFfZXJyb3IpCi0gICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0gICAgICAgI2Vu ZGlmCi0gICAgIH0gZWxzZSB7Ci0gICAgICAgUHlfc3NpemVfdCBpbmRleCA9IC0xOwotLSAgICAg IF9fcHl4X3RfNCA9IFB5T2JqZWN0X0dldEl0ZXIoX19weXhfdl9kcm1fb3NkX3NpemUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikK LSsgICAgICBfX3B5eF90XzQgPSBQeU9iamVjdF9HZXRJdGVyKF9fcHl4X3ZfZHJtX29zZF9zaXpl KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAwMywgX19weXhfTDFf ZXJyb3IpCi0gICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0gICAgICAgX19weXhfdF85 ID0gUHlfVFlQRShfX3B5eF90XzQpLT50cF9pdGVybmV4dDsKLSAgICAgICBpbmRleCA9IDA7IF9f cHl4X3RfMSA9IF9fcHl4X3RfOShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IGdvdG8gX19weXhfTDExX3VucGFja2luZ19mYWlsZWQ7Ci0gICAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7Ci0gICAgICAgaW5kZXggPSAxOyBfX3B5eF90XzIgPSBfX3B5eF90XzkoX19weXhf dF80KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBnb3RvIF9fcHl4X0wxMV91bnBhY2tpbmdf ZmFpbGVkOwotICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotLSAgICAgIGlmIChfX1B5 eF9JdGVybmV4dFVucGFja0VuZENoZWNrKF9fcHl4X3RfOShfX3B5eF90XzQpLCAyKSA8IDApIF9f UFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBpZiAoX19QeXhfSXRlcm5l eHRVbnBhY2tFbmRDaGVjayhfX3B5eF90XzkoX19weXhfdF80KSwgMikgPCAwKSBfX1BZWF9FUlIo MCwgMTAwMywgX19weXhfTDFfZXJyb3IpCi0gICAgICAgX19weXhfdF85ID0gTlVMTDsKLSAgICAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSAgICAgICBnb3RvIF9f cHl4X0wxMl91bnBhY2tpbmdfZG9uZTsKLUBAIC0xNzM1OCwyOCArMTczNTgsMjggQEAgc3RhdGlj IGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0X19faW5p dF9fKHN0cnVjdCBfX3B5eF8KLSAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhf dF80ID0gMDsKLSAgICAgICBfX3B5eF90XzkgPSBOVUxMOwotICAgICAgIGlmIChfX1B5eF9JdGVy RmluaXNoKCkgPT0gMCkgX19QeXhfUmFpc2VOZWVkTW9yZVZhbHVlc0Vycm9yKGluZGV4KTsKLS0g ICAgICBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCi0rICAgICAgX19QWVhfRVJS KDAsIDEwMDMsIF9fcHl4X0wxX2Vycm9yKQotICAgICAgIF9fcHl4X0wxMl91bnBhY2tpbmdfZG9u ZTo7Ci0gICAgIH0KLS0gICAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3Rf MSk7IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVk KCkpKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfNyA9 IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9 PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwMDMsIF9fcHl4 X0wxX2Vycm9yKQotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK LS0gICAgX19weXhfdF8xMCA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzIpOyBpZiAodW5s aWtlbHkoKF9fcHl4X3RfMTAgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlY X0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8xMCA9IF9fUHl4X1B5 SW50X0FzX2ludChfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMTAgPT0gKGludCkt MSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDAzLCBfX3B5eF9MMV9lcnJv cikKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0gICAgIF9f cHl4X3ZfX2RybV9vc2Rfc2l6ZS53aWR0aCA9IF9fcHl4X3RfNzsKLSAgICAgX19weXhfdl9fZHJt X29zZF9zaXplLmhlaWdodCA9IF9fcHl4X3RfMTA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDAyCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDA0Ci0gICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6Ci0gICogICAgICAgICAgICAg X2RybV9vc2Rfc2l6ZS53aWR0aCwgX2RybV9vc2Rfc2l6ZS5oZWlnaHQgPSBkcm1fb3NkX3NpemUK LSAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX09T RF9TSVpFLCAmX2RybV9vc2Rfc2l6ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAq IAotICAqICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2NyZWF0ZSgmc2VsZi5fY3R4 LCBzZWxmLl9tcHYuX2N0eCwgcGFyYW1zLnBhcmFtcykKLSAgKi8KLS0gICAgX19weXhfdF8yID0g KChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBh cmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFy YW1zLCBNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgKCZfX3B5eF92X19kcm1fb3NkX3Np emUpLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTAwMiwg X19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1 Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+ X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9E Uk1fT1NEX1NJWkUsICgmX19weXhfdl9fZHJtX29zZF9zaXplKSwgTlVMTCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwMDQsIF9fcHl4X0wxX2Vycm9yKQotICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9f cHl4X3RfMiA9IDA7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDAwCi0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDAyCi0gICogICAg ICAgICAgICAgZHJtX3BhcmFtcy5yZW5kZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJlbmRlcl9m ZCIsIC0xKQotICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJB TV9EUk1fRElTUExBWSwgJmRybV9wYXJhbXMpCi0gICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNzM4OCw3ICsxNzM4OCw3IEBAIHN0 YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9f X2luaXRfXyhzdHJ1Y3QgX19weXhfCi0gICovCi0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTAwNAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwMDYKLSAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFS QU1fRFJNX09TRF9TSVpFLCAmX2RybV9vc2Rfc2l6ZSkKLSAgKiAKLSAgKiAgICAgICAgIGVyciA9 IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2Ll9jdHgsIHBh cmFtcy5wYXJhbXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNzM5Nyw3ICsx NzM5Nyw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVu ZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCi0gICovCi0gICBfX3B5eF92X2VyciA9 IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoKCZfX3B5eF92X3NlbGYtPl9jdHgpLCBfX3B5eF92 X3NlbGYtPl9tcHYtPl9jdHgsIF9fcHl4X3ZfcGFyYW1zLT5wYXJhbXMpOwotIAotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDUKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDA3Ci0gICogCi0gICogICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2Nv bnRleHRfY3JlYXRlKCZzZWxmLl9jdHgsIHNlbGYuX21wdi5fY3R4LCBwYXJhbXMucGFyYW1zKQot ICAqICAgICAgICAgaWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAg LTE3NDA3LDE2ICsxNzQwNywxNiBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XwotICAgX19weXhf dF8zID0gKChfX3B5eF92X2VyciA8IDApICE9IDApOwotICAgaWYgKHVubGlrZWx5KF9fcHl4X3Rf MykpIHsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDYKLSsg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDgKLSAgKiAgICAgICAgIGVy ciA9IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2Ll9jdHgs IHBhcmFtcy5wYXJhbXMpCi0gICogICAgICAgICBpZiBlcnIgPCAwOgotICAqICAgICAgICAgICAg IHJhaXNlIE1QVkVycm9yKGVycikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAg ICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCi0gICogCi0gICovCi0tICAgIF9fUHl4X0dldE1vZHVs ZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDA2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzEsIF9fcHl4X25fc19NUFZFcnJvcik7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwMDgsIF9fcHl4X0wxX2Vycm9y KQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gICAgX19weXhfdF80ID0gX19QeXhf UHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9f UFlYX0VSUigwLCAxMDA2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF80ID0gX19QeXhf UHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9f UFlYX0VSUigwLCAxMDA4LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNCk7Ci0gICAgIF9fcHl4X3RfNSA9IE5VTEw7Ci0gICAgIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8xKSkpIHsKLUBAIC0xNzQz MSwxNCArMTc0MzEsMTQgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNSZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVjdCBfX3B5eF8KLSAgICAgX19weXhfdF8y ID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8xLCBfX3B5 eF90XzUsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMSwg X19weXhfdF80KTsKLSAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAw OwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLS0gICAgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTAwNiwgX19weXhfTDFfZXJyb3Ip Ci0rICAgIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwMDgsIF9fcHl4 X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gICAgIF9fUHl4X1JhaXNlKF9fcHl4X3Rf MiwgMCwgMCwgMCk7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OwotLSAgICBfX1BZWF9FUlIoMCwgMTAwNiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fUFlYX0VS UigwLCAxMDA4LCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwMDUKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwMDcKLSAgKiAKLSAgKiAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUo JnNlbGYuX2N0eCwgc2VsZi5fbXB2Ll9jdHgsIHBhcmFtcy5wYXJhbXMpCi0gICogICAgICAgICBp ZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTc0NDcsNyArMTc0 NDcsNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XwotICAqLwotICAgfQotIAotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDcKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDA5Ci0gICogICAgICAgICBpZiBlcnIgPCAwOgotICAqICAgICAgICAg ICAgIHJhaXNlIE1QVkVycm9yKGVycikKLSAgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gVHJ1ZSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTc0NTYsNyArMTc0NTYsNyBAQCBzdGF0 aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19p bml0X18oc3RydWN0IF9fcHl4XwotICAqLwotICAgX19weXhfdl9zZWxmLT5pbml0ZWQgPSAxOwot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk1MAotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk1MgotICAqICAgICAgICAgYmludCBpbml0ZWQKLSAg KiAKLSAgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1wdiwgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotQEAgLTE3NDgxLDcgKzE3NDgxLDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVjdCBfX3B5eF8K LSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTAxMAotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDEyCi0gICog Ci0gICogICAgIEBfZXJyb3JzCi0gICogICAgIGRlZiBzZXRfaWNjX3Byb2ZpbGUoc2VsZiwgaWNj X2Jsb2IpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTc1MjAsNyArMTc1MjAs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfMnNldF9pY2NfcHJvZmlsZQotICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwot ICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldF9pY2NfcHJvZmlsZSIsIDApOwotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMTYKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDE4Ci0gICogICAgICAgICAgICAgaW50IGVycgotICAq IAotICAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaWNjX2Jsb2IsIGJ5dGVzKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE3NTMxLDE0ICsxNzUzMSwxNCBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRf MnNldF9pY2NfcHJvZmlsZQotICAgX19weXhfdF8yID0gKCghKF9fcHl4X3RfMSAhPSAwKSkgIT0g MCk7Ci0gICBpZiAodW5saWtlbHkoX19weXhfdF8yKSkgewotIAotLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTAxNwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTAxOQotICAqIAotICAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaWNjX2Js b2IsIGJ5dGVzKToKLSAgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJpY2NfYmxvYiBz aG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSAgKiAgICAgICAgIHZhbC5kYXRhID0gPHZvaWQgKj48Y2hhciAqPmljY19ibG9iCi0gICogICAg ICAgICB2YWwuc2l6ZSA9IGxlbihpY2NfYmxvYikKLSAgKi8KLS0gICAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19QeU1QVkVycm9yKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAxNywgX19weXhfTDFfZXJyb3IpCi0rICAgIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3NfUHlNUFZFcnJvcik7 IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwMTksIF9fcHl4X0wxX2Vy cm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSAgICAgX19weXhfdF81ID0gTlVM TDsKLSAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9D aGVjayhfX3B5eF90XzQpKSkgewotQEAgLTE3NTUyLDE0ICsxNzU1MiwxNCBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMnNl dF9pY2NfcHJvZmlsZQotICAgICB9Ci0gICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8gX19Q eXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNCwgX19weXhfdF81LCBfX3B5eF9rcF9zX2lj Y19ibG9iX3Nob3VsZF9iZV9hX2J5dGVzX2luc3RhKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF80LCBfX3B5eF9rcF9zX2ljY19ibG9iX3Nob3VsZF9iZV9hX2J5dGVzX2luc3Rh KTsKLSAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotLSAgICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMDE3LCBfX3B5eF9MMV9lcnJv cikKLSsgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTAxOSwgX19w eXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSAgICAgX19QeXhfUmFpc2UoX19weXhf dF8zLCAwLCAwLCAwKTsKLSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7Ci0tICAgIF9fUFlYX0VSUigwLCAxMDE3LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QWVhf RVJSKDAsIDEwMTksIF9fcHl4X0wxX2Vycm9yKQotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTAxNgotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTAxOAotICAqICAgICAgICAgICAgIGludCBlcnIKLSAgKiAKLSAgKiAgICAgICAgIGlmIG5v dCBpc2luc3RhbmNlKGljY19ibG9iLCBieXRlcyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLUBAIC0xNzU2OCwyNyArMTc1NjgsMjcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2ZpbGUKLSAg Ki8KLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDE4Ci0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyMAotICAqICAgICAgICAgaWYg bm90IGlzaW5zdGFuY2UoaWNjX2Jsb2IsIGJ5dGVzKToKLSAgKiAgICAgICAgICAgICByYWlzZSBQ eU1QVkVycm9yKCJpY2NfYmxvYiBzaG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIpCi0gICogICAg ICAgICB2YWwuZGF0YSA9IDx2b2lkICo+PGNoYXIgKj5pY2NfYmxvYiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICB2YWwuc2l6ZSA9IGxlbihpY2NfYmxvYikKLSAgKiAK LSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0FzV3JpdGFibGVTdHJpbmcoX19w eXhfdl9pY2NfYmxvYik7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNikgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCAxMDE4LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9 IF9fUHl4X1B5T2JqZWN0X0FzV3JpdGFibGVTdHJpbmcoX19weXhfdl9pY2NfYmxvYik7IGlmICh1 bmxpa2VseSgoIV9fcHl4X3RfNikgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAx MDIwLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fcHl4X3ZfdmFsLmRhdGEgPSAoKHZvaWQgKikoKGNo YXIgKilfX3B5eF90XzYpKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDE5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyMQotICAqICAg ICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoImljY19ibG9iIHNob3VsZCBiZSBhIGJ5dGVzIGlu c3RhbmNlIikKLSAgKiAgICAgICAgIHZhbC5kYXRhID0gPHZvaWQgKj48Y2hhciAqPmljY19ibG9i Ci0gICogICAgICAgICB2YWwuc2l6ZSA9IGxlbihpY2NfYmxvYikgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotICAqIAotICAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFS QU1fSUNDX1BST0ZJTEUKLSAgKi8KLS0gIF9fcHl4X3RfNyA9IFB5T2JqZWN0X0xlbmd0aChfX3B5 eF92X2ljY19ibG9iKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNyA9PSAoKFB5X3NzaXplX3QpLTEp KSkgX19QWVhfRVJSKDAsIDEwMTksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF83ID0gUHlP YmplY3RfTGVuZ3RoKF9fcHl4X3ZfaWNjX2Jsb2IpOyBpZiAodW5saWtlbHkoX19weXhfdF83ID09 ICgoUHlfc3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMCwgMTAyMSwgX19weXhfTDFfZXJyb3IpCi0g ICBfX3B5eF92X3ZhbC5zaXplID0gX19weXhfdF83OwotIAotLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwMjEKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDIzCi0gICogICAgICAgICB2YWwuc2l6ZSA9IGxlbihpY2NfYmxvYikKLSAgKiAKLSAgKiAg ICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lDQ19QUk9GSUxFICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNzU5Nyw3ICsxNzU5Nyw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yc2V0 X2ljY19wcm9maWxlCi0gICovCi0gICBfX3B5eF92X3BhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BB UkFNX0lDQ19QUk9GSUxFOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwMjIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI0Ci0gICogCi0g ICogICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JQ0NfUFJPRklMRQotICAq ICAgICAgICAgcGFyYW0uZGF0YSA9ICZ2YWwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot QEAgLTE3NjA2LDcgKzE3NjA2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2ZpbGUKLSAgKi8KLSAg IF9fcHl4X3ZfcGFyYW0uZGF0YSA9ICgmX19weXhfdl92YWwpOwotIAotLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDI2Ci0gICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAotICAqIAotICAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE3NjIx LDcgKzE3NjIxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2ZpbGUKLSAgICAgICAjZW5kaWYKLSAg ICAgICAvKnRyeToqLyB7Ci0gCi0tICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTAyNQotKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEw MjcKLSAgKiAKLSAgKiAgICAgICAgIHdpdGggbm9naWw6Ci0gICogICAgICAgICAgICAgZXJyID0g bXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4LCBwYXJhbSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE3NjMxLDcgKzE3NjMxLDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJz ZXRfaWNjX3Byb2ZpbGUKLSAgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0 X3NldF9wYXJhbWV0ZXIoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X3BhcmFtKTsKLSAgICAg ICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjQKLSsg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyNgotICAqICAgICAgICAg cGFyYW0uZGF0YSA9ICZ2YWwKLSAgKiAKLSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNzY1MCw3ICsxNzY1MCw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yc2V0 X2ljY19wcm9maWxlCi0gICAgICAgfQotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwMjYKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDI4Ci0gICogICAgICAgICB3aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAgIGVyciA9IG1wdl9y ZW5kZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKHNlbGYuX2N0eCwgcGFyYW0pCi0gICogICAgICAg ICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNzY1OCwxMyAr MTc2NTgsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2ZpbGUKLSAgKiAgICAgQF9lcnJvcnMKLSAg Ki8KLSAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICBfX3B5eF90XzMgPSBfX1B5eF9QeUlu dF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDAsIDEwMjYsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8zID0gX19QeXhfUHlJbnRf RnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigwLCAxMDI4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwot ICAgX19weXhfciA9IF9fcHl4X3RfMzsKLSAgIF9fcHl4X3RfMyA9IDA7Ci0gICBnb3RvIF9fcHl4 X0wwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMTAKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDEyCi0gICogCi0gICogICAgIEBfZXJy b3JzCi0gICogICAgIGRlZiBzZXRfaWNjX3Byb2ZpbGUoc2VsZiwgaWNjX2Jsb2IpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTc2ODUsNyArMTc2ODUsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMnNl dF9pY2NfcHJvZmlsZQotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDI5Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwMzEKLSAgKiAKLSAgKiAgICAgQF9lcnJvcnMKLSAgKiAgICAgZGVmIHNldF9hbWJpZW50 X2xpZ2h0KHNlbGYsIGx1eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNzcx OSwxNyArMTc3MTksMTcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzRzZXRfYW1iaWVudF9saWcKLSAgIGludCBfX3B5eF9j bGluZW5vID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfYW1iaWVudF9s aWdodCIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMzUK LSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM3Ci0gICogICAgICAgICAg ICAgaW50IGVycgotICAqIAotICAqICAgICAgICAgdmFsID0gbHV4ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0FN QklFTlRfTElHSFQKLSAgKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsCi0gICovCi0tICBfX3B5 eF90XzEgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdl9sdXgpOyBpZiAodW5saWtlbHkoKF9f cHl4X3RfMSA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEw MzUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfQXNfaW50KF9f cHl4X3ZfbHV4KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzEgPT0gKGludCktMSkgJiYgUHlFcnJf T2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDM3LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fcHl4 X3ZfdmFsID0gX19weXhfdF8xOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwMzYKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM4Ci0gICog Ci0gICogICAgICAgICB2YWwgPSBsdXgKLSAgKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVO REVSX1BBUkFNX0FNQklFTlRfTElHSFQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAg LTE3NzM4LDcgKzE3NzM4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzRzZXRfYW1iaWVudF9saWcKLSAgKi8KLSAgIF9f cHl4X3ZfcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fQU1CSUVOVF9MSUdIVDsKLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM3Ci0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTAzOQotICAqICAgICAgICAgdmFsID0gbHV4Ci0gICogICAg ICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9BTUJJRU5UX0xJR0hUCi0gICogICAg ICAgICBwYXJhbS5kYXRhID0gJnZhbCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAt MTc3NDcsNyArMTc3NDcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNHNldF9hbWJpZW50X2xpZwotICAqLwotICAgX19w eXhfdl9wYXJhbS5kYXRhID0gKCZfX3B5eF92X3ZhbCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTAzOQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwNDEKLSAgKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsCi0gICogCi0gICogICAgICAg ICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTc3NjIsNyAr MTc3NjIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfNHNldF9hbWJpZW50X2xpZwotICAgICAgICNlbmRpZgotICAgICAg IC8qdHJ5OiovIHsKLSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDQwCi0rICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0Mgot ICAqIAotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAgICBlcnIgPSBtcHZf cmVuZGVyX2NvbnRleHRfc2V0X3BhcmFtZXRlcihzZWxmLl9jdHgsIHBhcmFtKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTc3NzIsNyArMTc3NzIsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNHNldF9h bWJpZW50X2xpZwotICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0 X3BhcmFtZXRlcihfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW0pOwotICAgICAgIH0K LSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAzOQotKyAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDQxCi0gICogICAgICAgICBwYXJh bS5kYXRhID0gJnZhbAotICAqIAotICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotQEAgLTE3NzkxLDcgKzE3NzkxLDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzRzZXRfYW1i aWVudF9saWcKLSAgICAgICB9Ci0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTA0MQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNDMK LSAgKiAgICAgICAgIHdpdGggbm9naWw6Ci0gICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRl cl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4LCBwYXJhbSkKLSAgKiAgICAgICAgIHJl dHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE3Nzk5LDEzICsxNzc5 OSwxMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfNHNldF9hbWJpZW50X2xpZwotICAqICAgICBkZWYgZ2V0X25leHRfZnJh bWVfaW5mbyhzZWxmKToKLSAgKi8KLSAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Ci0tICBfX3B5 eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwNDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhf dF8yID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMDQzLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzIpOwotICAgX19weXhfciA9IF9fcHl4X3RfMjsKLSAgIF9fcHl4X3RfMiA9 IDA7Ci0gICBnb3RvIF9fcHl4X0wwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwMjkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDMxCi0g ICogCi0gICogICAgIEBfZXJyb3JzCi0gICogICAgIGRlZiBzZXRfYW1iaWVudF9saWdodChzZWxm LCBsdXgpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTc4MjQsNyArMTc4MjQs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfNHNldF9hbWJpZW50X2xpZwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAot LS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDQzCi0rLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwNDUKLSAgKiAgICAgICAgIHJldHVybiBlcnIKLSAgKiAKLSAg KiAgICAgZGVmIGdldF9uZXh0X2ZyYW1lX2luZm8oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLUBAIC0xNzg2MSw3ICsxNzg2MSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF82Z2V0X25leHRfZnJhbWVf Ci0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgiZ2V0X25leHRfZnJhbWVfaW5mbyIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwNDgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDUwCi0gICogICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJhbSBwYXJhbQotICAqIAotICAqICAg ICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9JTkZPICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xNzg3MCw3ICsxNzg3MCw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF82 Z2V0X25leHRfZnJhbWVfCi0gICovCi0gICBfX3B5eF92X3BhcmFtLnR5cGUgPSBNUFZfUkVOREVS X1BBUkFNX05FWFRfRlJBTUVfSU5GTzsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDQ5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MQot ICAqIAotICAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFN RV9JTkZPCi0gICogICAgICAgICBwYXJhbS5kYXRhID0gJmluZm8gICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotQEAgLTE3ODc5LDcgKzE3ODc5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzZnZXRfbmV4dF9mcmFt ZV8KLSAgKi8KLSAgIF9fcHl4X3ZfcGFyYW0uZGF0YSA9ICgmX19weXhfdl9pbmZvKTsKLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDUwCi0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MgotICAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9S RU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9JTkZPCi0gICogICAgICAgICBwYXJhbS5kYXRhID0gJmlu Zm8KLSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LUBAIC0xNzg5NCw3ICsxNzg5NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF82Z2V0X25leHRfZnJhbWVfCi0gICAgICAg I2VuZGlmCi0gICAgICAgLyp0cnk6Ki8gewotIAotLSAgICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwNTEKLSsgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDUzCi0gICogICAgICAgICBwYXJhbS5kYXRhID0gJmluZm8KLSAgKiAgICAgICAg IHdpdGggbm9naWw6Ci0gICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2dl dF9pbmZvKHNlbGYuX2N0eCwgcGFyYW0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC0xNzkwNCw3ICsxNzkwNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF82Z2V0X25leHRfZnJhbWVfCi0gICAgICAgICBf X3B5eF92X2VyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhfX3B5eF92X3NlbGYtPl9j dHgsIF9fcHl4X3ZfcGFyYW0pOwotICAgICAgIH0KLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA1MAotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDUyCi0gICogICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9O RVhUX0ZSQU1FX0lORk8KLSAgKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmaW5mbwotICAqICAgICAg ICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE3OTIzLDcg KzE3OTIzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNSZW5kZXJDb250ZXh0XzZnZXRfbmV4dF9mcmFtZV8KLSAgICAgICB9Ci0gICB9Ci0gCi0t ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MgotKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTQKLSAgKiAgICAgICAgIHdpdGggbm9naWw6Ci0gICog ICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2dldF9pbmZvKHNlbGYuX2N0eCwg cGFyYW0pCi0gICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci1AQCAtMTc5MzMsMTYgKzE3OTMzLDE2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF82Z2V0X25leHRfZnJhbWVfCi0g ICBfX3B5eF90XzEgPSAoKF9fcHl4X3ZfZXJyIDwgMCkgIT0gMCk7Ci0gICBpZiAodW5saWtlbHko X19weXhfdF8xKSkgewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA1MwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1NQotICAqICAg ICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhzZWxmLl9jdHgsIHBh cmFtKQotICAqICAgICAgICAgaWYgZXJyIDwgMDoKLSAgKiAgICAgICAgICAgICByYWlzZSBNUFZF cnJvcihlcnIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAKLSAgKiAgICAgICAg IHJldHVybiBSZW5kZXJGcmFtZUluZm8oKS5fZnJvbV9zdHJ1Y3QoJmluZm8pCi0gICovCi0tICAg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8zLCBfX3B5eF9uX3NfTVBWRXJyb3Ip OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMDUzLCBfX3B5eF9MMV9l cnJvcikKLSsgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzMsIF9fcHl4X25f c19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDEwNTUs IF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gICAgX19w eXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDUzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19w eXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDU1LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0gICAgIF9fcHl4X3RfNSA9IE5VTEw7Ci0gICAgIGlmIChD WVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8z KSkpIHsKLUBAIC0xNzk1NywxNCArMTc5NTcsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzZnZXRfbmV4dF9mcmFtZV8K LSAgICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3Mo X19weXhfdF8zLCBfX3B5eF90XzUsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25l QXJnKF9fcHl4X3RfMywgX19weXhfdF80KTsKLSAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUp OyBfX3B5eF90XzUgPSAwOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80 ID0gMDsKLS0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTA1Mywg X19weXhfTDFfZXJyb3IpCi0rICAgIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDEwNTUsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK LSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0gICAgIF9fUHl4 X1JhaXNlKF9fcHl4X3RfMiwgMCwgMCwgMCk7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOwotLSAgICBfX1BZWF9FUlIoMCwgMTA1MywgX19weXhfTDFfZXJyb3Ip Ci0rICAgIF9fUFlYX0VSUigwLCAxMDU1LCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTIKLSsgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwNTQKLSAgKiAgICAgICAgIHdpdGggbm9naWw6Ci0gICogICAgICAg ICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2dldF9pbmZvKHNlbGYuX2N0eCwgcGFyYW0p Ci0gICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1A QCAtMTc5NzMsNyArMTc5NzMsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNmdldF9uZXh0X2ZyYW1lXwotICAqLwotICAg fQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTUKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU3Ci0gICogICAgICAgICAgICAgcmFpc2Ug TVBWRXJyb3IoZXJyKQotICAqIAotICAqICAgICAgICAgcmV0dXJuIFJlbmRlckZyYW1lSW5mbygp Ll9mcm9tX3N0cnVjdCgmaW5mbykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE3 OTgxLDE2ICsxNzk4MSwxNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNmdldF9uZXh0X2ZyYW1lXwotICAqICAgICBkZWYg c2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6Ci0gICovCi0gICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOwotLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmpl Y3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvKSk7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwNTUsIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmplY3Qg KilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvKSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwNTcsIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX3B5eF90XzMgPSAoKHN0cnVjdCBf X3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKiko KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAq KV9fcHl4X3RfMiktPl9fcHl4X3Z0YWIpLT5fZnJvbV9zdHJ1Y3QoKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKilfX3B5eF90XzIpLCAoJl9f cHl4X3ZfaW5mbykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMDU1 LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMyA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1 Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqKSgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICopX19weXhfdF8yKS0+ X19weXhfdnRhYiktPl9mcm9tX3N0cnVjdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqKV9fcHl4X3RfMiksICgmX19weXhfdl9pbmZvKSk7 IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDEwNTcsIF9fcHl4X0wxX2Vy cm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhf dF8yKTsgX19weXhfdF8yID0gMDsKLSAgIF9fcHl4X3IgPSBfX3B5eF90XzM7Ci0gICBfX3B5eF90 XzMgPSAwOwotICAgZ290byBfX3B5eF9MMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDQzCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0 NQotICAqICAgICAgICAgcmV0dXJuIGVycgotICAqIAotICAqICAgICBkZWYgZ2V0X25leHRfZnJh bWVfaW5mbyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE4MDEyLDcg KzE4MDEyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNSZW5kZXJDb250ZXh0XzZnZXRfbmV4dF9mcmFtZV8KLSAgIHJldHVybiBfX3B5eF9yOwot IH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1NwotKy8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU5Ci0gICogICAgICAgICByZXR1cm4gUmVuZGVy RnJhbWVJbmZvKCkuX2Zyb21fc3RydWN0KCZpbmZvKQotICAqIAotICAqICAgICBkZWYgc2V0X3Vw ZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC0xODAzOCw3ICsxODAzOCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF84c2V0X3VwZGF0ZV9jYWxsCi0gICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldF91 cGRhdGVfY2FsbGJhY2siLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDU4Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2MAotICAq IAotICAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6Ci0gICogICAgICAg ICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTgwNTMsNyAr MTgwNTMsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfOHNldF91cGRhdGVfY2FsbAotICAgICAgICNlbmRpZgotICAgICAg IC8qdHJ5OiovIHsKLSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDU5Ci0rICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2MQot ICAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6Ci0gICogICAgICAgICB3 aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9zZXRfdXBkYXRl X2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAqPmNiKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTgwNjMsNyArMTgwNjMsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfOHNldF91 cGRhdGVfY2FsbAotICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3NldF91cGRhdGVfY2FsbGJh Y2soX19weXhfdl9zZWxmLT5fY3R4LCAoJl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19j X3VwZGF0ZWNiKSwgKCh2b2lkICopX19weXhfdl9jYikpOwotICAgICAgIH0KLSAKLS0gICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1OAotKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDYwCi0gICogCi0gICogICAgIGRlZiBzZXRfdXBkYXRl X2NhbGxiYWNrKHNlbGYsIGNiKToKLSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xODA4Miw3ICsxODA4Miw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF84c2V0X3Vw ZGF0ZV9jYWxsCi0gICAgICAgfQotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwNjAKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDYy Ci0gICogICAgICAgICB3aXRoIG5vZ2lsOgotICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29u dGV4dF9zZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAq PmNiKQotICAqICAgICAgICAgc2VsZi51cGRhdGVfY2IgPSBjYiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci1AQCAtMTgwOTUsNyArMTgwOTUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfOHNldF91cGRhdGVfY2Fs bAotICAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+dXBkYXRlX2NiKTsKLSAgIF9fcHl4X3Zf c2VsZi0+dXBkYXRlX2NiID0gX19weXhfdl9jYjsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDU3Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA1OQotICAqICAgICAgICAgcmV0dXJuIFJlbmRlckZyYW1lSW5mbygpLl9mcm9tX3N0cnVjdCgm aW5mbykKLSAgKiAKLSAgKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTgxMTAsNyArMTgxMTAsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfOHNldF91cGRhdGVfY2FsbAotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDYyCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwNjQKLSAgKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKLSAgKiAKLSAg KiAgICAgZGVmIHVwZGF0ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAg LTE4MTQxLDcgKzE4MTQxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEwdXBkYXRlKHN0cnVjdAotICAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVwZGF0ZSIsIDAp OwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjQKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY2Ci0gICogICAgIGRlZiB1cGRhdGUoc2Vs Zik6Ci0gICogICAgICAgICBjZGVmIHVpbnQ2NF90IHJldAotICAqICAgICAgICAgd2l0aCBub2dp bDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE4MTU2LDcgKzE4MTU2LDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJD b250ZXh0XzEwdXBkYXRlKHN0cnVjdAotICAgICAgICNlbmRpZgotICAgICAgIC8qdHJ5OiovIHsK LSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY1Ci0rICAg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2NwotICAqICAgICAgICAg Y2RlZiB1aW50NjRfdCByZXQKLSAgKiAgICAgICAgIHdpdGggbm9naWw6Ci0gICogICAgICAgICAg ICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3VwZGF0ZShzZWxmLl9jdHgpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xODE2Niw3ICsxODE2Niw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMHVwZGF0 ZShzdHJ1Y3QKLSAgICAgICAgIF9fcHl4X3ZfcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3VwZGF0 ZShfX3B5eF92X3NlbGYtPl9jdHgpOwotICAgICAgIH0KLSAKLS0gICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2NAotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDY2Ci0gICogICAgIGRlZiB1cGRhdGUoc2VsZik6Ci0gICogICAgICAgICBj ZGVmIHVpbnQ2NF90IHJldAotICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotQEAgLTE4MTg1LDcgKzE4MTg1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEwdXBkYXRlKHN0 cnVjdAotICAgICAgIH0KLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDY2Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2OAotICAq ICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAgICByZXQgPSBtcHZfcmVuZGVyX2Nv bnRleHRfdXBkYXRlKHNlbGYuX2N0eCkKLSAgKiAgICAgICAgIHJldHVybiByZXQgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE4MTkzLDEzICsxODE5MywxMyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTB1 cGRhdGUoc3RydWN0Ci0gICogICAgIEBfZXJyb3JzCi0gICovCi0gICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOwotLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5eF92 X3JldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwNjYsIF9fcHl4 X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5 eF92X3JldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwNjgsIF9f cHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX3B5eF9yID0g X19weXhfdF8xOwotICAgX19weXhfdF8xID0gMDsKLSAgIGdvdG8gX19weXhfTDA7Ci0gCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2MgotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwNjQKLSAgKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IK LSAgKiAKLSAgKiAgICAgZGVmIHVwZGF0ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotQEAgLTE4MjE4LDcgKzE4MjE4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEwdXBkYXRlKHN0cnVjdAotICAg cmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDY5Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNzEKLSAgKiAKLSAg KiAgICAgQF9lcnJvcnMKLSAgKiAgICAgZGVmIHJlbmRlcihzZWxmLCAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci1AQCAtMTgyNDQsNyArMTgyNDQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIoUHlP YmplYwotICAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4 X25fc19vcGVuZ2xfZmJvLCZfX3B5eF9uX3NfZmxpcF95LCZfX3B5eF9uX3NfZGVwdGgsJl9fcHl4 X25fc19ibG9ja19mb3JfdGFyZ2V0X3RpbWUsJl9fcHl4X25fc19za2lwX3JlbmRlcmluZywwfTsK LSAgICAgUHlPYmplY3QqIHZhbHVlc1s1XSA9IHswLDAsMCwwLDB9OwotIAotLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTA3MgotICAqICAgICBAX2Vycm9ycwotICAqICAgICBkZWYgcmVuZGVy KHNlbGYsCi0gICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTgyNTMsNyArMTgyNTMsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIo UHlPYmplYwotICAqLwotICAgICB2YWx1ZXNbMF0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7Ci0g Ci0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDcxCi0rICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDczCi0gICogICAgIGRlZiByZW5kZXIoc2Vs ZiwKLSAgKiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUsCi0gICogICAgICAgICAgICAg ICAgZmxpcF95PUZhbHNlLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTgyNjIs NyArMTgyNjIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIoUHlPYmplYwotICAqLwotICAgICB2YWx1ZXNb MV0gPSAoKFB5T2JqZWN0ICopUHlfRmFsc2UpOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTA3MgotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTA3NAotICAqICAgICAgICAgICAgICAgIG9wZW5nbF9mYm89Tm9uZSwKLSAgKiAgICAgICAg ICAgICAgICBmbGlwX3k9RmFsc2UsCi0gICogICAgICAgICAgICAgICAgZGVwdGg9Tm9uZSwgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE4MjcxLDcgKzE4MjcxLDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0 XzEzcmVuZGVyKFB5T2JqZWMKLSAgKi8KLSAgICAgdmFsdWVzWzJdID0gKChQeU9iamVjdCAqKVB5 X05vbmUpOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3Mwot KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3NQotICAqICAgICAgICAg ICAgICAgIGZsaXBfeT1GYWxzZSwKLSAgKiAgICAgICAgICAgICAgICBkZXB0aD1Ob25lLAotICAq ICAgICAgICAgICAgICAgIGJsb2NrX2Zvcl90YXJnZXRfdGltZT1UcnVlLCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTgyODAsNyArMTgyODAsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIo UHlPYmplYwotICAqLwotICAgICB2YWx1ZXNbM10gPSAoKFB5T2JqZWN0ICopUHlfVHJ1ZSk7Ci0g Ci0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDc0Ci0rICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDc2Ci0gICogICAgICAgICAgICAgICAgZGVw dGg9Tm9uZSwKLSAgKiAgICAgICAgICAgICAgICBibG9ja19mb3JfdGFyZ2V0X3RpbWU9VHJ1ZSwK LSAgKiAgICAgICAgICAgICAgICBza2lwX3JlbmRlcmluZz1GYWxzZSk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLUBAIC0xODMzOCw3ICsxODMzOCw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xM3JlbmRlcihQ eU9iamVjCi0gICAgICAgICB9Ci0gICAgICAgfQotICAgICAgIGlmICh1bmxpa2VseShrd19hcmdz ID4gMCkpIHsKLS0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29y ZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgInJl bmRlciIpIDwgMCkpIF9fUFlYX0VSUigwLCAxMDY5LCBfX3B5eF9MM19lcnJvcikKLSsgICAgICAg IGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19w eXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgInJlbmRlciIpIDwgMCkpIF9fUFlY X0VSUigwLCAxMDcxLCBfX3B5eF9MM19lcnJvcikKLSAgICAgICB9Ci0gICAgIH0gZWxzZSB7Ci0g ICAgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKSB7Ci1AQCAtMTgzNjQs NyArMTgzNjQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIoUHlPYmplYwotICAgfQotICAgZ290byBfX3B5 eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKLSAgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9y OjsKLS0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJyZW5kZXIiLCAwLCAwLCA1LCBQeVR1 cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDEwNjksIF9fcHl4X0wzX2Vy cm9yKQotKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInJlbmRlciIsIDAsIDAsIDUsIFB5 VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMTA3MSwgX19weXhfTDNf ZXJyb3IpCi0gICBfX3B5eF9MM19lcnJvcjo7Ci0gICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1 dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0LnJlbmRlciIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7Ci1AQCAtMTgzNzIsNyArMTgzNzIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIoUHlPYmplYwotICAg X19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OwotICAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTJyZW5kZXIoKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopX19weXhfdl9z ZWxmKSwgX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF92X2ZsaXBfeSwgX19weXhfdl9kZXB0aCwg X19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUsIF9fcHl4X3Zfc2tpcF9yZW5kZXJpbmcpOwot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjkKLSsgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDcxCi0gICogCi0gICogICAgIEBfZXJyb3JzCi0g ICogICAgIGRlZiByZW5kZXIoc2VsZiwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAg LTE4NDAyLDI5ICsxODQwMiwyOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTJyZW5kZXIoc3RydWN0Ci0gICBpbnQgX19w eXhfY2xpbmVubyA9IDA7Ci0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgicmVuZGVyIiwg MCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3OQotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODEKLSAgKiAgICAgICAgICAgICBtcHZf b3BlbmdsX2ZibyBmYm8KLSAgKiAKLSAgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJhbXMo KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0gICogICAgICAgICBpZiBvcGVu Z2xfZmJvOgotICAqLwotLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFt cykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDc5LCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2Jq ZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMpKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA4MSwgX19weXhfTDFfZXJy b3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fcHl4X3ZfcGFyYW1zID0gKChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19w eXhfdF8xKTsKLSAgIF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTA4MQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEw ODMKLSAgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJhbXMoKQotICAqIAotICAqICAgICAg ICAgaWYgb3BlbmdsX2ZibzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAg ICAgICAgIG1lbXNldCgmZmJvLCAwLCBzaXplb2YoZmJvKSkKLSAgKiAgICAgICAgICAgICBmYm8u ZmJvID0gb3BlbmdsX2Ziby5nZXQoImZibyIsIDApIG9yIDAKLSAgKi8KLS0gIF9fcHl4X3RfMiA9 IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X29wZW5nbF9mYm8pOyBpZiAodW5saWtlbHko X19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCAxMDgxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f cHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X29wZW5nbF9mYm8pOyBpZiAo dW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJv cikKLSAgIGlmIChfX3B5eF90XzIpIHsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwODIKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEw ODQKLSAgKiAKLSAgKiAgICAgICAgIGlmIG9wZW5nbF9mYm86Ci0gICogICAgICAgICAgICAgbWVt c2V0KCZmYm8sIDAsIHNpemVvZihmYm8pKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1A QCAtMTg0MzMsMjMgKzE4NDMzLDIzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKLSAgKi8KLSAg ICAgKHZvaWQpKG1lbXNldCgoJl9fcHl4X3ZfZmJvKSwgMCwgKHNpemVvZihfX3B5eF92X2Zibykp KSk7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDgzCi0rICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg1Ci0gICogICAgICAgICBpZiBv cGVuZ2xfZmJvOgotICAqICAgICAgICAgICAgIG1lbXNldCgmZmJvLCAwLCBzaXplb2YoZmJvKSkK LSAgKiAgICAgICAgICAgICBmYm8uZmJvID0gb3BlbmdsX2Ziby5nZXQoImZibyIsIDApIG9yIDAg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgICAgIGZiby53ID0gb3Bl bmdsX2Zib1sidyJdCi0gICogICAgICAgICAgICAgZmJvLmggPSBvcGVuZ2xfZmJvWyJoIl0KLSAg Ki8KLS0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X29w ZW5nbF9mYm8sIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8xID0gX19QeXhfUHlP YmplY3RfR2V0QXR0clN0cihfX3B5eF92X29wZW5nbF9mYm8sIF9fcHl4X25fc19nZXQpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDg1LCBfX3B5eF9MMV9lcnJvcikK LSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5 T2JqZWN0X0NhbGwoX19weXhfdF8xLCBfX3B5eF90dXBsZV9fMTIsIE5VTEwpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAg X19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzEsIF9fcHl4X3R1cGxlX18x MiwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwODUsIF9f cHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSAgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0tICAgIF9fcHl4X3RfMiA9IF9fUHl4 X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkp IF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8yID0gX19Q eXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNCk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAw KSkgX19QWVhfRVJSKDAsIDEwODUsIF9fcHl4X0wxX2Vycm9yKQotICAgICBpZiAoIV9fcHl4X3Rf MikgewotICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotICAg ICB9IGVsc2UgewotLSAgICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90 XzQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNSA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJl ZCgpKSkgX19QWVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQotKyAgICAgIF9fcHl4X3Rf NSA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3Rf NSA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwODUsIF9f cHl4X0wxX2Vycm9yKQotICAgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNTsKLSAgICAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSAgICAgICBnb3RvIF9fcHl4X0w0 X2Jvb2xfYmlub3BfZG9uZTsKLUBAIC0xODQ1OCw0OSArMTg0NTgsNDkgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEycmVu ZGVyKHN0cnVjdAotICAgICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OwotICAgICBfX3B5eF92 X2Ziby5mYm8gPSBfX3B5eF90XzM7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDg0Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg2 Ci0gICogICAgICAgICAgICAgbWVtc2V0KCZmYm8sIDAsIHNpemVvZihmYm8pKQotICAqICAgICAg ICAgICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJvLmdldCgiZmJvIiwgMCkgb3IgMAotICAqICAgICAg ICAgICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSAgKiAgICAgICAgICAgICBmYm8uaCA9IG9wZW5nbF9mYm9bImgiXQotICAqICAgICAgICAg ICAgIGZiby5pbnRlcm5hbF9mb3JtYXQgPSBvcGVuZ2xfZmJvLmdldCgiaW50ZXJuYWxfZm9ybWF0 IiwgMCkgb3IgMAotICAqLwotLSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9EaWN0X0dl dEl0ZW0oX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF9uX3Nfdyk7IGlmICh1bmxpa2VseSghX19w eXhfdF80KSkgX19QWVhfRVJSKDAsIDEwODQsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90 XzQgPSBfX1B5eF9QeU9iamVjdF9EaWN0X0dldEl0ZW0oX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5 eF9uX3Nfdyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwODYsIF9f cHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLS0gICAgX19weXhf dF8zID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfNCk7IGlmICh1bmxpa2VseSgoX19weXhf dF8zID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMTA4NCwg X19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5 eF90XzQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1 cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwODYsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSAgICAgX19weXhfdl9mYm8udyA9IF9f cHl4X3RfMzsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODUK LSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODcKLSAgKiAgICAgICAg ICAgICBmYm8uZmJvID0gb3BlbmdsX2Ziby5nZXQoImZibyIsIDApIG9yIDAKLSAgKiAgICAgICAg ICAgICBmYm8udyA9IG9wZW5nbF9mYm9bInciXQotICAqICAgICAgICAgICAgIGZiby5oID0gb3Bl bmdsX2Zib1siaCJdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAg ICBmYm8uaW50ZXJuYWxfZm9ybWF0ID0gb3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIs IDApIG9yIDAKLSAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFS QU1fT1BFTkdMX0ZCTywgJmZibykKLSAgKi8KLS0gICAgX19weXhfdF80ID0gX19QeXhfUHlPYmpl Y3RfRGljdF9HZXRJdGVtKF9fcHl4X3Zfb3BlbmdsX2ZibywgX19weXhfbl9zX2gpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDg1LCBfX3B5eF9MMV9lcnJvcikKLSsg ICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfRGljdF9HZXRJdGVtKF9fcHl4X3Zfb3Blbmds X2ZibywgX19weXhfbl9zX2gpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigw LCAxMDg3LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0t ICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzQpOyBpZiAodW5saWtl bHkoKF9fcHl4X3RfMyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJS KDAsIDEwODUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9B c19pbnQoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGludCktMSkgJiYg UHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDg3LCBfX3B5eF9MMV9lcnJvcikKLSAg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0gICAgIF9fcHl4X3Zf ZmJvLmggPSBfX3B5eF90XzM7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDg2Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg4Ci0g ICogICAgICAgICAgICAgZmJvLncgPSBvcGVuZ2xfZmJvWyJ3Il0KLSAgKiAgICAgICAgICAgICBm Ym8uaCA9IG9wZW5nbF9mYm9bImgiXQotICAqICAgICAgICAgICAgIGZiby5pbnRlcm5hbF9mb3Jt YXQgPSBvcGVuZ2xfZmJvLmdldCgiaW50ZXJuYWxfZm9ybWF0IiwgMCkgb3IgMCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZf UkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCi0gICogICAgICAgICBpZiBmbGlwX3k6Ci0g ICovCi0tICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9v cGVuZ2xfZmJvLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5 T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF9uX3NfZ2V0KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTA4OCwgX19weXhfTDFfZXJyb3Ip Ci0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAgICBfX3B5eF90XzEgPSBfX1B5eF9Q eU9iamVjdF9DYWxsKF9fcHl4X3RfNCwgX19weXhfdHVwbGVfXzEzLCBOVUxMKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3IpCi0rICAg IF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF80LCBfX3B5eF90dXBsZV9f MTMsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDg4LCBf X3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0gICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgICBfX3B5eF90XzIgPSBfX1B5 eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDAp KSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMiA9IF9f UHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF8yIDwg MCkpIF9fUFlYX0VSUigwLCAxMDg4LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgaWYgKCFfX3B5eF90 XzIpIHsKLSAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAg ICAgfSBlbHNlIHsKLS0gICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhf dF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzUgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCAxMDg2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBfX3B5eF90 XzUgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90 XzUgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDg4LCBf X3B5eF9MMV9lcnJvcikKLSAgICAgICBfX3B5eF90XzMgPSBfX3B5eF90XzU7Ci0gICAgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gICAgICAgZ290byBfX3B5eF9M Nl9ib29sX2Jpbm9wX2RvbmU7Ci1AQCAtMTg1MDksMTggKzE4NTA5LDE4IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJl bmRlcihzdHJ1Y3QKLSAgICAgX19weXhfTDZfYm9vbF9iaW5vcF9kb25lOjsKLSAgICAgX19weXhf dl9mYm8uaW50ZXJuYWxfZm9ybWF0ID0gX19weXhfdF8zOwotIAotLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4NwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTA4OQotICAqICAgICAgICAgICAgIGZiby5oID0gb3BlbmdsX2Zib1siaCJdCi0g ICogICAgICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8uZ2V0KCJpbnRl cm5hbF9mb3JtYXQiLCAwKSBvciAwCi0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChN UFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSAgKiAgICAgICAgIGlmIGZsaXBfeToKLSAgKiAgICAgICAgICAgICBwYXJhbXMuYWRk X2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKLSAgKi8KLS0gICAgX19weXhfdF8xID0g KChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBh cmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFy YW1zLCBNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICgmX19weXhfdl9mYm8pLCBOVUxMKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA4NywgX19weXhfTDFfZXJy b3IpCi0rICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19weXhfdnRhYikt PmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfRkJPLCAo Jl9fcHl4X3ZfZmJvKSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDEwODksIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK LSAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDgxCi0rICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDgzCi0gICogICAgICAgICBwYXJhbXMgPSBfUmVuZGVyUGFy YW1zKCkKLSAgKiAKLSAgKiAgICAgICAgIGlmIG9wZW5nbF9mYm86ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLUBAIC0xODUyOSwyOCArMTg1MjksMjggQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEycmVuZGVyKHN0 cnVjdAotICAqLwotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwODgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkwCi0gICogICAg ICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8uZ2V0KCJpbnRlcm5hbF9m b3JtYXQiLCAwKSBvciAwCi0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVO REVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCi0gICogICAgICAgICBpZiBmbGlwX3k6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChN UFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKLSAgKiAgICAgICAgIGlmIGRlcHRoIGlzIG5vdCBO b25lOgotICAqLwotLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zf ZmxpcF95KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgMTA4OCwg X19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19w eXhfdl9mbGlwX3kpOyBpZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCAx MDkwLCBfX3B5eF9MMV9lcnJvcikKLSAgIGlmIChfX3B5eF90XzIpIHsKLSAKLS0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODkKLSsgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwOTEKLSAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1Q Vl9SRU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZibykKLSAgKiAgICAgICAgIGlmIGZsaXBfeToK LSAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwg MSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgaWYgZGVwdGggaXMg bm90IE5vbmU6Ci0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJB TV9ERVBUSCwgZGVwdGgpCi0gICovCi0tICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3Bh cmFtcy0+X19weXhfdnRhYiktPmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJfUEFS QU1fRkxJUF9ZLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA4 OSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJz dHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFt cy0+X19weXhfdnRhYiktPmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1f RkxJUF9ZLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA5MSwg X19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAKLS0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwODgKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwOTAKLSAgKiAgICAgICAgICAgICBmYm8uaW50ZXJuYWxfZm9ybWF0ID0gb3Bl bmdsX2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIsIDApIG9yIDAKLSAgKiAgICAgICAgICAgICBw YXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZibykKLSAgKiAg ICAgICAgIGlmIGZsaXBfeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE4NTU5 LDcgKzE4NTU5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNSZW5kZXJDb250ZXh0XzEycmVuZGVyKHN0cnVjdAotICAqLwotICAgfQotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTAKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDkyCi0gICogICAgICAgICBpZiBmbGlwX3k6Ci0gICogICAg ICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9GTElQX1ksIDEpCi0gICog ICAgICAgICBpZiBkZXB0aCBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotQEAgLTE4NTcwLDE5ICsxODU3MCwxOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTJyZW5kZXIoc3RydWN0Ci0gICBf X3B5eF90XzYgPSAoX19weXhfdF8yICE9IDApOwotICAgaWYgKF9fcHl4X3RfNikgewotIAotLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5MQotKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5MwotICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf aW50KE1QVl9SRU5ERVJfUEFSQU1fRkxJUF9ZLCAxKQotICAqICAgICAgICAgaWYgZGVwdGggaXMg bm90IE5vbmU6Ci0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJB TV9ERVBUSCwgZGVwdGgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAg IGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0X3RpbWU6Ci0gICogICAgICAgICAgICAgcGFyYW1zLmFk ZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCi0gICovCi0t ICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF92X2RlcHRoKTsgaWYgKHVu bGlrZWx5KChfX3B5eF90XzMgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlY X0VSUigwLCAxMDkxLCBfX3B5eF9MMV9lcnJvcikKLS0gICAgX19weXhfdF8xID0gKChzdHJ1Y3Qg X19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9f cHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywgTVBWX1JF TkRFUl9QQVJBTV9ERVBUSCwgX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMTA5MSwgX19weXhfTDFfZXJyb3IpCi0rICAgIF9fcHl4X3RfMyA9IF9fUHl4 X1B5SW50X0FzX2ludChfX3B5eF92X2RlcHRoKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0g KGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDkzLCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92 dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9ERVBUSCwgX19w eXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA5MywgX19w eXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwOTAKLSsgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwOTIKLSAgKiAgICAgICAgIGlmIGZsaXBfeToKLSAgKiAgICAgICAgICAgICBwYXJh bXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKLSAgKiAgICAgICAgIGlmIGRl cHRoIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTg1OTEs MjkgKzE4NTkxLDI5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKLSAgKi8KLSAgIH0KLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkyCi0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NAotICAqICAgICAgICAgaWYgZGVwdGggaXMgbm90IE5v bmU6Ci0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9ERVBU SCwgZGVwdGgpCi0gICogICAgICAgICBpZiBub3QgYmxvY2tfZm9yX3RhcmdldF90aW1lOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQo TVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCi0gICogICAgICAgICBp ZiBza2lwX3JlbmRlcmluZzoKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0lz VHJ1ZShfX3B5eF92X2Jsb2NrX2Zvcl90YXJnZXRfdGltZSk7IGlmICh1bmxpa2VseShfX3B5eF90 XzYgPCAwKSkgX19QWVhfRVJSKDAsIDEwOTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82 ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfYmxvY2tfZm9yX3RhcmdldF90aW1lKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgMTA5NCwgX19weXhfTDFf ZXJyb3IpCi0gICBfX3B5eF90XzIgPSAoKCFfX3B5eF90XzYpICE9IDApOwotICAgaWYgKF9fcHl4 X3RfMikgewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5Mwot KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NQotICAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIGRlcHRoKQotICAqICAg ICAgICAgaWYgbm90IGJsb2NrX2Zvcl90YXJnZXRfdGltZToKLSAgKiAgICAgICAgICAgICBwYXJh bXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0JMT0NLX0ZPUl9UQVJHRVRfVElNRSwgMCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgaWYgc2tpcF9yZW5kZXJpbmc6 Ci0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JF TkRFUklORywgMSkKLSAgKi8KLS0gICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0 cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1z LT5fX3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9C TE9DS19GT1JfVEFSR0VUX1RJTUUsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAxMDkzLCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF8xID0gKChzdHJ1Y3Qg X19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9f cHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywgTVBWX1JF TkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAxMDk1LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5MgotKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NAotICAqICAgICAgICAgaWYg ZGVwdGggaXMgbm90IE5vbmU6Ci0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JF TkRFUl9QQVJBTV9ERVBUSCwgZGVwdGgpCi0gICogICAgICAgICBpZiBub3QgYmxvY2tfZm9yX3Rh cmdldF90aW1lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTg2MjIsMjggKzE4 NjIyLDI4IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKLSAgKi8KLSAgIH0KLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDk0Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTA5NgotICAqICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90YXJnZXRf dGltZToKLSAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0JM T0NLX0ZPUl9UQVJHRVRfVElNRSwgMCkKLSAgKiAgICAgICAgIGlmIHNraXBfcmVuZGVyaW5nOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF9p bnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkKLSAgKiAKLSAgKi8KLS0gIF9f cHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X3NraXBfcmVuZGVyaW5nKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgMTA5NCwgX19weXhfTDFf ZXJyb3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9za2lw X3JlbmRlcmluZyk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDEw OTYsIF9fcHl4X0wxX2Vycm9yKQotICAgaWYgKF9fcHl4X3RfMikgewotIAotLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTA5NwotICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9S RU5ERVJfUEFSQU1fQkxPQ0tfRk9SX1RBUkdFVF9USU1FLCAwKQotICAqICAgICAgICAgaWYgc2tp cF9yZW5kZXJpbmc6Ci0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9Q QVJBTV9TS0lQX1JFTkRFUklORywgMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAq IAotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKi8KLS0gICAgX19weXhfdF8xID0gKChzdHJ1 Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAq KV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywgTVBW X1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDEwOTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzEgPSAo KHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4X3ZfcGFyYW1z LCBNUFZfUkVOREVSX1BBUkFNX1NLSVBfUkVOREVSSU5HLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA5NywgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKLSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTQKLSsg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTYKLSAgKiAgICAgICAgIGlm IG5vdCBibG9ja19mb3JfdGFyZ2V0X3RpbWU6Ci0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF9p bnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCi0gICogICAgICAg ICBpZiBza2lwX3JlbmRlcmluZzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE4 NjUyLDcgKzE4NjUyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEycmVuZGVyKHN0cnVjdAotICAqLwotICAgfQotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTcKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDk5Ci0gICogICAgICAgICAgICAgcGFyYW1zLmFkZF9p bnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkKLSAgKiAKLSAgKiAgICAgICAg IHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xODY2Nyw3ICsx ODY2Nyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKLSAgICAgICAjZW5kaWYKLSAgICAgICAv KnRyeToqLyB7Ci0gCi0tICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA5OAotKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDAKLSAg KiAKLSAgKiAgICAgICAgIHdpdGggbm9naWw6Ci0gICogICAgICAgICAgICAgcmV0ID0gbXB2X3Jl bmRlcl9jb250ZXh0X3JlbmRlcihzZWxmLl9jdHgsIHBhcmFtcy5wYXJhbXMpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xODY3Nyw3ICsxODY3Nyw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRl cihzdHJ1Y3QKLSAgICAgICAgIF9fcHl4X3ZfcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3JlbmRl cihfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW1zLT5wYXJhbXMpOwotICAgICAgIH0K LSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NwotKyAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDk5Ci0gICogICAgICAgICAgICAg cGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkKLSAgKiAK LSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC0xODY5Niw3ICsxODY5Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKLSAgICAgICB9Ci0g ICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5OQotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDEKLSAgKiAgICAgICAgIHdpdGggbm9n aWw6Ci0gICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3JlbmRlcihzZWxm Ll9jdHgsIHBhcmFtcy5wYXJhbXMpCi0gICogICAgICAgICByZXR1cm4gcmV0ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xODcwNCwxMyArMTg3MDQsMTMgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEycmVu ZGVyKHN0cnVjdAotICAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6Ci0gICovCi0gICBfX1B5 eF9YREVDUkVGKF9fcHl4X3IpOwotLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQo X19weXhfdl9yZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDk5 LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9f cHl4X3ZfcmV0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEwMSwg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fcHl4X3Ig PSBfX3B5eF90XzE7Ci0gICBfX3B5eF90XzEgPSAwOwotICAgZ290byBfX3B5eF9MMDsKLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY5Ci0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MQotICAqIAotICAqICAgICBAX2Vycm9ycwotICAqICAg ICBkZWYgcmVuZGVyKHNlbGYsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xODcz MSw3ICsxODczMSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKLSAgIHJldHVybiBfX3B5eF9y OwotIH0KLSAKLS0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwMQotKy8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTAzCi0gICogICAgICAgICByZXR1cm4gcmV0 Ci0gICogCi0gICogICAgIGRlZiByZXBvcnRfc3dhcChzZWxmKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotQEAgLTE4NzU3LDcgKzE4NzU3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE0cmVwb3J0X3N3YXAo c3QKLSAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0gICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgicmVwb3J0X3N3YXAiLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTAyCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEw NAotICAqIAotICAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6Ci0gICogICAgICAgICB3aXRo IG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTg3NzIsNyArMTg3NzIs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfMTRyZXBvcnRfc3dhcChzdAotICAgICAgICNlbmRpZgotICAgICAgIC8qdHJ5 OiovIHsKLSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTAz Ci0rICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwNQotICAqICAg ICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6Ci0gICogICAgICAgICB3aXRoIG5vZ2lsOgotICAqICAg ICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9yZXBvcnRfc3dhcChzZWxmLl9jdHgpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xODc4Miw3ICsxODc4Miw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8x NHJlcG9ydF9zd2FwKHN0Ci0gICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfcmVwb3J0X3N3YXAo X19weXhfdl9zZWxmLT5fY3R4KTsKLSAgICAgICB9Ci0gCi0tICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExMDIKLSsgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEwNAotICAqIAotICAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6Ci0gICog ICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTg4 MDEsNyArMTg4MDEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTRyZXBvcnRfc3dhcChzdAotICAgICAgIH0KLSAgIH0K LSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTAxCi0rICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwMwotICAqICAgICAgICAgcmV0dXJuIHJldAot ICAqIAotICAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLUBAIC0xODgxNiw3ICsxODgxNiw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNHJlcG9ydF9zd2FwKHN0 Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExMDUKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwNwotICAq ICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9yZXBvcnRfc3dhcChzZWxmLl9jdHgpCi0g ICogCi0gICogICAgIGRlZiBmcmVlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtMTg4NDMsNyArMTg4NDMsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTZmcmVlKHN0cnVjdCBfXwotICAgaW50 IF9fcHl4X3RfMTsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJmcmVlIiwgMCk7Ci0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwNgotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDgKLSAgKiAKLSAgKiAgICAgZGVmIGZyZWUoc2Vs Zik6Ci0gICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLUBAIC0xODg1Myw3ICsxODg1Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZyZWUoc3RydWN0IF9f Ci0gICBfX3B5eF90XzEgPSAoKCEoX19weXhfdl9zZWxmLT5pbml0ZWQgIT0gMCkpICE9IDApOwot ICAgaWYgKF9fcHl4X3RfMSkgewotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTEwNwotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwOQot ICAqICAgICBkZWYgZnJlZShzZWxmKToKLSAgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoK LSAgKiAgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAg LTE4ODY0LDcgKzE4ODY0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE2ZnJlZShzdHJ1Y3QgX18KLSAgICAgX19weXhf ciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgZ290byBfX3B5eF9MMDsK LSAKLS0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDYKLSsgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDgKLSAgKiAKLSAgKiAgICAgZGVmIGZy ZWUoc2VsZik6Ci0gICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLUBAIC0xODg3Myw3ICsxODg3Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZyZWUoc3Ry dWN0IF9fCi0gICovCi0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTEwOAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTAKLSAgKiAg ICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKLSAgKiAgICAgICAgICAgICByZXR1cm4KLSAgKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xODg4 OCw3ICsxODg4OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZyZWUoc3RydWN0IF9fCi0gICAgICAgI2VuZGlmCi0g ICAgICAgLyp0cnk6Ki8gewotIAotLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExMDkKLSsgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTExCi0gICogICAgICAgICAgICAgcmV0dXJuCi0gICogICAgICAgICB3aXRoIG5vZ2lsOgotICAq ICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0eCkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE4ODk4LDcgKzE4ODk4LDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE2ZnJl ZShzdHJ1Y3QgX18KLSAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKF9fcHl4X3Zfc2Vs Zi0+X2N0eCk7Ci0gICAgICAgfQotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTA4Ci0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx MTAKLSAgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKLSAgKiAgICAgICAgICAgICByZXR1 cm4KLSAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LUBAIC0xODkxNyw3ICsxODkxNyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZyZWUoc3RydWN0IF9fCi0gICAgICAg fQotICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTAKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTEyCi0gICogICAgICAgICB3aXRo IG5vZ2lsOgotICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0 eCkKLSAgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotQEAgLTE4OTI2LDcgKzE4OTI2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE2ZnJlZShzdHJ1Y3QgX18K LSAgKi8KLSAgIF9fcHl4X3Zfc2VsZi0+aW5pdGVkID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTA1Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTEwNwotICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9yZXBvcnRfc3dh cChzZWxmLl9jdHgpCi0gICogCi0gICogICAgIGRlZiBmcmVlKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTg5NDIsNyArMTg5NDIsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTZmcmVlKHN0 cnVjdCBfXwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTEyCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx MTQKLSAgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKLSAgKiAKLSAgKiAgICAgZGVmIGNs b3NlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTg5NjksNyArMTg5 NjksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgXwotICAgaW50IF9fcHl4X3RfMTsKLSAgIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjbG9zZSIsIDApOwotIAotLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMTMKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTE1Ci0gICogCi0gICogICAgIGRlZiBjbG9zZShzZWxmKToKLSAgKiAgICAgICAg IGlmIG5vdCBzZWxmLmluaXRlZDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE4 OTc5LDcgKzE4OTc5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE4Y2xvc2Uoc3RydWN0IF8KLSAgIF9fcHl4X3RfMSA9 ICgoIShfX3B5eF92X3NlbGYtPmluaXRlZCAhPSAwKSkgIT0gMCk7Ci0gICBpZiAoX19weXhfdF8x KSB7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE0Ci0rICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE2Ci0gICogICAgIGRlZiBjbG9z ZShzZWxmKToKLSAgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKLSAgKiAgICAgICAgICAg ICByZXR1cm4gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE4OTkwLDcgKzE4OTkw LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNS ZW5kZXJDb250ZXh0XzE4Y2xvc2Uoc3RydWN0IF8KLSAgICAgX19weXhfciA9IFB5X05vbmU7IF9f UHl4X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgZ290byBfX3B5eF9MMDsKLSAKLS0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTMKLSsgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExMTUKLSAgKiAKLSAgKiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAq ICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtMTg5OTksNyArMTg5OTksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgXwotICAqLwot ICAgfQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTUKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE3Ci0gICogICAgICAgICBpZiBub3Qg c2VsZi5pbml0ZWQ6Ci0gICogICAgICAgICAgICAgcmV0dXJuCi0gICogICAgICAgICB3aXRoIG5v Z2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTkwMTQsNyArMTkwMTQsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgXwotICAgICAgICNlbmRpZgotICAgICAgIC8qdHJ5Oiov IHsKLSAKLS0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE2Ci0r ICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExOAotICAqICAgICAg ICAgICAgIHJldHVybgotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAgICAgICAgICAgICBt cHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLUBAIC0xOTAyNCw3ICsxOTAyNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xOGNsb3NlKHN0cnVjdCBfCi0g ICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShfX3B5eF92X3NlbGYtPl9jdHgpOwotICAg ICAgIH0KLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExNQot KyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE3Ci0gICogICAgICAg ICBpZiBub3Qgc2VsZi5pbml0ZWQ6Ci0gICogICAgICAgICAgICAgcmV0dXJuCi0gICogICAgICAg ICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTkwNDMsNyAr MTkwNDMsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgXwotICAgICAgIH0KLSAgIH0KLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE3Ci0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTExOQotICAqICAgICAgICAgd2l0aCBub2dpbDoKLSAgKiAg ICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCi0gICogICAgICAg ICBzZWxmLmluaXRlZCA9IEZhbHNlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0x OTA1Miw3ICsxOTA1Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xOGNsb3NlKHN0cnVjdCBfCi0gICovCi0gICBfX3B5 eF92X3NlbGYtPmluaXRlZCA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTExMgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTQKLSAg KiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKLSAgKiAKLSAgKiAgICAgZGVmIGNsb3NlKHNl bGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTkwNjgsNyArMTkwNjgsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgXwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE5Ci0rLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExMjEKLSAgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKLSAg KiAKLSAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci1AQCAtMTkwOTcsMTQgKzE5MDk3LDE0IEBAIHN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjBfX2RlYWxsb2NfXyhzdHJ1Y3QK LSAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJfX2RlYWxsb2NfXyIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExMjAKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTIyCi0gICog Ci0gICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKLSAgKiAgICAgICAgIHNlbGYuY2xvc2Uo KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0gICogY2RlZiBjbGFzcyBPcGVu R0xSZW5kZXJDb250ZXh0KFJlbmRlckNvbnRleHQpOgotICAqLwotLSAgX19weXhfdF8yID0gX19Q eXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhf bl9zX2Nsb3NlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTEyMCwg X19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfY2xvc2UpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTIyLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOwotICAgX19weXhfdF8zID0gTlVMTDsKLSAgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7 Ci1AQCAtMTkxMTgsMTIgKzE5MTE4LDEyIEBAIHN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjBfX2RlYWxsb2NfXyhzdHJ1Y3QKLSAgIH0K LSAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8y KTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0gIGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMjAsIF9fcHl4X0wxX2Vycm9yKQot KyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEyMiwgX19weXhfTDFf ZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4 X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExOQot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMjEKLSAgKiAgICAgICAgIHNl bGYuaW5pdGVkID0gRmFsc2UKLSAgKiAKLSAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTkyNTUsNyArMTkyNTUsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfMjRfX3NldHN0YXRlX2N5dAotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTIzCi0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExMjUKLSAgKiAKLSAgKiBjZGVmIGNsYXNzIE9wZW5HTFJlbmRlckNvbnRleHQo UmVuZGVyQ29udGV4dCk6Ci0gICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtcHYsICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xOTMxMiwxMiArMTkzMTIsMTIgQEAgc3RhdGljIGlu dCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0XzFf X2luaXRfXyhQeU9iamUKLSAgICAgICAgIGNhc2UgIDE6Ci0gICAgICAgICBpZiAobGlrZWx5KCh2 YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nf Z2V0X3Byb2NfYWRkcmVzcykpICE9IDApKSBrd19hcmdzLS07Ci0gICAgICAgICBlbHNlIHsKLS0g ICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwgMiwgMiwg MSk7IF9fUFlYX0VSUigwLCAxMTIzLCBfX3B5eF9MM19lcnJvcikKLSsgICAgICAgICAgX19QeXhf UmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwgMiwgMiwgMSk7IF9fUFlYX0VSUigw LCAxMTI1LCBfX3B5eF9MM19lcnJvcikKLSAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAgaWYg KHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewotICAgICAgICAgY29uc3QgUHlfc3NpemVfdCB1c2Vk X3Bvc19hcmdzID0gKHBvc19hcmdzIDwgMikgPyBwb3NfYXJncyA6IDI7Ci0tICAgICAgICBpZiAo dW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5 YXJnbmFtZXMsIF9fcHl4X3Zfa3dhcmdzLCB2YWx1ZXMsIHVzZWRfcG9zX2FyZ3MsICJfX2luaXRf XyIpIDwgMCkpIF9fUFlYX0VSUigwLCAxMTIzLCBfX3B5eF9MM19lcnJvcikKLSsgICAgICAgIGlm ICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhf cHlhcmduYW1lcywgX19weXhfdl9rd2FyZ3MsIHZhbHVlcywgdXNlZF9wb3NfYXJncywgIl9faW5p dF9fIikgPCAwKSkgX19QWVhfRVJSKDAsIDExMjUsIF9fcHl4X0wzX2Vycm9yKQotICAgICAgIH0K LSAgICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpIDwgMikgewotICAg ICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Ci1AQCAtMTkzMzAsNyArMTkzMzAsNyBA QCBzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5HTFJlbmRl ckNvbnRleHRfMV9faW5pdF9fKFB5T2JqZQotICAgfQotICAgZ290byBfX3B5eF9MNF9hcmd1bWVu dF91bnBhY2tpbmdfZG9uZTsKLSAgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKLS0gIF9fUHl4 X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDAsIDIsIDIsIFB5VHVwbGVfR0VUX1NJ WkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMTEyMywgX19weXhfTDNfZXJyb3IpCi0rICBf X1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAwLCAyLCAyLCBQeVR1cGxlX0dF VF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDExMjUsIF9fcHl4X0wzX2Vycm9yKQot ICAgX19weXhfTDNfZXJyb3I6OwotICAgX19QeXhfREVDUkVGKF9fcHl4X3ZfYXJncyk7IF9fcHl4 X3ZfYXJncyA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdl9rd2FyZ3MpOyBfX3B5eF92X2t3 YXJncyA9IDA7Ci1AQCAtMTkzNjAsMzkgKzE5MzYwLDM5IEBAIHN0YXRpYyBpbnQgX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1 Y3QKLSAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfX2luaXRfXyIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExMjcKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTI5Ci0gICog ICAgICAgICAgICAgICAgICAqYXJncywgKiprd2FyZ3MpOgotICAqICAgICAgICAgaW5pdF9wYXJh bXMgPSB7Ci0gICogICAgICAgICAgICAgImdldF9wcm9jX2FkZHJlc3MiOiBnZXRfcHJvY19hZGRy ZXNzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIH0KLSAgKiAgICAg ICAgIFJlbmRlckNvbnRleHQuX19pbml0X18oc2VsZiwgbXB2LCBSZW5kZXJDb250ZXh0LkFQSV9P UEVOR0wsCi0gICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9QeURpY3RfTmV3UHJlc2l6ZWQoMSk7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMjcsIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlEaWN0X05ld1ByZXNpemVkKDEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTI5LCBfX3B5eF9MMV9lcnJvcikKLSAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X3Rf MSwgX19weXhfbl9zX2dldF9wcm9jX2FkZHJlc3MsIF9fcHl4X3ZfZ2V0X3Byb2NfYWRkcmVzcykg PCAwKSBfX1BZWF9FUlIoMCwgMTEyNywgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoUHlEaWN0X1Nl dEl0ZW0oX19weXhfdF8xLCBfX3B5eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcywgX19weXhfdl9nZXRf cHJvY19hZGRyZXNzKSA8IDApIF9fUFlYX0VSUigwLCAxMTI5LCBfX3B5eF9MMV9lcnJvcikKLSAg IF9fcHl4X3ZfaW5pdF9wYXJhbXMgPSAoKFB5T2JqZWN0KilfX3B5eF90XzEpOwotICAgX19weXhf dF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTI5Ci0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMQotICAqICAgICAgICAgICAg ICJnZXRfcHJvY19hZGRyZXNzIjogZ2V0X3Byb2NfYWRkcmVzcwotICAqICAgICAgICAgfQotICAq ICAgICAgICAgUmVuZGVyQ29udGV4dC5fX2luaXRfXyhzZWxmLCBtcHYsIFJlbmRlckNvbnRleHQu QVBJX09QRU5HTCwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbml0X3BhcmFtcywgKmFyZ3MsICoqa3dhcmdzKQotICAqIAot ICAqLwotLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0 ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQpLCBfX3B5 eF9uX3NfaW5pdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMjks IF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cigoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNv bnRleHQpLCBfX3B5eF9uX3NfaW5pdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDExMzEsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 Ci0tICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilf X3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCksIF9fcHl4X25f c19BUElfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTEy OSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRy U3RyKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dCksIF9fcHl4X25fc19BUElfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgMTEzMSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTMwCi0r ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMgotICAqICAgICAgICAgfQot ICAqICAgICAgICAgUmVuZGVyQ29udGV4dC5fX2luaXRfXyhzZWxmLCBtcHYsIFJlbmRlckNvbnRl eHQuQVBJX09QRU5HTCwKLSAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9w YXJhbXMsICphcmdzLCAqKmt3YXJncykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAq IAotICAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6Ci0gICovCi0tICBfX3B5eF90XzMg PSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwg MTEyOSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMgPSBQeVR1cGxlX05ldyg0KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTEzMSwgX19weXhfTDFfZXJyb3Ip Ci0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSAgIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0 ICopX19weXhfdl9zZWxmKSk7Ci0gICBfX1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKilfX3B5eF92 X3NlbGYpKTsKLUBAIC0xOTQwNyw0MiArMTk0MDcsNDIgQEAgc3RhdGljIGludCBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVj dAotICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDMsIF9fcHl4X3ZfaW5pdF9wYXJhbXMp OwotICAgX19weXhfdF8yID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTI5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMQotICAq ICAgICAgICAgICAgICJnZXRfcHJvY19hZGRyZXNzIjogZ2V0X3Byb2NfYWRkcmVzcwotICAqICAg ICAgICAgfQotICAqICAgICAgICAgUmVuZGVyQ29udGV4dC5fX2luaXRfXyhzZWxmLCBtcHYsIFJl bmRlckNvbnRleHQuQVBJX09QRU5HTCwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BhcmFtcywgKmFyZ3MsICoqa3dh cmdzKQotICAqIAotICAqLwotLSAgX19weXhfdF8yID0gUHlOdW1iZXJfQWRkKF9fcHl4X3RfMywg X19weXhfdl9hcmdzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTEy OSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBQeU51bWJlcl9BZGQoX19weXhfdF8z LCBfX3B5eF92X2FyZ3MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAx MTMxLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwotICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExMzIKLSAgKiAgICAgICAgIH0KLSAgKiAgICAgICAgIFJlbmRlckNvbnRleHQuX19p bml0X18oc2VsZiwgbXB2LCBSZW5kZXJDb250ZXh0LkFQSV9PUEVOR0wsCi0gICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGluaXRfcGFyYW1zLCAqYXJncywgKiprd2FyZ3MpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAKLSAgKiBjbGFzcyBDYWxsYmFja1RocmVhZChU aHJlYWQpOgotICAqLwotLSAgX19weXhfdF8zID0gUHlEaWN0X0NvcHkoX19weXhfdl9rd2FyZ3Mp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTMwLCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fcHl4X3RfMyA9IFB5RGljdF9Db3B5KF9fcHl4X3Zfa3dhcmdzKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJyb3IpCi0g ICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTI5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEz MQotICAqICAgICAgICAgICAgICJnZXRfcHJvY19hZGRyZXNzIjogZ2V0X3Byb2NfYWRkcmVzcwot ICAqICAgICAgICAgfQotICAqICAgICAgICAgUmVuZGVyQ29udGV4dC5fX2luaXRfXyhzZWxmLCBt cHYsIFJlbmRlckNvbnRleHQuQVBJX09QRU5HTCwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BhcmFtcywgKmFyZ3Ms ICoqa3dhcmdzKQotICAqIAotICAqLwotLSAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2Fs bChfX3B5eF90XzEsIF9fcHl4X3RfMiwgX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzQpKSBfX1BZWF9FUlIoMCwgMTEyOSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzQgPSBf X1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMTMxLCBfX3B5eF9MMV9lcnJvcikK LSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwotICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTEyMwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExMjUKLSAgKiAKLSAgKiBjZGVmIGNsYXNzIE9wZW5HTFJlbmRlckNvbnRleHQoUmVuZGVy Q29udGV4dCk6Ci0gICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtcHYsICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLUBAIC0xOTU3OSw3ICsxOTU3OSw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF80X19z ZXRzdGF0Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExMzMKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEz NQotICAqIAotICAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6Ci0gICogICAgIGRlZiBf X2luaXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE5NjEyLDE2 ICsxOTYxMiwxNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNENhbGxiYWNrVGhyZWFkX19faW5pdF9fKENZVEhPTgotICAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fIiwgMCk7Ci0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzNAotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzYKLSAgKiBjbGFzcyBDYWxsYmFja1RocmVhZChU aHJlYWQpOgotICAqICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICogICAgICAgICBUaHJlYWQu X19pbml0X18oc2VsZikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAg c2VsZi5kYWVtb24gPSBUcnVlCi0gICogICAgICAgICBzZWxmLmxvY2sgPSBTZW1hcGhvcmUoKQot ICAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19U aHJlYWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTM0LCBfX3B5 eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5 eF9uX3NfVGhyZWFkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTEz NiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gIF9fcHl4 X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF8yLCBfX3B5eF9uX3NfaW5p dCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDExMzQsIF9fcHl4X0wx X2Vycm9yKQotKyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90 XzIsIF9fcHl4X25fc19pbml0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIo MCwgMTEzNiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotICAgX19weXhfdF8yID0g TlVMTDsKLUBAIC0xOTYzNiwyOCArMTk2MzYsMjggQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF9fX2luaXRfXyhDWVRIT04K LSAgIH0KLSAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzIpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfMywgX19weXhfdF8yLCBfX3B5eF92X3NlbGYpIDogX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzMsIF9fcHl4X3Zfc2VsZik7Ci0gICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCAxMTM0LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDExMzYsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsK LSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzUKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTM3Ci0gICogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgKiAgICAg ICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQotICAqICAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVl ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIHNlbGYubG9jayA9IFNl bWFwaG9yZSgpCi0gICogICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQotICAqLwotLSAg aWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfZGFl bW9uLCBQeV9UcnVlKSA8IDApIF9fUFlYX0VSUigwLCAxMTM1LCBfX3B5eF9MMV9lcnJvcikKLSsg IGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2Rh ZW1vbiwgUHlfVHJ1ZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTEzNywgX19weXhfTDFfZXJyb3IpCi0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzNgotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzgKLSAgKiAgICAgICAgIFRocmVhZC5fX2luaXRf XyhzZWxmKQotICAqICAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCi0gICogICAgICAgICBzZWxm LmxvY2sgPSBTZW1hcGhvcmUoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAg ICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQotICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9 IE5vbmUKLSAgKi8KLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8zLCBfX3B5 eF9uX3NfU2VtYXBob3JlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwg MTEzNiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4 X3RfMywgX19weXhfbl9zX1NlbWFwaG9yZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDExMzgsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Myk7Ci0gICBfX3B5eF90XzIgPSBOVUxMOwotICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAm JiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzMpKSkgewotQEAgLTE5NjcxLDIyICsx OTY3MSwyMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xNENhbGxiYWNrVGhyZWFkX19faW5pdF9fKENZVEhPTgotICAgfQotICAgX19weXhfdF8xID0g KF9fcHl4X3RfMikgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhf dF8yKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzMpOwotICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMTEzNiwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTM4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3Rf MyA9IDA7Ci0tICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9f cHl4X25fc19sb2NrLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDExMzYsIF9fcHl4X0wx X2Vycm9yKQotKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBf X3B5eF9uX3NfbG9jaywgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTM4LCBfX3B5eF9M MV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzcKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTM5Ci0gICogICAgICAgICBzZWxmLmRhZW1vbiA9IFRy dWUKLSAgKiAgICAgICAgIHNlbGYubG9jayA9IFNlbWFwaG9yZSgpCi0gICogICAgICAgICBzZWxm LmxvY2suYWNxdWlyZShUcnVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAg ICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQotICAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0g RmFsc2UKLSAgKi8KLS0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19w eXhfdl9zZWxmLCBfX3B5eF9uX3NfbG9jayk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDExMzcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8zID0gX19QeXhfUHlP YmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTEzOSwgX19weXhfTDFfZXJyb3IpCi0gICBf X1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLS0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoX19weXhfdF8zLCBfX3B5eF9uX3NfYWNxdWlyZSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDExMzcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8y ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzMsIF9fcHl4X25fc19hY3F1aXJl KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTEzOSwgX19weXhfTDFf ZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzMpOyBfX3B5eF90XzMgPSAwOwotICAgX19weXhfdF8zID0gTlVMTDsKLUBAIC0xOTcwMSwz MCArMTk3MDEsMzAgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTRDYWxsYmFja1RocmVhZF9fX2luaXRfXyhDWVRIT04KLSAgIH0KLSAgIF9fcHl4X3Rf MSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19w eXhfdF8zLCBQeV9UcnVlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBQ eV9UcnVlKTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLS0g IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMzcsIF9fcHl4X0wxX2Vy cm9yKQotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEzOSwgX19w eXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTEzOAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDAKLSAgKiAgICAg ICAgIHNlbGYubG9jayA9IFNlbWFwaG9yZSgpCi0gICogICAgICAgICBzZWxmLmxvY2suYWNxdWly ZShUcnVlKQotICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gRmFsc2UKLSAgKiAK LSAgKi8KLS0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19w eXhfbl9zX2NhbGxiYWNrLCBQeV9Ob25lKSA8IDApIF9fUFlYX0VSUigwLCAxMTM4LCBfX3B5eF9M MV9lcnJvcikKLSsgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwg X19weXhfbl9zX2NhbGxiYWNrLCBQeV9Ob25lKSA8IDApIF9fUFlYX0VSUigwLCAxMTQwLCBfX3B5 eF9MMV9lcnJvcikKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTM5 Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQotICAqICAgICAgICAg c2VsZi5sb2NrLmFjcXVpcmUoVHJ1ZSkKLSAgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25l Ci0gICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0gICogCi0gICogICAgIGRlZiBzaHV0ZG93bihzZWxmKToKLSAgKi8KLS0gIGlm IChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2lzc2h1 dGRvd24sIFB5X0ZhbHNlKSA8IDApIF9fUFlYX0VSUigwLCAxMTM5LCBfX3B5eF9MMV9lcnJvcikK LSsgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9z X2lzc2h1dGRvd24sIFB5X0ZhbHNlKSA8IDApIF9fUFlYX0VSUigwLCAxMTQxLCBfX3B5eF9MMV9l cnJvcikKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTMzCi0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzNQotICAqIAotICAqIGNsYXNzIENh bGxiYWNrVGhyZWFkKFRocmVhZCk6Ci0gICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTE5NzQ3LDcgKzE5NzQ3LDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF9f X2luaXRfXyhDWVRIT04KLSAgIHJldHVybiBfX3B5eF9yOwotIH0KLSAKLS0vKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQotKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTQzCi0gICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZQotICAqIAotICAq ICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBA IC0xOTc4MCwzNCArMTk3ODAsMzQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8yc2h1dGRvd24oQ1lUSE8KLSAgIGludCBf X3B5eF9jbGluZW5vID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzaHV0ZG93 biIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDIKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ0Ci0gICogCi0gICogICAgIGRl ZiBzaHV0ZG93bihzZWxmKToKLSAgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IFRydWUgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5v bmUKLSAgKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKLSAgKi8KLS0gIGlmIChfX1B5eF9Q eU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2lzc2h1dGRvd24sIFB5 X1RydWUpIDwgMCkgX19QWVhfRVJSKDAsIDExNDIsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9f UHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfaXNzaHV0ZG93 biwgUHlfVHJ1ZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJyb3IpCi0gCi0t ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MwotKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNDUKLSAgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOgot ICAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gVHJ1ZQotICAqICAgICAgICAgc2VsZi5jYWxs YmFjayA9IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgc2Vs Zi5sb2NrLnJlbGVhc2UoKQotICAqIAotICAqLwotLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0 dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2ssIFB5X05vbmUpIDwgMCkgX19Q WVhfRVJSKDAsIDExNDMsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1Nl dEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2ssIFB5X05vbmUpIDwgMCkg X19QWVhfRVJSKDAsIDExNDUsIF9fcHl4X0wxX2Vycm9yKQotIAotLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExNDQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTQ2Ci0gICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVlCi0gICogICAgICAg ICBzZWxmLmNhbGxiYWNrID0gTm9uZQotICAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0gICogICAgIGRlZiBjYWxsKHNlbGYp OgotICAqLwotLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92 X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgMTE0NCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2xvY2spOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTQ2LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOwotLSAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihfX3B5eF90XzIsIF9fcHl4X25fc19yZWxlYXNlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzMgPSBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfMiwgX19weXhfbl9zX3JlbGVhc2UpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTQ2LCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Mik7IF9fcHl4X3RfMiA9IDA7Ci0gICBfX3B5eF90XzIgPSBOVUxMOwotQEAgLTE5ODIyLDEyICsx OTgyMiwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xNENhbGxiYWNrVGhyZWFkXzJzaHV0ZG93bihDWVRITwotICAgfQotICAgX19weXhfdF8xID0g KF9fcHl4X3RfMikgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhf dF8yKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzMpOwotICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTQ2LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3Rf MyA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQxCi0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MwotICAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0g RmFsc2UKLSAgKiAKLSAgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci1AQCAtMTk4NTAsNyArMTk4NTAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzJzaHV0ZG93bihD WVRITwotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTQ2Ci0rLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDgK LSAgKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKLSAgKiAKLSAgKiAgICAgZGVmIGNhbGwo c2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0xOTg4MywxNiArMTk4ODMs MTYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRD YWxsYmFja1RocmVhZF80Y2FsbChDWVRIT05fVU4KLSAgIGludCBfX3B5eF9jbGluZW5vID0gMDsK LSAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjYWxsIiwgMCk7Ci0gCi0tICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0NwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExNDkKLSAgKiAKLSAgKiAgICAgZGVmIGNhbGwoc2VsZik6Ci0gICogICAg ICAgICBzZWxmLmxvY2sucmVsZWFzZSgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAg KiAKLSAgKiAgICAgZGVmIHNldChzZWxmLCBjYWxsYmFjayk6Ci0gICovCi0tICBfX3B5eF90XzIg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2xvY2sp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTQ3LCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9z ZWxmLCBfX3B5eF9uX3NfbG9jayk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0t ICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfMiwgX19weXhf bl9zX3JlbGVhc2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTQ3 LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfdF8yLCBfX3B5eF9uX3NfcmVsZWFzZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8z KSkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMyk7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKLSAg IF9fcHl4X3RfMiA9IE5VTEw7Ci1AQCAtMTk5MDcsMTIgKzE5OTA3LDEyIEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNGNh bGwoQ1lUSE9OX1VOCi0gICB9Ci0gICBfX3B5eF90XzEgPSAoX19weXhfdF8yKSA/IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF90XzIpIDogX19QeXhfUHlPYmplY3Rf Q2FsbE5vQXJnKF9fcHl4X3RfMyk7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTQ3 LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0g ICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKLSAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExNDYKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTQ4Ci0gICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCi0gICogCi0gICogICAgIGRlZiBj YWxsKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMTk5MzUsNyArMTk5 MzUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NENhbGxiYWNrVGhyZWFkXzRjYWxsKENZVEhPTl9VTgotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQot IAotLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ5Ci0rLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNTEKLSAgKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNl KCkKLSAgKiAKLSAgKiAgICAgZGVmIHNldChzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLUBAIC0xOTk3OCwxMSArMTk5NzgsMTEgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF83c2V0KFB5 T2JqZWN0ICoKLSAgICAgICAgIGNhc2UgIDE6Ci0gICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNb MV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfY2FsbGJh Y2spKSAhPSAwKSkga3dfYXJncy0tOwotICAgICAgICAgZWxzZSB7Ci0tICAgICAgICAgIF9fUHl4 X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJzZXQiLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDEx NDksIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxp ZCgic2V0IiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAxMTUxLCBfX3B5eF9MM19lcnJvcikK LSAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkg ewotLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5 eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0IikgPCAw KSkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wzX2Vycm9yKQotKyAgICAgICAgaWYgKHVubGlr ZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25h bWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0IikgPCAwKSkgX19QWVhfRVJSKDAsIDExNTEs IF9fcHl4X0wzX2Vycm9yKQotICAgICAgIH0KLSAgICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9T SVpFKF9fcHl4X2FyZ3MpICE9IDIpIHsKLSAgICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vy cm9yOwotQEAgLTE5OTk1LDcgKzE5OTk1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF83c2V0KFB5T2JqZWN0ICoKLSAg IH0KLSAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7Ci0gICBfX3B5eF9M NV9hcmd0dXBsZV9lcnJvcjo7Ci0tICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgic2V0Iiwg MSwgMiwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCAxMTQ5 LCBfX3B5eF9MM19lcnJvcikKLSsgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJzZXQiLCAx LCAyLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDExNTEs IF9fcHl4X0wzX2Vycm9yKQotICAgX19weXhfTDNfZXJyb3I6OwotICAgX19QeXhfQWRkVHJhY2Vi YWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQuc2V0IiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0gICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKLUBAIC0yMDAxNiwxNiArMjAwMTYsMTYgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF82c2V0KENZVEhP Tl9VTlUKLSAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKLSAgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJzZXQiLCAwKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMTUwCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1MgotICAqIAot ICAqICAgICBkZWYgc2V0KHNlbGYsIGNhbGxiYWNrKToKLSAgKiAgICAgICAgIHNlbGYuY2FsbGJh Y2sgPSBjYWxsYmFjayAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0gICogICAg IGRlZiBydW4oc2VsZik6Ci0gICovCi0tICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihf X3B5eF92X3NlbGYsIF9fcHl4X25fc19jYWxsYmFjaywgX19weXhfdl9jYWxsYmFjaykgPCAwKSBf X1BZWF9FUlIoMCwgMTE1MCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfUHlPYmplY3Rf U2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jYWxsYmFjaywgX19weXhfdl9jYWxs YmFjaykgPCAwKSBfX1BZWF9FUlIoMCwgMTE1MiwgX19weXhfTDFfZXJyb3IpCi0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0OQotKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExNTEKLSAgKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKLSAg KiAKLSAgKiAgICAgZGVmIHNldChzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLUBAIC0yMDA0NSw3ICsyMDA0NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNnNldChDWVRIT05fVU5V Ci0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExNTIKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1NAotICAq ICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCi0gICogCi0gICogICAgIGRlZiBydW4o c2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0yMDA4Miw3ICsyMDA4Miw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2Fs bGJhY2tUaHJlYWRfOHJ1bihDWVRIT05fVU5VCi0gICBpbnQgX19weXhfY2xpbmVubyA9IDA7Ci0g ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgicnVuIiwgMCk7Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1MwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExNTUKLSAgKiAKLSAgKiAgICAgZGVmIHJ1bihzZWxmKToKLSAgKiAgICAgICAg IHdoaWxlIG5vdCBzZWxmLmlzc2h1dGRvd246ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LUBAIC0yMDA5MCwyMyArMjAwOTAsMjMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF84cnVuKENZVEhPTl9VTlUKLSAgKiAg ICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBpZiBzZWxmLmNhbGxi YWNrIGVsc2UgTm9uZQotICAqLwotICAgd2hpbGUgKDEpIHsKLS0gICAgX19weXhfdF8xID0gX19Q eXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19pc3NodXRkb3du KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE1MywgX19weXhfTDFf ZXJyb3IpCi0rICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhf dl9zZWxmLCBfX3B5eF9uX3NfaXNzaHV0ZG93bik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDExNTUsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKLS0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Rf MSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDExNTMsIF9fcHl4 X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhf dF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgMTE1NSwgX19w eXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OwotICAgICBfX3B5eF90XzMgPSAoKCFfX3B5eF90XzIpICE9IDApOwotICAgICBpZiAoIV9fcHl4 X3RfMykgYnJlYWs7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTU0Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU2Ci0gICogICAg IGRlZiBydW4oc2VsZik6Ci0gICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3NodXRkb3duOgot ICAqICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxi YWNrKSBpZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9uZQotICAqIAotICAqLwotLSAgICBfX3B5eF90 XzQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2xv Y2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMTU0LCBfX3B5eF9M MV9lcnJvcikKLSsgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5 eF92X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgMTE1NiwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzQpOwotLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Rf NCwgX19weXhfbl9zX2FjcXVpcmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VS UigwLCAxMTU0LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmpl Y3RfR2V0QXR0clN0cihfX3B5eF90XzQsIF9fcHl4X25fc19hY3F1aXJlKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMTE1NiwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzUpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19w eXhfdF80ID0gMDsKLSAgICAgX19weXhfdF80ID0gTlVMTDsKLUBAIC0yMDEyMSwyNiArMjAxMjEs MjYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRD YWxsYmFja1RocmVhZF84cnVuKENZVEhPTl9VTlUKLSAgICAgfQotICAgICBfX3B5eF90XzEgPSAo X19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzUsIF9fcHl4X3Rf NCwgUHlfVHJ1ZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwgUHlfVHJ1 ZSk7Ci0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLS0gICAg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE1NCwgX19weXhfTDFfZXJy b3IpCi0rICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNTYsIF9f cHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLSAgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Ci0gICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTE1NQotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1 NwotICAqICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNzaHV0ZG93bjoKLSAgKiAgICAgICAgICAg ICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQotICAqICAgICAgICAgICAgIHNlbGYubXB2X2NhbGxi YWNrKHNlbGYuY2FsbGJhY2spIGlmIHNlbGYuY2FsbGJhY2sgZWxzZSBOb25lICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAKLSAgKiAgICAgZGVmIG1wdl9jYWxsYmFjayhzZWxmLCBj YWxsYmFjayk6Ci0gICovCi0tICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2spOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNSkpIF9fUFlYX0VSUigwLCAxMTU1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19weXhfdF81 ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jYWxs YmFjayk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDExNTcsIF9fcHl4 X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKLS0gICAgX19weXhfdF8z ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNSk7IGlmICh1bmxpa2VseShfX3B5eF90 XzMgPCAwKSkgX19QWVhfRVJSKDAsIDExNTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90 XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF81KTsgaWYgKHVubGlrZWx5KF9fcHl4 X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotICAgICBpZiAoX19weXhfdF8zKSB7 Ci0tICAgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3Nl bGYsIF9fcHl4X25fc19tcHZfY2FsbGJhY2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9f UFlYX0VSUigwLCAxMTU1LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBfX3B5eF90XzQgPSBfX1B5 eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX21wdl9jYWxsYmFj ayk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDExNTcsIF9fcHl4X0wx X2Vycm9yKQotICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAgICAgIF9fcHl4X3Rf NiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY2Fs bGJhY2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTU1LCBfX3B5 eF9MMV9lcnJvcikKLSsgICAgICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NhbGxiYWNrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzYpKSBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDFfZXJyb3IpCi0gICAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7Ci0gICAgICAgX19weXhfdF83ID0gTlVMTDsKLSAgICAgICBpZiAoQ1lU SE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzQpKSkg ewotQEAgLTIwMTU1LDcgKzIwMTU1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF84cnVuKENZVEhPTl9VTlUKLSAgICAg ICBfX3B5eF90XzUgPSAoX19weXhfdF83KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzQsIF9fcHl4X3RfNywgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF80LCBfX3B5eF90XzYpOwotICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsg X19weXhfdF83ID0gMDsKLSAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKLS0gICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAxMTU1 LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlY X0VSUigwLCAxMTU3LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF81KTsKLSAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSAg ICAgICBfX3B5eF90XzEgPSBfX3B5eF90XzU7Ci1AQCAtMjAxNjcsNyArMjAxNjcsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhy ZWFkXzhydW4oQ1lUSE9OX1VOVQotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTUyCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1NAotICAqICAgICAg ICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCi0gICogCi0gICogICAgIGRlZiBydW4oc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLUBAIC0yMDE5Miw3ICsyMDE5Miw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tU aHJlYWRfOHJ1bihDWVRIT05fVU5VCi0gICByZXR1cm4gX19weXhfcjsKLSB9Ci0gCi0tLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTcKLSsvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTE1OQotICAqICAgICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNrKHNlbGYu Y2FsbGJhY2spIGlmIHNlbGYuY2FsbGJhY2sgZWxzZSBOb25lCi0gICogCi0gICogICAgIGRlZiBt cHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtMjAyMzUsMTEgKzIwMjM1LDExIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTFtcHZfY2FsbGJhY2soCi0gICAg ICAgICBjYXNlICAxOgotICAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlE aWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2NhbGxiYWNrKSkgIT0gMCkpIGt3 X2FyZ3MtLTsKLSAgICAgICAgIGVsc2UgewotLSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxl SW52YWxpZCgibXB2X2NhbGxiYWNrIiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAxMTU3LCBf X3B5eF9MM19lcnJvcikKLSsgICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIm1w dl9jYWxsYmFjayIsIDEsIDIsIDIsIDEpOyBfX1BZWF9FUlIoMCwgMTE1OSwgX19weXhfTDNfZXJy b3IpCi0gICAgICAgICB9Ci0gICAgICAgfQotICAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4g MCkpIHsKLS0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMo X19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIm1wdl9j YWxsYmFjayIpIDwgMCkpIF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MM19lcnJvcikKLSsgICAg ICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywg X19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIm1wdl9jYWxsYmFjayIpIDwg MCkpIF9fUFlYX0VSUigwLCAxMTU5LCBfX3B5eF9MM19lcnJvcikKLSAgICAgICB9Ci0gICAgIH0g ZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7Ci0gICAgICAgZ290 byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKLUBAIC0yMDI1Miw3ICsyMDI1Miw3IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJl YWRfMTFtcHZfY2FsbGJhY2soCi0gICB9Ci0gICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFj a2luZ19kb25lOwotICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6OwotLSAgX19QeXhfUmFpc2VB cmd0dXBsZUludmFsaWQoIm1wdl9jYWxsYmFjayIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUo X19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDNfZXJyb3IpCi0rICBfX1B5 eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgibXB2X2NhbGxiYWNrIiwgMSwgMiwgMiwgUHlUdXBsZV9H RVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCAxMTU5LCBfX3B5eF9MM19lcnJvcikK LSAgIF9fcHl4X0wzX2Vycm9yOjsKLSAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxp YnMubXB2LkNhbGxiYWNrVGhyZWFkLm1wdl9jYWxsYmFjayIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwotICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7Ci1AQCAtMjAyODUsNyArMjAyODUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNrKAotICAg aW50IF9fcHl4X2NsaW5lbm8gPSAwOwotICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIm1w dl9jYWxsYmFjayIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExNTgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTYwCi0gICogCi0g ICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgotICAqICAgICAgICAgdHJ5 OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMjAzMDEsNyArMjAzMDEsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNr VGhyZWFkXzEwbXB2X2NhbGxiYWNrKAotICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7Ci0g ICAgIC8qdHJ5OiovIHsKLSAKLS0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTE1OQotKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTYxCi0g ICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgotICAqICAgICAgICAgdHJ5 OgotICAqICAgICAgICAgICAgIGNhbGxiYWNrKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotQEAgLTIwMzIxLDEyICsyMDMyMSwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNrKAotICAg ICAgIH0KLSAgICAgICBfX3B5eF90XzQgPSAoX19weXhfdF82KSA/IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF81LCBfX3B5eF90XzYpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJn KF9fcHl4X3RfNSk7Ci0gICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYg PSAwOwotLSAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDExNTks IF9fcHl4X0wzX2Vycm9yKQotKyAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhf RVJSKDAsIDExNjEsIF9fcHl4X0wzX2Vycm9yKQotICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzQpOwotICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwotICAg ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotIAotLSAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU4Ci0rICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNjAKLSAgKiAKLSAgKiAgICAgZGVmIG1wdl9jYWxsYmFj ayhzZWxmLCBjYWxsYmFjayk6Ci0gICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLUBAIC0yMDM0Myw3ICsyMDM0Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTBtcHZfY2FsbGJhY2so Ci0gICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKLSAgICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2MAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTE2MgotICAqICAgICAgICAgdHJ5OgotICAqICAgICAgICAgICAgIGNhbGxi YWNrKCkKLSAgKiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotQEAgLTIwMzUzLDI5ICsyMDM1MywyOSBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzEwbXB2X2Nh bGxiYWNrKAotICAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUVycl9FeGNlcHRpb25NYXRjaGVzKCgo UHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOwotICAg ICBpZiAoX19weXhfdF83KSB7Ci0gICAgICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIu bGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQubXB2X2NhbGxiYWNrIiwgX19weXhfY2xpbmVubywgX19w eXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Ci0tICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlv bigmX19weXhfdF80LCAmX19weXhfdF81LCAmX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAx MTYwLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCi0rICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlv bigmX19weXhfdF80LCAmX19weXhfdF81LCAmX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAx MTYyLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCi0gICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NCk7Ci0gICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7Ci0gICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7Ci0gICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7Ci0gICAgICAgX19w eXhfdl9lID0gX19weXhfdF81OwotIAotLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTYxCi0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx NjMKLSAgKiAgICAgICAgICAgICBjYWxsYmFjaygpCi0gICogICAgICAgICBleGNlcHQgRXhjZXB0 aW9uIGFzIGU6Ci0gICogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgicHltcHYgZXJyb3Ig ZHVyaW5nIGNhbGxiYWNrOiAlc1xuIiAlIGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSAgKiAKLSAgKiBjZGVmIHZvaWQgX2NfY2FsbGJhY2sodm9pZCogZCkgd2l0aCBnaWw6Ci0gICov Ci0tICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzksIF9fcHl4X25fc19z eXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlYX0VSUigwLCAxMTYxLCBfX3B5eF9M NV9leGNlcHRfZXJyb3IpCi0rICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzksIF9fcHl4X25fc19zeXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlYX0VSUigw LCAxMTYzLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCi0gICAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfOSk7Ci0tICAgICAgX19weXhfdF8xMCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19w eXhfdF85LCBfX3B5eF9uX3Nfc3RkZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEwKSkgX19Q WVhfRVJSKDAsIDExNjEsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKLSsgICAgICBfX3B5eF90XzEw ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzksIF9fcHl4X25fc19zdGRlcnIp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMTApKSBfX1BZWF9FUlIoMCwgMTE2MywgX19weXhfTDVf ZXhjZXB0X2Vycm9yKQotICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEwKTsKLSAgICAgICBf X1B5eF9ERUNSRUYoX19weXhfdF85KTsgX19weXhfdF85ID0gMDsKLS0gICAgICBfX3B5eF90Xzkg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfMTAsIF9fcHl4X25fc193cml0ZSk7 IGlmICh1bmxpa2VseSghX19weXhfdF85KSkgX19QWVhfRVJSKDAsIDExNjEsIF9fcHl4X0w1X2V4 Y2VwdF9lcnJvcikKLSsgICAgICBfX3B5eF90XzkgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KF9fcHl4X3RfMTAsIF9fcHl4X25fc193cml0ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF85KSkg X19QWVhfRVJSKDAsIDExNjMsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKLSAgICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF85KTsKLSAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xMCk7IF9fcHl4 X3RfMTAgPSAwOwotLSAgICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeVN0cmluZ19Gb3JtYXRTYWZl KF9fcHl4X2twX3NfcHltcHZfZXJyb3JfZHVyaW5nX2NhbGxiYWNrX3MsIF9fcHl4X3ZfZSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xMCkpIF9fUFlYX0VSUigwLCAxMTYxLCBfX3B5eF9MNV9leGNl cHRfZXJyb3IpCi0rICAgICAgX19weXhfdF8xMCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdFNhZmUo X19weXhfa3Bfc19weW1wdl9lcnJvcl9kdXJpbmdfY2FsbGJhY2tfcywgX19weXhfdl9lKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEwKSkgX19QWVhfRVJSKDAsIDExNjMsIF9fcHl4X0w1X2V4Y2Vw dF9lcnJvcikKLSAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xMCk7Ci0gICAgICAgX19weXhf dF8xMSA9IE5VTEw7Ci0gICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF85KSkpIHsKLUBAIC0yMDM5MCw3ICsyMDM5MCw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tU aHJlYWRfMTBtcHZfY2FsbGJhY2soCi0gICAgICAgX19weXhfdF84ID0gKF9fcHl4X3RfMTEpID8g X19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfOSwgX19weXhfdF8xMSwgX19weXhfdF8x MCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfOSwgX19weXhfdF8xMCk7Ci0g ICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzExKTsgX19weXhfdF8xMSA9IDA7Ci0gICAgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMTApOyBfX3B5eF90XzEwID0gMDsKLS0gICAgICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfOCkpIF9fUFlYX0VSUigwLCAxMTYxLCBfX3B5eF9MNV9leGNlcHRfZXJy b3IpCi0rICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBfX1BZWF9FUlIoMCwgMTE2Mywg X19weXhfTDVfZXhjZXB0X2Vycm9yKQotICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzgpOwot ICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90XzkgPSAwOwotICAgICAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOwotQEAgLTIwNDAyLDcgKzIwNDAy LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRD YWxsYmFja1RocmVhZF8xMG1wdl9jYWxsYmFjaygKLSAgICAgZ290byBfX3B5eF9MNV9leGNlcHRf ZXJyb3I7Ci0gICAgIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcjo7Ci0gCi0tICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU4Ci0rICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTYwCi0gICogCi0gICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2Fs bGJhY2spOgotICAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1A QCAtMjA0MjIsNyArMjA0MjIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNrKAotICAgICBfX3B5 eF9MOF90cnlfZW5kOjsKLSAgIH0KLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTU3Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1OQotICAq ICAgICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNrKHNlbGYuY2FsbGJhY2spIGlmIHNlbGYuY2Fs bGJhY2sgZWxzZSBOb25lCi0gICogCi0gICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2Fs bGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMjA0NTAsNyArMjA0NTAs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENh bGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNrKAotICAgcmV0dXJuIF9fcHl4X3I7Ci0gfQotIAot LS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTYzCi0rLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExNjUKLSAgKiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRl KCJweW1wdiBlcnJvciBkdXJpbmcgY2FsbGJhY2s6ICVzXG4iICUgZSkKLSAgKiAKLSAgKiBjZGVm IHZvaWQgX2NfY2FsbGJhY2sodm9pZCogZCkgd2l0aCBnaWw6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLUBAIC0yMDQ3NCw3ICsyMDQ3NCw3IEBAIHN0YXRpYyB2b2lkIF9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2X19jX2NhbGxiYWNrKHZvaWQgKl9fcHl4X3ZfZCkgewotICAgI2Vu ZGlmCi0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2NfY2FsbGJhY2siLCAwKTsKLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTY0Ci0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2NgotICAqIAotICAqIGNkZWYgdm9pZCBfY19jYWxs YmFjayh2b2lkKiBkKSB3aXRoIGdpbDoKLSAgKiAgICAgY2RlZiB1aW50NjRfdCBuYW1lID0gPHVp bnQ2NF90PmQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotQEAgLTIwNDgzLDE1ICsyMDQ4 MywxNSBAQCBzdGF0aWMgdm9pZCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY19jYWxs YmFjayh2b2lkICpfX3B5eF92X2QpIHsKLSAgKi8KLSAgIF9fcHl4X3ZfbmFtZSA9ICgodWludDY0 X3QpX19weXhfdl9kKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTY1Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2NwotICAqIGNkZWYg dm9pZCBfY19jYWxsYmFjayh2b2lkKiBkKSB3aXRoIGdpbDoKLSAgKiAgICAgY2RlZiB1aW50NjRf dCBuYW1lID0gPHVpbnQ2NF90PmQKLSAgKiAgICAgY2FsbGJhY2sgPSBfY2FsbGJhY2tzLmdldChu YW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgIGNhbGxiYWNrLmNhbGwo KQotICAqLwotLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY2FsbGJhY2tzLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTE2NSwgX19weXhfTDFfZXJyb3IpCi0r ICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfOXZpZGN1dHRl cl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTY3LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzIpOwotLSAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRf dChfX3B5eF92X25hbWUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAx MTY1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fdWlu dDY0X3QoX19weXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIo MCwgMTE2NywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKLSAg IF9fcHl4X3RfNCA9IE5VTEw7Ci0gICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2Vs eShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewotQEAgLTIwNTA2LDE4ICsyMDUwNiwxOCBA QCBzdGF0aWMgdm9pZCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY19jYWxsYmFjayh2 b2lkICpfX3B5eF92X2QpIHsKLSAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlP YmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMyk7Ci0gICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8z KTsgX19weXhfdF8zID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDExNjUsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMTE2NywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotICAgX19w eXhfdl9jYWxsYmFjayA9IF9fcHl4X3RfMTsKLSAgIF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2NgotKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExNjgKLSAgKiAgICAgY2RlZiB1aW50NjRfdCBuYW1lID0gPHVpbnQ2 NF90PmQKLSAgKiAgICAgY2FsbGJhY2sgPSBfY2FsbGJhY2tzLmdldChuYW1lKQotICAqICAgICBj YWxsYmFjay5jYWxsKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqLwotLSAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2NhbGxiYWNrLCBfX3B5 eF9uX3NfY2FsbCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExNjYs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF92X2NhbGxiYWNrLCBfX3B5eF9uX3NfY2FsbCk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDExNjgsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7Ci0gICBfX3B5eF90XzMgPSBOVUxMOwotICAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKLUBAIC0yMDUz MSwxMiArMjA1MzEsMTIgQEAgc3RhdGljIHZvaWQgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX2NfY2FsbGJhY2sodm9pZCAqX19weXhfdl9kKSB7Ci0gICB9Ci0gICBfX3B5eF90XzEgPSAo X19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90 XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7Ci0gICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAxMTY2LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNjgsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8y ID0gMDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNjMKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTY1Ci0gICogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0 ZSgicHltcHYgZXJyb3IgZHVyaW5nIGNhbGxiYWNrOiAlc1xuIiAlIGUpCi0gICogCi0gICogY2Rl ZiB2b2lkIF9jX2NhbGxiYWNrKHZvaWQqIGQpIHdpdGggZ2lsOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci1AQCAtMjQ0NDQsMTMgKzI0NDQ0LDEzIEBAIHN0YXRpYyBfX1B5eF9TdHJpbmdU YWJFbnRyeSBfX3B5eF9zdHJpbmdfdGFiW10gPSB7Ci0gICB7MCwgMCwgMCwgMCwgMCwgMCwgMH0K LSB9OwotIHN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfSW5pdENhY2hlZEJ1aWx0 aW5zKHZvaWQpIHsKLS0gIF9fcHl4X2J1aWx0aW5fSW1wb3J0RXJyb3IgPSBfX1B5eF9HZXRCdWls dGluTmFtZShfX3B5eF9uX3NfSW1wb3J0RXJyb3IpOyBpZiAoIV9fcHl4X2J1aWx0aW5fSW1wb3J0 RXJyb3IpIF9fUFlYX0VSUigwLCA0NCwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF9idWlsdGlu X29iamVjdCA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19vYmplY3QpOyBpZiAoIV9f cHl4X2J1aWx0aW5fb2JqZWN0KSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9MMV9lcnJvcikKLS0g IF9fcHl4X2J1aWx0aW5fVW5pY29kZURlY29kZUVycm9yID0gX19QeXhfR2V0QnVpbHRpbk5hbWUo X19weXhfbl9zX1VuaWNvZGVEZWNvZGVFcnJvcik7IGlmICghX19weXhfYnVpbHRpbl9Vbmljb2Rl RGVjb2RlRXJyb3IpIF9fUFlYX0VSUigwLCA1OCwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5eF9i dWlsdGluX1VuaWNvZGVFbmNvZGVFcnJvciA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25f c19Vbmljb2RlRW5jb2RlRXJyb3IpOyBpZiAoIV9fcHl4X2J1aWx0aW5fVW5pY29kZUVuY29kZUVy cm9yKSBfX1BZWF9FUlIoMCwgNjYsIF9fcHl4X0wxX2Vycm9yKQotLSAgX19weXhfYnVpbHRpbl9y YW5nZSA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19yYW5nZSk7IGlmICghX19weXhf YnVpbHRpbl9yYW5nZSkgX19QWVhfRVJSKDAsIDIyMiwgX19weXhfTDFfZXJyb3IpCi0tICBfX3B5 eF9idWlsdGluX2lkID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX2lkKTsgaWYgKCFf X3B5eF9idWlsdGluX2lkKSBfX1BZWF9FUlIoMCwgMzAzLCBfX3B5eF9MMV9lcnJvcikKLS0gIF9f cHl4X2J1aWx0aW5fZW51bWVyYXRlID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX2Vu dW1lcmF0ZSk7IGlmICghX19weXhfYnVpbHRpbl9lbnVtZXJhdGUpIF9fUFlYX0VSUigwLCA0NzUs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfYnVpbHRpbl9JbXBvcnRFcnJvciA9IF9fUHl4X0dl dEJ1aWx0aW5OYW1lKF9fcHl4X25fc19JbXBvcnRFcnJvcik7IGlmICghX19weXhfYnVpbHRpbl9J bXBvcnRFcnJvcikgX19QWVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X2J1 aWx0aW5fb2JqZWN0ID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX29iamVjdCk7IGlm ICghX19weXhfYnVpbHRpbl9vYmplY3QpIF9fUFlYX0VSUigwLCAzNDgsIF9fcHl4X0wxX2Vycm9y KQotKyAgX19weXhfYnVpbHRpbl9Vbmljb2RlRGVjb2RlRXJyb3IgPSBfX1B5eF9HZXRCdWlsdGlu TmFtZShfX3B5eF9uX3NfVW5pY29kZURlY29kZUVycm9yKTsgaWYgKCFfX3B5eF9idWlsdGluX1Vu aWNvZGVEZWNvZGVFcnJvcikgX19QWVhfRVJSKDAsIDYwLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f cHl4X2J1aWx0aW5fVW5pY29kZUVuY29kZUVycm9yID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19w eXhfbl9zX1VuaWNvZGVFbmNvZGVFcnJvcik7IGlmICghX19weXhfYnVpbHRpbl9Vbmljb2RlRW5j b2RlRXJyb3IpIF9fUFlYX0VSUigwLCA2OCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF9idWls dGluX3JhbmdlID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX3JhbmdlKTsgaWYgKCFf X3B5eF9idWlsdGluX3JhbmdlKSBfX1BZWF9FUlIoMCwgMjI0LCBfX3B5eF9MMV9lcnJvcikKLSsg IF9fcHl4X2J1aWx0aW5faWQgPSBfX1B5eF9HZXRCdWlsdGluTmFtZShfX3B5eF9uX3NfaWQpOyBp ZiAoIV9fcHl4X2J1aWx0aW5faWQpIF9fUFlYX0VSUigwLCAzMDUsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19weXhfYnVpbHRpbl9lbnVtZXJhdGUgPSBfX1B5eF9HZXRCdWlsdGluTmFtZShfX3B5eF9u X3NfZW51bWVyYXRlKTsgaWYgKCFfX3B5eF9idWlsdGluX2VudW1lcmF0ZSkgX19QWVhfRVJSKDAs IDQ3NywgX19weXhfTDFfZXJyb3IpCi0gICBfX3B5eF9idWlsdGluX1R5cGVFcnJvciA9IF9fUHl4 X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19UeXBlRXJyb3IpOyBpZiAoIV9fcHl4X2J1aWx0aW5f VHlwZUVycm9yKSBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCi0gICByZXR1cm4gMDsK LSAgIF9fcHl4X0wxX2Vycm9yOjsKLUBAIC0yNDQ2MSwxNyArMjQ0NjEsMTcgQEAgc3RhdGljIENZ VEhPTl9TTUFMTF9DT0RFIGludCBfX1B5eF9Jbml0Q2FjaGVkQ29uc3RhbnRzKHZvaWQpIHsKLSAg IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCi0gICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgiX19QeXhfSW5pdENhY2hlZENvbnN0YW50cyIsIDApOwotIAotLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjMxOQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMyMQotICAqIAotICAqIGRlZiBfZXJyb3JzKGZuKToKLSAgKiAgICAgZGVmIHdyYXBwZWQo KmssICoqa3cpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICB2ID0g Zm4oKmssICoqa3cpCi0gICogICAgICAgICBpZiB2IDwgMDoKLSAgKi8KLS0gIF9fcHl4X3R1cGxl XyA9IFB5VHVwbGVfUGFjaygzLCBfX3B5eF9uX3NfaywgX19weXhfbl9zX2t3LCBfX3B5eF9uX3Nf dik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfKSkgX19QWVhfRVJSKDAsIDMxOSwgX19weXhf TDFfZXJyb3IpCi0rICBfX3B5eF90dXBsZV8gPSBQeVR1cGxlX1BhY2soMywgX19weXhfbl9zX2ss IF9fcHl4X25fc19rdywgX19weXhfbl9zX3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlXykp IF9fUFlYX0VSUigwLCAzMjEsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4 X3R1cGxlXyk7Ci0gICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlXyk7Ci0tICBfX3B5eF9jb2Rl b2JqX18yID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDAsIDAsIDMsIDAsIENPX09QVElN SVpFRHxDT19ORVdMT0NBTFN8Q09fVkFSQVJHU3xDT19WQVJLRVlXT1JEUywgX19weXhfZW1wdHlf Ynl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVf LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0 dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3dyYXBwZWQsIDMxOSwgX19weXhfZW1w dHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzIpKSBfX1BZWF9FUlIoMCwg MzE5LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X2NvZGVvYmpfXzIgPSAoUHlPYmplY3QqKV9f UHl4X1B5Q29kZV9OZXcoMCwgMCwgMywgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMU3xDT19W QVJBUkdTfENPX1ZBUktFWVdPUkRTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV8sIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4 LCBfX3B5eF9uX3Nfd3JhcHBlZCwgMzIxLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2Vs eSghX19weXhfY29kZW9ial9fMikpIF9fUFlYX0VSUigwLCAzMjEsIF9fcHl4X0wxX2Vycm9yKQot IAotICAgLyogIih0cmVlIGZyYWdtZW50KSI6MgotICAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhz ZWxmKToKLUBAIC0yNDUxMSw4MCArMjQ1MTEsODAgQEAgc3RhdGljIENZVEhPTl9TTUFMTF9DT0RF IGludCBfX1B5eF9Jbml0Q2FjaGVkQ29uc3RhbnRzKHZvaWQpIHsKLSAgIF9fUHl4X0dPVFJFRihf X3B5eF90dXBsZV9fNik7Ci0gICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX182KTsKLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTIKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5OTQKLSAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRw KE1QVl9SRU5ERVJfUEFSQU1fV0xfRElTUExBWSwgZ2V0X3BvaW50ZXIoIndsX2Rpc3BsYXkiLCB3 bF9kaXNwbGF5KSkKLSAgKiAgICAgICAgIGlmIGRybV9kaXNwbGF5OgotICAqICAgICAgICAgICAg IGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1f ZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKLSAgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNv bm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpCi0gICovCi0t ICBfX3B5eF90dXBsZV9fNyA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfZmQsIF9fcHl4X2lu dF9uZWdfMSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzcpKSBfX1BZWF9FUlIoMCwgOTky LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3R1cGxlX183ID0gUHlUdXBsZV9QYWNrKDIsIF9f cHl4X25fc19mZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9f NykpIF9fUFlYX0VSUigwLCA5OTQsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9f cHl4X3R1cGxlX183KTsKLSAgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzcpOwotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MwotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjk5NQotICAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6Ci0gICog ICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAtMSkKLSAg KiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNydGNf aWQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgICAgIGRy bV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAt MSkKLSAgKiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5nZXQoImF0b21pY19yZXF1ZXN0 X3B0ciIsIE5vbmUpCi0gICovCi0tICBfX3B5eF90dXBsZV9fOCA9IFB5VHVwbGVfUGFjaygyLCBf X3B5eF9uX3NfY3J0Y19pZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 dXBsZV9fOCkpIF9fUFlYX0VSUigwLCA5OTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdHVw bGVfXzggPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9zX2NydGNfaWQsIF9fcHl4X2ludF9uZWdf MSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzgpKSBfX1BZWF9FUlIoMCwgOTk1LCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fOCk7Ci0gICBfX1B5eF9H SVZFUkVGKF9fcHl4X3R1cGxlX184KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo5OTQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTYKLSAg KiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIsIC0xKQot ICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5LmdldCgiY3J0 Y19pZCIsIC0xKQotICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJt X2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotICAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVl c3RfcHRyIiwgTm9uZSkKLSAgKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6Ci0gICov Ci0tICBfX3B5eF90dXBsZV9fOSA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfY29ubmVjdG9y X2lkLCBfX3B5eF9pbnRfbmVnXzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX185KSkgX19Q WVhfRVJSKDAsIDk5NCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90dXBsZV9fOSA9IFB5VHVw bGVfUGFjaygyLCBfX3B5eF9uX3NfY29ubmVjdG9yX2lkLCBfX3B5eF9pbnRfbmVnXzEpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3R1cGxlX185KSkgX19QWVhfRVJSKDAsIDk5NiwgX19weXhfTDFfZXJy b3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzkpOwotICAgX19QeXhfR0lWRVJFRihf X3B5eF90dXBsZV9fOSk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTk1Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk3Ci0gICogICAgICAg ICAgICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEp Ci0gICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5n ZXQoImNvbm5lY3Rvcl9pZCIsIC0xKQotICAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5 LmdldCgiYXRvbWljX3JlcXVlc3RfcHRyIiwgTm9uZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotICAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKLSAgKiAgICAgICAgICAg ICAgICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEg Kio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQotICAqLwotLSAgX19weXhf dHVwbGVfXzEwID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19hdG9taWNfcmVxdWVzdF9wdHIs IFB5X05vbmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMCkpIF9fUFlYX0VSUigwLCA5 OTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdHVwbGVfXzEwID0gUHlUdXBsZV9QYWNrKDIs IF9fcHl4X25fc19hdG9taWNfcmVxdWVzdF9wdHIsIFB5X05vbmUpOyBpZiAodW5saWtlbHkoIV9f cHl4X3R1cGxlX18xMCkpIF9fUFlYX0VSUigwLCA5OTcsIF9fcHl4X0wxX2Vycm9yKQotICAgX19Q eXhfR09UUkVGKF9fcHl4X3R1cGxlX18xMCk7Ci0gICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxl X18xMCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk4Ci0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAwMAotICAqICAgICAgICAgICAgIGlm IGFycCBpcyBub3QgTm9uZToKLSAgKiAgICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5hdG9taWNf cmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJt TW9kZUF0b21pY1JlcSoiKQotICAqICAgICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVyX2ZkID0g ZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9E Uk1fRElTUExBWSwgJmRybV9wYXJhbXMpCi0gICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6Ci0g ICovCi0tICBfX3B5eF90dXBsZV9fMTEgPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9zX3JlbmRl cl9mZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMTEpKSBf X1BZWF9FUlIoMCwgOTk4LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3R1cGxlX18xMSA9IFB5 VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfcmVuZGVyX2ZkLCBfX3B5eF9pbnRfbmVnXzEpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMSkpIF9fUFlYX0VSUigwLCAxMDAwLCBfX3B5eF9MMV9l cnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTEpOwotICAgX19QeXhfR0lWRVJF RihfX3B5eF90dXBsZV9fMTEpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwODMKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg1Ci0gICog ICAgICAgICBpZiBvcGVuZ2xfZmJvOgotICAqICAgICAgICAgICAgIG1lbXNldCgmZmJvLCAwLCBz aXplb2YoZmJvKSkKLSAgKiAgICAgICAgICAgICBmYm8uZmJvID0gb3BlbmdsX2Ziby5nZXQoImZi byIsIDApIG9yIDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgICAg IGZiby53ID0gb3BlbmdsX2Zib1sidyJdCi0gICogICAgICAgICAgICAgZmJvLmggPSBvcGVuZ2xf ZmJvWyJoIl0KLSAgKi8KLS0gIF9fcHl4X3R1cGxlX18xMiA9IFB5VHVwbGVfUGFjaygyLCBfX3B5 eF9uX3NfZmJvLCBfX3B5eF9pbnRfMCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzEyKSkg X19QWVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdHVwbGVfXzEyID0g UHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19mYm8sIF9fcHl4X2ludF8wKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90dXBsZV9fMTIpKSBfX1BZWF9FUlIoMCwgMTA4NSwgX19weXhfTDFfZXJyb3IpCi0g ICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzEyKTsKLSAgIF9fUHl4X0dJVkVSRUYoX19weXhf dHVwbGVfXzEyKTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg2 Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4OAotICAqICAgICAgICAg ICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdCi0gICogICAgICAgICAgICAgZmJvLmggPSBvcGVu Z2xfZmJvWyJoIl0KLSAgKiAgICAgICAgICAgICBmYm8uaW50ZXJuYWxfZm9ybWF0ID0gb3Blbmds X2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIsIDApIG9yIDAgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJB TV9PUEVOR0xfRkJPLCAmZmJvKQotICAqICAgICAgICAgaWYgZmxpcF95OgotICAqLwotLSAgX19w eXhfdHVwbGVfXzEzID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19pbnRlcm5hbF9mb3JtYXQs IF9fcHl4X2ludF8wKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMTMpKSBfX1BZWF9FUlIo MCwgMTA4NiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90dXBsZV9fMTMgPSBQeVR1cGxlX1Bh Y2soMiwgX19weXhfbl9zX2ludGVybmFsX2Zvcm1hdCwgX19weXhfaW50XzApOyBpZiAodW5saWtl bHkoIV9fcHl4X3R1cGxlX18xMykpIF9fUFlYX0VSUigwLCAxMDg4LCBfX3B5eF9MMV9lcnJvcikK LSAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTMpOwotICAgX19QeXhfR0lWRVJFRihfX3B5 eF90dXBsZV9fMTMpOwotIAotQEAgLTI0NjI2LDE4MyArMjQ2MjYsMTgzIEBAIHN0YXRpYyBDWVRI T05fU01BTExfQ09ERSBpbnQgX19QeXhfSW5pdENhY2hlZENvbnN0YW50cyh2b2lkKSB7Ci0gICBf X1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzE3KTsKLSAgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVw bGVfXzE3KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MgotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU0Ci0gICogICAgIHZvaWQgUHlfSW5p dGlhbGl6ZSgpCi0gICogCi0gICogX2lzX3B5MyA9IHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogX3N0cmRlY19lcnIgPSAic3Vycm9nYXRl ZXNjYXBlIiBpZiBfaXNfcHkzIGVsc2UgInN0cmljdCIKLSAgKiAjIG1wdiAtPiBQeXRob24KLSAg Ki8KLS0gIF9fcHl4X3R1cGxlX18xOCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9pbnRfMyk7IGlm ICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE4KSkgX19QWVhfRVJSKDAsIDUyLCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fcHl4X3R1cGxlX18xOCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9pbnRfMyk7 IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE4KSkgX19QWVhfRVJSKDAsIDU0LCBfX3B5eF9M MV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTgpOwotICAgX19QeXhfR0lW RVJFRihfX3B5eF90dXBsZV9fMTgpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjU1Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcKLSAgKiBf c3RyZGVjX2VyciA9ICJzdXJyb2dhdGVlc2NhcGUiIGlmIF9pc19weTMgZWxzZSAic3RyaWN0Igot ICAqICMgbXB2IC0+IFB5dGhvbgotICAqIGRlZiBfc3RyZGVjKHMpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0gICogICAgIHRyeToKLSAgKiAgICAgICAgIHJldHVybiBzLmRlY29kZSgi dXRmLTgiLCBfc3RyZGVjX2VycikKLSAgKi8KLS0gIF9fcHl4X3R1cGxlX18xOSA9IFB5VHVwbGVf UGFjaygxLCBfX3B5eF9uX3Nfcyk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE5KSkgX19Q WVhfRVJSKDAsIDU1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3R1cGxlX18xOSA9IFB5VHVw bGVfUGFjaygxLCBfX3B5eF9uX3Nfcyk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE5KSkg X19QWVhfRVJSKDAsIDU3LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90 dXBsZV9fMTkpOwotICAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTkpOwotLSAgX19weXhf Y29kZW9ial9fMjAgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09f T1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzE5LCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2 X3B5eCwgX19weXhfbl9zX3N0cmRlYywgNTUsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF9jb2Rlb2JqX18yMCkpIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX3B5eF9jb2Rlb2JqX18yMCA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAw LCAxLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMTksIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGli c19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3Nfc3RyZGVjLCA1NywgX19weXhfZW1wdHlfYnl0ZXMp OyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzIwKSkgX19QWVhfRVJSKDAsIDU3LCBfX3B5 eF9MMV9lcnJvcikKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2Mwot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1Ci0gICogCi0gICogIyBQeXRo b24gLT4gbXB2Ci0gICogZGVmIF9zdHJlbmMocyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSAgKiAgICAgdHJ5OgotICAqICAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCJ1dGYtOCIsIF9z dHJkZWNfZXJyKQotICAqLwotLSAgX19weXhfdHVwbGVfXzIxID0gUHlUdXBsZV9QYWNrKDEsIF9f cHl4X25fc19zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjEpKSBfX1BZWF9FUlIoMCwg NjMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdHVwbGVfXzIxID0gUHlUdXBsZV9QYWNrKDEs IF9fcHl4X25fc19zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjEpKSBfX1BZWF9FUlIo MCwgNjUsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18yMSk7 Ci0gICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18yMSk7Ci0tICBfX3B5eF9jb2Rlb2JqX18y MiA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8 Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMjEsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5 eF9uX3Nfc3RyZW5jLCA2MywgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4 X2NvZGVvYmpfXzIyKSkgX19QWVhfRVJSKDAsIDYzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4 X2NvZGVvYmpfXzIyID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAsIENP X09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18yMSwgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21w dl9weXgsIF9fcHl4X25fc19zdHJlbmMsIDY1LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxp a2VseSghX19weXhfY29kZW9ial9fMjIpKSBfX1BZWF9FUlIoMCwgNjUsIF9fcHl4X0wxX2Vycm9y KQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOAotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMAotICAqIAotICAqIAotICAqIGRlZiBfZXJy b3JzKGZuKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICBkZWYgd3JhcHBl ZCgqaywgKiprdyk6Ci0gICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCi0gICovCi0tICBfX3B5 eF90dXBsZV9fMjMgPSBQeVR1cGxlX1BhY2soMywgX19weXhfbl9zX2ZuLCBfX3B5eF9uX3Nfd3Jh cHBlZCwgX19weXhfbl9zX3dyYXBwZWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18yMykp IF9fUFlYX0VSUigwLCAzMTgsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdHVwbGVfXzIzID0g UHlUdXBsZV9QYWNrKDMsIF9fcHl4X25fc19mbiwgX19weXhfbl9zX3dyYXBwZWQsIF9fcHl4X25f c193cmFwcGVkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjMpKSBfX1BZWF9FUlIoMCwg MzIwLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMjMpOwot ICAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMjMpOwotLSAgX19weXhfY29kZW9ial9fMjQg PSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMywgMCwgQ09fT1BUSU1JWkVEfENP X05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzIzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhf bl9zX2Vycm9ycywgMzE4LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhf Y29kZW9ial9fMjQpKSBfX1BZWF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4 X2NvZGVvYmpfXzI0ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDMsIDAsIENP X09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18yMywgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21w dl9weXgsIF9fcHl4X25fc19lcnJvcnMsIDMyMCwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5s aWtlbHkoIV9fcHl4X2NvZGVvYmpfXzI0KSkgX19QWVhfRVJSKDAsIDMyMCwgX19weXhfTDFfZXJy b3IpCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI5Ci0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMxCi0gICogICAgIGNvZGUgPSBOb25lCi0g ICogCi0gICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotICAqICAgICAgICAgc2VsZi5jb2RlID0gZQotICAqICAgICAgICAgY2RlZiBjb25z dCBjaGFyKiBlcnJfYwotICAqLwotLSAgX19weXhfdHVwbGVfXzI1ID0gUHlUdXBsZV9QYWNrKDQs IF9fcHl4X25fc19zZWxmLCBfX3B5eF9uX3NfZSwgX19weXhfbl9zX2Vycl9jLCBfX3B5eF9uX3Nf ZV9pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjUpKSBfX1BZWF9FUlIoMCwgMzI5LCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3R1cGxlX18yNSA9IFB5VHVwbGVfUGFjayg0LCBfX3B5 eF9uX3Nfc2VsZiwgX19weXhfbl9zX2UsIF9fcHl4X25fc19lcnJfYywgX19weXhfbl9zX2VfaSk7 IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzI1KSkgX19QWVhfRVJSKDAsIDMzMSwgX19weXhf TDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzI1KTsKLSAgIF9fUHl4X0dJ VkVSRUYoX19weXhfdHVwbGVfXzI1KTsKLS0gIF9fcHl4X2NvZGVvYmpfXzI2ID0gKFB5T2JqZWN0 KilfX1B5eF9QeUNvZGVfTmV3KDIsIDAsIDQsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMs IF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUs IF9fcHl4X3R1cGxlX18yNSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19pbml0LCAz MjksIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18yNikp IF9fUFlYX0VSUigwLCAzMjksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfY29kZW9ial9fMjYg PSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgNCwgMCwgQ09fT1BUSU1JWkVEfENP X05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzI1LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhf bl9zX2luaXQsIDMzMSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2Nv ZGVvYmpfXzI2KSkgX19QWVhfRVJSKDAsIDMzMSwgX19weXhfTDFfZXJyb3IpCi0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ2Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzQ4Ci0gICogY2RlZiBfcmVwbHlfdXNlcmRhdGFzID0gZGljdCgpCi0g ICogCi0gICogY2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotICAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6Ci0gICogICAgICAg ICBzZWxmLmNvdW50ZXIgPSAwCi0gICovCi0tICBfX3B5eF90dXBsZV9fMjcgPSBQeVR1cGxlX1Bh Y2soMSwgX19weXhfYnVpbHRpbl9vYmplY3QpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18y NykpIF9fUFlYX0VSUigwLCAzNDYsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdHVwbGVfXzI3 ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2J1aWx0aW5fb2JqZWN0KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90dXBsZV9fMjcpKSBfX1BZWF9FUlIoMCwgMzQ4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9f UHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMjcpOwotICAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBs ZV9fMjcpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NwotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0OQotICAqIAotICAqIGNsYXNzIF9S ZXBseVVzZXJEYXRhKG9iamVjdCk6Ci0gICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgc2VsZi5jb3VudGVyID0g MAotICAqICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQotICAqLwotLSAgX19weXhfdHVwbGVfXzI4 ID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19zZWxmLCBfX3B5eF9uX3NfZGF0YSk7IGlmICh1 bmxpa2VseSghX19weXhfdHVwbGVfXzI4KSkgX19QWVhfRVJSKDAsIDM0NywgX19weXhfTDFfZXJy b3IpCi0rICBfX3B5eF90dXBsZV9fMjggPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9zX3NlbGYs IF9fcHl4X25fc19kYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjgpKSBfX1BZWF9F UlIoMCwgMzQ5LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9f MjgpOwotICAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMjgpOwotLSAgX19weXhfY29kZW9i al9fMjkgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgMiwgMCwgQ09fT1BUSU1J WkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzI4LCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwg X19weXhfbl9zX2luaXQsIDM0NywgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9f cHl4X2NvZGVvYmpfXzI5KSkgX19QWVhfRVJSKDAsIDM0NywgX19weXhfTDFfZXJyb3IpCi0rICBf X3B5eF9jb2Rlb2JqX18yOSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygyLCAwLCAyLCAw LCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMjgsIF9fcHl4X2VtcHR5 X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1w dl9tcHZfcHl4LCBfX3B5eF9uX3NfaW5pdCwgMzQ5LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1 bmxpa2VseSghX19weXhfY29kZW9ial9fMjkpKSBfX1BZWF9FUlIoMCwgMzQ5LCBfX3B5eF9MMV9l cnJvcikKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTIKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTQKLSAgKiAgICAgICAgIHNlbGYub2Jz ZXJ2ZWQgPSBGYWxzZQotICAqIAotICAqICAgICBkZWYgYWRkKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMQotICAqIAotICAq LwotLSAgX19weXhfdHVwbGVfXzMwID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25fc19zZWxmKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMzApKSBfX1BZWF9FUlIoMCwgMzUyLCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fcHl4X3R1cGxlX18zMCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nf c2VsZik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzMwKSkgX19QWVhfRVJSKDAsIDM1NCwg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzMwKTsKLSAgIF9f UHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzMwKTsKLS0gIF9fcHl4X2NvZGVvYmpfXzMxID0gKFB5 T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxDT19ORVdM T0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlf dHVwbGUsIF9fcHl4X3R1cGxlX18zMCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19h ZGQsIDM1MiwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpf XzMxKSkgX19QWVhfRVJSKDAsIDM1MiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF9jb2Rlb2Jq X18zMSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUla RUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMzAsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBf X3B5eF9uX3NfYWRkLCAzNTQsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF9jb2Rlb2JqX18zMSkpIF9fUFlYX0VSUigwLCAzNTQsIF9fcHl4X0wxX2Vycm9yKQotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NQotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjM1NwotICAqICAgICAgICAgc2VsZi5jb3VudGVyICs9IDEKLSAg KiAKLSAgKiAgICAgZGVmIHJlbW92ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqICAgICAgICAgc2VsZi5jb3VudGVyIC09IDEKLSAgKiAKLSAgKi8KLS0gIF9fcHl4X3R1 cGxlX18zMiA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nfc2VsZik7IGlmICh1bmxpa2VseSgh X19weXhfdHVwbGVfXzMyKSkgX19QWVhfRVJSKDAsIDM1NSwgX19weXhfTDFfZXJyb3IpCi0rICBf X3B5eF90dXBsZV9fMzIgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3R1cGxlX18zMikpIF9fUFlYX0VSUigwLCAzNTcsIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18zMik7Ci0gICBfX1B5eF9HSVZFUkVGKF9f cHl4X3R1cGxlX18zMik7Ci0tICBfX3B5eF9jb2Rlb2JqX18zMyA9IChQeU9iamVjdCopX19QeXhf UHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9l bXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90 dXBsZV9fMzIsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bf c192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfcmVtb3ZlLCAzNTUsIF9f cHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18zMykpIF9fUFlY X0VSUigwLCAzNTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfY29kZW9ial9fMzMgPSAoUHlP YmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xP Q0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfdHVwbGVfXzMyLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3Jl bW92ZSwgMzU3LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9i al9fMzMpKSBfX1BZWF9FUlIoMCwgMzU3LCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTMzCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTEzNQotICAqIAotICAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6 Ci0gICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0gICogICAgICAgICBzZWxmLmRh ZW1vbiA9IFRydWUKLSAgKi8KLS0gIF9fcHl4X3R1cGxlX18zNCA9IFB5VHVwbGVfUGFjaygxLCBf X3B5eF9uX3Nfc2VsZik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzM0KSkgX19QWVhfRVJS KDAsIDExMzMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdHVwbGVfXzM0ID0gUHlUdXBsZV9Q YWNrKDEsIF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMzQpKSBf X1BZWF9FUlIoMCwgMTEzNSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhf dHVwbGVfXzM0KTsKLSAgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzM0KTsKLS0gIF9fcHl4 X2NvZGVvYmpfXzM1ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAsIENP X09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18zNCwgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21w dl9weXgsIF9fcHl4X25fc19pbml0LCAxMTMzLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxp a2VseSghX19weXhfY29kZW9ial9fMzUpKSBfX1BZWF9FUlIoMCwgMTEzMywgX19weXhfTDFfZXJy b3IpCi0rICBfX3B5eF9jb2Rlb2JqX18zNSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygx LCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywg X19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMzQsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJf bGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfaW5pdCwgMTEzNSwgX19weXhfZW1wdHlfYnl0 ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzM1KSkgX19QWVhfRVJSKDAsIDExMzUs IF9fcHl4X0wxX2Vycm9yKQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExNDEKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQzCi0gICogICAg ICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZQotICAqIAotICAqICAgICBkZWYgc2h1dGRvd24o c2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIHNlbGYuaXNz aHV0ZG93biA9IFRydWUKLSAgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lCi0gICovCi0t ICBfX3B5eF90dXBsZV9fMzYgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3R1cGxlX18zNikpIF9fUFlYX0VSUigwLCAxMTQxLCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fcHl4X3R1cGxlX18zNiA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nfc2Vs Zik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzM2KSkgX19QWVhfRVJSKDAsIDExNDMsIF9f cHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18zNik7Ci0gICBfX1B5 eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18zNik7Ci0tICBfX3B5eF9jb2Rlb2JqX18zNyA9IChQeU9i amVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9D QUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF90dXBsZV9fMzYsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3Nfc2h1 dGRvd24sIDExNDEsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rl b2JqX18zNykpIF9fUFlYX0VSUigwLCAxMTQxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X2Nv ZGVvYmpfXzM3ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAsIENPX09Q VElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18zNiwgX19weXhfZW1wdHlfdHVwbGUs IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9w eXgsIF9fcHl4X25fc19zaHV0ZG93biwgMTE0MywgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5s aWtlbHkoIV9fcHl4X2NvZGVvYmpfXzM3KSkgX19QWVhfRVJSKDAsIDExNDMsIF9fcHl4X0wxX2Vy cm9yKQotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDYKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ4Ci0gICogICAgICAgICBzZWxmLmxv Y2sucmVsZWFzZSgpCi0gICogCi0gICogICAgIGRlZiBjYWxsKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCi0gICogCi0g ICovCi0tICBfX3B5eF90dXBsZV9fMzggPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYp OyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18zOCkpIF9fUFlYX0VSUigwLCAxMTQ2LCBfX3B5 eF9MMV9lcnJvcikKLSsgIF9fcHl4X3R1cGxlX18zOCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9u X3Nfc2VsZik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzM4KSkgX19QWVhfRVJSKDAsIDEx NDgsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18zOCk7Ci0g ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18zOCk7Ci0tICBfX3B5eF9jb2Rlb2JqX18zOSA9 IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8Q09f TkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMzgsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9u X3NfY2FsbCwgMTE0NiwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2Nv ZGVvYmpfXzM5KSkgX19QWVhfRVJSKDAsIDExNDYsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhf Y29kZW9ial9fMzkgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09f T1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzM4LCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2 X3B5eCwgX19weXhfbl9zX2NhbGwsIDExNDgsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF9jb2Rlb2JqX18zOSkpIF9fUFlYX0VSUigwLCAxMTQ4LCBfX3B5eF9MMV9lcnJv cikKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ5Ci0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1MQotICAqICAgICAgICAgc2VsZi5sb2Nr LnJlbGVhc2UoKQotICAqIAotICAqICAgICBkZWYgc2V0KHNlbGYsIGNhbGxiYWNrKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxi YWNrCi0gICogCi0gICovCi0tICBfX3B5eF90dXBsZV9fNDAgPSBQeVR1cGxlX1BhY2soMiwgX19w eXhfbl9zX3NlbGYsIF9fcHl4X25fc19jYWxsYmFjayk7IGlmICh1bmxpa2VseSghX19weXhfdHVw bGVfXzQwKSkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdHVw bGVfXzQwID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19zZWxmLCBfX3B5eF9uX3NfY2FsbGJh Y2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX180MCkpIF9fUFlYX0VSUigwLCAxMTUxLCBf X3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNDApOwotICAgX19Q eXhfR0lWRVJFRihfX3B5eF90dXBsZV9fNDApOwotLSAgX19weXhfY29kZW9ial9fNDEgPSAoUHlP YmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgMiwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xP Q0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfdHVwbGVfXzQwLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3Nl dCwgMTE0OSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpf XzQxKSkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfY29kZW9i al9fNDEgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgMiwgMCwgQ09fT1BUSU1J WkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzQwLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwg X19weXhfbl9zX3NldCwgMTE1MSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9f cHl4X2NvZGVvYmpfXzQxKSkgX19QWVhfRVJSKDAsIDExNTEsIF9fcHl4X0wxX2Vycm9yKQotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTIKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU0Ci0gICogICAgICAgICBzZWxmLmNhbGxiYWNrID0g Y2FsbGJhY2sKLSAgKiAKLSAgKiAgICAgZGVmIHJ1bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotICAqICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNzaHV0ZG93bjoKLSAgKiAg ICAgICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQotICAqLwotLSAgX19weXhfdHVwbGVf XzQyID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90dXBsZV9fNDIpKSBfX1BZWF9FUlIoMCwgMTE1MiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5 eF90dXBsZV9fNDIgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYpOyBpZiAodW5saWtl bHkoIV9fcHl4X3R1cGxlX180MikpIF9fUFlYX0VSUigwLCAxMTU0LCBfX3B5eF9MMV9lcnJvcikK LSAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNDIpOwotICAgX19QeXhfR0lWRVJFRihfX3B5 eF90dXBsZV9fNDIpOwotLSAgX19weXhfY29kZW9ial9fNDMgPSAoUHlPYmplY3QqKV9fUHl4X1B5 Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1w dHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVw bGVfXzQyLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3Nf dmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3J1biwgMTE1MiwgX19weXhf ZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzQzKSkgX19QWVhfRVJS KDAsIDExNTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfY29kZW9ial9fNDMgPSAoUHlPYmpl Y3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FM UywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfdHVwbGVfXzQyLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUs IF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3J1biwg MTE1NCwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzQz KSkgX19QWVhfRVJSKDAsIDExNTQsIF9fcHl4X0wxX2Vycm9yKQotIAotLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNTcKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTU5Ci0gICogICAgICAgICAgICAgc2VsZi5tcHZfY2FsbGJhY2soc2VsZi5jYWxs YmFjaykgaWYgc2VsZi5jYWxsYmFjayBlbHNlIE5vbmUKLSAgKiAKLSAgKiAgICAgZGVmIG1wdl9j YWxsYmFjayhzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAg KiAgICAgICAgIHRyeToKLSAgKiAgICAgICAgICAgICBjYWxsYmFjaygpCi0gICovCi0tICBfX3B5 eF90dXBsZV9fNDQgPSBQeVR1cGxlX1BhY2soMywgX19weXhfbl9zX3NlbGYsIF9fcHl4X25fc19j YWxsYmFjaywgX19weXhfbl9zX2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX180NCkpIF9f UFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3R1cGxlX180NCA9IFB5 VHVwbGVfUGFjaygzLCBfX3B5eF9uX3Nfc2VsZiwgX19weXhfbl9zX2NhbGxiYWNrLCBfX3B5eF9u X3NfZSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzQ0KSkgX19QWVhfRVJSKDAsIDExNTks IF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX180NCk7Ci0gICBf X1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX180NCk7Ci0tICBfX3B5eF9jb2Rlb2JqX180NSA9IChQ eU9iamVjdCopX19QeXhfUHlDb2RlX05ldygyLCAwLCAzLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVX TE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5 X3R1cGxlLCBfX3B5eF90dXBsZV9fNDQsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3Nf bXB2X2NhbGxiYWNrLCAxMTU3LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19w eXhfY29kZW9ial9fNDUpKSBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDFfZXJyb3IpCi0rICBf X3B5eF9jb2Rlb2JqX180NSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygyLCAwLCAzLCAw LCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDQsIF9fcHl4X2VtcHR5 X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1w dl9tcHZfcHl4LCBfX3B5eF9uX3NfbXB2X2NhbGxiYWNrLCAxMTU5LCBfX3B5eF9lbXB0eV9ieXRl cyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fNDUpKSBfX1BZWF9FUlIoMCwgMTE1OSwg X19weXhfTDFfZXJyb3IpCi0gCi0gICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCi0gICogZGVmIF9f cHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVj a3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMjQ4 NDAsOSArMjQ4NDAsOSBAQCBzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X0luaXRH bG9iYWxzKHZvaWQpIHsKLSAgIGlmIChfX1B5eF9Jbml0U3RyaW5ncyhfX3B5eF9zdHJpbmdfdGFi KSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcik7Ci0gICBfX3B5eF9pbnRfMCA9 IFB5SW50X0Zyb21Mb25nKDApOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8wKSkgX19QWVhfRVJS KDAsIDEsIF9fcHl4X0wxX2Vycm9yKQotICAgX19weXhfaW50XzEgPSBQeUludF9Gcm9tTG9uZygx KTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfMSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9l cnJvcikKLS0gIF9fcHl4X2ludF8yID0gUHlJbnRfRnJvbUxvbmcoMik7IGlmICh1bmxpa2VseSgh X19weXhfaW50XzIpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCi0gICBfX3B5eF9p bnRfMyA9IFB5SW50X0Zyb21Mb25nKDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8zKSkgX19Q WVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQotICAgX19weXhfaW50XzMyID0gUHlJbnRfRnJv bUxvbmcoMzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8zMikpIF9fUFlYX0VSUigwLCAxLCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X2ludF8xMDkgPSBQeUludF9Gcm9tTG9uZygxMDkpOyBp ZiAodW5saWtlbHkoIV9fcHl4X2ludF8xMDkpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJy b3IpCi0gICBfX3B5eF9pbnRfNTcxMzE2OSA9IFB5SW50X0Zyb21Mb25nKDU3MTMxNjlMKTsgaWYg KHVubGlrZWx5KCFfX3B5eF9pbnRfNTcxMzE2OSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9l cnJvcikKLSAgIF9fcHl4X2ludF85MDk1ODI2MiA9IFB5SW50X0Zyb21Mb25nKDkwOTU4MjYyTCk7 IGlmICh1bmxpa2VseSghX19weXhfaW50XzkwOTU4MjYyKSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4 X0wxX2Vycm9yKQotICAgX19weXhfaW50XzE0MjAzNjkxMCA9IFB5SW50X0Zyb21Mb25nKDE0MjAz NjkxMEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8xNDIwMzY5MTApKSBfX1BZWF9FUlIoMCwg MSwgX19weXhfTDFfZXJyb3IpCi1AQCAtMjQ4OTcsMTIyICsyNDg5NywxMjIgQEAgc3RhdGljIGlu dCBfX1B5eF9tb2Rpbml0X3R5cGVfaW5pdF9jb2RlKHZvaWQpIHsKLSAgIC8qLS0tIFR5cGUgaW5p dCBjb2RlIC0tLSovCi0gICBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRP ZkZpbGVSZWFjaGVkID0gJl9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZG aWxlUmVhY2hlZDsKLSAgIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZG aWxlUmVhY2hlZC5faW5pdCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKiwgc3RydWN0IG1wdl9ldmVudF9lbmRf ZmlsZSAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRf X2luaXQ7Ci0tICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9fcHl4X0wxX2Vy cm9yKQotKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRW5kT2ZGaWxlUmVhY2hlZCkgPCAwKSBfX1BZWF9FUlIoMCwgMTU4LCBfX3B5eF9MMV9lcnJv cikKLSAgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKLSAgIF9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQudHBfcHJpbnQgPSAwOwotICAgI2Vu ZGlmCi0gICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9M T09LVVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZG aWxlUmVhY2hlZC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0VuZE9mRmlsZVJlYWNoZWQudHBfZ2V0YXR0cm8gPT0gUHlPYmplY3RfR2VuZXJpY0dldEF0 dHIpKSB7Ci0gICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJl YWNoZWQudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0cjsKLSAgIH0K LS0gIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RW5kT2ZGaWxlUmVhY2hlZC50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9fcHl4X0wxX2Vy cm9yKQotLSAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX0VuZE9mRmls ZVJlYWNoZWQsIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F bmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9fcHl4X0wxX2Vycm9yKQot LSAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9f cHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1NldFZ0YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZp ZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwgMCkgX19QWVhfRVJSKDAsIDE1 OCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5 eF9uX3NfRW5kT2ZGaWxlUmVhY2hlZCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwgMCkgX19QWVhfRVJSKDAsIDE1OCwgX19w eXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwgMCkgX19QWVhf RVJSKDAsIDE1OCwgX19weXhfTDFfZXJyb3IpCi0gICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FbmRPZkZpbGVSZWFjaGVkOwotICAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfTG9nTWVzc2FnZSA9ICZfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xv Z01lc3NhZ2U7Ci0gICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3Nh Z2UuX2luaXQgPSAoUHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Mb2dNZXNzYWdlICosIHN0cnVjdCBtcHZfZXZlbnRfbG9nX21lc3NhZ2UgKikpX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX19pbml0OwotLSAgaWYgKFB5 VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSkg PCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChQeVR5cGVfUmVh ZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UpIDwgMCkgX19Q WVhfRVJSKDAsIDE4NCwgX19weXhfTDFfZXJyb3IpCi0gICAjaWYgUFlfVkVSU0lPTl9IRVggPCAw eDAzMDgwMEIxCi0gICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl LnRwX3ByaW50ID0gMDsKLSAgICNlbmRpZgotICAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMg JiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UudHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLnRwX2dldGF0dHJvID09IFB5T2JqZWN0X0dl bmVyaWNHZXRBdHRyKSkgewotICAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9M b2dNZXNzYWdlLnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7Ci0g ICB9Ci0tICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2UudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfTG9nTWVzc2FnZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikKLS0g IGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19Mb2dNZXNzYWdlLCAoUHlP YmplY3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSkgPCAw KSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikKLS0gIGlmIChfX1B5eF9zZXR1cF9y ZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVz c2FnZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5 eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZS50 cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKSA8 IDApIF9fUFlYX0VSUigwLCAxODQsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKFB5T2JqZWN0X1Nl dEF0dHIoX19weXhfbSwgX19weXhfbl9zX0xvZ01lc3NhZ2UsIChQeU9iamVjdCAqKSZfX3B5eF90 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKSA8IDApIF9fUFlYX0VSUigwLCAx ODQsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3Qq KSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKSA8IDApIF9fUFlY X0VSUigwLCAxODQsIF9fcHl4X0wxX2Vycm9yKQotICAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0xvZ01lc3NhZ2UgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf TG9nTWVzc2FnZTsKLSAgIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3Bl cnR5ID0gJl9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHk7Ci0gICBf X3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5Ll9pbml0ID0gKFB5T2Jq ZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkg Kiwgc3RydWN0IG1wdl9ldmVudF9wcm9wZXJ0eSAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl84UHJvcGVydHlfX2luaXQ7Ci0tICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSkgPCAwKSBfX1BZWF9FUlIoMCwgMjQzLCBfX3B5 eF9MMV9lcnJvcikKLSsgIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X1Byb3BlcnR5KSA8IDApIF9fUFlYX0VSUigwLCAyNDUsIF9fcHl4X0wxX2Vycm9y KQotICAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQotICAgX19weXhfdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfcHJpbnQgPSAwOwotICAgI2VuZGlmCi0gICBp ZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYm IGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZGlj dG9mZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eS50cF9n ZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKLSAgICAgX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVj dF9HZW5lcmljR2V0QXR0cjsKLSAgIH0KLS0gIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZGljdCwgX19weXhfdnRhYnB0cl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpIDwgMCkgX19QWVhfRVJSKDAsIDI0MywgX19w eXhfTDFfZXJyb3IpCi0tICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3Nf UHJvcGVydHksIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Q cm9wZXJ0eSkgPCAwKSBfX1BZWF9FUlIoMCwgMjQzLCBfX3B5eF9MMV9lcnJvcikKLS0gIGlmIChf X1B5eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfUHJvcGVydHkpIDwgMCkgX19QWVhfRVJSKDAsIDI0MywgX19weXhfTDFfZXJyb3IpCi0r ICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1By b3BlcnR5LnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3Bl cnR5KSA8IDApIF9fUFlYX0VSUigwLCAyNDUsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKFB5T2Jq ZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX1Byb3BlcnR5LCAoUHlPYmplY3QgKikmX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpIDwgMCkgX19QWVhfRVJSKDAs IDI0NSwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVj dCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSA8IDApIF9fUFlY X0VSUigwLCAyNDUsIF9fcHl4X0wxX2Vycm9yKQotICAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X1Byb3BlcnR5ID0gJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1By b3BlcnR5OwotICAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgPSAm X19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudDsKLSAgIF9fcHl4X3Z0YWJs ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQuX2RhdGEgPSAoUHlPYmplY3QgKigqKShzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqLCBzdHJ1Y3QgbXB2X2V2 ZW50ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9fZGF0YTsKLSAgIF9f cHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQuX2luaXQgPSAoUHlPYmplY3Qg KigqKShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqLCBzdHJ1 Y3QgbXB2X2V2ZW50ICosIFB5T2JqZWN0ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzVFdmVudF9faW5pdDsKLS0gIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0V2ZW50KSA8IDApIF9fUFlYX0VSUigwLCAyNTYsIF9fcHl4X0wxX2Vycm9y KQotKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RXZlbnQpIDwgMCkgX19QWVhfRVJSKDAsIDI1OCwgX19weXhfTDFfZXJyb3IpCi0gICAjaWYgUFlf VkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCi0gICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudC50cF9wcmludCA9IDA7Ci0gICAjZW5kaWYKLSAgIGlmICgoQ1lUSE9OX1VTRV9U WVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50LnRwX2dldGF0dHJvID09IFB5T2JqZWN0X0dl bmVyaWNHZXRBdHRyKSkgewotICAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudC50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOwotICAgfQot LSAgaWYgKF9fUHl4X1NldFZ0YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudC50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCkg PCAwKSBfX1BZWF9FUlIoMCwgMjU2LCBfX3B5eF9MMV9lcnJvcikKLS0gIGlmIChQeU9iamVjdF9T ZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19FdmVudCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KSA8IDApIF9fUFlYX0VSUigwLCAyNTYsIF9fcHl4 X0wxX2Vycm9yKQotLSAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCkgPCAwKSBfX1BZWF9FUlIoMCwgMjU2LCBf X3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRXZlbnQudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRXZlbnQpIDwgMCkgX19QWVhfRVJSKDAsIDI1OCwgX19weXhfTDFfZXJyb3IpCi0r ICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfRXZlbnQsIChQeU9iamVj dCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCkgPCAwKSBfX1BZWF9F UlIoMCwgMjU4LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5 T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpIDwgMCkgX19Q WVhfRVJSKDAsIDI1OCwgX19weXhfTDFfZXJyb3IpCi0gICBfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRXZlbnQgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZl bnQ7Ci0gICBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ID0gJl9f cHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dDsKLSAgIF9fcHl4X3Z0YWJs ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC5fcHJlcF9ub2RlX2xpc3QgPSAoc3RydWN0 IG1wdl9ub2RlX2xpc3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICosIFB5T2JqZWN0ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0X19wcmVwX25vZGVfbGlzdDsKLSAgIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dC5fcHJlcF9ub2RlX21hcCA9IChzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqKCop KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKiwgUHlPYmpl Y3QgKikpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9t YXA7Ci0gICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQuX3ByZXBf bmF0aXZlX3ZhbHVlID0gKHN0cnVjdCBtcHZfbm9kZSAoKikoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKSlfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9uYXRpdmVfdmFsdWU7Ci0g ICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQuX2ZyZWVfbmF0aXZl X3ZhbHVlID0gKFB5T2JqZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCAqLCBzdHJ1Y3QgbXB2X25vZGUpKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0X19mcmVlX25hdGl2ZV92YWx1ZTsKLS0gIGlmIChQeVR5cGVfUmVhZHko Jl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJS KDAsIDM1OSwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCAzNjEsIF9f cHl4X0wxX2Vycm9yKQotICAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQotICAgX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC50cF9wcmludCA9IDA7Ci0gICAj ZW5kaWYKLSAgIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBF X0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0LnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dC50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKLSAgICAgX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC50cF9nZXRhdHRybyA9IF9fUHl4 X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOwotICAgfQotLSAgaWYgKF9fUHl4X1NldFZ0YWJsZShf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LnRwX2RpY3QsIF9fcHl4X3Z0 YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDM1 OSwgX19weXhfTDFfZXJyb3IpCi0tICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5 eF9uX3NfQ29udGV4dCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDM1OSwgX19weXhfTDFfZXJyb3IpCi0tICBp ZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDM1OSwgX19weXhfTDFfZXJyb3Ip Ci0rICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMzYxLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChQeU9i amVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19Db250ZXh0LCAoUHlPYmplY3QgKikmX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwg MzYxLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0 KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCkgPCAwKSBfX1BZWF9F UlIoMCwgMzYxLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ID0gJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQ7Ci0gICBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z ID0gJl9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtczsKLSAg IF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy5hZGRfdm9p ZHAgPSAoUHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fUmVuZGVyUGFyYW1zICosIGVudW0gbXB2X3JlbmRlcl9wYXJhbV90eXBlLCB2b2lkICosIHN0 cnVjdCBfX3B5eF9vcHRfYXJnc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1z X2FkZF92b2lkcCAqX19weXhfb3B0aW9uYWxfYXJncykpX19weXhfZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF92b2lkcDsKLSAgIF9fcHl4X3Z0YWJsZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy5hZGRfaW50ID0gKFB5T2JqZWN0ICooKikoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqLCBlbnVt IG1wdl9yZW5kZXJfcGFyYW1fdHlwZSwgaW50KSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM19SZW5kZXJQYXJhbXNfYWRkX2ludDsKLSAgIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX1JlbmRlclBhcmFtcy5hZGRfc3RyaW5nID0gKFB5T2JqZWN0ICooKikoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqLCBlbnVtIG1w dl9yZW5kZXJfcGFyYW1fdHlwZSwgY2hhciAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM19SZW5kZXJQYXJhbXNfYWRkX3N0cmluZzsKLS0gIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMpIDwgMCkgX19QWVhfRVJS KDAsIDg4MSwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKSA8IDApIF9fUFlYX0VSUigwLCA4 ODMsIF9fcHl4X0wxX2Vycm9yKQotICAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQot ICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9wcmlu dCA9IDA7Ci0gICAjZW5kaWYKLSAgIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhP Tl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fUmVuZGVyUGFyYW1zLnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5l cmljR2V0QXR0cikpIHsKLSAgICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1Jl bmRlclBhcmFtcy50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOwot ICAgfQotLSAgaWYgKF9fUHl4X1NldFZ0YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fUmVuZGVyUGFyYW1zLnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGli c18zbXB2X19SZW5kZXJQYXJhbXMpIDwgMCkgX19QWVhfRVJSKDAsIDg4MSwgX19weXhfTDFfZXJy b3IpCi0tICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfUmVuZGVyUGFy YW1zLCAoUHlPYmplY3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRl clBhcmFtcykgPCAwKSBfX1BZWF9FUlIoMCwgODgxLCBfX3B5eF9MMV9lcnJvcikKLS0gIGlmIChf X1B5eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX1JlbmRlclBhcmFtcykgPCAwKSBfX1BZWF9FUlIoMCwgODgxLCBfX3B5eF9MMV9lcnJv cikKLSsgIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX1JlbmRlclBhcmFtcy50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fUmVuZGVyUGFyYW1zKSA8IDApIF9fUFlYX0VSUigwLCA4ODMsIF9fcHl4X0wxX2Vycm9y KQotKyAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX1JlbmRlclBhcmFt cywgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQ YXJhbXMpIDwgMCkgX19QWVhfRVJSKDAsIDg4MywgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19Q eXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X19SZW5kZXJQYXJhbXMpIDwgMCkgX19QWVhfRVJSKDAsIDg4MywgX19weXhfTDFfZXJyb3Ip Ci0gICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyA9ICZf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zOwotICAgX19weXhf dnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvID0gJl9fcHl4X3Z0 YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvOwotICAgX19weXhfdnRh YmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8uX2Zyb21fc3RydWN0ID0g KFB5T2JqZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVu ZGVyRnJhbWVJbmZvICosIHN0cnVjdCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKikpX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fX2Zyb21fc3RydWN0OwotLSAg aWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy RnJhbWVJbmZvKSA8IDApIF9fUFlYX0VSUigwLCA5MjgsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYg KFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJh bWVJbmZvKSA8IDApIF9fUFlYX0VSUigwLCA5MzAsIF9fcHl4X0wxX2Vycm9yKQotICAgI2lmIFBZ X1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQotICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX3ByaW50ID0gMDsKLSAgICNlbmRpZgotICAgaWYgKChD WVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtl bHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mby50cF9k aWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1l SW5mby50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKLSAgICAgX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2dldGF0dHJv ID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7Ci0gICB9Ci0tICBpZiAoX19QeXhfU2V0 VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mby50 cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUlu Zm8pIDwgMCkgX19QWVhfRVJSKDAsIDkyOCwgX19weXhfTDFfZXJyb3IpCi0tICBpZiAoX19QeXhf c2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X1JlbmRlckZyYW1lSW5mbykgPCAwKSBfX1BZWF9FUlIoMCwgOTI4LCBfX3B5eF9MMV9lcnJvcikK LSsgIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyRnJhbWVJbmZvLnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckZyYW1lSW5mbykgPCAwKSBfX1BZWF9FUlIoMCwgOTMwLCBfX3B5eF9MMV9lcnJv cikKLSsgIGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvKSA8IDApIF9fUFlYX0VSUigwLCA5MzAs IF9fcHl4X0wxX2Vycm9yKQotICAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Jl bmRlckZyYW1lSW5mbyA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJG cmFtZUluZm87Ci0tICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCA5MzcsIF9fcHl4X0wxX2Vy cm9yKQotKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgOTM5LCBfX3B5eF9MMV9lcnJvcikK LSAgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKLSAgIF9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQudHBfcHJpbnQgPSAwOwotICAgI2VuZGlmCi0g ICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVAp ICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckNvbnRleHQudHBfZ2V0YXR0cm8gPT0gUHlPYmplY3RfR2VuZXJpY0dldEF0dHIpKSB7Ci0gICAg IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQudHBfZ2V0YXR0 cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0cjsKLSAgIH0KLS0gIGlmIChQeU9iamVj dF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19SZW5kZXJDb250ZXh0LCAoUHlPYmplY3QgKikm X19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZ WF9FUlIoMCwgOTM3LCBfX3B5eF9MMV9lcnJvcikKLS0gIGlmIChfX1B5eF9zZXR1cF9yZWR1Y2Uo KFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dCkgPCAwKSBfX1BZWF9FUlIoMCwgOTM3LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChQeU9iamVj dF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19SZW5kZXJDb250ZXh0LCAoUHlPYmplY3QgKikm X19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZ WF9FUlIoMCwgOTM5LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9zZXR1cF9yZWR1Y2Uo KFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dCkgPCAwKSBfX1BZWF9FUlIoMCwgOTM5LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fcHl4X3B0eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ID0gJl9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQ7Ci0gICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2Jhc2UgPSBfX3B5eF9wdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dDsKLS0gIGlmIChQeVR5cGVfUmVhZHkoJl9f cHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQpIDwgMCkg X19QWVhfRVJSKDAsIDExMjIsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKFB5VHlwZV9SZWFkeSgm X19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCkgPCAw KSBfX1BZWF9FUlIoMCwgMTEyNCwgX19weXhfTDFfZXJyb3IpCi0gICAjaWYgUFlfVkVSU0lPTl9I RVggPCAweDAzMDgwMEIxCi0gICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVu R0xSZW5kZXJDb250ZXh0LnRwX3ByaW50ID0gMDsKLSAgICNlbmRpZgotICAgaWYgKChDWVRIT05f VVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9f cHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQudHBfZGlj dG9mZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJD b250ZXh0LnRwX2dldGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgewotICAgICBf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2dl dGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7Ci0gICB9Ci0tICBpZiAoUHlP YmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfT3BlbkdMUmVuZGVyQ29udGV4dCwgKFB5 T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNv bnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDExMjIsIF9fcHl4X0wxX2Vycm9yKQotLSAgaWYgKF9f UHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9PcGVuR0xSZW5kZXJDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCAxMTIyLCBfX3B5eF9M MV9lcnJvcikKLSsgIGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19PcGVu R0xSZW5kZXJDb250ZXh0LCAoUHlPYmplY3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMTEyNCwgX19weXhf TDFfZXJyb3IpCi0rICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQpIDwgMCkgX19QWVhf RVJSKDAsIDExMjQsIF9fcHl4X0wxX2Vycm9yKQotICAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dDsKLS0gIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycykg PCAwKSBfX1BZWF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChQeVR5cGVfUmVh ZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9f X2Vycm9ycykgPCAwKSBfX1BZWF9FUlIoMCwgMzIwLCBfX3B5eF9MMV9lcnJvcikKLSAgICNpZiBQ WV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKLSAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycy50cF9wcmludCA9IDA7Ci0gICAjZW5k aWYKLUBAIC0yNTMxNSwyOSArMjUzMTUsMjkgQEAgaWYgKCFfX1B5eF9SZWZOYW5ueSkgewotICAq IF9fdmVyc2lvbl9fID0gIjAuMy4wIgotICAqIF9fYXV0aG9yX18gPSAiQW5kcmUgRCIgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqIAotLSAqIF9SRVFVSVJFRF9DQVBJX01BSk9SID0g MgotKyAqICNfUkVRVUlSRURfQ0FQSV9NQUpPUiA9IDIKLSAgKi8KLSAgIGlmIChQeURpY3RfU2V0 SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfYXV0aG9yLCBfX3B5eF9rcF9zX0FuZHJlX0QpIDwgMCkg X19QWVhfRVJSKDAsIDMxLCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjozMwotLSAqIF9fYXV0aG9yX18gPSAiQW5kcmUgRCIKLS0gKiAKLS0g KiBfUkVRVUlSRURfQ0FQSV9NQUpPUiA9IDIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAot LSAqIF9NSU5fQ0FQSV9NSU5PUiA9IDAKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozNQotKyAqICNfUkVRVUlSRURfQ0FQSV9NQUpPUiA9IDIKLSsgKiAjX01JTl9DQVBJX01J Tk9SID0gMAotKyAqIF9SRVFVSVJFRF9DQVBJX01BSk9SID0gMSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0rICogX01JTl9DQVBJX01JTk9SID0gMTA5Ci0gICogCi0gICovCi0tICBpZiAo UHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX1JFUVVJUkVEX0NBUElfTUFKT1IsIF9f cHl4X2ludF8yKSA8IDApIF9fUFlYX0VSUigwLCAzMywgX19weXhfTDFfZXJyb3IpCi0rICBpZiAo UHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX1JFUVVJUkVEX0NBUElfTUFKT1IsIF9f cHl4X2ludF8xKSA8IDApIF9fUFlYX0VSUigwLCAzNSwgX19weXhfTDFfZXJyb3IpCi0gCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQKLS0gKiAKLS0gKiBfUkVRVUlSRURf Q0FQSV9NQUpPUiA9IDIKLS0gKiBfTUlOX0NBUElfTUlOT1IgPSAwICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNgotKyAq ICNfTUlOX0NBUElfTUlOT1IgPSAwCi0rICogX1JFUVVJUkVEX0NBUElfTUFKT1IgPSAxCi0rICog X01JTl9DQVBJX01JTk9SID0gMTA5ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAK LSAgKiBjZGVmIHVuc2lnbmVkIGxvbmcgX0NBUElfVkVSU0lPTgotICAqLwotLSAgaWYgKFB5RGlj dF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUiwgX19weXhfaW50XzAp IDwgMCkgX19QWVhfRVJSKDAsIDM0LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChQeURpY3RfU2V0 SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfTUlOX0NBUElfTUlOT1IsIF9fcHl4X2ludF8xMDkpIDwg MCkgX19QWVhfRVJSKDAsIDM2LCBfX3B5eF9MMV9lcnJvcikKLSAKLS0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjozNwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjM5Ci0gICogCi0gICogY2RlZiB1bnNpZ25lZCBsb25nIF9DQVBJX1ZFUlNJT04KLSAgKiB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMjUzNTIsNyArMjUz NTIsNyBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7Ci0gICAgICAgI2VuZGlmCi0gICAgICAgLyp0 cnk6Ki8gewotIAotLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM4 Ci0rICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDAKLSAgKiBjZGVm IHVuc2lnbmVkIGxvbmcgX0NBUElfVkVSU0lPTgotICAqIHdpdGggbm9naWw6Ci0gICogICAgIF9D QVBJX1ZFUlNJT04gPSBtcHZfY2xpZW50X2FwaV92ZXJzaW9uKCkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotQEAgLTI1MzYyLDcgKzI1MzYyLDcgQEAgaWYgKCFfX1B5eF9SZWZOYW5ueSkg ewotICAgICAgICAgX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX0NBUElfVkVSU0lPTiA9 IG1wdl9jbGllbnRfYXBpX3ZlcnNpb24oKTsKLSAgICAgICB9Ci0gCi0tICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3Ci0rICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjM5Ci0gICogCi0gICogY2RlZiB1bnNpZ25lZCBsb25nIF9DQVBJX1ZFUlNJ T04KLSAgKiB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci1AQCAtMjUz ODEsODAgKzI1MzgxLDgwIEBAIGlmICghX19QeXhfUmVmTmFubnkpIHsKLSAgICAgICB9Ci0gICB9 Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDAKLSsgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MgotICAqICAgICBfQ0FQSV9WRVJTSU9OID0gbXB2 X2NsaWVudF9hcGlfdmVyc2lvbigpCi0gICogCi0gICogX0NBUElfTUFKT1IgPSBfQ0FQSV9WRVJT SU9OID4+IDE2ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiBfQ0FQSV9NSU5PUiA9 IF9DQVBJX1ZFUlNJT04gJiAweEZGRkYKLSAgKiAKLSAgKi8KLS0gIF9fcHl4X3RfMiA9IF9fUHl4 X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZygoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X0NBUElfVkVSU0lPTiA+PiAxNikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VS UigwLCA0MCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9t X3Vuc2lnbmVkX2xvbmcoKF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19DQVBJX1ZFUlNJ T04gPj4gMTYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDIsIF9f cHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBpZiAoUHlEaWN0 X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX0NBUElfTUFKT1IsIF9fcHl4X3RfMikgPCAwKSBf X1BZWF9FUlIoMCwgNDAsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9f cHl4X2QsIF9fcHl4X25fc19DQVBJX01BSk9SLCBfX3B5eF90XzIpIDwgMCkgX19QWVhfRVJSKDAs IDQyLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQxCi0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMKLSAgKiAKLSAgKiBfQ0FQSV9NQUpP UiA9IF9DQVBJX1ZFUlNJT04gPj4gMTYKLSAgKiBfQ0FQSV9NSU5PUiA9IF9DQVBJX1ZFUlNJT04g JiAweEZGRkYgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqIAotICAqIGlmIF9DQVBJ X01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01BSk9SIG9yIF9DQVBJX01JTk9SIDwgX01JTl9DQVBJ X01JTk9SOgotICAqLwotLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV91bnNpZ25lZF9s b25nKChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fQ0FQSV9WRVJTSU9OICYgMHhGRkZG KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQxLCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZygoX19w eXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX0NBUElfVkVSU0lPTiAmIDB4RkZGRikpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0MywgX19weXhfTDFfZXJyb3IpCi0g ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKLS0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9k LCBfX3B5eF9uX3NfQ0FQSV9NSU5PUiwgX19weXhfdF8yKSA8IDApIF9fUFlYX0VSUigwLCA0MSwg X19weXhfTDFfZXJyb3IpCi0rICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9z X0NBUElfTUlOT1IsIF9fcHl4X3RfMikgPCAwKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vy cm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Ci0gCi0tICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMKLSsgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0NQotICAqIF9DQVBJX01JTk9SID0gX0NBUElfVkVSU0lPTiAmIDB4 RkZGRgotICAqIAotICAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01BSk9SIG9y IF9DQVBJX01JTk9SIDwgX01JTl9DQVBJX01JTk9SOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0gICogICAgIHJhaXNlIEltcG9ydEVycm9yKAotICAqICAgICAgICAgImxpYm1wdiB2ZXJz aW9uIGlzIGluY29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJQotICAqLwotLSAg X19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19DQVBJX01BSk9S KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19D QVBJX01BSk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDUsIF9f cHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Ci0tICBfX1B5eF9HZXRN b2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhfbl9zX1JFUVVJUkVEX0NBUElfTUFKT1Ip OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0MywgX19weXhfTDFfZXJy b3IpCi0rICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhfbl9zX1JF UVVJUkVEX0NBUElfTUFKT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA0NSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIF9f cHl4X3RfNCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3RfMiwgX19weXhfdF8xLCBQeV9O RSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBf X1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF80ID0gUHlPYmplY3Rf UmljaENvbXBhcmUoX19weXhfdF8yLCBfX3B5eF90XzEsIFB5X05FKTsgX19QeXhfWEdPVFJFRihf X3B5eF90XzQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA0NSwgX19w eXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsK LSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotLSAgX19weXhfdF81 ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNCk7IGlmICh1bmxpa2VseShfX3B5eF90 XzUgPCAwKSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNSA9 IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoX19weXhfdF81 IDwgMCkpIF9fUFlYX0VSUigwLCA0NSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYo X19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLSAgIGlmICghX19weXhfdF81KSB7Ci0gICB9IGVs c2UgewotICAgICBfX3B5eF90XzMgPSBfX3B5eF90XzU7Ci0gICAgIGdvdG8gX19weXhfTDZfYm9v bF9iaW5vcF9kb25lOwotICAgfQotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzQsIF9fcHl4X25fc19DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzQsIF9fcHl4X25fc19DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzQpKSBfX1BZWF9FUlIoMCwgNDUsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNCk7Ci0tICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhf bl9zX01JTl9DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgNDMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5 eF90XzEsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDQ1LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOwotLSAgX19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdF80LCBf X3B5eF90XzEsIFB5X0xUKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzIpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0MywgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90 XzIgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF90XzQsIF9fcHl4X3RfMSwgUHlfTFQpOyBf X1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDAsIDQ1LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBf X3B5eF90XzQgPSAwOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 Ci0tICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8yKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfNSA8IDApKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlmICh1bmxp a2VseShfX3B5eF90XzUgPCAwKSkgX19QWVhfRVJSKDAsIDQ1LCBfX3B5eF9MMV9lcnJvcikKLSAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwotICAgX19weXhfdF8zID0g X19weXhfdF81OwotICAgX19weXhfTDZfYm9vbF9iaW5vcF9kb25lOjsKLSAgIGlmICh1bmxpa2Vs eShfX3B5eF90XzMpKSB7Ci0gCi0tICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo0NgotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDgKLSAgKiAgICAg cmFpc2UgSW1wb3J0RXJyb3IoCi0gICogICAgICAgICAibGlibXB2IHZlcnNpb24gaXMgaW5jb3Jy ZWN0LiBSZXF1aXJlZCAlZC4lZCBnb3QgJWQuJWQuIiAlCi0gICogICAgICAgICAgICAgKF9SRVFV SVJFRF9DQVBJX01BSk9SLCBfTUlOX0NBUElfTUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQSV9NSU5P UikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICApCi0gICogCi0gICovCi0t ICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfUkVRVUlS RURfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQ2 LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzIsIF9fcHl4X25fc19SRVFVSVJFRF9DQVBJX01BSk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgNDgsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8yKTsKLS0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzEsIF9f cHl4X25fc19NSU5fQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzEsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ4LCBfX3B5eF9MMV9lcnJvcikKLSAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7Ci0tICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80 LCBfX3B5eF9uX3NfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhf RVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKLSsgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzQsIF9fcHl4X25fc19DQVBJX01BSk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzQpKSBfX1BZWF9FUlIoMCwgNDgsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF80KTsKLS0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9f cHl4X25fc19DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgNDYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9f cHl4X3RfNiwgX19weXhfbl9zX0NBUElfTUlOT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA0OCwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOwotLSAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDYsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90 XzcgPSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIo MCwgNDgsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSAg ICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzIpOwotICAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfNywgMCwgX19weXhfdF8yKTsKLUBAIC0yNTQ2OSwzMiArMjU0NjksMzIgQEAgaWYgKCFfX1B5 eF9SZWZOYW5ueSkgewotICAgICBfX3B5eF90XzQgPSAwOwotICAgICBfX3B5eF90XzYgPSAwOwot IAotLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUKLSsgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3Ci0gICogaWYgX0NBUElfTUFKT1IgIT0gX1JF UVVJUkVEX0NBUElfTUFKT1Igb3IgX0NBUElfTUlOT1IgPCBfTUlOX0NBUElfTUlOT1I6Ci0gICog ICAgIHJhaXNlIEltcG9ydEVycm9yKAotICAqICAgICAgICAgImxpYm1wdiB2ZXJzaW9uIGlzIGlu Y29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0gICogICAgICAgICAgICAgKF9SRVFVSVJFRF9DQVBJX01BSk9SLCBfTUlOX0NB UElfTUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQSV9NSU5PUikKLSAgKiAgICAgKQotICAqLwotLSAg ICBfX3B5eF90XzYgPSBfX1B5eF9QeVN0cmluZ19Gb3JtYXQoX19weXhfa3Bfc19saWJtcHZfdmVy c2lvbl9pc19pbmNvcnJlY3RfUmVxdSwgX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzYpKSBfX1BZWF9FUlIoMCwgNDUsIF9fcHl4X0wxX2Vycm9yKQotKyAgICBfX3B5eF90XzYgPSBf X1B5eF9QeVN0cmluZ19Gb3JtYXQoX19weXhfa3Bfc19saWJtcHZfdmVyc2lvbl9pc19pbmNvcnJl Y3RfUmVxdSwgX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgNDcsIF9fcHl4X0wxX2Vycm9yKQotICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSAg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0gCi0tICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NAotKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDYKLSAgKiAKLSAgKiBpZiBfQ0FQSV9NQUpPUiAhPSBfUkVRVUlSRURf Q0FQSV9NQUpPUiBvciBfQ0FQSV9NSU5PUiA8IF9NSU5fQ0FQSV9NSU5PUjoKLSAgKiAgICAgcmFp c2UgSW1wb3J0RXJyb3IoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAg ICJsaWJtcHYgdmVyc2lvbiBpcyBpbmNvcnJlY3QuIFJlcXVpcmVkICVkLiVkIGdvdCAlZC4lZC4i ICUKLSAgKiAgICAgICAgICAgICAoX1JFUVVJUkVEX0NBUElfTUFKT1IsIF9NSU5fQ0FQSV9NSU5P UiwgX0NBUElfTUFKT1IsIF9DQVBJX01JTk9SKQotICAqLwotLSAgICBfX3B5eF90XzcgPSBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5fSW1wb3J0RXJyb3IsIF9fcHl4X3Rf Nik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ0LCBfX3B5eF9MMV9l cnJvcikKLSsgICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF9i dWlsdGluX0ltcG9ydEVycm9yLCBfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykp IF9fUFlYX0VSUigwLCA0NiwgX19weXhfTDFfZXJyb3IpCi0gICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzcpOwotICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAg ICAgX19QeXhfUmFpc2UoX19weXhfdF83LCAwLCAwLCAwKTsKLSAgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0tICAgIF9fUFlYX0VSUigwLCA0NCwgX19weXhfTDFf ZXJyb3IpCi0rICAgIF9fUFlYX0VSUigwLCA0NiwgX19weXhfTDFfZXJyb3IpCi0gCi0tICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MwotKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NDUKLSAgKiBfQ0FQSV9NSU5PUiA9IF9DQVBJX1ZFUlNJT04gJiAw eEZGRkYKLSAgKiAKLSAgKiBpZiBfQ0FQSV9NQUpPUiAhPSBfUkVRVUlSRURfQ0FQSV9NQUpPUiBv ciBfQ0FQSV9NSU5PUiA8IF9NSU5fQ0FQSV9NSU5PUjogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotQEAgLTI1NTAzLDMzICsyNTUwMywzMyBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7Ci0g ICovCi0gICB9Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTIKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NAotICAqICAgICB2b2lkIFB5X0lu aXRpYWxpemUoKQotICAqIAotICAqIF9pc19weTMgPSBzeXMudmVyc2lvbl9pbmZvID49ICgzLCkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqIF9zdHJkZWNfZXJyID0gInN1cnJvZ2F0 ZWVzY2FwZSIgaWYgX2lzX3B5MyBlbHNlICJzdHJpY3QiCi0gICogIyBtcHYgLT4gUHl0aG9uCi0g ICovCi0tICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNywgX19weXhfbl9zX3N5 cyk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDUyLCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5eF9uX3Nf c3lzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNTQsIF9fcHl4X0wx X2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0tICBfX3B5eF90XzYgPSBfX1B5 eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNywgX19weXhfbl9zX3ZlcnNpb25faW5mbyk7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDUyLCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF83LCBf X3B5eF9uX3NfdmVyc2lvbl9pbmZvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgNTQsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0g ICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLS0gIF9fcHl4X3RfNyA9 IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3RfNiwgX19weXhfdHVwbGVfXzE4LCBQeV9HRSk7 IF9fUHl4X1hHT1RSRUYoX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZ WF9FUlIoMCwgNTIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF83ID0gUHlPYmplY3RfUmlj aENvbXBhcmUoX19weXhfdF82LCBfX3B5eF90dXBsZV9fMTgsIFB5X0dFKTsgX19QeXhfWEdPVFJF RihfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA1NCwg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKLS0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfaXNfcHkzLCBfX3B5 eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDUyLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChQeURp Y3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfaXNfcHkzLCBfX3B5eF90XzcpIDwgMCkgX19Q WVhfRVJSKDAsIDU0LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90Xzcp OyBfX3B5eF90XzcgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjUzCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTUKLSAgKiAKLSAgKiBf aXNfcHkzID0gc3lzLnZlcnNpb25faW5mbyA+PSAoMywpCi0gICogX3N0cmRlY19lcnIgPSAic3Vy cm9nYXRlZXNjYXBlIiBpZiBfaXNfcHkzIGVsc2UgInN0cmljdCIgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotICAqICMgbXB2IC0+IFB5dGhvbgotICAqIGRlZiBfc3RyZGVjKHMpOgotICAq LwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19pc19w eTMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA1MywgX19weXhfTDFf ZXJyb3IpCi0rICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9z X2lzX3B5Myk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDU1LCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgX19weXhfdF8zID0g X19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNik7IGlmICh1bmxpa2VseShfX3B5eF90XzMg PCAwKSkgX19QWVhfRVJSKDAsIDUzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMyA9IF9f UHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwg MCkpIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19w eXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAgIGlmIChfX3B5eF90XzMpIHsKLSAgICAgX19QeXhf SU5DUkVGKF9fcHl4X25fc19zdXJyb2dhdGVlc2NhcGUpOwotQEAgLTI1NTM4LDM0ICsyNTUzOCwz NCBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7Ci0gICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9uX3Nf c3RyaWN0KTsKLSAgICAgX19weXhfdF83ID0gX19weXhfbl9zX3N0cmljdDsKLSAgIH0KLS0gIGlm IChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3Nfc3RyZGVjX2VyciwgX19weXhfdF83 KSA8IDApIF9fUFlYX0VSUigwLCA1MywgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoUHlEaWN0X1Nl dEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmRlY19lcnIsIF9fcHl4X3RfNykgPCAwKSBfX1BZ WF9FUlIoMCwgNTUsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7 IF9fcHl4X3RfNyA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTUKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NwotICAqIF9zdHJkZWNf ZXJyID0gInN1cnJvZ2F0ZWVzY2FwZSIgaWYgX2lzX3B5MyBlbHNlICJzdHJpY3QiCi0gICogIyBt cHYgLT4gUHl0aG9uCi0gICogZGVmIF9zdHJkZWMocyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSAgKiAgICAgdHJ5OgotICAqICAgICAgICAgcmV0dXJuIHMuZGVjb2RlKCJ1dGYtOCIs IF9zdHJkZWNfZXJyKQotICAqLwotLSAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25fTmV3RXgoJl9f cHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzFfc3RyZGVjLCBOVUxMLCBfX3B5eF9uX3Nf dmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIo MCwgNTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25fTmV3RXgo Jl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzFfc3RyZGVjLCBOVUxMLCBfX3B5eF9u X3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9F UlIoMCwgNTcsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0t ICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmRlYywgX19weXhfdF83 KSA8IDApIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoUHlEaWN0X1Nl dEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmRlYywgX19weXhfdF83KSA8IDApIF9fUFlYX0VS UigwLCA1NywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19w eXhfdF83ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2Mwot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1Ci0gICogCi0gICogIyBQeXRo b24gLT4gbXB2Ci0gICogZGVmIF9zdHJlbmMocyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSAgKiAgICAgdHJ5OgotICAqICAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCJ1dGYtOCIsIF9z dHJkZWNfZXJyKQotICAqLwotLSAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25fTmV3RXgoJl9fcHl4 X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzNfc3RyZW5jLCBOVUxMLCBfX3B5eF9uX3Nfdmlk Y3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwg NjMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25fTmV3RXgoJl9f cHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzNfc3RyZW5jLCBOVUxMLCBfX3B5eF9uX3Nf dmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIo MCwgNjUsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0tICBp ZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmVuYywgX19weXhfdF83KSA8 IDApIF9fUFlYX0VSUigwLCA2MywgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmVuYywgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigw LCA2NSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhf dF83ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MAotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyCi0gICogICAgICAgICByZXR1cm4g cwotICAqIAotICAqIFB5X0luaXRpYWxpemUoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci1AQCAtMjU1NzQsODgzICsyNTU3NCw4ODMgQEAgaWYgKCFfX1B5eF9SZWZOYW5ueSkgewotICAq LwotICAgUHlfSW5pdGlhbGl6ZSgpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjcyCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQKLSAgKiBQ eV9Jbml0aWFsaXplKCkKLSAgKiAKLSAgKiBjbGFzcyBFcnJvcnM6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKLSAgKiAgICAgIiIiU2V0IG9mIGtub3duIGVycm9yIGNvZGVzIGZyb20gTXB2 RXJyb3IgYW5kIEV2ZW50IHJlc3BvbnNlcy4KLSAgKiAKLSAgKi8KLS0gIF9fcHl4X3RfNyA9IF9f UHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9uX3NfRXJyb3JzLCBfX3B5eF9uX3NfRXJyb3JzLCAoUHlPYmplY3QgKikgTlVM TCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfa3Bfc19TZXRfb2Zfa25vd25f ZXJyb3JfY29kZXNfZnJvbV9NcCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJS KDAsIDcyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFz c1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3Nf RXJyb3JzLCBfX3B5eF9uX3NfRXJyb3JzLCAoUHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3Zp ZGN1dHRlcl9saWJzX21wdiwgX19weXhfa3Bfc19TZXRfb2Zfa25vd25fZXJyb3JfY29kZXNfZnJv bV9NcCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDc0LCBfX3B5eF9M MV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotIAotLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjc5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6ODEKLSAgKiAgICAgWW91IHNob3VsZCBoYW5kbGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQg ZXJyb3IgY29kZXMgbWF5IG5vdCBiZSBhbnkgb2YgdGhlc2UgdmFsdWVzLgotICAqICAgICAiIiIK LSAgKiAgICAgc3VjY2VzcyA9IE1QVl9FUlJPUl9TVUNDRVNTICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKLSAgKiAgICAgcXVldWVfZnVsbCA9IE1QVl9FUlJPUl9FVkVOVF9RVUVVRV9GVUxM Ci0gICogICAgIG5vbWVtID0gTVBWX0VSUk9SX05PTUVNCi0gICovCi0tICBfX3B5eF90XzYgPSBf X1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfU1VDQ0VTUyk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDc5LCBfX3B5eF9MMV9lcnJvcikKLSsg IF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9T VUNDRVNTKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODEsIF9fcHl4 X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc3VjY2VzcywgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCA3OSwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc3VjY2VzcywgX19weXhfdF82KSA8IDApIF9fUFlY X0VSUigwLCA4MSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsg X19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4 MAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgyCi0gICogICAgICIiIgot ICAqICAgICBzdWNjZXNzID0gTVBWX0VSUk9SX1NVQ0NFU1MKLSAgKiAgICAgcXVldWVfZnVsbCA9 IE1QVl9FUlJPUl9FVkVOVF9RVUVVRV9GVUxMICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSAgKiAgICAgbm9tZW0gPSBNUFZfRVJST1JfTk9NRU0KLSAgKiAgICAgdW5pbml0aWFsaXplZCA9 IE1QVl9FUlJPUl9VTklOSVRJQUxJWkVECi0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfRVZFTlRfUVVFVUVfRlVMTCk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgwLCBfX3B5eF9MMV9lcnJvcikKLSsg IF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9F VkVOVF9RVUVVRV9GVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg ODIsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcXVldWVfZnVsbCwgX19w eXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4MCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19Q eXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcXVldWVfZnVsbCwgX19weXhf dF82KSA8IDApIF9fUFlYX0VSUigwLCA4MiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNS RUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4MQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgz Ci0gICogICAgIHN1Y2Nlc3MgPSBNUFZfRVJST1JfU1VDQ0VTUwotICAqICAgICBxdWV1ZV9mdWxs ID0gTVBWX0VSUk9SX0VWRU5UX1FVRVVFX0ZVTEwKLSAgKiAgICAgbm9tZW0gPSBNUFZfRVJST1Jf Tk9NRU0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICB1bmluaXRpYWxpemVk ID0gTVBWX0VSUk9SX1VOSU5JVElBTElaRUQKLSAgKiAgICAgaW52YWxpZF9wYXJhbWV0ZXIgPSBN UFZfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9OT01FTSk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3Rf NiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9OT01FTSk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgzLCBfX3B5eF9MMV9lcnJvcikK LSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNz KF9fcHl4X3RfNywgX19weXhfbl9zX25vbWVtLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAs IDgxLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90 XzcsIF9fcHl4X25fc19ub21lbSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4MywgX19w eXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsK LSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MgotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg0Ci0gICogICAgIHF1ZXVlX2Z1bGwgPSBNUFZfRVJS T1JfRVZFTlRfUVVFVUVfRlVMTAotICAqICAgICBub21lbSA9IE1QVl9FUlJPUl9OT01FTQotICAq ICAgICB1bmluaXRpYWxpemVkID0gTVBWX0VSUk9SX1VOSU5JVElBTElaRUQgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotICAqICAgICBpbnZhbGlkX3BhcmFtZXRlciA9IE1QVl9FUlJPUl9J TlZBTElEX1BBUkFNRVRFUgotICAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfT1BUSU9OX05P VF9GT1VORAotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZf ZXJyb3IoTVBWX0VSUk9SX1VOSU5JVElBTElaRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA4MiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9Q eUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfVU5JTklUSUFMSVpFRCk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg0LCBfX3B5eF9MMV9lcnJvcikKLSAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9f cHl4X3RfNywgX19weXhfbl9zX3VuaW5pdGlhbGl6ZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9F UlIoMCwgODIsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9f cHl4X3RfNywgX19weXhfbl9zX3VuaW5pdGlhbGl6ZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9F UlIoMCwgODQsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9f cHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODMK LSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NQotICAqICAgICBub21lbSA9 IE1QVl9FUlJPUl9OT01FTQotICAqICAgICB1bmluaXRpYWxpemVkID0gTVBWX0VSUk9SX1VOSU5J VElBTElaRUQKLSAgKiAgICAgaW52YWxpZF9wYXJhbWV0ZXIgPSBNUFZfRVJST1JfSU5WQUxJRF9Q QVJBTUVURVIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICBub3RfZm91bmQg PSBNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORAotICAqICAgICBvcHRpb25fZm9ybWF0ID0gTVBW X0VSUk9SX09QVElPTl9GT1JNQVQKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUik7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f cHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9JTlZB TElEX1BBUkFNRVRFUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg1 LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2ludmFsaWRfcGFyYW1ldGVy LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDgzLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19pbnZhbGlkX3BhcmFt ZXRlciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4NSwgX19weXhfTDFfZXJyb3IpCi0g ICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjg2Ci0gICogICAgIHVuaW5pdGlhbGl6ZWQgPSBNUFZfRVJST1JfVU5JTklUSUFM SVpFRAotICAqICAgICBpbnZhbGlkX3BhcmFtZXRlciA9IE1QVl9FUlJPUl9JTlZBTElEX1BBUkFN RVRFUgotICAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgIG9wdGlvbl9mb3JtYXQgPSBNUFZfRVJS T1JfT1BUSU9OX0ZPUk1BVAotICAqICAgICBvcHRpb25fZXJyb3IgPSBNUFZfRVJST1JfT1BUSU9O X0VSUk9SCi0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l cnJvcihNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORCk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDg0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4 X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9PUFRJT05fTk9UX0ZPVU5EKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODYsIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xh c3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm90X2ZvdW5kLCBfX3B5eF90XzYpIDwgMCkgX19QWVhf RVJSKDAsIDg0LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc19ub3RfZm91bmQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIo MCwgODYsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4 X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODUKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NwotICAqICAgICBpbnZhbGlkX3Bh cmFtZXRlciA9IE1QVl9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUgotICAqICAgICBub3RfZm91bmQg PSBNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORAotICAqICAgICBvcHRpb25fZm9ybWF0ID0gTVBW X0VSUk9SX09QVElPTl9GT1JNQVQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAg ICBvcHRpb25fZXJyb3IgPSBNUFZfRVJST1JfT1BUSU9OX0VSUk9SCi0gICogICAgIG5vdF9mb3Vu ZCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9OT1RfRk9VTkQKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9f UHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9PUFRJT05fRk9STUFUKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODUsIF9fcHl4X0wxX2Vycm9y KQotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VS Uk9SX09QVElPTl9GT1JNQVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCA4NywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19vcHRpb25fZm9ybWF0 LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg1LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19vcHRpb25fZm9ybWF0 LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg3LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjg2Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6ODgKLSAgKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX09QVElPTl9OT1RfRk9VTkQK LSAgKiAgICAgb3B0aW9uX2Zvcm1hdCA9IE1QVl9FUlJPUl9PUFRJT05fRk9STUFUCi0gICogICAg IG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJT05fRVJST1IgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotICAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfUFJPUEVSVFlfTk9UX0ZP VU5ECi0gICogICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9GT1JNQVQK LSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1Q Vl9FUlJPUl9PUFRJT05fRVJST1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigwLCA4NiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9t X2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfT1BUSU9OX0VSUk9SKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODgsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBf X3B5eF9uX3Nfb3B0aW9uX2Vycm9yLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg2LCBf X3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9f cHl4X25fc19vcHRpb25fZXJyb3IsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODgsIF9f cHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7 Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODcKLSsgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OQotICAqICAgICBvcHRpb25fZm9ybWF0ID0gTVBW X0VSUk9SX09QVElPTl9GT1JNQVQKLSAgKiAgICAgb3B0aW9uX2Vycm9yID0gTVBWX0VSUk9SX09Q VElPTl9FUlJPUgotICAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfUFJPUEVSVFlfTk9UX0ZP VU5EICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgcHJvcGVydHlfZm9ybWF0 ID0gTVBWX0VSUk9SX1BST1BFUlRZX0ZPUk1BVAotICAqICAgICBwcm9wZXJ0eV91bmF2YWlsYWJs ZSA9IE1QVl9FUlJPUl9QUk9QRVJUWV9VTkFWQUlMQUJMRQotICAqLwotLSAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1BST1BFUlRZX05PVF9G T1VORCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg3LCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9y KE1QVl9FUlJPUl9QUk9QRVJUWV9OT1RfRk9VTkQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA4OSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19u b3RfZm91bmQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODcsIF9fcHl4X0wxX2Vycm9y KQotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX25vdF9m b3VuZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4OSwgX19weXhfTDFfZXJyb3IpCi0g ICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjkwCi0gICogICAgIG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJT05fRVJS T1IKLSAgKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX1BST1BFUlRZX05PVF9GT1VORAotICAq ICAgICBwcm9wZXJ0eV9mb3JtYXQgPSBNUFZfRVJST1JfUFJPUEVSVFlfRk9STUFUICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZf RVJST1JfUFJPUEVSVFlfVU5BVkFJTEFCTEUKLSAgKiAgICAgcHJvcGVydHlfZXJyb3IgPSBNUFZf RVJST1JfUFJPUEVSVFlfRVJST1IKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJUWV9GT1JNQVQpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4OCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfUFJPUEVS VFlfRk9STUFUKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTAsIF9f cHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcHJvcGVydHlfZm9ybWF0LCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg4LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV9mb3JtYXQsIF9f cHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTAsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6ODkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5MQotICAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfUFJPUEVSVFlfTk9UX0ZPVU5ECi0g ICogICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9GT1JNQVQKLSAgKiAg ICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1JfUFJPUEVSVFlfVU5BVkFJTEFCTEUg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICBwcm9wZXJ0eV9lcnJvciA9IE1Q Vl9FUlJPUl9QUk9QRVJUWV9FUlJPUgotICAqICAgICBjb21tYW5kX2Vycm9yID0gTVBWX0VSUk9S X0NPTU1BTkQKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2 X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJUWV9VTkFWQUlMQUJMRSk7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDg5LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJUWV9VTkFW QUlMQUJMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkxLCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1Nl dE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3Byb3BlcnR5X3VuYXZhaWxhYmxlLCBf X3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg5LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChf X1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV91bmF2YWls YWJsZSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MSwgX19weXhfTDFfZXJyb3IpCi0g ICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjkyCi0gICogICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9QUk9QRVJU WV9GT1JNQVQKLSAgKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1JfUFJPUEVS VFlfVU5BVkFJTEFCTEUKLSAgKiAgICAgcHJvcGVydHlfZXJyb3IgPSBNUFZfRVJST1JfUFJPUEVS VFlfRVJST1IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICBjb21tYW5kX2Vy cm9yID0gTVBWX0VSUk9SX0NPTU1BTkQKLSAgKiAgICAgbG9hZGluZ19mYWlsZWQgPSBNUFZfRVJS T1JfTE9BRElOR19GQUlMRUQKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21f ZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJUWV9FUlJPUik7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkwLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3Rf NiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJUWV9F UlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkyLCBfX3B5eF9M MV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5h bWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3Byb3BlcnR5X2Vycm9yLCBfX3B5eF90XzYp IDwgMCkgX19QWVhfRVJSKDAsIDkwLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXRO YW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV9lcnJvciwgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCA5MiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYo X19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzCi0g ICogICAgIHByb3BlcnR5X3VuYXZhaWxhYmxlID0gTVBWX0VSUk9SX1BST1BFUlRZX1VOQVZBSUxB QkxFCi0gICogICAgIHByb3BlcnR5X2Vycm9yID0gTVBWX0VSUk9SX1BST1BFUlRZX0VSUk9SCi0g ICogICAgIGNvbW1hbmRfZXJyb3IgPSBNUFZfRVJST1JfQ09NTUFORCAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0gICogICAgIGxvYWRpbmdfZmFpbGVkID0gTVBWX0VSUk9SX0xPQURJTkdf RkFJTEVECi0gICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX0FPX0lOSVRfRkFJTEVE Ci0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihN UFZfRVJST1JfQ09NTUFORCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDkxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51 bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9DT01NQU5EKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgOTMsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nf Y29tbWFuZF9lcnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MSwgX19weXhfTDFf ZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nf Y29tbWFuZF9lcnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MywgX19weXhfTDFf ZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MgotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjk0Ci0gICogICAgIHByb3BlcnR5X2Vycm9yID0gTVBWX0VSUk9S X1BST1BFUlRZX0VSUk9SCi0gICogICAgIGNvbW1hbmRfZXJyb3IgPSBNUFZfRVJST1JfQ09NTUFO RAotICAqICAgICBsb2FkaW5nX2ZhaWxlZCA9IE1QVl9FUlJPUl9MT0FESU5HX0ZBSUxFRCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VS Uk9SX0FPX0lOSVRfRkFJTEVECi0gICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZP X0lOSVRfRkFJTEVECi0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9lcnJvcihNUFZfRVJST1JfTE9BRElOR19GQUlMRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCA5MiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBf X1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfTE9BRElOR19GQUlMRUQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5NCwgX19weXhfTDFfZXJy b3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5D bGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19sb2FkaW5nX2ZhaWxlZCwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCA5MiwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfbG9hZGluZ19mYWlsZWQsIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgOTQsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTMKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NQotICAqICAg ICBjb21tYW5kX2Vycm9yID0gTVBWX0VSUk9SX0NPTU1BTkQKLSAgKiAgICAgbG9hZGluZ19mYWls ZWQgPSBNUFZfRVJST1JfTE9BRElOR19GQUlMRUQKLSAgKiAgICAgYW9faW5pdF9mYWlsZWQgPSBN UFZfRVJST1JfQU9fSU5JVF9GQUlMRUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAq ICAgICB2b19pbml0X2ZhaWxlZCA9IE1QVl9FUlJPUl9WT19JTklUX0ZBSUxFRAotICAqICAgICBu b3RoaW5nX3RvX3BsYXkgPSBNUFZfRVJST1JfTk9USElOR19UT19QTEFZCi0gICovCi0tICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfQU9fSU5J VF9GQUlMRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5MywgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l cnJvcihNUFZfRVJST1JfQU9fSU5JVF9GQUlMRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA5NSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19h b19pbml0X2ZhaWxlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MywgX19weXhfTDFf ZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nf YW9faW5pdF9mYWlsZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTUsIF9fcHl4X0wx X2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0t ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTQKLSsgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5NgotICAqICAgICBsb2FkaW5nX2ZhaWxlZCA9IE1QVl9FUlJP Ul9MT0FESU5HX0ZBSUxFRAotICAqICAgICBhb19pbml0X2ZhaWxlZCA9IE1QVl9FUlJPUl9BT19J TklUX0ZBSUxFRAotICAqICAgICB2b19pbml0X2ZhaWxlZCA9IE1QVl9FUlJPUl9WT19JTklUX0ZB SUxFRCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgIG5vdGhpbmdfdG9fcGxh eSA9IE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkKLSAgKiAgICAgdW5rbm93bl9mb3JtYXQgPSBN UFZfRVJST1JfVU5LTk9XTl9GT1JNQVQKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50 X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9WT19JTklUX0ZBSUxFRCk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDk0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f cHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9WT19J TklUX0ZBSUxFRCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDk2LCBf X3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3ZvX2luaXRfZmFpbGVkLCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDk0LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc192b19pbml0X2ZhaWxlZCwgX19w eXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5NiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5NQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojk3Ci0gICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX0FPX0lOSVRfRkFJTEVECi0g ICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lOSVRfRkFJTEVECi0gICogICAg IG5vdGhpbmdfdG9fcGxheSA9IE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotICAqICAgICB1bmtub3duX2Zvcm1hdCA9IE1QVl9FUlJPUl9VTktO T1dOX0ZPUk1BVAotICAqICAgICB1bnN1cHBvcnRlZCA9IE1QVl9FUlJPUl9VTlNVUFBPUlRFRAot ICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBW X0VSUk9SX05PVEhJTkdfVE9fUExBWSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDk1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5NywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5 eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90 XzcsIF9fcHl4X25fc19ub3RoaW5nX3RvX3BsYXksIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIo MCwgOTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNywgX19weXhfbl9zX25vdGhpbmdfdG9fcGxheSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VS UigwLCA5NywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19w eXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5Ngot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4Ci0gICogICAgIHZvX2luaXRf ZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lOSVRfRkFJTEVECi0gICogICAgIG5vdGhpbmdfdG9fcGxh eSA9IE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkKLSAgKiAgICAgdW5rbm93bl9mb3JtYXQgPSBN UFZfRVJST1JfVU5LTk9XTl9GT1JNQVQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAq ICAgICB1bnN1cHBvcnRlZCA9IE1QVl9FUlJPUl9VTlNVUFBPUlRFRAotICAqICAgICBub3RfaW1w bGVtZW50ZWQgPSBNUFZfRVJST1JfTk9UX0lNUExFTUVOVEVECi0gICovCi0tICBfX3B5eF90XzYg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfVU5LTk9XTl9GT1JN QVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5NiwgX19weXhfTDFf ZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihN UFZfRVJST1JfVU5LTk9XTl9GT1JNQVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCA5OCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK LS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc191bmtub3du X2Zvcm1hdCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5NiwgX19weXhfTDFfZXJyb3Ip Ci0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdW5rbm93 bl9mb3JtYXQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTgsIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTcKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5OQotICAqICAgICBub3RoaW5nX3RvX3BsYXkgPSBNUFZfRVJST1JfTk9U SElOR19UT19QTEFZCi0gICogICAgIHVua25vd25fZm9ybWF0ID0gTVBWX0VSUk9SX1VOS05PV05f Rk9STUFUCi0gICogICAgIHVuc3VwcG9ydGVkID0gTVBWX0VSUk9SX1VOU1VQUE9SVEVEICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgbm90X2ltcGxlbWVudGVkID0gTVBWX0VS Uk9SX05PVF9JTVBMRU1FTlRFRAotICAqIAotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJ bnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1VOU1VQUE9SVEVEKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTcsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19w eXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1VOU1VQ UE9SVEVEKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTksIF9fcHl4 X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdW5zdXBwb3J0ZWQsIF9fcHl4X3RfNikg PCAwKSBfX1BZWF9FUlIoMCwgOTcsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1NldE5h bWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3Vuc3VwcG9ydGVkLCBfX3B5eF90XzYpIDwg MCkgX19QWVhfRVJSKDAsIDk5LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk4Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAwCi0gICog ICAgIHVua25vd25fZm9ybWF0ID0gTVBWX0VSUk9SX1VOS05PV05fRk9STUFUCi0gICogICAgIHVu c3VwcG9ydGVkID0gTVBWX0VSUk9SX1VOU1VQUE9SVEVECi0gICogICAgIG5vdF9pbXBsZW1lbnRl ZCA9IE1QVl9FUlJPUl9OT1RfSU1QTEVNRU5URUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqIAotICAqIAotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVt X19tcHZfZXJyb3IoTVBWX0VSUk9SX05PVF9JTVBMRU1FTlRFRCk7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDk4LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9OT1RfSU1QTEVNRU5U RUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDAsIF9fcHl4X0wx X2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFt ZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm90X2ltcGxlbWVudGVkLCBfX3B5eF90XzYp IDwgMCkgX19QWVhfRVJSKDAsIDk4LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXRO YW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19ub3RfaW1wbGVtZW50ZWQsIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgMTAwLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjcyCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQK LSAgKiBQeV9Jbml0aWFsaXplKCkKLSAgKiAKLSAgKiBjbGFzcyBFcnJvcnM6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgIiIiU2V0IG9mIGtub3duIGVycm9yIGNvZGVzIGZy b20gTXB2RXJyb3IgYW5kIEV2ZW50IHJlc3BvbnNlcy4KLSAgKiAKLSAgKi8KLS0gIF9fcHl4X3Rf NiA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKCgoUHlPYmplY3QqKSZfX1B5eF9EZWZhdWx0Q2xhc3NU eXBlKSwgX19weXhfbl9zX0Vycm9ycywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3RfNywgTlVM TCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDcyLCBfX3B5 eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKCgoUHlPYmpl Y3QqKSZfX1B5eF9EZWZhdWx0Q2xhc3NUeXBlKSwgX19weXhfbl9zX0Vycm9ycywgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X3RfNywgTlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDc0LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19FcnJvcnMs IF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgNzIsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYg KFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19FcnJvcnMsIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgNzQsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhf dF83ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDEKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDMKLSAgKiAKLSAgKiAKLSAgKiBj bGFzcyBFdmVudHM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgIiIiU2V0 IG9mIGtub3duIHZhbHVlcyBmb3IgRXZlbnQgaWRzLgotICAqIAotICAqLwotLSAgX19weXhfdF83 ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZSgoUHlPYmplY3QgKikgTlVMTCwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X25fc19FdmVudHMsIF9fcHl4X25fc19FdmVudHMsIChQeU9iamVjdCAq KSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9rcF9zX1NldF9vZl9r bm93bl92YWx1ZXNfZm9yX0V2ZW50X2lkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZ WF9FUlIoMCwgMTAxLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNyA9IF9fUHl4X1B5M01l dGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9uX3NfRXZlbnRzLCBfX3B5eF9uX3NfRXZlbnRzLCAoUHlPYmplY3QgKikgTlVMTCwgX19weXhf bl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfa3Bfc19TZXRfb2Zfa25vd25fdmFsdWVzX2Zv cl9FdmVudF9pZCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEwMywg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSAKLS0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTAKLSAgKiAgICAgWW91IHNob3VsZCBoYW5kbGUgdGhlIHBvc3NpYmls aXR5IHRoYXQgZXZlbnQgaWRzIG1heSBub3QgYmUgYW55IG9mIHRoZXNlIHZhbHVlcy4KLSAgKiAg ICAgIiIiCi0gICogICAgIG5vbmUgPSBNUFZfRVZFTlRfTk9ORSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8Ci0gICogICAgIHNodXRkb3duID0gTVBWX0VWRU5UX1NIVVRET1dOCi0gICogICAg IGxvZ19tZXNzYWdlID0gTVBWX0VWRU5UX0xPR19NRVNTQUdFCi0gICovCi0tICBfX3B5eF90XzYg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfTk9ORSk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEwOCwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZf RVZFTlRfTk9ORSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExMCwg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19ub25lLCBfX3B5eF90XzYpIDwg MCkgX19QWVhfRVJSKDAsIDEwOCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFt ZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm9uZSwgX19weXhfdF82KSA8IDApIF9fUFlY X0VSUigwLCAxMTAsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7 IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExCi0gICogICAgICIi IgotICAqICAgICBub25lID0gTVBWX0VWRU5UX05PTkUKLSAgKiAgICAgc2h1dGRvd24gPSBNUFZf RVZFTlRfU0hVVERPV04gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICBsb2df bWVzc2FnZSA9IE1QVl9FVkVOVF9MT0dfTUVTU0FHRQotICAqICAgICBnZXRfcHJvcGVydHlfcmVw bHkgPSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCi0gICovCi0tICBfX3B5eF90XzYgPSBf X1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfU0hVVERPV04pOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDksIF9fcHl4X0wxX2Vycm9y KQotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBW X0VWRU5UX1NIVVRET1dOKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg MTExLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3NodXRkb3duLCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEwOSwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19Q eXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgMTExLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExMAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx MgotICAqICAgICBub25lID0gTVBWX0VWRU5UX05PTkUKLSAgKiAgICAgc2h1dGRvd24gPSBNUFZf RVZFTlRfU0hVVERPV04KLSAgKiAgICAgbG9nX21lc3NhZ2UgPSBNUFZfRVZFTlRfTE9HX01FU1NB R0UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICBnZXRfcHJvcGVydHlfcmVw bHkgPSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCi0gICogICAgIHNldF9wcm9wZXJ0eV9y ZXBseSA9IE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkKLSAgKi8KLS0gIF9fcHl4X3RfNiA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9MT0dfTUVTU0FH RSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExMCwgX19weXhfTDFf ZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9p ZChNUFZfRVZFTlRfTE9HX01FU1NBR0UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCAxMTIsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7 Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfbG9nX21l c3NhZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTEwLCBfX3B5eF9MMV9lcnJvcikK LSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19sb2dfbWVz c2FnZSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTIsIF9fcHl4X0wxX2Vycm9yKQot ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTEzCi0gICogICAgIHNodXRkb3duID0gTVBWX0VWRU5UX1NIVVRET1dOCi0g ICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5UX0xPR19NRVNTQUdFCi0gICogICAgIGdldF9w cm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotICAqICAgICBzZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRf U0VUX1BST1BFUlRZX1JFUExZCi0gICogICAgIGNvbW1hbmRfcmVwbHkgPSBNUFZfRVZFTlRfQ09N TUFORF9SRVBMWQotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfZXZlbnRfaWQoTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWSk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExMSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90 XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfR0VUX1BS T1BFUlRZX1JFUExZKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTEz LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2dldF9wcm9wZXJ0eV9yZXBs eSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTEsIF9fcHl4X0wxX2Vycm9yKQotKyAg aWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2dldF9wcm9wZXJ0 eV9yZXBseSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTMsIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEyCi0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTE0Ci0gICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5UX0xPR19N RVNTQUdFCi0gICogICAgIGdldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9HRVRfUFJPUEVS VFlfUkVQTFkKLSAgKiAgICAgc2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX1NFVF9QUk9Q RVJUWV9SRVBMWSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgIGNvbW1hbmRf cmVwbHkgPSBNUFZfRVZFTlRfQ09NTUFORF9SRVBMWQotICAqICAgICBzdGFydF9maWxlID0gTVBW X0VWRU5UX1NUQVJUX0ZJTEUKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21f ZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTIsIF9fcHl4X0wxX2Vycm9yKQotKyAg X19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5U X1NFVF9QUk9QRVJUWV9SRVBMWSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDExNCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0g IGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19zZXRfcHJvcGVy dHlfcmVwbHksIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTEyLCBfX3B5eF9MMV9lcnJv cikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19zZXRf cHJvcGVydHlfcmVwbHksIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE0LCBfX3B5eF9M MV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMwotKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNQotICAqICAgICBnZXRfcHJvcGVydHlfcmVwbHkgPSBN UFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCi0gICogICAgIHNldF9wcm9wZXJ0eV9yZXBseSA9 IE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkKLSAgKiAgICAgY29tbWFuZF9yZXBseSA9IE1Q Vl9FVkVOVF9DT01NQU5EX1JFUExZICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAg ICAgc3RhcnRfZmlsZSA9IE1QVl9FVkVOVF9TVEFSVF9GSUxFCi0gICogICAgIGVuZF9maWxlID0g TVBWX0VWRU5UX0VORF9GSUxFCi0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9t X2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfQ09NTUFORF9SRVBMWSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExMywgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfQ09N TUFORF9SRVBMWSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExNSwg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19jb21tYW5kX3JlcGx5LCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExMywgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19Q eXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfY29tbWFuZF9yZXBseSwgX19w eXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTUsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTE0Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTE2Ci0gICogICAgIHNldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9TRVRfUFJPUEVS VFlfUkVQTFkKLSAgKiAgICAgY29tbWFuZF9yZXBseSA9IE1QVl9FVkVOVF9DT01NQU5EX1JFUExZ Ci0gICogICAgIHN0YXJ0X2ZpbGUgPSBNUFZfRVZFTlRfU1RBUlRfRklMRSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8Ci0gICogICAgIGVuZF9maWxlID0gTVBWX0VWRU5UX0VORF9GSUxFCi0g ICogICAgIGZpbGVfbG9hZGVkID0gTVBWX0VWRU5UX0ZJTEVfTE9BREVECi0gICovCi0tICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfU1RB UlRfRklMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExNCwgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l dmVudF9pZChNUFZfRVZFTlRfU1RBUlRfRklMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDExNiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19z dGFydF9maWxlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNCwgX19weXhfTDFfZXJy b3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc3Rh cnRfZmlsZSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTYsIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTE3Ci0gICogICAgIGNvbW1hbmRfcmVwbHkgPSBNUFZfRVZFTlRfQ09N TUFORF9SRVBMWQotICAqICAgICBzdGFydF9maWxlID0gTVBWX0VWRU5UX1NUQVJUX0ZJTEUKLSAg KiAgICAgZW5kX2ZpbGUgPSBNUFZfRVZFTlRfRU5EX0ZJTEUgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotICAqICAgICBmaWxlX2xvYWRlZCA9IE1QVl9FVkVOVF9GSUxFX0xPQURFRAotICAq ICAgICAjIHRyYWNrc19jaGFuZ2VkID0gTVBWX0VWRU5UX1RSQUNLU19DSEFOR0VECi0gICovCi0t ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZF TlRfRU5EX0ZJTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTUs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfZXZlbnRfaWQoTVBWX0VWRU5UX0VORF9GSUxFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgMTE3LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9z X2VuZF9maWxlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNSwgX19weXhfTDFfZXJy b3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZW5k X2ZpbGUsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE3LCBfX3B5eF9MMV9lcnJvcikK LSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExOAotICAqICAgICBzdGFydF9maWxlID0gTVBWX0VWRU5UX1NUQVJUX0ZJ TEUKLSAgKiAgICAgZW5kX2ZpbGUgPSBNUFZfRVZFTlRfRU5EX0ZJTEUKLSAgKiAgICAgZmlsZV9s b2FkZWQgPSBNUFZfRVZFTlRfRklMRV9MT0FERUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqICAgICAjIHRyYWNrc19jaGFuZ2VkID0gTVBWX0VWRU5UX1RSQUNLU19DSEFOR0VECi0g ICogICAgICMgdHJhY2tzX3N3aXRjaGVkID0gTVBWX0VWRU5UX1RSQUNLX1NXSVRDSEVECi0gICov Ci0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZf RVZFTlRfRklMRV9MT0FERUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCAxMTYsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0ZJTEVfTE9BREVEKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywg X19weXhfbl9zX2ZpbGVfbG9hZGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNiwg X19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBf X3B5eF9uX3NfZmlsZV9sb2FkZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE4LCBf X3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExOQotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEyMQotICAqICAgICAjIHRyYWNrc19jaGFuZ2Vk ID0gTVBWX0VWRU5UX1RSQUNLU19DSEFOR0VECi0gICogICAgICMgdHJhY2tzX3N3aXRjaGVkID0g TVBWX0VWRU5UX1RSQUNLX1NXSVRDSEVECi0gICogICAgIGlkbGUgPSBNUFZfRVZFTlRfSURMRSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICMgcGF1c2UgPSBNUFZfRVZFTlRf UEFVU0UKLSAgKiAgICAgIyB1bnBhdXNlID0gTVBWX0VWRU5UX1VOUEFVU0UKLSAgKi8KLS0gIF9f cHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9J RExFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE5LCBfX3B5eF9M MV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50 X2lkKE1QVl9FVkVOVF9JRExFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgMTIxLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAg aWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2lkbGUsIF9fcHl4 X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE5LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19pZGxlLCBfX3B5eF90XzYpIDwg MCkgX19QWVhfRVJSKDAsIDEyMSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19w eXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMjIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjQKLSAg KiAgICAgIyBwYXVzZSA9IE1QVl9FVkVOVF9QQVVTRQotICAqICAgICAjIHVucGF1c2UgPSBNUFZf RVZFTlRfVU5QQVVTRQotICAqICAgICB0aWNrID0gTVBWX0VWRU5UX1RJQ0sgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAjIHNjcmlwdF9pbnB1dF9kaXNwYXRjaCA9IE1QVl9F VkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0gKLSAgKiAgICAgY2xpZW50X21lc3NhZ2UgPSBNUFZf RVZFTlRfQ0xJRU5UX01FU1NBR0UKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9USUNLKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgMTIyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9USUNLKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTI0LCBfX3B5eF9MMV9lcnJvcikK LSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNz KF9fcHl4X3RfNywgX19weXhfbl9zX3RpY2ssIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwg MTIyLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90 XzcsIF9fcHl4X25fc190aWNrLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyNCwgX19w eXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsK LSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjQKLSsgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjYKLSAgKiAgICAgdGljayA9IE1QVl9FVkVOVF9U SUNLCi0gICogICAgICMgc2NyaXB0X2lucHV0X2Rpc3BhdGNoID0gTVBWX0VWRU5UX1NDUklQVF9J TlBVVF9ESVNQQVRDSAotICAqICAgICBjbGllbnRfbWVzc2FnZSA9IE1QVl9FVkVOVF9DTElFTlRf TUVTU0FHRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgIHZpZGVvX3JlY29u ZmlnID0gTVBWX0VWRU5UX1ZJREVPX1JFQ09ORklHCi0gICogICAgIGF1ZGlvX3JlY29uZmlnID0g TVBWX0VWRU5UX0FVRElPX1JFQ09ORklHCi0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0UpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMjQsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VW RU5UX0NMSUVOVF9NRVNTQUdFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgMTI2LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAg aWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2NsaWVudF9tZXNz YWdlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyNCwgX19weXhfTDFfZXJyb3IpCi0r ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfY2xpZW50X21l c3NhZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTI2LCBfX3B5eF9MMV9lcnJvcikK LSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEyNQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEyNwotICAqICAgICAjIHNjcmlwdF9pbnB1dF9kaXNwYXRjaCA9IE1QVl9F VkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0gKLSAgKiAgICAgY2xpZW50X21lc3NhZ2UgPSBNUFZf RVZFTlRfQ0xJRU5UX01FU1NBR0UKLSAgKiAgICAgdmlkZW9fcmVjb25maWcgPSBNUFZfRVZFTlRf VklERU9fUkVDT05GSUcgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICBhdWRp b19yZWNvbmZpZyA9IE1QVl9FVkVOVF9BVURJT19SRUNPTkZJRwotICAqICAgICAjIG1ldGFkYXRh X3VwZGF0ZSA9IE1QVl9FVkVOVF9NRVRBREFUQV9VUERBVEUKLSAgKi8KLS0gIF9fcHl4X3RfNiA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9WSURFT19SRUNP TkZJRyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEyNSwgX19weXhf TDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVu dF9pZChNUFZfRVZFTlRfVklERU9fUkVDT05GSUcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCAxMjcsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNik7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nf dmlkZW9fcmVjb25maWcsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTI1LCBfX3B5eF9M MV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25f c192aWRlb19yZWNvbmZpZywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMjcsIF9fcHl4 X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0g Ci0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTI2Ci0rICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTI4Ci0gICogICAgIGNsaWVudF9tZXNzYWdlID0gTVBW X0VWRU5UX0NMSUVOVF9NRVNTQUdFCi0gICogICAgIHZpZGVvX3JlY29uZmlnID0gTVBWX0VWRU5U X1ZJREVPX1JFQ09ORklHCi0gICogICAgIGF1ZGlvX3JlY29uZmlnID0gTVBWX0VWRU5UX0FVRElP X1JFQ09ORklHICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgIyBtZXRhZGF0 YV91cGRhdGUgPSBNUFZfRVZFTlRfTUVUQURBVEFfVVBEQVRFCi0gICogICAgIHNlZWsgPSBNUFZf RVZFTlRfU0VFSwotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfZXZlbnRfaWQoTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgMTI2LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9BVURJT19SRUNP TkZJRyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEyOCwgX19weXhf TDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5eF9TZXRO YW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19hdWRpb19yZWNvbmZpZywgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCAxMjYsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1Nl dE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2F1ZGlvX3JlY29uZmlnLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyOCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNS RUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMjgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MzAKLSAgKiAgICAgYXVkaW9fcmVjb25maWcgPSBNUFZfRVZFTlRfQVVESU9fUkVDT05GSUcKLSAg KiAgICAgIyBtZXRhZGF0YV91cGRhdGUgPSBNUFZfRVZFTlRfTUVUQURBVEFfVVBEQVRFCi0gICog ICAgIHNlZWsgPSBNUFZfRVZFTlRfU0VFSyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0g ICogICAgIHBsYXliYWNrX3Jlc3RhcnQgPSBNUFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFSVAotICAq ICAgICBwcm9wZXJ0eV9jaGFuZ2UgPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFCi0gICovCi0t ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZF TlRfU0VFSyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEyOCwgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l dmVudF9pZChNUFZfRVZFTlRfU0VFSyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDEzMCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK LS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19zZWVrLCBf X3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyOCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2VlaywgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCAxMzAsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTI5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTMx Ci0gICogICAgICMgbWV0YWRhdGFfdXBkYXRlID0gTVBWX0VWRU5UX01FVEFEQVRBX1VQREFURQot ICAqICAgICBzZWVrID0gTVBWX0VWRU5UX1NFRUsKLSAgKiAgICAgcGxheWJhY2tfcmVzdGFydCA9 IE1QVl9FVkVOVF9QTEFZQkFDS19SRVNUQVJUICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK LSAgKiAgICAgcHJvcGVydHlfY2hhbmdlID0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRQotICAq ICAgICAjIGNoYXB0ZXJfY2hhbmdlID0gTVBWX0VWRU5UX0NIQVBURVJfQ0hBTkdFCi0gICovCi0t ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZF TlRfUExBWUJBQ0tfUkVTVEFSVCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDEyOSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9t X2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFSVCk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEzMSwgX19weXhfTDFfZXJyb3IpCi0gICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5 eF90XzcsIF9fcHl4X25fc19wbGF5YmFja19yZXN0YXJ0LCBfX3B5eF90XzYpIDwgMCkgX19QWVhf RVJSKDAsIDEyOSwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3Mo X19weXhfdF83LCBfX3B5eF9uX3NfcGxheWJhY2tfcmVzdGFydCwgX19weXhfdF82KSA8IDApIF9f UFlYX0VSUigwLCAxMzEsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Nik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTMwCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTMyCi0gICogICAg IHNlZWsgPSBNUFZfRVZFTlRfU0VFSwotICAqICAgICBwbGF5YmFja19yZXN0YXJ0ID0gTVBWX0VW RU5UX1BMQVlCQUNLX1JFU1RBUlQKLSAgKiAgICAgcHJvcGVydHlfY2hhbmdlID0gTVBWX0VWRU5U X1BST1BFUlRZX0NIQU5HRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICMg Y2hhcHRlcl9jaGFuZ2UgPSBNUFZfRVZFTlRfQ0hBUFRFUl9DSEFOR0UKLSAgKiAKLSAgKi8KLS0g IF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVO VF9QUk9QRVJUWV9DSEFOR0UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCAxMzAsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEzMiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5 eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90 XzcsIF9fcHl4X25fc19wcm9wZXJ0eV9jaGFuZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIo MCwgMTMwLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5 eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV9jaGFuZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9F UlIoMCwgMTMyLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBf X3B5eF90XzYgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEw MQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMwotICAqIAotICAqIAot ICAqIGNsYXNzIEV2ZW50czogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAi IiJTZXQgb2Yga25vd24gdmFsdWVzIGZvciBFdmVudCBpZHMuCi0gICogCi0gICovCi0tICBfX3B5 eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZSgoKFB5T2JqZWN0KikmX19QeXhfRGVmYXVsdENs YXNzVHlwZSksIF9fcHl4X25fc19FdmVudHMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90Xzcs IE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDEs IF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82ID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUoKChQ eU9iamVjdCopJl9fUHl4X0RlZmF1bHRDbGFzc1R5cGUpLCBfX3B5eF9uX3NfRXZlbnRzLCBfX3B5 eF9lbXB0eV90dXBsZSwgX19weXhfdF83LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgMTAzLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19F dmVudHMsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTAxLCBfX3B5eF9MMV9lcnJvcikK LSsgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfRXZlbnRzLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEwMywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNS RUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90Xzcp OyBfX3B5eF90XzcgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEzNAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEzNgotICAqIAotICAq IAotICAqIGNsYXNzIExvZ0xldmVsczogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAq ICAgICBubyA9IE1QVl9MT0dfTEVWRUxfTk9ORQotICAqICAgICBmYXRhbCA9IE1QVl9MT0dfTEVW RUxfRkFUQUwKLSAgKi8KLS0gIF9fcHl4X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUo KFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfTG9nTGV2ZWxz LCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCAoUHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1 dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0ICopIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NykpIF9fUFlYX0VSUigwLCAxMzQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF83ID0gX19Q eXhfUHkzTWV0YWNsYXNzUHJlcGFyZSgoUHlPYmplY3QgKikgTlVMTCwgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X25fc19Mb2dMZXZlbHMsIF9fcHl4X25fc19Mb2dMZXZlbHMsIChQeU9iamVjdCAq KSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7 IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEzNiwgX19weXhfTDFfZXJy b3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMzUKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMzcKLSAgKiAKLSAgKiBjbGFzcyBMb2dMZXZlbHM6Ci0gICogICAgIG5vID0gTVBWX0xPR19M RVZFTF9OT05FICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgZmF0YWwgPSBN UFZfTE9HX0xFVkVMX0ZBVEFMCi0gICogICAgIGVycm9yID0gTVBWX0xPR19MRVZFTF9FUlJPUgot ICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xldmVs KE1QVl9MT0dfTEVWRUxfTk9ORSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDEzNSwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9t X2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9OT05FKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM3LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywg X19weXhfbl9zX25vLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEzNSwgX19weXhfTDFf ZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nf bm8sIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTM3LCBfX3B5eF9MMV9lcnJvcikKLSAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEzNgotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEzOAotICAqIGNsYXNzIExvZ0xldmVsczoKLSAgKiAgICAgbm8gPSBNUFZfTE9H X0xFVkVMX05PTkUKLSAgKiAgICAgZmF0YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgZXJyb3IgPSBNUFZfTE9HX0xFVkVMX0VSUk9S Ci0gICogICAgIHdhcm4gPSBNUFZfTE9HX0xFVkVMX1dBUk4KLSAgKi8KLS0gIF9fcHl4X3RfNiA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX0ZBVEFM KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM2LCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZl bChNUFZfTE9HX0xFVkVMX0ZBVEFMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgMTM4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwot LSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2ZhdGFsLCBf X3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEzNiwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZmF0YWwsIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgMTM4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEzNwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEz OQotICAqICAgICBubyA9IE1QVl9MT0dfTEVWRUxfTk9ORQotICAqICAgICBmYXRhbCA9IE1QVl9M T0dfTEVWRUxfRkFUQUwKLSAgKiAgICAgZXJyb3IgPSBNUFZfTE9HX0xFVkVMX0VSUk9SICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgd2FybiA9IE1QVl9MT0dfTEVWRUxfV0FS TgotICAqICAgICBpbmZvID0gTVBWX0xPR19MRVZFTF9JTkZPCi0gICovCi0tICBfX3B5eF90XzYg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9FUlJP Uik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEzNywgX19weXhfTDFf ZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2 ZWwoTVBWX0xPR19MRVZFTF9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDEzOSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK LS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19lcnJvciwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzcsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2Vycm9yLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEzOSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNS RUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMzgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox NDAKLSAgKiAgICAgZmF0YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMCi0gICogICAgIGVycm9yID0g TVBWX0xPR19MRVZFTF9FUlJPUgotICAqICAgICB3YXJuID0gTVBWX0xPR19MRVZFTF9XQVJOICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgaW5mbyA9IE1QVl9MT0dfTEVWRUxf SU5GTwotICAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WCi0gICovCi0tICBfX3B5eF90XzYgPSBf X1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9XQVJOKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM4LCBfX3B5eF9MMV9lcnJv cikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChN UFZfTE9HX0xFVkVMX1dBUk4pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCAxNDAsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfd2FybiwgX19weXhf dF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzgsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3dhcm4sIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgMTQwLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEzOQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE0MQotICAq ICAgICBlcnJvciA9IE1QVl9MT0dfTEVWRUxfRVJST1IKLSAgKiAgICAgd2FybiA9IE1QVl9MT0df TEVWRUxfV0FSTgotICAqICAgICBpbmZvID0gTVBWX0xPR19MRVZFTF9JTkZPICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgdiA9IE1QVl9MT0dfTEVWRUxfVgotICAqICAgICBk ZWJ1ZyA9IE1QVl9MT0dfTEVWRUxfREVCVUcKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX0lORk8pOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzksIF9fcHl4X0wxX2Vycm9yKQotKyAg X19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xldmVsKE1QVl9MT0df TEVWRUxfSU5GTyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE0MSwg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19pbmZvLCBfX3B5eF90XzYpIDwg MCkgX19QWVhfRVJSKDAsIDEzOSwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFt ZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfaW5mbywgX19weXhfdF82KSA8IDApIF9fUFlY X0VSUigwLCAxNDEsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7 IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTQwCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTQyCi0gICogICAgIHdh cm4gPSBNUFZfTE9HX0xFVkVMX1dBUk4KLSAgKiAgICAgaW5mbyA9IE1QVl9MT0dfTEVWRUxfSU5G TwotICAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKLSAgKiAgICAgZGVidWcgPSBNUFZfTE9HX0xFVkVMX0RFQlVHCi0gICogICAgIHRyYWNlID0g TVBWX0xPR19MRVZFTF9UUkFDRQotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfbG9nX2xldmVsKE1QVl9MT0dfTEVWRUxfVik7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDE0MCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9WKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTQyLCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNs YXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3YsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwg MTQwLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90 XzcsIF9fcHl4X25fc192LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE0MiwgX19weXhf TDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLSAK LS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDEKLSsgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDMKLSAgKiAgICAgaW5mbyA9IE1QVl9MT0dfTEVWRUxf SU5GTwotICAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WCi0gICogICAgIGRlYnVnID0gTVBWX0xP R19MRVZFTF9ERUJVRyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgIHRyYWNl ID0gTVBWX0xPR19MRVZFTF9UUkFDRQotICAqIAotICAqLwotLSAgX19weXhfdF82ID0gX19QeXhf UHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xldmVsKE1QVl9MT0dfTEVWRUxfREVCVUcpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNDEsIF9fcHl4X0wxX2Vycm9yKQot KyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xldmVsKE1QVl9M T0dfTEVWRUxfREVCVUcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAx NDMsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZGVidWcsIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgMTQxLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9T ZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19kZWJ1ZywgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCAxNDMsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTQyCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTQ0Ci0gICog ICAgIHYgPSBNUFZfTE9HX0xFVkVMX1YKLSAgKiAgICAgZGVidWcgPSBNUFZfTE9HX0xFVkVMX0RF QlVHCi0gICogICAgIHRyYWNlID0gTVBWX0xPR19MRVZFTF9UUkFDRSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0gICogCi0gICogCi0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9UUkFDRSk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE0MiwgX19weXhfTDFfZXJyb3IpCi0rICBf X3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19M RVZFTF9UUkFDRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE0NCwg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc190cmFjZSwgX19weXhfdF82KSA8 IDApIF9fUFlYX0VSUigwLCAxNDIsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1NldE5h bWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3RyYWNlLCBfX3B5eF90XzYpIDwgMCkgX19Q WVhfRVJSKDAsIDE0NCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMzQKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzYKLSAgKiAKLSAg KiAKLSAgKiBjbGFzcyBMb2dMZXZlbHM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAg KiAgICAgbm8gPSBNUFZfTE9HX0xFVkVMX05PTkUKLSAgKiAgICAgZmF0YWwgPSBNUFZfTE9HX0xF VkVMX0ZBVEFMCi0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZSgoKFB5 T2JqZWN0KikmX19QeXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19Mb2dMZXZlbHMsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90XzcsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzQsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82 ID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUoKChQeU9iamVjdCopJl9fUHl4X0RlZmF1bHRDbGFzc1R5 cGUpLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdF83LCBO VUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM2LCBf X3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKFB5RGlj dF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19Mb2dMZXZlbHMsIF9fcHl4X3RfNikgPCAwKSBf X1BZWF9FUlIoMCwgMTM0LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChQeURpY3RfU2V0SXRlbShf X3B5eF9kLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAs IDEzNiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOwotIAot LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE0NQotKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjE0NwotICAqIAotICAqIAotICAqIGNsYXNzIEVPRlJlYXNv bnM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgIiIiS25vd24gcG9zc2li bGUgdmFsdWVzIGZvciBFbmRPZkZpbGVSZWFjaGVkIHJlYXNvbi4KLSAgKiAKLSAgKi8KLS0gIF9f cHl4X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfRU9GUmVhc29ucywgX19weXhfbl9zX0VPRlJlYXNv bnMsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5 eF9rcF9zX0tub3duX3Bvc3NpYmxlX3ZhbHVlc19mb3JfRW5kT2ZGKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMTQ1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3Rf NyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF9uX3NfRU9GUmVhc29ucywgX19weXhfbl9zX0VPRlJlYXNvbnMsIChQ eU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9rcF9z X0tub3duX3Bvc3NpYmxlX3ZhbHVlc19mb3JfRW5kT2ZGKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzcpKSBfX1BZWF9FUlIoMCwgMTQ3LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE1MAot KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE1MgotICAqICAgICBZb3Ugc2hv dWxkIGhhbmRsZSB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGUgcmVhc29uIG1heSBub3QgYmUgYW55 IG9mIHRoZXNlIHZhbHVlcy4KLSAgKiAgICAgIiIiCi0gICogICAgIGVvZiA9IE1QVl9FTkRfRklM RV9SRUFTT05fRU9GICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgYWJvcnRl ZCA9IE1QVl9FTkRfRklMRV9SRUFTT05fU1RPUAotICAqICAgICBxdWl0ID0gTVBWX0VORF9GSUxF X1JFQVNPTl9RVUlUCi0gICovCi0tICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9lbmRfZmlsZV9yZWFzb24oTVBWX0VORF9GSUxFX1JFQVNPTl9FT0YpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNTAsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19w eXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5kX2ZpbGVfcmVhc29uKE1QVl9F TkRfRklMRV9SRUFTT05fRU9GKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgMTUyLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAg aWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2VvZiwgX19weXhf dF82KSA8IDApIF9fUFlYX0VSUigwLCAxNTAsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2VvZiwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCAxNTIsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTUxCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTUzCi0gICog ICAgICIiIgotICAqICAgICBlb2YgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX0VPRgotICAqICAgICBh Ym9ydGVkID0gTVBWX0VORF9GSUxFX1JFQVNPTl9TVE9QICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKLSAgKiAgICAgcXVpdCA9IE1QVl9FTkRfRklMRV9SRUFTT05fUVVJVAotICAqICAgICBl cnJvciA9IE1QVl9FTkRfRklMRV9SRUFTT05fRVJST1IKLSAgKi8KLS0gIF9fcHl4X3RfNiA9IF9f UHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2VuZF9maWxlX3JlYXNvbihNUFZfRU5EX0ZJTEVfUkVB U09OX1NUT1ApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNTEsIF9f cHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZf ZW5kX2ZpbGVfcmVhc29uKE1QVl9FTkRfRklMRV9SRUFTT05fU1RPUCk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE1MywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9H T1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90Xzcs IF9fcHl4X25fc19hYm9ydGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE1MSwgX19w eXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfYWJvcnRlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxNTMsIF9fcHl4X0wx X2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gCi0t ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTUyCi0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTU0Ci0gICogICAgIGVvZiA9IE1QVl9FTkRfRklMRV9SRUFT T05fRU9GCi0gICogICAgIGFib3J0ZWQgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX1NUT1AKLSAgKiAg ICAgcXVpdCA9IE1QVl9FTkRfRklMRV9SRUFTT05fUVVJVCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0gICogICAgIGVycm9yID0gTVBWX0VORF9GSUxFX1JFQVNPTl9FUlJPUgotICAqIAot ICAqLwotLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5kX2ZpbGVf cmVhc29uKE1QVl9FTkRfRklMRV9SRUFTT05fUVVJVCk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDE1MiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9lbmRfZmlsZV9yZWFzb24oTVBWX0VORF9GSUxFX1JFQVNP Tl9RVUlUKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTU0LCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgaWYgKF9fUHl4X1Nl dE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3F1aXQsIF9fcHl4X3RfNikgPCAwKSBf X1BZWF9FUlIoMCwgMTUyLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5D bGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19xdWl0LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJS KDAsIDE1NCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19w eXhfdF82ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNTMK LSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNTUKLSAgKiAgICAgYWJvcnRl ZCA9IE1QVl9FTkRfRklMRV9SRUFTT05fU1RPUAotICAqICAgICBxdWl0ID0gTVBWX0VORF9GSUxF X1JFQVNPTl9RVUlUCi0gICogICAgIGVycm9yID0gTVBWX0VORF9GSUxFX1JFQVNPTl9FUlJPUiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0gICogCi0gICovCi0tICBfX3B5eF90 XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lbmRfZmlsZV9yZWFzb24oTVBWX0VORF9G SUxFX1JFQVNPTl9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDE1MywgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2Vu dW1fX21wdl9lbmRfZmlsZV9yZWFzb24oTVBWX0VORF9GSUxFX1JFQVNPTl9FUlJPUik7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE1NSwgX19weXhfTDFfZXJyb3IpCi0g ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc19lcnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAx NTMsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX2Vycm9yLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE1NSwgX19w eXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsK LSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDUKLSsgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDcKLSAgKiAKLSAgKiAKLSAgKiBjbGFzcyBFT0ZS ZWFzb25zOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICIiIktub3duIHBv c3NpYmxlIHZhbHVlcyBmb3IgRW5kT2ZGaWxlUmVhY2hlZCByZWFzb24uCi0gICogCi0gICovCi0t ICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZSgoKFB5T2JqZWN0KikmX19QeXhfRGVm YXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19FT0ZSZWFzb25zLCBfX3B5eF9lbXB0eV90dXBsZSwg X19weXhfdF83LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgMTQ1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNiA9IF9fUHl4X1B5M0NsYXNz Q3JlYXRlKCgoUHlPYmplY3QqKSZfX1B5eF9EZWZhdWx0Q2xhc3NUeXBlKSwgX19weXhfbl9zX0VP RlJlYXNvbnMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90XzcsIE5VTEwsIDAsIDEpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNDcsIF9fcHl4X0wxX2Vycm9yKQot ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Ci0tICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhf ZCwgX19weXhfbl9zX0VPRlJlYXNvbnMsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTQ1 LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9u X3NfRU9GUmVhc29ucywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxNDcsIF9fcHl4X0wx X2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gICBf X1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTgKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozMjAKLSAgKiAKLSAgKiAKLSAgKiBkZWYgX2Vycm9ycyhmbik6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgotICAqICAg ICAgICAgdiA9IGZuKCprLCAqKmt3KQotICAqLwotLSAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25f TmV3RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVfZXJyb3JzLCBOVUxMLCBf X3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBf X1BZWF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNyA9IFB5Q0Z1bmN0 aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81X2Vycm9ycywgTlVM TCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlmICh1bmxpa2VseSghX19weXhfdF83 KSkgX19QWVhfRVJSKDAsIDMyMCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19w eXhfdF83KTsKLS0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfZXJyb3Jz LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDMxOCwgX19weXhfTDFfZXJyb3IpCi0rICBp ZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX2Vycm9ycywgX19weXhfdF83KSA8 IDApIF9fUFlYX0VSUigwLCAzMjAsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9f cHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzI2Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI4Ci0g ICogCi0gICogCi0gICogY2xhc3MgTVBWRXJyb3IoRXhjZXB0aW9uKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAotICAqICAgICBjb2RlID0gTm9uZQotICAqIAotICAqLwotLSAgX19weXhf dF83ID0gUHlUdXBsZV9OZXcoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJS KDAsIDMyNiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygxKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMzI4LCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotICAgX19QeXhfSU5DUkVGKCgoUHlPYmpl Y3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOwotICAgX19QeXhf R0lWRVJFRigoKFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0aW9uKVsw XSkpKTsKLSAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCAoKFB5T2JqZWN0ICopKCYo KFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0aW9uKVswXSkpKTsKLS0gIF9fcHl4X3RfNiA9IF9f UHl4X0NhbGN1bGF0ZU1ldGFjbGFzcyhOVUxMLCBfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCAzMjYsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF82 ID0gX19QeXhfQ2FsY3VsYXRlTWV0YWNsYXNzKE5VTEwsIF9fcHl4X3RfNyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDMyOCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5 eF9HT1RSRUYoX19weXhfdF82KTsKLS0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5M01ldGFjbGFzc1By ZXBhcmUoX19weXhfdF82LCBfX3B5eF90XzcsIF9fcHl4X25fc19NUFZFcnJvciwgX19weXhfbl9z X01QVkVycm9yLCAoUHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21w diwgKFB5T2JqZWN0ICopIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VS UigwLCAzMjYsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF80ID0gX19QeXhfUHkzTWV0YWNs YXNzUHJlcGFyZShfX3B5eF90XzYsIF9fcHl4X3RfNywgX19weXhfbl9zX01QVkVycm9yLCBfX3B5 eF9uX3NfTVBWRXJyb3IsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xp YnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDAsIDMyOCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjcKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjkKLSAgKiAKLSAgKiBjbGFzcyBNUFZFcnJv cihFeGNlcHRpb24pOgotICAqICAgICBjb2RlID0gTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0gICogCi0gICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKToKLSAgKi8KLS0gIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19jb2RlLCBQeV9Ob25l KSA8IDApIF9fUFlYX0VSUigwLCAzMjcsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1Nl dE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX2NvZGUsIFB5X05vbmUpIDwgMCkgX19Q WVhfRVJSKDAsIDMyOSwgX19weXhfTDFfZXJyb3IpCi0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzI5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzMxCi0gICogICAgIGNvZGUgPSBOb25lCi0gICogCi0gICogICAgIGRlZiBfX2luaXRfXyhzZWxm LCBlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgc2VsZi5jb2Rl ID0gZQotICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYwotICAqLwotLSAgX19weXhf dF8xID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18z bXB2XzhNUFZFcnJvcl8xX19pbml0X18sIDAsIF9fcHl4X25fc19NUFZFcnJvcl9fX2luaXQsIE5V TEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilf X3B5eF9jb2Rlb2JqX18yNikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCAzMjksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF8xID0gX19QeXhfQ3lGdW5jdGlvbl9O ZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl8xX19pbml0X18s IDAsIF9fcHl4X25fc19NUFZFcnJvcl9fX2luaXQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJf bGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18yNikpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMzEsIF9fcHl4X0wxX2Vycm9yKQot ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3Mo X19weXhfdF80LCBfX3B5eF9uX3NfaW5pdCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAz MjksIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NCwgX19weXhfbl9zX2luaXQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMzMxLCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwot IAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyNgotKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyOAotICAqIAotICAqIAotICAqIGNsYXNzIE1QVkVy cm9yKEV4Y2VwdGlvbik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgY29k ZSA9IE5vbmUKLSAgKiAKLSAgKi8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRl KF9fcHl4X3RfNiwgX19weXhfbl9zX01QVkVycm9yLCBfX3B5eF90XzcsIF9fcHl4X3RfNCwgTlVM TCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMyNiwgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZShfX3B5eF90 XzYsIF9fcHl4X25fc19NUFZFcnJvciwgX19weXhfdF83LCBfX3B5eF90XzQsIE5VTEwsIDAsIDEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMjgsIF9fcHl4X0wxX2Vy cm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBpZiAoUHlEaWN0X1NldEl0ZW0o X19weXhfZCwgX19weXhfbl9zX01QVkVycm9yLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAs IDMyNiwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19w eXhfbl9zX01QVkVycm9yLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDMyOCwgX19weXhf TDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsg X19weXhfdF83ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz NDAKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDIKLSAgKiAgICAgICAg IEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBlKQotICAqIAotICAqIGNsYXNzIFB5TVBWRXJyb3Io RXhjZXB0aW9uKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICBwYXNzCi0g ICogCi0gICovCi0tICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMzQwLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3Rf NyA9IFB5VHVwbGVfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigw LCAzNDIsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0gICBf X1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKSgmKChQeVR5cGVPYmplY3QqKVB5RXhjX0V4Y2VwdGlv bilbMF0pKSk7Ci0gICBfX1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0 KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOwotICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90Xzcs IDAsICgoUHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkp OwotLSAgX19weXhfdF82ID0gX19QeXhfQ2FsY3VsYXRlTWV0YWNsYXNzKE5VTEwsIF9fcHl4X3Rf Nyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFf ZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9DYWxjdWxhdGVNZXRhY2xhc3MoTlVMTCwgX19w eXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMzQyLCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotLSAgX19weXhfdF80ID0g X19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzYsIF9fcHl4X3RfNywgX19weXhfbl9z X1B5TVBWRXJyb3IsIF9fcHl4X25fc19QeU1QVkVycm9yLCAoUHlPYmplY3QgKikgTlVMTCwgX19w eXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0ICopIE5VTEwpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNDAsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19w eXhfdF80ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzYsIF9fcHl4X3RfNywg X19weXhfbl9zX1B5TVBWRXJyb3IsIF9fcHl4X25fc19QeU1QVkVycm9yLCAoUHlPYmplY3QgKikg TlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0ICopIE5VTEwpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNDIsIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tICBfX3B5eF90XzEgPSBfX1B5eF9QeTND bGFzc0NyZWF0ZShfX3B5eF90XzYsIF9fcHl4X25fc19QeU1QVkVycm9yLCBfX3B5eF90XzcsIF9f cHl4X3RfNCwgTlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSBfX1B5eF9QeTNDbGFzc0Ny ZWF0ZShfX3B5eF90XzYsIF9fcHl4X25fc19QeU1QVkVycm9yLCBfX3B5eF90XzcsIF9fcHl4X3Rf NCwgTlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDM0 MiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKLS0gIGlmIChQ eURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfUHlNUFZFcnJvciwgX19weXhfdF8xKSA8 IDApIF9fUFlYX0VSUigwLCAzNDAsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKFB5RGljdF9TZXRJ dGVtKF9fcHl4X2QsIF9fcHl4X25fc19QeU1QVkVycm9yLCBfX3B5eF90XzEpIDwgMCkgX19QWVhf RVJSKDAsIDM0MiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAw OwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gICBfX1B5eF9E RUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjozNDMKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozNDUKLSAgKiAgICAgcGFzcwotICAqIAotICAqIGNkZWYgX2NhbGxiYWNrcyA9IGRpY3QoKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogY2RlZiBfcmVwbHlfdXNlcmRhdGFzID0g ZGljdCgpCi0gICogCi0gICovCi0tICBfX3B5eF90XzcgPSBfX1B5eF9QeURpY3RfTmV3UHJlc2l6 ZWQoMCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDM0MywgX19weXhf TDFfZXJyb3IpCi0rICBfX3B5eF90XzcgPSBfX1B5eF9QeURpY3RfTmV3UHJlc2l6ZWQoMCk7IGlm ICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDM0NSwgX19weXhfTDFfZXJyb3Ip Ci0gICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSAgIF9fUHl4X1hHT1RSRUYoX19weXhfdl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NhbGxiYWNrcyk7Ci0gICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3RfNyk7Ci0gICBf X1B5eF9HSVZFUkVGKF9fcHl4X3RfNyk7Ci0gICBfX3B5eF90XzcgPSAwOwotIAotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjM0NgotICAqIAotICAqIGNkZWYgX2NhbGxiYWNrcyA9IGRpY3QoKQotICAq IGNkZWYgX3JlcGx5X3VzZXJkYXRhcyA9IGRpY3QoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8Ci0gICogCi0gICogY2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KToKLSAgKi8KLS0gIF9f cHl4X3RfNyA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMCwgMzQ0LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNyA9 IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBf X1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzcpOwotICAgX19QeXhfWEdPVFJFRihfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVw bHlfdXNlcmRhdGFzKTsKLSAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcywgX19weXhfdF83KTsKLSAgIF9fUHl4X0dJVkVSRUYo X19weXhfdF83KTsKLSAgIF9fcHl4X3RfNyA9IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzQ2Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzQ4Ci0gICogY2RlZiBfcmVwbHlfdXNlcmRhdGFzID0gZGljdCgpCi0gICogCi0gICogY2xhc3Mg X1JlcGx5VXNlckRhdGEob2JqZWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAq ICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6Ci0gICogICAgICAgICBzZWxmLmNvdW50ZXIg PSAwCi0gICovCi0tICBfX3B5eF90XzcgPSBfX1B5eF9DYWxjdWxhdGVNZXRhY2xhc3MoTlVMTCwg X19weXhfdHVwbGVfXzI3KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwg MzQ2LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNyA9IF9fUHl4X0NhbGN1bGF0ZU1ldGFj bGFzcyhOVUxMLCBfX3B5eF90dXBsZV9fMjcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9f UFlYX0VSUigwLCAzNDgsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nyk7Ci0tICBfX3B5eF90XzYgPSBfX1B5eF9QeTNNZXRhY2xhc3NQcmVwYXJlKF9fcHl4X3RfNywg X19weXhfdHVwbGVfXzI3LCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSwgX19weXhfbl9zX1JlcGx5 VXNlckRhdGEsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2 LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDM0NiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzYgPSBfX1B5eF9QeTNNZXRhY2xh c3NQcmVwYXJlKF9fcHl4X3RfNywgX19weXhfdHVwbGVfXzI3LCBfX3B5eF9uX3NfUmVwbHlVc2Vy RGF0YSwgX19weXhfbl9zX1JlcGx5VXNlckRhdGEsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9u X3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDM0OCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9H T1RSRUYoX19weXhfdF82KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozNDcKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDkKLSAgKiAKLSAg KiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOgotICAqICAgICBkZWYgX19pbml0X18oc2Vs ZiwgZGF0YSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIHNlbGYu Y291bnRlciA9IDAKLSAgKiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKLSAgKi8KLS0gIF9fcHl4 X3RfNCA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNF9SZXBseVVzZXJEYXRhXzFfX2luaXRfXywgMCwgX19weXhfbl9zX1JlcGx5VXNlckRh dGFfX19pbml0LCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAo KFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMjkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNCA9IF9fUHl4 X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBs eVVzZXJEYXRhXzFfX2luaXRfXywgMCwgX19weXhfbl9zX1JlcGx5VXNlckRhdGFfX19pbml0LCBO VUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICop X19weXhfY29kZW9ial9fMjkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIo MCwgMzQ5LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotLSAg aWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNiwgX19weXhfbl9zX2luaXQsIF9fcHl4 X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzYsIF9fcHl4X25fc19pbml0LCBfX3B5eF90XzQpIDwg MCkgX19QWVhfRVJSKDAsIDM0OSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19w eXhfdF80KTsgX19weXhfdF80ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNTIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTQKLSAg KiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBGYWxzZQotICAqIAotICAqICAgICBkZWYgYWRkKHNl bGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAgICBzZWxmLmNvdW50 ZXIgKz0gMQotICAqIAotICAqLwotLSAgX19weXhfdF80ID0gX19QeXhfQ3lGdW5jdGlvbl9OZXco Jl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfM2FkZCwg MCwgX19weXhfbl9zX1JlcGx5VXNlckRhdGFfYWRkLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVy X2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMzEpKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzUyLCBfX3B5eF9MMV9lcnJvcikK LSsgIF9fcHl4X3RfNCA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzNhZGQsIDAsIF9fcHl4X25fc19SZXBseVVz ZXJEYXRhX2FkZCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwg KChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzMxKSk7IGlmICh1bmxpa2VseSghX19weXhfdF80 KSkgX19QWVhfRVJSKDAsIDM1NCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19w eXhfdF80KTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzYsIF9fcHl4X25f c19hZGQsIF9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzUyLCBfX3B5eF9MMV9lcnJvcikK LSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzYsIF9fcHl4X25fc19hZGQsIF9f cHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzU0LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotIAotLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjM1NQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjM1NwotICAqICAgICAgICAgc2VsZi5jb3VudGVyICs9IDEKLSAgKiAKLSAgKiAgICAgZGVm IHJlbW92ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAg c2VsZi5jb3VudGVyIC09IDEKLSAgKiAKLSAgKi8KLS0gIF9fcHl4X3RfNCA9IF9fUHl4X0N5RnVu Y3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJE YXRhXzVyZW1vdmUsIDAsIF9fcHl4X25fc19SZXBseVVzZXJEYXRhX3JlbW92ZSwgTlVMTCwgX19w eXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2Nv ZGVvYmpfXzMzKSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDM1NSwg X19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzQgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19w eXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV81cmVtb3ZlLCAw LCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YV9yZW1vdmUsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0 ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18zMykpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNTcsIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xh c3MoX19weXhfdF82LCBfX3B5eF9uX3NfcmVtb3ZlLCBfX3B5eF90XzQpIDwgMCkgX19QWVhfRVJS KDAsIDM1NSwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19w eXhfdF82LCBfX3B5eF9uX3NfcmVtb3ZlLCBfX3B5eF90XzQpIDwgMCkgX19QWVhfRVJSKDAsIDM1 NywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80 ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDYKLSsgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDgKLSAgKiBjZGVmIF9yZXBseV91c2Vy ZGF0YXMgPSBkaWN0KCkKLSAgKiAKLSAgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBk YXRhKToKLSAgKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKLSAgKi8KLS0gIF9fcHl4X3RfNCA9 IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKF9fcHl4X3RfNywgX19weXhfbl9zX1JlcGx5VXNlckRhdGEs IF9fcHl4X3R1cGxlX18yNywgX19weXhfdF82LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3Rf NCA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKF9fcHl4X3RfNywgX19weXhfbl9zX1JlcGx5VXNlckRh dGEsIF9fcHl4X3R1cGxlX18yNywgX19weXhfdF82LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzQ4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzQpOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4 X25fc19SZXBseVVzZXJEYXRhLCBfX3B5eF90XzQpIDwgMCkgX19QWVhfRVJSKDAsIDM0NiwgX19w eXhfTDFfZXJyb3IpCi0rICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX1Jl cGx5VXNlckRhdGEsIF9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ4LCBfX3B5eF9MMV9l cnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19w eXhfdF83KTsgX19weXhfdF83ID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0MTEKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MTMKLSAg KiAgICAgIyAgICAgICAgIG1wdl9yZXN1bWUoc2VsZi5fY3R4KQotICAqIAotICAqICAgICBAX2Vy cm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgIGRlZiByZXF1ZXN0X2V2 ZW50KHNlbGYsIGV2ZW50LCBlbmFibGUpOgotICAqICAgICAgICAgIiIiRW5hYmxlIG9yIGRpc2Fi bGUgYSBnaXZlbiBldmVudC4KLSAgKi8KLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgNDExLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgNDEzLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQxMgotKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQxNAotICAqIAotICAqICAgICBAX2Vy cm9ycwotICAqICAgICBkZWYgcmVxdWVzdF9ldmVudChzZWxmLCBldmVudCwgZW5hYmxlKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgIiIiRW5hYmxlIG9yIGRpc2Fi bGUgYSBnaXZlbiBldmVudC4KLSAgKiAKLSAgKi8KLS0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9f cHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQsIF9fcHl4X25fc19yZXF1ZXN0X2V2ZW50KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE5hbWVJbkNs YXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQsIF9fcHl4X25fc19yZXF1ZXN0X2V2ZW50KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzQpKSBfX1BZWF9FUlIoMCwgNDE0LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzQpOwotICAgX19weXhfdF8xID0gTlVMTDsKLSAgIGlmIChDWVRIT05fVU5QQUNL X01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsKLUBAIC0y NjQ2NSwzMSArMjY0NjUsMzEgQEAgaWYgKCFfX1B5eF9SZWZOYW5ueSkgewotICAgX19weXhfdF83 ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5 eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwg X19weXhfdF80KTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK LSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDExLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlm ICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQxMywgX19weXhfTDFfZXJyb3Ip Ci0gICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYp OyBfX3B5eF90XzYgPSAwOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3Nf cmVxdWVzdF9ldmVudCwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA0MTIsIF9fcHl4X0wx X2Vycm9yKQotKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfcmVxdWVzdF9l dmVudCwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA0MTQsIF9fcHl4X0wxX2Vycm9yKQot ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0gICBQeVR5cGVfTW9k aWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpOwotIAotLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyOQotKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQzMQotICAqICAgICAgICAgcmV0dXJuIGVycgotICAqIAotICAq ICAgICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgIGRlZiBz ZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xldmVsKToKLSAgKiAgICAgICAgICIiIldyYXBzOiBtcHZf cmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKLSAgKi8KLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgNDI5LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgNDMxLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQz MAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzMgotICAqIAotICAqICAg ICBAX2Vycm9ycwotICAqICAgICBkZWYgc2V0X2xvZ19sZXZlbChzZWxmLCBsb2dsZXZlbCk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICIiIldyYXBzOiBtcHZfcmVx dWVzdF9sb2dfbWVzc2FnZXMiIiIKLSAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSAgKi8K LS0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19zZXRfbG9nX2xldmVs KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDMwLCBfX3B5eF9MMV9l cnJvcikKLSsgIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19w eXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19zZXRfbG9n X2xldmVsKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDMyLCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwotICAgX19weXhfdF8xID0g TlVMTDsKLSAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2Rf Q2hlY2soX19weXhfdF82KSkpIHsKLUBAIC0yNjUwNCwzMSArMjY1MDQsMzEgQEAgaWYgKCFfX1B5 eF9SZWZOYW5ueSkgewotICAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVj dF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9i amVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80KTsKLSAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBf X3B5eF90XzQgPSAwOwotLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwg NDI5LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhf RVJSKDAsIDQzMSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsK LSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotLSAgaWYgKFB5RGlj dF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0X2xvZ19sZXZlbCwgX19weXhfdF83KSA8IDAp IF9fUFlYX0VSUigwLCA0MzAsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKFB5RGljdF9TZXRJdGVt KChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50 cF9kaWN0LCBfX3B5eF9uX3Nfc2V0X2xvZ19sZXZlbCwgX19weXhfdF83KSA8IDApIF9fUFlYX0VS UigwLCA0MzIsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9f cHl4X3RfNyA9IDA7Ci0gICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjQ0MAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0MgotICAqICAg ICAgICAgcmV0dXJuIGVycgotICAqIAotICAqICAgICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8Ci0gICogICAgIGRlZiBsb2FkX2NvbmZpZyhzZWxmLCBmaWxlbmFtZSk6Ci0g ICogICAgICAgICAiIiJXcmFwczogbXB2X2xvYWRfY29uZmlnX2ZpbGUiIiIKLSAgKi8KLS0gIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDQwLCBfX3B5eF9MMV9lcnJvcikK LSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3Jz KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDQyLCBfX3B5eF9MMV9l cnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwotIAotLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ0MQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjQ0MwotICAqIAotICAqICAgICBAX2Vycm9ycwotICAqICAgICBkZWYgbG9hZF9jb25maWco c2VsZiwgZmlsZW5hbWUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAg ICAiIiJXcmFwczogbXB2X2xvYWRfY29uZmlnX2ZpbGUiIiIKLSAgKiAgICAgICAgIGFzc2VydCBz ZWxmLl9jdHgKLSAgKi8KLS0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2Jq ZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25f c19sb2FkX2NvbmZpZyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDQ0 MSwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQ eU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCBfX3B5 eF9uX3NfbG9hZF9jb25maWcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigw LCA0NDMsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0gICBf X3B5eF90XzEgPSBOVUxMOwotICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2Vs eShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgewotQEAgLTI2NTQzLDMxICsyNjU0MywzMSBA QCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7Ci0gICBfX3B5eF90XzcgPSAoX19weXhfdF8xKSA/IF9f UHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhfdF80KSA6 IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQpOwotICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotICAgX19QeXhfREVDUkVGKF9f cHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9f UFlYX0VSUigwLCA0NDAsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzcpKSBfX1BZWF9FUlIoMCwgNDQyLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Ci0t ICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19sb2FkX2NvbmZpZywgX19weXhf dF83KSA8IDApIF9fUFlYX0VSUigwLCA0NDEsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKFB5RGlj dF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfbG9hZF9jb25maWcsIF9fcHl4X3RfNykgPCAwKSBf X1BZWF9FUlIoMCwgNDQzLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzcpOyBfX3B5eF90XzcgPSAwOwotICAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo1NzMKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzUK LSAgKiAgICAgICAgIHJldHVybiByZXN1bHQKLSAgKiAKLSAgKiAgICAgQF9lcnJvcnMgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICBkZWYgZ2V0X3Byb3BlcnR5X2FzeW5jKHNl bGYsIHByb3AsIGRhdGE9Tm9uZSk6Ci0gICogICAgICAgICAiIiJHZXRzIHRoZSB2YWx1ZSBvZiBh IHByb3BlcnR5IGFzeW5jaHJvbm91c2x5LgotICAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFs TmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NikpIF9fUFlYX0VSUigwLCA1NzMsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCA1NzUsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTc0Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTc2Ci0gICogCi0gICog ICAgIEBfZXJyb3JzCi0gICogICAgIGRlZiBnZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwg ZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgIiIi R2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBhc3luY2hyb25vdXNseS4KLSAgKiAKLSAgKi8K LS0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19nZXRfcHJvcGVydHlf YXN5bmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4 X0wxX2Vycm9yKQotKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3Qg KilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX2dl dF9wcm9wZXJ0eV9hc3luYyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAs IDU3NiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSAgIF9f cHl4X3RfMSA9IE5VTEw7Ci0gICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5 KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7Ci1AQCAtMjY1ODIsMzEgKzI2NTgyLDMxIEBA IGlmICghX19QeXhfUmVmTmFubnkpIHsKLSAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19Q eXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDog X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Ci0gICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19w eXhfdF80KTsgX19weXhfdF80ID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19Q WVhfRVJSKDAsIDU3MywgX19weXhfTDFfZXJyb3IpCi0rICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NykpIF9fUFlYX0VSUigwLCA1NzUsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNyk7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0g IGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX2dldF9wcm9wZXJ0eV9hc3luYywg X19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYg KFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5X2FzeW5jLCBfX3B5 eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDU3NiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9E RUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLSAgIFB5VHlwZV9Nb2RpZmllZChfX3B5 eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7Ci0gCi0tICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjM1Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjM3Ci0gICogICAgICAgICByZXR1cm4gdgotICAqIAotICAqICAgICBAX2Vycm9y cyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgIGRlZiBzZXRfcHJvcGVydHko c2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSwgYXN5bmNocm9ub3VzPUZhbHNlLCBkYXRhPU5vbmUpOgot ICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfcHJvcGVydHkgYW5kIG1wdl9zZXRfcHJvcGVy dHlfYXN5bmMiIiIKLSAgKi8KLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82 LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgNjM1LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgNjM3LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzNgotKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzOAotICAqIAotICAqICAgICBAX2Vycm9ycwot ICAqICAgICBkZWYgc2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIHZhbHVlPVRydWUsIGFzeW5jaHJv bm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAq ICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfcHJvcGVydHkgYW5kIG1wdl9zZXRfcHJvcGVydHlf YXN5bmMiIiIKLSAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSAgKi8KLS0gIF9fUHl4X0dl dE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19zZXRfcHJvcGVydHkpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2MzYsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19Q eXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3NldF9wcm9wZXJ0eSk7IGlmICh1 bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDYzOCwgX19weXhfTDFfZXJyb3IpCi0g ICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSAgIF9fcHl4X3RfMSA9IE5VTEw7Ci0gICBpZiAo Q1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3Rf NikpKSB7Ci1AQCAtMjY2MjEsMzEgKzI2NjIxLDMxIEBAIGlmICghX19QeXhfUmVmTmFubnkpIHsK LSAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsK LS0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDYzNSwgX19weXhfTDFf ZXJyb3IpCi0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA2MzcsIF9f cHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0gICBfX1B5eF9ERUNS RUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0gIGlmIChQeURpY3RfU2V0SXRlbSgoUHlP YmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGlj dCwgX19weXhfbl9zX3NldF9wcm9wZXJ0eSwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2 MzYsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9f cHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9u X3Nfc2V0X3Byb3BlcnR5LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDYzOCwgX19weXhf TDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLSAg IFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjczCi0rICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njc1Ci0gICogICAgICAgICByZXR1cm4gZXJy Ci0gICogCi0gICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAg KiAgICAgZGVmIHNldF9vcHRpb24oc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSk6Ci0gICogICAgICAg ICAiIiJXcmFwczogbXB2X3NldF9vcHRpb24iIiIKLSAgKi8KLS0gIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgNjczLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNjc1LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjY3NAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3NgotICAqIAot ICAqICAgICBAX2Vycm9ycwotICAqICAgICBkZWYgc2V0X29wdGlvbihzZWxmLCBwcm9wLCB2YWx1 ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgIiIiV3Jh cHM6IG1wdl9zZXRfb3B0aW9uIiIiCi0gICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Ci0gICov Ci0tICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCBfX3B5eF9uX3Nfc2V0X29wdGlvbik7 IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDY3NCwgX19weXhfTDFfZXJy b3IpCi0rICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCBfX3B5eF9uX3Nfc2V0X29wdGlv bik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDY3NiwgX19weXhfTDFf ZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSAgIF9fcHl4X3RfMSA9IE5VTEw7 Ci0gICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNr KF9fcHl4X3RfNikpKSB7Ci1AQCAtMjY2NjAsMzEgKzI2NjYwLDMxIEBAIGlmICghX19QeXhfUmVm TmFubnkpIHsKLSAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2Fs bDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhf dF80ID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDY3Mywg X19weXhfTDFfZXJyb3IpCi0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigw LCA2NzUsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0gICBf X1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0gIGlmIChQeURpY3RfU2V0 SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dC0+dHBfZGljdCwgX19weXhfbl9zX3NldF9vcHRpb24sIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9F UlIoMCwgNjc0LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmpl Y3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwg X19weXhfbl9zX3NldF9vcHRpb24sIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNjc2LCBf X3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAw OwotICAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2OTUKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2OTcKLSAgKiAgICAgICAgIHJldHVy biBlcnIKLSAgKiAKLSAgKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAotICAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKToKLSAgKiAgICAgICAgICIiIldyYXBzOiBt cHZfaW5pdGlhbGl6ZSIiIgotICAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5 eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCA2OTUsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA2OTcsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNik7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njk2Ci0rICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njk4Ci0gICogCi0gICogICAgIEBfZXJy b3JzCi0gICogICAgIGRlZiBpbml0aWFsaXplKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0gICogICAgICAgICAiIiJXcmFwczogbXB2X2luaXRpYWxpemUiIiIKLSAgKiAgICAg ICAgIGFzc2VydCBzZWxmLl9jdHgKLSAgKi8KLS0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQsIF9fcHl4X25fc19pbml0aWFsaXplKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgNjk2LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9f cHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQsIF9fcHl4X25fc19pbml0aWFsaXplKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBf X1BZWF9FUlIoMCwgNjk4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzQpOwotICAgX19weXhfdF8xID0gTlVMTDsKLSAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMg JiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsKLUBAIC0yNjY5OSwzMSAr MjY2OTksMzEgQEAgaWYgKCFfX1B5eF9SZWZOYW5ueSkgewotICAgX19weXhfdF83ID0gKF9fcHl4 X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9f cHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80 KTsKLSAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwotLSAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMCwgNjk1LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmICh1bmxpa2Vs eSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDY5NywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5 eF9HT1RSRUYoX19weXhfdF83KTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfaW5pdGlhbGl6 ZSwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2OTYsIF9fcHl4X0wxX2Vycm9yKQotKyAg aWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfaW5pdGlhbGl6ZSwgX19weXhfdF83 KSA8IDApIF9fUFlYX0VSUigwLCA2OTgsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0gICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpOwotIAotLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjc0OAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjc1MAotICAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zdGFydCgpCi0gICogCi0g ICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgZGVm IG9ic2VydmVfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGF0YT1Ob25lKToKLSAgKiAgICAgICAgICIi IldyYXBzOiBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eSIiIgotICAqLwotLSAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCA3NDgsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA3NTAsIF9fcHl4X0wxX2Vycm9yKQotICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NzQ5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzUxCi0gICog Ci0gICogICAgIEBfZXJyb3JzCi0gICogICAgIGRlZiBvYnNlcnZlX3Byb3BlcnR5KHNlbGYsIHBy b3AsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAg ICIiIldyYXBzOiBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eSIiIgotICAqICAgICAgICAgYXNzZXJ0IHNl bGYuX2N0eAotICAqLwotLSAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmpl Y3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9z X29ic2VydmVfcHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigw LCA3NDksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80 LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwg X19weXhfbl9zX29ic2VydmVfcHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9f UFlYX0VSUigwLCA3NTEsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NCk7Ci0gICBfX3B5eF90XzEgPSBOVUxMOwotICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAm JiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgewotQEAgLTI2NzM4LDMxICsy NjczOCwzMSBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7Ci0gICBfX3B5eF90XzcgPSAoX19weXhf dF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19w eXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQp OwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNykpIF9fUFlYX0VSUigwLCA3NDgsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNzUwLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzcpOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3Rf NiA9IDA7Ci0tICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19vYnNlcnZlX3By b3BlcnR5LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDc0OSwgX19weXhfTDFfZXJyb3Ip Ci0rICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19vYnNlcnZlX3Byb3BlcnR5 LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDc1MSwgX19weXhfTDFfZXJyb3IpCi0gICBf X1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLSAgIFB5VHlwZV9Nb2RpZmll ZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7Ci0gCi0tICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzcwCi0rICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzcyCi0gICogICAgICAgICByZXR1cm4gZXJyCi0gICogCi0gICogICAg IEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgZGVmIHVub2Jz ZXJ2ZV9wcm9wZXJ0eShzZWxmLCBkYXRhKToKLSAgKiAgICAgICAgICIiIldyYXBzOiBtcHZfdW5v YnNlcnZlX3Byb3BlcnR5IiIiCi0gICovCi0tICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9f cHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDc3MCwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxO YW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDc3MiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzEKLSsg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzMKLSAgKiAKLSAgKiAgICAgQF9l cnJvcnMKLSAgKiAgICAgZGVmIHVub2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBkYXRhKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl91bm9ic2Vy dmVfcHJvcGVydHkiIiIKLSAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKLSAgKi8KLS0gIF9f UHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc191bm9ic2VydmVfcHJvcGVydHkp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NzEsIF9fcHl4X0wxX2Vy cm9yKQotKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5 eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3Vub2JzZXJ2 ZV9wcm9wZXJ0eSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc3Mywg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSAgIF9fcHl4X3Rf MSA9IE5VTEw7Ci0gICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0 aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7Ci1AQCAtMjY3NzcsNTQgKzI2Nzc3LDU0IEBAIGlmICgh X19QeXhfUmVmTmFubnkpIHsKLSAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlP YmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Ci0gICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJS KDAsIDc3MCwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9f UFlYX0VSUigwLCA3NzIsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nyk7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0gIGlmIChQ eURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3Vub2JzZXJ2ZV9wcm9wZXJ0eSwgX19weXhf dF83KSA8IDApIF9fUFlYX0VSUigwLCA3NzEsIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKFB5RGlj dF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfdW5vYnNlcnZlX3Byb3BlcnR5LCBfX3B5eF90Xzcp IDwgMCkgX19QWVhfRVJSKDAsIDc3MywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYo X19weXhfdF83KTsgX19weXhfdF83ID0gMDsKLSAgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTM4Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTQwCi0gICogCi0gICogY2RlZiBjbGFzcyBSZW5kZXJDb250ZXh0KG9iamVjdCk6Ci0gICog ICAgIEFQSV9PUEVOR0wgPSAib3BlbmdsIiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0g ICogICAgIFVQREFURV9GUkFNRSA9IE1QVl9SRU5ERVJfVVBEQVRFX0ZSQU1FCi0gICogCi0gICov Ci0tICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X1JlbmRlckNvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19BUElfT1BFTkdM LCBfX3B5eF9uX3Nfb3BlbmdsKSA8IDApIF9fUFlYX0VSUigwLCA5MzgsIF9fcHl4X0wxX2Vycm9y KQotKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfQVBJX09QRU5H TCwgX19weXhfbl9zX29wZW5nbCkgPCAwKSBfX1BZWF9FUlIoMCwgOTQwLCBfX3B5eF9MMV9lcnJv cikKLSAgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyQ29udGV4dCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTM5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTQxCi0gICogY2RlZiBj bGFzcyBSZW5kZXJDb250ZXh0KG9iamVjdCk6Ci0gICogICAgIEFQSV9PUEVOR0wgPSAib3Blbmds IgotICAqICAgICBVUERBVEVfRlJBTUUgPSBNUFZfUkVOREVSX1VQREFURV9GUkFNRSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogCi0gICogICAgIGNkZWY6Ci0gICovCi0tICBfX3B5 eF90XzcgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9yZW5kZXJfdXBkYXRlX2ZsYWcoTVBW X1JFTkRFUl9VUERBVEVfRlJBTUUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VS UigwLCA5MzksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKE1QVl9SRU5ERVJfVVBEQVRFX0ZSQU1FKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgOTQxLCBfX3B5eF9MMV9lcnJv cikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQ eU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0 LT50cF9kaWN0LCBfX3B5eF9uX3NfVVBEQVRFX0ZSQU1FLCBfX3B5eF90XzcpIDwgMCkgX19QWVhf RVJSKDAsIDkzOSwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2Jq ZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQtPnRw X2RpY3QsIF9fcHl4X25fc19VUERBVEVfRlJBTUUsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIo MCwgOTQxLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5 eF90XzcgPSAwOwotICAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJDb250ZXh0KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDA5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAxMQot ICAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCi0gICogCi0gICogICAgIEBfZXJyb3JzICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgZGVmIHNldF9pY2NfcHJvZmlsZShz ZWxmLCBpY2NfYmxvYik6Ci0gICogICAgICAgICBjZGVmOgotICAqLwotLSAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDA5LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTAxMSwgX19weXhfTDFfZXJyb3IpCi0g ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDEwCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAx MgotICAqIAotICAqICAgICBAX2Vycm9ycwotICAqICAgICBkZWYgc2V0X2ljY19wcm9maWxlKHNl bGYsIGljY19ibG9iKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAg Y2RlZjoKLSAgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX3BhcmFtIHBhcmFtCi0gICovCi0tICBf X1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LCBfX3B5eF9uX3Nfc2V0X2ljY19wcm9m aWxlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAxMCwgX19weXhf TDFfZXJyb3IpCi0rICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAq KV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LCBfX3B5eF9u X3Nfc2V0X2ljY19wcm9maWxlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIo MCwgMTAxMiwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKLSAg IF9fcHl4X3RfMSA9IE5VTEw7Ci0gICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlr ZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7Ci1AQCAtMjY4MzksMzEgKzI2ODM5LDMx IEBAIGlmICghX19QeXhfUmVmTmFubnkpIHsKLSAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8g X19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQp IDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Ci0gICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gICBfX1B5eF9ERUNSRUYo X19weXhfdF80KTsgX19weXhfdF80ID0gMDsKLS0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkg X19QWVhfRVJSKDAsIDEwMDksIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMCwgMTAxMSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RS RUYoX19weXhfdF83KTsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0X2ljY19w cm9maWxlLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDEwMTAsIF9fcHl4X0wxX2Vycm9y KQotKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0X2ljY19w cm9maWxlLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDEwMTIsIF9fcHl4X0wxX2Vycm9y KQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Ci0gICBQeVR5cGVf TW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQp OwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjgKLSsgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDMwCi0gICogICAgICAgICByZXR1cm4gZXJy Ci0gICogCi0gICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAg KiAgICAgZGVmIHNldF9hbWJpZW50X2xpZ2h0KHNlbGYsIGx1eCk6Ci0gICogICAgICAgICBjZGVm OgotICAqLwotLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25f c19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDI4LCBf X3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBf X3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg MTAzMCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSAKLS0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI5Ci0rICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTAzMQotICAqIAotICAqICAgICBAX2Vycm9ycwotICAqICAg ICBkZWYgc2V0X2FtYmllbnRfbGlnaHQoc2VsZiwgbHV4KTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAotICAqICAgICAgICAgY2RlZjoKLSAgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX3Bh cmFtIHBhcmFtCi0gICovCi0tICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9i amVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LCBf X3B5eF9uX3Nfc2V0X2FtYmllbnRfbGlnaHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9f UFlYX0VSUigwLCAxMDI5LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dldE5hbWVJbkNsYXNz KF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X1JlbmRlckNvbnRleHQsIF9fcHl4X25fc19zZXRfYW1iaWVudF9saWdodCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwMzEsIF9fcHl4X0wxX2Vycm9yKQotICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0gICBfX3B5eF90XzEgPSBOVUxMOwotICAgaWYgKENZVEhP Tl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkg ewotQEAgLTI2ODc4LDMxICsyNjg3OCwzMSBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7Ci0gICBf X3B5eF90XzcgPSAoX19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzYsIF9fcHl4X3RfMSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfdF82LCBfX3B5eF90XzQpOwotICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Ci0tICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMDI4LCBfX3B5eF9MMV9lcnJv cikKLSsgIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEwMzAsIF9fcHl4 X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Ci0gICBfX1B5eF9ERUNSRUYo X19weXhfdF82KTsgX19weXhfdF82ID0gMDsKLS0gIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmpl Y3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dC0+dHBf ZGljdCwgX19weXhfbl9zX3NldF9hbWJpZW50X2xpZ2h0LCBfX3B5eF90XzcpIDwgMCkgX19QWVhf RVJSKDAsIDEwMjksIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9i amVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50 cF9kaWN0LCBfX3B5eF9uX3Nfc2V0X2FtYmllbnRfbGlnaHQsIF9fcHl4X3RfNykgPCAwKSBfX1BZ WF9FUlIoMCwgMTAzMSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF83 KTsgX19weXhfdF83ID0gMDsKLSAgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTA2OAotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwNzAKLSAgKiAgICAgICAgIHJldHVybiByZXQKLSAgKiAKLSAgKiAgICAgQF9lcnJvcnMgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICBkZWYgcmVuZGVyKHNlbGYsCi0gICog ICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLAotICAqLwotLSAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDY4LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fUHl4X0dl dE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTA3MCwgX19weXhfTDFfZXJyb3IpCi0gICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDY5Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MQot ICAqIAotICAqICAgICBAX2Vycm9ycwotICAqICAgICBkZWYgcmVuZGVyKHNlbGYsICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUs Ci0gICogICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAotICAqLwotLSAgX19QeXhfR2V0TmFt ZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgX19weXhfbl9zX3JlbmRlcik7IGlmICh1bmxpa2VseSgh X19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwNjksIF9fcHl4X0wxX2Vycm9yKQotKyAgX19QeXhf R2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgX19weXhfbl9zX3JlbmRlcik7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwNzEsIF9fcHl4X0wxX2Vycm9yKQotICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0gICBfX3B5eF90XzEgPSBOVUxMOwotICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYp KSkgewotQEAgLTI2OTE3LDExNCArMjY5MTcsMTE0IEBAIGlmICghX19QeXhfUmVmTmFubnkpIHsK LSAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Ci0gICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7Ci0gICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsK LS0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEwNjgsIF9fcHl4X0wx X2Vycm9yKQotKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMTA3MCwg X19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKLSAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwotLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQ eU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0 LT50cF9kaWN0LCBfX3B5eF9uX3NfcmVuZGVyLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAs IDEwNjksIF9fcHl4X0wxX2Vycm9yKQotKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAq KV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0 LCBfX3B5eF9uX3NfcmVuZGVyLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDEwNzEsIF9f cHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7 Ci0gICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Jl bmRlckNvbnRleHQpOwotIAotLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx MzIKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTM0Ci0gICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfcGFyYW1zLCAqYXJncywgKiprd2FyZ3MpCi0g ICogCi0gICogY2xhc3MgQ2FsbGJhY2tUaHJlYWQoVGhyZWFkKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAotICAqICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICogICAgICAgICBUaHJl YWQuX19pbml0X18oc2VsZikKLSAgKi8KLS0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF83LCBfX3B5eF9uX3NfVGhyZWFkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZ WF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJyb3IpCi0rICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxO YW1lKF9fcHl4X3RfNywgX19weXhfbl9zX1RocmVhZCk7IGlmICh1bmxpa2VseSghX19weXhfdF83 KSkgX19QWVhfRVJSKDAsIDExMzQsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNyk7Ci0tICBfX3B5eF90XzYgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90 XzYgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgMTEzNCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKLSAg IF9fUHl4X0dJVkVSRUYoX19weXhfdF83KTsKLSAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF82 LCAwLCBfX3B5eF90XzcpOwotICAgX19weXhfdF83ID0gMDsKLS0gIF9fcHl4X3RfNyA9IF9fUHl4 X0NhbGN1bGF0ZU1ldGFjbGFzcyhOVUxMLCBfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNykpIF9fUFlYX0VSUigwLCAxMTMyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfNyA9 IF9fUHl4X0NhbGN1bGF0ZU1ldGFjbGFzcyhOVUxMLCBfX3B5eF90XzYpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMTM0LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzcpOwotLSAgX19weXhfdF80ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJl cGFyZShfX3B5eF90XzcsIF9fcHl4X3RfNiwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkLCBfX3B5 eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0 dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80 KSkgX19QWVhfRVJSKDAsIDExMzIsIF9fcHl4X0wxX2Vycm9yKQotKyAgX19weXhfdF80ID0gX19Q eXhfUHkzTWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzcsIF9fcHl4X3RfNiwgX19weXhfbl9zX0Nh bGxiYWNrVGhyZWFkLCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIChQeU9iamVjdCAqKSBOVUxM LCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1 bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDExMzQsIF9fcHl4X0wxX2Vycm9yKQot ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTEzMwotKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx MzUKLSAgKiAKLSAgKiBjbGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOgotICAqICAgICBkZWYg X19pbml0X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAg IFRocmVhZC5fX2luaXRfXyhzZWxmKQotICAqICAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCi0g ICovCi0tICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8xX19pbml0X18sIDAsIF9fcHl4X25f c19DYWxsYmFja1RocmVhZF9fX2luaXQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19t cHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18zNSkpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTMzLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9f cHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzFfX2luaXRfXywgMCwgX19weXhfbl9zX0NhbGxiYWNr VGhyZWFkX19faW5pdCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhf ZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzM1KSk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDExMzUsIF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7Ci0tICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5 eF9uX3NfaW5pdCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTMzLCBfX3B5eF9MMV9l cnJvcikKLSsgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19p bml0LCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDExMzUsIF9fcHl4X0wxX2Vycm9yKQot ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Ci0gCi0tICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQotKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExNDMKLSAgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IEZhbHNlCi0g ICogCi0gICogICAgIGRlZiBzaHV0ZG93bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAotICAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gVHJ1ZQotICAqICAgICAgICAgc2Vs Zi5jYWxsYmFjayA9IE5vbmUKLSAgKi8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25f TmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzNz aHV0ZG93biwgMCwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX3NodXRkb3duLCBOVUxMLCBfX3B5 eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29k ZW9ial9fMzcpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE0MSwg X19weXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19w eXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8zc2h1dGRvd24s IDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9zaHV0ZG93biwgTlVMTCwgX19weXhfbl9zX3Zp ZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzM3 KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNDMsIF9fcHl4X0wx X2Vycm9yKQotICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Ci0tICBpZiAoX19QeXhfU2V0TmFt ZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9fcHl4X3RfMSkgPCAwKSBf X1BZWF9FUlIoMCwgMTE0MSwgX19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9fcHl4X3RfMSkgPCAwKSBfX1BZ WF9FUlIoMCwgMTE0MywgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMTQ2Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0OAotICAqICAg ICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQotICAqIAotICAqICAgICBkZWYgY2FsbChzZWxmKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAotICAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVh c2UoKQotICAqIAotICAqLwotLSAgX19weXhfdF8xID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9f cHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNWNhbGwsIDAs IF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9jYWxsLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVy X2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMzkpKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE0NiwgX19weXhfTDFfZXJyb3Ip Ci0rICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF81Y2FsbCwgMCwgX19weXhfbl9zX0NhbGxi YWNrVGhyZWFkX2NhbGwsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4 X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18zOSkpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAxMTQ4LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19w eXhfbl9zX2NhbGwsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE0NiwgX19weXhfTDFf ZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3Nf Y2FsbCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTQ4LCBfX3B5eF9MMV9lcnJvcikK LSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwotIAotLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDkKLSsgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTUxCi0gICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCi0gICog Ci0gICogICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8Ci0gICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKLSAgKiAKLSAgKi8K LS0gIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzdzZXQsIDAsIF9fcHl4X25fc19DYWxsYmFj a1RocmVhZF9zZXQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2Qs ICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX180MSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9IF9f UHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENh bGxiYWNrVGhyZWFkXzdzZXQsIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9zZXQsIE5VTEws IF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5 eF9jb2Rlb2JqX180MSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAx MTUxLCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX3NldCwgX19weXhfdF8x KSA8IDApIF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChfX1B5eF9T ZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19zZXQsIF9fcHl4X3RfMSkgPCAwKSBf X1BZWF9FUlIoMCwgMTE1MSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTUyCi0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1NAotICAq ICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCi0gICogCi0gICogICAgIGRlZiBydW4o c2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKLSAgKiAgICAgICAgIHdoaWxlIG5v dCBzZWxmLmlzc2h1dGRvd246Ci0gICogICAgICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoVHJ1 ZSkKLSAgKi8KLS0gIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzlydW4sIDAsIF9fcHl4X25f c19DYWxsYmFja1RocmVhZF9ydW4sIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYs IF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX180MykpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTUyLCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4 X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNENhbGxiYWNrVGhyZWFkXzlydW4sIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9y dW4sIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmpl Y3QgKilfX3B5eF9jb2Rlb2JqX180MykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAxMTU0LCBfX3B5eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OwotLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX3J1biwg X19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTUyLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19ydW4sIF9fcHl4X3Rf MSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE1NCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKLSAKLS0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTU3Ci0rICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTE1OQotICAqICAgICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNrKHNlbGYuY2FsbGJhY2spIGlm IHNlbGYuY2FsbGJhY2sgZWxzZSBOb25lCi0gICogCi0gICogICAgIGRlZiBtcHZfY2FsbGJhY2so c2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Ci0gICogICAgICAg ICB0cnk6Ci0gICogICAgICAgICAgICAgY2FsbGJhY2soKQotICAqLwotLSAgX19weXhfdF8xID0g X19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0 Q2FsbGJhY2tUaHJlYWRfMTFtcHZfY2FsbGJhY2ssIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVh ZF9tcHZfY2FsbGJhY2ssIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4 X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX180NSkpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MMV9lcnJvcikKLSsgIF9fcHl4X3RfMSA9 IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NENhbGxiYWNrVGhyZWFkXzExbXB2X2NhbGxiYWNrLCAwLCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJl YWRfbXB2X2NhbGxiYWNrLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5 eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fNDUpKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE1OSwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKLS0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9f cHl4X25fc19tcHZfY2FsbGJhY2ssIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE1Nywg X19weXhfTDFfZXJyb3IpCi0rICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCBf X3B5eF9uX3NfbXB2X2NhbGxiYWNrLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDExNTks IF9fcHl4X0wxX2Vycm9yKQotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9 IDA7Ci0gCi0tICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMgotKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzQKLSAgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW5pdF9wYXJhbXMsICphcmdzLCAqKmt3YXJncykKLSAgKiAKLSAgKiBj bGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 Ci0gICogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgKiAgICAgICAgIFRocmVhZC5fX2luaXRf XyhzZWxmKQotICAqLwotLSAgX19weXhfdF8xID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUoX19weXhf dF83LCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIF9fcHl4X3RfNiwgX19weXhfdF80LCBOVUxM LCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEzMiwgX19w eXhfTDFfZXJyb3IpCi0rICBfX3B5eF90XzEgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZShfX3B5eF90 XzcsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfdF82LCBfX3B5eF90XzQsIE5VTEws IDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTM0LCBfX3B5 eF9MMV9lcnJvcikKLSAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwotLSAgaWYgKFB5RGljdF9T ZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfdF8xKSA8IDAp IF9fUFlYX0VSUigwLCAxMTMyLCBfX3B5eF9MMV9lcnJvcikKLSsgIGlmIChQeURpY3RfU2V0SXRl bShfX3B5eF9kLCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZ WF9FUlIoMCwgMTEzNCwgX19weXhfTDFfZXJyb3IpCi0gICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKLSAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQg PSAwOwotICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CiBkaWZmIC0t Z2l0IGEvdmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCBiL3ZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgKIGluZGV4IDhhZjJkY2M3Li4xZGVjZGRhOCAxMDA2NDQKIC0tLSBhL3ZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvdmlkY3V0dGVyL3RlbXBs YXRlIGIvc3JjcGtncy92aWRjdXR0ZXIvdGVtcGxhdGUKaW5kZXggOTNlNmRiZWZhYWNjLi42ZWRk YzEzNDVlYzEgMTAwNjQ0Ci0tLSBhL3NyY3BrZ3MvdmlkY3V0dGVyL3RlbXBsYXRlCisrKyBiL3Ny Y3BrZ3MvdmlkY3V0dGVyL3RlbXBsYXRlCkBAIC0xMSw5ICsxMSwxNSBAQCBzaG9ydF9kZXNjPSJW aWRlbyBjdXR0ZXIgYW5kIGpvaW5lciBiYXNlZCBvbiBGRm1wZWciCiBtYWludGFpbmVyPSJPcnBo YW5lZCA8b3JwaGFuQHZvaWRsaW51eC5vcmc+IgogbGljZW5zZT0iR1BMLTMuMC1vci1sYXRlciIK IGhvbWVwYWdlPSJodHRwczovL2dpdGh1Yi5jb20vb3ptYXJ0aWFuL3ZpZGN1dHRlciIKLWRpc3Rm aWxlcz0iaHR0cHM6Ly9naXRodWIuY29tL296bWFydGlhbi92aWRjdXR0ZXIvYXJjaGl2ZS9yZWZz L3RhZ3MvJHt2ZXJzaW9ufS50YXIuZ3oiCi1jaGVja3N1bT1jNjM3NGVhZWRiODQ1ZjllNTgwZTU1 NWRkMTJjMWRiMWNmMmZmYTI4ZDM3NTZiMDhlMmFlMjhjMWE0Y2Q0YTk2CisjIHB5bXB2IGlzbid0 IHBhY2thZ2VkIGJlY2F1c2UgaXQgd2lsbCBjcmVhdGUgYSBwYWNrYWdlIGNvbmZsaWN0cyB3aXRo CisjIHB5dGhvbjMtbXB2CitkaXN0ZmlsZXM9Imh0dHBzOi8vZ2l0aHViLmNvbS9vem1hcnRpYW4v dmlkY3V0dGVyL2FyY2hpdmUvcmVmcy90YWdzLyR7dmVyc2lvbn0udGFyLmd6CisgaHR0cHM6Ly9n aXRodWIuY29tL21hcmNhbi9weW1wdi9hcmNoaXZlL3JlZnMvdGFncy92MC43LjEudGFyLmd6Igor Y2hlY2tzdW09ImM2Mzc0ZWFlZGI4NDVmOWU1ODBlNTU1ZGQxMmMxZGIxY2YyZmZhMjhkMzc1NmIw OGUyYWUyOGMxYTRjZDRhOTYKKyAxZDI2MmU3ZmIyNTMxZDI3NjMzYmRjMjMzNGZiYzFjM2NlMDk0 NDU3YTZhOGYzY2ZjMWM2Yzk3OTljMWVmMjAyIgogCi1wcmVfYnVpbGQoKSB7Ci0Jcm0gLWYgdmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LmMKK3Bvc3RfZXh0cmFjdCgpIHsKKwltdiB2aWRjdXR0ZXIt Ki8qIC4KKwlybSAtcmYgdmlkY3V0dGVyL2xpYnMvcHltcHYKKwltdiBweW1wdi0qIHZpZGN1dHRl ci9saWJzL3B5bXB2CiB9Cg== --===============1028639451498081407==--